CONFIG_FILES

Description: (Env only) List of additional configuration file paths to load in order (such as those in hyperlane-monorepo/rust/main/config). They will be merged first to last, so if both the first one and the last one specify a specific config path, the value set in the last file listed will be used. These files must be accessible within the filesystem your agent has access to. If you’re running in Docker, see the agent configuration guide for tips on mounting your config files into your Docker container. Optional: Yes Agents: All Type: string (Comma separated list of file paths)
# Not supported as an argument

chains

Description: Configuration for each of the chains that must be used by an agent. Optional: No Agents: All Type: Map<string, ChainSetup (Object)> (See chains.* for ChainSetup values)
--chains.${CHAIN_NAME}.*

chains.<chain_name>.name

Description: Name of the domain. Allows specifying a different name for the domain than the chain’s true name. This should almost always be the same as chain_name. Requires: Alignment with domain id if it is a known domain name. Optional: No Agents: All Type: string
--chains.${CHAIN_NAME}.name $DOMAIN_NAME
--chains.ethereum.name ethereum

chains.<chain_name>.domain

Description: Hyperplane domain id to uniquely identify the domain. See also: Domain Identifiers. Requires: Alignment with domain name if it is a known domain. Optional: No Agents: All Type: Numeric (string | number)
--chains.${CHAIN_NAME}.domain $DOMAIN_ID
--chains.ethereum.domain 1

chains.<chain_name>.mailbox

Description: Address of the mailbox contract on the chain. See also contract addresses. Optional: No Agents: All Type: Hash (string)
--chains.${CHAIN_NAME}.mailbox "$MAILBOX_ADDRESS"
--chains.ethereum.mailbox "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70"

chains.<chain_name>.interchainGasPaymaster

Description: Address of the interchain gas paymaster contract on the chain. See also contract addresses. Optional: No Agents: All Type: Hash (string)
--chains.${CHAIN_NAME}.interchainGasPaymaster "$IGP_ADDRESS"
--chains.ethereum.interchainGasPaymaster "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918"

chains.<chain_name>.validatorAnnounce

Description: Address of the validator announce contract on the chain. See also contract addresses. Optional: No Agents: All Type: Hash (string)
--chains.${CHAIN_NAME}.validatorAnnounce "$VALIDATOR_ANNOUNCE_ADDRESS"
--chains.ethereum.validatorAnnounce "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524"

chains.<chain_name>.merkleTreeHook

Description: Address of the merkle tree hook contract on the chain. See also contract addresses. Optional: No Agents: All Type: Hash (string)
--chains.${CHAIN_NAME}.merkleTreeHook "$MERKLE_TREE_HOOK_ADDRESS"
--chains.ethereum.merkleTreeHook "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA"

chains.<chain_name>.signer

Description: The signer that should be used this chain Optional: Yes (Will use defaultsigner if not specified) Agents: All Type: SignerConf (Object)
--chains.${CHAIN_NAME}.signer.*

chains.<chain_name>.signer.type

Description: The type of signer that is defined. A HexKey signer uses a private key, an Aws signer uses an AWS based KMS, and Node assumes the local node will sign RPC calls. Optional: Yes; Defaults to node unless a key is specified in which case it defaults to hexKey Agents: All Type: Enum ("hexKey" | "aws" | "cosmosKey" | "node") Accepted values for the different VMs are:
  • EVM: hexKey (ECDSA) or aws (ECDSA)
  • sealevel: hexKey (ED25519)
  • cosmos: cosmosKey
--chains.${CHAIN_NAME}.signer.type hexKey
--chains.ethereum.signer.type node

chains.<chain_name>.signer.key

Description: A hex key. The hex string of a private key. Requires: chains.<chain_name>.signer.type = "hexKey" | undefined Optional: No (iff requirements are met) Agents: All Type: string
--chains.${CHAIN_NAME}.signer.key "8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61"

chains.<chain_name>.signer.id

Description: The UUID identifying the AWS KMS key Requires: chains.<chain_name>.signer.type = "aws" Optional: No (iff requirements are met) Agents: All Type: string
--chains.ethereum.signer.type "alias/validator-signer-ethereum"

chains.<chain_name>.signer.region

Description: The AWS region Requires: chains.<chain_name>.signer.type = "aws" Optional: No (iff requirements are met) Agents: All Type: string
--chains.${CHAIN_NAME}.signer.region us-east-1

chains.<chain_name>.protocol

Description: Connection protocol to use. Optional: Defaults to "ethereum" Agents: All Type: Enum ("ethereum" | "fuel")
--chains.${CHAIN_NAME}.protocol ethereum
--chains.ethereum.protocol ethereum

chains.<chain_name>.rpcConsensusType

The consensus type currently only applies to EVM chains.Connections to non-EVM chains only support a single RPC url. If more than one RPC url is specified in rpcUrls, only the first one will be used.
Description: How to communicate with the provider
  • "single" uses a basic http connection
  • "fallback" will try the first URL and then automatically “fall back” on a connection or other provider failure to the next provider; this should only retry calls which fail due to the provider and not the call itself such; an insufficient gas error for instance would not fall back.
  • "quorum" requires a majority of the URLs to agree with the exception of submitting transactions; it will automatically coordinate the “latest” block if not specified to reduce sync errors.
Requires: chains.<chain_name>.protocol = "ethereum" | undefined Optional: Defaults to "fallback" Agents: All Type: Enum ("fallback", "single", "quorum")
--chains.${CHAIN_NAME}.rpcConsensusType single

chains.<chain_name>.customRpcUrls

Connections to non-EVM chains only support a single RPC url. If more than one RPC url is specified, only the first one will be used.
Description: Comma-separated URLs to connect the provider to. The difference between customRpcUrls and rpcUrls is that customRpcUrls allows for more user friendly inputs from the CLI or environment variables (comma-separated vs array). Type: string (comma separated list of urls without spaces)
--chains.${CHAIN_NAME}.customrpcurls "$CONNECTION_URLS"
--chains.ethereum.customrpcurls "http://127.0.0.1:8545,http://127.0.0.1:8546,http://127.0.0.1:8547"

chains.<chain_name>.rpcUrls

Connections to non-EVM chains only support a single RPC url. If more than one RPC url is specified, only the first one will be used.
Description: URLs to connect the provider to. The first one is initially used, and on failure the other ones are tried. See rpcConsensusType for more information. Requires:
(chains.<chain_name>.protocol = "ethereum" | undefined)
    AND (chains.<chain_name>.connection.type = "fallback" | "quorum")
    OR chains.<chain_name>.protocol = "cosmos" | "sealevel" | "fuel"
Optional: No (iff requirements are met) Agents: All Type: string
--chains.${CHAIN_NAME}.rpcurls.0.https "$CONNECTION_URL_0"
--chains.${CHAIN_NAME}.rpcurls.1.https "$CONNECTION_URL_1"
--chains.${CHAIN_NAME}.rpcurls.2.https "$CONNECTION_URL_2"
--chains.ethereum.rpcurls.0.https "http://127.0.0.1:8545"
--chains.ethereum.rpcurls.1.https "http://127.0.0.1:8546"
--chains.ethereum.rpcurls.2.https "http://127.0.0.1:8547"

chains.<chain_name>.customGrpcUrls

Connections to Cosmos chains require both RPC and gRPC URLs. There is no rpcConsensusType configuration for Cosmos chains, and gRPC URLs always operate in fallback mode—if the first URL fails, the next one is used.
Description: Comma-separated gRPC URLs used to connect to the provider. Similar to customRpcUrls. Type: string (comma-separated list of URLs without spaces)
--chains.${CHAIN_NAME}.customgrpcurls "$CONNECTION_URLS"
--chains.cosmos.customgrpcurls "http://127.0.0.1:8545,http://127.0.0.1:8546,http://127.0.0.1:8547"

chains.<chain_name>.index.from

Description: Height at which to start indexing contracts. Optional: Defaults to 0 Agents: Relayer & Scraper Type: Numeric (string | number)
--chains.${CHAIN_NAME}.index.from 0
--chains.ethereum.index.from 16271503

chains.<chain_name>.index.chunk

Description: Number of blocks to query at once when indexing contracts. Note that the configured providers must support whatever value is set. The default should work with nearly all providers. Optional: Defaults to 1999 Agents: Relayer & Scraper Type: Numeric (string | number)
--chains.${CHAIN_NAME}.index.chunk 1999
--chains.ethereum.index.chunk 1999

defaultsigner

Because each VM supports a different signer type, the default signer can only support a single VM type. For instance, if the default signer is a ECDSA one, it will only be able to sign on EVM chains.
Description: The default signer that should be used for all chains which did not specify their own. Optional: Yes Agents: All Type: SignerConf (Object)
--defaultSigner.*

defaultsigner.type

Description: The type of signer that is defined. A HexKey signer uses a private key, an Aws signer uses an AWS-based KMS, and Node assumes the local node will sign RPC calls. Optional: Yes; Defaults to node unless a key is specified in which case it defaults to hexKey Agents: All Type: Enum ("hexKey" | "aws" | "cosmosKey" | "node")
--defaultSigner.type hexKey

defaultsigner.key

Description: A hex key. The hex string of a private key. Requires: defaultsigner.type = "hexKey" | undefined Optional: No (iff requirements are met) Agents: All Type: string
--defaultSigner.key "8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61"

defaultsigner.id

Description: The UUID identifying the AWS KMS key Requires: defaultsigner.type = "aws" Optional: No (iff requirements are met) Agents: All Type: string
--defaultSigner.id "alias/validator-signer-ethereum"

defaultsigner.region

Description: The AWS region Requires: defaultsigner.type = "aws" Optional: No (iff requirements are met) Agents: All Type: string
--defaultSigner.region us-east-1

metricsport

Description: Port to expose prometheus metrics on Optional: Defaults to 9090 Agents: All Type: Numeric (string | number)
--metrics-port 9090

log.format

Description: Configuration for the log module. This controls logging. Optional: Defaults to pretty Agents: All Type: Enum ("pretty" | "json" | "full" | "compact")
--log.format pretty

log.level

Description: Configuration for the log module. This controls logging. For full verbosity (including that of dependencies), use dependencyTrace. Optional: Defaults to info Agents: All Type: Enum ("dependencyTrace" | "trace" | "debug" | "info" | "warn" | "error" | "off")
--log.level info

originchainname

Description: Name of the chain a validator should validate for and name of the chain a relayer should relayer messages from. Deprecated for Relayer, use #relaychains instead. Optional: No - Validators; Yes - Relayer Agents: Validator & Relayer Type: string
--originChainName ethereum

validator

Description: The signer that should be used by the validator. Optional: Yes Agents: All Type: SignerConf (Object)
--validator.*

validator.type

Description: The type of EVM signer that is defined. Note that regardless of the VM the validator is operating on, checkpoints are always signed using the EVM ECDSA curve. A HexKey signer uses a private key, an Aws signer uses an AWS based KMS, and Node assumes the local node will sign RPC calls. Optional: Yes; Defaults to node unless a key is specified in which case it defaults to hexKey Agents: All Type: Enum ("hexKey" | "aws" | "node")
--validator.type hexKey

validator.key

Description: A hex key. The hex string of a private key. Requires: validator.type = "hexKey" | undefined Optional: No (iff requirements are met) Agents: All Type: string
--validator.key 8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61

validator.id

Description: The UUID identifying the AWS KMS key Requires: validator.type = "aws" Optional: No (iff requirements are met) Agents: All Type: string
--validator.id "alias/validator-signer-ethereum"

validator.region

Description: The AWS region Requires: validator.type = "aws" Optional: No (iff requirements are met) Agents: All Type: string
--validator.region us-east-1

checkpointsyncer.type

Description: Defines the method of syncing checkpoints Optional: No Agents: Validator Type: Enum ("localStorage" | "s3")
--checkpointSyncer.type localStorage

checkpointsyncer.path

Description: Path on the local disk of a local storage type checkpoint syncer configuration. Requires: checkpointsyncer.type = "localStorage" Optional: No (iff conditions are met) Agents: Validator Type: string
--checkpointSyncer.path "/tmp/syncer"

checkpointsyncer.bucket

Description: S3 bucket name Requires: checkpointsyncer.type = "s3" Optional: No (iff conditions are met) Agents: Validator Type: string
--checkpointSyncer.bucket signatures-ethereum

checkpointsyncer.folder

Description: Folder in the S3 bucket Requires: checkpointsyncer.type = "s3" Optional: No (iff conditions are met) Agents: Validator Type: string
--checkpointSyncer.folder signatures-ethereum

checkpointsyncer.region

Description: S3 bucket region Requires: checkpointsyncer.type = "s3" Optional: No (iff conditions are met) Agents: Validator Type: string
--checkpointSyncer.region us-east-1

interval

Description: How frequently the validator should check for new checkpoints in seconds? See also latencies. Optional: No Agents: Validator Type: Numeric (string | number)
--interval 30

db

Description: This is a local filesystem path to where the agents store relevant data on disk. This must be unique per agent! Multiple agents must have different paths. The path is relative to the current working directory if it does not start with a system defined root path such as / on unix. When using docker images, ensure that this folder gets persisted across runs. For the scraper, this is the connection string to a postgresql database. Optional: For validators and relayer it is optional and defaults to a path in the current working directory which includes the originchainname. For the scraper it is required. Agents: All Type: string
# Validator
--db "/tmp/hyp/validator/ethereum-cache"

# Relayer

--db "/tmp/hyp/relayer/ethereum-cache"

# Scraper

--db "postgresql://postgres:password@localhost:5432/dbname"

relaychains

Description: List of chains to deliver messages between. Optional: No Agents: Relayer Type: string (comma separated list)
--relayChains "arbitrum,ethereum,bsc"

gaspaymentenforcement

Description: JSON stringified array of gas payment enforcement configurations sorted by highest priority first. The last policy should be a catch-all and handle any messages that did not match a previous policy. Optional: Defaults to no enforcement ([{"type": "none"}]) Agents: Relayer Type: JSON (string)
type gaspaymentenforcement = Array<GasPaymentEnforcementPolicy>;

type GasPaymentEnforcementPolicy =
| // fields specific to each type...
// No requirements - all messages are processed regardless of gas payment
({
type: "none";
} & {
// Messages that have paid a minimum amount will be processed
type: "minimum";
payment: U256;
} & { type: "onChainFeeQuoting"; gasfraction?: GasFraction }) // to on-chain fee quoting. `gasfraction` defaults to "1 / 2". // Required amount of gas on the foreign chain has been paid according
| {
// all types have the following fields...
// If a message matches, this policy will be used.
// If no matching list is specified, all messages will match.
matchingList?: MatchingList;
};

// A list of matching rules. A message matches if any of the list
// elements matches the message.
type MatchingList = Array<MatchingListElement>;

// Matches a message if any of the provided values matches.
interface MatchingListElement {
originDomain?: NumericFilter;
senderAddress?: HashFilter;
destinationDomain?: NumericFilter;
recipientAddress?: HashFilter;
}

type NumericFilter = Wildcard | U32 | Array<U32>;
type HashFilter = Wildcard | H256 | Array<H256>;

// 32-bit unsigned integer
type U32 = number | string;
// 256-bit unsigned integer; Note: `number` type has limited precision.
type U256 = string | number;
// 256-bit hash (can also be less) encoded as hex
type H256 = string;
// Matches anything
type Wildcard = "\*";
// A numeric string in the form `{numerator} / {denominator}`, e.g. "1 / 2"
type GasFraction = string;

whitelist

Description: A matching list to define what messages should be allowed. Any messages which do not match this list will not be relayed. If no whitelist is supplied all messages will be allowed. See also message filtering Optional: Yes Agents: Relayer Type: JSON (string)
// A list of matching rules. A message matches if any of the list
// elements matches the message.
type MatchingList = Array<MatchingListElement>;

// Matches a message if any of the provided values matches.
interface MatchingListElement {
originDomain?: NumericFilter
senderAddress?: HashFilter
destinationDomain?: NumericFilter
recipientAddress?: HashFilter
}

type NumericFilter = Wildcard | U32 | Array<U32>;
type HashFilter = Wildcard | H256 | Array<H256>;

// 32-bit unsigned integer
type U32 = number | string;
// 256-bit hash (can also be less) encoded as hex
type H256 = string;
// Matches anything
type Wildcard = "\*";

blacklist

Description: A matching list to define what messages should be ignored. Any messages which match this list will not be relayed. If no blacklist is supplied all messages will be allowed. See also message filtering Optional: Yes Agents: Relayer Type: JSON (string)
type blacklist = MatchingList | undefined;

// A list of matching rules. A message matches if any of the list
// elements matches the message.
type MatchingList = Array<MatchingListElement>;

// Matches a message if any of the provided values matches.
interface MatchingListElement {
originDomain?: NumericFilter;
senderAddress?: HashFilter;
destinationDomain?: NumericFilter;
recipientAddress?: HashFilter;
}

type NumericFilter = Wildcard | U32 | Array<U32>;
type HashFilter = Wildcard | H256 | Array<H256>;

// 32-bit unsigned integer
type U32 = number | string;
// 256-bit hash (can also be less) encoded as hex
type H256 = string;
// Matches anything
type Wildcard = "\*";

transactiongaslimit

Description: The max allowable gas to relay a transaction. Optional: Defaults to no limit Agents: Relayer Type: Numeric (string | number)
--transactionGasLimit 250000000

skiptransactiongaslimitfor

Description: List of domain ids to skip applying the transactiongaslimit for. Optional: Defaults to using the transactiongaslimit for all domains Agents: Relayer Type: string (comma separated list of domain ids)
--skipTransactionGasLimitFor "43114,10,42220"

allowlocalcheckpointsyncers

Description: Whether to allow local checkpointsyncer types, if false it will ignore them. Optional: Defaults to false Agents: Relayer Type: boolean
--allowLocalCheckpointSyncers false

maxmessageretries

Description: The maximum number of retries to attempt before dropping a message from the relayer queues. This prevents messages from being retried indefinitely. Optional: Defaults to a system default value of 66 Agents: Relayer Type: Numeric (string | number)
--maxMessageRetries 120

AWS_ACCESS_KEY_ID

Description: (Env only) The access key ID of your validator’s AWS IAM user. Optional: Required if any signer configuration uses aws Agents: Relayer & Validator Type: string
# Not supported as an argument

AWS_SECRET_ACCESS_KEY

Description: (Env only) The secret access key of your validator’s AWS IAM user. Optional: Required if any signer configuration uses aws Agents: Relayer & Validator Type: string
# Not supported as an argument