chore: general fixes from enrolling new validators and chains (#4483)

feat: enroll new validators and chains on core mailboxes
- update token/gas prices
- update to latest registry, containing the new ISM addresses
- required some tooling fixes to handle solana/eclipse addresses being
present
- fix tooling where required
	- actually filter for EVM chains in HyperlaneAppChecker

drive-by:
- fix github-proxy changeset
- fix print balances script
- fix agent config update script
- fix getRouterConfig
- fix setting manual submission if unable to check on safe
pull/4494/head
Paul Balaji 2 months ago committed by GitHub
parent 0c54c534b9
commit a8f0ccd14f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      .changeset/famous-ants-tan.md
  2. 2
      .registryrc
  3. 118
      rust/main/config/mainnet_config.json
  4. 2
      typescript/cli/package.json
  5. 2
      typescript/helloworld/package.json
  6. 14
      typescript/infra/config/environments/mainnet3/gasPrices.json
  7. 122
      typescript/infra/config/environments/mainnet3/tokenPrices.json
  8. 2
      typescript/infra/package.json
  9. 82
      typescript/infra/scripts/agents/update-agent-config.ts
  10. 64
      typescript/infra/scripts/check-owner-ica.ts
  11. 94
      typescript/infra/scripts/print-balances.ts
  12. 63
      typescript/infra/src/govern/HyperlaneAppGovernor.ts
  13. 22
      typescript/sdk/src/core/HyperlaneCore.ts
  14. 8
      typescript/sdk/src/core/HyperlaneCoreChecker.ts
  15. 31
      typescript/sdk/src/deploy/HyperlaneAppChecker.ts
  16. 2
      typescript/widgets/package.json
  17. 16
      yarn.lock

@ -1,5 +1,5 @@
---
'github-proxy': major
'@hyperlane-xyz/github-proxy': major
---
Add github proxy to reduce github API load

@ -1 +1 @@
8e93ecb4fa207fc4822393a4c13627be3da89eaa
v4.1.0

@ -34,7 +34,7 @@
"interchainAccountIsm": "0xd766e7C7517f2d0D92754b2fe4aE7AdEf7bDEC3e",
"interchainAccountRouter": "0x25C87e735021F72d8728438C2130b02E3141f2cb",
"interchainGasPaymaster": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
"interchainSecurityModule": "0x6C73cA7bF00FFd3617eF28E26B28EbC1e53D6075",
"interchainSecurityModule": "0x565C280Cdb56095Cf6BF23b5fF140180208CBa9e",
"isTestnet": false,
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162",
@ -100,7 +100,7 @@
"interchainAccountIsm": "0x2A7574358Ec53522CE2452887661AB4c86F7d400",
"interchainAccountRouter": "0x91874Dbed74925dFe6059B90385EEb90DdE0B2E6",
"interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22",
"interchainSecurityModule": "0xC270F9DF86bb320A31757a64d1d5429B4D7a516e",
"interchainSecurityModule": "0x3d0BE14dFbB1Eb736303260c1724B6ea270c8Dc4",
"mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9",
"merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930",
"name": "arbitrum",
@ -172,7 +172,7 @@
"interchainAccountIsm": "0x27a3233c05C1Df7c163123301D14bE9349E3Cb48",
"interchainAccountRouter": "0xa82a0227e6d6db53AF4B264A852bfF91C6504a51",
"interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0",
"interchainSecurityModule": "0xCBcE96dAa697A2A51f488a47264D623c3593bb18",
"interchainSecurityModule": "0x6723A49c12FE37ccBD08512dd586C8471743676f",
"mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6",
"merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A",
"name": "avalanche",
@ -244,7 +244,7 @@
"interchainAccountIsm": "0x223F7D3f27E6272266AE4B5B91Fd5C7A2d798cD8",
"interchainAccountRouter": "0x4767D22117bBeeb295413000B620B93FD8522d53",
"interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94",
"interchainSecurityModule": "0xf1d67752c6399933d850dC27F41F581a198fbEdE",
"interchainSecurityModule": "0xaeEf8f7D049C03181E0B5f2746CA2Db4d25C0B82",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117",
"name": "base",
@ -314,7 +314,7 @@
"interchainAccountIsm": "0xe93f2f409ad8B5000431D234472973fe848dcBEC",
"interchainAccountRouter": "0x2f4Eb04189e11Af642237Da62d163Ab714614498",
"interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9",
"interchainSecurityModule": "0x0aa862a0039ed2d7908d749049ed2766Ff03AABb",
"interchainSecurityModule": "0xbCe3469E8C270e04ea9ccd20Efdeed2b90c9d57C",
"mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7",
"merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
"name": "blast",
@ -382,7 +382,7 @@
"interchainAccountIsm": "0x451dF8AB0936D85526D816f0b4dCaDD934A034A4",
"interchainAccountRouter": "0x5C02157068a52cEcfc98EDb6115DE6134EcB4764",
"interchainGasPaymaster": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05",
"interchainSecurityModule": "0x83a33bc769aE0b830cdbACbC82a151A1217EbD60",
"interchainSecurityModule": "0x26eA240CB4cABd7B75A9F17E7f4e224170270Ee3",
"mailbox": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147",
"merkleTreeHook": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB",
"name": "bob",
@ -448,7 +448,7 @@
"interchainAccountIsm": "0x9e22945bE593946618383B108CC5bce09eBA4C26",
"interchainAccountRouter": "0x32A07c1B7a7fe8D4A0e44B0181873aB9d64C16c1",
"interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451",
"interchainSecurityModule": "0x6a46c4db32c06bF8D6A4E2e1ed311427E8087E47",
"interchainSecurityModule": "0x0A7cE15E3cc638abC3B5FfA7Fc8F3295Ae3595D1",
"mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4",
"merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26",
"name": "bsc",
@ -528,7 +528,7 @@
"interchainAccountIsm": "0xB732c83aeE29596E3163Da2260710eAB67Bc0B29",
"interchainAccountRouter": "0x27a6cAe33378bB6A6663b382070427A01fc9cB37",
"interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7",
"interchainSecurityModule": "0x8718d2867085C065BE7a65ec669ceE4a6d0902E1",
"interchainSecurityModule": "0x33BC62504248F4cb43813532067ccAEd46a5e61C",
"mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb",
"merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366",
"name": "celo",
@ -592,7 +592,7 @@
"interchainAccountIsm": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2",
"interchainAccountRouter": "0xEF9A332Ec1fD233Bf9344A58be56ff9E104B4f60",
"interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503",
"interchainSecurityModule": "0xbf8c84422e09BB9866F9E416d6f447A33e261D05",
"interchainSecurityModule": "0xc1FF2bf7a4C315bE2a06941D236457EB02F93993",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD",
"name": "cheesechain",
@ -655,7 +655,7 @@
"from": 4842212
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x18E1F88A882cE015b135Acdf356dd4F5773763B9",
"interchainSecurityModule": "0xEfFaEddFf4FFd6F8a6D714bf149b114fD34E5Fd4",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "cyber",
@ -721,7 +721,7 @@
"from": 23783929
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0xcCdAcCCc5defCb56852e2945eaF0Ba2b3751B1aF",
"interchainSecurityModule": "0xB5e6AA45E117f9fD2a3F8e78432fCAfdB833d316",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "degenchain",
@ -796,7 +796,8 @@
"http": "https://mainnetbeta-rpc.eclipse.xyz"
}
],
"validatorAnnounce": "Hqnn593pqDZWLy6bKZ4NbY767wFhUNBShDrLktuQa3Q2"
"validatorAnnounce": "Hqnn593pqDZWLy6bKZ4NbY767wFhUNBShDrLktuQa3Q2",
"interchainSecurityModule": "BgG35GxoaMgmiam3EJzcwivwQ2DTYGPTLfUCg7bhiH6V"
},
"endurance": {
"aggregationHook": "0x62c39B0500760c46Ae9Ae312A30f63445dc24C3a",
@ -831,7 +832,7 @@
"interchainAccountIsm": "0xCeafc098e5c3c7768b9229Be2FEC275862A81Abd",
"interchainAccountRouter": "0xed9a722c543883FB7e07E78F3879762DE09eA7D5",
"interchainGasPaymaster": "0xB30EAB08aa87138D57168D0e236850A530f49921",
"interchainSecurityModule": "0x0A5bB58D8C66Dee715C22E6Dc2FFAABBc2E2473d",
"interchainSecurityModule": "0xC0737f1EA1d0aF287c2804090370b1715c593385",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xC831271c1fB212012811a91Dd43e5926C1020563",
"name": "endurance",
@ -901,7 +902,7 @@
"interchainAccountIsm": "0x292C614ED53DaaDBf971521bc2C652d1ca51cB47",
"interchainAccountRouter": "0x5E532F7B610618eE73C2B462978e94CB1F7995Ce",
"interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611",
"interchainSecurityModule": "0x33F9760969408cc5138Bc6683F42514a74114a53",
"interchainSecurityModule": "0xFc440a9c946Bf4840623E4adf49646089361584a",
"mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239",
"merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA",
"name": "ethereum",
@ -973,7 +974,7 @@
"interchainAccountIsm": "0x7C012DCA02C42cfA3Fd7Da3B0ED7234B52AE68eF",
"interchainAccountRouter": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9",
"interchainGasPaymaster": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E",
"interchainSecurityModule": "0xDEFa968CE11b3F707C785cEF07e2cFb79b6B0D14",
"interchainSecurityModule": "0x2bed66bbfE45f1d73928179e72B73e5eCF7B9900",
"mailbox": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3",
"merkleTreeHook": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147",
"name": "fraxtal",
@ -1040,7 +1041,7 @@
"interchainAccountIsm": "0x9629c28990F11c31735765A6FD59E1E1bC197DbD",
"interchainAccountRouter": "0x2351FBe24C1212F253b7a300ff0cBCFd97952a19",
"interchainGasPaymaster": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed",
"interchainSecurityModule": "0x94f9670390f63CFA0Bf49944ccD28322922b4B14",
"interchainSecurityModule": "0x1E12bdb6a33442102FEF2ab766b93c863653B4bE",
"mailbox": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696",
"merkleTreeHook": "0xfBc08389224d23b79cb21cDc16c5d42F0ad0F57f",
"name": "fusemainnet",
@ -1113,7 +1114,7 @@
"interchainAccountIsm": "0x07E2062A1bC66a2C1d05cb5C3870a4AF86e0056E",
"interchainAccountRouter": "0xBE70Ab882D1F7E37e04a70CDd9Ec23b37a234064",
"interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f",
"interchainSecurityModule": "0x46902BD2e22A6672eD2E8D04771cC8CB5eD06481",
"interchainSecurityModule": "0x996Be332325DA49Ea590A9772a515d62dD90C74c",
"mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f",
"merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645",
"name": "gnosis",
@ -1183,7 +1184,7 @@
"interchainAccountIsm": "0x708E002637792FDC031E6B62f23DD60014AC976a",
"interchainAccountRouter": "0xfB8cea1c7F45608Da30655b50bbF355D123A4358",
"interchainGasPaymaster": "0x19dc38aeae620380430C200a6E990D5Af5480117",
"interchainSecurityModule": "0x2dcFd91eCd43adfd5644De57387575F97539C18a",
"interchainSecurityModule": "0x1Bff27a1c1319b0704348895b67426a4Eb1b629e",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65",
"name": "inevm",
@ -1303,7 +1304,7 @@
"from": 14616307
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x58D6fb4aADd3ae83ec529d3d0f42Ae904207a336",
"interchainSecurityModule": "0xcaE599dD2142CD8F09a68bAC89b4d809A038d2E9",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "kroma",
@ -1375,7 +1376,7 @@
"interchainAccountIsm": "0xdcA646C56E7768DD11654956adE24bfFf9Ba4893",
"interchainAccountRouter": "0xD59dA396F162Ed93a41252Cebb8d5DD4F093238C",
"interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28",
"interchainSecurityModule": "0x72CC2baC9e33Eb96395FE8caC142D368fbF8Dc50",
"interchainSecurityModule": "0x916e612358dA3F7E8e19f51ba2Cf7af3285a6793",
"mailbox": "0x02d16BC51af6BfD153d67CA61754cF912E82C4d9",
"merkleTreeHook": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7",
"name": "linea",
@ -1445,7 +1446,7 @@
"from": 4195553
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x1b9cDC236760f40064863DA3d67f5553208B65DE",
"interchainSecurityModule": "0xa660FA2047105E0341b356393218586ED2191d14",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "lisk",
@ -1508,7 +1509,7 @@
"from": 3088760
},
"interchainGasPaymaster": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"interchainSecurityModule": "0xc6ec1364d1ce3E963Fa65A0bDF57eC722478e1FB",
"interchainSecurityModule": "0x391BD8dD2709F77d39dab4fB3bf4BCAfd5EC3248",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x062200d92dF6bB7bA89Ce4D6800110450f94784e",
"name": "lukso",
@ -1581,7 +1582,7 @@
"interchainAccountIsm": "0x8Ea50255C282F89d1A14ad3F159437EE5EF0507f",
"interchainAccountRouter": "0x693A4cE39d99e46B04cb562329e3F0141cA17331",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0x855a679627f8A283861d363E8Daaf2e6fac74230",
"interchainSecurityModule": "0xBcB96842301c659B575c40C3f93F7311D09c93d9",
"isTestnet": false,
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
@ -1650,7 +1651,7 @@
"interchainAccountIsm": "0xe039DA3A0071BEd087A12660D7b03cf669c7776E",
"interchainAccountRouter": "0x45285463352c53a481e882cD5E2AF2E25BBdAd0D",
"interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28",
"interchainSecurityModule": "0xDA06C0c607CdbcED8B01d7b7caafeeDA550b4120",
"interchainSecurityModule": "0xe542Ed13B5782aF0AFAe7f232bB867FB0208Ab7B",
"mailbox": "0x398633D19f4371e1DB5a8EFE90468eB70B1176AA",
"merkleTreeHook": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d",
"name": "mantle",
@ -1712,7 +1713,7 @@
"from": 13523607
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0xD89521A871B43f1116083d79A937445D2675Be37",
"interchainSecurityModule": "0x5725a9Bf3bdaF104Ce1A0098308DD974F6395365",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "merlin",
@ -1778,7 +1779,7 @@
"from": 17966274
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x1ffca4c17aEe10a8fCAd338750191ce1C2188b6f",
"interchainSecurityModule": "0xfd810678075502F76A6ef79cedffe58cff6Cc410",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "metis",
@ -1843,7 +1844,7 @@
"from": 3752032
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x1ffca4c17aEe10a8fCAd338750191ce1C2188b6f",
"interchainSecurityModule": "0xfd810678075502F76A6ef79cedffe58cff6Cc410",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "mint",
@ -1909,7 +1910,7 @@
"interchainAccountIsm": "0xa377b8269e0A47cdd2fD5AAeAe860b45623c6d82",
"interchainAccountRouter": "0x6e1B9f776bd415d7cC3C7458A5f0d801016918f8",
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
"interchainSecurityModule": "0x691ca7575ff8D2415158b95f4F4D9307aD9115d5",
"interchainSecurityModule": "0x1ab6985E0e15d293e71d01510fa6B57311C69718",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
"name": "mode",
@ -1977,7 +1978,7 @@
"interchainAccountIsm": "0x79b3730CE3685f65802aF1771319992bA960EB9D",
"interchainAccountRouter": "0xc4482f66191754a8629D35289043C4EB0285F10E",
"interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F",
"interchainSecurityModule": "0x3E4c6E0f336657467175cFeC13fdecC78BaE253d",
"interchainSecurityModule": "0x105215D46F45a88B3793B798Fb87AF231Ad9f611",
"mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3",
"merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547",
"name": "moonbeam",
@ -2117,7 +2118,7 @@
"interchainAccountIsm": "0x2c46BF14641d00549ECa4779BF5CBf91602C1DEd",
"interchainAccountRouter": "0x03D6cC17d45E9EA27ED757A8214d1F07F7D901aD",
"interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C",
"interchainSecurityModule": "0x1bc5500Cc5d338e2daDBa6db936b4046030aF3A3",
"interchainSecurityModule": "0x1E491c93Ab56A298bBC34B4Fca8A4cE68E8d540a",
"mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D",
"merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f",
"name": "optimism",
@ -2250,7 +2251,7 @@
"interchainAccountIsm": "0xBAC4529cdfE7CCe9E858BF706e41F8Ed096C1BAd",
"interchainAccountRouter": "0xF163949AD9F88977ebF649D0461398Ca752E64B9",
"interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2",
"interchainSecurityModule": "0x017B4ee44A205B3c9576512F83c583F59da3f1f4",
"interchainSecurityModule": "0x0D408EF040ca0E7a75f03c41Aa46cAc904770D45",
"mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB",
"merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6",
"name": "polygon",
@ -2326,7 +2327,7 @@
"interchainAccountIsm": "0xc1198e241DAe48BF5AEDE5DCE49Fe4A6064cF7a7",
"interchainAccountRouter": "0x20a0A32a110362920597F72974E1E0d7e25cA20a",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0x6d1c7Cba7fa5cA1895EBC2045A93D53719C47Fed",
"interchainSecurityModule": "0x5C622f40365F57D06b5e7132B1483fcbc9566560",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
"name": "polygonzkevm",
@ -2393,7 +2394,7 @@
"from": 32018468
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0xA00CCe6085E4fae65EfD61cEfd080cb99B6d750f",
"interchainSecurityModule": "0x336306ADB3c510A318107c01D109D2072c7abB6B",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "proofofplay",
@ -2457,7 +2458,7 @@
"from": 363159
},
"interchainGasPaymaster": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696",
"interchainSecurityModule": "0x20c612974cBAE138e76b991C1FBA829b7E52C070",
"interchainSecurityModule": "0x06567d07b49ad922A821A641F1C962569a255dbB",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x55E4F0bc6b7Bb493D50839A8592e7ad8d5e93cf7",
"name": "real",
@ -2524,7 +2525,7 @@
"interchainAccountIsm": "0x5DA60220C5dDe35b7aE91c042ff5979047FA0785",
"interchainAccountRouter": "0x7a4d31a686A36285d68e14EDD53631417eB19603",
"interchainGasPaymaster": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634",
"interchainSecurityModule": "0xbB8D11681396d410fa00B92Bc92Fff1e61a31C3F",
"interchainSecurityModule": "0x5a3bB91853CfDaDb1bC95D2E061B50d433fbe3E8",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
"name": "redstone",
@ -2585,7 +2586,7 @@
"from": 937117
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x597DB3036b5E7bE9b2216F599e1Ba92734c4cd6f",
"interchainSecurityModule": "0xA76F4620ac1e97d273B2C9Ca71805c8afD792098",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "sanko",
@ -2653,7 +2654,7 @@
"interchainAccountIsm": "0x32af5Df81fEd5E26119F6640FBB13f3d63a94CDe",
"interchainAccountRouter": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7",
"interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2",
"interchainSecurityModule": "0xBf15bABBB938F0F734F77Eda8b583429838490E7",
"interchainSecurityModule": "0x37e17723b665A9F95F4aecEEc40D9eF39624764e",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76",
"name": "scroll",
@ -2720,7 +2721,7 @@
"interchainAccountIsm": "0xf35dc7B9eE4Ebf0cd3546Bd6EE3b403dE2b9F5D6",
"interchainAccountRouter": "0xBcaedE97a98573A88242B3b0CB0A255F3f90d4d5",
"interchainGasPaymaster": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72",
"interchainSecurityModule": "0xf0FcAb13ACec74402fFC5006bBEb81E3C14f071f",
"interchainSecurityModule": "0x26184898fA27D3471B50BD956AB5b3E9Aa14763C",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49",
"name": "sei",
@ -2796,7 +2797,8 @@
"http": "https://api.mainnet-beta.solana.com"
}
],
"validatorAnnounce": "pRgs5vN4Pj7WvFbxf6QDHizo2njq2uksqEUbaSghVA8"
"validatorAnnounce": "pRgs5vN4Pj7WvFbxf6QDHizo2njq2uksqEUbaSghVA8",
"interchainSecurityModule": "372D5YP7jMYUgYBXTVJ7BZtzKv1mq1J6wvjSFLNTRreC"
},
"taiko": {
"aggregationHook": "0x1175A31f66C5e3d0ce0ca3B7F80Abe72c6FcE272",
@ -2831,7 +2833,7 @@
"interchainAccountIsm": "0xAE557e108b3336130370aC74836f1356B4b30Cf2",
"interchainAccountRouter": "0x1F8CF09F060A2AE962c0Bb1F92e209a1E7b0E10B",
"interchainGasPaymaster": "0x273Bc6b01D9E88c064b6E5e409BdF998246AEF42",
"interchainSecurityModule": "0xbCF47BFb1f863e349b588d6b0A817161541a82A6",
"interchainSecurityModule": "0x478D0e5d221C8d7CA1A6353315fac6FA88Ff1B97",
"mailbox": "0x28EFBCadA00A7ed6772b3666F3898d276e88CAe3",
"merkleTreeHook": "0x6A55822cf11f9fcBc4c75BC2638AfE8Eb942cAdd",
"name": "taiko",
@ -2893,7 +2895,7 @@
"from": 1678063
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0xA00CCe6085E4fae65EfD61cEfd080cb99B6d750f",
"interchainSecurityModule": "0x336306ADB3c510A318107c01D109D2072c7abB6B",
"isTestnet": false,
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
@ -2960,7 +2962,7 @@
"interchainAccountIsm": "0x551BbEc45FD665a8C95ca8731CbC32b7653Bc59B",
"interchainAccountRouter": "0xc11f8Cf2343d3788405582F65B8af6A4F7a6FfC8",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0x37E2EBF4DD9F6636f28Ac2a20284d2d47f93Cc3A",
"interchainSecurityModule": "0x5542503cBde841c336Afef014FE80b0F1c9d716d",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
"name": "viction",
@ -3027,7 +3029,7 @@
"interchainAccountIsm": "0xCB9f90EE5d83Ea52ABd922BD70898f0155D54798",
"interchainAccountRouter": "0x473884010F0C1742DA8Ad01E7E295624B931076b",
"interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503",
"interchainSecurityModule": "0xbf8c84422e09BB9866F9E416d6f447A33e261D05",
"interchainSecurityModule": "0xc1FF2bf7a4C315bE2a06941D236457EB02F93993",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD",
"name": "worldchain",
@ -3088,7 +3090,7 @@
"from": 24395308
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x18E1F88A882cE015b135Acdf356dd4F5773763B9",
"interchainSecurityModule": "0xC630ef37e03534721557026FeC397Ec05f85584C",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "xai",
@ -3156,7 +3158,7 @@
"interchainAccountIsm": "0x29B37088724B745C0ABcE591449Cf042772160C2",
"interchainAccountRouter": "0x03cF708E42C89623bd83B281A56935cB562b9258",
"interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503",
"interchainSecurityModule": "0x6455CbF559E2227aA23409930D0F860e2f244B70",
"interchainSecurityModule": "0x0811C6250965E7Ba1A872A12249B1b2300d85CFD",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD",
"name": "xlayer",
@ -3223,7 +3225,7 @@
"interchainAccountIsm": "0x2b6d3F7d28B5EC8C3C028fBCAdcf774D9709Dd29",
"interchainAccountRouter": "0x3AdCBc94ab8C48EC52D06dc65Bb787fD1981E3d5",
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
"interchainSecurityModule": "0xCAc4123018406911D43e778410313A594276c96E",
"interchainSecurityModule": "0x858a077945bCC4afA40DaE5a75faB9237e899b30",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
"name": "zetachain",
@ -3288,7 +3290,7 @@
"from": 1511458
},
"interchainGasPaymaster": "0x03cF708E42C89623bd83B281A56935cB562b9258",
"interchainSecurityModule": "0xe569C2cC7f2e41ABF1c1CFdE7BBd1694BEF5cc5D",
"interchainSecurityModule": "0xb04DE6Cbc6E258E8f2D2B00EBdcD2Ea901791EAA",
"mailbox": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c",
"merkleTreeHook": "0x4C97D35c668EE5194a13c8DE8Afc18cce40C9F28",
"name": "zircuit",
@ -3360,7 +3362,7 @@
"interchainAccountIsm": "0xb2674E213019972f937CCFc5e23BF963D915809e",
"interchainAccountRouter": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b",
"interchainGasPaymaster": "0x18B0688990720103dB63559a3563f7E8d0f63EDb",
"interchainSecurityModule": "0xe2089faE2D98f2CF280E8d218E5a36966ee04d39",
"interchainSecurityModule": "0xDede6e50E548460FB6a939320F707214CFfC701C",
"mailbox": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"merkleTreeHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F",
"name": "zoramainnet",
@ -3430,7 +3432,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x78A31fF00D79158c22C09DC6D7Fa7188e21925E4",
"interchainSecurityModule": "0x2b19CEB3ef3B1D7428b0788d44401E44E381B62B",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3496,7 +3498,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x71c9bB4297518034f89cDb243fBfd37d549bEbAa",
"interchainSecurityModule": "0x8Ad4d573D7EafC4Ca58f1dB704B8Db804814D674",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3565,7 +3567,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x78A31fF00D79158c22C09DC6D7Fa7188e21925E4",
"interchainSecurityModule": "0x2b19CEB3ef3B1D7428b0788d44401E44E381B62B",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3640,7 +3642,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x78A31fF00D79158c22C09DC6D7Fa7188e21925E4",
"interchainSecurityModule": "0x2b19CEB3ef3B1D7428b0788d44401E44E381B62B",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3703,7 +3705,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x78A31fF00D79158c22C09DC6D7Fa7188e21925E4",
"interchainSecurityModule": "0x2b19CEB3ef3B1D7428b0788d44401E44E381B62B",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3775,7 +3777,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x78A31fF00D79158c22C09DC6D7Fa7188e21925E4",
"interchainSecurityModule": "0x2b19CEB3ef3B1D7428b0788d44401E44E381B62B",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3842,7 +3844,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x78A31fF00D79158c22C09DC6D7Fa7188e21925E4",
"interchainSecurityModule": "0x2b19CEB3ef3B1D7428b0788d44401E44E381B62B",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3905,7 +3907,7 @@
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xc401e251CCa7A364114504A994D6fC7cb1c243AB",
"interchainGasPaymaster": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainSecurityModule": "0x78A31fF00D79158c22C09DC6D7Fa7188e21925E4",
"interchainSecurityModule": "0x12C8cfA5B97Df96AaB2795a4186675dA49938968",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"pausableHook": "0x5Ed813B8b41f25c8002B01A72bbDBe6A0232Fe27",
@ -3974,7 +3976,7 @@
"interchainAccountIsm": "0xcd9D3744512F07AE844c40E27912092d7c503565",
"interchainAccountRouter": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8",
"interchainGasPaymaster": "0xb58257cc81E47EC72fD38aE16297048de23163b4",
"interchainSecurityModule": "0x47F57D08d01544Ed082152B73807A9D39305Fac6",
"interchainSecurityModule": "0xD5a72d4EF4D7db52C12802d0e3fBEF47b268e0dB",
"mailbox": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39",
"merkleTreeHook": "0xCC3D1659D50461d27a2F025dDb2c9B06B584B7e1",
"pausableHook": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
@ -4034,7 +4036,7 @@
"interchainAccountIsm": "0xc23BaF5Eb5848D19701BbE7f139645e6bd58a319",
"interchainAccountRouter": "0x7c58Cadcc2b60ACF794eE1843488d6f5703f76BE",
"interchainGasPaymaster": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86",
"interchainSecurityModule": "0xdc2da0D5d7A69fa86366235E426ff4a0E214cC60",
"interchainSecurityModule": "0x9E59d69F8e23dc159761Ca713C61a081422d1d47",
"mailbox": "0xb129828B9EDa48192D0B2db35D0E40dCF51B3594",
"merkleTreeHook": "0x3E969bA938E6A993eeCD6F65b0dd8712B07dFe59",
"pausableHook": "0x6Fb36672365C7c797028C400A61c58c0ECc53cD2",

@ -5,7 +5,7 @@
"dependencies": {
"@aws-sdk/client-kms": "^3.577.0",
"@aws-sdk/client-s3": "^3.577.0",
"@hyperlane-xyz/registry": "4.0.0",
"@hyperlane-xyz/registry": "4.1.0",
"@hyperlane-xyz/sdk": "5.1.0",
"@hyperlane-xyz/utils": "5.1.0",
"@inquirer/prompts": "^3.0.0",

@ -4,7 +4,7 @@
"version": "5.1.0",
"dependencies": {
"@hyperlane-xyz/core": "5.1.0",
"@hyperlane-xyz/registry": "4.0.0",
"@hyperlane-xyz/registry": "4.1.0",
"@hyperlane-xyz/sdk": "5.1.0",
"@openzeppelin/contracts-upgradeable": "^4.9.3",
"ethers": "^5.7.2"

@ -4,7 +4,7 @@
"decimals": 9
},
"arbitrum": {
"amount": "0.5",
"amount": "0.1",
"decimals": 9
},
"astar": {
@ -12,7 +12,7 @@
"decimals": 9
},
"astarzkevm": {
"amount": "0.0097",
"amount": "0.0562",
"decimals": 9
},
"avalanche": {
@ -20,7 +20,7 @@
"decimals": 9
},
"base": {
"amount": "0.013311447",
"amount": "0.013571998",
"decimals": 9
},
"bitlayer": {
@ -72,7 +72,7 @@
"decimals": 9
},
"ethereum": {
"amount": "6.654595701",
"amount": "10",
"decimals": 9
},
"everclear": {
@ -120,7 +120,7 @@
"decimals": 9
},
"mantapacific": {
"amount": "0.113932514",
"amount": "0.011",
"decimals": 9
},
"mantle": {
@ -140,7 +140,7 @@
"decimals": 9
},
"mode": {
"amount": "0.1",
"amount": "0.01",
"decimals": 9
},
"molten": {
@ -168,7 +168,7 @@
"decimals": 1
},
"polygon": {
"amount": "101.76455238",
"amount": "219.572738168",
"decimals": 9
},
"polygonzkevm": {

@ -1,63 +1,63 @@
{
"ancient8": "2342.46",
"arbitrum": "2342.46",
"astar": "0.054438",
"astarzkevm": "2342.46",
"avalanche": "23.83",
"base": "2342.46",
"bitlayer": "56880",
"blast": "2342.46",
"bob": "2342.46",
"bsc": "519.43",
"celo": "0.444294",
"cheesechain": "0.00249894",
"coredao": "0.942068",
"cyber": "2342.46",
"degenchain": "0.00324668",
"dogechain": "0.102724",
"eclipsemainnet": "2342.46",
"endurance": "2.14",
"ethereum": "2342.46",
"everclear": "2342.46",
"flare": "0.01473859",
"fraxtal": "2335.15",
"fusemainnet": "0.02525184",
"gnosis": "0.990366",
"inevm": "17.79",
"injective": "17.79",
"kroma": "2342.46",
"linea": "2342.46",
"lisk": "2342.46",
"lukso": "2.1",
"mantapacific": "2342.46",
"mantle": "0.563082",
"merlin": "56884",
"metis": "29.99",
"mint": "2342.46",
"mode": "2342.46",
"molten": "0.663236",
"moonbeam": "0.159678",
"neutron": "0.359547",
"oortmainnet": "0.089435",
"optimism": "2342.46",
"osmosis": "0.39708",
"polygon": "0.384058",
"polygonzkevm": "2342.46",
"proofofplay": "2342.46",
"real": "2342.46",
"redstone": "2342.46",
"sanko": "39.51",
"scroll": "2342.46",
"sei": "0.290644",
"shibarium": "0.398366",
"solanamainnet": "133.81",
"taiko": "2342.46",
"tangle": "0.999864",
"viction": "0.438134",
"worldchain": "2342.46",
"xai": "0.183944",
"xlayer": "37.86",
"zetachain": "0.465693",
"zircuit": "2342.46",
"zoramainnet": "2342.46"
"ancient8": "2411.78",
"arbitrum": "2411.78",
"astar": "0.058925",
"astarzkevm": "2411.78",
"avalanche": "24.66",
"base": "2411.78",
"bitlayer": "59677",
"blast": "2411.78",
"bob": "2411.78",
"bsc": "552.99",
"celo": "0.444888",
"cheesechain": "0.00192649",
"coredao": "0.936135",
"cyber": "2411.78",
"degenchain": "0.00324113",
"dogechain": "0.107549",
"eclipsemainnet": "2411.78",
"endurance": "2.28",
"ethereum": "2411.78",
"everclear": "2411.78",
"flare": "0.01486694",
"fraxtal": "2389.6",
"fusemainnet": "0.0254922",
"gnosis": "1.011",
"inevm": "19.13",
"injective": "19.13",
"kroma": "2411.78",
"linea": "2411.78",
"lisk": "2411.78",
"lukso": "2.11",
"mantapacific": "2411.78",
"mantle": "0.571121",
"merlin": "59786",
"metis": "31.92",
"mint": "2411.78",
"mode": "2411.78",
"molten": "0.671515",
"moonbeam": "0.170166",
"neutron": "0.368584",
"oortmainnet": "0.091528",
"optimism": "2411.78",
"osmosis": "0.412102",
"polygon": "0.426289",
"polygonzkevm": "2411.78",
"proofofplay": "2411.78",
"real": "2411.78",
"redstone": "2411.78",
"sanko": "34.23",
"scroll": "2411.78",
"sei": "0.304985",
"shibarium": "0.407481",
"solanamainnet": "137.07",
"taiko": "2411.78",
"tangle": "1.001",
"viction": "0.437209",
"worldchain": "2411.78",
"xai": "0.190543",
"xlayer": "40.24",
"zetachain": "0.489689",
"zircuit": "2411.78",
"zoramainnet": "2411.78"
}

@ -14,7 +14,7 @@
"@ethersproject/providers": "^5.7.2",
"@google-cloud/secret-manager": "^5.5.0",
"@hyperlane-xyz/helloworld": "5.1.0",
"@hyperlane-xyz/registry": "4.0.0",
"@hyperlane-xyz/registry": "4.1.0",
"@hyperlane-xyz/sdk": "5.1.0",
"@hyperlane-xyz/utils": "5.1.0",
"@inquirer/prompts": "^5.3.8",

@ -2,12 +2,19 @@ import { ChainAddresses } from '@hyperlane-xyz/registry';
import {
ChainMap,
ChainTechnicalStack,
CoreFactories,
HyperlaneContracts,
HyperlaneCore,
HyperlaneDeploymentArtifacts,
MultiProvider,
buildAgentConfig,
} from '@hyperlane-xyz/sdk';
import { ProtocolType, objMap, promiseObjAll } from '@hyperlane-xyz/utils';
import {
ProtocolType,
objFilter,
objMap,
promiseObjAll,
} from '@hyperlane-xyz/utils';
import { Contexts } from '../../config/contexts.js';
import {
@ -18,6 +25,7 @@ import { getCosmosChainGasPrice } from '../../src/config/gas-oracle.js';
import {
chainIsProtocol,
filterRemoteDomainMetadata,
isEthereumProtocolChain,
writeMergedJSONAtPath,
} from '../../src/utils/utils.js';
import {
@ -50,41 +58,53 @@ export async function writeAgentConfig(
const addressesForEnv = filterRemoteDomainMetadata(addressesMap);
const core = HyperlaneCore.fromAddressesMap(addressesForEnv, multiProvider);
const evmContractsMap = objFilter(
core.contractsMap,
(chain, _): _ is HyperlaneContracts<CoreFactories> =>
isEthereumProtocolChain(chain),
);
// Write agent config indexing from the deployed Mailbox which stores the block number at deployment
const startBlocks = await promiseObjAll(
objMap(addressesForEnv, async (chain: string, _) => {
const { index, technicalStack } = multiProvider.getChainMetadata(chain);
const indexFrom = index?.from;
objMap(
evmContractsMap,
async (chain: string, contracts: HyperlaneContracts<CoreFactories>) => {
const { index, technicalStack } = multiProvider.getChainMetadata(chain);
const indexFrom = index?.from;
// Arbitrum Nitro chains record the L1 block number they were deployed at,
// not the L2 block number.
// See: https://docs.arbitrum.io/build-decentralized-apps/arbitrum-vs-ethereum/block-numbers-and-time#ethereum-block-numbers-within-arbitrum
if (technicalStack === ChainTechnicalStack.ArbitrumNitro && !indexFrom) {
// Should never get here because registry should enforce this, but we're being defensive.
throw new Error(
`index.from is not set for Arbitrum Nitro chain ${chain}`,
);
}
// Arbitrum Nitro chains record the L1 block number they were deployed at,
// not the L2 block number.
// See: https://docs.arbitrum.io/build-decentralized-apps/arbitrum-vs-ethereum/block-numbers-and-time#ethereum-block-numbers-within-arbitrum
if (
technicalStack === ChainTechnicalStack.ArbitrumNitro &&
!indexFrom
) {
// Should never get here because registry should enforce this, but we're being defensive.
throw new Error(
`index.from is not set for Arbitrum Nitro chain ${chain}`,
);
}
// If the index.from is specified in the chain metadata, use that.
if (indexFrom) {
return indexFrom;
}
// If the index.from is specified in the chain metadata, use that.
if (indexFrom) {
return indexFrom;
}
const mailbox = core.getContracts(chain).mailbox;
try {
const deployedBlock = await mailbox.deployedBlock();
return deployedBlock.toNumber();
} catch (err) {
console.error(
'Failed to get deployed block, defaulting to 0. Chain:',
chain,
'Error:',
err,
);
return 0;
}
}),
const mailbox = contracts.mailbox;
try {
const deployedBlock = await mailbox.deployedBlock();
return deployedBlock.toNumber();
} catch (err) {
console.error(
'Failed to get deployed block, defaulting to 0. Chain:',
chain,
'Error:',
err,
);
return 0;
}
},
),
);
// Get gas prices for Cosmos chains.

@ -0,0 +1,64 @@
import { AccountConfig, InterchainAccount } from '@hyperlane-xyz/sdk';
import { Address, eqAddress } from '@hyperlane-xyz/utils';
import { icas } from '../config/environments/mainnet3/owners.js';
import { getArgs as getEnvArgs } from './agent-utils.js';
import { getEnvironmentConfig, getHyperlaneCore } from './core-utils.js';
function getArgs() {
return getEnvArgs().option('ownerChain', {
type: 'string',
description: 'Origin chain where the Safe owner lives',
default: 'ethereum',
}).argv;
}
async function main() {
const { environment, ownerChain } = await getArgs();
const config = getEnvironmentConfig(environment);
const multiProvider = await config.getMultiProvider();
const owner = config.owners[ownerChain].ownerOverrides?._safeAddress;
if (!owner) {
console.error(`No Safe owner found for ${ownerChain}`);
process.exit(1);
}
console.log(`Safe owner on ${ownerChain}: ${owner}`);
const { chainAddresses } = await getHyperlaneCore(environment, multiProvider);
const ica = InterchainAccount.fromAddressesMap(chainAddresses, multiProvider);
const ownerConfig: AccountConfig = {
origin: ownerChain,
owner: owner,
};
const mismatchedResults: Record<
string,
{ Expected: Address; Actual: Address }
> = {};
for (const [chain, expectedAddress] of Object.entries(icas)) {
const actualAccount = await ica.getAccount(chain, ownerConfig);
if (!eqAddress(expectedAddress, actualAccount)) {
mismatchedResults[chain] = {
Expected: expectedAddress,
Actual: actualAccount,
};
}
}
if (Object.keys(mismatchedResults).length > 0) {
console.error('\nMismatched ICAs found:');
console.table(mismatchedResults);
process.exit(1);
} else {
console.log('✅ All ICAs match the expected addresses.');
}
}
main().catch((err) => {
console.error('Error:', err);
process.exit(1);
});

@ -39,42 +39,68 @@ async function main() {
const balancesObject = await Promise.all(
chainsToCheck.map(async (chain) => {
const provider = multiProvider.getProvider(chain);
const { decimals, symbol } = await multiProvider.getNativeToken(chain);
const roleBalances = await Promise.all(
roles.map(async (role) => {
// Fetch key
const keys = await envConfig.getKeys(context, role as Role);
await Promise.all(Object.values(keys).map((key) => key.fetch()));
try {
const provider = multiProvider.getProvider(chain);
const { decimals, symbol } = await multiProvider.getNativeToken(chain);
const roleBalances = await Promise.all(
roles.map(async (role) => {
try {
let address: string | undefined;
// Default to known deployer/relayer addresses if not found
let address = keys[chain]?.address;
if (!address) {
if (role === Role.Deployer) {
address =
environment === 'mainnet3' ? MainnetDeployer : TestnetDeployer;
} else if (role === Role.Relayer) {
address =
environment === 'mainnet3' ? MainnetRelayer : TestnetRelayer;
}
}
if (
role === Role.Deployer &&
(environment === 'mainnet3' || environment === 'testnet4')
) {
address =
environment === 'mainnet3'
? MainnetDeployer
: TestnetDeployer;
} else if (
role === Role.Relayer &&
(environment === 'mainnet3' || environment === 'testnet4')
) {
address =
environment === 'mainnet3' ? MainnetRelayer : TestnetRelayer;
} else {
// Fetch key only if role is not deployer/relayer or env is not mainnet/testnet
const keys = await envConfig.getKeys(context, role as Role);
await Promise.all(
Object.values(keys).map((key) => key.fetch()),
);
address = keys[chain]?.address;
}
// Fetch balance
if (address) {
const balance = await provider.getBalance(address);
const formattedBalance = formatUnits(balance, decimals);
return Number(formattedBalance).toFixed(3);
}
return null;
}),
);
return {
chain,
symbol,
...Object.fromEntries(
roles.map((role, index) => [role, roleBalances[index]]),
),
};
// Fetch balance
if (address) {
const balance = await provider.getBalance(address);
const formattedBalance = formatUnits(balance, decimals);
return Number(formattedBalance).toFixed(3);
}
return null;
} catch (error) {
console.error(
`Error fetching balance for ${role} on ${chain}:`,
error,
);
return null;
}
}),
);
return {
chain,
symbol,
...Object.fromEntries(
roles.map((role, index) => [role, roleBalances[index]]),
),
};
} catch (error) {
console.error(`Error processing chain ${chain}:`, error);
return {
chain,
symbol: 'ERROR',
...Object.fromEntries(roles.map((role) => [role, null])),
};
}
}),
);

@ -99,52 +99,56 @@ export abstract class HyperlaneAppGovernor<
}
protected async sendCalls(chain: ChainName, requestConfirmation: boolean) {
const calls = this.calls[chain];
const calls = this.calls[chain] || [];
console.log(`\nFound ${calls.length} transactions for ${chain}`);
const filterCalls = (submissionType: SubmissionType) =>
calls.filter((call) => call.submissionType == submissionType);
const summarizeCalls = async (
submissionType: SubmissionType,
calls: AnnotatedCallData[],
callsForSubmissionType: AnnotatedCallData[],
): Promise<boolean> => {
if (calls.length > 0) {
console.log(
`> ${calls.length} calls will be submitted via ${SubmissionType[submissionType]}`,
);
calls.map((c) => {
console.log(`> > ${c.description}`);
console.log(`> > > to: ${c.to}`);
console.log(`> > > data: ${c.data}`);
console.log(`> > > value: ${c.value}`);
});
if (!requestConfirmation) return true;
if (!callsForSubmissionType || callsForSubmissionType.length === 0) {
return false;
}
const { value: confirmed } = await prompts({
type: 'confirm',
name: 'value',
message: 'Can you confirm?',
initial: false,
});
console.log(
`> ${callsForSubmissionType.length} calls will be submitted via ${SubmissionType[submissionType]}`,
);
callsForSubmissionType.map((c) => {
console.log(`> > ${c.description.trim()}`);
console.log(`> > > to: ${c.to}`);
console.log(`> > > data: ${c.data}`);
console.log(`> > > value: ${c.value}`);
});
if (!requestConfirmation) return true;
return !!confirmed;
}
return false;
const { value: confirmed } = await prompts({
type: 'confirm',
name: 'value',
message: 'Can you confirm?',
initial: false,
});
return !!confirmed;
};
const sendCallsForType = async (
submissionType: SubmissionType,
multiSend: MultiSend,
) => {
const calls = filterCalls(submissionType);
if (calls.length > 0) {
const confirmed = await summarizeCalls(submissionType, calls);
const callsForSubmissionType = filterCalls(submissionType) || [];
if (callsForSubmissionType.length > 0) {
const confirmed = await summarizeCalls(
submissionType,
callsForSubmissionType,
);
if (confirmed) {
console.log(
`Submitting calls on ${chain} via ${SubmissionType[submissionType]}`,
);
try {
await multiSend.sendTransactions(
calls.map((call) => ({
callsForSubmissionType.map((call) => ({
to: call.to,
data: call.data,
value: call.value,
@ -411,8 +415,13 @@ export abstract class HyperlaneAppGovernor<
};
} else {
console.error(
`Failed to determine if signer can propose safe transactions: ${error}`,
`Failed to determine if signer can propose safe transactions on ${chain}. Setting submission type to MANUAL. Error: ${error}`,
);
return {
type: SubmissionType.MANUAL,
chain,
call,
};
}
}
}

@ -25,7 +25,10 @@ import {
import { HyperlaneApp } from '../app/HyperlaneApp.js';
import { appFromAddressesMapHelper } from '../contracts/contracts.js';
import { HyperlaneAddressesMap } from '../contracts/types.js';
import {
HyperlaneAddressesMap,
HyperlaneContracts,
} from '../contracts/types.js';
import { OwnableConfig } from '../deploy/types.js';
import { DerivedHookConfig, EvmHookReader } from '../hook/EvmHookReader.js';
import { DerivedIsmConfig, EvmIsmReader } from '../ism/EvmIsmReader.js';
@ -54,9 +57,16 @@ export class HyperlaneCore extends HyperlaneApp<CoreFactories> {
getRouterConfig = (
owners: Address | ChainMap<OwnableConfig>,
): ChainMap<RouterConfig> => {
// filter for EVM chains
const evmContractsMap = objFilter(
this.contractsMap,
(chainName, _): _ is HyperlaneContracts<CoreFactories> =>
this.multiProvider.getProtocol(chainName) === ProtocolType.Ethereum,
);
// get config
const config = objMap(
this.contractsMap,
evmContractsMap,
(chain, contracts): RouterConfig => ({
mailbox: contracts.mailbox.address,
owner: typeof owners === 'string' ? owners : owners[chain].owner,
@ -64,12 +74,8 @@ export class HyperlaneCore extends HyperlaneApp<CoreFactories> {
typeof owners === 'string' ? undefined : owners[chain].ownerOverrides,
}),
);
// filter for EVM chains
return objFilter(
config,
(chainName, _): _ is RouterConfig =>
this.multiProvider.getProtocol(chainName) === ProtocolType.Ethereum,
);
return config;
};
quoteGasPayment = (

@ -1,6 +1,6 @@
import { ethers, utils as ethersUtils } from 'ethers';
import { assert, eqAddress } from '@hyperlane-xyz/utils';
import { assert, eqAddress, rootLogger } from '@hyperlane-xyz/utils';
import { BytecodeHash } from '../consts/bytecode.js';
import { HyperlaneAppChecker } from '../deploy/HyperlaneAppChecker.js';
@ -36,6 +36,12 @@ export class HyperlaneCoreChecker extends HyperlaneAppChecker<
async checkChain(chain: ChainName): Promise<void> {
const config = this.configMap[chain];
if (!config) {
rootLogger.warn(`No config for chain ${chain}`);
return;
}
// skip chains that are configured to be removed
if (config.remove) {
return;

@ -35,30 +35,24 @@ export abstract class HyperlaneAppChecker<
App extends HyperlaneApp<any>,
Config,
> {
readonly multiProvider: MultiProvider;
readonly app: App;
readonly configMap: ChainMap<Config>;
readonly violations: CheckerViolation[];
readonly violations: CheckerViolation[] = [];
constructor(
multiProvider: MultiProvider,
app: App,
configMap: ChainMap<Config>,
) {
this.multiProvider = multiProvider;
this.app = app;
this.violations = [];
this.configMap = configMap;
}
readonly multiProvider: MultiProvider,
readonly app: App,
readonly configMap: ChainMap<Config>,
) {}
abstract checkChain(chain: ChainName): Promise<void>;
async check(): Promise<void[]> {
const appChains = this.app.chains();
Object.keys(this.configMap)
.filter(
(chain) =>
this.multiProvider.getChainMetadata(chain).protocol ===
ProtocolType.Ethereum && !this.app.chains().includes(chain),
ProtocolType.Ethereum && !appChains.includes(chain),
)
.forEach((chain: string) =>
this.addViolation({
@ -70,8 +64,13 @@ export abstract class HyperlaneAppChecker<
);
return Promise.all(
// this.app.chains() will only return Ethereum chains that can be interacted with.
this.app.chains().map((chain) => this.checkChain(chain)),
appChains
.filter(
(chain) =>
this.multiProvider.getChainMetadata(chain).protocol ===
ProtocolType.Ethereum,
)
.map((chain) => this.checkChain(chain)),
);
}

@ -7,7 +7,7 @@
"react-dom": "^18"
},
"dependencies": {
"@hyperlane-xyz/registry": "4.0.0",
"@hyperlane-xyz/registry": "4.1.0",
"@hyperlane-xyz/sdk": "5.1.0"
},
"devDependencies": {

@ -7590,7 +7590,7 @@ __metadata:
"@aws-sdk/client-s3": "npm:^3.577.0"
"@ethersproject/abi": "npm:*"
"@ethersproject/providers": "npm:*"
"@hyperlane-xyz/registry": "npm:4.0.0"
"@hyperlane-xyz/registry": "npm:4.1.0"
"@hyperlane-xyz/sdk": "npm:5.1.0"
"@hyperlane-xyz/utils": "npm:5.1.0"
"@inquirer/prompts": "npm:^3.0.0"
@ -7683,7 +7683,7 @@ __metadata:
resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld"
dependencies:
"@hyperlane-xyz/core": "npm:5.1.0"
"@hyperlane-xyz/registry": "npm:4.0.0"
"@hyperlane-xyz/registry": "npm:4.1.0"
"@hyperlane-xyz/sdk": "npm:5.1.0"
"@nomiclabs/hardhat-ethers": "npm:^2.2.3"
"@nomiclabs/hardhat-waffle": "npm:^2.0.6"
@ -7732,7 +7732,7 @@ __metadata:
"@ethersproject/providers": "npm:^5.7.2"
"@google-cloud/secret-manager": "npm:^5.5.0"
"@hyperlane-xyz/helloworld": "npm:5.1.0"
"@hyperlane-xyz/registry": "npm:4.0.0"
"@hyperlane-xyz/registry": "npm:4.1.0"
"@hyperlane-xyz/sdk": "npm:5.1.0"
"@hyperlane-xyz/utils": "npm:5.1.0"
"@inquirer/prompts": "npm:^5.3.8"
@ -7790,13 +7790,13 @@ __metadata:
languageName: unknown
linkType: soft
"@hyperlane-xyz/registry@npm:4.0.0":
version: 4.0.0
resolution: "@hyperlane-xyz/registry@npm:4.0.0"
"@hyperlane-xyz/registry@npm:4.1.0":
version: 4.1.0
resolution: "@hyperlane-xyz/registry@npm:4.1.0"
dependencies:
yaml: "npm:2.4.5"
zod: "npm:^3.21.2"
checksum: 90dfe259343fa68315ea58a58e60d47261a6af33fab63f1d0708e2c19ff057977a878b1e0079811388634e08ddf40fd4f99d03ea519cb8ad96d2ce1063ebdff5
checksum: 5de3ef5539abfaadbfefb82e6e69fdb2413f404d8321456c91810fb50a5a70e9f93b38789495efce6ab5963682536e95a2abe636c7d0ad91ee158cc0ce6b063a
languageName: node
linkType: hard
@ -7874,7 +7874,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@hyperlane-xyz/widgets@workspace:typescript/widgets"
dependencies:
"@hyperlane-xyz/registry": "npm:4.0.0"
"@hyperlane-xyz/registry": "npm:4.1.0"
"@hyperlane-xyz/sdk": "npm:5.1.0"
"@storybook/addon-essentials": "npm:^7.6.14"
"@storybook/addon-interactions": "npm:^7.6.14"

Loading…
Cancel
Save