From b71050a0d4c82be3649e6a5c25d999c8bce305a6 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Mon, 23 Oct 2023 16:54:27 +0100 Subject: [PATCH 01/15] Fix long validator name for polygonzkevmtestnet (#2832) ### Description * polygonzkevmtestnet's validator name was too long because of the `controller-revision-hash` label, see https://github.com/kubernetes/kubernetes/issues/64023 * Seeks to preserve the `-validator` suffix in the name, but truncates the earlier bit - in practice this results in validator pods like `polygonzkevmtestnet-validator-hyperlane-ag-validator-0`. This felt like the most backward compatible change -- of course we could consider trying to get a name like `polygonzkevmtestnet-hyperlane-agent-validator-0` but this would break backward compatibility more dramatically because we'd need to change all the other validator pods. Imo we should just really avoid long chain names or consider a more breaking change to our infra ### Drive-by changes n/a ### Related issues n/a ### Backward compatibility Mostly ### Testing Deployed --- rust/helm/hyperlane-agent/templates/_helpers.tpl | 9 +++++++++ .../hyperlane-agent/templates/validator-configmap.yaml | 2 +- .../templates/validator-external-secret.yaml | 4 ++-- .../templates/validator-statefulset.yaml | 10 +++++----- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/rust/helm/hyperlane-agent/templates/_helpers.tpl b/rust/helm/hyperlane-agent/templates/_helpers.tpl index e69de29bb2..cd30646bf6 100644 --- a/rust/helm/hyperlane-agent/templates/_helpers.tpl +++ b/rust/helm/hyperlane-agent/templates/_helpers.tpl @@ -0,0 +1,9 @@ +{{/* +We truncate at 63 chars - (11 + (len $suffix)) because the controller-revision-hash label adds an 11 character suffix +to the pod name, and we want the -validator suffix to still be present, but are happy to truncate the preceding name. +See https://github.com/kubernetes/kubernetes/issues/64023 for controller-revision-hash details. +*/}} +{{- define "validator.fullname" -}} +{{- $suffix := "-validator" }} +{{- include "agent-common.fullname" . | trunc (int (sub 63 (add 11 (len $suffix)))) | trimSuffix "-" }}{{ print $suffix }} +{{- end }} diff --git a/rust/helm/hyperlane-agent/templates/validator-configmap.yaml b/rust/helm/hyperlane-agent/templates/validator-configmap.yaml index da452f4fa8..cabed1644a 100644 --- a/rust/helm/hyperlane-agent/templates/validator-configmap.yaml +++ b/rust/helm/hyperlane-agent/templates/validator-configmap.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: {{ include "agent-common.fullname" . }}-validator + name: {{ include "validator.fullname" . }} labels: {{- include "agent-common.labels" . | nindent 4 }} data: diff --git a/rust/helm/hyperlane-agent/templates/validator-external-secret.yaml b/rust/helm/hyperlane-agent/templates/validator-external-secret.yaml index c38900483a..c15081f119 100644 --- a/rust/helm/hyperlane-agent/templates/validator-external-secret.yaml +++ b/rust/helm/hyperlane-agent/templates/validator-external-secret.yaml @@ -2,7 +2,7 @@ apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: - name: {{ include "agent-common.fullname" . }}-validator-external-secret + name: {{ include "validator.fullname" . }}-external-secret labels: {{- include "agent-common.labels" . | nindent 4 }} annotations: @@ -14,7 +14,7 @@ spec: refreshInterval: "1h" # The secret that will be created target: - name: {{ include "agent-common.fullname" . }}-validator-secret + name: {{ include "validator.fullname" . }}-secret template: type: Opaque metadata: diff --git a/rust/helm/hyperlane-agent/templates/validator-statefulset.yaml b/rust/helm/hyperlane-agent/templates/validator-statefulset.yaml index 29df0f5398..1b0a87dd41 100644 --- a/rust/helm/hyperlane-agent/templates/validator-statefulset.yaml +++ b/rust/helm/hyperlane-agent/templates/validator-statefulset.yaml @@ -2,7 +2,7 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - name: {{ include "agent-common.fullname" . }}-validator + name: {{ include "validator.fullname" . }} labels: {{- include "agent-common.labels" . | nindent 4 }} app.kubernetes.io/component: validator @@ -12,7 +12,7 @@ spec: {{- include "agent-common.selectorLabels" . | nindent 6 }} app.kubernetes.io/component: validator replicas: {{ len .Values.hyperlane.validator.configs }} - serviceName: {{ include "agent-common.fullname" . }}-validator + serviceName: {{ include "validator.fullname" . }} template: metadata: annotations: @@ -58,7 +58,7 @@ spec: - secretRef: name: {{ include "agent-common.fullname" . }}-secret - secretRef: - name: {{ include "agent-common.fullname" . }}-validator-secret + name: {{ include "validator.fullname" . }}-secret env: - name: REPLICA_NAME valueFrom: @@ -79,10 +79,10 @@ spec: volumes: - name: config-env-vars configMap: - name: {{ include "agent-common.fullname" . }}-validator + name: {{ include "validator.fullname" . }} - name: secret-env-vars secret: - secretName: {{ include "agent-common.fullname" . }}-validator-secret + secretName: {{ include "validator.fullname" . }}-secret {{- with .Values.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} From 8e84ef44967e03b51ae2f8ffbfef272f87da491d Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Mon, 23 Oct 2023 13:44:11 -0400 Subject: [PATCH 02/15] Verify testnet4 deploy (#2820) Fixes https://github.com/hyperlane-xyz/issues/issues/635 --- solidity/.gitignore | 1 + solidity/flatten.sh | 23 + solidity/hardhat.config.ts | 6 +- solidity/package.json | 1 + .../testnet4/core/verification.json | 3970 +++++++++++++---- typescript/infra/scripts/verify.ts | 9 +- typescript/sdk/src/consts/chainMetadata.ts | 6 +- .../sdk/src/consts/environments/testnet.json | 17 - .../sdk/src/deploy/HyperlaneDeployer.ts | 115 +- typescript/sdk/src/deploy/proxy.ts | 11 + .../sdk/src/deploy/verify/ContractVerifier.ts | 16 +- 11 files changed, 3320 insertions(+), 855 deletions(-) create mode 100755 solidity/flatten.sh diff --git a/solidity/.gitignore b/solidity/.gitignore index 596b25d7e6..11e2c7c8d1 100644 --- a/solidity/.gitignore +++ b/solidity/.gitignore @@ -11,3 +11,4 @@ coverage.json out forge-cache docs +flattened/ diff --git a/solidity/flatten.sh b/solidity/flatten.sh new file mode 100755 index 0000000000..21c6a09788 --- /dev/null +++ b/solidity/flatten.sh @@ -0,0 +1,23 @@ +LICENSE="// SPDX-License-Identifier: MIT OR Apache-2.0" + +rm -rf flattened +mkdir -p flattened + +# flatten contracts +yarn hardhat flatten > flattened/flattened.sol + +# remove duplicate licenses +grep -vE "// SPDX.*" flattened/flattened.sol > flattened/delicensed.sol + +# add license +echo "$LICENSE" | cat - flattened/delicensed.sol > flattened/licensed.sol + +# compile +solc flattened/licensed.sol + +# TODO: automate this? +if [ $? -ne 0 ]; then + echo "Remove @openzeppelin/../ICrossDomainMessenger and replace Optimism_Bridge with ICrossDomainMessenger" + echo "Then try compiling again with solc flattened/licensed.sol" + exit 1 +fi diff --git a/solidity/hardhat.config.ts b/solidity/hardhat.config.ts index d206cb8aed..f29e2bd8c8 100644 --- a/solidity/hardhat.config.ts +++ b/solidity/hardhat.config.ts @@ -9,11 +9,7 @@ import 'solidity-coverage'; */ module.exports = { solidity: { - compilers: [ - { - version: '0.8.19', - }, - ], + version: '0.8.19', settings: { optimizer: { enabled: true, diff --git a/solidity/package.json b/solidity/package.json index 8fb9999ef2..d9bae0c386 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -50,6 +50,7 @@ "clean": "hardhat clean && rm -rf ./dist ./cache ./types ./coverage", "coverage": "./coverage.sh", "docs": "forge doc", + "flatten": "./flatten.sh", "prettier": "prettier --write ./contracts ./test", "test": "hardhat test && forge test -vvv", "gas": "forge snapshot", diff --git a/typescript/infra/config/environments/testnet4/core/verification.json b/typescript/infra/config/environments/testnet4/core/verification.json index f497928eef..25d0f76b2f 100644 --- a/typescript/infra/config/environments/testnet4/core/verification.json +++ b/typescript/infra/config/environments/testnet4/core/verification.json @@ -1,1495 +1,3877 @@ { "alfajores": [ - { - "name": "MultisigIsm", - "address": "0x4D06A1671A2a345B14B15cbD50027979A5D1d8C9", - "constructorArguments": "", - "isProxy": false - }, { "name": "ProxyAdmin", - "address": "0x4e4D563e2cBFC35c4BC16003685443Fae2FA702f", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, - { - "name": "Mailbox", - "address": "0x39b3cb005C4225B88A8b3a090563e2e763407222", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3" - }, { "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "name": "Mailbox", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "StorageGasOracle", - "address": "0x2E6a2Caa58a684f6200CEd24be31Eb6DAa154848", - "constructorArguments": "", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x87Fe86CC5e0653cF25f6B555a4E20ccD53948093", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x69939fFA44e7C845Bee9AcB058E3B8069D19E60C", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000aef3", + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x9BB3F92112e98d02e3e9ecc06246EC837A284c6C", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x5F4837A7f2A3D61649570B1A8c6ff7F69A4db6Ee", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000aef3", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0x9BB3F92112e98d02e3e9ecc06246EC837A284c6C", - "constructorArguments": "", + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x5F4837A7f2A3D61649570B1A8c6ff7F69A4db6Ee", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000aef3", + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { - "name": "TransparentUpgradeableProxy", - "address": "0x8949A84294557292CC4F7eA44b7F44126a4c7083", - "constructorArguments": "0000000000000000000000005f4837a7f2a3d61649570b1a8c6ff7f69a4db6ee0000000000000000000000009bb3f92112e98d02e3e9ecc06246ec837a284c6c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", - "isProxy": true + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { "name": "ProxyAdmin", "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", - "constructorArguments": "", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "Mailbox", "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000aef3", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", - "constructorArguments": "", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000aef3", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", - "constructorArguments": "000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", - "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", - "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", - "isProxy": false - } - ], - "fuji": [ - { - "name": "MultisigIsm", - "address": "0xD713Db664509bd057aC2b378F4B65Db468F634A5", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x13474f85b808034C911B7697dee60B7d8d50ee36", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x1a37635B78Dde4aCbedaFCdA365FB89dc3F3f030", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xf857706CE59Cb7AE6df81Bbd0B0a656dB3e6beDA", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x3388A1D46337631F3597d50e98930B52eb9E710E", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869" + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false }, { "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "StorageGasOracle", - "address": "0xd44E79A697136888f0d720Fb6703400a9204FD39", - "constructorArguments": "", + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x13fd29Cd1B7d8385c3694681A8015515D015EBb6", - "constructorArguments": "", + "name": "Mailbox", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0xC9B61FFD8f0772A18D328c175975dd01ED989688", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xC9B61FFD8f0772A18D328c175975dd01ED989688", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x96C9A8384744Bebc6C96aa7122f49D7036b8d0d2", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a869", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x0CfEA816edab6dbbc323246eC2Be97aaA0F0A578", - "constructorArguments": "00000000000000000000000096c9a8384744bebc6c96aa7122f49d7036b8d0d2000000000000000000000000c9b61ffd8f0772a18d328c175975dd01ed98968800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a869", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", - "constructorArguments": "000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x4f7179A691F8a684f56cF7Fed65171877d30739a", - "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x4f7179A691F8a684f56cF7Fed65171877d30739a", - "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0", + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false - } - ], - "mumbai": [ + }, { - "name": "MultisigIsm", - "address": "0xd71f1A64659beC0781b2aa21bc7a72F7290F6Bf3", - "constructorArguments": "", + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x96b49e136581f8dfF370aDB3015D48465572a318", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, - { - "name": "InterchainGasPaymaster", - "address": "0x1a37635B78Dde4aCbedaFCdA365FB89dc3F3f030", - "isProxy": false, - "constructorArguments": "0x" - }, { "name": "TransparentUpgradeableProxy", - "address": "0xf857706CE59Cb7AE6df81Bbd0B0a656dB3e6beDA", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "Mailbox", - "address": "0x179c2Da65187C2614FbeD3Af8eB3098FEEb0a958", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000013881" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "StorageGasOracle", - "address": "0x8970bdA0B0A01d1bA2656b510B2859560e75a7c5", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xa99aD6B1c10E92DB8d3510f1865A6d2Ab43EAd58", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xde1973894d1418ae463013CB6415Cb24fcE15575", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000013881", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x2d1889fe5B092CD988972261434F7E5f26041115", - "constructorArguments": "000000000000000000000000de1973894d1418ae463013cb6415cb24fce15575000000000000000000000000a99ad6b1c10e92db8d3510f1865a6d2ab43ead5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", - "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false - } - ], - "bsctestnet": [ + }, { - "name": "MultisigIsm", - "address": "0x34add51924C500b4428067E251168807b3f5faED", - "constructorArguments": "", + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0xfB149BC17dD3FE858fA64D678bA0c706DEac61eE", - "constructorArguments": "", + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x1a37635B78Dde4aCbedaFCdA365FB89dc3F3f030", - "isProxy": false, - "constructorArguments": "0x" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xf857706CE59Cb7AE6df81Bbd0B0a656dB3e6beDA", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "Mailbox", - "address": "0x87891AA323d0c98D9A1F417E9F02219EBc4274CC", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000061" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "StorageGasOracle", - "address": "0x1a75f55e8f574CdB5abb1b2702b9caF2E5F7d4D6", - "constructorArguments": "", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0x37C6B56DCfAa98472315e6862031a767205cEA20", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x37C6B56DCfAa98472315e6862031a767205cEA20", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x8502E95a1EcDdB6BCB3177272758B5E9F05B5D6d", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000061", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x493833F8b7e87A1513BC0E4bC911452fc55d8AA1", - "constructorArguments": "0000000000000000000000008502e95a1ecddb6bcb3177272758b5e9f05b5d6d00000000000000000000000037c6b56dcfaa98472315e6862031a767205cea2000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0xb12282d2E838Aa5f2A4F9Ee5f624a77b7199A078", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0xb12282d2E838Aa5f2A4F9Ee5f624a77b7199A078", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x89280d0b68a246B276a910A518531E2a861CEb65", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000061", + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { "name": "ValidatorAnnounce", - "address": "0x07b68177DE487200969261174b98FD067561Ab46", - "constructorArguments": "00000000000000000000000089280d0b68a246b276a910a518531e2a861ceb65", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x07b68177DE487200969261174b98FD067561Ab46", - "constructorArguments": "00000000000000000000000089280d0b68a246b276a910a518531e2a861ceb65", + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false - } - ], - "goerli": [ + }, { - "name": "MultisigIsm", - "address": "0x32B34F0D86b275b92e9289d9054Db5Ec32d2CC6C", - "constructorArguments": "", - "isProxy": false + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x8f919348F9C4619A196Acb5e377f49E5E2C0B569", - "constructorArguments": "", + "name": "Mailbox", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x1a37635B78Dde4aCbedaFCdA365FB89dc3F3f030", - "isProxy": false, - "constructorArguments": "0x" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "TransparentUpgradeableProxy", - "address": "0xf857706CE59Cb7AE6df81Bbd0B0a656dB3e6beDA", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "Mailbox", - "address": "0x1ADF2D247E08348D18d77e69D5807a413b92Fe8E", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000005" + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "StorageGasOracle", - "address": "0xce8E9D701A1DFfe672c1d8dB20De2B3fa6F4437D", - "constructorArguments": "", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0xe6F168fc6234CD172f579Fb34a6B2c87b5695d01", - "constructorArguments": "", + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0xe6F168fc6234CD172f579Fb34a6B2c87b5695d01", - "constructorArguments": "", + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { - "name": "Mailbox", - "address": "0x2979568998C80B0498E49710fEDC19b9347C3822", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000005", + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x2Bc24e30BC521296ECA6cF52De09d7AD321Be5F3", - "constructorArguments": "0000000000000000000000002979568998c80b0498e49710fedc19b9347c3822000000000000000000000000e6f168fc6234cd172f579fb34a6b2c87b5695d0100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x0EdB3604D230963ecE9d83963164CFe2fDef576B", - "constructorArguments": "", + "name": "Mailbox", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0x0EdB3604D230963ecE9d83963164CFe2fDef576B", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { - "name": "Mailbox", - "address": "0xc4796aAbcE2A9D774Ce4603f5Db5fB1605791dbd", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000005", - "isProxy": false + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x0bbE9b20372B29e65B3feF370b22369561893231", - "constructorArguments": "000000000000000000000000c4796aabce2a9d774ce4603f5db5fb1605791dbd", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x0bbE9b20372B29e65B3feF370b22369561893231", - "constructorArguments": "000000000000000000000000c4796aabce2a9d774ce4603f5db5fb1605791dbd", + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false - } - ], - "moonbasealpha": [ + }, { - "name": "MultisigIsm", - "address": "0xec8875C7cE0a814A56654618D366641859F32C7A", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xEed449c54156163bf50CFf30408975AF43F43115", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "InterchainGasPaymaster", - "address": "0x1a37635B78Dde4aCbedaFCdA365FB89dc3F3f030", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xf857706CE59Cb7AE6df81Bbd0B0a656dB3e6beDA", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "Mailbox", - "address": "0xC1081e289564fd20a4a93C00042692E168Fd0378", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000507" + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false }, { - "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "StorageGasOracle", - "address": "0xAd754Dbc3F725259E49A90CAB347AeC343D432ed", - "constructorArguments": "", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x430eA7B2e537382e96b57cA9E559f3440230d0B0", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "Mailbox", - "address": "0x609558c93120adeC005B3D342bD3668c8aF51B3E", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000507", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x17B49047111c19301FC7503edE306E1739D31bcD", - "constructorArguments": "000000000000000000000000609558c93120adec005b3d342bd3668c8af51b3e000000000000000000000000430ea7b2e537382e96b57ca9e559f3440230d0b000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, { "name": "ProxyAdmin", - "address": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x96ee22Fb5Cad052bEf57f8EE9D5050B45204cc92", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000507", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x76189acFA212298d7022624a4633411eE0d2f26F", - "constructorArguments": "00000000000000000000000096ee22fb5cad052bef57f8ee9d5050b45204cc92000000000000000000000000b241991527f1c21ade14f55589e5940ac4852fa000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, { "name": "ProxyAdmin", - "address": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "Mailbox", - "address": "0x96ee22Fb5Cad052bEf57f8EE9D5050B45204cc92", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000507", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x76189acFA212298d7022624a4633411eE0d2f26F", - "constructorArguments": "00000000000000000000000096ee22fb5cad052bef57f8ee9d5050b45204cc92000000000000000000000000b241991527f1c21ade14f55589e5940ac4852fa000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", - "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", "isProxy": false - } - ], - "optimismgoerli": [ + }, { - "name": "MultisigIsm", - "address": "0x47384E33E67007B7fE4326fb096Bdf9CbA7AB6E4", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xcD19Ff7306E04EA6b8f4B5Ab1c5A198c186aaB42", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "InterchainGasPaymaster", - "address": "0x1a37635B78Dde4aCbedaFCdA365FB89dc3F3f030", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xf857706CE59Cb7AE6df81Bbd0B0a656dB3e6beDA", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "Mailbox", - "address": "0x2D076fE2370950044572cB168924B8AffDA26689", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000000000000000000000000000000000000000001a4" + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false }, { - "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false }, { "name": "StorageGasOracle", - "address": "0xdE72697715aAeC4CaBbD638C0Aba64488005C64b", - "constructorArguments": "", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xe42f86E3AB97376100ba92Dd4145e96A24568Ad2", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "Mailbox", - "address": "0x71612f69f9D461FDCf09c30A02AC8f64F458dad8", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000001a4", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x37A8D30df1d479fd126Aeb06a5aFdfc69d2aD4D8", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xE8F752e5C4E1A6a2e3eAfa42d44D601A22d78f2b", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000001a4", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x37A8D30df1d479fd126Aeb06a5aFdfc69d2aD4D8", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xE8F752e5C4E1A6a2e3eAfa42d44D601A22d78f2b", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000001a4", + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xb492616DdA011357666CAdC8ff7123944025C3Bb", - "constructorArguments": "000000000000000000000000e8f752e5c4e1a6a2e3eafa42d44d601a22d78f2b00000000000000000000000037a8d30df1d479fd126aeb06a5afdfc69d2ad4d800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, { "name": "ProxyAdmin", - "address": "0x800b4be4Dc91E56DE934D9f16888d113eFf89Ebb", - "constructorArguments": "", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", + "constructorArguments": "0x000000000000000000000000592248baa7e27ed50a99cf821c61bf2ac8d6f2b70000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0x592248Baa7e27ed50A99cf821C61Bf2ac8D6F2B7", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000aef3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x8356113754C7aCa297Db3089b89F87CC125499fb", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "constructorArguments": "0x00000000000000000000000076a1aae73e9d837cef10ac5af5afdd30d7612f980000000000000000000000004edbf5846d973c53af478cf62ab5bc92807521e300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x76a1aaE73e9D837ceF10Ac5AF5AfDD30d7612f98", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", + "constructorArguments": "0x000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e59", + "isProxy": false + } + ], + "basegoerli": [ + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", + "constructorArguments": "0x000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000014a33", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x28B02B97a850872C4D33C3E024fab6499ad96564", + "constructorArguments": "0x000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", + "constructorArguments": "0x00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "isProxy": false + } + ], + "fuji": [ + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", + "constructorArguments": "0x000000000000000000000000f28969a6a930c68a2758d55c291de595670961fe000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xf28969A6A930c68a2758d55c291DE595670961FE", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a869", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x9ff6ac3dAf63103620BBf76136eA1AFf43c2F612", + "constructorArguments": "0x0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x9305dE34306886d615B096Bdf23b94a978f6a6c0", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x6895d3916B94b386fAA6ec9276756e16dAe7480E", + "constructorArguments": "0x00000000000000000000000004be088a7aab0e1b6ec7d73af9e152344fbc8a0c000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x04BE088A7aAb0E1B6Ec7d73af9E152344Fbc8A0C", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x9ff6ac3dAf63103620BBf76136eA1AFf43c2F612", + "constructorArguments": "0x0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x9305dE34306886d615B096Bdf23b94a978f6a6c0", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x6895d3916B94b386fAA6ec9276756e16dAe7480E", + "constructorArguments": "0x00000000000000000000000004be088a7aab0e1b6ec7d73af9e152344fbc8a0c000000000000000000000000378da02f7dc3c23a8b5ece32b8056cdf01e8d47700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x04BE088A7aAb0E1B6Ec7d73af9E152344Fbc8A0C", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xEbA64c8a9b4a61a9210d5fe7E4375380999C821b", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x4f7179A691F8a684f56cF7Fed65171877d30739a", + "constructorArguments": "0x0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b0", + "isProxy": false + } + ], + "mumbai": [ + { + "name": "ProxyAdmin", + "address": "0xa99aD6B1c10E92DB8d3510f1865A6d2Ab43EAd58", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2d1889fe5B092CD988972261434F7E5f26041115", + "constructorArguments": "0x000000000000000000000000de1973894d1418ae463013cb6415cb24fce15575000000000000000000000000a99ad6b1c10e92db8d3510f1865a6d2ab43ead5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xde1973894d1418ae463013CB6415Cb24fcE15575", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000013881", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x9AF85731EDd41E2E50F81Ef8a0A69D2fB836EDf9", + "constructorArguments": "0x0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0xa99aD6B1c10E92DB8d3510f1865A6d2Ab43EAd58", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0xBEd8Fd6d5c6cBd878479C25f4725C7c842a43821", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x8aB67CAF605c6ee83cbFeFb0D8d67FDd3BF7B591", + "constructorArguments": "0x00000000000000000000000098f44ea5b9ca6aa02a5b75f31e0621083d9096a2000000000000000000000000a99ad6b1c10e92db8d3510f1865a6d2ab43ead5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x98F44EA5b9cA6aa02a5B75f31E0621083d9096a2", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x9AF85731EDd41E2E50F81Ef8a0A69D2fB836EDf9", + "constructorArguments": "0x0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0xa99aD6B1c10E92DB8d3510f1865A6d2Ab43EAd58", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0xBEd8Fd6d5c6cBd878479C25f4725C7c842a43821", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x8aB67CAF605c6ee83cbFeFb0D8d67FDd3BF7B591", + "constructorArguments": "0x00000000000000000000000098f44ea5b9ca6aa02a5b75f31e0621083d9096a2000000000000000000000000a99ad6b1c10e92db8d3510f1865a6d2ab43ead5800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x98F44EA5b9cA6aa02a5B75f31E0621083d9096a2", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0x244d1F7e30Be144A87602905baBF86630e8f39DC", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5", + "constructorArguments": "0x0000000000000000000000002d1889fe5b092cd988972261434f7e5f26041115", + "isProxy": false + } + ], + "bsctestnet": [ + { + "name": "ProxyAdmin", + "address": "0xb12282d2E838Aa5f2A4F9Ee5f624a77b7199A078", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xF9F6F5646F478d5ab4e20B0F910C92F1CCC9Cc6D", + "constructorArguments": "0x000000000000000000000000bfb3eb3bcc00a17d04237c98f2d1061548f8ac38000000000000000000000000b12282d2e838aa5f2a4f9ee5f624a77b7199a07800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xbfB3EB3Bcc00A17d04237C98F2D1061548f8AC38", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000061", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0xc6cbF39A747f5E28d1bDc8D9dfDAb2960Abd5A8f", + "constructorArguments": "0x000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0xb12282d2E838Aa5f2A4F9Ee5f624a77b7199A078", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x124EBCBC018A5D4Efe639f02ED86f95cdC3f6498", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0dD20e410bdB95404f71c5a4e7Fa67B892A5f949", + "constructorArguments": "0x000000000000000000000000795b9b7aa901c8b999b62b8c80299e79a5c96057000000000000000000000000b12282d2e838aa5f2a4f9ee5f624a77b7199a07800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x795B9b7AA901C8B999b62B8c80299e79a5c96057", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0xc6cbF39A747f5E28d1bDc8D9dfDAb2960Abd5A8f", + "constructorArguments": "0x000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0xb12282d2E838Aa5f2A4F9Ee5f624a77b7199A078", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x124EBCBC018A5D4Efe639f02ED86f95cdC3f6498", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0dD20e410bdB95404f71c5a4e7Fa67B892A5f949", + "constructorArguments": "0x000000000000000000000000795b9b7aa901c8b999b62b8c80299e79a5c96057000000000000000000000000b12282d2e838aa5f2a4f9ee5f624a77b7199a07800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0x795B9b7AA901C8B999b62B8c80299e79a5c96057", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0x3eF0a63B8976b838704Bcc93C78C56b6653E5a39", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xf09701B0a93210113D175461b6135a96773B5465", + "constructorArguments": "0x000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d", + "isProxy": false + } + ], + "goerli": [ + { + "name": "ProxyAdmin", + "address": "0x0EdB3604D230963ecE9d83963164CFe2fDef576B", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x49cfd6Ef774AcAb14814D699e3F7eE36Fdfba932", + "constructorArguments": "0x0000000000000000000000004a67be3a7db40a8ae110f85ab66b0203f9401a770000000000000000000000000edb3604d230963ece9d83963164cfe2fdef576b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0x4a67bE3a7DB40a8Ae110F85ab66b0203f9401a77", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000005", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x28c294C61D3dE053462d2Cfa5d5f8c8D70605A59", + "constructorArguments": "0x00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x0EdB3604D230963ecE9d83963164CFe2fDef576B", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0xeC34c715ee6d050b2172E8aF650Db779561266C1", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0cD26594ea6c6526927C0F5225AC09F6288e7140", + "constructorArguments": "0x000000000000000000000000ee99ea7cc4035e942917cd444e0a653a4b9d3e1a0000000000000000000000000edb3604d230963ece9d83963164cfe2fdef576b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "InterchainGasPaymaster", + "address": "0xee99eA7cC4035E942917cd444e0A653A4B9d3e1A", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xA04b18c7E45F41CB28590D37784017Ea1bbCe052", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000001a4", + "name": "MerkleTreeHook", + "address": "0x28c294C61D3dE053462d2Cfa5d5f8c8D70605A59", + "constructorArguments": "0x00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x800b4be4Dc91E56DE934D9f16888d113eFf89Ebb", - "constructorArguments": "", + "address": "0x0EdB3604D230963ecE9d83963164CFe2fDef576B", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xA04b18c7E45F41CB28590D37784017Ea1bbCe052", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000001a4", + "name": "StorageGasOracle", + "address": "0xeC34c715ee6d050b2172E8aF650Db779561266C1", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xB5f021728Ea6223E3948Db2da61d612307945eA2", - "constructorArguments": "000000000000000000000000a04b18c7e45f41cb28590d37784017ea1bbce052000000000000000000000000800b4be4dc91e56de934d9f16888d113eff89ebb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x0cD26594ea6c6526927C0F5225AC09F6288e7140", + "constructorArguments": "0x000000000000000000000000ee99ea7cc4035e942917cd444e0a653a4b9d3e1a0000000000000000000000000edb3604d230963ece9d83963164cfe2fdef576b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x24D31e12E4d3bc2C46C994FcE0c828b218A1aeAb", - "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2", + "name": "InterchainGasPaymaster", + "address": "0xee99eA7cC4035E942917cd444e0A653A4B9d3e1A", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0x9293B8dAcA7933765de499C992B0Fa86Bb104b0f", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { "name": "ValidatorAnnounce", - "address": "0x24D31e12E4d3bc2C46C994FcE0c828b218A1aeAb", - "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2", + "address": "0x3c182AD9cA8A71bc107Ef440C2667E8360e1158E", + "constructorArguments": "0x00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba932", "isProxy": false } ], - "arbitrumgoerli": [ - { - "name": "MultisigIsm", - "address": "0x47384E33E67007B7fE4326fb096Bdf9CbA7AB6E4", - "constructorArguments": "", - "isProxy": false - }, + "scrollsepolia": [ { "name": "ProxyAdmin", - "address": "0xcD19Ff7306E04EA6b8f4B5Ab1c5A198c186aaB42", - "constructorArguments": "", + "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", + "constructorArguments": "0x", "isProxy": false }, - { - "name": "InterchainGasPaymaster", - "address": "0x1a37635B78Dde4aCbedaFCdA365FB89dc3F3f030", - "isProxy": false, - "constructorArguments": "0x" - }, { "name": "TransparentUpgradeableProxy", - "address": "0xf857706CE59Cb7AE6df81Bbd0B0a656dB3e6beDA", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x3C5154a193D6e2955650f9305c8d80c18C814A68", + "constructorArguments": "0x0000000000000000000000007914a3349107a7295bbf2374db5a973d73d1b324000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { "name": "Mailbox", - "address": "0x0840f126eD0302B37d7476A303340a92B9eC0c5b", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000066eed" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000008274f", + "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x94096588fc66f0D3a348306c2555d474b3B6302a", - "isProxy": false, - "constructorArguments": "0x" + "name": "MerkleTreeHook", + "address": "0x863E8c26621c52ACa1849C53500606e73BA272F0", + "constructorArguments": "0x0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68", + "isProxy": false }, { - "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "name": "ProxyAdmin", + "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0xF90cB82a76492614D07B82a7658917f3aC811Ac1", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" + "name": "StorageGasOracle", + "address": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "TransparentUpgradeableProxy", + "address": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD", + "constructorArguments": "0x000000000000000000000000ad34a66bf6db18e858f6b686557075568c6e031c000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "StorageGasOracle", - "address": "0xfFAEF09B3cd11D9b20d1a19bECca54EEC2884766", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", + "constructorArguments": "0x", "isProxy": false }, { - "name": "InterchainGasPaymaster", - "address": "0x3DA23FD6844A712692F181C73f5cb606dd51BDe3", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" + "name": "MerkleTreeHook", + "address": "0x863E8c26621c52ACa1849C53500606e73BA272F0", + "constructorArguments": "0x0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68", + "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xf2f52Cc57b3B770aca943C263df4eA81Df9a0F69", - "constructorArguments": "", + "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x3273A2719D30A6D25EE2d537d3c47e0c03902c7a", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000066eed", + "name": "StorageGasOracle", + "address": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0x32B34F0D86b275b92e9289d9054Db5Ec32d2CC6C", - "constructorArguments": "", - "isProxy": false + "name": "TransparentUpgradeableProxy", + "address": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD", + "constructorArguments": "0x000000000000000000000000ad34a66bf6db18e858f6b686557075568c6e031c000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "Mailbox", - "address": "0x4ea25228B6f207c9e7D5321E705b60d295932D44", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000066eed", + "name": "InterchainGasPaymaster", + "address": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0x32B34F0D86b275b92e9289d9054Db5Ec32d2CC6C", - "constructorArguments": "", + "name": "ProtocolFee", + "address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { - "name": "Mailbox", - "address": "0x4ea25228B6f207c9e7D5321E705b60d295932D44", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000066eed", + "name": "ValidatorAnnounce", + "address": "0x527768930D889662Fe7ACF64294871e86e4C2381", + "constructorArguments": "0x0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68", + "isProxy": false + } + ], + "sepolia": [ + { + "name": "ProxyAdmin", + "address": "0x97Bbc6bBaFa5Ce3b2FA966c121Af63bD09e940f8", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xA59Ba0A8D4ea5A5DC9c8B0101ba7E6eE6C3399A4", - "constructorArguments": "0000000000000000000000004ea25228b6f207c9e7d5321e705b60d295932d4400000000000000000000000032b34f0d86b275b92e9289d9054db5ec32d2cc6c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xfFAEF09B3cd11D9b20d1a19bECca54EEC2884766", + "constructorArguments": "0x00000000000000000000000062b2203d0757d1845ab2422eb61ab30d4ad3c51500000000000000000000000097bbc6bbafa5ce3b2fa966c121af63bd09e940f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x00DFB81Bfc45fa03060b605273147F274ea807E5", - "constructorArguments": "", + "name": "Mailbox", + "address": "0x62b2203d0757d1845Ab2422Eb61ab30D4Ad3c515", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000aa36a7", "isProxy": false }, { - "name": "Mailbox", - "address": "0x385C7f179168f5Da92c72E17AE8EF50F3874077f", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000066eed", + "name": "MerkleTreeHook", + "address": "0x4917a9746A7B6E0A57159cCb7F5a6744247f2d0d", + "constructorArguments": "0x000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x00DFB81Bfc45fa03060b605273147F274ea807E5", - "constructorArguments": "", + "address": "0x97Bbc6bBaFa5Ce3b2FA966c121Af63bD09e940f8", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x385C7f179168f5Da92c72E17AE8EF50F3874077f", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000066eed", + "name": "StorageGasOracle", + "address": "0x71775B071F77F1ce52Ece810ce084451a3045FFe", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x13dABc0351407d5aAa0A50003a166A73b4febfDc", - "constructorArguments": "000000000000000000000000385c7f179168f5da92c72e17ae8ef50f3874077f00000000000000000000000000dfb81bfc45fa03060b605273147f274ea807e500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x6f2756380FD49228ae25Aa7F2817993cB74Ecc56", + "constructorArguments": "0x0000000000000000000000003f09709b9865993f0320c3e836f3a3f4ff83ea9b00000000000000000000000097bbc6bbafa5ce3b2fa966c121af63bd09e940f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x4a01EEBa1CC20F47A2e60aE4ec932051601FcB9e", - "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc", + "name": "InterchainGasPaymaster", + "address": "0x3f09709b9865993f0320C3e836f3a3F4ff83eA9b", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x4a01EEBa1CC20F47A2e60aE4ec932051601FcB9e", - "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc", - "isProxy": false - } - ], - "sepolia": [ - { - "name": "MultisigIsm", - "address": "0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x4917a9746A7B6E0A57159cCb7F5a6744247f2d0d", + "constructorArguments": "0x000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xeb6f11189197223c656807a83B0DD374f9A6dF44", - "constructorArguments": "", + "address": "0x97Bbc6bBaFa5Ce3b2FA966c121Af63bD09e940f8", + "constructorArguments": "0x", "isProxy": false }, { "name": "StorageGasOracle", - "address": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37", - "constructorArguments": "", + "address": "0x71775B071F77F1ce52Ece810ce084451a3045FFe", + "constructorArguments": "0x", "isProxy": false }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x6f2756380FD49228ae25Aa7F2817993cB74Ecc56", + "constructorArguments": "0x0000000000000000000000003f09709b9865993f0320c3e836f3a3f4ff83ea9b00000000000000000000000097bbc6bbafa5ce3b2fa966c121af63bd09e940f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, { "name": "InterchainGasPaymaster", - "address": "0x44b764045BfDC68517e10e783E69B376cef196B2", - "constructorArguments": "000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "address": "0x3f09709b9865993f0320C3e836f3a3F4ff83eA9b", + "constructorArguments": "0x", "isProxy": false }, { - "name": "TransparentUpgradeableProxy", - "address": "0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2", - "constructorArguments": "00000000000000000000000044b764045bfdc68517e10e783e69b376cef196b2000000000000000000000000eb6f11189197223c656807a83b0dd374f9a6df4400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", - "isProxy": true + "name": "ProtocolFee", + "address": "0x13AC3349Cb159fE86A22cf42DdA803D9f7309DB5", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", + "isProxy": false }, { - "name": "OverheadIgp", - "address": "0x54148470292C24345fb828B003461a9444414517", - "constructorArguments": "000000000000000000000000c2e36cd6e32e194ee11f15d9273b64461a4d49a2", + "name": "ValidatorAnnounce", + "address": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", + "constructorArguments": "0x000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766", "isProxy": false - }, + } + ], + "moonbasealpha": [ { - "name": "Mailbox", - "address": "0x33dB966328Ea213b0f76eF96CA368AB37779F065", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000aa36a7", + "name": "ProxyAdmin", + "address": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xB08d78F439e55D02C398519eef61606A5926245F", - "constructorArguments": "00000000000000000000000033db966328ea213b0f76ef96ca368ab37779f065000000000000000000000000eb6f11189197223c656807a83b0dd374f9a6df4400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c0000000000000000000000006e7b29cb2a7617405b4d30c6f84bbd51b4bb4be800000000000000000000000000000000000000000000000000000000", + "address": "0x76189acFA212298d7022624a4633411eE0d2f26F", + "constructorArguments": "0x00000000000000000000000096ee22fb5cad052bef57f8ee9d5050b45204cc92000000000000000000000000b241991527f1c21ade14f55589e5940ac4852fa000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x46f7C5D896bbeC89bE1B19e4485e59b4Be49e9Cc", - "constructorArguments": "000000000000000000000000b08d78f439e55d02c398519eef61606a5926245f", + "name": "Mailbox", + "address": "0x96ee22Fb5Cad052bEf57f8EE9D5050B45204cc92", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000507", "isProxy": false }, { - "name": "MultisigIsm", - "address": "0xD3d062a5dcBA85ae863618d4c264d2358300c283", - "constructorArguments": "", + "name": "MerkleTreeHook", + "address": "0x155B1CD2f7Cbc58d403B9BE341FaB6CD77425175", + "constructorArguments": "0x00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692", - "constructorArguments": "", + "address": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", + "constructorArguments": "0x", "isProxy": false }, { "name": "StorageGasOracle", - "address": "0x1D5EbC3e15e9ECDe0e3530C85899556797eeaea5", - "constructorArguments": "", + "address": "0x62fA20dE68Dbe425f0bc474b12235a4F8449E608", + "constructorArguments": "0x", "isProxy": false }, - { - "name": "InterchainGasPaymaster", - "address": "0xD28d890780A33ec5155f9972ce260c1b611C788b", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c" - }, { "name": "TransparentUpgradeableProxy", - "address": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0xF987d7edcb5890cB321437d8145E3D51131298b6", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000008f9c3888bfc8a5b25aed115a82ecbb788b196d2a" - }, - { - "name": "Mailbox", - "address": "0x67b4359c407359d260dD04E622af04E7450DD43b", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000aa36a7" + "address": "0x92F05669A354a032A84FcfABfD13beE1aBc5bFd0", + "constructorArguments": "0x000000000000000000000000700eb93ae3a4cfccfefd2f17d92b79cd3ff202e4000000000000000000000000b241991527f1c21ade14f55589e5940ac4852fa000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "TransparentUpgradeableProxy", - "address": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + "name": "InterchainGasPaymaster", + "address": "0x700EB93Ae3A4CFcCfEFd2F17d92b79CD3FF202e4", + "constructorArguments": "0x", + "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685" + "name": "MerkleTreeHook", + "address": "0x155B1CD2f7Cbc58d403B9BE341FaB6CD77425175", + "constructorArguments": "0x00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", + "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x153BED6fFD8C67684Af07177C8E9A06877219cb7", - "constructorArguments": "", + "address": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xB9B1E65B23606D6f871D7ecc848071844DCa12D2", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000aa36a7", + "name": "StorageGasOracle", + "address": "0x62fA20dE68Dbe425f0bc474b12235a4F8449E608", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xc44Dcb82e2DB0c595831713a848EA56c3ee35f1b", - "constructorArguments": "000000000000000000000000b9b1e65b23606d6f871d7ecc848071844dca12d2000000000000000000000000153bed6ffd8c67684af07177c8e9a06877219cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x92F05669A354a032A84FcfABfD13beE1aBc5bFd0", + "constructorArguments": "0x000000000000000000000000700eb93ae3a4cfccfefd2f17d92b79cd3ff202e4000000000000000000000000b241991527f1c21ade14f55589e5940ac4852fa000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x97Bbc6bBaFa5Ce3b2FA966c121Af63bD09e940f8", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "Mailbox", - "address": "0x33AbaF6708be03Bdf0595DA0745A7111b01dB8c7", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000aa36a7", + "name": "InterchainGasPaymaster", + "address": "0x700EB93Ae3A4CFcCfEFd2F17d92b79CD3FF202e4", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ValidatorAnnounce", - "address": "0x71B1BF7C99BEef0545eAFf441372cb6413d9367c", - "constructorArguments": "00000000000000000000000033abaf6708be03bdf0595da0745a7111b01db8c7", + "name": "ProtocolFee", + "address": "0xe2A73F106902983452713F24Bd019F6eb8712986", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { "name": "ValidatorAnnounce", - "address": "0x71B1BF7C99BEef0545eAFf441372cb6413d9367c", - "constructorArguments": "00000000000000000000000033abaf6708be03bdf0595da0745a7111b01db8c7", + "address": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", + "constructorArguments": "0x00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", "isProxy": false } ], - "polygonzkevmtestnet": [ + "optimismgoerli": [ { "name": "ProxyAdmin", - "address": "0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2", - "constructorArguments": "", + "address": "0x800b4be4Dc91E56DE934D9f16888d113eFf89Ebb", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x6966b0E55883d49BFB24539356a2f8A673E02039", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000005a2", - "isProxy": false + "name": "TransparentUpgradeableProxy", + "address": "0xB5f021728Ea6223E3948Db2da61d612307945eA2", + "constructorArguments": "0x000000000000000000000000a04b18c7e45f41cb28590d37784017ea1bbce052000000000000000000000000800b4be4dc91e56de934d9f16888d113eff89ebb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371", - "constructorArguments": "", + "name": "Mailbox", + "address": "0xA04b18c7E45F41CB28590D37784017Ea1bbCe052", + "constructorArguments": "0x00000000000000000000000000000000000000000000000000000000000001a4", "isProxy": false }, { - "name": "Mailbox", - "address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000005a2", + "name": "MerkleTreeHook", + "address": "0xFEe074B31B5B259eB3109737bE13D39B853b47b9", + "constructorArguments": "0x000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371", - "constructorArguments": "", + "address": "0x800b4be4Dc91E56DE934D9f16888d113eFf89Ebb", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000005a2", + "name": "StorageGasOracle", + "address": "0x4927C33299091033D935C15DE6b6073164e99BE0", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x0526E47C49742C15F8817ef8cf0d8FFc72139D4F", - "constructorArguments": "000000000000000000000000fc8d0d2e15a36f1a3f3ae3cb127b706c1f23aadc000000000000000000000000f7f0dab0bece4498dac7eb616e288809d449937100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x02A7661273528EfF3d78CBE7CbD1a717b28B89fC", + "constructorArguments": "0x00000000000000000000000003c39954c2dc91d32f68461300391e8605e83176000000000000000000000000800b4be4dc91e56de934d9f16888d113eff89ebb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0xd785272D240B07719e417622cbd2cfA0E584d1bd", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0x03C39954C2DC91d32f68461300391E8605e83176", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xef48bd850E5827B96B55C4D28FB32Bbaa73616F2", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000005a2", + "name": "MerkleTreeHook", + "address": "0xFEe074B31B5B259eB3109737bE13D39B853b47b9", + "constructorArguments": "0x000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8", - "constructorArguments": "", + "address": "0x800b4be4Dc91E56DE934D9f16888d113eFf89Ebb", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xef48bd850E5827B96B55C4D28FB32Bbaa73616F2", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000005a2", + "name": "StorageGasOracle", + "address": "0x4927C33299091033D935C15DE6b6073164e99BE0", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", - "constructorArguments": "000000000000000000000000ef48bd850e5827b96b55c4d28fb32bbaa73616f2000000000000000000000000666a24f62f7a97ba33c151776eb3d9441a059eb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x02A7661273528EfF3d78CBE7CbD1a717b28B89fC", + "constructorArguments": "0x00000000000000000000000003c39954c2dc91d32f68461300391e8605e83176000000000000000000000000800b4be4dc91e56de934d9f16888d113eff89ebb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", - "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8", + "name": "InterchainGasPaymaster", + "address": "0x03C39954C2DC91d32f68461300391E8605e83176", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { "name": "ValidatorAnnounce", - "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", - "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8", + "address": "0x24D31e12E4d3bc2C46C994FcE0c828b218A1aeAb", + "constructorArguments": "0x000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea2", "isProxy": false } ], - "basegoerli": [ + "arbitrumgoerli": [ { "name": "ProxyAdmin", - "address": "0xB08d78F439e55D02C398519eef61606A5926245F", - "constructorArguments": "", + "address": "0x00DFB81Bfc45fa03060b605273147F274ea807E5", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x46f7C5D896bbeC89bE1B19e4485e59b4Be49e9Cc", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000014a33", - "isProxy": false + "name": "TransparentUpgradeableProxy", + "address": "0x13dABc0351407d5aAa0A50003a166A73b4febfDc", + "constructorArguments": "0x000000000000000000000000385c7f179168f5da92c72e17ae8ef50f3874077f00000000000000000000000000dfb81bfc45fa03060b605273147f274ea807e500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", - "constructorArguments": "", + "name": "Mailbox", + "address": "0x385C7f179168f5Da92c72E17AE8EF50F3874077f", + "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000066eed", "isProxy": false }, { - "name": "Mailbox", - "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000014a33", + "name": "MerkleTreeHook", + "address": "0xf0A38e1eEA49dAc7968F470c3aA0BDE2565A5d80", + "constructorArguments": "0x00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", - "constructorArguments": "", + "address": "0x00DFB81Bfc45fa03060b605273147F274ea807E5", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000014a33", + "name": "StorageGasOracle", + "address": "0xFc8229ADB46D96056A6e451Fb3c55d60FFeD056f", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x3C5154a193D6e2955650f9305c8d80c18C814A68", - "constructorArguments": "0000000000000000000000007914a3349107a7295bbf2374db5a973d73d1b324000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x76189acFA212298d7022624a4633411eE0d2f26F", + "constructorArguments": "0x000000000000000000000000b241991527f1c21ade14f55589e5940ac4852fa000000000000000000000000000dfb81bfc45fa03060b605273147f274ea807e500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000014a33", + "name": "MerkleTreeHook", + "address": "0xf0A38e1eEA49dAc7968F470c3aA0BDE2565A5d80", + "constructorArguments": "0x00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", - "constructorArguments": "", + "address": "0x00DFB81Bfc45fa03060b605273147F274ea807E5", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000014a33", + "name": "StorageGasOracle", + "address": "0xFc8229ADB46D96056A6e451Fb3c55d60FFeD056f", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", - "constructorArguments": "000000000000000000000000cf5baaf976c80a66fa7839715c45788f60041a3300000000000000000000000005ea36caee7d92c173334c9d97dcd39abdcb2b6900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x76189acFA212298d7022624a4633411eE0d2f26F", + "constructorArguments": "0x000000000000000000000000b241991527f1c21ade14f55589e5940ac4852fa000000000000000000000000000dfb81bfc45fa03060b605273147f274ea807e500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", - "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "name": "InterchainGasPaymaster", + "address": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { "name": "ValidatorAnnounce", - "address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", - "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a", + "address": "0x4a01EEBa1CC20F47A2e60aE4ec932051601FcB9e", + "constructorArguments": "0x00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc", "isProxy": false } ], - "scrollsepolia": [ + "polygonzkevmtestnet": [ { "name": "ProxyAdmin", - "address": "0x6966b0E55883d49BFB24539356a2f8A673E02039", - "constructorArguments": "", + "address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8", + "constructorArguments": "0x", "isProxy": false }, { - "name": "ProxyAdmin", - "address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc", - "constructorArguments": "", + "name": "TransparentUpgradeableProxy", + "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", + "constructorArguments": "0x000000000000000000000000ef48bd850e5827b96b55c4d28fb32bbaa73616f2000000000000000000000000666a24f62f7a97ba33c151776eb3d9441a059eb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xef48bd850E5827B96B55C4D28FB32Bbaa73616F2", + "constructorArguments": "0x00000000000000000000000000000000000000000000000000000000000005a2", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x68311418D79fE8d96599384ED767d225635d88a8", + "constructorArguments": "0x000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc", - "constructorArguments": "", + "address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x0526E47C49742C15F8817ef8cf0d8FFc72139D4F", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000008274f", + "name": "StorageGasOracle", + "address": "0x3707bc8C7342aA6f693bCe1Bd7671Fca146F7F0A", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0xd785272D240B07719e417622cbd2cfA0E584d1bd", - "constructorArguments": "0000000000000000000000000526e47c49742c15f8817ef8cf0d8ffc72139d4f000000000000000000000000fc8d0d2e15a36f1a3f3ae3cb127b706c1f23aadc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", + "constructorArguments": "0x000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0000000000000000000000000666a24f62f7a97ba33c151776eb3d9441a059eb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ProxyAdmin", - "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", - "constructorArguments": "", + "name": "InterchainGasPaymaster", + "address": "0x863E8c26621c52ACa1849C53500606e73BA272F0", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x68311418D79fE8d96599384ED767d225635d88a8", + "constructorArguments": "0x000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8", "isProxy": false }, { "name": "ProxyAdmin", - "address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", - "constructorArguments": "", + "address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8", + "constructorArguments": "0x", "isProxy": false }, { - "name": "Mailbox", - "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000008274f", + "name": "StorageGasOracle", + "address": "0x3707bc8C7342aA6f693bCe1Bd7671Fca146F7F0A", + "constructorArguments": "0x", "isProxy": false }, { "name": "TransparentUpgradeableProxy", - "address": "0x3C5154a193D6e2955650f9305c8d80c18C814A68", - "constructorArguments": "0000000000000000000000007914a3349107a7295bbf2374db5a973d73d1b324000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", + "constructorArguments": "0x000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f0000000000000000000000000666a24f62f7a97ba33c151776eb3d9441a059eb800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c00000000000000000000000000000000000000000000000000000000", "isProxy": true }, { - "name": "ValidatorAnnounce", - "address": "0x527768930D889662Fe7ACF64294871e86e4C2381", - "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68", + "name": "InterchainGasPaymaster", + "address": "0x863E8c26621c52ACa1849C53500606e73BA272F0", + "constructorArguments": "0x", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75", + "constructorArguments": "0x000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c000000000000000000000000fad1c94469700833717fa8a3017278bc1ca8031c", "isProxy": false }, { "name": "ValidatorAnnounce", - "address": "0x527768930D889662Fe7ACF64294871e86e4C2381", - "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a68", + "address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", + "constructorArguments": "0x000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8", "isProxy": false } ] diff --git a/typescript/infra/scripts/verify.ts b/typescript/infra/scripts/verify.ts index b6535e2ef2..16842520e7 100644 --- a/typescript/infra/scripts/verify.ts +++ b/typescript/infra/scripts/verify.ts @@ -14,8 +14,7 @@ import { assertEnvironment, getArgs, getEnvironmentConfig } from './utils'; // already be installed via `solc-select install $VERSION` async function main() { const argv = await getArgs() - // This file can be generated by running `yarn hardhat flatten > flattened.sol`, - // and then removing any lines with SPDX identifiers (`solc` complains otherwise). + // This file can be generated by running `$ yarn workspace @hyperlane-xyz/core flatten`, .string('source') .describe('source', 'flattened solidity source file') .demandOption('source') @@ -37,9 +36,9 @@ async function main() { // from solidity/core/hardhat.config.ts const compilerOptions: CompilerOptions = { codeformat: 'solidity-single-file', - compilerversion: 'v0.8.17+commit.8df45f5f', - optimizationUsed: '1', - runs: '999999', + compilerversion: 'v0.8.19+commit.7dd6d404', + optimizationUsed: '0', + runs: '200', }; const versionRegex = /v(\d.\d.\d+)\+commit.\w+/; diff --git a/typescript/sdk/src/consts/chainMetadata.ts b/typescript/sdk/src/consts/chainMetadata.ts index 779c1de0a4..8788c43156 100644 --- a/typescript/sdk/src/consts/chainMetadata.ts +++ b/typescript/sdk/src/consts/chainMetadata.ts @@ -433,9 +433,9 @@ export const scrollsepolia: ChainMetadata = { blockExplorers: [ { name: 'Scroll Explorer', - url: 'https://sepolia-blockscout.scroll.io', - apiUrl: 'https://sepolia-blockscout.scroll.io/api', - family: ExplorerFamily.Blockscout, + url: 'https://sepolia.scrollscan.dev/', + apiUrl: 'https://api-sepolia.scrollscan.com/api', + family: ExplorerFamily.Etherscan, }, ], blocks: { diff --git a/typescript/sdk/src/consts/environments/testnet.json b/typescript/sdk/src/consts/environments/testnet.json index 3d3f2f61ae..d406b77cfe 100644 --- a/typescript/sdk/src/consts/environments/testnet.json +++ b/typescript/sdk/src/consts/environments/testnet.json @@ -190,22 +190,5 @@ "protocolFee": "0x244d1F7e30Be144A87602905baBF86630e8f39DC", "mailbox": "0x2d1889fe5B092CD988972261434F7E5f26041115", "validatorAnnounce": "0x99303EFF09332cDd93E8BC8b2F07b2416e4501e5" - }, - "solanadevnet": { - "storageGasOracle": "0x0000000000000000000000000000000000000000", - "validatorAnnounce": "0x0000000000000000000000000000000000000000", - "proxyAdmin": "0x0000000000000000000000000000000000000000", - "mailbox": "4v25Dz9RccqUrTzmfHzJMsjd1iVoNrWzeJ4o6GYuJrVn", - "interchainGasPaymaster": "7hMPEGdgBQFsjEz3aaNwZp8WMFHs615zAM3erXBDJuJR", - "defaultIsmInterchainGasPaymaster": "0x0000000000000000000000000000000000000000", - "multisigIsm": "0x0000000000000000000000000000000000000000", - "testRecipient": "0x0000000000000000000000000000000000000000", - "interchainAccountIsm": "0x0000000000000000000000000000000000000000", - "aggregationIsmFactory": "0x0000000000000000000000000000000000000000", - "routingIsmFactory": "0x0000000000000000000000000000000000000000", - "interchainQueryRouter": "0x0000000000000000000000000000000000000000", - "interchainAccountRouter": "0x0000000000000000000000000000000000000000", - "merkleRootMultisigIsmFactory": "0x0000000000000000000000000000000000000000", - "messageIdMultisigIsmFactory": "0x0000000000000000000000000000000000000000" } } diff --git a/typescript/sdk/src/deploy/HyperlaneDeployer.ts b/typescript/sdk/src/deploy/HyperlaneDeployer.ts index a2374bd81b..7e19acfc08 100644 --- a/typescript/sdk/src/deploy/HyperlaneDeployer.ts +++ b/typescript/sdk/src/deploy/HyperlaneDeployer.ts @@ -34,9 +34,18 @@ import { MultiProvider } from '../providers/MultiProvider'; import { MailboxClientConfig } from '../router/types'; import { ChainMap, ChainName } from '../types'; -import { UpgradeConfig, proxyAdmin } from './proxy'; +import { + UpgradeConfig, + isProxy, + proxyAdmin, + proxyConstructorArgs, + proxyImplementation, +} from './proxy'; import { ContractVerificationInput } from './verify/types'; -import { getContractVerificationInput } from './verify/utils'; +import { + buildVerificationInput, + getContractVerificationInput, +} from './verify/utils'; export interface DeployerOptions { logger?: Debugger; @@ -60,6 +69,7 @@ export abstract class HyperlaneDeployer< protected readonly multiProvider: MultiProvider, protected readonly factories: Factories, protected readonly options?: DeployerOptions, + protected readonly recoverVerificationInputs = false, ) { this.logger = options?.logger ?? debug('hyperlane:deployer'); this.chainTimeoutMs = options?.chainTimeoutMs ?? 5 * 60 * 1000; // 5 minute timeout per chain @@ -266,21 +276,29 @@ export abstract class HyperlaneDeployer< ): Promise> { const cachedContract = this.readCache(chain, factory, contractName); if (cachedContract) { + if (this.recoverVerificationInputs) { + const recoveredInputs = await this.recoverVerificationArtifacts( + chain, + contractName, + cachedContract, + constructorArgs, + initializeArgs, + ); + this.addVerificationArtifacts(chain, recoveredInputs); + } return cachedContract; } - const signer = this.multiProvider.getSigner(chain); - const overrides = this.multiProvider.getTransactionOverrides(chain); - this.logger(`Deploy ${contractName} on ${chain}`); - const contract = await (factory - .connect(signer) - .deploy(...constructorArgs, overrides) as ReturnType); - - await this.multiProvider.handleTx(chain, contract.deployTransaction); + const contract = await this.multiProvider.handleDeploy( + chain, + factory, + constructorArgs, + ); if (initializeArgs) { this.logger(`Initialize ${contractName} on ${chain}`); + const overrides = this.multiProvider.getTransactionOverrides(chain); const initTx = await contract.initialize(...initializeArgs, overrides); await this.multiProvider.handleTx(chain, initTx); } @@ -391,19 +409,21 @@ export abstract class HyperlaneDeployer< proxyAdmin: string, initializeArgs?: Parameters, ): Promise { - const initData = initializeArgs - ? implementation.interface.encodeFunctionData( - 'initialize', - initializeArgs, - ) - : '0x'; + const isProxied = await isProxy( + this.multiProvider.getProvider(chain), + implementation.address, + ); + if (isProxied) { + // if the implementation is already a proxy, do not deploy a new proxy + return implementation; + } this.logger(`Deploying transparent upgradable proxy`); - const constructorArgs: [string, string, string] = [ - implementation.address, + const constructorArgs = proxyConstructorArgs( + implementation, proxyAdmin, - initData, - ]; + initializeArgs, + ); const proxy = await this.deployContractFromFactory( chain, new TransparentUpgradeableProxy__factory(), @@ -465,6 +485,52 @@ export abstract class HyperlaneDeployer< return undefined; } + async recoverVerificationArtifacts( + chain: ChainName, + contractName: string, + cachedContract: C, + constructorArgs: Parameters, + initializeArgs?: Parameters, + ): Promise { + const provider = this.multiProvider.getProvider(chain); + const isProxied = await isProxy(provider, cachedContract.address); + + let implementation: string; + if (isProxied) { + implementation = await proxyImplementation( + provider, + cachedContract.address, + ); + } else { + implementation = cachedContract.address; + } + + const implementationInput = buildVerificationInput( + contractName, + implementation, + cachedContract.interface.encodeDeploy(constructorArgs), + ); + + if (!isProxied) { + return [implementationInput]; + } + + const admin = await proxyAdmin(provider, cachedContract.address); + const proxyArgs = proxyConstructorArgs( + cachedContract.attach(implementation), + admin, + initializeArgs, + ); + const proxyInput = buildVerificationInput( + 'TransparentUpgradeableProxy', + cachedContract.address, + TransparentUpgradeableProxy__factory.createInterface().encodeDeploy( + proxyArgs, + ), + ); + return [implementationInput, proxyInput]; + } + /** * Deploys the Implementation and Proxy for a given contract * @@ -476,15 +542,6 @@ export abstract class HyperlaneDeployer< constructorArgs: Parameters, initializeArgs?: Parameters[K]['initialize']>, ): Promise[K]> { - const cachedContract = this.readCache( - chain, - this.factories[contractName], - contractName.toString(), - ); - if (cachedContract) { - return cachedContract; - } - // Try to initialize the implementation even though it may not be necessary const implementation = await this.deployContract( chain, diff --git a/typescript/sdk/src/deploy/proxy.ts b/typescript/sdk/src/deploy/proxy.ts index 8fc7298e86..b8bc9f87b5 100644 --- a/typescript/sdk/src/deploy/proxy.ts +++ b/typescript/sdk/src/deploy/proxy.ts @@ -37,6 +37,17 @@ export async function proxyAdmin( return ethers.utils.getAddress(storageValue.slice(26)); } +export function proxyConstructorArgs( + implementation: C, + proxyAdmin: string, + initializeArgs?: Parameters, +): [string, string, string] { + const initData = initializeArgs + ? implementation.interface.encodeFunctionData('initialize', initializeArgs) + : '0x'; + return [implementation.address, proxyAdmin, initData]; +} + export async function isProxy( provider: ethers.providers.Provider, proxy: Address, diff --git a/typescript/sdk/src/deploy/verify/ContractVerifier.ts b/typescript/sdk/src/deploy/verify/ContractVerifier.ts index 6159a02111..39246746fc 100644 --- a/typescript/sdk/src/deploy/verify/ContractVerifier.ts +++ b/typescript/sdk/src/deploy/verify/ContractVerifier.ts @@ -27,6 +27,7 @@ enum ExplorerApiErrors { ALREADY_VERIFIED_ALT = 'Already Verified', VERIFICATION_PENDING = 'Pending in queue', PROXY_FAILED = 'A corresponding implementation contract was unfortunately not detected for the proxy address.', + BYTECODE_MISMATCH = 'Fail - Unable to verify. Compiled contract deployment bytecode does NOT match the transaction deployment bytecode.', } export class ContractVerifier extends MultiGeneric { @@ -106,7 +107,12 @@ export class ContractVerifier extends MultiGeneric { case ExplorerApiErrors.ALREADY_VERIFIED_ALT: return; case ExplorerApiErrors.PROXY_FAILED: - this.logger(`Proxy verification failed, try manually?`); + this.logger(`Proxy verification failed for, try manually?`); + return; + case ExplorerApiErrors.BYTECODE_MISMATCH: + this.logger( + `Compiled bytecode does not match deployed bytecode, check constructor arguments?`, + ); return; default: this.logger( @@ -233,7 +239,13 @@ export class ContractVerifier extends MultiGeneric { } if (await this.isAlreadyVerified(chain, input)) { - this.logger(`Contract ${input.name} already verified on ${chain}`); + const addressUrl = await this.multiProvider.tryGetExplorerAddressUrl( + chain, + input.address, + ); + this.logger( + `Contract ${input.name} already verified on ${chain} at ${addressUrl}#code`, + ); // There is a rate limit of 5 requests per second await sleep(200); return; From 746026aa40b92e6ae5dd98593568763e22f11867 Mon Sep 17 00:00:00 2001 From: Nam Chu Hoai Date: Mon, 23 Oct 2023 16:25:14 -0400 Subject: [PATCH 03/15] Fix MerkleRootMultisigIsm Metadata builder (#2831) ### Description Somehow missed that in https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2784/files#diff-c74afa5055013fc40d4626107d9d086be0f21e87907784532f71e8bfe2e1b02bR38 --- .../metadata/multisig/merkle_root_multisig.rs | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs index 103907a50b..0de09f6b01 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs @@ -41,36 +41,43 @@ impl MultisigIsmMetadataBuilder for MerkleRootMultisigMetadataBuilder { self.highest_known_leaf_index().await, debug!("Couldn't get highest known leaf index") ); + unwrap_or_none_result!( + leaf_index, + self.get_merkle_leaf_id_by_message_id(message.id()) + .await + .context(CTX)?, + debug!( + ?message, + "No merkle leaf found for message id, must have not been enqueued in the tree" + ) + ); unwrap_or_none_result!( quorum_checkpoint, checkpoint_syncer .fetch_checkpoint_in_range( validators, threshold as usize, - message.nonce, + leaf_index, highest_leaf_index ) .await .context(CTX)?, - debug!("Couldn't get checkpoint in range") + debug!( + leaf_index, + highest_leaf_index, "Couldn't get checkpoint in range" + ) ); unwrap_or_none_result!( proof, - self.get_proof(message.nonce, quorum_checkpoint.checkpoint.checkpoint) - .await - .context(CTX)? - ); - unwrap_or_none_result!( - merkle_leaf_id, - self.get_merkle_leaf_id_by_message_id(message.id()) + self.get_proof(leaf_index, quorum_checkpoint.checkpoint.checkpoint) .await .context(CTX)?, - debug!("Couldn't get merkle proof") + debug!(leaf_index, checkpoint=?quorum_checkpoint, "Couldn't get proof") ); Ok(Some(MultisigMetadata::new( quorum_checkpoint.checkpoint.checkpoint, quorum_checkpoint.signatures, - Some(merkle_leaf_id), + Some(leaf_index), Some(quorum_checkpoint.checkpoint.message_id), Some(proof), ))) From 8044fc210b67eb62fb0fb0aba09dafb704d68fe6 Mon Sep 17 00:00:00 2001 From: Nam Chu Hoai Date: Mon, 23 Oct 2023 18:31:52 -0400 Subject: [PATCH 04/15] Fix alfajores igp address (#2829) ### Description Fixes the alfajores IGP contract to the one actually used on-chain. ### Drive-by changes Removed the old testnet_config.json in rust/config --- rust/config/testnet4_config.json | 2 +- rust/config/testnet_config.json | 163 ------------------ .../sdk/src/consts/environments/testnet.json | 2 +- 3 files changed, 2 insertions(+), 165 deletions(-) delete mode 100644 rust/config/testnet_config.json diff --git a/rust/config/testnet4_config.json b/rust/config/testnet4_config.json index d9cdb4d9f4..0b8f2db24c 100644 --- a/rust/config/testnet4_config.json +++ b/rust/config/testnet4_config.json @@ -46,7 +46,7 @@ "validatorAnnounce": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", "merkleTreeHook": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", "storageGasOracle": "0x8356113754C7aCa297Db3089b89F87CC125499fb", - "interchainGasPaymaster": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "interchainGasPaymaster": "0x44769b0f4a6f01339e131a691cc2eebbb519d297", "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", "protocolFee": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", "defaultIsm": "0xFBb1D475d2275D4643B6ba9Dae16f2F5465F9436", diff --git a/rust/config/testnet_config.json b/rust/config/testnet_config.json deleted file mode 100644 index baf249942c..0000000000 --- a/rust/config/testnet_config.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "chains": { - "alfajores": { - "name": "alfajores", - "domain": 44787, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 0, - "index": { - "from": 14863532 - } - }, - "fuji": { - "name": "fuji", - "domain": 43113, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 3, - "index": { - "from": 16330615 - } - }, - "mumbai": { - "name": "mumbai", - "domain": 80001, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 32, - "index": { - "from": 29390033 - } - }, - "bsctestnet": { - "name": "bsctestnet", - "domain": 97, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 9, - "index": { - "from": 25001629 - } - }, - "goerli": { - "name": "goerli", - "domain": 5, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 2, - "index": { - "from": 8039005 - } - }, - "sepolia": { - "name": "sepolia", - "domain": 11155111, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 2, - "index": { - "from": 3082913 - } - }, - "moonbasealpha": { - "name": "moonbasealpha", - "domain": 1287, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 1, - "index": { - "from": 3310405 - } - }, - "optimismgoerli": { - "name": "optimismgoerli", - "domain": 420, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 1, - "index": { - "from": 3055263 - } - }, - "arbitrumgoerli": { - "name": "arbitrumgoerli", - "domain": 421613, - "addresses": { - "mailbox": "0xCC737a94FecaeC165AbCf12dED095BB13F037685", - "interchainGasPaymaster": "0x8f9C3888bFC8a5B25AED115A82eCbb788b196d2a", - "validatorAnnounce": "0x3Fc742696D5dc9846e04f7A1823D92cb51695f9a" - }, - "protocol": "ethereum", - "finalityBlocks": 1, - "index": { - "from": 1941997 - } - }, - "solanadevnet": { - "name": "solanadevnet", - "domain": 1399811151, - "addresses": { - "mailbox": "4v25Dz9RccqUrTzmfHzJMsjd1iVoNrWzeJ4o6GYuJrVn", - "interchainGasPaymaster": "7hMPEGdgBQFsjEz3aaNwZp8WMFHs615zAM3erXBDJuJR", - "validatorAnnounce": "CMHKvdq4CopDf7qXnDCaTybS15QekQeRt4oUB219yxsp" - }, - "protocol": "sealevel", - "finalityBlocks": 0, - "connection": { - "type": "http", - "url": "https://api.devnet.solana.com" - }, - "index": { - "from": 1, - "mode": "sequence" - } - }, - "proteustestnet": { - "name": "proteustestnet", - "domain": 88002, - "addresses": { - "mailbox": "0x918D3924Fad8F71551D9081172e9Bb169745461e", - "interchainGasPaymaster": "0x06b62A9F5AEcc1E601D0E02732b4E1D0705DE7Db", - "validatorAnnounce": "0xEEea93d0d0287c71e47B3f62AFB0a92b9E8429a1" - }, - "protocol": "ethereum", - "finalityBlocks": 1, - "index": { - "from": 8609588 - } - } - } -} diff --git a/typescript/sdk/src/consts/environments/testnet.json b/typescript/sdk/src/consts/environments/testnet.json index d406b77cfe..2126cc1d05 100644 --- a/typescript/sdk/src/consts/environments/testnet.json +++ b/typescript/sdk/src/consts/environments/testnet.json @@ -74,7 +74,7 @@ "validatorAnnounce": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", "merkleTreeHook": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", "storageGasOracle": "0x8356113754C7aCa297Db3089b89F87CC125499fb", - "interchainGasPaymaster": "0x1246529edDcA523AfE5c6b9414299633d2E16697", + "interchainGasPaymaster": "0x44769b0f4a6f01339e131a691cc2eebbb519d297", "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", "protocolFee": "0xC9D50584F08Bf6cCD1004d14c7062044b45E3b48", "defaultIsm": "0xFBb1D475d2275D4643B6ba9Dae16f2F5465F9436" From 49fc06e65e14ce43d3c42bfb2415d71418214a58 Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Mon, 23 Oct 2023 19:11:47 -0400 Subject: [PATCH 05/15] Support hook rotation in core deployer (#2834) --- .../mock/MockHyperlaneEnvironment.sol | 10 +- solidity/contracts/test/TestMultisigIsm.sol | 39 ----- solidity/test/isms/OPStackIsm.t.sol | 1 - .../sdk/src/core/CoreDeployer.hardhat-test.ts | 87 ++++++++++- .../sdk/src/core/HyperlaneCoreDeployer.ts | 34 ++++- .../sdk/src/deploy/HyperlaneDeployer.ts | 143 ++++++++++-------- typescript/sdk/src/ism/HyperlaneIsmFactory.ts | 27 ++-- typescript/sdk/src/ism/types.ts | 12 +- typescript/sdk/src/providers/MultiProvider.ts | 4 +- typescript/sdk/src/test/testUtils.ts | 65 +++----- 10 files changed, 235 insertions(+), 187 deletions(-) delete mode 100644 solidity/contracts/test/TestMultisigIsm.sol diff --git a/solidity/contracts/mock/MockHyperlaneEnvironment.sol b/solidity/contracts/mock/MockHyperlaneEnvironment.sol index e56325d1e2..9f51b61ad3 100644 --- a/solidity/contracts/mock/MockHyperlaneEnvironment.sol +++ b/solidity/contracts/mock/MockHyperlaneEnvironment.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.13; import "./MockMailbox.sol"; import "../test/TestInterchainGasPaymaster.sol"; -import "../test/TestMultisigIsm.sol"; +import "../test/TestIsm.sol"; import {TypeCasts} from "../libs/TypeCasts.sol"; @@ -25,8 +25,8 @@ contract MockHyperlaneEnvironment { originMailbox.addRemoteMailbox(_destinationDomain, destinationMailbox); destinationMailbox.addRemoteMailbox(_originDomain, originMailbox); - isms[originDomain] = new TestMultisigIsm(); - isms[destinationDomain] = new TestMultisigIsm(); + isms[originDomain] = new TestIsm(); + isms[destinationDomain] = new TestIsm(); originMailbox.setDefaultIsm(address(isms[originDomain])); destinationMailbox.setDefaultIsm(address(isms[destinationDomain])); @@ -34,10 +34,6 @@ contract MockHyperlaneEnvironment { igps[originDomain] = new TestInterchainGasPaymaster(); igps[destinationDomain] = new TestInterchainGasPaymaster(); - // TODO: update routers with IGP paymentss - // originMailbox.setDefaultHook(address(igps[originDomain])); - // destinationMailbox.setDefaultHook(address(igps[destinationDomain])); - originMailbox.transferOwnership(msg.sender); destinationMailbox.transferOwnership(msg.sender); diff --git a/solidity/contracts/test/TestMultisigIsm.sol b/solidity/contracts/test/TestMultisigIsm.sol deleted file mode 100644 index 92e3324965..0000000000 --- a/solidity/contracts/test/TestMultisigIsm.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: MIT OR Apache-2.0 -pragma solidity >=0.8.0; - -import {IInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol"; -import {IMultisigIsm} from "../interfaces/isms/IMultisigIsm.sol"; - -contract TestMultisigIsm is IMultisigIsm { - // solhint-disable-next-line const-name-snakecase - uint8 public constant moduleType = - uint8(IInterchainSecurityModule.Types.MERKLE_ROOT_MULTISIG); - - bool public accept; - - constructor() { - accept = true; - } - - function validatorsAndThreshold(bytes calldata) - external - pure - returns (address[] memory, uint8) - { - address[] memory validators = new address[](1); - validators[0] = address(0); - return (validators, 1); - } - - function setAccept(bool _val) external { - accept = _val; - } - - function verify(bytes calldata, bytes calldata) - external - view - returns (bool) - { - return accept; - } -} diff --git a/solidity/test/isms/OPStackIsm.t.sol b/solidity/test/isms/OPStackIsm.t.sol index 0afc733da3..9541c8aabd 100644 --- a/solidity/test/isms/OPStackIsm.t.sol +++ b/solidity/test/isms/OPStackIsm.t.sol @@ -11,7 +11,6 @@ import {AbstractMessageIdAuthorizedIsm} from "../../contracts/isms/hook/Abstract import {TestMailbox} from "../../contracts/test/TestMailbox.sol"; import {Message} from "../../contracts/libs/Message.sol"; import {MessageUtils} from "./IsmTestUtils.sol"; -import {TestMultisigIsm} from "../../contracts/test/TestMultisigIsm.sol"; import {OPStackIsm} from "../../contracts/isms/hook/OPStackIsm.sol"; import {OPStackHook} from "../../contracts/hooks/OPStackHook.sol"; import {TestRecipient} from "../../contracts/test/TestRecipient.sol"; diff --git a/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts b/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts index 6cb17c072f..c466cac291 100644 --- a/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts +++ b/typescript/sdk/src/core/CoreDeployer.hardhat-test.ts @@ -3,10 +3,13 @@ import { assert, expect } from 'chai'; import { ethers } from 'hardhat'; import sinon from 'sinon'; +import { objMap, promiseObjAll } from '@hyperlane-xyz/utils'; + 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 { MultiProvider } from '../providers/MultiProvider'; import { testCoreConfig } from '../test/testUtils'; import { ChainMap } from '../types'; @@ -24,29 +27,97 @@ describe('core', async () => { let contracts: HyperlaneContractsMap; let coreConfig: ChainMap; let ismFactory: HyperlaneIsmFactory; + before(async () => { const [signer] = await ethers.getSigners(); multiProvider = MultiProvider.createTestMultiProvider({ signer }); const proxyFactoryDeployer = new HyperlaneProxyFactoryDeployer( multiProvider, ); - coreConfig = testCoreConfig(TestChains); + coreConfig = testCoreConfig(TestChains, signer.address); const ismFactories = await proxyFactoryDeployer.deploy(coreConfig); ismFactory = new HyperlaneIsmFactory(ismFactories, multiProvider); - }); - - beforeEach(async () => { - const [signer] = await ethers.getSigners(); - // This is kind of awkward and really these tests shouldn't live here - multiProvider = MultiProvider.createTestMultiProvider({ signer }); + deployer = new HyperlaneCoreDeployer(multiProvider, ismFactory); }); it('deploys', async () => { - deployer = new HyperlaneCoreDeployer(multiProvider, ismFactory); contracts = await deployer.deploy(coreConfig); core = new HyperlaneCore(contracts, multiProvider); }); + describe('idempotency', () => { + beforeEach(async () => { + contracts = await deployer.deploy(coreConfig); + }); + + it('rotates default and required hooks and recovers artifacts', async () => { + const getHooks = async ( + contracts: HyperlaneContractsMap, + ) => + promiseObjAll( + objMap(contracts, async (_, { mailbox }) => ({ + default: await mailbox.defaultHook(), + required: await mailbox.requiredHook(), + })), + ); + + const hooksBefore = await getHooks(contracts); + + const updatedConfig = objMap(coreConfig, (_, config) => ({ + ...config, + defaultHook: config.requiredHook, + requiredHook: config.defaultHook, + })); + + const [signer] = await ethers.getSigners(); + const nonceBefore = await signer.getTransactionCount(); + + const updatedContracts = await deployer.deploy(updatedConfig); + + const hooksAfter = await getHooks(updatedContracts); + expect(hooksBefore).to.deep.equal( + objMap(hooksAfter, (_, res) => ({ + required: res.default, + default: res.required, + })), + ); + + // number of set hook transactions + const numTransactions = 2 * TestChains.length; + const nonceAfter = await signer.getTransactionCount(); + expect(nonceAfter).to.equal(nonceBefore + numTransactions); + }); + + it('rotates default ISMs', async () => { + const testIsm = await contracts.test1.mailbox.defaultIsm(); + + const updatedConfig: ChainMap = objMap( + coreConfig, + (_, config) => { + const ismConfig: AggregationIsmConfig = { + type: ModuleType.AGGREGATION, + modules: [testIsm, testIsm], + threshold: 2, + }; + return { + ...config, + defaultIsm: ismConfig, + }; + }, + ); + + const [signer] = await ethers.getSigners(); + const nonceBefore = await signer.getTransactionCount(); + + await deployer.deploy(updatedConfig); + + // one aggregation ISM deploy and one set ISM transaction per chain + const numTransactions = 2 * TestChains.length; + const nonceAfter = await signer.getTransactionCount(); + expect(nonceAfter).to.equal(nonceBefore + numTransactions); + }); + }); + describe('failure modes', async () => { beforeEach(async () => { deployer = new HyperlaneCoreDeployer(multiProvider, ismFactory); diff --git a/typescript/sdk/src/core/HyperlaneCoreDeployer.ts b/typescript/sdk/src/core/HyperlaneCoreDeployer.ts index 6e2432c7d0..acb811b237 100644 --- a/typescript/sdk/src/core/HyperlaneCoreDeployer.ts +++ b/typescript/sdk/src/core/HyperlaneCoreDeployer.ts @@ -32,6 +32,7 @@ export class HyperlaneCoreDeployer extends HyperlaneDeployer< super(multiProvider, coreFactories, { logger: debug('hyperlane:CoreDeployer'), chainTimeoutMs: 1000 * 60 * 10, // 10 minutes + ismFactory, }); this.hookDeployer = new HyperlaneHookDeployer( multiProvider, @@ -73,11 +74,14 @@ export class HyperlaneCoreDeployer extends HyperlaneDeployer< const hookAddresses = { mailbox: mailbox.address, proxyAdmin }; + this.logger('Deploying default hook'); const defaultHook = await this.deployHook( chain, config.defaultHook, hookAddresses, ); + + this.logger('Deploying required hook'); const requiredHook = await this.deployHook( chain, config.requiredHook, @@ -93,9 +97,35 @@ export class HyperlaneCoreDeployer extends HyperlaneDeployer< } catch (e: any) { if (!e.message.includes('already initialized')) { throw e; - } else { - this.logger('Mailbox already initialized'); } + + this.logger('Mailbox already initialized'); + + await this.configureHook( + chain, + mailbox, + defaultHook, + (_mailbox) => _mailbox.defaultHook(), + (_mailbox, _hook) => _mailbox.populateTransaction.setDefaultHook(_hook), + ); + + await this.configureHook( + chain, + mailbox, + requiredHook, + (_mailbox) => _mailbox.requiredHook(), + (_mailbox, _hook) => + _mailbox.populateTransaction.setRequiredHook(_hook), + ); + + await this.configureIsm( + chain, + mailbox, + defaultIsm, + (_mailbox) => _mailbox.defaultIsm(), + (_mailbox, _module) => + _mailbox.populateTransaction.setDefaultIsm(_module), + ); } return mailbox; diff --git a/typescript/sdk/src/deploy/HyperlaneDeployer.ts b/typescript/sdk/src/deploy/HyperlaneDeployer.ts index 7e19acfc08..a438a71f3a 100644 --- a/typescript/sdk/src/deploy/HyperlaneDeployer.ts +++ b/typescript/sdk/src/deploy/HyperlaneDeployer.ts @@ -1,10 +1,8 @@ import { Debugger, debug } from 'debug'; -import { Contract, ethers } from 'ethers'; +import { Contract, PopulatedTransaction, ethers } from 'ethers'; import { - Mailbox, MailboxClient, - Mailbox__factory, Ownable, ProxyAdmin, ProxyAdmin__factory, @@ -30,6 +28,7 @@ import { HyperlaneIsmFactory, moduleMatchesConfig, } from '../ism/HyperlaneIsmFactory'; +import { IsmConfig } from '../ism/types'; import { MultiProvider } from '../providers/MultiProvider'; import { MailboxClientConfig } from '../router/types'; import { ChainMap, ChainName } from '../types'; @@ -195,75 +194,90 @@ export abstract class HyperlaneDeployer< } } + protected async configureIsm( + chain: ChainName, + contract: C, + config: IsmConfig, + getIsm: (contract: C) => Promise
, + setIsm: (contract: C, ism: Address) => Promise, + ): Promise { + if (this.options?.ismFactory === undefined) { + throw new Error('No ISM factory provided'); + } + const ismFactory = this.options.ismFactory; + + const configuredIsm = await getIsm(contract); + const matches = await moduleMatchesConfig( + chain, + configuredIsm, + config, + this.multiProvider, + ismFactory.getContracts(chain), + ); + if (!matches) { + await this.runIfOwner(chain, contract, async () => { + const targetIsm = await ismFactory.deploy(chain, config); + this.logger(`Set ISM on ${chain}`); + await this.multiProvider.sendTransaction( + chain, + setIsm(contract, targetIsm.address), + ); + if (targetIsm.address !== (await getIsm(contract))) { + throw new Error(`Set ISM failed on ${chain}`); + } + }); + } + } + + protected async configureHook( + chain: ChainName, + contract: C, + targetHook: Address, + getHook: (contract: C) => Promise
, + setHook: (contract: C, hook: Address) => Promise, + ): Promise { + const configuredHook = await getHook(contract); + if (targetHook !== configuredHook) { + await this.runIfOwner(chain, contract, async () => { + this.logger(`Set hook on ${chain}`); + await this.multiProvider.sendTransaction( + chain, + setHook(contract, targetHook), + ); + if (targetHook !== (await getHook(contract))) { + throw new Error(`Set hook failed on ${chain}`); + } + }); + } + } + protected async initMailboxClient( local: ChainName, client: MailboxClient, config: MailboxClientConfig, ): Promise { this.logger(`Initializing mailbox client (if not already) on ${local}...`); - await this.runIfOwner(local, client, async () => { - const txOverrides = this.multiProvider.getTransactionOverrides(local); - - // set hook if not already set (and configured) - if (config.hook && config.hook !== (await client.hook())) { - this.logger(`Set hook on ${local}`); - await this.multiProvider.handleTx( - local, - client.setHook(config.hook, txOverrides), - ); - } - - let currentIsm = await client.interchainSecurityModule(); - // in case the above returns zero address, fetch the defaultISM from the mailbox - if (currentIsm === ethers.constants.AddressZero) { - const mailbox: Mailbox = Mailbox__factory.connect( - config.mailbox, - client.signer, - ); - currentIsm = await mailbox.defaultIsm(); - } - - // set interchain security module if not already set (and configured) - if (config.interchainSecurityModule) { - let configuredIsm: string; - if (typeof config.interchainSecurityModule === 'string') { - configuredIsm = config.interchainSecurityModule; - } else if (this.options?.ismFactory) { - const matches = await moduleMatchesConfig( - local, - currentIsm, - config.interchainSecurityModule, - this.multiProvider, - this.options.ismFactory.chainMap[local], - ); - if (matches) { - // when the ISM recursively matches the IsmConfig, we don't need to deploy a new ISM - this.logger( - `ISM matches config for chain ${local}, skipping deploy`, - ); - return; - } - const ism = await this.options.ismFactory.deploy( - local, - config.interchainSecurityModule, - ); - configuredIsm = ism.address; - } else { - throw new Error('No ISM factory provided'); - } + if (config.hook) { + await this.configureHook( + local, + client, + config.hook, + (_client) => _client.hook(), + (_client, _hook) => _client.populateTransaction.setHook(_hook), + ); + } - if (!eqAddress(currentIsm, configuredIsm)) { - this.logger( - `Set interchain security module on ${local} at ${configuredIsm}`, - ); + if (config.interchainSecurityModule) { + await this.configureIsm( + local, + client, + config.interchainSecurityModule, + (_client) => _client.interchainSecurityModule(), + (_client, _module) => + _client.populateTransaction.setInterchainSecurityModule(_module), + ); + } - await this.multiProvider.handleTx( - local, - client.setInterchainSecurityModule(configuredIsm, txOverrides), - ); - } - } - }); this.logger(`Connection client on ${local} initialized...`); } @@ -418,7 +432,6 @@ export abstract class HyperlaneDeployer< return implementation; } - this.logger(`Deploying transparent upgradable proxy`); const constructorArgs = proxyConstructorArgs( implementation, proxyAdmin, diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts index f4117735fa..4556f89c59 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts @@ -10,7 +10,7 @@ import { StaticAddressSetFactory, StaticAggregationIsm__factory, StaticThresholdAddressSetFactory, - TestMultisigIsm__factory, + TestIsm__factory, } from '@hyperlane-xyz/core'; import { Address, eqAddress, formatMessage, warn } from '@hyperlane-xyz/utils'; @@ -108,8 +108,13 @@ export class HyperlaneIsmFactory extends HyperlaneApp { } else if (config.type === ModuleType.AGGREGATION) { this.logger(`Deploying Aggregation ISM to ${chain}`); contract = await this.deployAggregationIsm(chain, config, origin); - } else if (config.type === ModuleType.TEST_ISM) { - contract = await this.deployTestIsm(chain); + } else if (config.type === ModuleType.NULL) { + this.logger(`Deploying Test ISM to ${chain}`); + contract = await this.multiProvider.handleDeploy( + chain, + new TestIsm__factory(), + [], + ); } else { throw new Error(`Unsupported ISM type`); } @@ -217,13 +222,6 @@ export class HyperlaneIsmFactory extends HyperlaneApp { return IAggregationIsm__factory.connect(address, signer); } - private async deployTestIsm(chain: ChainName) { - const signer = this.multiProvider.getSigner(chain); - const factory = new TestMultisigIsm__factory(signer); - const contract = await factory.deploy(); - return contract; - } - async deployStaticAddressSet( chain: ChainName, factory: StaticThresholdAddressSetFactory | StaticAddressSetFactory, @@ -365,7 +363,7 @@ export async function moduleCanCertainlyVerify( } return verified >= destModule.threshold; } - case ModuleType.TEST_ISM: { + case ModuleType.NULL: { return true; } } @@ -485,6 +483,11 @@ export async function moduleMatchesConfig( } break; } + case ModuleType.NULL: { + // This is just a TestISM + matches = true; + break; + } default: { throw new Error('Unsupported ModuleType'); } @@ -526,7 +529,7 @@ export function collectValidators( aggregatedValidators.forEach((set) => { validators = validators.concat([...set]); }); - } else if (config.type === ModuleType.TEST_ISM) { + } else if (config.type === ModuleType.NULL) { // This is just a TestISM return new Set([]); } else { diff --git a/typescript/sdk/src/ism/types.ts b/typescript/sdk/src/ism/types.ts index 9e9c64758e..ed42fb83fe 100644 --- a/typescript/sdk/src/ism/types.ts +++ b/typescript/sdk/src/ism/types.ts @@ -5,7 +5,7 @@ import { IRoutingIsm, StaticMerkleRootMultisigIsm, StaticMessageIdMultisigIsm, - TestMultisigIsm, + TestIsm, } from '@hyperlane-xyz/core'; import type { Address } from '@hyperlane-xyz/utils'; @@ -18,7 +18,7 @@ export type DeployedIsm = | IRoutingIsm | StaticMessageIdMultisigIsm | StaticMerkleRootMultisigIsm - | TestMultisigIsm; + | TestIsm; export enum ModuleType { UNUSED, @@ -27,7 +27,7 @@ export enum ModuleType { LEGACY_MULTISIG, // DEPRECATED MERKLE_ROOT_MULTISIG, MESSAGE_ID_MULTISIG, - TEST_ISM, + NULL, } export type MultisigConfig = { @@ -39,8 +39,8 @@ export type MultisigIsmConfig = MultisigConfig & { type: ModuleType.MERKLE_ROOT_MULTISIG | ModuleType.MESSAGE_ID_MULTISIG; }; -export type TestMultisigIsmConfig = MultisigConfig & { - type: ModuleType.TEST_ISM; +export type TestIsmConfig = { + type: ModuleType.NULL; }; export type RoutingIsmConfig = { @@ -60,4 +60,4 @@ export type IsmConfig = | RoutingIsmConfig | MultisigIsmConfig | AggregationIsmConfig - | TestMultisigIsmConfig; + | TestIsmConfig; diff --git a/typescript/sdk/src/providers/MultiProvider.ts b/typescript/sdk/src/providers/MultiProvider.ts index a7f26ea5bd..bef14b9994 100644 --- a/typescript/sdk/src/providers/MultiProvider.ts +++ b/typescript/sdk/src/providers/MultiProvider.ts @@ -369,9 +369,9 @@ export class MultiProvider extends ChainMetadataManager { */ async sendTransaction( chainNameOrId: ChainName | number, - tx: PopulatedTransaction, + tx: PopulatedTransaction | Promise, ): Promise { - const txReq = await this.prepareTx(chainNameOrId, tx); + const txReq = await this.prepareTx(chainNameOrId, await tx); const signer = this.getSigner(chainNameOrId); const response = await signer.sendTransaction(txReq); this.logger(`Sent tx ${response.hash}`); diff --git a/typescript/sdk/src/test/testUtils.ts b/typescript/sdk/src/test/testUtils.ts index f75b64d89d..d997429781 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, TestMultisigIsmConfig } from '../ism/types'; +import { ModuleType } from '../ism/types'; import { RouterConfig } from '../router/types'; import { ChainMap, ChainName } from '../types'; @@ -44,53 +44,28 @@ export function createRouterConfigMap( const nonZeroAddress = ethers.constants.AddressZero.replace('00', '01'); // dummy config as TestInbox and TestOutbox do not use deployed ISM -export function testCoreConfig(chains: ChainName[]): ChainMap { - const multisigIsm: TestMultisigIsmConfig = { - type: ModuleType.TEST_ISM, - validators: [nonZeroAddress], - threshold: 1, - }; - - const config: ChainMap = Object.fromEntries( - chains.map((local) => [ - local, - { - owner: nonZeroAddress, - defaultIsm: { - type: ModuleType.ROUTING, - owner: nonZeroAddress, - domains: Object.fromEntries( - chains - .filter((c) => c !== local) - .map((remote) => [remote, multisigIsm]), - ), - }, - defaultHook: { - type: HookType.MERKLE_TREE, - }, - requiredHook: { - type: HookType.PROTOCOL_FEE, - maxProtocolFee: ethers.utils.parseUnits('1', 'gwei'), // 1 gwei of native token - protocolFee: BigNumber.from(1), // 1 wei - beneficiary: nonZeroAddress, - owner: nonZeroAddress, - }, - }, - ]), - ); - - // test partial timelock config - config.test3.upgrade = { - timelock: { - delay: 100, - roles: { - executor: nonZeroAddress, - proposer: nonZeroAddress, - }, +export function testCoreConfig( + chains: ChainName[], + owner = nonZeroAddress, +): ChainMap { + const chainConfig: CoreConfig = { + owner, + defaultIsm: { + type: ModuleType.NULL, + }, + defaultHook: { + type: HookType.MERKLE_TREE, + }, + requiredHook: { + type: HookType.PROTOCOL_FEE, + maxProtocolFee: ethers.utils.parseUnits('1', 'gwei'), // 1 gwei of native token + protocolFee: BigNumber.from(1), // 1 wei + beneficiary: nonZeroAddress, + owner, }, }; - return config; + return Object.fromEntries(chains.map((local) => [local, chainConfig])); } // A mock CoinGecko intended to be used by tests From e90ae5a0d372ab3423fe025f01eea368a6a8c120 Mon Sep 17 00:00:00 2001 From: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Date: Mon, 23 Oct 2023 21:00:03 -0400 Subject: [PATCH 06/15] Remediate Trevor's comments (#2835) Co-authored-by: Yorke Rhodes --- solidity/contracts/hooks/MerkleTreeHook.sol | 8 + solidity/contracts/hooks/OPStackHook.sol | 9 +- solidity/contracts/hooks/PausableHook.sol | 8 + .../contracts/hooks/StaticProtocolFee.sol | 6 + .../hooks/aggregation/ERC5164Hook.sol | 12 +- .../aggregation/StaticAggregationHook.sol | 5 + .../hooks/igp/InterchainGasPaymaster.sol | 5 + .../hooks/libs/AbstractMessageIdAuthHook.sol | 14 +- .../hooks/routing/DomainRoutingHook.sol | 11 +- .../routing/FallbackDomainRoutingHook.sol | 16 +- .../interfaces/hooks/IPostDispatchHook.sol | 17 ++ .../hook/AbstractMessageIdAuthorizedIsm.sol | 29 ++-- solidity/contracts/isms/hook/OPStackIsm.sol | 3 +- .../contracts/test/TestPostDispatchHook.sol | 8 + solidity/test/MerkleTreeHook.t.sol | 5 + solidity/test/hooks/AggregationHook.t.sol | 6 + solidity/test/hooks/DomainRoutingHook.t.sol | 12 ++ solidity/test/hooks/StaticProtocolFee.t.sol | 5 + .../test/igps/InterchainGasPaymaster.t.sol | 8 + solidity/test/isms/ERC5164ISM.t.sol | 19 ++- solidity/test/isms/OPStackIsm.t.sol | 152 +++++++++--------- 21 files changed, 243 insertions(+), 115 deletions(-) diff --git a/solidity/contracts/hooks/MerkleTreeHook.sol b/solidity/contracts/hooks/MerkleTreeHook.sol index e54ae61d29..5af7e47aec 100644 --- a/solidity/contracts/hooks/MerkleTreeHook.sol +++ b/solidity/contracts/hooks/MerkleTreeHook.sol @@ -17,6 +17,7 @@ import {MerkleLib} from "../libs/Merkle.sol"; import {Message} from "../libs/Message.sol"; import {MailboxClient} from "../client/MailboxClient.sol"; import {Indexed} from "../libs/Indexed.sol"; +import {IPostDispatchHook} from "../interfaces/hooks/IPostDispatchHook.sol"; import {AbstractPostDispatchHook} from "./libs/AbstractPostDispatchHook.sol"; import {StandardHookMetadata} from "./libs/StandardHookMetadata.sol"; @@ -49,6 +50,13 @@ contract MerkleTreeHook is AbstractPostDispatchHook, MailboxClient, Indexed { return (root(), count() - 1); } + // ============ External Functions ============ + + /// @inheritdoc IPostDispatchHook + function hookType() external pure override returns (uint8) { + return uint8(IPostDispatchHook.Types.MERKLE_TREE); + } + // ============ Internal Functions ============ /// @inheritdoc AbstractPostDispatchHook diff --git a/solidity/contracts/hooks/OPStackHook.sol b/solidity/contracts/hooks/OPStackHook.sol index 7152a7c84e..02bca6f005 100644 --- a/solidity/contracts/hooks/OPStackHook.sol +++ b/solidity/contracts/hooks/OPStackHook.sol @@ -48,7 +48,7 @@ contract OPStackHook is AbstractMessageIdAuthHook { constructor( address _mailbox, uint32 _destinationDomain, - address _ism, + bytes32 _ism, address _l1Messenger ) AbstractMessageIdAuthHook(_mailbox, _destinationDomain, _ism) { require( @@ -58,8 +58,7 @@ contract OPStackHook is AbstractMessageIdAuthHook { l1Messenger = ICrossDomainMessenger(_l1Messenger); } - // ============ External functions ============ - + // ============ Internal functions ============ function _quoteDispatch(bytes calldata, bytes calldata) internal pure @@ -69,8 +68,6 @@ contract OPStackHook is AbstractMessageIdAuthHook { return 0; // gas subsidized by the L2 } - // ============ Internal functions ============ - /// @inheritdoc AbstractMessageIdAuthHook function _sendMessageId(bytes calldata metadata, bytes memory payload) internal @@ -81,7 +78,7 @@ contract OPStackHook is AbstractMessageIdAuthHook { "OPStackHook: msgValue must be less than 2 ** 255" ); l1Messenger.sendMessage{value: metadata.msgValue(0)}( - ism, + TypeCasts.bytes32ToAddress(ism), payload, GAS_LIMIT ); diff --git a/solidity/contracts/hooks/PausableHook.sol b/solidity/contracts/hooks/PausableHook.sol index fe42df4ff3..db4ce85747 100644 --- a/solidity/contracts/hooks/PausableHook.sol +++ b/solidity/contracts/hooks/PausableHook.sol @@ -14,6 +14,7 @@ pragma solidity >=0.8.0; @@@@@@@@@ @@@@@@@@*/ import {StandardHookMetadata} from "../hooks/libs/StandardHookMetadata.sol"; +import {IPostDispatchHook} from "../interfaces/hooks/IPostDispatchHook.sol"; import {AbstractPostDispatchHook} from "./libs/AbstractPostDispatchHook.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; @@ -32,6 +33,13 @@ contract PausableHook is AbstractPostDispatchHook, Ownable, Pausable { _unpause(); } + // ============ External Functions ============ + + /// @inheritdoc IPostDispatchHook + function hookType() external pure override returns (uint8) { + return uint8(IPostDispatchHook.Types.PAUSABLE); + } + // ============ Internal functions ============ /// @inheritdoc AbstractPostDispatchHook diff --git a/solidity/contracts/hooks/StaticProtocolFee.sol b/solidity/contracts/hooks/StaticProtocolFee.sol index d41690d939..15611be408 100644 --- a/solidity/contracts/hooks/StaticProtocolFee.sol +++ b/solidity/contracts/hooks/StaticProtocolFee.sol @@ -17,6 +17,7 @@ pragma solidity >=0.8.0; import {Message} from "../libs/Message.sol"; import {StandardHookMetadata} from "./libs/StandardHookMetadata.sol"; import {AbstractPostDispatchHook} from "./libs/AbstractPostDispatchHook.sol"; +import {IPostDispatchHook} from "../interfaces/hooks/IPostDispatchHook.sol"; // ============ External Imports ============ import {Address} from "@openzeppelin/contracts/utils/Address.sol"; @@ -59,6 +60,11 @@ contract StaticProtocolFee is AbstractPostDispatchHook, Ownable { // ============ External Functions ============ + /// @inheritdoc IPostDispatchHook + function hookType() external pure override returns (uint8) { + return uint8(IPostDispatchHook.Types.PROTOCOL_FEE); + } + /** * @notice Sets the protocol fee. * @param _protocolFee The new protocol fee. diff --git a/solidity/contracts/hooks/aggregation/ERC5164Hook.sol b/solidity/contracts/hooks/aggregation/ERC5164Hook.sol index 17edab8355..89be2fd804 100644 --- a/solidity/contracts/hooks/aggregation/ERC5164Hook.sol +++ b/solidity/contracts/hooks/aggregation/ERC5164Hook.sol @@ -33,7 +33,7 @@ contract ERC5164Hook is AbstractMessageIdAuthHook { constructor( address _mailbox, uint32 _destinationDomain, - address _ism, + bytes32 _ism, address _dispatcher ) AbstractMessageIdAuthHook(_mailbox, _destinationDomain, _ism) { require( @@ -43,13 +43,15 @@ contract ERC5164Hook is AbstractMessageIdAuthHook { dispatcher = IMessageDispatcher(_dispatcher); } + // ============ Internal Functions ============ + function _quoteDispatch(bytes calldata, bytes calldata) internal pure override returns (uint256) { - revert("not implemented"); + return 0; // EIP-5164 doesn't enforce a gas abstraction } function _sendMessageId( @@ -58,6 +60,10 @@ contract ERC5164Hook is AbstractMessageIdAuthHook { bytes memory payload ) internal override { require(msg.value == 0, "ERC5164Hook: no value allowed"); - dispatcher.dispatchMessage(destinationDomain, ism, payload); + dispatcher.dispatchMessage( + destinationDomain, + TypeCasts.bytes32ToAddress(ism), + payload + ); } } diff --git a/solidity/contracts/hooks/aggregation/StaticAggregationHook.sol b/solidity/contracts/hooks/aggregation/StaticAggregationHook.sol index 67e68a13f6..ee7b51383e 100644 --- a/solidity/contracts/hooks/aggregation/StaticAggregationHook.sol +++ b/solidity/contracts/hooks/aggregation/StaticAggregationHook.sol @@ -23,6 +23,11 @@ contract StaticAggregationHook is AbstractPostDispatchHook { // ============ External functions ============ + /// @inheritdoc IPostDispatchHook + function hookType() external pure override returns (uint8) { + return uint8(IPostDispatchHook.Types.AGGREGATION); + } + /// @inheritdoc AbstractPostDispatchHook function _postDispatch(bytes calldata metadata, bytes calldata message) internal diff --git a/solidity/contracts/hooks/igp/InterchainGasPaymaster.sol b/solidity/contracts/hooks/igp/InterchainGasPaymaster.sol index c6cf487db5..d2259ee860 100644 --- a/solidity/contracts/hooks/igp/InterchainGasPaymaster.sol +++ b/solidity/contracts/hooks/igp/InterchainGasPaymaster.sol @@ -92,6 +92,11 @@ contract InterchainGasPaymaster is // ============ External Functions ============ + /// @inheritdoc IPostDispatchHook + function hookType() external pure override returns (uint8) { + return uint8(IPostDispatchHook.Types.INTERCHAIN_GAS_PAYMASTER); + } + /** * @param _owner The owner of the contract. * @param _beneficiary The beneficiary. diff --git a/solidity/contracts/hooks/libs/AbstractMessageIdAuthHook.sol b/solidity/contracts/hooks/libs/AbstractMessageIdAuthHook.sol index 1fad507f71..e606507ca9 100644 --- a/solidity/contracts/hooks/libs/AbstractMessageIdAuthHook.sol +++ b/solidity/contracts/hooks/libs/AbstractMessageIdAuthHook.sol @@ -14,6 +14,7 @@ pragma solidity >=0.8.0; @@@@@@@@@ @@@@@@@@*/ // ============ Internal Imports ============ +import {IPostDispatchHook} from "../../interfaces/hooks/IPostDispatchHook.sol"; import {AbstractPostDispatchHook} from "./AbstractPostDispatchHook.sol"; import {AbstractMessageIdAuthorizedIsm} from "../../isms/hook/AbstractMessageIdAuthorizedIsm.sol"; import {TypeCasts} from "../../libs/TypeCasts.sol"; @@ -35,8 +36,8 @@ abstract contract AbstractMessageIdAuthHook is // ============ Constants ============ - // address for ISM to verify messages - address public immutable ism; + // left-padded address for ISM to verify messages + bytes32 public immutable ism; // Domain of chain on which the ISM is deployed uint32 public immutable destinationDomain; @@ -45,9 +46,9 @@ abstract contract AbstractMessageIdAuthHook is constructor( address _mailbox, uint32 _destinationDomain, - address _ism + bytes32 _ism ) MailboxClient(_mailbox) { - require(_ism != address(0), "AbstractMessageIdAuthHook: invalid ISM"); + require(_ism != bytes32(0), "AbstractMessageIdAuthHook: invalid ISM"); require( _destinationDomain != 0, "AbstractMessageIdAuthHook: invalid destination domain" @@ -56,6 +57,11 @@ abstract contract AbstractMessageIdAuthHook is destinationDomain = _destinationDomain; } + /// @inheritdoc IPostDispatchHook + function hookType() external pure returns (uint8) { + return uint8(IPostDispatchHook.Types.ID_AUTH_ISM); + } + // ============ Internal functions ============ /// @inheritdoc AbstractPostDispatchHook diff --git a/solidity/contracts/hooks/routing/DomainRoutingHook.sol b/solidity/contracts/hooks/routing/DomainRoutingHook.sol index 4b07703b4c..e37e896c81 100644 --- a/solidity/contracts/hooks/routing/DomainRoutingHook.sol +++ b/solidity/contracts/hooks/routing/DomainRoutingHook.sol @@ -42,8 +42,15 @@ contract DomainRoutingHook is AbstractPostDispatchHook, MailboxClient { _transferOwnership(_owner); } - function setHook(uint32 destination, address hook) public onlyOwner { - hooks[destination] = IPostDispatchHook(hook); + // ============ External Functions ============ + + /// @inheritdoc IPostDispatchHook + function hookType() external pure virtual override returns (uint8) { + return uint8(IPostDispatchHook.Types.ROUTING); + } + + function setHook(uint32 _destination, address _hook) public onlyOwner { + hooks[_destination] = IPostDispatchHook(_hook); } function setHooks(HookConfig[] calldata configs) external onlyOwner { diff --git a/solidity/contracts/hooks/routing/FallbackDomainRoutingHook.sol b/solidity/contracts/hooks/routing/FallbackDomainRoutingHook.sol index 4d9fc70d43..31e7603674 100644 --- a/solidity/contracts/hooks/routing/FallbackDomainRoutingHook.sol +++ b/solidity/contracts/hooks/routing/FallbackDomainRoutingHook.sol @@ -36,17 +36,25 @@ contract FallbackDomainRoutingHook is DomainRoutingHook { fallbackHook = IPostDispatchHook(_fallback); } + // ============ External Functions ============ + + /// @inheritdoc IPostDispatchHook + function hookType() external pure override returns (uint8) { + return uint8(IPostDispatchHook.Types.FALLBACK_ROUTING); + } + // ============ Internal Functions ============ function _getConfiguredHook(bytes calldata message) internal view override - returns (IPostDispatchHook hook) + returns (IPostDispatchHook) { - hook = hooks[message.destination()]; - if (address(hook) == address(0)) { - hook = fallbackHook; + IPostDispatchHook _hook = hooks[message.destination()]; + if (address(_hook) == address(0)) { + _hook = fallbackHook; } + return _hook; } } diff --git a/solidity/contracts/interfaces/hooks/IPostDispatchHook.sol b/solidity/contracts/interfaces/hooks/IPostDispatchHook.sol index df571916bb..dc4802a3e3 100644 --- a/solidity/contracts/interfaces/hooks/IPostDispatchHook.sol +++ b/solidity/contracts/interfaces/hooks/IPostDispatchHook.sol @@ -14,6 +14,23 @@ pragma solidity >=0.8.0; @@@@@@@@@ @@@@@@@@*/ interface IPostDispatchHook { + enum Types { + UNUSED, + ROUTING, + AGGREGATION, + MERKLE_TREE, + INTERCHAIN_GAS_PAYMASTER, + FALLBACK_ROUTING, + ID_AUTH_ISM, + PAUSABLE, + PROTOCOL_FEE + } + + /** + * @notice Returns an enum that represents the type of hook + */ + function hookType() external view returns (uint8); + /** * @notice Returns whether the hook supports metadata * @param metadata metadata diff --git a/solidity/contracts/isms/hook/AbstractMessageIdAuthorizedIsm.sol b/solidity/contracts/isms/hook/AbstractMessageIdAuthorizedIsm.sol index 6ad1ab0af5..cdfdc9202c 100644 --- a/solidity/contracts/isms/hook/AbstractMessageIdAuthorizedIsm.sol +++ b/solidity/contracts/isms/hook/AbstractMessageIdAuthorizedIsm.sol @@ -18,7 +18,6 @@ pragma solidity >=0.8.0; import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol"; import {LibBit} from "../../libs/LibBit.sol"; import {Message} from "../../libs/Message.sol"; -import {TypeCasts} from "../../libs/TypeCasts.sol"; // ============ External Imports ============ @@ -46,9 +45,9 @@ abstract contract AbstractMessageIdAuthorizedIsm is /// @dev the first bit is reserved for verification and the rest 255 bits are for the msg.value mapping(bytes32 => uint256) public verifiedMessages; /// @notice Index of verification bit in verifiedMessages - uint256 public constant MASK_INDEX = 255; - /// @notice Address for the authorized hook - address public authorizedHook; + uint256 public constant VERIFIED_MASK_INDEX = 255; + /// @notice address for the authorized hook + bytes32 public authorizedHook; // ============ Events ============ @@ -57,9 +56,9 @@ abstract contract AbstractMessageIdAuthorizedIsm is // ============ Initializer ============ - function setAuthorizedHook(address _hook) external initializer { + function setAuthorizedHook(bytes32 _hook) external initializer { require( - _hook != address(0), + _hook != bytes32(0), "AbstractMessageIdAuthorizedIsm: invalid authorized hook" ); authorizedHook = _hook; @@ -79,12 +78,18 @@ abstract contract AbstractMessageIdAuthorizedIsm is bytes32 messageId = message.id(); // check for the first bit (used for verification) - bool verified = verifiedMessages[messageId].isBitSet(MASK_INDEX); + bool verified = verifiedMessages[messageId].isBitSet( + VERIFIED_MASK_INDEX + ); // rest 255 bits contains the msg.value passed from the hook if (verified) { - payable(message.recipientAddress()).sendValue( - verifiedMessages[messageId].clearBit(MASK_INDEX) + uint256 _msgValue = verifiedMessages[messageId].clearBit( + VERIFIED_MASK_INDEX ); + if (_msgValue > 0) { + verifiedMessages[messageId] -= _msgValue; + payable(message.recipientAddress()).sendValue(_msgValue); + } } return verified; } @@ -99,8 +104,12 @@ abstract contract AbstractMessageIdAuthorizedIsm is _isAuthorized(), "AbstractMessageIdAuthorizedIsm: sender is not the hook" ); + require( + msg.value < 2**VERIFIED_MASK_INDEX, + "AbstractMessageIdAuthorizedIsm: msg.value must be less than 2^255" + ); - verifiedMessages[messageId] = msg.value.setBit(MASK_INDEX); + verifiedMessages[messageId] = msg.value.setBit(VERIFIED_MASK_INDEX); emit ReceivedMessage(messageId); } diff --git a/solidity/contracts/isms/hook/OPStackIsm.sol b/solidity/contracts/isms/hook/OPStackIsm.sol index ba60db08b2..1db350fec1 100644 --- a/solidity/contracts/isms/hook/OPStackIsm.sol +++ b/solidity/contracts/isms/hook/OPStackIsm.sol @@ -52,6 +52,7 @@ contract OPStackIsm is * @notice Check if sender is authorized to message `verifyMessageId`. */ function _isAuthorized() internal view override returns (bool) { - return _crossChainSender() == authorizedHook; + return + _crossChainSender() == TypeCasts.bytes32ToAddress(authorizedHook); } } diff --git a/solidity/contracts/test/TestPostDispatchHook.sol b/solidity/contracts/test/TestPostDispatchHook.sol index ddf357979a..1c50e2049a 100644 --- a/solidity/contracts/test/TestPostDispatchHook.sol +++ b/solidity/contracts/test/TestPostDispatchHook.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 pragma solidity >=0.8.0; +import {IPostDispatchHook} from "../interfaces/hooks/IPostDispatchHook.sol"; import {AbstractPostDispatchHook} from "../hooks/libs/AbstractPostDispatchHook.sol"; contract TestPostDispatchHook is AbstractPostDispatchHook { @@ -9,6 +10,13 @@ contract TestPostDispatchHook is AbstractPostDispatchHook { // test fees for quoteDispatch uint256 public fee = 0; + // ============ External Functions ============ + + /// @inheritdoc IPostDispatchHook + function hookType() external pure override returns (uint8) { + return uint8(IPostDispatchHook.Types.UNUSED); + } + function supportsMetadata(bytes calldata) public pure diff --git a/solidity/test/MerkleTreeHook.t.sol b/solidity/test/MerkleTreeHook.t.sol index 0a86aee5dd..5546523f29 100644 --- a/solidity/test/MerkleTreeHook.t.sol +++ b/solidity/test/MerkleTreeHook.t.sol @@ -7,6 +7,7 @@ import {Message} from "../contracts/libs/Message.sol"; import {TypeCasts} from "../contracts/libs/TypeCasts.sol"; import {TestMerkleTreeHook} from "../contracts/test/TestMerkleTreeHook.sol"; import {TestMailbox} from "../contracts/test/TestMailbox.sol"; +import {IPostDispatchHook} from "../contracts/interfaces/hooks/IPostDispatchHook.sol"; contract MerkleTreeHookTest is Test { using Message for bytes; @@ -68,4 +69,8 @@ contract MerkleTreeHookTest is Test { assertEq(hook.quoteDispatch("", currMessage), 0); } } + + function testHookType() public { + assertEq(hook.hookType(), uint8(IPostDispatchHook.Types.MERKLE_TREE)); + } } diff --git a/solidity/test/hooks/AggregationHook.t.sol b/solidity/test/hooks/AggregationHook.t.sol index fba5d81fa2..a6fa99fff3 100644 --- a/solidity/test/hooks/AggregationHook.t.sol +++ b/solidity/test/hooks/AggregationHook.t.sol @@ -6,6 +6,7 @@ import {Test} from "forge-std/Test.sol"; import {StaticAggregationHook} from "../../contracts/hooks/aggregation/StaticAggregationHook.sol"; import {StaticAggregationHookFactory} from "../../contracts/hooks/aggregation/StaticAggregationHookFactory.sol"; import {TestPostDispatchHook} from "../../contracts/test/TestPostDispatchHook.sol"; +import {IPostDispatchHook} from "../../contracts/interfaces/hooks/IPostDispatchHook.sol"; contract AggregationHookTest is Test { StaticAggregationHookFactory internal factory; @@ -88,4 +89,9 @@ contract AggregationHookTest is Test { address[] memory actualHook = hook.hooks(""); assertEq(actualHook, expectedHooks); } + + function testHookType() public { + deployHooks(1, 0); + assertEq(hook.hookType(), uint8(IPostDispatchHook.Types.AGGREGATION)); + } } diff --git a/solidity/test/hooks/DomainRoutingHook.t.sol b/solidity/test/hooks/DomainRoutingHook.t.sol index d8a3bcddf8..193f227413 100644 --- a/solidity/test/hooks/DomainRoutingHook.t.sol +++ b/solidity/test/hooks/DomainRoutingHook.t.sol @@ -8,6 +8,7 @@ import {DomainRoutingHook} from "../../contracts/hooks/routing/DomainRoutingHook import {FallbackDomainRoutingHook} from "../../contracts/hooks/routing/FallbackDomainRoutingHook.sol"; import {TestPostDispatchHook} from "../../contracts/test/TestPostDispatchHook.sol"; import {TestMailbox} from "../../contracts/test/TestMailbox.sol"; +import {IPostDispatchHook} from "../../contracts/interfaces/hooks/IPostDispatchHook.sol"; import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; @@ -104,6 +105,10 @@ contract DomainRoutingHookTest is Test { vm.expectRevert(); hook.postDispatch(metadata, testMessage); } + + function testHookType() public virtual { + assertEq(hook.hookType(), uint8(IPostDispatchHook.Types.ROUTING)); + } } contract FallbackDomainRoutingHookTest is DomainRoutingHookTest { @@ -162,4 +167,11 @@ contract FallbackDomainRoutingHookTest is DomainRoutingHookTest { ); hook.postDispatch(metadata, testMessage); } + + function testHookType() public override { + assertEq( + hook.hookType(), + uint8(IPostDispatchHook.Types.FALLBACK_ROUTING) + ); + } } diff --git a/solidity/test/hooks/StaticProtocolFee.t.sol b/solidity/test/hooks/StaticProtocolFee.t.sol index 5f225b1aef..7d9456de6f 100644 --- a/solidity/test/hooks/StaticProtocolFee.t.sol +++ b/solidity/test/hooks/StaticProtocolFee.t.sol @@ -5,6 +5,7 @@ import {Test} from "forge-std/Test.sol"; import {TypeCasts} from "../../contracts/libs/TypeCasts.sol"; import {MessageUtils} from "../isms/IsmTestUtils.sol"; import {StandardHookMetadata} from "../../contracts/hooks/libs/StandardHookMetadata.sol"; +import {IPostDispatchHook} from "../../contracts/interfaces/hooks/IPostDispatchHook.sol"; import {StaticProtocolFee} from "../../contracts/hooks/StaticProtocolFee.sol"; @@ -35,6 +36,10 @@ contract StaticProtocolFeeTest is Test { assertEq(fees.protocolFee(), FEE); } + function testHookType() public { + assertEq(fees.hookType(), uint8(IPostDispatchHook.Types.PROTOCOL_FEE)); + } + function testSetProtocolFee(uint256 fee) public { fee = bound(fee, 0, fees.MAX_PROTOCOL_FEE()); fees.setProtocolFee(fee); diff --git a/solidity/test/igps/InterchainGasPaymaster.t.sol b/solidity/test/igps/InterchainGasPaymaster.t.sol index 66eec452f3..aaa8fd3368 100644 --- a/solidity/test/igps/InterchainGasPaymaster.t.sol +++ b/solidity/test/igps/InterchainGasPaymaster.t.sol @@ -11,6 +11,7 @@ import {TypeCasts} from "../../contracts/libs/TypeCasts.sol"; import {InterchainGasPaymaster} from "../../contracts/hooks/igp/InterchainGasPaymaster.sol"; import {StorageGasOracle} from "../../contracts/hooks/igp/StorageGasOracle.sol"; import {IGasOracle} from "../../contracts/interfaces/IGasOracle.sol"; +import {IPostDispatchHook} from "../../contracts/interfaces/hooks/IPostDispatchHook.sol"; contract InterchainGasPaymasterTest is Test { using StandardHookMetadata for bytes; @@ -534,6 +535,13 @@ contract InterchainGasPaymasterTest is Test { assertEq(_igpBalanceAfter - _igpBalanceBefore, _quote); } + function testHookType() public { + assertEq( + igp.hookType(), + uint8(IPostDispatchHook.Types.INTERCHAIN_GAS_PAYMASTER) + ); + } + // ============ claim ============ function testClaim() public { diff --git a/solidity/test/isms/ERC5164ISM.t.sol b/solidity/test/isms/ERC5164ISM.t.sol index a2e04ffa21..4d7ade6427 100644 --- a/solidity/test/isms/ERC5164ISM.t.sol +++ b/solidity/test/isms/ERC5164ISM.t.sol @@ -9,6 +9,8 @@ import {MessageUtils} from "./IsmTestUtils.sol"; import {TypeCasts} from "../../contracts/libs/TypeCasts.sol"; import {IMessageDispatcher} from "../../contracts/interfaces/hooks/IMessageDispatcher.sol"; +import {IPostDispatchHook} from "../../contracts/interfaces/hooks/IPostDispatchHook.sol"; +import {IInterchainSecurityModule} from "../../contracts/interfaces/IInterchainSecurityModule.sol"; import {ERC5164Hook} from "../../contracts/hooks/aggregation/ERC5164Hook.sol"; import {AbstractMessageIdAuthorizedIsm} from "../../contracts/isms/hook/AbstractMessageIdAuthorizedIsm.sol"; import {ERC5164Ism} from "../../contracts/isms/hook/ERC5164Ism.sol"; @@ -63,10 +65,10 @@ contract ERC5164IsmTest is Test { hook = new ERC5164Hook( address(originMailbox), TEST2_DOMAIN, - address(ism), + address(ism).addressToBytes32(), address(dispatcher) ); - ism.setAuthorizedHook(address(hook)); + ism.setAuthorizedHook(TypeCasts.addressToBytes32(address(hook))); } /////////////////////////////////////////////////////////////////// @@ -81,7 +83,7 @@ contract ERC5164IsmTest is Test { hook = new ERC5164Hook( address(0), 0, - address(ism), + address(ism).addressToBytes32(), address(dispatcher) ); @@ -91,7 +93,7 @@ contract ERC5164IsmTest is Test { hook = new ERC5164Hook( address(originMailbox), 0, - address(ism), + address(ism).addressToBytes32(), address(dispatcher) ); @@ -99,7 +101,7 @@ contract ERC5164IsmTest is Test { hook = new ERC5164Hook( address(originMailbox), TEST2_DOMAIN, - address(0), + address(0).addressToBytes32(), address(dispatcher) ); @@ -107,7 +109,7 @@ contract ERC5164IsmTest is Test { hook = new ERC5164Hook( address(originMailbox), TEST2_DOMAIN, - address(ism), + address(ism).addressToBytes32(), address(0) ); } @@ -132,6 +134,11 @@ contract ERC5164IsmTest is Test { hook.postDispatch(bytes(""), encodedMessage); } + function testTypes() public { + assertEq(hook.hookType(), uint8(IPostDispatchHook.Types.ID_AUTH_ISM)); + assertEq(ism.moduleType(), uint8(IInterchainSecurityModule.Types.NULL)); + } + function test_postDispatch_RevertWhen_ChainIDNotSupported() public { encodedMessage = MessageUtils.formatMessage( VERSION, diff --git a/solidity/test/isms/OPStackIsm.t.sol b/solidity/test/isms/OPStackIsm.t.sol index 9541c8aabd..03ace07a37 100644 --- a/solidity/test/isms/OPStackIsm.t.sol +++ b/solidity/test/isms/OPStackIsm.t.sol @@ -97,7 +97,7 @@ contract OPStackIsmTest is Test { opHook = new OPStackHook( address(l1Mailbox), OPTIMISM_DOMAIN, - address(opISM), + TypeCasts.addressToBytes32(address(opISM)), L1_MESSENGER_ADDRESS ); @@ -119,7 +119,7 @@ contract OPStackIsmTest is Test { vm.selectFork(optimismFork); - opISM.setAuthorizedHook(address(opHook)); + opISM.setAuthorizedHook(TypeCasts.addressToBytes32(address(opHook))); // for sending value vm.deal( AddressAliasHelper.applyL1ToL2Alias(L1_MESSENGER_ADDRESS), @@ -299,25 +299,7 @@ contract OPStackIsmTest is Test { vm.selectFork(optimismFork); - bytes memory encodedHookData = abi.encodeCall( - AbstractMessageIdAuthorizedIsm.verifyMessageId, - (messageId) - ); - - (uint240 nonce, uint16 version) = decodeVersionedNonce( - l2Messenger.messageNonce() - ); - uint256 versionedNonce = encodeVersionedNonce(nonce + 1, version); - - vm.prank(AddressAliasHelper.applyL1ToL2Alias(L1_MESSENGER_ADDRESS)); - l2Messenger.relayMessage( - versionedNonce, - address(opHook), - address(opISM), - 0, - DEFAULT_GAS_LIMIT, - encodedHookData - ); + orchestrateRelayMessage(0, messageId); bool verified = opISM.verify(new bytes(0), encodedMessage); assertTrue(verified); @@ -328,60 +310,61 @@ contract OPStackIsmTest is Test { _msgValue = bound(_msgValue, 0, 2**254); deployAll(); - vm.selectFork(optimismFork); + orchestrateRelayMessage(_msgValue, messageId); - bytes memory encodedHookData = abi.encodeCall( - AbstractMessageIdAuthorizedIsm.verifyMessageId, - (messageId) - ); + bool verified = opISM.verify(new bytes(0), encodedMessage); + assertTrue(verified); - (uint240 nonce, uint16 version) = decodeVersionedNonce( - l2Messenger.messageNonce() - ); - uint256 versionedNonce = encodeVersionedNonce(nonce + 1, version); + assertEq(address(opISM).balance, 0); + assertEq(address(testRecipient).balance, _msgValue); + } - vm.prank(AddressAliasHelper.applyL1ToL2Alias(L1_MESSENGER_ADDRESS)); - l2Messenger.relayMessage{value: _msgValue}( - versionedNonce, - address(opHook), - address(opISM), - _msgValue, - DEFAULT_GAS_LIMIT, - encodedHookData - ); + /// forge-config: default.fuzz.runs = 10 + function testFork_verify_valueAlreadyClaimed(uint256 _msgValue) public { + _msgValue = bound(_msgValue, 0, 2**254); + deployAll(); + + orchestrateRelayMessage(_msgValue, messageId); bool verified = opISM.verify(new bytes(0), encodedMessage); assertTrue(verified); assertEq(address(opISM).balance, 0); assertEq(address(testRecipient).balance, _msgValue); + + // send more value to the ISM + vm.deal(address(opISM), _msgValue); + + verified = opISM.verify(new bytes(0), encodedMessage); + // verified still true + assertTrue(verified); + + assertEq(address(opISM).balance, _msgValue); + // value which was already sent + assertEq(address(testRecipient).balance, _msgValue); } - // sending over invalid message - function testFork_verify_RevertWhen_HyperlaneInvalidMessage() public { + function testFork_verify_tooMuchValue() public { deployAll(); - vm.selectFork(optimismFork); + uint256 _msgValue = 2**255 + 1; - bytes memory encodedHookData = abi.encodeCall( - AbstractMessageIdAuthorizedIsm.verifyMessageId, - (messageId) - ); + vm.expectEmit(false, false, false, false, address(l2Messenger)); + emit FailedRelayedMessage(messageId); + orchestrateRelayMessage(_msgValue, messageId); - (uint240 nonce, uint16 version) = decodeVersionedNonce( - l2Messenger.messageNonce() - ); - uint256 versionedNonce = encodeVersionedNonce(nonce + 1, version); + bool verified = opISM.verify(new bytes(0), encodedMessage); + assertFalse(verified); - vm.prank(AddressAliasHelper.applyL1ToL2Alias(L1_MESSENGER_ADDRESS)); - l2Messenger.relayMessage( - versionedNonce, - address(opHook), - address(opISM), - 0, - DEFAULT_GAS_LIMIT, - encodedHookData - ); + assertEq(address(opISM).balance, 0); + assertEq(address(testRecipient).balance, 0); + } + + // sending over invalid message + function testFork_verify_RevertWhen_HyperlaneInvalidMessage() public { + deployAll(); + + orchestrateRelayMessage(0, messageId); bytes memory invalidMessage = MessageUtils.formatMessage( HYPERLANE_VERSION, @@ -411,26 +394,7 @@ contract OPStackIsmTest is Test { testMessage ); bytes32 _messageId = Message.id(invalidMessage); - - bytes memory encodedHookData = abi.encodeCall( - AbstractMessageIdAuthorizedIsm.verifyMessageId, - (_messageId) - ); - - (uint240 nonce, uint16 version) = decodeVersionedNonce( - l2Messenger.messageNonce() - ); - uint256 versionedNonce = encodeVersionedNonce(nonce + 1, version); - - vm.prank(AddressAliasHelper.applyL1ToL2Alias(L1_MESSENGER_ADDRESS)); - l2Messenger.relayMessage( - versionedNonce, - address(opHook), - address(opISM), - 0, - DEFAULT_GAS_LIMIT, - encodedHookData - ); + orchestrateRelayMessage(0, _messageId); bool verified = opISM.verify(new bytes(0), encodedMessage); assertFalse(verified); @@ -548,4 +512,34 @@ contract OPStackIsmTest is Test { } return (nonce, version); } + + function orchestrateRelayMessage(uint256 _msgValue, bytes32 _messageId) + internal + { + vm.selectFork(optimismFork); + + bytes memory encodedHookData = abi.encodeCall( + AbstractMessageIdAuthorizedIsm.verifyMessageId, + (_messageId) + ); + + (uint240 nonce, uint16 version) = decodeVersionedNonce( + l2Messenger.messageNonce() + ); + uint256 versionedNonce = encodeVersionedNonce(nonce + 1, version); + + vm.deal( + AddressAliasHelper.applyL1ToL2Alias(L1_MESSENGER_ADDRESS), + 2**256 - 1 + ); + vm.prank(AddressAliasHelper.applyL1ToL2Alias(L1_MESSENGER_ADDRESS)); + l2Messenger.relayMessage{value: _msgValue}( + versionedNonce, + address(opHook), + address(opISM), + _msgValue, + DEFAULT_GAS_LIMIT, + encodedHookData + ); + } } From 3efaafb8d4ff42dc24d207021dd09e222a2a22e1 Mon Sep 17 00:00:00 2001 From: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Date: Mon, 23 Oct 2023 23:29:42 -0400 Subject: [PATCH 07/15] Testnet4 kathy fixes (#2833) ### Description - removing `.relayers` from `Values.hyperlane.chains` in external secrets - redeploying helloworld on `goerli,sepolia,bsctestnet` and running kathy on k8s ### Drive-by changes none ### Related issues none ### Backward compatibility yes ### Testing Manual --- .../config/environments/testnet4/helloworld.ts | 4 ++-- .../helloworld/hyperlane/addresses.json | 18 +++++++++--------- .../helloworld/hyperlane/verification.json | 18 ++++++++++++++++++ .../templates/external-secret.yaml | 4 ++-- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/typescript/infra/config/environments/testnet4/helloworld.ts b/typescript/infra/config/environments/testnet4/helloworld.ts index 2cb293020f..ba1968ba5c 100644 --- a/typescript/infra/config/environments/testnet4/helloworld.ts +++ b/typescript/infra/config/environments/testnet4/helloworld.ts @@ -13,7 +13,7 @@ export const hyperlaneHelloworld: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '5601743-20231007-124637', + tag: '65ac90a-20231020-192335', }, chainsToSkip: [], runEnv: environment, @@ -33,7 +33,7 @@ export const releaseCandidateHelloworld: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '5601743-20231007-124637', + tag: '65ac90a-20231020-192335', }, chainsToSkip: [], runEnv: environment, diff --git a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json index 445ec7c24a..00719dfd49 100644 --- a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json +++ b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json @@ -17,22 +17,22 @@ "polygonzkevmtestnet": { "router": "0x783c4a0bB6663359281aD4a637D5af68F83ae213" }, - "sepolia": { - "router": "0xE14FE2a74Ba1E1bD0EE14B780e58fCcc3c95C013" - }, "fuji": { "router": "0x0B1C1B54f45e02552331D3106e71f5e0b573D5D4" }, - "bsctestnet": { - "router": "0xd0e07a58BC91a686235E542350E63211C7A34c17" - }, - "goerli": { - "router": "0x33AA9cFBC7E222B3eC231EcAa58dd846cC393C28" - }, "moonbasealpha": { "router": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f" }, "mumbai": { "router": "0x04980C17e2CE26578C82f81207e706e4505FaE3B" + }, + "sepolia": { + "router": "0x37590302D4E60fbCAdF708E8Fc1DCd903a5880F8" + }, + "bsctestnet": { + "router": "0xEF6DE81100B9314B45A1bdfA5C9148aFC4DdbDeE" + }, + "goerli": { + "router": "0x31b6a75ef30C8612738CC55eA3CB2d5DD3694DC7" } } diff --git a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json index 263f67923f..06f1f6badf 100644 --- a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json +++ b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json @@ -137,6 +137,12 @@ "address": "0xd0e07a58BC91a686235E542350E63211C7A34c17", "constructorArguments": "00000000000000000000000089280d0b68a246b276a910a518531e2a861ceb650000000000000000000000000000000000000000000000000000000000000000", "isProxy": false + }, + { + "name": "Router", + "address": "0xEF6DE81100B9314B45A1bdfA5C9148aFC4DdbDeE", + "constructorArguments": "000000000000000000000000f9f6f5646f478d5ab4e20b0f910c92f1ccc9cc6d0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "goerli": [ @@ -169,6 +175,12 @@ "address": "0x33AA9cFBC7E222B3eC231EcAa58dd846cC393C28", "constructorArguments": "000000000000000000000000c4796aabce2a9d774ce4603f5db5fb1605791dbd0000000000000000000000000000000000000000000000000000000000000000", "isProxy": false + }, + { + "name": "Router", + "address": "0x31b6a75ef30C8612738CC55eA3CB2d5DD3694DC7", + "constructorArguments": "00000000000000000000000049cfd6ef774acab14814d699e3f7ee36fdfba9320000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "moonbasealpha": [ @@ -315,6 +327,12 @@ "address": "0xE14FE2a74Ba1E1bD0EE14B780e58fCcc3c95C013", "constructorArguments": "00000000000000000000000033abaf6708be03bdf0595da0745a7111b01db8c70000000000000000000000000000000000000000000000000000000000000000", "isProxy": false + }, + { + "name": "Router", + "address": "0x37590302D4E60fbCAdF708E8Fc1DCd903a5880F8", + "constructorArguments": "000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec28847660000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "basegoerli": [ diff --git a/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml b/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml index dff0d47979..fff9c8d56f 100644 --- a/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml +++ b/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml @@ -31,7 +31,7 @@ spec: * The templating of external-secrets will use the data section below to know how * to replace the correct value in the created secret. */}} - {{- range .Values.hyperlane.chains.relayer }} + {{- range .Values.hyperlane.chains }} {{- if or (eq $.Values.hyperlane.connectionType "httpQuorum") (eq $.Values.hyperlane.connectionType "httpFallback") }} GCP_SECRET_OVERRIDE_{{ $.Values.hyperlane.runEnv | upper }}_RPC_ENDPOINTS_{{ . | upper }}: {{ printf "'{{ .%s_rpcs | toString }}'" . }} {{- else }} @@ -50,7 +50,7 @@ spec: * For each network, load the secret in GCP secret manager with the form: environment-rpc-endpoint-network, * and associate it with the secret key networkname_rpc. */}} - {{- range .Values.hyperlane.chains.relayer }} + {{- range .Values.hyperlane.chains }} {{- if or (eq $.Values.hyperlane.connectionType "httpQuorum") (eq $.Values.hyperlane.connectionType "httpFallback") }} - secretKey: {{ printf "%s_rpcs" . }} remoteRef: From 88346bfb64f600267e3e90f628f45bc28e2d61ad Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Tue, 24 Oct 2023 14:56:48 +0100 Subject: [PATCH 08/15] Rm finality blocks and refactor checkpoint_submitter to be resilient to edge cases (#2836) ### Description * https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/532 wasn't actually fully closed out - finality_blocks was used still for indexing. Sadly testnet4 infra wasn't configuring finality blocks anymore, so we weren't indexing only finalized blocks. Moved fully to reorg_period * Refactored `checkpoint_submitter` in light of races revealed by the above ^ problem. It used to assume that message indexing and the `latest_checkpoint()` call would align with one another, and wasn't resilient to the tree already being past the correctness checkpoint. A couple situations were possible before that aren't now: a. Indexing is ahead of the latest_checkpoint() call, which will result in tree ingesting the new indexed messages and the tree being ahead of the correctness checkpoint :( b. It's possible for the tree() call that constructs the tree initially to be made against a block that's after the next latest_checkpoint() call, which would result in the tree being ahead of the correctness checkpoint from the very beginning :( ### Drive-by changes removed a function that wasn't being used anymore ### Related issues https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/532 ### Backward compatibility Removes finality blocks entirely ### Testing Builds, e2e --- rust/agents/relayer/src/msg/processor.rs | 2 +- rust/agents/validator/src/submit.rs | 237 ++++++++++++------ rust/agents/validator/src/validator.rs | 14 +- .../hyperlane-ethereum/src/interchain_gas.rs | 12 +- rust/chains/hyperlane-ethereum/src/mailbox.rs | 16 +- .../src/merkle_tree_hook.rs | 12 +- .../src/db/rocks/hyperlane_db.rs | 18 -- rust/hyperlane-base/src/settings/chains.rs | 12 +- .../hyperlane-base/src/settings/parser/mod.rs | 6 +- 9 files changed, 194 insertions(+), 135 deletions(-) diff --git a/rust/agents/relayer/src/msg/processor.rs b/rust/agents/relayer/src/msg/processor.rs index 56b5bd0174..4da358cda4 100644 --- a/rust/agents/relayer/src/msg/processor.rs +++ b/rust/agents/relayer/src/msg/processor.rs @@ -229,7 +229,7 @@ mod test { ChainConf { domain: domain.clone(), signer: Default::default(), - finality_blocks: Default::default(), + reorg_period: Default::default(), addresses: Default::default(), connection: ChainConnectionConf::Ethereum(hyperlane_ethereum::ConnectionConf::Http { url: "http://example.com".parse().unwrap(), diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index d587c5a606..c812c41343 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -58,33 +58,92 @@ impl ValidatorSubmitter { } } - #[instrument(err, skip(self, tree), fields(domain=%self.merkle_tree_hook.domain()))] - pub(crate) async fn checkpoint_submitter( + /// Submits signed checkpoints from index 0 until the target checkpoint (inclusive). + /// Runs idly forever once the target checkpoint is reached to avoid exiting the task. + #[instrument(err, skip(self), fields(domain=%self.merkle_tree_hook.domain()))] + pub(crate) async fn backfill_checkpoint_submitter( self, - mut tree: IncrementalMerkle, - target_checkpoint: Option, + target_checkpoint: Checkpoint, ) -> Result<()> { - let mut checkpoint_queue = vec![]; + let mut tree = IncrementalMerkle::default(); + self.submit_checkpoints_until_correctness_checkpoint(&mut tree, &target_checkpoint) + .await?; - let mut reached_target = false; + info!( + ?target_checkpoint, + "Backfill checkpoint submitter successfully reached target checkpoint" + ); - while !reached_target { - let correctness_checkpoint = if let Some(c) = target_checkpoint { - c - } else { - // lag by reorg period to match message indexing - let latest_checkpoint = self - .merkle_tree_hook - .latest_checkpoint(self.reorg_period) - .await?; - self.metrics - .latest_checkpoint_observed - .set(latest_checkpoint.index as i64); - latest_checkpoint - }; + // TODO: remove this once validator is tolerant of tasks exiting. + loop { + sleep(Duration::from_secs(u64::MAX)).await; + } + } + + /// Submits signed checkpoints indefinitely, starting from the `tree`. + #[instrument(err, skip(self, tree), fields(domain=%self.merkle_tree_hook.domain()))] + pub(crate) async fn checkpoint_submitter(self, mut tree: IncrementalMerkle) -> Result<()> { + loop { + // Lag by reorg period because this is our correctness checkpoint. + let latest_checkpoint = self + .merkle_tree_hook + .latest_checkpoint(self.reorg_period) + .await?; + self.metrics + .latest_checkpoint_observed + .set(latest_checkpoint.index as i64); + + // This may occur e.g. if RPC providers are unreliable and make calls against + // inconsistent block tips. + // + // In this case, we just sleep a bit until we fetch a new latest checkpoint + // that at least meets the tree. + if tree_exceeds_checkpoint(&latest_checkpoint, &tree) { + debug!( + ?latest_checkpoint, + tree_count = tree.count(), + "Latest checkpoint is behind tree, sleeping briefly" + ); + sleep(self.interval).await; + continue; + } - // ingest available messages from DB - while let Some(insertion) = self + self.submit_checkpoints_until_correctness_checkpoint(&mut tree, &latest_checkpoint) + .await?; + + self.metrics + .latest_checkpoint_processed + .set(latest_checkpoint.index as i64); + + sleep(self.interval).await; + } + } + + /// Submits signed checkpoints relating to the given tree until the correctness checkpoint (inclusive). + /// Only submits the signed checkpoints once the correctness checkpoint is reached. + async fn submit_checkpoints_until_correctness_checkpoint( + &self, + tree: &mut IncrementalMerkle, + correctness_checkpoint: &Checkpoint, + ) -> Result<()> { + // This should never be called with a tree that is ahead of the correctness checkpoint. + assert!( + !tree_exceeds_checkpoint(correctness_checkpoint, tree), + "tree (count: {}) is ahead of correctness checkpoint {:?}", + tree.count(), + correctness_checkpoint, + ); + + // All intermediate checkpoints will be stored here and signed once the correctness + // checkpoint is reached. + let mut checkpoint_queue = vec![]; + + // If the correctness checkpoint is ahead of the tree, we need to ingest more messages. + // + // tree.index() will panic if the tree is empty, so we use tree.count() instead + // and convert the correctness_checkpoint.index to a count by adding 1. + while correctness_checkpoint.index + 1 > tree.count() as u32 { + if let Some(insertion) = self .message_db .retrieve_merkle_tree_insertion_by_leaf_index(&(tree.count() as u32))? { @@ -96,76 +155,85 @@ impl ValidatorSubmitter { let message_id = insertion.message_id(); tree.ingest(message_id); - let checkpoint = self.checkpoint(&tree); + let checkpoint = self.checkpoint(tree); checkpoint_queue.push(CheckpointWithMessageId { checkpoint, message_id, }); + } else { + // If we haven't yet indexed the next merkle tree insertion but know that + // it will soon exist (because we know the correctness checkpoint), wait a bit and + // try again. + sleep(Duration::from_millis(100)).await + } + } - if checkpoint.index == correctness_checkpoint.index { - // We got to the right height, now lets compare whether we got the right tree - if checkpoint.root != correctness_checkpoint.root { - // Bad news, bail - error!( - ?checkpoint, - ?correctness_checkpoint, - "Incorrect tree root, something went wrong" - ); - bail!("Incorrect tree root, something went wrong"); - } - } + // At this point we know that correctness_checkpoint.index == tree.index(). + assert_eq!( + correctness_checkpoint.index, + tree.index(), + "correctness checkpoint index {} != tree index {}", + correctness_checkpoint.index, + tree.index(), + ); + + let checkpoint = self.checkpoint(tree); + + // If the tree's checkpoint doesn't match the correctness checkpoint, something went wrong + // and we bail loudly. + if checkpoint != *correctness_checkpoint { + error!( + ?checkpoint, + ?correctness_checkpoint, + "Incorrect tree root, something went wrong" + ); + bail!("Incorrect tree root, something went wrong"); + } - // compare against every queued checkpoint to prevent ingesting past target - if checkpoint == correctness_checkpoint { - debug!(index = checkpoint.index, "Reached tree consistency"); - - // drain and sign all checkpoints in the queue - for queued_checkpoint in checkpoint_queue.drain(..) { - let existing = self - .checkpoint_syncer - .fetch_checkpoint(queued_checkpoint.index) - .await?; - if existing.is_some() { - debug!( - index = queued_checkpoint.index, - "Checkpoint already submitted" - ); - continue; - } - - let signed_checkpoint = self.signer.sign(queued_checkpoint).await?; - self.checkpoint_syncer - .write_checkpoint(&signed_checkpoint) - .await?; - debug!( - index = queued_checkpoint.index, - "Signed and submitted checkpoint" - ); - - // small sleep before signing next checkpoint to avoid rate limiting - sleep(Duration::from_millis(100)).await; - } - - info!(index = checkpoint.index, "Signed all queued checkpoints"); - - self.metrics - .latest_checkpoint_processed - .set(checkpoint.index as i64); - - // break out of submitter loop if target checkpoint is reached - reached_target = target_checkpoint.is_some(); - break; - } + debug!(index = checkpoint.index, "Reached tree consistency"); + + self.sign_and_submit_checkpoints(checkpoint_queue).await?; + + info!( + index = checkpoint.index, + "Signed all queued checkpoints until index" + ); + + Ok(()) + } + + /// Signs and submits any previously unsubmitted checkpoints. + async fn sign_and_submit_checkpoints( + &self, + checkpoints: Vec, + ) -> Result<()> { + for queued_checkpoint in checkpoints { + let existing = self + .checkpoint_syncer + .fetch_checkpoint(queued_checkpoint.index) + .await?; + if existing.is_some() { + debug!( + index = queued_checkpoint.index, + "Checkpoint already submitted" + ); + continue; } - sleep(self.interval).await; - } + let signed_checkpoint = self.signer.sign(queued_checkpoint).await?; + self.checkpoint_syncer + .write_checkpoint(&signed_checkpoint) + .await?; + debug!( + index = queued_checkpoint.index, + "Signed and submitted checkpoint" + ); - // TODO: remove this once validator is tolerant of tasks exiting - loop { - sleep(Duration::from_secs(u64::MAX)).await; + // small sleep before signing next checkpoint to avoid rate limiting + sleep(Duration::from_millis(100)).await; } + Ok(()) } pub(crate) async fn legacy_checkpoint_submitter(self) -> Result<()> { @@ -249,6 +317,13 @@ impl ValidatorSubmitter { } } +/// Returns whether the tree exceeds the checkpoint. +fn tree_exceeds_checkpoint(checkpoint: &Checkpoint, tree: &IncrementalMerkle) -> bool { + // tree.index() will panic if the tree is empty, so we use tree.count() instead + // and convert the correctness_checkpoint.index to a count by adding 1. + checkpoint.index + 1 < tree.count() as u32 +} + #[derive(Clone)] pub(crate) struct ValidatorSubmitterMetrics { latest_checkpoint_observed: IntGauge, diff --git a/rust/agents/validator/src/validator.rs b/rust/agents/validator/src/validator.rs index 96cf8ada8f..f7aa19aea2 100644 --- a/rust/agents/validator/src/validator.rs +++ b/rust/agents/validator/src/validator.rs @@ -10,9 +10,9 @@ use hyperlane_base::{ WatermarkContractSync, }; use hyperlane_core::{ - accumulator::incremental::IncrementalMerkle, Announcement, ChainResult, HyperlaneChain, - HyperlaneContract, HyperlaneDomain, HyperlaneSigner, HyperlaneSignerExt, Mailbox, - MerkleTreeHook, MerkleTreeInsertion, TxOutcome, ValidatorAnnounce, H256, U256, + Announcement, ChainResult, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneSigner, + HyperlaneSignerExt, Mailbox, MerkleTreeHook, MerkleTreeInsertion, TxOutcome, ValidatorAnnounce, + H256, U256, }; use hyperlane_ethereum::{SingletonSigner, SingletonSignerHandle}; use tokio::{task::JoinHandle, time::sleep}; @@ -167,13 +167,15 @@ impl Validator { ValidatorSubmitterMetrics::new(&self.core.metrics, &self.origin_chain), ); - let empty_tree = IncrementalMerkle::default(); let reorg_period = NonZeroU64::new(self.reorg_period); let tip_tree = self .merkle_tree_hook .tree(reorg_period) .await .expect("failed to get merkle tree"); + // This function is only called after we have already checked that the + // merkle tree hook has count > 0, but we assert to be extra sure this is + // the case. assert!(tip_tree.count() > 0, "merkle tree is empty"); let backfill_target = submitter.checkpoint(&tip_tree); @@ -184,14 +186,14 @@ impl Validator { tasks.push( tokio::spawn(async move { backfill_submitter - .checkpoint_submitter(empty_tree, Some(backfill_target)) + .backfill_checkpoint_submitter(backfill_target) .await }) .instrument(info_span!("BackfillCheckpointSubmitter")), ); tasks.push( - tokio::spawn(async move { submitter.checkpoint_submitter(tip_tree, None).await }) + tokio::spawn(async move { submitter.checkpoint_submitter(tip_tree).await }) .instrument(info_span!("TipCheckpointSubmitter")), ); tasks.push( diff --git a/rust/chains/hyperlane-ethereum/src/interchain_gas.rs b/rust/chains/hyperlane-ethereum/src/interchain_gas.rs index 6b4edbc3e1..24b7ae502a 100644 --- a/rust/chains/hyperlane-ethereum/src/interchain_gas.rs +++ b/rust/chains/hyperlane-ethereum/src/interchain_gas.rs @@ -31,7 +31,7 @@ where pub struct InterchainGasPaymasterIndexerBuilder { pub mailbox_address: H160, - pub finality_blocks: u32, + pub reorg_period: u32, } #[async_trait] @@ -46,7 +46,7 @@ impl BuildableWithProvider for InterchainGasPaymasterIndexerBuilder { Box::new(EthereumInterchainGasPaymasterIndexer::new( Arc::new(provider), locator, - self.finality_blocks, + self.reorg_period, )) } } @@ -59,7 +59,7 @@ where { contract: Arc>, provider: Arc, - finality_blocks: u32, + reorg_period: u32, } impl EthereumInterchainGasPaymasterIndexer @@ -67,14 +67,14 @@ where M: Middleware + 'static, { /// Create new EthereumInterchainGasPaymasterIndexer - pub fn new(provider: Arc, locator: &ContractLocator, finality_blocks: u32) -> Self { + pub fn new(provider: Arc, locator: &ContractLocator, reorg_period: u32) -> Self { Self { contract: Arc::new(EthereumInterchainGasPaymasterInternal::new( locator.address, provider.clone(), )), provider, - finality_blocks, + reorg_period, } } } @@ -121,7 +121,7 @@ where .await .map_err(ChainCommunicationError::from_other)? .as_u32() - .saturating_sub(self.finality_blocks)) + .saturating_sub(self.reorg_period)) } } diff --git a/rust/chains/hyperlane-ethereum/src/mailbox.rs b/rust/chains/hyperlane-ethereum/src/mailbox.rs index 390c620302..42fad5d843 100644 --- a/rust/chains/hyperlane-ethereum/src/mailbox.rs +++ b/rust/chains/hyperlane-ethereum/src/mailbox.rs @@ -35,7 +35,7 @@ where } pub struct SequenceIndexerBuilder { - pub finality_blocks: u32, + pub reorg_period: u32, } #[async_trait] @@ -50,13 +50,13 @@ impl BuildableWithProvider for SequenceIndexerBuilder { Box::new(EthereumMailboxIndexer::new( Arc::new(provider), locator, - self.finality_blocks, + self.reorg_period, )) } } pub struct DeliveryIndexerBuilder { - pub finality_blocks: u32, + pub reorg_period: u32, } #[async_trait] @@ -71,7 +71,7 @@ impl BuildableWithProvider for DeliveryIndexerBuilder { Box::new(EthereumMailboxIndexer::new( Arc::new(provider), locator, - self.finality_blocks, + self.reorg_period, )) } } @@ -84,7 +84,7 @@ where { contract: Arc>, provider: Arc, - finality_blocks: u32, + reorg_period: u32, } impl EthereumMailboxIndexer @@ -92,7 +92,7 @@ where M: Middleware + 'static, { /// Create new EthereumMailboxIndexer - pub fn new(provider: Arc, locator: &ContractLocator, finality_blocks: u32) -> Self { + pub fn new(provider: Arc, locator: &ContractLocator, reorg_period: u32) -> Self { let contract = Arc::new(EthereumMailboxInternal::new( locator.address, provider.clone(), @@ -100,7 +100,7 @@ where Self { contract, provider, - finality_blocks, + reorg_period, } } @@ -112,7 +112,7 @@ where .await .map_err(ChainCommunicationError::from_other)? .as_u32() - .saturating_sub(self.finality_blocks)) + .saturating_sub(self.reorg_period)) } } diff --git a/rust/chains/hyperlane-ethereum/src/merkle_tree_hook.rs b/rust/chains/hyperlane-ethereum/src/merkle_tree_hook.rs index cddd91c2e8..3881b03250 100644 --- a/rust/chains/hyperlane-ethereum/src/merkle_tree_hook.rs +++ b/rust/chains/hyperlane-ethereum/src/merkle_tree_hook.rs @@ -52,7 +52,7 @@ impl BuildableWithProvider for MerkleTreeHookBuilder { } pub struct MerkleTreeHookIndexerBuilder { - pub finality_blocks: u32, + pub reorg_period: u32, } #[async_trait] @@ -67,7 +67,7 @@ impl BuildableWithProvider for MerkleTreeHookIndexerBuilder { Box::new(EthereumMerkleTreeHookIndexer::new( Arc::new(provider), locator, - self.finality_blocks, + self.reorg_period, )) } } @@ -80,7 +80,7 @@ where { contract: Arc>, provider: Arc, - finality_blocks: u32, + reorg_period: u32, } impl EthereumMerkleTreeHookIndexer @@ -88,14 +88,14 @@ where M: Middleware + 'static, { /// Create new EthereumMerkleTreeHookIndexer - pub fn new(provider: Arc, locator: &ContractLocator, finality_blocks: u32) -> Self { + pub fn new(provider: Arc, locator: &ContractLocator, reorg_period: u32) -> Self { Self { contract: Arc::new(MerkleTreeHookContract::new( locator.address, provider.clone(), )), provider, - finality_blocks, + reorg_period, } } } @@ -138,7 +138,7 @@ where .await .map_err(ChainCommunicationError::from_other)? .as_u32() - .saturating_sub(self.finality_blocks)) + .saturating_sub(self.reorg_period)) } } diff --git a/rust/hyperlane-base/src/db/rocks/hyperlane_db.rs b/rust/hyperlane-base/src/db/rocks/hyperlane_db.rs index 395e6ec688..4c496d741d 100644 --- a/rust/hyperlane-base/src/db/rocks/hyperlane_db.rs +++ b/rust/hyperlane-base/src/db/rocks/hyperlane_db.rs @@ -1,10 +1,6 @@ -use std::future::Future; -use std::time::Duration; - use async_trait::async_trait; use eyre::Result; use paste::paste; -use tokio::time::sleep; use tracing::{debug, instrument, trace}; use hyperlane_core::{ @@ -108,20 +104,6 @@ impl HyperlaneRocksDB { } } - // TODO(james): this is a quick-fix for the prover_sync and I don't like it - /// poll db ever 100 milliseconds waiting for a leaf. - pub fn wait_for_message_nonce(&self, nonce: u32) -> impl Future> { - let slf = self.clone(); - async move { - loop { - if let Some(id) = slf.retrieve_message_id_by_nonce(&nonce)? { - return Ok(id); - } - sleep(Duration::from_millis(100)).await - } - } - } - /// If the provided gas payment, identified by its metadata, has not been /// processed, processes the gas payment and records it as processed. /// Returns whether the gas payment was processed for the first time. diff --git a/rust/hyperlane-base/src/settings/chains.rs b/rust/hyperlane-base/src/settings/chains.rs index b85cdd18d4..4596d2867c 100644 --- a/rust/hyperlane-base/src/settings/chains.rs +++ b/rust/hyperlane-base/src/settings/chains.rs @@ -32,8 +32,8 @@ pub struct ChainConf { pub domain: HyperlaneDomain, /// Signer configuration for this chain pub signer: Option, - /// Number of blocks until finality - pub finality_blocks: u32, + /// The reorg period of the chain, i.e. the number of blocks until finality + pub reorg_period: u32, /// Addresses of contracts on the chain pub addresses: CoreContractAddresses, /// The chain connection details @@ -188,7 +188,7 @@ impl ChainConf { &locator, metrics, h_eth::SequenceIndexerBuilder { - finality_blocks: self.finality_blocks, + reorg_period: self.reorg_period, }, ) .await @@ -218,7 +218,7 @@ impl ChainConf { &locator, metrics, h_eth::DeliveryIndexerBuilder { - finality_blocks: self.finality_blocks, + reorg_period: self.reorg_period, }, ) .await @@ -280,7 +280,7 @@ impl ChainConf { metrics, h_eth::InterchainGasPaymasterIndexerBuilder { mailbox_address: self.addresses.mailbox.into(), - finality_blocks: self.finality_blocks, + reorg_period: self.reorg_period, }, ) .await @@ -316,7 +316,7 @@ impl ChainConf { &locator, metrics, h_eth::MerkleTreeHookIndexerBuilder { - finality_blocks: self.finality_blocks, + reorg_period: self.reorg_period, }, ) .await diff --git a/rust/hyperlane-base/src/settings/parser/mod.rs b/rust/hyperlane-base/src/settings/parser/mod.rs index ad1af6ea77..cbfe3b2fc3 100644 --- a/rust/hyperlane-base/src/settings/parser/mod.rs +++ b/rust/hyperlane-base/src/settings/parser/mod.rs @@ -125,10 +125,10 @@ fn parse_chain( .and_then(parse_signer) .end(); - let finality_blocks = chain + let reorg_period = chain .chain(&mut err) .get_opt_key("blocks") - .get_key("confirmations") + .get_key("reorgPeriod") .parse_u32() .unwrap_or(1); @@ -263,7 +263,7 @@ fn parse_chain( err.into_result(ChainConf { domain, signer, - finality_blocks, + reorg_period, addresses: CoreContractAddresses { mailbox, interchain_gas_paymaster, From 1aed36bb656ccdb7376ec94d6b6a770175b3290f Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Tue, 24 Oct 2023 16:33:36 +0100 Subject: [PATCH 09/15] Deploy testnet4 agents to include validator signing fix (#2838) ### Description Deploy to include #2836 ### Drive-by changes n/a ### Related issues n/a ### Backward compatibility yes ### Testing deployed --- typescript/infra/config/environments/testnet4/agent.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/typescript/infra/config/environments/testnet4/agent.ts b/typescript/infra/config/environments/testnet4/agent.ts index 5b89cff47d..f3406d1421 100644 --- a/typescript/infra/config/environments/testnet4/agent.ts +++ b/typescript/infra/config/environments/testnet4/agent.ts @@ -49,7 +49,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '65ac90a-20231020-192310', + tag: 'fd890d2-20231024-132022', }, blacklist: [ ...releaseCandidateHelloworldMatchingList, @@ -66,7 +66,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '65ac90a-20231020-192310', + tag: 'fd890d2-20231024-132022', }, chains: validatorChainConfig(Contexts.Hyperlane), }, @@ -74,7 +74,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '65ac90a-20231020-192310', + tag: 'fd890d2-20231024-132022', }, }, }; @@ -87,7 +87,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'cfaf553-20231009-174623', + tag: 'fd890d2-20231024-132022', }, whitelist: [...releaseCandidateHelloworldMatchingList], gasPaymentEnforcement, @@ -100,7 +100,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'cfaf553-20231009-174623', + tag: 'fd890d2-20231024-132022', }, chains: validatorChainConfig(Contexts.ReleaseCandidate), }, From 3501557d38cf122359a90d77609d3b2a4ef26314 Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Wed, 25 Oct 2023 15:51:08 -0400 Subject: [PATCH 10/15] Remove legacy multisig from agents (#2839) Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2837 --- rust/agents/relayer/src/msg/metadata/base.rs | 6 +- .../relayer/src/msg/metadata/multisig/base.rs | 87 ++----- .../msg/metadata/multisig/legacy_multisig.rs | 67 ------ .../metadata/multisig/merkle_root_multisig.rs | 6 +- .../metadata/multisig/message_id_multisig.rs | 30 ++- .../relayer/src/msg/metadata/multisig/mod.rs | 2 - rust/agents/validator/src/submit.rs | 113 ++------- rust/agents/validator/src/validator.rs | 5 - rust/chains/hyperlane-ethereum/src/signers.rs | 17 +- .../hyperlane-ethereum/tests/signer_output.rs | 56 ----- .../src/traits/checkpoint_syncer.rs | 6 +- .../hyperlane-base/src/types/local_storage.rs | 43 +--- rust/hyperlane-base/src/types/multisig.rs | 224 ++---------------- rust/hyperlane-base/src/types/s3_storage.rs | 30 +-- .../src/traits/interchain_security_module.rs | 2 +- rust/hyperlane-core/src/types/checkpoint.rs | 74 +----- 16 files changed, 105 insertions(+), 663 deletions(-) delete mode 100644 rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs diff --git a/rust/agents/relayer/src/msg/metadata/base.rs b/rust/agents/relayer/src/msg/metadata/base.rs index e08faeda72..03da9e3b26 100644 --- a/rust/agents/relayer/src/msg/metadata/base.rs +++ b/rust/agents/relayer/src/msg/metadata/base.rs @@ -19,10 +19,7 @@ use tracing::{debug, info, instrument, warn}; use crate::{ merkle_tree::builder::MerkleTreeBuilder, msg::metadata::{ - multisig::{ - LegacyMultisigMetadataBuilder, MerkleRootMultisigMetadataBuilder, - MessageIdMultisigMetadataBuilder, - }, + multisig::{MerkleRootMultisigMetadataBuilder, MessageIdMultisigMetadataBuilder}, AggregationIsmMetadataBuilder, CcipReadIsmMetadataBuilder, NullMetadataBuilder, RoutingIsmMetadataBuilder, }, @@ -87,7 +84,6 @@ impl MetadataBuilder for BaseMetadataBuilder { let base = self.clone_with_incremented_depth()?; let metadata_builder: Box = match module_type { - ModuleType::LegacyMultisig => Box::new(LegacyMultisigMetadataBuilder::new(base)), ModuleType::MerkleRootMultisig => { Box::new(MerkleRootMultisigMetadataBuilder::new(base)) } diff --git a/rust/agents/relayer/src/msg/metadata/multisig/base.rs b/rust/agents/relayer/src/msg/metadata/multisig/base.rs index a34e4b57b8..cbe6226158 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/base.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/base.rs @@ -1,26 +1,26 @@ -use std::collections::HashMap; use std::fmt::Debug; use async_trait::async_trait; +use derive_more::{AsRef, Deref}; use derive_new::new; use ethers::abi::Token; use eyre::{Context, Result}; use hyperlane_base::MultisigCheckpointSyncer; use hyperlane_core::accumulator::merkle::Proof; -use hyperlane_core::{Checkpoint, HyperlaneMessage, SignatureWithSigner, H256}; +use hyperlane_core::{HyperlaneMessage, MultisigSignedCheckpoint, H256}; use strum::Display; use tracing::{debug, info}; use crate::msg::metadata::BaseMetadataBuilder; use crate::msg::metadata::MetadataBuilder; -#[derive(new)] +#[derive(new, AsRef, Deref)] pub struct MultisigMetadata { - checkpoint: Checkpoint, - signatures: Vec, - merkle_leaf_index: Option, - message_id: Option, + #[deref] + quorum_checkpoint: MultisigSignedCheckpoint, + merkle_leaf_index: u32, + // optional because it's only used for MerkleRootMultisig proof: Option, } @@ -32,9 +32,7 @@ pub enum MetadataToken { MessageId, MerkleProof, MessageMerkleLeafIndex, - Threshold, Signatures, - Validators, } #[async_trait] @@ -49,22 +47,15 @@ pub trait MultisigIsmMetadataBuilder: AsRef + Send + Sync { fn token_layout(&self) -> Vec; - fn format_metadata( - &self, - validators: &[H256], - threshold: u8, - metadata: MultisigMetadata, - ) -> Result> { + fn format_metadata(&self, metadata: MultisigMetadata) -> Result> { let build_token = |token: &MetadataToken| -> Result> { match token { MetadataToken::CheckpointMerkleRoot => { Ok(metadata.checkpoint.root.to_fixed_bytes().into()) } - MetadataToken::MessageMerkleLeafIndex => Ok(metadata - .merkle_leaf_index - .ok_or(eyre::eyre!("Failed to fetch metadata"))? - .to_be_bytes() - .into()), + MetadataToken::MessageMerkleLeafIndex => { + Ok(metadata.merkle_leaf_index.to_be_bytes().into()) + } MetadataToken::CheckpointIndex => { Ok(metadata.checkpoint.index.to_be_bytes().into()) } @@ -74,9 +65,8 @@ pub trait MultisigIsmMetadataBuilder: AsRef + Send + Sync { .to_fixed_bytes() .into()), MetadataToken::MessageId => { - Ok(metadata.message_id.unwrap().to_fixed_bytes().into()) + Ok(metadata.checkpoint.message_id.to_fixed_bytes().into()) } - MetadataToken::Threshold => Ok(Vec::from([threshold])), MetadataToken::MerkleProof => { let proof_tokens: Vec = metadata .proof @@ -87,18 +77,12 @@ pub trait MultisigIsmMetadataBuilder: AsRef + Send + Sync { .collect(); Ok(ethers::abi::encode(&proof_tokens)) } - MetadataToken::Validators => { - let validator_tokens: Vec = validators - .iter() - .map(|x| Token::FixedBytes(x.to_fixed_bytes().into())) - .collect(); - Ok(ethers::abi::encode(&[Token::FixedArray(validator_tokens)])) - } - MetadataToken::Signatures => { - let ordered_signatures = order_signatures(validators, &metadata.signatures); - let threshold_signatures = &ordered_signatures[..threshold as usize]; - Ok(threshold_signatures.concat()) - } + MetadataToken::Signatures => Ok(metadata + .signatures + .iter() + .map(|x| x.to_vec()) + .collect::>() + .concat()), } }; let metas: Result>> = self.token_layout().iter().map(build_token).collect(); @@ -143,11 +127,7 @@ impl MetadataBuilder for T { .context(CTX)? { debug!(?message, ?metadata.checkpoint, "Found checkpoint with quorum"); - Ok(Some(self.format_metadata( - &validators, - threshold, - metadata, - )?)) + Ok(Some(self.format_metadata(metadata)?)) } else { info!( ?message, ?validators, threshold, ism=%multisig_ism.address(), @@ -157,32 +137,3 @@ impl MetadataBuilder for T { } } } - -/// Orders `signatures` by the signers according to the `desired_order`. -/// Returns a Vec of the signature raw bytes in the correct order. -/// Panics if any signers in `signatures` are not present in `desired_order` -fn order_signatures(desired_order: &[H256], signatures: &[SignatureWithSigner]) -> Vec> { - // Signer address => index to sort by - let ordering_map: HashMap = desired_order - .iter() - .enumerate() - .map(|(index, a)| (*a, index)) - .collect(); - - // Create a tuple of (SignatureWithSigner, index to sort by) - let mut ordered_signatures = signatures - .iter() - .cloned() - .map(|s| { - let order_index = ordering_map.get(&H256::from(s.signer)).unwrap(); - (s, *order_index) - }) - .collect::>(); - // Sort by the index - ordered_signatures.sort_by_key(|s| s.1); - // Now collect only the raw signature bytes - ordered_signatures - .into_iter() - .map(|s| s.0.signature.to_vec()) - .collect() -} diff --git a/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs deleted file mode 100644 index 9a97983ace..0000000000 --- a/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs +++ /dev/null @@ -1,67 +0,0 @@ -use std::fmt::Debug; - -use async_trait::async_trait; -use derive_more::{AsRef, Deref}; -use derive_new::new; - -use eyre::{Context, Result}; -use hyperlane_base::MultisigCheckpointSyncer; -use hyperlane_core::{unwrap_or_none_result, HyperlaneMessage, H256}; - -use crate::msg::metadata::BaseMetadataBuilder; - -use super::base::{MetadataToken, MultisigIsmMetadataBuilder, MultisigMetadata}; - -#[derive(Debug, Clone, Deref, new, AsRef)] -pub struct LegacyMultisigMetadataBuilder(BaseMetadataBuilder); - -#[async_trait] -impl MultisigIsmMetadataBuilder for LegacyMultisigMetadataBuilder { - fn token_layout(&self) -> Vec { - vec![ - MetadataToken::CheckpointMerkleRoot, - MetadataToken::CheckpointIndex, - MetadataToken::CheckpointMerkleTreeHook, - MetadataToken::MerkleProof, - MetadataToken::Threshold, - MetadataToken::Signatures, - MetadataToken::Validators, - ] - } - - async fn fetch_metadata( - &self, - validators: &[H256], - threshold: u8, - message: &HyperlaneMessage, - checkpoint_syncer: &MultisigCheckpointSyncer, - ) -> Result> { - const CTX: &str = "When fetching LegacyMultisig metadata"; - unwrap_or_none_result!(highest_leaf_index, self.highest_known_leaf_index().await); - unwrap_or_none_result!( - quorum_checkpoint, - checkpoint_syncer - .legacy_fetch_checkpoint_in_range( - validators, - threshold as usize, - message.nonce, - highest_leaf_index, - ) - .await - .context(CTX)? - ); - unwrap_or_none_result!( - proof, - self.get_proof(message.nonce, quorum_checkpoint.checkpoint) - .await - .context(CTX)? - ); - Ok(Some(MultisigMetadata::new( - quorum_checkpoint.checkpoint, - quorum_checkpoint.signatures, - None, - None, - Some(proof), - ))) - } -} diff --git a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs index 0de09f6b01..4bd1261907 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs @@ -75,10 +75,8 @@ impl MultisigIsmMetadataBuilder for MerkleRootMultisigMetadataBuilder { debug!(leaf_index, checkpoint=?quorum_checkpoint, "Couldn't get proof") ); Ok(Some(MultisigMetadata::new( - quorum_checkpoint.checkpoint.checkpoint, - quorum_checkpoint.signatures, - Some(leaf_index), - Some(quorum_checkpoint.checkpoint.message_id), + quorum_checkpoint, + leaf_index, Some(proof), ))) } diff --git a/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs index 18fb6bee0d..17374d5ea6 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs @@ -22,7 +22,7 @@ impl MultisigIsmMetadataBuilder for MessageIdMultisigMetadataBuilder { vec![ MetadataToken::CheckpointMerkleTreeHook, MetadataToken::CheckpointMerkleRoot, - MetadataToken::MessageMerkleLeafIndex, + MetadataToken::CheckpointIndex, MetadataToken::Signatures, ] } @@ -34,10 +34,12 @@ impl MultisigIsmMetadataBuilder for MessageIdMultisigMetadataBuilder { message: &HyperlaneMessage, checkpoint_syncer: &MultisigCheckpointSyncer, ) -> Result> { + let message_id = message.id(); + const CTX: &str = "When fetching MessageIdMultisig metadata"; unwrap_or_none_result!( leaf_index, - self.get_merkle_leaf_id_by_message_id(message.id()) + self.get_merkle_leaf_id_by_message_id(message_id) .await .context(CTX)?, debug!( @@ -54,27 +56,23 @@ impl MultisigIsmMetadataBuilder for MessageIdMultisigMetadataBuilder { trace!("No quorum checkpoint found") ); - if quorum_checkpoint.checkpoint.message_id != message.id() { + if quorum_checkpoint.checkpoint.message_id != message_id { warn!( "Quorum checkpoint message id {} does not match message id {}", - quorum_checkpoint.checkpoint.message_id, - message.id() + quorum_checkpoint.checkpoint.message_id, message_id ); + if quorum_checkpoint.checkpoint.index != leaf_index { + warn!( + "Quorum checkpoint index {} does not match leaf index {}", + quorum_checkpoint.checkpoint.index, leaf_index + ); + } return Ok(None); } - unwrap_or_none_result!( - merkle_leaf_id, - self.get_merkle_leaf_id_by_message_id(message.id()) - .await - .context(CTX)? - ); - Ok(Some(MultisigMetadata::new( - quorum_checkpoint.checkpoint.checkpoint, - quorum_checkpoint.signatures, - Some(merkle_leaf_id), - None, + quorum_checkpoint, + leaf_index, None, ))) } diff --git a/rust/agents/relayer/src/msg/metadata/multisig/mod.rs b/rust/agents/relayer/src/msg/metadata/multisig/mod.rs index 218cd2743a..5c53cc4144 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/mod.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/mod.rs @@ -1,10 +1,8 @@ mod base; -mod legacy_multisig; mod merkle_root_multisig; mod message_id_multisig; pub use base::{MetadataToken, MultisigIsmMetadataBuilder, MultisigMetadata}; -pub use legacy_multisig::LegacyMultisigMetadataBuilder; pub use merkle_root_multisig::MerkleRootMultisigMetadataBuilder; pub use message_id_multisig::MessageIdMultisigMetadataBuilder; diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index c812c41343..284dd4205c 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -83,6 +83,23 @@ impl ValidatorSubmitter { /// Submits signed checkpoints indefinitely, starting from the `tree`. #[instrument(err, skip(self, tree), fields(domain=%self.merkle_tree_hook.domain()))] pub(crate) async fn checkpoint_submitter(self, mut tree: IncrementalMerkle) -> Result<()> { + // How often to log checkpoint info - once every minute + let checkpoint_info_log_period = Duration::from_secs(60); + // The instant in which we last logged checkpoint info, if at all + let mut latest_checkpoint_info_log: Option = None; + // Returns whether checkpoint info should be logged based off the + // checkpoint_info_log_period having elapsed since the last log. + // Sets latest_checkpoint_info_log to the current instant if true. + let mut should_log_checkpoint_info = || { + if let Some(instant) = latest_checkpoint_info_log { + if instant.elapsed() < checkpoint_info_log_period { + return false; + } + } + latest_checkpoint_info_log = Some(Instant::now()); + true + }; + loop { // Lag by reorg period because this is our correctness checkpoint. let latest_checkpoint = self @@ -93,6 +110,14 @@ impl ValidatorSubmitter { .latest_checkpoint_observed .set(latest_checkpoint.index as i64); + if should_log_checkpoint_info() { + info!( + ?latest_checkpoint, + tree_count = tree.count(), + "Latest checkpoint" + ); + } + // This may occur e.g. if RPC providers are unreliable and make calls against // inconsistent block tips. // @@ -235,86 +260,6 @@ impl ValidatorSubmitter { } Ok(()) } - - pub(crate) async fn legacy_checkpoint_submitter(self) -> Result<()> { - // current_index will be None if the validator cannot find - // a previously signed checkpoint - let mut current_index = self.checkpoint_syncer.latest_index().await?; - - if let Some(current_index) = current_index { - self.metrics - .legacy_latest_checkpoint_processed - .set(current_index as i64); - } - - // How often to log checkpoint info - once every minute - let checkpoint_info_log_period = Duration::from_secs(60); - // The instant in which we last logged checkpoint info, if at all - let mut latest_checkpoint_info_log: Option = None; - // Returns whether checkpoint info should be logged based off the - // checkpoint_info_log_period having elapsed since the last log. - // Sets latest_checkpoint_info_log to the current instant if true. - let mut should_log_checkpoint_info = || { - if let Some(instant) = latest_checkpoint_info_log { - if instant.elapsed() < checkpoint_info_log_period { - return false; - } - } - latest_checkpoint_info_log = Some(Instant::now()); - true - }; - - loop { - // Check the latest checkpoint - let latest_checkpoint = self - .merkle_tree_hook - .latest_checkpoint(self.reorg_period) - .await?; - - self.metrics - .legacy_latest_checkpoint_observed - .set(latest_checkpoint.index as i64); - - // Occasional info to make it clear to a validator operator whether things are - // working correctly without using the debug log level. - if should_log_checkpoint_info() { - info!( - latest_signed_checkpoint_index=?current_index, - latest_known_checkpoint_index=?latest_checkpoint.index, - "Latest checkpoint infos" - ); - } - - debug!( - latest_signed_checkpoint_index=?current_index, - latest_known_checkpoint_index=?latest_checkpoint.index, - "Polled latest checkpoint" - ); - - // If current_index is None, we were unable to find a previously - // signed checkpoint, and we should sign the latest checkpoint. - // This ensures that we still sign even if the latest checkpoint - // has index 0. - if current_index - .map(|i| i < latest_checkpoint.index) - .unwrap_or(true) - { - let signed_checkpoint = self.signer.sign(latest_checkpoint).await?; - - info!(signed_checkpoint = ?signed_checkpoint, signer=?self.signer, "Signed new latest checkpoint"); - current_index = Some(latest_checkpoint.index); - - self.checkpoint_syncer - .legacy_write_checkpoint(&signed_checkpoint) - .await?; - self.metrics - .legacy_latest_checkpoint_processed - .set(signed_checkpoint.value.index as i64); - } - - sleep(self.interval).await; - } - } } /// Returns whether the tree exceeds the checkpoint. @@ -328,20 +273,12 @@ fn tree_exceeds_checkpoint(checkpoint: &Checkpoint, tree: &IncrementalMerkle) -> pub(crate) struct ValidatorSubmitterMetrics { latest_checkpoint_observed: IntGauge, latest_checkpoint_processed: IntGauge, - legacy_latest_checkpoint_observed: IntGauge, - legacy_latest_checkpoint_processed: IntGauge, } impl ValidatorSubmitterMetrics { pub fn new(metrics: &CoreMetrics, mailbox_chain: &HyperlaneDomain) -> Self { let chain_name = mailbox_chain.name(); Self { - legacy_latest_checkpoint_observed: metrics - .latest_checkpoint() - .with_label_values(&["legacy_validator_observed", chain_name]), - legacy_latest_checkpoint_processed: metrics - .latest_checkpoint() - .with_label_values(&["legacy_validator_processed", chain_name]), latest_checkpoint_observed: metrics .latest_checkpoint() .with_label_values(&["validator_observed", chain_name]), diff --git a/rust/agents/validator/src/validator.rs b/rust/agents/validator/src/validator.rs index f7aa19aea2..d516e051c0 100644 --- a/rust/agents/validator/src/validator.rs +++ b/rust/agents/validator/src/validator.rs @@ -179,7 +179,6 @@ impl Validator { assert!(tip_tree.count() > 0, "merkle tree is empty"); let backfill_target = submitter.checkpoint(&tip_tree); - let legacy_submitter = submitter.clone(); let backfill_submitter = submitter.clone(); let mut tasks = vec![]; @@ -196,10 +195,6 @@ impl Validator { tokio::spawn(async move { submitter.checkpoint_submitter(tip_tree).await }) .instrument(info_span!("TipCheckpointSubmitter")), ); - tasks.push( - tokio::spawn(async move { legacy_submitter.legacy_checkpoint_submitter().await }) - .instrument(info_span!("LegacyCheckpointSubmitter")), - ); tasks } diff --git a/rust/chains/hyperlane-ethereum/src/signers.rs b/rust/chains/hyperlane-ethereum/src/signers.rs index 643e578f4d..7165cd1bc1 100644 --- a/rust/chains/hyperlane-ethereum/src/signers.rs +++ b/rust/chains/hyperlane-ethereum/src/signers.rs @@ -116,7 +116,9 @@ impl From for SignersError { #[cfg(test)] mod test { - use hyperlane_core::{Checkpoint, HyperlaneSigner, HyperlaneSignerExt, H256}; + use hyperlane_core::{ + Checkpoint, CheckpointWithMessageId, HyperlaneSigner, HyperlaneSignerExt, H256, + }; use crate::signers::Signers; @@ -128,11 +130,14 @@ mod test { .parse::() .unwrap() .into(); - let message = Checkpoint { - merkle_tree_hook_address: H256::repeat_byte(2), - mailbox_domain: 5, - root: H256::repeat_byte(1), - index: 123, + let message = CheckpointWithMessageId { + checkpoint: Checkpoint { + merkle_tree_hook_address: H256::repeat_byte(2), + mailbox_domain: 5, + root: H256::repeat_byte(1), + index: 123, + }, + message_id: H256::repeat_byte(3), }; let signed = signer.sign(message).await.expect("!sign"); diff --git a/rust/chains/hyperlane-ethereum/tests/signer_output.rs b/rust/chains/hyperlane-ethereum/tests/signer_output.rs index 37cb07aedd..c8af292cb7 100644 --- a/rust/chains/hyperlane-ethereum/tests/signer_output.rs +++ b/rust/chains/hyperlane-ethereum/tests/signer_output.rs @@ -17,7 +17,6 @@ use hyperlane_core::{ utils::domain_hash, Checkpoint, HyperlaneMessage, HyperlaneSignerExt, H160, H256, }; -use hyperlane_ethereum::Signers; /// Output proof to /vector/message.json #[test] @@ -121,58 +120,3 @@ pub fn output_domain_hashes() { file.write_all(json.as_bytes()) .expect("Failed to write to file"); } - -/// Outputs signed checkpoint test cases in /vector/signedCheckpoint.json -#[test] -pub fn output_signed_checkpoints() { - let merkle_tree_hook_address = - H256::from(H160::from_str("0x2222222222222222222222222222222222222222").unwrap()); - let t = async { - let signer: Signers = "1111111111111111111111111111111111111111111111111111111111111111" - .parse::() - .unwrap() - .into(); - - let mut test_cases: Vec = Vec::new(); - - // test suite - for i in 1..=3 { - let signed_checkpoint = signer - .sign(Checkpoint { - merkle_tree_hook_address, - mailbox_domain: 1000, - root: H256::repeat_byte(i + 1), - index: i as u32, - }) - .await - .expect("!sign_with"); - - test_cases.push(json!({ - "merkle_tree_hook": signed_checkpoint.value.merkle_tree_hook_address, - "domain": signed_checkpoint.value.mailbox_domain, - "root": signed_checkpoint.value.root, - "index": signed_checkpoint.value.index, - "signature": signed_checkpoint.signature, - "signer": signer.address(), - })) - } - - let json = json!(test_cases).to_string(); - - let mut file = OpenOptions::new() - .write(true) - .create(true) - .truncate(true) - .open(test_utils::find_vector("signedCheckpoint.json")) - .expect("Failed to open/create file"); - - file.write_all(json.as_bytes()) - .expect("Failed to write to file"); - }; - - tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap() - .block_on(t) -} diff --git a/rust/hyperlane-base/src/traits/checkpoint_syncer.rs b/rust/hyperlane-base/src/traits/checkpoint_syncer.rs index 3a885df27c..e017b3f5aa 100644 --- a/rust/hyperlane-base/src/traits/checkpoint_syncer.rs +++ b/rust/hyperlane-base/src/traits/checkpoint_syncer.rs @@ -3,19 +3,15 @@ use std::fmt::Debug; use async_trait::async_trait; use eyre::Result; -use hyperlane_core::{SignedAnnouncement, SignedCheckpoint, SignedCheckpointWithMessageId}; +use hyperlane_core::{SignedAnnouncement, SignedCheckpointWithMessageId}; /// A generic trait to read/write Checkpoints offchain #[async_trait] pub trait CheckpointSyncer: Debug + Send + Sync { /// Read the highest index of this Syncer async fn latest_index(&self) -> Result>; - /// Attempt to fetch the signed checkpoint at this index - async fn legacy_fetch_checkpoint(&self, index: u32) -> Result>; /// Attempt to fetch the signed (checkpoint, messageId) tuple at this index async fn fetch_checkpoint(&self, index: u32) -> Result>; - /// Write the signed checkpoint to this syncer - async fn legacy_write_checkpoint(&self, signed_checkpoint: &SignedCheckpoint) -> Result<()>; /// Write the signed (checkpoint, messageId) tuple to this syncer async fn write_checkpoint( &self, diff --git a/rust/hyperlane-base/src/types/local_storage.rs b/rust/hyperlane-base/src/types/local_storage.rs index d536b924e6..76c02a38cd 100644 --- a/rust/hyperlane-base/src/types/local_storage.rs +++ b/rust/hyperlane-base/src/types/local_storage.rs @@ -2,7 +2,7 @@ use std::path::PathBuf; use async_trait::async_trait; use eyre::{Context, Result}; -use hyperlane_core::{SignedAnnouncement, SignedCheckpoint, SignedCheckpointWithMessageId}; +use hyperlane_core::{SignedAnnouncement, SignedCheckpointWithMessageId}; use prometheus::IntGauge; use crate::traits::CheckpointSyncer; @@ -29,10 +29,6 @@ impl LocalStorage { Ok(Self { path, latest_index }) } - fn legacy_checkpoint_file_path(&self, index: u32) -> PathBuf { - self.path.join(format!("{}.json", index)) - } - fn checkpoint_file_path(&self, index: u32) -> PathBuf { self.path.join(format!("{}_with_id.json", index)) } @@ -41,14 +37,6 @@ impl LocalStorage { self.path.join("index.json") } - async fn write_index(&self, index: u32) -> Result<()> { - let path = self.latest_index_file_path(); - tokio::fs::write(&path, index.to_string()) - .await - .with_context(|| format!("Writing index to {path:?}"))?; - Ok(()) - } - fn announcement_file_path(&self) -> PathBuf { self.path.join("announcement.json") } @@ -74,16 +62,6 @@ impl CheckpointSyncer for LocalStorage { } } - async fn legacy_fetch_checkpoint(&self, index: u32) -> Result> { - match tokio::fs::read(self.legacy_checkpoint_file_path(index)).await { - Ok(data) => { - let checkpoint = serde_json::from_slice(&data)?; - Ok(Some(checkpoint)) - } - _ => Ok(None), - } - } - async fn fetch_checkpoint(&self, index: u32) -> Result> { let Ok(data) = tokio::fs::read(self.checkpoint_file_path(index)).await else { return Ok(None); @@ -92,25 +70,6 @@ impl CheckpointSyncer for LocalStorage { Ok(Some(checkpoint)) } - async fn legacy_write_checkpoint(&self, signed_checkpoint: &SignedCheckpoint) -> Result<()> { - let serialized_checkpoint = serde_json::to_string_pretty(signed_checkpoint)?; - let path = self.legacy_checkpoint_file_path(signed_checkpoint.value.index); - tokio::fs::write(&path, &serialized_checkpoint) - .await - .with_context(|| format!("Writing checkpoint to {path:?}"))?; - - match self.latest_index().await? { - Some(current_latest_index) => { - if current_latest_index < signed_checkpoint.value.index { - self.write_index(signed_checkpoint.value.index).await? - } - } - None => self.write_index(signed_checkpoint.value.index).await?, - } - - Ok(()) - } - async fn write_checkpoint( &self, signed_checkpoint: &SignedCheckpointWithMessageId, diff --git a/rust/hyperlane-base/src/types/multisig.rs b/rust/hyperlane-base/src/types/multisig.rs index c41aa4447d..52bfeadca7 100644 --- a/rust/hyperlane-base/src/types/multisig.rs +++ b/rust/hyperlane-base/src/types/multisig.rs @@ -1,14 +1,11 @@ -use std::collections::{hash_map::Entry, HashMap}; +use std::collections::HashMap; use std::sync::Arc; use derive_new::new; use eyre::Result; use tracing::{debug, instrument, trace}; -use hyperlane_core::{ - Checkpoint, CheckpointWithMessageId, MultisigSignedCheckpoint, SignedCheckpointWithSigner, - H160, H256, -}; +use hyperlane_core::{MultisigSignedCheckpoint, SignedCheckpointWithMessageId, H160, H256}; use crate::CheckpointSyncer; @@ -21,174 +18,6 @@ pub struct MultisigCheckpointSyncer { } impl MultisigCheckpointSyncer { - /// Attempts to get the latest checkpoint with a quorum of signatures among - /// validators. - /// - /// First iterates through the `latest_index` of each validator's checkpoint - /// syncer, looking for the highest index that >= `threshold` validators - /// have returned. - /// - /// Attempts to find a quorum of signed checkpoints from that index, - /// iterating backwards if unsuccessful, until the (optional) index is - /// reached. - /// - /// Note it's possible to not find a quorum. - #[instrument(err, skip(self))] - pub async fn legacy_fetch_checkpoint_in_range( - &self, - validators: &[H256], - threshold: usize, - minimum_index: u32, - maximum_index: u32, - ) -> Result>> { - // Get the latest_index from each validator's checkpoint syncer. - let mut latest_indices = Vec::with_capacity(validators.len()); - for validator in validators { - let address = H160::from(*validator); - if let Some(checkpoint_syncer) = self.checkpoint_syncers.get(&address) { - // Gracefully handle errors getting the latest_index - match checkpoint_syncer.latest_index().await { - Ok(Some(index)) => { - trace!(?address, ?index, "Validator returned latest index"); - latest_indices.push(index); - } - err => { - debug!(?address, ?err, "Failed to get latest index from validator"); - } - } - } - } - debug!( - ?latest_indices, - "Fetched latest indices from checkpoint syncers" - ); - - if latest_indices.is_empty() { - debug!("No validators returned a latest index"); - return Ok(None); - } - - // Sort in descending order. The n'th index will represent - // the highest index for which we (supposedly) have (n+1) signed checkpoints - latest_indices.sort_by(|a, b| b.cmp(a)); - if let Some(&highest_quorum_index) = latest_indices.get(threshold - 1) { - // The highest viable checkpoint index is the minimum of the highest index - // we (supposedly) have a quorum for, and the maximum index for which we can - // generate a proof. - let start_index = highest_quorum_index.min(maximum_index); - if minimum_index > start_index { - debug!(%start_index, %highest_quorum_index, "Highest quorum index is below the minimum index"); - return Ok(None); - } - for index in (minimum_index..=start_index).rev() { - if let Ok(Some(checkpoint)) = self - .legacy_fetch_checkpoint(index, validators, threshold) - .await - { - return Ok(Some(checkpoint)); - } - } - } - debug!("No checkpoint found in range"); - Ok(None) - } - - /// Fetches a MultisigSignedCheckpoint if there is a quorum. - /// Returns Ok(None) if there is no quorum. - #[instrument(err, skip(self))] - pub async fn legacy_fetch_checkpoint( - &self, - index: u32, - validators: &[H256], - threshold: usize, - ) -> Result>> { - // Keeps track of signed validator checkpoints for a particular root. - // In practice, it's likely that validators will all sign the same root for a - // particular index, but we'd like to be robust to this not being the case - let mut signed_checkpoints_per_root: HashMap< - H256, - Vec>, - > = HashMap::new(); - - for validator in validators { - let addr = H160::from(*validator); - if let Some(checkpoint_syncer) = self.checkpoint_syncers.get(&addr) { - // Gracefully ignore an error fetching the checkpoint from a validator's - // checkpoint syncer, which can happen if the validator has not - // signed the checkpoint at `index`. - if let Ok(Some(signed_checkpoint)) = - checkpoint_syncer.legacy_fetch_checkpoint(index).await - { - // If the signed checkpoint is for a different index, ignore it - if signed_checkpoint.value.index != index { - debug!( - validator = format!("{:#x}", validator), - index = index, - checkpoint_index = signed_checkpoint.value.index, - "Checkpoint index mismatch" - ); - continue; - } - // Ensure that the signature is actually by the validator - let signer = signed_checkpoint.recover()?; - if H256::from(signer) != *validator { - debug!( - validator = format!("{:#x}", validator), - index = index, - "Checkpoint signature mismatch" - ); - continue; - } - - // Insert the SignedCheckpointWithSigner into signed_checkpoints_per_root - let signed_checkpoint_with_signer = SignedCheckpointWithSigner { - signer, - signed_checkpoint, - }; - let root = signed_checkpoint_with_signer.signed_checkpoint.value.root; - - let signature_count = match signed_checkpoints_per_root.entry(root) { - Entry::Occupied(mut entry) => { - let vec = entry.get_mut(); - vec.push(signed_checkpoint_with_signer); - vec.len() - } - Entry::Vacant(entry) => { - entry.insert(vec![signed_checkpoint_with_signer]); - 1 // length of 1 - } - }; - debug!( - validator = format!("{validator:#x}"), - index, - root = format!("{root:#x}"), - signature_count, - "Found signed checkpoint" - ); - // If we've hit a quorum, create a MultisigSignedCheckpoint - if signature_count >= threshold { - if let Some(signed_checkpoints) = signed_checkpoints_per_root.get(&root) { - let checkpoint = - MultisigSignedCheckpoint::try_from(signed_checkpoints)?; - debug!(?checkpoint, "Fetched multisig checkpoint"); - return Ok(Some(checkpoint)); - } - } - } else { - debug!( - validator = format!("{validator:#x}"), - index = index, - "Unable to find signed checkpoint" - ); - } - } else { - debug!(%validator, "Unable to find checkpoint syncer"); - continue; - } - } - Ok(None) - } - /// Attempts to get the latest checkpoint with a quorum of signatures among /// validators. /// @@ -208,7 +37,7 @@ impl MultisigCheckpointSyncer { threshold: usize, minimum_index: u32, maximum_index: u32, - ) -> Result>> { + ) -> Result> { // Get the latest_index from each validator's checkpoint syncer. let mut latest_indices = Vec::with_capacity(validators.len()); for validator in validators { @@ -261,6 +90,7 @@ impl MultisigCheckpointSyncer { } /// Fetches a MultisigSignedCheckpointWithMessageId if there is a quorum. + /// Validators must reflect the onchain ordering of the set /// Returns Ok(None) if there is no quorum. #[instrument(err, skip(self))] pub async fn fetch_checkpoint( @@ -268,14 +98,12 @@ impl MultisigCheckpointSyncer { validators: &[H256], threshold: usize, index: u32, - ) -> Result>> { + ) -> Result> { // Keeps track of signed validator checkpoints for a particular root. // In practice, it's likely that validators will all sign the same root for a // particular index, but we'd like to be robust to this not being the case - let mut signed_checkpoints_per_root: HashMap< - H256, - Vec>, - > = HashMap::new(); + let mut signed_checkpoints_per_root: HashMap> = + HashMap::new(); for validator in validators.iter() { let addr = H160::from(*validator); @@ -295,7 +123,7 @@ impl MultisigCheckpointSyncer { ); continue; } - // Ensure that the signature is actually by the validator + // Ensure that the signature is actually by the validator at the current index let signer = signed_checkpoint.recover()?; if H256::from(signer) != *validator { debug!( @@ -306,25 +134,13 @@ impl MultisigCheckpointSyncer { continue; } - // Insert the SignedCheckpointWithSigner into signed_checkpoints_per_root - let signed_checkpoint_with_signer = - SignedCheckpointWithSigner:: { - signer, - signed_checkpoint, - }; - let root = signed_checkpoint_with_signer.signed_checkpoint.value.root; + // Push the signed checkpoint into the hashmap + let root = signed_checkpoint.value.root; + let signed_checkpoints = signed_checkpoints_per_root.entry(root).or_default(); + signed_checkpoints.push(signed_checkpoint); - let signature_count = match signed_checkpoints_per_root.entry(root) { - Entry::Occupied(mut entry) => { - let vec = entry.get_mut(); - vec.push(signed_checkpoint_with_signer); - vec.len() - } - Entry::Vacant(entry) => { - entry.insert(vec![signed_checkpoint_with_signer]); - 1 // length of 1 - } - }; + // Count the number of signatures for this signed checkpoint + let signature_count = signed_checkpoints.len(); debug!( validator = format!("{:#x}", validator), index = index, @@ -332,16 +148,12 @@ impl MultisigCheckpointSyncer { signature_count = signature_count, "Found signed checkpoint" ); + // If we've hit a quorum, create a MultisigSignedCheckpoint if signature_count >= threshold { - if let Some(signed_checkpoints) = signed_checkpoints_per_root.get(&root) { - let checkpoint = - MultisigSignedCheckpoint::::try_from( - signed_checkpoints, - )?; - debug!(checkpoint=?checkpoint, "Fetched multisig checkpoint"); - return Ok(Some(checkpoint)); - } + let checkpoint: MultisigSignedCheckpoint = signed_checkpoints.try_into()?; + debug!(checkpoint=?checkpoint, "Fetched multisig checkpoint"); + return Ok(Some(checkpoint)); } } else { debug!( diff --git a/rust/hyperlane-base/src/types/s3_storage.rs b/rust/hyperlane-base/src/types/s3_storage.rs index 588bc81b76..cfce7ff3e5 100644 --- a/rust/hyperlane-base/src/types/s3_storage.rs +++ b/rust/hyperlane-base/src/types/s3_storage.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use derive_new::new; use eyre::{bail, Result}; use futures_util::TryStreamExt; -use hyperlane_core::{SignedAnnouncement, SignedCheckpoint, SignedCheckpointWithMessageId}; +use hyperlane_core::{SignedAnnouncement, SignedCheckpointWithMessageId}; use prometheus::IntGauge; use rusoto_core::{ credential::{Anonymous, AwsCredentials, StaticProvider}, @@ -127,10 +127,6 @@ impl S3Storage { } } - fn legacy_checkpoint_key(index: u32) -> String { - format!("checkpoint_{index}.json") - } - fn checkpoint_key(index: u32) -> String { format!("checkpoint_{index}_with_id.json") } @@ -163,14 +159,6 @@ impl CheckpointSyncer for S3Storage { ret } - async fn legacy_fetch_checkpoint(&self, index: u32) -> Result> { - self.anonymously_read_from_bucket(S3Storage::legacy_checkpoint_key(index)) - .await? - .map(|data| serde_json::from_slice(&data)) - .transpose() - .map_err(Into::into) - } - async fn fetch_checkpoint(&self, index: u32) -> Result> { self.anonymously_read_from_bucket(S3Storage::checkpoint_key(index)) .await? @@ -179,22 +167,6 @@ impl CheckpointSyncer for S3Storage { .map_err(Into::into) } - async fn legacy_write_checkpoint(&self, signed_checkpoint: &SignedCheckpoint) -> Result<()> { - let serialized_checkpoint = serde_json::to_string_pretty(signed_checkpoint)?; - self.write_to_bucket( - S3Storage::legacy_checkpoint_key(signed_checkpoint.value.index), - &serialized_checkpoint, - ) - .await?; - - self.write_to_bucket( - S3Storage::index_key(), - &signed_checkpoint.value.index.to_string(), - ) - .await?; - Ok(()) - } - async fn write_checkpoint( &self, signed_checkpoint: &SignedCheckpointWithMessageId, diff --git a/rust/hyperlane-core/src/traits/interchain_security_module.rs b/rust/hyperlane-core/src/traits/interchain_security_module.rs index 2fa7263a30..cf39b368c6 100644 --- a/rust/hyperlane-core/src/traits/interchain_security_module.rs +++ b/rust/hyperlane-core/src/traits/interchain_security_module.rs @@ -31,7 +31,7 @@ pub enum ModuleType { Routing, /// Aggregation ISM (aggregates multiple ISMs) Aggregation, - /// Legacy ISM (validators in calldata, set commitment in storage) + /// Legacy ISM (DEPRECATED) LegacyMultisig, /// Merkle Proof ISM (batching and censorship resistance) MerkleRootMultisig, diff --git a/rust/hyperlane-core/src/types/checkpoint.rs b/rust/hyperlane-core/src/types/checkpoint.rs index 35fe34ce2a..1fbd387e81 100644 --- a/rust/hyperlane-core/src/types/checkpoint.rs +++ b/rust/hyperlane-core/src/types/checkpoint.rs @@ -4,7 +4,7 @@ use derive_more::Deref; use serde::{Deserialize, Serialize}; use sha3::{digest::Update, Digest, Keccak256}; -use crate::{utils::domain_hash, Signable, Signature, SignedType, H160, H256}; +use crate::{utils::domain_hash, Signable, Signature, SignedType, H256}; /// An Hyperlane checkpoint #[derive(Copy, Clone, Eq, PartialEq, Serialize, Deserialize, Debug)] @@ -29,26 +29,6 @@ pub struct CheckpointWithMessageId { pub message_id: H256, } -impl Signable for Checkpoint { - /// A hash of the checkpoint contents. - /// The EIP-191 compliant version of this hash is signed by validators. - fn signing_hash(&self) -> H256 { - // sign: - // domain_hash(mailbox_address, mailbox_domain) || root || index (as u32) - H256::from_slice( - Keccak256::new() - .chain(domain_hash( - self.merkle_tree_hook_address, - self.mailbox_domain, - )) - .chain(self.root) - .chain(self.index.to_be_bytes()) - .finalize() - .as_slice(), - ) - } -} - impl Signable for CheckpointWithMessageId { /// A hash of the checkpoint contents. /// The EIP-191 compliant version of this hash is signed by validators. @@ -70,36 +50,16 @@ impl Signable for CheckpointWithMessageId { } } -/// Signed checkpoint -pub type SignedCheckpoint = SignedType; /// Signed (checkpoint, messageId) tuple pub type SignedCheckpointWithMessageId = SignedType; -/// An individual signed checkpoint with the recovered signer -#[derive(Clone, Debug)] -pub struct SignedCheckpointWithSigner { - /// The recovered signer - pub signer: H160, - /// The signed checkpoint - pub signed_checkpoint: SignedType, -} - -/// A signature and its signer. -#[derive(Clone, Debug)] -pub struct SignatureWithSigner { - /// The signature - pub signature: Signature, - /// The signer of the signature - pub signer: H160, -} - /// A checkpoint and multiple signatures #[derive(Clone, Debug)] -pub struct MultisigSignedCheckpoint { +pub struct MultisigSignedCheckpoint { /// The checkpoint - pub checkpoint: T, - /// Signatures over the checkpoint. No ordering guarantees. - pub signatures: Vec, + pub checkpoint: CheckpointWithMessageId, + /// Signatures over the checkpoint ordered by validator index, length == threshold + pub signatures: Vec, } /// Error types for MultisigSignedCheckpoint @@ -113,36 +73,24 @@ pub enum MultisigSignedCheckpointError { EmptySignatures(), } -impl TryFrom<&Vec>> - for MultisigSignedCheckpoint -{ +impl TryFrom<&mut Vec> for MultisigSignedCheckpoint { type Error = MultisigSignedCheckpointError; - /// Given multiple signed checkpoints with their signer, creates a - /// MultisigSignedCheckpoint + /// Given multiple signed checkpoints, create a MultisigSignedCheckpoint fn try_from( - signed_checkpoints: &Vec>, + signed_checkpoints: &mut Vec, ) -> Result { if signed_checkpoints.is_empty() { return Err(MultisigSignedCheckpointError::EmptySignatures()); } // Get the first checkpoint and ensure all other signed checkpoints are for // the same checkpoint - let checkpoint = signed_checkpoints[0].signed_checkpoint.value; - if !signed_checkpoints - .iter() - .all(|c| checkpoint == c.signed_checkpoint.value) - { + let checkpoint = signed_checkpoints[0].value; + if !signed_checkpoints.iter().all(|c| checkpoint == c.value) { return Err(MultisigSignedCheckpointError::InconsistentCheckpoints()); } - let signatures = signed_checkpoints - .iter() - .map(|c: &SignedCheckpointWithSigner| SignatureWithSigner { - signature: c.signed_checkpoint.signature, - signer: c.signer, - }) - .collect(); + let signatures = signed_checkpoints.iter().map(|c| c.signature).collect(); Ok(MultisigSignedCheckpoint { checkpoint, From f05c50c92e349c4f6216195833103091ccc3509f Mon Sep 17 00:00:00 2001 From: Nam Chu Hoai Date: Sat, 28 Oct 2023 17:03:08 -0400 Subject: [PATCH 11/15] Less noisy logs (#2863) ### Description Hides some cosmos logs from debug level ### Drive-by changes Only shows submission logs if there is queue in the checkpoint submitter --- rust/agents/validator/src/submit.rs | 18 ++++++++++++------ rust/hyperlane-base/src/settings/trace/mod.rs | 3 +++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index 284dd4205c..b94b5781a1 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -216,14 +216,20 @@ impl ValidatorSubmitter { bail!("Incorrect tree root, something went wrong"); } - debug!(index = checkpoint.index, "Reached tree consistency"); + if !checkpoint_queue.is_empty() { + info!( + index = checkpoint.index, + queue_len = checkpoint_queue.len(), + "Reached tree consistency" + ); - self.sign_and_submit_checkpoints(checkpoint_queue).await?; + self.sign_and_submit_checkpoints(checkpoint_queue).await?; - info!( - index = checkpoint.index, - "Signed all queued checkpoints until index" - ); + info!( + index = checkpoint.index, + "Signed all queued checkpoints until index" + ); + } Ok(()) } diff --git a/rust/hyperlane-base/src/settings/trace/mod.rs b/rust/hyperlane-base/src/settings/trace/mod.rs index 954843d0d5..a8d835494e 100644 --- a/rust/hyperlane-base/src/settings/trace/mod.rs +++ b/rust/hyperlane-base/src/settings/trace/mod.rs @@ -69,6 +69,9 @@ impl TracingConfig { .with_target("hyper", Level::Info) .with_target("rusoto_core", Level::Info) .with_target("reqwest", Level::Info) + .with_target("h2", Level::Info) + .with_target("tower", Level::Info) + .with_target("tendermint", Level::Info) .with_target("tokio", Level::Debug) .with_target("tokio_util", Level::Debug) .with_target("ethers_providers", Level::Debug); From 81569b2dc211fdd9497f128717c5c4f07e5e2ce5 Mon Sep 17 00:00:00 2001 From: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Date: Sun, 29 Oct 2023 20:35:39 -0400 Subject: [PATCH 12/15] DomainRouting and FallbackDomainRouting hooks deployer (#2825) ### Description Add deployer for routing and fallback routing hooks ### Drive-by changes None ### Related issues ### Backward compatibility Yes ### Testing Manual --- rust/config/testnet4_config.json | 433 +++++++++++++++++- .../optimism/ICrossDomainMessenger.sol | 8 +- typescript/infra/config/aggregationIsm.ts | 13 +- .../environments/test/aggregationIsm.ts | 4 +- .../infra/config/environments/test/core.ts | 18 +- .../config/environments/test/multisigIsm.ts | 6 +- .../config/environments/test/routingIsm.ts | 4 +- .../config/environments/testnet4/core.ts | 72 ++- .../testnet4/core/verification.json | 252 ++++++++++ .../config/environments/testnet4/hooks.ts | 13 + typescript/infra/config/routingIsm.ts | 14 +- typescript/infra/hardhat.config.ts | 1 - .../scripts/print-multisig-ism-config.ts | 4 +- typescript/sdk/src/consts/chainMetadata.ts | 5 +- .../sdk/src/consts/environments/testnet.json | 406 +++++++++++++++- .../sdk/src/core/CoreDeployer.hardhat-test.ts | 4 +- typescript/sdk/src/core/HyperlaneCore.ts | 1 + .../sdk/src/core/HyperlaneCoreDeployer.ts | 2 +- typescript/sdk/src/gas/HyperlaneIgp.ts | 1 + .../sdk/src/hook/HyperlaneHookDeployer.ts | 174 ++++++- typescript/sdk/src/hook/contracts.ts | 6 + typescript/sdk/src/hook/types.ts | 31 +- typescript/sdk/src/index.ts | 5 + .../ism/HyperlaneIsmFactory.hardhat-test.ts | 7 +- typescript/sdk/src/ism/HyperlaneIsmFactory.ts | 117 +++-- typescript/sdk/src/ism/types.ts | 48 +- .../src/middleware/query/InterchainQuery.ts | 1 + typescript/sdk/src/test/testUtils.ts | 4 +- 28 files changed, 1512 insertions(+), 142 deletions(-) create mode 100644 typescript/infra/config/environments/testnet4/hooks.ts 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, From e1d15d85ea5ae240b3d272163c047472ba4d89e3 Mon Sep 17 00:00:00 2001 From: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Date: Mon, 30 Oct 2023 18:44:57 -0400 Subject: [PATCH 13/15] Add bridge to scroll,polygonzkevm in key-funder (#2871) ### Description - key funder support to scroll and polygonZkEVM ### Drive-by changes ### Related issues - https://github.com/hyperlane-xyz/issues/issues/656 ### Backward compatibility Yes ### Testing Manual --- .../funding/fund-keys-from-deployer.ts | 91 ++++++++++++++++++- .../scripts/funding/utils/L1ETHGateway.json | 45 +++++++++ .../scripts/funding/utils/L1MessageQueue.json | 23 +++++ .../funding/utils/L1ScrollMessenger.json | 17 ++++ .../funding/utils/PolygonZkEVMBridge.json | 42 +++++++++ 5 files changed, 214 insertions(+), 4 deletions(-) create mode 100644 typescript/infra/scripts/funding/utils/L1ETHGateway.json create mode 100644 typescript/infra/scripts/funding/utils/L1MessageQueue.json create mode 100644 typescript/infra/scripts/funding/utils/L1ScrollMessenger.json create mode 100644 typescript/infra/scripts/funding/utils/PolygonZkEVMBridge.json diff --git a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts index d3ad82da0e..06185ea1fd 100644 --- a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts +++ b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts @@ -12,7 +12,7 @@ import { MultiProvider, RpcConsensusType, } from '@hyperlane-xyz/sdk'; -import { error, log, warn } from '@hyperlane-xyz/utils'; +import { Address, error, log, warn } from '@hyperlane-xyz/utils'; import { Contexts } from '../../config/contexts'; import { parseKeyIdentifier } from '../../src/agents/agent'; @@ -33,6 +33,21 @@ import { } from '../../src/utils/utils'; import { getAgentConfig, getArgs, getEnvironmentConfig } from '../utils'; +import * as L1ETHGateway from './utils/L1ETHGateway.json'; +import * as L1MessageQueue from './utils/L1MessageQueue.json'; +import * as L1ScrollMessenger from './utils/L1ScrollMessenger.json'; +import * as PolygonZkEVMBridge from './utils/PolygonZkEVMBridge.json'; + +const nativeBridges = { + scrollsepolia: { + l1ETHGateway: '0x8A54A2347Da2562917304141ab67324615e9866d', + l1Messenger: '0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A', + }, + polygonzkevmtestnet: { + l1EVMBridge: '0xF6BEEeBB578e214CA9E23B0e9683454Ff88Ed2A7', + }, +}; + type L2Chain = | Chains.optimism | Chains.optimismgoerli @@ -49,6 +64,7 @@ const L2Chains: ChainName[] = [ Chains.arbitrumgoerli, Chains.scrollsepolia, Chains.basegoerli, + Chains.polygonzkevmtestnet, ]; const L2ToL1: ChainMap = { @@ -58,7 +74,7 @@ const L2ToL1: ChainMap = { arbitrum: 'ethereum', scrollsepolia: 'sepolia', basegoerli: 'goerli', - polygonzktestnet: 'goerli', + polygonzkevmtestnet: 'goerli', }; // Missing types declaration for bufio @@ -118,7 +134,7 @@ const desiredBalancePerChain: ChainMap = { gnosis: '0.1', basegoerli: '0.05', scrollsepolia: '0.05', - polygonzkevmtestnet: '0.01', + polygonzkevmtestnet: '0.3', // unused test1: '0', @@ -626,10 +642,14 @@ class ContextFunder { ), }); let tx; - if (l2Chain.includes('optimism')) { + if (l2Chain.includes('optimism') || l2Chain.includes('base')) { tx = await this.bridgeToOptimism(l2Chain, amount, to); } else if (l2Chain.includes('arbitrum')) { tx = await this.bridgeToArbitrum(l2Chain, amount); + } else if (l2Chain.includes('scroll')) { + tx = await this.bridgeToScroll(l2Chain, amount, to); + } else if (l2Chain.includes('zkevm')) { + tx = await this.bridgeToPolygonCDK(l2Chain, amount, to); } else { throw new Error(`${l2Chain} is not an L2`); } @@ -667,6 +687,69 @@ class ContextFunder { }); } + private async bridgeToScroll( + l2Chain: L2Chain, + amount: BigNumber, + to: Address, + ) { + const l1Chain = L2ToL1[l2Chain]; + const l1ChainSigner = this.multiProvider.getSigner(l1Chain); + const l1EthGateway = new ethers.Contract( + nativeBridges.scrollsepolia.l1ETHGateway, + L1ETHGateway.abi, + l1ChainSigner, + ); + const l1ScrollMessenger = new ethers.Contract( + nativeBridges.scrollsepolia.l1Messenger, + L1ScrollMessenger.abi, + l1ChainSigner, + ); + const l2GasLimit = BigNumber.from('200000'); // l2 gas amount for the transfer and an empty callback calls + const l1MessageQueueAddress = await l1ScrollMessenger.messageQueue(); + const l1MessageQueue = new ethers.Contract( + l1MessageQueueAddress, + L1MessageQueue.abi, + l1ChainSigner, + ); + const gasQuote = await l1MessageQueue.estimateCrossDomainMessageFee( + l2GasLimit, + ); + const totalAmount = amount.add(gasQuote); + return l1EthGateway['depositETH(address,uint256,uint256)']( + to, + amount, + l2GasLimit, + { + value: totalAmount, + }, + ); + } + + private async bridgeToPolygonCDK( + l2Chain: L2Chain, + amount: BigNumber, + to: Address, + ) { + const l1Chain = L2ToL1[l2Chain]; + const l1ChainSigner = this.multiProvider.getSigner(l1Chain); + const polygonZkEVMbridge = new ethers.Contract( + nativeBridges.polygonzkevmtestnet.l1EVMBridge, + PolygonZkEVMBridge.abi, + l1ChainSigner, + ); + return polygonZkEVMbridge.bridgeAsset( + 1, // 0 is mainnet, 1 is l2 + to, + amount, + ethers.constants.AddressZero, + true, + [], + { + value: amount, + }, + ); + } + private async updateWalletBalanceGauge(chain: ChainName) { const funderAddress = await this.multiProvider.getSignerAddress(chain); walletBalanceGauge diff --git a/typescript/infra/scripts/funding/utils/L1ETHGateway.json b/typescript/infra/scripts/funding/utils/L1ETHGateway.json new file mode 100644 index 0000000000..1622a94581 --- /dev/null +++ b/typescript/infra/scripts/funding/utils/L1ETHGateway.json @@ -0,0 +1,45 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ] +} diff --git a/typescript/infra/scripts/funding/utils/L1MessageQueue.json b/typescript/infra/scripts/funding/utils/L1MessageQueue.json new file mode 100644 index 0000000000..040883a47a --- /dev/null +++ b/typescript/infra/scripts/funding/utils/L1MessageQueue.json @@ -0,0 +1,23 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "estimateCrossDomainMessageFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/typescript/infra/scripts/funding/utils/L1ScrollMessenger.json b/typescript/infra/scripts/funding/utils/L1ScrollMessenger.json new file mode 100644 index 0000000000..efe556a193 --- /dev/null +++ b/typescript/infra/scripts/funding/utils/L1ScrollMessenger.json @@ -0,0 +1,17 @@ +{ + "abi": [ + { + "inputs": [], + "name": "messageQueue", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/typescript/infra/scripts/funding/utils/PolygonZkEVMBridge.json b/typescript/infra/scripts/funding/utils/PolygonZkEVMBridge.json new file mode 100644 index 0000000000..54a868c3fb --- /dev/null +++ b/typescript/infra/scripts/funding/utils/PolygonZkEVMBridge.json @@ -0,0 +1,42 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "bool", + "name": "forceUpdateGlobalExitRoot", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "permitData", + "type": "bytes" + } + ], + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ] +} From c44fd29914c04fe5b848485f62f8cb0a79d6b6db Mon Sep 17 00:00:00 2001 From: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:22:15 -0400 Subject: [PATCH 14/15] Deploy contracts to mainnet3 (#2826) ### Description - Deploys mainnet3 (and removes mainnet2) ### Drive-by changes - Changes protocol fees to 0 - Changes owners to deployer key (temporarily) ### Related issues - closes https://github.com/hyperlane-xyz/issues/issues/655 ### Testing Some v2 related tests broken --------- Co-authored-by: Yorke Rhodes Co-authored-by: Nam Chu Hoai --- .github/workflows/node.yml | 2 +- .../m20230309_000001_create_table_domain.rs | 24 + rust/config/mainnet3_config.json | 633 ++++++++ rust/config/mainnet_config.json | 166 -- rust/config/testnet4_config.json | 28 +- typescript/infra/config/environments/index.ts | 4 +- .../config/environments/mainnet2/agent.ts | 196 --- .../mainnet2/core/verification.json | 722 --------- .../helloworld/hyperlane/addresses.json | 32 - .../mainnet2/helloworld/rc/addresses.json | 32 - .../mainnet2/ism/verification.json | 344 ---- .../environments/mainnet2/validators.ts | 166 -- .../config/environments/mainnet3/agent.ts | 96 ++ .../{mainnet2 => mainnet3}/chains.ts | 17 +- .../{mainnet2 => mainnet3}/core.ts | 18 +- .../mainnet3/core/verification.json | 1292 +++++++++++++++ .../create2/addresses.json | 0 .../create2/verification.json | 0 .../{mainnet2 => mainnet3}/funding.ts | 4 +- .../{mainnet2 => mainnet3}/gas-oracle.ts | 12 + .../{mainnet2 => mainnet3}/helloworld.ts | 6 +- .../helloworld/hyperlane/addresses.json | 38 + .../helloworld/hyperlane/verification.json | 78 + .../mainnet3/helloworld/rc/addresses.json | 1 + .../helloworld/rc/verification.json | 0 .../{mainnet2 => mainnet3}/igp.ts | 0 .../{mainnet2 => mainnet3}/index.ts | 0 .../{mainnet2 => mainnet3}/infrastructure.ts | 5 + .../mainnet3/ism/verification.json | 1430 +++++++++++++++++ .../{mainnet2 => mainnet3}/liquidityLayer.ts | 0 .../middleware/accounts/verification.json | 0 .../middleware/liquidity-layer/addresses.json | 0 .../liquidity-layer/verification.json | 0 .../middleware/queries/verification.json | 0 .../{mainnet2 => mainnet3}/owners.ts | 16 +- .../testquerysender/addresses.json | 0 .../testquerysender/verification.json | 0 .../testrecipient/addresses.json | 0 .../testrecipient/verification.json | 0 .../{mainnet2 => mainnet3}/token-bridge.ts | 0 .../environments/mainnet3/validators.ts | 199 +++ .../config/environments/testnet4/core.ts | 32 +- .../infra/config/environments/testnet4/igp.ts | 1 + typescript/infra/config/multisigIsm.ts | 4 +- typescript/infra/config/routingIsm.ts | 26 +- typescript/infra/fork.sh | 2 +- .../templates/external-secret.yaml | 4 +- typescript/infra/helm/warp-routes/values.yaml | 6 +- .../funding/fund-keys-from-deployer.ts | 16 +- typescript/infra/scripts/helloworld/utils.ts | 30 +- typescript/infra/scripts/module-can-verify.ts | 9 +- typescript/infra/scripts/verify.ts | 4 +- .../warp-routes/deploy-warp-monitor.ts | 2 +- typescript/infra/src/agents/key-utils.ts | 2 +- typescript/infra/src/config/environment.ts | 4 +- .../infra/src/config/helloworld/config.ts | 14 +- typescript/infra/src/helloworld/kathy.ts | 2 + typescript/sdk/src/consts/chainMetadata.ts | 84 + typescript/sdk/src/consts/chains.ts | 8 +- .../sdk/src/consts/environments/mainnet.json | 302 ++-- .../sdk/src/consts/environments/testnet.json | 406 +---- typescript/sdk/src/consts/multisigIsm.ts | 124 +- typescript/sdk/src/core/HyperlaneCore.ts | 1 - .../sdk/src/core/HyperlaneCoreDeployer.ts | 9 +- .../sdk/src/core/MultiProtocolCore.test.ts | 3 +- .../sdk/src/deploy/HyperlaneDeployer.ts | 13 +- .../sdk/src/gas/HyperlaneIgpDeployer.ts | 6 +- .../sdk/src/hook/HyperlaneHookDeployer.ts | 19 +- typescript/sdk/src/hook/types.ts | 18 +- typescript/sdk/src/index.ts | 2 +- typescript/sdk/src/ism/HyperlaneIsmFactory.ts | 83 +- typescript/sdk/src/ism/types.ts | 26 +- 72 files changed, 4329 insertions(+), 2494 deletions(-) create mode 100644 rust/config/mainnet3_config.json delete mode 100644 rust/config/mainnet_config.json delete mode 100644 typescript/infra/config/environments/mainnet2/agent.ts delete mode 100644 typescript/infra/config/environments/mainnet2/core/verification.json delete mode 100644 typescript/infra/config/environments/mainnet2/helloworld/hyperlane/addresses.json delete mode 100644 typescript/infra/config/environments/mainnet2/helloworld/rc/addresses.json delete mode 100644 typescript/infra/config/environments/mainnet2/ism/verification.json delete mode 100644 typescript/infra/config/environments/mainnet2/validators.ts create mode 100644 typescript/infra/config/environments/mainnet3/agent.ts rename typescript/infra/config/environments/{mainnet2 => mainnet3}/chains.ts (83%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/core.ts (74%) create mode 100644 typescript/infra/config/environments/mainnet3/core/verification.json rename typescript/infra/config/environments/{mainnet2 => mainnet3}/create2/addresses.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/create2/verification.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/funding.ts (89%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/gas-oracle.ts (87%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/helloworld.ts (92%) create mode 100644 typescript/infra/config/environments/mainnet3/helloworld/hyperlane/addresses.json rename typescript/infra/config/environments/{mainnet2 => mainnet3}/helloworld/hyperlane/verification.json (61%) create mode 100644 typescript/infra/config/environments/mainnet3/helloworld/rc/addresses.json rename typescript/infra/config/environments/{mainnet2 => mainnet3}/helloworld/rc/verification.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/igp.ts (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/index.ts (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/infrastructure.ts (90%) create mode 100644 typescript/infra/config/environments/mainnet3/ism/verification.json rename typescript/infra/config/environments/{mainnet2 => mainnet3}/liquidityLayer.ts (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/middleware/accounts/verification.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/middleware/liquidity-layer/addresses.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/middleware/liquidity-layer/verification.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/middleware/queries/verification.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/owners.ts (56%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/testquerysender/addresses.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/testquerysender/verification.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/testrecipient/addresses.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/testrecipient/verification.json (100%) rename typescript/infra/config/environments/{mainnet2 => mainnet3}/token-bridge.ts (100%) create mode 100644 typescript/infra/config/environments/mainnet3/validators.ts diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml index 335b9dec16..e4f51e9ff1 100644 --- a/.github/workflows/node.yml +++ b/.github/workflows/node.yml @@ -120,7 +120,7 @@ jobs: # needs: [yarn-build] # strategy: # matrix: - # environment: [testnet4, mainnet2] + # environment: [testnet4, mainnet3] # module: [ism, core, igp, ica, helloworld] # steps: diff --git a/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs b/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs index 9358a30506..be7d938e6a 100644 --- a/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs +++ b/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs @@ -182,6 +182,30 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: true, is_deprecated: false, }, + RawDomain { + name: "polygonzkevm", + token: "ETH", + domain: 1101, + chain_id: 1101, + is_test_net: false, + is_deprecated: false, + }, + RawDomain { + name: "base", + token: "ETH", + domain: 8453, + chain_id: 8453, + is_test_net: false, + is_deprecated: false, + }, + RawDomain { + name: "scroll", + token: "ETH", + domain: 534352, + chain_id: 534352, + is_test_net: false, + is_deprecated: false, + }, RawDomain { name: "test1", token: "ETH", diff --git a/rust/config/mainnet3_config.json b/rust/config/mainnet3_config.json new file mode 100644 index 0000000000..fc06c4c8d5 --- /dev/null +++ b/rust/config/mainnet3_config.json @@ -0,0 +1,633 @@ +{ + "chains": { + "arbitrum": { + "chainId": 42161, + "domainId": 42161, + "name": "arbitrum", + "protocol": "ethereum", + "displayName": "Arbitrum", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://arb1.arbitrum.io/rpc" + } + ], + "blockExplorers": [ + { + "name": "Arbiscan", + "url": "https://arbiscan.io", + "apiUrl": "https://api.arbiscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 0, + "estimateBlockTime": 3 + }, + "gasCurrencyCoinGeckoId": "ethereum", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-arbitrum.safe.global/", + "storageGasOracle": "0xD3805207b65d99C075ceA938Fa7c0587026a5DF5", + "proxyAdmin": "0x80Cebd56A65e46c474a1A101e89E76C4c51D179c", + "merkleRootMultisigIsmFactory": "0x3C330D4A2e2b8443AFaB8E326E64ab4251B7Eae0", + "messageIdMultisigIsmFactory": "0x12Df53079d399a47e9E730df095b712B0FDFA791", + "aggregationIsmFactory": "0xD4883084389fC1Eeb4dAfB2ADcFc36B711c310EB", + "aggregationHookFactory": "0x9B5f440bBb64Fee337F37e03362b628711Ea09C7", + "routingIsmFactory": "0xC020F8A7b00178dFA0fcC75C159e14b79F8e5c63", + "merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930", + "interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "aggregationHook": "0xe0cb37cFc47296f1c4eD77EFf92Aed478644d10c", + "protocolFee": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "validatorAnnounce": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08", + "index": { + "from": 145551152 + } + }, + "avalanche": { + "chainId": 43114, + "domainId": 43114, + "name": "avalanche", + "protocol": "ethereum", + "displayName": "Avalanche", + "nativeToken": { + "decimals": 18, + "name": "Avalanche", + "symbol": "AVAX" + }, + "rpcUrls": [ + { + "http": "https://api.avax.network/ext/bc/C/rpc", + "pagination": { + "maxBlockRange": 100000, + "minBlockNumber": 6765067 + } + } + ], + "blockExplorers": [ + { + "name": "SnowTrace", + "url": "https://snowtrace.io", + "apiUrl": "https://api.snowtrace.io/api", + "family": "other" + } + ], + "blocks": { + "confirmations": 3, + "reorgPeriod": 3, + "estimateBlockTime": 2 + }, + "gasCurrencyCoinGeckoId": "avalanche-2", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-avalanche.safe.global/", + "storageGasOracle": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", + "proxyAdmin": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", + "merkleRootMultisigIsmFactory": "0x896cF1D1B66cD211633eDd589fF158E8Cfaf9B54", + "messageIdMultisigIsmFactory": "0x8819D653DF5b1FC0DdB32189a2704E471AF8483c", + "aggregationIsmFactory": "0xa5E13796eB7d2EDCc88012c8cfF90D69B51FcF9f", + "aggregationHookFactory": "0x3bF6Ac986C7Af9A9Ac356C0e99C0041EFd8D96e7", + "routingIsmFactory": "0xA9Ddc70f50009aF8bDB312aA757B4304b0F7BbB3", + "merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "aggregationHook": "0x0165a22BA489F7DA37DAf6397781777D9FCB5708", + "protocolFee": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "validatorAnnounce": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f", + "index": { + "from": 37133307 + } + }, + "base": { + "chainId": 8453, + "domainId": 8453, + "name": "base", + "protocol": "ethereum", + "displayName": "Base", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://base.publicnode.com/" + }, + { + "http": "https://mainnet.base.org" + }, + { + "http": "https://base.blockpi.network/v1/rpc/public" + } + ], + "blockExplorers": [ + { + "name": "BaseScan", + "url": "https://basescan.org", + "apiUrl": "https://api.basescan.org/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 1, + "estimateBlockTime": 2 + }, + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-base.safe.global/", + "merkleRootMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "messageIdMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationHookFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "routingIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "proxyAdmin": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "storageGasOracle": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "aggregationHook": "0x13f3d4B0Ee0a713430fded9E18f7fb6c91A6E41F", + "protocolFee": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a", + "validatorAnnounce": "0x182E8d7c5F1B06201b102123FC7dF0EaeB445a7B", + "index": { + "from": 5959667 + } + }, + "bsc": { + "chainId": 56, + "domainId": 56, + "name": "bsc", + "protocol": "ethereum", + "displayName": "Binance Smart Chain", + "displayNameShort": "Binance", + "nativeToken": { + "decimals": 18, + "name": "BNB", + "symbol": "BNB" + }, + "rpcUrls": [ + { + "http": "https://bsc-dataseed.binance.org" + }, + { + "http": "https://rpc.ankr.com/bsc" + } + ], + "blockExplorers": [ + { + "name": "BscScan", + "url": "https://bscscan.com", + "apiUrl": "https://api.bscscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 15, + "estimateBlockTime": 3 + }, + "gasCurrencyCoinGeckoId": "binancecoin", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-bsc.safe.global/", + "transactionOverrides": { + "gasPrice": 7000000000 + }, + "storageGasOracle": "0x91d23D603d60445411C06e6443d81395593B7940", + "proxyAdmin": "0x65993Af9D0D3a64ec77590db7ba362D6eB78eF70", + "merkleRootMultisigIsmFactory": "0xfADBc81Ca8A957F1Bf7c78bCc575b28DBDE042b6", + "messageIdMultisigIsmFactory": "0x4B1d8352E35e3BDE36dF5ED2e73C24E35c4a96b7", + "aggregationIsmFactory": "0x38B3878c4fb44d201DA924c4a04bae3EE728c065", + "aggregationHookFactory": "0xe70E86a7D1e001D419D71F960Cb6CaD59b6A3dB6", + "routingIsmFactory": "0xc40481D13419BC8090e6AD07074Ef39E538c09CE", + "mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26", + "interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451", + "aggregationHook": "0x402Fc106576462a892355d69ACF03D46A888ae88", + "protocolFee": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "validatorAnnounce": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd", + "index": { + "from": 33068482 + } + }, + "celo": { + "chainId": 42220, + "domainId": 42220, + "name": "celo", + "protocol": "ethereum", + "displayName": "Celo", + "nativeToken": { + "decimals": 18, + "name": "CELO", + "symbol": "CELO" + }, + "rpcUrls": [ + { + "http": "https://forno.celo.org" + } + ], + "blockExplorers": [ + { + "name": "CeloScan", + "url": "https://celoscan.io", + "apiUrl": "https://api.celoscan.io/api", + "family": "etherscan" + }, + { + "name": "Blockscout", + "url": "https://explorer.celo.org", + "apiUrl": "https://explorer.celo.org/mainnet/api", + "family": "blockscout" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 0, + "estimateBlockTime": 5 + }, + "gnosisSafeTransactionServiceUrl": "https://mainnet-tx-svc.celo-safe-prod.celo-networks-dev.org/", + "storageGasOracle": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", + "proxyAdmin": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", + "merkleRootMultisigIsmFactory": "0x4C96a1abc44dc846775CE702C9E9BE821D3b487c", + "messageIdMultisigIsmFactory": "0xaB402f227e892Ef37C105bf06619c0fa106a1fB2", + "aggregationIsmFactory": "0x1722dd970a1F56040712129f5Eeb76B003fd7500", + "aggregationHookFactory": "0xc3745652EFB8555A8b064A0EA78d295133d326D2", + "routingIsmFactory": "0xec748b5623f0B50E4c5eB1CFa7Bd46C3213608b6", + "merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "aggregationHook": "0xc65890329066FB20c339Bc5C22f1756e9D3a4fF5", + "protocolFee": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "validatorAnnounce": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1", + "index": { + "from": 22208016 + } + }, + "ethereum": { + "chainId": 1, + "domainId": 1, + "name": "ethereum", + "protocol": "ethereum", + "displayName": "Ethereum", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161" + }, + { + "http": "https://cloudflare-eth.com" + } + ], + "blockExplorers": [ + { + "name": "Etherscan", + "url": "https://etherscan.io", + "apiUrl": "https://api.etherscan.io/api", + "family": "etherscan" + }, + { + "name": "Blockscout", + "url": "https://blockscout.com/eth/mainnet", + "apiUrl": "https://blockscout.com/eth/mainnet/api", + "family": "blockscout" + } + ], + "blocks": { + "confirmations": 3, + "reorgPeriod": 14, + "estimateBlockTime": 13 + }, + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-mainnet.safe.global/", + "transactionOverrides": { + "maxFeePerGas": 150000000000, + "maxPriorityFeePerGas": 5000000000 + }, + "storageGasOracle": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", + "proxyAdmin": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", + "merkleRootMultisigIsmFactory": "0x47e8aF9e30C32Ab91060ED587894288786761B45", + "messageIdMultisigIsmFactory": "0xfA21D9628ADce86531854C2B7ef00F07394B0B69", + "aggregationIsmFactory": "0x46FA191Ad972D9674Ed752B69f9659A0d7b22846", + "aggregationHookFactory": "0x6D2555A8ba483CcF4409C39013F5e9a3285D3C9E", + "routingIsmFactory": "0xCb74c6aE411236CEE6803619916694BE86cF5987", + "merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "aggregationHook": "0xb87AC8EA4533AE017604E44470F7c1E550AC6F10", + "protocolFee": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "validatorAnnounce": "0xCe74905e51497b4adD3639366708b821dcBcff96", + "index": { + "from": 18466263 + } + }, + "gnosis": { + "chainId": 100, + "domainId": 100, + "name": "gnosis", + "protocol": "ethereum", + "displayName": "Gnosis", + "nativeToken": { + "name": "xDai", + "symbol": "xDai", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://rpc.gnosischain.com", + "pagination": { + "maxBlockRange": 10000, + "minBlockNumber": 25997478 + } + } + ], + "blockExplorers": [ + { + "name": "GnosisScan", + "url": "https://gnosisscan.io", + "apiUrl": "https://api.gnosisscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 14, + "estimateBlockTime": 5 + }, + "gasCurrencyCoinGeckoId": "xdai", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-gnosis-chain.safe.global/", + "storageGasOracle": "0x5E01d8F34b629E3f92d69546bbc4142A7Adee7e9", + "proxyAdmin": "0x81a92A1a272cb09d7b4970b07548463dC7aE0cB7", + "merkleRootMultisigIsmFactory": "0x8E273260EAd8B72A085B19346A676d355740e875", + "messageIdMultisigIsmFactory": "0x603f46cc520d2fc22957b81e206408590808F02F", + "aggregationIsmFactory": "0x11EF91d17c5ad3330DbCa709a8841743d3Af6819", + "aggregationHookFactory": "0xbC8AA096dabDf4A0200BB9f8D4Cbb644C3D86d7B", + "mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "routingIsmFactory": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", + "interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f", + "aggregationHook": "0xdD1FA1C12496474c1dDC67a658Ba81437F818861", + "protocolFee": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "validatorAnnounce": "0x87ED6926abc9E38b9C7C19f835B41943b622663c", + "index": { + "from": 30715963 + } + }, + "moonbeam": { + "chainId": 1284, + "domainId": 1284, + "name": "moonbeam", + "protocol": "ethereum", + "displayName": "Moonbeam", + "nativeToken": { + "decimals": 18, + "name": "GLMR", + "symbol": "GLMR" + }, + "rpcUrls": [ + { + "http": "https://rpc.api.moonbeam.network" + } + ], + "blockExplorers": [ + { + "name": "MoonScan", + "url": "https://moonscan.io", + "apiUrl": "https://api-moonbeam.moonscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 2, + "reorgPeriod": 2, + "estimateBlockTime": 12 + }, + "gnosisSafeTransactionServiceUrl": "https://transaction.multisig.moonbeam.network", + "storageGasOracle": "0x448b7ADB0dA36d41AA2AfDc9d63b97541A7b3819", + "proxyAdmin": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", + "merkleRootMultisigIsmFactory": "0xE2f485bc031Feb5a4C41C1967bf028653d75f0C3", + "messageIdMultisigIsmFactory": "0x84Df48F8f241f11d0fA302d09d73030429Bd9C73", + "aggregationIsmFactory": "0x40c6Abcb6A2CdC8882d4bEcaC47927005c7Bb8c2", + "aggregationHookFactory": "0x59cC3E7A49DdC4893eB8754c7908f96072A7DbE8", + "routingIsmFactory": "0x98Aa6239FfCcEc73A662a5e5e26Bc3fD7c7291B7", + "mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "aggregationHook": "0x23cca255aE83F57F39EAf9D14fB9FdaDF22D5863", + "protocolFee": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "validatorAnnounce": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "index": { + "from": 4763137 + } + }, + "optimism": { + "chainId": 10, + "domainId": 10, + "name": "optimism", + "protocol": "ethereum", + "displayName": "Optimism", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://mainnet.optimism.io" + } + ], + "blockExplorers": [ + { + "name": "Etherscan", + "url": "https://optimistic.etherscan.io", + "apiUrl": "https://api-optimistic.etherscan.io/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 0, + "estimateBlockTime": 3 + }, + "gasCurrencyCoinGeckoId": "ethereum", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-optimism.safe.global/", + "storageGasOracle": "0x27e88AeB8EA4B159d81df06355Ea3d20bEB1de38", + "proxyAdmin": "0xE047cb95FB3b7117989e911c6afb34771183fC35", + "merkleRootMultisigIsmFactory": "0xCA6Cb9Bc3cfF9E11003A06617cF934B684Bc78BC", + "messageIdMultisigIsmFactory": "0xAa4Be20E9957fE21602c74d7C3cF5CB1112EA9Ef", + "aggregationIsmFactory": "0x7491843F3A5Ba24E0f17a22645bDa04A1Ae2c584", + "aggregationHookFactory": "0x15DEeAB8dECDe553bb0B1F9C00984cbcae1af3D7", + "routingIsmFactory": "0x89E3530137aD51743536443a3EC838b502E72eb7", + "merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "aggregationHook": "0x4ccC6d8eB79f2a1EC9bcb0f211fef7907631F91f", + "protocolFee": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "validatorAnnounce": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "index": { + "from": 111554952 + } + }, + "polygon": { + "chainId": 137, + "domainId": 137, + "name": "polygon", + "protocol": "ethereum", + "displayName": "Polygon", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://rpc-mainnet.matic.quiknode.pro", + "pagination": { + "maxBlockRange": 10000, + "minBlockNumber": 19657100 + } + }, + { + "http": "https://polygon-rpc.com" + } + ], + "blockExplorers": [ + { + "name": "PolygonScan", + "url": "https://polygonscan.com", + "apiUrl": "https://api.polygonscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 3, + "reorgPeriod": 256, + "estimateBlockTime": 2 + }, + "gasCurrencyCoinGeckoId": "matic-network", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-polygon.safe.global/", + "transactionOverrides": { + "maxFeePerGas": 500000000000, + "maxPriorityFeePerGas": 100000000000 + }, + "storageGasOracle": "0xA3a24EC5670F1F416AB9fD554FcE2f226AE9D7eB", + "proxyAdmin": "0xC4F7590C5d30BE959225dC75640657954A86b980", + "merkleRootMultisigIsmFactory": "0xa9E0E18E78b098c2DE36c42E4DDEA13ce214c592", + "messageIdMultisigIsmFactory": "0xEa5Be2AD66BB1BA321B7aCf0A079fBE304B09Ca0", + "aggregationIsmFactory": "0x81AdDD9Ca89105063DaDEBd5B4408551Ce850E22", + "aggregationHookFactory": "0xFeeB86e70e4a640cDd29636CCE19BD6fe8628135", + "routingIsmFactory": "0xF0752A65ffB2153EaE53F6a70c858a87022d5c56", + "mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6", + "interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2", + "aggregationHook": "0x34dAb05650Cf590088bA18aF9d597f3e081bCc47", + "protocolFee": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "validatorAnnounce": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "index": { + "from": 49352047 + } + }, + "polygonzkevm": { + "protocol": "ethereum", + "chainId": 1101, + "domainId": 1101, + "name": "polygonzkevm", + "displayName": "Polygon zkEVM", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://polygonzkevm-mainnet.g.alchemy.com/v2/demo" + }, + { + "http": "https://rpc.ankr.com/polygon_zkevm" + }, + { + "http": "https://zkevm.polygonscan.com/" + } + ], + "blockExplorers": [ + { + "name": "PolygonScan", + "url": "https://zkevm.polygonscan.com/", + "apiUrl": "https://api-zkevm.polygonscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 1, + "estimateBlockTime": 10 + }, + "merkleRootMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "messageIdMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "aggregationHookFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "routingIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "storageGasOracle": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "aggregationHook": "0x8464aF853363B8d6844070F68b0AB34Cb6523d0F", + "protocolFee": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "index": { + "from": 6789061 + } + }, + "scroll": { + "chainId": 534352, + "domainId": 534352, + "name": "scroll", + "protocol": "ethereum", + "displayName": "Scroll", + "nativeToken": { + "name": "Ether", + "symbol": "ETH", + "decimals": 18 + }, + "rpcUrls": [ + { + "http": "https://scroll.blockpi.network/v1/rpc/public" + }, + { + "http": "https://scroll-mainnet.public.blastapi.io" + } + ], + "blockExplorers": [ + { + "name": "Scroll Explorer", + "url": "https://scrollscan.com/", + "apiUrl": "https://api.scrollscan.com/api", + "family": "etherscan" + } + ], + "blocks": { + "confirmations": 1, + "reorgPeriod": 1, + "estimateBlockTime": 3 + }, + "merkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "messageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "aggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "routingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "storageGasOracle": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "aggregationHook": "0x9Bc0FAf446E128a618A88a2F28960Fb2Ca169faE", + "protocolFee": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "validatorAnnounce": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "index": { + "from": 426670 + } + } + }, + "defaultRpcConsensusType": "fallback" +} diff --git a/rust/config/mainnet_config.json b/rust/config/mainnet_config.json deleted file mode 100644 index df31c64f33..0000000000 --- a/rust/config/mainnet_config.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "chains": { - "celo": { - "name": "celo", - "domain": 42220, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 0, - "index": { - "from": 16884144 - } - }, - "ethereum": { - "name": "ethereum", - "domain": 1, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 20, - "index": { - "from": 16271503 - } - }, - "avalanche": { - "name": "avalanche", - "domain": 43114, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 3, - "index": { - "from": 24145479 - } - }, - "polygon": { - "name": "polygon", - "domain": 137, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 256, - "index": { - "from": 37313389 - } - }, - "bsc": { - "name": "bsc", - "domain": 56, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 15, - "index": { - "from": 24248037 - } - }, - "arbitrum": { - "name": "arbitrum", - "domain": 42161, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 0, - "index": { - "from": 49073182 - } - }, - "optimism": { - "name": "optimism", - "domain": 10, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 0, - "index": { - "from": 55698988 - } - }, - "moonbeam": { - "name": "moonbeam", - "domain": 1284, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 2, - "connection": { - "type": "http" - }, - "index": { - "from": 2595747 - } - }, - "gnosis": { - "name": "gnosis", - "domain": 100, - "addresses": { - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524" - }, - "protocol": "ethereum", - "finalityBlocks": 14, - "index": { - "from": 25900000 - } - }, - "nautilus": { - "name": "nautilus", - "domain": 22222, - "addresses": { - "mailbox": "0xF59557dfacDc5a1cb8A36Af43aA4819a6A891e88", - "interchainGasPaymaster": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", - "validatorAnnounce": "0x23ce76645EC601148fa451e751eeB75785b97A00" - }, - "protocol": "ethereum", - "finalityBlocks": 1, - "index": { - "from": 216377 - } - }, - "solana": { - "name": "solana", - "domain": 1399811149, - "addresses": { - "mailbox": "Ge9atjAc3Ltu91VTbNpJDCjZ9CFxFyck4h3YBcTF9XPq", - "interchainGasPaymaster": "FCNfmLSZLo5x7oNYmkYU8WdPUu7pj636P9CaMxkmaCp7", - "validatorAnnounce": "C88Lk5GR6cPxYoJxPbNDDEwsx5Kxn1wZEomvQ2So333g" - }, - "protocol": "sealevel", - "finalityBlocks": 0, - "connection": { - "type": "http", - "url": "https://api.mainnet-beta.solana.com" - }, - "index": { - "from": 1, - "mode": "sequence" - } - } - } -} diff --git a/rust/config/testnet4_config.json b/rust/config/testnet4_config.json index 707e408c8a..d0fbd12598 100644 --- a/rust/config/testnet4_config.json +++ b/rust/config/testnet4_config.json @@ -98,7 +98,7 @@ "AGGREGATION": "0x6f36a2dCC2eE58eB6b4B43330788Baa350F952EC", "fallbackRoutingHook": "0xE1386148385275A27D29fC39Bd58a969CD5dCAF0", "index": { - "from": 20647937 + "from": 20566929 } }, "arbitrumgoerli": { @@ -148,7 +148,7 @@ "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B", "fallbackRoutingHook": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", "index": { - "from": 51782328 + "from": 50669378 } }, "basegoerli": { @@ -355,7 +355,7 @@ "AGGREGATION": "0x16c328B3976e5624D8AC38E362574e694676Ac6b", "fallbackRoutingHook": "0xc278DDe83018F0e8c624b208e6D9E6251d263B1d", "index": { - "from": 34641957 + "from": 34506952 } }, "fuji": { @@ -453,7 +453,7 @@ "AGGREGATION": "0x39202263246c48eb80879870e9c547Bc787cdfC6", "fallbackRoutingHook": "0x50897eDCb3f1bB2A90f20DA5a8dF0e5c57A146e3", "index": { - "from": 27245961 + "from": 27090437 } }, "goerli": { @@ -633,7 +633,7 @@ "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", "fallbackRoutingHook": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3", "index": { - "from": 5382573 + "from": 5355188 } }, "mumbai": { @@ -739,7 +739,7 @@ "AGGREGATION": "0xE794ff773fcd25ad43749CbCAE8e69f7f64810EF", "fallbackRoutingHook": "0xFA005A892EbDACFcc3f1EF0111A7406c779c3647", "index": { - "from": 41804759 + "from": 41618135 } }, "optimismgoerli": { @@ -789,7 +789,7 @@ "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20", "fallbackRoutingHook": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F", "index": { - "from": 16597573 + "from": 16395052 } }, "polygonzkevmtestnet": { @@ -838,7 +838,7 @@ "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75", "fallbackRoutingHook": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5", "index": { - "from": 3049869 + "from": 3019086 } }, "scrollsepolia": { @@ -871,6 +871,9 @@ "estimateBlockTime": 3 }, "isTestnet": true, + "transactionOverrides": { + "gasLimit": 5000000 + }, "merkleRootMultisigIsmFactory": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7", "messageIdMultisigIsmFactory": "0xeb6f11189197223c656807a83B0DD374f9A6dF44", "aggregationIsmFactory": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37", @@ -944,7 +947,7 @@ "AGGREGATION": "0x5861Baf9aa7eC91e88585aB3bd8e3183B0768437", "fallbackRoutingHook": "0x7c115c16E34c74afdb88bd268EaB19bC705891FE", "index": { - "from": 1941608 + "from": 1846115 } }, "sepolia": { @@ -983,6 +986,9 @@ "estimateBlockTime": 13 }, "isTestnet": true, + "transactionOverrides": { + "gasLimit": 1000000 + }, "merkleRootMultisigIsmFactory": "0x0a71AcC99967829eE305a285750017C4916Ca269", "messageIdMultisigIsmFactory": "0xFEb9585b2f948c1eD74034205a7439261a9d27DD", "aggregationIsmFactory": "0xC83e12EF2627ACE445C298e6eC418684918a6002", @@ -999,9 +1005,9 @@ "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", "fallbackRoutingHook": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E", "index": { - "from": 4590471 + "from": 4558491 } } }, "defaultRpcConsensusType": "fallback" -} +} \ No newline at end of file diff --git a/typescript/infra/config/environments/index.ts b/typescript/infra/config/environments/index.ts index 7080679122..e38c89addd 100644 --- a/typescript/infra/config/environments/index.ts +++ b/typescript/infra/config/environments/index.ts @@ -1,9 +1,9 @@ -import { environment as mainnet2 } from './mainnet2'; +import { environment as mainnet3 } from './mainnet3'; import { environment as test } from './test'; import { environment as testnet4 } from './testnet4'; export const environments = { test, testnet4, - mainnet2, + mainnet3, }; diff --git a/typescript/infra/config/environments/mainnet2/agent.ts b/typescript/infra/config/environments/mainnet2/agent.ts deleted file mode 100644 index 369ad0389f..0000000000 --- a/typescript/infra/config/environments/mainnet2/agent.ts +++ /dev/null @@ -1,196 +0,0 @@ -import { - GasPaymentEnforcementPolicyType, - RpcConsensusType, - chainMetadata, - getDomainId, - hyperlaneEnvironments, -} from '@hyperlane-xyz/sdk'; -import { ProtocolType, objFilter, objMap } from '@hyperlane-xyz/utils'; - -import { - RootAgentConfig, - allAgentChainNames, - routerMatchingList, -} from '../../../src/config'; -import { GasPaymentEnforcementConfig } from '../../../src/config/agent/relayer'; -import { ALL_KEY_ROLES, Role } from '../../../src/roles'; -import { Contexts } from '../../contexts'; - -import { agentChainNames, environment } from './chains'; -import { helloWorld } from './helloworld'; -import { validatorChainConfig } from './validators'; - -const releaseCandidateHelloworldMatchingList = routerMatchingList( - helloWorld[Contexts.ReleaseCandidate].addresses, -); - -const interchainQueryRouters = objFilter( - objMap(hyperlaneEnvironments.mainnet, (_, addresses) => { - return { - router: addresses.interchainQueryRouter, - }; - }), - (chain, _addresses): _addresses is { router: string } => - chainMetadata[chain].protocol === ProtocolType.Ethereum, -); - -const interchainQueriesMatchingList = routerMatchingList( - interchainQueryRouters, -); - -const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; - -const contextBase = { - namespace: environment, - runEnv: environment, - contextChainNames: agentChainNames, - environmentChainNames: allAgentChainNames(agentChainNames), - aws: { - region: 'us-east-1', - }, -} as const; - -const bscNautilusWarpRoutes: Array<{ router: string }> = [ - // ZBC - { - router: '0xC27980812E2E66491FD457D488509b7E04144b98', - }, - // ETH - { - router: '0x2a6822dc5639b3fe70de6b65b9ff872e554162fa', - }, - // USDC - { - router: '0x6937a62f93a56D2AE9392Fa1649b830ca37F3ea4', - }, - // BTC - { - router: '0xB3545006A532E8C23ebC4e33d5ab2232Cafc35Ad', - }, - // USDT - { - router: '0xb7d36720a16A1F9Cfc1f7910Ac49f03965401a36', - }, - // POSE - { - router: '0x97a2D58d30A2c838946194494207F7Cf50c25815', - }, -]; - -const gasPaymentEnforcement: GasPaymentEnforcementConfig[] = [ - { - type: GasPaymentEnforcementPolicyType.None, - // To continue relaying interchain query callbacks, we whitelist - // all messages between interchain query routers. - // This whitelist will become more strict with - // https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/1605 - matchingList: [ - ...interchainQueriesMatchingList, - { - originDomain: [getDomainId(chainMetadata.bsc)], - senderAddress: bscNautilusWarpRoutes.map((r) => r.router), - destinationDomain: '*', - recipientAddress: '*', - }, - // Temporarily don't charge gas for the Solana -> Nautilus ZBC warp route, - // as IGP indexing in the agents is currently incompatible with the deployed IGP. - { - originDomain: [getDomainId(chainMetadata.solana)], - senderAddress: ['EJqwFjvVJSAxH8Ur2PYuMfdvoJeutjmH6GkoEFQ4MdSa'], - destinationDomain: [getDomainId(chainMetadata.nautilus)], - recipientAddress: '*', - }, - // Similarly, temporarily not charging gas for Helloworld from Solana - { - originDomain: [getDomainId(chainMetadata.solana)], - senderAddress: [ - // Hyperlane context - '4k1gruSdH1r57V9QQK4aunzfMYzLFfF83jdYkkEwyem6', - // Rc context - '3pPDp16iVTJFge2sm85Q61hW61UN5xNqeG24gqFhzLFV', - ], - destinationDomain: '*', - recipientAddress: '*', - }, - ], - }, - { - type: GasPaymentEnforcementPolicyType.OnChainFeeQuoting, - }, -]; - -const hyperlane: RootAgentConfig = { - ...contextBase, - context: Contexts.Hyperlane, - rolesWithKeys: ALL_KEY_ROLES, - relayer: { - rpcConsensusType: RpcConsensusType.Fallback, - docker: { - repo, - tag: '35fdc74-20230913-104940', - }, - blacklist: [ - ...releaseCandidateHelloworldMatchingList, - { - originDomain: 137, - recipientAddress: '0xBC3cFeca7Df5A45d61BC60E7898E63670e1654aE', - }, - ], - gasPaymentEnforcement, - }, - validators: { - docker: { - repo, - tag: 'ed7569d-20230725-171222', - }, - chainDockerOverrides: { - [chainMetadata.solana.name]: { - tag: '3b0685f-20230815-110725', - }, - [chainMetadata.nautilus.name]: { - tag: '3b0685f-20230815-110725', - }, - }, - rpcConsensusType: RpcConsensusType.Quorum, - chains: validatorChainConfig(Contexts.Hyperlane), - }, - scraper: { - rpcConsensusType: RpcConsensusType.Fallback, - docker: { - repo, - tag: 'aaddba7-20230620-154941', - }, - }, -}; - -const releaseCandidate: RootAgentConfig = { - ...contextBase, - context: Contexts.ReleaseCandidate, - rolesWithKeys: [Role.Relayer, Role.Kathy, Role.Validator], - relayer: { - rpcConsensusType: RpcConsensusType.Fallback, - docker: { - repo, - tag: '35fdc74-20230913-104940', - }, - whitelist: releaseCandidateHelloworldMatchingList, - gasPaymentEnforcement, - transactionGasLimit: 750000, - // Skipping arbitrum because the gas price estimates are inclusive of L1 - // fees which leads to wildly off predictions. - skipTransactionGasLimitFor: [chainMetadata.arbitrum.name], - }, - validators: { - docker: { - repo, - tag: 'ed7569d-20230725-171222', - }, - rpcConsensusType: RpcConsensusType.Quorum, - chains: validatorChainConfig(Contexts.ReleaseCandidate), - }, -}; - -export const agents = { - [Contexts.Hyperlane]: hyperlane, - [Contexts.ReleaseCandidate]: releaseCandidate, -}; diff --git a/typescript/infra/config/environments/mainnet2/core/verification.json b/typescript/infra/config/environments/mainnet2/core/verification.json deleted file mode 100644 index e917261a0f..0000000000 --- a/typescript/infra/config/environments/mainnet2/core/verification.json +++ /dev/null @@ -1,722 +0,0 @@ -{ - "celo": [ - { - "name": "MultisigIsm", - "address": "0x9bDE63104EE030d9De419EEd6bA7D14b86D6fE3f", - "constructorArguments": "0x", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", - "constructorArguments": "0x", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x5bc68C82d33160cF4EA34d0bab3F7c27cD9eD8D6", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x616AC8Bd65bEcF4b184eC92F5C1a45a454B7F211", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x3f23f4594e1cCA1734d0A7F15495bF3C4cdb55db", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a4ec" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xeee36EA559250cF4145D9d034B75fDC61E2D7Dcf", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "ethereum": [ - { - "name": "MultisigIsm", - "address": "0xec48E52D960E54a179f70907bF28b105813877ee", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0xcC48E741996B0d77b38d9dC2bf9217e65E368E06", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xA4b2951bCd4B0ec43f2B4Deecd639551dC165E23", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "avalanche": [ - { - "name": "MultisigIsm", - "address": "0xeE80ab5B563cB3825133f29502bA34eD3707cb8C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0xFB4712576680002C2690f66C0c5eedEa5260DBfB", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a86a" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0x35BCCf7296012e1778148DB6bFD7088a75a3949A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "polygon": [ - { - "name": "MultisigIsm", - "address": "0x61A80297e77FC5395bd6Ff60EEacf7CD4f18d4a4", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0xC4F7590C5d30BE959225dC75640657954A86b980", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0xd63C65e84059b9d32bc979016bbC2976138da694", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000089" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xBF30B4F328d1F6AC47ecCcF23836F3CbB2422c9f", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xA3a24EC5670F1F416AB9fD554FcE2f226AE9D7eB", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "bsc": [ - { - "name": "MultisigIsm", - "address": "0x3a579C0bd04FC4C98A8D70EEABD9094e7be4B26D", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x65993Af9D0D3a64ec77590db7ba362D6eB78eF70", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x961877927Ec6B0a9133DbBb1d0232CB6A5C28b54", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000038" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xF1517508Ed21a1507703F1a21420170C3963dfa0", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x91d23D603d60445411C06e6443d81395593B7940", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "arbitrum": [ - { - "name": "MultisigIsm", - "address": "0x32B92bd3e5045B67FDD8dbb7A58D25980836d04C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x80Cebd56A65e46c474a1A101e89E76C4c51D179c", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x4B5bc88A0D383c3C6E72D9889afaBB12A5dCCCfa", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000a4b1" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xDfDC87F1D1fCc4ca4078d2F42A61D0E0B72FF09A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0xD3805207b65d99C075ceA938Fa7c0587026a5DF5", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - }, - { - "name": "TimelockController", - "address": "0xAC98b0cD1B64EA4fe133C6D2EDaf842cE5cF4b01", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000093a80000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ba47e1b575980b7d1b1508cc48be1df4ee5081110000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ba47e1b575980b7d1b1508cc48be1df4ee508111", - "isProxy": false - } - ], - "optimism": [ - { - "name": "MultisigIsm", - "address": "0xAab1D11E2063Bae5EB01fa946cA8d2FDe3db05D5", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0xE047cb95FB3b7117989e911c6afb34771183fC35", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x6989120F7042Df0895dBE856b73A31E4cD0A2Cad", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000000000000000000000000000000000000000000a" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xE10dE0D4F9889597786509600A92Ae597551A853", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x27e88AeB8EA4B159d81df06355Ea3d20bEB1de38", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "moonbeam": [ - { - "name": "MultisigIsm", - "address": "0xf3b1F415740A26568C45b1c771A737E31C198F09", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "Mailbox", - "address": "0x1747Fa1b94862C8648BF0637767315FD1Fa2106C", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000504" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "DeployerOwnedProxyAdmin", - "address": "0xC4eD4C2090f43D7d42902A7301aA4f997dF79BEd", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x448b7ADB0dA36d41AA2AfDc9d63b97541A7b3819", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ], - "gnosis": [ - { - "name": "MultisigIsm", - "address": "0xC343A7054838FE9F249D7E3Ec1Fa6f1D108694b8", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "ProxyAdmin", - "address": "0x81a92A1a272cb09d7b4970b07548463dC7aE0cB7", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5", - "isProxy": false, - "constructorArguments": "0x" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "OverheadIgp", - "address": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000006ca0b6d22da47f091b7613223cd4bb03a2d77918" - }, - { - "name": "Mailbox", - "address": "0x8e1d6B03F7A823e9302c9042cd0d00728F456e70", - "isProxy": false, - "constructorArguments": "0x0000000000000000000000000000000000000000000000000000000000000064" - }, - { - "name": "TransparentUpgradeableProxy", - "address": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "isProxy": true, - "constructorArguments": "0x000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a000000000000000000000000c97d8e6f57b0d64971453ddc6eb8483fec9d163a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - }, - { - "name": "ValidatorAnnounce", - "address": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "isProxy": false, - "constructorArguments": "0x00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c70" - }, - { - "name": "StorageGasOracle", - "address": "0x5E01d8F34b629E3f92d69546bbc4142A7Adee7e9", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "InterchainGasPaymaster", - "address": "0xbdd8eb3884A8F111F338b7784c163DD62d03DaF9", - "isProxy": false, - "constructorArguments": "0x000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba" - } - ] -} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/addresses.json b/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/addresses.json deleted file mode 100644 index eee1f4b7c2..0000000000 --- a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/addresses.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "bsc": { - "router": "0xB97d3bF2fC296c2cAC4056bBC8A783ff39408e20" - }, - "avalanche": { - "router": "0x2A925CD8a5d919c5c6599633090c37fe38A561b6" - }, - "polygon": { - "router": "0x6c0aC8cEA75232aa7BeD8cbe9C4f820E7a77a9C3" - }, - "celo": { - "router": "0x4151773Db70C0b2D4c43Ea44A5FB5803ff1d3e0B" - }, - "arbitrum": { - "router": "0x96271cA0ab9eeFB3Ca481749c0Ca4c705fD4F523" - }, - "optimism": { - "router": "0xA6f0A37DFDe9C2c8F46F010989C47d9edB3a9FA8" - }, - "ethereum": { - "router": "0x9311cEE522A7C122B843b66cC31C6a63e2F92641" - }, - "moonbeam": { - "router": "0xAe067C08703508230357025B38c35Cd12793628c" - }, - "gnosis": { - "router": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4" - }, - "solana": { - "router": "4k1gruSdH1r57V9QQK4aunzfMYzLFfF83jdYkkEwyem6" - } -} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/rc/addresses.json b/typescript/infra/config/environments/mainnet2/helloworld/rc/addresses.json deleted file mode 100644 index fc05200b7e..0000000000 --- a/typescript/infra/config/environments/mainnet2/helloworld/rc/addresses.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "gnosis": { - "router": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a" - }, - "bsc": { - "router": "0xe5554478F167936dB253f79f57c41770bfa00Bae" - }, - "avalanche": { - "router": "0xe1De9910fe71cC216490AC7FCF019e13a34481D7" - }, - "polygon": { - "router": "0xAb65C41a1BC580a52f0b166879122EFdce0cB868" - }, - "celo": { - "router": "0xfE29f6a4468536029Fc9c97d3a9669b9fe38E114" - }, - "arbitrum": { - "router": "0x414B67F62b143d6db6E9b633168Dd6fd4DA20642" - }, - "optimism": { - "router": "0xB4caf2CA864B413DAA502fA18A8D48cD0740fC52" - }, - "ethereum": { - "router": "0xed31c20c5517EaC05decD5F6dCd01Fe6d16fD09D" - }, - "moonbeam": { - "router": "0x3eB9eE2CFC8DCB6F58B5869D33336CFcBf1dC354" - }, - "solana": { - "router": "3pPDp16iVTJFge2sm85Q61hW61UN5xNqeG24gqFhzLFV" - } -} diff --git a/typescript/infra/config/environments/mainnet2/ism/verification.json b/typescript/infra/config/environments/mainnet2/ism/verification.json deleted file mode 100644 index 199b97842e..0000000000 --- a/typescript/infra/config/environments/mainnet2/ism/verification.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "celo": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x9bf473968629b8f8cF4ab59Aeb9640b0c93411dd", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0xc864fa3B662613cA5051f41e157d0a997f9a5A87", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x1fdfD1486b8339638C6b92f8a96D698D8182D2b1", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x82140b2ddAd4E4dd7e1D6757Fb5F9485c230B79d", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x1079056da3EC7D55521F27e1E094015C0d39Cc65", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x870aeae147917c0b87ba55613d977026d3019018", - "constructorArguments": "", - "isProxy": false - } - ], - "ethereum": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xfD548D8a8EB8366D802F24e1bC6D1d21dB057EF1", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x30B3Ef3e98B1FF72f03f71f68115E18F203Ec794", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xBF30B4F328d1F6AC47ecCcF23836F3CbB2422c9f", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xd6286a220b80128763bc0181Aa27F471fDC8E532", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x60305F347C369E31782B3bc42D08dC2c7F218807", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x2f14526ec4a7ec292e792ebf836fea303ce038fa", - "constructorArguments": "", - "isProxy": false - } - ], - "avalanche": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x270d0334bC98a02f7A4e2328B319EDEDcd7a2000", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x070d4f61b05eD9e20C9194f29Df073f2110705fc", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x0FC1A9DFAca9b6Ba11bC470Bf284Da7c107fDfF2", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x3A434432E4305C378F7a29fD63653d09ec48a145", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x6f82eC078317aAbE2ae5200f09d4550987A1bF28", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x5d6945e61a2d67f5a8e93873eaf60c9ee1313314", - "constructorArguments": "", - "isProxy": false - } - ], - "polygon": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xfF4872B62225c1f029a894D4682b250dD5577AC7", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x004D9DF774B1968989dCC9F2F389325BA61Ba370", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x720663C310D3Db506F28a8F65c39Af37BFBe0248", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x3c8d4e08ea1ad7644dcfc23e0fe708eb6a1f7ad7", - "constructorArguments": "", - "isProxy": false - } - ], - "bsc": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x4F5db88EEdEBd6a8303ed13491169d4229D9A735", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x4084054Fc83af652A1f21EA2FF2a668D796e2514", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x85392758524EEE2323Bd3029E77aFc9bA9E60216", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x43Ee7f7Cd4bB7108144126780a07c22257925060", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0xcf14426dF1D973A656e20c3AcD2B9E18C3C05793", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0xae16de9c4e403c2ed47c8be6e32e58dbcc2551e2", - "constructorArguments": "", - "isProxy": false - } - ], - "arbitrum": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x2A87BF6aE678569545B258fA11087C6F57dd9012", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x9E3075E067932d744119e583B34d11b144CE1e4A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xcC2fA09fa13857942fae408EcCEc8De307344e99", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xb98CCA546f88B825D1ae132ac0fb52B27cE68b05", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x9D7B7245C6dAEBD5543080C91523e0702fC27024", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x0bf2518aADbAb4E16b16Ba21231CE8B17E3c8843", - "constructorArguments": "", - "isProxy": false - } - ], - "optimism": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0x21581dE0CB0Ce91E87b9d5124543C75Fa01ED9CC", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0xb7d42f065E32eB6fCAac7ef83902c56164328fE2", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0x4ef980034E631CC0CFb3b065aB793611f1B6511A", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xdDF51d1f0f38ec98F60BAB4FF7edfc7e47C4eA0d", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x3A7Ff7b700681A2655377cFDc88eE2031cf270E1", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x0ca4d54b91f2d8b728117ef3fb1ce7b52017d335", - "constructorArguments": "", - "isProxy": false - } - ], - "moonbeam": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xe3DB9EdafBA60629308166B21DE2B4970bF94969", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0x20E1897CD584C3788A3C24f5e424345a55ADf90C", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xB5ec4e94ec47A70C6A38370666F713423816ce4c", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0xE80C30738DC66dad77657695e345be168D49b062", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0x147F8C69f0FCF571c03093dE4180718FaecbA31E", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x96b595b97bb5106518ac830c59b2d7cd32f2a150", - "constructorArguments": "", - "isProxy": false - } - ], - "gnosis": [ - { - "name": "StaticMultisigIsmFactory", - "address": "0xb58257cc81E47EC72fD38aE16297048de23163b4", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "StaticAggregationIsmFactory", - "address": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsmFactory", - "address": "0xbB22547D1dc681fe925f568f637Ff67aC06c20fc", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MerkleRootMultisigIsmFactory", - "address": "0x784b9D0f4eF9fb8444DfB5d24AB221C9D1A85395", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "MessageIdMultisigIsmFactory", - "address": "0xC4275763D7b621eb732847957012F1fb35C90BB8", - "constructorArguments": "", - "isProxy": false - }, - { - "name": "DomainRoutingIsm", - "address": "0x2f134de027e88142aaad486572cc91c1f81214bf", - "constructorArguments": "", - "isProxy": false - } - ] -} diff --git a/typescript/infra/config/environments/mainnet2/validators.ts b/typescript/infra/config/environments/mainnet2/validators.ts deleted file mode 100644 index a4037737c5..0000000000 --- a/typescript/infra/config/environments/mainnet2/validators.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { chainMetadata } from '@hyperlane-xyz/sdk'; - -import { ValidatorBaseChainConfigMap } from '../../../src/config/agent'; -import { Contexts } from '../../contexts'; -import { validatorBaseConfigsFn } from '../utils'; - -import { environment } from './chains'; - -export const validatorChainConfig = ( - context: Contexts, -): ValidatorBaseChainConfigMap => { - const validatorsConfig = validatorBaseConfigsFn(environment, context); - return { - celo: { - interval: 5, - reorgPeriod: 0, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x1f20274b1210046769d48174c2f0e7c25ca7d5c5'], - [Contexts.ReleaseCandidate]: [ - '0xe7a82e210f512f8e9900d6bc2acbf7981c63e66e', - ], - }, - 'celo', - ), - }, - ethereum: { - interval: 5, - reorgPeriod: 20, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x4c327ccb881a7542be77500b2833dc84c839e7b7'], - [Contexts.ReleaseCandidate]: [ - '0xaea1adb1c687b061e5b60b9da84cb69e7b5fab44', - ], - }, - 'ethereum', - ), - }, - avalanche: { - interval: 5, - reorgPeriod: 3, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xa7aa52623fe3d78c343008c95894be669e218b8d'], - [Contexts.ReleaseCandidate]: [ - '0x706976391e23dea28152e0207936bd942aba01ce', - ], - }, - 'avalanche', - ), - }, - polygon: { - interval: 5, - reorgPeriod: 256, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x59a001c3451e7f9f3b4759ea215382c1e9aa5fc1'], - [Contexts.ReleaseCandidate]: [ - '0xef372f6ff7775989b3ac884506ee31c79638c989', - ], - }, - 'polygon', - ), - }, - bsc: { - interval: 5, - reorgPeriod: 15, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xcc84b1eb711e5076b2755cf4ad1d2b42c458a45e'], - [Contexts.ReleaseCandidate]: [ - '0x0823081031a4a6f97c6083775c191d17ca96d0ab', - ], - }, - 'bsc', - ), - }, - arbitrum: { - interval: 5, - reorgPeriod: 0, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xbcb815f38d481a5eba4d7ac4c9e74d9d0fc2a7e7'], - [Contexts.ReleaseCandidate]: [ - '0x1a95b35fb809d57faf1117c1cc29a6c5df289df1', - ], - }, - 'arbitrum', - ), - }, - optimism: { - interval: 5, - reorgPeriod: 0, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x9f2296d5cfc6b5176adc7716c7596898ded13d35'], - [Contexts.ReleaseCandidate]: [ - '0x60e938bf280bbc21bacfd8bf435459d9003a8f98', - ], - }, - 'optimism', - ), - }, - moonbeam: { - interval: 5, - reorgPeriod: 2, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0x237243d32d10e3bdbbf8dbcccc98ad44c1c172ea'], - [Contexts.ReleaseCandidate]: [ - '0x0df7140811e309dc69638352545151ebb9d5e0fd', - ], - }, - 'moonbeam', - ), - }, - gnosis: { - interval: 5, - reorgPeriod: 14, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: ['0xd0529ec8df08d0d63c0f023786bfa81e4bb51fd6'], - [Contexts.ReleaseCandidate]: [ - '0x15f48e78092a4f79febface509cfd76467c6cdbb', - ], - }, - 'gnosis', - ), - }, - solana: { - interval: 5, - reorgPeriod: chainMetadata.solana.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0x3cd1a081f38874bbb075bf10b62adcb858db864c', - '0x28aa072634dd41d19471640237852e807bd9901f', - '0x8a93ba04f4e30064660670cb581d9aa10df78929', - ], - [Contexts.ReleaseCandidate]: [ - '0x8cc7dbfb5de339e4133f3af059c927ec383ace38', - ], - }, - 'solana', - ), - }, - nautilus: { - interval: 5, - reorgPeriod: chainMetadata.nautilus.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0x9c920af9467595a23cb3433adefc3854d498a437', - '0x12b583ce1623b7de3fc727ccccda24dcab1fe022', - '0xc8b996a421ff1e203070c709c1af93944c049cc0', - ], - [Contexts.ReleaseCandidate]: [ - '0xdaf2e5ddaf2532753dc78bb6fbb0a10204c888c1', - ], - }, - 'nautilus', - ), - }, - }; -}; diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts new file mode 100644 index 0000000000..d2922ebc96 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -0,0 +1,96 @@ +import { + GasPaymentEnforcementPolicyType, + RpcConsensusType, + chainMetadata, +} from '@hyperlane-xyz/sdk'; + +import { RootAgentConfig, allAgentChainNames } from '../../../src/config'; +import { GasPaymentEnforcementConfig } from '../../../src/config/agent/relayer'; +import { ALL_KEY_ROLES, Role } from '../../../src/roles'; +import { Contexts } from '../../contexts'; + +import { agentChainNames, environment } from './chains'; +import { validatorChainConfig } from './validators'; + +// const releaseCandidateHelloworldMatchingList = routerMatchingList( +// helloWorld[Contexts.ReleaseCandidate].addresses, +// ); + +const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; + +const contextBase = { + namespace: environment, + runEnv: environment, + contextChainNames: agentChainNames, + environmentChainNames: allAgentChainNames(agentChainNames), + aws: { + region: 'us-east-1', + }, +} as const; + +const gasPaymentEnforcement: GasPaymentEnforcementConfig[] = [ + { + type: GasPaymentEnforcementPolicyType.OnChainFeeQuoting, + }, +]; + +const hyperlane: RootAgentConfig = { + ...contextBase, + context: Contexts.Hyperlane, + rolesWithKeys: ALL_KEY_ROLES, + relayer: { + rpcConsensusType: RpcConsensusType.Fallback, + docker: { + repo, + tag: '2e1db12-20231025-013013', + }, + gasPaymentEnforcement, + }, + validators: { + docker: { + repo, + tag: '2e1db12-20231025-013013', + }, + rpcConsensusType: RpcConsensusType.Quorum, + chains: validatorChainConfig(Contexts.Hyperlane), + }, + scraper: { + rpcConsensusType: RpcConsensusType.Fallback, + docker: { + repo, + tag: '2e1db12-20231025-013013', + }, + }, +}; + +const releaseCandidate: RootAgentConfig = { + ...contextBase, + context: Contexts.ReleaseCandidate, + rolesWithKeys: [Role.Relayer, Role.Kathy, Role.Validator], + relayer: { + rpcConsensusType: RpcConsensusType.Fallback, + docker: { + repo, + tag: '35fdc74-20230913-104940', + }, + // whitelist: releaseCandidateHelloworldMatchingList, + gasPaymentEnforcement, + transactionGasLimit: 750000, + // Skipping arbitrum because the gas price estimates are inclusive of L1 + // fees which leads to wildly off predictions. + skipTransactionGasLimitFor: [chainMetadata.arbitrum.name], + }, + validators: { + docker: { + repo, + tag: 'ed7569d-20230725-171222', + }, + rpcConsensusType: RpcConsensusType.Quorum, + chains: validatorChainConfig(Contexts.ReleaseCandidate), + }, +}; + +export const agents = { + [Contexts.Hyperlane]: hyperlane, + [Contexts.ReleaseCandidate]: releaseCandidate, +}; diff --git a/typescript/infra/config/environments/mainnet2/chains.ts b/typescript/infra/config/environments/mainnet3/chains.ts similarity index 83% rename from typescript/infra/config/environments/mainnet2/chains.ts rename to typescript/infra/config/environments/mainnet3/chains.ts index 4a38456d86..14465a19ce 100644 --- a/typescript/infra/config/environments/mainnet2/chains.ts +++ b/typescript/infra/config/environments/mainnet3/chains.ts @@ -10,6 +10,7 @@ export const ethereumMainnetConfigs: ChainMap = { }, }, avalanche: chainMetadata.avalanche, + base: chainMetadata.base, polygon: { ...chainMetadata.polygon, blocks: { @@ -22,6 +23,8 @@ export const ethereumMainnetConfigs: ChainMap = { // gasPrice: 50 * 10 ** 9, // 50 gwei }, }, + polygonzkevm: chainMetadata.polygonzkevm, + scroll: chainMetadata.scroll, celo: chainMetadata.celo, arbitrum: chainMetadata.arbitrum, optimism: chainMetadata.optimism, @@ -41,20 +44,20 @@ export const ethereumMainnetConfigs: ChainMap = { }; // Blessed non-Ethereum chains. -export const nonEthereumMainnetConfigs: ChainMap = { - solana: chainMetadata.solana, -}; +// export const nonEthereumMainnetConfigs: ChainMap = { +// solana: chainMetadata.solana, +// }; export const mainnetConfigs: ChainMap = { ...ethereumMainnetConfigs, - ...nonEthereumMainnetConfigs, + // ...nonEthereumMainnetConfigs, }; export type MainnetChains = keyof typeof mainnetConfigs; export const supportedChainNames = Object.keys( mainnetConfigs, ) as MainnetChains[]; -export const environment = 'mainnet2'; +export const environment = 'mainnet3'; export const ethereumChainNames = Object.keys( ethereumMainnetConfigs, @@ -62,8 +65,8 @@ export const ethereumChainNames = Object.keys( const validatorChainNames = [ ...supportedChainNames, - chainMetadata.solana.name, - chainMetadata.nautilus.name, + // chainMetadata.solana.name, + // chainMetadata.nautilus.name, ]; const relayerChainNames = validatorChainNames; diff --git a/typescript/infra/config/environments/mainnet2/core.ts b/typescript/infra/config/environments/mainnet3/core.ts similarity index 74% rename from typescript/infra/config/environments/mainnet2/core.ts rename to typescript/infra/config/environments/mainnet3/core.ts index 0ae945b568..3ecf7e28b8 100644 --- a/typescript/infra/config/environments/mainnet2/core.ts +++ b/typescript/infra/config/environments/mainnet3/core.ts @@ -18,21 +18,7 @@ import { igp } from './igp'; import { owners } from './owners'; export const core: ChainMap = objMap(owners, (local, owner) => { - const defaultIsm = routingIsm('mainnet2', local, Contexts.Hyperlane); - - let upgrade: CoreConfig['upgrade']; - if (local === 'arbitrum') { - upgrade = { - timelock: { - // 7 days in seconds - delay: 7 * 24 * 60 * 60, - roles: { - proposer: owner, - executor: owner, - }, - }, - }; - } + const defaultIsm = routingIsm('mainnet3', local, Contexts.Hyperlane); const merkleHook: MerkleTreeHookConfig = { type: HookType.MERKLE_TREE, @@ -51,7 +37,7 @@ export const core: ChainMap = objMap(owners, (local, owner) => { const requiredHook: ProtocolFeeHookConfig = { type: HookType.PROTOCOL_FEE, maxProtocolFee: ethers.utils.parseUnits('1', 'gwei'), // 1 gwei of native token - protocolFee: BigNumber.from(1), // 1 wei + protocolFee: BigNumber.from(0), // 0 wei beneficiary: owner, owner, }; diff --git a/typescript/infra/config/environments/mainnet3/core/verification.json b/typescript/infra/config/environments/mainnet3/core/verification.json new file mode 100644 index 0000000000..1f81718f07 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/core/verification.json @@ -0,0 +1,1292 @@ +{ + "optimism": [ + { + "name": "Mailbox", + "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false + } + ], + "arbitrum": [ + { + "name": "Mailbox", + "address": "0x4826ce713944D8B3Eb98c73050bfc01e8fB6655A", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4b1", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "constructorArguments": "0000000000000000000000004826ce713944d8b3eb98c73050bfc01e8fb6655a00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x4826ce713944D8B3Eb98c73050bfc01e8fB6655A", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4b1", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "constructorArguments": "0000000000000000000000004826ce713944d8b3eb98c73050bfc01e8fb6655a00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x748040afB89B8FdBb992799808215419d36A0930", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfe181073f24A4fB69Ece1B3F6CCC9408157f96EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "constructorArguments": "000000000000000000000000fe181073f24a4fb69ece1b3f6ccc9408157f96eb00000000000000000000000080cebd56a65e46c474a1a101e89e76c4c51d179c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb9", + "isProxy": false + } + ], + "base": [ + { + "name": "ProxyAdmin", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000002105", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProxyAdmin", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000002105", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfDc940D5c148bA038505DAa5524730644527229a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000fdc940d5c148ba038505daa5524730644527229a0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xfDc940D5c148bA038505DAa5524730644527229a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000fdc940d5c148ba038505daa5524730644527229a0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x182E8d7c5F1B06201b102123FC7dF0EaeB445a7B", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false + } + ], + "avalanche": [ + { + "name": "Mailbox", + "address": "0xac6DfcAc1B0ED0dbe0e4836a1158263a24e8D896", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a86a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "constructorArguments": "000000000000000000000000ac6dfcac1b0ed0dbe0e4836a1158263a24e8d896000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xac6DfcAc1B0ED0dbe0e4836a1158263a24e8D896", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a86a", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "constructorArguments": "000000000000000000000000ac6dfcac1b0ed0dbe0e4836a1158263a24e8d896000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x0FE58030a50ef83A02185a1cCc74acFA47E3df1a", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "constructorArguments": "0000000000000000000000000fe58030a50ef83a02185a1ccc74acfa47e3df1a000000000000000000000000d7cf8c05fd81b8ca7cff8e6c49b08a9d63265c9b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd6", + "isProxy": false + } + ], + "scroll": [ + { + "name": "ProxyAdmin", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false + } + ], + "polygonzkevm": [ + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "ProxyAdmin", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + }, + { + "name": "StorageGasOracle", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false + } + ], + "bsc": [ + { + "name": "Mailbox", + "address": "0xBFA300164A04437D64Afda390736e6DC45096da1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000038", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "constructorArguments": "000000000000000000000000bfa300164a04437d64afda390736e6dc45096da100000000000000000000000065993af9d0d3a64ec77590db7ba362d6eb78ef7000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xBFA300164A04437D64Afda390736e6DC45096da1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000038", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "constructorArguments": "000000000000000000000000bfa300164a04437d64afda390736e6dc45096da100000000000000000000000065993af9d0d3a64ec77590db7ba362d6eb78ef7000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd", + "constructorArguments": "0000000000000000000000002971b9aec44be4eb673df1b88cdb57b96eefe8a4", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd", + "constructorArguments": "0000000000000000000000002971b9aec44be4eb673df1b88cdb57b96eefe8a4", + "isProxy": false + } + ], + "gnosis": [ + { + "name": "Mailbox", + "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x87ED6926abc9E38b9C7C19f835B41943b622663c", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f", + "isProxy": false + } + ], + "celo": [ + { + "name": "Mailbox", + "address": "0x0564ECF87C9Be194BbCDB8BC606132b163F76DeD", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4ec", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "constructorArguments": "0000000000000000000000000564ecf87c9be194bbcdb8bc606132b163f76ded00000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x0564ECF87C9Be194BbCDB8BC606132b163F76DeD", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000a4ec", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "constructorArguments": "0000000000000000000000000564ecf87c9be194bbcdb8bc606132b163f76ded00000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x819b9E7D55E2E679d02d023559cB9d583F427078", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "constructorArguments": "000000000000000000000000819b9e7d55e2e679d02d023559cb9d583f42707800000000000000000000000090f9a2e9ece93516d65fdab726a3c62f5960a1b900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb", + "isProxy": false + } + ], + "ethereum": [ + { + "name": "Mailbox", + "address": "0x7b4D881c122a5e61adCFfb56A2e3CE9927D53455", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000001", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "constructorArguments": "0000000000000000000000007b4d881c122a5e61adcffb56a2e3ce9927d5345500000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCe74905e51497b4adD3639366708b821dcBcff96", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "Mailbox", + "address": "0x7b4D881c122a5e61adCFfb56A2e3CE9927D53455", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000001", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "constructorArguments": "0000000000000000000000007b4d881c122a5e61adcffb56a2e3ce9927d5345500000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x1008FAbD07aBd93a7D9bB81803a89cC3a834E1A9", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "constructorArguments": "0000000000000000000000001008fabd07abd93a7d9bb81803a89cc3a834e1a900000000000000000000000075ee15ee1b4a75fa3e2fdf5df3253c25599cc65900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0xCe74905e51497b4adD3639366708b821dcBcff96", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d239", + "isProxy": false + } + ], + "moonbeam": [ + { + "name": "Mailbox", + "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "MerkleTreeHook", + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + }, + { + "name": "InterchainGasPaymaster", + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false + } + ], + "polygon": [ + { + "name": "Mailbox", + "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "Mailbox", + "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "isProxy": false + }, + { + "name": "TransparentUpgradeableProxy", + "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true + }, + { + "name": "ProtocolFee", + "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "isProxy": false + }, + { + "name": "ProtocolFee", + "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false + }, + { + "name": "ValidatorAnnounce", + "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "isProxy": false + } + ] +} diff --git a/typescript/infra/config/environments/mainnet2/create2/addresses.json b/typescript/infra/config/environments/mainnet3/create2/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/create2/addresses.json rename to typescript/infra/config/environments/mainnet3/create2/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/create2/verification.json b/typescript/infra/config/environments/mainnet3/create2/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/create2/verification.json rename to typescript/infra/config/environments/mainnet3/create2/verification.json diff --git a/typescript/infra/config/environments/mainnet2/funding.ts b/typescript/infra/config/environments/mainnet3/funding.ts similarity index 89% rename from typescript/infra/config/environments/mainnet2/funding.ts rename to typescript/infra/config/environments/mainnet3/funding.ts index 4cd4d2a93d..eeb834569e 100644 --- a/typescript/infra/config/environments/mainnet2/funding.ts +++ b/typescript/infra/config/environments/mainnet3/funding.ts @@ -9,7 +9,7 @@ import { environment } from './chains'; export const keyFunderConfig: KeyFunderConfig = { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '9a8d85c-20231013-213905', + tag: '4a3e6ee-20231025-192258', }, // We're currently using the same deployer key as mainnet. // To minimize nonce clobbering we offset the key funder cron @@ -21,7 +21,7 @@ export const keyFunderConfig: KeyFunderConfig = { contextFundingFrom: Contexts.Hyperlane, contextsAndRolesToFund: { [Contexts.Hyperlane]: [Role.Relayer, Role.Kathy], - [Contexts.ReleaseCandidate]: [Role.Relayer, Role.Kathy], + // [Contexts.ReleaseCandidate]: [Role.Relayer, Role.Kathy], }, connectionType: RpcConsensusType.Single, }; diff --git a/typescript/infra/config/environments/mainnet2/gas-oracle.ts b/typescript/infra/config/environments/mainnet3/gas-oracle.ts similarity index 87% rename from typescript/infra/config/environments/mainnet2/gas-oracle.ts rename to typescript/infra/config/environments/mainnet3/gas-oracle.ts index 7e98342a37..c3dc53ec6d 100644 --- a/typescript/infra/config/environments/mainnet2/gas-oracle.ts +++ b/typescript/infra/config/environments/mainnet3/gas-oracle.ts @@ -45,6 +45,9 @@ const gasPrices: ChainMap = { // Arbitrarily chosen as gas prices aren't really a thing // in Solana. solana: ethers.BigNumber.from('28'), + base: ethers.utils.parseUnits('1', 'gwei'), + scroll: ethers.utils.parseUnits('1', 'gwei'), + polygonzkevm: ethers.utils.parseUnits('2', 'gwei'), }; // Accurate from coingecko as of Mar 9, 2023. @@ -71,6 +74,15 @@ const tokenUsdPrices: ChainMap = { gnosis: ethers.utils.parseUnits('1.00', TOKEN_EXCHANGE_RATE_DECIMALS), // https://www.coingecko.com/en/coins/solana solana: ethers.utils.parseUnits('18.85', TOKEN_EXCHANGE_RATE_DECIMALS), + // https://www.coingecko.com/en/coins/ethereum + base: ethers.utils.parseUnits('1619.00', TOKEN_EXCHANGE_RATE_DECIMALS), + // https://www.coingecko.com/en/coins/ethereum + scroll: ethers.utils.parseUnits('1619.00', TOKEN_EXCHANGE_RATE_DECIMALS), + // https://www.coingecko.com/en/coins/ethereum + polygonzkevm: ethers.utils.parseUnits( + '1619.00', + TOKEN_EXCHANGE_RATE_DECIMALS, + ), }; // Gets the exchange rate of the remote quoted in local tokens diff --git a/typescript/infra/config/environments/mainnet2/helloworld.ts b/typescript/infra/config/environments/mainnet3/helloworld.ts similarity index 92% rename from typescript/infra/config/environments/mainnet2/helloworld.ts rename to typescript/infra/config/environments/mainnet3/helloworld.ts index 467004e47b..4f0fdde31a 100644 --- a/typescript/infra/config/environments/mainnet2/helloworld.ts +++ b/typescript/infra/config/environments/mainnet3/helloworld.ts @@ -13,7 +13,7 @@ export const hyperlane: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '9a8d85c-20231013-213905', + tag: 'bbe8928-20231025-215311', }, chainsToSkip: [], runEnv: environment, @@ -34,7 +34,7 @@ export const releaseCandidate: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '9a8d85c-20231013-213905', + tag: 'bef2251-20231025-174850', }, chainsToSkip: [], runEnv: environment, @@ -50,5 +50,5 @@ export const releaseCandidate: HelloWorldConfig = { export const helloWorld = { [Contexts.Hyperlane]: hyperlane, - [Contexts.ReleaseCandidate]: releaseCandidate, + // [Contexts.ReleaseCandidate]: releaseCandidate, }; diff --git a/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/addresses.json b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/addresses.json new file mode 100644 index 0000000000..06547636b6 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/addresses.json @@ -0,0 +1,38 @@ +{ + "polygon": { + "router": "0x42ad84C5d2a90e574678958133B8a13CA9F44AAF" + }, + "bsc": { + "router": "0x22Fd11F93F0303346c9b9070cc67C4Bc7aB2dABB" + }, + "arbitrum": { + "router": "0xb2BFFD0248C7a0029860A29fD4Efe762a22f93Af" + }, + "optimism": { + "router": "0x3da5fDCcC661c84454f49dB0Cf519561BC7c2729" + }, + "moonbeam": { + "router": "0xE25d0D46a42a106Cdf4943262644DD5E26fa7bfF" + }, + "gnosis": { + "router": "0xA166219dF110BDA97b91e65D4BB4Aae4159978b9" + }, + "base": { + "router": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162" + }, + "scroll": { + "router": "0x0be2Ae2f6D02a3e0e00ECB57D3E1fCbb7f8F38F4" + }, + "polygonzkevm": { + "router": "0xaad207a0Fd7a4e3C927Ccc78ac8134baF586B852" + }, + "celo": { + "router": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8" + }, + "ethereum": { + "router": "0x7ff2bF58C38A41AD7C9CbC14e780e8a7EDBbd48D" + }, + "avalanche": { + "router": "0xd54fF402ADf0a7CBad9626B1261bF4bEB26A437a" + } +} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/verification.json b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/verification.json similarity index 61% rename from typescript/infra/config/environments/mainnet2/helloworld/hyperlane/verification.json rename to typescript/infra/config/environments/mainnet3/helloworld/hyperlane/verification.json index 5dad6c7be7..8df25db64d 100644 --- a/typescript/infra/config/environments/mainnet2/helloworld/hyperlane/verification.json +++ b/typescript/infra/config/environments/mainnet3/helloworld/hyperlane/verification.json @@ -11,6 +11,12 @@ "address": "0xB97d3bF2fC296c2cAC4056bBC8A783ff39408e20", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x22Fd11F93F0303346c9b9070cc67C4Bc7aB2dABB", + "constructorArguments": "0000000000000000000000002971b9aec44be4eb673df1b88cdb57b96eefe8a40000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "avalanche": [ @@ -25,6 +31,12 @@ "address": "0x2A925CD8a5d919c5c6599633090c37fe38A561b6", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xd54fF402ADf0a7CBad9626B1261bF4bEB26A437a", + "constructorArguments": "000000000000000000000000ff06afcaabaddd1fb08371f9cca15d73d51febd60000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "polygon": [ @@ -39,6 +51,12 @@ "address": "0x6c0aC8cEA75232aa7BeD8cbe9C4f820E7a77a9C3", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x42ad84C5d2a90e574678958133B8a13CA9F44AAF", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "celo": [ @@ -53,6 +71,12 @@ "address": "0x4151773Db70C0b2D4c43Ea44A5FB5803ff1d3e0B", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8", + "constructorArguments": "00000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "arbitrum": [ @@ -67,6 +91,12 @@ "address": "0x96271cA0ab9eeFB3Ca481749c0Ca4c705fD4F523", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xb2BFFD0248C7a0029860A29fD4Efe762a22f93Af", + "constructorArguments": "000000000000000000000000979ca5202784112f4738403dbec5d0f3b9daabb90000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "optimism": [ @@ -81,6 +111,12 @@ "address": "0xA6f0A37DFDe9C2c8F46F010989C47d9edB3a9FA8", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x3da5fDCcC661c84454f49dB0Cf519561BC7c2729", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "ethereum": [ @@ -95,6 +131,12 @@ "address": "0x9311cEE522A7C122B843b66cC31C6a63e2F92641", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0x7ff2bF58C38A41AD7C9CbC14e780e8a7EDBbd48D", + "constructorArguments": "000000000000000000000000c005dc82818d67af737725bd4bf75435d065d2390000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "moonbeam": [ @@ -109,6 +151,12 @@ "address": "0xAe067C08703508230357025B38c35Cd12793628c", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xE25d0D46a42a106Cdf4943262644DD5E26fa7bfF", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc30000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "gnosis": [ @@ -129,6 +177,36 @@ "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "00000000000000000000000035231d4c2d8b8adcb5617a638a0c4548684c7c7000000000000000000000000056f52c0a1ddcd557285f7cbc782d3d83096ce1cc", "isProxy": false + }, + { + "name": "Router", + "address": "0xA166219dF110BDA97b91e65D4BB4Aae4159978b9", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "base": [ + { + "name": "Router", + "address": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "scroll": [ + { + "name": "Router", + "address": "0x0be2Ae2f6D02a3e0e00ECB57D3E1fCbb7f8F38F4", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "polygonzkevm": [ + { + "name": "Router", + "address": "0xaad207a0Fd7a4e3C927Ccc78ac8134baF586B852", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ] } diff --git a/typescript/infra/config/environments/mainnet3/helloworld/rc/addresses.json b/typescript/infra/config/environments/mainnet3/helloworld/rc/addresses.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/helloworld/rc/addresses.json @@ -0,0 +1 @@ +{} diff --git a/typescript/infra/config/environments/mainnet2/helloworld/rc/verification.json b/typescript/infra/config/environments/mainnet3/helloworld/rc/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/helloworld/rc/verification.json rename to typescript/infra/config/environments/mainnet3/helloworld/rc/verification.json diff --git a/typescript/infra/config/environments/mainnet2/igp.ts b/typescript/infra/config/environments/mainnet3/igp.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/igp.ts rename to typescript/infra/config/environments/mainnet3/igp.ts diff --git a/typescript/infra/config/environments/mainnet2/index.ts b/typescript/infra/config/environments/mainnet3/index.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/index.ts rename to typescript/infra/config/environments/mainnet3/index.ts diff --git a/typescript/infra/config/environments/mainnet2/infrastructure.ts b/typescript/infra/config/environments/mainnet3/infrastructure.ts similarity index 90% rename from typescript/infra/config/environments/mainnet2/infrastructure.ts rename to typescript/infra/config/environments/mainnet3/infrastructure.ts index badf6c7222..c0d562f91b 100644 --- a/typescript/infra/config/environments/mainnet2/infrastructure.ts +++ b/typescript/infra/config/environments/mainnet3/infrastructure.ts @@ -33,9 +33,14 @@ export const infrastructure: InfrastructureConfig = { }, gcpServiceAccountName: 'k8s-external-secrets-mainnet2', accessibleGCPSecretPrefixes: [ + 'hyperlane-mainnet-', + 'mainnet-', 'hyperlane-mainnet2-', 'rc-mainnet2-', 'mainnet2-', + 'hyperlane-mainnet3-', + 'rc-mainnet3-', + 'mainnet3-', ], }, }; diff --git a/typescript/infra/config/environments/mainnet3/ism/verification.json b/typescript/infra/config/environments/mainnet3/ism/verification.json new file mode 100644 index 0000000000..783d89e8ac --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/ism/verification.json @@ -0,0 +1,1430 @@ +{ + "celo": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x4C96a1abc44dc846775CE702C9E9BE821D3b487c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x7F6cD932412508E9a8297CA626C56Ed3D279937F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xaB402f227e892Ef37C105bf06619c0fa106a1fB2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xf422a4Af27e5fbDDAf799A1d92532Edd5dE58fF3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x1722dd970a1F56040712129f5Eeb76B003fd7500", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x43379b54E27EA8387B34B5c15534E230d490f0A8", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xc3745652EFB8555A8b064A0EA78d295133d326D2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x8d9dB8bbF91d7852F36a954229BDf6ec69A3ae00", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xec748b5623f0B50E4c5eB1CFa7Bd46C3213608b6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0xe6a4646EE138e282A36c0665Ad028ccdC3E525E2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x7F6cD932412508E9a8297CA626C56Ed3D279937F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xf422a4Af27e5fbDDAf799A1d92532Edd5dE58fF3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x43379b54E27EA8387B34B5c15534E230d490f0A8", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x8d9dB8bbF91d7852F36a954229BDf6ec69A3ae00", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xe6a4646EE138e282A36c0665Ad028ccdC3E525E2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x7F6cD932412508E9a8297CA626C56Ed3D279937F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xf422a4Af27e5fbDDAf799A1d92532Edd5dE58fF3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x43379b54E27EA8387B34B5c15534E230d490f0A8", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x8d9dB8bbF91d7852F36a954229BDf6ec69A3ae00", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xe6a4646EE138e282A36c0665Ad028ccdC3E525E2", + "constructorArguments": "", + "isProxy": true + } + ], + "ethereum": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x47e8aF9e30C32Ab91060ED587894288786761B45", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xD4dAcca08737d2a910b4Ad401f805F83D0C170f3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xfA21D9628ADce86531854C2B7ef00F07394B0B69", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x5371942D3Ed75b10d77F0f4184dDc85cC35A1420", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x46FA191Ad972D9674Ed752B69f9659A0d7b22846", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xc2cCfc65D2D5719E78a77EA5f6C10AA4cdEC6719", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x6D2555A8ba483CcF4409C39013F5e9a3285D3C9E", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x03862793C0EE59af3e475f7Ca67406b547FfD95c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xCb74c6aE411236CEE6803619916694BE86cF5987", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x65f02B4fB2F0ccAb58955e4b816EebD4DFCbBaFf", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xD4dAcca08737d2a910b4Ad401f805F83D0C170f3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x5371942D3Ed75b10d77F0f4184dDc85cC35A1420", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xc2cCfc65D2D5719E78a77EA5f6C10AA4cdEC6719", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x03862793C0EE59af3e475f7Ca67406b547FfD95c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x65f02B4fB2F0ccAb58955e4b816EebD4DFCbBaFf", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xD4dAcca08737d2a910b4Ad401f805F83D0C170f3", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x5371942D3Ed75b10d77F0f4184dDc85cC35A1420", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xc2cCfc65D2D5719E78a77EA5f6C10AA4cdEC6719", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x03862793C0EE59af3e475f7Ca67406b547FfD95c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x65f02B4fB2F0ccAb58955e4b816EebD4DFCbBaFf", + "constructorArguments": "", + "isProxy": true + } + ], + "avalanche": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x896cF1D1B66cD211633eDd589fF158E8Cfaf9B54", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x06b9dC1a6629122e7188698d20A92edbE966914f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8819D653DF5b1FC0DdB32189a2704E471AF8483c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xeD8F4199e4409FDAe2AfD50dC7571f6771AadE50", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0xa5E13796eB7d2EDCc88012c8cfF90D69B51FcF9f", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x86Bb7AC2BF6044289aEAFFC421b118E38C995c5a", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x3bF6Ac986C7Af9A9Ac356C0e99C0041EFd8D96e7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x3988b98C43C7A1f7C9D3edce6CeAD3b8a3F3d969", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xA9Ddc70f50009aF8bDB312aA757B4304b0F7BbB3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x61ca653A1F61A69E6498c45874237C4f1D8fC645", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x06b9dC1a6629122e7188698d20A92edbE966914f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xeD8F4199e4409FDAe2AfD50dC7571f6771AadE50", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x86Bb7AC2BF6044289aEAFFC421b118E38C995c5a", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3988b98C43C7A1f7C9D3edce6CeAD3b8a3F3d969", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x61ca653A1F61A69E6498c45874237C4f1D8fC645", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x06b9dC1a6629122e7188698d20A92edbE966914f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xeD8F4199e4409FDAe2AfD50dC7571f6771AadE50", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x86Bb7AC2BF6044289aEAFFC421b118E38C995c5a", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3988b98C43C7A1f7C9D3edce6CeAD3b8a3F3d969", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x61ca653A1F61A69E6498c45874237C4f1D8fC645", + "constructorArguments": "", + "isProxy": true + } + ], + "polygon": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xa9E0E18E78b098c2DE36c42E4DDEA13ce214c592", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x14CEa5Df89Fa709409e83ebEA9518C5B6fb4B19B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xEa5Be2AD66BB1BA321B7aCf0A079fBE304B09Ca0", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x370815EdA08438c8F385a6f7AB5A2Dfa75008abC", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x81AdDD9Ca89105063DaDEBd5B4408551Ce850E22", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xCC38436BFB9B9888be96b59d825E0fE5DC19e05c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xFeeB86e70e4a640cDd29636CCE19BD6fe8628135", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x5B8418082D87c96B7De689D0368756cddAbB35F5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xF0752A65ffB2153EaE53F6a70c858a87022d5c56", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x42cCAacf2666E92114F649b578056eDCeBdA8ba7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x14CEa5Df89Fa709409e83ebEA9518C5B6fb4B19B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x370815EdA08438c8F385a6f7AB5A2Dfa75008abC", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xCC38436BFB9B9888be96b59d825E0fE5DC19e05c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x5B8418082D87c96B7De689D0368756cddAbB35F5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x42cCAacf2666E92114F649b578056eDCeBdA8ba7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x14CEa5Df89Fa709409e83ebEA9518C5B6fb4B19B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x370815EdA08438c8F385a6f7AB5A2Dfa75008abC", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xCC38436BFB9B9888be96b59d825E0fE5DC19e05c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x5B8418082D87c96B7De689D0368756cddAbB35F5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x42cCAacf2666E92114F649b578056eDCeBdA8ba7", + "constructorArguments": "", + "isProxy": true + } + ], + "bsc": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xfADBc81Ca8A957F1Bf7c78bCc575b28DBDE042b6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xDc3D51c58BDb84F4F209d2684151dfCa271e504f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x4B1d8352E35e3BDE36dF5ED2e73C24E35c4a96b7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x707609419b70DCb4C41Ef185d3C184814c61Af9c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x38B3878c4fb44d201DA924c4a04bae3EE728c065", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x769FeC9f1a1e3DD1891015A387C92Ee9631CB0bA", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xDc3D51c58BDb84F4F209d2684151dfCa271e504f", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x707609419b70DCb4C41Ef185d3C184814c61Af9c", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x769FeC9f1a1e3DD1891015A387C92Ee9631CB0bA", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xe70E86a7D1e001D419D71F960Cb6CaD59b6A3dB6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0xf771dA1B909B67ca41dda9133E1C9934B5A2D8bb", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xc40481D13419BC8090e6AD07074Ef39E538c09CE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x4EFFb1d1B817c0D2823729b343ac079431182eE2", + "constructorArguments": "", + "isProxy": true + } + ], + "optimism": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xCA6Cb9Bc3cfF9E11003A06617cF934B684Bc78BC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xC91A3282FE1eBc29AE494f10680006f152DcE316", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xAa4Be20E9957fE21602c74d7C3cF5CB1112EA9Ef", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xb61544De4d3A103698AC57Fd62402627B8AC3cC2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x7491843F3A5Ba24E0f17a22645bDa04A1Ae2c584", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xD416cF29F961c090e9b9b8aF0970c86D93c2Ff61", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x15DEeAB8dECDe553bb0B1F9C00984cbcae1af3D7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x315d8B4229134Fcb12B8955f0B5FC1310E56E764", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x89E3530137aD51743536443a3EC838b502E72eb7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x35E536a6465632d2De568F0f22c514EfEE38aEA5", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xC91A3282FE1eBc29AE494f10680006f152DcE316", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xb61544De4d3A103698AC57Fd62402627B8AC3cC2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xD416cF29F961c090e9b9b8aF0970c86D93c2Ff61", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x315d8B4229134Fcb12B8955f0B5FC1310E56E764", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x35E536a6465632d2De568F0f22c514EfEE38aEA5", + "constructorArguments": "", + "isProxy": true + } + ], + "arbitrum": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x3C330D4A2e2b8443AFaB8E326E64ab4251B7Eae0", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xEbA276cdC61D4BC954E80985aC8FD71453fDab8e", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x12Df53079d399a47e9E730df095b712B0FDFA791", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xfD122f59ee8073528Cc5d36D5cc1451Bf1aF6923", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0xD4883084389fC1Eeb4dAfB2ADcFc36B711c310EB", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xBbc6e404F8d841560261b036cA3468B55CB9f566", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x9B5f440bBb64Fee337F37e03362b628711Ea09C7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x97c5dC51adAa04B3BefE63F4e62e4778219D9426", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xC020F8A7b00178dFA0fcC75C159e14b79F8e5c63", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0xc0Ce143F44ADc65d35fB0d24436Eaa953380dF97", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xEbA276cdC61D4BC954E80985aC8FD71453fDab8e", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xfD122f59ee8073528Cc5d36D5cc1451Bf1aF6923", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xBbc6e404F8d841560261b036cA3468B55CB9f566", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x97c5dC51adAa04B3BefE63F4e62e4778219D9426", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xc0Ce143F44ADc65d35fB0d24436Eaa953380dF97", + "constructorArguments": "", + "isProxy": true + } + ], + "scroll": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + } + ], + "base": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + } + ], + "polygonzkevm": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true + } + ], + "gnosis": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x8E273260EAd8B72A085B19346A676d355740e875", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x603f46cc520d2fc22957b81e206408590808F02F", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x11EF91d17c5ad3330DbCa709a8841743d3Af6819", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0xbC8AA096dabDf4A0200BB9f8D4Cbb644C3D86d7B", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xe522A5DcA58e3ab7fEd2bf25DA3E8d90c14083a8", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0x9E60F82fF6b9BfCd3C10A562155E17448458D290", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0x9E60F82fF6b9BfCd3C10A562155E17448458D290", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x28846fCb579747E8ddad9E93b55BE51b0A1Bf1f3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x71AB2390e4eF4A8AF685aE11AAd974AC3E8eF85D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8528bAa7d1d386E7967603e480fa2B558a23644c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0x28846fCb579747E8ddad9E93b55BE51b0A1Bf1f3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x71AB2390e4eF4A8AF685aE11AAd974AC3E8eF85D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x8528bAa7d1d386E7967603e480fa2B558a23644c", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0xe46CDa25130A89759F1Da00591D7a920CAe7667E", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0xEeBd8F72573C5a08F18BeC0DbadCCD3365c06AEF", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0x5aaF70a9944d2D7cf17153ea07632618b1e45C6F", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x72AffdEd251dF55c7c89566c64B9961dbc3e7A23", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xc4c11C88AbF6087150273b2c39B27878d137a920", + "constructorArguments": "", + "isProxy": true + } + ], + "moonbeam": [ + { + "name": "MerkleRootMultisigIsmFactory", + "address": "0xE2f485bc031Feb5a4C41C1967bf028653d75f0C3", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x28336d2b8783f2373bCFc173058EA932bf3b901C", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "MessageIdMultisigIsmFactory", + "address": "0x84Df48F8f241f11d0fA302d09d73030429Bd9C73", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x76FD8c164F380107631160d8Fd1f4Edc2719004D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationIsmFactory", + "address": "0x40c6Abcb6A2CdC8882d4bEcaC47927005c7Bb8c2", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationIsm", + "address": "0xd5FF00DD9E737c9d1a197246738876fAF43e4aC0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "AggregationHookFactory", + "address": "0x59cC3E7A49DdC4893eB8754c7908f96072A7DbE8", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "StaticAggregationHook", + "address": "0x568De5f1639Fe7c9eba67f1191DE19eeCc77985B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "RoutingIsmFactory", + "address": "0x98Aa6239FfCcEc73A662a5e5e26Bc3fD7c7291B7", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "DomaingRoutingIsm", + "address": "0xE8d610DC4Baf01070FD2f223d45f84d8801D90B1", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMerkleRootMultisigIsm", + "address": "0x28336d2b8783f2373bCFc173058EA932bf3b901C", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticMessageIdMultisigIsm", + "address": "0x76FD8c164F380107631160d8Fd1f4Edc2719004D", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationIsm", + "address": "0xd5FF00DD9E737c9d1a197246738876fAF43e4aC0", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "StaticAggregationHook", + "address": "0x568De5f1639Fe7c9eba67f1191DE19eeCc77985B", + "constructorArguments": "", + "isProxy": true + }, + { + "name": "DomaingRoutingIsm", + "address": "0xE8d610DC4Baf01070FD2f223d45f84d8801D90B1", + "constructorArguments": "", + "isProxy": true + } + ] +} diff --git a/typescript/infra/config/environments/mainnet2/liquidityLayer.ts b/typescript/infra/config/environments/mainnet3/liquidityLayer.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/liquidityLayer.ts rename to typescript/infra/config/environments/mainnet3/liquidityLayer.ts diff --git a/typescript/infra/config/environments/mainnet2/middleware/accounts/verification.json b/typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/accounts/verification.json rename to typescript/infra/config/environments/mainnet3/middleware/accounts/verification.json diff --git a/typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/addresses.json b/typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/addresses.json rename to typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/verification.json b/typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/liquidity-layer/verification.json rename to typescript/infra/config/environments/mainnet3/middleware/liquidity-layer/verification.json diff --git a/typescript/infra/config/environments/mainnet2/middleware/queries/verification.json b/typescript/infra/config/environments/mainnet3/middleware/queries/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/middleware/queries/verification.json rename to typescript/infra/config/environments/mainnet3/middleware/queries/verification.json diff --git a/typescript/infra/config/environments/mainnet2/owners.ts b/typescript/infra/config/environments/mainnet3/owners.ts similarity index 56% rename from typescript/infra/config/environments/mainnet2/owners.ts rename to typescript/infra/config/environments/mainnet3/owners.ts index b900b75075..1b5e0712d4 100644 --- a/typescript/infra/config/environments/mainnet2/owners.ts +++ b/typescript/infra/config/environments/mainnet3/owners.ts @@ -1,7 +1,7 @@ import { ChainMap } from '@hyperlane-xyz/sdk'; -import { Address } from '@hyperlane-xyz/utils'; +import { Address, objMap } from '@hyperlane-xyz/utils'; -export const owners: ChainMap
= { +const safes: ChainMap
= { celo: '0x1DE69322B55AC7E0999F8e7738a1428C8b130E4d', ethereum: '0x12C5AB61Fe17dF9c65739DBa73dF294708f78d23', avalanche: '0xDF9B28B76877f1b1B4B8a11526Eb7D8D7C49f4f3', @@ -11,5 +11,15 @@ export const owners: ChainMap
= { optimism: '0xb523CFAf45AACF472859f8B793CB0BFDB16bD257', moonbeam: '0xF0cb1f968Df01fc789762fddBfA704AE0F952197', gnosis: '0x36b0AA0e7d04e7b825D7E409FEa3c9A3d57E4C22', - solana: 'EzppBFV2taxWw8kEjxNYvby6q7W1biJEqwP3iC7YgRe3', + // solana: 'EzppBFV2taxWw8kEjxNYvby6q7W1biJEqwP3iC7YgRe3', + // TODO: create gnosis safes here + base: '', + scroll: '', + polygonzkevm: '', }; + +// export const owners = safes; + +// temporarily keep ownership on deployer key +const deployer = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; +export const owners = objMap(safes, (_, __) => deployer); diff --git a/typescript/infra/config/environments/mainnet2/testquerysender/addresses.json b/typescript/infra/config/environments/mainnet3/testquerysender/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testquerysender/addresses.json rename to typescript/infra/config/environments/mainnet3/testquerysender/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/testquerysender/verification.json b/typescript/infra/config/environments/mainnet3/testquerysender/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testquerysender/verification.json rename to typescript/infra/config/environments/mainnet3/testquerysender/verification.json diff --git a/typescript/infra/config/environments/mainnet2/testrecipient/addresses.json b/typescript/infra/config/environments/mainnet3/testrecipient/addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testrecipient/addresses.json rename to typescript/infra/config/environments/mainnet3/testrecipient/addresses.json diff --git a/typescript/infra/config/environments/mainnet2/testrecipient/verification.json b/typescript/infra/config/environments/mainnet3/testrecipient/verification.json similarity index 100% rename from typescript/infra/config/environments/mainnet2/testrecipient/verification.json rename to typescript/infra/config/environments/mainnet3/testrecipient/verification.json diff --git a/typescript/infra/config/environments/mainnet2/token-bridge.ts b/typescript/infra/config/environments/mainnet3/token-bridge.ts similarity index 100% rename from typescript/infra/config/environments/mainnet2/token-bridge.ts rename to typescript/infra/config/environments/mainnet3/token-bridge.ts diff --git a/typescript/infra/config/environments/mainnet3/validators.ts b/typescript/infra/config/environments/mainnet3/validators.ts new file mode 100644 index 0000000000..28d5e54fd6 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/validators.ts @@ -0,0 +1,199 @@ +import { chainMetadata } from '@hyperlane-xyz/sdk'; + +import { ValidatorBaseChainConfigMap } from '../../../src/config/agent'; +import { Contexts } from '../../contexts'; +import { validatorBaseConfigsFn } from '../utils'; + +import { environment } from './chains'; + +export const validatorChainConfig = ( + context: Contexts, +): ValidatorBaseChainConfigMap => { + const validatorsConfig = validatorBaseConfigsFn(environment, context); + return { + celo: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x63478422679303c3e4fc611b771fa4a707ef7f4a', + '0x2f4e808744df049d8acc050628f7bdd8265807f9', + '0x7bf30afcb6a7d92146d5a910ea4c154fba38d25e', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'celo', + ), + }, + ethereum: { + interval: 5, + reorgPeriod: 20, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x03c842db86a6a3e524d4a6615390c1ea8e2b9541', + '0x4346776b10f5e0d9995d884b7a1dbaee4e24c016', + '0x749d6e7ad949e522c92181dc77f7bbc1c5d71506', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'ethereum', + ), + }, + avalanche: { + interval: 5, + reorgPeriod: 3, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x3fb8263859843bffb02950c492d492cae169f4cf', + '0xe58c63ad669b946e7c8211299f22679deecc9c83', + '0x6c754f1e9cd8287088b46a7c807303d55d728b49', + ], + [Contexts.ReleaseCandidate]: [ + '0x706976391e23dea28152e0207936bd942aba01ce', + ], + }, + 'avalanche', + ), + }, + polygon: { + interval: 5, + reorgPeriod: 256, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x12ecb319c7f4e8ac5eb5226662aeb8528c5cefac', + '0x8dd8f8d34b5ecaa5f66de24b01acd7b8461c3916', + '0xdbf3666de031bea43ec35822e8c33b9a9c610322', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'polygon', + ), + }, + bsc: { + interval: 5, + reorgPeriod: 15, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x570af9b7b36568c8877eebba6c6727aa9dab7268', + '0x7bf928d5d262365d31d64eaa24755d48c3cae313', + '0x03047213365800f065356b4a2fe97c3c3a52296a', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'bsc', + ), + }, + arbitrum: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x4d966438fe9e2b1e7124c87bbb90cb4f0f6c59a1', + '0x6333e110b8a261cab28acb43030bcde59f26978a', + '0x3369e12edd52570806f126eb50be269ba5e65843', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'arbitrum', + ), + }, + optimism: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x20349eadc6c72e94ce38268b96692b1a5c20de4f', + '0x04d040cee072272789e2d1f29aef73b3ad098db5', + '0x779a17e035018396724a6dec8a59bda1b5adf738', + ], + [Contexts.ReleaseCandidate]: [ + '0x60e938bf280bbc21bacfd8bf435459d9003a8f98', + ], + }, + 'optimism', + ), + }, + moonbeam: { + interval: 5, + reorgPeriod: 2, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x2225e2f4e9221049456da93b71d2de41f3b6b2a8', + '0x4fe067bb455358e295bfcfb92519a6f9de94b98e', + '0xcc4a78aa162482bea43313cd836ba7b560b44fc4', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'moonbeam', + ), + }, + gnosis: { + interval: 5, + reorgPeriod: 14, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0xd4df66a859585678f2ea8357161d896be19cc1ca', + '0x06a833508579f8b59d756b3a1e72451fc70840c3', + '0xb93a72cee19402553c9dd7fed2461aebd04e2454', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'gnosis', + ), + }, + base: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0xb9453d675e0fa3c178a17b4ce1ad5b1a279b3af9', + '0x4512985a574cb127b2af2d4bb676876ce804e3f8', + '0xb144bb2f599a5af095bc30367856f27ea8a8adc7', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'base', + ), + }, + scroll: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0xad557170a9f2f21c35e03de07cb30dcbcc3dff63', + '0xb37fe43a9f47b7024c2d5ae22526cc66b5261533', + '0x7210fa0a6be39a75cb14d682ebfb37e2b53ecbe5', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'scroll', + ), + }, + polygonzkevm: { + interval: 5, + reorgPeriod: 0, + validators: validatorsConfig( + { + [Contexts.Hyperlane]: [ + '0x86f2a44592bb98da766e880cfd70d3bbb295e61a', + '0xc84076030bdabaabb9e61161d833dd84b700afda', + '0x6a1da2e0b7ae26aaece1377c0a4dbe25b85fa3ca', + ], + [Contexts.ReleaseCandidate]: [], + }, + 'polygonzkevm', + ), + }, + }; +}; diff --git a/typescript/infra/config/environments/testnet4/core.ts b/typescript/infra/config/environments/testnet4/core.ts index f0f03f17eb..7a2ae2c321 100644 --- a/typescript/infra/config/environments/testnet4/core.ts +++ b/typescript/infra/config/environments/testnet4/core.ts @@ -4,10 +4,8 @@ import { AggregationHookConfig, AggregationIsmConfig, ChainMap, - Chains, CoreConfig, FallbackRoutingHookConfig, - HookConfig, HookType, IgpHookConfig, IsmType, @@ -18,7 +16,6 @@ import { 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'; @@ -54,13 +51,6 @@ export const core: ChainMap = objMap(owners, (local, owner) => { ), owner, }; - 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, @@ -71,27 +61,19 @@ export const core: ChainMap = objMap(owners, (local, owner) => { ...igp[local], }; - const aggregationHook = (opStackHook: HookConfig): AggregationHookConfig => ({ - type: HookType.AGGREGATION, - hooks: [opStackHook, igpHook], - }); - - const domains = Object.fromEntries( - Object.entries(owners) - .filter(([chain, _]) => chain !== local) - .map(([chain, _]) => [chain, aggregationHook(merkleHook) as HookConfig]), + const aggregationHooks = objMap( + originMultisigs, + (_origin, _): AggregationHookConfig => ({ + type: HookType.AGGREGATION, + hooks: [igpHook, merkleHook], + }), ); - // 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, + domains: aggregationHooks, }; const requiredHook: ProtocolFeeHookConfig = { diff --git a/typescript/infra/config/environments/testnet4/igp.ts b/typescript/infra/config/environments/testnet4/igp.ts index 047ebf6305..d5719b5964 100644 --- a/typescript/infra/config/environments/testnet4/igp.ts +++ b/typescript/infra/config/environments/testnet4/igp.ts @@ -29,6 +29,7 @@ export const igp: ChainMap = objMap(owners, (chain, owner) => { exclude(chain, supportedChainNames).map((remote) => [ remote, multisigIsmVerificationCost( + // TODO: parameterize this defaultMultisigIsmConfigs[remote].threshold, defaultMultisigIsmConfigs[remote].validators.length, ), diff --git a/typescript/infra/config/multisigIsm.ts b/typescript/infra/config/multisigIsm.ts index 8c7d5ea752..4eee71d68f 100644 --- a/typescript/infra/config/multisigIsm.ts +++ b/typescript/infra/config/multisigIsm.ts @@ -9,13 +9,13 @@ import { objFilter, objMap } from '@hyperlane-xyz/utils'; import { DeployEnvironment } from '../src/config'; import { Contexts } from './contexts'; -import { supportedChainNames as mainnet2Chains } from './environments/mainnet2/chains'; +import { supportedChainNames as mainnet3Chains } from './environments/mainnet3/chains'; import { chainNames as testChains } from './environments/test/chains'; import { supportedChainNames as testnet4Chains } from './environments/testnet4/chains'; import { rcMultisigIsmConfigs } from './rcMultisigIsmConfigs'; const chains = { - mainnet2: mainnet2Chains, + mainnet3: mainnet3Chains, testnet4: testnet4Chains, test: testChains, }; diff --git a/typescript/infra/config/routingIsm.ts b/typescript/infra/config/routingIsm.ts index 3755bdf69a..2a46bd2eeb 100644 --- a/typescript/infra/config/routingIsm.ts +++ b/typescript/infra/config/routingIsm.ts @@ -6,44 +6,30 @@ import { IsmType, RoutingIsmConfig, } from '@hyperlane-xyz/sdk'; -import { Address } from '@hyperlane-xyz/utils'; import { DeployEnvironment } from '../src/config'; import { aggregationIsm } from './aggregationIsm'; import { Contexts } from './contexts'; -import { supportedChainNames as mainnet2Chains } from './environments/mainnet2/chains'; -import { owners as mainnet2Owners } from './environments/mainnet2/owners'; +import { supportedChainNames as mainnet3Chains } from './environments/mainnet3/chains'; +import { owners as mainnet3Owners } from './environments/mainnet3/owners'; import { chainNames as testChains } from './environments/test/chains'; import { owners as testOwners } from './environments/test/owners'; import { supportedChainNames as testnet4Chains } from './environments/testnet4/chains'; import { owners as testnet4Owners } from './environments/testnet4/owners'; const chains = { - mainnet2: mainnet2Chains, + mainnet3: mainnet3Chains, testnet4: testnet4Chains, test: testChains, }; const owners = { testnet4: testnet4Owners, - mainnet2: mainnet2Owners, + mainnet3: mainnet3Owners, test: testOwners, }; -export const mainnetHyperlaneDefaultIsmCache: ChainMap
= { - ethereum: '0x3Ef03aEf1392E5e0C16fd4D22C3c3b4f81C8AF0C', - optimism: '0xA7a0f9CB7d3bc3520A82ECF009F8f3949a926237', - arbitrum: '0xD629aB5353D6B11f52eD80EFb26a28e5E347B52F', - avalanche: '0x143A34E3Eaf1E77a8c994EcADb5268d717183150', - polygon: '0xE1403b9d64185f715414A4a7BEcec124Bd9198A7', - bsc: '0x307c66E1E2E9f20b6ED3c4561398215CF9b633c4', - celo: '0xAC0246a09f1FEaF4CEe32e43792eE12d6B277332', - moonbeam: '0xB32d147334AF9C15A65716Ab254a2460307648D1', - gnosis: '0xF6c174AcC399eD8407663387857f30f92B0db958', - solana: '6pHP4EeX2Xek24Be7PPTWCqcpmNEPENW1m9RnZSFSmA1', -}; - // Intended to be the "entrypoint" ISM. // Routing ISM => Aggregation (1/2) // | | @@ -55,10 +41,6 @@ export const routingIsm = ( local: ChainName, context: Contexts, ): RoutingIsmConfig | string => { - if (environment === 'mainnet2' && context === Contexts.Hyperlane) { - return mainnetHyperlaneDefaultIsmCache[local]; - } - const aggregationIsms: ChainMap = chains[ environment ].reduce( diff --git a/typescript/infra/fork.sh b/typescript/infra/fork.sh index 27db82fa8d..b65496aae4 100755 --- a/typescript/infra/fork.sh +++ b/typescript/infra/fork.sh @@ -9,7 +9,7 @@ fi if [ "$ENVIRONMENT" == "testnet3" ]; then FORK_CHAIN="goerli" RPC_URL="https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161" -elif [ "$ENVIRONMENT" == "mainnet2" ]; then +elif [ "$ENVIRONMENT" == "mainnet3" ]; then FORK_CHAIN="arbitrum" RPC_URL="https://rpc.ankr.com/arbitrum" else diff --git a/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml b/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml index fff9c8d56f..a9cc54da90 100644 --- a/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml +++ b/typescript/infra/helm/helloworld-kathy/templates/external-secret.yaml @@ -32,7 +32,7 @@ spec: * to replace the correct value in the created secret. */}} {{- range .Values.hyperlane.chains }} - {{- if or (eq $.Values.hyperlane.connectionType "httpQuorum") (eq $.Values.hyperlane.connectionType "httpFallback") }} + {{- if or (eq $.Values.hyperlane.connectionType "quorum") (eq $.Values.hyperlane.connectionType "fallback") }} GCP_SECRET_OVERRIDE_{{ $.Values.hyperlane.runEnv | upper }}_RPC_ENDPOINTS_{{ . | upper }}: {{ printf "'{{ .%s_rpcs | toString }}'" . }} {{- else }} GCP_SECRET_OVERRIDE_{{ $.Values.hyperlane.runEnv | upper }}_RPC_ENDPOINT_{{ . | upper }}: {{ printf "'{{ .%s_rpc | toString }}'" . }} @@ -51,7 +51,7 @@ spec: * and associate it with the secret key networkname_rpc. */}} {{- range .Values.hyperlane.chains }} - {{- if or (eq $.Values.hyperlane.connectionType "httpQuorum") (eq $.Values.hyperlane.connectionType "httpFallback") }} + {{- if or (eq $.Values.hyperlane.connectionType "quorum") (eq $.Values.hyperlane.connectionType "fallback") }} - secretKey: {{ printf "%s_rpcs" . }} remoteRef: key: {{ printf "%s-rpc-endpoints-%s" $.Values.hyperlane.runEnv . }} diff --git a/typescript/infra/helm/warp-routes/values.yaml b/typescript/infra/helm/warp-routes/values.yaml index 1dfa9d17f4..c5d7c35e72 100644 --- a/typescript/infra/helm/warp-routes/values.yaml +++ b/typescript/infra/helm/warp-routes/values.yaml @@ -2,7 +2,7 @@ image: repository: gcr.io/hyperlane-labs-dev/hyperlane-monorepo tag: hyperlane: - runEnv: mainnet2 + runEnv: mainnet3 context: hyperlane -nameOverride: "" -fullnameOverride: "" +nameOverride: '' +fullnameOverride: '' diff --git a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts index 06185ea1fd..a63e33a7de 100644 --- a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts +++ b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts @@ -53,17 +53,16 @@ type L2Chain = | Chains.optimismgoerli | Chains.arbitrum | Chains.arbitrumgoerli - | Chains.scrollsepolia | Chains.basegoerli - | Chains.polygonzkevmtestnet; + | Chains.base; const L2Chains: ChainName[] = [ Chains.optimism, Chains.optimismgoerli, Chains.arbitrum, Chains.arbitrumgoerli, - Chains.scrollsepolia, Chains.basegoerli, + Chains.base, Chains.polygonzkevmtestnet, ]; @@ -72,8 +71,8 @@ const L2ToL1: ChainMap = { arbitrumgoerli: 'goerli', optimism: 'ethereum', arbitrum: 'ethereum', - scrollsepolia: 'sepolia', basegoerli: 'goerli', + base: 'ethereum', polygonzkevmtestnet: 'goerli', }; @@ -134,6 +133,9 @@ const desiredBalancePerChain: ChainMap = { gnosis: '0.1', basegoerli: '0.05', scrollsepolia: '0.05', + polygonzkevm: '0.3', + scroll: '0.3', + base: '0.3', polygonzkevmtestnet: '0.3', // unused @@ -154,6 +156,9 @@ const desiredKathyBalancePerChain: ChainMap = { bsc: '0.35', moonbeam: '250', gnosis: '100', + scroll: '0.05', + base: '0.05', + polygonzkevm: '0.05', }; // The balance threshold of the IGP contract that must be met for the key funder @@ -180,6 +185,9 @@ const igpClaimThresholdPerChain: ChainMap = { basegoerli: '0.1', scrollsepolia: '0.1', polygonzkevmtestnet: '0.1', + base: '0.1', + scroll: '0.1', + polygonzkevm: '0.1', // unused test1: '0', test2: '0', diff --git a/typescript/infra/scripts/helloworld/utils.ts b/typescript/infra/scripts/helloworld/utils.ts index ac42023d0e..7c4ec54756 100644 --- a/typescript/infra/scripts/helloworld/utils.ts +++ b/typescript/infra/scripts/helloworld/utils.ts @@ -12,7 +12,6 @@ import { RpcConsensusType, attachContractsMap, attachContractsMapAndGetForeignDeployments, - chainMetadata, filterChainMapToProtocol, hyperlaneEnvironments, igpFactories, @@ -24,7 +23,6 @@ import { EnvironmentConfig } from '../../src/config'; import { deployEnvToSdkEnv } from '../../src/config/environment'; import { HelloWorldConfig } from '../../src/config/helloworld/types'; import { Role } from '../../src/roles'; -import { getKeyForRole } from '../utils'; export async function getHelloWorldApp( coreConfig: EnvironmentConfig, @@ -101,20 +99,20 @@ export async function getHelloWorldMultiProtocolApp( // await keys['solanadevnet'].fetch(); // } else - if ( - coreConfig.environment === 'mainnet2' && - !multiProtocolProvider.getKnownChainNames().includes('solana') - ) { - multiProvider.addChain(chainMetadata.solana); - multiProtocolProvider.addChain(chainMetadata.solana); - keys['solana'] = getKeyForRole( - coreConfig.environment, - context, - 'solana', - keyRole, - ); - await keys['solana'].fetch(); - } + // if ( + // coreConfig.environment === 'mainnet3' && + // !multiProtocolProvider.getKnownChainNames().includes('solana') + // ) { + // multiProvider.addChain(chainMetadata.solana); + // multiProtocolProvider.addChain(chainMetadata.solana); + // keys['solana'] = getKeyForRole( + // coreConfig.environment, + // context, + // 'solana', + // keyRole, + // ); + // await keys['solana'].fetch(); + // } const core = MultiProtocolCore.fromAddressesMap( envAddresses, diff --git a/typescript/infra/scripts/module-can-verify.ts b/typescript/infra/scripts/module-can-verify.ts index 25eacfe20f..33cec97a22 100644 --- a/typescript/infra/scripts/module-can-verify.ts +++ b/typescript/infra/scripts/module-can-verify.ts @@ -1,14 +1,13 @@ import { HyperlaneCore, moduleCanCertainlyVerify } from '@hyperlane-xyz/sdk'; import { ProtocolType } from '@hyperlane-xyz/utils'; -import { mainnetHyperlaneDefaultIsmCache } from '../config/routingIsm'; import { deployEnvToSdkEnv } from '../src/config/environment'; import { getArgs, getEnvironmentConfig } from './utils'; // Hacky temporary script just to make sure that default ISMs are correct. -// Testnet3 has already been updated, mainnet2 hasn't, so the above cache -// is used for mainnet2. +// Testnet3 has already been updated, mainnet3 hasn't, so the above cache +// is used for mainnet3. async function main() { const args = await getArgs().argv; @@ -31,10 +30,8 @@ async function main() { } let ismToCheck = ''; - if (environment === 'testnet4') { + if (environment === 'testnet4' || environment === 'mainnet3') { ismToCheck = await core.getContracts(local).mailbox.defaultIsm(); - } else if (environment === 'mainnet2') { - ismToCheck = mainnetHyperlaneDefaultIsmCache[local]!; } else { throw new Error(`Unsupported environment ${environment}`); } diff --git a/typescript/infra/scripts/verify.ts b/typescript/infra/scripts/verify.ts index 16842520e7..a2367f087d 100644 --- a/typescript/infra/scripts/verify.ts +++ b/typescript/infra/scripts/verify.ts @@ -37,8 +37,8 @@ async function main() { const compilerOptions: CompilerOptions = { codeformat: 'solidity-single-file', compilerversion: 'v0.8.19+commit.7dd6d404', - optimizationUsed: '0', - runs: '200', + optimizationUsed: '1', + runs: '999999', }; const versionRegex = /v(\d.\d.\d+)\+commit.\w+/; diff --git a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts index e1a11aff56..30418d9063 100644 --- a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts +++ b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts @@ -3,7 +3,7 @@ import { HelmCommand } from '../../src/utils/helm'; import { runWarpRouteHelmCommand } from './helm'; async function main() { - await runWarpRouteHelmCommand(HelmCommand.InstallOrUpgrade, 'mainnet2'); + await runWarpRouteHelmCommand(HelmCommand.InstallOrUpgrade, 'mainnet3'); } main() diff --git a/typescript/infra/src/agents/key-utils.ts b/typescript/infra/src/agents/key-utils.ts index e7afc68ba7..afe3288e44 100644 --- a/typescript/infra/src/agents/key-utils.ts +++ b/typescript/infra/src/agents/key-utils.ts @@ -77,7 +77,7 @@ export function getCloudAgentKey( return new AgentGCPKey(agentConfig.runEnv, agentConfig.context, role); } // Otherwise use an AWS key except for the deployer - else if (!!agentConfig.aws && role !== Role.Deployer) { + else if (!!agentConfig.aws && role !== Role.Deployer && role !== Role.Kathy) { return new AgentAwsKey(agentConfig, role, chainName, index); } else { // Fallback to GCP diff --git a/typescript/infra/src/config/environment.ts b/typescript/infra/src/config/environment.ts index f2eb0b40ec..62b289da09 100644 --- a/typescript/infra/src/config/environment.ts +++ b/typescript/infra/src/config/environment.ts @@ -24,7 +24,7 @@ import { InfrastructureConfig } from './infrastructure'; import { LiquidityLayerRelayerConfig } from './middleware'; // TODO: fix this? -export const EnvironmentNames = ['test', 'testnet4', 'mainnet2']; +export const EnvironmentNames = ['test', 'testnet4', 'mainnet3']; export type DeployEnvironment = keyof typeof environments; export type EnvironmentChain = Extract< keyof typeof environments[E], @@ -63,6 +63,6 @@ export const deployEnvToSdkEnv: Record< HyperlaneEnvironment > = { test: 'testnet', // TODO: remove this - mainnet2: 'mainnet', + mainnet3: 'mainnet', testnet4: 'testnet', }; diff --git a/typescript/infra/src/config/helloworld/config.ts b/typescript/infra/src/config/helloworld/config.ts index ea1ca71286..9d384d7d7a 100644 --- a/typescript/infra/src/config/helloworld/config.ts +++ b/typescript/infra/src/config/helloworld/config.ts @@ -1,12 +1,8 @@ -import { ChainMap } from '@hyperlane-xyz/sdk'; -import { MultiProvider, RouterConfig } from '@hyperlane-xyz/sdk'; +import { ChainMap, MultiProvider, RouterConfig } from '@hyperlane-xyz/sdk'; import { objMap } from '@hyperlane-xyz/utils'; import { Contexts } from '../../../config/contexts'; -import { - mainnetHyperlaneDefaultIsmCache, - routingIsm, -} from '../../../config/routingIsm'; +import { routingIsm } from '../../../config/routingIsm'; import { getRouterConfig } from '../../../scripts/utils'; import { DeployEnvironment } from '../environment'; @@ -18,10 +14,6 @@ export async function helloWorldRouterConfig( const routerConfig = await getRouterConfig(environment, multiProvider, true); return objMap(routerConfig, (chain, config) => ({ ...config, - interchainSecurityModule: - context === Contexts.Hyperlane - ? // TODO move back to `undefined` after these are verified and made the default ISMs - mainnetHyperlaneDefaultIsmCache[chain] - : routingIsm(environment, chain, context), + interchainSecurityModule: routingIsm(environment, chain, context), })); } diff --git a/typescript/infra/src/helloworld/kathy.ts b/typescript/infra/src/helloworld/kathy.ts index 56881fadff..ae48434671 100644 --- a/typescript/infra/src/helloworld/kathy.ts +++ b/typescript/infra/src/helloworld/kathy.ts @@ -38,6 +38,8 @@ export async function runHelloworldKathyHelmCommand( const values = getHelloworldKathyHelmValues(agentConfig, kathyConfig); + console.log('kathy values: ', values); + return execCmd( `helm ${helmCommand} ${getHelmReleaseName( agentConfig.context, diff --git a/typescript/sdk/src/consts/chainMetadata.ts b/typescript/sdk/src/consts/chainMetadata.ts index a71d8e863d..d0c9800add 100644 --- a/typescript/sdk/src/consts/chainMetadata.ts +++ b/typescript/sdk/src/consts/chainMetadata.ts @@ -135,6 +135,34 @@ export const avalanche: ChainMetadata = { 'https://safe-transaction-avalanche.safe.global/', }; +export const base: ChainMetadata = { + chainId: 8453, + domainId: 8453, + name: Chains.base, + protocol: ProtocolType.Ethereum, + displayName: 'Base', + nativeToken: etherToken, + rpcUrls: [ + { http: 'https://base.publicnode.com/' }, + { http: 'https://mainnet.base.org' }, + { http: 'https://base.blockpi.network/v1/rpc/public' }, + ], + blockExplorers: [ + { + name: 'BaseScan', + url: 'https://basescan.org', + apiUrl: 'https://api.basescan.org/api', + family: ExplorerFamily.Etherscan, + }, + ], + blocks: { + confirmations: 1, + reorgPeriod: 1, + estimateBlockTime: 2, + }, + gnosisSafeTransactionServiceUrl: 'https://safe-transaction-base.safe.global/', +}; + export const basegoerli: ChainMetadata = { chainId: 84531, domainId: 84531, @@ -419,6 +447,32 @@ export const sepolia: ChainMetadata = { isTestnet: true, }; +export const scroll: ChainMetadata = { + chainId: 534352, + domainId: 534352, + name: Chains.scroll, + protocol: ProtocolType.Ethereum, + displayName: 'Scroll', + nativeToken: etherToken, + rpcUrls: [ + { http: 'https://scroll.blockpi.network/v1/rpc/public' }, + { http: 'https://scroll-mainnet.public.blastapi.io' }, + ], + blockExplorers: [ + { + name: 'Scroll Explorer', + url: 'https://scrollscan.com/', + apiUrl: 'https://api.scrollscan.com/api', + family: ExplorerFamily.Etherscan, + }, + ], + blocks: { + confirmations: 1, + reorgPeriod: 1, + estimateBlockTime: 3, + }, +}; + export const scrollsepolia: ChainMetadata = { chainId: 534351, domainId: 534351, @@ -862,6 +916,33 @@ export const polygonzkevmtestnet: ChainMetadata = { isTestnet: true, }; +export const polygonzkevm: ChainMetadata = { + protocol: ProtocolType.Ethereum, + chainId: 1101, + domainId: 1101, + name: Chains.polygonzkevm, + displayName: 'Polygon zkEVM', + nativeToken: etherToken, + rpcUrls: [ + { http: 'https://polygonzkevm-mainnet.g.alchemy.com/v2/demo' }, + { http: 'https://rpc.ankr.com/polygon_zkevm' }, + { http: 'https://zkevm.polygonscan.com/' }, + ], + blockExplorers: [ + { + name: 'PolygonScan', + url: 'https://zkevm.polygonscan.com/', + apiUrl: 'https://api-zkevm.polygonscan.com/api', + family: ExplorerFamily.Etherscan, + }, + ], + blocks: { + confirmations: 1, + reorgPeriod: 1, + estimateBlockTime: 10, + }, +}; + /** * Collection maps * @@ -873,6 +954,7 @@ export const chainMetadata: ChainMap = { arbitrum, arbitrumgoerli, avalanche, + base, basegoerli, bsc, bsctestnet, @@ -882,6 +964,7 @@ export const chainMetadata: ChainMap = { fuji, goerli, lineagoerli, + scroll, scrollsepolia, sepolia, moonbasealpha, @@ -890,6 +973,7 @@ export const chainMetadata: ChainMap = { optimism, optimismgoerli, polygon, + polygonzkevm, polygonzkevmtestnet, gnosis, proteustestnet, diff --git a/typescript/sdk/src/consts/chains.ts b/typescript/sdk/src/consts/chains.ts index f7b07cc6e1..d7cc8a1ab5 100644 --- a/typescript/sdk/src/consts/chains.ts +++ b/typescript/sdk/src/consts/chains.ts @@ -7,6 +7,7 @@ export enum Chains { arbitrum = 'arbitrum', arbitrumgoerli = 'arbitrumgoerli', avalanche = 'avalanche', + base = 'base', basegoerli = 'basegoerli', bsc = 'bsc', bsctestnet = 'bsctestnet', @@ -17,6 +18,7 @@ export enum Chains { gnosis = 'gnosis', goerli = 'goerli', lineagoerli = 'lineagoerli', + scroll = 'scroll', scrollsepolia = 'scrollsepolia', sepolia = 'sepolia', moonbasealpha = 'moonbasealpha', @@ -26,6 +28,7 @@ export enum Chains { optimism = 'optimism', optimismgoerli = 'optimismgoerli', polygon = 'polygon', + polygonzkevm = 'polygonzkevm', polygonzkevmtestnet = 'polygonzkevmtestnet', proteustestnet = 'proteustestnet', solana = 'solana', @@ -58,7 +61,10 @@ export const Mainnets: Array = [ Chains.optimism, Chains.polygon, Chains.gnosis, - Chains.solana, + Chains.base, + Chains.scroll, + Chains.polygonzkevm, + // Chains.solana, ]; export const Testnets: Array = [ diff --git a/typescript/sdk/src/consts/environments/mainnet.json b/typescript/sdk/src/consts/environments/mainnet.json index b5c4f927ac..f9dea3adb4 100644 --- a/typescript/sdk/src/consts/environments/mainnet.json +++ b/typescript/sdk/src/consts/environments/mainnet.json @@ -1,174 +1,182 @@ { - "celo": { - "storageGasOracle": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "proxyAdmin": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x9bDE63104EE030d9De419EEd6bA7D14b86D6fE3f", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x5e8ee6840caa4f367aff1FF28aA36D5B1b836d35", - "aggregationIsmFactory": "0xc864fa3B662613cA5051f41e157d0a997f9a5A87", - "routingIsmFactory": "0x1fdfD1486b8339638C6b92f8a96D698D8182D2b1", - "interchainQueryRouter": "0xA837e38C3F7D509DF3a7a0fCf65E3814DB6c2618", - "interchainAccountRouter": "0x9521291A43ebA3aD3FD24d610F4b7F7543C8d761", - "merkleRootMultisigIsmFactory": "0x82140b2ddAd4E4dd7e1D6757Fb5F9485c230B79d", - "messageIdMultisigIsmFactory": "0x1079056da3EC7D55521F27e1E094015C0d39Cc65" - }, - "ethereum": { - "storageGasOracle": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "proxyAdmin": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xec48E52D960E54a179f70907bF28b105813877ee", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x943303Ad7D2B87BB363E0BACC901486337d9B316", - "aggregationIsmFactory": "0x30B3Ef3e98B1FF72f03f71f68115E18F203Ec794", - "routingIsmFactory": "0xBF30B4F328d1F6AC47ecCcF23836F3CbB2422c9f", - "interchainQueryRouter": "0x1d9fB4EA1712d0aaF713F7e02Aee0766Bb42bdB0", - "interchainAccountRouter": "0xe0f6eDeb3de10447C1D1CfB787e14e8F2F3a21Fb", - "merkleRootMultisigIsmFactory": "0xd6286a220b80128763bc0181Aa27F471fDC8E532", - "messageIdMultisigIsmFactory": "0x60305F347C369E31782B3bc42D08dC2c7F218807" - }, - "avalanche": { - "storageGasOracle": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", - "proxyAdmin": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xeE80ab5B563cB3825133f29502bA34eD3707cb8C", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x88C01B64dCe0032796a1967E2b3447B397c6c7AC", - "aggregationIsmFactory": "0x070d4f61b05eD9e20C9194f29Df073f2110705fc", - "routingIsmFactory": "0x0FC1A9DFAca9b6Ba11bC470Bf284Da7c107fDfF2", - "interchainQueryRouter": "0x93CDC5315833F827A92F593a2aAa61e68A95b51b", - "interchainAccountRouter": "0x7D8bd3e0e6782be26B817FF6f39F26300C457aC0", - "merkleRootMultisigIsmFactory": "0x3A434432E4305C378F7a29fD63653d09ec48a145", - "messageIdMultisigIsmFactory": "0x6f82eC078317aAbE2ae5200f09d4550987A1bF28" - }, "polygon": { "storageGasOracle": "0xA3a24EC5670F1F416AB9fD554FcE2f226AE9D7eB", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0xC4F7590C5d30BE959225dC75640657954A86b980", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x61A80297e77FC5395bd6Ff60EEacf7CD4f18d4a4", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0xCd8ACf2254641bD3Eaa32C1B8D36f0983de8C0E6", - "aggregationIsmFactory": "0x10Add66Db9C837000A43F3601aa9c54c6744F4c8", - "routingIsmFactory": "0x0B48a744698ba8dFa514742dFEB6728f52fD66f7", - "interchainQueryRouter": "0x284f71eBF22b7C7bf43aD20c460343D1a2d697c0", - "interchainAccountRouter": "0x08B9d59ad00bb917144B25C957F9c4a1e955709a", - "merkleRootMultisigIsmFactory": "0x004D9DF774B1968989dCC9F2F389325BA61Ba370", - "messageIdMultisigIsmFactory": "0x720663C310D3Db506F28a8F65c39Af37BFBe0248" + "merkleRootMultisigIsmFactory": "0xa9E0E18E78b098c2DE36c42E4DDEA13ce214c592", + "messageIdMultisigIsmFactory": "0xEa5Be2AD66BB1BA321B7aCf0A079fBE304B09Ca0", + "aggregationIsmFactory": "0x81AdDD9Ca89105063DaDEBd5B4408551Ce850E22", + "aggregationHookFactory": "0xFeeB86e70e4a640cDd29636CCE19BD6fe8628135", + "routingIsmFactory": "0xF0752A65ffB2153EaE53F6a70c858a87022d5c56", + "mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6", + "interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2", + "aggregationHook": "0x34dAb05650Cf590088bA18aF9d597f3e081bCc47", + "protocolFee": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "validatorAnnounce": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5" }, "bsc": { "storageGasOracle": "0x91d23D603d60445411C06e6443d81395593B7940", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x65993Af9D0D3a64ec77590db7ba362D6eB78eF70", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x3a579C0bd04FC4C98A8D70EEABD9094e7be4B26D", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x1d3Bdf44887744007C7C62c85924c445C9e825DE", - "aggregationIsmFactory": "0x4084054Fc83af652A1f21EA2FF2a668D796e2514", - "routingIsmFactory": "0x85392758524EEE2323Bd3029E77aFc9bA9E60216", - "interchainQueryRouter": "0xAD20d715A6544be3f132F96e1cEaAfF016e356D7", - "interchainAccountRouter": "0x98593E2EeC26e369C761f6F0A0220ABcd6ea2673", - "merkleRootMultisigIsmFactory": "0x43Ee7f7Cd4bB7108144126780a07c22257925060", - "messageIdMultisigIsmFactory": "0xcf14426dF1D973A656e20c3AcD2B9E18C3C05793" + "merkleRootMultisigIsmFactory": "0xfADBc81Ca8A957F1Bf7c78bCc575b28DBDE042b6", + "messageIdMultisigIsmFactory": "0x4B1d8352E35e3BDE36dF5ED2e73C24E35c4a96b7", + "aggregationIsmFactory": "0x38B3878c4fb44d201DA924c4a04bae3EE728c065", + "aggregationHookFactory": "0xe70E86a7D1e001D419D71F960Cb6CaD59b6A3dB6", + "routingIsmFactory": "0xc40481D13419BC8090e6AD07074Ef39E538c09CE", + "mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", + "merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26", + "interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451", + "aggregationHook": "0x402Fc106576462a892355d69ACF03D46A888ae88", + "protocolFee": "0xA8Aa5f14a5463a78E45CC068F11c867949F3E367", + "validatorAnnounce": "0x7024078130D9c2100fEA474DAD009C2d1703aCcd" }, "arbitrum": { "storageGasOracle": "0xD3805207b65d99C075ceA938Fa7c0587026a5DF5", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x80Cebd56A65e46c474a1A101e89E76C4c51D179c", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0x32B92bd3e5045B67FDD8dbb7A58D25980836d04C", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0xC1d10a99C382Dd224d7F513C7e0f74D7689071f4", - "aggregationIsmFactory": "0x9E3075E067932d744119e583B34d11b144CE1e4A", - "routingIsmFactory": "0xcC2fA09fa13857942fae408EcCEc8De307344e99", - "interchainQueryRouter": "0x6fa285743afc565Ee99b6D34FE5F298690BC6412", - "interchainAccountRouter": "0x2dF1d8f3b357422Ceddbeee3fdF159B45AC6F005", - "timelockController": "0xAC98b0cD1B64EA4fe133C6D2EDaf842cE5cF4b01", - "merkleRootMultisigIsmFactory": "0xb98CCA546f88B825D1ae132ac0fb52B27cE68b05", - "messageIdMultisigIsmFactory": "0x9D7B7245C6dAEBD5543080C91523e0702fC27024" + "merkleRootMultisigIsmFactory": "0x3C330D4A2e2b8443AFaB8E326E64ab4251B7Eae0", + "messageIdMultisigIsmFactory": "0x12Df53079d399a47e9E730df095b712B0FDFA791", + "aggregationIsmFactory": "0xD4883084389fC1Eeb4dAfB2ADcFc36B711c310EB", + "aggregationHookFactory": "0x9B5f440bBb64Fee337F37e03362b628711Ea09C7", + "routingIsmFactory": "0xC020F8A7b00178dFA0fcC75C159e14b79F8e5c63", + "merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930", + "interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", + "aggregationHook": "0xe0cb37cFc47296f1c4eD77EFf92Aed478644d10c", + "protocolFee": "0xD0199067DACb8526e7dc524a9a7DCBb57Cd25421", + "mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", + "validatorAnnounce": "0x1df063280C4166AF9a725e3828b4dAC6c7113B08" }, "optimism": { "storageGasOracle": "0x27e88AeB8EA4B159d81df06355Ea3d20bEB1de38", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0xE047cb95FB3b7117989e911c6afb34771183fC35", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xAab1D11E2063Bae5EB01fa946cA8d2FDe3db05D5", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x3de63b62BeF9Da290F51f856cA9F3dB4225EDc05", - "aggregationIsmFactory": "0xb7d42f065E32eB6fCAac7ef83902c56164328fE2", - "routingIsmFactory": "0x4ef980034E631CC0CFb3b065aB793611f1B6511A", - "interchainQueryRouter": "0x5188731eE98892d1e7d98b869D811624dADf94eb", - "interchainAccountRouter": "0x0e2fEfe9357453Fc587FB11eF7C2CcdF56127f8a", - "merkleRootMultisigIsmFactory": "0xdDF51d1f0f38ec98F60BAB4FF7edfc7e47C4eA0d", - "messageIdMultisigIsmFactory": "0x3A7Ff7b700681A2655377cFDc88eE2031cf270E1" + "merkleRootMultisigIsmFactory": "0xCA6Cb9Bc3cfF9E11003A06617cF934B684Bc78BC", + "messageIdMultisigIsmFactory": "0xAa4Be20E9957fE21602c74d7C3cF5CB1112EA9Ef", + "aggregationIsmFactory": "0x7491843F3A5Ba24E0f17a22645bDa04A1Ae2c584", + "aggregationHookFactory": "0x15DEeAB8dECDe553bb0B1F9C00984cbcae1af3D7", + "routingIsmFactory": "0x89E3530137aD51743536443a3EC838b502E72eb7", + "merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "aggregationHook": "0x4ccC6d8eB79f2a1EC9bcb0f211fef7907631F91f", + "protocolFee": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "validatorAnnounce": "0x30f5b08e01808643221528BB2f7953bf2830Ef38" }, "moonbeam": { "storageGasOracle": "0x448b7ADB0dA36d41AA2AfDc9d63b97541A7b3819", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xf3b1F415740A26568C45b1c771A737E31C198F09", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x88d346eEc75b6D22428bbaB569b6eBB0bE183c4F", - "aggregationIsmFactory": "0x20E1897CD584C3788A3C24f5e424345a55ADf90C", - "routingIsmFactory": "0xB5ec4e94ec47A70C6A38370666F713423816ce4c", - "interchainQueryRouter": "0xf1CFA9D0d4191441b1D121144f4027e63bbAE591", - "interchainAccountRouter": "0xE50DEa401eD22aBc75559d411b9cfF819c324D3b", - "merkleRootMultisigIsmFactory": "0xE80C30738DC66dad77657695e345be168D49b062", - "messageIdMultisigIsmFactory": "0x147F8C69f0FCF571c03093dE4180718FaecbA31E" + "merkleRootMultisigIsmFactory": "0xE2f485bc031Feb5a4C41C1967bf028653d75f0C3", + "messageIdMultisigIsmFactory": "0x84Df48F8f241f11d0fA302d09d73030429Bd9C73", + "aggregationIsmFactory": "0x40c6Abcb6A2CdC8882d4bEcaC47927005c7Bb8c2", + "aggregationHookFactory": "0x59cC3E7A49DdC4893eB8754c7908f96072A7DbE8", + "routingIsmFactory": "0x98Aa6239FfCcEc73A662a5e5e26Bc3fD7c7291B7", + "mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "aggregationHook": "0x23cca255aE83F57F39EAf9D14fB9FdaDF22D5863", + "protocolFee": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "validatorAnnounce": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F" }, "gnosis": { "storageGasOracle": "0x5E01d8F34b629E3f92d69546bbc4142A7Adee7e9", - "validatorAnnounce": "0x9bBdef63594D5FFc2f370Fe52115DdFFe97Bc524", "proxyAdmin": "0x81a92A1a272cb09d7b4970b07548463dC7aE0cB7", - "mailbox": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", - "interchainGasPaymaster": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", - "defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", - "multisigIsm": "0xC343A7054838FE9F249D7E3Ec1Fa6f1D108694b8", - "create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", - "testRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "interchainAccountIsm": "0x8AB7A6FaC052518A39628497735C855a2Beb515B", - "aggregationIsmFactory": "0xb4fc9B5fD57499Ef6FfF3995728a55F7A618ef86", - "routingIsmFactory": "0xbB22547D1dc681fe925f568f637Ff67aC06c20fc", - "interchainQueryRouter": "0xA376b27212D608324808923Add679A2c9FAFe9Da", - "interchainAccountRouter": "0xe9E3444DDD80c50276c0Fcf316026f6d7fEc2c47", - "merkleRootMultisigIsmFactory": "0x784b9D0f4eF9fb8444DfB5d24AB221C9D1A85395", - "messageIdMultisigIsmFactory": "0xC4275763D7b621eb732847957012F1fb35C90BB8" + "merkleRootMultisigIsmFactory": "0x8E273260EAd8B72A085B19346A676d355740e875", + "messageIdMultisigIsmFactory": "0x603f46cc520d2fc22957b81e206408590808F02F", + "aggregationIsmFactory": "0x11EF91d17c5ad3330DbCa709a8841743d3Af6819", + "aggregationHookFactory": "0xbC8AA096dabDf4A0200BB9f8D4Cbb644C3D86d7B", + "mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "routingIsmFactory": "0xd9Cc2e652A162bb93173d1c44d46cd2c0bbDA59D", + "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", + "interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f", + "aggregationHook": "0xdD1FA1C12496474c1dDC67a658Ba81437F818861", + "protocolFee": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "validatorAnnounce": "0x87ED6926abc9E38b9C7C19f835B41943b622663c" + }, + "base": { + "merkleRootMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "messageIdMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationHookFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "routingIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "proxyAdmin": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "storageGasOracle": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "aggregationHook": "0x13f3d4B0Ee0a713430fded9E18f7fb6c91A6E41F", + "protocolFee": "0x99ca8c74cE7Cfa9d72A51fbb05F9821f5f826b3a", + "validatorAnnounce": "0x182E8d7c5F1B06201b102123FC7dF0EaeB445a7B" }, - "solana": { - "storageGasOracle": "11111111111111111111111111111111", - "validatorAnnounce": "C88Lk5GR6cPxYoJxPbNDDEwsx5Kxn1wZEomvQ2So333g", - "proxyAdmin": "11111111111111111111111111111111", - "mailbox": "Ge9atjAc3Ltu91VTbNpJDCjZ9CFxFyck4h3YBcTF9XPq", - "interchainGasPaymaster": "FCNfmLSZLo5x7oNYmkYU8WdPUu7pj636P9CaMxkmaCp7", - "defaultIsmInterchainGasPaymaster": "GTj6WzNxLNFydq5zJrV9p13fyqotRoo1MQykNCWuVpbS", - "multisigIsm": "11111111111111111111111111111111", - "testRecipient": "11111111111111111111111111111111", - "interchainAccountIsm": "11111111111111111111111111111111", - "aggregationIsmFactory": "11111111111111111111111111111111", - "routingIsmFactory": "11111111111111111111111111111111", - "interchainQueryRouter": "11111111111111111111111111111111", - "interchainAccountRouter": "11111111111111111111111111111111", - "merkleRootMultisigIsmFactory": "11111111111111111111111111111111", - "messageIdMultisigIsmFactory": "11111111111111111111111111111111" + "scroll": { + "merkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "messageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "aggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "aggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "routingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "storageGasOracle": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "aggregationHook": "0x9Bc0FAf446E128a618A88a2F28960Fb2Ca169faE", + "protocolFee": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", + "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "validatorAnnounce": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638" + }, + "polygonzkevm": { + "merkleRootMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "messageIdMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "aggregationIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "aggregationHookFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "routingIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "storageGasOracle": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "aggregationHook": "0x8464aF853363B8d6844070F68b0AB34Cb6523d0F", + "protocolFee": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9" + }, + "celo": { + "storageGasOracle": "0xD9A9966E7dA9a7f0032bF449FB12696a638E673C", + "proxyAdmin": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", + "merkleRootMultisigIsmFactory": "0x4C96a1abc44dc846775CE702C9E9BE821D3b487c", + "messageIdMultisigIsmFactory": "0xaB402f227e892Ef37C105bf06619c0fa106a1fB2", + "aggregationIsmFactory": "0x1722dd970a1F56040712129f5Eeb76B003fd7500", + "aggregationHookFactory": "0xc3745652EFB8555A8b064A0EA78d295133d326D2", + "routingIsmFactory": "0xec748b5623f0B50E4c5eB1CFa7Bd46C3213608b6", + "merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", + "interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7", + "aggregationHook": "0xc65890329066FB20c339Bc5C22f1756e9D3a4fF5", + "protocolFee": "0x89886d431f9c3eEE64DCD6dAbA3f7D689D98D899", + "mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", + "validatorAnnounce": "0xCeF677b65FDaA6804d4403083bb12B8dB3991FE1" + }, + "ethereum": { + "storageGasOracle": "0xc9a103990A8dB11b4f627bc5CD1D0c2685484Ec5", + "proxyAdmin": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", + "merkleRootMultisigIsmFactory": "0x47e8aF9e30C32Ab91060ED587894288786761B45", + "messageIdMultisigIsmFactory": "0xfA21D9628ADce86531854C2B7ef00F07394B0B69", + "aggregationIsmFactory": "0x46FA191Ad972D9674Ed752B69f9659A0d7b22846", + "aggregationHookFactory": "0x6D2555A8ba483CcF4409C39013F5e9a3285D3C9E", + "routingIsmFactory": "0xCb74c6aE411236CEE6803619916694BE86cF5987", + "merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", + "interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", + "aggregationHook": "0xb87AC8EA4533AE017604E44470F7c1E550AC6F10", + "protocolFee": "0x8B05BF30F6247a90006c5837eA63C7905D79e6d8", + "mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239", + "validatorAnnounce": "0xCe74905e51497b4adD3639366708b821dcBcff96" + }, + "avalanche": { + "storageGasOracle": "0x175821F30AdCAA4bbB72Ce98eF76C2E0De2C3f21", + "proxyAdmin": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", + "merkleRootMultisigIsmFactory": "0x896cF1D1B66cD211633eDd589fF158E8Cfaf9B54", + "messageIdMultisigIsmFactory": "0x8819D653DF5b1FC0DdB32189a2704E471AF8483c", + "aggregationIsmFactory": "0xa5E13796eB7d2EDCc88012c8cfF90D69B51FcF9f", + "aggregationHookFactory": "0x3bF6Ac986C7Af9A9Ac356C0e99C0041EFd8D96e7", + "routingIsmFactory": "0xA9Ddc70f50009aF8bDB312aA757B4304b0F7BbB3", + "merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A", + "interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", + "aggregationHook": "0x0165a22BA489F7DA37DAf6397781777D9FCB5708", + "protocolFee": "0xEc4AdA26E51f2685279F37C8aE62BeAd8212D597", + "mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", + "validatorAnnounce": "0x9Cad0eC82328CEE2386Ec14a12E81d070a27712f" } } diff --git a/typescript/sdk/src/consts/environments/testnet.json b/typescript/sdk/src/consts/environments/testnet.json index 7256d8d780..db04e9078a 100644 --- a/typescript/sdk/src/consts/environments/testnet.json +++ b/typescript/sdk/src/consts/environments/testnet.json @@ -8,67 +8,12 @@ "proxyAdmin": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69", "mailbox": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A", "validatorAnnounce": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7", - "defaultIsm": "0x7147a48429D6FA06ec08Ed95b500e68356819f2b", "merkleTreeHook": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8", "storageGasOracle": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279", "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": "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" + "fallbackRoutingHook": "0x2C6dD6768E669EDB7b53f26067C1C4534862c3de" }, "arbitrumgoerli": { "merkleRootMultisigIsmFactory": "0x17D58eBb5Ea0E2d360c877E119FAef4C4052e6B9", @@ -79,13 +24,12 @@ "proxyAdmin": "0x00DFB81Bfc45fa03060b605273147F274ea807E5", "mailbox": "0x13dABc0351407d5aAa0A50003a166A73b4febfDc", "validatorAnnounce": "0x4a01EEBa1CC20F47A2e60aE4ec932051601FcB9e", - "defaultIsm": "0x8C841784947dEa42f78263D54bec15c0cF65fA22", "merkleTreeHook": "0xf0A38e1eEA49dAc7968F470c3aA0BDE2565A5d80", "storageGasOracle": "0xFc8229ADB46D96056A6e451Fb3c55d60FFeD056f", "interchainGasPaymaster": "0x76189acFA212298d7022624a4633411eE0d2f26F", "aggregationHook": "0xf852EB6b98d84A4296754043a56759a0Ae0E06df", "protocolFee": "0x0358ba0D90ED2d90fB8cBb610F27C274D8077a0B", - "fallbackRoutingHook": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f" + "fallbackRoutingHook": "0xEdA6f85f4761A1f9e42FD40CA5a4E8Ce1C764015" }, "optimismgoerli": { "merkleRootMultisigIsmFactory": "0xAbC25d7daDD748948F5cC912A807b0f8FcBb56a9", @@ -96,13 +40,12 @@ "proxyAdmin": "0x800b4be4Dc91E56DE934D9f16888d113eFf89Ebb", "mailbox": "0xB5f021728Ea6223E3948Db2da61d612307945eA2", "validatorAnnounce": "0x24D31e12E4d3bc2C46C994FcE0c828b218A1aeAb", - "defaultIsm": "0x986e076aA22342282B6c2a287e9AaBC8a36161f3", "merkleTreeHook": "0xFEe074B31B5B259eB3109737bE13D39B853b47b9", "storageGasOracle": "0x4927C33299091033D935C15DE6b6073164e99BE0", "interchainGasPaymaster": "0x02A7661273528EfF3d78CBE7CbD1a717b28B89fC", "aggregationHook": "0x1C8A2588b8038BF9B7b1b60dD0EdF5b995A45599", "protocolFee": "0x962e30F6A3ECDA85c7fa1FcF38cD04efA991Ee20", - "fallbackRoutingHook": "0xba962f31B8DE02238fDdf8CE6a21260Af8C5Dd2F" + "fallbackRoutingHook": "0xc775c748F8c9F5443151Fd989e8B61375657474d" }, "scrollsepolia": { "merkleRootMultisigIsmFactory": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7", @@ -113,70 +56,12 @@ "proxyAdmin": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", "mailbox": "0x3C5154a193D6e2955650f9305c8d80c18C814A68", "validatorAnnounce": "0x527768930D889662Fe7ACF64294871e86e4C2381", - "defaultIsm": "0x4983DDBd279DB930cd883B44AF3f0da7567a06E6", "merkleTreeHook": "0x863E8c26621c52ACa1849C53500606e73BA272F0", "storageGasOracle": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C", "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" + "fallbackRoutingHook": "0xE1CCB130389f687bf745Dd6dc05E50da17d9ea96" }, "alfajores": { "merkleRootMultisigIsmFactory": "0xa9C7e306C0941896CA1fd528aA59089571D8D67E", @@ -192,54 +77,7 @@ "interchainGasPaymaster": "0x44769b0f4a6f01339e131a691cc2eebbb519d297", "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" + "fallbackRoutingHook": "0x3528B1aeF3a3d29E0eae90ad777A2b4A6a48aC3F" }, "polygonzkevmtestnet": { "merkleRootMultisigIsmFactory": "0xfc6e546510dC9d76057F1f76633FCFfC188CB213", @@ -250,13 +88,12 @@ "proxyAdmin": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8", "mailbox": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8", "validatorAnnounce": "0x7914A3349107A7295Bbf2374db5A973d73D1b324", - "defaultIsm": "0xfF5512D605018c185ac159B20354994BD3d75Ae2", "merkleTreeHook": "0x68311418D79fE8d96599384ED767d225635d88a8", "storageGasOracle": "0x3707bc8C7342aA6f693bCe1Bd7671Fca146F7F0A", "interchainGasPaymaster": "0xAD34A66Bf6dB18E858F6B686557075568c6E031C", "aggregationHook": "0x0Fd2C6F0Ad45e766660b9fDebCF36a2AD69536D1", "protocolFee": "0xddf4C3e791caCaFd26D7fb275549739B38ae6e75", - "fallbackRoutingHook": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5" + "fallbackRoutingHook": "0xBF2C366530C1269d531707154948494D3fF4AcA7" }, "sepolia": { "merkleRootMultisigIsmFactory": "0x0a71AcC99967829eE305a285750017C4916Ca269", @@ -265,7 +102,6 @@ "aggregationHookFactory": "0x160C28C92cA453570aD7C031972b58d5Dd128F72", "routingIsmFactory": "0x3603458990BfEb30f99E61B58427d196814D8ce1", "proxyAdmin": "0x97Bbc6bBaFa5Ce3b2FA966c121Af63bD09e940f8", - "defaultIsm": "0x97FE534674A0fA312b730C946A8A8AC9DcF90100", "storageGasOracle": "0x71775B071F77F1ce52Ece810ce084451a3045FFe", "interchainGasPaymaster": "0x6f2756380FD49228ae25Aa7F2817993cB74Ecc56", "aggregationHook": "0xe3147d5618f5e2e100690B50ec923009a4cde14A", @@ -273,7 +109,7 @@ "mailbox": "0xfFAEF09B3cd11D9b20d1a19bECca54EEC2884766", "merkleTreeHook": "0x4917a9746A7B6E0A57159cCb7F5a6744247f2d0d", "validatorAnnounce": "0xE6105C59480a1B7DD3E4f28153aFdbE12F4CfCD9", - "fallbackRoutingHook": "0x977837C7bf2863403d08a57Ee952d63fA1ae279E" + "fallbackRoutingHook": "0x17Dc724B7a2F09141C13b8AC33B396073785c2BC" }, "fuji": { "merkleRootMultisigIsmFactory": "0x93F50Ac4E5663DAAb03508008d592f6260964f62", @@ -284,59 +120,12 @@ "proxyAdmin": "0x378dA02f7dC3c23A8B5ecE32b8056CdF01e8d477", "mailbox": "0x5b6CFf85442B851A8e6eaBd2A4E4507B5135B3B0", "validatorAnnounce": "0x4f7179A691F8a684f56cF7Fed65171877d30739a", - "defaultIsm": "0x2d6891ac730E14521Ea0C45A00d3Eb62f2e432df", "merkleTreeHook": "0x9ff6ac3dAf63103620BBf76136eA1AFf43c2F612", "storageGasOracle": "0x9305dE34306886d615B096Bdf23b94a978f6a6c0", "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" + "fallbackRoutingHook": "0xc684f7F50DB4b2563218512e021fBdd0BeD6b57E" }, "bsctestnet": { "merkleRootMultisigIsmFactory": "0x3E235B90197E1D6b5DB5ad5aD49f2c1ED6406382", @@ -345,7 +134,6 @@ "aggregationHookFactory": "0xa1145B39F1c7Ef9aA593BC1DB1634b00CC020942", "routingIsmFactory": "0xea12ECFD1f241da323e93F12b4ed936403990190", "proxyAdmin": "0xb12282d2E838Aa5f2A4F9Ee5f624a77b7199A078", - "defaultIsm": "0xEf7cacD303D1886b3dE396B45a184d16f39248E0", "storageGasOracle": "0x124EBCBC018A5D4Efe639f02ED86f95cdC3f6498", "interchainGasPaymaster": "0x0dD20e410bdB95404f71c5a4e7Fa67B892A5f949", "aggregationHook": "0x3d675bB93250Ab7603F40cbb9194bae210784627", @@ -353,53 +141,7 @@ "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" + "fallbackRoutingHook": "0x2670ED2EC08cAd135307556685a96bD4c16b007b" }, "goerli": { "merkleRootMultisigIsmFactory": "0x8e43aCfb338B137A3befd9b92BfD84E128adE0B8", @@ -408,7 +150,6 @@ "aggregationHookFactory": "0x6bc243963f80AEa80948e8538bB114d4122DD9c5", "routingIsmFactory": "0xd16c3f34d6A2e62185aC61f76F83D3AA1E969018", "proxyAdmin": "0x0EdB3604D230963ecE9d83963164CFe2fDef576B", - "defaultIsm": "0x8BbdB0023ef47992b3E83E2B1B290D72A7477EfE", "storageGasOracle": "0xeC34c715ee6d050b2172E8aF650Db779561266C1", "interchainGasPaymaster": "0x0cD26594ea6c6526927C0F5225AC09F6288e7140", "aggregationHook": "0x2dF77b3efe9B8f9aEDf7bFC86f40B048178d8116", @@ -416,82 +157,7 @@ "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" + "fallbackRoutingHook": "0xd9E546CBB9577dC6346EdB40b24E86aE52487ab8" }, "moonbasealpha": { "merkleRootMultisigIsmFactory": "0xA59Ba0A8D4ea5A5DC9c8B0101ba7E6eE6C3399A4", @@ -501,14 +167,13 @@ "routingIsmFactory": "0x385C7f179168f5Da92c72E17AE8EF50F3874077f", "proxyAdmin": "0xb241991527F1C21adE14F55589E5940aC4852Fa0", "mailbox": "0x76189acFA212298d7022624a4633411eE0d2f26F", - "defaultIsm": "0x367241b198C29C6a8B2aa0c9D8350B6F81C2Abb3", "merkleTreeHook": "0x155B1CD2f7Cbc58d403B9BE341FaB6CD77425175", "storageGasOracle": "0x62fA20dE68Dbe425f0bc474b12235a4F8449E608", "interchainGasPaymaster": "0x92F05669A354a032A84FcfABfD13beE1aBc5bFd0", "aggregationHook": "0xaA9d918C49Cea0D2a877252aFb7976B6e3A48623", "protocolFee": "0xe2A73F106902983452713F24Bd019F6eb8712986", "validatorAnnounce": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", - "fallbackRoutingHook": "0x6c9EB73793F9Cd535DB1bF86dC307f6d899b2fE3" + "fallbackRoutingHook": "0xf666A33C451E8371907aD22dd545E1678fCa1582" }, "mumbai": { "merkleRootMultisigIsmFactory": "0xda0780ed3eE577EfE0B856E00f983bF231603307", @@ -516,7 +181,6 @@ "aggregationIsmFactory": "0x54b0d9AB6a99E9C9425D20fa4D9eE9dbf067e886", "aggregationHookFactory": "0x54CA9De95B37365909364672D363D2ecFC4e1Af4", "routingIsmFactory": "0x276C07098879f44F6C4a6ab91B6AAca6a56AD4B1", - "defaultIsm": "0xCbDc6B43fcC9465E18E0eE925170f6F2893625b8", "merkleTreeHook": "0x9AF85731EDd41E2E50F81Ef8a0A69D2fB836EDf9", "proxyAdmin": "0xa99aD6B1c10E92DB8d3510f1865A6d2Ab43EAd58", "storageGasOracle": "0xBEd8Fd6d5c6cBd878479C25f4725C7c842a43821", @@ -525,52 +189,6 @@ "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" + "fallbackRoutingHook": "0x31191BA83143b4745745389fEe64990c65F36829" } } diff --git a/typescript/sdk/src/consts/multisigIsm.ts b/typescript/sdk/src/consts/multisigIsm.ts index 3bcda6a5c6..e6c9608e24 100644 --- a/typescript/sdk/src/consts/multisigIsm.ts +++ b/typescript/sdk/src/consts/multisigIsm.ts @@ -4,106 +4,104 @@ import { ChainMap } from '../types'; export const defaultMultisigIsmConfigs: ChainMap = { // ----------------- Mainnets ----------------- celo: { - threshold: 4, + threshold: 2, validators: [ - '0x1f20274b1210046769d48174c2f0e7c25ca7d5c5', // abacus - '0x3bc014bafa43f93d534aed34f750997cdffcf007', // dsrv - '0xd79d506d741fa735938f7b7847a926e34a6fe6b0', // everstake - '0xe4a258bc61e65914c2a477b2a8a433ab4ebdf44b', // zee prime - '0x6aea63b0be4679c1385c26a92a3ff8aa6a8379f2', // staked - '0xc0085e1a49bcc69e534272adb82c74c0e007e1ca', // zkv + '0x63478422679303c3e4fc611b771fa4a707ef7f4a', + '0x2f4e808744df049d8acc050628f7bdd8265807f9', + '0x7bf30afcb6a7d92146d5a910ea4c154fba38d25e', ], }, ethereum: { - threshold: 4, + threshold: 2, validators: [ - '0x4c327ccb881a7542be77500b2833dc84c839e7b7', // abacus - '0x84cb373148ef9112b277e68acf676fefa9a9a9a0', // dsrv - '0x0d860c2b28bec3af4fd3a5997283e460ff6f2789', // everstake - '0xd4c1211f0eefb97a846c4e6d6589832e52fc03db', // zee prime - '0x600c90404d5c9df885404d2cc5350c9b314ea3a2', // staked - '0x892DC66F5B2f8C438E03f6323394e34A9C24F2D6', // zkv + '0x03c842db86a6a3e524d4a6615390c1ea8e2b9541', + '0x4346776b10f5e0d9995d884b7a1dbaee4e24c016', + '0x749d6e7ad949e522c92181dc77f7bbc1c5d71506', ], }, avalanche: { - threshold: 4, + threshold: 2, validators: [ - '0xa7aa52623fe3d78c343008c95894be669e218b8d', // abacus - '0xb6004433fb04f643e2d48ae765c0e7f890f0bc0c', // dsrv - '0xa07e213e0985b21a6128e6c22ab5fb73948b0cc2', // everstake - '0x73853ed9a5f6f2e4c521970a94d43469e3cdaea6', // zee prime - '0xbd2e136cda02ba627ca882e49b184cbe976081c8', // staked - '0x1418126f944a44dad9edbab32294a8c890e7a9e3', // zkv + '0x3fb8263859843bffb02950c492d492cae169f4cf', + '0xe58c63ad669b946e7c8211299f22679deecc9c83', + '0x6c754f1e9cd8287088b46a7c807303d55d728b49', ], }, polygon: { - threshold: 4, + threshold: 2, validators: [ - '0x59a001c3451e7f9f3b4759ea215382c1e9aa5fc1', // abacus - '0x009fb042d28944017177920c1d40da02bfebf474', // dsrv - '0xba4b13e23705a5919c1901150d9697e8ffb3ea71', // everstake - '0x2faa4071b718972f9b4beec1d8cbaa4eb6cca6c6', // zee prime - '0x5ae9b0f833dfe09ef455562a1f603f1634504dd6', // staked - '0x6a163d312f7352a95c9b81dca15078d5bf77a442', // zkv + '0x12ecb319c7f4e8ac5eb5226662aeb8528c5cefac', + '0x8dd8f8d34b5ecaa5f66de24b01acd7b8461c3916', + '0xdbf3666de031bea43ec35822e8c33b9a9c610322', ], }, bsc: { - threshold: 4, + threshold: 2, validators: [ - '0xcc84b1eb711e5076b2755cf4ad1d2b42c458a45e', // abacus - '0xefe34eae2bca1846b895d2d0762ec21796aa196a', // dsrv - '0x662674e80e189b0861d6835c287693f50ee0c2ff', // everstake - '0x8a0f59075af466841808c529624807656309c9da', // zee prime - '0xdd2ff046ccd748a456b4757a73d47f165469669f', // staked - '0x034c4924c30ec4aa1b7f3ad58548988f0971e1bf', // zkv + '0x570af9b7b36568c8877eebba6c6727aa9dab7268', + '0x7bf928d5d262365d31d64eaa24755d48c3cae313', + '0x03047213365800f065356b4a2fe97c3c3a52296a', ], }, arbitrum: { - threshold: 4, + threshold: 2, validators: [ - '0xbcb815f38d481a5eba4d7ac4c9e74d9d0fc2a7e7', // abacus - '0xd839424e2e5ace0a81152298dc2b1e3bb3c7fb20', // dsrv - '0xb8085c954b75b7088bcce69e61d12fcef797cd8d', // everstake - '0x9856dcb10fd6e5407fa74b5ab1d3b96cc193e9b7', // zee prime - '0x505dff4e0827aa5065f5e001db888e0569d46490', // staked - '0x25c6779d4610f940bf2488732e10bcffb9d36f81', // ZKV + '0x4d966438fe9e2b1e7124c87bbb90cb4f0f6c59a1', + '0x6333e110b8a261cab28acb43030bcde59f26978a', + '0x3369e12edd52570806f126eb50be269ba5e65843', ], }, optimism: { - threshold: 4, + threshold: 2, validators: [ - '0x9f2296d5cfc6b5176adc7716c7596898ded13d35', // abacus - '0x9c10bbe8efa03a8f49dfdb5c549258e3a8dca097', // dsrv - '0x62144d4a52a0a0335ea5bb84392ef9912461d9dd', // everstake - '0xaff4718d5d637466ad07441ee3b7c4af8e328dbd', // zee prime - '0xc64d1efeab8ae222bc889fe669f75d21b23005d9', // staked - '0xfa174eb2b4921bb652bc1ada3e8b00e7e280bf3c', // ZKV + '0x20349eadc6c72e94ce38268b96692b1a5c20de4f', + '0x04d040cee072272789e2d1f29aef73b3ad098db5', + '0x779a17e035018396724a6dec8a59bda1b5adf738', ], }, moonbeam: { - threshold: 3, + threshold: 2, validators: [ - '0x237243d32d10e3bdbbf8dbcccc98ad44c1c172ea', // abacus - '0x9509c8cf0a06955f27342262af501b74874e98fb', // dsrv - '0xb7113c999e4d587b162dd1a28c73f3f51c6bdcdc', // everstake - '0x26725501597d47352a23cd26f122709f69ad53bc', // staked + '0x2225e2f4e9221049456da93b71d2de41f3b6b2a8', + '0x4fe067bb455358e295bfcfb92519a6f9de94b98e', + '0xcc4a78aa162482bea43313cd836ba7b560b44fc4', ], }, gnosis: { - threshold: 3, + threshold: 2, + validators: [ + '0xd4df66a859585678f2ea8357161d896be19cc1ca', + '0x06a833508579f8b59d756b3a1e72451fc70840c3', + '0xb93a72cee19402553c9dd7fed2461aebd04e2454', + ], + }, + // solana: { + // threshold: 0, + // validators: [ + // ], + // }, + base: { + threshold: 2, + validators: [ + '0xb9453d675e0fa3c178a17b4ce1ad5b1a279b3af9', + '0x4512985a574cb127b2af2d4bb676876ce804e3f8', + '0xb144bb2f599a5af095bc30367856f27ea8a8adc7', + ], + }, + scroll: { + threshold: 2, validators: [ - '0xd0529ec8df08d0d63c0f023786bfa81e4bb51fd6', // abacus - '0x8a72ff8571c53c62c7ca02e8c97a443cd5674383', // dsrv - '0x4075c2f6bd6d9562067cfe551d49c2bcafa7d692', // everstake - '0xa18580444eaeb1c5957e7b66a6bf84b6519f904d', // staked + '0xad557170a9f2f21c35e03de07cb30dcbcc3dff63', + '0xb37fe43a9f47b7024c2d5ae22526cc66b5261533', + '0x7210fa0a6be39a75cb14d682ebfb37e2b53ecbe5', ], }, - solana: { + polygonzkevm: { threshold: 2, validators: [ - '0x3cd1a081f38874bbb075bf10b62adcb858db864c', // abacus - '0x2b0c45f6111ae1c1684d4287792e3bd6ebd1abcc', // ZKV - '0x7b9ec253a8ba38994457eb9dbe386938d545351a', // everstake + '0x86f2a44592bb98da766e880cfd70d3bbb295e61a', + '0xc84076030bdabaabb9e61161d833dd84b700afda', + '0x6a1da2e0b7ae26aaece1377c0a4dbe25b85fa3ca', ], }, // ----------------- Testnets ----------------- diff --git a/typescript/sdk/src/core/HyperlaneCore.ts b/typescript/sdk/src/core/HyperlaneCore.ts index cf7faecdf0..c194e534fc 100644 --- a/typescript/sdk/src/core/HyperlaneCore.ts +++ b/typescript/sdk/src/core/HyperlaneCore.ts @@ -33,7 +33,6 @@ 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 a1d7784022..a1ee914563 100644 --- a/typescript/sdk/src/core/HyperlaneCoreDeployer.ts +++ b/typescript/sdk/src/core/HyperlaneCoreDeployer.ts @@ -90,9 +90,16 @@ export class HyperlaneCoreDeployer extends HyperlaneDeployer< // configure mailbox try { + this.logger('Initializing mailbox'); await this.multiProvider.handleTx( chain, - mailbox.initialize(config.owner, defaultIsm, defaultHook, requiredHook), + mailbox.initialize( + config.owner, + defaultIsm, + defaultHook, + requiredHook, + this.multiProvider.getTransactionOverrides(chain), + ), ); } catch (e: any) { if (!e.message.includes('already initialized')) { diff --git a/typescript/sdk/src/core/MultiProtocolCore.test.ts b/typescript/sdk/src/core/MultiProtocolCore.test.ts index 5c21e842d7..57ee54bcea 100644 --- a/typescript/sdk/src/core/MultiProtocolCore.test.ts +++ b/typescript/sdk/src/core/MultiProtocolCore.test.ts @@ -37,7 +37,8 @@ describe('MultiProtocolCore', () => { }); }); - describe('checks delivery', () => { + // TODO: update for v3 + describe.skip('checks delivery', () => { it('to EVM', async () => { const multiProvider = new MultiProtocolProvider(); const core = MultiProtocolCore.fromEnvironment('mainnet', multiProvider); diff --git a/typescript/sdk/src/deploy/HyperlaneDeployer.ts b/typescript/sdk/src/deploy/HyperlaneDeployer.ts index a438a71f3a..22552dd383 100644 --- a/typescript/sdk/src/deploy/HyperlaneDeployer.ts +++ b/typescript/sdk/src/deploy/HyperlaneDeployer.ts @@ -237,15 +237,20 @@ export abstract class HyperlaneDeployer< setHook: (contract: C, hook: Address) => Promise, ): Promise { const configuredHook = await getHook(contract); - if (targetHook !== configuredHook) { + if (!eqAddress(targetHook, configuredHook)) { await this.runIfOwner(chain, contract, async () => { - this.logger(`Set hook on ${chain}`); + this.logger( + `Set hook on ${chain} to ${targetHook}, currently is ${configuredHook}`, + ); await this.multiProvider.sendTransaction( chain, setHook(contract, targetHook), ); - if (targetHook !== (await getHook(contract))) { - throw new Error(`Set hook failed on ${chain}`); + const actualHook = await getHook(contract); + if (!eqAddress(targetHook, actualHook)) { + throw new Error( + `Set hook failed on ${chain}, wanted ${targetHook}, got ${actualHook}`, + ); } }); } diff --git a/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts b/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts index c8b6d85fd3..f7c09d36d3 100644 --- a/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts +++ b/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts @@ -52,6 +52,7 @@ export class HyperlaneIgpDeployer extends HyperlaneDeployer< !eqAddress(currentGasConfig.gasOracle, storageGasOracle.address) || !currentGasConfig.gasOverhead.eq(newGasOverhead) ) { + this.logger(`Setting gas params for ${remote} to ${newGasOverhead}`); gasParamsToSet.push({ remoteDomain: remoteId, config: { @@ -66,7 +67,10 @@ export class HyperlaneIgpDeployer extends HyperlaneDeployer< await this.runIfOwner(chain, igp, async () => this.multiProvider.handleTx( chain, - igp.setDestinationGasConfigs(gasParamsToSet), + igp.setDestinationGasConfigs( + gasParamsToSet, + this.multiProvider.getTransactionOverrides(chain), + ), ), ); } diff --git a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts index d9a04966e0..c61f371c51 100644 --- a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts +++ b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts @@ -25,12 +25,13 @@ import { ChainMap, ChainName } from '../types'; import { HookFactories, hookFactories } from './contracts'; import { AggregationHookConfig, + DomainRoutingHookConfig, + FallbackRoutingHookConfig, HookConfig, HookType, IgpHookConfig, OpStackHookConfig, ProtocolFeeHookConfig, - RoutingHookConfig, } from './types'; export class HyperlaneHookDeployer extends HyperlaneDeployer< @@ -139,6 +140,9 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< aggregatedHooks.push(subhooks[hookConfig.type].address); hooks = { ...hooks, ...subhooks }; } + this.logger( + `Deploying aggregation hook of ${config.hooks.map((h) => h.type)}`, + ); const address = await this.ismFactory.deployStaticAddressSet( chain, this.ismFactory.getContracts(chain).aggregationHookFactory, @@ -178,11 +182,11 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< origin: chain, nativeBridge: l2Messenger, }; - const opstackIsm = await this.ismFactory.deploy( + const opstackIsm = (await this.ismFactory.deploy( config.destinationChain, ismConfig, chain, - ); + )) as OPStackIsm; // deploy opstack hook const hook = await this.deployContract(chain, HookType.OP_STACK, [ mailbox, @@ -192,7 +196,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< ]); const overrides = this.multiProvider.getTransactionOverrides(chain); // set authorized hook on opstack ism - const authorizedHook = await (opstackIsm as OPStackIsm).authorizedHook(); + const authorizedHook = await opstackIsm.authorizedHook(); if (authorizedHook === addressToBytes32(hook.address)) { this.logger('Authorized hook already set on ism %s', opstackIsm.address); return hook; @@ -216,10 +220,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< ); await this.multiProvider.handleTx( config.destinationChain, - (opstackIsm as OPStackIsm).setAuthorizedHook( - addressToBytes32(hook.address), - overrides, - ), + opstackIsm.setAuthorizedHook(addressToBytes32(hook.address), overrides), ); return hook; @@ -227,7 +228,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< async deployRouting( chain: ChainName, - config: RoutingHookConfig, + config: DomainRoutingHookConfig | FallbackRoutingHookConfig, coreAddresses = this.core[chain], ): Promise { const mailbox = coreAddresses?.mailbox; diff --git a/typescript/sdk/src/hook/types.ts b/typescript/sdk/src/hook/types.ts index 00bddf46c0..a0e60a88b7 100644 --- a/typescript/sdk/src/hook/types.ts +++ b/typescript/sdk/src/hook/types.ts @@ -42,27 +42,25 @@ export type OpStackHookConfig = { destinationChain: ChainName; }; -export type DomainRoutingHookConfig = { - type: HookType.ROUTING; +type RoutingHookConfig = { owner: Address; domains: ChainMap; }; -export type FallbackRoutingHookConfig = { +export type DomainRoutingHookConfig = RoutingHookConfig & { + type: HookType.ROUTING; +}; + +export type FallbackRoutingHookConfig = RoutingHookConfig & { type: HookType.FALLBACK_ROUTING; - owner: Address; fallback: HookConfig; - domains: ChainMap; }; -export type RoutingHookConfig = - | DomainRoutingHookConfig - | FallbackRoutingHookConfig; - export type HookConfig = | MerkleTreeHookConfig | AggregationHookConfig | IgpHookConfig | ProtocolFeeHookConfig | OpStackHookConfig - | RoutingHookConfig; + | DomainRoutingHookConfig + | FallbackRoutingHookConfig; diff --git a/typescript/sdk/src/index.ts b/typescript/sdk/src/index.ts index 2d7f7cadfd..33f5cffa01 100644 --- a/typescript/sdk/src/index.ts +++ b/typescript/sdk/src/index.ts @@ -120,7 +120,6 @@ export { MerkleTreeHookConfig, OpStackHookConfig, ProtocolFeeHookConfig, - RoutingHookConfig, } from './hook/types'; export { HyperlaneIsmFactory, @@ -135,6 +134,7 @@ export { ModuleType, MultisigConfig, MultisigIsmConfig, + OpStackIsmConfig, RoutingIsmConfig, } from './ism/types'; export { diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts index 5f99986269..0e1502fdd2 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts @@ -32,6 +32,7 @@ import { FactoryFactories, factoryFactories } from './contracts'; import { AggregationIsmConfig, DeployedIsm, + DeployedIsmType, IsmConfig, IsmType, ModuleType, @@ -75,62 +76,52 @@ export class HyperlaneIsmFactory extends HyperlaneApp { ); } - async deploy( + async deploy( chain: ChainName, - config: IsmConfig, + config: C, origin?: ChainName, ): Promise { - let contract: DeployedIsm; if (typeof config === 'string') { - // TODO: return the appropriate ISM type + // @ts-ignore return IInterchainSecurityModule__factory.connect( config, this.multiProvider.getSignerOrProvider(chain), ); } - if ( - config.type === IsmType.MERKLE_ROOT_MULTISIG || - config.type === IsmType.MESSAGE_ID_MULTISIG - ) { - switch (config.type) { - case IsmType.MERKLE_ROOT_MULTISIG: - this.logger( - `Deploying Merkle Root Multisig ISM to ${chain} for verifying ${origin}`, - ); - break; - 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 === 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 === IsmType.AGGREGATION) { - this.logger(`Deploying Aggregation ISM to ${chain}`); - contract = await this.deployAggregationIsm(chain, config, origin); - } 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, - new TestIsm__factory(), - [], - ); - } else { - throw new Error(`Unsupported ISM type`); + const ismType = config.type; + this.logger( + `Deploying ${ismType} to ${chain} ${ + origin ? `(for verifying ${origin})` : '' + }`, + ); + + let contract: DeployedIsmType[typeof ismType]; + switch (ismType) { + case IsmType.MESSAGE_ID_MULTISIG: + case IsmType.MERKLE_ROOT_MULTISIG: + contract = await this.deployMultisigIsm(chain, config); + break; + case IsmType.ROUTING: + contract = await this.deployRoutingIsm(chain, config); + break; + case IsmType.AGGREGATION: + contract = await this.deployAggregationIsm(chain, config, origin); + break; + case IsmType.OP_STACK: + contract = await this.deployOpStackIsm(chain, config); + break; + case IsmType.TEST_ISM: + contract = await this.multiProvider.handleDeploy( + chain, + new TestIsm__factory(), + [], + ); + break; + default: + throw new Error(`Unsupported ISM type ${ismType}`); } - const ismType = config.type; if (!this.deployedIsms[chain]) { this.deployedIsms[chain] = {}; } @@ -222,7 +213,8 @@ export class HyperlaneIsmFactory extends HyperlaneApp { this.getContracts(chain).aggregationIsmFactory; const addresses: Address[] = []; for (const module of config.modules) { - addresses.push((await this.deploy(chain, module, origin)).address); + const submodule = await this.deploy(chain, module, origin); + addresses.push(submodule.address); } const address = await this.deployStaticAddressSet( chain, @@ -521,7 +513,6 @@ export async function moduleMatchesConfig( const opStackIsm = OPStackIsm__factory.connect(moduleAddress, provider); const type = await opStackIsm.moduleType(); matches = matches && type === ModuleType.NULL; - matches = false; break; } case IsmType.TEST_ISM: { diff --git a/typescript/sdk/src/ism/types.ts b/typescript/sdk/src/ism/types.ts index 0258cbe662..1deeb74db5 100644 --- a/typescript/sdk/src/ism/types.ts +++ b/typescript/sdk/src/ism/types.ts @@ -1,27 +1,14 @@ import { IAggregationIsm, - IInterchainSecurityModule, IMultisigIsm, IRoutingIsm, OPStackIsm, - StaticMerkleRootMultisigIsm, - StaticMessageIdMultisigIsm, TestIsm, } from '@hyperlane-xyz/core'; -import type { Address } from '@hyperlane-xyz/utils'; +import type { Address, ValueOf } from '@hyperlane-xyz/utils'; import { ChainMap } from '../types'; -export type DeployedIsm = - | IInterchainSecurityModule - | IMultisigIsm - | IAggregationIsm - | IRoutingIsm - | StaticMessageIdMultisigIsm - | StaticMerkleRootMultisigIsm - | OPStackIsm - | TestIsm; - // this enum should match the IInterchainSecurityModule.sol enum // meant for the relayer export enum ModuleType { @@ -101,3 +88,14 @@ export type IsmConfig = | AggregationIsmConfig | OpStackIsmConfig | TestIsmConfig; + +export type DeployedIsmType = { + [IsmType.ROUTING]: IRoutingIsm; + [IsmType.AGGREGATION]: IAggregationIsm; + [IsmType.MERKLE_ROOT_MULTISIG]: IMultisigIsm; + [IsmType.MESSAGE_ID_MULTISIG]: IMultisigIsm; + [IsmType.OP_STACK]: OPStackIsm; + [IsmType.TEST_ISM]: TestIsm; +}; + +export type DeployedIsm = ValueOf; From 136e7c8d3228bb4b605ddaf7afcede4f9fcfa7ff Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Thu, 2 Nov 2023 16:41:49 -0400 Subject: [PATCH 15/15] Fix validator checkpoint syncer latest index (#2858) Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/2856 --- rust/agents/validator/src/submit.rs | 10 +++++++++- rust/hyperlane-base/src/traits/checkpoint_syncer.rs | 10 ++++++++++ rust/hyperlane-base/src/types/local_storage.rs | 8 ++++++++ rust/hyperlane-base/src/types/s3_storage.rs | 11 +++++++++-- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index b94b5781a1..683e38afc9 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -167,7 +167,7 @@ impl ValidatorSubmitter { // // tree.index() will panic if the tree is empty, so we use tree.count() instead // and convert the correctness_checkpoint.index to a count by adding 1. - while correctness_checkpoint.index + 1 > tree.count() as u32 { + while tree.count() as u32 <= correctness_checkpoint.index { if let Some(insertion) = self .message_db .retrieve_merkle_tree_insertion_by_leaf_index(&(tree.count() as u32))? @@ -239,6 +239,8 @@ impl ValidatorSubmitter { &self, checkpoints: Vec, ) -> Result<()> { + let last_checkpoint = checkpoints.as_slice()[checkpoints.len() - 1]; + for queued_checkpoint in checkpoints { let existing = self .checkpoint_syncer @@ -261,9 +263,15 @@ impl ValidatorSubmitter { "Signed and submitted checkpoint" ); + // TODO: move these into S3 implementations // small sleep before signing next checkpoint to avoid rate limiting sleep(Duration::from_millis(100)).await; } + + self.checkpoint_syncer + .update_latest_index(last_checkpoint.index) + .await?; + Ok(()) } } diff --git a/rust/hyperlane-base/src/traits/checkpoint_syncer.rs b/rust/hyperlane-base/src/traits/checkpoint_syncer.rs index e017b3f5aa..abec982c7d 100644 --- a/rust/hyperlane-base/src/traits/checkpoint_syncer.rs +++ b/rust/hyperlane-base/src/traits/checkpoint_syncer.rs @@ -10,6 +10,16 @@ use hyperlane_core::{SignedAnnouncement, SignedCheckpointWithMessageId}; pub trait CheckpointSyncer: Debug + Send + Sync { /// Read the highest index of this Syncer async fn latest_index(&self) -> Result>; + /// Writes the highest index of this Syncer + async fn write_latest_index(&self, index: u32) -> Result<()>; + /// Update the latest index of this syncer if necessary + async fn update_latest_index(&self, index: u32) -> Result<()> { + let curr = self.latest_index().await?.unwrap_or(0); + if index > curr { + self.write_latest_index(index).await?; + } + Ok(()) + } /// Attempt to fetch the signed (checkpoint, messageId) tuple at this index async fn fetch_checkpoint(&self, index: u32) -> Result>; /// Write the signed (checkpoint, messageId) tuple to this syncer diff --git a/rust/hyperlane-base/src/types/local_storage.rs b/rust/hyperlane-base/src/types/local_storage.rs index 76c02a38cd..38397c1bf6 100644 --- a/rust/hyperlane-base/src/types/local_storage.rs +++ b/rust/hyperlane-base/src/types/local_storage.rs @@ -62,6 +62,14 @@ impl CheckpointSyncer for LocalStorage { } } + async fn write_latest_index(&self, index: u32) -> Result<()> { + let path = self.latest_index_file_path(); + tokio::fs::write(&path, index.to_string()) + .await + .with_context(|| format!("Writing index to {path:?}"))?; + Ok(()) + } + async fn fetch_checkpoint(&self, index: u32) -> Result> { let Ok(data) = tokio::fs::read(self.checkpoint_file_path(index)).await else { return Ok(None); diff --git a/rust/hyperlane-base/src/types/s3_storage.rs b/rust/hyperlane-base/src/types/s3_storage.rs index cfce7ff3e5..2d09a18a86 100644 --- a/rust/hyperlane-base/src/types/s3_storage.rs +++ b/rust/hyperlane-base/src/types/s3_storage.rs @@ -131,7 +131,7 @@ impl S3Storage { format!("checkpoint_{index}_with_id.json") } - fn index_key() -> String { + fn latest_index_key() -> String { "checkpoint_latest_index.json".to_owned() } @@ -144,7 +144,7 @@ impl S3Storage { impl CheckpointSyncer for S3Storage { async fn latest_index(&self) -> Result> { let ret = self - .anonymously_read_from_bucket(S3Storage::index_key()) + .anonymously_read_from_bucket(S3Storage::latest_index_key()) .await? .map(|data| serde_json::from_slice(&data)) .transpose() @@ -159,6 +159,13 @@ impl CheckpointSyncer for S3Storage { ret } + async fn write_latest_index(&self, index: u32) -> Result<()> { + let serialized_index = serde_json::to_string(&index)?; + self.write_to_bucket(S3Storage::latest_index_key(), &serialized_index) + .await?; + Ok(()) + } + async fn fetch_checkpoint(&self, index: u32) -> Result> { self.anonymously_read_from_bucket(S3Storage::checkpoint_key(index)) .await?