mit einem Klick
core-deploy
// Use this skill when deploying, applying, updating, verifying, or debugging Hyperlane core deployments in this repository, including EVM and cosmosnative/Celestia flows.
// Use this skill when deploying, applying, updating, verifying, or debugging Hyperlane core deployments in this repository, including EVM and cosmosnative/Celestia flows.
| name | core-deploy |
| description | Use this skill when deploying, applying, updating, verifying, or debugging Hyperlane core deployments in this repository, including EVM and cosmosnative/Celestia flows. |
Use this skill when the task involves any of the following in this repo:
configs/<chain>-core.yamlhyperlane core init, hyperlane core deploy, hyperlane core apply, or hyperlane core readchains/<chain>/addresses.yaml or aggregated chains/addresses.yaml with core addressesBefore drafting configs or running deploy/apply commands, explicitly ask the user for missing core deployment inputs.
Minimum required inputs:
edentestnet, sepolia, celestiatestnetethereum/EVM or cosmosnativeAlso ask/confirm when unclear:
testIsm, domainRoutingIsm, merkleRootMultisig, etc.)protocolFee or interchainGasPaymaster)merkleTreeHook or a composed/aggregation hook)domainRoutingIsm and IGP configsbeneficiary, oracleKey, oracleConfig, overhead, gas price, and token exchange rate valuesrelayer/config.json and docs/indexes should be updated after deploymentTreat this repository as the canonical Hyperlane registry. Use local registry files for chain names, domain IDs, protocol types, RPC URLs, owners, and deployed addresses.
When behavior, commands, config shape, or operational details are unspecified or unclear, refer to the local docs in docs/ before proceeding.
Before CLI operations, ensure:
HYP_KEY is set for EVM-chain signingHYP_KEY_COSMOSNATIVE is set for Celestia/cosmosnative signingOptional:
HYP_MNEMONIC if direct celestia-appd key recovery is neededHYP_CHAINS_<CHAIN>_SIGNER_KEY from .envNever commit secrets/private keys. The user must authorize CLI tooling before the agent runs it on their behalf.
Always verify deployer configuration before running hyperlane core deploy or hyperlane core apply.
Default behavior:
HYP_KEY for EVM chainsHYP_KEY_COSMOSNATIVE for cosmosnative chainsIf the required key is missing:
For mainnet or multisig-owned deployments:
core apply can mutate ownership-gated configchains/<chain>/metadata.yaml and confirm name, domainId, chainId, protocol, RPC URLs, native token, and gas settings.chains/<chain>/addresses.yaml and configs/<chain>-core.yaml if present.chains/metadata.yaml; if adding a new chain, keep per-chain and aggregate files aligned with chains/schema.json.configs/<chain>-core.yaml.--registry . on every Hyperlane CLI command in this repo.Use this path when chains/<chain>/metadata.yaml has protocol: ethereum.
Recommended testnet/dev defaults:
defaultIsm: testIsm (no production security guarantees)defaultHook: protocolFee (often fee 0)requiredHook: merkleTreeHookRecommended mainnet/production shape:
defaultIsm: domainRoutingIsm with per-domain ISMs, commonly merkleRootMultiSigdefaultHook: interchainGasPaymaster with per-domain gas configrequiredHook: merkleTreeHook or a deliberate required aggregation hookInitialize config:
hyperlane core init --advanced --config configs/<chain>-core.yaml --registry .
Deploy:
hyperlane core deploy --chain <chain> --config configs/<chain>-core.yaml --registry .
Read back on-chain state:
hyperlane core read --chain <chain> --config configs/<chain>-core.yaml --registry .
Expected outputs:
chains/<chain>/addresses.yamlconfigs/<chain>-core.yamlAfter deploy/read, mirror address changes into chains/addresses.yaml if the CLI did not update the aggregate file.
Use this path when chains/<chain>/metadata.yaml has protocol: cosmosnative (for example Celestia or Noble).
For cosmosnative chains, prefer existing local registry metadata or official registry metadata over interactive hyperlane registry init prompts.
Author configs/<chain>-core.yaml explicitly. The typical Celestia shape is:
owner: bech32 owner addressdefaultHook.type: interchainGasPaymasterdefaultHook.beneficiary: bech32 recipient for gas paymentsdefaultHook.oracleKey: bech32 gas oracle updater keydefaultHook.oracleConfig.<remote-chain> with gasPrice, tokenExchangeRate, and tokenDecimals when required by the local config shapedefaultHook.overhead.<remote-chain>defaultIsm.type: domainRoutingIsmdefaultIsm.domains.<remote-chain> with the desired ISM, often testIsm in testnetsrequiredHook.type: merkleTreeHookDeploy:
hyperlane core deploy --chain <chain> --config configs/<chain>-core.yaml --registry .
Read back on-chain state:
hyperlane core read --chain <chain> --config configs/<chain>-core.yaml --registry .
Expected outputs:
chains/<chain>/addresses.yamlconfigs/<chain>-core.yamlAfter deploy/read, mirror address changes into chains/addresses.yaml if the CLI did not update the aggregate file.
Use core apply for deliberate config changes after reading current on-chain state first.
Read current state:
hyperlane core read --chain <chain> --config configs/<chain>-core.yaml --registry .
Edit configs/<chain>-core.yaml with the intended changes only.
Apply:
hyperlane core apply --chain <chain> --config configs/<chain>-core.yaml --registry .
Read again:
hyperlane core read --chain <chain> --config configs/<chain>-core.yaml --registry .
For IGP-only recurring updates, avoid broad automated core apply unless the signer is intended to own broad core config. Prefer direct, narrowly scoped IGP/oracle setter transactions when automation should only update gas pricing.
Before a Warp Route can reliably send between Celestia and a new remote chain, Celestia core needs both:
Use docs/new-chain-onboarding.md for the Celestia transaction flow:
Create a Merkle root multisig ISM when using multisig security:
celestia-appd tx hyperlane ism create-merkle-root-multisig <validators> <threshold> <flags>
Register the ISM for the remote domain:
celestia-appd tx hyperlane ism set-routing-ism-domain <routing-ism-id> <domain> <ism-id> <flags>
Set destination gas config:
celestia-appd tx hyperlane hooks igp set-destination-gas-config <igp-id> <remote-domain> <token-exchange-rate> <gas-price> <gas-overhead> <flags>
For multisig-owned Celestia deployments, use --generate-only where appropriate and have multisig participants sign externally.
After adding or changing a core chain, check whether relayer/config.json needs the chain in relayChains and matching chain settings.
Useful checks:
docker compose ps
docker logs hyperlane-relayer -f
After deploy/apply/read:
configs/<chain>-core.yaml contains addresses for deployed hooks/ISMs where applicablechains/<chain>/addresses.yaml contains expected core addresses such as mailbox, merkleTreeHook, interchainGasPaymaster, interchainSecurityModule, factories, or validatorAnnouncechains/addresses.yaml mirrors per-chain address changeshyperlane core read --chain <chain> --config configs/<chain>-core.yaml --registry . succeedsdomainRoutingIsm has all required remote domainsFor EVM-specific verification, use cast call against the chain RPC when needed to confirm Mailbox owner/hooks or contract getters.
For cosmosnative-specific verification, use celestia-appd query hyperlane ... commands from the docs to confirm ISM, hook, IGP, and routing module state when CLI read output is insufficient.
--registry . for Hyperlane CLI commands in this repo..env or private keys.testIsm as testnet/dev-only unless the user explicitly accepts its security properties.domainRoutingIsm and interchainGasPaymaster, missing remote-domain entries can break inbound verification or outbound gas quoting.requiredHook; defaultHook may be overrideable by callers depending on dispatch path.