Guide
Required setup instructions
Environments
Local Setup
The local setup is only intended for testing or development purposes.
This is intended to show how you can run a validator on your local machine, which is only for testing and development purposes. This also means that signatures from local validators are only able to be accessed by locally ran relayers.
For running a validator in a production environment, see the AWS setup guide.
Create a hexadecimal key for your validator to sign with
Hexadecimal keysCreate a local directory for your validator's signatures
When running a validator locally, your validator will write its signatures to a local directory. This directory can be named whatever you like, just remember to use this directory when setting your Configuration.
Production Setup
For running a validator in a production environment, see the AWS setup guide.
AWS setupConfiguration
Take a look at the Agent configuration page and the Configuration reference for a full list of configuration possibilities. The list below is not complete, however it should be enough to get started.
Your validator takes arguments and environment variables as configuration. See below for both the general configurations and those that are specific to the setup instructions you followed.
--reorgPeriod
The number of block confirmations a validator should wait before signing the Mailbox
merkle root. Note that signing a root that is later invalidated (i.e. due to a re-org) is considered fraudulent behavior and will eventually be slashable.
See Latencies
--originChainName
The name of the chain being validated (e.g. ethereum
)
--chains.[origin chain name].connection.url
--db
The path to where the validator should write persistent data to disk. Ensure this path to be persistent when using cloud setups. When using Docker, make sure to mount the persistent path/volume into the container. See Configuration referencefor more info
CONFIG_FILES
Setup-specific configuration
These required environment variables differ based on which of the Environments you set up.
These are required for the Local Setup.
--validator.key
Your validator's private key, which is used to sign merkle roots.
--chains.${localchainname}.signer.key
Your validator's private key, which will be used to submit a transaction on chain that publicly announce your validator's checkpoint syncer.
--checkpointSyncer.type
Set to localStorage
.
--checkpointSyncer.path
The path to your local directory where validator signatures will be written. This should be the value of $MY_VALIDATOR_SIGNATURES_DIRECTORY
from the Local Setup.
Example: --checkpointSyncer.path='/tmp/hyperlane-validator-signatures-ethereum'
Note that relayers must be configured with
--allowLocalCheckpointSyncers
to be able to read signatures from this validator.
Installation
The recommended installation method for a production environment is using a Docker image.
Start Validating
Running multiple validators
We encourage folks to validate on as many chains as they are interested in supporting. We recommend that resources are not shared between validator instances.
Running the binary
Refer to the Installation instructions to access the validator binary.
Configuration can be placed in a validator.env
file, for example:
To run the validator binary with the environment variables specified in validator.env
:
Find the latest Docker image and set it to the environment variable $DOCKER_IMAGE
.
Using the --env-file
flag, we can pass in the environment variables to the validator:
If you're running with a Local Setup validator on the same machine, which requires a locally ran relayer to be able to access these validator signatures, be sure to mount your local validator's signature directory on your host machine into your Docker container.
For example, if your local validator is writing signatures to /tmp/hyperlane-validator-signatures-ethereum
, you should mount a directory for the Docker container. This is the same directory set in the $HYP_BASE_CHECKPOINTSYNCER_PATH
environment variable.
If the command below fails with docker: invalid reference format
, the whitespaces may have been malformed and you should remove them from the command.
If everything is configured correctly, you should see json files being written to your S3 bucket (if you followed the AWS setup) or to your local signatures directory (if you followed the Local Setup). New json files get written every time a new outbound message is inserted into the Mailbox.
Announcing your validator
Relayers need to know where to find your validator's signatures. Your validator will automatically attempt to announce itself by writing to the ValidatorAnnounce
contract on the chain that you're validating.
To do this, your validator must have a small amount of tokens to pay for the gas for this transaction.
If your validator has not yet announced itself, and does not have enough tokens to pay for gas, it will log a message specifying how many tokens are needed.
Last updated