feat: deploy to BOB, Mantle, Taiko (#4051)

resolves https://github.com/hyperlane-xyz/issues/issues/1289

- feat: deploy to BOB, Mantle, Taiko
- drive-by: fix deploying to specific chain
- drive-by: adding AVS operators for eth
- drive-by: support non-evm remotes in mainnet3 core config

---------

Signed-off-by: pbio <10051819+paulbalaji@users.noreply.github.com>
pull/3136/merge
Paul Balaji 5 months ago committed by GitHub
parent c3c002a8fe
commit d316772243
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      .changeset/large-taxis-fly.md
  2. 2
      .registryrc
  3. 24
      rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs
  4. 214
      rust/config/mainnet_config.json
  5. 13
      rust/hyperlane-core/src/chain.rs
  6. 21
      typescript/infra/config/environments/mainnet3/agent.ts
  7. 9
      typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json
  8. 5
      typescript/infra/config/environments/mainnet3/chains.ts
  9. 160
      typescript/infra/config/environments/mainnet3/core.ts
  10. 60
      typescript/infra/config/environments/mainnet3/core/verification.json
  11. 11
      typescript/infra/config/environments/mainnet3/funding.ts
  12. 14
      typescript/infra/config/environments/mainnet3/gasPrices.json
  13. 4
      typescript/infra/config/environments/mainnet3/igp.ts
  14. 13
      typescript/infra/config/environments/mainnet3/index.ts
  15. 940
      typescript/infra/config/environments/mainnet3/ism/verification.json
  16. 6
      typescript/infra/config/environments/mainnet3/owners.ts
  17. 3
      typescript/infra/config/environments/mainnet3/supportedChainNames.ts
  18. 55
      typescript/infra/config/environments/mainnet3/tokenPrices.json
  19. 36
      typescript/infra/config/environments/mainnet3/validators.ts
  20. 2
      typescript/infra/scripts/deploy.ts
  21. 3
      typescript/infra/src/config/gas-oracle.ts
  22. 8
      typescript/infra/src/deployment/deploy.ts
  23. 29
      typescript/sdk/src/consts/multisigIsm.ts

@ -0,0 +1,6 @@
---
'@hyperlane-xyz/infra': minor
'@hyperlane-xyz/sdk': minor
---
Deploy to bob, mantle, taiko

@ -1 +1 @@
v2.1.1
v2.2.1

@ -62,6 +62,14 @@ const DOMAINS: &[RawDomain] = &[
is_test_net: false,
is_deprecated: false,
},
RawDomain {
name: "bob",
token: "ETH",
domain: 60808,
chain_id: 60808,
is_test_net: false,
is_deprecated: false,
},
RawDomain {
name: "bsc",
token: "BNB",
@ -134,6 +142,14 @@ const DOMAINS: &[RawDomain] = &[
is_test_net: false,
is_deprecated: false,
},
RawDomain {
name: "mantle",
token: "MNT",
domain: 5000,
chain_id: 5000,
is_test_net: false,
is_deprecated: false,
},
RawDomain {
name: "mode",
token: "ETH",
@ -214,6 +230,14 @@ const DOMAINS: &[RawDomain] = &[
is_test_net: true,
is_deprecated: false,
},
RawDomain {
name: "taiko",
token: "ETH",
domain: 167000,
chain_id: 167000,
is_test_net: false,
is_deprecated: false,
},
RawDomain {
name: "viction",
token: "VIC",

@ -27,7 +27,7 @@
"from": 2507127
},
"interchainGasPaymaster": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
"interchainSecurityModule": "0xa10686c87d47C8b78c846E77BE2f96607C7c44F4",
"interchainSecurityModule": "0x609ad94304896607A6D81DB00d882245045B79da",
"isTestnet": false,
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162",
@ -86,7 +86,7 @@
"interchainAccountIsm": "0xfa8bfcE55B3A0631dF38257615cEF7FCD3523A48",
"interchainAccountRouter": "0xCD0CFFf6eFD943b4b81f2c15847730dbcD30e3aE",
"interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22",
"interchainSecurityModule": "0xd12C017529BE32c23150313F1E473B76e6B19773",
"interchainSecurityModule": "0x270b97f88B01fc436e5c8053C30A31d5a3Ca90E9",
"mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9",
"merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930",
"name": "arbitrum",
@ -152,7 +152,7 @@
"interchainAccountIsm": "0x786c26C1857032617c215f265509d6E44e44Bfe3",
"interchainAccountRouter": "0xA967A6CE0e73fAf672843DECaA372511996E8852",
"interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0",
"interchainSecurityModule": "0xB7D96FcD923267640BcffC7c3F23530E6C7A4209",
"interchainSecurityModule": "0x899305387C0d8f0aA52C07E20f64D3Ea021B71A8",
"mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6",
"merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A",
"name": "avalanche",
@ -218,7 +218,7 @@
"interchainAccountIsm": "0x861908E6c8F992537F557da5Fb5876836036b347",
"interchainAccountRouter": "0xa85F9e4fdA2FFF1c07f2726a630443af3faDF830",
"interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94",
"interchainSecurityModule": "0xe7aaFbA826B0bDC60aD09b7b8cA8175c9A89cE0b",
"interchainSecurityModule": "0xc0021e56772fD4f0cEA3322a237116b6E8Ce7caE",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117",
"name": "base",
@ -280,7 +280,7 @@
"from": 2496427
},
"interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9",
"interchainSecurityModule": "0xdE516712D58166257E03254BD596CA726417a837",
"interchainSecurityModule": "0x91a6102E235B1e74914804Fb150E1A0542b98b8E",
"mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7",
"merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
"name": "blast",
@ -309,6 +309,62 @@
"testRecipient": "0x17E216fBb22dF4ef8A6640ae9Cb147C92710ac84",
"validatorAnnounce": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72"
},
"bob": {
"aggregationHook": "0x87893ae9DF41fF6e41a7c982AA884edDd8770840",
"blockExplorers": [
{
"apiUrl": "https://explorer.gobob.xyz/api",
"family": "blockscout",
"name": "BOB Explorer",
"url": "https://explorer.gobob.xyz"
}
],
"blocks": {
"confirmations": 1,
"estimateBlockTime": 2,
"reorgPeriod": 1
},
"chainId": 60808,
"displayName": "BOB",
"domainId": 60808,
"domainRoutingIsm": "0x93e62F2c9a89f8b1e62A3c726Bbf6BD1A7b7FA3e",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a",
"gasCurrencyCoinGeckoId": "ethereum",
"gnosisSafeTransactionServiceUrl": "https://transaction.safe.gobob.xyz",
"index": {
"from": 3225119
},
"interchainGasPaymaster": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05",
"interchainSecurityModule": "0x81900eC6CAfC44F418d2d763C3dA437014ddf5CD",
"mailbox": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147",
"merkleTreeHook": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB",
"name": "bob",
"nativeToken": {
"decimals": 18,
"name": "Ether",
"symbol": "ETH"
},
"pausableHook": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83",
"pausableIsm": "0x4E1c88DD261BEe2941e6c1814597e30F53330428",
"protocol": "ethereum",
"protocolFee": "0x2E4B42D3d0FC105E7A729e0Ca757761A61258d14",
"proxyAdmin": "0x95878Fd41bC26f7045C0b98e381c22f010745A75",
"rpcUrls": [
{
"http": "https://rpc.gobob.xyz"
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0x132280A4110A22Cf2D7279AD33d875b445793948",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
"storageGasOracle": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E",
"technicalStack": "other",
"testRecipient": "0xe03dad16074BC5EEA9A9311257BF02Eb0B6AAA2b",
"validatorAnnounce": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503"
},
"bsc": {
"aggregationHook": "0x402Fc106576462a892355d69ACF03D46A888ae88",
"blockExplorers": [
@ -339,7 +395,7 @@
"interchainAccountIsm": "0xB274Bbbc1df5f1d1763216A93d473fde6f5de043",
"interchainAccountRouter": "0x4BBd67dC995572b40Dc6B3eB6CdE5185a5373868",
"interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451",
"interchainSecurityModule": "0x4C23e778aF68a54cb59A44581b90E78b35763C83",
"interchainSecurityModule": "0xA27bf8601a8952588b9561332597Ef8Af5029Bc4",
"mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4",
"merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26",
"name": "bsc",
@ -412,7 +468,7 @@
"interchainAccountIsm": "0x30a8DEc5318e2aAa9ad5b069fC606c4CfF6f5676",
"interchainAccountRouter": "0x4ED23E3885e1651E62564F78817D91865beba575",
"interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7",
"interchainSecurityModule": "0x1b90cCF49e45a87F751b344864e4246D1a57a100",
"interchainSecurityModule": "0xcb6658E0f2211730aB9c95A5c7159393a7f470EE",
"mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb",
"merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366",
"name": "celo",
@ -477,7 +533,7 @@
"interchainAccountIsm": "0x609707355a53d2aAb6366f48E2b607C599D26B29",
"interchainAccountRouter": "0x8dBae9B1616c46A20591fE0006Bf015E28ca5cC9",
"interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611",
"interchainSecurityModule": "0x355F2c5532521ca6Df8A908641Ed69eD0619466d",
"interchainSecurityModule": "0x8b3674adc97Cb670B0D6A6155EBe879F6d75E3fD",
"mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239",
"merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA",
"name": "ethereum",
@ -540,7 +596,7 @@
"from": 5350807
},
"interchainGasPaymaster": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E",
"interchainSecurityModule": "0xf1465DB845d0978e74d45EF195734b43bB739094",
"interchainSecurityModule": "0x3d8FbBbD14932249e98BA9d9FB42c078FbEaa4CF",
"mailbox": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3",
"merkleTreeHook": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147",
"name": "fraxtal",
@ -597,7 +653,7 @@
"interchainAccountIsm": "0x5a56dff3D92D635372718f86e6dF09C1129CFf53",
"interchainAccountRouter": "0x5E59EBAedeB691408EBAcF6C37218fa2cFcaC9f2",
"interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f",
"interchainSecurityModule": "0x613D9ab2dd6cCFa2763d86FdEE3d96C4Ef4C2E96",
"interchainSecurityModule": "0xB4722A94aED7E8cf8adc1839F24b3e3329264Fd5",
"mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f",
"merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645",
"name": "gnosis",
@ -661,7 +717,7 @@
"interchainAccountIsm": "0x31894E7a734540B343d67E491148EB4FC9f7A45B",
"interchainAccountRouter": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"interchainGasPaymaster": "0x19dc38aeae620380430C200a6E990D5Af5480117",
"interchainSecurityModule": "0xC1a7a7b15d2B243f7c6Dbbdd6e8A2C2434cdf7BF",
"interchainSecurityModule": "0xa5fD5Ae4424dd6069a399492299eff6CD370Fc11",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65",
"name": "inevm",
@ -769,7 +825,7 @@
"from": 5154574
},
"interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28",
"interchainSecurityModule": "0xF8aD4EB8aBA13ae546B8D01501c63e4543Ff0660",
"interchainSecurityModule": "0xd03F639c5aaE951A3F7C83dBd5F39C824f7B891F",
"mailbox": "0x02d16BC51af6BfD153d67CA61754cF912E82C4d9",
"merkleTreeHook": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7",
"name": "linea",
@ -827,7 +883,7 @@
"interchainAccountIsm": "0xA34ceDf9068C5deE726C67A4e1DCfCc2D6E2A7fD",
"interchainAccountRouter": "0x0f6fF770Eda6Ba1433C39cCf47d4059b254224Aa",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0x83319BD846D54E49C850027191D094D5E9114339",
"interchainSecurityModule": "0xaC7C2a9bc61C9A7c2Fe426c51CC5800d2672d330",
"isTestnet": false,
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
@ -858,6 +914,62 @@
"timelockController": "0x0000000000000000000000000000000000000000",
"validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9"
},
"mantle": {
"aggregationHook": "0x76b396EaCBF3580B80Ee34C94e780a1Dee76EC72",
"blockExplorers": [
{
"apiUrl": "https://explorer.mantle.xyz/api",
"family": "blockscout",
"name": "Mantle Mainnet Explorer",
"url": "https://explorer.mantle.xyz"
}
],
"blocks": {
"confirmations": 3,
"estimateBlockTime": 2,
"reorgPeriod": 1
},
"chainId": 5000,
"displayName": "Mantle",
"domainId": 5000,
"domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xdB670e1a1e312BF17425b08cE55Bdf2cD8F8eD54",
"gasCurrencyCoinGeckoId": "mantle",
"gnosisSafeTransactionServiceUrl": "https://transaction.multisig.mantle.xyz",
"index": {
"from": 65590958
},
"interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28",
"interchainSecurityModule": "0x05A2E0C12177c6eDD95c805Ab27908d2Bf593466",
"mailbox": "0x398633D19f4371e1DB5a8EFE90468eB70B1176AA",
"merkleTreeHook": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d",
"name": "mantle",
"nativeToken": {
"decimals": 18,
"name": "Mantle",
"symbol": "MNT"
},
"pausableHook": "0x9fA986ACB22953c504Fcf5985DFA476d481C3b1B",
"pausableIsm": "0x83c2DB237e93Ce52565AB110124f78fdf159E3f4",
"protocol": "ethereum",
"protocolFee": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E",
"proxyAdmin": "0x14c3CEee8F431aE947364f43429a98EA89800238",
"rpcUrls": [
{
"http": "https://rpc.mantle.xyz"
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0xeacA9Ff0Cc6dBFc541c567deD2Fc46bA2012b4a9",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
"storageGasOracle": "0xf9DbC8776Bc2812c4DBEc45383A1783Ac758Fb55",
"technicalStack": "other",
"testRecipient": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05",
"validatorAnnounce": "0x1956848601549de5aa0c887892061fA5aB4f6fC4"
},
"mode": {
"aggregationHook": "0x80D80cfBa98dD2d456ECd43Dcc1f852D5C4EeD7a",
"blockExplorers": [
@ -885,7 +997,7 @@
"from": 6817759
},
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
"interchainSecurityModule": "0xEe9443bc2Df7C10327077c605120CDd95e8Ca75F",
"interchainSecurityModule": "0x84CF2C35fB6b59a73aDe2B208585FeFBFE0A044F",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
"name": "mode",
@ -942,7 +1054,7 @@
"interchainAccountIsm": "0x799eA6f430f5CA901b59335fFC2fA10531106009",
"interchainAccountRouter": "0x6b142f596FFc761ac3fFaaC1ecaDe54f4EE09977",
"interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F",
"interchainSecurityModule": "0x3db9D7c5cD0Aa312AB1262C711C10DeBA8303388",
"interchainSecurityModule": "0x63f51e56DF09b10F8Cb8d5B1918152542aC04994",
"mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3",
"merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547",
"name": "moonbeam",
@ -1069,7 +1181,7 @@
"interchainAccountIsm": "0x0389faCac114023C123E22F3E54394944cAbcb48",
"interchainAccountRouter": "0x33Ef006E7083BB38E0AFe3C3979F4e9b84415bf1",
"interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C",
"interchainSecurityModule": "0x32Ce76b9FfD0BbA0e43a2C27c2cAc90E82C48B95",
"interchainSecurityModule": "0xb6266a775255dFD5631763605547D0A733e27E6b",
"mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D",
"merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f",
"name": "optimism",
@ -1192,7 +1304,7 @@
"interchainAccountIsm": "0x90384bC552e3C48af51Ef7D9473A9bF87431f5c7",
"interchainAccountRouter": "0x5e80f3474825B61183c0F0f0726796F589082420",
"interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2",
"interchainSecurityModule": "0x1c39BD73C933c6B1b14685ABD28F996A6a0e306f",
"interchainSecurityModule": "0x04f34f0f98CF07d8F68Af5e0e3403C5E40bE8265",
"mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB",
"merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6",
"name": "polygon",
@ -1262,7 +1374,7 @@
"interchainAccountIsm": "0xC49aF4965264FA7BB6424CE37aA06773ad177224",
"interchainAccountRouter": "0xF15D70941dE2Bf95A23d6488eBCbedE0a444137f",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0xb7556707f04BEF8888294C18c447bE1e4446bF7D",
"interchainSecurityModule": "0x3eF37B803368A7cd060819C67a14430E1c4C45B7",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
"name": "polygonzkevm",
@ -1323,7 +1435,7 @@
"from": 1797579
},
"interchainGasPaymaster": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634",
"interchainSecurityModule": "0xD10AD7d927817558468Ce0F0ab1edEF8D230E2d8",
"interchainSecurityModule": "0x1f41b5FeC09B50f526a2ABADE02a681131c7d296",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
"name": "redstone",
@ -1381,7 +1493,7 @@
"interchainAccountIsm": "0xb89c6ED617f5F46175E41551350725A09110bbCE",
"interchainAccountRouter": "0x9629c28990F11c31735765A6FD59E1E1bC197DbD",
"interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2",
"interchainSecurityModule": "0x0E6aFC8a7b5223cAD7a7c346da1B2e6ECBaA93f0",
"interchainSecurityModule": "0xddaC512B7faDfd36AAfc7e65ECF786EAa9b52686",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76",
"name": "scroll",
@ -1439,7 +1551,7 @@
"from": 80809403
},
"interchainGasPaymaster": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72",
"interchainSecurityModule": "0x10FF77061869714E92E574FcE9025a419f5b999d",
"interchainSecurityModule": "0x8322954E0027C9e7ff95ACA52448f9919fe1fa29",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49",
"name": "sei",
@ -1470,6 +1582,62 @@
},
"validatorAnnounce": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d"
},
"taiko": {
"aggregationHook": "0x1175A31f66C5e3d0ce0ca3B7F80Abe72c6FcE272",
"blockExplorers": [
{
"apiUrl": "https://api.taikoscan.io/api",
"family": "etherscan",
"name": "Taikoscan",
"url": "https://taikoscan.io"
}
],
"blocks": {
"confirmations": 1,
"estimateBlockTime": 12,
"reorgPeriod": 1
},
"chainId": 167000,
"displayName": "Taiko",
"domainId": 167000,
"domainRoutingIsm": "0x5D1e7D7c5B9e6dDC8439F67F10c578f2A1084f6F",
"domainRoutingIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"fallbackRoutingHook": "0x79B1257BDBCaeF98Da685A7c225b6e61a119Cb7a",
"gasCurrencyCoinGeckoId": "ethereum",
"gnosisSafeTransactionServiceUrl": "https://transaction.safe.taiko.xyz",
"index": {
"from": 98997
},
"interchainGasPaymaster": "0x273Bc6b01D9E88c064b6E5e409BdF998246AEF42",
"interchainSecurityModule": "0xdc39E8682A1aD8eBe76C2dE0334091F0a96EA6e6",
"mailbox": "0x28EFBCadA00A7ed6772b3666F3898d276e88CAe3",
"merkleTreeHook": "0x6A55822cf11f9fcBc4c75BC2638AfE8Eb942cAdd",
"name": "taiko",
"nativeToken": {
"decimals": 18,
"name": "Ether",
"symbol": "ETH"
},
"pausableHook": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807",
"pausableIsm": "0xD670c00C0Cad3D32436d7cF270e739772314A8CE",
"protocol": "ethereum",
"protocolFee": "0x4006E7434086E7f2548582cfD5ff5Ebb0e44839d",
"proxyAdmin": "0x398633D19f4371e1DB5a8EFE90468eB70B1176AA",
"rpcUrls": [
{
"http": "https://rpc.mainnet.taiko.xyz"
}
],
"staticAggregationHookFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"staticAggregationIsm": "0xBa2C27984b3Bd991b1CA8C26ce91E07A7208b472",
"staticAggregationIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticMerkleRootMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
"staticMessageIdMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"storageGasOracle": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E",
"technicalStack": "other",
"testRecipient": "0x5fC427653b175F6De5A494DE17d1c7636d7E7965",
"validatorAnnounce": "0x01aE937A7B05d187bBCBE80F44F41879D3D335a4"
},
"viction": {
"aggregationHook": "0x5c7890FAf9c99dC55926F00d624D7Bc6D7ac6834",
"blockExplorers": [
@ -1499,7 +1667,7 @@
"interchainAccountIsm": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807",
"interchainAccountRouter": "0x1956848601549de5aa0c887892061fA5aB4f6fC4",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0xA76F4620ac1e97d273B2C9Ca71805c8afD792098",
"interchainSecurityModule": "0x7E3003Ad3042C70cdA13461Af9EEd6FD7b7B5CcA",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
"name": "viction",
@ -1558,7 +1726,7 @@
"from": 3068132
},
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
"interchainSecurityModule": "0x8fB4297373f1f11032856693Cf6eee5eC8d7FF4F",
"interchainSecurityModule": "0xb44DE9FB31fab40698C334C7BFA7E5f2AC61f64c",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
"name": "zetachain",

@ -105,6 +105,12 @@ pub enum KnownHyperlaneDomain {
Sei = 1329,
Bob = 60808,
Mantle = 5000,
Taiko = 167000,
// -- Local test chains --
/// Test1 local chain
Test1 = 13371,
@ -237,7 +243,8 @@ impl KnownHyperlaneDomain {
Mainnet: [
Ethereum, Avalanche, Arbitrum, Polygon, Optimism, BinanceSmartChain, Celo,
Moonbeam, Gnosis, MantaPacific, Neutron, Injective, InEvm, Ancient8, Blast,
Mode, Redstone, Viction, Zetachain, Fraxtal, Linea, Sei, Osmosis
Mode, Redstone, Viction, Zetachain, Fraxtal, Linea, Sei, Osmosis,
Bob, Mantle, Taiko
],
Testnet: [
Alfajores, MoonbaseAlpha, Sepolia, ScrollSepolia, Chiado, PlumeTestnet, Fuji, BinanceSmartChainTestnet, Holesky
@ -255,7 +262,7 @@ impl KnownHyperlaneDomain {
Optimism, BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis,
Alfajores, Moonbeam, InEvm, Ancient8, Blast, Mode, Redstone, Viction,
Zetachain, MoonbaseAlpha, ScrollSepolia, Chiado, MantaPacific, PlumeTestnet,
Fraxtal, Linea, Sei,
Fraxtal, Linea, Sei, Bob, Mantle, Taiko,
Test1, Test2, Test3
],
HyperlaneDomainProtocol::Fuel: [FuelTest1],
@ -273,7 +280,7 @@ impl KnownHyperlaneDomain {
Ethereum, Sepolia, Holesky, Polygon, Avalanche, Fuji, Optimism,
BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis, Alfajores, Moonbeam, MoonbaseAlpha,
ScrollSepolia, Chiado, MantaPacific, Neutron, Injective, InEvm, Ancient8, Blast, Mode, Redstone,
Viction, Zetachain, Fraxtal, Linea, Sei, Osmosis,
Viction, Zetachain, Fraxtal, Linea, Sei, Osmosis, Bob, Mantle, Taiko,
Test1, Test2, Test3, FuelTest1, SealevelTest1, SealevelTest2, CosmosTest99990, CosmosTest99991
],
})

@ -15,6 +15,7 @@ import {
} from '../../../src/config/agent/relayer.js';
import { ALL_KEY_ROLES, Role } from '../../../src/roles.js';
import { Contexts } from '../../contexts.js';
import { getDomainId } from '../../registry.js';
import { environment } from './chains.js';
import { helloWorld } from './helloworld.js';
@ -51,6 +52,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
avalanche: true,
base: true,
blast: true,
bob: true,
bsc: true,
celo: true,
ethereum: true,
@ -60,6 +62,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
inevm: true,
linea: true,
mantapacific: true,
mantle: true,
mode: true,
moonbeam: true,
neutron: true,
@ -70,6 +73,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
redstone: true,
scroll: true,
sei: true,
taiko: true,
viction: true,
zetachain: true,
},
@ -79,6 +83,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
avalanche: true,
base: true,
blast: true,
bob: true,
bsc: true,
celo: true,
ethereum: true,
@ -88,6 +93,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
inevm: true,
linea: true,
mantapacific: true,
mantle: true,
mode: true,
moonbeam: true,
// At the moment, we only relay between Neutron and Manta Pacific on the neutron context.
@ -99,6 +105,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
redstone: true,
scroll: true,
sei: true,
taiko: true,
viction: true,
zetachain: true,
},
@ -108,6 +115,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
avalanche: true,
base: true,
blast: true,
bob: true,
bsc: true,
celo: true,
ethereum: true,
@ -118,6 +126,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
inevm: true,
linea: true,
mantapacific: true,
mantle: true,
mode: true,
moonbeam: true,
// Cannot scrape non-EVM chains
@ -132,6 +141,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = {
// and the scraper not gracefully handling txs that may not exist via the eth RPC, we don't run the scraper.
sei: false,
scroll: true,
taiko: true,
// Has RPC non-compliance that breaks scraping.
viction: false,
zetachain: true,
@ -153,6 +163,11 @@ const contextBase = {
} as const;
const gasPaymentEnforcement: GasPaymentEnforcement[] = [
{
type: GasPaymentEnforcementPolicyType.Minimum,
payment: '1',
matchingList: [{ destinationDomain: getDomainId('mantle') }],
},
// To cover ourselves against IGP indexing issues and to ensure Nexus
// users have the best possible experience, we whitelist messages between
// warp routes that we know are certainly paying for gas.
@ -251,7 +266,7 @@ const hyperlane: RootAgentConfig = {
rpcConsensusType: RpcConsensusType.Fallback,
docker: {
repo,
tag: '4cc9327-20240701-214057',
tag: '7a8478b-20240703-113821',
},
gasPaymentEnforcement: gasPaymentEnforcement,
metricAppContexts,
@ -260,7 +275,7 @@ const hyperlane: RootAgentConfig = {
validators: {
docker: {
repo,
tag: '0d12ff3-20240620-173353',
tag: '7a8478b-20240703-113821',
},
rpcConsensusType: RpcConsensusType.Quorum,
chains: validatorChainConfig(Contexts.Hyperlane),
@ -270,7 +285,7 @@ const hyperlane: RootAgentConfig = {
rpcConsensusType: RpcConsensusType.Fallback,
docker: {
repo,
tag: '0d12ff3-20240620-173353',
tag: '7a8478b-20240703-113821',
},
resources: scraperResources,
},

@ -26,6 +26,9 @@
"blast": {
"validators": ["0xf20c0b09f597597c8d2430d3d72dfddaf09177d1"]
},
"bob": {
"validators": ["0x20f283be1eb0e81e22f51705dcb79883cfdd34aa"]
},
"bsc": {
"validators": [
"0x570af9b7b36568c8877eebba6c6727aa9dab7268",
@ -77,6 +80,9 @@
"0x5dda0c4cf18de3b3ab637f8df82b24921082b54c"
]
},
"mantle": {
"validators": ["0xf930636c5a1a8bf9302405f72e3af3c96ebe4a52"]
},
"mode": {
"validators": ["0x7eb2e1920a4166c19d6884c1cec3d2cf356fc9b7"]
},
@ -131,6 +137,9 @@
"sei": {
"validators": ["0x9920d2dbf6c85ffc228fdc2e810bf895732c6aa5"]
},
"taiko": {
"validators": ["0xa930073c8f2d0b2f7423ea32293e0d1362e65d79"]
},
"viction": {
"validators": ["0x1f87c368f8e05a85ef9126d984a980a20930cb9c"]
},

@ -29,6 +29,11 @@ export const chainMetadataOverrides: ChainMap<Partial<ChainMetadata>> = {
maxPriorityFeePerGas: 50 * 10 ** 9, // 50 gwei
},
},
polygonzkevm: {
transactionOverrides: {
gasPrice: 1 * 10 ** 9, // 1 gwei
},
},
ethereum: {
blocks: {
confirmations: 3,

@ -17,97 +17,97 @@ import {
RoutingIsmConfig,
defaultMultisigConfigs,
} from '@hyperlane-xyz/sdk';
import { Address, ProtocolType, objMap } from '@hyperlane-xyz/utils';
import { getChain } from '../../registry.js';
import { Address, objMap } from '@hyperlane-xyz/utils';
import { igp } from './igp.js';
import { DEPLOYER, owners } from './owners.js';
import { DEPLOYER, ethereumChainOwners } from './owners.js';
import { supportedChainNames } from './supportedChainNames.js';
export const core: ChainMap<CoreConfig> = objMap(owners, (local, owner) => {
const originMultisigs: ChainMap<MultisigConfig> = Object.fromEntries(
supportedChainNames
.filter((chain) => getChain(chain).protocol === ProtocolType.Ethereum)
.filter((chain) => chain !== local)
.map((origin) => [origin, defaultMultisigConfigs[origin]]),
);
export const core: ChainMap<CoreConfig> = objMap(
ethereumChainOwners,
(local, owner) => {
const originMultisigs: ChainMap<MultisigConfig> = Object.fromEntries(
supportedChainNames
.filter((chain) => chain !== local)
.map((origin) => [origin, defaultMultisigConfigs[origin]]),
);
const merkleRoot = (multisig: MultisigConfig): MultisigIsmConfig => ({
type: IsmType.MERKLE_ROOT_MULTISIG,
...multisig,
});
const merkleRoot = (multisig: MultisigConfig): MultisigIsmConfig => ({
type: IsmType.MERKLE_ROOT_MULTISIG,
...multisig,
});
const messageIdIsm = (multisig: MultisigConfig): MultisigIsmConfig => ({
type: IsmType.MESSAGE_ID_MULTISIG,
...multisig,
});
const messageIdIsm = (multisig: MultisigConfig): MultisigIsmConfig => ({
type: IsmType.MESSAGE_ID_MULTISIG,
...multisig,
});
const routingIsm: RoutingIsmConfig = {
type: IsmType.ROUTING,
domains: objMap(
originMultisigs,
(_, multisig): AggregationIsmConfig => ({
type: IsmType.AGGREGATION,
modules: [messageIdIsm(multisig), merkleRoot(multisig)],
threshold: 1,
}),
),
...owner,
};
const routingIsm: RoutingIsmConfig = {
type: IsmType.ROUTING,
domains: objMap(
originMultisigs,
(_, multisig): AggregationIsmConfig => ({
type: IsmType.AGGREGATION,
modules: [messageIdIsm(multisig), merkleRoot(multisig)],
threshold: 1,
}),
),
...owner,
};
const pausableIsm: PausableIsmConfig = {
type: IsmType.PAUSABLE,
paused: false,
owner: DEPLOYER, // keep pausable hot
};
const pausableIsm: PausableIsmConfig = {
type: IsmType.PAUSABLE,
paused: false,
owner: DEPLOYER, // keep pausable hot
};
const defaultIsm: AggregationIsmConfig = {
type: IsmType.AGGREGATION,
modules: [routingIsm, pausableIsm],
threshold: 2,
};
const defaultIsm: AggregationIsmConfig = {
type: IsmType.AGGREGATION,
modules: [routingIsm, pausableIsm],
threshold: 2,
};
const merkleHook: MerkleTreeHookConfig = {
type: HookType.MERKLE_TREE,
};
const merkleHook: MerkleTreeHookConfig = {
type: HookType.MERKLE_TREE,
};
const igpHook = igp[local];
const igpHook = igp[local];
const pausableHook: PausableHookConfig = {
type: HookType.PAUSABLE,
paused: false,
owner: DEPLOYER, // keep pausable hot
};
const aggregationHooks = objMap(
originMultisigs,
(_origin, _): AggregationHookConfig => ({
type: HookType.AGGREGATION,
hooks: [pausableHook, merkleHook, igpHook],
}),
);
const defaultHook: FallbackRoutingHookConfig = {
type: HookType.FALLBACK_ROUTING,
...owner,
domains: aggregationHooks,
fallback: merkleHook,
};
const pausableHook: PausableHookConfig = {
type: HookType.PAUSABLE,
paused: false,
owner: DEPLOYER, // keep pausable hot
};
const aggregationHooks = objMap(
originMultisigs,
(_origin, _): AggregationHookConfig => ({
type: HookType.AGGREGATION,
hooks: [pausableHook, merkleHook, igpHook],
}),
);
const defaultHook: FallbackRoutingHookConfig = {
type: HookType.FALLBACK_ROUTING,
...owner,
domains: aggregationHooks,
fallback: merkleHook,
};
if (typeof owner.owner !== 'string') {
throw new Error('beneficiary must be a string');
}
const requiredHook: ProtocolFeeHookConfig = {
type: HookType.PROTOCOL_FEE,
maxProtocolFee: ethers.utils.parseUnits('1', 'gwei').toString(), // 1 gwei of native token
protocolFee: BigNumber.from(0).toString(), // 0 wei
beneficiary: owner.owner as Address, // Owner can be AccountConfig
...owner,
};
if (typeof owner.owner !== 'string') {
throw new Error('beneficiary must be a string');
}
const requiredHook: ProtocolFeeHookConfig = {
type: HookType.PROTOCOL_FEE,
maxProtocolFee: ethers.utils.parseUnits('1', 'gwei').toString(), // 1 gwei of native token
protocolFee: BigNumber.from(0).toString(), // 0 wei
beneficiary: owner.owner as Address, // Owner can be AccountConfig
...owner,
};
return {
defaultIsm,
defaultHook,
requiredHook,
...owner,
};
});
return {
defaultIsm,
defaultHook,
requiredHook,
...owner,
};
},
);

@ -1989,6 +1989,20 @@
"name": "PausableIsm"
}
],
"bob": [
{
"address": "0x2E4B42D3d0FC105E7A729e0Ca757761A61258d14",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503",
"constructorArguments": "0000000000000000000000008358d8291e3bedb04804975eea0fe9fe0fafb147",
"isProxy": false,
"name": "ValidatorAnnounce"
}
],
"bsc": [
{
"address": "0xBFA300164A04437D64Afda390736e6DC45096da1",
@ -4423,6 +4437,32 @@
"name": "PausableIsm"
}
],
"mantle": [
{
"address": "0x83c2DB237e93Ce52565AB110124f78fdf159E3f4",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28",
"constructorArguments": "000000000000000000000000a805695c20ed9f4ce9905cd1afae7877a81ec0d700000000000000000000000014c3ceee8f431ae947364f43429a98ea8980023800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000",
"isProxy": true,
"name": "TransparentUpgradeableProxy"
},
{
"address": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0x1956848601549de5aa0c887892061fA5aB4f6fC4",
"constructorArguments": "000000000000000000000000398633d19f4371e1db5a8efe90468eb70b1176aa",
"isProxy": false,
"name": "ValidatorAnnounce"
}
],
"mode": [
{
"address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
@ -7649,6 +7689,26 @@
"name": "ValidatorAnnounce"
}
],
"taiko": [
{
"address": "0x4006E7434086E7f2548582cfD5ff5Ebb0e44839d",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0x01aE937A7B05d187bBCBE80F44F41879D3D335a4",
"constructorArguments": "00000000000000000000000028efbcada00a7ed6772b3666f3898d276e88cae3",
"isProxy": false,
"name": "ValidatorAnnounce"
},
{
"address": "0xD670c00C0Cad3D32436d7cF270e739772314A8CE",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
}
],
"viction": [
{
"address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",

@ -7,7 +7,7 @@ import { environment } from './chains.js';
export const keyFunderConfig: KeyFunderConfig = {
docker: {
repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo',
tag: 'e248ad9-20240701-155415',
tag: '1b5e4d4-20240702-152903',
},
// We're currently using the same deployer/key funder key as mainnet2.
// To minimize nonce clobbering we offset the key funder cron
@ -28,6 +28,7 @@ export const keyFunderConfig: KeyFunderConfig = {
avalanche: '5',
base: '0.5',
blast: '0.2',
bob: '0.2',
bsc: '5',
celo: '3',
ethereum: '0.5',
@ -36,6 +37,7 @@ export const keyFunderConfig: KeyFunderConfig = {
inevm: '3',
linea: '0.2',
mantapacific: '0.2',
mantle: '20',
mode: '0.2',
moonbeam: '5',
optimism: '0.5',
@ -44,6 +46,7 @@ export const keyFunderConfig: KeyFunderConfig = {
redstone: '0.2',
scroll: '0.5',
sei: '10',
taiko: '0.2',
viction: '3',
zetachain: '20',
},
@ -53,6 +56,7 @@ export const keyFunderConfig: KeyFunderConfig = {
avalanche: '6',
base: '0.05',
blast: '0',
bob: '0',
bsc: '0.35',
celo: '150',
ethereum: '0.4',
@ -61,6 +65,7 @@ export const keyFunderConfig: KeyFunderConfig = {
inevm: '0.05',
linea: '0',
mantapacific: '0',
mantle: '0',
mode: '0',
moonbeam: '250',
optimism: '0.1',
@ -69,6 +74,7 @@ export const keyFunderConfig: KeyFunderConfig = {
redstone: '0',
scroll: '0.05',
sei: '0',
taiko: '0',
viction: '0.05',
zetachain: '0',
},
@ -78,6 +84,7 @@ export const keyFunderConfig: KeyFunderConfig = {
avalanche: '2',
base: '0.1',
blast: '0.1',
bob: '0.1',
bsc: '0.3',
celo: '5',
ethereum: '0.2',
@ -86,6 +93,7 @@ export const keyFunderConfig: KeyFunderConfig = {
inevm: '3',
linea: '0.1',
mantapacific: '0.1',
mantle: '10',
mode: '0.1',
moonbeam: '5',
optimism: '0.1',
@ -94,6 +102,7 @@ export const keyFunderConfig: KeyFunderConfig = {
redstone: '0.1',
scroll: '0.1',
sei: '2',
taiko: '0.1',
viction: '2',
zetachain: '20',
},

@ -19,6 +19,10 @@
"amount": "0.5",
"decimals": 9
},
"bob": {
"amount": "0.001000252",
"decimals": 9
},
"bsc": {
"amount": "5.0",
"decimals": 9
@ -52,7 +56,11 @@
"decimals": 9
},
"mantapacific": {
"amount": "0.101967574",
"amount": "0.101416541",
"decimals": 9
},
"mantle": {
"amount": "0.02",
"decimals": 9
},
"mode": {
@ -95,6 +103,10 @@
"amount": "1.0",
"decimals": 9
},
"taiko": {
"amount": "0.010000001",
"decimals": 9
},
"viction": {
"amount": "0.25",
"decimals": 9

@ -19,7 +19,7 @@ import {
import { ethereumChainNames } from './chains.js';
import gasPrices from './gasPrices.json';
import { DEPLOYER, owners } from './owners.js';
import { DEPLOYER, ethereumChainOwners } from './owners.js';
import { supportedChainNames } from './supportedChainNames.js';
import rawTokenPrices from './tokenPrices.json';
@ -59,7 +59,7 @@ const storageGasOracleConfig: AllStorageGasOracleConfigs =
);
export const igp: ChainMap<IgpConfig> = objMap(
owners,
ethereumChainOwners,
(local, owner): IgpConfig => ({
type: HookType.INTERCHAIN_GAS_PAYMASTER,
...owner,

@ -1,28 +1,21 @@
import { IRegistry } from '@hyperlane-xyz/registry';
import {
getKeysForRole,
getMultiProtocolProvider,
getMultiProviderForRole,
} from '../../../scripts/agent-utils.js';
import { getRegistryForEnvironment } from '../../../src/config/chain.js';
import { EnvironmentConfig } from '../../../src/config/environment.js';
import { Role } from '../../../src/roles.js';
import { Contexts } from '../../contexts.js';
import { agents } from './agent.js';
import {
chainMetadataOverrides,
environment as environmentName,
getRegistry,
} from './chains.js';
import { environment as environmentName, getRegistry } from './chains.js';
import { core } from './core.js';
import { keyFunderConfig } from './funding.js';
import { helloWorld } from './helloworld.js';
import { igp } from './igp.js';
import { infrastructure } from './infrastructure.js';
import { bridgeAdapterConfigs, relayerConfig } from './liquidityLayer.js';
import { owners } from './owners.js';
import { ethereumChainOwners } from './owners.js';
import { supportedChainNames } from './supportedChainNames.js';
export const environment: EnvironmentConfig = {
@ -50,7 +43,7 @@ export const environment: EnvironmentConfig = {
agents,
core,
igp,
owners,
owners: ethereumChainOwners,
infra: infrastructure,
helloWorld,
keyFunderConfig,

@ -13,12 +13,12 @@ export function localAccountRouters(): ChainMap<Address> {
const coreAddresses: ChainMap<AddressesMap> = getMainnetAddresses();
const filteredAddresses = objFilter(
coreAddresses,
(local, addressMap): addressMap is AddressesMap =>
(_, addressMap): addressMap is AddressesMap =>
addressMap.interchainAccountRouter !== undefined,
);
return objMap(
filteredAddresses,
(local, addressMap) => addressMap.interchainAccountRouter,
(_, addressMap) => addressMap.interchainAccountRouter,
);
}
@ -49,7 +49,7 @@ export const DEPLOYER = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba';
// NOTE: if you wanna use ICA governance, you can do the following:
// const localRouters = localAccountRouters();
// owner: {origin: <HUB_CHAIN>, owner: <SAFE_ADDRESS>, localRouter: localRouters[chain]}
export const owners: ChainMap<OwnableConfig> = Object.fromEntries(
export const ethereumChainOwners: ChainMap<OwnableConfig> = Object.fromEntries(
ethereumChainNames.map((local) => [
local,
{

@ -6,6 +6,7 @@ export const supportedChainNames = [
'avalanche',
'base',
'blast',
'bob',
'bsc',
'celo',
'ethereum',
@ -15,6 +16,7 @@ export const supportedChainNames = [
'injective',
'linea',
'mantapacific',
'mantle',
'mode',
'moonbeam',
'neutron',
@ -25,6 +27,7 @@ export const supportedChainNames = [
'redstone',
'scroll',
'sei',
'taiko',
'viction',
'zetachain',
];

@ -1,28 +1,31 @@
{
"arbitrum": "3537.12",
"ancient8": "3537.12",
"avalanche": "32.04",
"base": "3537.12",
"blast": "3537.12",
"bsc": "611.69",
"celo": "0.709793",
"ethereum": "3537.12",
"fraxtal": "3519.8",
"gnosis": "1.001",
"inevm": "28.61",
"injective": "28.61",
"linea": "3537.12",
"mantapacific": "3537.12",
"mode": "3537.12",
"moonbeam": "0.278261",
"neutron": "0.623705",
"optimism": "3537.12",
"osmosis": "0.649286",
"polygon": "0.643148",
"polygonzkevm": "3537.12",
"redstone": "3537.12",
"scroll": "3537.12",
"sei": "0.477119",
"viction": "0.404896",
"zetachain": "1.16"
"arbitrum": "3286.72",
"ancient8": "3286.72",
"avalanche": "24.05",
"base": "3286.72",
"blast": "3286.72",
"bob": "3286.72",
"bsc": "563.4",
"celo": "0.572951",
"ethereum": "3286.72",
"fraxtal": "3288.13",
"gnosis": "0.999461",
"inevm": "20.98",
"injective": "20.98",
"linea": "3286.72",
"mantapacific": "3286.72",
"mantle": "0.737097",
"mode": "3286.72",
"moonbeam": "0.194356",
"neutron": "0.428175",
"optimism": "3286.72",
"osmosis": "0.530468",
"polygon": "0.5493",
"polygonzkevm": "3286.72",
"redstone": "3286.72",
"scroll": "3286.72",
"sei": "0.34564",
"taiko": "3286.72",
"viction": "0.363521",
"zetachain": "0.818829"
}

@ -236,6 +236,18 @@ export const validatorChainConfig = (
'base',
),
},
bob: {
interval: 5,
reorgPeriod: getReorgPeriod('bob'),
validators: validatorsConfig(
{
[Contexts.Hyperlane]: ['0x20f283be1eb0e81e22f51705dcb79883cfdd34aa'],
[Contexts.ReleaseCandidate]: [],
[Contexts.Neutron]: [],
},
'bob',
),
},
injective: {
interval: 5,
reorgPeriod: getReorgPeriod('injective'),
@ -296,6 +308,18 @@ export const validatorChainConfig = (
'linea',
),
},
mantle: {
interval: 5,
reorgPeriod: getReorgPeriod('mantle'),
validators: validatorsConfig(
{
[Contexts.Hyperlane]: ['0xf930636c5a1a8bf9302405f72e3af3c96ebe4a52'],
[Contexts.ReleaseCandidate]: [],
[Contexts.Neutron]: [],
},
'mantle',
),
},
sei: {
interval: 5,
reorgPeriod: getReorgPeriod('sei'),
@ -330,6 +354,18 @@ export const validatorChainConfig = (
'scroll',
),
},
taiko: {
interval: 5,
reorgPeriod: getReorgPeriod('taiko'),
validators: validatorsConfig(
{
[Contexts.Hyperlane]: ['0xa930073c8f2d0b2f7423ea32293e0d1362e65d79'],
[Contexts.ReleaseCandidate]: [],
[Contexts.Neutron]: [],
},
'taiko',
),
},
polygonzkevm: {
interval: 5,
reorgPeriod: getReorgPeriod('polygonzkevm'),

@ -253,7 +253,7 @@ async function main() {
cache,
// Use chains if provided, otherwise deploy to all chains
// If fork is provided, deploy to fork only
targetNetworks: chains ?? !fork ? [] : [fork],
targetNetworks: chains && chains.length > 0 ? chains : !fork ? [] : [fork],
agentConfig,
});
}

@ -141,14 +141,17 @@ function getMinUsdCost(local: ChainName, remote: ChainName): number {
ancient8: 0.5,
base: 0.5,
blast: 0.5,
bob: 0.5,
fraxtal: 0.5,
linea: 0.5,
mantapacific: 0.5,
mantle: 0.5,
mode: 0.5,
optimism: 0.5,
polygonzkevm: 0.5,
// Scroll is more expensive than the rest due to higher L1 fees
scroll: 1.5,
taiko: 0.5,
// Nexus adjustment
neutron: 0.5,
};

@ -82,8 +82,12 @@ export async function deployWithArtifacts<Config extends object>({
// Deploy the contracts
try {
await deployer.deploy(targetConfigMap);
} catch (e) {
console.error('Failed to deploy contracts', e);
} catch (e: any) {
if (e?.message.includes('Timed out')) {
console.warn('Contract deployment exceeding configured timeout', e);
} else {
console.error('Contract deployment failed', e);
}
}
await postDeploy(deployer, cache, agentConfig);

@ -61,6 +61,15 @@ export const defaultMultisigConfigs: ChainMap<MultisigConfig> = {
],
},
bob: {
threshold: 2,
validators: [
'0x20f283be1eb0e81e22f51705dcb79883cfdd34aa',
'0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly
'0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis
],
},
bsc: {
threshold: 2,
validators: [
@ -113,6 +122,8 @@ export const defaultMultisigConfigs: ChainMap<MultisigConfig> = {
'0x5450447aee7b544c462c9352bef7cad049b0c2dc', // zeeprime
'0xce327111035dd38698c92c3778884dbbb0ca8103', // everstake
'0xb2f5a6a6e6046e2ede213617e989329666a6c4bc', // staked
'0xb683b742b378632a5f73a2a5a45801b3489bba44', // avs: luganodes
'0xbf1023eff3dba21263bf2db2add67a0d6bcda2de', // avs: pier two
],
},
@ -188,6 +199,15 @@ export const defaultMultisigConfigs: ChainMap<MultisigConfig> = {
],
},
mantle: {
threshold: 2,
validators: [
'0xf930636c5a1a8bf9302405f72e3af3c96ebe4a52',
'0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly
'0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis
],
},
mode: {
threshold: 2,
validators: [
@ -317,6 +337,15 @@ export const defaultMultisigConfigs: ChainMap<MultisigConfig> = {
validators: ['0xd4ce8fa138d4e083fc0e480cca0dbfa4f5f30bd5'],
},
taiko: {
threshold: 2,
validators: [
'0xa930073c8f2d0b2f7423ea32293e0d1362e65d79',
'0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly
'0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis
],
},
viction: {
threshold: 2,
validators: [

Loading…
Cancel
Save