diff --git a/rust/config/testnet4_config.json b/rust/config/testnet4_config.json index 0b8f2db24c..707e408c8a 100644 --- a/rust/config/testnet4_config.json +++ b/rust/config/testnet4_config.json @@ -50,8 +50,55 @@ "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", "protocolFee": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", "defaultIsm": "0xFBb1D475d2275D4643B6ba9Dae16f2F5465F9436", + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x79c7799a9E686Ed93EEa208B67a2D7E93852F182", + "LEGACY_MULTISIG": "0x2c940Cfe1Fa2bdf2F2746ba52acDf2f0106c3cf1" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x3c9eD95aD9a3613a7c036F44fB6745052861f74C", + "LEGACY_MULTISIG": "0x8d3cf154259E3aF61BA8F62410d9D0E644c6A19f" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x3e844a5dA9247756F0182D652680065502BCB078", + "LEGACY_MULTISIG": "0x5aABB6B06112FC5Bb9f7e1BC8Ec17c06B01fb6Ed" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x6b6bEF043905810994a60Cd08F7CdF5BB798f19c", + "LEGACY_MULTISIG": "0xf75B0F727f1dea2FA491caD2Faf8f3B04B705294" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x2aEEc24F5997D7C19833Bf9f520b1e6c0Ef1Eda5", + "LEGACY_MULTISIG": "0x62f6EfC5a7A978821a5111261902b0A218ABF99F" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0x0caB24DBBDcA1E1bc27dd33481c09d9b306AE4a1", + "LEGACY_MULTISIG": "0xf8afa14F1cd8600d802C5a82A4406ca83629FC23" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x2183183bdc371c67302097DC60952e6E99484720", + "LEGACY_MULTISIG": "0x631749C86E90Cea9cF3Fb7686eBb6E80EfC9064c" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x4A0eFE3CCE8DEDAD4faC8A8521F920F5C2f553fC", + "LEGACY_MULTISIG": "0x19eeB6f283aBAb2A9A70a11C2a8972D416aA2af9" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x5E81d0bc59A632f319C75E339874209a29A0D9D2", + "LEGACY_MULTISIG": "0x533fb8cAb191B7094C545A191Ac770deBb1B8EEc" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0xf32f54Ec925AFf962ad164f94E7437E288901015", + "LEGACY_MULTISIG": "0x6BbF423f3742cB6594f9B9D844e780381aa4Ad91" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xe48BDf85C269603AcB79444D874bb80DFDd93FC5", + "LEGACY_MULTISIG": "0x17B141F3278624B9882e275B8D1aC6a310afCCbe" + }, + "ROUTING": "0x2b5D84351aA22d860CE206EB79089F9bE8050890", + "AGGREGATION": "0x6f36a2dCC2eE58eB6b4B43330788Baa350F952EC", + "fallbackRoutingHook": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0", "index": { - "from": 20232734 + "from": 20647937 } }, "arbitrumgoerli": { @@ -99,8 +146,9 @@ "interchainGasPaymaster": "0x76189acFA212298d7022624a4633411eE0d2f26F", "aggregationHook": "0xf852EB6b98d84A4296754043a56759a0Ae0E06df", "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B", + "fallbackRoutingHook": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", "index": { - "from": 45685526 + "from": 51782328 } }, "basegoerli": { @@ -150,8 +198,63 @@ "interchainGasPaymaster": "0x28B02B97a850872C4D33C3E024fab6499ad96564", "aggregationHook": "0x168e606fE4A9c8d7F83a3aAA132E831f153e4bAa", "protocolFee": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "fallbackRoutingHook": "0x4Ece7b15ba5dCA2708dCE2812016683193102b9F", + "alfajores": { + "messageIdMultisigIsm": "0xCc44a0dB101E08CB0C13f928aa8d4686042dA576", + "merkleRootMultisigIsm": "0xf113Ea1a825505840451A09113A9bb53908ED8f1", + "staticAggregationIsm": "0x3F5Bd4c5B3c0D91F11Aa7b57099fc3d71e5d26A4" + }, + "fuji": { + "messageIdMultisigIsm": "0x27F351ae5f5C0A58ea18aEAD9c1Dc07a53401721", + "merkleRootMultisigIsm": "0xefde4A00A72ef1eb08FFAd3475bCbCd6D336cA4f", + "staticAggregationIsm": "0x7A86e695a0A051Bcf1CB83128613E7561090c677" + }, + "mumbai": { + "messageIdMultisigIsm": "0x8Ce0Eda893a1727D171A55515D11420f1841549c", + "merkleRootMultisigIsm": "0x8FEc8D3efEe43Fd096F53b851c60E465A04384C7", + "staticAggregationIsm": "0xE9094c6172b905972D77FF4F5E3f28a73A6c5Dc1" + }, + "bsctestnet": { + "messageIdMultisigIsm": "0x4E7EAcA5D2d3B01005cFb0528d3c52cfF09BCA36", + "merkleRootMultisigIsm": "0x3eE9CA0355ae566A8776B41b8D5f96A996d6144e", + "staticAggregationIsm": "0xe111Ac8b252c41D787b4b68F7987B8aAAC3bc1Ce" + }, + "goerli": { + "opStackIsm": "0x14EE2f01907707Ce8d13C4F5DBC40778b5b664e0" + }, + "scrollsepolia": { + "messageIdMultisigIsm": "0xD5161cD144Ca3C88F87A1db8228D33708c5938Cc", + "merkleRootMultisigIsm": "0xEc5b9b4dc7088B450aa74994EBf65d569d027716", + "staticAggregationIsm": "0x343513A06727FE3268Ef78c3E53591fC67599Ec1" + }, + "sepolia": { + "messageIdMultisigIsm": "0x4d7C3c7592A874b8e1d6396646fC45005874beC9", + "merkleRootMultisigIsm": "0x173C1626542165A5F1B5cE20c0026e5E23ef19Ad", + "staticAggregationIsm": "0x0CAC5c5e7Ce997C39B51877E15ce18C5a9a4d00D" + }, + "moonbasealpha": { + "messageIdMultisigIsm": "0xC2A3802E2f6150a4d633b5328c6C01797177D2C0", + "merkleRootMultisigIsm": "0x31C77b1C9AD838ed75AAb535fe4fDca1b5dEfFfD", + "staticAggregationIsm": "0xEAfC371E012CC89D5a335AfF326F38b474Bc5E27" + }, + "optimismgoerli": { + "messageIdMultisigIsm": "0x75e1ad301B0E96f82d5a87D0Eb95cF1A250bf071", + "merkleRootMultisigIsm": "0xB98cE9298891Be9371F9b7fE021beaDBaD1189DD", + "staticAggregationIsm": "0x1629F7cf0561b7863C2E31F126Ab726Fe2bc307b" + }, + "arbitrumgoerli": { + "messageIdMultisigIsm": "0x19b34FDb98F4A6F41e803225bf4E258b7eC55876", + "merkleRootMultisigIsm": "0x93db3fA75bA99a040e6D5d3474350A0564E6E722", + "staticAggregationIsm": "0x830e7814c7C02a174208786CA65917405B845f20" + }, + "polygonzkevmtestnet": { + "messageIdMultisigIsm": "0x2c1bF9f9FE80D41Db769050Fb096be9aB41327Bc", + "merkleRootMultisigIsm": "0x8B2069eaa894995141F1879dDB612E05874F0116", + "staticAggregationIsm": "0x74bf2D0B09D371D54BD087df006786384E5525F8" + }, + "domainRoutingIsm": "0x4c8b1B480988f24b0F3602A4de641776586DbF90", "index": { - "from": 10676791 + "from": 11714799 } }, "bsctestnet": { @@ -167,7 +270,13 @@ }, "rpcUrls": [ { - "http": "https://data-seed-prebsc-1-s3.binance.org:8545" + "http": "https://bsc-testnet.publicnode.com" + }, + { + "http": "https://bsc-testnet.public.blastapi.io" + }, + { + "http": "https://bsc-testnet.blockpi.network/v1/rpc/public" } ], "blockExplorers": [ @@ -198,8 +307,55 @@ "mailbox": "0xF9F6F5646F478d5ab4e20B0F910C92F1CCC9Cc6D", "merkleTreeHook": "0xc6cbF39A747f5E28d1bDc8D9dfDAb2960Abd5A8f", "validatorAnnounce": "0xf09701B0a93210113D175461b6135a96773B5465", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0x352b56D019C85B1e7Db163c08876f0E4060e0EC0", + "LEGACY_MULTISIG": "0xc9764347811A0DDB36180273ADB6226E25e8134f" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x32e4C6C49e9a568Da17f87ee80A9542B5c3cE0bf", + "LEGACY_MULTISIG": "0x55eC2978E6c63DbF4AD2670d36539737d0341c76" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x4E368F65Ef1F765acf149052A5ad656AB4ecFeaf", + "LEGACY_MULTISIG": "0xB751c8366708A8cAa8E55580A6aE2CCAeD97Ca76" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x13999996CbA4E3BB793726e6Ed66B6DD0b8c19A6", + "LEGACY_MULTISIG": "0x6Bc6514ace1edf23cea6477d3fEDA7954571940C" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0xD953CC38fb2FF4CDE97739A024cd7D87e398Dcaf", + "LEGACY_MULTISIG": "0x16D1B0F3B3279c2793337FE8AfCC804c639C6627" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xcc7e00D24249D7BCF0aD2c79f6D90951C80CB47B", + "LEGACY_MULTISIG": "0x0521e8571a72445B8a5F758ffF2707d055C0b53F" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x16A3e41135b1339B925c6e49E64CEEadA5bAdBb7", + "LEGACY_MULTISIG": "0x5AE613e0D9aEF132f7034d6eF36b418ac9dE1f2E" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x6e37E41e7E4682d0dF68E34606f3254D89B7cDD0", + "LEGACY_MULTISIG": "0x8FEA7B15d7BCA0E09cb5B3BEB1dE71738A4a92B5" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xE61fF63Ff2000Da24B72f1C29209554E8Ba79171", + "LEGACY_MULTISIG": "0x363Fa03085A7D089245d0b637D7FfCF5A1aacb7F" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x91aB65A54DaE3B71f8cE31A20B42e4f337126ffF", + "LEGACY_MULTISIG": "0x32241E9d721E0D61c82BFF037C8A6e33D6cB8F18" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xdFf1FE7F04c03A8788a728E3fcAe8A50eEAd6e11", + "LEGACY_MULTISIG": "0x6528cB0B4f9065bB4562096963a6C98BC619da7e" + }, + "ROUTING": "0x5a052832973d0A988cb553C46F5CfAcA4E078c92", + "AGGREGATION": "0x16c328B3976e5624D8AC38E362574e694676Ac6b", + "fallbackRoutingHook": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d", "index": { - "from": 33950052 + "from": 34641957 } }, "fuji": { @@ -249,8 +405,55 @@ "interchainGasPaymaster": "0x6895d3916B94b386fAA6ec9276756e16dAe7480E", "aggregationHook": "0x8E9b4006171c6B75111823e7545Ee5400CEce0B3", "protocolFee": "0xEbA64c8a9b4a61a9210d5fe7E4375380999C821b", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0xd8325468566964245FAdf15Ef0BD3587B598b3bc", + "LEGACY_MULTISIG": "0x04cB6d0616b0059751F2CFc0Ea7dde62d959CEEC" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x0f56E6D62ddc37cbe2e4a8FA31dCA994c67c2A3d", + "LEGACY_MULTISIG": "0x8F2e9a004d3F0e8E1CEbE52375b44D79fB6Ff6ea" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x5C38d0d8686aAb40F81Ff5D9929bFD01f9C38899", + "LEGACY_MULTISIG": "0x4509Ee247C37738DC067b22fc84be9b8d7c18e83" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0xA62d029c16354F5845AC3c2728C8027645f16517", + "LEGACY_MULTISIG": "0xb7FFc29CF7be4a969282AE3E171c953D43212C30" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x1b50E9729155D3F7e3eE886003818D1Fa80920Fd", + "LEGACY_MULTISIG": "0x4D57430F0cb764A9835521acad3653199b039327" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xA90541C64f3eDc22a47Bc28D7cfdfE17F573A434", + "LEGACY_MULTISIG": "0xc1440Dbb7FeE4179D85d9dAD598A4E78cc5E222B" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xE5dd4fDE4c99DCeB5F753B6F536E99523dA6EE06", + "LEGACY_MULTISIG": "0x4Bd1319ABc8Bf7633198A1f0e529158D91cfDa9F" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x40D79400513cf7fccaE4d110d3B74c23B08337B6", + "LEGACY_MULTISIG": "0x0a2cD3A4D324A322821A829A1211a8483214ef2a" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x33b1A7480EC6dB39bE5919d695d06776E3bD7fA9", + "LEGACY_MULTISIG": "0x807AEb2b851Cc843Ae3d4D6f931cAEA893698823" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x247Dd2058D239ADC1348674BFA929F952Af331a0", + "LEGACY_MULTISIG": "0xD6e42987D0533cED33fcC9003B708bC56896C7Fe" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xD02753F38198DEB05924e503867f0e7bEC04d500", + "LEGACY_MULTISIG": "0x1A28Bc9F1D65661C4338bc374D4f133cB5763c50" + }, + "ROUTING": "0xd914570ea19385334e8DAcf5F1794f75895010dF", + "AGGREGATION": "0x39202263246c48eb80879870e9c547Bc787cdfC6", + "fallbackRoutingHook": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3", "index": { - "from": 26504985 + "from": 27245961 } }, "goerli": { @@ -303,8 +506,84 @@ "merkleTreeHook": "0x28c294C61D3dE053462d2Cfa5d5f8c8D70605A59", "mailbox": "0x49cfd6Ef774AcAb14814D699e3F7eE36Fdfba932", "validatorAnnounce": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E", + "alfajores": { + "messageIdMultisigIsm": "0x4683D18bD896acf67bC022f2dc0Cf9913E83a8C2", + "merkleRootMultisigIsm": "0xA09db9436C89376FbDCC731c61f3e96194d77549", + "staticAggregationIsm": "0xc80989C697d2dB54827293E9399461F5E17b50AE" + }, + "basegoerli": { + "messageIdMultisigIsm": "0x6EF750Fef341239fa0Fd7c9081508590A9527C69", + "merkleRootMultisigIsm": "0x8BB1F2bc7dd305440Dfe4E91c003510ef14044Ba", + "staticAggregationIsm": "0x110C79D5104f3d6a0291397d2f2896f10157C0f6" + }, + "fuji": { + "messageIdMultisigIsm": "0x44B0757b1C9512cff0C51089c7D5094C47D9316E", + "merkleRootMultisigIsm": "0xf3C288C5a4E17DCE46d06257B36ec7f4A82C1aF9", + "staticAggregationIsm": "0x0DB339E394665A7bDCb621B8f05A6dE746E4d28D" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x374A6953e95ADdC76c2d87cC7B89C3227DAf1Fd9", + "LEGACY_MULTISIG": "0x5d05c8152667f73e219CBb37531425C09e894de2", + "messageIdMultisigIsm": "0x374A6953e95ADdC76c2d87cC7B89C3227DAf1Fd9", + "merkleRootMultisigIsm": "0x5d05c8152667f73e219CBb37531425C09e894de2", + "staticAggregationIsm": "0x582643Ca4235195167b2195A4a8F71BDe56b8A1F" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x72a6Fcd41b68e6FAE71A5d0F21e574F3e6Ec5B9D", + "LEGACY_MULTISIG": "0x0F7C158d6afea27987f655A2d464E16fAe2aD8c7", + "messageIdMultisigIsm": "0x72a6Fcd41b68e6FAE71A5d0F21e574F3e6Ec5B9D", + "merkleRootMultisigIsm": "0x0F7C158d6afea27987f655A2d464E16fAe2aD8c7", + "staticAggregationIsm": "0x444a6FAc09220024f9D65943598829Fd4BD38bD7" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0x89c32A1Ca1Ae39886b18B0466dA5C97a6e031ca2", + "LEGACY_MULTISIG": "0x050798aFB2EF5A847f6A77764F19D207086bdDD3", + "messageIdMultisigIsm": "0x89c32A1Ca1Ae39886b18B0466dA5C97a6e031ca2", + "merkleRootMultisigIsm": "0x050798aFB2EF5A847f6A77764F19D207086bdDD3", + "staticAggregationIsm": "0x4A58088ff4B77dCcf8678A04C945CC552D6e65D6" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xf45819C46A54cdD816DC8c9EE580712e76eaAc0C", + "LEGACY_MULTISIG": "0xD22fddaB4595a7C0f78Fa3d20cc9485b19Ee861d", + "messageIdMultisigIsm": "0xf45819C46A54cdD816DC8c9EE580712e76eaAc0C", + "merkleRootMultisigIsm": "0xD22fddaB4595a7C0f78Fa3d20cc9485b19Ee861d", + "staticAggregationIsm": "0xE0593C964e8BA2481d0f23BAF27e36DC7CCd9F13" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x9B04e5971738c427c1b0660e89859BD4164B0d67", + "LEGACY_MULTISIG": "0xD3Ad23079611e2cc306E8a60ddFdAD250512d43F", + "messageIdMultisigIsm": "0x9B04e5971738c427c1b0660e89859BD4164B0d67", + "merkleRootMultisigIsm": "0xD3Ad23079611e2cc306E8a60ddFdAD250512d43F", + "staticAggregationIsm": "0xc3AF7BC41D75909cFA34e424Fd505b7121C0CF90" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x432B0ad68cbA0DFf644F30CC8b3275663Cb692E8", + "LEGACY_MULTISIG": "0xA50e98B2d52d4c9B242bD86f1B5C54D7E33190a6", + "messageIdMultisigIsm": "0x432B0ad68cbA0DFf644F30CC8b3275663Cb692E8", + "merkleRootMultisigIsm": "0xA50e98B2d52d4c9B242bD86f1B5C54D7E33190a6", + "staticAggregationIsm": "0x5d77806Fde4BbA8a665720d528CEACBb694B43b2" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x07733788489efD7F10533ab889144A7C67F6d9EF", + "LEGACY_MULTISIG": "0x44D117A356AfFE5C67D4A53b3eC1Ded1260Bd20d", + "messageIdMultisigIsm": "0x07733788489efD7F10533ab889144A7C67F6d9EF", + "merkleRootMultisigIsm": "0x44D117A356AfFE5C67D4A53b3eC1Ded1260Bd20d", + "staticAggregationIsm": "0x7F28dFed655a4C1a7AeC911B983Bc68EF9195D90" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0x070eDaC389b85aEe38507339Cd80aeBd95b1cb22", + "LEGACY_MULTISIG": "0x5c7e4Eb938DB4f1dE746aBb01eC1228EC38Ed3bd", + "messageIdMultisigIsm": "0x070eDaC389b85aEe38507339Cd80aeBd95b1cb22", + "merkleRootMultisigIsm": "0x5c7e4Eb938DB4f1dE746aBb01eC1228EC38Ed3bd", + "staticAggregationIsm": "0xE2fc443F458B6DbdD8987CDb6830d4F9a1AfDFeb" + }, + "ROUTING": "0x656cC76A0D05bC3F40c11DEBe0fF6EEEDabB856e", + "AGGREGATION": "0x595e45990F67A9795cE4FEB0b6ba4684c6258cD0", + "domainRoutingIsm": "0xE2401EB414B41DC2A97100f2Dab75bBcD7377119", + "opStackHook": "0xce59701919507F2d379270657A4e410F570aBe0D", + "fallbackRoutingHook": "0xDd66CB60D4Ffb7f0d8FB91CB1D20aBcaBC82900a", "index": { - "from": 9816044 + "from": 9954053 } }, "moonbasealpha": { @@ -352,8 +631,9 @@ "aggregationHook": "0xaA9d918C49Cea0D2a877252aFb7976B6e3A48623", "protocolFee": "0xe2A73F106902983452713F24Bd019F6eb8712986", "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", + "fallbackRoutingHook": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3", "index": { - "from": 5241351 + "from": 5382573 } }, "mumbai": { @@ -394,7 +674,7 @@ }, "isTestnet": true, "transactionOverrides": { - "maxFeePerGas": 70000000000, + "maxFeePerGas": 150000000000, "maxPriorityFeePerGas": 40000000000 }, "merkleRootMultisigIsmFactory": "0xda0780ed3eE577EfE0B856E00f983bF231603307", @@ -411,8 +691,55 @@ "protocolFee": "0x244d1F7e30Be144A87602905baBF86630e8f39DC", "mailbox": "0x2d1889fe5B092CD988972261434F7E5f26041115", "validatorAnnounce": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0x2ab7f5DeC6f8Ef411315487c23a0FD1955824274", + "LEGACY_MULTISIG": "0x46c3f1a2734568Ab4582E5e990Be37e9A90c8d5C" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0xcA58F63034D79d00742153636f40975616996569", + "LEGACY_MULTISIG": "0x256578935Ea39D5B6eD49722C20D6c7734c17442" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0xbd3Cd908B44b1AB4A5c9A2E2Abc567dbd3265BaF", + "LEGACY_MULTISIG": "0xB24FadDB99664D85755a4ee5402Cce2f936e2A85" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x20fC9FF58AA29FB015195735Cb87999D1169acA7", + "LEGACY_MULTISIG": "0x1A445E9f7f5E6230A11a960E1d77af94ec1Dc70B" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x94AfA49591B42C681CaFcBA9C1deb6d394dd358c", + "LEGACY_MULTISIG": "0x0025156297d59772cc3836EB15BcEb7b65bF2Ac0" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xf90Ad611612d3D7f45C1EB525e2f487373286717", + "LEGACY_MULTISIG": "0x00a20F2637437151cBDB5DD8e80672458bcCAE68" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x4234b78713bB6623b123CdBC4E163F497643D2b1", + "LEGACY_MULTISIG": "0x22A56d69B838897dacA4f87d6cC9c602de6bFaDC" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0xDbb5fc87d9CA83dE79E111acFb96882A70AE490c", + "LEGACY_MULTISIG": "0xe32F2c4129FeA483c55241Ab11413e0E9F38c716" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xeD282a84F9cd27A827fF07D6894FE9dc63a64D63", + "LEGACY_MULTISIG": "0x45B1784587aCE88E534588e8d43E1A3282ecBA8b" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x75204D086D263d475A6390b476126B2BeB6c37A7", + "LEGACY_MULTISIG": "0x1004f5636f3348bbAae626cAf5b6578f2f7e0425" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xBae6ED82c61C1aa9a0df9741193aE5a8eE84fB28", + "LEGACY_MULTISIG": "0x2487E9d66E62B3de58C246b3e1d588f41b39d433" + }, + "ROUTING": "0xBAad51c021e4bb94b9a10b1fC82b773Ca9e35D30", + "AGGREGATION": "0xE794ff773fcd25ad43749CbCAE8e69f7f64810EF", + "fallbackRoutingHook": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647", "index": { - "from": 40880088 + "from": 41804759 } }, "optimismgoerli": { @@ -460,8 +787,9 @@ "interchainGasPaymaster": "0x02A7661273528EfF3d78CBE7CbD1a717b28B89fC", "aggregationHook": "0x1C8A2588b8038BF9B7b1b60dD0EdF5b995A45599", "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20", + "fallbackRoutingHook": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F", "index": { - "from": 15559566 + "from": 16597573 } }, "polygonzkevmtestnet": { @@ -508,8 +836,9 @@ "interchainGasPaymaster": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", "aggregationHook": "0x0Fd2C6F0Ad45e766660b9fDebCF36a2AD69536D1", "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75", + "fallbackRoutingHook": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5", "index": { - "from": 2847250 + "from": 3049869 } }, "scrollsepolia": { @@ -526,17 +855,14 @@ "rpcUrls": [ { "http": "https://sepolia-rpc.scroll.io" - }, - { - "http": "https://scroll-public.scroll-testnet.quiknode.pro" } ], "blockExplorers": [ { "name": "Scroll Explorer", - "url": "https://sepolia-blockscout.scroll.io", - "apiUrl": "https://sepolia-blockscout.scroll.io/api", - "family": "blockscout" + "url": "https://sepolia.scrollscan.dev/", + "apiUrl": "https://api-sepolia.scrollscan.com/api", + "family": "etherscan" } ], "blocks": { @@ -559,8 +885,66 @@ "interchainGasPaymaster": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD", "aggregationHook": "0x7b63Aa270335F8896717c2A809205F4b650E4268", "protocolFee": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0xd9cbF08CaC905F78d961A72716Ef8EeD3aB7e5Eb", + "LEGACY_MULTISIG": "0xdC87a06493FaDE515c623464BE3F1580E5d8EC9A", + "MESSAGE_ID_MULTISIG": "0xd9cbF08CaC905F78d961A72716Ef8EeD3aB7e5Eb" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0xCC7DfEB63bbE762D46C9bb1B27D680b226A94b23", + "LEGACY_MULTISIG": "0xE38a0156e2968d336D43efEC716De54cF243974A", + "MESSAGE_ID_MULTISIG": "0xCC7DfEB63bbE762D46C9bb1B27D680b226A94b23" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x6479E7a0f62db3E4cfC16dfa4960953572cE4d91", + "LEGACY_MULTISIG": "0x8671d101e6A5430D856234811e493CbB3e08f00b", + "MESSAGE_ID_MULTISIG": "0x6479E7a0f62db3E4cfC16dfa4960953572cE4d91" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0xf449003Fdb780bEFac5F946CfC12172dc1e732DF", + "LEGACY_MULTISIG": "0x8838412195Eec3B10Ad78aE3e05d7b3f29d93A4B", + "MESSAGE_ID_MULTISIG": "0xf449003Fdb780bEFac5F946CfC12172dc1e732DF" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x3074E40aA0C52d83FbB9Be642946f5fadA2212bf", + "LEGACY_MULTISIG": "0xB766e93CFf3B16cBfA698955E71f27a0bE0BD42e", + "MESSAGE_ID_MULTISIG": "0x3074E40aA0C52d83FbB9Be642946f5fadA2212bf" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0xf98a3dfCC6384b6f19F3cdfD992552CA876261f3", + "LEGACY_MULTISIG": "0xde5013E6Ace9c9Da898f98Fafd1a85547f5B893b", + "MESSAGE_ID_MULTISIG": "0xf98a3dfCC6384b6f19F3cdfD992552CA876261f3" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xD3a84669f2F1896a1E9f77c7Dfe93F32EFf0Ea4E", + "LEGACY_MULTISIG": "0x4a072E0EB5AE0087A080F7b24E56d140E2aDd3f1", + "MESSAGE_ID_MULTISIG": "0xD3a84669f2F1896a1E9f77c7Dfe93F32EFf0Ea4E" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x47D285b171B5E2FDDf387EBdDcBeC58b188445De", + "LEGACY_MULTISIG": "0x3C1FA7196AAEAd718e741014B5Af7D46068335e3", + "MESSAGE_ID_MULTISIG": "0x47D285b171B5E2FDDf387EBdDcBeC58b188445De" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xef317A77273BE269a2d9861F3e10808126608f4A", + "LEGACY_MULTISIG": "0x21c9A0085c58E08693bC9Bf106066B8b23c51A19", + "MESSAGE_ID_MULTISIG": "0xef317A77273BE269a2d9861F3e10808126608f4A" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x6a3D436940697D2e1b351b366816121E9d291dDd", + "LEGACY_MULTISIG": "0xc144381ccfEc30F40f32FC18C45dD5CC20510aCd", + "MESSAGE_ID_MULTISIG": "0x6a3D436940697D2e1b351b366816121E9d291dDd" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0x6B4374a792DbC69c0EfAdb076190D137df7145F9", + "LEGACY_MULTISIG": "0xD9b48cD1F0B98FaEBafa5BEB1A78bdaCd5731d08", + "MESSAGE_ID_MULTISIG": "0x6B4374a792DbC69c0EfAdb076190D137df7145F9" + }, + "ROUTING": "0x30861DDAEFa5F85DAB234F4f67a0bFF0a5E02C48", + "AGGREGATION": "0x5861Baf9aa7eC91e88585aB3bd8e3183B0768437", + "fallbackRoutingHook": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE", "index": { - "from": 1345368 + "from": 1941608 } }, "sepolia": { @@ -576,7 +960,13 @@ }, "rpcUrls": [ { - "http": "https://endpoints.omniatech.io/v1/eth/sepolia/public" + "http": "https://ethereum-sepolia.blockpi.network/v1/rpc/public" + }, + { + "http": "https://eth-sepolia.g.alchemy.com/v2/demo" + }, + { + "http": "https://rpc.sepolia.org" } ], "blockExplorers": [ @@ -607,8 +997,9 @@ "mailbox": "0xfFAEF09B3cd11D9b20d1a19bECca54EEC2884766", "merkleTreeHook": "0x4917a9746A7B6E0A57159cCb7F5a6744247f2d0d", "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", + "fallbackRoutingHook": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", "index": { - "from": 4432735 + "from": 4590471 } } }, diff --git a/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol b/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol index d1e111fcd0..9bffafcc7e 100644 --- a/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol +++ b/solidity/contracts/interfaces/optimism/ICrossDomainMessenger.sol @@ -27,13 +27,13 @@ interface ICrossDomainMessenger { bytes calldata _message ) external payable; - /************* - * Variables * - *************/ - function xDomainMessageSender() external view returns (address); + + function OTHER_MESSENGER() external view returns (address); } +interface IL1CrossDomainMessenger is ICrossDomainMessenger {} + interface IL2CrossDomainMessenger is ICrossDomainMessenger { function messageNonce() external view returns (uint256); } diff --git a/typescript/infra/config/aggregationIsm.ts b/typescript/infra/config/aggregationIsm.ts index 6393806caa..a781d8b5f8 100644 --- a/typescript/infra/config/aggregationIsm.ts +++ b/typescript/infra/config/aggregationIsm.ts @@ -1,8 +1,5 @@ -import { - AggregationIsmConfig, - ChainName, - ModuleType, -} from '@hyperlane-xyz/sdk'; +import { AggregationIsmConfig, ChainName } from '@hyperlane-xyz/sdk'; +import { IsmType } from '@hyperlane-xyz/sdk/dist/ism/types'; import { Contexts } from './contexts'; import { multisigIsm } from './multisigIsm'; @@ -13,11 +10,11 @@ export const aggregationIsm = ( context: Contexts, ): AggregationIsmConfig => { return { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, modules: [ // Ordering matters to preserve determinism - multisigIsm(remote, ModuleType.MERKLE_ROOT_MULTISIG, context), - multisigIsm(remote, ModuleType.MESSAGE_ID_MULTISIG, context), + multisigIsm(remote, IsmType.MERKLE_ROOT_MULTISIG, context), + multisigIsm(remote, IsmType.MESSAGE_ID_MULTISIG, context), ], threshold: 1, }; diff --git a/typescript/infra/config/environments/test/aggregationIsm.ts b/typescript/infra/config/environments/test/aggregationIsm.ts index 0e0d140afc..02a063d35c 100644 --- a/typescript/infra/config/environments/test/aggregationIsm.ts +++ b/typescript/infra/config/environments/test/aggregationIsm.ts @@ -1,10 +1,10 @@ -import { AggregationIsmConfig, ModuleType } from '@hyperlane-xyz/sdk'; +import { AggregationIsmConfig, IsmType } from '@hyperlane-xyz/sdk'; import { merkleRootMultisig, messageIdMultisig } from './multisigIsm'; export const aggregationIsm = (validatorKey: string): AggregationIsmConfig => { return { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, modules: [ merkleRootMultisig(validatorKey), messageIdMultisig(validatorKey), diff --git a/typescript/infra/config/environments/test/core.ts b/typescript/infra/config/environments/test/core.ts index 73370f214a..0c2f476e42 100644 --- a/typescript/infra/config/environments/test/core.ts +++ b/typescript/infra/config/environments/test/core.ts @@ -4,10 +4,11 @@ import { AggregationHookConfig, ChainMap, CoreConfig, + FallbackRoutingHookConfig, HookType, IgpHookConfig, + IsmType, MerkleTreeHookConfig, - ModuleType, RoutingIsmConfig, } from '@hyperlane-xyz/sdk'; import { ProtocolFeeHookConfig } from '@hyperlane-xyz/sdk/src/hook/types'; @@ -20,7 +21,7 @@ import { owners } from './owners'; export const core: ChainMap = objMap(owners, (local, owner) => { const defaultIsm: RoutingIsmConfig = { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, owner, domains: Object.fromEntries( Object.entries(chainToValidator) @@ -38,11 +39,22 @@ export const core: ChainMap = objMap(owners, (local, owner) => { ...igp[local], }; - const defaultHook: AggregationHookConfig = { + const aggregationHook: AggregationHookConfig = { type: HookType.AGGREGATION, hooks: [merkleHook, igpHook], }; + const defaultHook: FallbackRoutingHookConfig = { + type: HookType.FALLBACK_ROUTING, + owner, + fallback: merkleHook, + domains: Object.fromEntries( + Object.entries(chainToValidator) + .filter(([chain, _]) => chain !== local) + .map(([chain, _]) => [chain, aggregationHook]), + ), + }; + const requiredHook: ProtocolFeeHookConfig = { type: HookType.PROTOCOL_FEE, maxProtocolFee: ethers.utils.parseUnits('1', 'gwei'), // 1 gwei of native token diff --git a/typescript/infra/config/environments/test/multisigIsm.ts b/typescript/infra/config/environments/test/multisigIsm.ts index a310d258f7..afa7916c95 100644 --- a/typescript/infra/config/environments/test/multisigIsm.ts +++ b/typescript/infra/config/environments/test/multisigIsm.ts @@ -1,4 +1,4 @@ -import { ChainMap, ModuleType, MultisigIsmConfig } from '@hyperlane-xyz/sdk'; +import { ChainMap, IsmType, MultisigIsmConfig } from '@hyperlane-xyz/sdk'; // the addresses here must line up with the e2e test's validator addresses // Validators are anvil accounts 4-6 @@ -10,7 +10,7 @@ export const chainToValidator: Record = { export const merkleRootMultisig = (validatorKey: string): MultisigIsmConfig => { return { - type: ModuleType.MERKLE_ROOT_MULTISIG, + type: IsmType.MERKLE_ROOT_MULTISIG, validators: [validatorKey], threshold: 1, }; @@ -18,7 +18,7 @@ export const merkleRootMultisig = (validatorKey: string): MultisigIsmConfig => { export const messageIdMultisig = (validatorKey: string): MultisigIsmConfig => { return { - type: ModuleType.MESSAGE_ID_MULTISIG, + type: IsmType.MESSAGE_ID_MULTISIG, validators: [validatorKey], threshold: 1, }; diff --git a/typescript/infra/config/environments/test/routingIsm.ts b/typescript/infra/config/environments/test/routingIsm.ts index bbe97fe449..7744e7471c 100644 --- a/typescript/infra/config/environments/test/routingIsm.ts +++ b/typescript/infra/config/environments/test/routingIsm.ts @@ -1,4 +1,4 @@ -import { ModuleType, RoutingIsmConfig } from '@hyperlane-xyz/sdk'; +import { IsmType, RoutingIsmConfig } from '@hyperlane-xyz/sdk'; import { multisigIsm } from './multisigIsm'; @@ -7,7 +7,7 @@ export const routingIsm = ( owner: string, ): RoutingIsmConfig => { return { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, owner, domains: Object.fromEntries( Object.entries(multisigIsm).filter(([chain]) => chain !== local_chain), diff --git a/typescript/infra/config/environments/testnet4/core.ts b/typescript/infra/config/environments/testnet4/core.ts index d9aba45ffd..f0f03f17eb 100644 --- a/typescript/infra/config/environments/testnet4/core.ts +++ b/typescript/infra/config/environments/testnet4/core.ts @@ -4,17 +4,21 @@ import { AggregationHookConfig, AggregationIsmConfig, ChainMap, + Chains, CoreConfig, + FallbackRoutingHookConfig, + HookConfig, HookType, IgpHookConfig, + IsmType, MerkleTreeHookConfig, - ModuleType, MultisigConfig, MultisigIsmConfig, ProtocolFeeHookConfig, RoutingIsmConfig, defaultMultisigIsmConfigs, } from '@hyperlane-xyz/sdk'; +import { OpStackIsmConfig } from '@hyperlane-xyz/sdk/dist/ism/types'; import { objMap } from '@hyperlane-xyz/utils'; import { supportedChainNames } from './chains'; @@ -28,35 +32,35 @@ export const core: ChainMap = objMap(owners, (local, owner) => { .map((origin) => [origin, defaultMultisigIsmConfigs[origin]]), ); - const messageIdRouting: RoutingIsmConfig = { - type: ModuleType.ROUTING, - domains: objMap( - originMultisigs, - (_, multisig): MultisigIsmConfig => ({ - type: ModuleType.MESSAGE_ID_MULTISIG, - ...multisig, - }), - ), - owner, - }; + const merkleRoot = (multisig: MultisigConfig): MultisigIsmConfig => ({ + type: IsmType.MERKLE_ROOT_MULTISIG, + ...multisig, + }); + + const messageIdIsm = (multisig: MultisigConfig): MultisigIsmConfig => ({ + type: IsmType.MESSAGE_ID_MULTISIG, + ...multisig, + }); - const merkleRootRouting: RoutingIsmConfig = { - type: ModuleType.ROUTING, + const defaultIsm: RoutingIsmConfig = { + type: IsmType.ROUTING, domains: objMap( originMultisigs, - (_, multisig): MultisigIsmConfig => ({ - type: ModuleType.MERKLE_ROOT_MULTISIG, - ...multisig, + (_, multisig): AggregationIsmConfig => ({ + type: IsmType.AGGREGATION, + modules: [messageIdIsm(multisig), merkleRoot(multisig)], + threshold: 1, }), ), owner, }; - - const defaultIsm: AggregationIsmConfig = { - type: ModuleType.AGGREGATION, - modules: [messageIdRouting, merkleRootRouting], - threshold: 1, - }; + if (local === Chains.basegoerli || local === Chains.optimismgoerli) { + defaultIsm.domains[Chains.goerli] = { + origin: Chains.goerli, + type: IsmType.OP_STACK, + nativeBridge: '0x4200000000000000000000000000000000000007', + } as OpStackIsmConfig; + } const merkleHook: MerkleTreeHookConfig = { type: HookType.MERKLE_TREE, @@ -67,9 +71,27 @@ export const core: ChainMap = objMap(owners, (local, owner) => { ...igp[local], }; - const defaultHook: AggregationHookConfig = { + const aggregationHook = (opStackHook: HookConfig): AggregationHookConfig => ({ type: HookType.AGGREGATION, - hooks: [merkleHook, igpHook], + hooks: [opStackHook, igpHook], + }); + + const domains = Object.fromEntries( + Object.entries(owners) + .filter(([chain, _]) => chain !== local) + .map(([chain, _]) => [chain, aggregationHook(merkleHook) as HookConfig]), + ); + + // if (local === Chains.goerli) { + // domains[Chains.optimismgoerli] = aggregationHook(opHookConfig); + // domains[Chains.basegoerli] = aggregationHook(baseHookConfig); + // } + + const defaultHook: FallbackRoutingHookConfig = { + type: HookType.FALLBACK_ROUTING, + owner, + fallback: merkleHook, + domains: domains, }; const requiredHook: ProtocolFeeHookConfig = { diff --git a/typescript/infra/config/environments/testnet4/core/verification.json b/typescript/infra/config/environments/testnet4/core/verification.json index 25d0f76b2f..31eb4ee72a 100644 --- a/typescript/infra/config/environments/testnet4/core/verification.json +++ b/typescript/infra/config/environments/testnet4/core/verification.json @@ -1349,6 +1349,18 @@ "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000221fa9cbafcd6c1c3d206571cf4427703e023ffa", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000221fa9cbafcd6c1c3d206571cf4427703e023ffa", + "isProxy": false } ], "basegoerli": [ @@ -2701,6 +2713,18 @@ "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x4Ece7b15ba5dCA2708dCE2812016683193102b9F", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000005821f3b6ee05f3dc62b43b74ab1c8f8e6904b1c8", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x4Ece7b15ba5dCA2708dCE2812016683193102b9F", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000005821f3b6ee05f3dc62b43b74ab1c8f8e6904b1c8", + "isProxy": false } ], "fuji": [ @@ -3045,6 +3069,18 @@ "address": "0x4f7179A691F8a684f56cF7Fed65171877d30739a", "constructorArguments": "0x0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3", + "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009ff6ac3daf63103620bbf76136ea1aff43c2f612", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3", + "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009ff6ac3daf63103620bbf76136ea1aff43c2f612", + "isProxy": false } ], "mumbai": [ @@ -3137,6 +3173,18 @@ "address": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", "constructorArguments": "0x0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647", + "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009af85731edd41e2e50f81ef8a0a69d2fb836edf9", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647", + "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000009af85731edd41e2e50f81ef8a0a69d2fb836edf9", + "isProxy": false } ], "bsctestnet": [ @@ -3229,6 +3277,18 @@ "address": "0xf09701B0a93210113D175461b6135a96773B5465", "constructorArguments": "0x000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d", + "constructorArguments": "000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000c6cbf39a747f5e28d1bdc8d9dfdab2960abd5a8f", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d", + "constructorArguments": "000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000c6cbf39a747f5e28d1bdc8d9dfdab2960abd5a8f", + "isProxy": false } ], "goerli": [ @@ -3321,6 +3381,78 @@ "address": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E", "constructorArguments": "0x00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x66F356393a9d66C7757dE475d02969783796d54c", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x7523AE9fAebf49749a0E7148403c8d26C23a53da", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000001681cc382e08a72d4b64a123080896e30f96b7400000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x66F356393a9d66C7757dE475d02969783796d54c", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x7523AE9fAebf49749a0E7148403c8d26C23a53da", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000001681cc382e08a72d4b64a123080896e30f96b7400000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x108FD05a2c0Ba834506167ef8f9FD715B3319d8F", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000003212977fbe6464c2bb60fdb85ab0a5e06e25cdfb0000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0x108FD05a2c0Ba834506167ef8f9FD715B3319d8F", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a330000000000000000000000003212977fbe6464c2bb60fdb85ab0a5e06e25cdfb0000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x8BAB125B823ee5E55797394c03B15874bF176A53", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x8BAB125B823ee5E55797394c03B15874bF176A53", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xDd66CB60D4Ffb7f0d8FB91CB1D20aBcaBC82900a", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0xce59701919507F2d379270657A4e410F570aBe0D", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a33000000000000000000000000e0c5bdafee7f7065402337040e426a42b5c336500000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xDd66CB60D4Ffb7f0d8FB91CB1D20aBcaBC82900a", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000028c294c61d3de053462d2cfa5d5f8c8d70605a59", + "isProxy": false + }, + { + "name": "OpStackHook", + "address": "0xce59701919507F2d379270657A4e410F570aBe0D", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000014a33000000000000000000000000e0c5bdafee7f7065402337040e426a42b5c336500000000000000000000000008e5693140ea606bceb98761d9beb1bc87383706d", + "isProxy": false } ], "scrollsepolia": [ @@ -3413,6 +3545,30 @@ "address": "0x527768930D889662Fe7ACF64294871e86e4C2381", "constructorArguments": "0x0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xfBeaF07855181f8476B235Cf746A7DF3F9e386Fb", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xfBeaF07855181f8476B235Cf746A7DF3F9e386Fb", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0", + "isProxy": false } ], "sepolia": [ @@ -3505,6 +3661,54 @@ "address": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", "constructorArguments": "0x000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7CE74319699165430fC651F6b99406eEbee95493", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x7CE74319699165430fC651F6b99406eEbee95493", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000004917a9746a7b6e0a57159ccb7f5a6744247f2d0d", + "isProxy": false } ], "moonbasealpha": [ @@ -3597,6 +3801,18 @@ "address": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", "constructorArguments": "0x00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3", + "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000155b1cd2f7cbc58d403b9be341fab6cd77425175", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3", + "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000155b1cd2f7cbc58d403b9be341fab6cd77425175", + "isProxy": false } ], "optimismgoerli": [ @@ -3689,6 +3905,18 @@ "address": "0x24D31e12E4d3bc2C46C994FcE0c828b218A1aeAb", "constructorArguments": "0x000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fee074b31b5b259eb3109737be13d39b853b47b9", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fee074b31b5b259eb3109737be13d39b853b47b9", + "isProxy": false } ], "arbitrumgoerli": [ @@ -3781,6 +4009,18 @@ "address": "0x4a01EEBa1CC20F47A2e60aE4ec932051601FcB9e", "constructorArguments": "0x00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000f0a38e1eea49dac7968f470c3aa0bde2565a5d80", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000f0a38e1eea49dac7968f470c3aa0bde2565a5d80", + "isProxy": false } ], "polygonzkevmtestnet": [ @@ -3873,6 +4113,18 @@ "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", "constructorArguments": "0x000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8", "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000068311418d79fe8d96599384ed767d225635d88a8", + "isProxy": false + }, + { + "name": "FallbackRoutingHook", + "address": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000068311418d79fe8d96599384ed767d225635d88a8", + "isProxy": false } ] } diff --git a/typescript/infra/config/environments/testnet4/hooks.ts b/typescript/infra/config/environments/testnet4/hooks.ts new file mode 100644 index 0000000000..b88082c4b9 --- /dev/null +++ b/typescript/infra/config/environments/testnet4/hooks.ts @@ -0,0 +1,13 @@ +import { Chains, HookType, OpStackHookConfig } from '@hyperlane-xyz/sdk'; + +export const opHookConfig: OpStackHookConfig = { + type: HookType.OP_STACK, + nativeBridge: '0xDa2332D0a7608919Cd331B1304Cd179129a90495', + destinationChain: Chains.optimismgoerli, +}; + +export const baseHookConfig: OpStackHookConfig = { + type: HookType.OP_STACK, + nativeBridge: '0x8e5693140eA606bcEB98761d9beB1BC87383706D', + destinationChain: Chains.basegoerli, +}; diff --git a/typescript/infra/config/routingIsm.ts b/typescript/infra/config/routingIsm.ts index d8fdb3a26d..3755bdf69a 100644 --- a/typescript/infra/config/routingIsm.ts +++ b/typescript/infra/config/routingIsm.ts @@ -3,7 +3,7 @@ import { ChainMap, ChainName, IsmConfig, - ModuleType, + IsmType, RoutingIsmConfig, } from '@hyperlane-xyz/sdk'; import { Address } from '@hyperlane-xyz/utils'; @@ -70,7 +70,7 @@ export const routingIsm = ( ); return { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, domains: aggregationIsms, owner: owners[environment][local], }; @@ -79,15 +79,13 @@ export const routingIsm = ( const replacerEnum = (key: string, value: any) => { if (key === 'type') { switch (value) { - case ModuleType.AGGREGATION: + case IsmType.AGGREGATION: return 'AGGREGATION'; - case ModuleType.ROUTING: + case IsmType.ROUTING: return 'ROUTING'; - case ModuleType.MERKLE_ROOT_MULTISIG: + case IsmType.MERKLE_ROOT_MULTISIG: return 'MERKLE_ROOT_MULTISIG'; - case ModuleType.LEGACY_MULTISIG: - return 'LEGACY_MULTISIG'; - case ModuleType.MESSAGE_ID_MULTISIG: + case IsmType.MESSAGE_ID_MULTISIG: return 'MESSAGE_ID_MULTISIG'; default: return value; diff --git a/typescript/infra/hardhat.config.ts b/typescript/infra/hardhat.config.ts index d33212b4fb..404d6e0a00 100644 --- a/typescript/infra/hardhat.config.ts +++ b/typescript/infra/hardhat.config.ts @@ -8,7 +8,6 @@ import { ChainName, HookType, HyperlaneCore, - ModuleType, MultiProvider, } from '@hyperlane-xyz/sdk'; import { addressToBytes32 } from '@hyperlane-xyz/utils'; diff --git a/typescript/infra/scripts/print-multisig-ism-config.ts b/typescript/infra/scripts/print-multisig-ism-config.ts index 580afbf0ff..e05aeaf996 100644 --- a/typescript/infra/scripts/print-multisig-ism-config.ts +++ b/typescript/infra/scripts/print-multisig-ism-config.ts @@ -1,4 +1,4 @@ -import { AllChains, ModuleType } from '@hyperlane-xyz/sdk'; +import { AllChains, IsmType } from '@hyperlane-xyz/sdk'; import { multisigIsms } from '../config/multisigIsm'; @@ -16,7 +16,7 @@ async function main() { const config = multisigIsms( args.environment, args.local, - ModuleType.MESSAGE_ID_MULTISIG, + IsmType.MESSAGE_ID_MULTISIG, args.context, ); diff --git a/typescript/sdk/src/consts/chainMetadata.ts b/typescript/sdk/src/consts/chainMetadata.ts index 8788c43156..a71d8e863d 100644 --- a/typescript/sdk/src/consts/chainMetadata.ts +++ b/typescript/sdk/src/consts/chainMetadata.ts @@ -426,10 +426,7 @@ export const scrollsepolia: ChainMetadata = { protocol: ProtocolType.Ethereum, displayName: 'Scroll Sepolia', nativeToken: etherToken, - rpcUrls: [ - { http: 'https://sepolia-rpc.scroll.io' }, - { http: 'https://scroll-public.scroll-testnet.quiknode.pro' }, - ], + rpcUrls: [{ http: 'https://sepolia-rpc.scroll.io' }], blockExplorers: [ { name: 'Scroll Explorer', diff --git a/typescript/sdk/src/consts/environments/testnet.json b/typescript/sdk/src/consts/environments/testnet.json index 2126cc1d05..7256d8d780 100644 --- a/typescript/sdk/src/consts/environments/testnet.json +++ b/typescript/sdk/src/consts/environments/testnet.json @@ -13,7 +13,62 @@ "storageGasOracle": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", "interchainGasPaymaster": "0x28B02B97a850872C4D33C3E024fab6499ad96564", "aggregationHook": "0x168e606fE4A9c8d7F83a3aAA132E831f153e4bAa", - "protocolFee": "0xEe421285728284000ec6c6C55C6F9161faeFfa99" + "protocolFee": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "fallbackRoutingHook": "0x4Ece7b15ba5dCA2708dCE2812016683193102b9F", + "alfajores": { + "messageIdMultisigIsm": "0xCc44a0dB101E08CB0C13f928aa8d4686042dA576", + "merkleRootMultisigIsm": "0xf113Ea1a825505840451A09113A9bb53908ED8f1", + "staticAggregationIsm": "0x3F5Bd4c5B3c0D91F11Aa7b57099fc3d71e5d26A4" + }, + "fuji": { + "messageIdMultisigIsm": "0x27F351ae5f5C0A58ea18aEAD9c1Dc07a53401721", + "merkleRootMultisigIsm": "0xefde4A00A72ef1eb08FFAd3475bCbCd6D336cA4f", + "staticAggregationIsm": "0x7A86e695a0A051Bcf1CB83128613E7561090c677" + }, + "mumbai": { + "messageIdMultisigIsm": "0x8Ce0Eda893a1727D171A55515D11420f1841549c", + "merkleRootMultisigIsm": "0x8FEc8D3efEe43Fd096F53b851c60E465A04384C7", + "staticAggregationIsm": "0xE9094c6172b905972D77FF4F5E3f28a73A6c5Dc1" + }, + "bsctestnet": { + "messageIdMultisigIsm": "0x4E7EAcA5D2d3B01005cFb0528d3c52cfF09BCA36", + "merkleRootMultisigIsm": "0x3eE9CA0355ae566A8776B41b8D5f96A996d6144e", + "staticAggregationIsm": "0xe111Ac8b252c41D787b4b68F7987B8aAAC3bc1Ce" + }, + "goerli": { + "opStackIsm": "0xc60c145f1e1904f9d6483a611bf1416697ccc1fe" + }, + "scrollsepolia": { + "messageIdMultisigIsm": "0xD5161cD144Ca3C88F87A1db8228D33708c5938Cc", + "merkleRootMultisigIsm": "0xEc5b9b4dc7088B450aa74994EBf65d569d027716", + "staticAggregationIsm": "0x343513A06727FE3268Ef78c3E53591fC67599Ec1" + }, + "sepolia": { + "messageIdMultisigIsm": "0x4d7C3c7592A874b8e1d6396646fC45005874beC9", + "merkleRootMultisigIsm": "0x173C1626542165A5F1B5cE20c0026e5E23ef19Ad", + "staticAggregationIsm": "0x0CAC5c5e7Ce997C39B51877E15ce18C5a9a4d00D" + }, + "moonbasealpha": { + "messageIdMultisigIsm": "0xC2A3802E2f6150a4d633b5328c6C01797177D2C0", + "merkleRootMultisigIsm": "0x31C77b1C9AD838ed75AAb535fe4fDca1b5dEfFfD", + "staticAggregationIsm": "0xEAfC371E012CC89D5a335AfF326F38b474Bc5E27" + }, + "optimismgoerli": { + "messageIdMultisigIsm": "0x75e1ad301B0E96f82d5a87D0Eb95cF1A250bf071", + "merkleRootMultisigIsm": "0xB98cE9298891Be9371F9b7fE021beaDBaD1189DD", + "staticAggregationIsm": "0x1629F7cf0561b7863C2E31F126Ab726Fe2bc307b" + }, + "arbitrumgoerli": { + "messageIdMultisigIsm": "0x19b34FDb98F4A6F41e803225bf4E258b7eC55876", + "merkleRootMultisigIsm": "0x93db3fA75bA99a040e6D5d3474350A0564E6E722", + "staticAggregationIsm": "0x830e7814c7C02a174208786CA65917405B845f20" + }, + "polygonzkevmtestnet": { + "messageIdMultisigIsm": "0x2c1bF9f9FE80D41Db769050Fb096be9aB41327Bc", + "merkleRootMultisigIsm": "0x8B2069eaa894995141F1879dDB612E05874F0116", + "staticAggregationIsm": "0x74bf2D0B09D371D54BD087df006786384E5525F8" + }, + "domainRoutingIsm": "0x4c8b1B480988f24b0F3602A4de641776586DbF90" }, "arbitrumgoerli": { "merkleRootMultisigIsmFactory": "0x17D58eBb5Ea0E2d360c877E119FAef4C4052e6B9", @@ -29,7 +84,8 @@ "storageGasOracle": "0xFc8229ADB46D96056A6e451Fb3c55d60FFeD056f", "interchainGasPaymaster": "0x76189acFA212298d7022624a4633411eE0d2f26F", "aggregationHook": "0xf852EB6b98d84A4296754043a56759a0Ae0E06df", - "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B" + "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B", + "fallbackRoutingHook": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f" }, "optimismgoerli": { "merkleRootMultisigIsmFactory": "0xAbC25d7daDD748948F5cC912A807b0f8FcBb56a9", @@ -45,7 +101,8 @@ "storageGasOracle": "0x4927C33299091033D935C15DE6b6073164e99BE0", "interchainGasPaymaster": "0x02A7661273528EfF3d78CBE7CbD1a717b28B89fC", "aggregationHook": "0x1C8A2588b8038BF9B7b1b60dD0EdF5b995A45599", - "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20" + "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20", + "fallbackRoutingHook": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F" }, "scrollsepolia": { "merkleRootMultisigIsmFactory": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7", @@ -61,7 +118,65 @@ "storageGasOracle": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C", "interchainGasPaymaster": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD", "aggregationHook": "0x7b63Aa270335F8896717c2A809205F4b650E4268", - "protocolFee": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8" + "protocolFee": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0xd9cbF08CaC905F78d961A72716Ef8EeD3aB7e5Eb", + "LEGACY_MULTISIG": "0xdC87a06493FaDE515c623464BE3F1580E5d8EC9A", + "MESSAGE_ID_MULTISIG": "0xd9cbF08CaC905F78d961A72716Ef8EeD3aB7e5Eb" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0xCC7DfEB63bbE762D46C9bb1B27D680b226A94b23", + "LEGACY_MULTISIG": "0xE38a0156e2968d336D43efEC716De54cF243974A", + "MESSAGE_ID_MULTISIG": "0xCC7DfEB63bbE762D46C9bb1B27D680b226A94b23" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x6479E7a0f62db3E4cfC16dfa4960953572cE4d91", + "LEGACY_MULTISIG": "0x8671d101e6A5430D856234811e493CbB3e08f00b", + "MESSAGE_ID_MULTISIG": "0x6479E7a0f62db3E4cfC16dfa4960953572cE4d91" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0xf449003Fdb780bEFac5F946CfC12172dc1e732DF", + "LEGACY_MULTISIG": "0x8838412195Eec3B10Ad78aE3e05d7b3f29d93A4B", + "MESSAGE_ID_MULTISIG": "0xf449003Fdb780bEFac5F946CfC12172dc1e732DF" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x3074E40aA0C52d83FbB9Be642946f5fadA2212bf", + "LEGACY_MULTISIG": "0xB766e93CFf3B16cBfA698955E71f27a0bE0BD42e", + "MESSAGE_ID_MULTISIG": "0x3074E40aA0C52d83FbB9Be642946f5fadA2212bf" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0xf98a3dfCC6384b6f19F3cdfD992552CA876261f3", + "LEGACY_MULTISIG": "0xde5013E6Ace9c9Da898f98Fafd1a85547f5B893b", + "MESSAGE_ID_MULTISIG": "0xf98a3dfCC6384b6f19F3cdfD992552CA876261f3" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xD3a84669f2F1896a1E9f77c7Dfe93F32EFf0Ea4E", + "LEGACY_MULTISIG": "0x4a072E0EB5AE0087A080F7b24E56d140E2aDd3f1", + "MESSAGE_ID_MULTISIG": "0xD3a84669f2F1896a1E9f77c7Dfe93F32EFf0Ea4E" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x47D285b171B5E2FDDf387EBdDcBeC58b188445De", + "LEGACY_MULTISIG": "0x3C1FA7196AAEAd718e741014B5Af7D46068335e3", + "MESSAGE_ID_MULTISIG": "0x47D285b171B5E2FDDf387EBdDcBeC58b188445De" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xef317A77273BE269a2d9861F3e10808126608f4A", + "LEGACY_MULTISIG": "0x21c9A0085c58E08693bC9Bf106066B8b23c51A19", + "MESSAGE_ID_MULTISIG": "0xef317A77273BE269a2d9861F3e10808126608f4A" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x6a3D436940697D2e1b351b366816121E9d291dDd", + "LEGACY_MULTISIG": "0xc144381ccfEc30F40f32FC18C45dD5CC20510aCd", + "MESSAGE_ID_MULTISIG": "0x6a3D436940697D2e1b351b366816121E9d291dDd" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0x6B4374a792DbC69c0EfAdb076190D137df7145F9", + "LEGACY_MULTISIG": "0xD9b48cD1F0B98FaEBafa5BEB1A78bdaCd5731d08", + "MESSAGE_ID_MULTISIG": "0x6B4374a792DbC69c0EfAdb076190D137df7145F9" + }, + "ROUTING": "0x30861DDAEFa5F85DAB234F4f67a0bFF0a5E02C48", + "AGGREGATION": "0x5861Baf9aa7eC91e88585aB3bd8e3183B0768437", + "fallbackRoutingHook": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE" }, "alfajores": { "merkleRootMultisigIsmFactory": "0xa9C7e306C0941896CA1fd528aA59089571D8D67E", @@ -77,7 +192,54 @@ "interchainGasPaymaster": "0x44769b0f4a6f01339e131a691cc2eebbb519d297", "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", "protocolFee": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", - "defaultIsm": "0xFBb1D475d2275D4643B6ba9Dae16f2F5465F9436" + "defaultIsm": "0xFBb1D475d2275D4643B6ba9Dae16f2F5465F9436", + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x79c7799a9E686Ed93EEa208B67a2D7E93852F182", + "LEGACY_MULTISIG": "0x2c940Cfe1Fa2bdf2F2746ba52acDf2f0106c3cf1" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x3c9eD95aD9a3613a7c036F44fB6745052861f74C", + "LEGACY_MULTISIG": "0x8d3cf154259E3aF61BA8F62410d9D0E644c6A19f" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x3e844a5dA9247756F0182D652680065502BCB078", + "LEGACY_MULTISIG": "0x5aABB6B06112FC5Bb9f7e1BC8Ec17c06B01fb6Ed" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x6b6bEF043905810994a60Cd08F7CdF5BB798f19c", + "LEGACY_MULTISIG": "0xf75B0F727f1dea2FA491caD2Faf8f3B04B705294" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x2aEEc24F5997D7C19833Bf9f520b1e6c0Ef1Eda5", + "LEGACY_MULTISIG": "0x62f6EfC5a7A978821a5111261902b0A218ABF99F" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0x0caB24DBBDcA1E1bc27dd33481c09d9b306AE4a1", + "LEGACY_MULTISIG": "0xf8afa14F1cd8600d802C5a82A4406ca83629FC23" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x2183183bdc371c67302097DC60952e6E99484720", + "LEGACY_MULTISIG": "0x631749C86E90Cea9cF3Fb7686eBb6E80EfC9064c" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x4A0eFE3CCE8DEDAD4faC8A8521F920F5C2f553fC", + "LEGACY_MULTISIG": "0x19eeB6f283aBAb2A9A70a11C2a8972D416aA2af9" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x5E81d0bc59A632f319C75E339874209a29A0D9D2", + "LEGACY_MULTISIG": "0x533fb8cAb191B7094C545A191Ac770deBb1B8EEc" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0xf32f54Ec925AFf962ad164f94E7437E288901015", + "LEGACY_MULTISIG": "0x6BbF423f3742cB6594f9B9D844e780381aa4Ad91" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xe48BDf85C269603AcB79444D874bb80DFDd93FC5", + "LEGACY_MULTISIG": "0x17B141F3278624B9882e275B8D1aC6a310afCCbe" + }, + "ROUTING": "0x2b5D84351aA22d860CE206EB79089F9bE8050890", + "AGGREGATION": "0x6f36a2dCC2eE58eB6b4B43330788Baa350F952EC", + "fallbackRoutingHook": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0" }, "polygonzkevmtestnet": { "merkleRootMultisigIsmFactory": "0xfc6e546510dC9d76057F1f76633FCFfC188CB213", @@ -93,7 +255,8 @@ "storageGasOracle": "0x3707bc8C7342aA6f693bCe1Bd7671Fca146F7F0A", "interchainGasPaymaster": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", "aggregationHook": "0x0Fd2C6F0Ad45e766660b9fDebCF36a2AD69536D1", - "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75" + "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75", + "fallbackRoutingHook": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5" }, "sepolia": { "merkleRootMultisigIsmFactory": "0x0a71AcC99967829eE305a285750017C4916Ca269", @@ -109,7 +272,8 @@ "protocolFee": "0x13AC3349Cb159fE86A22cf42DdA803D9f7309DB5", "mailbox": "0xfFAEF09B3cd11D9b20d1a19bECca54EEC2884766", "merkleTreeHook": "0x4917a9746A7B6E0A57159cCb7F5a6744247f2d0d", - "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9" + "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", + "fallbackRoutingHook": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E" }, "fuji": { "merkleRootMultisigIsmFactory": "0x93F50Ac4E5663DAAb03508008d592f6260964f62", @@ -125,7 +289,54 @@ "storageGasOracle": "0x9305dE34306886d615B096Bdf23b94a978f6a6c0", "interchainGasPaymaster": "0x6895d3916B94b386fAA6ec9276756e16dAe7480E", "aggregationHook": "0x8E9b4006171c6B75111823e7545Ee5400CEce0B3", - "protocolFee": "0xEbA64c8a9b4a61a9210d5fe7E4375380999C821b" + "protocolFee": "0xEbA64c8a9b4a61a9210d5fe7E4375380999C821b", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0xd8325468566964245FAdf15Ef0BD3587B598b3bc", + "LEGACY_MULTISIG": "0x04cB6d0616b0059751F2CFc0Ea7dde62d959CEEC" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x0f56E6D62ddc37cbe2e4a8FA31dCA994c67c2A3d", + "LEGACY_MULTISIG": "0x8F2e9a004d3F0e8E1CEbE52375b44D79fB6Ff6ea" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x5C38d0d8686aAb40F81Ff5D9929bFD01f9C38899", + "LEGACY_MULTISIG": "0x4509Ee247C37738DC067b22fc84be9b8d7c18e83" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0xA62d029c16354F5845AC3c2728C8027645f16517", + "LEGACY_MULTISIG": "0xb7FFc29CF7be4a969282AE3E171c953D43212C30" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x1b50E9729155D3F7e3eE886003818D1Fa80920Fd", + "LEGACY_MULTISIG": "0x4D57430F0cb764A9835521acad3653199b039327" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xA90541C64f3eDc22a47Bc28D7cfdfE17F573A434", + "LEGACY_MULTISIG": "0xc1440Dbb7FeE4179D85d9dAD598A4E78cc5E222B" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xE5dd4fDE4c99DCeB5F753B6F536E99523dA6EE06", + "LEGACY_MULTISIG": "0x4Bd1319ABc8Bf7633198A1f0e529158D91cfDa9F" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x40D79400513cf7fccaE4d110d3B74c23B08337B6", + "LEGACY_MULTISIG": "0x0a2cD3A4D324A322821A829A1211a8483214ef2a" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x33b1A7480EC6dB39bE5919d695d06776E3bD7fA9", + "LEGACY_MULTISIG": "0x807AEb2b851Cc843Ae3d4D6f931cAEA893698823" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x247Dd2058D239ADC1348674BFA929F952Af331a0", + "LEGACY_MULTISIG": "0xD6e42987D0533cED33fcC9003B708bC56896C7Fe" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xD02753F38198DEB05924e503867f0e7bEC04d500", + "LEGACY_MULTISIG": "0x1A28Bc9F1D65661C4338bc374D4f133cB5763c50" + }, + "ROUTING": "0xd914570ea19385334e8DAcf5F1794f75895010dF", + "AGGREGATION": "0x39202263246c48eb80879870e9c547Bc787cdfC6", + "fallbackRoutingHook": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3" }, "bsctestnet": { "merkleRootMultisigIsmFactory": "0x3E235B90197E1D6b5DB5ad5aD49f2c1ED6406382", @@ -141,7 +352,54 @@ "protocolFee": "0x3eF0a63B8976b838704Bcc93C78C56b6653E5a39", "mailbox": "0xF9F6F5646F478d5ab4e20B0F910C92F1CCC9Cc6D", "merkleTreeHook": "0xc6cbF39A747f5E28d1bDc8D9dfDAb2960Abd5A8f", - "validatorAnnounce": "0xf09701B0a93210113D175461b6135a96773B5465" + "validatorAnnounce": "0xf09701B0a93210113D175461b6135a96773B5465", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0x352b56D019C85B1e7Db163c08876f0E4060e0EC0", + "LEGACY_MULTISIG": "0xc9764347811A0DDB36180273ADB6226E25e8134f" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0x32e4C6C49e9a568Da17f87ee80A9542B5c3cE0bf", + "LEGACY_MULTISIG": "0x55eC2978E6c63DbF4AD2670d36539737d0341c76" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0x4E368F65Ef1F765acf149052A5ad656AB4ecFeaf", + "LEGACY_MULTISIG": "0xB751c8366708A8cAa8E55580A6aE2CCAeD97Ca76" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x13999996CbA4E3BB793726e6Ed66B6DD0b8c19A6", + "LEGACY_MULTISIG": "0x6Bc6514ace1edf23cea6477d3fEDA7954571940C" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0xD953CC38fb2FF4CDE97739A024cd7D87e398Dcaf", + "LEGACY_MULTISIG": "0x16D1B0F3B3279c2793337FE8AfCC804c639C6627" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xcc7e00D24249D7BCF0aD2c79f6D90951C80CB47B", + "LEGACY_MULTISIG": "0x0521e8571a72445B8a5F758ffF2707d055C0b53F" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x16A3e41135b1339B925c6e49E64CEEadA5bAdBb7", + "LEGACY_MULTISIG": "0x5AE613e0D9aEF132f7034d6eF36b418ac9dE1f2E" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x6e37E41e7E4682d0dF68E34606f3254D89B7cDD0", + "LEGACY_MULTISIG": "0x8FEA7B15d7BCA0E09cb5B3BEB1dE71738A4a92B5" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xE61fF63Ff2000Da24B72f1C29209554E8Ba79171", + "LEGACY_MULTISIG": "0x363Fa03085A7D089245d0b637D7FfCF5A1aacb7F" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x91aB65A54DaE3B71f8cE31A20B42e4f337126ffF", + "LEGACY_MULTISIG": "0x32241E9d721E0D61c82BFF037C8A6e33D6cB8F18" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xdFf1FE7F04c03A8788a728E3fcAe8A50eEAd6e11", + "LEGACY_MULTISIG": "0x6528cB0B4f9065bB4562096963a6C98BC619da7e" + }, + "ROUTING": "0x5a052832973d0A988cb553C46F5CfAcA4E078c92", + "AGGREGATION": "0x16c328B3976e5624D8AC38E362574e694676Ac6b", + "fallbackRoutingHook": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d" }, "goerli": { "merkleRootMultisigIsmFactory": "0x8e43aCfb338B137A3befd9b92BfD84E128adE0B8", @@ -157,7 +415,83 @@ "protocolFee": "0x9293B8dAcA7933765de499C992B0Fa86Bb104b0f", "merkleTreeHook": "0x28c294C61D3dE053462d2Cfa5d5f8c8D70605A59", "mailbox": "0x49cfd6Ef774AcAb14814D699e3F7eE36Fdfba932", - "validatorAnnounce": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E" + "validatorAnnounce": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E", + "alfajores": { + "messageIdMultisigIsm": "0x4683D18bD896acf67bC022f2dc0Cf9913E83a8C2", + "merkleRootMultisigIsm": "0xA09db9436C89376FbDCC731c61f3e96194d77549", + "staticAggregationIsm": "0xc80989C697d2dB54827293E9399461F5E17b50AE" + }, + "basegoerli": { + "messageIdMultisigIsm": "0x6EF750Fef341239fa0Fd7c9081508590A9527C69", + "merkleRootMultisigIsm": "0x8BB1F2bc7dd305440Dfe4E91c003510ef14044Ba", + "staticAggregationIsm": "0x110C79D5104f3d6a0291397d2f2896f10157C0f6" + }, + "fuji": { + "messageIdMultisigIsm": "0x44B0757b1C9512cff0C51089c7D5094C47D9316E", + "merkleRootMultisigIsm": "0xf3C288C5a4E17DCE46d06257B36ec7f4A82C1aF9", + "staticAggregationIsm": "0x0DB339E394665A7bDCb621B8f05A6dE746E4d28D" + }, + "mumbai": { + "MERKLE_ROOT_MULTISIG": "0x374A6953e95ADdC76c2d87cC7B89C3227DAf1Fd9", + "LEGACY_MULTISIG": "0x5d05c8152667f73e219CBb37531425C09e894de2", + "messageIdMultisigIsm": "0x374A6953e95ADdC76c2d87cC7B89C3227DAf1Fd9", + "merkleRootMultisigIsm": "0x5d05c8152667f73e219CBb37531425C09e894de2", + "staticAggregationIsm": "0x582643Ca4235195167b2195A4a8F71BDe56b8A1F" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x72a6Fcd41b68e6FAE71A5d0F21e574F3e6Ec5B9D", + "LEGACY_MULTISIG": "0x0F7C158d6afea27987f655A2d464E16fAe2aD8c7", + "messageIdMultisigIsm": "0x72a6Fcd41b68e6FAE71A5d0F21e574F3e6Ec5B9D", + "merkleRootMultisigIsm": "0x0F7C158d6afea27987f655A2d464E16fAe2aD8c7", + "staticAggregationIsm": "0x444a6FAc09220024f9D65943598829Fd4BD38bD7" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0x89c32A1Ca1Ae39886b18B0466dA5C97a6e031ca2", + "LEGACY_MULTISIG": "0x050798aFB2EF5A847f6A77764F19D207086bdDD3", + "messageIdMultisigIsm": "0x89c32A1Ca1Ae39886b18B0466dA5C97a6e031ca2", + "merkleRootMultisigIsm": "0x050798aFB2EF5A847f6A77764F19D207086bdDD3", + "staticAggregationIsm": "0x4A58088ff4B77dCcf8678A04C945CC552D6e65D6" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0xf45819C46A54cdD816DC8c9EE580712e76eaAc0C", + "LEGACY_MULTISIG": "0xD22fddaB4595a7C0f78Fa3d20cc9485b19Ee861d", + "messageIdMultisigIsm": "0xf45819C46A54cdD816DC8c9EE580712e76eaAc0C", + "merkleRootMultisigIsm": "0xD22fddaB4595a7C0f78Fa3d20cc9485b19Ee861d", + "staticAggregationIsm": "0xE0593C964e8BA2481d0f23BAF27e36DC7CCd9F13" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0x9B04e5971738c427c1b0660e89859BD4164B0d67", + "LEGACY_MULTISIG": "0xD3Ad23079611e2cc306E8a60ddFdAD250512d43F", + "messageIdMultisigIsm": "0x9B04e5971738c427c1b0660e89859BD4164B0d67", + "merkleRootMultisigIsm": "0xD3Ad23079611e2cc306E8a60ddFdAD250512d43F", + "staticAggregationIsm": "0xc3AF7BC41D75909cFA34e424Fd505b7121C0CF90" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0x432B0ad68cbA0DFf644F30CC8b3275663Cb692E8", + "LEGACY_MULTISIG": "0xA50e98B2d52d4c9B242bD86f1B5C54D7E33190a6", + "messageIdMultisigIsm": "0x432B0ad68cbA0DFf644F30CC8b3275663Cb692E8", + "merkleRootMultisigIsm": "0xA50e98B2d52d4c9B242bD86f1B5C54D7E33190a6", + "staticAggregationIsm": "0x5d77806Fde4BbA8a665720d528CEACBb694B43b2" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x07733788489efD7F10533ab889144A7C67F6d9EF", + "LEGACY_MULTISIG": "0x44D117A356AfFE5C67D4A53b3eC1Ded1260Bd20d", + "messageIdMultisigIsm": "0x07733788489efD7F10533ab889144A7C67F6d9EF", + "merkleRootMultisigIsm": "0x44D117A356AfFE5C67D4A53b3eC1Ded1260Bd20d", + "staticAggregationIsm": "0x7F28dFed655a4C1a7AeC911B983Bc68EF9195D90" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0x070eDaC389b85aEe38507339Cd80aeBd95b1cb22", + "LEGACY_MULTISIG": "0x5c7e4Eb938DB4f1dE746aBb01eC1228EC38Ed3bd", + "messageIdMultisigIsm": "0x070eDaC389b85aEe38507339Cd80aeBd95b1cb22", + "merkleRootMultisigIsm": "0x5c7e4Eb938DB4f1dE746aBb01eC1228EC38Ed3bd", + "staticAggregationIsm": "0xE2fc443F458B6DbdD8987CDb6830d4F9a1AfDFeb" + }, + "ROUTING": "0x656cC76A0D05bC3F40c11DEBe0fF6EEEDabB856e", + "AGGREGATION": "0x595e45990F67A9795cE4FEB0b6ba4684c6258cD0", + "domainRoutingIsm": "0xE2401EB414B41DC2A97100f2Dab75bBcD7377119", + "opStackHook": "0xce59701919507F2d379270657A4e410F570aBe0D", + "fallbackRoutingHook": "0xDd66CB60D4Ffb7f0d8FB91CB1D20aBcaBC82900a" }, "moonbasealpha": { "merkleRootMultisigIsmFactory": "0xA59Ba0A8D4ea5A5DC9c8B0101ba7E6eE6C3399A4", @@ -173,7 +507,8 @@ "interchainGasPaymaster": "0x92F05669A354a032A84FcfABfD13beE1aBc5bFd0", "aggregationHook": "0xaA9d918C49Cea0D2a877252aFb7976B6e3A48623", "protocolFee": "0xe2A73F106902983452713F24Bd019F6eb8712986", - "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416" + "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", + "fallbackRoutingHook": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3" }, "mumbai": { "merkleRootMultisigIsmFactory": "0xda0780ed3eE577EfE0B856E00f983bF231603307", @@ -189,6 +524,53 @@ "aggregationHook": "0xD546273418733AcEC8c7A67EfB881c9Ea83851bf", "protocolFee": "0x244d1F7e30Be144A87602905baBF86630e8f39DC", "mailbox": "0x2d1889fe5B092CD988972261434F7E5f26041115", - "validatorAnnounce": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5" + "validatorAnnounce": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", + "alfajores": { + "MERKLE_ROOT_MULTISIG": "0x2ab7f5DeC6f8Ef411315487c23a0FD1955824274", + "LEGACY_MULTISIG": "0x46c3f1a2734568Ab4582E5e990Be37e9A90c8d5C" + }, + "basegoerli": { + "MERKLE_ROOT_MULTISIG": "0xcA58F63034D79d00742153636f40975616996569", + "LEGACY_MULTISIG": "0x256578935Ea39D5B6eD49722C20D6c7734c17442" + }, + "fuji": { + "MERKLE_ROOT_MULTISIG": "0xbd3Cd908B44b1AB4A5c9A2E2Abc567dbd3265BaF", + "LEGACY_MULTISIG": "0xB24FadDB99664D85755a4ee5402Cce2f936e2A85" + }, + "bsctestnet": { + "MERKLE_ROOT_MULTISIG": "0x20fC9FF58AA29FB015195735Cb87999D1169acA7", + "LEGACY_MULTISIG": "0x1A445E9f7f5E6230A11a960E1d77af94ec1Dc70B" + }, + "goerli": { + "MERKLE_ROOT_MULTISIG": "0x94AfA49591B42C681CaFcBA9C1deb6d394dd358c", + "LEGACY_MULTISIG": "0x0025156297d59772cc3836EB15BcEb7b65bF2Ac0" + }, + "scrollsepolia": { + "MERKLE_ROOT_MULTISIG": "0xf90Ad611612d3D7f45C1EB525e2f487373286717", + "LEGACY_MULTISIG": "0x00a20F2637437151cBDB5DD8e80672458bcCAE68" + }, + "sepolia": { + "MERKLE_ROOT_MULTISIG": "0x4234b78713bB6623b123CdBC4E163F497643D2b1", + "LEGACY_MULTISIG": "0x22A56d69B838897dacA4f87d6cC9c602de6bFaDC" + }, + "moonbasealpha": { + "MERKLE_ROOT_MULTISIG": "0xDbb5fc87d9CA83dE79E111acFb96882A70AE490c", + "LEGACY_MULTISIG": "0xe32F2c4129FeA483c55241Ab11413e0E9F38c716" + }, + "optimismgoerli": { + "MERKLE_ROOT_MULTISIG": "0xeD282a84F9cd27A827fF07D6894FE9dc63a64D63", + "LEGACY_MULTISIG": "0x45B1784587aCE88E534588e8d43E1A3282ecBA8b" + }, + "arbitrumgoerli": { + "MERKLE_ROOT_MULTISIG": "0x75204D086D263d475A6390b476126B2BeB6c37A7", + "LEGACY_MULTISIG": "0x1004f5636f3348bbAae626cAf5b6578f2f7e0425" + }, + "polygonzkevmtestnet": { + "MERKLE_ROOT_MULTISIG": "0xBae6ED82c61C1aa9a0df9741193aE5a8eE84fB28", + "LEGACY_MULTISIG": "0x2487E9d66E62B3de58C246b3e1d588f41b39d433" + }, + "ROUTING": "0xBAad51c021e4bb94b9a10b1fC82b773Ca9e35D30", + "AGGREGATION": "0xE794ff773fcd25ad43749CbCAE8e69f7f64810EF", + "fallbackRoutingHook": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647" } } diff --git a/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts b/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts index c466cac291..44d2e1d1d0 100644 --- a/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts +++ b/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts @@ -9,7 +9,7 @@ import { TestChains } from '../consts/chains'; import { HyperlaneContractsMap } from '../contracts/types'; import { HyperlaneProxyFactoryDeployer } from '../deploy/HyperlaneProxyFactoryDeployer'; import { HyperlaneIsmFactory } from '../ism/HyperlaneIsmFactory'; -import { AggregationIsmConfig, ModuleType } from '../ism/types'; +import { AggregationIsmConfig, IsmType } from '../ism/types'; import { MultiProvider } from '../providers/MultiProvider'; import { testCoreConfig } from '../test/testUtils'; import { ChainMap } from '../types'; @@ -95,7 +95,7 @@ describe('core', async () => { coreConfig, (_, config) => { const ismConfig: AggregationIsmConfig = { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, modules: [testIsm, testIsm], threshold: 2, }; diff --git a/typescript/sdk/src/core/HyperlaneCore.ts b/typescript/sdk/src/core/HyperlaneCore.ts index c194e534fc..cf7faecdf0 100644 --- a/typescript/sdk/src/core/HyperlaneCore.ts +++ b/typescript/sdk/src/core/HyperlaneCore.ts @@ -33,6 +33,7 @@ export class HyperlaneCore extends HyperlaneApp { if (!envAddresses) { throw new Error(`No addresses found for ${env}`); } + // @ts-ignore return HyperlaneCore.fromAddressesMap(envAddresses, multiProvider); } diff --git a/typescript/sdk/src/core/HyperlaneCoreDeployer.ts b/typescript/sdk/src/core/HyperlaneCoreDeployer.ts index acb811b237..a1d7784022 100644 --- a/typescript/sdk/src/core/HyperlaneCoreDeployer.ts +++ b/typescript/sdk/src/core/HyperlaneCoreDeployer.ts @@ -155,7 +155,7 @@ export class HyperlaneCoreDeployer extends HyperlaneDeployer< ); this.addDeployedContracts( chain, - hooks, + this.hookDeployer.deployedContracts[chain], this.hookDeployer.verificationInputs[chain], ); return hooks[config.type].address; diff --git a/typescript/sdk/src/gas/HyperlaneIgp.ts b/typescript/sdk/src/gas/HyperlaneIgp.ts index 0f7c0e46ef..344035e174 100644 --- a/typescript/sdk/src/gas/HyperlaneIgp.ts +++ b/typescript/sdk/src/gas/HyperlaneIgp.ts @@ -24,6 +24,7 @@ export class HyperlaneIgp extends HyperlaneApp { if (!envAddresses) { throw new Error(`No addresses found for ${env}`); } + /// @ts-ignore return HyperlaneIgp.fromAddressesMap(envAddresses, multiProvider); } diff --git a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts index a31e768f61..d9a04966e0 100644 --- a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts +++ b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts @@ -1,9 +1,16 @@ import debug from 'debug'; +import { ethers } from 'ethers'; import { + DomainRoutingHook, + FallbackDomainRoutingHook, + IL1CrossDomainMessenger__factory, + OPStackHook, + OPStackIsm, StaticAggregationHook__factory, StaticProtocolFee, } from '@hyperlane-xyz/core'; +import { Address, addressToBytes32 } from '@hyperlane-xyz/utils'; import { HyperlaneContracts } from '../contracts/types'; import { CoreAddresses } from '../core/contracts'; @@ -11,6 +18,7 @@ import { HyperlaneDeployer } from '../deploy/HyperlaneDeployer'; import { HyperlaneIgpDeployer } from '../gas/HyperlaneIgpDeployer'; import { IgpFactories } from '../gas/contracts'; import { HyperlaneIsmFactory } from '../ism/HyperlaneIsmFactory'; +import { IsmType, OpStackIsmConfig } from '../ism/types'; import { MultiProvider } from '../providers/MultiProvider'; import { ChainMap, ChainName } from '../types'; @@ -20,7 +28,9 @@ import { HookConfig, HookType, IgpHookConfig, + OpStackHookConfig, ProtocolFeeHookConfig, + RoutingHookConfig, } from './types'; export class HyperlaneHookDeployer extends HyperlaneDeployer< @@ -49,29 +59,38 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< coreAddresses = this.core[chain], ): Promise> { // other simple hooks can go here + let hook; if (config.type === HookType.MERKLE_TREE) { const mailbox = coreAddresses.mailbox; if (!mailbox) { throw new Error(`Mailbox address is required for ${config.type}`); } - const hook = await this.deployContract(chain, config.type, [mailbox]); + hook = await this.deployContract(chain, config.type, [mailbox]); return { [config.type]: hook } as any; } else if (config.type === HookType.INTERCHAIN_GAS_PAYMASTER) { return this.deployIgp(chain, config, coreAddresses) as any; } else if (config.type === HookType.AGGREGATION) { - return this.deployAggregation(chain, config, coreAddresses); + return this.deployAggregation(chain, config, coreAddresses); // deploy from factory } else if (config.type === HookType.PROTOCOL_FEE) { - const hook = await this.deployProtocolFee(chain, config); - return { [config.type]: hook } as any; + hook = await this.deployProtocolFee(chain, config); + } else if (config.type === HookType.OP_STACK) { + hook = await this.deployOpStack(chain, config, coreAddresses); + } else if ( + config.type === HookType.ROUTING || + config.type === HookType.FALLBACK_ROUTING + ) { + hook = await this.deployRouting(chain, config, coreAddresses); } - - throw new Error(`Unexpected hook type: ${JSON.stringify(config)}`); + const deployedContracts = { [config.type]: hook } as any; + this.addDeployedContracts(chain, deployedContracts); + return deployedContracts; } async deployProtocolFee( chain: ChainName, config: ProtocolFeeHookConfig, ): Promise { + this.logger('Deploying StaticProtocolFeeHook for %s', chain); return this.deployContract(chain, HookType.PROTOCOL_FEE, [ config.maxProtocolFee, config.protocolFee, @@ -85,6 +104,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< config: IgpHookConfig, coreAddresses = this.core[chain], ): Promise> { + this.logger('Deploying IGP as hook for %s', chain); if (coreAddresses.proxyAdmin) { this.igpDeployer.writeCache( chain, @@ -107,6 +127,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< config: AggregationHookConfig, coreAddresses = this.core[chain], ): Promise> { + this.logger('Deploying AggregationHook for %s', chain); const aggregatedHooks: string[] = []; let hooks: any = {}; for (const hookConfig of config.hooks) { @@ -127,6 +148,147 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< address, this.multiProvider.getSignerOrProvider(chain), ); + this.addDeployedContracts(chain, hooks); return hooks; } + + async deployOpStack( + chain: ChainName, + config: OpStackHookConfig, + coreAddresses = this.core[chain], + ): Promise { + this.logger( + 'Deploying OPStackHook for %s to %s', + chain, + config.destinationChain, + ); + const mailbox = coreAddresses.mailbox; + if (!mailbox) { + throw new Error(`Mailbox address is required for ${config.type}`); + } + // fetch l2 messenger address from l1 messenger + const l1Messenger = IL1CrossDomainMessenger__factory.connect( + config.nativeBridge, + this.multiProvider.getSignerOrProvider(chain), + ); + const l2Messenger: Address = await l1Messenger.OTHER_MESSENGER(); + // deploy opstack ism + const ismConfig: OpStackIsmConfig = { + type: IsmType.OP_STACK, + origin: chain, + nativeBridge: l2Messenger, + }; + const opstackIsm = await this.ismFactory.deploy( + config.destinationChain, + ismConfig, + chain, + ); + // deploy opstack hook + const hook = await this.deployContract(chain, HookType.OP_STACK, [ + mailbox, + this.multiProvider.getDomainId(config.destinationChain), + addressToBytes32(opstackIsm.address), + config.nativeBridge, + ]); + const overrides = this.multiProvider.getTransactionOverrides(chain); + // set authorized hook on opstack ism + const authorizedHook = await (opstackIsm as OPStackIsm).authorizedHook(); + if (authorizedHook === addressToBytes32(hook.address)) { + this.logger('Authorized hook already set on ism %s', opstackIsm.address); + return hook; + } else if ( + authorizedHook !== addressToBytes32(ethers.constants.AddressZero) + ) { + this.logger( + 'Authorized hook mismatch on ism %s, expected %s, got %s', + opstackIsm.address, + addressToBytes32(hook.address), + authorizedHook, + ); + throw new Error('Authorized hook mismatch'); + } + // check if mismatch and redeploy hook + this.logger( + 'Setting authorized hook %s on ism % on destination %s', + hook.address, + opstackIsm.address, + config.destinationChain, + ); + await this.multiProvider.handleTx( + config.destinationChain, + (opstackIsm as OPStackIsm).setAuthorizedHook( + addressToBytes32(hook.address), + overrides, + ), + ); + + return hook; + } + + async deployRouting( + chain: ChainName, + config: RoutingHookConfig, + coreAddresses = this.core[chain], + ): Promise { + const mailbox = coreAddresses?.mailbox; + if (!mailbox) { + throw new Error(`Mailbox address is required for ${config.type}`); + } + + let routingHook: DomainRoutingHook | FallbackDomainRoutingHook; + switch (config.type) { + case HookType.ROUTING: { + this.logger('Deploying DomainRoutingHook for %s', chain); + routingHook = await this.deployContract(chain, HookType.ROUTING, [ + mailbox, + config.owner, + ]); + break; + } + case HookType.FALLBACK_ROUTING: { + this.logger('Deploying FallbackDomainRoutingHook for %s', chain); + const fallbackHook = await this.deployContracts( + chain, + config.fallback, + coreAddresses, + ); + routingHook = await this.deployContract( + chain, + HookType.FALLBACK_ROUTING, + [mailbox, config.owner, fallbackHook[config.fallback.type].address], + ); + break; + } + default: + throw new Error(`Unexpected hook type: ${config}`); + } + + const routingConfigs: DomainRoutingHook.HookConfigStruct[] = []; + for (const [dest, hookConfig] of Object.entries(config.domains)) { + const destDomain = this.multiProvider.getDomainId(dest); + if (typeof hookConfig === 'string') { + routingConfigs.push({ + destination: destDomain, + hook: hookConfig, + }); + } else { + const hook = await this.deployContracts( + chain, + hookConfig, + coreAddresses, + ); + routingConfigs.push({ + destination: destDomain, + hook: hook[hookConfig.type].address, + }); + } + } + + await this.multiProvider.handleTx( + chain, + routingHook.setHooks(routingConfigs), + ); + + return routingHook; + } } diff --git a/typescript/sdk/src/hook/contracts.ts b/typescript/sdk/src/hook/contracts.ts index 9e5782d6ec..aa0651584d 100644 --- a/typescript/sdk/src/hook/contracts.ts +++ b/typescript/sdk/src/hook/contracts.ts @@ -1,6 +1,9 @@ import { + DomainRoutingHook__factory, + FallbackDomainRoutingHook__factory, InterchainGasPaymaster__factory, MerkleTreeHook__factory, + OPStackHook__factory, StaticAggregationHook__factory, StaticProtocolFee__factory, } from '@hyperlane-xyz/core'; @@ -12,6 +15,9 @@ export const hookFactories = { [HookType.PROTOCOL_FEE]: new StaticProtocolFee__factory(), [HookType.INTERCHAIN_GAS_PAYMASTER]: new InterchainGasPaymaster__factory(), // unused [HookType.AGGREGATION]: new StaticAggregationHook__factory(), // unused + [HookType.OP_STACK]: new OPStackHook__factory(), + [HookType.ROUTING]: new DomainRoutingHook__factory(), + [HookType.FALLBACK_ROUTING]: new FallbackDomainRoutingHook__factory(), }; export type HookFactories = typeof hookFactories; diff --git a/typescript/sdk/src/hook/types.ts b/typescript/sdk/src/hook/types.ts index 72d7a435c5..00bddf46c0 100644 --- a/typescript/sdk/src/hook/types.ts +++ b/typescript/sdk/src/hook/types.ts @@ -3,12 +3,16 @@ import { BigNumber } from 'ethers'; import { Address } from '@hyperlane-xyz/utils'; import { IgpConfig } from '../gas/types'; +import { ChainMap, ChainName } from '../types'; export enum HookType { MERKLE_TREE = 'merkleTreeHook', INTERCHAIN_GAS_PAYMASTER = 'interchainGasPaymaster', AGGREGATION = 'aggregationHook', PROTOCOL_FEE = 'protocolFee', + OP_STACK = 'opStackHook', + ROUTING = 'domainRoutingHook', + FALLBACK_ROUTING = 'fallbackRoutingHook', } export type MerkleTreeHookConfig = { @@ -32,8 +36,33 @@ export type ProtocolFeeHookConfig = { owner: Address; }; +export type OpStackHookConfig = { + type: HookType.OP_STACK; + nativeBridge: Address; + destinationChain: ChainName; +}; + +export type DomainRoutingHookConfig = { + type: HookType.ROUTING; + owner: Address; + domains: ChainMap; +}; + +export type FallbackRoutingHookConfig = { + type: HookType.FALLBACK_ROUTING; + owner: Address; + fallback: HookConfig; + domains: ChainMap; +}; + +export type RoutingHookConfig = + | DomainRoutingHookConfig + | FallbackRoutingHookConfig; + export type HookConfig = | MerkleTreeHookConfig | AggregationHookConfig | IgpHookConfig - | ProtocolFeeHookConfig; + | ProtocolFeeHookConfig + | OpStackHookConfig + | RoutingHookConfig; diff --git a/typescript/sdk/src/index.ts b/typescript/sdk/src/index.ts index 95da574d2d..2d7f7cadfd 100644 --- a/typescript/sdk/src/index.ts +++ b/typescript/sdk/src/index.ts @@ -112,11 +112,15 @@ export { export { HyperlaneHookDeployer } from './hook/HyperlaneHookDeployer'; export { AggregationHookConfig, + DomainRoutingHookConfig, + FallbackRoutingHookConfig, HookConfig, HookType, IgpHookConfig, MerkleTreeHookConfig, + OpStackHookConfig, ProtocolFeeHookConfig, + RoutingHookConfig, } from './hook/types'; export { HyperlaneIsmFactory, @@ -127,6 +131,7 @@ export { AggregationIsmConfig, DeployedIsm, IsmConfig, + IsmType, ModuleType, MultisigConfig, MultisigIsmConfig, diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts index cf12f7ee63..cdb0ba9edc 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.hardhat-test.ts @@ -15,6 +15,7 @@ import { import { AggregationIsmConfig, IsmConfig, + IsmType, ModuleType, MultisigIsmConfig, RoutingIsmConfig, @@ -33,7 +34,7 @@ const randomMultisigIsmConfig = (m: number, n: number): MultisigIsmConfig => { const emptyArray = new Array(n).fill(0); const validators = emptyArray.map(() => randomAddress()); return { - type: ModuleType.MERKLE_ROOT_MULTISIG, + type: IsmType.MERKLE_ROOT_MULTISIG, validators, threshold: m, }; @@ -47,7 +48,7 @@ const randomIsmConfig = (depth = 0, maxDepth = 2): IsmConfig => { return randomMultisigIsmConfig(randomInt(n, 1), n); } else if (moduleType === ModuleType.ROUTING) { const config: RoutingIsmConfig = { - type: ModuleType.ROUTING, + type: IsmType.ROUTING, owner: randomAddress(), domains: Object.fromEntries( TestChains.map((c) => [c, randomIsmConfig(depth + 1)]), @@ -60,7 +61,7 @@ const randomIsmConfig = (depth = 0, maxDepth = 2): IsmConfig => { .fill(0) .map(() => randomIsmConfig(depth + 1)); const config: AggregationIsmConfig = { - type: ModuleType.AGGREGATION, + type: IsmType.AGGREGATION, threshold: randomInt(n, 1), modules, }; diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts index 4556f89c59..5f99986269 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts @@ -1,5 +1,7 @@ import { debug } from 'debug'; import { ethers } from 'ethers'; +import fs from 'fs'; +import path from 'path'; import { DomainRoutingIsm__factory, @@ -7,6 +9,7 @@ import { IInterchainSecurityModule__factory, IMultisigIsm__factory, IRoutingIsm__factory, + OPStackIsm__factory, StaticAddressSetFactory, StaticAggregationIsm__factory, StaticThresholdAddressSetFactory, @@ -15,6 +18,7 @@ import { import { Address, eqAddress, formatMessage, warn } from '@hyperlane-xyz/utils'; import { HyperlaneApp } from '../app/HyperlaneApp'; +import { chainMetadata } from '../consts/chainMetadata'; import { HyperlaneEnvironment, hyperlaneEnvironments, @@ -29,9 +33,12 @@ import { AggregationIsmConfig, DeployedIsm, IsmConfig, + IsmType, ModuleType, MultisigIsmConfig, + OpStackIsmConfig, RoutingIsmConfig, + ismTypeToModuleType, } from './types'; export class HyperlaneIsmFactory extends HyperlaneApp { @@ -48,6 +55,7 @@ export class HyperlaneIsmFactory extends HyperlaneApp { if (!envAddresses) { throw new Error(`No addresses found for ${env}`); } + /// @ts-ignore return HyperlaneIsmFactory.fromAddressesMap(envAddresses, multiProvider); } @@ -82,33 +90,36 @@ export class HyperlaneIsmFactory extends HyperlaneApp { } if ( - config.type === ModuleType.MERKLE_ROOT_MULTISIG || - config.type === ModuleType.MESSAGE_ID_MULTISIG + config.type === IsmType.MERKLE_ROOT_MULTISIG || + config.type === IsmType.MESSAGE_ID_MULTISIG ) { switch (config.type) { - case ModuleType.MERKLE_ROOT_MULTISIG: + case IsmType.MERKLE_ROOT_MULTISIG: this.logger( `Deploying Merkle Root Multisig ISM to ${chain} for verifying ${origin}`, ); break; - case ModuleType.MESSAGE_ID_MULTISIG: + case IsmType.MESSAGE_ID_MULTISIG: this.logger( `Deploying Message ID Multisig ISM to ${chain} for verifying ${origin}`, ); break; } contract = await this.deployMultisigIsm(chain, config); - } else if (config.type === ModuleType.ROUTING) { + } else if (config.type === IsmType.ROUTING) { this.logger( `Deploying Routing ISM to ${chain} for verifying ${Object.keys( config.domains, )}`, ); contract = await this.deployRoutingIsm(chain, config); - } else if (config.type === ModuleType.AGGREGATION) { + } else if (config.type === IsmType.AGGREGATION) { this.logger(`Deploying Aggregation ISM to ${chain}`); contract = await this.deployAggregationIsm(chain, config, origin); - } else if (config.type === ModuleType.NULL) { + } else if (config.type === IsmType.OP_STACK) { + this.logger(`Deploying Op Stack ISM to ${chain} for verifying ${origin}`); + contract = await this.deployOpStackIsm(chain, config); + } else if (config.type === IsmType.TEST_ISM) { this.logger(`Deploying Test ISM to ${chain}`); contract = await this.multiProvider.handleDeploy( chain, @@ -119,7 +130,7 @@ export class HyperlaneIsmFactory extends HyperlaneApp { throw new Error(`Unsupported ISM type`); } - const moduleType = ModuleType[config.type]; + const ismType = config.type; if (!this.deployedIsms[chain]) { this.deployedIsms[chain] = {}; } @@ -129,10 +140,10 @@ export class HyperlaneIsmFactory extends HyperlaneApp { if (!this.deployedIsms[chain][origin]) { this.deployedIsms[chain][origin] = {}; } - this.deployedIsms[chain][origin][moduleType] = contract; + this.deployedIsms[chain][origin][ismType] = contract; } else { // otherwise store the entry directly - this.deployedIsms[chain][moduleType] = contract; + this.deployedIsms[chain][ismType] = contract; } return contract; @@ -141,7 +152,7 @@ export class HyperlaneIsmFactory extends HyperlaneApp { private async deployMultisigIsm(chain: ChainName, config: MultisigIsmConfig) { const signer = this.multiProvider.getSigner(chain); const multisigIsmFactory = - config.type === ModuleType.MERKLE_ROOT_MULTISIG + config.type === IsmType.MERKLE_ROOT_MULTISIG ? this.getContracts(chain).merkleRootMultisigIsmFactory : this.getContracts(chain).messageIdMultisigIsmFactory; @@ -222,6 +233,23 @@ export class HyperlaneIsmFactory extends HyperlaneApp { return IAggregationIsm__factory.connect(address, signer); } + private async deployOpStackIsm(chain: ChainName, config: OpStackIsmConfig) { + const recoveredIsm = getDeployedIsms(config.origin, chain, config.type); + if (recoveredIsm) { + this.logger('Recovered OpStackIsm from deployedIsms'); + return OPStackIsm__factory.connect( + recoveredIsm, + this.multiProvider.getSignerOrProvider(chain), + ); + } else { + return await this.multiProvider.handleDeploy( + chain, + new OPStackIsm__factory(), + [config.nativeBridge], + ); + } + } + async deployStaticAddressSet( chain: ChainName, factory: StaticThresholdAddressSetFactory | StaticAddressSetFactory, @@ -338,17 +366,19 @@ export async function moduleCanCertainlyVerify( } else { // destModule is an IsmConfig switch (destModule.type) { - case ModuleType.MERKLE_ROOT_MULTISIG: - case ModuleType.MESSAGE_ID_MULTISIG: + case IsmType.MERKLE_ROOT_MULTISIG: + case IsmType.MESSAGE_ID_MULTISIG: return destModule.threshold > 0; - case ModuleType.ROUTING: - return moduleCanCertainlyVerify( + case IsmType.ROUTING: { + const checking = moduleCanCertainlyVerify( destModule.domains[destination], multiProvider, origin, destination, ); - case ModuleType.AGGREGATION: { + return checking; + } + case IsmType.AGGREGATION: { let verified = 0; for (const subModule of destModule.modules) { const canVerify = await moduleCanCertainlyVerify( @@ -363,9 +393,13 @@ export async function moduleCanCertainlyVerify( } return verified >= destModule.threshold; } - case ModuleType.NULL: { + case IsmType.OP_STACK: + return destModule.nativeBridge !== ethers.constants.AddressZero; + case IsmType.TEST_ISM: { return true; } + default: + throw new Error(`Unsupported module type: ${(destModule as any).type}`); } } } @@ -394,10 +428,10 @@ export async function moduleMatchesConfig( provider, ); const actualType = await module.moduleType(); - if (actualType !== config.type) return false; + if (actualType !== ismTypeToModuleType(config.type)) return false; let matches = true; switch (config.type) { - case ModuleType.MERKLE_ROOT_MULTISIG: { + case IsmType.MERKLE_ROOT_MULTISIG: { // A MerkleRootMultisigIsm matches if validators and threshold match the config const expectedAddress = await contracts.merkleRootMultisigIsmFactory.getAddress( @@ -407,7 +441,7 @@ export async function moduleMatchesConfig( matches = eqAddress(expectedAddress, module.address); break; } - case ModuleType.MESSAGE_ID_MULTISIG: { + case IsmType.MESSAGE_ID_MULTISIG: { // A MessageIdMultisigIsm matches if validators and threshold match the config const expectedAddress = await contracts.messageIdMultisigIsmFactory.getAddress( @@ -417,7 +451,7 @@ export async function moduleMatchesConfig( matches = eqAddress(expectedAddress, module.address); break; } - case ModuleType.ROUTING: { + case IsmType.ROUTING: { // A RoutingIsm matches if: // 1. The set of domains in the config equals those on-chain // 2. The modules for each domain match the config @@ -447,7 +481,7 @@ export async function moduleMatchesConfig( } break; } - case ModuleType.AGGREGATION: { + case IsmType.AGGREGATION: { // An AggregationIsm matches if: // 1. The threshold matches the config // 2. There is a bijection between on and off-chain configured modules @@ -483,7 +517,14 @@ export async function moduleMatchesConfig( } break; } - case ModuleType.NULL: { + case IsmType.OP_STACK: { + const opStackIsm = OPStackIsm__factory.connect(moduleAddress, provider); + const type = await opStackIsm.moduleType(); + matches = matches && type === ModuleType.NULL; + matches = false; + break; + } + case IsmType.TEST_ISM: { // This is just a TestISM matches = true; break; @@ -510,11 +551,11 @@ export function collectValidators( let validators: string[] = []; if ( - config.type === ModuleType.MERKLE_ROOT_MULTISIG || - config.type === ModuleType.MESSAGE_ID_MULTISIG + config.type === IsmType.MERKLE_ROOT_MULTISIG || + config.type === IsmType.MESSAGE_ID_MULTISIG ) { validators = config.validators; - } else if (config.type === ModuleType.ROUTING) { + } else if (config.type === IsmType.ROUTING) { if (Object.keys(config.domains).includes(origin)) { const domainValidators = collectValidators( origin, @@ -522,14 +563,14 @@ export function collectValidators( ); validators = [...domainValidators]; } - } else if (config.type === ModuleType.AGGREGATION) { + } else if (config.type === IsmType.AGGREGATION) { const aggregatedValidators = config.modules.map((c) => collectValidators(origin, c), ); aggregatedValidators.forEach((set) => { validators = validators.concat([...set]); }); - } else if (config.type === ModuleType.NULL) { + } else if (config.type === IsmType.TEST_ISM) { // This is just a TestISM return new Set([]); } else { @@ -538,3 +579,23 @@ export function collectValidators( return new Set(validators); } + +// recover non-factory ISM deployments +export function getDeployedIsms( + origin: ChainName, + destination: ChainName, + ismType: string, +): Address | null { + // check if mainnet or testnet + const isTestnet = + chainMetadata[origin].isTestnet || chainMetadata[destination].isTestnet; + const file = isTestnet ? 'testnet.json' : 'mainnet.json'; + const addresses = fs.readFileSync( + path.resolve(__dirname, `../consts/environments/${file}`), + ); + const parsedAddresses = JSON.parse(addresses.toString()); + if (ismType in parsedAddresses[destination][origin]) { + return parsedAddresses[destination][origin].opStackIsm; + } + return null; +} diff --git a/typescript/sdk/src/ism/types.ts b/typescript/sdk/src/ism/types.ts index ed42fb83fe..0258cbe662 100644 --- a/typescript/sdk/src/ism/types.ts +++ b/typescript/sdk/src/ism/types.ts @@ -3,6 +3,7 @@ import { IInterchainSecurityModule, IMultisigIsm, IRoutingIsm, + OPStackIsm, StaticMerkleRootMultisigIsm, StaticMessageIdMultisigIsm, TestIsm, @@ -18,8 +19,11 @@ export type DeployedIsm = | IRoutingIsm | StaticMessageIdMultisigIsm | StaticMerkleRootMultisigIsm + | OPStackIsm | TestIsm; +// this enum should match the IInterchainSecurityModule.sol enum +// meant for the relayer export enum ModuleType { UNUSED, ROUTING, @@ -30,34 +34,70 @@ export enum ModuleType { NULL, } +// this enum can be adjusted as per deployments necessary +// meant for the deployer and checker +export enum IsmType { + OP_STACK = 'opStackIsm', + ROUTING = 'domainRoutingIsm', + AGGREGATION = 'staticAggregationIsm', + MERKLE_ROOT_MULTISIG = 'merkleRootMultisigIsm', + MESSAGE_ID_MULTISIG = 'messageIdMultisigIsm', + TEST_ISM = 'testIsm', +} + +// mapping betweent the two enums +export function ismTypeToModuleType(ismType: IsmType): ModuleType { + switch (ismType) { + case IsmType.OP_STACK: + return ModuleType.NULL; + case IsmType.ROUTING: + return ModuleType.ROUTING; + case IsmType.AGGREGATION: + return ModuleType.AGGREGATION; + case IsmType.MERKLE_ROOT_MULTISIG: + return ModuleType.MERKLE_ROOT_MULTISIG; + case IsmType.MESSAGE_ID_MULTISIG: + return ModuleType.MESSAGE_ID_MULTISIG; + case IsmType.TEST_ISM: + return ModuleType.NULL; + } +} + export type MultisigConfig = { validators: Array
; threshold: number; }; export type MultisigIsmConfig = MultisigConfig & { - type: ModuleType.MERKLE_ROOT_MULTISIG | ModuleType.MESSAGE_ID_MULTISIG; + type: IsmType.MERKLE_ROOT_MULTISIG | IsmType.MESSAGE_ID_MULTISIG; }; export type TestIsmConfig = { - type: ModuleType.NULL; + type: IsmType.TEST_ISM; }; export type RoutingIsmConfig = { - type: ModuleType.ROUTING; + type: IsmType.ROUTING; owner: Address; domains: ChainMap; }; export type AggregationIsmConfig = { - type: ModuleType.AGGREGATION; + type: IsmType.AGGREGATION; modules: Array; threshold: number; }; +export type OpStackIsmConfig = { + type: IsmType.OP_STACK; + origin: Address; + nativeBridge: Address; +}; + export type IsmConfig = | Address | RoutingIsmConfig | MultisigIsmConfig | AggregationIsmConfig + | OpStackIsmConfig | TestIsmConfig; diff --git a/typescript/sdk/src/middleware/query/InterchainQuery.ts b/typescript/sdk/src/middleware/query/InterchainQuery.ts index 4ad646cb69..dc8712f82f 100644 --- a/typescript/sdk/src/middleware/query/InterchainQuery.ts +++ b/typescript/sdk/src/middleware/query/InterchainQuery.ts @@ -32,6 +32,7 @@ export class InterchainQuery extends RouterApp { if (!envAddresses) { throw new Error(`No addresses found for ${env}`); } + /// @ts-ignore return InterchainQuery.fromAddressesMap(envAddresses, multiProvider); } diff --git a/typescript/sdk/src/test/testUtils.ts b/typescript/sdk/src/test/testUtils.ts index d997429781..0ce5da89dc 100644 --- a/typescript/sdk/src/test/testUtils.ts +++ b/typescript/sdk/src/test/testUtils.ts @@ -14,7 +14,7 @@ import { CoinGeckoSimplePriceParams, } from '../gas/token-prices'; import { HookType } from '../hook/types'; -import { ModuleType } from '../ism/types'; +import { IsmType } from '../ism/types'; import { RouterConfig } from '../router/types'; import { ChainMap, ChainName } from '../types'; @@ -51,7 +51,7 @@ export function testCoreConfig( const chainConfig: CoreConfig = { owner, defaultIsm: { - type: ModuleType.NULL, + type: IsmType.TEST_ISM, }, defaultHook: { type: HookType.MERKLE_TREE,