From 201f62f7a92c41ea32b10ba7b8bf3bcbe54ca543 Mon Sep 17 00:00:00 2001 From: Chris Buckland Date: Sun, 9 Feb 2025 16:10:05 +0000 Subject: [PATCH 01/44] Added v3 support --- docker-compose.yaml | 2 +- test-node.bash | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 670d1238..43b71248 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -47,7 +47,7 @@ services: - "127.0.0.1:6379:6379" geth: - image: ethereum/client-go:stable + image: ethereum/client-go:v1.14.13 ports: - "127.0.0.1:8545:8545" - "127.0.0.1:8551:8551" diff --git a/test-node.bash b/test-node.bash index 9c6f6ef5..850cf488 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,10 +2,10 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.2.1-d81324d-dev +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.0-bdc2fd2-dev BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 -DEFAULT_NITRO_CONTRACTS_VERSION="v2.1.1-beta.0" +DEFAULT_NITRO_CONTRACTS_VERSION="v3.0.1-beta.0" DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time From 58aa64cc5b8fab30b0323c1c320eb49f176229de Mon Sep 17 00:00:00 2001 From: Chris Buckland Date: Sun, 9 Feb 2025 17:11:18 +0000 Subject: [PATCH 02/44] Added buildx tmp file --- test-node.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-node.bash b/test-node.bash index 850cf488..3f47cbd9 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.0-bdc2fd2-dev +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.4.0-d896e9c-dev BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 DEFAULT_NITRO_CONTRACTS_VERSION="v3.0.1-beta.0" @@ -375,7 +375,7 @@ if $build_utils; then if [ "$ci" == true ]; then # workaround to cache docker layers and keep using docker-compose in CI - docker buildx bake --file docker-compose.yaml --file docker-compose-ci-cache.json $LOCAL_BUILD_NODES + docker buildx bake --allow=fs=/tmp/ --file docker-compose.yaml --file docker-compose-ci-cache.json $LOCAL_BUILD_NODES else UTILS_NOCACHE="" if $force_build_utils; then From 2a50b00b3ae996fffbac64a04269fcfb206dd243 Mon Sep 17 00:00:00 2001 From: Chris Buckland Date: Sun, 9 Feb 2025 22:49:36 +0000 Subject: [PATCH 03/44] Use test branch --- scripts/config.ts | 2 +- test-node.bash | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/config.ts b/scripts/config.ts index 6323c7b5..1bbb747a 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -421,7 +421,7 @@ function writeL3ChainConfig(argv: any) { "EnableArbOS": true, "AllowDebugPrecompiles": true, "DataAvailabilityCommittee": false, - "InitialArbOSVersion": 31, + "InitialArbOSVersion": 32, "InitialChainOwner": argv.l2owner, "GenesisBlockNum": 0 } diff --git a/test-node.bash b/test-node.bash index 3f47cbd9..a44d0785 100755 --- a/test-node.bash +++ b/test-node.bash @@ -5,7 +5,7 @@ set -eu NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.4.0-d896e9c-dev BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 -DEFAULT_NITRO_CONTRACTS_VERSION="v3.0.1-beta.0" +DEFAULT_NITRO_CONTRACTS_VERSION="v3-dev-testnode" DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time @@ -476,7 +476,6 @@ if $force_init; then echo == Deploying L2 chain docker compose run -e PARENT_CHAIN_RPC="http://geth:8545" -e DEPLOYER_PRIVKEY=$l2ownerKey -e PARENT_CHAIN_ID=$l1chainid -e CHILD_CHAIN_NAME="arb-dev-test" -e MAX_DATA_SIZE=117964 -e OWNER_ADDRESS=$l2ownerAddress -e WASM_MODULE_ROOT=$wasmroot -e SEQUENCER_ADDRESS=$sequenceraddress -e AUTHORIZE_VALIDATORS=10 -e CHILD_CHAIN_CONFIG_PATH="/config/l2_chain_config.json" -e CHAIN_DEPLOYMENT_INFO="/config/deployment.json" -e CHILD_CHAIN_INFO="/config/deployed_chain_info.json" rollupcreator create-rollup-testnode docker compose run --entrypoint sh rollupcreator -c "jq [.[]] /config/deployed_chain_info.json > /config/l2_chain_info.json" - fi # $force_init anytrustNodeConfigLine="" From 5b05cf8021d194b8f92d755741eb237117036dd0 Mon Sep 17 00:00:00 2001 From: Chris Buckland Date: Sun, 9 Feb 2025 22:50:54 +0000 Subject: [PATCH 04/44] Comment out bold upgrade ci --- .github/workflows/ci.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 440372ca..0a41d09c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,19 +42,19 @@ jobs: - name: Startup Nitro testnode run: ${{ github.workspace }}/.github/workflows/testnode.bash --init-force ${{ (matrix.l3node == 'l3node' && '--l3node') || (matrix.l3node == 'l3node-token-6' && '--l3node --l3-fee-token --l3-token-bridge --l3-fee-token-decimals 6') || '' }} ${{ matrix.tokenbridge == 'tokenbridge' && '--tokenbridge' || '--no-tokenbridge' }} --detach ${{ matrix.pos == 'pos' && '--pos' || '' }} --simple ${{ (matrix.simple == 'simple' && '--simple') || (matrix.simple == 'no-simple' && '--no-simple') || '' }} - bold_upgrade: - runs-on: ubuntu-8 - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - with: - driver-opts: network=host - - - name: Startup Nitro testnode - run: ${{ github.workspace }}/.github/workflows/testnode.bash --init-force --bold-upgrade --simple --detach + # bold_upgrade: + # runs-on: ubuntu-8 + + # steps: + # - name: Checkout + # uses: actions/checkout@v4 + # with: + # submodules: recursive + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v3 + # with: + # driver-opts: network=host + + # - name: Startup Nitro testnode + # run: ${{ github.workspace }}/.github/workflows/testnode.bash --init-force --bold-upgrade --simple --detach From 7cd51d0f30a6600535e135f999f0e26acbbcc261 Mon Sep 17 00:00:00 2001 From: Chris Buckland Date: Sun, 9 Feb 2025 22:54:10 +0000 Subject: [PATCH 05/44] Dont fail fast for matrix combos --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a41d09c..09926518 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,6 +15,7 @@ jobs: build_and_run: runs-on: ubuntu-8 strategy: + fail-fast: false matrix: pos: [pos, no-pos] l3node: [l3node, l3node-token-6, no-l3node] From 04f52f5b2837e061efb59f5758b523fe599ac24b Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 10 Feb 2025 18:26:29 +0900 Subject: [PATCH 06/44] fix: config race workaround --- test-node.bash | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test-node.bash b/test-node.bash index a44d0785..c944e87c 100755 --- a/test-node.bash +++ b/test-node.bash @@ -511,9 +511,11 @@ if $force_init; then if $simple; then echo == Writing configs docker compose run scripts write-config --simple $anytrustNodeConfigLine + sleep 10 # workaround a race condition that causes the deploy to fail randomly else echo == Writing configs docker compose run scripts write-config $anytrustNodeConfigLine + sleep 10 # workaround a race condition that causes the deploy to fail randomly echo == Initializing redis docker compose up --wait redis From 2c0949a6001b15cfffc138eb2703ac5400f35272 Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 10 Feb 2025 19:07:22 +0900 Subject: [PATCH 07/44] revert: sleep --- test-node.bash | 2 -- 1 file changed, 2 deletions(-) diff --git a/test-node.bash b/test-node.bash index c944e87c..a44d0785 100755 --- a/test-node.bash +++ b/test-node.bash @@ -511,11 +511,9 @@ if $force_init; then if $simple; then echo == Writing configs docker compose run scripts write-config --simple $anytrustNodeConfigLine - sleep 10 # workaround a race condition that causes the deploy to fail randomly else echo == Writing configs docker compose run scripts write-config $anytrustNodeConfigLine - sleep 10 # workaround a race condition that causes the deploy to fail randomly echo == Initializing redis docker compose up --wait redis From 695a854fd1ab1af637e754dba51e5bbf97f89c72 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 01:00:55 +0900 Subject: [PATCH 08/44] fix: nitro contract pin with correct stakeToken deployment --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index a44d0785..a95cfed3 100755 --- a/test-node.bash +++ b/test-node.bash @@ -5,7 +5,7 @@ set -eu NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.4.0-d896e9c-dev BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 -DEFAULT_NITRO_CONTRACTS_VERSION="v3-dev-testnode" +DEFAULT_NITRO_CONTRACTS_VERSION="c1218817" # of v3-dev-testnode DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time From 811cae821c03a9d8633697502871f93a37f974ad Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 01:01:11 +0900 Subject: [PATCH 09/44] workaround: dark magic --- test-node.bash | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test-node.bash b/test-node.bash index a95cfed3..03931700 100755 --- a/test-node.bash +++ b/test-node.bash @@ -522,6 +522,9 @@ if $force_init; then echo == Funding l2 funnel and dev key docker compose up --wait $INITIAL_SEQ_NODES + sleep 60 + docker compose down $INITIAL_SEQ_NODES + docker compose up --wait $INITIAL_SEQ_NODES docker compose run scripts bridge-funds --ethamount 100000 --wait docker compose run scripts send-l2 --ethamount 100 --to l2owner --wait rollupAddress=`docker compose run --entrypoint sh poster -c "jq -r '.[0].rollup.rollup' /config/deployed_chain_info.json | tail -n 1 | tr -d '\r\n'"` From 58ebd034b54e140501ea46ae6d565a32f7f61782 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 01:01:23 +0900 Subject: [PATCH 10/44] fix: enable bold --- scripts/config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/config.ts b/scripts/config.ts index 1bbb747a..5c66c045 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -190,6 +190,9 @@ function writeConfigs(argv: any) { "info-files": [chainInfoFile], }, "node": { + "bold": { + "enable": true + }, "staker": { "dangerous": { "without-block-validator": false From 7d91c2828dc1329d07b4b47f526e10768080f575 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 01:07:15 +0900 Subject: [PATCH 11/44] docs: explain dark magic --- test-node.bash | 1 + 1 file changed, 1 insertion(+) diff --git a/test-node.bash b/test-node.bash index 03931700..bf9cb855 100755 --- a/test-node.bash +++ b/test-node.bash @@ -523,6 +523,7 @@ if $force_init; then echo == Funding l2 funnel and dev key docker compose up --wait $INITIAL_SEQ_NODES sleep 60 + # workaround stuck sequencer after logging `Allocated cache and file handles` docker compose down $INITIAL_SEQ_NODES docker compose up --wait $INITIAL_SEQ_NODES docker compose run scripts bridge-funds --ethamount 100000 --wait From c15a9dc828e6bb21c674bd26445e990ebe9291ce Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 01:07:24 +0900 Subject: [PATCH 12/44] feat: bold make nodes --- scripts/config.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/config.ts b/scripts/config.ts index 5c66c045..01ca053c 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -191,7 +191,10 @@ function writeConfigs(argv: any) { }, "node": { "bold": { - "enable": true + "enable": true, + "rpc-block-number": "latest", + "strategy": "makeNodes", + "assertion-posting-interval": "10s" }, "staker": { "dangerous": { From ff58019aec2cf876762c6c1e381bacefcc3a99e6 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 02:08:36 +0900 Subject: [PATCH 13/44] workaround: black magic for l3 --- test-node.bash | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index bf9cb855..0ffe4ae9 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.4.0-d896e9c-dev +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.1-rc.2-69577b7-dev BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 DEFAULT_NITRO_CONTRACTS_VERSION="c1218817" # of v3-dev-testnode @@ -597,6 +597,9 @@ if $force_init; then echo == Funding l3 funnel and dev key docker compose up --wait l3node sequencer + sleep 60 + docker compose down l3node sequencer + docker compose up --wait l3node sequencer if $l3_token_bridge; then echo == Deploying L2-L3 token bridge From c64ebf776515c41b09f47997b9f1dade54890655 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 23:10:03 +0900 Subject: [PATCH 14/44] fix: enable block-validator in simple mode for bold --- scripts/config.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/config.ts b/scripts/config.ts index 01ca053c..2c9ece20 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -291,7 +291,8 @@ function writeConfigs(argv: any) { let simpleConfig = JSON.parse(baseConfJSON) simpleConfig.node.staker.enable = true simpleConfig.node.staker["use-smart-contract-wallet"] = true - simpleConfig.node.staker.dangerous["without-block-validator"] = true + delete simpleConfig.node["block-validator"] + simpleConfig.node.staker.dangerous["without-block-validator"] = false simpleConfig.node.sequencer = true simpleConfig.node.dangerous["no-sequencer-coordinator"] = true simpleConfig.node["delayed-sequencer"].enable = true From 6e03e48e91a3aa2b20965827174c0d7c203bf093 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 23:10:26 +0900 Subject: [PATCH 15/44] fix: remove dark magic --- test-node.bash | 7 ------- 1 file changed, 7 deletions(-) diff --git a/test-node.bash b/test-node.bash index 0ffe4ae9..5e004d93 100755 --- a/test-node.bash +++ b/test-node.bash @@ -522,10 +522,6 @@ if $force_init; then echo == Funding l2 funnel and dev key docker compose up --wait $INITIAL_SEQ_NODES - sleep 60 - # workaround stuck sequencer after logging `Allocated cache and file handles` - docker compose down $INITIAL_SEQ_NODES - docker compose up --wait $INITIAL_SEQ_NODES docker compose run scripts bridge-funds --ethamount 100000 --wait docker compose run scripts send-l2 --ethamount 100 --to l2owner --wait rollupAddress=`docker compose run --entrypoint sh poster -c "jq -r '.[0].rollup.rollup' /config/deployed_chain_info.json | tail -n 1 | tr -d '\r\n'"` @@ -597,9 +593,6 @@ if $force_init; then echo == Funding l3 funnel and dev key docker compose up --wait l3node sequencer - sleep 60 - docker compose down l3node sequencer - docker compose up --wait l3node sequencer if $l3_token_bridge; then echo == Deploying L2-L3 token bridge From ba45e3750dab68b4177729050f03a2ec6690088e Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 23:14:37 +0900 Subject: [PATCH 16/44] Revert "fix: remove dark magic" This reverts commit 6e03e48e91a3aa2b20965827174c0d7c203bf093. --- test-node.bash | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test-node.bash b/test-node.bash index 5e004d93..0ffe4ae9 100755 --- a/test-node.bash +++ b/test-node.bash @@ -522,6 +522,10 @@ if $force_init; then echo == Funding l2 funnel and dev key docker compose up --wait $INITIAL_SEQ_NODES + sleep 60 + # workaround stuck sequencer after logging `Allocated cache and file handles` + docker compose down $INITIAL_SEQ_NODES + docker compose up --wait $INITIAL_SEQ_NODES docker compose run scripts bridge-funds --ethamount 100000 --wait docker compose run scripts send-l2 --ethamount 100 --to l2owner --wait rollupAddress=`docker compose run --entrypoint sh poster -c "jq -r '.[0].rollup.rollup' /config/deployed_chain_info.json | tail -n 1 | tr -d '\r\n'"` @@ -593,6 +597,9 @@ if $force_init; then echo == Funding l3 funnel and dev key docker compose up --wait l3node sequencer + sleep 60 + docker compose down l3node sequencer + docker compose up --wait l3node sequencer if $l3_token_bridge; then echo == Deploying L2-L3 token bridge From d3e1fabf08b7114c5a5b5dda95124edbb6321da4 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Feb 2025 23:29:46 +0900 Subject: [PATCH 17/44] docs: explain --- test-node.bash | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test-node.bash b/test-node.bash index 0ffe4ae9..b24e4aff 100755 --- a/test-node.bash +++ b/test-node.bash @@ -5,7 +5,7 @@ set -eu NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.1-rc.2-69577b7-dev BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 -DEFAULT_NITRO_CONTRACTS_VERSION="c1218817" # of v3-dev-testnode +DEFAULT_NITRO_CONTRACTS_VERSION="b027e5e6" # of v3-dev-testnode DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time @@ -523,7 +523,7 @@ if $force_init; then echo == Funding l2 funnel and dev key docker compose up --wait $INITIAL_SEQ_NODES sleep 60 - # workaround stuck sequencer after logging `Allocated cache and file handles` + # restart node to workaround stuck sequencer rpc not accepting connections docker compose down $INITIAL_SEQ_NODES docker compose up --wait $INITIAL_SEQ_NODES docker compose run scripts bridge-funds --ethamount 100000 --wait @@ -598,6 +598,7 @@ if $force_init; then echo == Funding l3 funnel and dev key docker compose up --wait l3node sequencer sleep 60 + # restart node to workaround stuck sequencer rpc not accepting connections docker compose down l3node sequencer docker compose up --wait l3node sequencer From 335ff17660284116f076a03bb454baee55b77e73 Mon Sep 17 00:00:00 2001 From: gzeon Date: Wed, 12 Feb 2025 00:15:37 +0900 Subject: [PATCH 18/44] wip: so far --- scripts/config.ts | 2 +- test-node.bash | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/config.ts b/scripts/config.ts index 2c9ece20..0c31534f 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -290,7 +290,7 @@ function writeConfigs(argv: any) { if (argv.simple) { let simpleConfig = JSON.parse(baseConfJSON) simpleConfig.node.staker.enable = true - simpleConfig.node.staker["use-smart-contract-wallet"] = true + simpleConfig.node.staker["use-smart-contract-wallet"] = false delete simpleConfig.node["block-validator"] simpleConfig.node.staker.dangerous["without-block-validator"] = false simpleConfig.node.sequencer = true diff --git a/test-node.bash b/test-node.bash index b24e4aff..9ce30cb2 100755 --- a/test-node.bash +++ b/test-node.bash @@ -5,7 +5,10 @@ set -eu NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.1-rc.2-69577b7-dev BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 -DEFAULT_NITRO_CONTRACTS_VERSION="b027e5e6" # of v3-dev-testnode +# nitro-contract workaround for testnode +# 1. authorizing validator signer key since validator wallet if buggy +# - gas estimation sent from 0x0000 lead to balance and permission error +DEFAULT_NITRO_CONTRACTS_VERSION="f3e9a63e" # of v3-dev-testnode DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time From cca465f46319b257548a51c1e7dedc09569af01c Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 17 Mar 2025 18:19:32 +0800 Subject: [PATCH 19/44] chore: update contract pin --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index bdb4c670..313347cb 100755 --- a/test-node.bash +++ b/test-node.bash @@ -8,7 +8,7 @@ BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode # 1. authorizing validator signer key since validator wallet if buggy # - gas estimation sent from 0x0000 lead to balance and permission error -DEFAULT_NITRO_CONTRACTS_VERSION="f3e9a63e" # of v3-dev-testnode +DEFAULT_NITRO_CONTRACTS_VERSION="f3a6e47" # of v3-dev-testnode DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time From dd3ffdb4adb207245b277ab396ee505431a8dc74 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 18 Mar 2025 18:19:08 +0800 Subject: [PATCH 20/44] chore: bump nitro --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index 313347cb..fa2812a9 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.3-rc.3-653b078 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.3-0a9c975 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode From f6497a23fb0fb7119f15de7f22cb8516b0747443 Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 21 Mar 2025 14:21:12 +0000 Subject: [PATCH 21/44] chore: use nitro v3.5.4-rc.1 --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index fa2812a9..e5743f24 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.3-0a9c975 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.4-rc.1-217e414 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode From 9c8e25a460e7505c4d378cbf126b735a14827357 Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 21 Mar 2025 14:55:52 +0000 Subject: [PATCH 22/44] chore: update nitro-contract pin --- test-node.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-node.bash b/test-node.bash index e5743f24..eb714c17 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,13 +2,13 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.4-rc.1-217e414 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.3-0a9c975 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode # 1. authorizing validator signer key since validator wallet if buggy # - gas estimation sent from 0x0000 lead to balance and permission error -DEFAULT_NITRO_CONTRACTS_VERSION="f3a6e47" # of v3-dev-testnode +DEFAULT_NITRO_CONTRACTS_VERSION="f9a2b866" # of v3-dev-testnode DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time From 7bafc5b82586b9cc08680f8691110e44249aff41 Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 21 Mar 2025 14:56:46 +0000 Subject: [PATCH 23/44] chore: use v3.5.4-rc.1 again --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index eb714c17..390aa013 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.3-0a9c975 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.4-rc.1-217e414 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode From 683351ab49e3a46f8e01db98a4559083cb711297 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:52:00 -0400 Subject: [PATCH 24/44] set latest nitro version --- test-node.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-node.bash b/test-node.bash index 390aa013..fb4c1495 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,13 +2,13 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.4-rc.1-217e414 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.4-217e414 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode # 1. authorizing validator signer key since validator wallet if buggy # - gas estimation sent from 0x0000 lead to balance and permission error -DEFAULT_NITRO_CONTRACTS_VERSION="f9a2b866" # of v3-dev-testnode +DEFAULT_NITRO_CONTRACTS_VERSION="v3-dev-testnode" # of v3-dev-testnode DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time From aaf7be585f05b0c04b673e6a4674c34a20106706 Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 28 Mar 2025 15:40:18 +0000 Subject: [PATCH 25/44] chore: use contract develop --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index 331c27b2..52d90a14 100755 --- a/test-node.bash +++ b/test-node.bash @@ -8,7 +8,7 @@ BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode # 1. authorizing validator signer key since validator wallet if buggy # - gas estimation sent from 0x0000 lead to balance and permission error -DEFAULT_NITRO_CONTRACTS_VERSION="v3-dev-testnode" # of v3-dev-testnode +DEFAULT_NITRO_CONTRACTS_VERSION="develop" DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # The is the latest bold-merge commit in nitro-contracts at the time From 3e4dfc24981ad6194594d240807865ac9656c0ff Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 28 Mar 2025 16:45:24 +0000 Subject: [PATCH 26/44] revert: remove workaround --- test-node.bash | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test-node.bash b/test-node.bash index 52d90a14..d07e8938 100755 --- a/test-node.bash +++ b/test-node.bash @@ -558,10 +558,6 @@ if $force_init; then echo == Funding l2 funnel and dev key docker compose up --wait $INITIAL_SEQ_NODES - sleep 60 - # restart node to workaround stuck sequencer rpc not accepting connections - docker compose down $INITIAL_SEQ_NODES - docker compose up --wait $INITIAL_SEQ_NODES docker compose run scripts bridge-funds --ethamount 100000 --wait docker compose run scripts send-l2 --ethamount 100 --to l2owner --wait rollupAddress=`docker compose run --entrypoint sh poster -c "jq -r '.[0].rollup.rollup' /config/deployed_chain_info.json | tail -n 1 | tr -d '\r\n'"` @@ -658,10 +654,6 @@ if $force_init; then echo == Funding l3 funnel and dev key docker compose up --wait l3node sequencer - sleep 60 - # restart node to workaround stuck sequencer rpc not accepting connections - docker compose down l3node sequencer - docker compose up --wait l3node sequencer if $l3_token_bridge; then echo == Deploying L2-L3 token bridge From 6a8bd3d090e903c48bc8be2b23be0a26351e1f87 Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 28 Mar 2025 11:50:57 +0000 Subject: [PATCH 27/44] chore: remove bold upgrader --- .github/workflows/ci.yml | 17 ----------------- boldupgrader/Dockerfile | 14 -------------- docker-compose-ci-cache.json | 11 ----------- docker-compose.yaml | 21 --------------------- test-node.bash | 33 +++------------------------------ 5 files changed, 3 insertions(+), 93 deletions(-) delete mode 100644 boldupgrader/Dockerfile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f1c9fae..86897162 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,20 +47,3 @@ jobs: - name: Startup Nitro testnode run: ${{ github.workspace }}/.github/workflows/testnode.bash --init-force ${{ (matrix.l3node == 'l3node' && '--l3node') || (matrix.l3node == 'l3node-token-6' && '--l3node --l3-fee-token --l3-token-bridge --l3-fee-token-decimals 6') || '' }} ${{ matrix.tokenbridge == 'tokenbridge' && '--tokenbridge' || '--no-tokenbridge' }} --detach ${{ matrix.pos == 'pos' && '--pos' || '' }} --simple ${{ (matrix.simple == 'simple' && '--simple') || (matrix.simple == 'no-simple' && '--no-simple') || '' }} - - # bold_upgrade: - # runs-on: ubuntu-8 - - # steps: - # - name: Checkout - # uses: actions/checkout@v4 - # with: - # submodules: recursive - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v3 - # with: - # driver-opts: network=host - - # - name: Startup Nitro testnode - # run: ${{ github.workspace }}/.github/workflows/testnode.bash --init-force --bold-upgrade --simple --detach diff --git a/boldupgrader/Dockerfile b/boldupgrader/Dockerfile deleted file mode 100644 index 89f51e85..00000000 --- a/boldupgrader/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:18-bullseye-slim -RUN apt-get update && \ - apt-get install -y git docker.io python3 make gcc g++ curl jq -ARG BOLD_CONTRACTS_BRANCH=bold-merge-script -WORKDIR /workspace -RUN git clone --no-checkout https://github.com/OffchainLabs/nitro-contracts.git ./ -RUN git checkout ${BOLD_CONTRACTS_BRANCH} -RUN yarn install && yarn cache clean -RUN curl -L https://foundry.paradigm.xyz | bash -ENV PATH="${PATH}:/root/.foundry/bin" -RUN foundryup -RUN touch scripts/config.ts -RUN yarn build:all -ENTRYPOINT ["yarn"] \ No newline at end of file diff --git a/docker-compose-ci-cache.json b/docker-compose-ci-cache.json index 8a9dacb6..0fee603d 100644 --- a/docker-compose-ci-cache.json +++ b/docker-compose-ci-cache.json @@ -22,17 +22,6 @@ "type=docker" ] }, - "boldupgrader": { - "cache-from": [ - "type=local,src=/tmp/.buildx-cache" - ], - "cache-to": [ - "type=local,dest=/tmp/.buildx-cache,mode=max" - ], - "output": [ - "type=docker" - ] - }, "tokenbridge": { "cache-from": [ "type=local,src=/tmp/.buildx-cache" diff --git a/docker-compose.yaml b/docker-compose.yaml index 64d067cf..7584f141 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -370,26 +370,6 @@ services: - "tokenbridge-data:/workspace" - /var/run/docker.sock:/var/run/docker.sock - boldupgrader: - depends_on: - - geth - - sequencer - pid: host - build: - context: boldupgrader/ - args: - BOLD_CONTRACTS_BRANCH: ${BOLD_CONTRACTS_BRANCH:-} - environment: - - L1_RPC_URL=http://geth:8545 - - L1_PRIV_KEY=0xdc04c5399f82306ec4b4d654a342f40e2e0620fe39950d967e1e574b32d4dd36 - - CONFIG_NETWORK_NAME=local - - DEPLOYED_CONTRACTS_DIR=./scripts/files/ - - DISABLE_VERIFICATION=true - volumes: - - "config:/config" - - "boldupgrader-data:/workspace" - - /var/run/docker.sock:/var/run/docker.sock - rollupcreator: depends_on: - geth @@ -502,4 +482,3 @@ volumes: das-committee-b-data: das-mirror-data: timeboost-auctioneer-data: - boldupgrader-data: diff --git a/test-node.bash b/test-node.bash index d07e8938..f41e8a01 100755 --- a/test-node.bash +++ b/test-node.bash @@ -11,19 +11,13 @@ BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 DEFAULT_NITRO_CONTRACTS_VERSION="develop" DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" -# The is the latest bold-merge commit in nitro-contracts at the time -DEFAULT_BOLD_CONTRACTS_VERSION="42d80e40" - # Set default versions if not overriden by provided env vars : ${NITRO_CONTRACTS_BRANCH:=$DEFAULT_NITRO_CONTRACTS_VERSION} -: ${BOLD_CONTRACTS_BRANCH:=$DEFAULT_BOLD_CONTRACTS_VERSION} : ${TOKEN_BRIDGE_BRANCH:=$DEFAULT_TOKEN_BRIDGE_VERSION} export NITRO_CONTRACTS_BRANCH -export BOLD_CONTRACTS_BRANCH export TOKEN_BRIDGE_BRANCH echo "Using NITRO_CONTRACTS_BRANCH: $NITRO_CONTRACTS_BRANCH" -echo "Using BOLD_CONTRACTS_BRANCH: $BOLD_CONTRACTS_BRANCH" echo "Using TOKEN_BRIDGE_BRANCH: $TOKEN_BRIDGE_BRANCH" mydir=`dirname $0` @@ -52,7 +46,6 @@ blockscout=false tokenbridge=false l3node=false consensusclient=false -boldupgrade=false redundantsequencers=0 l3_custom_fee_token=false l3_custom_fee_token_pricer=false @@ -220,10 +213,6 @@ while [[ $# -gt 0 ]]; do l1chainid=1337 shift ;; - --bold-upgrade) - boldupgrade=true - shift - ;; --l3node) l3node=true shift @@ -322,8 +311,8 @@ while [[ $# -gt 0 ]]; do echo --no-build-dev-nitro don\'t rebuild dev nitro docker image echo --build-dev-blockscout rebuild dev blockscout docker image echo --no-build-dev-blockscout don\'t rebuild dev blockscout docker image - echo --build-utils rebuild scripts, rollupcreator, boldupgrader, token bridge docker images - echo --no-build-utils don\'t rebuild scripts, rollupcreator, boldupgrader, token bridge docker images + echo --build-utils rebuild scripts, rollupcreator, token bridge docker images + echo --no-build-utils don\'t rebuild scripts, rollupcreator, token bridge docker images echo --force-build-utils force rebuilding utils, useful if NITRO_CONTRACTS_ or TOKEN_BRIDGE_BRANCH changes echo echo script runs inside a separate docker. For SCRIPT-ARGS, run $0 script --help @@ -395,7 +384,7 @@ if $dev_blockscout && $build_dev_blockscout; then fi if $build_utils; then - LOCAL_BUILD_NODES="scripts rollupcreator boldupgrader" + LOCAL_BUILD_NODES="scripts rollupcreator" # always build tokenbridge in CI mode to avoid caching issues if $tokenbridge || $l3_token_bridge || $ci; then LOCAL_BUILD_NODES="$LOCAL_BUILD_NODES tokenbridge" @@ -593,22 +582,6 @@ if $force_init; then echo == Deploy CacheManager on L2 docker compose run -e CHILD_CHAIN_RPC="http://sequencer:8547" -e CHAIN_OWNER_PRIVKEY=$l2ownerKey rollupcreator deploy-cachemanager-testnode - if $boldupgrade; then - echo == Deploying WETH as BOLD stake token - stakeTokenAddress=`docker compose run scripts create-weth --deployer l2owner --deposit 100 | tail -n 1 | awk '{ print $NF }'` - echo BOLD stake token address: $stakeTokenAddress - docker compose run scripts transfer-erc20 --token $stakeTokenAddress --l1 --amount 100 --from l2owner --to validator - echo == Preparing BOLD upgrade - docker compose run -e TESTNODE_MODE=true -e ROLLUP_ADDRESS=$rollupAddress -e STAKE_TOKEN=$stakeTokenAddress boldupgrader script:bold-prepare - # retry this 10 times because the staker might not have made a node yet - for i in {1..10}; do - docker compose run -e TESTNODE_MODE=true -e ROLLUP_ADDRESS=$rollupAddress -e STAKE_TOKEN=$stakeTokenAddress boldupgrader script:bold-populate-lookup && break || true - echo "Failed to populate lookup table, retrying..." - sleep 10 - done - docker compose run -e TESTNODE_MODE=true -e ROLLUP_ADDRESS=$rollupAddress -e STAKE_TOKEN=$stakeTokenAddress boldupgrader script:bold-local-execute - fi - if $l3node; then echo == Funding l3 users docker compose run scripts send-l2 --ethamount 1000 --to l3owner --wait From 08ff5c2d61375a4c33e10193714fd26f1a930bc4 Mon Sep 17 00:00:00 2001 From: gzeon Date: Sat, 29 Mar 2025 09:45:23 +0000 Subject: [PATCH 28/44] workaround: disable use-smart-contract-wallet --- scripts/config.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/config.ts b/scripts/config.ts index e09d26d8..cf5a411d 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -299,8 +299,7 @@ function writeConfigs(argv: any) { let simpleConfig = JSON.parse(baseConfJSON) simpleConfig.node.staker.enable = true simpleConfig.node.staker["use-smart-contract-wallet"] = false - delete simpleConfig.node["block-validator"] - simpleConfig.node.staker.dangerous["without-block-validator"] = false + simpleConfig.node.staker.dangerous["without-block-validator"] = true simpleConfig.node.sequencer = true simpleConfig.node.dangerous["no-sequencer-coordinator"] = true simpleConfig.node["delayed-sequencer"].enable = true @@ -314,7 +313,7 @@ function writeConfigs(argv: any) { } else { let validatorConfig = JSON.parse(baseConfJSON) validatorConfig.node.staker.enable = true - validatorConfig.node.staker["use-smart-contract-wallet"] = true + validatorConfig.node.staker["use-smart-contract-wallet"] = false let validconfJSON = JSON.stringify(validatorConfig) fs.writeFileSync(path.join(consts.configpath, "validator_config.json"), validconfJSON) @@ -353,7 +352,7 @@ function writeConfigs(argv: any) { const l3ChainInfoFile = path.join(consts.configpath, "l3_chain_info.json") l3Config.chain["info-files"] = [l3ChainInfoFile] l3Config.node.staker.enable = true - l3Config.node.staker["use-smart-contract-wallet"] = true + l3Config.node.staker["use-smart-contract-wallet"] = false l3Config.node.sequencer = true l3Config.execution["sequencer"].enable = true l3Config.node["dangerous"]["no-sequencer-coordinator"] = true From 57eaafc54f9ed4cadcc12e42bbf92d0fdd235ba5 Mon Sep 17 00:00:00 2001 From: gzeon Date: Sat, 29 Mar 2025 09:45:28 +0000 Subject: [PATCH 29/44] fix: typo --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index f41e8a01..df7257ed 100755 --- a/test-node.bash +++ b/test-node.bash @@ -6,7 +6,7 @@ NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.4-217e414 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode -# 1. authorizing validator signer key since validator wallet if buggy +# 1. authorizing validator signer key since validator wallet is buggy # - gas estimation sent from 0x0000 lead to balance and permission error DEFAULT_NITRO_CONTRACTS_VERSION="develop" DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" From a7b1654e865360f9026f0e2a3a09412be805783b Mon Sep 17 00:00:00 2001 From: gzeon Date: Sat, 29 Mar 2025 11:19:51 +0000 Subject: [PATCH 30/44] fix: use same staker for l3 --- scripts/config.ts | 3 ++- test-node.bash | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/config.ts b/scripts/config.ts index cf5a411d..289dd539 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -346,7 +346,8 @@ function writeConfigs(argv: any) { let l3Config = JSON.parse(baseConfJSON) l3Config["parent-chain"].connection.url = argv.l2url - l3Config.node.staker["parent-chain-wallet"].account = namedAddress("l3owner") + // use the same account for l2 and l3 staker + // l3Config.node.staker["parent-chain-wallet"].account = namedAddress("l3owner") l3Config.node["batch-poster"]["parent-chain-wallet"].account = namedAddress("l3sequencer") l3Config.chain.id = 333333 const l3ChainInfoFile = path.join(consts.configpath, "l3_chain_info.json") diff --git a/test-node.bash b/test-node.bash index df7257ed..d434f97c 100755 --- a/test-node.bash +++ b/test-node.bash @@ -584,6 +584,7 @@ if $force_init; then if $l3node; then echo == Funding l3 users + docker compose run scripts send-l2 --ethamount 1000 --to validator --wait docker compose run scripts send-l2 --ethamount 1000 --to l3owner --wait docker compose run scripts send-l2 --ethamount 1000 --to l3sequencer --wait From e120565252c4f6d6e0fd47d0b3209dcfa50eecd6 Mon Sep 17 00:00:00 2001 From: gzeon Date: Sat, 29 Mar 2025 17:59:43 +0000 Subject: [PATCH 31/44] fix: generate l3 traffic --- test-node.bash | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test-node.bash b/test-node.bash index d434f97c..81c1259a 100755 --- a/test-node.bash +++ b/test-node.bash @@ -661,6 +661,9 @@ if $force_init; then echo == Deploy CacheManager on L3 docker compose run -e CHILD_CHAIN_RPC="http://l3node:3347" -e CHAIN_OWNER_PRIVKEY=$l3ownerkey rollupcreator deploy-cachemanager-testnode + echo == create l3 traffic + docker compose run scripts send-l3 --ethamount 10 --to user_traffic_generator --wait + docker compose run scripts send-l3 --ethamount 0.0001 --from user_traffic_generator --to user_traffic_generator --wait --delay 500 --times 1000000 > /dev/null & fi fi From 965bc9785965fe1d5f8f968263f62220d6194993 Mon Sep 17 00:00:00 2001 From: gzeon Date: Sat, 29 Mar 2025 18:57:44 +0000 Subject: [PATCH 32/44] workaround: slower activity --- test-node.bash | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test-node.bash b/test-node.bash index 81c1259a..839dedc3 100755 --- a/test-node.bash +++ b/test-node.bash @@ -473,7 +473,7 @@ if $force_init; then echo == create l1 traffic docker compose run scripts send-l1 --ethamount 1000 --to user_l1user --wait - docker compose run scripts send-l1 --ethamount 0.0001 --from user_l1user --to user_l1user_b --wait --delay 500 --times 1000000 > /dev/null & + docker compose run scripts send-l1 --ethamount 0.0001 --from user_l1user --to user_l1user --wait --delay 1000 --times 1000000 > /dev/null & l2ownerAddress=`docker compose run scripts print-address --account l2owner | tail -n 1 | tr -d '\r\n'` @@ -598,7 +598,7 @@ if $force_init; then echo == create l2 traffic docker compose run scripts send-l2 --ethamount 100 --to user_traffic_generator --wait - docker compose run scripts send-l2 --ethamount 0.0001 --from user_traffic_generator --to user_fee_token_deployer --wait --delay 500 --times 1000000 > /dev/null & + docker compose run scripts send-l2 --ethamount 0.0001 --from user_traffic_generator --to user_traffic_generator --wait --delay 5000 --times 1000000 > /dev/null & echo == Writing l3 chain config l3owneraddress=`docker compose run scripts print-address --account l3owner | tail -n 1 | tr -d '\r\n'` @@ -663,7 +663,7 @@ if $force_init; then echo == create l3 traffic docker compose run scripts send-l3 --ethamount 10 --to user_traffic_generator --wait - docker compose run scripts send-l3 --ethamount 0.0001 --from user_traffic_generator --to user_traffic_generator --wait --delay 500 --times 1000000 > /dev/null & + docker compose run scripts send-l3 --ethamount 0.0001 --from user_traffic_generator --to user_traffic_generator --wait --delay 5000 --times 1000000 > /dev/null & fi fi From 0a45f780693b3632d131e72a598f86b7cdb1f663 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 01:47:10 +0800 Subject: [PATCH 33/44] feat: deploy stylue deployer using create2 (#121) * chore: remove bold upgrader * feat: deploy stylue deployer using create2 * fix: log * chore: use v3.1.0 bytecode * chore: import nitro-contract 3.1.0 --- scripts/ethcommands.ts | 56 ++++++++++++++++++++++++++++++++++++++++++ scripts/index.ts | 2 ++ scripts/package.json | 2 +- scripts/yarn.lock | 18 +++++++++++++- test-node.bash | 6 +++++ 5 files changed, 82 insertions(+), 2 deletions(-) diff --git a/scripts/ethcommands.ts b/scripts/ethcommands.ts index 263e5aa1..0ad83b7a 100644 --- a/scripts/ethcommands.ts +++ b/scripts/ethcommands.ts @@ -10,6 +10,8 @@ import * as fs from "fs"; import { ARB_OWNER } from "./consts"; import * as TransparentUpgradeableProxy from "@openzeppelin/contracts/build/contracts/TransparentUpgradeableProxy.json" import * as ExpressLaneAuctionContract from "@arbitrum/nitro-contracts/build/contracts/src/express-lane-auction/ExpressLaneAuction.sol/ExpressLaneAuction.json" +import * as StylusDeployerContract from "@arbitrum/nitro-contracts/build/contracts/src/stylus/StylusDeployer.sol/StylusDeployer.json" + const path = require("path"); async function sendTransaction(argv: any, threadId: number) { @@ -185,6 +187,36 @@ async function deployWETHContract(deployerWallet: Wallet): Promise { return weth.address; } +async function createStylusDeployer(deployerWallet: Wallet): Promise { + // this factory should be deployed by the rollupcreater when deploy helper is used + const create2factory = '0x4e59b44847b379578588920ca78fbf26c0b4956c' + if (await deployerWallet.provider.getCode(create2factory) === '0x') { + // wait for 30 seconds, check again before throwing an error + await new Promise(resolve => setTimeout(resolve, 30000)); + if (await deployerWallet.provider.getCode(create2factory) === '0x') { + throw new Error('Create2 factory not yet deployed') + } + } + + const salt = ethers.constants.HashZero + const stylusDeployerBytecode = StylusDeployerContract.bytecode + const stylusDeployerAddress = ethers.utils.getCreate2Address(create2factory, salt, ethers.utils.keccak256(stylusDeployerBytecode)) + + // check if the address is already deployed + const code = await deployerWallet.provider.getCode(stylusDeployerAddress) + if (code !== '0x') { + console.log("Stylus deployer already deployed") + } else { + const stylusDeployerTx = await deployerWallet.sendTransaction({ + to: create2factory, + data: ethers.utils.concat([salt, stylusDeployerBytecode]) + }) + await stylusDeployerTx.wait() + } + + return stylusDeployerAddress +} + export const bridgeFundsCommand = { command: "bridge-funds", describe: "sends funds from l1 to l2", @@ -592,6 +624,30 @@ export const createWETHCommand = { }, }; +export const createStylusDeployerCommand = { + command: "create-stylus-deployer", + describe: "deploys the stylus deployer contract", + builder: { + deployer: { string: true, describe: "account (see general help)" }, + l3: { boolean: false, describe: "deploy on L3, otherwise deploy on L2" }, + }, + handler: async (argv: any) => { + console.log("create-stylus-deployer"); + + const provider = new ethers.providers.WebSocketProvider(argv.l3 ? argv.l3url : argv.l2url); + const deployerWallet = namedAccount(argv.deployer).connect(provider); + + const stylusDeployerAddress = await createStylusDeployer(deployerWallet); + if (argv.l3) { + console.log("Stylus deployer deployed at L3 address:", stylusDeployerAddress); + } else { + console.log("Stylus deployer deployed at L2 address:", stylusDeployerAddress); + } + + provider.destroy(); + } +}; + export const sendL1Command = { command: "send-l1", describe: "sends funds between l1 accounts", diff --git a/scripts/index.ts b/scripts/index.ts index 826779e9..96e5f09f 100644 --- a/scripts/index.ts +++ b/scripts/index.ts @@ -26,6 +26,7 @@ import { createERC20Command, deployExpressLaneAuctionContractCommand, createWETHCommand, + createStylusDeployerCommand, transferERC20Command, sendL1Command, sendL2Command, @@ -56,6 +57,7 @@ async function main() { .command(deployExpressLaneAuctionContractCommand) .command(createFeeTokenPricerCommand) .command(createWETHCommand) + .command(createStylusDeployerCommand) .command(transferERC20Command) .command(sendL1Command) .command(sendL2Command) diff --git a/scripts/package.json b/scripts/package.json index c2dc9db9..05c0a2f9 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -6,7 +6,7 @@ "author": "Offchain Labs, Inc.", "license": "Apache-2.0", "dependencies": { - "@arbitrum/nitro-contracts": "^2.1.1", + "@arbitrum/nitro-contracts": "^3.1.0", "@arbitrum/token-bridge-contracts": "1.2.0", "@node-redis/client": "^1.0.4", "@openzeppelin/contracts": "^4.9.3", diff --git a/scripts/yarn.lock b/scripts/yarn.lock index 26f86656..4d5a9e7c 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -19,6 +19,17 @@ optionalDependencies: sol2uml "2.2.0" +"@arbitrum/nitro-contracts@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@arbitrum/nitro-contracts/-/nitro-contracts-3.1.0.tgz#89488e798593dd8d36f44ab1f684e47410e375a1" + integrity sha512-/nDcQ3bZ5D761vv5I2r2gS+HeMTj9A2wgKzSWGTkqJ1ewzz8b1892OLBWgNja24J5daBTgGYV4vlxT+75478+w== + dependencies: + "@offchainlabs/upgrade-executor" "1.1.0-beta.0" + "@openzeppelin/contracts" "4.7.3" + "@openzeppelin/contracts-upgradeable" "4.7.3" + patch-package "^6.5.1" + solady "0.0.182" + "@arbitrum/token-bridge-contracts@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@arbitrum/token-bridge-contracts/-/token-bridge-contracts-1.2.0.tgz#b1dc02e123393848d0d8e5c167028bafa0ac8229" @@ -2198,7 +2209,7 @@ parse5@^7.0.0: dependencies: entities "^4.4.0" -patch-package@^6.4.7: +patch-package@^6.4.7, patch-package@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.5.1.tgz#3e5d00c16997e6160291fee06a521c42ac99b621" integrity sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA== @@ -2522,6 +2533,11 @@ sol2uml@2.2.0: js-graph-algorithms "^1.0.18" klaw "^4.0.1" +solady@0.0.182: + version "0.0.182" + resolved "https://registry.yarnpkg.com/solady/-/solady-0.0.182.tgz#bd8c47f128a3a752358ad052782773966d74c400" + integrity sha512-FW6xo1akJoYpkXMzu58/56FcNU3HYYNamEbnFO3iSibXk0nSHo0DV2Gu/zI3FPg3So5CCX6IYli1TT1IWATnvg== + solidity-ast@^0.4.51: version "0.4.55" resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.55.tgz#00b685e6eefb2e8dfb67df1fe0afbe3b3bfb4b28" diff --git a/test-node.bash b/test-node.bash index 839dedc3..928b7dce 100755 --- a/test-node.bash +++ b/test-node.bash @@ -582,6 +582,9 @@ if $force_init; then echo == Deploy CacheManager on L2 docker compose run -e CHILD_CHAIN_RPC="http://sequencer:8547" -e CHAIN_OWNER_PRIVKEY=$l2ownerKey rollupcreator deploy-cachemanager-testnode + echo == Deploy Stylus Deployer on L2 + docker compose run scripts create-stylus-deployer --deployer l2owner + if $l3node; then echo == Funding l3 users docker compose run scripts send-l2 --ethamount 1000 --to validator --wait @@ -661,6 +664,9 @@ if $force_init; then echo == Deploy CacheManager on L3 docker compose run -e CHILD_CHAIN_RPC="http://l3node:3347" -e CHAIN_OWNER_PRIVKEY=$l3ownerkey rollupcreator deploy-cachemanager-testnode + echo == Deploy Stylus Deployer on L3 + docker compose run scripts create-stylus-deployer --deployer l3owner --l3 + echo == create l3 traffic docker compose run scripts send-l3 --ethamount 10 --to user_traffic_generator --wait docker compose run scripts send-l3 --ethamount 0.0001 --from user_traffic_generator --to user_traffic_generator --wait --delay 5000 --times 1000000 > /dev/null & From 15b3ac7a88d71382e34ceb4fd8ee01d3022a743d Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 01:47:47 +0800 Subject: [PATCH 34/44] chore: use v3.6.0-rc.1 --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index 928b7dce..d92b5ec4 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.5.4-217e414 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.6.0-rc.1 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode From cb5bc8c3df1bc1361b369d0f1541b06fc6c29eef Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 01:49:51 +0800 Subject: [PATCH 35/44] chore: use v3.1.0 contracts --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index d92b5ec4..f3700fe3 100755 --- a/test-node.bash +++ b/test-node.bash @@ -8,7 +8,7 @@ BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode # 1. authorizing validator signer key since validator wallet is buggy # - gas estimation sent from 0x0000 lead to balance and permission error -DEFAULT_NITRO_CONTRACTS_VERSION="develop" +DEFAULT_NITRO_CONTRACTS_VERSION="v3.1.0" DEFAULT_TOKEN_BRIDGE_VERSION="v1.2.2" # Set default versions if not overriden by provided env vars From a856baed3b00890f58cf347268c51a10d9949dd9 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 17 Apr 2025 01:51:01 +0800 Subject: [PATCH 36/44] chore: workaround and todos --- scripts/config.ts | 7 +++---- test-node.bash | 7 ++++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/config.ts b/scripts/config.ts index 289dd539..097c8234 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -199,7 +199,6 @@ function writeConfigs(argv: any) { }, "node": { "bold": { - "enable": true, "rpc-block-number": "latest", "strategy": "makeNodes", "assertion-posting-interval": "10s" @@ -298,7 +297,7 @@ function writeConfigs(argv: any) { if (argv.simple) { let simpleConfig = JSON.parse(baseConfJSON) simpleConfig.node.staker.enable = true - simpleConfig.node.staker["use-smart-contract-wallet"] = false + simpleConfig.node.staker["use-smart-contract-wallet"] = false // TODO: set to true when fixed simpleConfig.node.staker.dangerous["without-block-validator"] = true simpleConfig.node.sequencer = true simpleConfig.node.dangerous["no-sequencer-coordinator"] = true @@ -313,7 +312,7 @@ function writeConfigs(argv: any) { } else { let validatorConfig = JSON.parse(baseConfJSON) validatorConfig.node.staker.enable = true - validatorConfig.node.staker["use-smart-contract-wallet"] = false + validatorConfig.node.staker["use-smart-contract-wallet"] = false // TODO: set to true when fixed let validconfJSON = JSON.stringify(validatorConfig) fs.writeFileSync(path.join(consts.configpath, "validator_config.json"), validconfJSON) @@ -353,7 +352,7 @@ function writeConfigs(argv: any) { const l3ChainInfoFile = path.join(consts.configpath, "l3_chain_info.json") l3Config.chain["info-files"] = [l3ChainInfoFile] l3Config.node.staker.enable = true - l3Config.node.staker["use-smart-contract-wallet"] = false + l3Config.node.staker["use-smart-contract-wallet"] = false // TODO: set to true when fixed l3Config.node.sequencer = true l3Config.execution["sequencer"].enable = true l3Config.node["dangerous"]["no-sequencer-coordinator"] = true diff --git a/test-node.bash b/test-node.bash index f3700fe3..aaff77ad 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.6.0-rc.1 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.6.0-rc.1-914d81d BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode @@ -585,6 +585,11 @@ if $force_init; then echo == Deploy Stylus Deployer on L2 docker compose run scripts create-stylus-deployer --deployer l2owner + # TODO: remove this once the gas estimation issue is fixed + echo == Gas Estimation workaround + docker compose run scripts send-l1 --ethamount 1 --to address_0x0000000000000000000000000000000000000000 --wait + docker compose run scripts send-l2 --ethamount 1 --to address_0x0000000000000000000000000000000000000000 --wait + if $l3node; then echo == Funding l3 users docker compose run scripts send-l2 --ethamount 1000 --to validator --wait From de8cf4edec0d12e5ef1b7623e54e35ddb579ff0b Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 18 Apr 2025 00:51:43 +0800 Subject: [PATCH 37/44] revert: workaround no longer required --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index aaff77ad..8217be7b 100755 --- a/test-node.bash +++ b/test-node.bash @@ -606,7 +606,7 @@ if $force_init; then echo == create l2 traffic docker compose run scripts send-l2 --ethamount 100 --to user_traffic_generator --wait - docker compose run scripts send-l2 --ethamount 0.0001 --from user_traffic_generator --to user_traffic_generator --wait --delay 5000 --times 1000000 > /dev/null & + docker compose run scripts send-l2 --ethamount 0.0001 --from user_traffic_generator --to user_traffic_generator --wait --delay 500 --times 1000000 > /dev/null & echo == Writing l3 chain config l3owneraddress=`docker compose run scripts print-address --account l3owner | tail -n 1 | tr -d '\r\n'` From fec880522e8e20aac1b11e003d4978606993cf92 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 29 Apr 2025 23:38:56 +0800 Subject: [PATCH 38/44] chore: use nitro-node v3.6.0 --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index 8217be7b..bffb9101 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.6.0-rc.1-914d81d +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.6.0-fc07dd2 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode From 1fe1b72bd33cb5bd862c04447435f1c159ff7a3f Mon Sep 17 00:00:00 2001 From: TucksonDev Date: Tue, 6 May 2025 15:51:00 +0100 Subject: [PATCH 39/44] Smol clarification comment --- .github/workflows/ci.yml | 2 +- scripts/ethcommands.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 86897162..cb74a23a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ on: - master - develop - release - # run this job on the default branch daily + # run this job on the default branch (release) daily # the docker compose file contains some images with tags like 'latest' and 'stable' # we nightly run here just to double check no bugs have been merged into those tags and are now on release schedule: diff --git a/scripts/ethcommands.ts b/scripts/ethcommands.ts index 0ad83b7a..f76ddf33 100644 --- a/scripts/ethcommands.ts +++ b/scripts/ethcommands.ts @@ -188,7 +188,7 @@ async function deployWETHContract(deployerWallet: Wallet): Promise { } async function createStylusDeployer(deployerWallet: Wallet): Promise { - // this factory should be deployed by the rollupcreater when deploy helper is used + // this factory should be deployed by the rollupcreator when deploy helper is used const create2factory = '0x4e59b44847b379578588920ca78fbf26c0b4956c' if (await deployerWallet.provider.getCode(create2factory) === '0x') { // wait for 30 seconds, check again before throwing an error From 8fe6b9de3b76043174d121901bcba4fd22df6399 Mon Sep 17 00:00:00 2001 From: Pepper Lebeck-Jobe Date: Fri, 9 May 2025 17:29:08 +0200 Subject: [PATCH 40/44] Update the blockscount pin This pulls in https://github.com/OffchainLabs/blockscout/pull/197 --- blockscout | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blockscout b/blockscout index 3a1ba51e..e57a749c 160000 --- a/blockscout +++ b/blockscout @@ -1 +1 @@ -Subproject commit 3a1ba51edf359b893050c25de5a1bb26c245c942 +Subproject commit e57a749c439aeca09e5556456ed3cfb22cdc9e5c From 4f5f447d2df5b4203661d7ba2e2d62913985cc88 Mon Sep 17 00:00:00 2001 From: Pepper Lebeck-Jobe Date: Tue, 13 May 2025 07:42:15 -0400 Subject: [PATCH 41/44] Update the blockscout pin --- blockscout | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blockscout b/blockscout index e57a749c..382f171e 160000 --- a/blockscout +++ b/blockscout @@ -1 +1 @@ -Subproject commit e57a749c439aeca09e5556456ed3cfb22cdc9e5c +Subproject commit 382f171efa6054346d32ed81c3a8ac9caf70be36 From 9a67adb0a9e5e4a7145e60641f982ab7fbed8605 Mon Sep 17 00:00:00 2001 From: Joshua Colvin Date: Tue, 8 Apr 2025 17:26:31 -0700 Subject: [PATCH 42/44] Update to use latest nitro 3.5.5 release --- test-node.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-node.bash b/test-node.bash index bffb9101..c7198e84 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.6.0-fc07dd2 +NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.6.5-89cef87 BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode From e2ec1269cdf19aa2a4f803022fdc697b7a00c218 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 12 Jun 2025 22:07:18 +0900 Subject: [PATCH 43/44] chore: git submodule update --- rollupcreator/Dockerfile | 1 + tokenbridge/Dockerfile | 1 + 2 files changed, 2 insertions(+) diff --git a/rollupcreator/Dockerfile b/rollupcreator/Dockerfile index 59d56a5a..8e93229d 100644 --- a/rollupcreator/Dockerfile +++ b/rollupcreator/Dockerfile @@ -5,6 +5,7 @@ ARG NITRO_CONTRACTS_BRANCH=main WORKDIR /workspace RUN git clone --no-checkout https://github.com/OffchainLabs/nitro-contracts.git ./ RUN git checkout ${NITRO_CONTRACTS_BRANCH} +RUN git submodule update --init --recursive RUN yarn install && yarn cache clean RUN curl -L https://foundry.paradigm.xyz | bash ENV PATH="${PATH}:/root/.foundry/bin" diff --git a/tokenbridge/Dockerfile b/tokenbridge/Dockerfile index 475a68a6..785dfb5a 100644 --- a/tokenbridge/Dockerfile +++ b/tokenbridge/Dockerfile @@ -5,6 +5,7 @@ ARG TOKEN_BRIDGE_BRANCH=main WORKDIR /workspace RUN git clone --no-checkout https://github.com/OffchainLabs/token-bridge-contracts.git ./ && \ git checkout ${TOKEN_BRIDGE_BRANCH} && \ + git submodule update --init --recursive && \ rm -rf .git && \ git init && git add . && git -c user.name="user" -c user.email="user@example.com" commit -m "Initial commit" RUN yarn install && yarn cache clean From f155eb1a5923bc23d8f84c6c3fbc868039c3945f Mon Sep 17 00:00:00 2001 From: gzeon Date: Wed, 18 Jun 2025 00:58:27 +0800 Subject: [PATCH 44/44] chore: bump nitro-contracts to 3.1.1 for new stylus factory --- scripts/package.json | 2 +- scripts/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/package.json b/scripts/package.json index 05c0a2f9..9a5885d9 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -6,7 +6,7 @@ "author": "Offchain Labs, Inc.", "license": "Apache-2.0", "dependencies": { - "@arbitrum/nitro-contracts": "^3.1.0", + "@arbitrum/nitro-contracts": "^3.1.1", "@arbitrum/token-bridge-contracts": "1.2.0", "@node-redis/client": "^1.0.4", "@openzeppelin/contracts": "^4.9.3", diff --git a/scripts/yarn.lock b/scripts/yarn.lock index 4d5a9e7c..5ec812cc 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -19,10 +19,10 @@ optionalDependencies: sol2uml "2.2.0" -"@arbitrum/nitro-contracts@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@arbitrum/nitro-contracts/-/nitro-contracts-3.1.0.tgz#89488e798593dd8d36f44ab1f684e47410e375a1" - integrity sha512-/nDcQ3bZ5D761vv5I2r2gS+HeMTj9A2wgKzSWGTkqJ1ewzz8b1892OLBWgNja24J5daBTgGYV4vlxT+75478+w== +"@arbitrum/nitro-contracts@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@arbitrum/nitro-contracts/-/nitro-contracts-3.1.1.tgz#f2efac5329e3f187ade998bbbbad93070e2e90a3" + integrity sha512-30s5ocUZbDx22MybngvO7WZtCgYoPYmkHnnBl07FZnN3gOv+oy4WQB0Ln2QG4aBzPp6hCg76Yw9mQJDN/+OkCg== dependencies: "@offchainlabs/upgrade-executor" "1.1.0-beta.0" "@openzeppelin/contracts" "4.7.3"