From 9f19cdf469237773ccd42bcbd6bd3c58c56e644f Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Tue, 11 Jun 2024 13:26:29 +0100 Subject: [PATCH 01/46] ci: update action versions (#3927) - update to latest versions of actions - notably docker tasks get a couple of major bumps - rename the foundry action to its current name --------- Signed-off-by: Paul Balaji --- .github/workflows/agent-release-artifacts.yml | 4 +- .github/workflows/monorepo-docker.yml | 10 +-- .github/workflows/release.yml | 4 +- .github/workflows/rust-docker.yml | 10 +-- .github/workflows/rust.yml | 4 +- .github/workflows/static-analysis.yml | 10 +-- .github/workflows/storage-analysis.yml | 8 +- .github/workflows/test.yml | 82 +++++++++---------- 8 files changed, 66 insertions(+), 66 deletions(-) diff --git a/.github/workflows/agent-release-artifacts.yml b/.github/workflows/agent-release-artifacts.yml index 282712098..f54822817 100644 --- a/.github/workflows/agent-release-artifacts.yml +++ b/.github/workflows/agent-release-artifacts.yml @@ -43,7 +43,7 @@ jobs: runs-on: ${{ matrix.OS }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: ubuntu setup if: ${{ matrix.OS == 'larger-runner' }} run: | @@ -74,7 +74,7 @@ jobs: run: chmod ug+x,-w relayer scraper validator working-directory: rust/target/${{ matrix.TARGET }}/release - name: upload binaries - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.TARGET }}-${{ needs.prepare.outputs.tag_sha }}-${{ needs.prepare.outputs.tag_date }} path: | diff --git a/.github/workflows/monorepo-docker.yml b/.github/workflows/monorepo-docker.yml index b9d90db2b..629e08acb 100644 --- a/.github/workflows/monorepo-docker.yml +++ b/.github/workflows/monorepo-docker.yml @@ -36,7 +36,7 @@ jobs: if: needs.check-env.outputs.gcloud-service-key == 'true' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive @@ -48,7 +48,7 @@ jobs: echo "TAG_SHA=$(echo '${{ github.sha }}' | cut -b 1-7)" >> $GITHUB_OUTPUT - name: Docker meta id: meta - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v5 with: # list of Docker images to use as base name for tags images: | @@ -59,15 +59,15 @@ jobs: type=ref,event=pr type=raw,value=${{ steps.taggen.outputs.TAG_SHA }}-${{ steps.taggen.outputs.TAG_DATE }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to GCR - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: gcr.io username: _json_key password: ${{ secrets.GCLOUD_SERVICE_KEY }} - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: ./ file: ./Dockerfile diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6fc7eba09..dfedb241a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,14 +19,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: # check out full history fetch-depth: 0 submodules: recursive - name: Setup Node.js 18.x - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18.x diff --git a/.github/workflows/rust-docker.yml b/.github/workflows/rust-docker.yml index 1463d11a1..0da80ff79 100644 --- a/.github/workflows/rust-docker.yml +++ b/.github/workflows/rust-docker.yml @@ -33,7 +33,7 @@ jobs: if: needs.check-env.outputs.gcloud-service-key == 'true' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Generate tag data @@ -43,7 +43,7 @@ jobs: echo "TAG_SHA=$(echo '${{ github.sha }}' | cut -b 1-7)" >> $GITHUB_OUTPUT - name: Docker meta id: meta - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v5 with: # list of Docker images to use as base name for tags images: | @@ -54,15 +54,15 @@ jobs: type=ref,event=pr type=raw,value=${{ steps.taggen.outputs.TAG_SHA }}-${{ steps.taggen.outputs.TAG_DATE }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to GCR - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: gcr.io username: _json_key password: ${{ secrets.GCLOUD_SERVICE_KEY }} - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: ./rust file: ./rust/Dockerfile diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index e91bed49e..4f52f82bb 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -29,7 +29,7 @@ jobs: runs-on: larger-runner steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - uses: actions-rs/toolchain@v1 @@ -57,7 +57,7 @@ jobs: runs-on: larger-runner steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - uses: actions-rs/toolchain@v1 diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 881d8f9bd..a3eba2c88 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -18,13 +18,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -35,13 +35,13 @@ jobs: run: yarn install - name: foundry-install - uses: onbjerg/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 - name: forge-build run: cd solidity && forge build --build-info - name: Static analysis - uses: crytic/slither-action@v0.3.0 + uses: crytic/slither-action@v0.4.0 id: slither with: target: 'solidity/' @@ -51,6 +51,6 @@ jobs: ignore-compile: true - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ${{ steps.slither.outputs.sarif }} diff --git a/.github/workflows/storage-analysis.yml b/.github/workflows/storage-analysis.yml index f50a17b4d..70e77f0dd 100644 --- a/.github/workflows/storage-analysis.yml +++ b/.github/workflows/storage-analysis.yml @@ -14,17 +14,17 @@ jobs: steps: # Checkout the PR branch - name: Checkout PR branch - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 18 - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -35,7 +35,7 @@ jobs: run: yarn install - name: foundry-install - uses: onbjerg/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 # Run the command on PR branch - name: Run command on PR branch diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 664383cc2..b83bc9c35 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,17 +30,17 @@ jobs: yarn-install: runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 18 - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -61,14 +61,14 @@ jobs: runs-on: ubuntu-latest needs: [yarn-install] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -76,7 +76,7 @@ jobs: key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./* @@ -89,7 +89,7 @@ jobs: checkout-registry: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: repository: hyperlane-xyz/hyperlane-registry ref: main @@ -105,7 +105,7 @@ jobs: - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - name: registry-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} @@ -115,14 +115,14 @@ jobs: runs-on: ubuntu-latest needs: [yarn-install] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} # check out full history fetch-depth: 0 - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -145,17 +145,17 @@ jobs: runs-on: ubuntu-latest needs: [yarn-build, checkout-registry] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: foundry-install - uses: onbjerg/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 - name: build-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./* @@ -167,7 +167,7 @@ jobs: - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - name: registry-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} @@ -184,13 +184,13 @@ jobs: matrix: environment: [mainnet3, testnet4] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -198,7 +198,7 @@ jobs: key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./* @@ -210,7 +210,7 @@ jobs: - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - name: registry-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} @@ -234,17 +234,17 @@ jobs: matrix: e2e-type: [cosmwasm, non-cosmwasm] steps: - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 18 - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: foundry-install - uses: onbjerg/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 - name: setup rust uses: actions-rs/toolchain@v1 @@ -267,7 +267,7 @@ jobs: make-default: true - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -275,7 +275,7 @@ jobs: key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./* @@ -287,14 +287,14 @@ jobs: - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - name: registry-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - name: cargo-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ~/.cargo @@ -338,17 +338,17 @@ jobs: - test-type: configure_hook_enabled - test-type: pi_with_core_chain steps: - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 18 - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: foundry-install - uses: onbjerg/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 - name: setup rust uses: actions-rs/toolchain@v1 @@ -371,7 +371,7 @@ jobs: make-default: true - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -379,7 +379,7 @@ jobs: key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./* @@ -391,14 +391,14 @@ jobs: - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - name: registry-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - name: cargo-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ~/.cargo @@ -422,15 +422,15 @@ jobs: module: core steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: foundry-install - uses: onbjerg/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 - name: build-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./* @@ -442,7 +442,7 @@ jobs: - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - name: registry-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} @@ -456,13 +456,13 @@ jobs: needs: [yarn-test] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 - name: yarn-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | **/node_modules @@ -470,7 +470,7 @@ jobs: key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./* @@ -478,7 +478,7 @@ jobs: key: ${{ github.event.pull_request.head.sha || github.sha }} - name: foundry-install - uses: onbjerg/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 - name: Run tests with coverage run: yarn coverage @@ -486,6 +486,6 @@ jobs: NODE_OPTIONS: --max_old_space_size=4096 - name: Upload coverage reports to Codecov with GitHub Action - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} From 5a31e7b5d39000af78d5fe206ef1e9c3627a2652 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:51:56 +0100 Subject: [PATCH 02/46] chore: debug slow relayer startup (#3932) ### Description Opened this PR to debug slow relayer startup, but it actually looks like that's already been fixed by hook indexing. The requirement for fast startup is that the processor sees new messages and then one of the following happens: - (1) if the message is meant for an unknown domain, it drops it ([this log](https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/6d132b02a3e181c929aee7d452ca765cc039ea4e/rust/agents/relayer/src/msg/processor.rs#L269)), otherwise - it forwards the message to the submitter, which then: - (2) adds it straight to the confirm queue because it's already been submitted ([here](https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/6d132b02a3e181c929aee7d452ca765cc039ea4e/rust/agents/relayer/src/msg/pending_message.rs#L159)) - (3) successfully builds metadata ([here](https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/6d132b02a3e181c929aee7d452ca765cc039ea4e/rust/agents/relayer/src/msg/op_submitter.rs#L231)) - (4) in some cases building metadata fails because the ism doesn't exist The relayer logs either of the four cases (in most cases (2), because we're running a second relayer for now). To be even more confident in fast startup, I ran a single relayer and restarted it. New messages were successfully processed according to one of the four cases above, and the prep queues didn't increase ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- rust/agents/relayer/src/msg/op_submitter.rs | 1 + rust/agents/relayer/src/msg/processor.rs | 12 ++++++++++-- .../infra/config/environments/mainnet3/agent.ts | 6 +++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/rust/agents/relayer/src/msg/op_submitter.rs b/rust/agents/relayer/src/msg/op_submitter.rs index 20eb93616..84731aa63 100644 --- a/rust/agents/relayer/src/msg/op_submitter.rs +++ b/rust/agents/relayer/src/msg/op_submitter.rs @@ -244,6 +244,7 @@ async fn prepare_task( metrics.ops_dropped.inc(); } PendingOperationResult::Confirm => { + debug!(?op, "Pushing operation to confirm queue"); confirm_queue.push(op).await; } } diff --git a/rust/agents/relayer/src/msg/processor.rs b/rust/agents/relayer/src/msg/processor.rs index 6545d480a..1c81c3017 100644 --- a/rust/agents/relayer/src/msg/processor.rs +++ b/rust/agents/relayer/src/msg/processor.rs @@ -138,7 +138,10 @@ impl DirectionalNonceIterator { #[instrument] fn iterate(&mut self) { match self.direction { - NonceDirection::High => self.nonce = self.nonce.map(|n| n.saturating_add(1)), + NonceDirection::High => { + self.nonce = self.nonce.map(|n| n.saturating_add(1)); + debug!(?self, "Iterating high nonce"); + } NonceDirection::Low => { if let Some(nonce) = self.nonce { // once the message with nonce zero is processed, we should stop going backwards @@ -155,6 +158,7 @@ impl DirectionalNonceIterator { if let Some(message) = self.indexed_message_with_nonce()? { Self::update_max_nonce_gauge(&message, metrics); if !self.is_message_processed()? { + debug!(?message, iterator=?self, "Found processable message"); return Ok(MessageStatus::Processable(message)); } else { return Ok(MessageStatus::Processed); @@ -235,7 +239,11 @@ impl ProcessorExt for MessageProcessor { // nonce. // Scan until we find next nonce without delivery confirmation. if let Some(msg) = self.try_get_unprocessed_message().await? { - debug!(?msg, "Processor working on message"); + debug!( + ?msg, + cursor = ?self.nonce_iterator, + "Processor working on message" + ); let destination = msg.destination; // Skip if not whitelisted. diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 971e30530..7d24fcc20 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -209,7 +209,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'd6bb976-20240520-164138', + tag: '939fa81-20240607-194607', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContexts, @@ -226,7 +226,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'd6bb976-20240520-164138', + tag: '939fa81-20240607-194607', }, }, }; @@ -240,7 +240,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'c9c5d37-20240510-014327', + tag: '939fa81-20240607-194607', }, // We're temporarily (ab)using the RC relayer as a way to increase // message throughput. From 29f368513faa73f041be4b00906c086c70384fa5 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Tue, 11 Jun 2024 15:16:53 +0100 Subject: [PATCH 03/46] ci: temporarily skip a flaky test (#3940) temporarily skipping this test that occasionally flakes until we can fix it for good --------- Signed-off-by: Paul Balaji --- typescript/sdk/src/ism/metadata/builder.hardhat-test.ts | 3 ++- .../middleware/liquidity-layer/liquidity-layer.hardhat-test.ts | 1 + typescript/sdk/src/middleware/query/queries.hardhat-test.ts | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/typescript/sdk/src/ism/metadata/builder.hardhat-test.ts b/typescript/sdk/src/ism/metadata/builder.hardhat-test.ts index 844a87df5..09f90012c 100644 --- a/typescript/sdk/src/ism/metadata/builder.hardhat-test.ts +++ b/typescript/sdk/src/ism/metadata/builder.hardhat-test.ts @@ -114,7 +114,8 @@ describe('BaseMetadataBuilder', () => { ); }); - describe('#build', () => { + // eslint-disable-next-line jest/no-disabled-tests + describe.skip('#build', () => { let origin: ChainName; let destination: ChainName; let context: MetadataContext; diff --git a/typescript/sdk/src/middleware/liquidity-layer/liquidity-layer.hardhat-test.ts b/typescript/sdk/src/middleware/liquidity-layer/liquidity-layer.hardhat-test.ts index 51732aaff..cf7bdde70 100644 --- a/typescript/sdk/src/middleware/liquidity-layer/liquidity-layer.hardhat-test.ts +++ b/typescript/sdk/src/middleware/liquidity-layer/liquidity-layer.hardhat-test.ts @@ -33,6 +33,7 @@ import { PortalAdapterConfig, } from './LiquidityLayerRouterDeployer.js'; +// eslint-disable-next-line jest/no-disabled-tests describe.skip('LiquidityLayerRouter', async () => { const localChain = TestChainName.test1; const remoteChain = TestChainName.test2; diff --git a/typescript/sdk/src/middleware/query/queries.hardhat-test.ts b/typescript/sdk/src/middleware/query/queries.hardhat-test.ts index 00ab9b855..1a507f77c 100644 --- a/typescript/sdk/src/middleware/query/queries.hardhat-test.ts +++ b/typescript/sdk/src/middleware/query/queries.hardhat-test.ts @@ -24,6 +24,7 @@ import { InterchainQueryChecker } from './InterchainQueryChecker.js'; import { InterchainQueryDeployer } from './InterchainQueryDeployer.js'; import { InterchainQueryFactories } from './contracts.js'; +// eslint-disable-next-line jest/no-disabled-tests describe.skip('InterchainQueryRouter', async () => { const localChain = TestChainName.test1; const remoteChain = TestChainName.test2; From f4bbfcf08a4d93d681eb99a9f32c5c9b84e5f41e Mon Sep 17 00:00:00 2001 From: Kunal Arora <55632507+aroralanuk@users.noreply.github.com> Date: Thu, 13 Jun 2024 07:37:44 +0530 Subject: [PATCH 04/46] feat: AVS mainnet deployment (#3945) ### Description - Added all the strategies used by EigenDA on mainnet here:https://github.com/Layr-Labs/eigenlayer-contracts?tab=readme-ov-file#deployments - Deployed AVS contracts to mainnet - Added contract address to CLI (reminder: strategies are just LST tokens supported for restaking. These are not relevant for us but brings us to parity with most other AVSs). ### Drive-by changes - `avsSigningKey` renamed to `avsSigningKeyAddress` as `avsSigningKey` may imply the private key and confuse operators. ### Related issues ### Backward compatibility ### Testing --- .changeset/strong-colts-hide.md | 5 +++ solidity/script/avs/eigenlayer_addresses.json | 40 +++++++++++++++++++ typescript/cli/src/avs/config.ts | 6 +++ typescript/cli/src/avs/stakeRegistry.ts | 8 ++-- typescript/cli/src/commands/avs.ts | 13 ++++-- 5 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 .changeset/strong-colts-hide.md diff --git a/.changeset/strong-colts-hide.md b/.changeset/strong-colts-hide.md new file mode 100644 index 000000000..98413f21c --- /dev/null +++ b/.changeset/strong-colts-hide.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/cli': minor +--- + +AVS deployment on mainnet diff --git a/solidity/script/avs/eigenlayer_addresses.json b/solidity/script/avs/eigenlayer_addresses.json index 60e2fceea..1c20dae29 100644 --- a/solidity/script/avs/eigenlayer_addresses.json +++ b/solidity/script/avs/eigenlayer_addresses.json @@ -5,14 +5,54 @@ "avsDirectory": "0x135DDa560e946695d6f155dACaFC6f1F25C1F5AF", "paymentCoordinator": "", "strategies": [ + { + "name": "swETH", + "strategy": "0x0Fe4F44beE93503346A3Ac9EE5A26b130a5796d6" + }, + { + "name": "oETH", + "strategy": "0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff" + }, + { + "name": "rETH", + "strategy": "0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2" + }, + { + "name": "mETH", + "strategy": "0x298aFB19A105D59E74658C4C334Ff360BadE6dd2" + }, { "name": "cbETH", "strategy": "0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc" }, + { + "name": "osETH", + "strategy": "0x57ba429517c3473B6d34CA9aCd56c0e735b94c02" + }, + { + "name": "wBETH", + "strategy": "0x7CA911E83dabf90C90dD3De5411a10F1A6112184" + }, + { + "name": "sfrxETH", + "strategy": "0x8CA7A5d6f3acd3A7A8bC468a8CD0FB14B6BD28b6" + }, { "name": "stETH", "strategy": "0x93c4b944D05dfe6df7645A86cd2206016c51564D" }, + { + "name": "ETHx", + "strategy": "0x9d7eD45EE2E8FC5482fa2428f15C971e6369011d" + }, + { + "name": "ankrETH", + "strategy": "0xa4C637e0F704745D182e4D38cAb7E7485321d059" + }, + { + "name": "lsETH", + "strategy": "0xAe60d8180437b5C34bB956822ac2710972584473" + }, { "name": "Beacon Chain ETH", "strategy": "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0" diff --git a/typescript/cli/src/avs/config.ts b/typescript/cli/src/avs/config.ts index 681ed9dee..79715a676 100644 --- a/typescript/cli/src/avs/config.ts +++ b/typescript/cli/src/avs/config.ts @@ -16,4 +16,10 @@ export const avsAddresses: ChainMap = { ecdsaStakeRegistry: '0xFfa913705484C9BAea32Ffe9945BeA099A1DFF72', hyperlaneServiceManager: '0xc76E477437065093D353b7d56c81ff54D167B0Ab', }, + ethereum: { + avsDirectory: '0x135dda560e946695d6f155dacafc6f1f25c1f5af', + proxyAdmin: '0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659', + ecdsaStakeRegistry: '0x272CF0BB70D3B4f79414E0823B426d2EaFd48910', + hyperlaneServiceManager: '0xe8E59c6C8B56F2c178f63BCFC4ce5e5e2359c8fc', + }, }; diff --git a/typescript/cli/src/avs/stakeRegistry.ts b/typescript/cli/src/avs/stakeRegistry.ts index 9d23bffaa..d1bdd0716 100644 --- a/typescript/cli/src/avs/stakeRegistry.ts +++ b/typescript/cli/src/avs/stakeRegistry.ts @@ -24,12 +24,12 @@ export async function registerOperatorWithSignature({ context, chain, operatorKeyPath, - avsSigningKey, + avsSigningKeyAddress, }: { context: WriteCommandContext; chain: ChainName; operatorKeyPath: string; - avsSigningKey: Address; + avsSigningKeyAddress: Address; }) { const { multiProvider } = context; @@ -67,13 +67,13 @@ export async function registerOperatorWithSignature({ } log( - `Registering operator ${operatorAsSigner.address} attesting ${avsSigningKey} with signature on ${chain}...`, + `Registering operator ${operatorAsSigner.address} attesting ${avsSigningKeyAddress} with signature on ${chain}...`, ); await multiProvider.handleTx( chain, ecdsaStakeRegistry.registerOperatorWithSignature( operatorSignature, - avsSigningKey, + avsSigningKeyAddress, ), ); logBlue(`Operator ${operatorAsSigner.address} registered to Hyperlane AVS`); diff --git a/typescript/cli/src/commands/avs.ts b/typescript/cli/src/commands/avs.ts index 04a51b6b6..ce238df62 100644 --- a/typescript/cli/src/commands/avs.ts +++ b/typescript/cli/src/commands/avs.ts @@ -40,7 +40,7 @@ export const registrationOptions: { [k: string]: Options } = { description: 'Path to the operator key file', demandOption: true, }, - avsSigningKey: { + avsSigningKeyAddress: { type: 'string', description: 'Address of the AVS signing key', demandOption: true, @@ -50,17 +50,22 @@ export const registrationOptions: { [k: string]: Options } = { const registerCommand: CommandModuleWithWriteContext<{ chain: ChainName; operatorKeyPath: string; - avsSigningKey: Address; + avsSigningKeyAddress: Address; }> = { command: 'register', describe: 'Register operator with the AVS', builder: registrationOptions, - handler: async ({ context, chain, operatorKeyPath, avsSigningKey }) => { + handler: async ({ + context, + chain, + operatorKeyPath, + avsSigningKeyAddress, + }) => { await registerOperatorWithSignature({ context, chain, operatorKeyPath, - avsSigningKey, + avsSigningKeyAddress, }); process.exit(0); }, From cb9c2aa5711d5838bf853f4e08eb969536576ea4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Jun 2024 05:34:40 +0000 Subject: [PATCH 05/46] Version Packages (#3910) This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @hyperlane-xyz/cli@3.14.0 ### Minor Changes - f4bbfcf08: AVS deployment on mainnet ### Patch Changes - @hyperlane-xyz/sdk@3.14.0 - @hyperlane-xyz/utils@3.14.0 ## @hyperlane-xyz/core@3.14.0 ### Patch Changes - a8a68f6f6: fix: make XERC20 and XERC20 Lockbox proxy-able - @hyperlane-xyz/utils@3.14.0 ## @hyperlane-xyz/helloworld@3.14.0 ### Patch Changes - Updated dependencies [a8a68f6f6] - @hyperlane-xyz/core@3.14.0 - @hyperlane-xyz/sdk@3.14.0 ## @hyperlane-xyz/sdk@3.14.0 ### Patch Changes - Updated dependencies [a8a68f6f6] - @hyperlane-xyz/core@3.14.0 - @hyperlane-xyz/utils@3.14.0 ## @hyperlane-xyz/utils@3.14.0 ## @hyperlane-xyz/infra@3.14.0 ### Patch Changes - @hyperlane-xyz/helloworld@3.14.0 - @hyperlane-xyz/sdk@3.14.0 - @hyperlane-xyz/utils@3.14.0 ## @hyperlane-xyz/ccip-server@3.14.0 Co-authored-by: github-actions[bot] --- .changeset/strong-colts-hide.md | 5 ----- .changeset/sweet-pandas-brush.md | 5 ----- solidity/CHANGELOG.md | 7 +++++++ solidity/package.json | 4 ++-- typescript/ccip-server/CHANGELOG.md | 2 ++ typescript/ccip-server/package.json | 2 +- typescript/cli/CHANGELOG.md | 11 +++++++++++ typescript/cli/package.json | 6 +++--- typescript/cli/src/version.ts | 2 +- typescript/helloworld/CHANGELOG.md | 8 ++++++++ typescript/helloworld/package.json | 6 +++--- typescript/infra/CHANGELOG.md | 8 ++++++++ typescript/infra/package.json | 8 ++++---- typescript/sdk/CHANGELOG.md | 8 ++++++++ typescript/sdk/package.json | 6 +++--- typescript/utils/CHANGELOG.md | 2 ++ typescript/utils/package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 18 files changed, 78 insertions(+), 42 deletions(-) delete mode 100644 .changeset/strong-colts-hide.md delete mode 100644 .changeset/sweet-pandas-brush.md diff --git a/.changeset/strong-colts-hide.md b/.changeset/strong-colts-hide.md deleted file mode 100644 index 98413f21c..000000000 --- a/.changeset/strong-colts-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/cli': minor ---- - -AVS deployment on mainnet diff --git a/.changeset/sweet-pandas-brush.md b/.changeset/sweet-pandas-brush.md deleted file mode 100644 index 74e05a094..000000000 --- a/.changeset/sweet-pandas-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hyperlane-xyz/core": patch ---- - -fix: make XERC20 and XERC20 Lockbox proxy-able diff --git a/solidity/CHANGELOG.md b/solidity/CHANGELOG.md index f8cee2164..d972340c6 100644 --- a/solidity/CHANGELOG.md +++ b/solidity/CHANGELOG.md @@ -1,5 +1,12 @@ # @hyperlane-xyz/core +## 3.14.0 + +### Patch Changes + +- a8a68f6f6: fix: make XERC20 and XERC20 Lockbox proxy-able + - @hyperlane-xyz/utils@3.14.0 + ## 3.13.0 ### Minor Changes diff --git a/solidity/package.json b/solidity/package.json index bdbe1f659..809fc0b32 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -1,10 +1,10 @@ { "name": "@hyperlane-xyz/core", "description": "Core solidity contracts for Hyperlane", - "version": "3.13.0", + "version": "3.14.0", "dependencies": { "@eth-optimism/contracts": "^0.6.0", - "@hyperlane-xyz/utils": "3.13.0", + "@hyperlane-xyz/utils": "3.14.0", "@layerzerolabs/lz-evm-oapp-v2": "2.0.2", "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^v4.9.3", diff --git a/typescript/ccip-server/CHANGELOG.md b/typescript/ccip-server/CHANGELOG.md index 40e0e5390..abe728f76 100644 --- a/typescript/ccip-server/CHANGELOG.md +++ b/typescript/ccip-server/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/ccip-server +## 3.14.0 + ## 3.13.0 ## 3.12.0 diff --git a/typescript/ccip-server/package.json b/typescript/ccip-server/package.json index cc07a17b3..a18b7eeeb 100644 --- a/typescript/ccip-server/package.json +++ b/typescript/ccip-server/package.json @@ -1,6 +1,6 @@ { "name": "@hyperlane-xyz/ccip-server", - "version": "3.13.0", + "version": "3.14.0", "description": "CCIP server", "typings": "dist/index.d.ts", "typedocMain": "src/index.ts", diff --git a/typescript/cli/CHANGELOG.md b/typescript/cli/CHANGELOG.md index c62b58046..08968e90d 100644 --- a/typescript/cli/CHANGELOG.md +++ b/typescript/cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @hyperlane-xyz/cli +## 3.14.0 + +### Minor Changes + +- f4bbfcf08: AVS deployment on mainnet + +### Patch Changes + +- @hyperlane-xyz/sdk@3.14.0 +- @hyperlane-xyz/utils@3.14.0 + ## 3.13.0 ### Minor Changes diff --git a/typescript/cli/package.json b/typescript/cli/package.json index 645d3a48b..855091d80 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/cli", - "version": "3.13.0", + "version": "3.14.0", "description": "A command-line utility for common Hyperlane operations", "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.13.0", - "@hyperlane-xyz/utils": "3.13.0", + "@hyperlane-xyz/sdk": "3.14.0", + "@hyperlane-xyz/utils": "3.14.0", "@inquirer/prompts": "^3.0.0", "asn1.js": "^5.4.1", "bignumber.js": "^9.1.1", diff --git a/typescript/cli/src/version.ts b/typescript/cli/src/version.ts index 9fb80ae08..69e26984e 100644 --- a/typescript/cli/src/version.ts +++ b/typescript/cli/src/version.ts @@ -1 +1 @@ -export const VERSION = '3.13.0'; +export const VERSION = '3.14.0'; diff --git a/typescript/helloworld/CHANGELOG.md b/typescript/helloworld/CHANGELOG.md index f5e8404be..577113c0d 100644 --- a/typescript/helloworld/CHANGELOG.md +++ b/typescript/helloworld/CHANGELOG.md @@ -1,5 +1,13 @@ # @hyperlane-xyz/helloworld +## 3.14.0 + +### Patch Changes + +- Updated dependencies [a8a68f6f6] + - @hyperlane-xyz/core@3.14.0 + - @hyperlane-xyz/sdk@3.14.0 + ## 3.13.0 ### Patch Changes diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index 7d3f62b3d..c7aba6272 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -1,11 +1,11 @@ { "name": "@hyperlane-xyz/helloworld", "description": "A basic skeleton of an Hyperlane app", - "version": "3.13.0", + "version": "3.14.0", "dependencies": { - "@hyperlane-xyz/core": "3.13.0", + "@hyperlane-xyz/core": "3.14.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.13.0", + "@hyperlane-xyz/sdk": "3.14.0", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" }, diff --git a/typescript/infra/CHANGELOG.md b/typescript/infra/CHANGELOG.md index 0696269d8..e1da9e3b3 100644 --- a/typescript/infra/CHANGELOG.md +++ b/typescript/infra/CHANGELOG.md @@ -1,5 +1,13 @@ # @hyperlane-xyz/infra +## 3.14.0 + +### Patch Changes + +- @hyperlane-xyz/helloworld@3.14.0 +- @hyperlane-xyz/sdk@3.14.0 +- @hyperlane-xyz/utils@3.14.0 + ## 3.13.0 ### Minor Changes diff --git a/typescript/infra/package.json b/typescript/infra/package.json index 67de934c2..75a58f80b 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/infra", "description": "Infrastructure utilities for the Hyperlane Network", - "version": "3.13.0", + "version": "3.14.0", "dependencies": { "@arbitrum/sdk": "^3.0.0", "@aws-sdk/client-iam": "^3.74.0", @@ -13,10 +13,10 @@ "@ethersproject/hardware-wallets": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@google-cloud/secret-manager": "^5.5.0", - "@hyperlane-xyz/helloworld": "3.13.0", + "@hyperlane-xyz/helloworld": "3.14.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.13.0", - "@hyperlane-xyz/utils": "3.13.0", + "@hyperlane-xyz/sdk": "3.14.0", + "@hyperlane-xyz/utils": "3.14.0", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@solana/web3.js": "^1.78.0", "asn1.js": "5.4.1", diff --git a/typescript/sdk/CHANGELOG.md b/typescript/sdk/CHANGELOG.md index b484d11bc..245e84426 100644 --- a/typescript/sdk/CHANGELOG.md +++ b/typescript/sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @hyperlane-xyz/sdk +## 3.14.0 + +### Patch Changes + +- Updated dependencies [a8a68f6f6] + - @hyperlane-xyz/core@3.14.0 + - @hyperlane-xyz/utils@3.14.0 + ## 3.13.0 ### Minor Changes diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index ef58f43cd..05880d466 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/sdk", "description": "The official SDK for the Hyperlane Network", - "version": "3.13.0", + "version": "3.14.0", "dependencies": { "@aws-sdk/client-s3": "^3.74.0", "@cosmjs/cosmwasm-stargate": "^0.31.3", "@cosmjs/stargate": "^0.31.3", - "@hyperlane-xyz/core": "3.13.0", - "@hyperlane-xyz/utils": "3.13.0", + "@hyperlane-xyz/core": "3.14.0", + "@hyperlane-xyz/utils": "3.14.0", "@safe-global/api-kit": "1.3.0", "@safe-global/protocol-kit": "1.3.0", "@solana/spl-token": "^0.3.8", diff --git a/typescript/utils/CHANGELOG.md b/typescript/utils/CHANGELOG.md index 0dce2d1b6..e0ab748ce 100644 --- a/typescript/utils/CHANGELOG.md +++ b/typescript/utils/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/utils +## 3.14.0 + ## 3.13.0 ### Minor Changes diff --git a/typescript/utils/package.json b/typescript/utils/package.json index 260348910..e085760d0 100644 --- a/typescript/utils/package.json +++ b/typescript/utils/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/utils", "description": "General utilities and types for the Hyperlane network", - "version": "3.13.0", + "version": "3.14.0", "dependencies": { "@cosmjs/encoding": "^0.31.3", "@solana/web3.js": "^1.78.0", diff --git a/yarn.lock b/yarn.lock index 8b293bfc7..00c79e108 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5724,8 +5724,8 @@ __metadata: "@aws-sdk/client-kms": "npm:^3.577.0" "@aws-sdk/client-s3": "npm:^3.577.0" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.13.0" - "@hyperlane-xyz/utils": "npm:3.13.0" + "@hyperlane-xyz/sdk": "npm:3.14.0" + "@hyperlane-xyz/utils": "npm:3.14.0" "@inquirer/prompts": "npm:^3.0.0" "@types/mocha": "npm:^10.0.1" "@types/node": "npm:^18.14.5" @@ -5753,12 +5753,12 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/core@npm:3.13.0, @hyperlane-xyz/core@workspace:solidity": +"@hyperlane-xyz/core@npm:3.14.0, @hyperlane-xyz/core@workspace:solidity": version: 0.0.0-use.local resolution: "@hyperlane-xyz/core@workspace:solidity" dependencies: "@eth-optimism/contracts": "npm:^0.6.0" - "@hyperlane-xyz/utils": "npm:3.13.0" + "@hyperlane-xyz/utils": "npm:3.14.0" "@layerzerolabs/lz-evm-oapp-v2": "npm:2.0.2" "@layerzerolabs/solidity-examples": "npm:^1.1.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" @@ -5806,13 +5806,13 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/helloworld@npm:3.13.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": +"@hyperlane-xyz/helloworld@npm:3.14.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": version: 0.0.0-use.local resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: - "@hyperlane-xyz/core": "npm:3.13.0" + "@hyperlane-xyz/core": "npm:3.14.0" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.13.0" + "@hyperlane-xyz/sdk": "npm:3.14.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@openzeppelin/contracts-upgradeable": "npm:^4.9.3" @@ -5858,10 +5858,10 @@ __metadata: "@ethersproject/hardware-wallets": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.2" "@google-cloud/secret-manager": "npm:^5.5.0" - "@hyperlane-xyz/helloworld": "npm:3.13.0" + "@hyperlane-xyz/helloworld": "npm:3.14.0" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.13.0" - "@hyperlane-xyz/utils": "npm:3.13.0" + "@hyperlane-xyz/sdk": "npm:3.14.0" + "@hyperlane-xyz/utils": "npm:3.14.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-etherscan": "npm:^3.0.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" @@ -5921,15 +5921,15 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/sdk@npm:3.13.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": +"@hyperlane-xyz/sdk@npm:3.14.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": version: 0.0.0-use.local resolution: "@hyperlane-xyz/sdk@workspace:typescript/sdk" dependencies: "@aws-sdk/client-s3": "npm:^3.74.0" "@cosmjs/cosmwasm-stargate": "npm:^0.31.3" "@cosmjs/stargate": "npm:^0.31.3" - "@hyperlane-xyz/core": "npm:3.13.0" - "@hyperlane-xyz/utils": "npm:3.13.0" + "@hyperlane-xyz/core": "npm:3.14.0" + "@hyperlane-xyz/utils": "npm:3.14.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@safe-global/api-kit": "npm:1.3.0" @@ -5997,7 +5997,7 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/utils@npm:3.13.0, @hyperlane-xyz/utils@workspace:typescript/utils": +"@hyperlane-xyz/utils@npm:3.14.0, @hyperlane-xyz/utils@workspace:typescript/utils": version: 0.0.0-use.local resolution: "@hyperlane-xyz/utils@workspace:typescript/utils" dependencies: From f4ad66a1a1d6dc09cd04144362bbbb44fa0092d3 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Thu, 13 Jun 2024 14:49:03 +0100 Subject: [PATCH 06/46] ci: fix slither (#3956) - ci: try fix slither - drive-by: fix a bunch of the warnings from running `yarn` --------- Signed-off-by: Paul Balaji --- package.json | 2 +- solidity/package.json | 3 + typescript/cli/package.json | 2 + typescript/helloworld/package.json | 1 + yarn.lock | 199 +++++++---------------------- 5 files changed, 55 insertions(+), 152 deletions(-) diff --git a/package.json b/package.json index 3da986a51..36ea71a2a 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@trivago/prettier-plugin-sort-imports": "^4.2.1", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", - "eslint": "^9.0.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest": "^28.2.0", "husky": "^8.0.0", diff --git a/solidity/package.json b/solidity/package.json index 809fc0b32..7a7c60fb9 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -15,7 +15,9 @@ "@nomiclabs/hardhat-ethers": "^2.2.3", "@nomiclabs/hardhat-waffle": "^2.0.6", "@typechain/ethers-v5": "^11.1.2", + "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "^9.1.0", + "@types/node": "^18.14.5", "chai": "^4.3.6", "ethereum-waffle": "^4.0.10", "ethers": "^5.7.2", @@ -26,6 +28,7 @@ "prettier-plugin-solidity": "^1.1.3", "solhint": "^4.5.4", "solhint-plugin-prettier": "^0.0.5", + "solidity-bytes-utils": "^0.8.0", "solidity-coverage": "^0.8.3", "ts-generator": "^0.1.1", "ts-node": "^10.8.0", diff --git a/typescript/cli/package.json b/typescript/cli/package.json index 855091d80..0a9e7b804 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -21,6 +21,8 @@ "zod": "^3.21.2" }, "devDependencies": { + "@ethersproject/abi": "*", + "@ethersproject/providers": "*", "@types/mocha": "^10.0.1", "@types/node": "^18.14.5", "@types/yargs": "^17.0.24", diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index c7aba6272..96c5ef9f8 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -14,6 +14,7 @@ "@nomiclabs/hardhat-waffle": "^2.0.6", "@trivago/prettier-plugin-sort-imports": "^4.2.1", "@typechain/ethers-v5": "^11.1.2", + "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "^9.1.0", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", diff --git a/yarn.lock b/yarn.lock index 00c79e108..cef359be8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4520,23 +4520,6 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.0.2": - version: 3.0.2 - resolution: "@eslint/eslintrc@npm:3.0.2" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^10.0.1" - globals: "npm:^14.0.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 04e3d7de2b16fd59ba8985ecd6922eb488e630f94e4433858567a8a6c99b478bb7b47854b166b830b44905759547d0a03654eb1265952c812d5d1d70e3e4ccf9 - languageName: node - linkType: hard - "@eslint/js@npm:8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" @@ -4544,13 +4527,6 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.0.0": - version: 9.0.0 - resolution: "@eslint/js@npm:9.0.0" - checksum: b14b20af72410ef53e3e77e7d83cc1d6e6554b0092ceb9f969d25d765f4d775b4be32b0cd99bbfd6ce72eb2e4fb6b39b42a159b31909fbe1b3a5e88d75211687 - languageName: node - linkType: hard - "@eth-optimism/contracts-bedrock@npm:0.16.2": version: 0.16.2 resolution: "@eth-optimism/contracts-bedrock@npm:0.16.2" @@ -4862,7 +4838,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.4.0, @ethersproject/abi@npm:^5.7.0": +"@ethersproject/abi@npm:*, @ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.4.0, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" dependencies: @@ -5272,7 +5248,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.4.4, @ethersproject/providers@npm:^5.7.0, @ethersproject/providers@npm:^5.7.1, @ethersproject/providers@npm:^5.7.2": +"@ethersproject/providers@npm:*, @ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.4.4, @ethersproject/providers@npm:^5.7.0, @ethersproject/providers@npm:^5.7.1, @ethersproject/providers@npm:^5.7.2": version: 5.7.2 resolution: "@ethersproject/providers@npm:5.7.2" dependencies: @@ -5665,17 +5641,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.12.3": - version: 0.12.3 - resolution: "@humanwhocodes/config-array@npm:0.12.3" - dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: b05f528c110aa1657d95d213e4ad2662f4161e838806af01a4d3f3b6ee3878d9b6f87d1b10704917f5c2f116757cb5c818480c32c4c4c6f84fe775a170b5f758 - languageName: node - linkType: hard - "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -5690,13 +5655,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 05bb99ed06c16408a45a833f03a732f59bf6184795d4efadd33238ff8699190a8c871ad1121241bb6501589a9598dc83bf25b99dcbcf41e155cdf36e35e937a3 - languageName: node - linkType: hard - "@hyperlane-xyz/ccip-server@workspace:typescript/ccip-server": version: 0.0.0-use.local resolution: "@hyperlane-xyz/ccip-server@workspace:typescript/ccip-server" @@ -5723,6 +5681,8 @@ __metadata: dependencies: "@aws-sdk/client-kms": "npm:^3.577.0" "@aws-sdk/client-s3": "npm:^3.577.0" + "@ethersproject/abi": "npm:*" + "@ethersproject/providers": "npm:*" "@hyperlane-xyz/registry": "npm:1.3.0" "@hyperlane-xyz/sdk": "npm:3.14.0" "@hyperlane-xyz/utils": "npm:3.14.0" @@ -5766,7 +5726,9 @@ __metadata: "@openzeppelin/contracts": "npm:^4.9.3" "@openzeppelin/contracts-upgradeable": "npm:^v4.9.3" "@typechain/ethers-v5": "npm:^11.1.2" + "@typechain/ethers-v6": "npm:^0.5.1" "@typechain/hardhat": "npm:^9.1.0" + "@types/node": "npm:^18.14.5" chai: "npm:^4.3.6" ethereum-waffle: "npm:^4.0.10" ethers: "npm:^5.7.2" @@ -5778,6 +5740,7 @@ __metadata: prettier-plugin-solidity: "npm:^1.1.3" solhint: "npm:^4.5.4" solhint-plugin-prettier: "npm:^0.0.5" + solidity-bytes-utils: "npm:^0.8.0" solidity-coverage: "npm:^0.8.3" ts-generator: "npm:^0.1.1" ts-node: "npm:^10.8.0" @@ -5818,6 +5781,7 @@ __metadata: "@openzeppelin/contracts-upgradeable": "npm:^4.9.3" "@trivago/prettier-plugin-sort-imports": "npm:^4.2.1" "@typechain/ethers-v5": "npm:^11.1.2" + "@typechain/ethers-v6": "npm:^0.5.1" "@typechain/hardhat": "npm:^9.1.0" "@typescript-eslint/eslint-plugin": "npm:^7.4.0" "@typescript-eslint/parser": "npm:^7.4.0" @@ -5901,7 +5865,7 @@ __metadata: "@trivago/prettier-plugin-sort-imports": "npm:^4.2.1" "@typescript-eslint/eslint-plugin": "npm:^7.4.0" "@typescript-eslint/parser": "npm:^7.4.0" - eslint: "npm:^9.0.0" + eslint: "npm:^8.57.0" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-jest: "npm:^28.2.0" husky: "npm:^8.0.0" @@ -9379,6 +9343,20 @@ __metadata: languageName: node linkType: hard +"@typechain/ethers-v6@npm:^0.5.1": + version: 0.5.1 + resolution: "@typechain/ethers-v6@npm:0.5.1" + dependencies: + lodash: "npm:^4.17.15" + ts-essentials: "npm:^7.0.1" + peerDependencies: + ethers: 6.x + typechain: ^8.3.2 + typescript: ">=4.7.0" + checksum: 51dd8be3548fe3c061d2a5372beb9214e767e2b69f10c12424b699bba7ff409a13c4bdff2e513ef49046b51153db56489752205541be8fb1775f3b9ad884b85b + languageName: node + linkType: hard + "@typechain/hardhat@npm:^9.1.0": version: 9.1.0 resolution: "@typechain/hardhat@npm:9.1.0" @@ -13727,6 +13705,13 @@ __metadata: languageName: node linkType: hard +"ds-test@github:dapphub/ds-test": + version: 1.0.0 + resolution: "ds-test@https://github.com/dapphub/ds-test.git#commit=e282159d5170298eb2455a6c05280ab5a73a4ef0" + checksum: a63cada107d8f2775934bc580f04cb6f6509f843cb41cbc3a617e77b2e628a86d7fd858f964e7e2d6f41c3797c0e16ec2d87a6cb4c6187c5b6c2bc969ccae4b3 + languageName: node + linkType: hard + "duplexer3@npm:^0.1.4": version: 0.1.4 resolution: "duplexer3@npm:0.1.4" @@ -14296,16 +14281,6 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.0.1": - version: 8.0.1 - resolution: "eslint-scope@npm:8.0.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 458513863d3c79005b599f40250437bddba923f18549058ea45820a8d3d4bbc67fe292751d522a0cab69dd01fe211ffde5c1a5fc867e86f2d28727b1d61610da - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^3.3.0": version: 3.3.0 resolution: "eslint-visitor-keys@npm:3.3.0" @@ -14327,13 +14302,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.0.0": - version: 4.0.0 - resolution: "eslint-visitor-keys@npm:4.0.0" - checksum: c7617166e6291a15ce2982b5c4b9cdfb6409f5c14562712d12e2584480cdf18609694b21d7dad35b02df0fa2cd037505048ded54d2f405c64f600949564eb334 - languageName: node - linkType: hard - "eslint@npm:^8.57.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" @@ -14382,61 +14350,6 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.0.0": - version: 9.0.0 - resolution: "eslint@npm:9.0.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^3.0.2" - "@eslint/js": "npm:9.0.0" - "@humanwhocodes/config-array": "npm:^0.12.3" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.0.1" - eslint-visitor-keys: "npm:^4.0.0" - espree: "npm:^10.0.1" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^8.0.0" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" - bin: - eslint: bin/eslint.js - checksum: 5cf03e14eb114f95bc4e553c8ae2da65ec09d519779beb08e326d98518bce647ce9c8bf3467bcea4cab35a2657cc3a8e945717e784afa4b1bdb9d1ecd9173ba0 - languageName: node - linkType: hard - -"espree@npm:^10.0.1": - version: 10.0.1 - resolution: "espree@npm:10.0.1" - dependencies: - acorn: "npm:^8.11.3" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.0.0" - checksum: 557d6cfb4894b1489effcaed8702682086033f8a2449568933bc59493734733d750f2a87907ba575844d3933340aea2d84288f5e67020c6152f6fd18a86497b2 - languageName: node - linkType: hard - "espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -15201,15 +15114,6 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^8.0.0": - version: 8.0.0 - resolution: "file-entry-cache@npm:8.0.0" - dependencies: - flat-cache: "npm:^4.0.0" - checksum: afe55c4de4e0d226a23c1eae62a7219aafb390859122608a89fa4df6addf55c7fd3f1a2da6f5b41e7cdff496e4cf28bbd215d53eab5c817afa96d2b40c81bfb0 - languageName: node - linkType: hard - "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -15315,16 +15219,6 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^4.0.0": - version: 4.0.1 - resolution: "flat-cache@npm:4.0.1" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.4" - checksum: 58ce851d9045fffc7871ce2bd718bc485ad7e777bf748c054904b87c351ff1080c2c11da00788d78738bfb51b71e4d5ea12d13b98eb36e3358851ffe495b62dc - languageName: node - linkType: hard - "flat@npm:^5.0.2": version: 5.0.2 resolution: "flat@npm:5.0.2" @@ -15341,13 +15235,6 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9": - version: 3.3.1 - resolution: "flatted@npm:3.3.1" - checksum: 7b8376061d5be6e0d3658bbab8bde587647f68797cf6bfeae9dea0e5137d9f27547ab92aaff3512dd9d1299086a6d61be98e9d48a56d17531b634f77faadbc49 - languageName: node - linkType: hard - "fmix@npm:^0.1.0": version: 0.1.0 resolution: "fmix@npm:0.1.0" @@ -15393,6 +15280,13 @@ __metadata: languageName: node linkType: hard +"forge-std@npm:^1.1.2": + version: 1.1.2 + resolution: "forge-std@npm:1.1.2" + checksum: 78fa45e7df8076d4e8a3d8494736931082e1faa02495593b0330c09464a053d2ff1d48c2d1db004c15d763ba4547ecfb46b701f79655a46ca638033913e729a1 + languageName: node + linkType: hard + "form-data-encoder@npm:1.7.1": version: 1.7.1 resolution: "form-data-encoder@npm:1.7.1" @@ -16115,13 +16009,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 03939c8af95c6df5014b137cac83aa909090c3a3985caef06ee9a5a669790877af8698ab38007e4c0186873adc14c0b13764acc754b16a754c216cc56aa5f021 - languageName: node - linkType: hard - "globalthis@npm:^1.0.1, globalthis@npm:^1.0.3": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -18582,7 +18469,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -23309,6 +23196,16 @@ __metadata: languageName: node linkType: hard +"solidity-bytes-utils@npm:^0.8.0": + version: 0.8.2 + resolution: "solidity-bytes-utils@npm:0.8.2" + dependencies: + ds-test: "github:dapphub/ds-test" + forge-std: "npm:^1.1.2" + checksum: 72238183c3cea06867244e359d47d6355d9d8c72d50ed7a3b2e87c6ba3bf760cc7c7bfef089c04ce60f8c6c4f6f213e49a4c009f27902465e660c7b30fa5ab57 + languageName: node + linkType: hard + "solidity-comments-darwin-arm64@npm:0.0.2": version: 0.0.2 resolution: "solidity-comments-darwin-arm64@npm:0.0.2" From 12840964b98910f00c909b7e943b3904dd6476f9 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:48:55 +0100 Subject: [PATCH 07/46] chore: add all new chains to `KnownHyperlaneDomain` struct (#3960) ### Description So validators can be run with `--originChainName `, like in the docs [here](https://docs.hyperlane.xyz/docs/operate/validators/run-validators#running-the-binary) ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- rust/hyperlane-core/src/chain.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/rust/hyperlane-core/src/chain.rs b/rust/hyperlane-core/src/chain.rs index fe32b8630..03f4dc44d 100644 --- a/rust/hyperlane-core/src/chain.rs +++ b/rust/hyperlane-core/src/chain.rs @@ -83,6 +83,18 @@ pub enum KnownHyperlaneDomain { Injective = 6909546, InEvm = 2525, + Ancient8 = 888888888, + + Blast = 81457, + + Mode = 34443, + + Redstone = 690, + + Viction = 88, + + Zetachain = 7000, + PlumeTestnet = 161221135, // -- Local test chains -- @@ -216,7 +228,8 @@ impl KnownHyperlaneDomain { many_to_one!(match self { Mainnet: [ Ethereum, Avalanche, Arbitrum, Polygon, Optimism, BinanceSmartChain, Celo, - Moonbeam, Gnosis, MantaPacific, Neutron, Injective, InEvm + Moonbeam, Gnosis, MantaPacific, Neutron, Injective, InEvm, Ancient8, Blast, + Mode, Redstone, Viction, Zetachain ], Testnet: [ Alfajores, MoonbaseAlpha, Sepolia, ScrollSepolia, Chiado, PlumeTestnet, Fuji, BinanceSmartChainTestnet, Holesky @@ -232,8 +245,9 @@ impl KnownHyperlaneDomain { HyperlaneDomainProtocol::Ethereum: [ Ethereum, Sepolia, Holesky, Polygon, Avalanche, Fuji, Arbitrum, Optimism, BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis, - Alfajores, Moonbeam, InEvm, MoonbaseAlpha, ScrollSepolia, - Chiado, MantaPacific, PlumeTestnet, Test1, Test2, Test3 + Alfajores, Moonbeam, InEvm, Ancient8, Blast, Mode, Redstone, Viction, + Zetachain, MoonbaseAlpha, ScrollSepolia, Chiado, MantaPacific, PlumeTestnet, + Test1, Test2, Test3 ], HyperlaneDomainProtocol::Fuel: [FuelTest1], HyperlaneDomainProtocol::Sealevel: [SealevelTest1, SealevelTest2], @@ -249,7 +263,8 @@ impl KnownHyperlaneDomain { HyperlaneDomainTechnicalStack::Other: [ Ethereum, Sepolia, Holesky, Polygon, Avalanche, Fuji, Optimism, BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis, Alfajores, Moonbeam, MoonbaseAlpha, - ScrollSepolia, Chiado, MantaPacific, Neutron, Injective, InEvm, + ScrollSepolia, Chiado, MantaPacific, Neutron, Injective, InEvm, Ancient8, Blast, Mode, Redstone, + Viction, Zetachain, Test1, Test2, Test3, FuelTest1, SealevelTest1, SealevelTest2, CosmosTest99990, CosmosTest99991 ], }) From 51bfff683e903a217efc15ae566c6e713c428b42 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 14 Jun 2024 19:30:33 +0200 Subject: [PATCH 08/46] feat(sdk): XERC20 token adapter (#3911) ### Description `HypXERC20Adapter` that allows checking for mint and burn limits put in place on XERC20 contracts. ### Drive-by changes - Couple methods added to the `XERC20` interface - Corrects `HypXERC20Lockbox` and `HypXERC20` config during CLI deployments ### Related issues - Fixes https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3851 ### Backward compatibility Yes ### Testing CLI testing. --- .changeset/selfish-days-glow.md | 8 ++ solidity/contracts/test/ERC20Test.sol | 12 +++ .../contracts/token/interfaces/IXERC20.sol | 18 ++++ typescript/cli/src/deploy/warp.ts | 33 ++++++- typescript/sdk/src/token/Token.test.ts | 16 ++++ typescript/sdk/src/token/Token.ts | 10 ++ typescript/sdk/src/token/TokenStandard.ts | 12 ++- .../sdk/src/token/adapters/EvmTokenAdapter.ts | 92 +++++++++++++++++++ .../sdk/src/token/adapters/ITokenAdapter.ts | 5 + typescript/sdk/src/warp/WarpCore.test.ts | 4 +- typescript/sdk/src/warp/WarpCore.ts | 71 +++++++++++++- 11 files changed, 272 insertions(+), 9 deletions(-) create mode 100644 .changeset/selfish-days-glow.md diff --git a/.changeset/selfish-days-glow.md b/.changeset/selfish-days-glow.md new file mode 100644 index 000000000..32d0e5274 --- /dev/null +++ b/.changeset/selfish-days-glow.md @@ -0,0 +1,8 @@ +--- +'@hyperlane-xyz/sdk': minor +'@hyperlane-xyz/core': minor +'@hyperlane-xyz/cli': minor +--- + +Mint/burn limit checking for xERC20 bridging +Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments diff --git a/solidity/contracts/test/ERC20Test.sol b/solidity/contracts/test/ERC20Test.sol index 03b306429..b9e43a7ac 100644 --- a/solidity/contracts/test/ERC20Test.sol +++ b/solidity/contracts/test/ERC20Test.sol @@ -74,6 +74,18 @@ contract XERC20Test is ERC20Test, IXERC20 { function owner() external pure returns (address) { return address(0x0); } + + function burningCurrentLimitOf( + address _bridge + ) external view returns (uint256) { + return type(uint256).max; + } + + function mintingCurrentLimitOf( + address _bridge + ) external view returns (uint256) { + return type(uint256).max; + } } contract XERC20LockboxTest is IXERC20Lockbox { diff --git a/solidity/contracts/token/interfaces/IXERC20.sol b/solidity/contracts/token/interfaces/IXERC20.sol index 2c9bad49a..61b03e46b 100644 --- a/solidity/contracts/token/interfaces/IXERC20.sol +++ b/solidity/contracts/token/interfaces/IXERC20.sol @@ -36,4 +36,22 @@ interface IXERC20 is IERC20 { ) external; function owner() external returns (address); + + /** + * @notice Returns the current limit of a bridge + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + function burningCurrentLimitOf( + address _bridge + ) external view returns (uint256 _limit); + + /** + * @notice Returns the current limit of a bridge + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + function mintingCurrentLimitOf( + address _bridge + ) external view returns (uint256 _limit); } diff --git a/typescript/cli/src/deploy/warp.ts b/typescript/cli/src/deploy/warp.ts index 0968f0d99..61e34921b 100644 --- a/typescript/cli/src/deploy/warp.ts +++ b/typescript/cli/src/deploy/warp.ts @@ -1,5 +1,9 @@ import { confirm } from '@inquirer/prompts'; +import { + HypXERC20Lockbox__factory, + HypXERC20__factory, +} from '@hyperlane-xyz/core'; import { HypERC20Deployer, HypERC721Deployer, @@ -161,8 +165,33 @@ async function getWarpCoreConfig( throw new Error('Missing decimals on token metadata'); } - const collateralAddressOrDenom = - config.type === TokenType.collateral ? config.token : undefined; + const collateralAddressOrDenom = await (async () => { + if (config.type === TokenType.XERC20Lockbox) { + const provider = context.multiProvider.tryGetProvider(chainName); + if (!provider) { + throw new Error(`Unable to pull provider for ${chainName}`); + } + + const xERC20 = await HypXERC20Lockbox__factory.connect( + config.token, + provider, + ).xERC20(); + const wrappedToken = await HypXERC20__factory.connect( + xERC20, + provider, + ).wrappedToken(); + return wrappedToken; + } + + if ( + config.type === TokenType.collateral || + config.type === TokenType.XERC20 + ) { + return config.token; + } + + return undefined; + })(); warpCoreConfig.tokens.push({ chainName, standard: TOKEN_TYPE_TO_STANDARD[config.type], diff --git a/typescript/sdk/src/token/Token.test.ts b/typescript/sdk/src/token/Token.test.ts index 9cd97c919..754538903 100644 --- a/typescript/sdk/src/token/Token.test.ts +++ b/typescript/sdk/src/token/Token.test.ts @@ -55,6 +55,22 @@ const STANDARD_TO_TOKEN: Record = { symbol: 'USDC', name: 'USDC', }, + [TokenStandard.EvmHypXERC20]: { + chainName: TestChainName.test2, + standard: TokenStandard.EvmHypXERC20, + addressOrDenom: '0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147', + decimals: 6, + symbol: 'USDC', + name: 'USDC', + }, + [TokenStandard.EvmHypXERC20Lockbox]: { + chainName: TestChainName.test2, + standard: TokenStandard.EvmHypXERC20Lockbox, + addressOrDenom: '0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147', + decimals: 6, + symbol: 'USDC', + name: 'USDC', + }, // Sealevel [TokenStandard.SealevelSpl]: { diff --git a/typescript/sdk/src/token/Token.ts b/typescript/sdk/src/token/Token.ts index 7ddc870e5..1a4747b7b 100644 --- a/typescript/sdk/src/token/Token.ts +++ b/typescript/sdk/src/token/Token.ts @@ -41,6 +41,8 @@ import { EvmHypCollateralAdapter, EvmHypNativeAdapter, EvmHypSyntheticAdapter, + EvmHypXERC20Adapter, + EvmHypXERC20LockboxAdapter, EvmNativeTokenAdapter, EvmTokenAdapter, } from './adapters/EvmTokenAdapter.js'; @@ -213,6 +215,14 @@ export class Token implements IToken { return new EvmHypSyntheticAdapter(chainName, multiProvider, { token: addressOrDenom, }); + } else if (standard === TokenStandard.EvmHypXERC20) { + return new EvmHypXERC20Adapter(chainName, multiProvider, { + token: addressOrDenom, + }); + } else if (standard === TokenStandard.EvmHypXERC20Lockbox) { + return new EvmHypXERC20LockboxAdapter(chainName, multiProvider, { + token: addressOrDenom, + }); } else if (standard === TokenStandard.SealevelHypNative) { return new SealevelHypNativeAdapter( chainName, diff --git a/typescript/sdk/src/token/TokenStandard.ts b/typescript/sdk/src/token/TokenStandard.ts index 8bdd0defc..ba03d4d50 100644 --- a/typescript/sdk/src/token/TokenStandard.ts +++ b/typescript/sdk/src/token/TokenStandard.ts @@ -15,6 +15,8 @@ export enum TokenStandard { EvmHypNative = 'EvmHypNative', EvmHypCollateral = 'EvmHypCollateral', EvmHypSynthetic = 'EvmHypSynthetic', + EvmHypXERC20 = 'EvmHypXERC20', + EvmHypXERC20Lockbox = 'EvmHypXERC20Lockbox', // Sealevel (Solana) SealevelSpl = 'SealevelSpl', @@ -48,6 +50,8 @@ export const TOKEN_STANDARD_TO_PROTOCOL: Record = { EvmHypNative: ProtocolType.Ethereum, EvmHypCollateral: ProtocolType.Ethereum, EvmHypSynthetic: ProtocolType.Ethereum, + EvmHypXERC20: ProtocolType.Ethereum, + EvmHypXERC20Lockbox: ProtocolType.Ethereum, // Sealevel (Solana) SealevelSpl: ProtocolType.Sealevel, @@ -90,6 +94,8 @@ export const TOKEN_NFT_STANDARDS = [ export const TOKEN_COLLATERALIZED_STANDARDS = [ TokenStandard.EvmHypCollateral, TokenStandard.EvmHypNative, + TokenStandard.EvmHypXERC20, + TokenStandard.EvmHypXERC20Lockbox, TokenStandard.SealevelHypCollateral, TokenStandard.SealevelHypNative, TokenStandard.CwHypCollateral, @@ -100,6 +106,8 @@ export const TOKEN_HYP_STANDARDS = [ TokenStandard.EvmHypNative, TokenStandard.EvmHypCollateral, TokenStandard.EvmHypSynthetic, + TokenStandard.EvmHypXERC20, + TokenStandard.EvmHypXERC20Lockbox, TokenStandard.SealevelHypNative, TokenStandard.SealevelHypCollateral, TokenStandard.SealevelHypSynthetic, @@ -128,8 +136,8 @@ export const TOKEN_TYPE_TO_STANDARD: Record = { [TokenType.native]: TokenStandard.EvmHypNative, [TokenType.collateral]: TokenStandard.EvmHypCollateral, [TokenType.collateralFiat]: TokenStandard.EvmHypCollateral, - [TokenType.XERC20]: TokenStandard.EvmHypCollateral, - [TokenType.XERC20Lockbox]: TokenStandard.EvmHypCollateral, + [TokenType.XERC20]: TokenStandard.EvmHypXERC20, + [TokenType.XERC20Lockbox]: TokenStandard.EvmHypXERC20Lockbox, [TokenType.collateralVault]: TokenStandard.EvmHypCollateral, [TokenType.collateralUri]: TokenStandard.EvmHypCollateral, [TokenType.fastCollateral]: TokenStandard.EvmHypCollateral, diff --git a/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts b/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts index 3fc25ade3..4d549b865 100644 --- a/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts +++ b/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts @@ -7,6 +7,11 @@ import { HypERC20Collateral, HypERC20Collateral__factory, HypERC20__factory, + HypXERC20, + HypXERC20Lockbox, + HypXERC20Lockbox__factory, + HypXERC20__factory, + IXERC20__factory, } from '@hyperlane-xyz/core'; import { Address, @@ -25,6 +30,7 @@ import { TokenMetadata } from '../types.js'; import { IHypTokenAdapter, + IHypXERC20Adapter, ITokenAdapter, InterchainGasQuote, TransferParams, @@ -279,6 +285,92 @@ export class EvmHypCollateralAdapter } } +// Interacts with HypXERC20Lockbox contracts +export class EvmHypXERC20LockboxAdapter + extends EvmHypCollateralAdapter + implements IHypXERC20Adapter +{ + hypXERC20Lockbox: HypXERC20Lockbox; + + constructor( + public readonly chainName: ChainName, + public readonly multiProvider: MultiProtocolProvider, + public readonly addresses: { token: Address }, + ) { + super(chainName, multiProvider, addresses); + + this.hypXERC20Lockbox = HypXERC20Lockbox__factory.connect( + addresses.token, + this.getProvider(), + ); + } + + async getMintLimit() { + const xERC20 = await this.hypXERC20Lockbox.xERC20(); + + const limit = await IXERC20__factory.connect( + xERC20, + this.getProvider(), + ).mintingCurrentLimitOf(this.contract.address); + + return BigInt(limit.toString()); + } + + async getBurnLimit() { + const xERC20 = await this.hypXERC20Lockbox.xERC20(); + + const limit = await IXERC20__factory.connect( + xERC20, + this.getProvider(), + ).mintingCurrentLimitOf(this.contract.address); + + return BigInt(limit.toString()); + } +} + +// Interacts with HypXERC20 contracts +export class EvmHypXERC20Adapter + extends EvmHypCollateralAdapter + implements IHypXERC20Adapter +{ + hypXERC20: HypXERC20; + + constructor( + public readonly chainName: ChainName, + public readonly multiProvider: MultiProtocolProvider, + public readonly addresses: { token: Address }, + ) { + super(chainName, multiProvider, addresses); + + this.hypXERC20 = HypXERC20__factory.connect( + addresses.token, + this.getProvider(), + ); + } + + async getMintLimit() { + const xERC20 = await this.hypXERC20.wrappedToken(); + + const limit = await IXERC20__factory.connect( + xERC20, + this.getProvider(), + ).mintingCurrentLimitOf(this.contract.address); + + return BigInt(limit.toString()); + } + + async getBurnLimit() { + const xERC20 = await this.hypXERC20.wrappedToken(); + + const limit = await IXERC20__factory.connect( + xERC20, + this.getProvider(), + ).burningCurrentLimitOf(this.contract.address); + + return BigInt(limit.toString()); + } +} + // Interacts HypNative contracts export class EvmHypNativeAdapter extends EvmHypCollateralAdapter diff --git a/typescript/sdk/src/token/adapters/ITokenAdapter.ts b/typescript/sdk/src/token/adapters/ITokenAdapter.ts index 67bd1a0f4..f0a8032d5 100644 --- a/typescript/sdk/src/token/adapters/ITokenAdapter.ts +++ b/typescript/sdk/src/token/adapters/ITokenAdapter.ts @@ -40,3 +40,8 @@ export interface IHypTokenAdapter extends ITokenAdapter { quoteTransferRemoteGas(destination: Domain): Promise; populateTransferRemoteTx(p: TransferRemoteParams): Promise; } + +export interface IHypXERC20Adapter extends IHypTokenAdapter { + getMintLimit(): Promise; + getBurnLimit(): Promise; +} diff --git a/typescript/sdk/src/warp/WarpCore.test.ts b/typescript/sdk/src/warp/WarpCore.test.ts index e24ebd5b7..b10eb3fdc 100644 --- a/typescript/sdk/src/warp/WarpCore.test.ts +++ b/typescript/sdk/src/warp/WarpCore.test.ts @@ -222,7 +222,7 @@ describe('WarpCore', () => { const invalidAmount = await warpCore.validateTransfer({ originTokenAmount: evmHypNative.amount(-10), - destination: test1.name, + destination: test2.name, recipient: MOCK_ADDRESS, sender: MOCK_ADDRESS, }); @@ -230,7 +230,7 @@ describe('WarpCore', () => { const insufficientBalance = await warpCore.validateTransfer({ originTokenAmount: evmHypNative.amount(BIG_TRANSFER_AMOUNT), - destination: test1.name, + destination: test2.name, recipient: MOCK_ADDRESS, sender: MOCK_ADDRESS, }); diff --git a/typescript/sdk/src/warp/WarpCore.ts b/typescript/sdk/src/warp/WarpCore.ts index 9c9da1ca6..dc9988a03 100644 --- a/typescript/sdk/src/warp/WarpCore.ts +++ b/typescript/sdk/src/warp/WarpCore.ts @@ -24,8 +24,10 @@ import { parseTokenConnectionId } from '../token/TokenConnection.js'; import { TOKEN_COLLATERALIZED_STANDARDS, TOKEN_STANDARD_TO_PROVIDER_TYPE, + TokenStandard, } from '../token/TokenStandard.js'; import { EVM_TRANSFER_REMOTE_GAS_ESTIMATE } from '../token/adapters/EvmTokenAdapter.js'; +import { IHypXERC20Adapter } from '../token/adapters/ITokenAdapter.js'; import { ChainName, ChainNameOrId } from '../types.js'; import { @@ -432,10 +434,22 @@ export class WarpCore { return true; } + let destinationBalance: bigint; + const adapter = destinationToken.getAdapter(this.multiProvider); - const destinationBalance = await adapter.getBalance( - destinationToken.addressOrDenom, - ); + if ( + destinationToken.standard === TokenStandard.EvmHypXERC20 || + destinationToken.standard === TokenStandard.EvmHypXERC20Lockbox + ) { + destinationBalance = await ( + adapter as IHypXERC20Adapter + ).getMintLimit(); + } else { + destinationBalance = await adapter.getBalance( + destinationToken.addressOrDenom, + ); + } + const destinationBalanceInOriginDecimals = convertDecimals( destinationToken.decimals, originToken.decimals, @@ -504,6 +518,17 @@ export class WarpCore { const amountError = this.validateAmount(originTokenAmount); if (amountError) return amountError; + const destinationCollateralError = await this.validateDestinationCollateral( + originTokenAmount, + destination, + ); + if (destinationCollateralError) return destinationCollateralError; + + const originCollateralError = await this.validateOriginCollateral( + originTokenAmount, + ); + if (originCollateralError) return originCollateralError; + const balancesError = await this.validateTokenBalances( originTokenAmount, destination, @@ -592,6 +617,7 @@ export class WarpCore { senderPubKey?: HexString, ): Promise | null> { const { token, amount } = originTokenAmount; + const { amount: senderBalance } = await token.getBalance( this.multiProvider, sender, @@ -637,6 +663,45 @@ export class WarpCore { return null; } + /** + * Ensure the sender has sufficient balances for transfer and interchain gas + */ + protected async validateDestinationCollateral( + originTokenAmount: TokenAmount, + destination: ChainNameOrId, + ): Promise | null> { + const valid = await this.isDestinationCollateralSufficient({ + originTokenAmount, + destination, + }); + if (!valid) return { amount: 'Insufficient collateral on destination' }; + + return null; + } + + /** + * Ensure the sender has sufficient balances for transfer and interchain gas + */ + protected async validateOriginCollateral( + originTokenAmount: TokenAmount, + ): Promise | null> { + const adapter = originTokenAmount.token.getAdapter(this.multiProvider); + + if ( + originTokenAmount.token.standard === TokenStandard.EvmHypXERC20 || + originTokenAmount.token.standard === TokenStandard.EvmHypXERC20Lockbox + ) { + const burnLimit = await ( + adapter as IHypXERC20Adapter + ).getBurnLimit(); + if (burnLimit < BigInt(originTokenAmount.amount)) { + return { amount: 'Insufficient burn limit on origin' }; + } + } + + return null; + } + /** * Search through token list to find token with matching chain and address */ From 27580329ebea8c97a9542b7523b45c73d760ee51 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 15 Jun 2024 22:13:58 +0000 Subject: [PATCH 09/46] Version Packages (#3967) This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @hyperlane-xyz/core@3.15.0 ### Minor Changes - 51bfff683: Mint/burn limit checking for xERC20 bridging Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments ### Patch Changes - @hyperlane-xyz/utils@3.15.0 ## @hyperlane-xyz/cli@3.15.0 ### Minor Changes - 51bfff683: Mint/burn limit checking for xERC20 bridging Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments ### Patch Changes - Updated dependencies [51bfff683] - @hyperlane-xyz/sdk@3.15.0 - @hyperlane-xyz/utils@3.15.0 ## @hyperlane-xyz/sdk@3.15.0 ### Minor Changes - 51bfff683: Mint/burn limit checking for xERC20 bridging Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments ### Patch Changes - Updated dependencies [51bfff683] - @hyperlane-xyz/core@3.15.0 - @hyperlane-xyz/utils@3.15.0 ## @hyperlane-xyz/helloworld@3.15.0 ### Patch Changes - Updated dependencies [51bfff683] - @hyperlane-xyz/sdk@3.15.0 - @hyperlane-xyz/core@3.15.0 ## @hyperlane-xyz/utils@3.15.0 ## @hyperlane-xyz/infra@3.15.0 ### Patch Changes - Updated dependencies [51bfff683] - @hyperlane-xyz/sdk@3.15.0 - @hyperlane-xyz/helloworld@3.15.0 - @hyperlane-xyz/utils@3.15.0 ## @hyperlane-xyz/ccip-server@3.15.0 Co-authored-by: github-actions[bot] --- .changeset/selfish-days-glow.md | 8 -------- solidity/CHANGELOG.md | 11 +++++++++++ solidity/package.json | 4 ++-- typescript/ccip-server/CHANGELOG.md | 2 ++ typescript/ccip-server/package.json | 2 +- typescript/cli/CHANGELOG.md | 13 +++++++++++++ typescript/cli/package.json | 6 +++--- typescript/cli/src/version.ts | 2 +- typescript/helloworld/CHANGELOG.md | 8 ++++++++ typescript/helloworld/package.json | 6 +++--- typescript/infra/CHANGELOG.md | 9 +++++++++ typescript/infra/package.json | 8 ++++---- typescript/sdk/CHANGELOG.md | 13 +++++++++++++ typescript/sdk/package.json | 6 +++--- typescript/utils/CHANGELOG.md | 2 ++ typescript/utils/package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 17 files changed, 90 insertions(+), 40 deletions(-) delete mode 100644 .changeset/selfish-days-glow.md diff --git a/.changeset/selfish-days-glow.md b/.changeset/selfish-days-glow.md deleted file mode 100644 index 32d0e5274..000000000 --- a/.changeset/selfish-days-glow.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperlane-xyz/sdk': minor -'@hyperlane-xyz/core': minor -'@hyperlane-xyz/cli': minor ---- - -Mint/burn limit checking for xERC20 bridging -Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments diff --git a/solidity/CHANGELOG.md b/solidity/CHANGELOG.md index d972340c6..0763cef17 100644 --- a/solidity/CHANGELOG.md +++ b/solidity/CHANGELOG.md @@ -1,5 +1,16 @@ # @hyperlane-xyz/core +## 3.15.0 + +### Minor Changes + +- 51bfff683: Mint/burn limit checking for xERC20 bridging + Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments + +### Patch Changes + +- @hyperlane-xyz/utils@3.15.0 + ## 3.14.0 ### Patch Changes diff --git a/solidity/package.json b/solidity/package.json index 7a7c60fb9..0d2921a58 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -1,10 +1,10 @@ { "name": "@hyperlane-xyz/core", "description": "Core solidity contracts for Hyperlane", - "version": "3.14.0", + "version": "3.15.0", "dependencies": { "@eth-optimism/contracts": "^0.6.0", - "@hyperlane-xyz/utils": "3.14.0", + "@hyperlane-xyz/utils": "3.15.0", "@layerzerolabs/lz-evm-oapp-v2": "2.0.2", "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^v4.9.3", diff --git a/typescript/ccip-server/CHANGELOG.md b/typescript/ccip-server/CHANGELOG.md index abe728f76..ee27ea446 100644 --- a/typescript/ccip-server/CHANGELOG.md +++ b/typescript/ccip-server/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/ccip-server +## 3.15.0 + ## 3.14.0 ## 3.13.0 diff --git a/typescript/ccip-server/package.json b/typescript/ccip-server/package.json index a18b7eeeb..c5e859ac2 100644 --- a/typescript/ccip-server/package.json +++ b/typescript/ccip-server/package.json @@ -1,6 +1,6 @@ { "name": "@hyperlane-xyz/ccip-server", - "version": "3.14.0", + "version": "3.15.0", "description": "CCIP server", "typings": "dist/index.d.ts", "typedocMain": "src/index.ts", diff --git a/typescript/cli/CHANGELOG.md b/typescript/cli/CHANGELOG.md index 08968e90d..be0e07baa 100644 --- a/typescript/cli/CHANGELOG.md +++ b/typescript/cli/CHANGELOG.md @@ -1,5 +1,18 @@ # @hyperlane-xyz/cli +## 3.15.0 + +### Minor Changes + +- 51bfff683: Mint/burn limit checking for xERC20 bridging + Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments + +### Patch Changes + +- Updated dependencies [51bfff683] + - @hyperlane-xyz/sdk@3.15.0 + - @hyperlane-xyz/utils@3.15.0 + ## 3.14.0 ### Minor Changes diff --git a/typescript/cli/package.json b/typescript/cli/package.json index 0a9e7b804..aaa8fe0e8 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/cli", - "version": "3.14.0", + "version": "3.15.0", "description": "A command-line utility for common Hyperlane operations", "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.14.0", - "@hyperlane-xyz/utils": "3.14.0", + "@hyperlane-xyz/sdk": "3.15.0", + "@hyperlane-xyz/utils": "3.15.0", "@inquirer/prompts": "^3.0.0", "asn1.js": "^5.4.1", "bignumber.js": "^9.1.1", diff --git a/typescript/cli/src/version.ts b/typescript/cli/src/version.ts index 69e26984e..eb5b8185d 100644 --- a/typescript/cli/src/version.ts +++ b/typescript/cli/src/version.ts @@ -1 +1 @@ -export const VERSION = '3.14.0'; +export const VERSION = '3.15.0'; diff --git a/typescript/helloworld/CHANGELOG.md b/typescript/helloworld/CHANGELOG.md index 577113c0d..1ea1e9cc3 100644 --- a/typescript/helloworld/CHANGELOG.md +++ b/typescript/helloworld/CHANGELOG.md @@ -1,5 +1,13 @@ # @hyperlane-xyz/helloworld +## 3.15.0 + +### Patch Changes + +- Updated dependencies [51bfff683] + - @hyperlane-xyz/sdk@3.15.0 + - @hyperlane-xyz/core@3.15.0 + ## 3.14.0 ### Patch Changes diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index 96c5ef9f8..22138b9bc 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -1,11 +1,11 @@ { "name": "@hyperlane-xyz/helloworld", "description": "A basic skeleton of an Hyperlane app", - "version": "3.14.0", + "version": "3.15.0", "dependencies": { - "@hyperlane-xyz/core": "3.14.0", + "@hyperlane-xyz/core": "3.15.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.14.0", + "@hyperlane-xyz/sdk": "3.15.0", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" }, diff --git a/typescript/infra/CHANGELOG.md b/typescript/infra/CHANGELOG.md index e1da9e3b3..ed68044f8 100644 --- a/typescript/infra/CHANGELOG.md +++ b/typescript/infra/CHANGELOG.md @@ -1,5 +1,14 @@ # @hyperlane-xyz/infra +## 3.15.0 + +### Patch Changes + +- Updated dependencies [51bfff683] + - @hyperlane-xyz/sdk@3.15.0 + - @hyperlane-xyz/helloworld@3.15.0 + - @hyperlane-xyz/utils@3.15.0 + ## 3.14.0 ### Patch Changes diff --git a/typescript/infra/package.json b/typescript/infra/package.json index 75a58f80b..daede08e4 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/infra", "description": "Infrastructure utilities for the Hyperlane Network", - "version": "3.14.0", + "version": "3.15.0", "dependencies": { "@arbitrum/sdk": "^3.0.0", "@aws-sdk/client-iam": "^3.74.0", @@ -13,10 +13,10 @@ "@ethersproject/hardware-wallets": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@google-cloud/secret-manager": "^5.5.0", - "@hyperlane-xyz/helloworld": "3.14.0", + "@hyperlane-xyz/helloworld": "3.15.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.14.0", - "@hyperlane-xyz/utils": "3.14.0", + "@hyperlane-xyz/sdk": "3.15.0", + "@hyperlane-xyz/utils": "3.15.0", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@solana/web3.js": "^1.78.0", "asn1.js": "5.4.1", diff --git a/typescript/sdk/CHANGELOG.md b/typescript/sdk/CHANGELOG.md index 245e84426..3810b575d 100644 --- a/typescript/sdk/CHANGELOG.md +++ b/typescript/sdk/CHANGELOG.md @@ -1,5 +1,18 @@ # @hyperlane-xyz/sdk +## 3.15.0 + +### Minor Changes + +- 51bfff683: Mint/burn limit checking for xERC20 bridging + Corrects CLI output for HypXERC20 and HypXERC20Lockbox deployments + +### Patch Changes + +- Updated dependencies [51bfff683] + - @hyperlane-xyz/core@3.15.0 + - @hyperlane-xyz/utils@3.15.0 + ## 3.14.0 ### Patch Changes diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index 05880d466..0b74f6a0c 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/sdk", "description": "The official SDK for the Hyperlane Network", - "version": "3.14.0", + "version": "3.15.0", "dependencies": { "@aws-sdk/client-s3": "^3.74.0", "@cosmjs/cosmwasm-stargate": "^0.31.3", "@cosmjs/stargate": "^0.31.3", - "@hyperlane-xyz/core": "3.14.0", - "@hyperlane-xyz/utils": "3.14.0", + "@hyperlane-xyz/core": "3.15.0", + "@hyperlane-xyz/utils": "3.15.0", "@safe-global/api-kit": "1.3.0", "@safe-global/protocol-kit": "1.3.0", "@solana/spl-token": "^0.3.8", diff --git a/typescript/utils/CHANGELOG.md b/typescript/utils/CHANGELOG.md index e0ab748ce..a796ccac6 100644 --- a/typescript/utils/CHANGELOG.md +++ b/typescript/utils/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/utils +## 3.15.0 + ## 3.14.0 ## 3.13.0 diff --git a/typescript/utils/package.json b/typescript/utils/package.json index e085760d0..c7f4b7ec0 100644 --- a/typescript/utils/package.json +++ b/typescript/utils/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/utils", "description": "General utilities and types for the Hyperlane network", - "version": "3.14.0", + "version": "3.15.0", "dependencies": { "@cosmjs/encoding": "^0.31.3", "@solana/web3.js": "^1.78.0", diff --git a/yarn.lock b/yarn.lock index cef359be8..577194fa9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5684,8 +5684,8 @@ __metadata: "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.14.0" - "@hyperlane-xyz/utils": "npm:3.14.0" + "@hyperlane-xyz/sdk": "npm:3.15.0" + "@hyperlane-xyz/utils": "npm:3.15.0" "@inquirer/prompts": "npm:^3.0.0" "@types/mocha": "npm:^10.0.1" "@types/node": "npm:^18.14.5" @@ -5713,12 +5713,12 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/core@npm:3.14.0, @hyperlane-xyz/core@workspace:solidity": +"@hyperlane-xyz/core@npm:3.15.0, @hyperlane-xyz/core@workspace:solidity": version: 0.0.0-use.local resolution: "@hyperlane-xyz/core@workspace:solidity" dependencies: "@eth-optimism/contracts": "npm:^0.6.0" - "@hyperlane-xyz/utils": "npm:3.14.0" + "@hyperlane-xyz/utils": "npm:3.15.0" "@layerzerolabs/lz-evm-oapp-v2": "npm:2.0.2" "@layerzerolabs/solidity-examples": "npm:^1.1.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" @@ -5769,13 +5769,13 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/helloworld@npm:3.14.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": +"@hyperlane-xyz/helloworld@npm:3.15.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": version: 0.0.0-use.local resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: - "@hyperlane-xyz/core": "npm:3.14.0" + "@hyperlane-xyz/core": "npm:3.15.0" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.14.0" + "@hyperlane-xyz/sdk": "npm:3.15.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@openzeppelin/contracts-upgradeable": "npm:^4.9.3" @@ -5822,10 +5822,10 @@ __metadata: "@ethersproject/hardware-wallets": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.2" "@google-cloud/secret-manager": "npm:^5.5.0" - "@hyperlane-xyz/helloworld": "npm:3.14.0" + "@hyperlane-xyz/helloworld": "npm:3.15.0" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.14.0" - "@hyperlane-xyz/utils": "npm:3.14.0" + "@hyperlane-xyz/sdk": "npm:3.15.0" + "@hyperlane-xyz/utils": "npm:3.15.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-etherscan": "npm:^3.0.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" @@ -5885,15 +5885,15 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/sdk@npm:3.14.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": +"@hyperlane-xyz/sdk@npm:3.15.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": version: 0.0.0-use.local resolution: "@hyperlane-xyz/sdk@workspace:typescript/sdk" dependencies: "@aws-sdk/client-s3": "npm:^3.74.0" "@cosmjs/cosmwasm-stargate": "npm:^0.31.3" "@cosmjs/stargate": "npm:^0.31.3" - "@hyperlane-xyz/core": "npm:3.14.0" - "@hyperlane-xyz/utils": "npm:3.14.0" + "@hyperlane-xyz/core": "npm:3.15.0" + "@hyperlane-xyz/utils": "npm:3.15.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@safe-global/api-kit": "npm:1.3.0" @@ -5961,7 +5961,7 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/utils@npm:3.14.0, @hyperlane-xyz/utils@workspace:typescript/utils": +"@hyperlane-xyz/utils@npm:3.15.0, @hyperlane-xyz/utils@workspace:typescript/utils": version: 0.0.0-use.local resolution: "@hyperlane-xyz/utils@workspace:typescript/utils" dependencies: From 6620fe6367cc8cbc50d2edab4b057ccec1da41ba Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Mon, 17 Jun 2024 12:29:19 -0400 Subject: [PATCH 10/46] fix: eliminate branching from `TokenRouter` (#3878) ### Description Fixes bug in `TokenRouter` which dispatches messages to token recipient rather than address in `Router` table when hook overrides are provided. ### Drive-by changes Simplifies inheritance tree of `TokenRouter` > `GasRouter` > `Router` > `MailboxClient` ### Backward compatibility Yes ### Testing Unit Tests --- .changeset/mean-impalas-leave.md | 6 ++ solidity/contracts/client/GasRouter.sol | 38 ++++++++- solidity/contracts/client/MailboxClient.sol | 81 ------------------- solidity/contracts/client/Router.sol | 65 ++++++++++++--- solidity/contracts/test/TestGasRouter.sol | 2 +- solidity/contracts/token/HypNative.sol | 16 +--- .../token/extensions/HypNativeScaled.sol | 12 ++- .../contracts/token/libs/FastTokenRouter.sol | 6 +- solidity/contracts/token/libs/TokenRouter.sol | 71 ++++++++-------- solidity/test/InterchainAccountRouter.t.sol | 7 +- solidity/test/token/HypERC20.t.sol | 33 ++++---- .../helloworld/contracts/HelloWorld.sol | 6 -- 12 files changed, 160 insertions(+), 183 deletions(-) create mode 100644 .changeset/mean-impalas-leave.md diff --git a/.changeset/mean-impalas-leave.md b/.changeset/mean-impalas-leave.md new file mode 100644 index 000000000..caa85890f --- /dev/null +++ b/.changeset/mean-impalas-leave.md @@ -0,0 +1,6 @@ +--- +"@hyperlane-xyz/core": patch +"@hyperlane-xyz/helloworld": patch +--- + +fix: `TokenRouter.transferRemote` with hook overrides diff --git a/solidity/contracts/client/GasRouter.sol b/solidity/contracts/client/GasRouter.sol index 6f4b248e5..c5f9efd1c 100644 --- a/solidity/contracts/client/GasRouter.sol +++ b/solidity/contracts/client/GasRouter.sol @@ -43,13 +43,13 @@ abstract contract GasRouter is Router { */ function quoteGasPayment( uint32 _destinationDomain - ) external view returns (uint256 _gasPayment) { - return _quoteDispatch(_destinationDomain, ""); + ) external view returns (uint256) { + return _GasRouter_quoteDispatch(_destinationDomain, "", address(hook)); } - function _metadata( + function _GasRouter_hookMetadata( uint32 _destination - ) internal view virtual override returns (bytes memory) { + ) internal view returns (bytes memory) { return StandardHookMetadata.overrideGasLimit(destinationGas[_destination]); } @@ -57,4 +57,34 @@ abstract contract GasRouter is Router { function _setDestinationGas(uint32 domain, uint256 gas) internal { destinationGas[domain] = gas; } + + function _GasRouter_dispatch( + uint32 _destination, + uint256 _value, + bytes memory _messageBody, + address _hook + ) internal returns (bytes32) { + return + _Router_dispatch( + _destination, + _value, + _messageBody, + _GasRouter_hookMetadata(_destination), + _hook + ); + } + + function _GasRouter_quoteDispatch( + uint32 _destination, + bytes memory _messageBody, + address _hook + ) internal view returns (uint256) { + return + _Router_quoteDispatch( + _destination, + _messageBody, + _GasRouter_hookMetadata(_destination), + _hook + ); + } } diff --git a/solidity/contracts/client/MailboxClient.sol b/solidity/contracts/client/MailboxClient.sol index bf6b79c34..3e0b751e6 100644 --- a/solidity/contracts/client/MailboxClient.sol +++ b/solidity/contracts/client/MailboxClient.sol @@ -95,85 +95,4 @@ abstract contract MailboxClient is OwnableUpgradeable { function _isDelivered(bytes32 id) internal view returns (bool) { return mailbox.delivered(id); } - - function _metadata( - uint32 /*_destinationDomain*/ - ) internal view virtual returns (bytes memory) { - return ""; - } - - function _dispatch( - uint32 _destinationDomain, - bytes32 _recipient, - bytes memory _messageBody - ) internal virtual returns (bytes32) { - return - _dispatch(_destinationDomain, _recipient, msg.value, _messageBody); - } - - function _dispatch( - uint32 _destinationDomain, - bytes32 _recipient, - uint256 _value, - bytes memory _messageBody - ) internal virtual returns (bytes32) { - return - mailbox.dispatch{value: _value}( - _destinationDomain, - _recipient, - _messageBody, - _metadata(_destinationDomain), - hook - ); - } - - function _dispatch( - uint32 _destinationDomain, - bytes32 _recipient, - uint256 _value, - bytes memory _messageBody, - bytes memory _hookMetadata, - IPostDispatchHook _hook - ) internal virtual returns (bytes32) { - return - mailbox.dispatch{value: _value}( - _destinationDomain, - _recipient, - _messageBody, - _hookMetadata, - _hook - ); - } - - function _quoteDispatch( - uint32 _destinationDomain, - bytes32 _recipient, - bytes memory _messageBody - ) internal view virtual returns (uint256) { - return - mailbox.quoteDispatch( - _destinationDomain, - _recipient, - _messageBody, - _metadata(_destinationDomain), - hook - ); - } - - function _quoteDispatch( - uint32 _destinationDomain, - bytes32 _recipient, - bytes memory _messageBody, - bytes calldata _hookMetadata, - IPostDispatchHook _hook - ) internal view virtual returns (uint256) { - return - mailbox.quoteDispatch( - _destinationDomain, - _recipient, - _messageBody, - _hookMetadata, - _hook - ); - } } diff --git a/solidity/contracts/client/Router.sol b/solidity/contracts/client/Router.sol index ef14912f9..52f3fe537 100644 --- a/solidity/contracts/client/Router.sol +++ b/solidity/contracts/client/Router.sol @@ -167,28 +167,73 @@ abstract contract Router is MailboxClient, IMessageRecipient { ); } - function _dispatch( + function _Router_dispatch( uint32 _destinationDomain, - bytes memory _messageBody - ) internal virtual returns (bytes32) { - return _dispatch(_destinationDomain, msg.value, _messageBody); + uint256 _value, + bytes memory _messageBody, + bytes memory _hookMetadata, + address _hook + ) internal returns (bytes32) { + bytes32 _router = _mustHaveRemoteRouter(_destinationDomain); + return + mailbox.dispatch{value: _value}( + _destinationDomain, + _router, + _messageBody, + _hookMetadata, + IPostDispatchHook(_hook) + ); } + /** + * DEPRECATED: Use `_Router_dispatch` instead + * @dev For backward compatibility with v2 client contracts + */ function _dispatch( uint32 _destinationDomain, - uint256 _value, bytes memory _messageBody - ) internal virtual returns (bytes32) { + ) internal returns (bytes32) { + return + _Router_dispatch( + _destinationDomain, + msg.value, + _messageBody, + "", + address(hook) + ); + } + + function _Router_quoteDispatch( + uint32 _destinationDomain, + bytes memory _messageBody, + bytes memory _hookMetadata, + address _hook + ) internal view returns (uint256) { bytes32 _router = _mustHaveRemoteRouter(_destinationDomain); return - super._dispatch(_destinationDomain, _router, _value, _messageBody); + mailbox.quoteDispatch( + _destinationDomain, + _router, + _messageBody, + _hookMetadata, + IPostDispatchHook(_hook) + ); } + /** + * DEPRECATED: Use `_Router_quoteDispatch` instead + * @dev For backward compatibility with v2 client contracts + */ function _quoteDispatch( uint32 _destinationDomain, bytes memory _messageBody - ) internal view virtual returns (uint256) { - bytes32 _router = _mustHaveRemoteRouter(_destinationDomain); - return super._quoteDispatch(_destinationDomain, _router, _messageBody); + ) internal view returns (uint256) { + return + _Router_quoteDispatch( + _destinationDomain, + _messageBody, + "", + address(hook) + ); } } diff --git a/solidity/contracts/test/TestGasRouter.sol b/solidity/contracts/test/TestGasRouter.sol index 3c8f6ecbf..b74bd6ac6 100644 --- a/solidity/contracts/test/TestGasRouter.sol +++ b/solidity/contracts/test/TestGasRouter.sol @@ -7,7 +7,7 @@ contract TestGasRouter is GasRouter { constructor(address _mailbox) GasRouter(_mailbox) {} function dispatch(uint32 _destination, bytes memory _msg) external payable { - _dispatch(_destination, _msg); + _GasRouter_dispatch(_destination, msg.value, _msg, address(hook)); } function _handle(uint32, bytes32, bytes calldata) internal pure override {} diff --git a/solidity/contracts/token/HypNative.sol b/solidity/contracts/token/HypNative.sol index 5afafdd96..5b620d00a 100644 --- a/solidity/contracts/token/HypNative.sol +++ b/solidity/contracts/token/HypNative.sol @@ -36,24 +36,16 @@ contract HypNative is TokenRouter { /** * @inheritdoc TokenRouter - * @dev uses (`msg.value` - `_amount`) as interchain gas payment and `msg.sender` as refund address. + * @dev uses (`msg.value` - `_amount`) as hook payment and `msg.sender` as refund address. */ function transferRemote( uint32 _destination, bytes32 _recipient, uint256 _amount - ) public payable virtual override returns (bytes32 messageId) { + ) external payable virtual override returns (bytes32 messageId) { require(msg.value >= _amount, "Native: amount exceeds msg.value"); - uint256 gasPayment = msg.value - _amount; - return - _transferRemote( - _destination, - _recipient, - _amount, - gasPayment, - bytes(""), - address(0) - ); + uint256 _hookPayment = msg.value - _amount; + return _transferRemote(_destination, _recipient, _amount, _hookPayment); } function balanceOf( diff --git a/solidity/contracts/token/extensions/HypNativeScaled.sol b/solidity/contracts/token/extensions/HypNativeScaled.sol index 625fa7e0e..88ccaa468 100644 --- a/solidity/contracts/token/extensions/HypNativeScaled.sol +++ b/solidity/contracts/token/extensions/HypNativeScaled.sol @@ -25,18 +25,16 @@ contract HypNativeScaled is HypNative { uint32 _destination, bytes32 _recipient, uint256 _amount - ) public payable override returns (bytes32 messageId) { + ) external payable override returns (bytes32 messageId) { require(msg.value >= _amount, "Native: amount exceeds msg.value"); - uint256 gasPayment = msg.value - _amount; - uint256 scaledAmount = _amount / scale; + uint256 _hookPayment = msg.value - _amount; + uint256 _scaledAmount = _amount / scale; return _transferRemote( _destination, _recipient, - scaledAmount, - gasPayment, - bytes(""), - address(0) + _scaledAmount, + _hookPayment ); } diff --git a/solidity/contracts/token/libs/FastTokenRouter.sol b/solidity/contracts/token/libs/FastTokenRouter.sol index b5fdaaee3..8e4418a89 100644 --- a/solidity/contracts/token/libs/FastTokenRouter.sol +++ b/solidity/contracts/token/libs/FastTokenRouter.sol @@ -109,9 +109,11 @@ abstract contract FastTokenRouter is TokenRouter { _fastTransferId ); - messageId = _dispatch( + messageId = _GasRouter_dispatch( _destination, - TokenMessage.format(_recipient, _amountOrId, metadata) + msg.value, + TokenMessage.format(_recipient, _amountOrId, metadata), + address(hook) ); emit SentTransferRemote(_destination, _recipient, _amountOrId); } diff --git a/solidity/contracts/token/libs/TokenRouter.sol b/solidity/contracts/token/libs/TokenRouter.sol index c5d0bf6b1..96ffcf838 100644 --- a/solidity/contracts/token/libs/TokenRouter.sol +++ b/solidity/contracts/token/libs/TokenRouter.sol @@ -57,14 +57,7 @@ abstract contract TokenRouter is GasRouter { uint256 _amountOrId ) external payable virtual returns (bytes32 messageId) { return - _transferRemote( - _destination, - _recipient, - _amountOrId, - msg.value, - bytes(""), - address(0) - ); + _transferRemote(_destination, _recipient, _amountOrId, msg.value); } /** @@ -97,45 +90,45 @@ abstract contract TokenRouter is GasRouter { ); } - /** - * @notice Transfers `_amountOrId` token to `_recipient` on `_destination` domain. - * @dev Delegates transfer logic to `_transferFromSender` implementation. - * @dev The metadata is the token metadata, and is DIFFERENT than the hook metadata. - * @dev Emits `SentTransferRemote` event on the origin chain. - * @param _destination The identifier of the destination chain. - * @param _recipient The address of the recipient on the destination chain. - * @param _amountOrId The amount or identifier of tokens to be sent to the remote recipient. - * @param _gasPayment The amount of native token to pay for interchain gas. - * @param _hookMetadata The metadata passed into the hook - * @param _hook The post dispatch hook to be called by the Mailbox - * @return messageId The identifier of the dispatched message. - */ function _transferRemote( uint32 _destination, bytes32 _recipient, uint256 _amountOrId, - uint256 _gasPayment, - bytes memory _hookMetadata, - address _hook + uint256 _value ) internal returns (bytes32 messageId) { - bytes memory metadata = _transferFromSender(_amountOrId); - - if (address(_hook) == address(0)) { - messageId = _dispatch( - _destination, - _gasPayment, - TokenMessage.format(_recipient, _amountOrId, metadata) - ); - } else { - messageId = _dispatch( + return + _transferRemote( _destination, _recipient, - _gasPayment, - TokenMessage.format(_recipient, _amountOrId, metadata), - _hookMetadata, - IPostDispatchHook(_hook) + _amountOrId, + _value, + _GasRouter_hookMetadata(_destination), + address(hook) ); - } + } + + function _transferRemote( + uint32 _destination, + bytes32 _recipient, + uint256 _amountOrId, + uint256 _value, + bytes memory _hookMetadata, + address _hook + ) internal virtual returns (bytes32 messageId) { + bytes memory _tokenMetadata = _transferFromSender(_amountOrId); + bytes memory _tokenMessage = TokenMessage.format( + _recipient, + _amountOrId, + _tokenMetadata + ); + + messageId = _Router_dispatch( + _destination, + _value, + _tokenMessage, + _hookMetadata, + _hook + ); emit SentTransferRemote(_destination, _recipient, _amountOrId); } diff --git a/solidity/test/InterchainAccountRouter.t.sol b/solidity/test/InterchainAccountRouter.t.sol index d96685706..b610532c1 100644 --- a/solidity/test/InterchainAccountRouter.t.sol +++ b/solidity/test/InterchainAccountRouter.t.sol @@ -479,6 +479,7 @@ contract InterchainAccountRouterTest is Test { uint64 payment, bytes32 data ) public { + CallLib.Call[] memory calls = getCalls(data); vm.assume(payment < gasLimit * igp.gasPrice()); // arrange bytes memory metadata = StandardHookMetadata.formatMetadata( @@ -495,11 +496,7 @@ contract InterchainAccountRouterTest is Test { // act vm.expectRevert("IGP: insufficient interchain gas payment"); - originRouter.callRemote{value: payment}( - destination, - getCalls(data), - metadata - ); + originRouter.callRemote{value: payment}(destination, calls, metadata); } function testFuzz_callRemoteWithOverrides_default(bytes32 data) public { diff --git a/solidity/test/token/HypERC20.t.sol b/solidity/test/token/HypERC20.t.sol index 300e59c54..9191d3225 100644 --- a/solidity/test/token/HypERC20.t.sol +++ b/solidity/test/token/HypERC20.t.sol @@ -23,6 +23,7 @@ import {XERC20LockboxTest, XERC20Test, FiatTokenTest, ERC20Test} from "../../con import {TestPostDispatchHook} from "../../contracts/test/TestPostDispatchHook.sol"; import {TestInterchainGasPaymaster} from "../../contracts/test/TestInterchainGasPaymaster.sol"; import {GasRouter} from "../../contracts/client/GasRouter.sol"; +import {IPostDispatchHook} from "../../contracts/interfaces/hooks/IPostDispatchHook.sol"; import {HypERC20} from "../../contracts/token/HypERC20.sol"; import {HypERC20Collateral} from "../../contracts/token/HypERC20Collateral.sol"; @@ -198,38 +199,38 @@ abstract contract HypTokenTest is Test { function _performRemoteTransferWithHook( uint256 _msgValue, - uint256 _amount + uint256 _amount, + address _hook, + bytes memory _hookMetadata ) internal returns (bytes32 messageId) { vm.prank(ALICE); messageId = localToken.transferRemote{value: _msgValue}( DESTINATION, BOB.addressToBytes32(), _amount, - bytes(""), - address(noopHook) + _hookMetadata, + address(_hook) ); _processTransfers(BOB, _amount); assertEq(remoteToken.balanceOf(BOB), _amount); } - function testTransfer_withHookSpecified() public { + function testTransfer_withHookSpecified( + uint256 fee, + bytes calldata metadata + ) public { + TestPostDispatchHook hook = new TestPostDispatchHook(); + hook.setFee(fee); + vm.prank(ALICE); primaryToken.approve(address(localToken), TRANSFER_AMT); bytes32 messageId = _performRemoteTransferWithHook( REQUIRED_VALUE, - TRANSFER_AMT + TRANSFER_AMT, + address(hook), + metadata ); - assertTrue(noopHook.messageDispatched(messageId)); - /// @dev Using this test would be ideal, but vm.expectCall with nested functions more than 1 level deep is broken - /// In other words, the call graph of Route.transferRemote() -> Mailbox.dispatch() -> Hook.postDispatch() does not work with expectCall - // vm.expectCall( - // address(noopHook), - // abi.encodeCall( - // IPostDispatchHook.postDispatch, - // (bytes(""), outboundMessage) - // ) - // ); - /// @dev Also, using expectedCall with Mailbox.dispatch() won't work either because overloaded function selection is broken, see https://github.com/ethereum/solidity/issues/13815 + assertTrue(hook.messageDispatched(messageId)); } function testBenchmark_overheadGasUsage() public virtual { diff --git a/typescript/helloworld/contracts/HelloWorld.sol b/typescript/helloworld/contracts/HelloWorld.sol index b3bdb16fd..fc81207c5 100644 --- a/typescript/helloworld/contracts/HelloWorld.sol +++ b/typescript/helloworld/contracts/HelloWorld.sol @@ -83,12 +83,6 @@ contract HelloWorld is Router { } // ============ Internal functions ============ - function _metadata( - uint32 /*_destinationDomain*/ - ) internal view override returns (bytes memory) { - return StandardHookMetadata.overrideGasLimit(HANDLE_GAS_AMOUNT); - } - /** * @notice Handles a message from a remote router. * @dev Only called for messages sent from a remote router, as enforced by Router.sol. From 921e449b4180677044b852ac395a1955328c8098 Mon Sep 17 00:00:00 2001 From: Nam Chu Hoai Date: Mon, 17 Jun 2024 13:00:22 -0400 Subject: [PATCH 11/46] feat: support priorityFee fetching from RPC and some better logging (#3972) ### Description `main` equivalent for https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3971 to get it in for the latest warp UI deployment --- .changeset/sixty-ducks-brush.md | 6 ++++ typescript/cli/src/deploy/warp.ts | 2 +- .../HyperlaneEtherscanProvider.ts | 1 + .../SmartProvider/HyperlaneJsonRpcProvider.ts | 7 ++++ .../SmartProvider/ProviderMethods.ts | 1 + .../providers/SmartProvider/SmartProvider.ts | 36 ++++++++++++++++++- typescript/sdk/src/token/deploy.ts | 15 +++++--- 7 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 .changeset/sixty-ducks-brush.md diff --git a/.changeset/sixty-ducks-brush.md b/.changeset/sixty-ducks-brush.md new file mode 100644 index 000000000..ac4e4366c --- /dev/null +++ b/.changeset/sixty-ducks-brush.md @@ -0,0 +1,6 @@ +--- +"@hyperlane-xyz/cli": patch +"@hyperlane-xyz/sdk": patch +--- + +Support priorityFee fetching from RPC and some better logging diff --git a/typescript/cli/src/deploy/warp.ts b/typescript/cli/src/deploy/warp.ts index 61e34921b..45919d2af 100644 --- a/typescript/cli/src/deploy/warp.ts +++ b/typescript/cli/src/deploy/warp.ts @@ -125,7 +125,7 @@ async function executeDeploy(params: DeployParams) { const deployedContracts = await deployer.deploy(config); - logGreen('āœ… Hyp token deployments complete'); + logGreen('āœ… Warp contract deployments complete'); const warpCoreConfig = await getWarpCoreConfig(params, deployedContracts); if (!isDryRun) { diff --git a/typescript/sdk/src/providers/SmartProvider/HyperlaneEtherscanProvider.ts b/typescript/sdk/src/providers/SmartProvider/HyperlaneEtherscanProvider.ts index 908c7939a..56fc50f57 100644 --- a/typescript/sdk/src/providers/SmartProvider/HyperlaneEtherscanProvider.ts +++ b/typescript/sdk/src/providers/SmartProvider/HyperlaneEtherscanProvider.ts @@ -24,6 +24,7 @@ export class HyperlaneEtherscanProvider ProviderMethod.Call, ProviderMethod.EstimateGas, ProviderMethod.SendTransaction, + ProviderMethod.MaxPriorityFeePerGas, ]); constructor( diff --git a/typescript/sdk/src/providers/SmartProvider/HyperlaneJsonRpcProvider.ts b/typescript/sdk/src/providers/SmartProvider/HyperlaneJsonRpcProvider.ts index 8b434a29c..b6695bcb2 100644 --- a/typescript/sdk/src/providers/SmartProvider/HyperlaneJsonRpcProvider.ts +++ b/typescript/sdk/src/providers/SmartProvider/HyperlaneJsonRpcProvider.ts @@ -32,6 +32,13 @@ export class HyperlaneJsonRpcProvider super(rpcConfig.connection ?? rpcConfig.http, network); } + prepareRequest(method: string, params: any): [string, any[]] { + if (method === ProviderMethod.MaxPriorityFeePerGas) { + return ['eth_maxPriorityFeePerGas', []]; + } + return super.prepareRequest(method, params); + } + async perform(method: string, params: any, reqId?: number): Promise { if (this.options?.debug) this.logger.debug( diff --git a/typescript/sdk/src/providers/SmartProvider/ProviderMethods.ts b/typescript/sdk/src/providers/SmartProvider/ProviderMethods.ts index 2a36c6599..6b7417786 100644 --- a/typescript/sdk/src/providers/SmartProvider/ProviderMethods.ts +++ b/typescript/sdk/src/providers/SmartProvider/ProviderMethods.ts @@ -16,6 +16,7 @@ export enum ProviderMethod { GetTransactionReceipt = 'getTransactionReceipt', GetLogs = 'getLogs', SendTransaction = 'sendTransaction', + MaxPriorityFeePerGas = 'maxPriorityFeePerGas', } export const AllProviderMethods = Object.values(ProviderMethod); diff --git a/typescript/sdk/src/providers/SmartProvider/SmartProvider.ts b/typescript/sdk/src/providers/SmartProvider/SmartProvider.ts index a3bb1f05b..a5daf9ea0 100644 --- a/typescript/sdk/src/providers/SmartProvider/SmartProvider.ts +++ b/typescript/sdk/src/providers/SmartProvider/SmartProvider.ts @@ -1,4 +1,4 @@ -import { providers } from 'ethers'; +import { BigNumber, providers, utils } from 'ethers'; import { Logger } from 'pino'; import { @@ -97,6 +97,40 @@ export class HyperlaneSmartProvider this.supportedMethods = [...supportedMethods.values()]; } + async getPriorityFee() { + try { + return BigNumber.from(await this.perform('maxPriorityFeePerGas', {})); + } catch (error) { + return BigNumber.from('1500000000'); + } + } + + async getFeeData(): Promise { + // override hardcoded getFeedata + // Copied from https://github.com/ethers-io/ethers.js/blob/v5/packages/abstract-provider/src.ts/index.ts#L235 which SmartProvider inherits this logic from + const { block, gasPrice } = await utils.resolveProperties({ + block: this.getBlock('latest'), + gasPrice: this.getGasPrice().catch(() => { + return null; + }), + }); + + let lastBaseFeePerGas: BigNumber | null = null, + maxFeePerGas: BigNumber | null = null, + maxPriorityFeePerGas: BigNumber | null = null; + + if (block?.baseFeePerGas) { + // We may want to compute this more accurately in the future, + // using the formula "check if the base fee is correct". + // See: https://eips.ethereum.org/EIPS/eip-1559 + lastBaseFeePerGas = block.baseFeePerGas; + maxPriorityFeePerGas = await this.getPriorityFee(); + maxFeePerGas = block.baseFeePerGas.mul(2).add(maxPriorityFeePerGas); + } + + return { lastBaseFeePerGas, maxFeePerGas, maxPriorityFeePerGas, gasPrice }; + } + static fromChainMetadata( chainMetadata: ChainMetadataWithRpcConnectionInfo, options?: SmartProviderOptions, diff --git a/typescript/sdk/src/token/deploy.ts b/typescript/sdk/src/token/deploy.ts index ad865c4f0..2ad13c2f6 100644 --- a/typescript/sdk/src/token/deploy.ts +++ b/typescript/sdk/src/token/deploy.ts @@ -135,10 +135,17 @@ abstract class TokenDeployer< } async deploy(configMap: WarpRouteDeployConfig) { - const tokenMetadata = await TokenDeployer.deriveTokenMetadata( - this.multiProvider, - configMap, - ); + let tokenMetadata: TokenMetadata | undefined; + try { + tokenMetadata = await TokenDeployer.deriveTokenMetadata( + this.multiProvider, + configMap, + ); + } catch (err) { + this.logger.error('Failed to derive token metadata', err, configMap); + throw err; + } + const resolvedConfigMap = objMap(configMap, (_, config) => ({ ...tokenMetadata, gas: gasOverhead(config.type), From 1579ca221c2741764207d1d2fa9f8383ac633d55 Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Mon, 17 Jun 2024 13:01:15 -0400 Subject: [PATCH 12/46] fix: disable initializers in xERC20 adapters (#3979) ### Description - Follow OZ best practice from https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#initializing_the_implementation_contract ### Backward compatibility Yes ### Testing Unit tests --- solidity/contracts/token/extensions/HypXERC20.sol | 4 +++- solidity/contracts/token/extensions/HypXERC20Lockbox.sol | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/solidity/contracts/token/extensions/HypXERC20.sol b/solidity/contracts/token/extensions/HypXERC20.sol index 9f50b4537..84ab7a879 100644 --- a/solidity/contracts/token/extensions/HypXERC20.sol +++ b/solidity/contracts/token/extensions/HypXERC20.sol @@ -8,7 +8,9 @@ contract HypXERC20 is HypERC20Collateral { constructor( address _xerc20, address _mailbox - ) HypERC20Collateral(_xerc20, _mailbox) {} + ) HypERC20Collateral(_xerc20, _mailbox) { + _disableInitializers(); + } function _transferFromSender( uint256 _amountOrId diff --git a/solidity/contracts/token/extensions/HypXERC20Lockbox.sol b/solidity/contracts/token/extensions/HypXERC20Lockbox.sol index 6c95abd3e..f2c26e784 100644 --- a/solidity/contracts/token/extensions/HypXERC20Lockbox.sol +++ b/solidity/contracts/token/extensions/HypXERC20Lockbox.sol @@ -18,6 +18,7 @@ contract HypXERC20Lockbox is HypERC20Collateral { lockbox = IXERC20Lockbox(_lockbox); xERC20 = lockbox.XERC20(); approveLockbox(); + _disableInitializers(); } /** From acaa22cd90c3856f529cd0d0efb62068ab143f6b Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 17 Jun 2024 19:55:31 +0200 Subject: [PATCH 13/46] fix: Do not consider xERC20 a collateral standard 2 (#3977) Amending https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3973 to ensure output of the CLI doesn't incorrectly add `collateralAddressOrDenom` to xERC20 configs. --------- Co-authored-by: nambrot --- .changeset/olive-geckos-behave.md | 5 +++++ typescript/cli/src/deploy/warp.ts | 5 +---- typescript/sdk/src/token/TokenStandard.ts | 7 +++++-- typescript/sdk/src/warp/WarpCore.ts | 6 +++++- 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 .changeset/olive-geckos-behave.md diff --git a/.changeset/olive-geckos-behave.md b/.changeset/olive-geckos-behave.md new file mode 100644 index 000000000..b199df2cb --- /dev/null +++ b/.changeset/olive-geckos-behave.md @@ -0,0 +1,5 @@ +--- +"@hyperlane-xyz/sdk": patch +--- + +Do not consider xERC20 a collateral standard to fix fungibility checking logic while maintaining mint limit checking diff --git a/typescript/cli/src/deploy/warp.ts b/typescript/cli/src/deploy/warp.ts index 45919d2af..dfcd7a2c2 100644 --- a/typescript/cli/src/deploy/warp.ts +++ b/typescript/cli/src/deploy/warp.ts @@ -183,10 +183,7 @@ async function getWarpCoreConfig( return wrappedToken; } - if ( - config.type === TokenType.collateral || - config.type === TokenType.XERC20 - ) { + if (config.type === TokenType.collateral) { return config.token; } diff --git a/typescript/sdk/src/token/TokenStandard.ts b/typescript/sdk/src/token/TokenStandard.ts index ba03d4d50..d8346be16 100644 --- a/typescript/sdk/src/token/TokenStandard.ts +++ b/typescript/sdk/src/token/TokenStandard.ts @@ -94,14 +94,17 @@ export const TOKEN_NFT_STANDARDS = [ export const TOKEN_COLLATERALIZED_STANDARDS = [ TokenStandard.EvmHypCollateral, TokenStandard.EvmHypNative, - TokenStandard.EvmHypXERC20, - TokenStandard.EvmHypXERC20Lockbox, TokenStandard.SealevelHypCollateral, TokenStandard.SealevelHypNative, TokenStandard.CwHypCollateral, TokenStandard.CwHypNative, ]; +export const MINT_LIMITED_STANDARDS = [ + TokenStandard.EvmHypXERC20, + TokenStandard.EvmHypXERC20Lockbox, +]; + export const TOKEN_HYP_STANDARDS = [ TokenStandard.EvmHypNative, TokenStandard.EvmHypCollateral, diff --git a/typescript/sdk/src/warp/WarpCore.ts b/typescript/sdk/src/warp/WarpCore.ts index dc9988a03..f68201d73 100644 --- a/typescript/sdk/src/warp/WarpCore.ts +++ b/typescript/sdk/src/warp/WarpCore.ts @@ -22,6 +22,7 @@ import { Token } from '../token/Token.js'; import { TokenAmount } from '../token/TokenAmount.js'; import { parseTokenConnectionId } from '../token/TokenConnection.js'; import { + MINT_LIMITED_STANDARDS, TOKEN_COLLATERALIZED_STANDARDS, TOKEN_STANDARD_TO_PROVIDER_TYPE, TokenStandard, @@ -427,7 +428,10 @@ export class WarpCore { originToken.getConnectionForChain(destinationName)?.token; assert(destinationToken, `No connection found for ${destinationName}`); - if (!TOKEN_COLLATERALIZED_STANDARDS.includes(destinationToken.standard)) { + if ( + !TOKEN_COLLATERALIZED_STANDARDS.includes(destinationToken.standard) && + !MINT_LIMITED_STANDARDS.includes(destinationToken.standard) + ) { this.logger.debug( `${destinationToken.symbol} is not collateralized, skipping`, ); From 6b5a763e78bc056d36de915dbb69250ed83ec653 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 20:11:27 -0400 Subject: [PATCH 14/46] Version Packages (#3980) This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @hyperlane-xyz/core@3.15.1 ### Patch Changes - 6620fe636: fix: `TokenRouter.transferRemote` with hook overrides - @hyperlane-xyz/utils@3.15.1 ## @hyperlane-xyz/cli@3.15.1 ### Patch Changes - 921e449b4: Support priorityFee fetching from RPC and some better logging - Updated dependencies [acaa22cd9] - Updated dependencies [921e449b4] - @hyperlane-xyz/sdk@3.15.1 - @hyperlane-xyz/utils@3.15.1 ## @hyperlane-xyz/helloworld@3.15.1 ### Patch Changes - 6620fe636: fix: `TokenRouter.transferRemote` with hook overrides - Updated dependencies [6620fe636] - Updated dependencies [acaa22cd9] - Updated dependencies [921e449b4] - @hyperlane-xyz/core@3.15.1 - @hyperlane-xyz/sdk@3.15.1 ## @hyperlane-xyz/sdk@3.15.1 ### Patch Changes - acaa22cd9: Do not consider xERC20 a collateral standard to fix fungibility checking logic while maintaining mint limit checking - 921e449b4: Support priorityFee fetching from RPC and some better logging - Updated dependencies [6620fe636] - @hyperlane-xyz/core@3.15.1 - @hyperlane-xyz/utils@3.15.1 ## @hyperlane-xyz/utils@3.15.1 ## @hyperlane-xyz/infra@3.15.1 ### Patch Changes - Updated dependencies [6620fe636] - Updated dependencies [acaa22cd9] - Updated dependencies [921e449b4] - @hyperlane-xyz/helloworld@3.15.1 - @hyperlane-xyz/sdk@3.15.1 - @hyperlane-xyz/utils@3.15.1 ## @hyperlane-xyz/ccip-server@3.15.1 Co-authored-by: github-actions[bot] --- .changeset/mean-impalas-leave.md | 6 ------ .changeset/olive-geckos-behave.md | 5 ----- .changeset/sixty-ducks-brush.md | 6 ------ solidity/CHANGELOG.md | 7 +++++++ solidity/package.json | 4 ++-- typescript/ccip-server/CHANGELOG.md | 2 ++ typescript/ccip-server/package.json | 2 +- typescript/cli/CHANGELOG.md | 10 ++++++++++ typescript/cli/package.json | 6 +++--- typescript/cli/src/version.ts | 2 +- typescript/helloworld/CHANGELOG.md | 11 +++++++++++ typescript/helloworld/package.json | 6 +++--- typescript/infra/CHANGELOG.md | 11 +++++++++++ typescript/infra/package.json | 8 ++++---- typescript/sdk/CHANGELOG.md | 10 ++++++++++ typescript/sdk/package.json | 6 +++--- typescript/utils/CHANGELOG.md | 2 ++ typescript/utils/package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 19 files changed, 85 insertions(+), 49 deletions(-) delete mode 100644 .changeset/mean-impalas-leave.md delete mode 100644 .changeset/olive-geckos-behave.md delete mode 100644 .changeset/sixty-ducks-brush.md diff --git a/.changeset/mean-impalas-leave.md b/.changeset/mean-impalas-leave.md deleted file mode 100644 index caa85890f..000000000 --- a/.changeset/mean-impalas-leave.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hyperlane-xyz/core": patch -"@hyperlane-xyz/helloworld": patch ---- - -fix: `TokenRouter.transferRemote` with hook overrides diff --git a/.changeset/olive-geckos-behave.md b/.changeset/olive-geckos-behave.md deleted file mode 100644 index b199df2cb..000000000 --- a/.changeset/olive-geckos-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hyperlane-xyz/sdk": patch ---- - -Do not consider xERC20 a collateral standard to fix fungibility checking logic while maintaining mint limit checking diff --git a/.changeset/sixty-ducks-brush.md b/.changeset/sixty-ducks-brush.md deleted file mode 100644 index ac4e4366c..000000000 --- a/.changeset/sixty-ducks-brush.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hyperlane-xyz/cli": patch -"@hyperlane-xyz/sdk": patch ---- - -Support priorityFee fetching from RPC and some better logging diff --git a/solidity/CHANGELOG.md b/solidity/CHANGELOG.md index 0763cef17..4107a5ba8 100644 --- a/solidity/CHANGELOG.md +++ b/solidity/CHANGELOG.md @@ -1,5 +1,12 @@ # @hyperlane-xyz/core +## 3.15.1 + +### Patch Changes + +- 6620fe636: fix: `TokenRouter.transferRemote` with hook overrides + - @hyperlane-xyz/utils@3.15.1 + ## 3.15.0 ### Minor Changes diff --git a/solidity/package.json b/solidity/package.json index 0d2921a58..ce10f806f 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -1,10 +1,10 @@ { "name": "@hyperlane-xyz/core", "description": "Core solidity contracts for Hyperlane", - "version": "3.15.0", + "version": "3.15.1", "dependencies": { "@eth-optimism/contracts": "^0.6.0", - "@hyperlane-xyz/utils": "3.15.0", + "@hyperlane-xyz/utils": "3.15.1", "@layerzerolabs/lz-evm-oapp-v2": "2.0.2", "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^v4.9.3", diff --git a/typescript/ccip-server/CHANGELOG.md b/typescript/ccip-server/CHANGELOG.md index ee27ea446..115debd5e 100644 --- a/typescript/ccip-server/CHANGELOG.md +++ b/typescript/ccip-server/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/ccip-server +## 3.15.1 + ## 3.15.0 ## 3.14.0 diff --git a/typescript/ccip-server/package.json b/typescript/ccip-server/package.json index c5e859ac2..1b3f5c792 100644 --- a/typescript/ccip-server/package.json +++ b/typescript/ccip-server/package.json @@ -1,6 +1,6 @@ { "name": "@hyperlane-xyz/ccip-server", - "version": "3.15.0", + "version": "3.15.1", "description": "CCIP server", "typings": "dist/index.d.ts", "typedocMain": "src/index.ts", diff --git a/typescript/cli/CHANGELOG.md b/typescript/cli/CHANGELOG.md index be0e07baa..428039d50 100644 --- a/typescript/cli/CHANGELOG.md +++ b/typescript/cli/CHANGELOG.md @@ -1,5 +1,15 @@ # @hyperlane-xyz/cli +## 3.15.1 + +### Patch Changes + +- 921e449b4: Support priorityFee fetching from RPC and some better logging +- Updated dependencies [acaa22cd9] +- Updated dependencies [921e449b4] + - @hyperlane-xyz/sdk@3.15.1 + - @hyperlane-xyz/utils@3.15.1 + ## 3.15.0 ### Minor Changes diff --git a/typescript/cli/package.json b/typescript/cli/package.json index aaa8fe0e8..77531e30f 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/cli", - "version": "3.15.0", + "version": "3.15.1", "description": "A command-line utility for common Hyperlane operations", "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.15.0", - "@hyperlane-xyz/utils": "3.15.0", + "@hyperlane-xyz/sdk": "3.15.1", + "@hyperlane-xyz/utils": "3.15.1", "@inquirer/prompts": "^3.0.0", "asn1.js": "^5.4.1", "bignumber.js": "^9.1.1", diff --git a/typescript/cli/src/version.ts b/typescript/cli/src/version.ts index eb5b8185d..871417df1 100644 --- a/typescript/cli/src/version.ts +++ b/typescript/cli/src/version.ts @@ -1 +1 @@ -export const VERSION = '3.15.0'; +export const VERSION = '3.15.1'; diff --git a/typescript/helloworld/CHANGELOG.md b/typescript/helloworld/CHANGELOG.md index 1ea1e9cc3..7b62ae8f6 100644 --- a/typescript/helloworld/CHANGELOG.md +++ b/typescript/helloworld/CHANGELOG.md @@ -1,5 +1,16 @@ # @hyperlane-xyz/helloworld +## 3.15.1 + +### Patch Changes + +- 6620fe636: fix: `TokenRouter.transferRemote` with hook overrides +- Updated dependencies [6620fe636] +- Updated dependencies [acaa22cd9] +- Updated dependencies [921e449b4] + - @hyperlane-xyz/core@3.15.1 + - @hyperlane-xyz/sdk@3.15.1 + ## 3.15.0 ### Patch Changes diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index 22138b9bc..f039a6893 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -1,11 +1,11 @@ { "name": "@hyperlane-xyz/helloworld", "description": "A basic skeleton of an Hyperlane app", - "version": "3.15.0", + "version": "3.15.1", "dependencies": { - "@hyperlane-xyz/core": "3.15.0", + "@hyperlane-xyz/core": "3.15.1", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.15.0", + "@hyperlane-xyz/sdk": "3.15.1", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" }, diff --git a/typescript/infra/CHANGELOG.md b/typescript/infra/CHANGELOG.md index ed68044f8..8d4e38701 100644 --- a/typescript/infra/CHANGELOG.md +++ b/typescript/infra/CHANGELOG.md @@ -1,5 +1,16 @@ # @hyperlane-xyz/infra +## 3.15.1 + +### Patch Changes + +- Updated dependencies [6620fe636] +- Updated dependencies [acaa22cd9] +- Updated dependencies [921e449b4] + - @hyperlane-xyz/helloworld@3.15.1 + - @hyperlane-xyz/sdk@3.15.1 + - @hyperlane-xyz/utils@3.15.1 + ## 3.15.0 ### Patch Changes diff --git a/typescript/infra/package.json b/typescript/infra/package.json index daede08e4..33b170676 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/infra", "description": "Infrastructure utilities for the Hyperlane Network", - "version": "3.15.0", + "version": "3.15.1", "dependencies": { "@arbitrum/sdk": "^3.0.0", "@aws-sdk/client-iam": "^3.74.0", @@ -13,10 +13,10 @@ "@ethersproject/hardware-wallets": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@google-cloud/secret-manager": "^5.5.0", - "@hyperlane-xyz/helloworld": "3.15.0", + "@hyperlane-xyz/helloworld": "3.15.1", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.15.0", - "@hyperlane-xyz/utils": "3.15.0", + "@hyperlane-xyz/sdk": "3.15.1", + "@hyperlane-xyz/utils": "3.15.1", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@solana/web3.js": "^1.78.0", "asn1.js": "5.4.1", diff --git a/typescript/sdk/CHANGELOG.md b/typescript/sdk/CHANGELOG.md index 3810b575d..d99902777 100644 --- a/typescript/sdk/CHANGELOG.md +++ b/typescript/sdk/CHANGELOG.md @@ -1,5 +1,15 @@ # @hyperlane-xyz/sdk +## 3.15.1 + +### Patch Changes + +- acaa22cd9: Do not consider xERC20 a collateral standard to fix fungibility checking logic while maintaining mint limit checking +- 921e449b4: Support priorityFee fetching from RPC and some better logging +- Updated dependencies [6620fe636] + - @hyperlane-xyz/core@3.15.1 + - @hyperlane-xyz/utils@3.15.1 + ## 3.15.0 ### Minor Changes diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index 0b74f6a0c..ba63cab43 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/sdk", "description": "The official SDK for the Hyperlane Network", - "version": "3.15.0", + "version": "3.15.1", "dependencies": { "@aws-sdk/client-s3": "^3.74.0", "@cosmjs/cosmwasm-stargate": "^0.31.3", "@cosmjs/stargate": "^0.31.3", - "@hyperlane-xyz/core": "3.15.0", - "@hyperlane-xyz/utils": "3.15.0", + "@hyperlane-xyz/core": "3.15.1", + "@hyperlane-xyz/utils": "3.15.1", "@safe-global/api-kit": "1.3.0", "@safe-global/protocol-kit": "1.3.0", "@solana/spl-token": "^0.3.8", diff --git a/typescript/utils/CHANGELOG.md b/typescript/utils/CHANGELOG.md index a796ccac6..a11397181 100644 --- a/typescript/utils/CHANGELOG.md +++ b/typescript/utils/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/utils +## 3.15.1 + ## 3.15.0 ## 3.14.0 diff --git a/typescript/utils/package.json b/typescript/utils/package.json index c7f4b7ec0..e02d1c1df 100644 --- a/typescript/utils/package.json +++ b/typescript/utils/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/utils", "description": "General utilities and types for the Hyperlane network", - "version": "3.15.0", + "version": "3.15.1", "dependencies": { "@cosmjs/encoding": "^0.31.3", "@solana/web3.js": "^1.78.0", diff --git a/yarn.lock b/yarn.lock index 577194fa9..529e0c667 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5684,8 +5684,8 @@ __metadata: "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.15.0" - "@hyperlane-xyz/utils": "npm:3.15.0" + "@hyperlane-xyz/sdk": "npm:3.15.1" + "@hyperlane-xyz/utils": "npm:3.15.1" "@inquirer/prompts": "npm:^3.0.0" "@types/mocha": "npm:^10.0.1" "@types/node": "npm:^18.14.5" @@ -5713,12 +5713,12 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/core@npm:3.15.0, @hyperlane-xyz/core@workspace:solidity": +"@hyperlane-xyz/core@npm:3.15.1, @hyperlane-xyz/core@workspace:solidity": version: 0.0.0-use.local resolution: "@hyperlane-xyz/core@workspace:solidity" dependencies: "@eth-optimism/contracts": "npm:^0.6.0" - "@hyperlane-xyz/utils": "npm:3.15.0" + "@hyperlane-xyz/utils": "npm:3.15.1" "@layerzerolabs/lz-evm-oapp-v2": "npm:2.0.2" "@layerzerolabs/solidity-examples": "npm:^1.1.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" @@ -5769,13 +5769,13 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/helloworld@npm:3.15.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": +"@hyperlane-xyz/helloworld@npm:3.15.1, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": version: 0.0.0-use.local resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: - "@hyperlane-xyz/core": "npm:3.15.0" + "@hyperlane-xyz/core": "npm:3.15.1" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.15.0" + "@hyperlane-xyz/sdk": "npm:3.15.1" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@openzeppelin/contracts-upgradeable": "npm:^4.9.3" @@ -5822,10 +5822,10 @@ __metadata: "@ethersproject/hardware-wallets": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.2" "@google-cloud/secret-manager": "npm:^5.5.0" - "@hyperlane-xyz/helloworld": "npm:3.15.0" + "@hyperlane-xyz/helloworld": "npm:3.15.1" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.15.0" - "@hyperlane-xyz/utils": "npm:3.15.0" + "@hyperlane-xyz/sdk": "npm:3.15.1" + "@hyperlane-xyz/utils": "npm:3.15.1" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-etherscan": "npm:^3.0.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" @@ -5885,15 +5885,15 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/sdk@npm:3.15.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": +"@hyperlane-xyz/sdk@npm:3.15.1, @hyperlane-xyz/sdk@workspace:typescript/sdk": version: 0.0.0-use.local resolution: "@hyperlane-xyz/sdk@workspace:typescript/sdk" dependencies: "@aws-sdk/client-s3": "npm:^3.74.0" "@cosmjs/cosmwasm-stargate": "npm:^0.31.3" "@cosmjs/stargate": "npm:^0.31.3" - "@hyperlane-xyz/core": "npm:3.15.0" - "@hyperlane-xyz/utils": "npm:3.15.0" + "@hyperlane-xyz/core": "npm:3.15.1" + "@hyperlane-xyz/utils": "npm:3.15.1" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@safe-global/api-kit": "npm:1.3.0" @@ -5961,7 +5961,7 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/utils@npm:3.15.0, @hyperlane-xyz/utils@workspace:typescript/utils": +"@hyperlane-xyz/utils@npm:3.15.1, @hyperlane-xyz/utils@workspace:typescript/utils": version: 0.0.0-use.local resolution: "@hyperlane-xyz/utils@workspace:typescript/utils" dependencies: From 6171d82c82e60f911f2b52c98144b98caf2c8789 Mon Sep 17 00:00:00 2001 From: Ayene <2958807+ayenesimo1i@users.noreply.github.com> Date: Tue, 18 Jun 2024 13:58:36 +0300 Subject: [PATCH 15/46] chore: fix broken links (#3970) ### Description changed links pointing to Solana docs due to migration to different repository --- rust/sealevel/libraries/ecdsa-signature/Cargo.toml | 2 +- rust/sealevel/libraries/message-recipient-interface/Cargo.toml | 2 +- rust/sealevel/programs/hyperlane-sealevel-igp/Cargo.toml | 2 +- rust/sealevel/programs/mailbox/Cargo.toml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/sealevel/libraries/ecdsa-signature/Cargo.toml b/rust/sealevel/libraries/ecdsa-signature/Cargo.toml index ddb511b40..7390610a0 100644 --- a/rust/sealevel/libraries/ecdsa-signature/Cargo.toml +++ b/rust/sealevel/libraries/ecdsa-signature/Cargo.toml @@ -11,7 +11,7 @@ thiserror.workspace = true hyperlane-core = { path = "../../../hyperlane-core" } # Required to allow dependencies `getrandom` but to preserve determinism required by programs, see -# https://github.com/solana-labs/solana/blob/master/docs/src/developing/on-chain-programs/developing-rust.md#depending-on-rand +# https://github.com/solana-foundation/developer-content/blob/main/docs/programs/lang-rust.md#depending-on-rand getrandom = { workspace = true, features = ["custom"] } [lib] diff --git a/rust/sealevel/libraries/message-recipient-interface/Cargo.toml b/rust/sealevel/libraries/message-recipient-interface/Cargo.toml index 1cdec684d..de95c312c 100644 --- a/rust/sealevel/libraries/message-recipient-interface/Cargo.toml +++ b/rust/sealevel/libraries/message-recipient-interface/Cargo.toml @@ -12,7 +12,7 @@ spl-type-length-value.workspace = true hyperlane-core = { path = "../../../hyperlane-core" } # Required to allow dependencies `getrandom` but to preserve determinism required by programs, see -# https://github.com/solana-labs/solana/blob/master/docs/src/developing/on-chain-programs/developing-rust.md#depending-on-rand +# https://github.com/solana-foundation/developer-content/blob/main/docs/programs/lang-rust.md#depending-on-rand getrandom = { workspace = true, features = ["custom"] } [lib] diff --git a/rust/sealevel/programs/hyperlane-sealevel-igp/Cargo.toml b/rust/sealevel/programs/hyperlane-sealevel-igp/Cargo.toml index 442ada46e..31146408c 100644 --- a/rust/sealevel/programs/hyperlane-sealevel-igp/Cargo.toml +++ b/rust/sealevel/programs/hyperlane-sealevel-igp/Cargo.toml @@ -21,7 +21,7 @@ num-derive.workspace = true num-traits.workspace = true thiserror.workspace = true # Required to allow dependencies `getrandom` but to preserve determinism required by programs, see -# https://github.com/solana-labs/solana/blob/master/docs/src/developing/on-chain-programs/developing-rust.md#depending-on-rand +# https://github.com/solana-foundation/developer-content/blob/main/docs/programs/lang-rust.md#depending-on-rand getrandom = { workspace = true, features = ["custom"] } serde = { workspace = true, optional = true } diff --git a/rust/sealevel/programs/mailbox/Cargo.toml b/rust/sealevel/programs/mailbox/Cargo.toml index 179891f42..4931fa315 100644 --- a/rust/sealevel/programs/mailbox/Cargo.toml +++ b/rust/sealevel/programs/mailbox/Cargo.toml @@ -17,7 +17,7 @@ solana-program.workspace = true thiserror.workspace = true spl-noop.workspace = true # Required to allow dependencies `getrandom` but to preserve determinism required by programs, see -# https://github.com/solana-labs/solana/blob/master/docs/src/developing/on-chain-programs/developing-rust.md#depending-on-rand +# https://github.com/solana-foundation/developer-content/blob/main/docs/programs/lang-rust.md#depending-on-rand getrandom = { workspace = true, features = ["custom"] } proc-macro-crate = "~1.2.1" # TODO: remove this dependency once solana supports rust >=1.64 From 5cc64eb095486606b3444822a495f60df67b29b8 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Tue, 18 Jun 2024 12:31:39 +0100 Subject: [PATCH 16/46] feat: deploy to new chains (fraxtal, linea, sei) (#3887) https://github.com/hyperlane-xyz/issues/issues/1279 - adds `fraxtal`, `linea`, `sei` - supports `osmosis` as a remote - ~drive-by hack to skip reconfiguring the same gas oracle (cc @tkporter)~ - drive-by fix to bring the logic of estimating tx + adding 10% buffer into the ism factory (as originally seen in the multiprovider handleDeploy function) - drive-by fix for creating custom safes - drive-by support of `osmosis` as a remote chain - drive-by addition of `osmosis` to the rust agent --------- Signed-off-by: Paul Balaji Co-authored-by: Trevor Porter Co-authored-by: nambrot --- .changeset/cuddly-ways-grin.md | 7 + .changeset/five-eels-reflect.md | 6 + .changeset/tall-jeans-camp.md | 5 + .github/workflows/test.yml | 5 + .../m20230309_000001_create_table_domain.rs | 24 + rust/config/mainnet_config.json | 282 +- rust/hyperlane-core/src/chain.rs | 15 +- .../config/environments/mainnet3/agent.ts | 20 +- .../mainnet3/aw-validators/hyperlane.json | 12 + .../mainnet3/aw-validators/rc.json | 9 + .../config/environments/mainnet3/chains.ts | 17 + .../mainnet3/core/verification.json | 4544 +++++++++++++---- .../config/environments/mainnet3/funding.ts | 8 +- .../environments/mainnet3/gasPrices.json | 58 +- .../config/environments/mainnet3/index.ts | 9 +- .../mainnet3/ism/verification.json | 186 + .../mainnet3/supportedChainNames.ts | 4 + .../environments/mainnet3/tokenPrices.json | 48 +- .../environments/mainnet3/validators.ts | 54 + typescript/infra/config/registry.ts | 2 +- .../infra/scripts/announce-validators.ts | 4 +- typescript/infra/scripts/check-deploy.ts | 15 +- typescript/infra/scripts/deploy.ts | 26 +- typescript/infra/scripts/print-gas-prices.ts | 37 +- .../infra/scripts/print-token-prices.ts | 12 +- typescript/infra/src/config/chain.ts | 1 - .../infra/src/govern/HyperlaneAppGovernor.ts | 72 +- typescript/sdk/src/aws/validator.ts | 7 +- typescript/sdk/src/consts/multisigIsm.ts | 30 + typescript/sdk/src/ism/HyperlaneIsmFactory.ts | 23 +- typescript/sdk/src/utils/gnosisSafe.js | 12 +- 31 files changed, 4464 insertions(+), 1090 deletions(-) create mode 100644 .changeset/cuddly-ways-grin.md create mode 100644 .changeset/five-eels-reflect.md create mode 100644 .changeset/tall-jeans-camp.md diff --git a/.changeset/cuddly-ways-grin.md b/.changeset/cuddly-ways-grin.md new file mode 100644 index 000000000..8c950149c --- /dev/null +++ b/.changeset/cuddly-ways-grin.md @@ -0,0 +1,7 @@ +--- +'@hyperlane-xyz/infra': minor +--- + +Add support for new chains: linea, fraxtal, sei. +Support osmosis remote. +Drive-by fix to always fetch explorer API keys when running deploy script. diff --git a/.changeset/five-eels-reflect.md b/.changeset/five-eels-reflect.md new file mode 100644 index 000000000..26a64bda6 --- /dev/null +++ b/.changeset/five-eels-reflect.md @@ -0,0 +1,6 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Add validator addresses for linea, fraxtal, sei. +Estimate gas and add 10% buffer inside HyperlaneIsmFactory as well. diff --git a/.changeset/tall-jeans-camp.md b/.changeset/tall-jeans-camp.md new file mode 100644 index 000000000..37e315834 --- /dev/null +++ b/.changeset/tall-jeans-camp.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/infra': patch +--- + +Allow selecting a specific chain to govern in check-deploy script diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b83bc9c35..e01741aab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -172,6 +172,7 @@ jobs: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} + fail-on-cache-miss: true - name: Unit Tests run: yarn test:ci @@ -215,6 +216,7 @@ jobs: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} + fail-on-cache-miss: true - name: Generate ${{ matrix.environment }} agent config run: | @@ -292,6 +294,7 @@ jobs: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} + fail-on-cache-miss: true - name: cargo-cache uses: actions/cache@v4 @@ -396,6 +399,7 @@ jobs: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} + fail-on-cache-miss: true - name: cargo-cache uses: actions/cache@v4 @@ -447,6 +451,7 @@ jobs: path: | ${{ env.REGISTRY_URI_ABSOLUTE }} key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} + fail-on-cache-miss: true - name: Fork test ${{ matrix.environment }} ${{ matrix.module }} ${{ matrix.chain }} deployment run: cd typescript/infra && ./fork.sh ${{ matrix.environment }} ${{ matrix.module }} ${{ matrix.chain }} 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 305f43bad..578548e95 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 @@ -94,6 +94,14 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: false, is_deprecated: false, }, + RawDomain { + name: "fraxtal", + token: "frxETH", + domain: 252, + chain_id: 252, + is_test_net: false, + is_deprecated: false, + }, RawDomain { name: "fuji", token: "AVAX", @@ -110,6 +118,14 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: false, is_deprecated: false, }, + RawDomain { + name: "linea", + token: "ETH", + domain: 59144, + chain_id: 59144, + is_test_net: false, + is_deprecated: false, + }, RawDomain { name: "mantapacific", token: "ETH", @@ -182,6 +198,14 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: true, is_deprecated: false, }, + RawDomain { + name: "sei", + token: "SEI", + domain: 1329, + chain_id: 1329, + is_test_net: false, + is_deprecated: false, + }, RawDomain { name: "sepolia", token: "ETH", diff --git a/rust/config/mainnet_config.json b/rust/config/mainnet_config.json index c4c494f46..5be8bfff0 100644 --- a/rust/config/mainnet_config.json +++ b/rust/config/mainnet_config.json @@ -19,7 +19,7 @@ "chainId": 888888888, "displayName": "Ancient8", "domainId": 888888888, - "domainRoutingIsm": "0xB6F0f1267B01C27326F61a4B4fe2c73751802685", + "domainRoutingIsm": "0x477145b11E1a71fEb658d96A0E27F19495121504", "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0x5E01d8F34b629E3f92d69546bbc4142A7Adee7e9", "gasCurrencyCoinGeckoId": "ethereum", @@ -27,7 +27,7 @@ "from": 2507127 }, "interchainGasPaymaster": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", - "interchainSecurityModule": "0xBd3C7253F08c040eDB9c54e7CD4f8a5fd1eb935D", + "interchainSecurityModule": "0xa10686c87d47C8b78c846E77BE2f96607C7c44F4", "isTestnet": false, "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x811808Dd29ba8B0FC6C0ec0b5537035E59745162", @@ -38,7 +38,7 @@ "symbol": "ETH" }, "pausableHook": "0x66DC49405Ae2956f7E87FEAa9fE8f506C8987462", - "pausableIsm": "0xcf678903c003651DB0bb933820259A16ea9d95e4", + "pausableIsm": "0xF8DbA46fF9D8ef650052c89CA2Df793FaBc375F9", "protocol": "ethereum", "protocolFee": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", @@ -48,7 +48,7 @@ } ], "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", - "staticAggregationIsm": "0xBd3C7253F08c040eDB9c54e7CD4f8a5fd1eb935D", + "staticAggregationIsm": "0xc6ec1364d1ce3E963Fa65A0bDF57eC722478e1FB", "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", @@ -86,7 +86,7 @@ "interchainAccountIsm": "0xfa8bfcE55B3A0631dF38257615cEF7FCD3523A48", "interchainAccountRouter": "0xCD0CFFf6eFD943b4b81f2c15847730dbcD30e3aE", "interchainGasPaymaster": "0x3b6044acd6767f017e99318AA6Ef93b7B06A5a22", - "interchainSecurityModule": "0x96845a0469363f90779f6D5cd49D79bDDAc69429", + "interchainSecurityModule": "0xd12C017529BE32c23150313F1E473B76e6B19773", "mailbox": "0x979Ca5202784112f4738403dBec5D0F3B9daabB9", "merkleTreeHook": "0x748040afB89B8FdBb992799808215419d36A0930", "name": "arbitrum", @@ -152,7 +152,7 @@ "interchainAccountIsm": "0x786c26C1857032617c215f265509d6E44e44Bfe3", "interchainAccountRouter": "0xA967A6CE0e73fAf672843DECaA372511996E8852", "interchainGasPaymaster": "0x95519ba800BBd0d34eeAE026fEc620AD978176C0", - "interchainSecurityModule": "0xe7a61510EA7197281b49e5bdf1798608d5132595", + "interchainSecurityModule": "0xB7D96FcD923267640BcffC7c3F23530E6C7A4209", "mailbox": "0xFf06aFcaABaDDd1fb08371f9ccA15D73D51FeBD6", "merkleTreeHook": "0x84eea61D679F42D92145fA052C89900CBAccE95A", "name": "avalanche", @@ -218,7 +218,7 @@ "interchainAccountIsm": "0x861908E6c8F992537F557da5Fb5876836036b347", "interchainAccountRouter": "0xa85F9e4fdA2FFF1c07f2726a630443af3faDF830", "interchainGasPaymaster": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", - "interchainSecurityModule": "0x77bE0b5aE400675063Ce2B2B0d692D9341f4b193", + "interchainSecurityModule": "0xe7aaFbA826B0bDC60aD09b7b8cA8175c9A89cE0b", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x19dc38aeae620380430C200a6E990D5Af5480117", "name": "base", @@ -275,11 +275,12 @@ "domainRoutingIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "fallbackRoutingHook": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", "gasCurrencyCoinGeckoId": "ethereum", + "gnosisSafeTransactionServiceUrl": "https://transaction.blast-safe.io", "index": { "from": 2496427 }, "interchainGasPaymaster": "0xB3fCcD379ad66CED0c91028520C64226611A48c9", - "interchainSecurityModule": "0x208263bB303B2a737642fB13C765F106a2591be8", + "interchainSecurityModule": "0xdE516712D58166257E03254BD596CA726417a837", "mailbox": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", "merkleTreeHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", "name": "blast", @@ -338,7 +339,7 @@ "interchainAccountIsm": "0xB274Bbbc1df5f1d1763216A93d473fde6f5de043", "interchainAccountRouter": "0x4BBd67dC995572b40Dc6B3eB6CdE5185a5373868", "interchainGasPaymaster": "0x78E25e7f84416e69b9339B0A6336EB6EFfF6b451", - "interchainSecurityModule": "0xfA360ff588623A026BF19A1801F2A8F1f045fa33", + "interchainSecurityModule": "0x4C23e778aF68a54cb59A44581b90E78b35763C83", "mailbox": "0x2971b9Aec44bE4eb673DF1B88cDB57b96eefe8a4", "merkleTreeHook": "0xFDb9Cd5f9daAA2E4474019405A328a88E7484f26", "name": "bsc", @@ -411,7 +412,7 @@ "interchainAccountIsm": "0x30a8DEc5318e2aAa9ad5b069fC606c4CfF6f5676", "interchainAccountRouter": "0x4ED23E3885e1651E62564F78817D91865beba575", "interchainGasPaymaster": "0x571f1435613381208477ac5d6974310d88AC7cB7", - "interchainSecurityModule": "0x0dcb01D4ABfa73fadB17C4B0e8cd52A38BD52c66", + "interchainSecurityModule": "0x1b90cCF49e45a87F751b344864e4246D1a57a100", "mailbox": "0x50da3B3907A08a24fe4999F4Dcf337E8dC7954bb", "merkleTreeHook": "0x04dB778f05854f26E67e0a66b740BBbE9070D366", "name": "celo", @@ -476,7 +477,7 @@ "interchainAccountIsm": "0x609707355a53d2aAb6366f48E2b607C599D26B29", "interchainAccountRouter": "0x8dBae9B1616c46A20591fE0006Bf015E28ca5cC9", "interchainGasPaymaster": "0x9e6B1022bE9BBF5aFd152483DAD9b88911bC8611", - "interchainSecurityModule": "0x8CE0c6cAf18DbF5882b35F26E28412f3E9AbDeca", + "interchainSecurityModule": "0x355F2c5532521ca6Df8A908641Ed69eD0619466d", "mailbox": "0xc005dc82818d67AF737725bD4bf75435d065D239", "merkleTreeHook": "0x48e6c30B97748d1e2e03bf3e9FbE3890ca5f8CCA", "name": "ethereum", @@ -513,6 +514,60 @@ }, "validatorAnnounce": "0xCe74905e51497b4adD3639366708b821dcBcff96" }, + "fraxtal": { + "aggregationHook": "0xD7ff06cDd83642D648baF0d36f77e79349120dA4", + "blockExplorers": [ + { + "apiUrl": "https://api.fraxscan.com/api", + "family": "etherscan", + "name": "Fraxscan", + "url": "https://fraxscan.com" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 2, + "reorgPeriod": 1 + }, + "chainId": 252, + "displayName": "Fraxtal", + "domainId": 252, + "domainRoutingIsm": "0x0CA20946c1b7367Bd47C0a35E8feD23a4Ff59B9a", + "domainRoutingIsmFactory": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "fallbackRoutingHook": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", + "gasCurrencyCoinGeckoId": "frax-ether", + "index": { + "from": 5350807 + }, + "interchainGasPaymaster": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "interchainSecurityModule": "0xf1465DB845d0978e74d45EF195734b43bB739094", + "mailbox": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3", + "merkleTreeHook": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147", + "name": "fraxtal", + "nativeToken": { + "decimals": 18, + "name": "Frax Ether", + "symbol": "frxETH" + }, + "pausableHook": "0x4E1c88DD261BEe2941e6c1814597e30F53330428", + "pausableIsm": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", + "protocol": "ethereum", + "protocolFee": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807", + "proxyAdmin": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", + "rpcUrls": [ + { + "http": "https://rpc.frax.com" + } + ], + "staticAggregationHookFactory": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "staticAggregationIsm": "0xcA26D50602efA9d835b01A142Ae218f59aa60433", + "staticAggregationIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticMerkleRootMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "testRecipient": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05", + "validatorAnnounce": "0x1956848601549de5aa0c887892061fA5aB4f6fC4" + }, "gnosis": { "aggregationHook": "0xdD1FA1C12496474c1dDC67a658Ba81437F818861", "blockExplorers": [ @@ -542,7 +597,7 @@ "interchainAccountIsm": "0x5a56dff3D92D635372718f86e6dF09C1129CFf53", "interchainAccountRouter": "0x5E59EBAedeB691408EBAcF6C37218fa2cFcaC9f2", "interchainGasPaymaster": "0xDd260B99d302f0A3fF885728c086f729c06f227f", - "interchainSecurityModule": "0x5DB7edF8C1CF91e34895dB2e4b28d8b9C68ddC7B", + "interchainSecurityModule": "0x613D9ab2dd6cCFa2763d86FdEE3d96C4Ef4C2E96", "mailbox": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", "merkleTreeHook": "0x2684C6F89E901987E1FdB7649dC5Be0c57C61645", "name": "gnosis", @@ -592,11 +647,13 @@ "reorgPeriod": 0 }, "chainId": 2525, + "customHook": "0xA376b27212D608324808923Add679A2c9FAFe9Da", "displayName": "Injective EVM", "displayNameShort": "inEVM", "domainId": 2525, "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0xA376b27212D608324808923Add679A2c9FAFe9Da", "gasCurrencyCoinGeckoId": "injective-protocol", "index": { "from": 18972465 @@ -604,7 +661,7 @@ "interchainAccountIsm": "0x31894E7a734540B343d67E491148EB4FC9f7A45B", "interchainAccountRouter": "0x4E55aDA3ef1942049EA43E904EB01F4A0a9c39bd", "interchainGasPaymaster": "0x19dc38aeae620380430C200a6E990D5Af5480117", - "interchainSecurityModule": "0x440f7AD246F3e75df88a6338E8A33e91DA4B2B05", + "interchainSecurityModule": "0xC1a7a7b15d2B243f7c6Dbbdd6e8A2C2434cdf7BF", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65", "name": "inevm", @@ -629,6 +686,7 @@ "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", "storageGasOracle": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "testRecipient": "0x28291a7062afA569104bEd52F7AcCA3dD2FafD11", "timelockController": "0x0000000000000000000000000000000000000000", "validatorAnnounce": "0x15ab173bDB6832f9b64276bA128659b0eD77730B" }, @@ -684,6 +742,61 @@ "slip44": 118, "validatorAnnounce": "0x1fb225b2fcfbe75e614a1d627de97ff372242eed" }, + "linea": { + "aggregationHook": "0x43fF73dF1E170D076D9Ed30d4C6922A9D34322dE", + "blockExplorers": [ + { + "apiUrl": "https://api.lineascan.build/api", + "family": "etherscan", + "name": "LineaScan", + "url": "https://lineascan.build" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 3, + "reorgPeriod": 1 + }, + "chainId": 59144, + "displayName": "Linea", + "domainId": 59144, + "domainRoutingIsm": "0x6faCF71D804964Ca62f16e56DE74d7dF38FdC3F0", + "domainRoutingIsmFactory": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "fallbackRoutingHook": "0x4E1c88DD261BEe2941e6c1814597e30F53330428", + "gasCurrencyCoinGeckoId": "ethereum", + "gnosisSafeTransactionServiceUrl": "https://transaction.safe.linea.build", + "index": { + "from": 5154574 + }, + "interchainGasPaymaster": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "interchainSecurityModule": "0xF8aD4EB8aBA13ae546B8D01501c63e4543Ff0660", + "mailbox": "0x02d16BC51af6BfD153d67CA61754cF912E82C4d9", + "merkleTreeHook": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", + "name": "linea", + "nativeToken": { + "decimals": 18, + "name": "Ether", + "symbol": "ETH" + }, + "pausableHook": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "pausableIsm": "0x01aA8200936B475762Ee28D38B43a6cFe9076E52", + "protocol": "ethereum", + "protocolFee": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E", + "proxyAdmin": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", + "rpcUrls": [ + { + "http": "https://rpc.linea.build" + } + ], + "staticAggregationHookFactory": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "staticAggregationIsm": "0xF8aD4EB8aBA13ae546B8D01501c63e4543Ff0660", + "staticAggregationIsmFactory": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "staticMerkleRootMultisigIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticMessageIdMultisigIsmFactory": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "storageGasOracle": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "testRecipient": "0x273Bc6b01D9E88c064b6E5e409BdF998246AEF42", + "validatorAnnounce": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05" + }, "mantapacific": { "aggregationHook": "0x8464aF853363B8d6844070F68b0AB34Cb6523d0F", "blockExplorers": [ @@ -714,7 +827,7 @@ "interchainAccountIsm": "0xA34ceDf9068C5deE726C67A4e1DCfCc2D6E2A7fD", "interchainAccountRouter": "0x0f6fF770Eda6Ba1433C39cCf47d4059b254224Aa", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0xEda7cCD2A8CF717dc997D0002e363e4D10bF5c0d", + "interchainSecurityModule": "0x83319BD846D54E49C850027191D094D5E9114339", "isTestnet": false, "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", @@ -725,6 +838,7 @@ "symbol": "ETH" }, "pausableHook": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E", + "pausableIsm": "0x6119B76720CcfeB3D256EC1b91218EEfFD6756E1", "protocol": "ethereum", "protocolFee": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", @@ -734,6 +848,7 @@ } ], "staticAggregationHookFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticAggregationIsm": "0x845A3feB4BcdC32a457c4051F67d3950FC6Fd1d1", "staticAggregationIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "staticMerkleRootMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", "staticMessageIdMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", @@ -744,6 +859,7 @@ "validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9" }, "mode": { + "aggregationHook": "0x80D80cfBa98dD2d456ECd43Dcc1f852D5C4EeD7a", "blockExplorers": [ { "apiUrl": "https://explorer.mode.network/api", @@ -760,14 +876,16 @@ "chainId": 34443, "displayName": "Mode", "domainId": 34443, + "domainRoutingIsm": "0xB6F0f1267B01C27326F61a4B4fe2c73751802685", "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", "gasCurrencyCoinGeckoId": "ethereum", + "gnosisSafeTransactionServiceUrl": "https://transaction-mode.safe.optimism.io", "index": { "from": 6817759 }, "interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "interchainSecurityModule": "0x8dfE6790DbB2Ecc1bEdb0eECfc1Ff467Ae5d8C89", + "interchainSecurityModule": "0xEe9443bc2Df7C10327077c605120CDd95e8Ca75F", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", "name": "mode", @@ -777,6 +895,7 @@ "symbol": "ETH" }, "pausableHook": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", + "pausableIsm": "0xe243Fb51d91c5DE62afAbE44F7Ed2D4DC51668C6", "protocol": "ethereum", "protocolFee": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4", "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", @@ -786,6 +905,7 @@ } ], "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x6BdA2074b7edCE8c4e4cD3D35517267468Aed93F", "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", @@ -812,6 +932,7 @@ "chainId": 1284, "displayName": "Moonbeam", "domainId": 1284, + "domainRoutingIsm": "0x7Faa23CEdA03364A79e05259e07D5E358E7400F7", "domainRoutingIsmFactory": "0x8061Af3A459093540d17823D651BC5E2A92669a7", "fallbackRoutingHook": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", "gnosisSafeTransactionServiceUrl": "https://transaction.multisig.moonbeam.network", @@ -821,7 +942,7 @@ "interchainAccountIsm": "0x799eA6f430f5CA901b59335fFC2fA10531106009", "interchainAccountRouter": "0x6b142f596FFc761ac3fFaaC1ecaDe54f4EE09977", "interchainGasPaymaster": "0x14760E32C0746094cF14D97124865BC7F0F7368F", - "interchainSecurityModule": "0x373836DFa82f2D27ec79Ca32A197Aa1665F0E1e9", + "interchainSecurityModule": "0x3db9D7c5cD0Aa312AB1262C711C10DeBA8303388", "mailbox": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", "merkleTreeHook": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", "name": "moonbeam", @@ -831,6 +952,7 @@ "symbol": "GLMR" }, "pausableHook": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "pausableIsm": "0x58062b26193B28000Cd991Df767f3A2674502de8", "protocol": "ethereum", "protocolFee": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", "proxyAdmin": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", @@ -840,6 +962,7 @@ } ], "staticAggregationHookFactory": "0x59cC3E7A49DdC4893eB8754c7908f96072A7DbE8", + "staticAggregationIsm": "0xDAAfa04d38d95f5B8418786AE0F7ee5B962ee92B", "staticAggregationIsmFactory": "0x40c6Abcb6A2CdC8882d4bEcaC47927005c7Bb8c2", "staticMerkleRootMultisigIsmFactory": "0xE2f485bc031Feb5a4C41C1967bf028653d75f0C3", "staticMessageIdMultisigIsmFactory": "0x84Df48F8f241f11d0fA302d09d73030429Bd9C73", @@ -935,6 +1058,7 @@ "chainId": 10, "displayName": "Optimism", "domainId": 10, + "domainRoutingIsm": "0xDFfFCA9320E2c7530c61c4946B4c2376A1901dF2", "domainRoutingIsmFactory": "0xD2e905108c5e44dADA680274740f896Ea96Cf2Fb", "fallbackRoutingHook": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", "gasCurrencyCoinGeckoId": "ethereum", @@ -945,7 +1069,7 @@ "interchainAccountIsm": "0x0389faCac114023C123E22F3E54394944cAbcb48", "interchainAccountRouter": "0x33Ef006E7083BB38E0AFe3C3979F4e9b84415bf1", "interchainGasPaymaster": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", - "interchainSecurityModule": "0x04938856bE60c8e734ffDe5f720E2238302BE8D2", + "interchainSecurityModule": "0x32Ce76b9FfD0BbA0e43a2C27c2cAc90E82C48B95", "mailbox": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", "merkleTreeHook": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", "name": "optimism", @@ -955,6 +1079,7 @@ "symbol": "ETH" }, "pausableHook": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "pausableIsm": "0xD84D8114cCfa5c2403E56aBf754da529430704F0", "protocol": "ethereum", "protocolFee": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", "proxyAdmin": "0xE047cb95FB3b7117989e911c6afb34771183fC35", @@ -964,6 +1089,7 @@ } ], "staticAggregationHookFactory": "0x15DEeAB8dECDe553bb0B1F9C00984cbcae1af3D7", + "staticAggregationIsm": "0xdF6316DF574974110DCC94BB4E520B09Fe3CbEf9", "staticAggregationIsmFactory": "0x7491843F3A5Ba24E0f17a22645bDa04A1Ae2c584", "staticMerkleRootMultisigIsmFactory": "0xCA6Cb9Bc3cfF9E11003A06617cF934B684Bc78BC", "staticMessageIdMultisigIsmFactory": "0xAa4Be20E9957fE21602c74d7C3cF5CB1112EA9Ef", @@ -975,13 +1101,25 @@ }, "osmosis": { "bech32Prefix": "osmo", + "blockExplorers": [ + { + "apiUrl": "https://www.mintscan.io/osmosis", + "family": "other", + "name": "Mintscan", + "url": "https://www.mintscan.io/osmosis" + } + ], "blocks": { + "confirmations": 1, + "estimateBlockTime": 3, "reorgPeriod": 1 }, "canonicalAsset": "uosmo", "chainId": "osmosis-1", "contractAddressBytes": 32, - "domainId": "875", + "displayName": "Osmosis", + "domainId": 875, + "gasCurrencyCoinGeckoId": "osmosis", "gasPrice": { "amount": "0.025", "denom": "uosmo" @@ -992,18 +1130,32 @@ } ], "index": { + "chunk": 5, "from": 14389169 }, "interchainGasPaymaster": "0xd20a9dcf61939fc2fe6ad501b9457b1029b3cc7ab12ed72675ea2e10d831ee5d", + "isTestnet": false, "mailbox": "0x9493e39d85dd038022f97d88aba6bff98d98f9a016b4f2e498bf1d9898420172", "merkleTreeHook": "0x8920e062ee5ed8afccbc155d13ea9049296399ee41403655864fcd243edc7388", - "name": "osmosis1", + "name": "osmosis", + "nativeToken": { + "decimals": 6, + "denom": "uosmo", + "name": "Osmosis", + "symbol": "OSMO" + }, "protocol": "cosmos", + "restUrls": [ + { + "http": "https://osmosis-rest.publicnode.com" + } + ], "rpcUrls": [ { - "http": "https://osmosis-rpc.publicnode.com:443" + "http": "https://osmosis-rpc.publicnode.com" } ], + "slip44": 118, "validatorAnnounce": "0xaf867da5b09a20ee49161d57f99477c0c42d100f34eb53da0d2eb7fc6c257235" }, "polygon": { @@ -1035,7 +1187,7 @@ "interchainAccountIsm": "0x90384bC552e3C48af51Ef7D9473A9bF87431f5c7", "interchainAccountRouter": "0x5e80f3474825B61183c0F0f0726796F589082420", "interchainGasPaymaster": "0x0071740Bf129b05C4684abfbBeD248D80971cce2", - "interchainSecurityModule": "0xe289bD204Dbb4F3aaFA27Dbe5751C71e101CFD80", + "interchainSecurityModule": "0x1c39BD73C933c6B1b14685ABD28F996A6a0e306f", "mailbox": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", "merkleTreeHook": "0x73FbD25c3e817DC4B4Cd9d00eff6D83dcde2DfF6", "name": "polygon", @@ -1094,6 +1246,7 @@ "displayName": "Polygon zkEVM", "displayNameShort": "zkEVM", "domainId": 1101, + "domainRoutingIsm": "0x8b6862a784f634F4C8E1cbb04c9DA3dB637B7EaA", "domainRoutingIsmFactory": "0xe4057c5B0c43Dc18E36b08C39B419F190D29Ac2d", "fallbackRoutingHook": "0x01aE937A7B05d187bBCBE80F44F41879D3D335a4", "gasCurrencyCoinGeckoId": "ethereum", @@ -1104,7 +1257,7 @@ "interchainAccountIsm": "0xC49aF4965264FA7BB6424CE37aA06773ad177224", "interchainAccountRouter": "0xF15D70941dE2Bf95A23d6488eBCbedE0a444137f", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0xf2BEE9D2c15Ba9D7e06799B5912dE1F05533c141", + "interchainSecurityModule": "0xb7556707f04BEF8888294C18c447bE1e4446bF7D", "mailbox": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "name": "polygonzkevm", @@ -1114,6 +1267,7 @@ "symbol": "ETH" }, "pausableHook": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "pausableIsm": "0x784b9D0f4eF9fb8444DfB5d24AB221C9D1A85395", "protocol": "ethereum", "protocolFee": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", "proxyAdmin": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", @@ -1126,14 +1280,20 @@ } ], "staticAggregationHookFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "staticAggregationIsm": "0xAe7d2FA2aFc57Ce9F05930d403673A267b3efE50", "staticAggregationIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "staticMerkleRootMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", "staticMessageIdMultisigIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", "storageGasOracle": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "testRecipient": "0xD127D4549cb4A5B2781303a4fE99a10EAd13263A", "timelockController": "0x0000000000000000000000000000000000000000", + "transactionOverrides": { + "gasPrice": 1000000000 + }, "validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9" }, "redstone": { + "aggregationHook": "0x7bC13D23eD161E152a05c71D037b4642EA61B8eF", "blockExplorers": [ { "apiUrl": "https://explorer.redstone.xyz/api", @@ -1150,6 +1310,7 @@ "chainId": 690, "displayName": "Redstone", "domainId": 690, + "domainRoutingIsm": "0x5D1e7D7c5B9e6dDC8439F67F10c578f2A1084f6F", "domainRoutingIsmFactory": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", "fallbackRoutingHook": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", "gasCurrencyCoinGeckoId": "ethereum", @@ -1157,7 +1318,7 @@ "from": 1797579 }, "interchainGasPaymaster": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "interchainSecurityModule": "0xF4689C7fA4920C91a6EEEd59630C9C8da7a77D40", + "interchainSecurityModule": "0xD10AD7d927817558468Ce0F0ab1edEF8D230E2d8", "mailbox": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", "merkleTreeHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", "name": "redstone", @@ -1167,6 +1328,7 @@ "symbol": "ETH" }, "pausableHook": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "pausableIsm": "0xD53Fdbb7537aCa82bAf7cCA7204088f15b52796a", "protocol": "ethereum", "protocolFee": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "proxyAdmin": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", @@ -1176,6 +1338,7 @@ } ], "staticAggregationHookFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "staticAggregationIsm": "0x3Bb9244a2aBBb710c933e8D82Ff8F0C200F3c036", "staticAggregationIsmFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", "staticMerkleRootMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", "staticMessageIdMultisigIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", @@ -1201,10 +1364,11 @@ "chainId": 534352, "displayName": "Scroll", "domainId": 534352, + "domainRoutingIsm": "0x4d02AfFc3F030c887e2f914B8B67E0B845e034fD", "domainRoutingIsmFactory": "0xe03dad16074BC5EEA9A9311257BF02Eb0B6AAA2b", "fallbackRoutingHook": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", "gasCurrencyCoinGeckoId": "ethereum", - "gnosisSafeTransactionServiceUrl": "https://transaction.safe.scroll.xyz", + "gnosisSafeTransactionServiceUrl": "https://safe-transaction-scroll.safe.global", "index": { "chunk": 999, "from": 271840 @@ -1212,7 +1376,7 @@ "interchainAccountIsm": "0xb89c6ED617f5F46175E41551350725A09110bbCE", "interchainAccountRouter": "0x9629c28990F11c31735765A6FD59E1E1bC197DbD", "interchainGasPaymaster": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", - "interchainSecurityModule": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7", + "interchainSecurityModule": "0x0E6aFC8a7b5223cAD7a7c346da1B2e6ECBaA93f0", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", "name": "scroll", @@ -1222,6 +1386,7 @@ "symbol": "ETH" }, "pausableHook": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", + "pausableIsm": "0x11Fa12DBaCe771E293e19743feA342e378C6341F", "protocol": "ethereum", "protocolFee": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", @@ -1231,16 +1396,75 @@ } ], "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0xAC0F1820F1F3fEd26293B8714464ca431824f823", "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", "storageGasOracle": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "testRecipient": "0x674f4698d063cE4C0d604c88dD7D542De72f327f", "timelockController": "0x0000000000000000000000000000000000000000", "transactionOverrides": { "gasPrice": 2000000000 }, "validatorAnnounce": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638" }, + "sei": { + "aggregationHook": "0x40514BD46C57455933Be8BAedE96C4F0Ba3507D6", + "blockExplorers": [ + { + "apiUrl": "https://seitrace.com/pacific-1/api", + "family": "etherscan", + "name": "Seitrace", + "url": "https://seitrace.com" + } + ], + "blocks": { + "confirmations": 1, + "estimateBlockTime": 1, + "reorgPeriod": 1 + }, + "chainId": 1329, + "displayName": "Sei", + "domainId": 1329, + "domainRoutingIsm": "0xBD70Ea9D599a0FC8158B026797177773C3445730", + "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "fallbackRoutingHook": "0xB3fCcD379ad66CED0c91028520C64226611A48c9", + "gasCurrencyCoinGeckoId": "sei-network", + "index": { + "from": 80809403 + }, + "interchainGasPaymaster": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "interchainSecurityModule": "0x10FF77061869714E92E574FcE9025a419f5b999d", + "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "merkleTreeHook": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49", + "name": "sei", + "nativeToken": { + "decimals": 18, + "name": "Sei", + "symbol": "SEI" + }, + "pausableHook": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4", + "pausableIsm": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "protocol": "ethereum", + "protocolFee": "0x83c2DB237e93Ce52565AB110124f78fdf159E3f4", + "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "rpcUrls": [ + { + "http": "https://evm-rpc.sei-apis.com" + } + ], + "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x596eCC936068AeBD836e79D530043b868569a61B", + "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "storageGasOracle": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", + "testRecipient": "0xdB670e1a1e312BF17425b08cE55Bdf2cD8F8eD54", + "transactionOverrides": { + "gasPrice": 2000000000 + }, + "validatorAnnounce": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d" + }, "viction": { "aggregationHook": "0x5c7890FAf9c99dC55926F00d624D7Bc6D7ac6834", "blockExplorers": [ @@ -1270,7 +1494,7 @@ "interchainAccountIsm": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807", "interchainAccountRouter": "0x1956848601549de5aa0c887892061fA5aB4f6fC4", "interchainGasPaymaster": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "interchainSecurityModule": "0xf8F3AF5F6B8f319364c339c0b8cA5975481901eD", + "interchainSecurityModule": "0xA76F4620ac1e97d273B2C9Ca71805c8afD792098", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "name": "viction", @@ -1304,6 +1528,7 @@ "validatorAnnounce": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9" }, "zetachain": { + "aggregationHook": "0x80D80cfBa98dD2d456ECd43Dcc1f852D5C4EeD7a", "blockExplorers": [ { "apiUrl": "https://explorer.zetachain.com", @@ -1320,6 +1545,7 @@ "chainId": 7000, "displayName": "ZetaChain", "domainId": 7000, + "domainRoutingIsm": "0xaDc0cB48E8DB81855A930C0C1165ea3dCe4Ba5C7", "domainRoutingIsmFactory": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", "fallbackRoutingHook": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", "gasCurrencyCoinGeckoId": "zetachain", @@ -1327,7 +1553,7 @@ "from": 3068132 }, "interchainGasPaymaster": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "interchainSecurityModule": "0x8dfE6790DbB2Ecc1bEdb0eECfc1Ff467Ae5d8C89", + "interchainSecurityModule": "0x8fB4297373f1f11032856693Cf6eee5eC8d7FF4F", "mailbox": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", "merkleTreeHook": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", "name": "zetachain", @@ -1337,6 +1563,7 @@ "symbol": "ZETA" }, "pausableHook": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", + "pausableIsm": "0x7b75b29caD47e10146e29BBf7BD9025e021a7023", "protocol": "ethereum", "protocolFee": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4", "proxyAdmin": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", @@ -1352,6 +1579,7 @@ } ], "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "staticAggregationIsm": "0x7CB2dbE36aF0C0893B1B3502358Bc3697343559c", "staticAggregationIsmFactory": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", "staticMerkleRootMultisigIsmFactory": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", "staticMessageIdMultisigIsmFactory": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", diff --git a/rust/hyperlane-core/src/chain.rs b/rust/hyperlane-core/src/chain.rs index 03f4dc44d..e17790e7a 100644 --- a/rust/hyperlane-core/src/chain.rs +++ b/rust/hyperlane-core/src/chain.rs @@ -80,6 +80,8 @@ pub enum KnownHyperlaneDomain { Neutron = 1853125230, + Osmosis = 875, + Injective = 6909546, InEvm = 2525, @@ -97,6 +99,12 @@ pub enum KnownHyperlaneDomain { PlumeTestnet = 161221135, + Fraxtal = 252, + + Linea = 59144, + + Sei = 1329, + // -- Local test chains -- /// Test1 local chain Test1 = 13371, @@ -229,7 +237,7 @@ impl KnownHyperlaneDomain { Mainnet: [ Ethereum, Avalanche, Arbitrum, Polygon, Optimism, BinanceSmartChain, Celo, Moonbeam, Gnosis, MantaPacific, Neutron, Injective, InEvm, Ancient8, Blast, - Mode, Redstone, Viction, Zetachain + Mode, Redstone, Viction, Zetachain, Fraxtal, Linea, Sei, Osmosis ], Testnet: [ Alfajores, MoonbaseAlpha, Sepolia, ScrollSepolia, Chiado, PlumeTestnet, Fuji, BinanceSmartChainTestnet, Holesky @@ -247,11 +255,12 @@ impl KnownHyperlaneDomain { Optimism, BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis, Alfajores, Moonbeam, InEvm, Ancient8, Blast, Mode, Redstone, Viction, Zetachain, MoonbaseAlpha, ScrollSepolia, Chiado, MantaPacific, PlumeTestnet, + Fraxtal, Linea, Sei, Test1, Test2, Test3 ], HyperlaneDomainProtocol::Fuel: [FuelTest1], HyperlaneDomainProtocol::Sealevel: [SealevelTest1, SealevelTest2], - HyperlaneDomainProtocol::Cosmos: [CosmosTest99990, CosmosTest99991, Neutron, Injective], + HyperlaneDomainProtocol::Cosmos: [CosmosTest99990, CosmosTest99991, Neutron, Osmosis, Injective], }) } @@ -264,7 +273,7 @@ impl KnownHyperlaneDomain { Ethereum, Sepolia, Holesky, Polygon, Avalanche, Fuji, Optimism, BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis, Alfajores, Moonbeam, MoonbaseAlpha, ScrollSepolia, Chiado, MantaPacific, Neutron, Injective, InEvm, Ancient8, Blast, Mode, Redstone, - Viction, Zetachain, + Viction, Zetachain, Fraxtal, Linea, Sei, Osmosis, Test1, Test2, Test3, FuelTest1, SealevelTest1, SealevelTest2, CosmosTest99990, CosmosTest99991 ], }) diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 7d24fcc20..39e201053 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -53,18 +53,22 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = { bsc: true, celo: true, ethereum: true, + fraxtal: true, gnosis: true, injective: true, inevm: true, + linea: true, mantapacific: true, mode: true, moonbeam: true, neutron: true, optimism: true, + osmosis: true, polygon: true, polygonzkevm: true, redstone: true, scroll: true, + sei: true, viction: true, zetachain: true, }, @@ -77,19 +81,23 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = { bsc: true, celo: true, ethereum: true, + fraxtal: true, gnosis: true, injective: true, inevm: true, + linea: true, mantapacific: true, mode: true, moonbeam: true, // At the moment, we only relay between Neutron and Manta Pacific on the neutron context. neutron: false, optimism: true, + osmosis: false, polygon: true, polygonzkevm: true, redstone: true, scroll: true, + sei: true, viction: true, zetachain: true, }, @@ -102,19 +110,25 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = { bsc: true, celo: true, ethereum: true, + fraxtal: true, gnosis: true, // Cannot scrape non-EVM chains injective: false, inevm: true, + linea: true, mantapacific: true, mode: true, moonbeam: true, // Cannot scrape non-EVM chains neutron: false, optimism: true, + osmosis: false, polygon: true, polygonzkevm: true, redstone: true, + // Out of caution around pointer contracts (https://www.docs.sei.io/dev-interoperability/pointer-contracts) not being compatible + // and the scraper not gracefully handling txs that may not exist via the eth RPC, we don't run the scraper. + sei: false, scroll: true, // Has RPC non-compliance that breaks scraping. viction: false, @@ -209,7 +223,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '939fa81-20240607-194607', + tag: '59451d6-20240612-171611', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContexts, @@ -217,7 +231,7 @@ const hyperlane: RootAgentConfig = { validators: { docker: { repo, - tag: 'de8c2a7-20240515-135254', + tag: '59451d6-20240612-171611', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.Hyperlane), @@ -226,7 +240,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '939fa81-20240607-194607', + tag: '59451d6-20240612-171611', }, }, }; diff --git a/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json b/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json index a51936232..d5d6a3f02 100644 --- a/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json +++ b/typescript/infra/config/environments/mainnet3/aw-validators/hyperlane.json @@ -47,6 +47,9 @@ "0x749d6e7ad949e522c92181dc77f7bbc1c5d71506" ] }, + "fraxtal": { + "validators": ["0x4bce180dac6da60d0f3a2bdf036ffe9004f944c1"] + }, "gnosis": { "validators": [ "0xd4df66a859585678f2ea8357161d896be19cc1ca", @@ -64,6 +67,9 @@ "injective": { "validators": ["0xbfb8911b72cfb138c7ce517c57d9c691535dc517"] }, + "linea": { + "validators": ["0xf2d5409a59e0f5ae7635aff73685624904a77d94"] + }, "mantapacific": { "validators": [ "0x8e668c97ad76d0e28375275c41ece4972ab8a5bc", @@ -95,6 +101,9 @@ "0x779a17e035018396724a6dec8a59bda1b5adf738" ] }, + "osmosis": { + "validators": ["0xea483af11c19fa41b16c31d1534c2a486a92bcac"] + }, "polygon": { "validators": [ "0x12ecb319c7f4e8ac5eb5226662aeb8528c5cefac", @@ -119,6 +128,9 @@ "0x7210fa0a6be39a75cb14d682ebfb37e2b53ecbe5" ] }, + "sei": { + "validators": ["0x9920d2dbf6c85ffc228fdc2e810bf895732c6aa5"] + }, "viction": { "validators": ["0x1f87c368f8e05a85ef9126d984a980a20930cb9c"] }, diff --git a/typescript/infra/config/environments/mainnet3/aw-validators/rc.json b/typescript/infra/config/environments/mainnet3/aw-validators/rc.json index 31f01e7aa..0db2621f9 100644 --- a/typescript/infra/config/environments/mainnet3/aw-validators/rc.json +++ b/typescript/infra/config/environments/mainnet3/aw-validators/rc.json @@ -47,6 +47,9 @@ "0x87cf8a85465118aff9ec728ca157798201b1e368" ] }, + "fraxtal": { + "validators": ["0x8c772b730c8deb333dded14cb462e577a06283da"] + }, "gnosis": { "validators": [ "0xd5122daa0c3dfc94a825ae928f3ea138cdb6a2e1", @@ -61,6 +64,9 @@ "0xe83d36fd00d9ef86243d9f7147b29e98d11df0ee" ] }, + "linea": { + "validators": ["0xad4886b6f5f5088c7ae53b69d1ff5cfc2a17bec4"] + }, "mantapacific": { "validators": [ "0x84fcb05e6e5961df2dfd9f36e8f2b3e87ede7d76", @@ -116,6 +122,9 @@ "0x07c2f32a402543badc3141f6b98969d75ef2ac28" ] }, + "sei": { + "validators": ["0x846e48a7e85e5403cc690a347e1ad3c3dca11b6e"] + }, "viction": { "validators": [ "0xe858971cd865b11d3e8fb6b6af72db0d85881baf", diff --git a/typescript/infra/config/environments/mainnet3/chains.ts b/typescript/infra/config/environments/mainnet3/chains.ts index c511b72e6..a5e518b3d 100644 --- a/typescript/infra/config/environments/mainnet3/chains.ts +++ b/typescript/infra/config/environments/mainnet3/chains.ts @@ -1,5 +1,7 @@ +import { IRegistry } from '@hyperlane-xyz/registry'; import { ChainMap, ChainMetadata } from '@hyperlane-xyz/sdk'; +import { getRegistryForEnvironment } from '../../../src/config/chain.js'; import { isEthereumProtocolChain } from '../../../src/utils/utils.js'; import { supportedChainNames } from './supportedChainNames.js'; @@ -44,6 +46,13 @@ export const chainMetadataOverrides: ChainMap> = { gasPrice: 2 * 10 ** 9, // 2 gwei }, }, + sei: { + // Sei's `eth_feeHistory` is not to spec and incompatible with ethers-rs, + // so we force legacy transactions by setting a gas price. + transactionOverrides: { + gasPrice: 2 * 10 ** 9, // 2 gwei + }, + }, moonbeam: { transactionOverrides: { maxFeePerGas: 350 * 10 ** 9, // 350 gwei @@ -51,3 +60,11 @@ export const chainMetadataOverrides: ChainMap> = { }, }, }; + +export const getRegistry = async (useSecrets = true): Promise => + getRegistryForEnvironment( + environment, + supportedChainNames, + chainMetadataOverrides, + useSecrets, + ); diff --git a/typescript/infra/config/environments/mainnet3/core/verification.json b/typescript/infra/config/environments/mainnet3/core/verification.json index aa032b48a..e08a8c6fa 100644 --- a/typescript/infra/config/environments/mainnet3/core/verification.json +++ b/typescript/infra/config/environments/mainnet3/core/verification.json @@ -689,6 +689,12 @@ "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, "name": "PausableIsm" + }, + { + "address": "0xF8DbA46fF9D8ef650052c89CA2Df793FaBc375F9", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" } ], "arbitrum": [ @@ -2349,2634 +2355,5298 @@ "name": "PausableIsm" } ], - "gnosis": [ + "fraxtal": [ { - "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", + "address": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" - }, - { - "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", - "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "name": "ProxyAdmin" }, { - "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", + "address": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", + "constructorArguments": "00000000000000000000000000000000000000000000000000000000000000fc", "isProxy": false, "name": "Mailbox" }, { - "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", - "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3", + "constructorArguments": "0000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b390000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "ProtocolFee" - }, - { - "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, - "name": "ProtocolFee" + "name": "PausableIsm" }, { - "address": "0x87ED6926abc9E38b9C7C19f835B41943b622663c", - "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f", + "address": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147", + "constructorArguments": "0000000000000000000000002f9db5616fa3fad1ab06cb2c906830ba63d135e3", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "MerkleTreeHook" }, { - "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", - "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", + "address": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", + "constructorArguments": "0000000000000000000000002f9db5616fa3fad1ab06cb2c906830ba63d135e3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000008358d8291e3bedb04804975eea0fe9fe0fafb147", "isProxy": false, "name": "FallbackRoutingHook" }, { - "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", + "address": "0x4E1c88DD261BEe2941e6c1814597e30F53330428", "constructorArguments": "", "isProxy": false, "name": "PausableHook" }, { - "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", - "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", - "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", - "isProxy": false, - "name": "FallbackRoutingHook" + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" - }, - { - "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", - "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", - "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0x223F7D3f27E6272266AE4B5B91Fd5C7A2d798cD8", - "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "PausableIsm" - } - ], - "inevm": [ + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, { - "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, - "name": "ProxyAdmin" + "name": "StorageGasOracle" }, { - "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000009dd", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "InterchainGasPaymaster" }, { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", - "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", - "constructorArguments": "000000000000000000000000481171eb1aad17ede6a56005b7f1ab00c581ef130000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", - "constructorArguments": "000000000000000000000000481171eb1aad17ede6a56005b7f1ab00c581ef130000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "ProtocolFee" - }, - { - "address": "0x15ab173bDB6832f9b64276bA128659b0eD77730B", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "constructorArguments": "", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", - "constructorArguments": "", - "isProxy": false, - "name": "PausableHook" - } - ], - "mantapacific": [ + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, - "name": "ProxyAdmin" + "name": "StorageGasOracle" }, { - "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000000a9", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "InterchainGasPaymaster" }, { - "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "constructorArguments": "", "isProxy": false, - "name": "ProtocolFee" + "name": "StorageGasOracle" }, { - "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", + "constructorArguments": "", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "InterchainGasPaymaster" }, { - "address": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f112", - "isProxy": false, - "name": "FallbackRoutingHook" + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" - }, - { - "address": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f112", - "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0x2d5918c3602F17937Ff982F7Bb7110774D3A24AD", - "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "PausableIsm" + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fb36672365C7c797028C400A61c58c0ECc53cD2", - "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "PausableIsm" - } - ], - "mode": [ - { - "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, - "name": "ProxyAdmin" + "name": "StorageGasOracle" }, { - "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000868b", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "InterchainGasPaymaster" }, { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", - "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x61DDB465eEA5bc3708Cf8B53156aC91a77A2f029", - "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "PausableIsm" - }, - { - "address": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "constructorArguments": "", "isProxy": false, - "name": "MerkleTreeHook" + "name": "StorageGasOracle" }, { - "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000e2ee936bea8e42671c400ac96de198e06f2ba2a6", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "InterchainGasPaymaster" }, { - "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", - "constructorArguments": "", - "isProxy": false, - "name": "PausableHook" + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", + "address": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147", + "constructorArguments": "0000000000000000000000002f9db5616fa3fad1ab06cb2c906830ba63d135e3", "isProxy": false, - "name": "StorageGasOracle" + "name": "MerkleTreeHook" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", - "constructorArguments": "", + "address": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", + "constructorArguments": "0000000000000000000000002f9db5616fa3fad1ab06cb2c906830ba63d135e3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000008358d8291e3bedb04804975eea0fe9fe0fafb147", "isProxy": false, - "name": "InterchainGasPaymaster" + "name": "FallbackRoutingHook" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "address": "0x4E1c88DD261BEe2941e6c1814597e30F53330428", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000e2ee936bea8e42671c400ac96de198e06f2ba2a6", - "isProxy": false, - "name": "FallbackRoutingHook" - }, - { - "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", - "constructorArguments": "", - "isProxy": false, - "name": "PausableHook" - }, - { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xF5165f115ba4E1Adc09f0EB392232D65F219806a", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fca7f6eC3d4A0408900f2BB30004d4616eE985E", + "constructorArguments": "000000000000000000000000f5165f115ba4e1adc09f0eb392232d65f219806a0000000000000000000000003a867fcffec2b790970eebdc9023e75b0a172aa700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", + "address": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, - "name": "StorageGasOracle" + "name": "ProtocolFee" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", - "constructorArguments": "", + "address": "0x1956848601549de5aa0c887892061fA5aB4f6fC4", + "constructorArguments": "0000000000000000000000002f9db5616fa3fad1ab06cb2c906830ba63d135e3", "isProxy": false, - "name": "InterchainGasPaymaster" + "name": "ValidatorAnnounce" + } + ], + "gnosis": [ + { + "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", + "isProxy": false, + "name": "Mailbox" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", - "isProxy": false, - "name": "StorageGasOracle" - }, - { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", - "constructorArguments": "", + "address": "0x53642476e24E28c3218E8Da44eDEBB4adB9DE13e", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000064", "isProxy": false, - "name": "InterchainGasPaymaster" + "name": "Mailbox" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xaD09d78f4c6b9dA2Ae82b1D34107802d380Bb74f", + "constructorArguments": "00000000000000000000000053642476e24e28c3218e8da44edebb4adb9de13e00000000000000000000000081a92a1a272cb09d7b4970b07548463dc7ae0cb700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", + "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, - "name": "StorageGasOracle" + "name": "ProtocolFee" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", - "constructorArguments": "", + "address": "0x9c2214467Daf9e2e1F45b36d08ce0b9C65BFeA88", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, - "name": "InterchainGasPaymaster" + "name": "ProtocolFee" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "address": "0x87ED6926abc9E38b9C7C19f835B41943b622663c", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f", + "isProxy": false, + "name": "ValidatorAnnounce" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", + "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", "isProxy": false, - "name": "StorageGasOracle" + "name": "FallbackRoutingHook" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", "constructorArguments": "", "isProxy": false, - "name": "InterchainGasPaymaster" - }, - { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "name": "PausableHook" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", + "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", "isProxy": false, - "name": "StorageGasOracle" + "name": "FallbackRoutingHook" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", "constructorArguments": "", "isProxy": false, - "name": "InterchainGasPaymaster" - }, - { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "name": "PausableHook" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", + "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", "isProxy": false, - "name": "StorageGasOracle" + "name": "FallbackRoutingHook" }, { - "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", "constructorArguments": "", "isProxy": false, - "name": "InterchainGasPaymaster" + "name": "PausableHook" }, { - "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", - "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "address": "0x24f5E353dD03E103Ba2372F7D6FC0cf3A66f849c", + "constructorArguments": "000000000000000000000000ad09d78f4c6b9da2ae82b1d34107802d380bb74f000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000002684c6f89e901987e1fdb7649dc5be0c57c61645", + "isProxy": false, + "name": "FallbackRoutingHook" }, { - "address": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0xf728C884De5275a608dEC222dACd0f2BF2E23AB6", + "constructorArguments": "", "isProxy": false, - "name": "ProtocolFee" + "name": "PausableHook" }, { - "address": "0x48083C69f5a42c6B69ABbAd48AE195BD36770ee2", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "address": "0x223F7D3f27E6272266AE4B5B91Fd5C7A2d798cD8", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "PausableIsm" } ], - "moonbeam": [ + "inevm": [ { - "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" - }, - { - "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", - "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "name": "ProxyAdmin" }, { - "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "00000000000000000000000000000000000000000000000000000000000009dd", "isProxy": false, "name": "Mailbox" }, { - "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", - "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "address": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", - "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "000000000000000000000000481171eb1aad17ede6a56005b7f1ab00c581ef130000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "address": "0x0972954923a1e2b2aAb04Fa0c4a0797e5989Cd65", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", - "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "000000000000000000000000481171eb1aad17ede6a56005b7f1ab00c581ef130000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, "name": "ProtocolFee" }, { - "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "address": "0x15ab173bDB6832f9b64276bA128659b0eD77730B", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "ValidatorAnnounce" }, { - "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xA376b27212D608324808923Add679A2c9FAFe9Da", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000000972954923a1e2b2aab04fa0c4a0797e5989cd65", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xA376b27212D608324808923Add679A2c9FAFe9Da", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000000972954923a1e2b2aab04fa0c4a0797e5989cd65", + "isProxy": false, + "name": "FallbackRoutingHook" + } + ], + "linea": [ + { + "address": "0x3a867fCfFeC2B790970eeBDC9023E75B0a172aa7", + "constructorArguments": "", + "isProxy": false, + "name": "ProxyAdmin" + }, + { + "address": "0x7f50C5776722630a0024fAE05fDe8b47571D7B39", + "constructorArguments": "", + "isProxy": false, + "name": "ProxyAdmin" + }, + { + "address": "0x2f9DB5616fa3fAd1aB06cB2C906830BA63d135e3", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000e708", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x02d16BC51af6BfD153d67CA61754cF912E82C4d9", + "constructorArguments": "0000000000000000000000002f9db5616fa3fad1ab06cb2c906830ba63d135e30000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x48083C69f5a42c6B69ABbAd48AE195BD36770ee2", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + }, + { + "address": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", + "constructorArguments": "00000000000000000000000002d16bc51af6bfd153d67ca61754cf912e82c4d9", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "address": "0x4E1c88DD261BEe2941e6c1814597e30F53330428", + "constructorArguments": "00000000000000000000000002d16bc51af6bfd153d67ca61754cf912e82c4d9000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000c077a0cc408173349b1c9870c667b40fe3c01dd7", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", - "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "MerkleTreeHook" + "name": "StorageGasOracle" }, { - "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", - "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "ProtocolFee" + "name": "StorageGasOracle" }, { - "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "InterchainGasPaymaster" }, { - "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", - "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" - } - ], - "optimism": [ + "name": "InterchainGasPaymaster" + }, { - "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "StorageGasOracle" }, { - "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", - "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "MerkleTreeHook" + "name": "StorageGasOracle" }, { - "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", - "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "MerkleTreeHook" + "name": "StorageGasOracle" }, { - "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", - "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "ProtocolFee" + "name": "StorageGasOracle" }, { - "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "InterchainGasPaymaster" }, { - "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "StorageGasOracle" }, { - "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", - "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC077A0Cc408173349b1c9870C667B40FE3C01dd7", + "constructorArguments": "00000000000000000000000002d16bc51af6bfd153d67ca61754cf912e82c4d9", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x4E1c88DD261BEe2941e6c1814597e30F53330428", + "constructorArguments": "00000000000000000000000002d16bc51af6bfd153d67ca61754cf912e82c4d9000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000c077a0cc408173349b1c9870c667b40fe3c01dd7", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0x5060eCD5dFAD300A90592C04e504600A7cdcF70b", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x781bE492F1232E66990d83a9D3AC3Ec26f56DAfB", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xc22B646edf6c9A43d83fDBc8D5E1B3c6DAfACb83", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x8105a095368f1a184CceA86cCe21318B5Ee5BE28", + "constructorArguments": "000000000000000000000000c22b646edf6c9a43d83fdbc8d5e1b3c6dafacb830000000000000000000000007f50c5776722630a0024fae05fde8b47571d7b3900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x62B7592C1B6D1E43f4630B8e37f4377097840C05", + "constructorArguments": "00000000000000000000000002d16bc51af6bfd153d67ca61754cf912e82c4d9", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0x01aA8200936B475762Ee28D38B43a6cFe9076E52", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + } + ], + "mantapacific": [ + { + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false, + "name": "ProxyAdmin" + }, + { + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "00000000000000000000000000000000000000000000000000000000000000a9", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f112", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xD1E267d2d7876e97E217BfE61c34AB50FEF52807", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f112", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0x7556a0E61d577D921Cba8Fca0d7D6299d36E607E", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x2d5918c3602F17937Ff982F7Bb7110774D3A24AD", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + }, + { + "address": "0x6Fb36672365C7c797028C400A61c58c0ECc53cD2", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + }, + { + "address": "0x6119B76720CcfeB3D256EC1b91218EEfFD6756E1", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + } + ], + "mode": [ + { + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false, + "name": "ProxyAdmin" + }, + { + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000868b", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x61DDB465eEA5bc3708Cf8B53156aC91a77A2f029", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + }, + { + "address": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000e2ee936bea8e42671c400ac96de198e06f2ba2a6", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xE2ee936bEa8e42671c400aC96dE198E06F2bA2A6", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000e2ee936bea8e42671c400ac96de198e06f2ba2a6", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xE0C452DDA7506f0F4dE5C8C1d383F7aD866eA4F0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", + "constructorArguments": "000000000000000000000000e0c452dda7506f0f4de5c8c1d383f7ad866ea4f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x48083C69f5a42c6B69ABbAd48AE195BD36770ee2", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0xe243Fb51d91c5DE62afAbE44F7Ed2D4DC51668C6", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + } + ], + "moonbeam": [ + { + "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xeE064c4Dd3d476676a40b7cab94Ef651444175c0", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000504", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x094d03E751f49908080EFf000Dd6FD177fd44CC3", + "constructorArguments": "000000000000000000000000ee064c4dd3d476676a40b7cab94ef651444175c00000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x87403b85f6f316e7ba91ba1fa6C3Fb7dD4095547", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x89e8C8735f3C3956168BAd6C31e95ecE19CaF507", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x14760E32C0746094cF14D97124865BC7F0F7368F", + "constructorArguments": "00000000000000000000000089e8c8735f3c3956168bad6c31e95ece19caf5070000000000000000000000006a9cda3dd1f593983bfd142eb35e6ce4137bd5ce00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xCd3e29A9D293DcC7341295996a118913F7c582c0", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x8c1001eBee6F25b31863A55EadfF149aF88B356F", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x6C2D6eA0969F7Aa0A850CCA88c7BFACa563B2361", + "constructorArguments": "000000000000000000000000094d03e751f49908080eff000dd6fd177fd44cc3000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000087403b85f6f316e7ba91ba1fa6c3fb7dd4095547", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xe28f2AEEB42ee83CAd068D9A9a449c8b868C137f", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x58062b26193B28000Cd991Df767f3A2674502de8", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + } + ], + "optimism": [ + { + "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0xF00824861e4bFe5dFC769295A50006BA203BBc29", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000000a", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0xd4C1905BB1D26BC93DAC913e13CaCC278CdCC80D", + "constructorArguments": "000000000000000000000000f00824861e4bfe5dfc769295a50006ba203bbc29000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", + "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", + "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xD59a200cCEc5b3b1bF544dD7439De452D718f594", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + }, + { + "address": "0x33D3803215a32B84BFb6b1627367231EcD6F138F", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + }, + { + "address": "0xD84D8114cCfa5c2403E56aBf754da529430704F0", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + } + ], + "polygon": [ + { + "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", + "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", + "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0x6741e91fFDC31c7786E3684427c628dad06299B0", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + } + ], + "polygonzkevm": [ + { + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false, + "name": "ProxyAdmin" + }, + { + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false, + "name": "ProxyAdmin" + }, + { + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", + "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "ProtocolFee" + }, + { + "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", + "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x784b9D0f4eF9fb8444DfB5d24AB221C9D1A85395", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + } + ], + "redstone": [ + { + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false, + "name": "ProxyAdmin" + }, + { + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "00000000000000000000000000000000000000000000000000000000000002b2", + "isProxy": false, + "name": "Mailbox" + }, + { + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x79b3D752cc9494eCB93800712471a7a62954C8AE", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" + }, + { + "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000008f1e22d309baa69d398a03cc88e9b46037e988aa", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "isProxy": false, + "name": "MerkleTreeHook" + }, + { + "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000008f1e22d309baa69d398a03cc88e9b46037e988aa", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", + "isProxy": false, + "name": "StorageGasOracle" + }, + { + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", "isProxy": false, - "name": "MerkleTreeHook" + "name": "StorageGasOracle" }, { - "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", - "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x68eE9bec9B4dbB61f69D9D293Ae26a5AACb2e28f", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", "isProxy": false, - "name": "MerkleTreeHook" + "name": "StorageGasOracle" }, { - "address": "0x9b27988D926673fe99126DF4eed42A4aae8Bc01F", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xD8A76C4D91fCbB7Cc8eA795DFDF870E48368995C", - "constructorArguments": "0000000000000000000000009b27988d926673fe99126df4eed42a4aae8bc01f000000000000000000000000e047cb95fb3b7117989e911c6afb34771183fc3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xD71Ff941120e8f935b8b1E2C1eD72F5d140FF458", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", "isProxy": false, - "name": "ProtocolFee" + "name": "StorageGasOracle" }, { - "address": "0x30f5b08e01808643221528BB2f7953bf2830Ef38", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "InterchainGasPaymaster" }, { - "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", - "isProxy": false, - "name": "FallbackRoutingHook" + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "StorageGasOracle" }, { - "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "InterchainGasPaymaster" }, { - "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", - "constructorArguments": "", - "isProxy": false, - "name": "PausableHook" + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0xD4b132C6d4AA93A4247F1A91e1ED929c0572a43d", - "constructorArguments": "000000000000000000000000d4c1905bb1d26bc93dac913e13cacc278cdcc80d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000068ee9bec9b4dbb61f69d9d293ae26a5aacb2e28f", - "isProxy": false, - "name": "FallbackRoutingHook" + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0xf753CA2269c8A7693ce1808b5709Fbf36a65D47A", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "StorageGasOracle" }, { - "address": "0xD59a200cCEc5b3b1bF544dD7439De452D718f594", - "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", "isProxy": false, - "name": "PausableIsm" + "name": "InterchainGasPaymaster" }, { - "address": "0x33D3803215a32B84BFb6b1627367231EcD6F138F", - "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", "isProxy": false, - "name": "PausableIsm" - } - ], - "polygon": [ + "name": "StorageGasOracle" + }, { - "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "InterchainGasPaymaster" }, { - "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", - "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xA3Ae1C7dBAc1C9658708E6aCD271bfB93d87f8A3", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000089", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "StorageGasOracle" }, { - "address": "0x5d934f4e2f797775e53561bB72aca21ba36B96BB", - "constructorArguments": "000000000000000000000000a3ae1c7dbac1c9658708e6acd271bfb93d87f8a3000000000000000000000000c4f7590c5d30be959225dc75640657954a86b98000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", + "isProxy": false, + "name": "InterchainGasPaymaster" + }, + { + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "constructorArguments": "", "isProxy": false, - "name": "ProtocolFee" + "name": "StorageGasOracle" }, { - "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", - "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "constructorArguments": "", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "InterchainGasPaymaster" }, { - "address": "0xF8F3629e308b4758F8396606405989F8D8C9c578", + "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", + "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" + }, + { + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, "name": "ProtocolFee" }, { - "address": "0x454E1a1E1CA8B51506090f1b5399083658eA4Fc5", - "constructorArguments": "0000000000000000000000005d934f4e2f797775e53561bb72aca21ba36b96bb", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", + "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", "isProxy": false, "name": "ValidatorAnnounce" }, { - "address": "0x6741e91fFDC31c7786E3684427c628dad06299B0", + "address": "0xD53Fdbb7537aCa82bAf7cCA7204088f15b52796a", "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, "name": "PausableIsm" } ], - "polygonzkevm": [ + "scroll": [ { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", "constructorArguments": "", "isProxy": false, "name": "ProxyAdmin" }, { - "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", "isProxy": false, "name": "Mailbox" }, { - "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, "name": "ProtocolFee" }, { - "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "ValidatorAnnounce" }, { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", "constructorArguments": "", "isProxy": false, "name": "ProxyAdmin" }, { - "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", - "constructorArguments": "000000000000000000000000000000000000000000000000000000000000044d", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", "isProxy": false, "name": "Mailbox" }, { - "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0x19dc38aeae620380430C200a6E990D5Af5480117", + "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x0D63128D887159d63De29497dfa45AFc7C699AE4", - "constructorArguments": "000000000000000000000000bf12ef4b9f307463d3fb59c3604f294ddce287e20000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", + "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, "name": "ProtocolFee" }, { - "address": "0x2fa5F5C96419C222cDbCeC797D696e6cE428A7A9", - "constructorArguments": "0000000000000000000000003a464f746d23ab22155710f44db16dca53e0775e", + "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", + "isProxy": false, + "name": "ValidatorAnnounce" + }, + { + "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", + "isProxy": false, + "name": "FallbackRoutingHook" + }, + { + "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", + "constructorArguments": "", + "isProxy": false, + "name": "PausableHook" + }, + { + "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", "isProxy": false, - "name": "ValidatorAnnounce" + "name": "FallbackRoutingHook" }, { - "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", "constructorArguments": "", "isProxy": false, "name": "PausableHook" }, { - "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", - "constructorArguments": "", + "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", "isProxy": false, - "name": "PausableHook" + "name": "FallbackRoutingHook" }, { - "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", "constructorArguments": "", "isProxy": false, "name": "PausableHook" }, { - "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", - "constructorArguments": "", + "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", "isProxy": false, - "name": "PausableHook" + "name": "FallbackRoutingHook" }, { - "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", + "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", "constructorArguments": "", "isProxy": false, "name": "PausableHook" }, { - "address": "0xc2FbB9411186AB3b1a6AFCCA702D1a80B48b197c", - "constructorArguments": "", + "address": "0x11Fa12DBaCe771E293e19743feA342e378C6341F", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, - "name": "PausableHook" + "name": "PausableIsm" } ], - "redstone": [ + "sei": [ { - "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", "constructorArguments": "", "isProxy": false, "name": "ProxyAdmin" }, { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", - "constructorArguments": "00000000000000000000000000000000000000000000000000000000000002b2", + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "0000000000000000000000000000000000000000000000000000000000000531", "isProxy": false, "name": "Mailbox" }, { - "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a70000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x79b3D752cc9494eCB93800712471a7a62954C8AE", + "address": "0x931dFCc8c1141D6F532FD023bd87DAe0080c835d", "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, "name": "PausableIsm" }, { - "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", + "address": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "MerkleTreeHook" }, { - "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000008f1e22d309baa69d398a03cc88e9b46037e988aa", + "address": "0xB3fCcD379ad66CED0c91028520C64226611A48c9", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000ca1b69fa4c4a7c7fd839bc50867c589592bcfe49", "isProxy": false, "name": "FallbackRoutingHook" }, { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", + "address": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4", "constructorArguments": "", "isProxy": false, "name": "PausableHook" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x8F1E22d309baa69D398a03cc88E9b46037e988AA", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0xA1ac41d8A663fd317cc3BD94C7de92dC4BA4a882", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000008f1e22d309baa69d398a03cc88e9b46037e988aa", - "isProxy": false, - "name": "FallbackRoutingHook" - }, - { - "address": "0xC9B8ea6230d6687a4b13fD3C0b8f0Ec607B26465", - "constructorArguments": "", - "isProxy": false, - "name": "PausableHook" - }, - { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", - "constructorArguments": "", - "isProxy": false, - "name": "StorageGasOracle" - }, - { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", - "constructorArguments": "", + "address": "0xca1b69fA4c4a7c7fD839bC50867c589592bcfe49", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, - "name": "InterchainGasPaymaster" - }, - { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "name": "MerkleTreeHook" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", - "constructorArguments": "", + "address": "0xB3fCcD379ad66CED0c91028520C64226611A48c9", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000ca1b69fa4c4a7c7fd839bc50867c589592bcfe49", "isProxy": false, - "name": "StorageGasOracle" + "name": "FallbackRoutingHook" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0xea820f9BCFD5E16a0dd42071EB61A29874Ad81A4", "constructorArguments": "", "isProxy": false, - "name": "InterchainGasPaymaster" - }, - { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", - "isProxy": true, - "name": "TransparentUpgradeableProxy" + "name": "PausableHook" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6Fae4D9935E2fcb11fC79a64e917fb2BF14DaFaa", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0xBDa330Ea8F3005C421C8088e638fBB64fA71b9e0", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0x2Fa570E83009eaEef3a1cbd496a9a30F05266634", - "constructorArguments": "000000000000000000000000bda330ea8f3005c421c8088e638fbb64fa71b9e00000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "constructorArguments": "", "isProxy": false, - "name": "ProtocolFee" + "name": "StorageGasOracle" }, { "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", - "constructorArguments": "000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d", - "isProxy": false, - "name": "ValidatorAnnounce" - } - ], - "scroll": [ - { - "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", "constructorArguments": "", "isProxy": false, - "name": "ProxyAdmin" - }, - { - "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", - "isProxy": false, - "name": "Mailbox" + "name": "InterchainGasPaymaster" }, { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", - "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", - "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", - "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "ProtocolFee" - }, - { - "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "ValidatorAnnounce" - }, - { - "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, - "name": "ProxyAdmin" + "name": "StorageGasOracle" }, { - "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", - "constructorArguments": "0000000000000000000000000000000000000000000000000000000000082750", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", + "constructorArguments": "", "isProxy": false, - "name": "Mailbox" + "name": "InterchainGasPaymaster" }, { - "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", - "constructorArguments": "0000000000000000000000004ed7d626f1e96cd1c0401607bf70d95243e3ded10000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", - "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0x6119E37Bd66406A1Db74920aC79C15fB8411Ba76", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "MerkleTreeHook" - }, - { - "address": "0x481171eb1aad17eDE6a56005B7F1aB00C581ef13", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, "name": "StorageGasOracle" }, { - "address": "0x149db7afD694722747035d5AEC7007ccb6F8f112", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, "name": "InterchainGasPaymaster" }, { - "address": "0xBF12ef4B9f307463D3FB59c3604F294dDCe287E2", - "constructorArguments": "000000000000000000000000149db7afd694722747035d5aec7007ccb6f8f1120000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", "isProxy": true, "name": "TransparentUpgradeableProxy" }, { - "address": "0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94", - "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", - "isProxy": false, - "name": "ProtocolFee" - }, - { - "address": "0xd83A4F747fE80Ed98839e05079B1B7Fe037b1638", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", - "isProxy": false, - "name": "ValidatorAnnounce" - }, - { - "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "StorageGasOracle" }, { - "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "InterchainGasPaymaster" }, { - "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", - "isProxy": false, - "name": "FallbackRoutingHook" + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", + "address": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", "constructorArguments": "", "isProxy": false, - "name": "PausableHook" + "name": "StorageGasOracle" }, { - "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", + "address": "0x12582c7B0f43c6A667CBaA7fA8b112F7fb1E69F0", + "constructorArguments": "", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "InterchainGasPaymaster" }, { - "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", - "constructorArguments": "", - "isProxy": false, - "name": "PausableHook" + "address": "0xFC62DeF1f08793aBf0E67f69257c6be258194F72", + "constructorArguments": "00000000000000000000000012582c7b0f43c6a667cbaa7fa8b112f7fb1e69f00000000000000000000000000761b0827849abbf7b0cc09ce14e1c93d87f500400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba00000000000000000000000000000000000000000000000000000000", + "isProxy": true, + "name": "TransparentUpgradeableProxy" }, { - "address": "0xDa7cECb05C4aeB02c1aFDE277d4306a2da7Bd762", - "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba0000000000000000000000006119e37bd66406a1db74920ac79c15fb8411ba76", + "address": "0x83c2DB237e93Ce52565AB110124f78fdf159E3f4", + "constructorArguments": "000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", "isProxy": false, - "name": "FallbackRoutingHook" + "name": "ProtocolFee" }, { - "address": "0x4Eb82Ee35b0a1c1d776E3a3B547f9A9bA6FCC9f2", - "constructorArguments": "", + "address": "0x5332D1AC0A626D265298c14ff681c0A8D28dB86d", + "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, - "name": "PausableHook" + "name": "ValidatorAnnounce" } ], "viction": [ @@ -6001,6 +8671,12 @@ "constructorArguments": "0000000000000000000000002f2afae1139ce54fefc03593fee8ab2adf4a85a7", "isProxy": false, "name": "ValidatorAnnounce" + }, + { + "address": "0x7b75b29caD47e10146e29BBf7BD9025e021a7023", + "constructorArguments": "000000000000000000000000a7eccdb9be08178f896c26b7bbd8c3d4e844d9ba", + "isProxy": false, + "name": "PausableIsm" } ] } diff --git a/typescript/infra/config/environments/mainnet3/funding.ts b/typescript/infra/config/environments/mainnet3/funding.ts index 25e01b03d..0a111dea8 100644 --- a/typescript/infra/config/environments/mainnet3/funding.ts +++ b/typescript/infra/config/environments/mainnet3/funding.ts @@ -7,7 +7,7 @@ import { environment } from './chains.js'; export const keyFunderConfig: KeyFunderConfig = { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '7720875-20240531-072251', + tag: 'b134b04-20240605-133031', }, // We're currently using the same deployer/key funder key as mainnet2. // To minimize nonce clobbering we offset the key funder cron @@ -31,8 +31,10 @@ export const keyFunderConfig: KeyFunderConfig = { bsc: '5', celo: '3', ethereum: '0.5', + fraxtal: '0.2', gnosis: '5', inevm: '3', + linea: '0.2', mantapacific: '0.2', mode: '0.2', moonbeam: '5', @@ -41,6 +43,7 @@ export const keyFunderConfig: KeyFunderConfig = { polygonzkevm: '0.5', redstone: '0.2', scroll: '0.5', + sei: '10', viction: '3', zetachain: '20', }, @@ -53,8 +56,10 @@ export const keyFunderConfig: KeyFunderConfig = { bsc: '0.35', celo: '150', ethereum: '0.4', + fraxtal: '0', gnosis: '100', inevm: '0.05', + linea: '0', mantapacific: '0', mode: '0', moonbeam: '250', @@ -63,6 +68,7 @@ export const keyFunderConfig: KeyFunderConfig = { polygonzkevm: '0.05', redstone: '0', scroll: '0.05', + sei: '0', viction: '0.05', zetachain: '0', }, diff --git a/typescript/infra/config/environments/mainnet3/gasPrices.json b/typescript/infra/config/environments/mainnet3/gasPrices.json index 8fd3ca2aa..cb689e297 100644 --- a/typescript/infra/config/environments/mainnet3/gasPrices.json +++ b/typescript/infra/config/environments/mainnet3/gasPrices.json @@ -16,7 +16,7 @@ "decimals": 9 }, "blast": { - "amount": "0.1", + "amount": "0.01649352", "decimals": 9 }, "bsc": { @@ -31,8 +31,28 @@ "amount": "20", "decimals": 9 }, + "fraxtal": { + "amount": "0.001000253", + "decimals": 9 + }, + "gnosis": { + "amount": "5.877696928", + "decimals": 9 + }, + "inevm": { + "amount": "0.1", + "decimals": 9 + }, + "injective": { + "amount": "700000000", + "decimals": 1 + }, + "linea": { + "amount": "0.110844655", + "decimals": 9 + }, "mantapacific": { - "amount": "0.100163166", + "amount": "0.101967574", "decimals": 9 }, "mode": { @@ -43,22 +63,22 @@ "amount": "125.0", "decimals": 9 }, + "neutron": { + "amount": "0.0053", + "decimals": 1 + }, "optimism": { "amount": "0.061126811", "decimals": 9 }, + "osmosis": { + "amount": "0.025", + "decimals": 1 + }, "polygon": { "amount": "101.76455238", "decimals": 9 }, - "gnosis": { - "amount": "3.236596353", - "decimals": 9 - }, - "scroll": { - "amount": "1.3231", - "decimals": 9 - }, "polygonzkevm": { "amount": "3.95", "decimals": 9 @@ -67,24 +87,20 @@ "amount": "0.0003", "decimals": 9 }, - "inevm": { - "amount": "0.1", + "scroll": { + "amount": "1.3231", + "decimals": 9 + }, + "sei": { + "amount": "1.0", "decimals": 9 }, "viction": { "amount": "0.25", "decimals": 9 }, - "neutron": { - "amount": "0.0053", - "decimals": 1 - }, - "injective": { - "amount": "700000000", - "decimals": 1 - }, "zetachain": { - "amount": "0.0001", + "amount": "10.1", "decimals": 9 } } diff --git a/typescript/infra/config/environments/mainnet3/index.ts b/typescript/infra/config/environments/mainnet3/index.ts index 94c76e53a..fdc0e05e9 100644 --- a/typescript/infra/config/environments/mainnet3/index.ts +++ b/typescript/infra/config/environments/mainnet3/index.ts @@ -14,6 +14,7 @@ import { agents } from './agent.js'; import { chainMetadataOverrides, environment as environmentName, + getRegistry, } from './chains.js'; import { core } from './core.js'; import { keyFunderConfig } from './funding.js'; @@ -24,14 +25,6 @@ import { bridgeAdapterConfigs, relayerConfig } from './liquidityLayer.js'; import { owners } from './owners.js'; import { supportedChainNames } from './supportedChainNames.js'; -const getRegistry = async (useSecrets = true): Promise => - getRegistryForEnvironment( - environmentName, - supportedChainNames, - chainMetadataOverrides, - useSecrets, - ); - export const environment: EnvironmentConfig = { environment: environmentName, supportedChainNames, diff --git a/typescript/infra/config/environments/mainnet3/ism/verification.json b/typescript/infra/config/environments/mainnet3/ism/verification.json index cd76f9f2b..e201aa24d 100644 --- a/typescript/infra/config/environments/mainnet3/ism/verification.json +++ b/typescript/infra/config/environments/mainnet3/ism/verification.json @@ -1767,6 +1767,68 @@ "name": "DomaingRoutingIsm" } ], + "fraxtal": [ + { + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false, + "name": "StaticMerkleRootMultisigIsmFactory" + }, + { + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true, + "name": "StaticMerkleRootMultisigIsm" + }, + { + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false, + "name": "StaticMessageIdMultisigIsmFactory" + }, + { + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true, + "name": "StaticMessageIdMultisigIsm" + }, + { + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false, + "name": "StaticAggregationIsmFactory" + }, + { + "address": "0x7f51A658837A315134A97ff8B586d71B726B7e61", + "constructorArguments": "", + "isProxy": true, + "name": "StaticAggregationIsm" + }, + { + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "", + "isProxy": false, + "name": "StaticAggregationHookFactory" + }, + { + "address": "0xDFF18Bf286c9cDd0fC653a28616460Cf7443F8EF", + "constructorArguments": "", + "isProxy": true, + "name": "StaticAggregationHook" + }, + { + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "", + "isProxy": false, + "name": "DomainRoutingIsmFactory" + }, + { + "address": "0x3a49EcAC1031612D66fa20D6F40f214aCeAc2B4B", + "constructorArguments": "", + "isProxy": true, + "name": "DomaingRoutingIsm" + } + ], "gnosis": [ { "address": "0x8E273260EAd8B72A085B19346A676d355740e875", @@ -2173,6 +2235,68 @@ "name": "DomaingRoutingIsm" } ], + "linea": [ + { + "address": "0x0761b0827849abbf7b0cC09CE14e1C93D87f5004", + "constructorArguments": "", + "isProxy": false, + "name": "StaticMerkleRootMultisigIsmFactory" + }, + { + "address": "0x3b9f24fD2ecfed0d3A88fa7f0E4e5747671981D7", + "constructorArguments": "", + "isProxy": true, + "name": "StaticMerkleRootMultisigIsm" + }, + { + "address": "0x4Ed7d626f1E96cD1C0401607Bf70D95243E3dEd1", + "constructorArguments": "", + "isProxy": false, + "name": "StaticMessageIdMultisigIsmFactory" + }, + { + "address": "0x71DCcD21B912F7d4f636af0C9eA5DC0C10617354", + "constructorArguments": "", + "isProxy": true, + "name": "StaticMessageIdMultisigIsm" + }, + { + "address": "0x2f2aFaE1139Ce54feFC03593FeE8AB2aDF4a85A7", + "constructorArguments": "", + "isProxy": false, + "name": "StaticAggregationIsmFactory" + }, + { + "address": "0x7f51A658837A315134A97ff8B586d71B726B7e61", + "constructorArguments": "", + "isProxy": true, + "name": "StaticAggregationIsm" + }, + { + "address": "0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D", + "constructorArguments": "", + "isProxy": false, + "name": "StaticAggregationHookFactory" + }, + { + "address": "0xDFF18Bf286c9cDd0fC653a28616460Cf7443F8EF", + "constructorArguments": "", + "isProxy": true, + "name": "StaticAggregationHook" + }, + { + "address": "0x3a464f746D23Ab22155710f44dB16dcA53e0775E", + "constructorArguments": "", + "isProxy": false, + "name": "DomainRoutingIsmFactory" + }, + { + "address": "0x3a49EcAC1031612D66fa20D6F40f214aCeAc2B4B", + "constructorArguments": "", + "isProxy": true, + "name": "DomaingRoutingIsm" + } + ], "mantapacific": [ { "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", @@ -3323,6 +3447,68 @@ "name": "DomaingRoutingIsm" } ], + "sei": [ + { + "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", + "constructorArguments": "", + "isProxy": false, + "name": "StaticMerkleRootMultisigIsmFactory" + }, + { + "address": "0x4725F7b8037513915aAf6D6CBDE2920E28540dDc", + "constructorArguments": "", + "isProxy": true, + "name": "StaticMerkleRootMultisigIsm" + }, + { + "address": "0x8b83fefd896fAa52057798f6426E9f0B080FCCcE", + "constructorArguments": "", + "isProxy": false, + "name": "StaticMessageIdMultisigIsmFactory" + }, + { + "address": "0xAF03386044373E2fe26C5b1dCedF5a7e854a7a3F", + "constructorArguments": "", + "isProxy": true, + "name": "StaticMessageIdMultisigIsm" + }, + { + "address": "0x8F7454AC98228f3504Bb91eA3D8Adafe6406110A", + "constructorArguments": "", + "isProxy": false, + "name": "StaticAggregationIsmFactory" + }, + { + "address": "0x882CD0C5D50b6dD74b36Da4BDb059507fddEDdf2", + "constructorArguments": "", + "isProxy": true, + "name": "StaticAggregationIsm" + }, + { + "address": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", + "constructorArguments": "", + "isProxy": false, + "name": "StaticAggregationHookFactory" + }, + { + "address": "0x19930232E9aFC4f4F09d09fe2375680fAc2100D0", + "constructorArguments": "", + "isProxy": true, + "name": "StaticAggregationHook" + }, + { + "address": "0x1052eF3419f26Bec74Ed7CEf4a4FA6812Bc09908", + "constructorArguments": "", + "isProxy": false, + "name": "DomainRoutingIsmFactory" + }, + { + "address": "0x12Ed1BbA182CbC63692F813651BD493B7445C874", + "constructorArguments": "", + "isProxy": true, + "name": "DomaingRoutingIsm" + } + ], "viction": [ { "address": "0x2C1FAbEcd7bFBdEBF27CcdB67baADB38b6Df90fC", diff --git a/typescript/infra/config/environments/mainnet3/supportedChainNames.ts b/typescript/infra/config/environments/mainnet3/supportedChainNames.ts index 5a0042c8e..ab36b8a4b 100644 --- a/typescript/infra/config/environments/mainnet3/supportedChainNames.ts +++ b/typescript/infra/config/environments/mainnet3/supportedChainNames.ts @@ -9,18 +9,22 @@ export const supportedChainNames = [ 'bsc', 'celo', 'ethereum', + 'fraxtal', 'gnosis', 'inevm', 'injective', + 'linea', 'mantapacific', 'mode', 'moonbeam', 'neutron', 'optimism', + 'osmosis', 'polygon', 'polygonzkevm', 'redstone', 'scroll', + 'sei', 'viction', 'zetachain', ]; diff --git a/typescript/infra/config/environments/mainnet3/tokenPrices.json b/typescript/infra/config/environments/mainnet3/tokenPrices.json index dac9798f6..314984d8b 100644 --- a/typescript/infra/config/environments/mainnet3/tokenPrices.json +++ b/typescript/infra/config/environments/mainnet3/tokenPrices.json @@ -1,24 +1,28 @@ { - "arbitrum": "2919.87", - "ancient8": "2919.87", - "avalanche": "33.19", - "base": "2919.87", - "blast": "2919.87", - "bsc": "570.1", - "celo": "0.738559", - "ethereum": "2919.87", - "gnosis": "1.005", - "inevm": "21.59", - "mantapacific": "2919.87", - "mode": "2919.87", - "moonbeam": "0.253144", - "optimism": "2919.87", - "polygon": "0.663051", - "polygonzkevm": "2919.87", - "redstone": "2919.87", - "scroll": "2919.87", - "viction": "0.424231", - "zetachain": "1.53", - "injective": "21.59", - "neutron": "0.606906" + "arbitrum": "3537.12", + "ancient8": "3537.12", + "avalanche": "32.04", + "base": "3537.12", + "blast": "3537.12", + "bsc": "611.69", + "celo": "0.709793", + "ethereum": "3537.12", + "fraxtal": "3519.8", + "gnosis": "1.001", + "inevm": "28.61", + "injective": "28.61", + "linea": "3537.12", + "mantapacific": "3537.12", + "mode": "3537.12", + "moonbeam": "0.278261", + "neutron": "0.623705", + "optimism": "3537.12", + "osmosis": "0.649286", + "polygon": "0.643148", + "polygonzkevm": "3537.12", + "redstone": "3537.12", + "scroll": "3537.12", + "sei": "0.477119", + "viction": "0.404896", + "zetachain": "1.16" } diff --git a/typescript/infra/config/environments/mainnet3/validators.ts b/typescript/infra/config/environments/mainnet3/validators.ts index 444bc70f2..265092969 100644 --- a/typescript/infra/config/environments/mainnet3/validators.ts +++ b/typescript/infra/config/environments/mainnet3/validators.ts @@ -164,6 +164,18 @@ export const validatorChainConfig = ( 'optimism', ), }, + osmosis: { + interval: 5, + reorgPeriod: getReorgPeriod('osmosis'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xea483af11c19fa41b16c31d1534c2a486a92bcac'], + [Contexts.ReleaseCandidate]: [], + [Contexts.Neutron]: [], + }, + 'osmosis', + ), + }, moonbeam: { interval: 5, reorgPeriod: getReorgPeriod('moonbeam'), @@ -256,6 +268,48 @@ export const validatorChainConfig = ( 'inevm', ), }, + fraxtal: { + interval: 5, + reorgPeriod: getReorgPeriod('fraxtal'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x4bce180dac6da60d0f3a2bdf036ffe9004f944c1'], + [Contexts.ReleaseCandidate]: [ + '0x8c772b730c8deb333dded14cb462e577a06283da', + ], + [Contexts.Neutron]: [], + }, + 'fraxtal', + ), + }, + linea: { + interval: 5, + reorgPeriod: getReorgPeriod('linea'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0xf2d5409a59e0f5ae7635aff73685624904a77d94'], + [Contexts.ReleaseCandidate]: [ + '0xad4886b6f5f5088c7ae53b69d1ff5cfc2a17bec4', + ], + [Contexts.Neutron]: [], + }, + 'linea', + ), + }, + sei: { + interval: 5, + reorgPeriod: getReorgPeriod('sei'), + validators: validatorsConfig( + { + [Contexts.Hyperlane]: ['0x9920d2dbf6c85ffc228fdc2e810bf895732c6aa5'], + [Contexts.ReleaseCandidate]: [ + '0x846e48a7e85e5403cc690a347e1ad3c3dca11b6e', + ], + [Contexts.Neutron]: [], + }, + 'sei', + ), + }, scroll: { interval: 5, reorgPeriod: getReorgPeriod('scroll'), diff --git a/typescript/infra/config/registry.ts b/typescript/infra/config/registry.ts index 8c8be46bb..cf25e595a 100644 --- a/typescript/infra/config/registry.ts +++ b/typescript/infra/config/registry.ts @@ -50,7 +50,7 @@ export function setRegistry(reg: FileSystemRegistry) { export function getRegistry(): FileSystemRegistry { if (!registry) { const registryUri = process.env.REGISTRY_URI || DEFAULT_REGISTRY_URI; - rootLogger.info({ registryUri }, 'Using registry URI'); + rootLogger.debug({ registryUri }, 'Using registry URI'); registry = new FileSystemRegistry({ uri: registryUri, logger: rootLogger.child({ module: 'infra-registry' }), diff --git a/typescript/infra/scripts/announce-validators.ts b/typescript/infra/scripts/announce-validators.ts index 09748de98..0d6e47fd1 100644 --- a/typescript/infra/scripts/announce-validators.ts +++ b/typescript/infra/scripts/announce-validators.ts @@ -50,7 +50,7 @@ async function main() { const validator = await InfraS3Validator.fromStorageLocation(location); announcements.push({ storageLocation: validator.storageLocation(), - announcement: await validator.getAnnouncement(), + announcement: await validator.getSignedAnnouncement(), }); } else if (location.startsWith('file://')) { const announcementFilepath = path.join( @@ -97,7 +97,7 @@ async function main() { ); announcements.push({ storageLocation: validator.storageLocation(), - announcement: await validator.getAnnouncement(), + announcement: await validator.getSignedAnnouncement(), }); chains.push(validatorChain); } diff --git a/typescript/infra/scripts/check-deploy.ts b/typescript/infra/scripts/check-deploy.ts index 47160c889..d09a20749 100644 --- a/typescript/infra/scripts/check-deploy.ts +++ b/typescript/infra/scripts/check-deploy.ts @@ -26,6 +26,7 @@ import { Modules, getAddresses, getArgs as getRootArgs, + withChain, withContext, withModuleAndFork, } from './agent-utils.js'; @@ -33,14 +34,14 @@ import { getEnvironmentConfig, getHyperlaneCore } from './core-utils.js'; import { getHelloWorldApp } from './helloworld/utils.js'; function getArgs() { - return withModuleAndFork(withContext(getRootArgs())) + return withChain(withModuleAndFork(withContext(getRootArgs()))) .boolean('govern') .default('govern', false) .alias('g', 'govern').argv; } async function check() { - const { fork, govern, module, environment, context } = await getArgs(); + const { fork, govern, module, environment, context, chain } = await getArgs(); const envConfig = getEnvironmentConfig(environment); let multiProvider = await envConfig.getMultiProvider(); @@ -64,7 +65,10 @@ async function check() { } } - const { core, chainAddresses } = await getHyperlaneCore(environment); + const { core, chainAddresses } = await getHyperlaneCore( + environment, + multiProvider, + ); const ismFactory = HyperlaneIsmFactory.fromAddressesMap( chainAddresses, multiProvider, @@ -146,6 +150,11 @@ async function check() { if (govern) { await governor.govern(false, fork); } + } else if (chain) { + await governor.checker.checkChain(chain); + if (govern) { + await governor.govern(true, chain); + } } else { await governor.checker.check(); if (govern) { diff --git a/typescript/infra/scripts/deploy.ts b/typescript/infra/scripts/deploy.ts index fc6719051..e7ef13966 100644 --- a/typescript/infra/scripts/deploy.ts +++ b/typescript/infra/scripts/deploy.ts @@ -2,6 +2,7 @@ import { ethers } from 'ethers'; import path from 'path'; import prompts from 'prompts'; +import { buildArtifact as coreBuildArtifact } from '@hyperlane-xyz/core/buildArtifact.js'; import { HelloWorldDeployer } from '@hyperlane-xyz/helloworld'; import { ChainMap, @@ -35,6 +36,7 @@ import { fetchExplorerApiKeys, } from '../src/deployment/verify.js'; import { impersonateAccount, useLocalProvider } from '../src/utils/fork.js'; +import { inCIMode } from '../src/utils/utils.js'; import { Modules, @@ -84,20 +86,16 @@ async function main() { multiProvider.setSharedSigner(signer); } - let contractVerifier; - if (buildArtifactPath) { - // fetch explorer API keys from GCP - const apiKeys = await fetchExplorerApiKeys(); - // extract build artifact contents - const buildArtifact = extractBuildArtifact(buildArtifactPath); - // instantiate verifier - contractVerifier = new ContractVerifier( - multiProvider, - apiKeys, - buildArtifact, - ExplorerLicenseType.MIT, - ); - } + // if none provided, instantiate a default verifier with the default core contract build artifact + // fetch explorer API keys from GCP + const contractVerifier = new ContractVerifier( + multiProvider, + inCIMode() ? {} : await fetchExplorerApiKeys(), + buildArtifactPath + ? extractBuildArtifact(buildArtifactPath) + : coreBuildArtifact, + ExplorerLicenseType.MIT, + ); let config: ChainMap = {}; let deployer: HyperlaneDeployer; diff --git a/typescript/infra/scripts/print-gas-prices.ts b/typescript/infra/scripts/print-gas-prices.ts index 61126c371..4f94dd26a 100644 --- a/typescript/infra/scripts/print-gas-prices.ts +++ b/typescript/infra/scripts/print-gas-prices.ts @@ -1,26 +1,26 @@ +import { Provider } from '@ethersproject/providers'; import { ethers } from 'ethers'; -import { - ChainMap, - MultiProtocolProvider, - ProviderType, -} from '@hyperlane-xyz/sdk'; +import { ChainMap, MultiProtocolProvider } from '@hyperlane-xyz/sdk'; +import { ProtocolType } from '@hyperlane-xyz/utils'; +// Intentionally circumvent `mainnet3/index.ts` and `getEnvironmentConfig('mainnet3')` +// to avoid circular dependencies. +import { getRegistry as getMainnet3Registry } from '../config/environments/mainnet3/chains.js'; +import { supportedChainNames as mainnet3SupportedChainNames } from '../config/environments/mainnet3/supportedChainNames.js'; import { GasPriceConfig, getCosmosChainGasPrice, } from '../src/config/gas-oracle.js'; -import { getEnvironmentConfig } from './core-utils.js'; - async function main() { - const environmentConfig = getEnvironmentConfig('mainnet3'); - - const mpp = await environmentConfig.getMultiProtocolProvider(); + const registry = await getMainnet3Registry(); + const chainMetadata = await registry.getMetadata(); + const mpp = new MultiProtocolProvider(chainMetadata); const prices: ChainMap = Object.fromEntries( await Promise.all( - environmentConfig.supportedChainNames.map(async (chain) => [ + mainnet3SupportedChainNames.map(async (chain) => [ chain, await getGasPrice(mpp, chain), ]), @@ -34,16 +34,17 @@ async function getGasPrice( mpp: MultiProtocolProvider, chain: string, ): Promise { - const provider = mpp.getProvider(chain); - switch (provider.type) { - case ProviderType.EthersV5: { - const gasPrice = await provider.provider.getGasPrice(); + const protocolType = mpp.getProtocol(chain); + switch (protocolType) { + case ProtocolType.Ethereum: { + const provider = mpp.getProvider(chain); + const gasPrice = await (provider.provider as Provider).getGasPrice(); return { amount: ethers.utils.formatUnits(gasPrice, 'gwei'), decimals: 9, }; } - case ProviderType.CosmJsWasm: { + case ProtocolType.Cosmos: { const { amount } = await getCosmosChainGasPrice(chain); return { @@ -51,14 +52,14 @@ async function getGasPrice( decimals: 1, }; } - case ProviderType.SolanaWeb3: + case ProtocolType.Sealevel: // TODO get a reasonable value return { amount: '0.001', decimals: 9, }; default: - throw new Error(`Unsupported provider type: ${provider.type}`); + throw new Error(`Unsupported protocol type: ${protocolType}`); } } diff --git a/typescript/infra/scripts/print-token-prices.ts b/typescript/infra/scripts/print-token-prices.ts index b125bac95..6e912f630 100644 --- a/typescript/infra/scripts/print-token-prices.ts +++ b/typescript/infra/scripts/print-token-prices.ts @@ -1,16 +1,18 @@ import { objMap, pick } from '@hyperlane-xyz/utils'; -import { getEnvironmentConfig } from './core-utils.js'; +// Intentionally circumvent `mainnet3/index.ts` and `getEnvironmentConfig('mainnet3')` +// to avoid circular dependencies. +import { getRegistry as getMainnet3Registry } from '../config/environments/mainnet3/chains.js'; +import { supportedChainNames as mainnet3SupportedChainNames } from '../config/environments/mainnet3/supportedChainNames.js'; const CURRENCY = 'usd'; async function main() { - const environmentConfig = getEnvironmentConfig('mainnet3'); - - const registry = await environmentConfig.getRegistry(); + const registry = await getMainnet3Registry(); + const chainMetadata = await registry.getMetadata(); const metadata = pick( await registry.getMetadata(), - environmentConfig.supportedChainNames, + mainnet3SupportedChainNames, ); const ids = objMap( diff --git a/typescript/infra/src/config/chain.ts b/typescript/infra/src/config/chain.ts index 51584fc37..f9062b49b 100644 --- a/typescript/infra/src/config/chain.ts +++ b/typescript/infra/src/config/chain.ts @@ -1,4 +1,3 @@ -import { SecretManagerServiceClient } from '@google-cloud/secret-manager'; import { providers } from 'ethers'; import { IRegistry } from '@hyperlane-xyz/registry'; diff --git a/typescript/infra/src/govern/HyperlaneAppGovernor.ts b/typescript/infra/src/govern/HyperlaneAppGovernor.ts index cfe2243a8..3bbefbce1 100644 --- a/typescript/infra/src/govern/HyperlaneAppGovernor.ts +++ b/typescript/infra/src/govern/HyperlaneAppGovernor.ts @@ -77,7 +77,7 @@ export abstract class HyperlaneAppGovernor< } } - protected async sendCalls(chain: ChainName, confirm: boolean) { + protected async sendCalls(chain: ChainName, requestConfirmation: boolean) { const calls = this.calls[chain]; console.log(`\nFound ${calls.length} transactions for ${chain}`); const filterCalls = (submissionType: SubmissionType) => @@ -93,15 +93,16 @@ export abstract class HyperlaneAppGovernor< calls.map((c) => console.log(`> > ${c.description} (to: ${c.to} data: ${c.data})`), ); - const response = - !confirm || - (await prompts({ - type: 'confirm', - name: 'value', - message: 'Can you confirm?', - initial: false, - })); - return !!response; + + if (!requestConfirmation) return true; + + const { value: confirmed } = await prompts({ + type: 'confirm', + name: 'value', + message: 'Can you confirm?', + initial: false, + }); + return !!confirmed; } return false; }; @@ -157,15 +158,21 @@ export abstract class HyperlaneAppGovernor< protected async inferCallSubmissionTypes() { for (const chain of Object.keys(this.calls)) { - for (const call of this.calls[chain]) { - let submissionType = await this.inferCallSubmissionType(chain, call); - if (submissionType === SubmissionType.MANUAL) { - submissionType = await this.inferICAEncodedSubmissionType( - chain, - call, - ); + try { + for (const call of this.calls[chain]) { + let submissionType = await this.inferCallSubmissionType(chain, call); + if (submissionType === SubmissionType.MANUAL) { + submissionType = await this.inferICAEncodedSubmissionType( + chain, + call, + ); + } + call.submissionType = submissionType; } - call.submissionType = submissionType; + } catch (error) { + console.error( + `Error inferring call submission types for chain ${chain}: ${error}`, + ); } } } @@ -253,16 +260,34 @@ export abstract class HyperlaneAppGovernor< // This should implicitly check whether or not the owner is a gnosis // safe. if (!this.canPropose[chain].has(safeAddress)) { - this.canPropose[chain].set( - safeAddress, - await canProposeSafeTransactions( + try { + const canPropose = await canProposeSafeTransactions( signerAddress, chain, multiProvider, safeAddress, - ), - ); + ); + this.canPropose[chain].set(safeAddress, canPropose); + } catch (error) { + // if we hit this error, it's likely a custom safe chain + // so let's fallback to a manual submission + if ( + error instanceof Error && + (error.message.includes('Invalid MultiSend contract address') || + error.message.includes( + 'Invalid MultiSendCallOnly contract address', + )) + ) { + console.warn(`${error.message}: Setting submission type to MANUAL`); + return SubmissionType.MANUAL; + } else { + console.error( + `Failed to determine if signer can propose safe transactions: ${error}`, + ); + } + } } + // 2b. Check if calling from the owner/safeAddress will succeed. if ( this.canPropose[chain].get(safeAddress) && @@ -271,6 +296,7 @@ export abstract class HyperlaneAppGovernor< return SubmissionType.SAFE; } } + return SubmissionType.MANUAL; } diff --git a/typescript/sdk/src/aws/validator.ts b/typescript/sdk/src/aws/validator.ts index a60c05b0a..11f91c576 100644 --- a/typescript/sdk/src/aws/validator.ts +++ b/typescript/sdk/src/aws/validator.ts @@ -63,12 +63,17 @@ export class S3Validator extends BaseValidator { } async getAnnouncement(): Promise { + const { value } = await this.getSignedAnnouncement(); + return value; + } + + async getSignedAnnouncement(): Promise { const resp = await this.s3Bucket.getS3Obj(ANNOUNCEMENT_KEY); if (!resp) { throw new Error('No announcement found'); } - return resp.data.value; + return resp.data; } async getCheckpoint(index: number): Promise { diff --git a/typescript/sdk/src/consts/multisigIsm.ts b/typescript/sdk/src/consts/multisigIsm.ts index 6dd1ba4c9..5428e9446 100644 --- a/typescript/sdk/src/consts/multisigIsm.ts +++ b/typescript/sdk/src/consts/multisigIsm.ts @@ -116,6 +116,14 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + fraxtal: { + threshold: 2, + validators: [ + '0x4bce180dac6da60d0f3a2bdf036ffe9004f944c1', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + ], + }, + fuji: { threshold: 2, validators: [ @@ -158,6 +166,15 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + linea: { + threshold: 2, + validators: [ + '0xf2d5409a59e0f5ae7635aff73685624904a77d94', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + ], + }, + mantapacific: { threshold: 5, validators: [ @@ -213,6 +230,11 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + osmosis: { + threshold: 1, + validators: ['0xea483af11c19fa41b16c31d1534c2a486a92bcac'], + }, + plumetestnet: { threshold: 1, validators: ['0xe765a214849f3ecdf00793b97d00422f2d408ea6'], @@ -264,6 +286,14 @@ export const defaultMultisigConfigs: ChainMap = { ], }, + sei: { + threshold: 2, + validators: [ + '0x9920d2dbf6c85ffc228fdc2e810bf895732c6aa5', + '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly + ], + }, + sepolia: { threshold: 2, validators: [ diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts index 1f679ca62..ca3046848 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts @@ -373,12 +373,23 @@ export class HyperlaneIsmFactory extends HyperlaneApp { destination, config.owner, ); - const tx = await domainRoutingIsmFactory.deploy( + // estimate gas + const estimatedGas = await domainRoutingIsmFactory.estimateGas.deploy( owner, safeConfigDomains, submoduleAddresses, overrides, ); + // add 10% buffer + const tx = await domainRoutingIsmFactory.deploy( + owner, + safeConfigDomains, + submoduleAddresses, + { + ...overrides, + gasLimit: estimatedGas.add(estimatedGas.div(10)), // 10% buffer + }, + ); receipt = await this.multiProvider.handleTx(destination, tx); // TODO: Break this out into a generalized function @@ -457,11 +468,19 @@ export class HyperlaneIsmFactory extends HyperlaneApp { `Deploying new ${threshold} of ${values.length} address set to ${chain}`, ); const overrides = this.multiProvider.getTransactionOverrides(chain); - const hash = await factory['deploy(address[],uint8)']( + + // estimate gas + const estimatedGas = await factory.estimateGas['deploy(address[],uint8)']( sorted, threshold, overrides, ); + // add 10% buffer + const hash = await factory['deploy(address[],uint8)'](sorted, threshold, { + ...overrides, + gasLimit: estimatedGas.add(estimatedGas.div(10)), // 10% buffer + }); + await this.multiProvider.handleTx(chain, hash); // TODO: add proxy verification artifact? } else { diff --git a/typescript/sdk/src/utils/gnosisSafe.js b/typescript/sdk/src/utils/gnosisSafe.js index 892785ec5..0eeb86464 100644 --- a/typescript/sdk/src/utils/gnosisSafe.js +++ b/typescript/sdk/src/utils/gnosisSafe.js @@ -16,9 +16,19 @@ export function getSafeService(chain, multiProvider) { export function getSafe(chain, multiProvider, safeAddress) { const signer = multiProvider.getSigner(chain); const ethAdapter = new EthersAdapter({ ethers, signerOrProvider: signer }); + + const domainId = multiProvider.getDomainId(chain); + const contractNetworks = { + [domainId]: { + multiSendAddress: safeAddress, + multiSendCallOnlyAddress: safeAddress, + }, + }; + return Safe.default.create({ ethAdapter, - safeAddress: safeAddress, + safeAddress, + contractNetworks, }); } From 9c7cf45c41f7cde15b4f39c4951ab77a4488ac27 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Tue, 18 Jun 2024 17:51:21 +0100 Subject: [PATCH 17/46] feat: reduce extraneous entries in generated registry/agent artifacts (#3988) - filters out remote domain metadata from configs written to disk ``` "ancient8": { // this gets removed "arbitrum": { "aggregationHook": "0xblahblahblah", "interchainSecurityModule": "0xblahblah" ...etc }, // keep the usual entries like this "aggregationHook": "0x1EF4ED658d542524d1D547ba2F94d3B038a55b8f", "batchContractAddress": "0x4C97D35c668EE5194a13c8DE8Afc18cce40C9F28", "blockExplorers": [ ...etc ``` - no longer include secret overrides in the configs written to disk - i.e. use public registry RPCs and chain metadata (want our output to be like that of update-agent-config, but with updated contract addresses only) --------- Signed-off-by: Paul Balaji --- typescript/infra/scripts/agent-utils.ts | 9 +++----- typescript/infra/src/deployment/deploy.ts | 25 ++++++++++++++------- typescript/infra/src/utils/utils.ts | 27 +++++++++++++++++++++-- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/typescript/infra/scripts/agent-utils.ts b/typescript/infra/scripts/agent-utils.ts index 313af5d44..a0f066998 100644 --- a/typescript/infra/scripts/agent-utils.ts +++ b/typescript/infra/scripts/agent-utils.ts @@ -4,7 +4,6 @@ import yargs, { Argv } from 'yargs'; import { ChainAddresses, IRegistry } from '@hyperlane-xyz/registry'; import { ChainMap, - ChainMetadata, ChainName, CoreConfig, MultiProtocolProvider, @@ -16,7 +15,6 @@ import { ProtocolType, objFilter, objMap, - objMerge, promiseObjAll, rootLogger, symmetricDifference, @@ -36,10 +34,6 @@ import { getCurrentKubernetesContext } from '../src/agents/index.js'; import { getCloudAgentKey } from '../src/agents/key-utils.js'; import { CloudAgentKey } from '../src/agents/keys.js'; import { RootAgentConfig } from '../src/config/agent/agent.js'; -import { - fetchProvider, - getSecretMetadataOverrides, -} from '../src/config/chain.js'; import { AgentEnvironment, DeployEnvironment, @@ -50,6 +44,7 @@ import { Role } from '../src/roles.js'; import { assertContext, assertRole, + filterRemoteDomainMetadata, getInfraPath, inCIMode, readJSONAtPath, @@ -424,6 +419,8 @@ export function writeAddresses( module: Modules, addressesMap: ChainMap>, ) { + addressesMap = filterRemoteDomainMetadata(addressesMap); + if (isRegistryModule(environment, module)) { for (const [chainName, addresses] of Object.entries(addressesMap)) { getRegistry().updateChain({ chainName, addresses }); diff --git a/typescript/infra/src/deployment/deploy.ts b/typescript/infra/src/deployment/deploy.ts index 4a418def7..55d713fd9 100644 --- a/typescript/infra/src/deployment/deploy.ts +++ b/typescript/infra/src/deployment/deploy.ts @@ -11,7 +11,6 @@ import { } from '@hyperlane-xyz/sdk'; import { ProtocolType, - objFilter, objMap, objMerge, promiseObjAll, @@ -25,10 +24,12 @@ import { getAgentConfigJsonPath, writeAddresses, } from '../../scripts/agent-utils.js'; +import { getEnvironmentConfig } from '../../scripts/core-utils.js'; import { DeployEnvironment, envNameToAgentEnv } from '../config/environment.js'; import { getCosmosChainGasPrice } from '../config/gas-oracle.js'; import { chainIsProtocol, + filterRemoteDomainMetadata, readJSONAtPath, writeJsonAtPath, writeMergedJSONAtPath, @@ -121,16 +122,18 @@ export async function writeAgentConfig( multiProvider: MultiProvider, environment: DeployEnvironment, ) { - const addresses = getAddresses(environment, Modules.CORE); - const addressesForEnv = objFilter( - addresses, - (chain, _): _ is ChainAddresses => multiProvider.hasChain(chain), - ); + // Get the addresses for the environment + const addressesMap = getAddresses( + environment, + Modules.CORE, + ) as ChainMap; + const addressesForEnv = filterRemoteDomainMetadata(addressesMap); const core = HyperlaneCore.fromAddressesMap(addressesForEnv, multiProvider); + // Write agent config indexing from the deployed Mailbox which stores the block number at deployment const startBlocks = await promiseObjAll( - objMap(addressesForEnv, async (chain, _) => { + objMap(addressesForEnv, async (chain: string, _) => { // If the index.from is specified in the chain metadata, use that. const indexFrom = multiProvider.getChainMetadata(chain).index?.from; if (indexFrom !== undefined) { @@ -173,11 +176,17 @@ export async function writeAgentConfig( const agentConfig = buildAgentConfig( environmentChains, - multiProvider, + await getEnvironmentConfig(environment).getMultiProvider( + undefined, + undefined, + // Don't use secrets + false, + ), addressesForEnv as ChainMap, startBlocks, additionalConfig, ); + writeMergedJSONAtPath( getAgentConfigJsonPath(envNameToAgentEnv[environment]), agentConfig, diff --git a/typescript/infra/src/utils/utils.ts b/typescript/infra/src/utils/utils.ts index d3a8075ff..4982e7a74 100644 --- a/typescript/infra/src/utils/utils.ts +++ b/typescript/infra/src/utils/utils.ts @@ -8,8 +8,13 @@ import path, { dirname, join } from 'path'; import { fileURLToPath } from 'url'; import { parse as yamlParse } from 'yaml'; -import { ChainName, NativeToken } from '@hyperlane-xyz/sdk'; -import { ProtocolType, objMerge } from '@hyperlane-xyz/utils'; +import { ChainMap, ChainName, NativeToken } from '@hyperlane-xyz/sdk'; +import { + Address, + ProtocolType, + objFilter, + objMerge, +} from '@hyperlane-xyz/utils'; import { Contexts } from '../../config/contexts.js'; import { testChainNames } from '../../config/environments/test/chains.js'; @@ -273,3 +278,21 @@ export function getInfraPath() { export function inCIMode() { return process.env.CI === 'true'; } + +// Filter out chains that are not supported by the multiProvider +// Filter out any value that is not a string e.g. remote domain metadata +export function filterRemoteDomainMetadata( + addressesMap: ChainMap>, +): ChainMap> { + return Object.fromEntries( + Object.entries(addressesMap).map(([chain, addresses]) => [ + chain, + // Filter out any non-string writes + // e.g. remote domain metadata that might be present + objFilter( + addresses, + (_, value): value is string => typeof value === 'string', + ), + ]), + ); +} From bbbe93206fb91cbfc122d619d968ced448bfbe98 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Wed, 19 Jun 2024 11:02:28 +0100 Subject: [PATCH 18/46] chore: bump default ISM max depth from 5 to 7 (#3989) ### Description Needed for some Renzo messages that hit the max depth ### Drive-by changes - drive by to update the agent config with the updated registry ### Related issues ### Backward compatibility ### Testing --- rust/agents/relayer/src/msg/metadata/base.rs | 3 ++- rust/agents/relayer/src/msg/processor.rs | 1 - rust/agents/relayer/src/relayer.rs | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/rust/agents/relayer/src/msg/metadata/base.rs b/rust/agents/relayer/src/msg/metadata/base.rs index 74449d10e..1416a7f56 100644 --- a/rust/agents/relayer/src/msg/metadata/base.rs +++ b/rust/agents/relayer/src/msg/metadata/base.rs @@ -278,8 +278,9 @@ pub struct BaseMetadataBuilder { allow_local_checkpoint_syncers: bool, metrics: Arc, db: HyperlaneRocksDB, - max_depth: u32, app_context_classifier: IsmAwareAppContextClassifier, + #[new(value = "7")] + max_depth: u32, } impl Debug for BaseMetadataBuilder { diff --git a/rust/agents/relayer/src/msg/processor.rs b/rust/agents/relayer/src/msg/processor.rs index 1c81c3017..664c1dc64 100644 --- a/rust/agents/relayer/src/msg/processor.rs +++ b/rust/agents/relayer/src/msg/processor.rs @@ -452,7 +452,6 @@ mod test { false, Arc::new(core_metrics), db.clone(), - 5, IsmAwareAppContextClassifier::new(Arc::new(MockMailboxContract::default()), vec![]), ) } diff --git a/rust/agents/relayer/src/relayer.rs b/rust/agents/relayer/src/relayer.rs index 4206c0584..3be0f1e59 100644 --- a/rust/agents/relayer/src/relayer.rs +++ b/rust/agents/relayer/src/relayer.rs @@ -242,7 +242,6 @@ impl BaseAgent for Relayer { settings.allow_local_checkpoint_syncers, core.metrics.clone(), db, - 5, IsmAwareAppContextClassifier::new( mailboxes[destination].clone(), settings.metric_app_contexts.clone(), From 3bb9d0a767086edd04494f8200447ad84035bfc9 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Wed, 19 Jun 2024 12:13:28 +0100 Subject: [PATCH 19/46] fix(cosmos): validator checkpoint & agent indexing improvements (#3958) - propagates RPC errors to the indexing logic, so errors cause sleeps instead of overwhelming the RPCs. This also greatly reduces cosmos log noisiness: from 9.5k logs per min, to 2.5k logs per min. - checks for published checkpoints in reverse, to prioritize recent messages among those from before the validator was spun up - fixes a validator bug where errors in checkpoint publishing would cause the entire checkpoint queue to be reiterated through, from scratch - Builds on top of https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3887 so we can test this out on osmosis ### Description ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- rust/agents/validator/src/submit.rs | 131 +++++++++--------- .../hyperlane-cosmos/src/interchain_gas.rs | 29 +--- rust/chains/hyperlane-cosmos/src/mailbox.rs | 26 +--- .../hyperlane-cosmos/src/merkle_tree_hook.rs | 28 +--- .../hyperlane-cosmos/src/providers/rpc.rs | 15 +- rust/chains/hyperlane-cosmos/src/utils.rs | 31 ++++- rust/config/mainnet_config.json | 4 +- .../src/accumulator/incremental.rs | 2 +- rust/hyperlane-core/src/rpc_clients/retry.rs | 8 -- rust/hyperlane-core/src/types/indexing.rs | 8 +- .../programs/mailbox-test/src/functional.rs | 2 +- rust/utils/run-locally/src/cosmos/types.rs | 5 +- .../config/environments/mainnet3/agent.ts | 4 +- 13 files changed, 129 insertions(+), 164 deletions(-) diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index bc040ed56..8f91f284f 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -4,7 +4,7 @@ use std::time::{Duration, Instant}; use std::vec; use hyperlane_core::rpc_clients::call_and_retry_indefinitely; -use hyperlane_core::{ChainCommunicationError, ChainResult, MerkleTreeHook}; +use hyperlane_core::{ChainResult, MerkleTreeHook}; use prometheus::IntGauge; use tokio::time::sleep; use tracing::{debug, error, info}; @@ -61,17 +61,8 @@ impl ValidatorSubmitter { /// Runs idly forever once the target checkpoint is reached to avoid exiting the task. pub(crate) async fn backfill_checkpoint_submitter(self, target_checkpoint: Checkpoint) { let mut tree = IncrementalMerkle::default(); - call_and_retry_indefinitely(|| { - let target_checkpoint = target_checkpoint; - let self_clone = self.clone(); - Box::pin(async move { - self_clone - .submit_checkpoints_until_correctness_checkpoint(&mut tree, &target_checkpoint) - .await?; - Ok(()) - }) - }) - .await; + self.submit_checkpoints_until_correctness_checkpoint(&mut tree, &target_checkpoint) + .await; info!( ?target_checkpoint, @@ -132,21 +123,8 @@ impl ValidatorSubmitter { sleep(self.interval).await; continue; } - - tree = call_and_retry_indefinitely(|| { - let mut tree = tree; - let self_clone = self.clone(); - Box::pin(async move { - self_clone - .submit_checkpoints_until_correctness_checkpoint( - &mut tree, - &latest_checkpoint, - ) - .await?; - Ok(tree) - }) - }) - .await; + self.submit_checkpoints_until_correctness_checkpoint(&mut tree, &latest_checkpoint) + .await; self.metrics .latest_checkpoint_processed @@ -162,7 +140,7 @@ impl ValidatorSubmitter { &self, tree: &mut IncrementalMerkle, correctness_checkpoint: &Checkpoint, - ) -> ChainResult<()> { + ) { // This should never be called with a tree that is ahead of the correctness checkpoint. assert!( !tree_exceeds_checkpoint(correctness_checkpoint, tree), @@ -182,7 +160,14 @@ impl ValidatorSubmitter { 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))? + .retrieve_merkle_tree_insertion_by_leaf_index(&(tree.count() as u32)) + .unwrap_or_else(|err| { + panic!( + "Error fetching merkle tree insertion for leaf index {}: {}", + tree.count(), + err + ) + }) { debug!( index = insertion.index(), @@ -225,9 +210,7 @@ impl ValidatorSubmitter { ?correctness_checkpoint, "Incorrect tree root, something went wrong" ); - return Err(ChainCommunicationError::CustomError( - "Incorrect tree root, something went wrong".to_string(), - )); + panic!("Incorrect tree root, something went wrong"); } if !checkpoint_queue.is_empty() { @@ -236,57 +219,71 @@ impl ValidatorSubmitter { 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" ); } - - Ok(()) } - /// Signs and submits any previously unsubmitted checkpoints. - async fn sign_and_submit_checkpoints( + async fn sign_and_submit_checkpoint( &self, - checkpoints: Vec, + checkpoint: CheckpointWithMessageId, ) -> ChainResult<()> { - let last_checkpoint = checkpoints.as_slice()[checkpoints.len() - 1]; - - 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; - } - 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: move these into S3 implementations - // small sleep before signing next checkpoint to avoid rate limiting - sleep(Duration::from_millis(100)).await; + let existing = self + .checkpoint_syncer + .fetch_checkpoint(checkpoint.index) + .await?; + if existing.is_some() { + debug!(index = checkpoint.index, "Checkpoint already submitted"); + return Ok(()); } - + let signed_checkpoint = self.signer.sign(checkpoint).await?; self.checkpoint_syncer - .update_latest_index(last_checkpoint.index) + .write_checkpoint(&signed_checkpoint) .await?; + debug!(index = checkpoint.index, "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; Ok(()) } + + /// Signs and submits any previously unsubmitted checkpoints. + async fn sign_and_submit_checkpoints(&self, checkpoints: Vec) { + let last_checkpoint = checkpoints.as_slice()[checkpoints.len() - 1]; + // Submits checkpoints to the store in reverse order. This speeds up processing historic checkpoints (those before the validator is spun up), + // since those are the most likely to make messages become processable. + // A side effect is that new checkpoints will also be submitted in reverse order. + for queued_checkpoint in checkpoints.into_iter().rev() { + // certain checkpoint stores rate limit very aggressively, so we retry indefinitely + call_and_retry_indefinitely(|| { + let self_clone = self.clone(); + Box::pin(async move { + self_clone + .sign_and_submit_checkpoint(queued_checkpoint) + .await?; + Ok(()) + }) + }) + .await; + } + + call_and_retry_indefinitely(|| { + let self_clone = self.clone(); + Box::pin(async move { + self_clone + .checkpoint_syncer + .update_latest_index(last_checkpoint.index) + .await?; + Ok(()) + }) + }) + .await; + } } /// Returns whether the tree exceeds the checkpoint. diff --git a/rust/chains/hyperlane-cosmos/src/interchain_gas.rs b/rust/chains/hyperlane-cosmos/src/interchain_gas.rs index 4444a56ea..eff636c2e 100644 --- a/rust/chains/hyperlane-cosmos/src/interchain_gas.rs +++ b/rust/chains/hyperlane-cosmos/src/interchain_gas.rs @@ -1,6 +1,5 @@ use async_trait::async_trait; use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; -use futures::future; use hyperlane_core::{ ChainCommunicationError, ChainResult, ContractLocator, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneProvider, Indexed, Indexer, InterchainGasPaymaster, @@ -9,12 +8,15 @@ use hyperlane_core::{ use once_cell::sync::Lazy; use std::ops::RangeInclusive; use tendermint::abci::EventAttribute; -use tracing::{instrument, warn}; +use tracing::instrument; use crate::{ rpc::{CosmosWasmIndexer, ParsedEvent, WasmIndexer}, signers::Signer, - utils::{CONTRACT_ADDRESS_ATTRIBUTE_KEY, CONTRACT_ADDRESS_ATTRIBUTE_KEY_BASE64}, + utils::{ + execute_and_parse_log_futures, CONTRACT_ADDRESS_ATTRIBUTE_KEY, + CONTRACT_ADDRESS_ATTRIBUTE_KEY_BASE64, + }, ConnectionConf, CosmosProvider, HyperlaneCosmosError, }; @@ -223,26 +225,7 @@ impl Indexer for CosmosInterchainGasPaymasterIndexer { }) .collect(); - // TODO: this can be refactored when we rework indexing, to be part of the block-by-block indexing - let result = future::join_all(logs_futures) - .await - .into_iter() - .flatten() - .map(|(logs, block_number)| { - if let Err(err) = &logs { - warn!(?err, ?block_number, "Failed to fetch logs for block"); - } - logs - }) - // Propagate errors from any of the queries. This will cause the entire range to be retried, - // including successful ones, but we don't have a way to handle partial failures in a range for now. - .collect::, _>>()? - .into_iter() - .flatten() - .map(|(log, meta)| (Indexed::new(log), meta)) - .collect(); - - Ok(result) + execute_and_parse_log_futures(logs_futures).await } async fn get_finalized_block_number(&self) -> ChainResult { diff --git a/rust/chains/hyperlane-cosmos/src/mailbox.rs b/rust/chains/hyperlane-cosmos/src/mailbox.rs index 833b92b89..41f45bd81 100644 --- a/rust/chains/hyperlane-cosmos/src/mailbox.rs +++ b/rust/chains/hyperlane-cosmos/src/mailbox.rs @@ -1,5 +1,4 @@ use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; -use futures::future; use std::{ fmt::{Debug, Formatter}, io::Cursor, @@ -8,14 +7,15 @@ use std::{ str::FromStr, }; -use crate::payloads::mailbox::{ - GeneralMailboxQuery, ProcessMessageRequest, ProcessMessageRequestInner, -}; use crate::payloads::{general, mailbox}; use crate::rpc::{CosmosWasmIndexer, ParsedEvent, WasmIndexer}; use crate::CosmosProvider; use crate::{address::CosmosAddress, types::tx_response_to_outcome}; use crate::{grpc::WasmProvider, HyperlaneCosmosError}; +use crate::{ + payloads::mailbox::{GeneralMailboxQuery, ProcessMessageRequest, ProcessMessageRequestInner}, + utils::execute_and_parse_log_futures, +}; use crate::{signers::Signer, utils::get_block_height_for_lag, ConnectionConf}; use async_trait::async_trait; use cosmrs::proto::cosmos::base::abci::v1beta1::TxResponse; @@ -371,23 +371,7 @@ impl Indexer for CosmosMailboxIndexer { }) .collect(); - // TODO: this can be refactored when we rework indexing, to be part of the block-by-block indexing - let result = future::join_all(logs_futures) - .await - .into_iter() - .flatten() - .filter_map(|(logs_res, block_number)| match logs_res { - Ok(logs) => Some(logs), - Err(err) => { - warn!(?err, ?block_number, "Failed to fetch logs for block"); - None - } - }) - .flatten() - .map(|(log, meta)| (log.into(), meta)) - .collect(); - - Ok(result) + execute_and_parse_log_futures(logs_futures).await } async fn get_finalized_block_number(&self) -> ChainResult { diff --git a/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs b/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs index 54acdf80f..cb4e6ba00 100644 --- a/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs +++ b/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs @@ -2,7 +2,6 @@ use std::{fmt::Debug, num::NonZeroU64, ops::RangeInclusive, str::FromStr}; use async_trait::async_trait; use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; -use futures::future; use hyperlane_core::{ accumulator::incremental::IncrementalMerkle, ChainCommunicationError, ChainResult, Checkpoint, ContractLocator, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneProvider, @@ -10,17 +9,14 @@ use hyperlane_core::{ }; use once_cell::sync::Lazy; use tendermint::abci::EventAttribute; -use tracing::{instrument, warn}; +use tracing::instrument; use crate::{ grpc::WasmProvider, - payloads::{ - general::{self}, - merkle_tree_hook, - }, + payloads::{general, merkle_tree_hook}, rpc::{CosmosWasmIndexer, ParsedEvent, WasmIndexer}, utils::{ - get_block_height_for_lag, CONTRACT_ADDRESS_ATTRIBUTE_KEY, + execute_and_parse_log_futures, get_block_height_for_lag, CONTRACT_ADDRESS_ATTRIBUTE_KEY, CONTRACT_ADDRESS_ATTRIBUTE_KEY_BASE64, }, ConnectionConf, CosmosProvider, HyperlaneCosmosError, Signer, @@ -304,23 +300,7 @@ impl Indexer for CosmosMerkleTreeHookIndexer { }) .collect(); - // TODO: this can be refactored when we rework indexing, to be part of the block-by-block indexing - let result = future::join_all(logs_futures) - .await - .into_iter() - .flatten() - .filter_map(|(logs_res, block_number)| match logs_res { - Ok(logs) => Some(logs), - Err(err) => { - warn!(?err, ?block_number, "Failed to fetch logs for block"); - None - } - }) - .flatten() - .map(|(log, meta)| (log.into(), meta)) - .collect(); - - Ok(result) + execute_and_parse_log_futures(logs_futures).await } /// Get the chain's latest block number that has reached finality diff --git a/rust/chains/hyperlane-cosmos/src/providers/rpc.rs b/rust/chains/hyperlane-cosmos/src/providers/rpc.rs index 7648e879e..b5b924def 100644 --- a/rust/chains/hyperlane-cosmos/src/providers/rpc.rs +++ b/rust/chains/hyperlane-cosmos/src/providers/rpc.rs @@ -1,6 +1,5 @@ use async_trait::async_trait; use cosmrs::rpc::client::Client; -use hyperlane_core::rpc_clients::call_with_retry; use hyperlane_core::{ChainCommunicationError, ChainResult, ContractLocator, LogMeta, H256, U256}; use sha256::digest; use std::fmt::Debug; @@ -216,9 +215,7 @@ impl CosmosWasmIndexer { impl WasmIndexer for CosmosWasmIndexer { #[instrument(err, skip(self))] async fn get_finalized_block_number(&self) -> ChainResult { - let latest_block = - call_with_retry(move || Box::pin(Self::get_latest_block(self.provider.rpc().clone()))) - .await?; + let latest_block = Self::get_latest_block(self.provider.rpc().clone()).await?; let latest_height: u32 = latest_block .block .header @@ -242,11 +239,11 @@ impl WasmIndexer for CosmosWasmIndexer { let client = self.provider.rpc().clone(); debug!(?block_number, cursor_label, domain=?self.provider.domain, "Getting logs in block"); - let (block, block_results) = tokio::join!( - call_with_retry(|| { Box::pin(Self::get_block(client.clone(), block_number)) }), - call_with_retry(|| { Box::pin(Self::get_block_results(client.clone(), block_number)) }), - ); + // The two calls below could be made in parallel, but on cosmos rate limiting is a bigger problem + // than indexing latency, so we do them sequentially. + let block = Self::get_block(client.clone(), block_number).await?; + let block_results = Self::get_block_results(client.clone(), block_number).await?; - Ok(self.handle_txs(block?, block_results?, parser, cursor_label)) + Ok(self.handle_txs(block, block_results, parser, cursor_label)) } } diff --git a/rust/chains/hyperlane-cosmos/src/utils.rs b/rust/chains/hyperlane-cosmos/src/utils.rs index 898298f43..dfcf0190c 100644 --- a/rust/chains/hyperlane-cosmos/src/utils.rs +++ b/rust/chains/hyperlane-cosmos/src/utils.rs @@ -1,8 +1,11 @@ use std::num::NonZeroU64; use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; -use hyperlane_core::ChainResult; +use futures::future; +use hyperlane_core::{ChainCommunicationError, ChainResult, Indexed, LogMeta}; use once_cell::sync::Lazy; +use tokio::task::JoinHandle; +use tracing::warn; use crate::grpc::{WasmGrpcProvider, WasmProvider}; @@ -31,6 +34,32 @@ pub(crate) async fn get_block_height_for_lag( Ok(block_height) } +#[allow(clippy::type_complexity)] +pub(crate) async fn execute_and_parse_log_futures>>( + logs_futures: Vec, ChainCommunicationError>, u32)>>, +) -> ChainResult, LogMeta)>> { + // TODO: this can be refactored when we rework indexing, to be part of the block-by-block indexing + let result = future::join_all(logs_futures) + .await + .into_iter() + .flatten() + .map(|(logs, block_number)| { + if let Err(err) = &logs { + warn!(?err, ?block_number, "Failed to fetch logs for block"); + } + logs + }) + // Propagate errors from any of the queries. This will cause the entire range to be retried, + // including successful ones, but we don't have a way to handle partial failures in a range for now. + // This is also why cosmos indexing should be run with small chunks (currently set to 5). + .collect::, _>>()? + .into_iter() + .flatten() + .map(|(log, meta)| (log.into(), meta)) + .collect(); + Ok(result) +} + #[cfg(test)] /// Helper function to create a Vec from a JSON string - /// crate::payloads::general::EventAttribute has a Deserialize impl while diff --git a/rust/config/mainnet_config.json b/rust/config/mainnet_config.json index 5be8bfff0..10a980d33 100644 --- a/rust/config/mainnet_config.json +++ b/rust/config/mainnet_config.json @@ -715,7 +715,7 @@ } ], "index": { - "chunk": 25, + "chunk": 5, "from": 58419500 }, "interchainGasPaymaster": "0x27ae52298e5b53b34b7ae0ca63e05845c31e1f59", @@ -1007,7 +1007,7 @@ } ], "index": { - "chunk": 50, + "chunk": 5, "from": 4000000 }, "interchainGasPaymaster": "0x504ee9ac43ec5814e00c7d21869a90ec52becb489636bdf893b7df9d606b5d67", diff --git a/rust/hyperlane-core/src/accumulator/incremental.rs b/rust/hyperlane-core/src/accumulator/incremental.rs index 0c265202e..5595bbc8c 100644 --- a/rust/hyperlane-core/src/accumulator/incremental.rs +++ b/rust/hyperlane-core/src/accumulator/incremental.rs @@ -7,7 +7,7 @@ use crate::accumulator::{ H256, TREE_DEPTH, ZERO_HASHES, }; -#[derive(BorshDeserialize, BorshSerialize, Debug, Clone, Copy, new, PartialEq, Eq)] +#[derive(BorshDeserialize, BorshSerialize, Debug, Clone, new, PartialEq, Eq)] /// An incremental merkle tree, modeled on the eth2 deposit contract pub struct IncrementalMerkle { /// The branch of the tree diff --git a/rust/hyperlane-core/src/rpc_clients/retry.rs b/rust/hyperlane-core/src/rpc_clients/retry.rs index b5c4e0bd7..7e60cf8de 100644 --- a/rust/hyperlane-core/src/rpc_clients/retry.rs +++ b/rust/hyperlane-core/src/rpc_clients/retry.rs @@ -34,14 +34,6 @@ pub async fn call_and_retry_n_times( )) } -/// Retry calling a fallible async function a predefined number of times -#[instrument(err, skip(f))] -pub async fn call_with_retry( - f: impl FnMut() -> Pin> + Send>>, -) -> ChainResult { - call_and_retry_n_times(f, DEFAULT_MAX_RPC_RETRIES).await -} - /// Retry calling a fallible async function indefinitely, until it succeeds pub async fn call_and_retry_indefinitely( f: impl FnMut() -> Pin> + Send>>, diff --git a/rust/hyperlane-core/src/types/indexing.rs b/rust/hyperlane-core/src/types/indexing.rs index 5a7cfc48e..93ec355a6 100644 --- a/rust/hyperlane-core/src/types/indexing.rs +++ b/rust/hyperlane-core/src/types/indexing.rs @@ -1,6 +1,6 @@ use derive_new::new; -use crate::{HyperlaneMessage, MerkleTreeInsertion, Sequenced}; +use crate::{HyperlaneMessage, InterchainGasPayment, MerkleTreeInsertion, Sequenced}; /// Wrapper struct that adds indexing information to a type #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, new)] @@ -73,3 +73,9 @@ impl From for Indexed { Indexed::new(value).with_sequence(sequence as _) } } + +impl From for Indexed { + fn from(value: InterchainGasPayment) -> Self { + Indexed::new(value) + } +} diff --git a/rust/sealevel/programs/mailbox-test/src/functional.rs b/rust/sealevel/programs/mailbox-test/src/functional.rs index 088dc7da7..99ad69305 100644 --- a/rust/sealevel/programs/mailbox-test/src/functional.rs +++ b/rust/sealevel/programs/mailbox-test/src/functional.rs @@ -212,7 +212,7 @@ async fn test_dispatch_from_eoa() { local_domain: LOCAL_DOMAIN, outbox_bump_seed: mailbox_accounts.outbox_bump_seed, owner: Some(payer.pubkey()), - tree: expected_tree, + tree: expected_tree.clone(), }, ) .await; diff --git a/rust/utils/run-locally/src/cosmos/types.rs b/rust/utils/run-locally/src/cosmos/types.rs index 120ed05af..78a45e6c2 100644 --- a/rust/utils/run-locally/src/cosmos/types.rs +++ b/rust/utils/run-locally/src/cosmos/types.rs @@ -177,10 +177,7 @@ impl AgentConfig { amount: "0.05".to_string(), }, contract_address_bytes: 32, - index: AgentConfigIndex { - from: 1, - chunk: 100, - }, + index: AgentConfigIndex { from: 1, chunk: 5 }, } } } diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 39e201053..afdcd7676 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -231,7 +231,7 @@ const hyperlane: RootAgentConfig = { validators: { docker: { repo, - tag: '59451d6-20240612-171611', + tag: '47fbe58-20240617-173324', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.Hyperlane), @@ -265,7 +265,7 @@ const releaseCandidate: RootAgentConfig = { validators: { docker: { repo, - tag: 'c9c5d37-20240510-014327', + tag: '47fbe58-20240617-173324', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.ReleaseCandidate), From 030eaf120491c5a2ccafe14dd62b372143cf8494 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Wed, 19 Jun 2024 17:00:06 +0100 Subject: [PATCH 20/46] chore: bump agent docker images (#3999) ### Description ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- typescript/infra/config/environments/mainnet3/agent.ts | 8 ++++---- typescript/infra/config/environments/testnet4/agent.ts | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index afdcd7676..566986588 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -223,7 +223,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '59451d6-20240612-171611', + tag: '3bb9d0a-20240619-130157', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContexts, @@ -231,7 +231,7 @@ const hyperlane: RootAgentConfig = { validators: { docker: { repo, - tag: '47fbe58-20240617-173324', + tag: '3bb9d0a-20240619-130157', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.Hyperlane), @@ -254,7 +254,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '939fa81-20240607-194607', + tag: '3bb9d0a-20240619-130157', }, // We're temporarily (ab)using the RC relayer as a way to increase // message throughput. @@ -265,7 +265,7 @@ const releaseCandidate: RootAgentConfig = { validators: { docker: { repo, - tag: '47fbe58-20240617-173324', + tag: '3bb9d0a-20240619-130157', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.ReleaseCandidate), diff --git a/typescript/infra/config/environments/testnet4/agent.ts b/typescript/infra/config/environments/testnet4/agent.ts index 4ce2ab88d..c21678f4d 100644 --- a/typescript/infra/config/environments/testnet4/agent.ts +++ b/typescript/infra/config/environments/testnet4/agent.ts @@ -98,7 +98,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'c9c5d37-20240510-014327', + tag: '3bb9d0a-20240619-130157', }, blacklist: [ ...releaseCandidateHelloworldMatchingList, @@ -127,7 +127,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'e09a360-20240520-090014', + tag: '3bb9d0a-20240619-130157', }, chains: validatorChainConfig(Contexts.Hyperlane), }, @@ -149,7 +149,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'c9c5d37-20240510-014327', + tag: '3bb9d0a-20240619-130157', }, whitelist: [...releaseCandidateHelloworldMatchingList], gasPaymentEnforcement, @@ -159,7 +159,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'c9c5d37-20240510-014327', + tag: '3bb9d0a-20240619-130157', }, chains: validatorChainConfig(Contexts.ReleaseCandidate), }, From 6cff4a2a9e45f142ecee219d0ec1a926f672f850 Mon Sep 17 00:00:00 2001 From: Tien Dao Date: Thu, 20 Jun 2024 01:24:22 +0700 Subject: [PATCH 21/46] fix: prevent duplication in verification artifacts array (#4001) ## Enhance Artifact Deduplication in HyperlaneDeployer ### Description **Overview**: The `addVerificationArtifacts` method in the `HyperlaneDeployer` class previously added verification artifacts without checking for duplicates, potentially leading to redundant data that could affect performance and reliability. This PR introduces a mechanism to prevent such duplication by implementing a shallow comparison check before adding new artifacts. **Changes**: - Modified the `addVerificationArtifacts` method to include a shallow comparison against existing artifacts. - Used direct property comparisons to efficiently prevent the addition of duplicate entries. - Ensured that the comparison handles large ABI-encoded strings efficiently by comparing string references. **Benefits:** - Efficiency: Reduces unnecessary processing and storage by avoiding duplicate entries. - Accuracy: Ensures that the verification process uses a unique set of artifacts, improving the reliability of deployment verifications. - Performance: Minimizes the overhead associated with handling large sets of data, particularly with large ABI-encoded strings. **Testing:** - Added unit tests to verify that duplicates are not added to the artifacts array. - Ensured existing integration tests pass with the new changes, confirming backward compatibility and functional integrity. This update streamlines the deployment process by ensuring that only necessary and unique verification artifacts are considered, thereby optimizing both memory usage and processing time during contract deployments. --------- Co-authored-by: tiendn --- typescript/.changeset/tall-radios-grin.md | 5 ++ .../sdk/src/deploy/HyperlaneDeployer.ts | 10 +++- .../sdk/src/deploy/verify/utils.test.ts | 58 +++++++++++++++++++ typescript/sdk/src/deploy/verify/utils.ts | 25 ++++++++ 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 typescript/.changeset/tall-radios-grin.md create mode 100644 typescript/sdk/src/deploy/verify/utils.test.ts diff --git a/typescript/.changeset/tall-radios-grin.md b/typescript/.changeset/tall-radios-grin.md new file mode 100644 index 000000000..87e9cb5b2 --- /dev/null +++ b/typescript/.changeset/tall-radios-grin.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': major +--- + +fix(sdk): refactor `addVerificationArtifacts` for enhanced Artifact Deduplication in HyperlaneDeployer diff --git a/typescript/sdk/src/deploy/HyperlaneDeployer.ts b/typescript/sdk/src/deploy/HyperlaneDeployer.ts index d9fefa0e1..e6845dda4 100644 --- a/typescript/sdk/src/deploy/HyperlaneDeployer.ts +++ b/typescript/sdk/src/deploy/HyperlaneDeployer.ts @@ -52,6 +52,7 @@ import { import { buildVerificationInput, getContractVerificationInput, + shouldAddVerificationInput, } from './verify/utils.js'; export interface DeployerOptions { @@ -184,11 +185,14 @@ export abstract class HyperlaneDeployer< artifacts: ContractVerificationInput[], ): void { this.verificationInputs[chain] = this.verificationInputs[chain] || []; + artifacts.forEach((artifact) => { - this.verificationInputs[chain].push(artifact); + if ( + shouldAddVerificationInput(this.verificationInputs, chain, artifact) + ) { + this.verificationInputs[chain].push(artifact); + } }); - - // TODO: deduplicate } protected async runIf( diff --git a/typescript/sdk/src/deploy/verify/utils.test.ts b/typescript/sdk/src/deploy/verify/utils.test.ts new file mode 100644 index 000000000..5a0f07920 --- /dev/null +++ b/typescript/sdk/src/deploy/verify/utils.test.ts @@ -0,0 +1,58 @@ +import { expect } from 'chai'; + +import { TestChainName } from '../../consts/testChains.js'; +import { randomAddress } from '../../test/testUtils.js'; +import { ChainMap, ChainName } from '../../types.js'; + +import { ContractVerificationInput } from './types.js'; +import { shouldAddVerificationInput } from './utils.js'; + +describe('shouldAddVerificationInput', () => { + const addressA = randomAddress(); + const addressB = randomAddress(); + it('should return true if the artifact does not exist in the verification inputs', () => { + const verificationInputs: ChainMap = { + [TestChainName.test1]: [ + { + name: 'ContractA', + address: addressA, + constructorArguments: 'args', + isProxy: false, + }, + ], + }; + const newArtifact: ContractVerificationInput = { + name: 'ContractB', + address: addressB, + constructorArguments: 'argsB', + isProxy: true, + }; + const chain: ChainName = TestChainName.test1; + expect( + shouldAddVerificationInput(verificationInputs, chain, newArtifact), + ).to.equal(true); + }); + + it('should return false if the artifact already exists in the verification inputs', () => { + const verificationInputs: ChainMap = { + [TestChainName.test2]: [ + { + name: 'ContractA', + address: addressA, + constructorArguments: 'args', + isProxy: false, + }, + ], + }; + const existingArtifact: ContractVerificationInput = { + name: 'ContractA', + address: addressA, + constructorArguments: 'args', + isProxy: false, + }; + const chain: ChainName = TestChainName.test2; + expect( + shouldAddVerificationInput(verificationInputs, chain, existingArtifact), + ).to.equal(false); + }); +}); diff --git a/typescript/sdk/src/deploy/verify/utils.ts b/typescript/sdk/src/deploy/verify/utils.ts index 37b9d7089..f0717cd6c 100644 --- a/typescript/sdk/src/deploy/verify/utils.ts +++ b/typescript/sdk/src/deploy/verify/utils.ts @@ -1,5 +1,9 @@ import { ethers, utils } from 'ethers'; +import { eqAddress } from '@hyperlane-xyz/utils'; + +import { ChainMap, ChainName } from '../../types.js'; + import { ContractVerificationInput } from './types.js'; export function formatFunctionArguments( @@ -44,3 +48,24 @@ export function getContractVerificationInput( const args = getConstructorArguments(contract, bytecode); return buildVerificationInput(name, contract.address, args, isProxy); } + +/** + * Check if the artifact should be added to the verification inputs. + * @param verificationInputs - The verification inputs for the chain. + * @param chain - The chain to check. + * @param artifact - The artifact to check. + * @returns + */ +export function shouldAddVerificationInput( + verificationInputs: ChainMap, + chain: ChainName, + artifact: ContractVerificationInput, +): boolean { + return !verificationInputs[chain].some( + (existingArtifact) => + existingArtifact.name === artifact.name && + eqAddress(existingArtifact.address, artifact.address) && + existingArtifact.constructorArguments === artifact.constructorArguments && + existingArtifact.isProxy === artifact.isProxy, + ); +} From f9bbdde76494510268a0de79c758e37e700c7ee6 Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Wed, 19 Jun 2024 18:48:15 -0400 Subject: [PATCH 22/46] fix: derived token supply to 0 (#4010) ### Description Token deployer should always derive token metadata's total supply to 0, otherwise the collateral token's total supply will be minted initially on the synthetic, creating 2x the desired total supply. ### Related issues - Regression introduced by https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3820 - opens https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/4013 ### Backward compatibility Yes ### Testing Unit Tests --- .changeset/bright-horses-give.md | 5 +++++ typescript/sdk/src/token/deploy.ts | 15 ++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 .changeset/bright-horses-give.md diff --git a/.changeset/bright-horses-give.md b/.changeset/bright-horses-give.md new file mode 100644 index 000000000..1e26c14e7 --- /dev/null +++ b/.changeset/bright-horses-give.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': patch +--- + +Fix initial total supply of synthetic token deployments to 0 diff --git a/typescript/sdk/src/token/deploy.ts b/typescript/sdk/src/token/deploy.ts index 2ad13c2f6..b6098a497 100644 --- a/typescript/sdk/src/token/deploy.ts +++ b/typescript/sdk/src/token/deploy.ts @@ -87,6 +87,9 @@ abstract class TokenDeployer< multiProvider: MultiProvider, configMap: WarpRouteDeployConfig, ): Promise { + // this is used for synthetic token metadata and should always be 0 + const DERIVED_TOKEN_SUPPLY = 0; + for (const [chain, config] of Object.entries(configMap)) { if (isTokenMetadata(config)) { return config; @@ -95,7 +98,7 @@ abstract class TokenDeployer< if (isNativeConfig(config)) { const nativeToken = multiProvider.getChainMetadata(chain).nativeToken; if (nativeToken) { - return { totalSupply: 0, ...nativeToken }; + return { totalSupply: DERIVED_TOKEN_SUPPLY, ...nativeToken }; } } @@ -107,27 +110,25 @@ abstract class TokenDeployer< config.token, provider, ); - const [name, symbol, totalSupply] = await Promise.all([ + const [name, symbol] = await Promise.all([ erc721.name(), erc721.symbol(), - erc721.totalSupply(), ]); return { name, symbol, - totalSupply: totalSupply.toString(), + totalSupply: DERIVED_TOKEN_SUPPLY, }; } const erc20 = ERC20__factory.connect(config.token, provider); - const [name, symbol, totalSupply, decimals] = await Promise.all([ + const [name, symbol, decimals] = await Promise.all([ erc20.name(), erc20.symbol(), - erc20.totalSupply(), erc20.decimals(), ]); - return { name, symbol, totalSupply: totalSupply.toString(), decimals }; + return { name, symbol, decimals, totalSupply: DERIVED_TOKEN_SUPPLY }; } } From 683a96257e446c4901022d589b5a618ef9c9f9d8 Mon Sep 17 00:00:00 2001 From: Tien Dao Date: Thu, 20 Jun 2024 16:53:08 +0700 Subject: [PATCH 23/46] fix: reduce loop test igpconfig (#4005) ### Description Refactor `testIgpConfig` in `testUtils.ts` for Enhanced Readability and Maintainability by reduce loop ### Drive-by changes 1. **Constant Usage:** Introduced `OVERHEAD_COST` as a constant to replace the magic number `60000`, making the purpose of this value clearer and the code easier to update. 2. **Improved Readability:** By using descriptive names and constants, the function is now easier to understand at a glance, which is particularly beneficial for new contributors or during code reviews. 3. **Dynamic Configuration Logic:** Ensured that the configuration for `overhead` and `oracleConfig` is dynamically generated for each chain, excluding the current chain to simulate realistic test scenarios. These changes do not alter the logic but make the codebase cleaner and more maintainable. ### Related issues ### Backward compatibility ### Testing --------- Co-authored-by: tiendn --- typescript/.changeset/pink-mirrors-sneeze.md | 5 +++ typescript/sdk/src/test/testUtils.ts | 35 +++++++++++--------- 2 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 typescript/.changeset/pink-mirrors-sneeze.md diff --git a/typescript/.changeset/pink-mirrors-sneeze.md b/typescript/.changeset/pink-mirrors-sneeze.md new file mode 100644 index 000000000..207dab4e5 --- /dev/null +++ b/typescript/.changeset/pink-mirrors-sneeze.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': major +--- + +Refactor testIgpConfig function for clarity and maintainability diff --git a/typescript/sdk/src/test/testUtils.ts b/typescript/sdk/src/test/testUtils.ts index fc498469a..5613d6be6 100644 --- a/typescript/sdk/src/test/testUtils.ts +++ b/typescript/sdk/src/test/testUtils.ts @@ -63,25 +63,30 @@ const TEST_ORACLE_CONFIG = { tokenExchangeRate: ethers.utils.parseUnits('1', 10), }; +const TEST_OVERHEAD_COST = 60000; + export function testIgpConfig( chains: ChainName[], owner = nonZeroAddress, ): ChainMap { return Object.fromEntries( - chains.map((local) => [ - local, - { - owner, - oracleKey: owner, - beneficiary: owner, - // TODO: these should be one map - overhead: Object.fromEntries( - exclude(local, chains).map((remote) => [remote, 60000]), - ), - oracleConfig: Object.fromEntries( - exclude(local, chains).map((remote) => [remote, TEST_ORACLE_CONFIG]), - ), - }, - ]), + chains.map((local) => { + const overhead: IgpConfig['overhead'] = {}; + const oracleConfig: IgpConfig['oracleConfig'] = {}; + exclude(local, chains).map((remote: ChainName) => { + overhead[remote] = TEST_OVERHEAD_COST; + oracleConfig[remote] = TEST_ORACLE_CONFIG; + }); + return [ + local, + { + owner, + oracleKey: owner, + beneficiary: owner, + overhead, + oracleConfig, + }, + ]; + }), ); } From 8ce2a71f2046bfc528889d789488659572013385 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Thu, 20 Jun 2024 12:26:59 +0100 Subject: [PATCH 24/46] chore: reconcile mainnet config json with registry (#4016) chore: reconcile mainnet config json with registry Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> --- rust/config/mainnet_config.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/rust/config/mainnet_config.json b/rust/config/mainnet_config.json index 10a980d33..e801d0ead 100644 --- a/rust/config/mainnet_config.json +++ b/rust/config/mainnet_config.json @@ -1573,9 +1573,6 @@ }, { "http": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public" - }, - { - "http": "https://zetachain-mainnet-archive.allthatnode.com:8545" } ], "staticAggregationHookFactory": "0xEb9FcFDC9EfDC17c1EC5E1dc085B98485da213D6", From f227eec892af2d4162b96a69f3af5ffe49a7b278 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Thu, 20 Jun 2024 13:06:57 +0100 Subject: [PATCH 25/46] fix: e2e invariant flake (#4017) ### Description Context is explained in the comment, copying it here: ``` // TODO: Sometimes we find more logs than expected. This may either mean that gas is deducted twice for the same message due to a bug, // or that submitting the message transaction fails for some messages. Figure out which is the case and convert this check to // strict equality. // EDIT: Having had a quick look, it seems like there are some legitimate reverts happening in the confirm step // (`Transaction attempting to process message either reverted or was reorged`) // in which case more gas expenditure logs than messages are expected. ``` ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- rust/utils/run-locally/src/invariants.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rust/utils/run-locally/src/invariants.rs b/rust/utils/run-locally/src/invariants.rs index 2191f2ac8..18bc026c2 100644 --- a/rust/utils/run-locally/src/invariants.rs +++ b/rust/utils/run-locally/src/invariants.rs @@ -69,8 +69,14 @@ pub fn termination_invariants_met( .len(); // Zero insertion messages don't reach `submit` stage where gas is spent, so we only expect these logs for the other messages. - assert_eq!( - gas_expenditure_log_count as u32, total_messages_expected, + // TODO: Sometimes we find more logs than expected. This may either mean that gas is deducted twice for the same message due to a bug, + // or that submitting the message transaction fails for some messages. Figure out which is the case and convert this check to + // strict equality. + // EDIT: Having had a quick look, it seems like there are some legitimate reverts happening in the confirm step + // (`Transaction attempting to process message either reverted or was reorged`) + // in which case more gas expenditure logs than messages are expected. + assert!( + gas_expenditure_log_count as u32 >= total_messages_expected, "Didn't record gas payment for all delivered messages" ); From 47338f983db2add2013792331a59af121c174926 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Thu, 20 Jun 2024 13:17:10 +0100 Subject: [PATCH 26/46] fix: set resource requests for prometheus server & node exporter (#3998) ### Description See https://discord.com/channels/935678348330434570/935679524534911007/1252943931121864824 - an attempt to fix some intermittent issues we've seen with prometheus ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- .../src/infrastructure/monitoring/prometheus.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/typescript/infra/src/infrastructure/monitoring/prometheus.ts b/typescript/infra/src/infrastructure/monitoring/prometheus.ts index a4049fc29..74f3c7500 100644 --- a/typescript/infra/src/infrastructure/monitoring/prometheus.ts +++ b/typescript/infra/src/infrastructure/monitoring/prometheus.ts @@ -84,9 +84,21 @@ async function getPrometheusConfig( ], }, ], + resources: { + requests: { + cpu: '200m', + memory: '3Gi', + }, + }, }, - nodeExporter: { + 'prometheus-node-exporter': { enabled: infraConfig.monitoring.prometheus.nodeExporterEnabled, + resources: { + requests: { + cpu: '50m', + memory: '100Mi', + }, + }, }, }; } From b758a5949cc83356a6016433df1cb480ca62e5ad Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 15:41:45 +0000 Subject: [PATCH 27/46] Version Packages (#3991) This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @hyperlane-xyz/sdk@3.16.0 ### Minor Changes - 5cc64eb09: Add validator addresses for linea, fraxtal, sei. Estimate gas and add 10% buffer inside HyperlaneIsmFactory as well. ### Patch Changes - f9bbdde76: Fix initial total supply of synthetic token deployments to 0 - @hyperlane-xyz/core@3.16.0 - @hyperlane-xyz/utils@3.16.0 ## @hyperlane-xyz/core@3.16.0 ### Patch Changes - @hyperlane-xyz/utils@3.16.0 ## @hyperlane-xyz/cli@3.16.0 ### Patch Changes - Updated dependencies [f9bbdde76] - Updated dependencies [5cc64eb09] - @hyperlane-xyz/sdk@3.16.0 - @hyperlane-xyz/utils@3.16.0 ## @hyperlane-xyz/helloworld@3.16.0 ### Patch Changes - Updated dependencies [f9bbdde76] - Updated dependencies [5cc64eb09] - @hyperlane-xyz/sdk@3.16.0 - @hyperlane-xyz/core@3.16.0 ## @hyperlane-xyz/utils@3.16.0 ## @hyperlane-xyz/infra@3.16.0 ### Minor Changes - 5cc64eb09: Add support for new chains: linea, fraxtal, sei. Support osmosis remote. Drive-by fix to always fetch explorer API keys when running deploy script. ### Patch Changes - 5cc64eb09: Allow selecting a specific chain to govern in check-deploy script - Updated dependencies [f9bbdde76] - Updated dependencies [5cc64eb09] - @hyperlane-xyz/sdk@3.16.0 - @hyperlane-xyz/helloworld@3.16.0 - @hyperlane-xyz/utils@3.16.0 ## @hyperlane-xyz/ccip-server@3.16.0 Co-authored-by: github-actions[bot] --- .changeset/bright-horses-give.md | 5 ----- .changeset/cuddly-ways-grin.md | 7 ------- .changeset/five-eels-reflect.md | 6 ------ .changeset/tall-jeans-camp.md | 5 ----- solidity/CHANGELOG.md | 6 ++++++ solidity/package.json | 4 ++-- typescript/ccip-server/CHANGELOG.md | 2 ++ typescript/ccip-server/package.json | 2 +- typescript/cli/CHANGELOG.md | 9 +++++++++ typescript/cli/package.json | 6 +++--- typescript/cli/src/version.ts | 2 +- typescript/helloworld/CHANGELOG.md | 9 +++++++++ typescript/helloworld/package.json | 6 +++--- typescript/infra/CHANGELOG.md | 17 +++++++++++++++++ typescript/infra/package.json | 8 ++++---- typescript/sdk/CHANGELOG.md | 13 +++++++++++++ typescript/sdk/package.json | 6 +++--- typescript/utils/CHANGELOG.md | 2 ++ typescript/utils/package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 20 files changed, 90 insertions(+), 55 deletions(-) delete mode 100644 .changeset/bright-horses-give.md delete mode 100644 .changeset/cuddly-ways-grin.md delete mode 100644 .changeset/five-eels-reflect.md delete mode 100644 .changeset/tall-jeans-camp.md diff --git a/.changeset/bright-horses-give.md b/.changeset/bright-horses-give.md deleted file mode 100644 index 1e26c14e7..000000000 --- a/.changeset/bright-horses-give.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/sdk': patch ---- - -Fix initial total supply of synthetic token deployments to 0 diff --git a/.changeset/cuddly-ways-grin.md b/.changeset/cuddly-ways-grin.md deleted file mode 100644 index 8c950149c..000000000 --- a/.changeset/cuddly-ways-grin.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperlane-xyz/infra': minor ---- - -Add support for new chains: linea, fraxtal, sei. -Support osmosis remote. -Drive-by fix to always fetch explorer API keys when running deploy script. diff --git a/.changeset/five-eels-reflect.md b/.changeset/five-eels-reflect.md deleted file mode 100644 index 26a64bda6..000000000 --- a/.changeset/five-eels-reflect.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperlane-xyz/sdk': minor ---- - -Add validator addresses for linea, fraxtal, sei. -Estimate gas and add 10% buffer inside HyperlaneIsmFactory as well. diff --git a/.changeset/tall-jeans-camp.md b/.changeset/tall-jeans-camp.md deleted file mode 100644 index 37e315834..000000000 --- a/.changeset/tall-jeans-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/infra': patch ---- - -Allow selecting a specific chain to govern in check-deploy script diff --git a/solidity/CHANGELOG.md b/solidity/CHANGELOG.md index 4107a5ba8..f8089d59e 100644 --- a/solidity/CHANGELOG.md +++ b/solidity/CHANGELOG.md @@ -1,5 +1,11 @@ # @hyperlane-xyz/core +## 3.16.0 + +### Patch Changes + +- @hyperlane-xyz/utils@3.16.0 + ## 3.15.1 ### Patch Changes diff --git a/solidity/package.json b/solidity/package.json index ce10f806f..ee53a0c7c 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -1,10 +1,10 @@ { "name": "@hyperlane-xyz/core", "description": "Core solidity contracts for Hyperlane", - "version": "3.15.1", + "version": "3.16.0", "dependencies": { "@eth-optimism/contracts": "^0.6.0", - "@hyperlane-xyz/utils": "3.15.1", + "@hyperlane-xyz/utils": "3.16.0", "@layerzerolabs/lz-evm-oapp-v2": "2.0.2", "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^v4.9.3", diff --git a/typescript/ccip-server/CHANGELOG.md b/typescript/ccip-server/CHANGELOG.md index 115debd5e..19b944f34 100644 --- a/typescript/ccip-server/CHANGELOG.md +++ b/typescript/ccip-server/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/ccip-server +## 3.16.0 + ## 3.15.1 ## 3.15.0 diff --git a/typescript/ccip-server/package.json b/typescript/ccip-server/package.json index 1b3f5c792..64929084b 100644 --- a/typescript/ccip-server/package.json +++ b/typescript/ccip-server/package.json @@ -1,6 +1,6 @@ { "name": "@hyperlane-xyz/ccip-server", - "version": "3.15.1", + "version": "3.16.0", "description": "CCIP server", "typings": "dist/index.d.ts", "typedocMain": "src/index.ts", diff --git a/typescript/cli/CHANGELOG.md b/typescript/cli/CHANGELOG.md index 428039d50..1089a543b 100644 --- a/typescript/cli/CHANGELOG.md +++ b/typescript/cli/CHANGELOG.md @@ -1,5 +1,14 @@ # @hyperlane-xyz/cli +## 3.16.0 + +### Patch Changes + +- Updated dependencies [f9bbdde76] +- Updated dependencies [5cc64eb09] + - @hyperlane-xyz/sdk@3.16.0 + - @hyperlane-xyz/utils@3.16.0 + ## 3.15.1 ### Patch Changes diff --git a/typescript/cli/package.json b/typescript/cli/package.json index 77531e30f..d88b1fe6c 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/cli", - "version": "3.15.1", + "version": "3.16.0", "description": "A command-line utility for common Hyperlane operations", "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.15.1", - "@hyperlane-xyz/utils": "3.15.1", + "@hyperlane-xyz/sdk": "3.16.0", + "@hyperlane-xyz/utils": "3.16.0", "@inquirer/prompts": "^3.0.0", "asn1.js": "^5.4.1", "bignumber.js": "^9.1.1", diff --git a/typescript/cli/src/version.ts b/typescript/cli/src/version.ts index 871417df1..d244ae529 100644 --- a/typescript/cli/src/version.ts +++ b/typescript/cli/src/version.ts @@ -1 +1 @@ -export const VERSION = '3.15.1'; +export const VERSION = '3.16.0'; diff --git a/typescript/helloworld/CHANGELOG.md b/typescript/helloworld/CHANGELOG.md index 7b62ae8f6..e4fa352eb 100644 --- a/typescript/helloworld/CHANGELOG.md +++ b/typescript/helloworld/CHANGELOG.md @@ -1,5 +1,14 @@ # @hyperlane-xyz/helloworld +## 3.16.0 + +### Patch Changes + +- Updated dependencies [f9bbdde76] +- Updated dependencies [5cc64eb09] + - @hyperlane-xyz/sdk@3.16.0 + - @hyperlane-xyz/core@3.16.0 + ## 3.15.1 ### Patch Changes diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index f039a6893..c1ccf26cb 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -1,11 +1,11 @@ { "name": "@hyperlane-xyz/helloworld", "description": "A basic skeleton of an Hyperlane app", - "version": "3.15.1", + "version": "3.16.0", "dependencies": { - "@hyperlane-xyz/core": "3.15.1", + "@hyperlane-xyz/core": "3.16.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.15.1", + "@hyperlane-xyz/sdk": "3.16.0", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" }, diff --git a/typescript/infra/CHANGELOG.md b/typescript/infra/CHANGELOG.md index 8d4e38701..b21d74c4f 100644 --- a/typescript/infra/CHANGELOG.md +++ b/typescript/infra/CHANGELOG.md @@ -1,5 +1,22 @@ # @hyperlane-xyz/infra +## 3.16.0 + +### Minor Changes + +- 5cc64eb09: Add support for new chains: linea, fraxtal, sei. + Support osmosis remote. + Drive-by fix to always fetch explorer API keys when running deploy script. + +### Patch Changes + +- 5cc64eb09: Allow selecting a specific chain to govern in check-deploy script +- Updated dependencies [f9bbdde76] +- Updated dependencies [5cc64eb09] + - @hyperlane-xyz/sdk@3.16.0 + - @hyperlane-xyz/helloworld@3.16.0 + - @hyperlane-xyz/utils@3.16.0 + ## 3.15.1 ### Patch Changes diff --git a/typescript/infra/package.json b/typescript/infra/package.json index 33b170676..9bba689ad 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/infra", "description": "Infrastructure utilities for the Hyperlane Network", - "version": "3.15.1", + "version": "3.16.0", "dependencies": { "@arbitrum/sdk": "^3.0.0", "@aws-sdk/client-iam": "^3.74.0", @@ -13,10 +13,10 @@ "@ethersproject/hardware-wallets": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@google-cloud/secret-manager": "^5.5.0", - "@hyperlane-xyz/helloworld": "3.15.1", + "@hyperlane-xyz/helloworld": "3.16.0", "@hyperlane-xyz/registry": "1.3.0", - "@hyperlane-xyz/sdk": "3.15.1", - "@hyperlane-xyz/utils": "3.15.1", + "@hyperlane-xyz/sdk": "3.16.0", + "@hyperlane-xyz/utils": "3.16.0", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@solana/web3.js": "^1.78.0", "asn1.js": "5.4.1", diff --git a/typescript/sdk/CHANGELOG.md b/typescript/sdk/CHANGELOG.md index d99902777..59a76d8e5 100644 --- a/typescript/sdk/CHANGELOG.md +++ b/typescript/sdk/CHANGELOG.md @@ -1,5 +1,18 @@ # @hyperlane-xyz/sdk +## 3.16.0 + +### Minor Changes + +- 5cc64eb09: Add validator addresses for linea, fraxtal, sei. + Estimate gas and add 10% buffer inside HyperlaneIsmFactory as well. + +### Patch Changes + +- f9bbdde76: Fix initial total supply of synthetic token deployments to 0 + - @hyperlane-xyz/core@3.16.0 + - @hyperlane-xyz/utils@3.16.0 + ## 3.15.1 ### Patch Changes diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index ba63cab43..326415d70 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/sdk", "description": "The official SDK for the Hyperlane Network", - "version": "3.15.1", + "version": "3.16.0", "dependencies": { "@aws-sdk/client-s3": "^3.74.0", "@cosmjs/cosmwasm-stargate": "^0.31.3", "@cosmjs/stargate": "^0.31.3", - "@hyperlane-xyz/core": "3.15.1", - "@hyperlane-xyz/utils": "3.15.1", + "@hyperlane-xyz/core": "3.16.0", + "@hyperlane-xyz/utils": "3.16.0", "@safe-global/api-kit": "1.3.0", "@safe-global/protocol-kit": "1.3.0", "@solana/spl-token": "^0.3.8", diff --git a/typescript/utils/CHANGELOG.md b/typescript/utils/CHANGELOG.md index a11397181..62d15f378 100644 --- a/typescript/utils/CHANGELOG.md +++ b/typescript/utils/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/utils +## 3.16.0 + ## 3.15.1 ## 3.15.0 diff --git a/typescript/utils/package.json b/typescript/utils/package.json index e02d1c1df..e924add19 100644 --- a/typescript/utils/package.json +++ b/typescript/utils/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/utils", "description": "General utilities and types for the Hyperlane network", - "version": "3.15.1", + "version": "3.16.0", "dependencies": { "@cosmjs/encoding": "^0.31.3", "@solana/web3.js": "^1.78.0", diff --git a/yarn.lock b/yarn.lock index 529e0c667..23694b4cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5684,8 +5684,8 @@ __metadata: "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.15.1" - "@hyperlane-xyz/utils": "npm:3.15.1" + "@hyperlane-xyz/sdk": "npm:3.16.0" + "@hyperlane-xyz/utils": "npm:3.16.0" "@inquirer/prompts": "npm:^3.0.0" "@types/mocha": "npm:^10.0.1" "@types/node": "npm:^18.14.5" @@ -5713,12 +5713,12 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/core@npm:3.15.1, @hyperlane-xyz/core@workspace:solidity": +"@hyperlane-xyz/core@npm:3.16.0, @hyperlane-xyz/core@workspace:solidity": version: 0.0.0-use.local resolution: "@hyperlane-xyz/core@workspace:solidity" dependencies: "@eth-optimism/contracts": "npm:^0.6.0" - "@hyperlane-xyz/utils": "npm:3.15.1" + "@hyperlane-xyz/utils": "npm:3.16.0" "@layerzerolabs/lz-evm-oapp-v2": "npm:2.0.2" "@layerzerolabs/solidity-examples": "npm:^1.1.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" @@ -5769,13 +5769,13 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/helloworld@npm:3.15.1, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": +"@hyperlane-xyz/helloworld@npm:3.16.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": version: 0.0.0-use.local resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: - "@hyperlane-xyz/core": "npm:3.15.1" + "@hyperlane-xyz/core": "npm:3.16.0" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.15.1" + "@hyperlane-xyz/sdk": "npm:3.16.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@openzeppelin/contracts-upgradeable": "npm:^4.9.3" @@ -5822,10 +5822,10 @@ __metadata: "@ethersproject/hardware-wallets": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.2" "@google-cloud/secret-manager": "npm:^5.5.0" - "@hyperlane-xyz/helloworld": "npm:3.15.1" + "@hyperlane-xyz/helloworld": "npm:3.16.0" "@hyperlane-xyz/registry": "npm:1.3.0" - "@hyperlane-xyz/sdk": "npm:3.15.1" - "@hyperlane-xyz/utils": "npm:3.15.1" + "@hyperlane-xyz/sdk": "npm:3.16.0" + "@hyperlane-xyz/utils": "npm:3.16.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-etherscan": "npm:^3.0.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" @@ -5885,15 +5885,15 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/sdk@npm:3.15.1, @hyperlane-xyz/sdk@workspace:typescript/sdk": +"@hyperlane-xyz/sdk@npm:3.16.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": version: 0.0.0-use.local resolution: "@hyperlane-xyz/sdk@workspace:typescript/sdk" dependencies: "@aws-sdk/client-s3": "npm:^3.74.0" "@cosmjs/cosmwasm-stargate": "npm:^0.31.3" "@cosmjs/stargate": "npm:^0.31.3" - "@hyperlane-xyz/core": "npm:3.15.1" - "@hyperlane-xyz/utils": "npm:3.15.1" + "@hyperlane-xyz/core": "npm:3.16.0" + "@hyperlane-xyz/utils": "npm:3.16.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@safe-global/api-kit": "npm:1.3.0" @@ -5961,7 +5961,7 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/utils@npm:3.15.1, @hyperlane-xyz/utils@workspace:typescript/utils": +"@hyperlane-xyz/utils@npm:3.16.0, @hyperlane-xyz/utils@workspace:typescript/utils": version: 0.0.0-use.local resolution: "@hyperlane-xyz/utils@workspace:typescript/utils" dependencies: From c6ba381e4470eb804319a9f07c2e97125e7062a9 Mon Sep 17 00:00:00 2001 From: Nam Chu Hoai Date: Thu, 20 Jun 2024 11:46:38 -0400 Subject: [PATCH 28/46] chore: add more multisigs (#3974) ### Description Add multisig owners for linea, mode and blast. Expected violations are mailbox,proxyadmin, and ism violations (since the routing ism expected owner is now different) --------- Co-authored-by: Yorke Rhodes --- .../config/environments/mainnet3/owners.ts | 3 +++ typescript/infra/scripts/check-deploy.ts | 18 ++++++++++++------ .../infra/src/govern/HyperlaneAppGovernor.ts | 3 +-- .../sdk/src/core/HyperlaneCoreChecker.ts | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/typescript/infra/config/environments/mainnet3/owners.ts b/typescript/infra/config/environments/mainnet3/owners.ts index bf1239efc..63494751f 100644 --- a/typescript/infra/config/environments/mainnet3/owners.ts +++ b/typescript/infra/config/environments/mainnet3/owners.ts @@ -39,6 +39,9 @@ export const safes: ChainMap
= { polygonzkevm: '0x1610f578D4d77Fc4ae7ce2DD9AA0b98A5Cd0a9b2', // injective: 'inj1632x8j35kenryam3mkrsez064sqg2y2fr0frzt', // solana: 'EzppBFV2taxWw8kEjxNYvby6q7W1biJEqwP3iC7YgRe3', + blast: '0xaCD1865B262C89Fb0b50dcc8fB095330ae8F35b5', + linea: '0xaCD1865B262C89Fb0b50dcc8fB095330ae8F35b5', + mode: '0xaCD1865B262C89Fb0b50dcc8fB095330ae8F35b5', }; export const DEPLOYER = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; diff --git a/typescript/infra/scripts/check-deploy.ts b/typescript/infra/scripts/check-deploy.ts index d09a20749..bc14e0aee 100644 --- a/typescript/infra/scripts/check-deploy.ts +++ b/typescript/infra/scripts/check-deploy.ts @@ -14,6 +14,7 @@ import { } from '@hyperlane-xyz/sdk'; import { Contexts } from '../config/contexts.js'; +import { DEPLOYER } from '../config/environments/mainnet3/owners.js'; import { getWarpConfig } from '../config/warp.js'; import { HyperlaneAppGovernor } from '../src/govern/HyperlaneAppGovernor.js'; import { HyperlaneCoreGovernor } from '../src/govern/HyperlaneCoreGovernor.js'; @@ -35,13 +36,16 @@ import { getHelloWorldApp } from './helloworld/utils.js'; function getArgs() { return withChain(withModuleAndFork(withContext(getRootArgs()))) + .boolean('asdeployer') + .default('asdeployer', false) .boolean('govern') .default('govern', false) .alias('g', 'govern').argv; } async function check() { - const { fork, govern, module, environment, context, chain } = await getArgs(); + const { fork, govern, module, environment, context, chain, asdeployer } = + await getArgs(); const envConfig = getEnvironmentConfig(environment); let multiProvider = await envConfig.getMultiProvider(); @@ -54,11 +58,13 @@ async function check() { [fork]: { blocks: { confirmations: 0 } }, }); - const owner = await resolveOrDeployAccountOwner( - multiProvider, - fork, - envConfig.core[fork].owner, - ); + const owner = asdeployer + ? DEPLOYER + : await resolveOrDeployAccountOwner( + multiProvider, + fork, + envConfig.core[fork].owner, + ); const signer = await impersonateAccount(owner, 1e18); multiProvider.setSigner(fork, signer); diff --git a/typescript/infra/src/govern/HyperlaneAppGovernor.ts b/typescript/infra/src/govern/HyperlaneAppGovernor.ts index 3bbefbce1..7225bfb46 100644 --- a/typescript/infra/src/govern/HyperlaneAppGovernor.ts +++ b/typescript/infra/src/govern/HyperlaneAppGovernor.ts @@ -62,7 +62,6 @@ export abstract class HyperlaneAppGovernor< async govern(confirm = true, chain?: ChainName) { if (this.checker.violations.length === 0) return; - // 1. Produce calls from checker violations. await this.mapViolationsToCalls(); @@ -93,7 +92,6 @@ export abstract class HyperlaneAppGovernor< calls.map((c) => console.log(`> > ${c.description} (to: ${c.to} data: ${c.data})`), ); - if (!requestConfirmation) return true; const { value: confirmed } = await prompts({ @@ -102,6 +100,7 @@ export abstract class HyperlaneAppGovernor< message: 'Can you confirm?', initial: false, }); + return !!confirmed; } return false; diff --git a/typescript/sdk/src/core/HyperlaneCoreChecker.ts b/typescript/sdk/src/core/HyperlaneCoreChecker.ts index d91a218d3..16a1a91ff 100644 --- a/typescript/sdk/src/core/HyperlaneCoreChecker.ts +++ b/typescript/sdk/src/core/HyperlaneCoreChecker.ts @@ -39,7 +39,6 @@ export class HyperlaneCoreChecker extends HyperlaneAppChecker< return; } - await this.checkDomainOwnership(chain); await this.checkProxiedContracts(chain); await this.checkMailbox(chain); await this.checkBytecodes(chain); @@ -47,6 +46,7 @@ export class HyperlaneCoreChecker extends HyperlaneAppChecker< if (config.upgrade) { await this.checkUpgrade(chain, config.upgrade); } + await this.checkDomainOwnership(chain); } async checkDomainOwnership(chain: ChainName): Promise { From c84a1dc73bce613582e6fcb1d735c244992f9c05 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Thu, 20 Jun 2024 17:28:26 +0100 Subject: [PATCH 29/46] feat: address blacklisting in the relayer (#4000) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description See context here https://discord.com/channels/935678348330434570/1236041564673806427/1252918894755319920 and https://discord.com/channels/935678348330434570/1252953507833708605/1252954456400592997 This is a rudimentary first step toward blacklisting addresses. Future options are outlined in https://discord.com/channels/935678348330434570/1236041564673806427/1252918894755319920. Eventually we can also fetch these addresses directly within the agent from an updated list that we cache and re-fetch occasionally. For now, this just relies on configured addresses. The approach is: - Allow hex addresses to be configured. These are intentionally treated as a Vec instead of an H160 / H256. This is because treating them as H160 is a leak of Ethereum-specific logic into non-chain-specific code in the relayer, and treating them as H256 would pad Ethereum addresses with a bunch of zeroes which would diminish the accuracy of our heuristic implemented in this. The subsequence stuff is a bit unfortunate because it's O(n^2) but šŸ¤·ā€ā™‚ļø - The heuristic is as follows - if any of the configured addresses are found as a subsequence in the message sender, recipient, or body, it's thrown out by the message processor, and the message will never make its way to the op_submitter. This heuristic for the body is to prevent warp route transfers that include that address. We could maybe convert Vec to H256 for the sender and recipient, I'm open to this - I just went with the substring approach bc it felt easiest tbh. ### Drive-by changes ### Related issues - Fixes https://github.com/hyperlane-xyz/issues/issues/1285 ### Backward compatibility ### Testing --- rust/agents/relayer/src/msg/blacklist.rs | 123 ++++++++++++++++++ rust/agents/relayer/src/msg/mod.rs | 1 + rust/agents/relayer/src/msg/processor.rs | 46 +++++-- rust/agents/relayer/src/relayer.rs | 33 +++-- rust/agents/relayer/src/settings/mod.rs | 64 +++++++++ .../cursors/sequence_aware/forward.rs | 8 +- .../config/environments/mainnet3/agent.ts | 2 +- typescript/infra/src/config/agent/relayer.ts | 53 +++++++- typescript/sdk/src/metadata/agentConfig.ts | 4 + 9 files changed, 302 insertions(+), 32 deletions(-) create mode 100644 rust/agents/relayer/src/msg/blacklist.rs diff --git a/rust/agents/relayer/src/msg/blacklist.rs b/rust/agents/relayer/src/msg/blacklist.rs new file mode 100644 index 000000000..1e9202086 --- /dev/null +++ b/rust/agents/relayer/src/msg/blacklist.rs @@ -0,0 +1,123 @@ +use hyperlane_core::HyperlaneMessage; + +#[derive(Debug, Clone, Default)] +pub struct AddressBlacklist { + // A list of addresses that are blocked from being relayed. + // Addresses are any length to support different address types. + pub blacklist: Vec>, +} + +impl AddressBlacklist { + pub fn new(blacklist: Vec>) -> Self { + Self { blacklist } + } + + /// Returns true if the message is blocked by the blacklist. + /// At the moment, this only checks if the sender, recipient, or body of the + /// message contains any of the blocked addresses. + pub fn find_blacklisted_address(&self, message: &HyperlaneMessage) -> Option> { + self.blacklist.iter().find_map(|address| { + if is_subsequence(message.sender.as_bytes(), address) + || is_subsequence(message.recipient.as_bytes(), address) + || is_subsequence(&message.body, address) + { + // Return the blocked address that was found. + Some(address.clone()) + } else { + None + } + }) + } +} + +/// Returns true if `needle` is a subsequence of `haystack`. +fn is_subsequence(mut haystack: &[T], needle: &[T]) -> bool { + if needle.is_empty() { + return true; + } + + while !haystack.is_empty() { + if needle.len() > haystack.len() { + return false; + } + if haystack.starts_with(needle) { + return true; + } + haystack = &haystack[1..]; + } + false +} + +#[cfg(test)] +mod test { + use hyperlane_core::H256; + + use super::*; + + #[test] + fn test_is_subsequence() { + assert!(is_subsequence(b"hello", b"hello")); + assert!(is_subsequence(b"hello", b"he")); + assert!(is_subsequence(b"hello", b"lo")); + assert!(is_subsequence(b"hello", b"")); + assert!(is_subsequence(b"hello", b"o")); + + assert!(!is_subsequence(b"hello", b"hello world")); + assert!(!is_subsequence(b"hello", b"world")); + assert!(!is_subsequence(b"hello", b"world hello")); + } + + #[test] + fn test_is_blocked() { + let blocked = b"blocked"; + let blocklist = AddressBlacklist::new(vec![blocked.to_vec()]); + + let bytes_with_subsequence = |subsequence: &[u8], index: usize, len: usize| { + let mut bytes = vec![0; len]; + bytes[index..index + subsequence.len()].copy_from_slice(subsequence); + bytes + }; + + let h256_with_subsequence = |subsequence: &[u8], index: usize| { + let bytes = bytes_with_subsequence(subsequence, index, H256::len_bytes()); + H256::from_slice(&bytes) + }; + + // Blocked - sender includes the blocked address + let message = HyperlaneMessage { + sender: h256_with_subsequence(blocked, 0), + ..Default::default() + }; + assert_eq!( + blocklist.find_blacklisted_address(&message), + Some(blocked.to_vec()) + ); + + // Blocked - recipient includes the blocked address + let message = HyperlaneMessage { + recipient: h256_with_subsequence(blocked, 20), + ..Default::default() + }; + assert_eq!( + blocklist.find_blacklisted_address(&message), + Some(blocked.to_vec()) + ); + + // Blocked - body includes the blocked address + let message = HyperlaneMessage { + body: bytes_with_subsequence(blocked, 100 - blocked.len(), 100), + ..Default::default() + }; + assert_eq!( + blocklist.find_blacklisted_address(&message), + Some(blocked.to_vec()) + ); + + // Not blocked - sender, recipient, and body do not include the blocked address + let message = HyperlaneMessage { + body: vec![1; 100], + ..Default::default() + }; + assert!(blocklist.find_blacklisted_address(&message).is_none()); + } +} diff --git a/rust/agents/relayer/src/msg/mod.rs b/rust/agents/relayer/src/msg/mod.rs index dd7bac22b..abf00ec05 100644 --- a/rust/agents/relayer/src/msg/mod.rs +++ b/rust/agents/relayer/src/msg/mod.rs @@ -25,6 +25,7 @@ //! - FallbackProviderSubmitter (Serialized, but if some RPC provider sucks, //! switch everyone to new one) +pub(crate) mod blacklist; pub(crate) mod gas_payment; pub(crate) mod metadata; pub(crate) mod op_queue; diff --git a/rust/agents/relayer/src/msg/processor.rs b/rust/agents/relayer/src/msg/processor.rs index 664c1dc64..40808ad3d 100644 --- a/rust/agents/relayer/src/msg/processor.rs +++ b/rust/agents/relayer/src/msg/processor.rs @@ -8,6 +8,7 @@ use std::{ use async_trait::async_trait; use derive_new::new; +use ethers::utils::hex; use eyre::Result; use hyperlane_base::{ db::{HyperlaneRocksDB, ProcessMessage}, @@ -18,15 +19,19 @@ use prometheus::IntGauge; use tokio::sync::mpsc::UnboundedSender; use tracing::{debug, instrument, trace}; -use super::{metadata::AppContextClassifier, pending_message::*}; +use super::{blacklist::AddressBlacklist, metadata::AppContextClassifier, pending_message::*}; use crate::{processor::ProcessorExt, settings::matching_list::MatchingList}; /// Finds unprocessed messages from an origin and submits then through a channel /// for to the appropriate destination. #[allow(clippy::too_many_arguments)] pub struct MessageProcessor { - whitelist: Arc, - blacklist: Arc, + /// A matching list of messages that should be whitelisted. + message_whitelist: Arc, + /// A matching list of messages that should be blacklisted. + message_blacklist: Arc, + /// Addresses that messages may not interact with. + address_blacklist: Arc, metrics: MessageProcessorMetrics, /// channel for each destination chain to send operations (i.e. message /// submissions) to @@ -217,8 +222,8 @@ impl Debug for MessageProcessor { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!( f, - "MessageProcessor {{ whitelist: {:?}, blacklist: {:?}, nonce_iterator: {:?}}}", - self.whitelist, self.blacklist, self.nonce_iterator + "MessageProcessor {{ message_whitelist: {:?}, message_blacklist: {:?}, address_blacklist: {:?}, nonce_iterator: {:?}}}", + self.message_whitelist, self.message_blacklist, self.address_blacklist, self.nonce_iterator ) } } @@ -247,14 +252,25 @@ impl ProcessorExt for MessageProcessor { let destination = msg.destination; // Skip if not whitelisted. - if !self.whitelist.msg_matches(&msg, true) { - debug!(?msg, whitelist=?self.whitelist, "Message not whitelisted, skipping"); + if !self.message_whitelist.msg_matches(&msg, true) { + debug!(?msg, whitelist=?self.message_whitelist, "Message not whitelisted, skipping"); return Ok(()); } // Skip if the message is blacklisted - if self.blacklist.msg_matches(&msg, false) { - debug!(?msg, blacklist=?self.blacklist, "Message blacklisted, skipping"); + if self.message_whitelist.msg_matches(&msg, false) { + debug!(?msg, blacklist=?self.message_whitelist, "Message blacklisted, skipping"); + return Ok(()); + } + + // Skip if the message involves a blacklisted address + if let Some(blacklisted_address) = self.address_blacklist.find_blacklisted_address(&msg) + { + debug!( + ?msg, + blacklisted_address = hex::encode(blacklisted_address), + "Message involves blacklisted address, skipping" + ); return Ok(()); } @@ -291,18 +307,21 @@ impl ProcessorExt for MessageProcessor { } impl MessageProcessor { + #[allow(clippy::too_many_arguments)] pub fn new( db: HyperlaneRocksDB, - whitelist: Arc, - blacklist: Arc, + message_whitelist: Arc, + message_blacklist: Arc, + address_blacklist: Arc, metrics: MessageProcessorMetrics, send_channels: HashMap>, destination_ctxs: HashMap>, metric_app_contexts: Vec<(MatchingList, String)>, ) -> Self { Self { - whitelist, - blacklist, + message_whitelist, + message_blacklist, + address_blacklist, metrics, send_channels, destination_ctxs, @@ -477,6 +496,7 @@ mod test { db.clone(), Default::default(), Default::default(), + Default::default(), dummy_processor_metrics(origin_domain.id()), HashMap::from([(destination_domain.id(), send_channel)]), HashMap::from([(destination_domain.id(), message_context)]), diff --git a/rust/agents/relayer/src/relayer.rs b/rust/agents/relayer/src/relayer.rs index 3be0f1e59..e8b903153 100644 --- a/rust/agents/relayer/src/relayer.rs +++ b/rust/agents/relayer/src/relayer.rs @@ -33,6 +33,7 @@ use tracing::{error, info, info_span, instrument::Instrumented, warn, Instrument use crate::{ merkle_tree::builder::MerkleTreeBuilder, msg::{ + blacklist::AddressBlacklist, gas_payment::GasPaymentEnforcer, metadata::{BaseMetadataBuilder, IsmAwareAppContextClassifier}, op_submitter::{SerialSubmitter, SerialSubmitterMetrics}, @@ -70,8 +71,9 @@ pub struct Relayer { prover_syncs: HashMap>>, merkle_tree_hook_syncs: HashMap>>, dbs: HashMap, - whitelist: Arc, - blacklist: Arc, + message_whitelist: Arc, + message_blacklist: Arc, + address_blacklist: Arc, transaction_gas_limit: Option, skip_transaction_gas_limit_for: HashSet, allow_local_checkpoint_syncers: bool, @@ -89,11 +91,12 @@ impl Debug for Relayer { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!( f, - "Relayer {{ origin_chains: {:?}, destination_chains: {:?}, whitelist: {:?}, blacklist: {:?}, transaction_gas_limit: {:?}, skip_transaction_gas_limit_for: {:?}, allow_local_checkpoint_syncers: {:?} }}", + "Relayer {{ origin_chains: {:?}, destination_chains: {:?}, message_whitelist: {:?}, message_blacklist: {:?}, address_blacklist: {:?}, transaction_gas_limit: {:?}, skip_transaction_gas_limit_for: {:?}, allow_local_checkpoint_syncers: {:?} }}", self.origin_chains, self.destination_chains, - self.whitelist, - self.blacklist, + self.message_whitelist, + self.message_blacklist, + self.address_blacklist, self.transaction_gas_limit, self.skip_transaction_gas_limit_for, self.allow_local_checkpoint_syncers @@ -177,14 +180,16 @@ impl BaseAgent for Relayer { .map(|(k, v)| (k, v as _)) .collect(); - let whitelist = Arc::new(settings.whitelist); - let blacklist = Arc::new(settings.blacklist); + let message_whitelist = Arc::new(settings.whitelist); + let message_blacklist = Arc::new(settings.blacklist); + let address_blacklist = Arc::new(AddressBlacklist::new(settings.address_blacklist)); let skip_transaction_gas_limit_for = settings.skip_transaction_gas_limit_for; let transaction_gas_limit = settings.transaction_gas_limit; info!( - %whitelist, - %blacklist, + %message_whitelist, + %message_blacklist, + ?address_blacklist, ?transaction_gas_limit, ?skip_transaction_gas_limit_for, "Whitelist configuration" @@ -275,8 +280,9 @@ impl BaseAgent for Relayer { interchain_gas_payment_syncs, prover_syncs, merkle_tree_hook_syncs, - whitelist, - blacklist, + message_whitelist, + message_blacklist, + address_blacklist, transaction_gas_limit, skip_transaction_gas_limit_for, allow_local_checkpoint_syncers: settings.allow_local_checkpoint_syncers, @@ -487,8 +493,9 @@ impl Relayer { let message_processor = MessageProcessor::new( self.dbs.get(origin).unwrap().clone(), - self.whitelist.clone(), - self.blacklist.clone(), + self.message_whitelist.clone(), + self.message_blacklist.clone(), + self.address_blacklist.clone(), metrics, send_channels, destination_ctxs, diff --git a/rust/agents/relayer/src/settings/mod.rs b/rust/agents/relayer/src/settings/mod.rs index 2e6b00573..dc4c1e543 100644 --- a/rust/agents/relayer/src/settings/mod.rs +++ b/rust/agents/relayer/src/settings/mod.rs @@ -8,6 +8,7 @@ use std::{collections::HashSet, path::PathBuf}; use convert_case::Case; use derive_more::{AsMut, AsRef, Deref, DerefMut}; +use ethers::utils::hex; use eyre::{eyre, Context}; use hyperlane_base::{ impl_loadable_from_settings, @@ -46,6 +47,10 @@ pub struct RelayerSettings { pub whitelist: MatchingList, /// Filter for what messages to block. pub blacklist: MatchingList, + /// Filter for what addresses to block interactions with. + /// This is intentionally not an H256 to allow for addresses of any length without + /// adding any padding. + pub address_blacklist: Vec>, /// This is optional. If not specified, any amount of gas will be valid, otherwise this /// is the max allowed gas in wei to relay a transaction. pub transaction_gas_limit: Option, @@ -191,6 +196,14 @@ impl FromRawConf for RelayerSettings { .and_then(parse_matching_list) .unwrap_or_default(); + let address_blacklist = p + .chain(&mut err) + .get_opt_key("addressBlacklist") + .parse_string() + .end() + .map(|str| parse_address_list(str, &mut err, || &p.cwp + "address_blacklist")) + .unwrap_or_default(); + let transaction_gas_limit = p .chain(&mut err) .get_opt_key("transactionGasLimit") @@ -268,6 +281,7 @@ impl FromRawConf for RelayerSettings { gas_payment_enforcement, whitelist, blacklist, + address_blacklist, transaction_gas_limit, skip_transaction_gas_limit_for, allow_local_checkpoint_syncers, @@ -311,3 +325,53 @@ fn parse_matching_list(p: ValueParser) -> ConfigResult { err.into_result(ml) } + +fn parse_address_list( + str: &str, + err: &mut ConfigParsingError, + err_path: impl Fn() -> ConfigPath, +) -> Vec> { + str.split(',') + .filter_map(|s| { + let mut s = s.trim().to_owned(); + if let Some(stripped) = s.strip_prefix("0x") { + s = stripped.to_owned(); + } + hex::decode(s).take_err(err, &err_path) + }) + .collect_vec() +} + +#[cfg(test)] +mod test { + use super::*; + use hyperlane_core::H160; + + #[test] + fn test_parse_address_blacklist() { + let valid_address1 = b"valid".to_vec(); + let valid_address2 = H160::random().as_bytes().to_vec(); + + // Successful parsing + let input = format!( + "0x{}, {}", + hex::encode(&valid_address1), + hex::encode(&valid_address2) + ); + let mut err = ConfigParsingError::default(); + let res = parse_address_list(&input, &mut err, ConfigPath::default); + assert_eq!(res, vec![valid_address1.clone(), valid_address2.clone()]); + assert!(err.is_ok()); + + // An error in the final address provided + let input = format!( + "0x{}, {}, 0xaazz", + hex::encode(&valid_address1), + hex::encode(&valid_address2) + ); + let mut err = ConfigParsingError::default(); + let res = parse_address_list(&input, &mut err, ConfigPath::default); + assert_eq!(res, vec![valid_address1, valid_address2]); + assert!(!err.is_ok()); + } +} diff --git a/rust/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs b/rust/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs index 7314e2a00..ae6629e95 100644 --- a/rust/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs +++ b/rust/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs @@ -546,10 +546,10 @@ pub(crate) mod test { pub sequence: u32, } - impl Into> for MockSequencedData { - fn into(self) -> Indexed { - let sequence = self.sequence; - Indexed::new(self).with_sequence(sequence) + impl From for Indexed { + fn from(val: MockSequencedData) -> Self { + let sequence = val.sequence; + Indexed::new(val).with_sequence(sequence) } } diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 566986588..32c5831e4 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -223,7 +223,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '3fddaeb-20240619-163111', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContexts, diff --git a/typescript/infra/src/config/agent/relayer.ts b/typescript/infra/src/config/agent/relayer.ts index 3d88c16ff..f9d4bac73 100644 --- a/typescript/infra/src/config/agent/relayer.ts +++ b/typescript/infra/src/config/agent/relayer.ts @@ -1,4 +1,6 @@ import { BigNumberish } from 'ethers'; +import { Logger } from 'pino'; +import { z } from 'zod'; import { AgentConfig, @@ -10,7 +12,13 @@ import { MatchingList, RelayerConfig as RelayerAgentConfig, } from '@hyperlane-xyz/sdk'; -import { Address, ProtocolType, addressToBytes32 } from '@hyperlane-xyz/utils'; +import { + Address, + ProtocolType, + addressToBytes32, + isValidAddressEvm, + rootLogger, +} from '@hyperlane-xyz/utils'; import { getChain, getDomainId } from '../../../config/registry.js'; import { AgentAwsUser } from '../../agents/aws/user.js'; @@ -34,6 +42,7 @@ export interface BaseRelayerConfig { gasPaymentEnforcement: GasPaymentEnforcement[]; whitelist?: MatchingList; blacklist?: MatchingList; + addressBlacklist?: string; transactionGasLimit?: BigNumberish; skipTransactionGasLimitFor?: string[]; metricAppContexts?: MetricAppContext[]; @@ -58,12 +67,15 @@ export interface HelmRelayerChainValues { export class RelayerConfigHelper extends AgentConfigHelper { readonly #relayerConfig: BaseRelayerConfig; + readonly logger: Logger; constructor(agentConfig: RootAgentConfig) { if (!agentConfig.relayer) throw Error('Relayer is not defined for this context'); super(agentConfig, agentConfig.relayer); + this.#relayerConfig = agentConfig.relayer; + this.logger = rootLogger.child({ module: 'RelayerConfigHelper' }); } async buildConfig(): Promise { @@ -80,6 +92,11 @@ export class RelayerConfigHelper extends AgentConfigHelper { if (baseConfig.blacklist) { relayerConfig.blacklist = JSON.stringify(baseConfig.blacklist); } + + relayerConfig.addressBlacklist = (await this.getSanctionedAddresses()).join( + ',', + ); + if (baseConfig.transactionGasLimit) { relayerConfig.transactionGasLimit = baseConfig.transactionGasLimit.toString(); @@ -130,6 +147,40 @@ export class RelayerConfigHelper extends AgentConfigHelper { return chainSigners; } + async getSanctionedAddresses() { + // All Ethereum-style addresses from https://github.com/0xB10C/ofac-sanctioned-digital-currency-addresses/tree/lists + const currencies = ['ARB', 'ETC', 'ETH', 'USDC', 'USDT']; + + const schema = z.array(z.string()); + + const allSanctionedAddresses = await Promise.all( + currencies.map(async (currency) => { + const rawUrl = `https://raw.githubusercontent.com/0xB10C/ofac-sanctioned-digital-currency-addresses/lists/sanctioned_addresses_${currency}.json`; + this.logger.debug( + { + currency, + rawUrl, + }, + 'Fetching sanctioned addresses', + ); + const json = await fetch(rawUrl); + const sanctionedAddresses = schema.parse(await json.json()); + return sanctionedAddresses; + }), + ); + + return allSanctionedAddresses.flat().filter((address) => { + if (!isValidAddressEvm(address)) { + this.logger.debug( + { address }, + 'Invalid sanctioned address, throwing out', + ); + return false; + } + return true; + }); + } + // Returns whether the relayer requires AWS credentials get requiresAwsCredentials(): boolean { // If AWS is present on the agentConfig, we are using AWS keys and need credentials regardless. diff --git a/typescript/sdk/src/metadata/agentConfig.ts b/typescript/sdk/src/metadata/agentConfig.ts index 49f05e883..ae20d551b 100644 --- a/typescript/sdk/src/metadata/agentConfig.ts +++ b/typescript/sdk/src/metadata/agentConfig.ts @@ -314,6 +314,10 @@ export const RelayerAgentConfigSchema = AgentConfigSchema.extend({ .describe( 'If no blacklist is provided ALL will be considered to not be on the blacklist.', ), + addressBlacklist: z + .string() + .optional() + .describe('Comma separated list of addresses to blacklist.'), transactionGasLimit: ZUWei.optional().describe( 'This is optional. If not specified, any amount of gas will be valid, otherwise this is the max allowed gas in wei to relay a transaction.', ), From 0d12ff31cdf1b66c64e653b7e0679d26a8a7633f Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Thu, 20 Jun 2024 17:58:43 +0100 Subject: [PATCH 30/46] feat(ci): rust caching in `test` workflow (#4015) - draft: improve rust target caching in ci - separate caches for e2e-cosmwasm, e2e-noncosmwasm, cli-e2e test - drive-by adding `restore-keys` test expectation: - 1st commit of rust changes will take the full required time as it'll have to do a fresh build and then cache - subsequent builds of a particular rust change will be faster because it'll pickup the rust cache from before --------- Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> --- .github/workflows/rust.yml | 6 +-- .github/workflows/test.yml | 86 ++++++++++++++++++++++++++++++-------- typescript/cli/ci-test.sh | 6 +-- 3 files changed, 74 insertions(+), 24 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 4f52f82bb..27dc0403e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -39,8 +39,7 @@ jobs: - name: rust cache uses: Swatinem/rust-cache@v2 with: - prefix-key: "v2-rust" - shared-key: "test" + prefix-key: "v3-rust" workspaces: | ./rust - name: Free disk space @@ -69,8 +68,7 @@ jobs: - name: rust cache uses: Swatinem/rust-cache@v2 with: - prefix-key: "v2-rust" - shared-key: "lint" + prefix-key: "v3-rust" workspaces: | ./rust - name: Free disk space diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e01741aab..ae258f601 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -254,6 +254,14 @@ jobs: toolchain: stable profile: minimal + - name: rust cache + uses: Swatinem/rust-cache@v2 + with: + prefix-key: "v1-${{ runner.os }}-rust-cache" + shared-key: ${{ matrix.e2e-type }} + workspaces: | + ./rust + - name: Free disk space run: | # Based on https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 @@ -296,22 +304,15 @@ jobs: key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} fail-on-cache-miss: true - - name: cargo-cache - uses: actions/cache@v4 - with: - path: | - ~/.cargo - key: ${{ runner.os }}-cargo-cache-${{ hashFiles('./rust/Cargo.lock') }} - - name: agent tests with CosmWasm - run: cargo test --release --package run-locally --bin run-locally --features cosmos -- cosmos::test --nocapture + run: cargo test --release --package run-locally --bin run-locally --features cosmos test-utils -- cosmos::test --nocapture if: matrix.e2e-type == 'cosmwasm' working-directory: ./rust env: RUST_BACKTRACE: 'full' - name: agent tests excluding CosmWasm - run: cargo run --release --bin run-locally + run: cargo run --release --bin run-locally --features test-utils if: matrix.e2e-type == 'non-cosmwasm' working-directory: ./rust env: @@ -330,10 +331,60 @@ jobs: echo "All e2e-matrix jobs have completed." # You can add additional commands here to report the result as needed + prebuild-cli-e2e: + runs-on: larger-runner + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.base_ref == 'main') || github.event_name == 'merge_group' + needs: [checkout-registry] + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + submodules: recursive + + - name: setup rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + + - name: rust cache + uses: Swatinem/rust-cache@v2 + with: + prefix-key: "v1-${{ runner.os }}-rust-cache" + shared-key: "cli-e2e" + workspaces: | + ./rust + + - name: Free disk space + run: | + # Based on https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + + - name: Install mold linker + uses: rui314/setup-mold@v1 + with: + mold-version: 2.0.0 + make-default: true + + - name: Build validator + run: cargo build --bin validator --features test-utils + working-directory: ./rust + env: + RUST_BACKTRACE: 'full' + + - name: Build relayer + run: cargo build --bin relayer --features test-utils + working-directory: ./rust + env: + RUST_BACKTRACE: 'full' + cli-e2e: runs-on: larger-runner if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.base_ref == 'main') || github.event_name == 'merge_group' - needs: [yarn-build, checkout-registry] + needs: [yarn-build, prebuild-cli-e2e] strategy: matrix: include: @@ -359,6 +410,14 @@ jobs: toolchain: stable profile: minimal + - name: rust cache + uses: Swatinem/rust-cache@v2 + with: + prefix-key: "v1-${{ runner.os }}-rust-cache" + shared-key: "cli-e2e" + workspaces: | + ./rust + - name: Free disk space run: | # Based on https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 @@ -401,13 +460,6 @@ jobs: key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} fail-on-cache-miss: true - - name: cargo-cache - uses: actions/cache@v4 - with: - path: | - ~/.cargo - key: ${{ runner.os }}-cargo-cache-${{ hashFiles('./rust/Cargo.lock') }} - - name: cli e2e tests run: ./typescript/cli/ci-test.sh ${{ matrix.test-type }} diff --git a/typescript/cli/ci-test.sh b/typescript/cli/ci-test.sh index f2b12371e..7fbeea04b 100755 --- a/typescript/cli/ci-test.sh +++ b/typescript/cli/ci-test.sh @@ -254,7 +254,7 @@ run_hyperlane_send_message() { run_validator() { echo -e "\nPre-building validator with cargo" - cargo build --bin validator + cargo build --bin validator --features test-utils # set some default agent env vars, used by both validators and relayer export HYP_CHAINS_${CHAIN1_CAPS}_BLOCKS_REORGPERIOD=0 @@ -290,7 +290,7 @@ run_validator() { echo "Validator running, sleeping to let it sync" # This needs to be long to allow time for the cargo build to finish - sleep 15 + sleep 20 echo "Done sleeping" for CHAIN in ${CHAIN1} ${CHAIN2} @@ -308,7 +308,7 @@ run_validator() { run_relayer() { echo -e "\nPre-building relayer with cargo" - cargo build --bin relayer + cargo build --bin relayer --features test-utils echo "Running relayer" export CONFIG_FILES=/tmp/agent-config.json From 9aca29260b9ead0564a66cf063c3b16914c2194e Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Fri, 21 Jun 2024 10:39:14 +0100 Subject: [PATCH 31/46] chore: deploy relayer with new image and ezETH metrics (#3993) ### Description ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- .../config/environments/mainnet3/agent.ts | 7 ++++- .../mainnet3/warp/renzo-ezETH-addresses.json | 26 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 typescript/infra/config/environments/mainnet3/warp/renzo-ezETH-addresses.json diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 32c5831e4..1d24baa48 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -27,6 +27,7 @@ import inevmEthereumUsdcAddresses from './warp/inevm-USDC-addresses.json'; import inevmEthereumUsdtAddresses from './warp/inevm-USDT-addresses.json'; import injectiveInevmInjAddresses from './warp/injective-inevm-addresses.json'; import mantaTIAAddresses from './warp/manta-TIA-addresses.json'; +import renzoEzEthAddresses from './warp/renzo-ezETH-addresses.json'; import victionEthereumEthAddresses from './warp/viction-ETH-addresses.json'; import victionEthereumUsdcAddresses from './warp/viction-USDC-addresses.json'; import victionEthereumUsdtAddresses from './warp/viction-USDT-addresses.json'; @@ -212,6 +213,10 @@ const metricAppContexts = [ name: 'ancient8_ethereum_usdc', matchingList: routerMatchingList(ancient8EthereumUsdcAddresses), }, + { + name: 'renzo_ezeth', + matchingList: routerMatchingList(renzoEzEthAddresses), + }, ]; const hyperlane: RootAgentConfig = { @@ -223,7 +228,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '3fddaeb-20240619-163111', + tag: '0d12ff3-20240620-173353', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContexts, diff --git a/typescript/infra/config/environments/mainnet3/warp/renzo-ezETH-addresses.json b/typescript/infra/config/environments/mainnet3/warp/renzo-ezETH-addresses.json new file mode 100644 index 000000000..37f4fd1b1 --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/warp/renzo-ezETH-addresses.json @@ -0,0 +1,26 @@ +{ + "bsc": { + "router": "0x6266e803057fa68C35018C3FB0B59db7129C23BB" + }, + "arbitrum": { + "router": "0xC8F280d3eC30746f77c28695827d309d16939BF1" + }, + "optimism": { + "router": "0x1d1a210E71398c17FD7987eDF1dc347539bB541F" + }, + "base": { + "router": "0x584BA77ec804f8B6A559D196661C0242C6844F49" + }, + "blast": { + "router": "0x8C603c6BDf8a9d548fC5D2995750Cc25eF59183b" + }, + "mode": { + "router": "0xcd95B8dF351400BF4cbAb340b6EfF2454aDB299E" + }, + "linea": { + "router": "0xcd95B8dF351400BF4cbAb340b6EfF2454aDB299E" + }, + "ethereum": { + "router": "0xdFf621F952c23972dFD3A9E5d7B9f6339e9c078B" + } +} From 23ad36ab98da4bd708a9d15d5b46ba4f3f390dbb Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Fri, 21 Jun 2024 12:09:40 +0100 Subject: [PATCH 32/46] feat(infra): allow specifying chains to deploy validators for in infra (#4014) - allow someone to provide a specific set of chains to deploy validators for deploying validator: ![image](https://github.com/hyperlane-xyz/hyperlane-monorepo/assets/10051819/906c3c45-27e1-43ca-ac21-176ade91a500) deploying relayer: ![image](https://github.com/hyperlane-xyz/hyperlane-monorepo/assets/10051819/a5c6af09-1f6a-4c1a-8652-05fbb10ced30) --------- Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> --- typescript/infra/scripts/agents/utils.ts | 28 +++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/typescript/infra/scripts/agents/utils.ts b/typescript/infra/scripts/agents/utils.ts index f80f435a0..c7b8c8a5d 100644 --- a/typescript/infra/scripts/agents/utils.ts +++ b/typescript/infra/scripts/agents/utils.ts @@ -22,6 +22,7 @@ export class AgentCli { agentConfig!: RootAgentConfig; initialized = false; dryRun = false; + chains?: string[]; public async runHelmCommand(command: HelmCommand) { await this.init(); @@ -30,12 +31,19 @@ export class AgentCli { // make all the managers first to ensure config validity for (const role of this.roles) { switch (role) { - case Role.Validator: - for (const chain of this.agentConfig.contextChainNames[role]) { + case Role.Validator: { + const contextChainNames = this.agentConfig.contextChainNames[role]; + const validatorChains = !this.chains + ? contextChainNames + : contextChainNames.filter((chain: string) => + this.chains!.includes(chain), + ); + for (const chain of validatorChains) { const key = `${role}-${chain}`; managers[key] = new ValidatorHelmManager(this.agentConfig, chain); } break; + } case Role.Relayer: managers[role] = new RelayerHelmManager(this.agentConfig); break; @@ -63,7 +71,20 @@ export class AgentCli { if (this.initialized) return; const argv = await withAgentRole(withContext(getArgs())) .describe('dry-run', 'Run through the steps without making any changes') - .boolean('dry-run').argv; + .boolean('dry-run') + .describe('chains', 'Specific chains to perform validator actions on.') + .array('chains') + // Ensure chains are unique + .coerce('chains', (chains: string[]) => Array.from(new Set(chains))) + .alias('c', 'chains').argv; + + if ( + argv.chains && + argv.chains.length > 0 && + !argv.role.includes(Role.Validator) + ) { + console.warn('Chain argument applies to validator role only. Ignoring.'); + } const { envConfig, agentConfig } = await getConfigsBasedOnArgs(argv); await assertCorrectKubeContext(envConfig); @@ -72,5 +93,6 @@ export class AgentCli { this.agentConfig = agentConfig; this.dryRun = argv.dryRun || false; this.initialized = true; + this.chains = argv.chains; } } From 832351d0d022c38ad32fcb05b68cdf95f5b1d7e6 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Fri, 21 Jun 2024 13:10:42 +0100 Subject: [PATCH 33/46] chore: set agent and environment specific resource requests (#4027) ### Description - based off https://abacusworks.grafana.net/d/FSR9YWr7k, updated resource requests for all agents. Because mainnet3 sees so many more messages and more chains, the resource needs there are higher - allows for resources to be defined in infra - previously we'd just use the default value in the values.yaml of the helm charts. Also makes the resources specific to the type of agent, which is nice because relayers require much higher spec than validators - I haven't deployed this yet, will do so when I get a review ### Drive-by changes ### Related issues - Fixes https://github.com/hyperlane-xyz/issues/issues/1288 ### Backward compatibility ### Testing --- .../config/environments/mainnet3/agent.ts | 38 +++++++++++++--- .../config/environments/testnet4/agent.ts | 37 +++++++++++++--- typescript/infra/src/agents/index.ts | 12 +++++- typescript/infra/src/config/agent/agent.ts | 43 +++++++++++-------- typescript/infra/src/config/infrastructure.ts | 3 ++ 5 files changed, 103 insertions(+), 30 deletions(-) diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 1d24baa48..8df43bdb6 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -219,6 +219,28 @@ const metricAppContexts = [ }, ]; +// Resource requests are based on observed usage found in https://abacusworks.grafana.net/d/FSR9YWr7k +const relayerResources = { + requests: { + cpu: '3000m', + memory: '8Gi', + }, +}; + +const validatorResources = { + requests: { + cpu: '250m', + memory: '256Mi', + }, +}; + +const scraperResources = { + requests: { + cpu: '100m', + memory: '4Gi', + }, +}; + const hyperlane: RootAgentConfig = { ...contextBase, context: Contexts.Hyperlane, @@ -232,21 +254,24 @@ const hyperlane: RootAgentConfig = { }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContexts, + resources: relayerResources, }, validators: { docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '0d12ff3-20240620-173353', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.Hyperlane), + resources: validatorResources, }, scraper: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '59451d6-20240612-171611', + tag: '0d12ff3-20240620-173353', }, + resources: scraperResources, }, }; @@ -259,21 +284,23 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '0d12ff3-20240620-173353', }, // We're temporarily (ab)using the RC relayer as a way to increase // message throughput. // whitelist: releaseCandidateHelloworldMatchingList, gasPaymentEnforcement, metricAppContexts, + resources: relayerResources, }, validators: { docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '0d12ff3-20240620-173353', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.ReleaseCandidate), + resources: validatorResources, }, }; @@ -290,7 +317,7 @@ const neutron: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'c9c5d37-20240510-014327', + tag: '0d12ff3-20240620-173353', }, gasPaymentEnforcement: [ { @@ -317,6 +344,7 @@ const neutron: RootAgentConfig = { matchingList: routerMatchingList(arbitrumNeutronEclipAddresses), }, ], + resources: relayerResources, }, }; diff --git a/typescript/infra/config/environments/testnet4/agent.ts b/typescript/infra/config/environments/testnet4/agent.ts index c21678f4d..77a23f3b8 100644 --- a/typescript/infra/config/environments/testnet4/agent.ts +++ b/typescript/infra/config/environments/testnet4/agent.ts @@ -89,6 +89,28 @@ const gasPaymentEnforcement: GasPaymentEnforcement[] = [ }, ]; +// Resource requests are based on observed usage found in https://abacusworks.grafana.net/d/FSR9YWr7k +const relayerResources = { + requests: { + cpu: '1000m', + memory: '4Gi', + }, +}; + +const validatorResources = { + requests: { + cpu: '250m', + memory: '256Mi', + }, +}; + +const scraperResources = { + requests: { + cpu: '100m', + memory: '1Gi', + }, +}; + const hyperlane: RootAgentConfig = { ...contextBase, contextChainNames: hyperlaneContextAgentChainNames, @@ -98,7 +120,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '0d12ff3-20240620-173353', }, blacklist: [ ...releaseCandidateHelloworldMatchingList, @@ -122,21 +144,24 @@ const hyperlane: RootAgentConfig = { matchingList: routerMatchingList(plumetestnetSepoliaAddresses), }, ], + resources: relayerResources, }, validators: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '0d12ff3-20240620-173353', }, chains: validatorChainConfig(Contexts.Hyperlane), + resources: validatorResources, }, scraper: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'c9c5d37-20240510-014327', + tag: '0d12ff3-20240620-173353', }, + resources: scraperResources, }, }; @@ -149,19 +174,21 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '0d12ff3-20240620-173353', }, whitelist: [...releaseCandidateHelloworldMatchingList], gasPaymentEnforcement, transactionGasLimit: 750000, + resources: relayerResources, }, validators: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '3bb9d0a-20240619-130157', + tag: '0d12ff3-20240620-173353', }, chains: validatorChainConfig(Contexts.ReleaseCandidate), + resources: validatorResources, }, }; diff --git a/typescript/infra/src/agents/index.ts b/typescript/infra/src/agents/index.ts index c959bca65..c1486e83a 100644 --- a/typescript/infra/src/agents/index.ts +++ b/typescript/infra/src/agents/index.ts @@ -10,6 +10,7 @@ import { AgentContextConfig, DockerConfig, HelmRootAgentValues, + KubernetesResources, RootAgentConfig, } from '../config/agent/agent.js'; import { RelayerConfigHelper } from '../config/agent/relayer.js'; @@ -151,7 +152,7 @@ export abstract class AgentHelmManager { return RpcConsensusType.Single; } - return this.config.rpcConsensusType; + return this.config.agentRoleConfig.rpcConsensusType; } async doesAgentReleaseExist() { @@ -169,7 +170,11 @@ export abstract class AgentHelmManager { } dockerImage(): DockerConfig { - return this.config.docker; + return this.config.agentRoleConfig.docker; + } + + kubernetesResources(): KubernetesResources | undefined { + return this.config.agentRoleConfig.resources; } } @@ -216,6 +221,7 @@ export class RelayerHelmManager extends OmniscientAgentHelmManager { enabled: true, aws: this.config.requiresAwsCredentials, config: await this.config.buildConfig(), + resources: this.kubernetesResources(), }; const signers = await this.config.signers(); @@ -244,6 +250,7 @@ export class ScraperHelmManager extends OmniscientAgentHelmManager { values.hyperlane.scraper = { enabled: true, config: await this.config.buildConfig(), + resources: this.kubernetesResources(), }; // scraper never requires aws credentials values.hyperlane.aws = false; @@ -279,6 +286,7 @@ export class ValidatorHelmManager extends MultichainAgentHelmManager { originChainName: cfg.originChainName, interval: cfg.interval, })), + resources: this.kubernetesResources(), }; // The name of the helm release for agents is `hyperlane-agent`. diff --git a/typescript/infra/src/config/agent/agent.ts b/typescript/infra/src/config/agent/agent.ts index 1ccd1d45b..f21bcb19f 100644 --- a/typescript/infra/src/config/agent/agent.ts +++ b/typescript/infra/src/config/agent/agent.ts @@ -89,8 +89,12 @@ export interface AgentContextConfig extends AgentEnvConfig { // incomplete common agent configuration for a role interface AgentRoleConfig { + // K8s-specific docker: DockerConfig; chainDockerOverrides?: Record>; + resources?: KubernetesResources; + + // Agent-specific rpcConsensusType: RpcConsensusType; index?: IndexingConfig; } @@ -119,6 +123,16 @@ export interface DockerConfig { tag: string; } +export interface KubernetesResources { + requests?: KubernetesComputeResources; + limits?: KubernetesComputeResources; +} + +export interface KubernetesComputeResources { + cpu: string; + memory: string; +} + export class RootAgentConfigHelper implements AgentContextConfig { readonly rawConfig: RootAgentConfig; @@ -154,21 +168,14 @@ export class RootAgentConfigHelper implements AgentContextConfig { } } -export abstract class AgentConfigHelper - extends RootAgentConfigHelper - implements AgentRoleConfig -{ - rpcConsensusType: RpcConsensusType; - docker: DockerConfig; - chainDockerOverrides?: Record>; - index?: IndexingConfig; - - protected constructor(root: RootAgentConfig, agent: AgentRoleConfig) { +export abstract class AgentConfigHelper< + R = unknown, +> extends RootAgentConfigHelper { + protected constructor( + root: RootAgentConfig, + readonly agentRoleConfig: AgentRoleConfig, + ) { super(root); - this.rpcConsensusType = agent.rpcConsensusType; - this.docker = agent.docker; - this.chainDockerOverrides = agent.chainDockerOverrides; - this.index = agent.index; } // role this config is for @@ -178,13 +185,13 @@ export abstract class AgentConfigHelper // If the provided chain has an override, return the override, otherwise return the default. dockerImageForChain(chainName: ChainName): DockerConfig { - if (this.chainDockerOverrides?.[chainName]) { + if (this.agentRoleConfig.chainDockerOverrides?.[chainName]) { return { - ...this.docker, - ...this.chainDockerOverrides[chainName], + ...this.agentRoleConfig.docker, + ...this.agentRoleConfig.chainDockerOverrides[chainName], }; } - return this.docker; + return this.agentRoleConfig.docker; } } diff --git a/typescript/infra/src/config/infrastructure.ts b/typescript/infra/src/config/infrastructure.ts index 23b898f43..9fe1d461f 100644 --- a/typescript/infra/src/config/infrastructure.ts +++ b/typescript/infra/src/config/infrastructure.ts @@ -1,3 +1,5 @@ +import { KubernetesResources } from './agent/agent.js'; + export interface HelmImageValues { repository: string; tag: string; @@ -6,6 +8,7 @@ export interface HelmImageValues { // This encompasses things like storage and resources for stateful sets. export interface HelmStatefulSetValues { enabled: boolean; + resources?: KubernetesResources; } interface KubernetesConfig { From c5a5e264b89b4e629dda2003c0000a10eee1bf71 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Fri, 21 Jun 2024 13:49:59 +0100 Subject: [PATCH 34/46] chore: enable `osmosis` on relayer (#4028) - chore: enable `osmosis` on relayer - drive-by add default chain signer/key/type to agent config - `signer.key` is copied from `neutron` --------- Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> --- rust/config/mainnet_config.json | 5 +++++ typescript/infra/config/environments/mainnet3/agent.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/rust/config/mainnet_config.json b/rust/config/mainnet_config.json index e801d0ead..351e3c878 100644 --- a/rust/config/mainnet_config.json +++ b/rust/config/mainnet_config.json @@ -1155,6 +1155,11 @@ "http": "https://osmosis-rpc.publicnode.com" } ], + "signer": { + "key": "0x5486418967eabc770b0fcb995f7ef6d9a72f7fc195531ef76c5109f44f51af26", + "prefix": "osmo", + "type": "cosmosKey" + }, "slip44": 118, "validatorAnnounce": "0xaf867da5b09a20ee49161d57f99477c0c42d100f34eb53da0d2eb7fc6c257235" }, diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 8df43bdb6..3025f4e77 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -93,7 +93,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = { // At the moment, we only relay between Neutron and Manta Pacific on the neutron context. neutron: false, optimism: true, - osmosis: false, + osmosis: true, polygon: true, polygonzkevm: true, redstone: true, @@ -123,6 +123,7 @@ export const hyperlaneContextAgentChainConfig: AgentChainConfig = { // Cannot scrape non-EVM chains neutron: false, optimism: true, + // Cannot scrape non-EVM chains osmosis: false, polygon: true, polygonzkevm: true, From 18056aafdd0c74cba732366288893c509adc88ee Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Fri, 21 Jun 2024 14:19:00 +0100 Subject: [PATCH 35/46] chore(ci): fix ci workflow filters on main (#4022) chore(ci): fix ci workflow filters on main generally copying the path/filters for `pull_request` into `push` so that we correctly run the right workflows --------- Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> --- .github/workflows/rust-skipped.yml | 3 +++ .github/workflows/rust.yml | 6 ++++++ .github/workflows/test-skipped.yml | 3 +++ .github/workflows/test.yml | 2 ++ 4 files changed, 14 insertions(+) diff --git a/.github/workflows/rust-skipped.yml b/.github/workflows/rust-skipped.yml index a854837a0..e4d00219a 100644 --- a/.github/workflows/rust-skipped.yml +++ b/.github/workflows/rust-skipped.yml @@ -4,6 +4,9 @@ name: rust on: push: branches: [main] + paths-ignore: + - 'rust/**' + - .github/workflows/rust.yml pull_request: branches: [main] paths-ignore: diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 27dc0403e..768e79090 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -1,6 +1,12 @@ name: rust on: + push: + branches: [main] + paths: + - 'rust/**' + - .github/workflows/rust.yml + - '!*.md' pull_request: branches: [main] paths: diff --git a/.github/workflows/test-skipped.yml b/.github/workflows/test-skipped.yml index 3cff77784..2c73ab5c5 100644 --- a/.github/workflows/test-skipped.yml +++ b/.github/workflows/test-skipped.yml @@ -3,6 +3,9 @@ name: test on: push: branches: [main] + paths: + - '*.md' + - '!**/*' pull_request: branches: - '*' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ae258f601..fe6d78004 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,6 +4,8 @@ on: # Triggers the workflow on push or pull request against main push: branches: [main] + paths-ignore: + - '*.md' pull_request: branches: - '*' # run against all branches From f1fe882e3b73b108538ae30fab3cb86469335772 Mon Sep 17 00:00:00 2001 From: Snoppy Date: Sat, 22 Jun 2024 03:16:39 +0800 Subject: [PATCH 36/46] chore: fix typos (#3645) fix minor typos Signed-off-by: snoppy Co-authored-by: Paul Balaji --- rust/chains/hyperlane-cosmos/src/providers/grpc.rs | 2 +- rust/sealevel/libraries/account-utils/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/chains/hyperlane-cosmos/src/providers/grpc.rs b/rust/chains/hyperlane-cosmos/src/providers/grpc.rs index 3c15889e3..4c0ee7c10 100644 --- a/rust/chains/hyperlane-cosmos/src/providers/grpc.rs +++ b/rust/chains/hyperlane-cosmos/src/providers/grpc.rs @@ -277,7 +277,7 @@ impl WasmGrpcProvider { let raw_tx = TxRaw { body_bytes: sign_doc.body_bytes, auth_info_bytes: sign_doc.auth_info_bytes, - // The poorly documented trick to simuluating a tx without a valid signature is to just pass + // The poorly documented trick to simulating a tx without a valid signature is to just pass // in a single empty signature. Taken from cosmjs: // https://github.com/cosmos/cosmjs/blob/44893af824f0712d1f406a8daa9fcae335422235/packages/stargate/src/modules/tx/queries.ts#L67 signatures: vec![vec![]], diff --git a/rust/sealevel/libraries/account-utils/src/lib.rs b/rust/sealevel/libraries/account-utils/src/lib.rs index 78af42974..c312ab1e7 100644 --- a/rust/sealevel/libraries/account-utils/src/lib.rs +++ b/rust/sealevel/libraries/account-utils/src/lib.rs @@ -93,7 +93,7 @@ where Ok(Self::from(Self::fetch_data(buf)?.unwrap_or_default())) } - // Optimisically write then realloc on failure. + // Optimistically write then realloc on failure. // If we serialize and calculate len before realloc we will waste heap space as there is no // free(). Tradeoff between heap usage and compute budget. pub fn store( From b54c14cd31be541c06ca42a50ec2ef32e983653f Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Fri, 21 Jun 2024 21:07:59 +0100 Subject: [PATCH 37/46] chore: re-enforce a whitelist policy in the RC relayer (#4032) ### Description ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- typescript/infra/config/environments/mainnet3/agent.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 3025f4e77..e224587e5 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -287,9 +287,7 @@ const releaseCandidate: RootAgentConfig = { repo, tag: '0d12ff3-20240620-173353', }, - // We're temporarily (ab)using the RC relayer as a way to increase - // message throughput. - // whitelist: releaseCandidateHelloworldMatchingList, + whitelist: releaseCandidateHelloworldMatchingList, gasPaymentEnforcement, metricAppContexts, resources: relayerResources, From 6398aab7275ea57cc69e3f1581328ed5cf4b1dff Mon Sep 17 00:00:00 2001 From: J M Rossy Date: Sat, 22 Jun 2024 01:53:16 +0100 Subject: [PATCH 38/46] chore: Upgrade registry to 2.1.1 (#4033) ### Description To pickup fix in https://github.com/hyperlane-xyz/hyperlane-registry/pull/71 ### Backward compatibility Yes --- .changeset/clean-numbers-know.md | 7 +++++++ typescript/cli/package.json | 2 +- typescript/helloworld/package.json | 2 +- typescript/infra/package.json | 2 +- yarn.lock | 14 +++++++------- 5 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 .changeset/clean-numbers-know.md diff --git a/.changeset/clean-numbers-know.md b/.changeset/clean-numbers-know.md new file mode 100644 index 000000000..b48a6d303 --- /dev/null +++ b/.changeset/clean-numbers-know.md @@ -0,0 +1,7 @@ +--- +'@hyperlane-xyz/helloworld': minor +'@hyperlane-xyz/infra': minor +'@hyperlane-xyz/cli': minor +--- + +Upgrade registry to 2.1.1 diff --git a/typescript/cli/package.json b/typescript/cli/package.json index d88b1fe6c..1cf7e607c 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -5,7 +5,7 @@ "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", - "@hyperlane-xyz/registry": "1.3.0", + "@hyperlane-xyz/registry": "2.1.1", "@hyperlane-xyz/sdk": "3.16.0", "@hyperlane-xyz/utils": "3.16.0", "@inquirer/prompts": "^3.0.0", diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index c1ccf26cb..7d8520976 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -4,7 +4,7 @@ "version": "3.16.0", "dependencies": { "@hyperlane-xyz/core": "3.16.0", - "@hyperlane-xyz/registry": "1.3.0", + "@hyperlane-xyz/registry": "2.1.1", "@hyperlane-xyz/sdk": "3.16.0", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" diff --git a/typescript/infra/package.json b/typescript/infra/package.json index 9bba689ad..6b6188e63 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -14,7 +14,7 @@ "@ethersproject/providers": "^5.7.2", "@google-cloud/secret-manager": "^5.5.0", "@hyperlane-xyz/helloworld": "3.16.0", - "@hyperlane-xyz/registry": "1.3.0", + "@hyperlane-xyz/registry": "2.1.1", "@hyperlane-xyz/sdk": "3.16.0", "@hyperlane-xyz/utils": "3.16.0", "@nomiclabs/hardhat-etherscan": "^3.0.3", diff --git a/yarn.lock b/yarn.lock index 23694b4cb..547bea289 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5683,7 +5683,7 @@ __metadata: "@aws-sdk/client-s3": "npm:^3.577.0" "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" - "@hyperlane-xyz/registry": "npm:1.3.0" + "@hyperlane-xyz/registry": "npm:2.1.1" "@hyperlane-xyz/sdk": "npm:3.16.0" "@hyperlane-xyz/utils": "npm:3.16.0" "@inquirer/prompts": "npm:^3.0.0" @@ -5774,7 +5774,7 @@ __metadata: resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: "@hyperlane-xyz/core": "npm:3.16.0" - "@hyperlane-xyz/registry": "npm:1.3.0" + "@hyperlane-xyz/registry": "npm:2.1.1" "@hyperlane-xyz/sdk": "npm:3.16.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" @@ -5823,7 +5823,7 @@ __metadata: "@ethersproject/providers": "npm:^5.7.2" "@google-cloud/secret-manager": "npm:^5.5.0" "@hyperlane-xyz/helloworld": "npm:3.16.0" - "@hyperlane-xyz/registry": "npm:1.3.0" + "@hyperlane-xyz/registry": "npm:2.1.1" "@hyperlane-xyz/sdk": "npm:3.16.0" "@hyperlane-xyz/utils": "npm:3.16.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" @@ -5875,13 +5875,13 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/registry@npm:1.3.0": - version: 1.3.0 - resolution: "@hyperlane-xyz/registry@npm:1.3.0" +"@hyperlane-xyz/registry@npm:2.1.1": + version: 2.1.1 + resolution: "@hyperlane-xyz/registry@npm:2.1.1" dependencies: yaml: "npm:^2" zod: "npm:^3.21.2" - checksum: 2cbdfd9e8958d0babde7104dfb0c98def7edb5f87f5f4679b09467a6a9b531884f187fcbc16fd85b00e304ef8fa3beb0a0779555b2c3edc1936541a0e878a73d + checksum: e0e1f36b9bc43dfb1e4f7c512091b31c6f1b4046687d076fc16c91fd9204af1bdbe7898c8c29ada3c6830f6961bb5aa0933357b73d500595689171f99b992922 languageName: node linkType: hard From 1876f68127328353f1f181eae2f963d69eae68b4 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Mon, 24 Jun 2024 11:18:08 +0100 Subject: [PATCH 39/46] feat: pin monorepo to a specific registry version (#4031) feat: pin monorepo to a specific registry version - introducing a `.registryrc`, which can be a commit hash, branch or tag - introduce a new action just for checking out a registry - remove registry caching because it's quicker now to just checkout the specified version --------- Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> --- .github/actions/checkout-registry/action.yml | 28 +++++ .github/workflows/monorepo-docker.yml | 12 ++- .github/workflows/test-skipped.yml | 6 -- .github/workflows/test.yml | 101 +++---------------- .registryrc | 1 + Dockerfile | 9 +- 6 files changed, 57 insertions(+), 100 deletions(-) create mode 100644 .github/actions/checkout-registry/action.yml create mode 100644 .registryrc diff --git a/.github/actions/checkout-registry/action.yml b/.github/actions/checkout-registry/action.yml new file mode 100644 index 000000000..929ea7539 --- /dev/null +++ b/.github/actions/checkout-registry/action.yml @@ -0,0 +1,28 @@ +name: 'Checkout Registry' +description: 'Checkout the hyperlane-registry repository and move it to the parent directory' +inputs: + registry_version: + description: 'Override the version of the hyperlane-registry to checkout' +runs: + using: 'composite' + steps: + - name: Read .registryrc if registry_version not provided + shell: bash + run: | + if [ -z "${{ inputs.registry_version }}" ]; then + REGISTRY_VERSION=$(cat .registryrc) + echo "REGISTRY_VERSION=$REGISTRY_VERSION" >> $GITHUB_ENV + else + echo "REGISTRY_VERSION=${{ inputs.registry_version }}" >> $GITHUB_ENV + fi + + - name: Checkout hyperlane-registry + uses: actions/checkout@v4 + with: + repository: hyperlane-xyz/hyperlane-registry + ref: ${{ env.REGISTRY_VERSION }} + path: ./hyperlane-registry + + - name: Move hyperlane-registry to parent directory + shell: bash + run: mv ./hyperlane-registry ../ diff --git a/.github/workflows/monorepo-docker.yml b/.github/workflows/monorepo-docker.yml index 629e08acb..67d4f554f 100644 --- a/.github/workflows/monorepo-docker.yml +++ b/.github/workflows/monorepo-docker.yml @@ -10,9 +10,11 @@ on: - 'typescript/infra/**' - 'Dockerfile' - '.dockerignore' + concurrency: group: build-push-monorepo-${{ github.ref }} cancel-in-progress: true + jobs: check-env: runs-on: ubuntu-latest @@ -66,6 +68,13 @@ jobs: registry: gcr.io username: _json_key password: ${{ secrets.GCLOUD_SERVICE_KEY }} + + - name: Read .registryrc + shell: bash + run: | + REGISTRY_VERSION=$(cat .registryrc) + echo "REGISTRY_VERSION=$REGISTRY_VERSION" >> $GITHUB_ENV + - name: Build and push uses: docker/build-push-action@v5 with: @@ -76,6 +85,5 @@ jobs: labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - # To always fetch the latest registry, we use the date as the cache key build-args: | - REGISTRY_CACHE=${{ steps.taggen.outputs.TAG_DATE }} + REGISTRY_COMMIT=${{ env.REGISTRY_VERSION }} diff --git a/.github/workflows/test-skipped.yml b/.github/workflows/test-skipped.yml index 2c73ab5c5..7b4091321 100644 --- a/.github/workflows/test-skipped.yml +++ b/.github/workflows/test-skipped.yml @@ -31,12 +31,6 @@ jobs: - name: Instant pass run: echo "yarn-build job passed" - checkout-registry: - runs-on: ubuntu-latest - steps: - - name: Instant pass - run: echo "checkout-registry job passed" - lint-prettier: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fe6d78004..8584a60f2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,8 +25,6 @@ env: LOG_FORMAT: PRETTY CARGO_TERM_COLOR: always RUST_BACKTRACE: full - # Alongside the monorepo in the directory above the $GITHUB_WORKSPACE. - REGISTRY_URI: ${{ github.workspace }}/../hyperlane-registry jobs: yarn-install: @@ -88,31 +86,6 @@ jobs: - name: build run: yarn build - checkout-registry: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - repository: hyperlane-xyz/hyperlane-registry - ref: main - path: ./hyperlane-registry - - # Put alongside the monorepo in the directory above the $GITHUB_WORKSPACE. - # actions/checkout doesn't allow you to checkout a repository outside of the workspace. - # See https://github.com/actions/checkout/issues/197. - - run: mv ./hyperlane-registry ../ - - # A workaround for relative paths not being supported by actions/cache. - # See https://github.com/actions/upload-artifact/issues/176#issuecomment-1367855630. - - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - - - name: registry-cache - uses: actions/cache@v4 - with: - path: | - ${{ env.REGISTRY_URI_ABSOLUTE }} - key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - lint-prettier: runs-on: ubuntu-latest needs: [yarn-install] @@ -145,7 +118,7 @@ jobs: yarn-test: runs-on: ubuntu-latest - needs: [yarn-build, checkout-registry] + needs: [yarn-build] steps: - uses: actions/checkout@v4 with: @@ -164,24 +137,15 @@ jobs: !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - # A workaround for relative paths not being supported by actions/cache. - # See https://github.com/actions/upload-artifact/issues/176#issuecomment-1367855630. - - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - - - name: registry-cache - uses: actions/cache@v4 - with: - path: | - ${{ env.REGISTRY_URI_ABSOLUTE }} - key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - fail-on-cache-miss: true + - name: Checkout registry + uses: ./.github/actions/checkout-registry - name: Unit Tests run: yarn test:ci agent-configs: runs-on: ubuntu-latest - needs: [yarn-build, checkout-registry] + needs: [yarn-build] strategy: fail-fast: false matrix: @@ -208,17 +172,8 @@ jobs: !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - # A workaround for relative paths not being supported by actions/cache. - # See https://github.com/actions/upload-artifact/issues/176#issuecomment-1367855630. - - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - - - name: registry-cache - uses: actions/cache@v4 - with: - path: | - ${{ env.REGISTRY_URI_ABSOLUTE }} - key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - fail-on-cache-miss: true + - name: Checkout registry + uses: ./.github/actions/checkout-registry - name: Generate ${{ matrix.environment }} agent config run: | @@ -233,7 +188,7 @@ jobs: e2e-matrix: runs-on: larger-runner if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.base_ref == 'main') || github.event_name == 'merge_group' - needs: [yarn-build, checkout-registry] + needs: [yarn-build] strategy: matrix: e2e-type: [cosmwasm, non-cosmwasm] @@ -294,17 +249,8 @@ jobs: !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - # A workaround for relative paths not being supported by actions/cache. - # See https://github.com/actions/upload-artifact/issues/176#issuecomment-1367855630. - - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - - - name: registry-cache - uses: actions/cache@v4 - with: - path: | - ${{ env.REGISTRY_URI_ABSOLUTE }} - key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - fail-on-cache-miss: true + - name: Checkout registry + uses: ./.github/actions/checkout-registry - name: agent tests with CosmWasm run: cargo test --release --package run-locally --bin run-locally --features cosmos test-utils -- cosmos::test --nocapture @@ -336,7 +282,6 @@ jobs: prebuild-cli-e2e: runs-on: larger-runner if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.base_ref == 'main') || github.event_name == 'merge_group' - needs: [checkout-registry] steps: - uses: actions/checkout@v4 with: @@ -450,24 +395,15 @@ jobs: !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - # A workaround for relative paths not being supported by actions/cache. - # See https://github.com/actions/upload-artifact/issues/176#issuecomment-1367855630. - - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - - - name: registry-cache - uses: actions/cache@v4 - with: - path: | - ${{ env.REGISTRY_URI_ABSOLUTE }} - key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - fail-on-cache-miss: true + - name: Checkout registry + uses: ./.github/actions/checkout-registry - name: cli e2e tests run: ./typescript/cli/ci-test.sh ${{ matrix.test-type }} env-test: runs-on: ubuntu-latest - needs: [yarn-build, checkout-registry] + needs: [yarn-build] strategy: fail-fast: false matrix: @@ -495,17 +431,8 @@ jobs: !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - # A workaround for relative paths not being supported by actions/cache. - # See https://github.com/actions/upload-artifact/issues/176#issuecomment-1367855630. - - run: echo "REGISTRY_URI_ABSOLUTE=$(realpath $REGISTRY_URI)" >> $GITHUB_ENV - - - name: registry-cache - uses: actions/cache@v4 - with: - path: | - ${{ env.REGISTRY_URI_ABSOLUTE }} - key: hyperlane-registry-${{ github.event.pull_request.head.sha || github.sha }} - fail-on-cache-miss: true + - name: Checkout registry + uses: ./.github/actions/checkout-registry - name: Fork test ${{ matrix.environment }} ${{ matrix.module }} ${{ matrix.chain }} deployment run: cd typescript/infra && ./fork.sh ${{ matrix.environment }} ${{ matrix.module }} ${{ matrix.chain }} diff --git a/.registryrc b/.registryrc new file mode 100644 index 000000000..826e14246 --- /dev/null +++ b/.registryrc @@ -0,0 +1 @@ +v2.1.1 diff --git a/Dockerfile b/Dockerfile index 763e1186f..1a03f74d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,8 +29,7 @@ COPY solidity ./solidity RUN yarn build ENV REGISTRY_URI="/hyperlane-registry" -# To allow us to avoid caching the registry clone, we use a build-time arg to force -# the below steps to be re-run if this arg is changed. -ARG REGISTRY_CACHE="default" - -RUN git clone https://github.com/hyperlane-xyz/hyperlane-registry.git "$REGISTRY_URI" +ARG REGISTRY_COMMIT="main" +RUN git clone https://github.com/hyperlane-xyz/hyperlane-registry.git "$REGISTRY_URI" \ + && cd "$REGISTRY_URI" \ + && git checkout "$REGISTRY_COMMIT" From 7adbd276349ba5fd6ccc47e3e4895e857b4ba147 Mon Sep 17 00:00:00 2001 From: Paul Balaji Date: Mon, 24 Jun 2024 14:19:52 +0100 Subject: [PATCH 40/46] feat(infra): deploy to a set of specific chains (#4040) - feat(infra): deploy to a set of specific chains - allows users to specify more than 1 target chain to deploy to - provides suggestions of available chains to deploy (given local registry) ![image](https://github.com/hyperlane-xyz/hyperlane-monorepo/assets/10051819/020939a9-220d-47dc-b434-e9342ea2ff0f) --------- Signed-off-by: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> --- typescript/infra/scripts/agent-utils.ts | 12 ++++++++ typescript/infra/scripts/agents/utils.ts | 10 ++---- typescript/infra/scripts/deploy.ts | 25 +++++++++------ typescript/infra/src/deployment/deploy.ts | 37 +++++++++++++++-------- 4 files changed, 55 insertions(+), 29 deletions(-) diff --git a/typescript/infra/scripts/agent-utils.ts b/typescript/infra/scripts/agent-utils.ts index a0f066998..2046d4821 100644 --- a/typescript/infra/scripts/agent-utils.ts +++ b/typescript/infra/scripts/agent-utils.ts @@ -116,6 +116,18 @@ export function withChain(args: Argv) { .alias('c', 'chain'); } +export function withChains(args: Argv) { + return ( + args + .describe('chains', 'Set of chains to perform actions on.') + .array('chains') + .choices('chains', getChains()) + // Ensure chains are unique + .coerce('chains', (chains: string[]) => Array.from(new Set(chains))) + .alias('c', 'chains') + ); +} + export function withProtocol(args: Argv) { return args .describe('protocol', 'protocol type') diff --git a/typescript/infra/scripts/agents/utils.ts b/typescript/infra/scripts/agents/utils.ts index c7b8c8a5d..84fe60f59 100644 --- a/typescript/infra/scripts/agents/utils.ts +++ b/typescript/infra/scripts/agents/utils.ts @@ -12,6 +12,7 @@ import { assertCorrectKubeContext, getArgs, withAgentRole, + withChains, withContext, } from '../agent-utils.js'; import { getConfigsBasedOnArgs } from '../core-utils.js'; @@ -69,14 +70,9 @@ export class AgentCli { protected async init() { if (this.initialized) return; - const argv = await withAgentRole(withContext(getArgs())) + const argv = await withChains(withAgentRole(withContext(getArgs()))) .describe('dry-run', 'Run through the steps without making any changes') - .boolean('dry-run') - .describe('chains', 'Specific chains to perform validator actions on.') - .array('chains') - // Ensure chains are unique - .coerce('chains', (chains: string[]) => Array.from(new Set(chains))) - .alias('c', 'chains').argv; + .boolean('dry-run').argv; if ( argv.chains && diff --git a/typescript/infra/scripts/deploy.ts b/typescript/infra/scripts/deploy.ts index e7ef13966..7c30053cc 100644 --- a/typescript/infra/scripts/deploy.ts +++ b/typescript/infra/scripts/deploy.ts @@ -22,7 +22,7 @@ import { LiquidityLayerDeployer, TestRecipientDeployer, } from '@hyperlane-xyz/sdk'; -import { objMap } from '@hyperlane-xyz/utils'; +import { objFilter, objMap } from '@hyperlane-xyz/utils'; import { Contexts } from '../config/contexts.js'; import { core as coreConfig } from '../config/environments/mainnet3/core.js'; @@ -44,7 +44,7 @@ import { getArgs, getModuleDirectory, withBuildArtifactPath, - withChain, + withChains, withConcurrentDeploy, withContext, withModuleAndFork, @@ -57,12 +57,12 @@ async function main() { module, fork, environment, - chain, buildArtifactPath, + chains, concurrentDeploy, } = await withContext( withConcurrentDeploy( - withChain(withModuleAndFork(withBuildArtifactPath(getArgs()))), + withChains(withModuleAndFork(withBuildArtifactPath(getArgs()))), ), ).argv; const envConfig = getEnvironmentConfig(environment); @@ -231,7 +231,12 @@ async function main() { // prompt for confirmation in production environments if (environment !== 'test' && !fork) { - const confirmConfig = chain ? config[chain] : config; + const confirmConfig = + chains && chains.length > 0 + ? objFilter(config, (chain, _): _ is unknown => + (chains ?? []).includes(chain), + ) + : config; console.log(JSON.stringify(confirmConfig, null, 2)); const { value: confirmed } = await prompts({ type: 'confirm', @@ -244,13 +249,15 @@ async function main() { } } - await deployWithArtifacts( - config, + await deployWithArtifacts({ + configMap: config as ChainMap, // TODO: fix this typing deployer, cache, - chain ?? fork, + // Use chains if provided, otherwise deploy to all chains + // If fork is provided, deploy to fork only + targetNetworks: chains ?? !fork ? [] : [fork], agentConfig, - ); + }); } main() diff --git a/typescript/infra/src/deployment/deploy.ts b/typescript/infra/src/deployment/deploy.ts index 55d713fd9..120f8955f 100644 --- a/typescript/infra/src/deployment/deploy.ts +++ b/typescript/infra/src/deployment/deploy.ts @@ -11,6 +11,7 @@ import { } from '@hyperlane-xyz/sdk'; import { ProtocolType, + objFilter, objMap, objMerge, promiseObjAll, @@ -35,22 +36,28 @@ import { writeMergedJSONAtPath, } from '../utils/utils.js'; -export async function deployWithArtifacts( - configMap: ChainMap, - deployer: HyperlaneDeployer, +export async function deployWithArtifacts({ + configMap, + deployer, + cache, + targetNetworks, + agentConfig, +}: { + configMap: ChainMap; + deployer: HyperlaneDeployer; cache: { verification: string; read: boolean; write: boolean; environment: DeployEnvironment; module: Modules; - }, - targetNetwork?: ChainName, + }; + targetNetworks: ChainName[]; agentConfig?: { multiProvider: MultiProvider; environment: DeployEnvironment; - }, -) { + }; +}) { if (cache.read) { const addressesMap = getAddresses(cache.environment, cache.module); deployer.cacheAddressesMap(addressesMap); @@ -64,13 +71,17 @@ export async function deployWithArtifacts( process.exit(0); // Exit the process }); + // Filter the config map to only deploy the target networks + let targetConfigMap = configMap; + if (targetNetworks.length > 0) { + targetConfigMap = objFilter(configMap, (chain, _): _ is Config => + targetNetworks.includes(chain), + ); + } + + // Deploy the contracts try { - if (targetNetwork) { - deployer.deployedContracts[targetNetwork] = - await deployer.deployContracts(targetNetwork, configMap[targetNetwork]); - } else { - await deployer.deploy(configMap); - } + await deployer.deploy(targetConfigMap); } catch (e) { console.error('Failed to deploy contracts', e); } From a109937f962ea60384e0845e11c678f08a1a8b66 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Mon, 24 Jun 2024 14:57:53 +0100 Subject: [PATCH 41/46] chore: some throughput tweaks (#4036) ### Description Context: https://discord.com/channels/935678348330434570/1254036693217054794 ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- rust/Cargo.lock | 1 + rust/Cargo.toml | 1 + rust/agents/relayer/Cargo.toml | 3 ++- rust/agents/relayer/src/msg/pending_message.rs | 13 +++++++++++-- rust/hyperlane-base/Cargo.toml | 6 +++--- .../infra/config/environments/mainnet3/agent.ts | 12 +++++++----- typescript/infra/src/agents/index.ts | 2 +- 7 files changed, 26 insertions(+), 12 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index f1c4f79b2..a68d609bb 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -7037,6 +7037,7 @@ dependencies = [ "num-traits", "once_cell", "prometheus", + "rand 0.8.5", "regex", "reqwest", "serde", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 5909e10bc..fd1c2c5a6 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -119,6 +119,7 @@ pretty_env_logger = "0.5.0" primitive-types = "=0.12.1" prometheus = "0.13" protobuf = "*" +rand = "0.8.5" regex = "1.5" reqwest = "0.11" ripemd = "0.1.3" diff --git a/rust/agents/relayer/Cargo.toml b/rust/agents/relayer/Cargo.toml index cf35092f7..bbfe17e4b 100644 --- a/rust/agents/relayer/Cargo.toml +++ b/rust/agents/relayer/Cargo.toml @@ -26,6 +26,7 @@ itertools.workspace = true num-derive.workspace = true num-traits.workspace = true prometheus.workspace = true +rand.workspace = true regex.workspace = true reqwest = { workspace = true, features = ["json"] } serde.workspace = true @@ -43,7 +44,7 @@ hyperlane-ethereum = { path = "../../chains/hyperlane-ethereum" } [dev-dependencies] once_cell.workspace = true -mockall.worksapce = true +mockall.workspace = true tokio-test.workspace = true hyperlane-test = { path = "../../hyperlane-test" } hyperlane-base = { path = "../../hyperlane-base", features = ["test-utils"] } diff --git a/rust/agents/relayer/src/msg/pending_message.rs b/rust/agents/relayer/src/msg/pending_message.rs index a0c373adc..212b00441 100644 --- a/rust/agents/relayer/src/msg/pending_message.rs +++ b/rust/agents/relayer/src/msg/pending_message.rs @@ -484,8 +484,17 @@ impl PendingMessage { i if (24..36).contains(&i) => 60 * 30, // wait 60min for the next 12 attempts i if (36..48).contains(&i) => 60 * 60, - // wait 3h for the next 12 attempts, - _ => 60 * 60 * 3, + // linearly increase the backoff time after 48 attempts, + // adding 1h for each additional attempt + _ => { + let hour: u64 = 60 * 60; + // To be extra safe, `max` to make sure it's at least 1 hour. + let target = hour.max((num_retries - 47) as u64 * hour); + // Schedule it at some random point in the next hour to + // avoid scheduling messages with the same # of retries + // at the exact same time. + target + (rand::random::() % hour) + } })) } } diff --git a/rust/hyperlane-base/Cargo.toml b/rust/hyperlane-base/Cargo.toml index 9f401b399..36a8432bb 100644 --- a/rust/hyperlane-base/Cargo.toml +++ b/rust/hyperlane-base/Cargo.toml @@ -23,17 +23,17 @@ ed25519-dalek.workspace = true ethers.workspace = true eyre.workspace = true fuels.workspace = true -futures.worksapce = true +futures.workspace = true futures-util.workspace = true itertools.workspace = true maplit.workspace = true -mockall.worksapce = true +mockall.workspace = true paste.workspace = true prometheus.workspace = true rocksdb.workspace = true serde.workspace = true serde_json.workspace = true -solana-sdk.worksapce = true +solana-sdk.workspace = true static_assertions.workspace = true tempfile = { workspace = true, optional = true } thiserror.workspace = true diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index e224587e5..2baa1cc22 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -223,8 +223,8 @@ const metricAppContexts = [ // Resource requests are based on observed usage found in https://abacusworks.grafana.net/d/FSR9YWr7k const relayerResources = { requests: { - cpu: '3000m', - memory: '8Gi', + cpu: '14000m', + memory: '12Gi', }, }; @@ -251,7 +251,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '0d12ff3-20240620-173353', + tag: '9535087-20240623-174819', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContexts, @@ -285,9 +285,11 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '0d12ff3-20240620-173353', + tag: '9535087-20240623-174819', }, - whitelist: releaseCandidateHelloworldMatchingList, + // We're temporarily (ab)using the RC relayer as a way to increase + // message throughput. + // whitelist: releaseCandidateHelloworldMatchingList, gasPaymentEnforcement, metricAppContexts, resources: relayerResources, diff --git a/typescript/infra/src/agents/index.ts b/typescript/infra/src/agents/index.ts index c1486e83a..87873de13 100644 --- a/typescript/infra/src/agents/index.ts +++ b/typescript/infra/src/agents/index.ts @@ -139,7 +139,7 @@ export abstract class AgentHelmManager { rpcConsensusType: this.rpcConsensusType(chain), protocol: metadata.protocol, blocks: { reorgPeriod }, - maxBatchSize: 4, + maxBatchSize: 32, }; }), }, From 7c7e0dd5ed4700e224e5eba2666df7ac43dcacd7 Mon Sep 17 00:00:00 2001 From: Yorke Rhodes Date: Mon, 24 Jun 2024 10:45:55 -0400 Subject: [PATCH 42/46] docs: add docstrings for multisig signature ordering (#4042) ### Description Update `MultisigISM.verify` docs with clarity around signature ordering --- solidity/contracts/interfaces/isms/IMultisigIsm.sol | 1 + solidity/contracts/isms/multisig/AbstractMultisigIsm.sol | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/solidity/contracts/interfaces/isms/IMultisigIsm.sol b/solidity/contracts/interfaces/isms/IMultisigIsm.sol index fa4767ff7..0e5ee37a3 100644 --- a/solidity/contracts/interfaces/isms/IMultisigIsm.sol +++ b/solidity/contracts/interfaces/isms/IMultisigIsm.sol @@ -8,6 +8,7 @@ interface IMultisigIsm is IInterchainSecurityModule { * @notice Returns the set of validators responsible for verifying _message * and the number of signatures required * @dev Can change based on the content of _message + * @dev Signatures provided to `verify` must be consistent with validator ordering * @param _message Hyperlane formatted interchain message * @return validators The array of validator addresses * @return threshold The number of validator signatures needed diff --git a/solidity/contracts/isms/multisig/AbstractMultisigIsm.sol b/solidity/contracts/isms/multisig/AbstractMultisigIsm.sol index 34907c32b..1c03fc9b8 100644 --- a/solidity/contracts/isms/multisig/AbstractMultisigIsm.sol +++ b/solidity/contracts/isms/multisig/AbstractMultisigIsm.sol @@ -26,6 +26,7 @@ abstract contract AbstractMultisigIsm is IMultisigIsm { * @notice Returns the set of validators responsible for verifying _message * and the number of signatures required * @dev Can change based on the content of _message + * @dev Signatures provided to `verify` must be consistent with validator ordering * @param _message Hyperlane formatted interchain message * @return validators The array of validator addresses * @return threshold The number of validator signatures needed @@ -60,7 +61,9 @@ abstract contract AbstractMultisigIsm is IMultisigIsm { /** * @notice Requires that m-of-n validators verify a merkle root, - * and verifies a meāˆ‘rkle proof of `_message` against that root. + * and verifies a merkle proof of `_message` against that root. + * @dev Optimization relies on the caller sorting signatures in the same order as validators. + * @dev Employs https://www.geeksforgeeks.org/two-pointers-technique/ to minimize gas usage. * @param _metadata ABI encoded module metadata * @param _message Formatted Hyperlane message (see Message.sol). */ From 718d2c27da0d01060e28421cefce653edef02caa Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:59:52 +0100 Subject: [PATCH 43/46] chore: don't reset retry count when processing retry API reqs (#4037) ### Description When messages are retried due to the Message Retry API, we bring messages to the front of the queue (by changing their `next_attempt_after`), but also reset their retry count. For messages that are unprocessable due to various reasons (and hence have very high `next_attempt_after`), resetting the retry count will cause the relayer to waste time instead of trying to process newer messages. This PR makes it such that the retry API will cause messages to be retried immediately once, but won't boost their priority in the queue afterwards (because `num_retries` isn't changed). ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- rust/agents/relayer/src/msg/pending_message.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/rust/agents/relayer/src/msg/pending_message.rs b/rust/agents/relayer/src/msg/pending_message.rs index 212b00441..5d661411b 100644 --- a/rust/agents/relayer/src/msg/pending_message.rs +++ b/rust/agents/relayer/src/msg/pending_message.rs @@ -443,7 +443,6 @@ impl PendingMessage { } fn reset_attempts(&mut self) { - self.set_retries(0); self.next_attempt_after = None; self.last_attempted_at = Instant::now(); } From e6b9d0e1bf0b6dd722096c8bba8e99d187cbbdad Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Tue, 25 Jun 2024 10:58:07 +0100 Subject: [PATCH 44/46] chore: bump arb costs (#4018) ### Description Big gas spike on arb rn, see https://discord.com/channels/935678348330434570/1253313812652888154 for context ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- .../infra/config/environments/mainnet3/gasPrices.json | 6 +++--- typescript/infra/scripts/deploy.ts | 6 +++++- typescript/infra/src/config/gas-oracle.ts | 2 ++ typescript/sdk/src/gas/HyperlaneIgpDeployer.ts | 2 ++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/typescript/infra/config/environments/mainnet3/gasPrices.json b/typescript/infra/config/environments/mainnet3/gasPrices.json index cb689e297..6d2aff221 100644 --- a/typescript/infra/config/environments/mainnet3/gasPrices.json +++ b/typescript/infra/config/environments/mainnet3/gasPrices.json @@ -1,6 +1,6 @@ { "arbitrum": { - "amount": "0.01", + "amount": "0.5", "decimals": 9 }, "ancient8": { @@ -16,7 +16,7 @@ "decimals": 9 }, "blast": { - "amount": "0.01649352", + "amount": "0.5", "decimals": 9 }, "bsc": { @@ -68,7 +68,7 @@ "decimals": 1 }, "optimism": { - "amount": "0.061126811", + "amount": "0.25", "decimals": 9 }, "osmosis": { diff --git a/typescript/infra/scripts/deploy.ts b/typescript/infra/scripts/deploy.ts index 7c30053cc..16a4c3017 100644 --- a/typescript/infra/scripts/deploy.ts +++ b/typescript/infra/scripts/deploy.ts @@ -130,7 +130,11 @@ async function main() { ); } else if (module === Modules.INTERCHAIN_GAS_PAYMASTER) { config = envConfig.igp; - deployer = new HyperlaneIgpDeployer(multiProvider, contractVerifier); + deployer = new HyperlaneIgpDeployer( + multiProvider, + contractVerifier, + concurrentDeploy, + ); } else if (module === Modules.INTERCHAIN_ACCOUNTS) { const { core } = await getHyperlaneCore(environment, multiProvider); config = core.getRouterConfig(envConfig.owners); diff --git a/typescript/infra/src/config/gas-oracle.ts b/typescript/infra/src/config/gas-oracle.ts index 1994e91ce..97d0a3f2b 100644 --- a/typescript/infra/src/config/gas-oracle.ts +++ b/typescript/infra/src/config/gas-oracle.ts @@ -141,6 +141,8 @@ function getMinUsdCost(local: ChainName, remote: ChainName): number { ancient8: 0.5, base: 0.5, blast: 0.5, + fraxtal: 0.5, + linea: 0.5, mantapacific: 0.5, mode: 0.5, optimism: 0.5, diff --git a/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts b/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts index dc6efc37c..0c0cbfc34 100644 --- a/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts +++ b/typescript/sdk/src/gas/HyperlaneIgpDeployer.ts @@ -25,10 +25,12 @@ export class HyperlaneIgpDeployer extends HyperlaneDeployer< constructor( multiProvider: MultiProvider, contractVerifier?: ContractVerifier, + concurrentDeploy: boolean = false, ) { super(multiProvider, igpFactories, { logger: rootLogger.child({ module: 'IgpDeployer' }), contractVerifier, + concurrentDeploy, }); } From d213e323418c46f43cf531ebf8edf00b9886a2e5 Mon Sep 17 00:00:00 2001 From: Daniel Savu <23065004+daniel-savu@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:21:21 +0100 Subject: [PATCH 45/46] feat: relayer queue operation labels (#4003) ### Description - adds status labels to operations in the relayer queues. In practice, the most useful ones are those for when a message is retried due to an error. Labels are defined as enums to keep the cardinality finite, the size of prometheus metrics could get very large - whenever a message is pushed to a queue, the interface requires specifying the new status as a `Option`. If `None`, the status is left as before (such as in the case when an operation isn't ready to be retried). - a limitation is that labels aren't stored in the DB, so messages are loaded with the `FirstPrepareAttempt` label. I just triggered retries for destinations I wanted to get labels for, but we could persist to the db in a follow-up PR - Example prep queue labels for inevm: Screenshot 2024-06-21 at 18 05 58 ### Drive-by changes - removes `make_op_try` as it doesn't really add anything that couldn't be done with regular Rust - bumps the `strum` version because there was a bug in the previous one, preventing inner enum fields from being converted to strings ### Related issues ### Backward compatibility