Announcing your validator
Announcing information about your validator
Relayers need to know where to find your validator's signatures. You can make relayers aware of your validator by writing to the
ValidatorAnnounce
contract on the chain that you're validating.First, find the signed announcement JSON object automatically created by your validator. This is an attestation made by your validator indicating where its signatures can be found.
AWS S3 validators
Local validators
- 1.Navigate to your S3 bucket in the AWS console.
- 2.Select the
announcement.json
object. - 3.Click on "Object URL"
cat $MY_VALIDATOR_SIGNATURES_DIRECTORY/announcement.json
Your signed
announcement.json
should look something like this. Local validators will have a storage_location
prefixed with file://
.{
"value": {
"validator": "0xf43fbd072fd38e1121d4b3b0b8a35116bbb01ea9",
"mailbox_address": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685",
"mailbox_domain": 5,
"storage_location": "s3://hyperlane-testnet3-goerli-validator-0/us-east-1"
},
"signature": {
"r": "0x2c23ffdc7173019fe2255fddbfa027dc99d5812b7c6595303792efe145c7f2cb",
"s": "0x229da4a683f4785a766cd8fce668741b78acaa7eed95eea9d09b14883de51b83",
"v": 27
},
"serialized_signature": "0x2c23ffdc7173019fe2255fddbfa027dc99d5812b7c6595303792efe145c7f2cb229da4a683f4785a766cd8fce668741b78acaa7eed95eea9d09b14883de51b831b"
}
Now you can submit your signed announcement to the
ValidatorAnnounce
smart contract. Instructions for doing this either with Etherscan or Cast are provided.Etherscan
Cast
- 1.Navigate to the
ValidatorAnnounce
page on etherscan for the chain you're validating. You can find a link in Contract addresses. - 2.Click on the "Contract" tab, and the "Write Contract" button, and click the dropdown on "announce".
- 3.Fill in the
_validator
,_storageLocation
, and_signature
arguments.- 1.Set
_validator
tovalue.validator
from your JSON announcement - 2.Set
_storageLocation
tovalue.storage_location
from your JSON announcement - 3.Set
_signature
to theserialized_signature
from your JSON announcement.- 1.Older validator versions don't have the
serialized_signature
field. If this is the case for your validator, consider upgrading your validator to the latest version, or you may instead specify the concatenation ofsignature.r
,signature.s
, and the hexadecimal representation ofsignature.v
(0x1C
for 28 and0x1B
for 27). Make sure that you remove the0x
prefixes.

Example input
- 4.Click "Write" and submit the transaction.
- 1.Announce your validator by running the following command, filling in the following variables:
- 1.Set
$VALIDATOR_ANNOUNCE_ADDRESS
to the address of theValidatorAnnounce
contract: Contract addresses - 2.Set
$VALIDATOR
tovalue.validator
from your JSON announcement - 3.Set
$STORAGE_LOCATION
tovalue.storage_location
from your JSON announcement - 4.Set
$SIGNATURE
to theserialized_signature
from your JSON announcement.- 1.Older validator versions don't have the
serialized_signature
field. If this is the case for your validator, consider upgrading your validator to the latest version, or you may instead specify the concatenation ofsignature.r
,signature.s
, and the hexadecimal representation ofsignature.v
(0x1C
for 28 and0x1B
for 27). Make sure that you remove the0x
prefixes.
- 5.Set
$RPC_URL
to an RPC URL that can be used to submit transactions - 6.Set
$PRIVATE_KEY
to a hexadecimal private key that can be used to submit transactions
cast send $VALIDATOR_ANNOUNCE_ADDRESS \
"announce(address, string calldata, bytes calldata)(bool)" \
$VALIDATOR $STORAGE_LOCATION $SIGNATURE \
--rpc-url $RPC_URL --private-key $PRIVATE_KEY
Some chains don't support EIP-1559, which is the default transaction mode used by cast. If
cast
gives an error along the lines of custom error: EIP-1559 not activated
, try running the command again with the --legacy
flag.Once you see that your transaction has succeeded, relayers will automatically be made aware of your validator! Your validator is now completely set up.
Last modified 14d ago