chore: enroll worldchain, xlayer, cheesechain, zircuit validators (#4313)

- chore: enroll worldchain, xlayer, cheesechain, zircuit validators
- fix: update cosmos zod schema
- drive-by: update core checker to check if the ism in registry matches
the expected config
pull/4327/head
Paul Balaji 3 months ago committed by GitHub
parent 0d544d97e5
commit 279516f280
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 5
      .changeset/gold-weeks-lay.md
  2. 2
      .registryrc
  3. 141
      rust/config/mainnet_config.json
  4. 210
      typescript/infra/config/environments/mainnet3/core/verification.json
  5. 1
      typescript/infra/scripts/check-deploy.ts
  6. 6
      typescript/infra/src/config/gas-oracle.ts
  7. 9
      typescript/sdk/src/consts/multisigIsm.ts
  8. 1
      typescript/sdk/src/core/CoreDeployer.hardhat-test.ts
  9. 34
      typescript/sdk/src/core/HyperlaneCoreChecker.ts
  10. 483
      typescript/sdk/src/utils/cosmos.ts

@ -0,0 +1,5 @@
---
'@hyperlane-xyz/sdk': minor
---
Update cosmos zod schema and enroll new validators for cheesechain, xlayer, zircuit, worldchain.

@ -1 +1 @@
v2.5.0
a000b2a0e64b6cdd27b3edd98cbf2495f2725c64

@ -34,7 +34,7 @@
"interchainAccountIsm": "0xd766e7C7517f2d0D92754b2fe4aE7AdEf7bDEC3e",
"interchainAccountRouter": "0x25C87e735021F72d8728438C2130b02E3141f2cb",
"interchainGasPaymaster": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
"interchainSecurityModule": "0x46AC0093B93D9F1d90d68492adb23Fa5a95417Cb",
"interchainSecurityModule": "0x9Bb850d2a2e9aBCd55B6E73fE1515877A7eD50fb",
"isTestnet": false,
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162",
@ -98,7 +98,7 @@
"interchainAccountIsm": "0x2A7574358Ec53522CE2452887661AB4c86F7d400",
"interchainAccountRouter": "0x91874Dbed74925dFe6059B90385EEb90DdE0B2E6",
"interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22",
"interchainSecurityModule": "0xE665100047d75E174581F7C4fA5F0ACb18d291dE",
"interchainSecurityModule": "0x9636e3601697185Ab24D0f9e23Ac0cEC2ab6e558",
"mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9",
"merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930",
"name": "arbitrum",
@ -168,7 +168,7 @@
"interchainAccountIsm": "0x27a3233c05C1Df7c163123301D14bE9349E3Cb48",
"interchainAccountRouter": "0xa82a0227e6d6db53AF4B264A852bfF91C6504a51",
"interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0",
"interchainSecurityModule": "0x6b64ff9aB7398256A36e24b2E5A6D7F38Df747fc",
"interchainSecurityModule": "0xB0Ba58230e9a8125123c732783FC738B0a2ECa81",
"mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6",
"merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A",
"name": "avalanche",
@ -238,7 +238,7 @@
"interchainAccountIsm": "0x223F7D3f27E6272266AE4B5B91Fd5C7A2d798cD8",
"interchainAccountRouter": "0x4767D22117bBeeb295413000B620B93FD8522d53",
"interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94",
"interchainSecurityModule": "0xEF296B8663701c10B41E64fc79C1d54066E7A269",
"interchainSecurityModule": "0x3fB45446b0003D98fD728E426Ef7026b507b5669",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117",
"name": "base",
@ -306,7 +306,7 @@
"interchainAccountIsm": "0xe93f2f409ad8B5000431D234472973fe848dcBEC",
"interchainAccountRouter": "0x2f4Eb04189e11Af642237Da62d163Ab714614498",
"interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9",
"interchainSecurityModule": "0xfF940cE4bf10Ad26EC8c879136D66958082E04E9",
"interchainSecurityModule": "0x88263fc724Bf58fcA198d4D9F2E961fA30c745Fc",
"mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7",
"merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465",
"name": "blast",
@ -372,7 +372,7 @@
"interchainAccountIsm": "0x451dF8AB0936D85526D816f0b4dCaDD934A034A4",
"interchainAccountRouter": "0x5C02157068a52cEcfc98EDb6115DE6134EcB4764",
"interchainGasPaymaster": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05",
"interchainSecurityModule": "0xfce46c0C7976F33779883e012cb2902fE3C048c7",
"interchainSecurityModule": "0x713E6ceCaaBeb148755D3490fbB87EB731b7cDA7",
"mailbox": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147",
"merkleTreeHook": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB",
"name": "bob",
@ -436,7 +436,7 @@
"interchainAccountIsm": "0x9e22945bE593946618383B108CC5bce09eBA4C26",
"interchainAccountRouter": "0x32A07c1B7a7fe8D4A0e44B0181873aB9d64C16c1",
"interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451",
"interchainSecurityModule": "0x843919C5D3256FC533dC4A23bDdA59D037a491F8",
"interchainSecurityModule": "0x1bDbFF788eD269C113a7140709D4ee5556420fC3",
"mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4",
"merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26",
"name": "bsc",
@ -514,7 +514,7 @@
"interchainAccountIsm": "0xB732c83aeE29596E3163Da2260710eAB67Bc0B29",
"interchainAccountRouter": "0x27a6cAe33378bB6A6663b382070427A01fc9cB37",
"interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7",
"interchainSecurityModule": "0x07cC4EE3eB2AEA5c045C72725AA3fdC7F5d73474",
"interchainSecurityModule": "0x73Ee35655c8269F8D04C2Be6c67915Db7C862FCb",
"mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb",
"merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366",
"name": "celo",
@ -576,7 +576,7 @@
"interchainAccountIsm": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2",
"interchainAccountRouter": "0xEF9A332Ec1fD233Bf9344A58be56ff9E104B4f60",
"interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503",
"interchainSecurityModule": "0xD3bd8f20e169364d14c7dBFE698258D780FC71e3",
"interchainSecurityModule": "0x6455CbF559E2227aA23409930D0F860e2f244B70",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD",
"name": "cheesechain",
@ -607,6 +607,7 @@
"validatorAnnounce": "0x047ba6c9949baB22d13C347B40819b7A20C4C53a"
},
"cyber": {
"aggregationHook": "0xF6C1769d5390Be0f77080eF7791fBbA7eF4D5659",
"blockExplorers": [
{
"apiUrl": "https://api.socialscan.io/cyber",
@ -635,7 +636,7 @@
"from": 4842212
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x5F3C25e6AfDC6953fF1c7a661963D5a54E239A8D",
"interchainSecurityModule": "0xd3A6fD5338656353D48693B797b6EcEFC5d3D317",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "cyber",
@ -647,6 +648,7 @@
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0xbB22547D1dc681fe925f568f637Ff67aC06c20fc",
"protocol": "ethereum",
"protocolFee": "0x089DdA086dCbfA0C2cCa69B45F2eB6DE7Fd71F38",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"rpcUrls": [
{
@ -687,6 +689,7 @@
},
"displayName": "Degen",
"domainId": 666666666,
"domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "degen-base",
@ -694,7 +697,7 @@
"from": 23783929
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0xE89fF24e1979F6AbD6b71b733cc62d1289d193c4",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "degenchain",
@ -704,6 +707,7 @@
"symbol": "DEGEN"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0x089DdA086dCbfA0C2cCa69B45F2eB6DE7Fd71F38",
"protocol": "ethereum",
"protocolFee": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
@ -713,6 +717,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0xE89fF24e1979F6AbD6b71b733cc62d1289d193c4",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -797,7 +802,7 @@
"interchainAccountIsm": "0xCeafc098e5c3c7768b9229Be2FEC275862A81Abd",
"interchainAccountRouter": "0xed9a722c543883FB7e07E78F3879762DE09eA7D5",
"interchainGasPaymaster": "0xB30EAB08aa87138D57168D0e236850A530f49921",
"interchainSecurityModule": "0xF965C301f1FD550ae31c06c9EbDd23F1b478B61d",
"interchainSecurityModule": "0x24B58bD54F4421D175A36f8C1FF437f811589382",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xC831271c1fB212012811a91Dd43e5926C1020563",
"name": "endurance",
@ -865,7 +870,7 @@
"interchainAccountIsm": "0x292C614ED53DaaDBf971521bc2C652d1ca51cB47",
"interchainAccountRouter": "0x5E532F7B610618eE73C2B462978e94CB1F7995Ce",
"interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611",
"interchainSecurityModule": "0xBdE8c1C9bddCEa702B7926DeCfB685aCD856C71B",
"interchainSecurityModule": "0xBC1e8b6de1EB71DEb4F5504E6cE2797878C643B8",
"mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239",
"merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA",
"name": "ethereum",
@ -935,7 +940,7 @@
"interchainAccountIsm": "0x7C012DCA02C42cfA3Fd7Da3B0ED7234B52AE68eF",
"interchainAccountRouter": "0xbed53B5C5BCE9433f25A2A702e6df13E22d84Ae9",
"interchainGasPaymaster": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E",
"interchainSecurityModule": "0x5F7CC9c543a23B30c75aEF6D01fd6fB256d75c1E",
"interchainSecurityModule": "0x5Fc05d27A2E77035fb5566FF739BBbe0087C5B5B",
"mailbox": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3",
"merkleTreeHook": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147",
"name": "fraxtal",
@ -1000,7 +1005,7 @@
"interchainAccountIsm": "0x9629c28990F11c31735765A6FD59E1E1bC197DbD",
"interchainAccountRouter": "0x2351FBe24C1212F253b7a300ff0cBCFd97952a19",
"interchainGasPaymaster": "0xFB9e40D811Cea562cc8a322b029eF2BDcC3ef6ed",
"interchainSecurityModule": "0x5DaF24d97283cb512773824CcC79b5003064C07D",
"interchainSecurityModule": "0x3Cfc6227274f77Aa463630d619dCaECf582C82Db",
"mailbox": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696",
"merkleTreeHook": "0xfBc08389224d23b79cb21cDc16c5d42F0ad0F57f",
"name": "fusemainnet",
@ -1017,6 +1022,15 @@
"rpcUrls": [
{
"http": "https://rpc.fuse.io"
},
{
"http": "https://fuse.drpc.org"
},
{
"http": "https://fuse.liquify.com"
},
{
"http": "https://fuse-pokt.nodies.app"
}
],
"staticAggregationHookFactory": "0x40Ca055683d9aA603f73EDcb62874a1BaAa1d6dA",
@ -1062,7 +1076,7 @@
"interchainAccountIsm": "0x07E2062A1bC66a2C1d05cb5C3870a4AF86e0056E",
"interchainAccountRouter": "0xBE70Ab882D1F7E37e04a70CDd9Ec23b37a234064",
"interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f",
"interchainSecurityModule": "0x1eC334Bd525296D47262c7849BEC8a7A7CBae1e0",
"interchainSecurityModule": "0x90BD2692d7C0412bd6b5070D5e34d733b0540131",
"mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f",
"merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645",
"name": "gnosis",
@ -1130,7 +1144,7 @@
"interchainAccountIsm": "0x708E002637792FDC031E6B62f23DD60014AC976a",
"interchainAccountRouter": "0xfB8cea1c7F45608Da30655b50bbF355D123A4358",
"interchainGasPaymaster": "0x19dc38aeae620380430C200a6E990D5Af5480117",
"interchainSecurityModule": "0x1bD6a052a006F71F2292f1BB9F39455567f97021",
"interchainSecurityModule": "0x4FC9FBb6e426277c7876864084D075315248f2B4",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65",
"name": "inevm",
@ -1220,6 +1234,7 @@
"validatorAnnounce": "0x1fb225b2fcfbe75e614a1d627de97ff372242eed"
},
"kroma": {
"aggregationHook": "0xF6C1769d5390Be0f77080eF7791fBbA7eF4D5659",
"blockExplorers": [
{
"apiUrl": "https://blockscout.kroma.network/api",
@ -1240,6 +1255,7 @@
},
"displayName": "Kroma",
"domainId": 255,
"domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "ethereum",
@ -1247,7 +1263,7 @@
"from": 14616307
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0xe274f228f87c0D72241CF9aAC15d91e3630aE6f6",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "kroma",
@ -1257,7 +1273,9 @@
"symbol": "ETH"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0x662771d29DFf0d7C36bB9BB6d4241a02e77585d9",
"protocol": "ethereum",
"protocolFee": "0x9c44E6b8F0dB517C2c3a0478caaC5349b614F912",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"rpcUrls": [
{
@ -1271,6 +1289,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0xe274f228f87c0D72241CF9aAC15d91e3630aE6f6",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -1311,7 +1330,7 @@
"interchainAccountIsm": "0xdcA646C56E7768DD11654956adE24bfFf9Ba4893",
"interchainAccountRouter": "0xD59dA396F162Ed93a41252Cebb8d5DD4F093238C",
"interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28",
"interchainSecurityModule": "0x3391dd1120461DF175077A34b2595B8897FE22a7",
"interchainSecurityModule": "0x18Ec250dC6ac6a440A13140B812226baE1787E88",
"mailbox": "0x02d16BC51af6BfD153d67CA61754cF912E82C4d9",
"merkleTreeHook": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7",
"name": "linea",
@ -1365,6 +1384,7 @@
},
"displayName": "Lisk",
"domainId": 1135,
"domainRoutingIsm": "0x55d6f15ce95B7570d215bE0306706d39877a64d0",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "ethereum",
@ -1372,7 +1392,7 @@
"from": 4195553
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0x36d5F5b369639489c75D6B522eA2465041d2f79B",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "lisk",
@ -1382,6 +1402,7 @@
"symbol": "ETH"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0x53e912b41125d6094590a7DBEf1360d3d56EEa19",
"protocol": "ethereum",
"protocolFee": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
@ -1391,6 +1412,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0x36d5F5b369639489c75D6B522eA2465041d2f79B",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -1428,7 +1450,7 @@
"from": 3088760
},
"interchainGasPaymaster": "0x441a01Fca2eD731C0Fc4633998332f9FEDB17575",
"interchainSecurityModule": "0x51C6A5106EF680d11e8fD9EE1d090c07fdaD2e3D",
"interchainSecurityModule": "0x138965Cfc3F63aE0A32cD505DeD6DB95D9d60399",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x062200d92dF6bB7bA89Ce4D6800110450f94784e",
"name": "lukso",
@ -1496,7 +1518,7 @@
"interchainAccountIsm": "0x8Ea50255C282F89d1A14ad3F159437EE5EF0507f",
"interchainAccountRouter": "0x693A4cE39d99e46B04cb562329e3F0141cA17331",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0xEA2A8F45Fd40aa233E51A54f8956fEB63B6879E6",
"interchainSecurityModule": "0x1165cCEfF6CFB95006eBd33A72eAf23981Fe6bEA",
"isTestnet": false,
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
@ -1563,7 +1585,7 @@
"interchainAccountIsm": "0xe039DA3A0071BEd087A12660D7b03cf669c7776E",
"interchainAccountRouter": "0x45285463352c53a481e882cD5E2AF2E25BBdAd0D",
"interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28",
"interchainSecurityModule": "0x79C105d9c4eeec06acf5532B8e4079F6acAc5ED0",
"interchainSecurityModule": "0xb57Ff2792A8BA6af557467bbBa70fCBB330D3d52",
"mailbox": "0x398633D19f4371e1DB5a8EFE90468eB70B1176AA",
"merkleTreeHook": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d",
"name": "mantle",
@ -1594,6 +1616,7 @@
"validatorAnnounce": "0x1956848601549de5aa0c887892061fA5aB4f6fC4"
},
"merlin": {
"aggregationHook": "0x68c48C397DBADdC05c9dd469CF6f9DC0dBE745D8",
"blockExplorers": [
{
"apiUrl": "https://scan.merlinchain.io/api",
@ -1622,7 +1645,7 @@
"from": 13523607
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0x21C5aa77617DCF34b58a7315B4a13473b18ff460",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "merlin",
@ -1634,6 +1657,7 @@
"pausableHook": "0xDd1CddEd982e4d271d4D6Bc4cdE8d4F3338733B5",
"pausableIsm": "0x632b4F32d65F7b25B37a27C57dD510f8e4a58Bf9",
"protocol": "ethereum",
"protocolFee": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"rpcUrls": [
{
@ -1674,6 +1698,7 @@
},
"displayName": "Metis Andromeda",
"domainId": 1088,
"domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "metis-token",
@ -1681,7 +1706,7 @@
"from": 17966274
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0x64946Bc95d9b12aBd7CF02507D5E2b709670eD48",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "metis",
@ -1691,6 +1716,7 @@
"symbol": "METIS"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"protocol": "ethereum",
"protocolFee": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
@ -1700,6 +1726,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0x64946Bc95d9b12aBd7CF02507D5E2b709670eD48",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -1709,6 +1736,7 @@
"validatorAnnounce": "0x062200d92dF6bB7bA89Ce4D6800110450f94784e"
},
"mint": {
"aggregationHook": "0xF6C1769d5390Be0f77080eF7791fBbA7eF4D5659",
"blockExplorers": [
{
"apiUrl": "https://explorer.mintchain.io/api/eth-rpc",
@ -1729,6 +1757,7 @@
},
"displayName": "Mint",
"domainId": 185,
"domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "ethereum",
@ -1737,7 +1766,7 @@
"from": 3752032
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0x64946Bc95d9b12aBd7CF02507D5E2b709670eD48",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "mint",
@ -1747,7 +1776,9 @@
"symbol": "ETH"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"protocol": "ethereum",
"protocolFee": "0x53e912b41125d6094590a7DBEf1360d3d56EEa19",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"rpcUrls": [
{
@ -1755,6 +1786,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0x64946Bc95d9b12aBd7CF02507D5E2b709670eD48",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -1795,7 +1827,7 @@
"interchainAccountIsm": "0xa377b8269e0A47cdd2fD5AAeAe860b45623c6d82",
"interchainAccountRouter": "0x6e1B9f776bd415d7cC3C7458A5f0d801016918f8",
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
"interchainSecurityModule": "0x7b04FB03Fd1bc89b4Ca8FADDa330f9937f88589b",
"interchainSecurityModule": "0x1764af123824d753B8F51b3DA92E06C0643b15C1",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
"name": "mode",
@ -1861,7 +1893,7 @@
"interchainAccountIsm": "0x79b3730CE3685f65802aF1771319992bA960EB9D",
"interchainAccountRouter": "0xc4482f66191754a8629D35289043C4EB0285F10E",
"interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F",
"interchainSecurityModule": "0xA201676D4F38F0821254B4F6c01CC6E2aeFD45fC",
"interchainSecurityModule": "0xB917b4C28096f185D615F2D52d5001D83F40A546",
"mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3",
"merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547",
"name": "moonbeam",
@ -1996,7 +2028,7 @@
"interchainAccountIsm": "0x2c46BF14641d00549ECa4779BF5CBf91602C1DEd",
"interchainAccountRouter": "0x03D6cC17d45E9EA27ED757A8214d1F07F7D901aD",
"interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C",
"interchainSecurityModule": "0xC1A59f23f08A714748c227376Ed28057b330ED40",
"interchainSecurityModule": "0x048e40b98D251FbD5520D7148736a42eB6F8af1b",
"mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D",
"merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f",
"name": "optimism",
@ -2127,7 +2159,7 @@
"interchainAccountIsm": "0xBAC4529cdfE7CCe9E858BF706e41F8Ed096C1BAd",
"interchainAccountRouter": "0xF163949AD9F88977ebF649D0461398Ca752E64B9",
"interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2",
"interchainSecurityModule": "0x89DE7d4ab97e3729Cbecb56AdbaA89a8955dB6C1",
"interchainSecurityModule": "0x55173a981c0c6C9E4dEedEE53400Cdfe568B3B95",
"mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB",
"merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6",
"name": "polygon",
@ -2201,7 +2233,7 @@
"interchainAccountIsm": "0xc1198e241DAe48BF5AEDE5DCE49Fe4A6064cF7a7",
"interchainAccountRouter": "0x20a0A32a110362920597F72974E1E0d7e25cA20a",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0x78C39ACb76d948dA60a0C9ad184A8Ec9ef711963",
"interchainSecurityModule": "0xAc27452E5744f3807c2548f99473A14ee51bb667",
"mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
"name": "polygonzkevm",
@ -2237,6 +2269,7 @@
"validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9"
},
"proofofplay": {
"aggregationHook": "0xF6C1769d5390Be0f77080eF7791fBbA7eF4D5659",
"blockExplorers": [
{
"apiUrl": "https://explorer.apex.proofofplay.com/api/eth-rpc",
@ -2257,6 +2290,7 @@
},
"displayName": "Proof of Play Apex",
"domainId": 70700,
"domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "ethereum",
@ -2264,7 +2298,7 @@
"from": 32018468
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0xB0525d808721426c56377469B92db16857384deF",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "proofofplay",
@ -2274,7 +2308,9 @@
"symbol": "ETH"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0x5d69BC38eF3eDb491c0b7186BEc4eC45c4013f93",
"protocol": "ethereum",
"protocolFee": "0x73db9c7430548f399e335f3424e8d56080e9010c",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"rpcUrls": [
{
@ -2282,6 +2318,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0xB0525d808721426c56377469B92db16857384deF",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -2291,6 +2328,7 @@
"validatorAnnounce": "0x062200d92dF6bB7bA89Ce4D6800110450f94784e"
},
"real": {
"aggregationHook": "0x32B06f415955B35d77AF855b9ec77381485D763c",
"blockExplorers": [
{
"apiUrl": "https://explorer.re.al/api/eth-rpc",
@ -2319,7 +2357,7 @@
"from": 363159
},
"interchainGasPaymaster": "0x3071D4DA6020C956Fe15Bfd0a9Ca8D4574f16696",
"interchainSecurityModule": "0x1455e33232088BeEf545DaF12dFF6CA867FD6787",
"interchainSecurityModule": "0x331A729ad53214eFC66a6529fBAc04E42490ac0C",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x55E4F0bc6b7Bb493D50839A8592e7ad8d5e93cf7",
"name": "real",
@ -2331,6 +2369,7 @@
"pausableHook": "0xc965292958794f59ec3e9538738dD252873F07CC",
"pausableIsm": "0xB9712fAbFaDb3624Dc12B6b261FEB76F8F8278aE",
"protocol": "ethereum",
"protocolFee": "0x59C2dB903937EbE55B59c3415FD55e970FF5f2DC",
"proxyAdmin": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
"rpcUrls": [
{
@ -2380,7 +2419,7 @@
"interchainAccountIsm": "0x5DA60220C5dDe35b7aE91c042ff5979047FA0785",
"interchainAccountRouter": "0x7a4d31a686A36285d68e14EDD53631417eB19603",
"interchainGasPaymaster": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634",
"interchainSecurityModule": "0x144f19c1162A99e7E366D5688004958445ba0Eab",
"interchainSecurityModule": "0x1c6bc0369a7528D8B0968a9e5e7C599567778350",
"mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D",
"merkleTreeHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA",
"name": "redstone",
@ -2410,6 +2449,7 @@
"validatorAnnounce": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0"
},
"sanko": {
"aggregationHook": "0xF6C1769d5390Be0f77080eF7791fBbA7eF4D5659",
"blockExplorers": [
{
"apiUrl": "https://explorer.sanko.xyz/api/eth-rpc",
@ -2430,6 +2470,7 @@
},
"displayName": "Sanko",
"domainId": 1996,
"domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "dream-machine-token",
@ -2437,7 +2478,7 @@
"from": 937117
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0x203B8cEe54c0875d7b3384722636B5Ef4A4D81f7",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "sanko",
@ -2447,7 +2488,9 @@
"symbol": "DMT"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8",
"protocol": "ethereum",
"protocolFee": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"rpcUrls": [
{
@ -2455,6 +2498,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0x203B8cEe54c0875d7b3384722636B5Ef4A4D81f7",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -2497,7 +2541,7 @@
"interchainAccountIsm": "0x32af5Df81fEd5E26119F6640FBB13f3d63a94CDe",
"interchainAccountRouter": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7",
"interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2",
"interchainSecurityModule": "0xA0aB8BeA8F8ce88519EB6E95C38B2155fDE80978",
"interchainSecurityModule": "0x92fd21a745172B48ed0392C4A9f3e08a2Ed2561a",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76",
"name": "scroll",
@ -2562,7 +2606,7 @@
"interchainAccountIsm": "0xf35dc7B9eE4Ebf0cd3546Bd6EE3b403dE2b9F5D6",
"interchainAccountRouter": "0xBcaedE97a98573A88242B3b0CB0A255F3f90d4d5",
"interchainGasPaymaster": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72",
"interchainSecurityModule": "0x40e1EacEDdd7105288537Db7B2D148685037566C",
"interchainSecurityModule": "0x01Fd7e91B2118b90f1a2F3d13cfF97E8e655bf5f",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49",
"name": "sei",
@ -2671,7 +2715,7 @@
"interchainAccountIsm": "0xAE557e108b3336130370aC74836f1356B4b30Cf2",
"interchainAccountRouter": "0x1F8CF09F060A2AE962c0Bb1F92e209a1E7b0E10B",
"interchainGasPaymaster": "0x273Bc6b01D9E88c064b6E5e409BdF998246AEF42",
"interchainSecurityModule": "0x8162B1E340e7B3DAc27E98a533Fcc75EfEA059F9",
"interchainSecurityModule": "0xfB4d48ffDc8Ca2F05A5B76cC070b51ed58E6cC05",
"mailbox": "0x28EFBCadA00A7ed6772b3666F3898d276e88CAe3",
"merkleTreeHook": "0x6A55822cf11f9fcBc4c75BC2638AfE8Eb942cAdd",
"name": "taiko",
@ -2723,6 +2767,7 @@
},
"displayName": "Tangle",
"domainId": 5845,
"domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7",
"domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908",
"fallbackRoutingHook": "0xd21192429df453021e896f2897Dc8B1167DD61E5",
"gasCurrencyCoinGeckoId": "tangle-network",
@ -2730,7 +2775,7 @@
"from": 1678063
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x768DDd89D239FB3a48A7774aE6d786D72441D0e0",
"interchainSecurityModule": "0xB0525d808721426c56377469B92db16857384deF",
"isTestnet": false,
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
@ -2741,6 +2786,7 @@
"symbol": "TNT"
},
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0x5d69BC38eF3eDb491c0b7186BEc4eC45c4013f93",
"protocol": "ethereum",
"protocolFee": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
@ -2750,6 +2796,7 @@
}
],
"staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6",
"staticAggregationIsm": "0xB0525d808721426c56377469B92db16857384deF",
"staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A",
"staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC",
"staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE",
@ -2790,7 +2837,7 @@
"interchainAccountIsm": "0x551BbEc45FD665a8C95ca8731CbC32b7653Bc59B",
"interchainAccountRouter": "0xc11f8Cf2343d3788405582F65B8af6A4F7a6FfC8",
"interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4",
"interchainSecurityModule": "0xb867cD0B7C3B1A3cE6fBBcb165D43Cb273bb26fE",
"interchainSecurityModule": "0xAeAd5b4Ab9dA529452C7fe7b0f39902Ff4345772",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112",
"name": "viction",
@ -2855,7 +2902,7 @@
"interchainAccountIsm": "0xCB9f90EE5d83Ea52ABd922BD70898f0155D54798",
"interchainAccountRouter": "0x473884010F0C1742DA8Ad01E7E295624B931076b",
"interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503",
"interchainSecurityModule": "0xD3bd8f20e169364d14c7dBFE698258D780FC71e3",
"interchainSecurityModule": "0x6455CbF559E2227aA23409930D0F860e2f244B70",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD",
"name": "worldchain",
@ -2885,6 +2932,7 @@
"validatorAnnounce": "0x047ba6c9949baB22d13C347B40819b7A20C4C53a"
},
"xai": {
"aggregationHook": "0xF6C1769d5390Be0f77080eF7791fBbA7eF4D5659",
"blockExplorers": [
{
"apiUrl": "https://explorer.xai-chain.net/api",
@ -2913,7 +2961,7 @@
"from": 24395308
},
"interchainGasPaymaster": "0x9844aFFaBE17c37F791ff99ABa58B0FbB75e22AF",
"interchainSecurityModule": "0x5F3C25e6AfDC6953fF1c7a661963D5a54E239A8D",
"interchainSecurityModule": "0xd3A6fD5338656353D48693B797b6EcEFC5d3D317",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"name": "xai",
@ -2925,6 +2973,7 @@
"pausableHook": "0x61594D2cA900C44ab51d07776465397FefC643C6",
"pausableIsm": "0xbB22547D1dc681fe925f568f637Ff67aC06c20fc",
"protocol": "ethereum",
"protocolFee": "0xe8d5590F2e969F9d21f0132f2b596273f8a03Ef2",
"proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004",
"rpcUrls": [
{
@ -2975,7 +3024,7 @@
"interchainAccountIsm": "0x29B37088724B745C0ABcE591449Cf042772160C2",
"interchainAccountRouter": "0x03cF708E42C89623bd83B281A56935cB562b9258",
"interchainGasPaymaster": "0x7E27456a839BFF31CA642c060a2b68414Cb6e503",
"interchainSecurityModule": "0xD3bd8f20e169364d14c7dBFE698258D780FC71e3",
"interchainSecurityModule": "0x4fc18464D39118b2B6F93c304AfF84336368a60E",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0x0054D19613f20dD72721A146ED408971a2CCA9BD",
"name": "xlayer",
@ -3040,7 +3089,7 @@
"interchainAccountIsm": "0x2b6d3F7d28B5EC8C3C028fBCAdcf774D9709Dd29",
"interchainAccountRouter": "0x3AdCBc94ab8C48EC52D06dc65Bb787fD1981E3d5",
"interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d",
"interchainSecurityModule": "0xcd886efC3a5b1599d1eAD60F6dD74b3BffB5410D",
"interchainSecurityModule": "0x4FdFC989d10273A01073111f447e19aCF2a04A0c",
"mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7",
"merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6",
"name": "zetachain",
@ -3103,7 +3152,7 @@
"from": 1511458
},
"interchainGasPaymaster": "0x03cF708E42C89623bd83B281A56935cB562b9258",
"interchainSecurityModule": "0x0f58B192d64DAe7389502b1c3F4a8A0ddBeEC488",
"interchainSecurityModule": "0x636bB3fCa3B74B942bA8C258c44109384B252979",
"mailbox": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c",
"merkleTreeHook": "0x4C97D35c668EE5194a13c8DE8Afc18cce40C9F28",
"name": "zircuit",
@ -3167,7 +3216,7 @@
"interchainAccountIsm": "0xb2674E213019972f937CCFc5e23BF963D915809e",
"interchainAccountRouter": "0x11b76D93a9D39Eb51F54eBf5566308640cDe882b",
"interchainGasPaymaster": "0x18B0688990720103dB63559a3563f7E8d0f63EDb",
"interchainSecurityModule": "0x19665b36916A5048E969386044fA4AEeB55d6744",
"interchainSecurityModule": "0xFAc2723298549ECC6FC631d13048d2B65930fd13",
"mailbox": "0xF5da68b2577EF5C0A0D98aA2a58483a68C2f232a",
"merkleTreeHook": "0x886BB0f329781b98f98FDeb1ce7a8957F2d43B9F",
"name": "zoramainnet",

@ -2307,6 +2307,12 @@
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x089DdA086dCbfA0C2cCa69B45F2eB6DE7Fd71F38",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"degenchain": [
@ -2371,6 +2377,24 @@
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x089DdA086dCbfA0C2cCa69B45F2eB6DE7Fd71F38",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x089DdA086dCbfA0C2cCa69B45F2eB6DE7Fd71F38",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
}
],
"endurance": [
@ -3916,6 +3940,30 @@
"expectedimplementation": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
"isProxy": true,
"name": "TransparentUpgradeableProxy"
},
{
"address": "0xF15D70941dE2Bf95A23d6488eBCbedE0a444137f",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x662771d29DFf0d7C36bB9BB6d4241a02e77585d9",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x662771d29DFf0d7C36bB9BB6d4241a02e77585d9",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x9c44E6b8F0dB517C2c3a0478caaC5349b614F912",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"linea": [
@ -4858,6 +4906,24 @@
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x53e912b41125d6094590a7DBEf1360d3d56EEa19",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x53e912b41125d6094590a7DBEf1360d3d56EEa19",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
}
],
"lukso": [
@ -5115,6 +5181,12 @@
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"metis": [
@ -5179,6 +5251,24 @@
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0xD7EcB0396406682a27E87F7946c25Ac531140959",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
}
],
"mint": [
@ -5200,6 +5290,36 @@
"expectedimplementation": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
"isProxy": true,
"name": "TransparentUpgradeableProxy"
},
{
"address": "0xcd9D3744512F07AE844c40E27912092d7c503565",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x53e912b41125d6094590a7DBEf1360d3d56EEa19",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x53e912b41125d6094590a7DBEf1360d3d56EEa19",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"mode": [
@ -6605,6 +6725,42 @@
"expectedimplementation": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
"isProxy": true,
"name": "TransparentUpgradeableProxy"
},
{
"address": "0xC88bAD76EC7acD9fd3b9Bb264f7f5C18097c5710",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0x5d69BC38eF3eDb491c0b7186BEc4eC45c4013f93",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x73db9c7430548f399e335f3424e8d56080e9010c",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0x5d69BC38eF3eDb491c0b7186BEc4eC45c4013f93",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x73db9c7430548f399e335f3424e8d56080e9010c",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"real": [
@ -6632,6 +6788,12 @@
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x59C2dB903937EbE55B59c3415FD55e970FF5f2DC",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"redstone": [
@ -7417,6 +7579,30 @@
"expectedimplementation": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1",
"isProxy": true,
"name": "TransparentUpgradeableProxy"
},
{
"address": "0xC88bAD76EC7acD9fd3b9Bb264f7f5C18097c5710",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x92cdbF0Ccdf8E93467FA858fb986fa650A02f2A8",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0xDab56C5A1EffFdd23f6BD1243E457B1575984Bc6",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"scroll": [
@ -8579,6 +8765,24 @@
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
},
{
"address": "0xF15D70941dE2Bf95A23d6488eBCbedE0a444137f",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x5d69BC38eF3eDb491c0b7186BEc4eC45c4013f93",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0x5d69BC38eF3eDb491c0b7186BEc4eC45c4013f93",
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
}
],
"viction": [
@ -8967,6 +9171,12 @@
"constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "PausableIsm"
},
{
"address": "0xe8d5590F2e969F9d21f0132f2b596273f8a03Ef2",
"constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba",
"isProxy": false,
"name": "ProtocolFee"
}
],
"xlayer": [

@ -106,6 +106,7 @@ async function check() {
core,
envConfig.core,
ismFactory,
chainAddresses,
);
governor = new HyperlaneCoreGovernor(checker, ica);
} else if (module === Modules.INTERCHAIN_GAS_PAYMASTER) {

@ -239,11 +239,13 @@ export async function getCosmosChainGasPrice(
const nativeToken = mustGetChainNativeToken(chain);
const fee = cosmosRegistryChain.fees?.fee_tokens.find((fee) => {
const fee = cosmosRegistryChain.fees?.fee_tokens.find(
(fee: { denom: string }) => {
return (
fee.denom === nativeToken.denom || fee.denom === `u${nativeToken.denom}`
);
});
},
);
if (!fee || fee.average_gas_price === undefined) {
throw new Error(`No gas price found for Cosmos chain ${chain}`);
}

@ -518,8 +518,13 @@ export const defaultMultisigConfigs: ChainMap<MultisigConfig> = {
},
zircuit: {
threshold: 1,
validators: ['0x169ec400cc758fef3df6a0d6c51fbc6cdd1015bb'],
threshold: 3,
validators: [
'0x169ec400cc758fef3df6a0d6c51fbc6cdd1015bb',
'0x7aC6584c068eb2A72d4Db82A7B7cd5AB34044061', // luganodes
'0x0180444c9342BD672867Df1432eb3dA354413a6E', // hashkey cloud
'0x1da9176C2CE5cC7115340496fa7D1800a98911CE', // renzo
],
},
zoramainnet: {

@ -265,6 +265,7 @@ describe('core', async () => {
core,
coreConfig,
ismFactory,
{},
);
await checker.check();
});

@ -29,6 +29,7 @@ export class HyperlaneCoreChecker extends HyperlaneAppChecker<
app: HyperlaneCore,
configMap: ChainMap<CoreConfig>,
readonly ismFactory: HyperlaneIsmFactory,
readonly chainAddresses: ChainMap<Record<string, string>>,
) {
super(multiProvider, app, configMap);
}
@ -78,13 +79,43 @@ export class HyperlaneCoreChecker extends HyperlaneAppChecker<
);
if (!matches) {
const ismReader = new EvmIsmReader(this.ismFactory.multiProvider, chain);
const registryIsmAddress =
this.chainAddresses[chain].interchainSecurityModule;
const registryIsmMatches = await moduleMatchesConfig(
chain,
registryIsmAddress,
config.defaultIsm,
this.ismFactory.multiProvider,
this.ismFactory.getContracts(chain),
);
if (registryIsmMatches) {
// if the ISM in registry matches the expected config, then we can assume
// that the mailbox should be using that ISM instead of the current one
// and we should report just an address violation
const violation: MailboxViolation = {
type: CoreViolationType.Mailbox,
subType: MailboxViolationType.DefaultIsm,
contract: mailbox,
chain,
actual: actualIsmAddress,
expected: registryIsmAddress,
};
this.addViolation(violation);
} else {
const ismReader = new EvmIsmReader(
this.ismFactory.multiProvider,
chain,
);
let actualConfig: string | DerivedIsmConfig =
ethers.constants.AddressZero;
if (actualIsmAddress !== ethers.constants.AddressZero) {
actualConfig = await ismReader.deriveIsmConfig(actualIsmAddress);
}
// If the config doesn't match either onchain or the registry
// then we have a full config violation, which the governor will need to
// fix by deploying a new ISM
const violation: MailboxViolation = {
type: CoreViolationType.Mailbox,
subType: MailboxViolationType.DefaultIsm,
@ -96,6 +127,7 @@ export class HyperlaneCoreChecker extends HyperlaneAppChecker<
this.addViolation(violation);
}
}
}
async checkBytecodes(chain: ChainName): Promise<void> {
const contracts = this.app.getContracts(chain);

@ -7,47 +7,91 @@ export const CosmosChainSchema = z
$schema: z
.string()
.regex(new RegExp('^(\\.\\./)+chain\\.schema\\.json$'))
.min(1)
.optional(),
chain_name: z.string().regex(new RegExp('[a-z0-9]+')),
chain_type: z.string().regex(new RegExp('[a-z0-9]+')),
chain_id: z.string(),
pre_fork_chain_name: z.string().regex(new RegExp('[a-z0-9]+')).optional(),
pretty_name: z.string().optional(),
website: z.string().url().optional(),
update_link: z.string().url().optional(),
chain_name: z.string().regex(new RegExp('[a-z0-9]+')).min(1),
chain_type: z
.enum([
'cosmos',
'eip155',
'bip122',
'polkadot',
'solana',
'algorand',
'arweave',
'ergo',
'fil',
'hedera',
'monero',
'reef',
'stacks',
'starknet',
'stellar',
'tezos',
'vechain',
'waves',
'xrpl',
'unknown',
])
.describe(
"The 'type' of chain as the corresponding CAIP-2 Namespace value. E.G., 'cosmos' or 'eip155'. Namespaces can be found here: https://github.com/ChainAgnostic/namespaces/tree/main.",
),
chain_id: z.string().min(1).optional(),
pre_fork_chain_name: z
.string()
.regex(new RegExp('[a-z0-9]+'))
.min(1)
.optional(),
pretty_name: z.string().min(1).optional(),
website: z.string().url().min(1).optional(),
update_link: z.string().url().min(1).optional(),
status: z.enum(['live', 'upcoming', 'killed']).optional(),
network_type: z.enum(['mainnet', 'testnet', 'devnet']).optional(),
bech32_prefix: z
.string()
.min(1)
.describe(
"The default prefix for the human-readable part of addresses that identifies the coin type. Must be registered with SLIP-0173. E.g., 'cosmos'",
),
)
.optional(),
bech32_config: z
.object({
bech32PrefixAccAddr: z.string().describe("e.g., 'cosmos'").optional(),
bech32PrefixAccPub: z.string().describe("e.g., 'cosmospub'").optional(),
bech32PrefixAccAddr: z
.string()
.min(1)
.describe("e.g., 'cosmos'")
.optional(),
bech32PrefixAccPub: z
.string()
.min(1)
.describe("e.g., 'cosmospub'")
.optional(),
bech32PrefixValAddr: z
.string()
.min(1)
.describe("e.g., 'cosmosvaloper'")
.optional(),
bech32PrefixValPub: z
.string()
.min(1)
.describe("e.g., 'cosmosvaloperpub'")
.optional(),
bech32PrefixConsAddr: z
.string()
.min(1)
.describe("e.g., 'cosmosvalcons'")
.optional(),
bech32PrefixConsPub: z
.string()
.min(1)
.describe("e.g., 'cosmosvalconspub'")
.optional(),
})
.strict()
.describe('Used to override the bech32_prefix for specific uses.')
.optional(),
daemon_name: z.string().optional(),
node_home: z.string().optional(),
daemon_name: z.string().min(1).optional(),
node_home: z.string().min(1).optional(),
key_algos: z
.array(
z.enum(['secp256k1', 'ethsecp256k1', 'ed25519', 'sr25519', 'bn254']),
@ -60,7 +104,7 @@ export const CosmosChainSchema = z
fee_tokens: z.array(
z
.object({
denom: z.string(),
denom: z.string().min(1),
fixed_min_gas_price: z.number().optional(),
low_gas_price: z.number().optional(),
average_gas_price: z.number().optional(),
@ -80,7 +124,9 @@ export const CosmosChainSchema = z
.optional(),
staking: z
.object({
staking_tokens: z.array(z.object({ denom: z.string() }).strict()),
staking_tokens: z.array(
z.object({ denom: z.string().min(1) }).strict(),
),
lock_duration: z
.object({
blocks: z
@ -91,6 +137,7 @@ export const CosmosChainSchema = z
.optional(),
time: z
.string()
.min(1)
.describe(
'The approximate time for which the staked tokens are locked.',
)
@ -103,43 +150,142 @@ export const CosmosChainSchema = z
.optional(),
codebase: z
.object({
git_repo: z.string().url().optional(),
recommended_version: z.string().optional(),
git_repo: z.string().url().min(1).optional(),
recommended_version: z.string().min(1).optional(),
compatible_versions: z.array(z.string().min(1)).optional(),
go_version: z
.string()
.regex(new RegExp('^[0-9]+\\.[0-9]+(\\.[0-9]+)?$'))
.min(1)
.describe('Minimum accepted go version to build the binary.')
.optional(),
compatible_versions: z.array(z.string()).optional(),
language: z
.object({
type: z.enum(['go', 'rust', 'solidity', 'other']),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
})
.strict()
.optional(),
binaries: z
.object({
'linux/amd64': z.string().url().optional(),
'linux/arm64': z.string().url().optional(),
'darwin/amd64': z.string().url().optional(),
'darwin/arm64': z.string().url().optional(),
'windows/amd64': z.string().url().optional(),
'windows/arm64': z.string().url().optional(),
'linux/amd64': z.string().url().min(1).optional(),
'linux/arm64': z.string().url().min(1).optional(),
'darwin/amd64': z.string().url().min(1).optional(),
'darwin/arm64': z.string().url().min(1).optional(),
'windows/amd64': z.string().url().min(1).optional(),
'windows/arm64': z.string().url().min(1).optional(),
})
.strict()
.optional(),
cosmos_sdk_version: z.string().min(1).optional(),
sdk: z
.object({
type: z.enum(['cosmos', 'penumbra', 'other']),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
})
.strict()
.optional(),
cosmos_sdk_version: z.string().optional(),
consensus: z
.object({
type: z.enum(['tendermint', 'cometbft', 'sei-tendermint']),
version: z.string().optional(),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
})
.strict()
.optional(),
cosmwasm_version: z.string().optional(),
cosmwasm_version: z.string().min(1).optional(),
cosmwasm_enabled: z.boolean().optional(),
cosmwasm_path: z
.string()
.regex(new RegExp('^\\$HOME.*$'))
.min(1)
.describe(
'Relative path to the cosmwasm directory. ex. $HOME/.juno/data/wasm',
)
.optional(),
cosmwasm: z
.object({
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
enabled: z.boolean().optional(),
path: z
.string()
.regex(new RegExp('^\\$HOME.*$'))
.min(1)
.describe(
'Relative path to the cosmwasm directory. ex. $HOME/.juno/data/wasm',
)
.optional(),
ibc_go_version: z.string().optional(),
})
.strict()
.optional(),
ibc_go_version: z.string().min(1).optional(),
ics_enabled: z
.array(
z
@ -150,11 +296,45 @@ export const CosmosChainSchema = z
'List of IBC apps (usually corresponding to a ICS standard) which have been enabled on the network.',
)
.optional(),
ibc: z
.object({
type: z.enum(['go', 'rust', 'other']),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
ics_enabled: z
.array(
z
.enum(['ics20-1', 'ics27-1', 'mauth'])
.describe('IBC app or ICS standard.'),
)
.describe(
'List of IBC apps (usually corresponding to a ICS standard) which have been enabled on the network.',
)
.optional(),
})
.strict()
.optional(),
genesis: z
.object({
name: z.string().optional(),
genesis_url: z.string().url(),
ics_ccv_url: z.string().url().optional(),
name: z.string().min(1).optional(),
genesis_url: z.string().url().min(1),
ics_ccv_url: z.string().url().min(1).optional(),
})
.strict()
.optional(),
@ -162,8 +342,8 @@ export const CosmosChainSchema = z
.array(
z
.object({
name: z.string().describe('Official Upgrade Name'),
tag: z.string().describe('Git Upgrade Tag').optional(),
name: z.string().min(1).describe('Official Upgrade Name'),
tag: z.string().min(1).describe('Git Upgrade Tag').optional(),
height: z.number().describe('Block Height').optional(),
proposal: z
.number()
@ -173,37 +353,138 @@ export const CosmosChainSchema = z
.optional(),
previous_version_name: z
.string()
.min(1)
.describe('[Optional] Name of the previous version')
.optional(),
next_version_name: z
.string()
.min(0)
.describe('[Optional] Name of the following version')
.optional(),
recommended_version: z.string().optional(),
recommended_version: z.string().min(1).optional(),
compatible_versions: z.array(z.string().min(1)).optional(),
go_version: z
.string()
.regex(new RegExp('^[0-9]+\\.[0-9]+(\\.[0-9]+)?$'))
.min(1)
.describe('Minimum accepted go version to build the binary.')
.optional(),
compatible_versions: z.array(z.string()).optional(),
cosmos_sdk_version: z.string().optional(),
language: z
.object({
type: z.enum(['go', 'rust', 'solidity', 'other']),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
})
.strict()
.optional(),
cosmos_sdk_version: z.string().min(1).optional(),
sdk: z
.object({
type: z.enum(['cosmos', 'penumbra', 'other']),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
})
.strict()
.optional(),
consensus: z
.object({
type: z.enum(['tendermint', 'cometbft', 'sei-tendermint']),
version: z.string().optional(),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
})
.strict()
.optional(),
cosmwasm_version: z.string().optional(),
cosmwasm_version: z.string().min(1).optional(),
cosmwasm_enabled: z.boolean().optional(),
cosmwasm_path: z
.string()
.regex(new RegExp('^\\$HOME.*$'))
.min(1)
.describe(
'Relative path to the cosmwasm directory. ex. $HOME/.juno/data/wasm',
)
.optional(),
cosmwasm: z
.object({
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
enabled: z.boolean().optional(),
path: z
.string()
.regex(new RegExp('^\\$HOME.*$'))
.min(1)
.describe(
'Relative path to the cosmwasm directory. ex. $HOME/.juno/data/wasm',
)
.optional(),
ibc_go_version: z.string().optional(),
})
.strict()
.optional(),
ibc_go_version: z.string().min(1).optional(),
ics_enabled: z
.array(
z
@ -214,14 +495,48 @@ export const CosmosChainSchema = z
'List of IBC apps (usually corresponding to a ICS standard) which have been enabled on the network.',
)
.optional(),
ibc: z
.object({
type: z.enum(['go', 'rust', 'other']),
version: z
.string()
.min(1)
.describe("Simple version string (e.g., 'v1.0.0').")
.optional(),
repo: z
.string()
.url()
.min(1)
.describe('URL of the code repository.')
.optional(),
tag: z
.string()
.min(1)
.describe(
"Detailed version identifier (e.g., 'v1.0.0-a1s2f43g').",
)
.optional(),
ics_enabled: z
.array(
z
.enum(['ics20-1', 'ics27-1', 'mauth'])
.describe('IBC app or ICS standard.'),
)
.describe(
'List of IBC apps (usually corresponding to a ICS standard) which have been enabled on the network.',
)
.optional(),
})
.strict()
.optional(),
binaries: z
.object({
'linux/amd64': z.string().url().optional(),
'linux/arm64': z.string().url().optional(),
'darwin/amd64': z.string().url().optional(),
'darwin/arm64': z.string().url().optional(),
'windows/amd64': z.string().url().optional(),
'windows/arm64': z.string().url().optional(),
'linux/amd64': z.string().url().min(1).optional(),
'linux/arm64': z.string().url().min(1).optional(),
'darwin/amd64': z.string().url().min(1).optional(),
'darwin/arm64': z.string().url().min(1).optional(),
'windows/amd64': z.string().url().min(1).optional(),
'windows/arm64': z.string().url().min(1).optional(),
})
.strict()
.optional(),
@ -240,11 +555,13 @@ export const CosmosChainSchema = z
.object({
chain_name: z
.string()
.min(1)
.describe(
"The chain name or platform from which the object resides. E.g., 'cosmoshub', 'ethereum', 'forex', or 'nasdaq'",
),
base_denom: z
.string()
.min(1)
.describe(
"The base denom of the asset from which the object originates. E.g., when describing ATOM from Cosmos Hub, specify 'uatom', NOT 'atom' nor 'ATOM'; base units are unique per platform.",
)
@ -262,6 +579,7 @@ export const CosmosChainSchema = z
'^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.png$',
),
)
.min(1)
.optional(),
svg: z
.string()
@ -270,38 +588,28 @@ export const CosmosChainSchema = z
'^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.svg$',
),
)
.min(1)
.optional(),
theme: z
.object({
primary_color_hex: z
.string()
.min(1)
.regex(new RegExp('^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$'))
.min(1)
.optional(),
background_color_hex: z
.string()
.min(1)
.regex(
new RegExp('^(#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none)$'),
)
.min(1)
.optional(),
circle: z.boolean().optional(),
dark_mode: z.boolean().optional(),
monochrome: z.boolean().optional(),
})
.strict()
.optional(),
layout: z
.enum(['logo', 'logomark', 'logotype'])
.describe(
'logomark == icon only; logotype == text only; logo == icon + text.',
)
.optional(),
text_position: z
.enum(['top', 'bottom', 'left', 'right', 'integrated'])
.describe(
"Indicates in which position the text is placed, in case the layout is 'icon' type, it's required only in this case.",
)
.optional(),
})
.strict()
.and(z.union([z.any(), z.any()])),
@ -316,6 +624,7 @@ export const CosmosChainSchema = z
'^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.png$',
),
)
.min(1)
.optional(),
svg: z
.string()
@ -324,20 +633,21 @@ export const CosmosChainSchema = z
'^https://raw\\.githubusercontent\\.com/cosmos/chain-registry/master/(|testnets/|_non-cosmos/)[a-z0-9]+/images/.+\\.svg$',
),
)
.min(1)
.optional(),
})
.strict()
.optional(),
description: z.string().max(3000).optional(),
description: z.string().min(1).max(3000).optional(),
peers: z
.object({
seeds: z
.array(
z
.object({
id: z.string(),
address: z.string(),
provider: z.string().optional(),
id: z.string().min(1),
address: z.string().min(1),
provider: z.string().min(1).optional(),
})
.strict(),
)
@ -346,9 +656,9 @@ export const CosmosChainSchema = z
.array(
z
.object({
id: z.string(),
address: z.string(),
provider: z.string().optional(),
id: z.string().min(1),
address: z.string().min(1),
provider: z.string().min(1).optional(),
})
.strict(),
)
@ -362,8 +672,8 @@ export const CosmosChainSchema = z
.array(
z
.object({
address: z.string(),
provider: z.string().optional(),
address: z.string().min(1),
provider: z.string().min(1).optional(),
archive: z.boolean().default(false),
})
.strict(),
@ -373,8 +683,8 @@ export const CosmosChainSchema = z
.array(
z
.object({
address: z.string(),
provider: z.string().optional(),
address: z.string().min(1),
provider: z.string().min(1).optional(),
archive: z.boolean().default(false),
})
.strict(),
@ -384,8 +694,8 @@ export const CosmosChainSchema = z
.array(
z
.object({
address: z.string(),
provider: z.string().optional(),
address: z.string().min(1),
provider: z.string().min(1).optional(),
archive: z.boolean().default(false),
})
.strict(),
@ -395,8 +705,8 @@ export const CosmosChainSchema = z
.array(
z
.object({
address: z.string(),
provider: z.string().optional(),
address: z.string().min(1),
provider: z.string().min(1).optional(),
archive: z.boolean().default(false),
})
.strict(),
@ -406,8 +716,8 @@ export const CosmosChainSchema = z
.array(
z
.object({
address: z.string(),
provider: z.string().optional(),
address: z.string().min(1),
provider: z.string().min(1).optional(),
archive: z.boolean().default(false),
})
.strict(),
@ -417,8 +727,8 @@ export const CosmosChainSchema = z
.array(
z
.object({
address: z.string(),
provider: z.string().optional(),
address: z.string().min(1),
provider: z.string().min(1).optional(),
archive: z.boolean().default(false),
})
.strict(),
@ -431,22 +741,29 @@ export const CosmosChainSchema = z
.array(
z
.object({
kind: z.string().optional(),
url: z.string().optional(),
tx_page: z.string().optional(),
account_page: z.string().optional(),
kind: z.string().min(1).optional(),
url: z.string().min(1).optional(),
tx_page: z.string().min(1).optional(),
account_page: z.string().min(1).optional(),
validator_page: z.string().min(1).optional(),
proposal_page: z.string().min(1).optional(),
block_page: z.string().min(1).optional(),
})
.strict(),
)
.optional(),
keywords: z.array(z.string()).optional(),
keywords: z.array(z.string().min(1)).optional(),
extra_codecs: z.array(z.enum(['ethermint', 'injective'])).optional(),
})
.passthrough()
.strict()
.and(z.intersection(z.any(), z.any()))
.describe(
'Cosmos Chain.json is a metadata file that contains information about a cosmos sdk based chain.',
);
// .strict().and(z.intersection(z.any(), z.any())) is similar to .passthrough()
// using this way as it's exactly as generated by the tool
export async function getCosmosRegistryChain(chain: string) {
const json = await fetch(
`https://raw.githubusercontent.com/cosmos/chain-registry/master/${chain}/chain.json`,

Loading…
Cancel
Save