diff --git a/.cargo/config.toml b/.cargo/config.toml index 6340ce34a..ace541bb4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -2,3 +2,6 @@ # https://github.com/rust-lang/rust/pull/124129 # https://github.com/dtolnay/linkme/pull/88 rustflags = ["-Z", "linker-features=-lld"] + +[alias] +xtask = ["run", "--package=xtask", "--"] diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cc95b3be3..d0b588152 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,9 +1,9 @@ -* @muursh @Nashtare -/evm_arithmetization/ @wborgeaud @muursh @Nashtare @LindaGuiga -/zero/ @muursh @Nashtare @atanmarko -/smt_trie/ @0xaatif @muursh @Nashtare -/mpt_trie/ @0xaatif @Nashtare @muursh -/trace_decoder/ @0xaatif @muursh @Nashtare -.github/ @0xaatif @atanmarko @muursh @Nashtare +* @Nashtare @paulgoleary +/evm_arithmetization/ @wborgeaud @Nashtare @LindaGuiga +/zero/ @Nashtare @atanmarko @0xaatif +/smt_trie/ @0xaatif @Nashtare +/mpt_trie/ @0xaatif @Nashtare +/trace_decoder/ @0xaatif @Nashtare +.github/ @0xaatif @atanmarko @Nashtare /vscode-extension @0xaatif /evm_arithmetization/src/bin/lsp-server.rs @0xaatif diff --git a/.github/actions/rust/action.yml b/.github/actions/rust/action.yml index 7df769868..373f93cf0 100644 --- a/.github/actions/rust/action.yml +++ b/.github/actions/rust/action.yml @@ -1,10 +1,12 @@ +--- # Common CI steps + name: "Rust" description: | Common steps for CI - See + runs: - using: composite + using: composite steps: - uses: actions-rust-lang/setup-rust-toolchain@v1 - uses: Swatinem/rust-cache@v2 diff --git a/.github/labeler.yml b/.github/labeler.yml index baacbe1fa..04941664b 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,27 +1,29 @@ +--- # Github labeler configuration file + # Add 'crate: mpt_trie' label to any changes within 'mpt_trie' folder. 'crate: mpt_trie': -- changed-files: - - any-glob-to-any-file: mpt_trie/** + - changed-files: + - any-glob-to-any-file: mpt_trie/** # Add 'crate: evm_arithmetization' label to any changes within 'evm_arithmetization' folder. 'crate: evm_arithmetization': -- changed-files: - - any-glob-to-any-file: evm_arithmetization/** + - changed-files: + - any-glob-to-any-file: evm_arithmetization/** # Add 'crate: trace_decoder' label to any changes within 'trace_decoder' folder. 'crate: trace_decoder': -- changed-files: - - any-glob-to-any-file: trace_decoder/** + - changed-files: + - any-glob-to-any-file: trace_decoder/** # Add 'crate: zero_bin' label to any changes within 'zero' folder. 'crate: zero_bin': -- changed-files: - - any-glob-to-any-file: zero/** + - changed-files: + - any-glob-to-any-file: zero/** # Add 'specs' label to any changes within 'docs' or `book` folder. 'specs': -- changed-files: - - any-glob-to-any-file: ['docs/**', 'book/**'] + - changed-files: + - any-glob-to-any-file: ['docs/**', 'book/**'] # Add 'crate: common' label to any changes within 'common' folder. 'crate: common': diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml index ee1716de7..dd124c0be 100644 --- a/.github/workflows/audit.yml +++ b/.github/workflows/audit.yml @@ -1,8 +1,11 @@ +--- # Rust cargo audit workflow + name: Security audit on: push: - paths: + paths: - '**/Cargo.toml' + jobs: security_audit: runs-on: ubuntu-latest diff --git a/.github/workflows/book.yml b/.github/workflows/book.yml index c5df23222..b920d424f 100644 --- a/.github/workflows/book.yml +++ b/.github/workflows/book.yml @@ -1,3 +1,5 @@ +--- # MD Book generation and deployment workflow + name: zkEVM mdbook on: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09280fae2..9a45da874 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,5 @@ +--- # Workflow with multiple jobs to test different parts of the project + name: Continuous Integration on: @@ -22,7 +24,6 @@ jobs: name: Test mpt_trie runs-on: ubuntu-latest timeout-minutes: 30 - if: ${{ ! contains(toJSON(github.event.commits.*.message), '[skip-ci]') }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -37,7 +38,11 @@ jobs: - name: Test in mpt_trie subdirectory run: cargo test --manifest-path mpt_trie/Cargo.toml env: - RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 + RUSTFLAGS: > + -Copt-level=3 + -Cdebug-assertions + -Coverflow-checks=y + -Cdebuginfo=0 RUST_LOG: 1 CARGO_INCREMENTAL: 1 RUST_BACKTRACE: 1 @@ -50,8 +55,6 @@ jobs: RUST_LOG: info CARGO_INCREMENTAL: 1 RUST_BACKTRACE: 1 - - if: ${{ ! contains(toJSON(github.event.commits.*.message), '[skip-ci]') }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -63,7 +66,7 @@ jobs: with: cache-on-failure: true - - name: build # build separately so test logs are actually nice + - name: build # build separately so test logs are actually nice run: cargo build --tests --manifest-path trace_decoder/Cargo.toml - name: test @@ -73,7 +76,6 @@ jobs: name: Test evm_arithmetization runs-on: ubuntu-latest timeout-minutes: 20 - if: ${{ ! contains(toJSON(github.event.commits.*.message), '[skip-ci]') }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -96,8 +98,7 @@ jobs: test_zero_bin: name: Test zero_bin runs-on: ubuntu-latest - timeout-minutes: 5 - if: ${{ ! contains(toJSON(github.event.commits.*.message), '[skip-ci]') }} + timeout-minutes: 10 steps: - name: Checkout sources uses: actions/checkout@v4 @@ -112,7 +113,6 @@ jobs: - name: Test in zero_bin subdirectory run: | cargo test --manifest-path zero/Cargo.toml - env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 RUST_LOG: 1 @@ -123,7 +123,6 @@ jobs: name: Test zk_evm_proc_macro runs-on: ubuntu-latest timeout-minutes: 5 - if: ${{ ! contains(toJSON(github.event.commits.*.message), '[skip-ci]') }} steps: - name: Checkout sources uses: actions/checkout@v4 diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 1d24cc8b7..e797213aa 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -1,3 +1,5 @@ +--- # Workflow for building and running docker images as regression test + name: Docker Build & Run on: diff --git a/.github/workflows/docker_build_push.yml b/.github/workflows/docker_build_push.yml index 37b89fa92..4aed557df 100644 --- a/.github/workflows/docker_build_push.yml +++ b/.github/workflows/docker_build_push.yml @@ -1,3 +1,5 @@ +--- # Workflow for building and deploying docker images + name: Docker Build & Push on: diff --git a/.github/workflows/jerigon-native.yml b/.github/workflows/jerigon-native.yml index 29a380c3a..ccfbdc005 100644 --- a/.github/workflows/jerigon-native.yml +++ b/.github/workflows/jerigon-native.yml @@ -1,3 +1,5 @@ +--- # Run and populate blockchain with transactions and generate proofs using native tracer + name: Jerigon Integration on: @@ -19,7 +21,6 @@ jobs: name: Native tracer proof generation runs-on: zero-ci timeout-minutes: 30 - if: "! contains(toJSON(github.event.commits.*.message), '[skip-ci]')" steps: - name: Checkout sources uses: actions/checkout@v4 @@ -52,16 +53,17 @@ jobs: run: | echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list sudo apt update - sudo apt install kurtosis-cli + sudo apt install kurtosis-cli=1.3.1 - #It is much easier to use cast tool in scripts so install foundry + # It is much easier to use cast tool in scripts so install foundry - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 - name: Run cancun test network run: | docker pull ghcr.io/0xpolygonzero/erigon:feat-zero - kurtosis run --enclave cancun-testnet github.com/ethpandaops/ethereum-package@4.0.0 --args-file jerigon-test-network/network_params.yml + kurtosis run --enclave cancun-testnet github.com/ethpandaops/ethereum-package@4.0.0 \ + --args-file jerigon-test-network/network_params.yml - name: Generate blocks with transactions run: | @@ -74,14 +76,14 @@ jobs: run: | ETH_RPC_URL="$(kurtosis port print cancun-testnet el-2-erigon-lighthouse ws-rpc)" ulimit -n 8192 - OUTPUT_TO_TERMINAL=true ./scripts/prove_rpc.sh 0x1 0xf $ETH_RPC_URL native true 3000 100 test_only + OUTPUT_TO_TERMINAL=true ./scripts/prove_rpc.sh 1 15 $ETH_RPC_URL native 0 3000 100 test_only echo "Proving blocks in test_only mode finished" - name: Run prove blocks with native tracer in real mode run: | ETH_RPC_URL="$(kurtosis port print cancun-testnet el-2-erigon-lighthouse ws-rpc)" rm -rf proofs/* circuits/* ./proofs.json test.out verify.out leader.out - OUTPUT_TO_TERMINAL=true RUN_VERIFICATION=true ./scripts/prove_rpc.sh 0x4 0x7 $ETH_RPC_URL native true 3000 100 + OUTPUT_TO_TERMINAL=true RUN_VERIFICATION=true ./scripts/prove_rpc.sh 4 7 $ETH_RPC_URL native 3 3000 100 echo "Proving blocks in real mode finished" - name: Shut down network diff --git a/.github/workflows/jerigon-zero.yml b/.github/workflows/jerigon-zero.yml index 216b32f8c..01e580438 100644 --- a/.github/workflows/jerigon-zero.yml +++ b/.github/workflows/jerigon-zero.yml @@ -1,3 +1,5 @@ +--- # Run and populate blockchain with transactions and generate proofs using zero tracer + name: Jerigon Integration on: @@ -10,7 +12,6 @@ on: branches: - "**" - env: CARGO_TERM_COLOR: always REGISTRY: ghcr.io @@ -20,22 +21,21 @@ jobs: name: Zero tracer proof generation runs-on: zero-ci timeout-minutes: 30 - if: "! contains(toJSON(github.event.commits.*.message), '[skip-ci]')" steps: - name: Checkout sources uses: actions/checkout@v4 - name: Checkout test-jerigon-network sources - uses: actions/checkout@v4 + uses: actions/checkout@v4 with: repository: 0xPolygonZero/jerigon-test-network - ref: 'feat/kurtosis-network' + ref: "feat/kurtosis-network" path: jerigon-test-network - uses: actions-rust-lang/setup-rust-toolchain@v1 - + - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v3 - name: Login to GitHub Container Registry uses: docker/login-action@v2 @@ -53,43 +53,40 @@ jobs: run: | echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list sudo apt update - sudo apt install kurtosis-cli + sudo apt install kurtosis-cli=1.3.1 - #It is much easier to use cast tool in scripts so install foundry + # It is much easier to use cast tool in scripts so install foundry - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 + uses: foundry-rs/foundry-toolchain@v1 - name: Run cancun test network run: | docker pull ghcr.io/0xpolygonzero/erigon:feat-zero - kurtosis run --enclave cancun-testnet github.com/ethpandaops/ethereum-package@4.0.0 --args-file jerigon-test-network/network_params.yml + kurtosis run --enclave cancun-testnet github.com/ethpandaops/ethereum-package@4.0.0 \ + --args-file jerigon-test-network/network_params.yml - name: Generate blocks with transactions run: | - ETH_RPC_URL="$(kurtosis port print cancun-testnet el-2-erigon-lighthouse ws-rpc)" - cast rpc eth_blockNumber --rpc-url $ETH_RPC_URL - cd jerigon-test-network && set -a && source .env && set +a - bash ./tests/generate_transactions.sh - + ETH_RPC_URL="$(kurtosis port print cancun-testnet el-2-erigon-lighthouse ws-rpc)" + cast rpc eth_blockNumber --rpc-url $ETH_RPC_URL + cd jerigon-test-network && set -a && source .env && set +a + bash ./tests/generate_transactions.sh + - name: Run prove blocks with zero tracer in test_only mode run: | ETH_RPC_URL="$(kurtosis port print cancun-testnet el-2-erigon-lighthouse ws-rpc)" ulimit -n 8192 - OUTPUT_TO_TERMINAL=true ./scripts/prove_rpc.sh 0x1 0xf $ETH_RPC_URL jerigon true 3000 100 test_only + OUTPUT_TO_TERMINAL=true ./scripts/prove_rpc.sh 1 15 $ETH_RPC_URL jerigon 0 3000 100 test_only echo "Proving blocks in test_only mode finished" - - name: Run prove blocks with zero tracer in real mode run: | ETH_RPC_URL="$(kurtosis port print cancun-testnet el-2-erigon-lighthouse ws-rpc)" rm -rf proofs/* circuits/* ./proofs.json test.out verify.out leader.out - OUTPUT_TO_TERMINAL=true RUN_VERIFICATION=true ./scripts/prove_rpc.sh 0x2 0x5 $ETH_RPC_URL jerigon true 3000 100 + OUTPUT_TO_TERMINAL=true RUN_VERIFICATION=true ./scripts/prove_rpc.sh 2 5 $ETH_RPC_URL jerigon 1 3000 100 echo "Proving blocks in real mode finished" - + - name: Shut down network run: | kurtosis enclave rm -f cancun-testnet kurtosis engine stop - - - diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index ee79f0f56..9792f107b 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,6 +1,8 @@ +--- # Add labels to the PR + name: "Pull Request Labeler" on: -- pull_request_target + - pull_request_target jobs: labeler: @@ -10,7 +12,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/labeler@v5 - with: - # Allow to remove labels that are no longer relevant when new changes are pushed. - sync-labels: true + - uses: actions/labeler@v5 + with: + # Allow to remove labels that are no longer relevant when new changes are pushed. + sync-labels: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 446d6a314..e22228b1d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,3 +1,5 @@ +--- # Rust lint related checks + name: lint on: @@ -13,8 +15,6 @@ concurrency: env: CARGO_TERM_COLOR: always - BINSTALL_NO_CONFIRM: true - RUSTDOCFLAGS: "-D warnings" jobs: clippy: @@ -42,7 +42,15 @@ jobs: steps: - uses: actions/checkout@v3 - uses: ./.github/actions/rust - - run: cargo doc --all --no-deps + - run: RUSTDOCFLAGS='-D warnings -A rustdoc::private_intra_doc_links' cargo doc --all --no-deps + # TODO(zero): https://github.com/0xPolygonZero/zk_evm/issues/718 + - run: > + RUSTDOCFLAGS='-D warnings -A rustdoc::private_intra_doc_links' cargo doc --no-deps --document-private-items + --package trace_decoder + --package compat + --package smt_trie + --package zk_evm_proc_macro + --package zk_evm_common cargo-fmt: runs-on: ubuntu-latest timeout-minutes: 5 @@ -60,3 +68,13 @@ jobs: with: tool: taplo-cli - run: taplo fmt --check + outdated: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/rust + - uses: taiki-e/install-action@v2 + with: + tool: cargo-outdated + - run: cargo xtask outdated diff --git a/.github/workflows/pr_checking.yml b/.github/workflows/pr_checking.yml index 497a17208..adc6d81bc 100644 --- a/.github/workflows/pr_checking.yml +++ b/.github/workflows/pr_checking.yml @@ -1,3 +1,5 @@ +--- # Rust lint related checks + name: PR check on: @@ -14,7 +16,10 @@ jobs: steps: - name: Set up keywords id: setup_keywords - run: echo "RESTRICTED_KEYWORDS=$(echo '${{ secrets.RESTRICTED_KEYWORDS }}' | jq -r '.[]' | tr '\n' ' ')" >> $GITHUB_ENV + run: > + echo "RESTRICTED_KEYWORDS=$(echo '${{ secrets.RESTRICTED_KEYWORDS }}' + | jq -r '.[]' + | tr '\n' ' ')" >> $GITHUB_ENV - name: Check for spam PR id: check @@ -22,7 +27,6 @@ jobs: # Initialize variables to track spam presence title_is_spam=false description_is_spam=false - # Check title for spam for keyword in $RESTRICTED_KEYWORDS; do if echo "${{ github.event.pull_request.title }}" | grep -i -q "$keyword"; then diff --git a/.github/workflows/shellcheck.yml b/.github/workflows/shellcheck.yml new file mode 100644 index 000000000..e7b826555 --- /dev/null +++ b/.github/workflows/shellcheck.yml @@ -0,0 +1,26 @@ +--- # Workflow to run shellckeck on all shell scripts + +name: Shellcheck +on: + pull_request: + paths: + - '**/*.sh' + - 'scripts/**' + workflow_dispatch: + branches: + - "**" + +jobs: + shellcheck_scripts: + runs-on: ubuntu-22.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + + - name: Install shellcheck + run: sudo apt-get install shellcheck=0.8.0-2 + + - name: Run shellcheck + run: | + cd scripts + shellcheck ./*.sh diff --git a/.github/workflows/yamllint.yml b/.github/workflows/yamllint.yml new file mode 100644 index 000000000..0c9910d31 --- /dev/null +++ b/.github/workflows/yamllint.yml @@ -0,0 +1,26 @@ +--- # Run yamllint on all YAML files in the repository + +name: Yamllint +'on': + pull_request: + paths: + - '**/*.yml' + - '.github/**' + workflow_dispatch: + branches: + - '**' + +jobs: + yamllint-check: + runs-on: ubuntu-22.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - name: Install yamllint + run: sudo apt-get install yamllint=1.26.3-1 + - name: Run yamllint + run: > + yamllint + --format github + -d "{extends: default, rules: {line-length: {max: 120}, truthy: {check-keys: false}}}" + .github diff --git a/Cargo.lock b/Cargo.lock index 68f584f54..d64c3c1b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,9 +58,9 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c37d89f69cb43901949ba29307ada8b9e3b170f94057ad4c04d6fd169d24d65f" +checksum = "b2683873c2744f6cd72d0db51bb74fee9ed310e0476a140bdc19e82b407d8a0a" dependencies = [ "alloy-consensus", "alloy-core", @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b4f201b0ac8f81315fbdc55269965a8ddadbc04ab47fa65a1a468f9a40f7a5f" +checksum = "b68b94c159bcc2ca5f758b8663d7b00fc7c5e40569984595ddf2221b0f7f7f6e" dependencies = [ "num_enum", "strum", @@ -96,9 +96,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1468e3128e07c7afe4ff13c17e8170c330d12c322f8924b8bf6986a27e0aad3d" +checksum = "c28ddd17ffb7e4d66ef3a84e7b179072a9320cdc4b26c7f6f44cbf1081631b36" dependencies = [ "alloy-eips", "alloy-primitives", @@ -142,9 +142,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c35df7b972b06f1b2f4e8b7a53328522fa788054a9d3e556faf2411c5a51d5a" +checksum = "2f6c5c0a383f14519531cf58d8440e74f10b938e289f803af870be6f79223110" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -160,9 +160,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8866562186d237f1dfeaf989ef941a24764f764bf5c33311e37ead3519c6a429" +checksum = "7111af869909275cffc5c84d16b6c892d6d512773e40cbe83187d0b9c5235e91" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -174,9 +174,9 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe714e233f9eaf410de95a9af6bcd05d3a7f8c8de7a0817221e95a6b642a080" +checksum = "342028392a2d5050b7b93dd32a0715d3b3b9ce30072ecb69a35dd4895c005495" dependencies = [ "alloy-consensus", "alloy-eips", @@ -195,9 +195,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c5a38117974c5776a45e140226745a0b664f79736aa900995d8e4121558e064" +checksum = "a6e66d78c049dcadd065a926a9f2d9a9b2b10981a7889449e694fac7bccd2c6f" dependencies = [ "alloy-eips", "alloy-primitives", @@ -229,9 +229,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c65633d6ef83c3626913c004eaf166a6dd50406f724772ea8567135efd6dc5d3" +checksum = "79f14ccc2a3c575cb17b1b4af8c772cf9b5b93b7ce7047d6640e53954abb558d" dependencies = [ "alloy-chains", "alloy-consensus", @@ -286,9 +286,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fc328bb5d440599ba1b5aa44c0b9ab0625fbc3a403bb5ee94ed4a01ba23e07" +checksum = "4dc79aeca84abb122a2fffbc1c91fdf958dca5c95be3875977bc99672bde0027" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -307,9 +307,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f8ff679f94c497a8383f2cd09e2a099266e5f3d5e574bc82b4b379865707dbb" +checksum = "22045187a5ebf5b2af3f8b6831b66735b6556c5750ec5790aeeb45935260c1c2" dependencies = [ "alloy-rpc-types-eth", "alloy-rpc-types-trace", @@ -319,9 +319,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a59b1d7c86e0a653e7f3d29954f6de5a2878d8cfd1f010ff93be5c2c48cd3b1" +checksum = "238f494727ff861a803bd73b1274ef788a615bf8f8c4bfada4e6df42afa275d2" dependencies = [ "alloy-consensus", "alloy-eips", @@ -330,17 +330,19 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", + "cfg-if", + "derive_more", + "hashbrown", "itertools 0.13.0", "serde", "serde_json", - "thiserror", ] [[package]] name = "alloy-rpc-types-trace" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54375e5a34ec5a2cf607f9ce98c0ece30dc76ad623afeb25d3953a8d7d30f20" +checksum = "64ca08b0ccc0861055ceb83a1db009c4c8a7f52a259e7cda7ca6ca36ec2b5ce8" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -352,9 +354,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51db8a6428a2159e01b7a43ec7aac801edd0c4db1d4de06f310c288940f16fd3" +checksum = "6b95b6f024a558593dd3b8628af03f7df2ca50e4c56839293ad0a7546e471db0" dependencies = [ "alloy-primitives", "serde", @@ -363,9 +365,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebc1760c13592b7ba3fcd964abba546b8d6a9f10d15e8d92a8263731be33f36" +checksum = "da64740ff0518606c514eb0e03dd0a1daa8ff94d6d491a626fd8e50efd6c4f18" dependencies = [ "alloy-primitives", "async-trait", @@ -435,9 +437,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5dc4e902f1860d54952446d246ac05386311ad61030a2b906ae865416d36e0" +checksum = "3c7a669caa427abe8802184c8776f5103302f9337bb30a5b36bdebc332946c14" dependencies = [ "alloy-json-rpc", "base64", @@ -454,9 +456,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1742b94bb814f1ca6b322a6f9dd38a0252ff45a3119e40e888fb7029afa500ce" +checksum = "4433ffa97aab6ae643de81c7bde9a2f043496f27368a607405a5c78a610caf74" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -572,9 +574,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1496f8fb1fbf272686b8d37f523dab3e4a7443300055e74cdaa449f3114356" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" dependencies = [ "backtrace", ] @@ -1823,6 +1825,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + [[package]] name = "dunce" version = "1.0.5" @@ -2178,6 +2186,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fragile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" + [[package]] name = "funty" version = "2.0.0" @@ -2847,6 +2861,29 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "lazy-regex" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d8e41c97e6bc7ecb552016274b99fbb5d035e8de288c582d9b933af6677bfda" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e1d8b05d672c53cb9c7b920bbba8783845ae4f0b076e02a3db1d02c81b4163" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.77", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -3046,6 +3083,32 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "mockall" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c28b3fb6d753d28c20e826cd46ee611fda1cf3cde03a443a974043247c065a" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "341014e7f530314e9a1fdbc7400b244efea7122662c96bfa248c31da5bfb2020" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "mpt_trie" version = "0.4.1" @@ -3267,9 +3330,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "33ea5043e58958ee56f3e15a90aee535795cd7dfd319846288d93c5b57d85cbe" [[package]] name = "oorandom" @@ -3357,9 +3420,9 @@ dependencies = [ [[package]] name = "paladin-core" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af1955eaab1506a43d046628c218b7b3915539554838feb85ed31f54aace2f2" +checksum = "6343e2767eb6ac7f55ca8b869df03c2986b88f0b9ad09cada898b3770ac436e3" dependencies = [ "anyhow", "async-trait", @@ -3377,6 +3440,7 @@ dependencies = [ "paladin-opkind-derive", "pin-project", "postcard", + "rand", "serde", "thiserror", "tokio", @@ -3385,14 +3449,13 @@ dependencies = [ "tokio-util", "tracing", "tracing-subscriber", - "uuid", ] [[package]] name = "paladin-opkind-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25dcb10b7c0ce99abee8694e2e79e4787d7f778b9339dc5a50ba6fc45e5cc9" +checksum = "0bde85d55c108d4eef3404b4c88d1982a270dc11146a085f4f45c1548b4d2b4c" dependencies = [ "quote", "syn 2.0.77", @@ -3633,7 +3696,7 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plonky2" version = "0.2.2" -source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=dc77c77f2b06500e16ad4d7f1c2b057903602eed#dc77c77f2b06500e16ad4d7f1c2b057903602eed" +source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=2488cdacd49ede15737bc1172546d82e9521b79b#2488cdacd49ede15737bc1172546d82e9521b79b" dependencies = [ "ahash", "anyhow", @@ -3644,7 +3707,7 @@ dependencies = [ "log", "num", "plonky2_field", - "plonky2_maybe_rayon 0.2.0 (git+https://github.com/0xPolygonZero/plonky2.git?rev=dc77c77f2b06500e16ad4d7f1c2b057903602eed)", + "plonky2_maybe_rayon 0.2.0 (git+https://github.com/0xPolygonZero/plonky2.git?rev=2488cdacd49ede15737bc1172546d82e9521b79b)", "plonky2_util", "rand", "rand_chacha", @@ -3657,7 +3720,7 @@ dependencies = [ [[package]] name = "plonky2_field" version = "0.2.2" -source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=dc77c77f2b06500e16ad4d7f1c2b057903602eed#dc77c77f2b06500e16ad4d7f1c2b057903602eed" +source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=2488cdacd49ede15737bc1172546d82e9521b79b#2488cdacd49ede15737bc1172546d82e9521b79b" dependencies = [ "anyhow", "itertools 0.11.0", @@ -3681,7 +3744,7 @@ dependencies = [ [[package]] name = "plonky2_maybe_rayon" version = "0.2.0" -source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=dc77c77f2b06500e16ad4d7f1c2b057903602eed#dc77c77f2b06500e16ad4d7f1c2b057903602eed" +source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=2488cdacd49ede15737bc1172546d82e9521b79b#2488cdacd49ede15737bc1172546d82e9521b79b" dependencies = [ "rayon", ] @@ -3689,7 +3752,7 @@ dependencies = [ [[package]] name = "plonky2_util" version = "0.2.0" -source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=dc77c77f2b06500e16ad4d7f1c2b057903602eed#dc77c77f2b06500e16ad4d7f1c2b057903602eed" +source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=2488cdacd49ede15737bc1172546d82e9521b79b#2488cdacd49ede15737bc1172546d82e9521b79b" [[package]] name = "plotters" @@ -3778,6 +3841,32 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "predicates" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" +dependencies = [ + "anstyle", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" + +[[package]] +name = "predicates-tree" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +dependencies = [ + "predicates-core", + "termtree", +] + [[package]] name = "pretty_env_logger" version = "0.5.0" @@ -4650,7 +4739,7 @@ checksum = "8acdd7dbfcfb5dd6e46c63512508bf71c2043f70b8f143813ad75cb5e8a589f2" [[package]] name = "starky" version = "0.4.0" -source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=dc77c77f2b06500e16ad4d7f1c2b057903602eed#dc77c77f2b06500e16ad4d7f1c2b057903602eed" +source = "git+https://github.com/0xPolygonZero/plonky2.git?rev=2488cdacd49ede15737bc1172546d82e9521b79b#2488cdacd49ede15737bc1172546d82e9521b79b" dependencies = [ "ahash", "anyhow", @@ -4659,8 +4748,9 @@ dependencies = [ "log", "num-bigint", "plonky2", - "plonky2_maybe_rayon 0.2.0 (git+https://github.com/0xPolygonZero/plonky2.git?rev=dc77c77f2b06500e16ad4d7f1c2b057903602eed)", + "plonky2_maybe_rayon 0.2.0 (git+https://github.com/0xPolygonZero/plonky2.git?rev=2488cdacd49ede15737bc1172546d82e9521b79b)", "plonky2_util", + "serde", ] [[package]] @@ -4803,6 +4893,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "termtree" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" + [[package]] name = "text-size" version = "1.1.1" @@ -5343,17 +5439,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" -dependencies = [ - "getrandom", - "rand", - "serde", -] - [[package]] name = "valuable" version = "0.1.0" @@ -5794,6 +5879,16 @@ dependencies = [ "time", ] +[[package]] +name = "xtask" +version = "0.0.0" +dependencies = [ + "anyhow", + "clap", + "serde", + "serde_json", +] + [[package]] name = "yansi" version = "1.0.1" @@ -5809,6 +5904,7 @@ dependencies = [ "anyhow", "async-stream", "axum", + "cfg-if", "clap", "compat", "directories", @@ -5820,7 +5916,9 @@ dependencies = [ "itertools 0.13.0", "jemallocator", "keccak-hash 0.10.0", + "lazy-regex", "lru", + "mockall", "mpt_trie", "num-traits", "once_cell", @@ -5828,7 +5926,6 @@ dependencies = [ "plonky2", "plonky2_maybe_rayon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "primitive-types 0.12.2", - "regex", "rlp", "ruint", "serde", diff --git a/Cargo.toml b/Cargo.toml index 0bd15a3bd..117f124b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "evm_arithmetization", "mpt_trie", "proc_macro", + "scripts", "smt_trie", "trace_decoder", "zero", @@ -41,7 +42,6 @@ axum = "0.7.5" bitflags = "2.5.0" bitvec = "1.0.1" bytes = "1.6.0" -cargo_metadata = "0.18.1" ciborium = "0.2.2" ciborium-io = "0.2.2" clap = { version = "4.5.7", features = ["derive", "env"] } @@ -70,9 +70,8 @@ num-bigint = "0.4.5" num-traits = "0.2.19" nunny = "0.2.1" once_cell = "1.19.0" -paladin-core = "0.4.2" +paladin-core = "0.4.3" parking_lot = "0.12.3" -paste = "1.0.15" pest = "2.7.10" pest_derive = "2.7.10" pretty_env_logger = "0.5.0" @@ -94,7 +93,6 @@ syn = "2.0" thiserror = "1.0.61" tiny-keccak = "2.0.2" tokio = { version = "1.38.0", features = ["full"] } -toml = "0.8.14" tower = "0.4" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } @@ -114,10 +112,10 @@ zk_evm_proc_macro = { path = "proc_macro", version = "0.1.0" } zero = { path = "zero", default-features = false } # plonky2-related dependencies -plonky2 = { git = "https://github.com/0xPolygonZero/plonky2.git", rev = "dc77c77f2b06500e16ad4d7f1c2b057903602eed" } +plonky2 = { git = "https://github.com/0xPolygonZero/plonky2.git", rev = "2488cdacd49ede15737bc1172546d82e9521b79b" } plonky2_maybe_rayon = "0.2.0" -plonky2_util = { git = "https://github.com/0xPolygonZero/plonky2.git", rev = "dc77c77f2b06500e16ad4d7f1c2b057903602eed" } -starky = { git = "https://github.com/0xPolygonZero/plonky2.git", rev = "dc77c77f2b06500e16ad4d7f1c2b057903602eed" } +plonky2_util = { git = "https://github.com/0xPolygonZero/plonky2.git", rev = "2488cdacd49ede15737bc1172546d82e9521b79b" } +starky = { git = "https://github.com/0xPolygonZero/plonky2.git", rev = "2488cdacd49ede15737bc1172546d82e9521b79b" } [workspace.lints.clippy] too_long_first_doc_paragraph = "allow" diff --git a/evm_arithmetization/src/all_stark.rs b/evm_arithmetization/src/all_stark.rs index 41f4e13fc..41f4010fe 100644 --- a/evm_arithmetization/src/all_stark.rs +++ b/evm_arithmetization/src/all_stark.rs @@ -106,6 +106,25 @@ pub const NUM_TABLES: usize = if cfg!(feature = "cdk_erigon") { Table::MemAfter as usize + 1 }; +/// Indices of optional Tables +#[cfg(not(feature = "cdk_erigon"))] +pub const OPTIONAL_TABLE_INDICES: [usize; 5] = [ + Table::BytePacking as usize, + Table::Keccak as usize, + Table::KeccakSponge as usize, + Table::Logic as usize, + Table::MemAfter as usize, +]; +#[cfg(feature = "cdk_erigon")] +pub const OPTIONAL_TABLE_INDICES: [usize; 6] = [ + Table::BytePacking as usize, + Table::Keccak as usize, + Table::KeccakSponge as usize, + Table::Logic as usize, + Table::MemAfter as usize, + Table::Poseidon as usize, +]; + impl Table { /// Returns all STARK table indices. pub(crate) const fn all() -> [Self; NUM_TABLES] { @@ -125,6 +144,11 @@ impl Table { } } +/// The total number of CTLs used by the zkEVM. +pub(crate) const NUM_CTLS: usize = if cfg!(feature = "cdk_erigon") { 13 } else { 10 }; +/// The position of the Memory CTL within all CTLs of the zkEVM. +pub(crate) const MEMORY_CTL_IDX: usize = 6; + /// Returns all the `CrossTableLookups` used for proving the EVM. pub(crate) fn all_cross_table_lookups() -> Vec> { vec![ @@ -415,3 +439,17 @@ fn ctl_poseidon_general_output() -> CrossTableLookup { poseidon_stark::ctl_looked_general_output(), ) } + +#[cfg(test)] +mod tests { + use plonky2::field::goldilocks_field::GoldilocksField; + + use super::*; + + type F = GoldilocksField; + + #[test] + fn check_num_ctls() { + assert_eq!(all_cross_table_lookups::().len(), NUM_CTLS); + } +} diff --git a/evm_arithmetization/src/cpu/kernel/asm/cdk_pre_execution.asm b/evm_arithmetization/src/cpu/kernel/asm/cdk_pre_execution.asm index fa8828097..bc1145d63 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/cdk_pre_execution.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/cdk_pre_execution.asm @@ -58,19 +58,18 @@ global update_scalable_l1blockhash: PROVER_INPUT(ger) // stack: l1blockhash?, retdest DUP1 %eq_const(@U256_MAX) %jumpi(skip_and_exit) - // stack: l1blockhash, retdest + PUSH @SEGMENT_KERNEL_GENERAL + // stack: addr, l1blockhash, retdest PUSH @GLOBAL_EXIT_ROOT_STORAGE_POS PROVER_INPUT(ger) - // stack: root, GLOBAL_EXIT_ROOT_STORAGE_POS, l1blockhash, retdest - PUSH @SEGMENT_KERNEL_GENERAL - // stack: addr, root, GLOBAL_EXIT_ROOT_STORAGE_POS, l1blockhash, retdest + // stack: root, GLOBAL_EXIT_ROOT_STORAGE_POS, addr, l1blockhash, retdest + DUP3 + // stack: addr, root, GLOBAL_EXIT_ROOT_STORAGE_POS, addr, l1blockhash, retdest MSTORE_32BYTES_32 - // stack: addr, GLOBAL_EXIT_ROOT_STORAGE_POS, l1blockhash, retdest + // stack: addr', GLOBAL_EXIT_ROOT_STORAGE_POS, addr, l1blockhash, retdest MSTORE_32BYTES_32 - // stack: addr, l1blockhash, retdest - POP - // stack: l1blockhash, retdest - PUSH 64 PUSH @SEGMENT_KERNEL_GENERAL + // stack: addr'', addr, l1blockhash, retdest + %stack (addr_2, addr) -> (addr, 64) // stack: addr, len, l1blockhash, retdest KECCAK_GENERAL // stack: slot, l1blockhash, retdest diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/call.asm b/evm_arithmetization/src/cpu/kernel/asm/core/call.asm index ab8b67c4e..786a13f0c 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/call.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/call.asm @@ -91,7 +91,7 @@ global sys_callcode: (new_ctx, args_offset, args_size, new_ctx, kexit_info, callgas, address, value, args_offset, args_size, ret_offset, ret_size) %copy_mem_to_calldata // stack: new_ctx, kexit_info, callgas, address, value, args_offset, args_size, ret_offset, ret_size - DUP5 %address %address %transfer_eth %jumpi(call_insufficient_balance) + DUP5 %address DUP1 %transfer_eth %jumpi(call_insufficient_balance) // stack: new_ctx, kexit_info, callgas, address, value, args_offset, args_size, ret_offset, ret_size DUP3 %set_new_ctx_gas_limit // stack: new_ctx, kexit_info, callgas, address, value, args_offset, args_size, ret_offset, ret_size @@ -341,7 +341,28 @@ call_too_deep: // stack: new_ctx %endmacro +%macro set_new_ctx_gas_limit_no_check + // stack: gas_limit, new_ctx + DUP2 + %build_address_with_ctx_no_segment(@CTX_METADATA_GAS_LIMIT) + SWAP1 + // stack: gas_limit, addr, new_ctx + MSTORE_GENERAL + // stack: new_ctx +%endmacro + +/// Similar to `set_new_ctx_gas_limit_no_check`, but ensures that the parent +/// context's gas limit is not smaller than the new context's. %macro set_new_ctx_gas_limit + // stack: gas_limit, new_ctx + GET_CONTEXT + %build_address_with_ctx_no_segment(@CTX_METADATA_GAS_LIMIT) + MLOAD_GENERAL + // stack: parent_gas_limit, gas_limit, new_ctx + DUP2 + GT + %jumpi(fault_exception) + // stack: gas_limit, new_ctx DUP2 %build_address_with_ctx_no_segment(@CTX_METADATA_GAS_LIMIT) diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/create.asm b/evm_arithmetization/src/cpu/kernel/asm/core/create.asm index 80f8f4618..758c8b67f 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/create.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/create.asm @@ -127,7 +127,7 @@ run_constructor: // stack: kexit_info, address, new_ctx %drain_all_but_one_64th_gas %stack (kexit_info, drained_gas, address, new_ctx) -> (drained_gas, new_ctx, address, kexit_info) - %set_new_ctx_gas_limit + %set_new_ctx_gas_limit_no_check // stack: new_ctx, address, kexit_info // Create the new contract account in the state trie. diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/exception.asm b/evm_arithmetization/src/cpu/kernel/asm/core/exception.asm index f2a93c542..bea641c2e 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/exception.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/exception.asm @@ -129,13 +129,14 @@ global invalid_jump_jumpi_destination_common: { // We have a jump destination on the stack. We want to `PANIC` if it is valid, and jump to // `fault_exception` if it is not. An address is a valid jump destination if it points to a - // `JUMPDEST` instruction. In practice, since in this implementation memory addresses are - // limited to 32 bits, we check two things: - // 1. the address is no more than 32 bits long, and + // `JUMPDEST` instruction. In practice, we check two things: + // 1. the address is no greater than MAX_CODE_SIZE, and // 2. it points to a `JUMPDEST` instruction. // stack: jump_dest - DUP1 - %shr_const(32) + PUSH @MAX_CODE_SIZE + DUP2 + // stack: jump_dest, max_size, jump_dest + GT // jump_dest > max_size == !(jump_dest <= max_size) %jumpi(fault_exception) // This keeps one copy of jump_dest on the stack, but that's fine. // jump_dest is a valid address; check if it points to a `JUMP_DEST`. DUP1 diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/gas.asm b/evm_arithmetization/src/cpu/kernel/asm/core/gas.asm index 2e16c373e..7b16cbed3 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/gas.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/gas.asm @@ -16,17 +16,7 @@ global sys_gas: %endmacro -// TODO: `%refund_gas` and `refund_gas_hook` are hooks used for debugging. They should be removed at some point and `refund_gas_original` renamed to `refund_gas`. %macro refund_gas - PUSH %%after %jump(refund_gas_hook) -%%after: - %refund_gas_original -%endmacro - -global refund_gas_hook: - JUMP - -%macro refund_gas_original // stack: amount DUP1 %journal_refund %mload_global_metadata(@GLOBAL_METADATA_REFUND_COUNTER) @@ -34,18 +24,8 @@ global refund_gas_hook: %mstore_global_metadata(@GLOBAL_METADATA_REFUND_COUNTER) %endmacro -// TODO: `%charge_gas` and `charge_gas_hook` are hooks used for debugging. They should be removed at some point and `charge_gas_original` renamed to `charge_gas`. -%macro charge_gas - PUSH %%after %jump(charge_gas_hook) -%%after: - %charge_gas_original -%endmacro - -global charge_gas_hook: - JUMP - // Charge gas. Faults if we exceed the limit for the current context. -%macro charge_gas_original +%macro charge_gas // stack: gas, kexit_info %shl_const(192) ADD diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/jumpdest_analysis.asm b/evm_arithmetization/src/cpu/kernel/asm/core/jumpdest_analysis.asm index 2d7c53ee2..842d794a9 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/jumpdest_analysis.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/jumpdest_analysis.asm @@ -114,13 +114,10 @@ code_bytes_to_skip: // c) code[jumpdest] = 0x5b. // To reduce the number of instructions, when i > 32 we load all the bytes code[j], ..., // code[j + 31] in a single 32-byte word, and check a) directly on the packed bytes. -// We perform the "packed verification" computing a boolean formula evaluated on the bits of -// code[j],..., code[j+31] of the form p_1 AND p_2 AND p_3 AND p_4 AND p_5, where: -// - p_k is either TRUE, for one subset of the j's which depends on k (for example, -// for k = 1, it is TRUE for the first 15 positions), or has_prefix_k => bit_{k + 1}_is_0 -// for the j's not in the subset. -// - has_prefix_k is a predicate that is TRUE if and only if code[j] has the same prefix of size k + 2 -// as PUSH{32-(j-i)}. +// We perform the "packed verification" by checking, for every byte, that it's not part +// of the forbidden opcodes. For byte n in {1, 32}, this means: +// - The first three bits are the PUSH prefix 011. +// - The five last bits are > 32 - n. // stack: proof_prefix_addr, jumpdest, ctx, retdest // stack: (empty) global write_table_if_jumpdest: @@ -142,9 +139,8 @@ global write_table_if_jumpdest: // stack: proof_prefix_addr, ctx, jumpdest, retdest - // If we are here we need to check that the next 32 bytes are less - // than JUMPXX for XX < 32 - i <=> opcode < 0x7f - i = 127 - i, 0 <= i < 32, - // or larger than 127 + // If we are here we need to check that the next 32 bytes are not + // PUSHXX for XX > 32 - n, n in {1, 32}. %stack (proof_prefix_addr, ctx) -> @@ -157,137 +153,50 @@ global write_table_if_jumpdest: AND // stack: (is_1_at_pos_2_and_3|(X)⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest // X denotes any value in {0,1} and Z^i is Z repeated i times - NOT - // stack: (is_0_at_2_or_3|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest DUP2 - OR - // stack: (is_1_at_1 or is_0_at_2_or_3|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - // stack: (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - - // Compute in_range and has_prefix' = - // - in_range = (0xFF|X⁷)³² and ~has_prefix' = ~has_prefix OR is_0_at_4, for the first 15 bytes - // - in_range = (has_prefix => is_0_at_4 |X⁷)³² and ~has_prefix' = ~has_prefix, for the next 15 bytes - // - in_range = (~has_prefix|X⁷)³² and ~has_prefix' = ~has_prefix, for the last byte. - DUP2 %shl_const(3) NOT - // stack: (is_0_at_4|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - AND - // stack: (is_0_at_4|X⁷)³¹|0⁸, (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP1 - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 AND - // stack: (is_0_at_4|X⁷)¹⁵|(0⁸)¹⁷, (is_0_at_4|X⁷)³¹|0⁸, (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest + // stack: (is_0_at_pos_1_and_is_1_at_pos_2_and_3|(X)⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest + // stack: (is_push|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest + PUSH 0x8080808080808080808080808080808080808080808080808080808080808080 + // stack: mask, (is_push|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest DUP3 - OR - // (~has_prefix'|X⁷)³², (is_0_at_4|X⁷)³¹|0⁸, (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - SWAP2 - OR - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 - OR - // stack: (in_range|X⁷)³², (~has_prefix'|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - - // Compute in_range' and ~has_prefix as - // - in_range' = in_range and has_prefix' = ~has_prefix OR is_0_at_5, for bytes in positions 1-7 and 16-23 - // - in_range' = in_range AND (has_prefix => is_0_at_5 |X⁷)³² and has_prefix' = ~has_prefix, for the rest. - - DUP3 %shl_const(4) - NOT - // stack: (is_0_at_5|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP1 - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF000000000000000000 - AND - // stack: (is_0_at_5|X⁷)⁷|(0⁸)⁸|(is_0_at_5|X⁷)⁸|(0⁸)⁸, (is_0_at_5|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP4 - OR - // stack: (~has_prefix'|X⁷)³², (is_0_at_5|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - SWAP3 - OR - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF000000000000000000 - OR - AND - // stack: (in_range'|X⁷)³², (~has_prefix'|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - - // Compute in_range' and ~has_prefix' as - // - in_range' = in_range and ~has_prefix' = ~has_prefix OR is_0_at_6, for bytes in positions 1-3, 8-11, 16-19, and 24-27 - // - in_range' = in_range AND (has_prefix => is_0_at_6 |X⁷)³² and ~has_prefix' = has_prefix, for the rest. - DUP3 %shl_const(5) - NOT - // stack: (is_0_at_6|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP1 - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000 - AND - // stack: (is_0_at_6|X⁷)³|(0⁸)⁴|((is_0_at_6|X⁷)⁴|(0⁸)⁴)³, (is_0_at_6|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP4 - OR - // stack: (~has_prefix'|X⁷)³², (is_0_at_6|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - SWAP3 - OR - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000000000 - OR + %and_const(0x1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F) + // stack: (000|X⁵)³², mask, (is_push|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest + // For opcode PUSHXX, the right-most 5 bits contain XX - 1. + // Ignoring the first 3 bits of prefix, the first opcode must NOT be PUSH32, the second opcode + // must NOT be PUSH31 or PUSH32 [...], the 32-th opcode must NOT be a PUSH. + // We can check it by adding the trimmed opcodes with a certain value such that the addition overflows iff + // the five bits of an opcode are forbidden: + // 000xxxxx|000xxxxx|...|000xxxxx|000xxxxx + // + 00000001|00000010|...|00011111|00100000 + // For e.g. the first opcode, the addition will overflow iff xxxxx = 0b11111 = 0d31. + // For the last opcode, since any PUSHXX operation is forbidden, the overflow bit is set manually. + // Note that since the result of a five-bit addition will always use at most six bits, the overflow bit will always be + // bit number 3, and all opcodes are checked in parallel without overflowing into each other. + %add_const(0x0102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20) + %shl_const(2) + // stack: (is_overflow|(X)⁷)³², mask, (is_push|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest + DUP2 AND - // stack: (in_range'|X⁷)³², (~has_prefix'|X⁷)³², (in_range|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - - // Compute in_range' and ~has_prefix' as - // - in_range' = in_range and ~has_prefix' = has_prefix OR is_0_at_7, for bytes in 1, 4-5, 8-9, 12-13, 16-17, 20-21, 24-25, 28-29 - // - in_range' = in_range AND (has_prefix => is_0_at_7 |X⁷)³² and ~has_prefix' = ~has_prefix, for the rest. - DUP3 %shl_const(6) - NOT - // stack: (is_0_at_7|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP1 - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000 + // stack: (is_overflow|0⁷)³², mask, (is_push|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest + SWAP2 AND - // stack: is_0_at_7|X⁷|(0⁸)²|((is_0_at_7|X⁷)²|(0⁸)²)⁷, (is_0_at_7|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP4 - OR - // (~has_prefix'|X⁷)³², (is_0_at_7|X⁷)³², (in_range|X⁷)³², (~has_prefix|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - SWAP3 - OR - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0xFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000 - OR + // stack: (is_push|0⁷)³², (is_overflow|0⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest AND - // stack: (in_range'|X⁷)³², (~has_prefix'|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest + // stack: (is_forbidden_opcode|0⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - // Compute in_range' as - // - in_range' = in_range, for odd positions - // - in_range' = in_range AND (has_prefix => is_0_at_8 |X⁷)³², for the rest - - SWAP1 - // stack: (~has_prefix|X⁷)³², (in_range|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - DUP3 %shl_const(7) - NOT - // stack: (is_0_at_8|X⁷)³², (~has_prefix|X⁷)³², (in_range|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - OR - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF - OR - AND - // stack: (in_range|X⁷)³², packed_opcodes, proof_prefix_addr, ctx, jumpdest, retdest - - // Get rid of the irrelevant bits - // pos 0102030405060708091011121314151617181920212223242526272829303132 - PUSH 0x8080808080808080808080808080808080808080808080808080808080808080 - AND // If we received a proof it MUST be valid or we abort immediately. This // is especially important for non-jumpdest proofs. Otherwise a malicious // prover might mark a valid jumpdest as invalid by providing an invalid proof // that makes verify_non_jumpdest return prematurely. - %assert_eq_const(0x8080808080808080808080808080808080808080808080808080808080808080) + %jumpi(panic) POP %add_const(32) // check the remaining path %jump(verify_path_and_write_jumpdest_table) - POP + return: // stack: proof_prefix_addr, ctx, jumpdest, retdest // or diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/blake2_f.asm b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/blake2_f.asm index 8ad0e5c44..f8b4c8314 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/blake2_f.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/blake2_f.asm @@ -75,47 +75,39 @@ global precompile_blake2_f: SWAP1 // stack: t0_addr = m0_addr + 8 * 16, t_0, t_1, flag, blake2_f_contd, kexit_info + %sub_const(8) + // stack: m0_addr + 8 * (16 - 1), t_0, t_1, flag, blake2_f_contd, kexit_info + + PUSH @SEGMENT_CALLDATA + GET_CONTEXT + %build_address_no_offset + %rep 16 - // stack: m0_addr + 8 * (16 - i), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - %sub_const(8) - // stack: m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - DUP1 - // stack: m0_addr + 8 * (16 - i - 1), m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - PUSH @SEGMENT_CALLDATA - // stack: @SEGMENT_CALLDATA, m0_addr + 8 * (16 - i - 1), m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, m0_addr + 8 * (16 - i - 1), m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - %build_address + // stack: base_addr, m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + DUP2 DUP2 + // stack: base_addr, m0_addr + 8 * (16 - i - 1), base_addr, m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + ADD // base_addr + offset %mload_packing_u64_LE - // stack: m_i, m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - SWAP1 - // stack: m0_addr + 8 * (16 - i - 1), m_i, m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + // stack: m_i, base_addr, m0_addr + 8 * (16 - i - 1), m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + SWAP2 %sub_const(8) SWAP1 + // stack: base_addr, m0_addr + 8 * (16 - i - 2), m_i, m_(i+1), ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info %endrep - // stack: m0_addr = h0_addr + 8 * 8, m_0, ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + // stack: base_addr, m0_addr = h0_addr + 8 * 8, m_0, ..., m_15, t_0, t_1, flag, blake2_f_contd, kexit_info %rep 8 - // stack: h0_addr + 8 * (8 - i), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - %sub_const(8) - // stack: h0_addr + 8 * (8 - i - 1), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - DUP1 - // stack: h0_addr + 8 * (8 - i), h0_addr + 8 * (8 - i), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - PUSH @SEGMENT_CALLDATA - // stack: @SEGMENT_CALLDATA, h0_addr + 8 * (8 - i), h0_addr + 8 * (8 - i), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, h0_addr + 8 * (8 - i), h0_addr + 8 * (8 - i), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - %build_address + // stack: base_addr, h0_addr + 8 * (8 - i - 1), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + DUP2 DUP2 + // stack: base_addr, h0_addr + 8 * (8 - i - 1), base_addr, h0_addr + 8 * (8 - i), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + ADD // base_addr + offset %mload_packing_u64_LE - // stack: h_i, h0_addr + 8 * (8 - i), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - SWAP1 - // stack: h0_addr + 8 * (8 - i), h_i, h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + // stack: h_i, base_addr, h0_addr + 8 * (8 - i - 1), h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + SWAP2 %sub_const(8) SWAP1 + // stack: base_addr, h0_addr + 8 * (8 - i - 1), h_i, h_(i+1), ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info %endrep - // stack: h0_addr + 8 * 8 = 68, h_0, ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - POP - - %stack () -> (@SEGMENT_CALLDATA, 4) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 4, h_0..h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info - %build_address_no_offset + // stack: base_addr, garbage, h_0, ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info + + PUSH 4 SWAP2 POP + // stack: base_addr, 4, h_0, ..., h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info MLOAD_32BYTES // stack: rounds, h_0..h_7, m_0..m_15, t_0, t_1, flag, blake2_f_contd, kexit_info diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_add.asm b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_add.asm index 43414e859..038e63a90 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_add.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_add.asm @@ -14,50 +14,47 @@ global precompile_bn_add: %charge_gas_const(@BN_ADD_GAS) + GET_CONTEXT + PUSH @SEGMENT_CALLDATA + %build_address_no_offset + // stack: base_addr, kexit_info + // Load x0, y0, x1, y1 from the call data using `MLOAD_32BYTES`. PUSH bn_add_return - // stack: bn_add_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 96, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 96, 32, bn_add_return, kexit_info - %build_address + // stack: bn_add_return, base_addr, kexit_info + %stack (bn_add_return, base_addr) -> (base_addr, 96, 32, bn_add_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: y1, bn_add_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 64, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 64, 32, y1, bn_add_return, kexit_info - %build_address + // stack: y1, bn_add_return, base_addr, kexit_info + %stack (y1, bn_add_return, base_addr) -> (base_addr, 64, 32, y1, bn_add_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: x1, y1, bn_add_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 32, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 32, 32, x1, y1, bn_add_return, kexit_info - %build_address + // stack: x1, y1, bn_add_return, base_addr, kexit_info + %stack (x1, y1, bn_add_return, base_addr) -> (base_addr, 32, 32, x1, y1, bn_add_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: y0, x1, y1, bn_add_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 32, y0, x1, y1, bn_add_return, kexit_info - %build_address_no_offset + // stack: y0, x1, y1, bn_add_return, base_addr, kexit_info + %stack (y0, x1, y1, bn_add_return, base_addr) -> (base_addr, 32, y0, x1, y1, bn_add_return, base_addr) MLOAD_32BYTES - // stack: x0, y0, x1, y1, bn_add_return, kexit_info + // stack: x0, y0, x1, y1, bn_add_return, base_addr, kexit_info %jump(bn_add) bn_add_return: - // stack: x, y, kexit_info + // stack: x, y, base_addr, kexit_info DUP2 %eq_const(@U256_MAX) // bn_add returns (U256_MAX, U256_MAX) on bad input. DUP2 %eq_const(@U256_MAX) // bn_add returns (U256_MAX, U256_MAX) on bad input. MUL // Cheaper than AND %jumpi(fault_exception) - // stack: x, y, kexit_info + // stack: x, y, base_addr, kexit_info // Store the result (x, y) to the parent's return data using `mstore_unpacking`. %mstore_parent_context_metadata(@CTX_METADATA_RETURNDATA_SIZE, 64) %mload_context_metadata(@CTX_METADATA_PARENT_CONTEXT) - %stack (parent_ctx, x, y) -> (parent_ctx, @SEGMENT_RETURNDATA, x, parent_ctx, y) + %stack (parent_ctx, x, y) -> (parent_ctx, @SEGMENT_RETURNDATA, x, y) %build_address_no_offset + // stack: addr_x, x, y, base_addr, kexit_info MSTORE_32BYTES_32 - POP - %stack (parent_ctx, y) -> (parent_ctx, @SEGMENT_RETURNDATA, 32, y) - %build_address + // stack: addr_y = addr_x + 32, y, base_addr, kexit_info MSTORE_32BYTES_32 + // stack: addr, base_addr, kexit_info + POP %jump(pop_and_return_success) diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_mul.asm b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_mul.asm index c29080166..62a25d153 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_mul.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/bn_mul.asm @@ -14,30 +14,28 @@ global precompile_bn_mul: %charge_gas_const(@BN_MUL_GAS) + GET_CONTEXT + PUSH @SEGMENT_CALLDATA + %build_address_no_offset + // stack: base_addr, kexit_info + // Load x, y, n from the call data using `MLOAD_32BYTES`. PUSH bn_mul_return - // stack: bn_mul_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 64, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 64, 32, bn_mul_return, kexit_info - %build_address + // stack: bn_mul_return, base_addr, kexit_info + %stack (bn_mul_return, base_addr) -> (base_addr, 64, 32, bn_mul_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: n, bn_mul_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 32, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 32, 32, n, bn_mul_return, kexit_info - %build_address + // stack: n, bn_mul_return, base_addr, kexit_info + %stack (n, bn_mul_return, base_addr) -> (base_addr, 32, 32, n, bn_mul_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: y, n, bn_mul_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 32, y, n, bn_mul_return, kexit_info - %build_address_no_offset + // stack: y, n, bn_mul_return, base_addr, kexit_info + %stack (y, n, bn_mul_return, base_addr) -> (base_addr, 32, y, n, bn_mul_return, base_addr) MLOAD_32BYTES - // stack: x, y, n, bn_mul_return, kexit_info + // stack: x, y, n, bn_mul_return, base_addr, kexit_info %jump(bn_mul) bn_mul_return: - // stack: Px, Py, kexit_info + // stack: Px, Py, base_addr, kexit_info DUP2 %eq_const(@U256_MAX) // bn_mul returns (U256_MAX, U256_MAX) on bad input. DUP2 %eq_const(@U256_MAX) // bn_mul returns (U256_MAX, U256_MAX) on bad input. MUL // Cheaper than AND @@ -55,4 +53,6 @@ bn_mul_contd6: %stack (parent_ctx, Py) -> (parent_ctx, @SEGMENT_RETURNDATA, 32, Py) %build_address MSTORE_32BYTES_32 + // stack: addr, base_addr, kexit_info + POP %jump(pop_and_return_success) diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/ecrec.asm b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/ecrec.asm index 4a27ca75b..8f3c30f7d 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/ecrec.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/ecrec.asm @@ -14,36 +14,33 @@ global precompile_ecrec: %charge_gas_const(@ECREC_GAS) + GET_CONTEXT + PUSH @SEGMENT_CALLDATA + %build_address_no_offset + // stack: base_addr, kexit_info + // Load hash, v, r, s from the call data using `MLOAD_32BYTES`. PUSH ecrec_return - // stack: ecrec_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 96, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 96, 32, ecrec_return, kexit_info - %build_address + // stack: ecrec_return, base_addr, kexit_info + + %stack (ecrec_return, base_addr) -> (base_addr, 96, 32, ecrec_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: s, ecrec_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 64, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 64, 32, s, ecrec_return, kexit_info - %build_address + // stack: s, ecrec_return, base_addr, kexit_info + %stack (s, ecrec_return, base_addr) -> (base_addr, 64, 32, s, ecrec_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: r, s, ecrec_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 32, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 32, 32, r, s, ecrec_return, kexit_info - %build_address + // stack: r, s, ecrec_return, base_addr, kexit_info + %stack (r, s, ecrec_return, base_addr) -> (base_addr, 32, 32, r, s, ecrec_return, base_addr) + ADD // base_addr + offset MLOAD_32BYTES - // stack: v, r, s, ecrec_return, kexit_info - %stack () -> (@SEGMENT_CALLDATA, 32) - GET_CONTEXT - // stack: ctx, @SEGMENT_CALLDATA, 32, v, r, s, ecrec_return, kexit_info - %build_address_no_offset + // stack: v, r, s, ecrec_return, base_addr, kexit_info + %stack (v, r, s, ecrec_return, base_addr) -> (base_addr, 32, v, r, s, ecrec_return, base_addr) MLOAD_32BYTES - // stack: hash, v, r, s, ecrec_return, kexit_info + // stack: hash, v, r, s, ecrec_return, base_addr, kexit_info %jump(ecrecover) ecrec_return: - // stack: address, kexit_info + // stack: address, base_addr, kexit_info DUP1 %eq_const(@U256_MAX) %jumpi(ecrec_bad_input) // ecrecover returns U256_MAX on bad input. // Store the result address to the parent's return data using `mstore_unpacking`. @@ -52,9 +49,13 @@ ecrec_return: %stack (parent_ctx, address) -> (parent_ctx, @SEGMENT_RETURNDATA, address) %build_address_no_offset MSTORE_32BYTES_32 + // stack: addr, base_addr, kexit_info + POP %jump(pop_and_return_success) // On bad input, return empty return data but still return success. ecrec_bad_input: %mstore_parent_context_metadata(@CTX_METADATA_RETURNDATA_SIZE, 0) + // stack: addr, base_addr, kexit_info + POP %jump(pop_and_return_success) diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/expmod.asm b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/expmod.asm index 1dc7841b5..684c80810 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/expmod.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/expmod.asm @@ -85,7 +85,7 @@ store_limbs_return: %macro expmod_gas_f // stack: x // Overflow check - DUP1 %ge_const(0x800000000000000000000000000000007) %jumpi(fault_exception) + DUP1 %gt_const(0x800000000000000000000000000000006) %jumpi(fault_exception) // stack: x %ceil_div_const(8) // stack: ceil(x/8) @@ -100,7 +100,7 @@ calculate_l_E_prime: DUP1 %gt_const(0x100000000000000000000000000000000) %jumpi(fault_exception) DUP1 ISZERO %jumpi(case_le_zero) // stack: l_E, l_B, retdest - DUP1 %le_const(32) + DUP1 %lt_const(33) // stack: l_E <= 32, l_E, l_B, retdest %jumpi(case_le_32) // stack: l_E, l_B, retdest @@ -121,7 +121,7 @@ calculate_l_E_prime: // stack: l_E, log2(i[96 + l_B..128 + l_B]), l_B, retdest %sub_const(32) // Overflow check - DUP1 %ge_const(0x2000000000000000000000000000000000000000000000000000000000000000) %jumpi(fault_exception) + DUP1 %gt_const(0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) %jumpi(fault_exception) %mul_const(8) // stack: 8 * (l_E - 32), log2(i[96 + l_B..128 + l_B]), l_B, retdest ADD diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/main.asm b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/main.asm index 1f1aa5af5..d29bff2e1 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/main.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/precompiles/main.asm @@ -60,7 +60,7 @@ global handle_precompiles_from_eoa: // stack: addr, retdest %create_context // stack: new_ctx, addr, retdest - %non_intrinsic_gas %set_new_ctx_gas_limit + %non_intrinsic_gas %set_new_ctx_gas_limit_no_check // stack: new_ctx, addr, retdest // Set calldatasize and copy txn data to calldata. diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/process_txn.asm b/evm_arithmetization/src/cpu/kernel/asm/core/process_txn.asm index 6a006ef71..28252d012 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/process_txn.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/process_txn.asm @@ -175,7 +175,7 @@ global process_contract_creation_txn_after_code_loaded: %mload_txn_field(@TXN_FIELD_VALUE) %set_new_ctx_value %set_new_ctx_parent_ctx %set_new_ctx_parent_pc(process_contract_creation_txn_after_constructor) - %non_intrinsic_gas %set_new_ctx_gas_limit + %non_intrinsic_gas %set_new_ctx_gas_limit_no_check // stack: new_ctx, address, retdest %enter_new_ctx @@ -188,11 +188,15 @@ global process_contract_creation_txn_after_constructor: ISZERO %jumpi(contract_creation_fault_3) - // EIP-3541: Reject new contract code starting with the 0xEF byte + // EIP-3541: Reject new contract code starting with the 0xEF byte, if code_size > 0 + %returndatasize // size of the code + DUP1 ISZERO + // stack: code_size == 0, code_size, leftover_gas, new_ctx, address, retdest, success + %jumpi(process_contract_creation_txn_after_ef_check) + // stack: code_size, leftover_gas, new_ctx, address, retdest, success PUSH 0 %mload_current(@SEGMENT_RETURNDATA) %eq_const(0xEF) %jumpi(contract_creation_fault_3_zero_leftover) - // stack: leftover_gas, new_ctx, address, retdest, success - %returndatasize // Size of the code. +process_contract_creation_txn_after_ef_check: // stack: code_size, leftover_gas, new_ctx, address, retdest, success DUP1 %gt_const(@MAX_CODE_SIZE) %jumpi(contract_creation_fault_4) // stack: code_size, leftover_gas, new_ctx, address, retdest, success @@ -246,6 +250,8 @@ global process_message_txn: // stack: code_empty, retdest %jumpi(process_message_txn_return) + %checkpoint + // Otherwise, load to's code and execute it in a new context. // stack: retdest %create_context @@ -288,7 +294,7 @@ global process_message_txn_code_loaded: %mload_txn_field(@TXN_FIELD_VALUE) %set_new_ctx_value %set_new_ctx_parent_ctx %set_new_ctx_parent_pc(process_message_txn_after_call) - %non_intrinsic_gas %set_new_ctx_gas_limit + %non_intrinsic_gas %set_new_ctx_gas_limit_no_check // stack: new_ctx, retdest // Set calldatasize and copy txn data to calldata. @@ -321,7 +327,10 @@ process_message_txn_after_call_contd: process_message_txn_fail: // stack: leftover_gas, new_ctx, retdest, success, leftover_gas - // Transfer value back to the caller. + + // Revert txn execution, then transfer value back to the caller. + %revert_checkpoint + %mload_txn_field(@TXN_FIELD_VALUE) ISZERO %jumpi(process_message_txn_after_call_contd) %mload_txn_field(@TXN_FIELD_VALUE) %mload_txn_field(@TXN_FIELD_ORIGIN) @@ -482,8 +491,8 @@ contract_creation_fault_3: contract_creation_fault_3_zero_leftover: %revert_checkpoint - // stack: leftover_gas, new_ctx, address, retdest, success - %pop3 + // stack: code_size, leftover_gas, new_ctx, address, retdest, success + %pop4 PUSH 0 // leftover gas // stack: leftover_gas, retdest, success %pay_coinbase_and_refund_sender diff --git a/evm_arithmetization/src/cpu/kernel/asm/core/terminate.asm b/evm_arithmetization/src/cpu/kernel/asm/core/terminate.asm index 1d406097c..2e3482ea3 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/core/terminate.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/core/terminate.asm @@ -193,7 +193,7 @@ revert_after_gas: %stack (addr, size, parent_ctx, kexit_info) -> ( parent_ctx, @SEGMENT_RETURNDATA, // DST - addr, // SRC + addr, // SRC size, sys_revert_finish, kexit_info // count, retdest, ... ) %build_address_no_offset diff --git a/evm_arithmetization/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/glv.asm b/evm_arithmetization/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/glv.asm index 32eb5b6c1..fea966f8b 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/glv.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/glv.asm @@ -76,7 +76,7 @@ global bn_glv_decompose: // along with a flag `underflow` set to 1 if there is an underflow, 0 otherwise. ADD %bn_sub_check_underflow // stack: k2, underflow, N, k, retdest - DUP1 %ge_const(0x80000000000000000000000000000000) %jumpi(negate) + DUP1 %gt_const(0x7fffffffffffffffffffffffffffffff) %jumpi(negate) %jump(contd) negate: // stack: k2, underflow, N, k, retdest diff --git a/evm_arithmetization/src/cpu/kernel/asm/curve/secp256k1/curve_add.asm b/evm_arithmetization/src/cpu/kernel/asm/curve/secp256k1/curve_add.asm index f1385de56..132beac0b 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/curve/secp256k1/curve_add.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/curve/secp256k1/curve_add.asm @@ -99,11 +99,11 @@ secp_add_valid_points_with_lambda: // stack: N, lambda, x0, y0, x1, y1, retdest DUP3 // stack: x0, N, lambda, x0, y0, x1, y1, retdest - %secp_base + DUP2 // stack: N, x0, N, lambda, x0, y0, x1, y1, retdest DUP7 // stack: x1, N, x0, N, lambda, x0, y0, x1, y1, retdest - %secp_base + DUP2 // stack: N, x1, N, x0, N, lambda, x0, y0, x1, y1, retdest DUP6 // stack: lambda, N, x1, N, x0, N, lambda, x0, y0, x1, y1, retdest @@ -117,7 +117,7 @@ secp_add_valid_points_with_lambda: // stack: x2, lambda, x0, y0, x1, y1, retdest // Compute y2 = lambda*(x1 - x2) - y1 - %secp_base %secp_base %secp_base // Pre-load moduli for incoming SUBMODs + %secp_base DUP1 DUP1 // Pre-load moduli for incoming SUBMODs // stack: N, N, N, x2, lambda, x0, y0, x1, y1, retdest DUP4 // stack: x2, N, N, N, x2, lambda, x0, y0, x1, y1, retdest @@ -244,11 +244,11 @@ global secp_double: // stack: x, y, (y < N) & (x < N) %secp_base // stack: N, x, y, b - %secp_base + DUP1 // stack: N, N, x, y, b DUP3 // stack: x, N, N, x, y, b - %secp_base + DUP2 // stack: N, x, N, N, x, y, b DUP2 // stack: x, N, x, N, N, x, y, b diff --git a/evm_arithmetization/src/cpu/kernel/asm/hash/blake2/blake2_f.asm b/evm_arithmetization/src/cpu/kernel/asm/hash/blake2/blake2_f.asm index d1a4a2ab6..aa9951997 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/hash/blake2/blake2_f.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/hash/blake2/blake2_f.asm @@ -35,13 +35,15 @@ global blake2_f: %add_const(7) %rep 8 // stack: addr, ... - DUP1 - // stack: addr, addr, ... + PUSH 1 + // stack: 1, addr, ... + DUP2 + // stack: addr, 1, addr, ... MLOAD_GENERAL - // stack: val, addr, ... - SWAP1 - // stack: addr, val, ... - %decrement + // stack: val, 1, addr, ... + SWAP2 + // stack: addr, 1, val, ... + SUB %endrep // stack: addr, h_0, ..., h_7, rounds, t0, t1, flag, retdest POP @@ -66,16 +68,18 @@ global blake2_f: %rep 4 // stack: i, addr, ... DUP2 + // stack: addr, i, addr, ... + %increment + // stack: addr + 1, i, addr, ... + SWAP2 + // stack: addr, i, addr + 1, ... DUP2 - // stack: i, addr, i, addr, ... + // stack: i, addr, i, addr + 1, ... %blake2_iv - // stack: IV_i, addr, i, addr, ... + // stack: IV_i, addr, i, addr + 1, ... MSTORE_GENERAL - // stack: i, addr, ... + // stack: i, addr + 1, ... %increment - SWAP1 - %increment - SWAP1 // stack: i + 1, addr + 1,... %endrep // stack: 4, start + 12, rounds, t0, t1, flag, retdest diff --git a/evm_arithmetization/src/cpu/kernel/asm/main.asm b/evm_arithmetization/src/cpu/kernel/asm/main.asm index e72c20ee6..cb170ef24 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/main.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/main.asm @@ -130,14 +130,14 @@ global start_txns: #[cfg(feature = eth_mainnet)] { // If txn_idx == 0, update the beacon_root for Ethereum mainnet. - %mload_global_metadata(@GLOBAL_METADATA_TXN_NUMBER_BEFORE) + DUP4 ISZERO %jumpi(set_beacon_root) } #[cfg(feature = cdk_erigon)] { // If txn_idx == 0, perform pre-state execution for CDK erigon. - %mload_global_metadata(@GLOBAL_METADATA_TXN_NUMBER_BEFORE) + DUP4 ISZERO %jumpi(pre_block_execution) } @@ -258,6 +258,7 @@ global check_final_state_trie: %macro reinitialize_memory_pre_txn // Reinitialize accessed addresses and storage keys lists %init_access_lists + PUSH 0 %mstore_global_metadata(@GLOBAL_METADATA_TOUCHED_ADDRESSES_LEN) // Reinitialize transient storage %init_transient_storage_len @@ -272,6 +273,7 @@ global check_final_state_trie: PUSH 0 %mstore_global_metadata(@GLOBAL_METADATA_JOURNAL_DATA_LEN) PUSH 0 %mstore_global_metadata(@GLOBAL_METADATA_REFUND_COUNTER) PUSH 0 %mstore_global_metadata(@GLOBAL_METADATA_SELFDESTRUCT_LIST_LEN) + PUSH 0 %mstore_global_metadata(@GLOBAL_METADATA_CREATED_CONTRACTS_LEN) // Reinitialize `chain_id` for legacy transactions and `to` transaction field PUSH 0 %mstore_txn_field(@TXN_FIELD_CHAIN_ID_PRESENT) diff --git a/evm_arithmetization/src/cpu/kernel/asm/memory/syscalls.asm b/evm_arithmetization/src/cpu/kernel/asm/memory/syscalls.asm index 3e3d43f1f..d2148de91 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/memory/syscalls.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/memory/syscalls.asm @@ -102,7 +102,8 @@ calldataload_large_offset: // stack: kexit_info, dest_offset, offset, size GET_CONTEXT PUSH $segment - // stack: segment, context, kexit_info, dest_offset, offset, size + %build_address_no_offset + // stack: base_addr, kexit_info, dest_offset, offset, size %jump(wcopy_within_bounds) %endmacro @@ -130,12 +131,11 @@ codecopy_within_bounds: %jump(memcpy_bytes) wcopy_within_bounds: - // TODO: rework address creation to have less stack manipulation overhead - // stack: segment, src_ctx, kexit_info, dest_offset, offset, size + // stack: base_addr, kexit_info, dest_offset, offset, size GET_CONTEXT - %stack (context, segment, src_ctx, kexit_info, dest_offset, offset, size) -> - (src_ctx, segment, offset, @SEGMENT_MAIN_MEMORY, dest_offset, context, size, wcopy_after, kexit_info) - %build_address + %stack (context, base_addr, kexit_info, dest_offset, offset, size) -> + (base_addr, offset, @SEGMENT_MAIN_MEMORY, dest_offset, context, size, wcopy_after, kexit_info) + ADD // SRC SWAP3 %build_address // stack: DST, SRC, size, wcopy_after, kexit_info %jump(memcpy_bytes) @@ -287,24 +287,26 @@ global sys_mcopy: // stack: kexit_info, dest_offset, offset, size GET_CONTEXT PUSH @SEGMENT_MAIN_MEMORY + %build_address_no_offset - DUP5 DUP5 LT - // stack: dest_offset < offset, kexit_info, dest_offset, offset, size + DUP4 DUP4 LT + // stack: dest_offset < offset, base_addr, kexit_info, dest_offset, offset, size %jumpi(wcopy_within_bounds) - // stack: segment, context, kexit_info, dest_offset, offset, size - DUP6 PUSH 32 %min - // stack: shift=min(size, 32), segment, context, kexit_info, dest_offset, offset, size - DUP6 DUP8 ADD - // stack: offset + size, shift, segment, context, kexit_info, dest_offset, offset, size - DUP6 LT - // stack: dest_offset < offset + size, shift, segment, context, kexit_info, dest_offset, offset, size + // stack: base_addr, kexit_info, dest_offset, offset, size + + DUP5 PUSH 32 %min + // stack: shift=min(size, 32), base_addr, kexit_info, dest_offset, offset, size + DUP5 DUP7 ADD + // stack: offset + size, shift, base_addr, kexit_info, dest_offset, offset, size + DUP5 LT + // stack: dest_offset < offset + size, shift, base_addr, kexit_info, dest_offset, offset, size DUP2 - // stack: shift, dest_offset < offset + size, shift, segment, context, kexit_info, dest_offset, offset, size - DUP9 GT - // stack: size > shift, dest_offset < offset + size, shift, segment, context, kexit_info, dest_offset, offset, size + // stack: shift, dest_offset < offset + size, shift, base_addr, kexit_info, dest_offset, offset, size + DUP8 GT + // stack: size > shift, dest_offset < offset + size, shift, base_addr, kexit_info, dest_offset, offset, size MUL // AND - // stack: (size > shift) && (dest_offset < offset + size), shift, segment, context, kexit_info, dest_offset, offset, size + // stack: (size > shift) && (dest_offset < offset + size), shift, base_addr, kexit_info, dest_offset, offset, size // If the conditions `size > shift` and `dest_offset < offset + size` are satisfied, that means // we will get an overlap that will overwrite some SRC data. In that case, we will proceed to the @@ -313,7 +315,7 @@ global sys_mcopy: // Otherwise, we either have `SRC` < `DST`, or a small enough `size` that a single loop of // `memcpy_bytes` suffices and does not risk to overwrite `SRC` data before being read. - // stack: shift, segment, context, kexit_info, dest_offset, offset, size + // stack: shift, base_addr, kexit_info, dest_offset, offset, size POP %jump(wcopy_within_bounds) @@ -323,24 +325,22 @@ mcopy_with_overlap: // For this, we need to update `offset` and `dest_offset` to their final position, corresponding // to `x + size - min(32, size)`. - // stack: shift=min(size, 32), segment, context, kexit_info, dest_offset, offset, size + // stack: shift=min(size, 32), base_addr, kexit_info, dest_offset, offset, size DUP1 - // stack: shift, shift, segment, context, kexit_info, dest_offset, offset, size - DUP8 DUP8 ADD - // stack: offset+size, shift, shift, segment, context, kexit_info, dest_offset, offset, size + // stack: shift, shift, base_addr, kexit_info, dest_offset, offset, size + DUP7 DUP7 ADD + // stack: offset+size, shift, shift, base_addr, kexit_info, dest_offset, offset, size SUB - // stack: offset'=offset+size-shift, shift, segment, context, kexit_info, dest_offset, offset, size - SWAP5 DUP8 ADD - // stack: dest_offset+size, shift, segment, context, kexit_info, offset', offset, size + // stack: offset'=offset+size-shift, shift, base_addr, kexit_info, dest_offset, offset, size + SWAP4 DUP7 ADD + // stack: dest_offset+size, shift, base_addr, kexit_info, offset', offset, size SUB - // stack: dest_offset'=dest_offset+size-shift, segment, context, kexit_info, offset', offset, size + // stack: dest_offset'=dest_offset+size-shift, base_addr, kexit_info, offset', offset, size - %stack (next_dst_offset, segment, context, kexit_info, new_offset, offset, size) -> - (context, segment, new_offset, segment, next_dst_offset, context, size, wcopy_after, kexit_info) - %build_address // SRC - SWAP3 - %build_address // DST - // stack: DST, SRC, size, wcopy_after, kexit_info + DUP2 ADD // DST + // stack: DST, base_addr, kexit_info, new_offset, offset, size + SWAP3 ADD // SRC + %stack (SRC, kexit_info, DST, offset, size) -> (DST, SRC, size, wcopy_after, kexit_info) %jump(memcpy_bytes_backwards) mcopy_empty: diff --git a/evm_arithmetization/src/cpu/kernel/asm/mpt/hex_prefix.asm b/evm_arithmetization/src/cpu/kernel/asm/mpt/hex_prefix.asm index 0ca2458f0..3e8a783ab 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/mpt/hex_prefix.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/mpt/hex_prefix.asm @@ -6,7 +6,7 @@ // Pre stack: rlp_start_addr, num_nibbles, packed_nibbles, terminated, retdest // Post stack: rlp_end_addr global hex_prefix_rlp: - DUP2 %assert_lt_const(65) + DUP2 %assert_le_const(64) PUSH 2 DUP3 DIV // Compute the length of the hex-prefix string, in bytes: diff --git a/evm_arithmetization/src/cpu/kernel/asm/signed.asm b/evm_arithmetization/src/cpu/kernel/asm/signed.asm index 566d7d5ae..a9e9e3648 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/signed.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/signed.asm @@ -131,11 +131,12 @@ global _sys_sar: // Now assume shift < 256. // Stack: shift, value, return_info PUSH 0x8000000000000000000000000000000000000000000000000000000000000000 - DUP2 + DUP1 + DUP3 SHR - // Stack: 2^255 >> shift, shift, value, return_info - SWAP2 - %add_const(0x8000000000000000000000000000000000000000000000000000000000000000) + // Stack: 2^255 >> shift, 0x8000000000000000000000000000000000000000000000000000000000000000, shift, value, return_info + SWAP3 + ADD // Stack: 2^255 + value, shift, 2^255 >> shift, return_info SWAP1 SHR diff --git a/evm_arithmetization/src/cpu/kernel/asm/util/basic_macros.asm b/evm_arithmetization/src/cpu/kernel/asm/util/basic_macros.asm index 395852810..657ee9760 100644 --- a/evm_arithmetization/src/cpu/kernel/asm/util/basic_macros.asm +++ b/evm_arithmetization/src/cpu/kernel/asm/util/basic_macros.asm @@ -174,7 +174,7 @@ PUSH $c // stack: c, input, ... LT // Check it backwards: (input > c) == (c < input) - // stack: input >= c, ... + // stack: input > c, ... %endmacro %macro ge_const(c) diff --git a/evm_arithmetization/src/cpu/kernel/constants/global_metadata.rs b/evm_arithmetization/src/cpu/kernel/constants/global_metadata.rs index 49fa18d78..1839ec33d 100644 --- a/evm_arithmetization/src/cpu/kernel/constants/global_metadata.rs +++ b/evm_arithmetization/src/cpu/kernel/constants/global_metadata.rs @@ -65,8 +65,6 @@ pub(crate) enum GlobalMetadata { AccessedStorageKeysLen, /// Length of the self-destruct list. SelfDestructListLen, - /// Length of the bloom entry buffer. - BloomEntryLen, /// Length of the journal. JournalLen, @@ -118,7 +116,7 @@ pub(crate) enum GlobalMetadata { } impl GlobalMetadata { - pub(crate) const COUNT: usize = 55; + pub(crate) const COUNT: usize = 54; /// Unscales this virtual offset by their respective `Segment` value. pub(crate) const fn unscale(&self) -> usize { @@ -157,7 +155,6 @@ impl GlobalMetadata { Self::AccessedAddressesLen, Self::AccessedStorageKeysLen, Self::SelfDestructListLen, - Self::BloomEntryLen, Self::JournalLen, Self::JournalDataLen, Self::CurrentCheckpoint, @@ -219,7 +216,6 @@ impl GlobalMetadata { Self::AccessedAddressesLen => "GLOBAL_METADATA_ACCESSED_ADDRESSES_LEN", Self::AccessedStorageKeysLen => "GLOBAL_METADATA_ACCESSED_STORAGE_KEYS_LEN", Self::SelfDestructListLen => "GLOBAL_METADATA_SELFDESTRUCT_LIST_LEN", - Self::BloomEntryLen => "GLOBAL_METADATA_BLOOM_ENTRY_LEN", Self::JournalLen => "GLOBAL_METADATA_JOURNAL_LEN", Self::JournalDataLen => "GLOBAL_METADATA_JOURNAL_DATA_LEN", Self::CurrentCheckpoint => "GLOBAL_METADATA_CURRENT_CHECKPOINT", diff --git a/evm_arithmetization/src/cpu/kernel/constants/mod.rs b/evm_arithmetization/src/cpu/kernel/constants/mod.rs index a029dc9fe..91c2a0a77 100644 --- a/evm_arithmetization/src/cpu/kernel/constants/mod.rs +++ b/evm_arithmetization/src/cpu/kernel/constants/mod.rs @@ -371,11 +371,14 @@ const PRECOMPILES_GAS: [(&str, u16); 14] = [ const SNARKV_POINTERS: [(&str, u64); 2] = [("SNARKV_INP", 112), ("SNARKV_OUT", 100)]; +pub(crate) const MAX_CODE_SIZE: u64 = if cfg!(feature = "polygon_pos") { + 0x8000 // Polygon PoS value, see PIP-30. +} else { + 0x6000 // default Ethereum value +}; + const CODE_SIZE_LIMIT: [(&str, u64); 3] = [ - #[cfg(not(feature = "polygon_pos"))] - ("MAX_CODE_SIZE", 0x6000), // default Ethereum value - #[cfg(feature = "polygon_pos")] - ("MAX_CODE_SIZE", 0x8000), // Polygon PoS value, see PIP-30. + ("MAX_CODE_SIZE", MAX_CODE_SIZE), ("MAX_INITCODE_SIZE", 0xc000), ("INITCODE_WORD_COST", 2), ]; diff --git a/evm_arithmetization/src/cpu/kernel/interpreter.rs b/evm_arithmetization/src/cpu/kernel/interpreter.rs index 124bb7534..d9745504e 100644 --- a/evm_arithmetization/src/cpu/kernel/interpreter.rs +++ b/evm_arithmetization/src/cpu/kernel/interpreter.rs @@ -54,8 +54,6 @@ pub(crate) struct Interpreter { /// The interpreter will halt only if the current context matches /// halt_context pub(crate) halt_context: Option, - /// Counts the number of appearances of each opcode. For debugging purposes. - pub(crate) opcode_count: HashMap, jumpdest_table: HashMap>, /// `true` if the we are currently carrying out a jumpdest analysis. pub(crate) is_jumpdest_analysis: bool, @@ -64,6 +62,10 @@ pub(crate) struct Interpreter { pub(crate) clock: usize, /// Log of the maximal number of CPU cycles in one segment execution. max_cpu_len_log: Option, + + #[cfg(test)] + // Counts the number of appearances of each opcode. For debugging purposes. + pub(crate) opcode_count: HashMap, } /// Simulates the CPU execution from `state` until the program counter reaches @@ -178,6 +180,7 @@ impl Interpreter { // while the label `halt` is the halting label in the kernel. halt_offsets: vec![DEFAULT_HALT_OFFSET, KERNEL.global_labels["halt_final"]], halt_context: None, + #[cfg(test)] opcode_count: HashMap::new(), jumpdest_table: HashMap::new(), is_jumpdest_analysis: false, @@ -209,6 +212,7 @@ impl Interpreter { generation_state: state.soft_clone(), halt_offsets: vec![halt_offset], halt_context: Some(halt_context), + #[cfg(test)] opcode_count: HashMap::new(), jumpdest_table: HashMap::new(), is_jumpdest_analysis: true, @@ -428,6 +432,7 @@ impl Interpreter { self.max_cpu_len_log } + #[cfg(test)] pub(crate) fn reset_opcode_counts(&mut self) { self.opcode_count = HashMap::new(); } @@ -532,6 +537,10 @@ impl State for Interpreter { self.generation_state.incr_pc(n); } + fn is_kernel(&self) -> bool { + self.is_kernel() + } + fn get_registers(&self) -> RegistersState { self.generation_state.get_registers() } @@ -665,8 +674,11 @@ impl State for Interpreter { let op = decode(registers, opcode)?; - // Increment the opcode count - *self.opcode_count.entry(op).or_insert(0) += 1; + #[cfg(test)] + { + // Increment the opcode count + *self.opcode_count.entry(op).or_insert(0) += 1; + } fill_op_flag(op, &mut row); diff --git a/evm_arithmetization/src/cpu/kernel/optimizer.rs b/evm_arithmetization/src/cpu/kernel/optimizer.rs index 4890b6f37..2fac05e52 100644 --- a/evm_arithmetization/src/cpu/kernel/optimizer.rs +++ b/evm_arithmetization/src/cpu/kernel/optimizer.rs @@ -1,3 +1,5 @@ +use std::cmp::max; + use ethereum_types::U256; use Item::{Push, StandardOp}; use PushTarget::Literal; @@ -10,6 +12,7 @@ use crate::cpu::kernel::utils::{replace_windows, u256_from_bool}; pub(crate) fn optimize_asm(code: &mut Vec) { // Run the optimizer until nothing changes. + let before = code.len(); loop { let old_code = code.clone(); optimize_asm_once(code); @@ -17,6 +20,13 @@ pub(crate) fn optimize_asm(code: &mut Vec) { break; } } + let after = code.len(); + log::trace!( + "Assembly optimizer: {}->{} ({}%).", + before, + after, + 100 * after / max(1, before) + ); } /// A single optimization pass. @@ -27,6 +37,7 @@ fn optimize_asm_once(code: &mut Vec) { remove_swapped_pushes(code); remove_swaps_commutative(code); remove_ignored_values(code); + de_morgan(code); } /// Constant propagation. @@ -142,15 +153,55 @@ fn remove_swaps_commutative(code: &mut Vec) { // Could be extended to other non-side-effecting operations, e.g. [DUP1, ADD, // POP] -> [POP]. fn remove_ignored_values(code: &mut Vec) { - replace_windows(code, |[a, b]| { - if let StandardOp(pop) = b - && &pop == "POP" + replace_windows(code, |window| { + if let [a, StandardOp(pop)] = window + && is_push_or_dup(&a) + && pop == "POP" { - match a { - Push(_) => Some(vec![]), - StandardOp(dup) if dup.starts_with("DUP") => Some(vec![]), - _ => None, - } + Some(vec![]) + } else { + None + } + }); +} + +/// Helper predicate for the De Morgan rules. +fn is_push_or_dup(op: &Item) -> bool { + if matches!(&op, &Push(_)) { + return true; + }; + if let StandardOp(inner) = op + && inner.starts_with("DUP") + { + return true; + } + false +} + +/// De Morgan's First Law: `(not A) and (not B) = not (A or B)`. +/// e.g. `[PUSH a, NOT, PUSH b, NOT, AND] -> [PUSH a, PUSH b, OR, NOT]`. +/// De Morgan's Second Law: `(not A) or (not B) = not (A and B)`. +/// e.g. `[PUSH a, NOT, PUSH b, NOT, OR] -> [PUSH a, PUSH b, AND, NOT]`. +/// This also handles `DUP` operations. +fn de_morgan(code: &mut Vec) { + replace_windows(code, |window| { + if let [op0, StandardOp(op1), op2, StandardOp(op3), StandardOp(op4)] = window + && is_push_or_dup(&op0) + && op1 == "NOT" + && is_push_or_dup(&op2) + && op3 == "NOT" + && (op4 == "AND" || op4 == "OR") + { + Some(vec![ + op0, + op2, + if op4 == "AND" { + StandardOp("OR".into()) + } else { + StandardOp("AND".into()) + }, + StandardOp("NOT".into()), + ]) } else { None } @@ -285,4 +336,44 @@ mod tests { remove_ignored_values(&mut code); assert_eq!(code, vec![]); } + + #[test] + fn test_demorgan1() { + let mut before = vec![ + Push(Literal(3.into())), + StandardOp("NOT".into()), + StandardOp("DUP1".into()), + StandardOp("NOT".into()), + StandardOp("AND".into()), + ]; + let after = vec![ + Push(Literal(3.into())), + StandardOp("DUP1".into()), + StandardOp("OR".into()), + StandardOp("NOT".into()), + ]; + assert!(is_code_improved(&before, &after)); + de_morgan(&mut before); + assert_eq!(before, after); + } + + #[test] + fn test_demorgan2() { + let mut before = vec![ + Push(Literal(3.into())), + StandardOp("NOT".into()), + Push(Literal(8.into())), + StandardOp("NOT".into()), + StandardOp("OR".into()), + ]; + let after = vec![ + Push(Literal(3.into())), + Push(Literal(8.into())), + StandardOp("AND".into()), + StandardOp("NOT".into()), + ]; + assert!(is_code_improved(&before, &after)); + de_morgan(&mut before); + assert_eq!(before, after); + } } diff --git a/evm_arithmetization/src/fixed_recursive_verifier.rs b/evm_arithmetization/src/fixed_recursive_verifier.rs index 83d1f7d0e..1e68bc7b8 100644 --- a/evm_arithmetization/src/fixed_recursive_verifier.rs +++ b/evm_arithmetization/src/fixed_recursive_verifier.rs @@ -1,5 +1,6 @@ use core::mem::{self, MaybeUninit}; use core::ops::Range; +use std::cmp::max; use std::collections::BTreeMap; use std::sync::atomic::AtomicBool; use std::sync::Arc; @@ -9,7 +10,6 @@ use hashbrown::HashMap; use itertools::{zip_eq, Itertools}; use mpt_trie::partial_trie::{HashedPartialTrie, Node, PartialTrie}; use plonky2::field::extension::Extendable; -use plonky2::fri::FriParams; use plonky2::gates::constant::ConstantGate; use plonky2::gates::noop::NoopGate; use plonky2::hash::hash_types::{MerkleCapTarget, RichField, NUM_HASH_OUT_ELTS}; @@ -23,7 +23,7 @@ use plonky2::plonk::circuit_data::{ use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, GenericHashOut}; use plonky2::plonk::proof::{ProofWithPublicInputs, ProofWithPublicInputsTarget}; use plonky2::recursion::cyclic_recursion::check_cyclic_proof_verifier_data; -use plonky2::recursion::dummy_circuit::cyclic_base_proof; +use plonky2::recursion::dummy_circuit::{cyclic_base_proof, dummy_circuit, dummy_proof}; use plonky2::util::serialization::{ Buffer, GateSerializer, IoResult, Read, WitnessGeneratorSerializer, Write, }; @@ -36,7 +36,10 @@ use starky::lookup::{get_grand_product_challenge_set_target, GrandProductChallen use starky::proof::StarkProofWithMetadata; use starky::stark::Stark; -use crate::all_stark::{all_cross_table_lookups, AllStark, Table, NUM_TABLES}; +use crate::all_stark::{ + all_cross_table_lookups, AllStark, Table, MEMORY_CTL_IDX, NUM_CTLS, NUM_TABLES, + OPTIONAL_TABLE_INDICES, +}; use crate::cpu::kernel::aggregator::KERNEL; use crate::generation::segments::{GenerationSegmentData, SegmentDataIterator}; use crate::generation::{GenerationInputs, TrimmedGenerationInputs}; @@ -54,6 +57,7 @@ use crate::recursive_verifier::{ recursive_stark_circuit, set_final_public_value_targets, set_public_value_targets, PlonkWrapperCircuit, PublicInputs, StarkWrapperCircuit, }; +use crate::testing_utils::TWO_TO_ONE_BLOCK_CIRCUIT_TEST_THRESHOLD_DEGREE_BITS; use crate::util::h256_limbs; use crate::verifier::initial_memory_merkle_cap; @@ -129,6 +133,8 @@ where /// Holds chains of circuits for each table and for each initial /// `degree_bits`. pub by_table: [RecursiveCircuitsForTable; NUM_TABLES], + /// Dummy proofs of each table for the root circuit. + pub table_dummy_proofs: [Option>; NUM_TABLES], } /// Data for the EVM root circuit, which is used to combine each STARK's shrunk @@ -151,6 +157,8 @@ where /// for EVM root proofs; the circuit has them just to match the /// structure of aggregation proofs. cyclic_vk: VerifierCircuitTarget, + /// We can skip verifying tables when they are not in use. + table_in_use: [BoolTarget; NUM_TABLES], } impl RootCircuitData @@ -173,6 +181,9 @@ where } self.public_values.to_buffer(buffer)?; buffer.write_target_verifier_circuit(&self.cyclic_vk)?; + for table_in_use in self.table_in_use { + buffer.write_target_bool(table_in_use)?; + } Ok(()) } @@ -192,6 +203,10 @@ where } let public_values = PublicValuesTarget::from_buffer(buffer)?; let cyclic_vk = buffer.read_target_verifier_circuit()?; + let mut table_in_use = Vec::with_capacity(NUM_TABLES); + for _ in 0..NUM_TABLES { + table_in_use.push(buffer.read_target_bool()?); + } Ok(Self { circuit, @@ -199,6 +214,7 @@ where index_verifier_data: index_verifier_data.try_into().unwrap(), public_values, cyclic_vk, + table_in_use: table_in_use.try_into().unwrap(), }) } } @@ -562,6 +578,43 @@ where } } +/// A struct that encapsulates both the init degree and the shrunk proof. +#[derive(Eq, PartialEq, Debug)] +pub struct ShrunkProofData, C: GenericConfig, const D: usize> +{ + /// The [`CommonCircuitData`] of the last shrinking circuit. + pub common_circuit_data: CommonCircuitData, + + /// The proof after applying shrinking recursion. + pub proof: ProofWithPublicInputs, +} + +impl, C: GenericConfig, const D: usize> + ShrunkProofData +{ + fn to_buffer( + &self, + buffer: &mut Vec, + gate_serializer: &dyn GateSerializer, + ) -> IoResult<()> { + buffer.write_common_circuit_data(&self.common_circuit_data, gate_serializer)?; + buffer.write_proof_with_public_inputs(&self.proof)?; + Ok(()) + } + + fn from_buffer( + buffer: &mut Buffer, + gate_serializer: &dyn GateSerializer, + ) -> IoResult { + let common_circuit_data = buffer.read_common_circuit_data(gate_serializer)?; + let proof = buffer.read_proof_with_public_inputs(&common_circuit_data)?; + Ok(Self { + common_circuit_data, + proof, + }) + } +} + impl AllRecursiveCircuits where F: RichField + Extendable, @@ -605,6 +658,15 @@ where table.to_buffer(&mut buffer, gate_serializer, generator_serializer)?; } } + for table in &self.table_dummy_proofs { + match table { + Some(dummy_proof_data) => { + buffer.write_bool(true)?; + dummy_proof_data.to_buffer(&mut buffer, gate_serializer)? + } + None => buffer.write_bool(false)?, + } + } Ok(buffer) } @@ -683,6 +745,14 @@ where } }; + let table_dummy_proofs = core::array::from_fn(|_| { + if buffer.read_bool().ok()? { + Some(ShrunkProofData::from_buffer(&mut buffer, gate_serializer).ok()?) + } else { + None + } + }); + Ok(Self { root, segment_aggregation, @@ -691,6 +761,7 @@ where block_wrapper, two_to_one_block, by_table, + table_dummy_proofs, }) } @@ -716,10 +787,19 @@ where all_stark: &AllStark, degree_bits_ranges: &[Range; NUM_TABLES], stark_config: &StarkConfig, + shrinking_circuit_config: Option<&CircuitConfig>, + recursion_circuit_config: Option<&CircuitConfig>, + threshold_degree_bits: Option, ) -> Self { // Sanity check on the provided config assert_eq!(DEFAULT_CAP_LEN, 1 << stark_config.fri_config.cap_height); + let shrinking_config = shrinking_config(); + let shrinking_circuit_config = shrinking_circuit_config.unwrap_or(&shrinking_config); + let circuit_config = CircuitConfig::standard_recursion_config(); + let recursion_circuit_config = recursion_circuit_config.unwrap_or(&circuit_config); + let threshold_degree_bits = threshold_degree_bits.unwrap_or(THRESHOLD_DEGREE_BITS); + macro_rules! create_recursive_circuit { ($table_enum:expr, $stark_field:ident) => { RecursiveCircuitsForTable::new( @@ -728,6 +808,8 @@ where degree_bits_ranges[*$table_enum].clone(), &all_stark.cross_table_lookups, stark_config, + shrinking_circuit_config, + threshold_degree_bits, ) }; } @@ -759,7 +841,7 @@ where poseidon, ]; - let root = Self::create_segment_circuit(&by_table, stark_config); + let root = Self::create_segment_circuit(&by_table, stark_config, recursion_circuit_config); let segment_aggregation = Self::create_segment_aggregation_circuit(&root); let batch_aggregation = Self::create_batch_aggregation_circuit(&segment_aggregation, stark_config); @@ -767,6 +849,31 @@ where let block_wrapper = Self::create_block_wrapper_circuit(&block); let two_to_one_block = Self::create_two_to_one_block_circuit(&block_wrapper); + let table_dummy_proofs = core::array::from_fn(|i| { + if OPTIONAL_TABLE_INDICES.contains(&i) { + let init_degree = degree_bits_ranges[i].start; + let chain = by_table[i] + .by_stark_size + .get(&init_degree) + .expect("Unable to get the shrinking circuits"); + let common_circuit_data = chain + .shrinking_wrappers + .last() + .map(|wrapper| &wrapper.circuit.common) + .unwrap_or(&chain.initial_wrapper.circuit.common); + let dummy_circuit: CircuitData = dummy_circuit(common_circuit_data); + let dummy_pis = HashMap::new(); + let proof = dummy_proof(&dummy_circuit, dummy_pis) + .expect("Unable to generate dummy proofs"); + Some(ShrunkProofData { + common_circuit_data: common_circuit_data.clone(), + proof, + }) + } else { + None + } + }); + Self { root, segment_aggregation, @@ -775,6 +882,7 @@ where block_wrapper, two_to_one_block, by_table, + table_dummy_proofs, } } @@ -801,12 +909,17 @@ where fn create_segment_circuit( by_table: &[RecursiveCircuitsForTable; NUM_TABLES], stark_config: &StarkConfig, + circuit_config: &CircuitConfig, ) -> RootCircuitData { let inner_common_data: [_; NUM_TABLES] = core::array::from_fn(|i| &by_table[i].final_circuits()[0].common); - let mut builder = CircuitBuilder::new(CircuitConfig::standard_recursion_config()); + let mut builder = CircuitBuilder::new(circuit_config.clone()); + let table_in_use: [BoolTarget; NUM_TABLES] = + core::array::from_fn(|_| builder.add_virtual_bool_target_safe()); + let table_not_in_use: [BoolTarget; NUM_TABLES] = + core::array::from_fn(|i| builder.not(table_in_use[i])); let public_values = add_virtual_public_values_public_input(&mut builder); let recursive_proofs = @@ -826,6 +939,22 @@ where } } + for (i, table) in table_in_use.iter().enumerate() { + if !OPTIONAL_TABLE_INDICES.contains(&i) { + builder.assert_one(table.target); + } + } + + // Ensures that the trace cap is set to 0 when skipping Keccak tables. + for i in OPTIONAL_TABLE_INDICES { + for h in &pis[i].trace_cap { + for t in h { + let trace_cap_check = builder.mul(table_not_in_use[i].target, *t); + builder.assert_zero(trace_cap_check); + } + } + } + observe_public_values_target::(&mut challenger, &public_values); let ctl_challenges = get_grand_product_challenge_set_target( @@ -834,16 +963,31 @@ where stark_config.num_challenges, ); // Check that the correct CTL challenges are used in every proof. - for pi in &pis { - for i in 0..stark_config.num_challenges { - builder.connect( - ctl_challenges.challenges[i].beta, - pi.ctl_challenges.challenges[i].beta, - ); - builder.connect( - ctl_challenges.challenges[i].gamma, - pi.ctl_challenges.challenges[i].gamma, - ); + for (i, pi) in pis.iter().enumerate() { + for j in 0..stark_config.num_challenges { + if OPTIONAL_TABLE_INDICES.contains(&i) { + // Ensures that the correct CTL challenges are used when an optional table + // is in use. + builder.conditional_assert_eq( + table_in_use[i].target, + ctl_challenges.challenges[j].beta, + pi.ctl_challenges.challenges[j].beta, + ); + builder.conditional_assert_eq( + table_in_use[i].target, + ctl_challenges.challenges[j].gamma, + pi.ctl_challenges.challenges[j].gamma, + ); + } else { + builder.connect( + ctl_challenges.challenges[j].beta, + pi.ctl_challenges.challenges[j].beta, + ); + builder.connect( + ctl_challenges.challenges[j].gamma, + pi.ctl_challenges.challenges[j].gamma, + ); + } } } @@ -852,37 +996,65 @@ where builder.connect(before, s); } // Check that the challenger state is consistent between proofs. + let mut prev_state = pis[0].challenger_state_after.as_ref().to_vec(); + let state_len = prev_state.len(); for i in 1..NUM_TABLES { - for (&before, &after) in zip_eq( - pis[i].challenger_state_before.as_ref(), - pis[i - 1].challenger_state_after.as_ref(), - ) { - builder.connect(before, after); + let current_state_before = pis[i].challenger_state_before.as_ref(); + let current_state_after = pis[i].challenger_state_after.as_ref(); + for j in 0..state_len { + if OPTIONAL_TABLE_INDICES.contains(&i) { + // Ensure the challenger state: + // 1) prev == current_before when using this table + builder.conditional_assert_eq( + table_in_use[i].target, + prev_state[j], + current_state_before[j], + ); + // 2) Update prev <- current_after when using this table + // 3) Keep prev <- prev when skipping this table + prev_state[j] = + builder.select(table_in_use[i], current_state_after[j], prev_state[j]); + } else { + builder.connect(prev_state[j], current_state_before[j]); + prev_state[j] = current_state_after[j]; + } } } // Extra sums to add to the looked last value. // Only necessary for the Memory values. - let mut extra_looking_sums = - vec![vec![builder.zero(); stark_config.num_challenges]; NUM_TABLES]; + let mut extra_looking_sums = HashMap::from_iter( + (0..NUM_CTLS).map(|i| (i, vec![builder.zero(); stark_config.num_challenges])), + ); // Memory - extra_looking_sums[*Table::Memory] = (0..stark_config.num_challenges) - .map(|c| { - get_memory_extra_looking_sum_circuit( - &mut builder, - &public_values, - ctl_challenges.challenges[c], - ) - }) - .collect_vec(); + extra_looking_sums.insert( + MEMORY_CTL_IDX, + (0..stark_config.num_challenges) + .map(|c| { + get_memory_extra_looking_sum_circuit( + &mut builder, + &public_values, + ctl_challenges.challenges[c], + ) + }) + .collect_vec(), + ); + + // Ensure that when a table is skipped, the table's ctl_zs_first are all zeros. + for &i in OPTIONAL_TABLE_INDICES.iter() { + for &t in pis[i].ctl_zs_first.iter() { + let ctl_check = builder.mul(table_not_in_use[i].target, t); + builder.assert_zero(ctl_check); + } + } // Verify the CTL checks. verify_cross_table_lookups_circuit::( &mut builder, all_cross_table_lookups(), pis.map(|p| p.ctl_zs_first), - Some(&extra_looking_sums), + &extra_looking_sums, stark_config, ); @@ -906,11 +1078,22 @@ where let inner_verifier_data = builder.random_access_verifier_data(index_verifier_data[i], possible_vks); - builder.verify_proof::( - &recursive_proofs[i], - &inner_verifier_data, - inner_common_data[i], - ); + if OPTIONAL_TABLE_INDICES.contains(&i) { + builder + .conditionally_verify_proof_or_dummy::( + table_in_use[i], + &recursive_proofs[i], + &inner_verifier_data, + inner_common_data[i], + ) + .expect("Unable conditionally verify Keccak proofs in the root circuit"); + } else { + builder.verify_proof::( + &recursive_proofs[i], + &inner_verifier_data, + inner_common_data[i], + ); + } } let merkle_before = @@ -941,6 +1124,7 @@ where index_verifier_data, public_values, cyclic_vk, + table_in_use, } } @@ -1310,18 +1494,9 @@ where fn create_block_circuit( agg: &BatchAggregationCircuitData, ) -> BlockCircuitData { - // Here, we have two block proofs and we aggregate them together. - // The block circuit is similar to the agg circuit; both verify two inner - // proofs. - let expected_common_data = CommonCircuitData { - fri_params: FriParams { - degree_bits: 14, - ..agg.circuit.common.fri_params.clone() - }, - ..agg.circuit.common.clone() - }; + let expected_common_data = agg.circuit.common.clone(); - let mut builder = CircuitBuilder::::new(CircuitConfig::standard_recursion_config()); + let mut builder = CircuitBuilder::::new(agg.circuit.common.config.clone()); let public_values = add_virtual_public_values_public_input(&mut builder); let has_parent_block = builder.add_virtual_bool_target_safe(); let parent_block_proof = builder.add_virtual_proof_with_pis(&expected_common_data); @@ -1396,6 +1571,10 @@ where let agg_verifier_data = builder.constant_verifier_data(&agg.circuit.verifier_only); builder.verify_proof::(&agg_root_proof, &agg_verifier_data, &agg.circuit.common); + while log2_ceil(builder.num_gates()) < agg.circuit.common.degree_bits() { + builder.add_gate(NoopGate, vec![]); + } + let circuit = builder.build::(); BlockCircuitData { circuit, @@ -1568,7 +1747,17 @@ where // Pad to match the (non-existing yet!) 2-to-1 circuit's degree. // We use the block circuit's degree as target reference here, as they end up // having same degree. - while log2_ceil(builder.num_gates()) < block.circuit.common.degree_bits() { + let degree_bits_to_be_padded = block.circuit.common.degree_bits(); + + // When using test configurations, the block circuit's degree is less than the + // 2-to-1 circuit's degree. Therefore, we also need to ensure its size meets + // the 2-to-1 circuit's recursion threshold degree bits. + let degree_bits_to_be_padded = max( + degree_bits_to_be_padded, + TWO_TO_ONE_BLOCK_CIRCUIT_TEST_THRESHOLD_DEGREE_BITS, + ); + + while log2_ceil(builder.num_gates()) < degree_bits_to_be_padded { builder.add_gate(NoopGate, vec![]); } @@ -1655,6 +1844,11 @@ where builder.connect_hashes(mix_hash, mix_hash_virtual); + // Pad to match the block circuit's degree. + while log2_ceil(builder.num_gates()) < block_wrapper_circuit.circuit.common.degree_bits() { + builder.add_gate(NoopGate, vec![]); + } + let circuit = builder.build::(); TwoToOneBlockCircuitData { circuit, @@ -1832,7 +2026,6 @@ where abort_signal: Option>, ) -> anyhow::Result> { features_check(&generation_inputs); - let all_proof = prove::( all_stark, config, @@ -1841,33 +2034,57 @@ where timing, abort_signal.clone(), )?; + self.prove_segment_with_all_proofs(&all_proof, config, abort_signal.clone()) + } + + pub fn prove_segment_with_all_proofs( + &self, + all_proof: &AllProof, + config: &StarkConfig, + abort_signal: Option>, + ) -> anyhow::Result> { let mut root_inputs = PartialWitness::new(); for table in 0..NUM_TABLES { - let stark_proof = &all_proof.multi_proof.stark_proofs[table]; - let original_degree_bits = stark_proof.proof.recover_degree_bits(config); let table_circuits = &self.by_table[table]; - let shrunk_proof = table_circuits - .by_stark_size - .get(&original_degree_bits) - .ok_or_else(|| { - anyhow!(format!( - "Missing preprocessed circuits for {:?} table with size {}.", - Table::all()[table], - original_degree_bits, - )) - })? - .shrink(stark_proof, &all_proof.multi_proof.ctl_challenges)?; - let index_verifier_data = table_circuits - .by_stark_size - .keys() - .position(|&size| size == original_degree_bits) - .unwrap(); - root_inputs.set_target( - self.root.index_verifier_data[table], - F::from_canonical_usize(index_verifier_data), - ); - root_inputs.set_proof_with_pis_target(&self.root.proof_with_pis[table], &shrunk_proof); + if all_proof.table_in_use[table] { + let stark_proof = &all_proof.multi_proof.stark_proofs[table] + .as_ref() + .ok_or_else(|| anyhow::format_err!("Unable to get stark proof"))?; + let original_degree_bits = stark_proof.proof.recover_degree_bits(config); + let shrunk_proof = table_circuits + .by_stark_size + .get(&original_degree_bits) + .ok_or_else(|| { + anyhow!(format!( + "Missing preprocessed circuits for {:?} table with size {}.", + Table::all()[table], + original_degree_bits, + )) + })? + .shrink(stark_proof, &all_proof.multi_proof.ctl_challenges)?; + let index_verifier_data = table_circuits + .by_stark_size + .keys() + .position(|&size| size == original_degree_bits) + .unwrap(); + root_inputs.set_target( + self.root.index_verifier_data[table], + F::from_canonical_usize(index_verifier_data), + )?; + root_inputs + .set_proof_with_pis_target(&self.root.proof_with_pis[table], &shrunk_proof)?; + } else { + assert!(OPTIONAL_TABLE_INDICES.contains(&table)); + let dummy_proof_data = self.table_dummy_proofs[table] + .as_ref() + .ok_or_else(|| anyhow::format_err!("No dummy_proof_data"))?; + root_inputs.set_target(self.root.index_verifier_data[table], F::ZERO)?; + root_inputs.set_proof_with_pis_target( + &self.root.proof_with_pis[table], + &dummy_proof_data.proof, + )?; + } check_abort_signal(abort_signal.clone())?; } @@ -1875,7 +2092,7 @@ where root_inputs.set_verifier_data_target( &self.root.cyclic_vk, &self.segment_aggregation.circuit.verifier_only, - ); + )?; set_public_value_targets( &mut root_inputs, @@ -1886,13 +2103,19 @@ where anyhow::Error::msg("Invalid conversion when setting public values targets.") })?; + self.root + .table_in_use + .iter() + .zip(all_proof.table_in_use.iter()) + .try_for_each(|(target, value)| root_inputs.set_bool_target(*target, *value))?; + let root_proof = self.root.circuit.prove(root_inputs)?; Ok(ProverOutputData { is_agg: false, is_dummy: false, proof_with_pvs: ProofWithPublicValues { - public_values: all_proof.public_values, + public_values: all_proof.public_values.clone(), intern: root_proof, }, }) @@ -1951,23 +2174,38 @@ where pub fn prove_segment_after_initial_stark( &self, all_proof: AllProof, - table_circuits: &[(RecursiveCircuitsForTableSize, u8); NUM_TABLES], + table_circuits: &[Option<(RecursiveCircuitsForTableSize, u8)>; NUM_TABLES], abort_signal: Option>, ) -> anyhow::Result> { let mut root_inputs = PartialWitness::new(); for table in 0..NUM_TABLES { - let (table_circuit, index_verifier_data) = &table_circuits[table]; - - let stark_proof = &all_proof.multi_proof.stark_proofs[table]; - - let shrunk_proof = - table_circuit.shrink(stark_proof, &all_proof.multi_proof.ctl_challenges)?; - root_inputs.set_target( - self.root.index_verifier_data[table], - F::from_canonical_u8(*index_verifier_data), - ); - root_inputs.set_proof_with_pis_target(&self.root.proof_with_pis[table], &shrunk_proof); + if all_proof.table_in_use[table] { + let (table_circuit, index_verifier_data) = &table_circuits[table] + .as_ref() + .ok_or_else(|| anyhow::format_err!("Unable to get circuits"))?; + root_inputs.set_target( + self.root.index_verifier_data[table], + F::from_canonical_u8(*index_verifier_data), + )?; + let stark_proof = all_proof.multi_proof.stark_proofs[table] + .as_ref() + .ok_or_else(|| anyhow::format_err!("Unable to get stark proof"))?; + let shrunk_proof = + table_circuit.shrink(stark_proof, &all_proof.multi_proof.ctl_challenges)?; + root_inputs + .set_proof_with_pis_target(&self.root.proof_with_pis[table], &shrunk_proof)?; + } else { + assert!(OPTIONAL_TABLE_INDICES.contains(&table)); + let dummy_proof = self.table_dummy_proofs[table] + .as_ref() + .ok_or_else(|| anyhow::format_err!("Unable to get dummpy proof"))?; + root_inputs.set_target(self.root.index_verifier_data[table], F::ZERO)?; + root_inputs.set_proof_with_pis_target( + &self.root.proof_with_pis[table], + &dummy_proof.proof, + )?; + } check_abort_signal(abort_signal.clone())?; } @@ -1975,7 +2213,7 @@ where root_inputs.set_verifier_data_target( &self.root.cyclic_vk, &self.segment_aggregation.circuit.verifier_only, - ); + )?; set_public_value_targets( &mut root_inputs, @@ -1986,6 +2224,12 @@ where anyhow::Error::msg("Invalid conversion when setting public values targets.") })?; + self.root + .table_in_use + .iter() + .zip(all_proof.table_in_use.iter()) + .try_for_each(|(target, value)| root_inputs.set_bool_target(*target, *value))?; + let root_proof = self.root.circuit.prove(root_inputs)?; Ok(ProofWithPublicValues { @@ -2033,7 +2277,7 @@ where &self.segment_aggregation.circuit, &mut agg_inputs, lhs_proof, - ); + )?; // If rhs is dummy, the rhs proof is also set to be the lhs. let real_rhs_proof = if rhs_is_dummy { lhs_proof } else { rhs_proof }; @@ -2045,12 +2289,12 @@ where &self.segment_aggregation.circuit, &mut agg_inputs, real_rhs_proof, - ); + )?; agg_inputs.set_verifier_data_target( &self.segment_aggregation.cyclic_vk, &self.segment_aggregation.circuit.verifier_only, - ); + )?; // Aggregates both `PublicValues` from the provided proofs into a single one. let lhs_public_values = &lhs.proof_with_pvs.public_values; @@ -2143,7 +2387,7 @@ where &self.batch_aggregation.circuit, &mut batch_inputs, &lhs.intern, - ); + )?; Self::set_dummy_if_necessary( &self.batch_aggregation.rhs, @@ -2151,12 +2395,12 @@ where &self.batch_aggregation.circuit, &mut batch_inputs, &rhs.intern, - ); + )?; batch_inputs.set_verifier_data_target( &self.batch_aggregation.cyclic_vk, &self.batch_aggregation.circuit.verifier_only, - ); + )?; let lhs_pvs = &lhs.public_values; let batch_public_values = PublicValues { @@ -2197,20 +2441,20 @@ where circuit: &CircuitData, agg_inputs: &mut PartialWitness, proof: &ProofWithPublicInputs, - ) { - agg_inputs.set_bool_target(agg_child.is_agg, is_agg); - agg_inputs.set_bool_target(agg_child.is_dummy, is_dummy); + ) -> anyhow::Result<()> { + agg_inputs.set_bool_target(agg_child.is_agg, is_agg)?; + agg_inputs.set_bool_target(agg_child.is_dummy, is_dummy)?; if is_agg { - agg_inputs.set_proof_with_pis_target(&agg_child.agg_proof, proof); + agg_inputs.set_proof_with_pis_target(&agg_child.agg_proof, proof)?; } else { Self::set_dummy_proof_with_cyclic_vk_pis( circuit, agg_inputs, &agg_child.agg_proof, proof, - ); + )?; } - agg_inputs.set_proof_with_pis_target(&agg_child.real_proof, proof); + agg_inputs.set_proof_with_pis_target(&agg_child.real_proof, proof) } /// Create a final block proof, once all transactions of a given block have @@ -2242,10 +2486,10 @@ where block_inputs.set_bool_target( self.block.has_parent_block, opt_parent_block_proof.is_some(), - ); + )?; if let Some(parent_block_proof) = opt_parent_block_proof { block_inputs - .set_proof_with_pis_target(&self.block.parent_block_proof, parent_block_proof); + .set_proof_with_pis_target(&self.block.parent_block_proof, parent_block_proof)?; } else { if agg_root_proof.public_values.trie_roots_before.state_root != agg_root_proof @@ -2388,13 +2632,14 @@ where &self.block.circuit.verifier_only, nonzero_pis, ), - ); + )?; } - block_inputs.set_proof_with_pis_target(&self.block.agg_root_proof, &agg_root_proof.intern); + block_inputs + .set_proof_with_pis_target(&self.block.agg_root_proof, &agg_root_proof.intern)?; block_inputs - .set_verifier_data_target(&self.block.cyclic_vk, &self.block.circuit.verifier_only); + .set_verifier_data_target(&self.block.cyclic_vk, &self.block.circuit.verifier_only)?; // This is basically identical to this block public values, apart from the // `trie_roots_before` that may come from the previous proof, if any. @@ -2453,13 +2698,15 @@ where )> { let mut block_wrapper_inputs = PartialWitness::new(); - block_wrapper_inputs - .set_proof_with_pis_target(&self.block_wrapper.parent_block_proof, &block_proof.intern); + block_wrapper_inputs.set_proof_with_pis_target( + &self.block_wrapper.parent_block_proof, + &block_proof.intern, + )?; block_wrapper_inputs.set_verifier_data_target( &self.block_wrapper.cyclic_vk, // dummy &self.block_wrapper.circuit.verifier_only, - ); + )?; let final_pvs = block_proof.public_values.clone().into(); set_final_public_value_targets( @@ -2513,7 +2760,7 @@ where &self.two_to_one_block.circuit, &mut witness, lhs, - ); + )?; Self::set_dummy_if_necessary( &self.two_to_one_block.rhs, @@ -2521,15 +2768,14 @@ where &self.two_to_one_block.circuit, &mut witness, rhs, - ); + )?; witness.set_verifier_data_target( &self.two_to_one_block.cyclic_vk, &self.two_to_one_block.circuit.verifier_only, - ); + )?; - let proof = self.two_to_one_block.circuit.prove(witness)?; - Ok(proof) + self.two_to_one_block.circuit.prove(witness) } /// Verifies an existing block aggregation proof. @@ -2560,7 +2806,7 @@ where witness: &mut PartialWitness, agg_proof_with_pis: &ProofWithPublicInputsTarget, base_proof_with_pis: &ProofWithPublicInputs, - ) { + ) -> anyhow::Result<()> { let ProofWithPublicInputs { proof: base_proof, public_inputs: _, @@ -2571,7 +2817,7 @@ where } = agg_proof_with_pis; // The proof remains the same. - witness.set_proof_target(agg_proof_targets, base_proof); + witness.set_proof_target(agg_proof_targets, base_proof)?; let cyclic_verifying_data = &circuit_agg.verifier_only; let mut cyclic_vk = cyclic_verifying_data.circuit_digest.to_vec(); @@ -2582,8 +2828,10 @@ where // Set dummy public inputs. for (&pi_t, pi) in agg_pi_targets.iter().zip_eq(dummy_pis) { - witness.set_target(pi_t, pi); + witness.set_target(pi_t, pi)?; } + + Ok(()) } /// If the [`AggregationChild`] is a base proof and not an aggregation @@ -2598,21 +2846,22 @@ where circuit: &CircuitData, agg_inputs: &mut PartialWitness, proof: &ProofWithPublicInputs, - ) { - agg_inputs.set_bool_target(agg_child.is_agg, is_agg); + ) -> anyhow::Result<()> { + agg_inputs.set_bool_target(agg_child.is_agg, is_agg)?; if is_agg { - agg_inputs.set_proof_with_pis_target(&agg_child.agg_proof, proof); + agg_inputs.set_proof_with_pis_target(&agg_child.agg_proof, proof)?; } else { Self::set_dummy_proof_with_cyclic_vk_pis( circuit, agg_inputs, &agg_child.agg_proof, proof, - ); + )?; } - agg_inputs.set_proof_with_pis_target(&agg_child.base_proof, proof); + agg_inputs.set_proof_with_pis_target(&agg_child.base_proof, proof) } } + /// A map between initial degree sizes and their associated shrinking recursion /// circuits. #[derive(Eq, PartialEq, Debug)] @@ -2644,6 +2893,7 @@ where buffer.write_usize(size)?; table.to_buffer(buffer, gate_serializer, generator_serializer)?; } + Ok(()) } @@ -2663,6 +2913,7 @@ where )?; by_stark_size.insert(key, table); } + Ok(Self { by_stark_size }) } @@ -2672,6 +2923,8 @@ where degree_bits_range: Range, all_ctls: &[CrossTableLookup], stark_config: &StarkConfig, + shrinking_circuit_config: &CircuitConfig, + threshold_degree_bits: usize, ) -> Self { let by_stark_size = degree_bits_range .map(|degree_bits| { @@ -2683,10 +2936,13 @@ where degree_bits, all_ctls, stark_config, + shrinking_circuit_config, + threshold_degree_bits, ), ) }) .collect(); + Self { by_stark_size } } @@ -2794,6 +3050,8 @@ where degree_bits: usize, all_ctls: &[CrossTableLookup], stark_config: &StarkConfig, + shrinking_config: &CircuitConfig, + threshold_degree_bits: usize, ) -> Self { let initial_wrapper = recursive_stark_circuit( table, @@ -2801,11 +3059,33 @@ where degree_bits, all_ctls, stark_config, - &shrinking_config(), - THRESHOLD_DEGREE_BITS, + shrinking_config, + threshold_degree_bits, ); let mut shrinking_wrappers = vec![]; + // When using test configurations, the initial wrapper is so simple that the + // circuit's common data cannot match the shrinking wrapper circuit's + // data. Therefore, we always add at least one shrinking wrapper here. + if threshold_degree_bits < THRESHOLD_DEGREE_BITS { + let mut builder = CircuitBuilder::new(shrinking_config.clone()); + let proof_with_pis_target = + builder.add_virtual_proof_with_pis(&initial_wrapper.circuit.common); + let last_vk = builder.constant_verifier_data(&initial_wrapper.circuit.verifier_only); + builder.verify_proof::( + &proof_with_pis_target, + &last_vk, + &initial_wrapper.circuit.common, + ); + builder.register_public_inputs(&proof_with_pis_target.public_inputs); + add_common_recursion_gates(&mut builder); + let circuit = builder.build::(); + shrinking_wrappers.push(PlonkWrapperCircuit { + circuit, + proof_with_pis_target, + }); + } + // Shrinking recursion loop. loop { let last = shrinking_wrappers @@ -2813,12 +3093,12 @@ where .map(|wrapper: &PlonkWrapperCircuit| &wrapper.circuit) .unwrap_or(&initial_wrapper.circuit); let last_degree_bits = last.common.degree_bits(); - assert!(last_degree_bits >= THRESHOLD_DEGREE_BITS); - if last_degree_bits == THRESHOLD_DEGREE_BITS { + assert!(last_degree_bits >= threshold_degree_bits); + if last_degree_bits == threshold_degree_bits { break; } - let mut builder = CircuitBuilder::new(shrinking_config()); + let mut builder = CircuitBuilder::new(shrinking_config.clone()); let proof_with_pis_target = builder.add_virtual_proof_with_pis(&last.common); let last_vk = builder.constant_verifier_data(&last.verifier_only); builder.verify_proof::(&proof_with_pis_target, &last_vk, &last.common); @@ -2829,7 +3109,7 @@ where assert!( circuit.common.degree_bits() < last_degree_bits, "Couldn't shrink to expected recursion threshold of 2^{}; stalled at 2^{}", - THRESHOLD_DEGREE_BITS, + threshold_degree_bits, circuit.common.degree_bits() ); shrinking_wrappers.push(PlonkWrapperCircuit { @@ -2838,6 +3118,12 @@ where }); } + log::debug!( + "Table: {:?}, degree: {}, shrinking_wrappers_len: {}", + table, + degree_bits, + shrinking_wrappers.len() + ); Self { initial_wrapper, shrinking_wrappers, @@ -3008,80 +3294,3 @@ pub mod testing { } } } - -#[cfg(test)] -#[cfg(not(feature = "cdk_erigon"))] -mod tests { - use plonky2::field::goldilocks_field::GoldilocksField; - use plonky2::plonk::config::PoseidonGoldilocksConfig; - use plonky2::timed; - - use super::*; - use crate::testing_utils::{empty_payload, init_logger}; - use crate::witness::operation::Operation; - - type F = GoldilocksField; - const D: usize = 2; - type C = PoseidonGoldilocksConfig; - - #[test] - #[ignore] - fn test_segment_proof_generation_without_keccak() -> anyhow::Result<()> { - init_logger(); - - let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); - - // Generate a dummy payload for testing - let payload = empty_payload()?; - let max_cpu_len_log = Some(7); - let mut segment_iterator = SegmentDataIterator::::new(&payload, max_cpu_len_log); - let (_, mut segment_data) = segment_iterator.next().unwrap()?; - - let opcode_counts = &segment_data.opcode_counts; - assert!(!opcode_counts.contains_key(&Operation::KeccakGeneral)); - - let timing = &mut TimingTree::new( - "Segment Proof Generation Without Keccak Test", - log::Level::Info, - ); - // Process and prove segment - let all_circuits = timed!( - timing, - log::Level::Info, - "Create all recursive circuits", - AllRecursiveCircuits::::new( - &all_stark, - &[16..17, 8..9, 7..8, 4..9, 8..9, 4..7, 17..18, 17..18, 17..18], - &config, - ) - ); - - let segment_proof = timed!( - timing, - log::Level::Info, - "Prove segment", - all_circuits.prove_segment( - &all_stark, - &config, - payload.trim(), - &mut segment_data, - timing, - None, - )? - ); - - // Verify the generated segment proof - timed!( - timing, - log::Level::Info, - "Verify segment proof", - all_circuits.verify_root(segment_proof.proof_with_pvs.intern.clone())? - ); - - // Print timing details - timing.print(); - - Ok(()) - } -} diff --git a/evm_arithmetization/src/generation/mod.rs b/evm_arithmetization/src/generation/mod.rs index 19ea55039..6ec02ea73 100644 --- a/evm_arithmetization/src/generation/mod.rs +++ b/evm_arithmetization/src/generation/mod.rs @@ -19,7 +19,8 @@ use GlobalMetadata::{ StateTrieRootDigestBefore, TransactionTrieRootDigestAfter, TransactionTrieRootDigestBefore, }; -use crate::all_stark::{AllStark, NUM_TABLES}; +use crate::all_stark::Table::MemAfter; +use crate::all_stark::{AllStark, Table, NUM_TABLES, OPTIONAL_TABLE_INDICES}; use crate::cpu::columns::CpuColumnsView; use crate::cpu::kernel::aggregator::KERNEL; use crate::cpu::kernel::constants::global_metadata::GlobalMetadata; @@ -486,7 +487,11 @@ fn get_all_memory_address_and_values(memory_before: &MemoryState) -> Vec<(Memory res } -type TablesWithPVsAndFinalMem = ([Vec>; NUM_TABLES], PublicValues); +pub struct TablesWithPVs { + pub tables: [Vec>; NUM_TABLES], + pub table_in_use: [bool; NUM_TABLES], + pub public_values: PublicValues, +} pub fn generate_traces, const D: usize>( all_stark: &AllStark, @@ -494,7 +499,7 @@ pub fn generate_traces, const D: usize>( config: &StarkConfig, segment_data: &mut GenerationSegmentData, timing: &mut TimingTree, -) -> anyhow::Result> { +) -> anyhow::Result> { let mut state = GenerationState::::new_with_segment_data(inputs, segment_data) .map_err(|err| anyhow!("Failed to parse all the initial prover inputs: {:?}", err))?; @@ -579,7 +584,30 @@ pub fn generate_traces, const D: usize>( mem_after: MemCap::default(), }; - let tables = timed!( + let mut table_in_use = [true; NUM_TABLES]; + if state.traces.keccak_inputs.is_empty() && OPTIONAL_TABLE_INDICES.contains(&Table::Keccak) { + assert!(OPTIONAL_TABLE_INDICES.contains(&Table::KeccakSponge)); + log::debug!("Keccak and KeccakSponge tables not in use"); + table_in_use[*Table::Keccak] = false; + table_in_use[*Table::KeccakSponge] = false; + } + if state.traces.logic_ops.is_empty() && OPTIONAL_TABLE_INDICES.contains(&Table::Logic) { + log::debug!("Logic table not in use"); + table_in_use[*Table::Logic] = false; + } + if state.traces.byte_packing_ops.is_empty() + && OPTIONAL_TABLE_INDICES.contains(&Table::BytePacking) + { + log::debug!("BytePacking table not in use"); + table_in_use[*Table::BytePacking] = false; + } + #[cfg(feature = "cdk_erigon")] + if state.traces.poseidon_ops.is_empty() && OPTIONAL_TABLE_INDICES.contains(&Table::Poseidon) { + log::debug!("Poseidon table not in use"); + table_in_use[*Table::Poseidon] = false; + } + + let (tables, final_len) = timed!( timing, "convert trace data to tables", state.traces.into_tables( @@ -591,7 +619,17 @@ pub fn generate_traces, const D: usize>( timing ) ); - Ok((tables, public_values)) + + if final_len == 0 && OPTIONAL_TABLE_INDICES.contains(&MemAfter) { + log::debug!("MemAfter table not in use"); + table_in_use[*MemAfter] = false; + } + + Ok(TablesWithPVs { + tables, + table_in_use, + public_values, + }) } fn simulate_cpu( diff --git a/evm_arithmetization/src/generation/segments.rs b/evm_arithmetization/src/generation/segments.rs index 36bac8f8a..1df63af29 100644 --- a/evm_arithmetization/src/generation/segments.rs +++ b/evm_arithmetization/src/generation/segments.rs @@ -1,6 +1,7 @@ //! Module defining the logic around proof segmentation into chunks, //! which allows what is commonly known as zk-continuations. +#[cfg(test)] use std::collections::HashMap; use anyhow::Result; @@ -13,6 +14,7 @@ use crate::cpu::kernel::interpreter::{set_registers_and_run, ExtraSegmentData, I use crate::generation::state::State; use crate::generation::{collect_debug_tries, debug_inputs, ErrorWithTries, GenerationInputs}; use crate::witness::memory::MemoryState; +#[cfg(test)] use crate::witness::operation::Operation; use crate::witness::state::RegistersState; @@ -32,7 +34,9 @@ pub struct GenerationSegmentData { pub(crate) extra_data: ExtraSegmentData, /// Log of the maximal cpu length. pub(crate) max_cpu_len_log: Option, - /// Counts the number of appearances of each opcode. For debugging purposes. + + #[cfg(test)] + // Counts the number of appearances of each opcode. For debugging purposes. pub(crate) opcode_counts: HashMap, } @@ -82,6 +86,7 @@ fn build_segment_data( access_lists_ptrs: interpreter.generation_state.access_lists_ptrs.clone(), state_ptrs: interpreter.generation_state.state_ptrs.clone(), }, + #[cfg(test)] opcode_counts: interpreter.opcode_count.clone(), } } @@ -139,8 +144,11 @@ impl SegmentDataIterator { let segment_index = segment_data.segment_index; - // Reset opcode counts before executing the segment - self.interpreter.reset_opcode_counts(); + #[cfg(test)] + { + // Reset opcode counts before executing the segment + self.interpreter.reset_opcode_counts(); + } // Run the interpreter to get `registers_after` and the partial data for the // next segment. @@ -156,7 +164,11 @@ impl SegmentDataIterator { )); segment_data.registers_after = updated_registers; - segment_data.opcode_counts = self.interpreter.opcode_count.clone(); + + #[cfg(test)] + { + segment_data.opcode_counts = self.interpreter.opcode_count.clone(); + } Ok(Some(Box::new((segment_data, partial_segment_data)))) } else { diff --git a/evm_arithmetization/src/generation/state.rs b/evm_arithmetization/src/generation/state.rs index 1ea87bd0c..abe4b4f1a 100644 --- a/evm_arithmetization/src/generation/state.rs +++ b/evm_arithmetization/src/generation/state.rs @@ -77,6 +77,9 @@ pub(crate) trait State { /// Returns a `State`'s stack. fn get_stack(&self) -> Vec; + /// Indicates whether we are in kernel mode. + fn is_kernel(&self) -> bool; + /// Returns the current context. fn get_context(&self) -> usize; @@ -185,6 +188,15 @@ pub(crate) trait State { { let halt_offsets = self.get_halt_offsets(); + if let Some(max_len_log) = max_cpu_len_log { + assert!( + (1 << max_len_log) >= NUM_EXTRA_CYCLES_AFTER, + "Target length (2^{}) is less than NUM_EXTRA_CYCLES_AFTER ({})", + max_len_log, + NUM_EXTRA_CYCLES_AFTER + ); + } + let cycle_limit = max_cpu_len_log.map(|max_len_log| (1 << max_len_log) - NUM_EXTRA_CYCLES_AFTER); @@ -643,6 +655,10 @@ impl State for GenerationState { self.stack() } + fn is_kernel(&self) -> bool { + self.registers.is_kernel + } + fn get_context(&self) -> usize { self.registers.context } diff --git a/evm_arithmetization/src/get_challenges.rs b/evm_arithmetization/src/get_challenges.rs index 1e6410353..23a46d5c5 100644 --- a/evm_arithmetization/src/get_challenges.rs +++ b/evm_arithmetization/src/get_challenges.rs @@ -247,13 +247,14 @@ pub(crate) fn observe_public_values_target< pub mod testing { use plonky2::field::extension::Extendable; - use plonky2::hash::hash_types::RichField; + use plonky2::hash::hash_types::{RichField, NUM_HASH_OUT_ELTS}; use plonky2::iop::challenger::Challenger; use plonky2::plonk::config::GenericConfig; use starky::config::StarkConfig; use starky::lookup::{get_grand_product_challenge_set, GrandProductChallengeSet}; use starky::proof::StarkProofChallenges; + use crate::all_stark::OPTIONAL_TABLE_INDICES; use crate::get_challenges::observe_public_values; use crate::proof::*; use crate::witness::errors::ProgramError; @@ -262,7 +263,7 @@ pub mod testing { /// Randomness for all STARKs. pub(crate) struct AllProofChallenges, const D: usize> { /// Randomness used in each STARK proof. - pub stark_challenges: [StarkProofChallenges; NUM_TABLES], + pub stark_challenges: [Option>; NUM_TABLES], /// Randomness used for cross-table lookups. It is shared by all STARKs. pub ctl_challenges: GrandProductChallengeSet, } @@ -277,8 +278,15 @@ pub mod testing { let stark_proofs = &self.multi_proof.stark_proofs; - for proof in stark_proofs { - challenger.observe_cap(&proof.proof.trace_cap); + for (i, stark_proof) in stark_proofs.iter().enumerate() { + if let Some(stark_proof) = stark_proof { + challenger.observe_cap(&stark_proof.proof.trace_cap); + } else { + assert!(OPTIONAL_TABLE_INDICES.contains(&i) && !self.table_in_use[i]); + let zero_cap = + vec![F::ZERO; config.fri_config.num_cap_elements() * NUM_HASH_OUT_ELTS]; + challenger.observe_elements(&zero_cap); + } } observe_public_values::(&mut challenger, &self.public_values)?; @@ -288,13 +296,17 @@ pub mod testing { Ok(AllProofChallenges { stark_challenges: core::array::from_fn(|i| { - challenger.compact(); - stark_proofs[i].proof.get_challenges( - &mut challenger, - Some(&ctl_challenges), - true, - config, - ) + if let Some(stark_proof) = &stark_proofs[i] { + challenger.compact(); + Some(stark_proof.proof.get_challenges( + &mut challenger, + Some(&ctl_challenges), + true, + config, + )) + } else { + None + } }), ctl_challenges, }) diff --git a/evm_arithmetization/src/memory/segments.rs b/evm_arithmetization/src/memory/segments.rs index e1b6678f6..a9534830a 100644 --- a/evm_arithmetization/src/memory/segments.rs +++ b/evm_arithmetization/src/memory/segments.rs @@ -100,10 +100,12 @@ impl Segment { pub(crate) const COUNT: usize = 39; /// Unscales this segment by `SEGMENT_SCALING_FACTOR`. + #[inline(always)] pub(crate) const fn unscale(&self) -> usize { *self as usize >> SEGMENT_SCALING_FACTOR } + #[inline(always)] pub(crate) const fn all() -> [Self; Self::COUNT] { [ Self::Code, diff --git a/evm_arithmetization/src/proof.rs b/evm_arithmetization/src/proof.rs index ed3e20ee7..f501a96d3 100644 --- a/evm_arithmetization/src/proof.rs +++ b/evm_arithmetization/src/proof.rs @@ -4,13 +4,15 @@ use ethereum_types::{Address, H256, U256}; use itertools::Itertools; use plonky2::field::extension::Extendable; use plonky2::hash::hash_types::{HashOutTarget, MerkleCapTarget, RichField, NUM_HASH_OUT_ELTS}; +use plonky2::hash::merkle_tree::MerkleCap; use plonky2::iop::target::{BoolTarget, Target}; use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::config::{GenericConfig, GenericHashOut, Hasher}; use plonky2::util::serialization::{Buffer, IoResult, Read, Write}; use serde::{Deserialize, Serialize}; use starky::config::StarkConfig; -use starky::proof::MultiProof; +use starky::lookup::GrandProductChallengeSet; +use starky::proof::StarkProofWithMetadata; use crate::all_stark::NUM_TABLES; use crate::util::{get_h160, get_h256, get_u256, h256_limbs, h2u}; @@ -21,6 +23,22 @@ pub(crate) const DEFAULT_CAP_HEIGHT: usize = 4; /// Number of elements contained in a Merkle cap with default height. pub(crate) const DEFAULT_CAP_LEN: usize = 1 << DEFAULT_CAP_HEIGHT; +/// A combination of STARK proofs for independent statements operating on +/// possibly shared variables, along with Cross-Table Lookup (CTL) challenges to +/// assert consistency of common variables across tables. +#[derive(Debug, Clone)] +pub struct MultiProof< + F: RichField + Extendable, + C: GenericConfig, + const D: usize, + const N: usize, +> { + /// Proofs for all the different STARK modules. + pub stark_proofs: [Option>; N], + /// Cross-table lookup challenges. + pub ctl_challenges: GrandProductChallengeSet, +} + /// A STARK proof for each table, plus some metadata used to create recursive /// wrapper proofs. #[derive(Debug, Clone)] @@ -30,12 +48,19 @@ pub struct AllProof, C: GenericConfig, co pub multi_proof: MultiProof, /// Public memory values used for the recursive proofs. pub public_values: PublicValues, + /// A flag indicating whether the table only contains padding values (i.e., + /// no meaningful data). + pub table_in_use: [bool; NUM_TABLES], } impl, C: GenericConfig, const D: usize> AllProof { /// Returns the degree (i.e. the trace length) of each STARK. - pub fn degree_bits(&self, config: &StarkConfig) -> [usize; NUM_TABLES] { - self.multi_proof.recover_degree_bits(config) + pub fn degree_bits(&self, config: &StarkConfig) -> [Option; NUM_TABLES] { + core::array::from_fn(|i| { + self.multi_proof.stark_proofs[i] + .as_ref() + .map(|proof| proof.proof.recover_degree_bits(config)) + }) } } @@ -578,6 +603,22 @@ impl MemCap { Self { mem_cap } } + + pub fn from_merkle_cap>(merkle_cap: MerkleCap) -> Self { + let mem_cap = merkle_cap + .0 + .iter() + .map(|h| { + h.to_vec() + .iter() + .map(|hi| hi.to_canonical_u64().into()) + .collect::>() + .try_into() + .unwrap() + }) + .collect::>(); + Self { mem_cap } + } } /// Memory values which are public. diff --git a/evm_arithmetization/src/prover.rs b/evm_arithmetization/src/prover.rs index 1c28362c0..698c23934 100644 --- a/evm_arithmetization/src/prover.rs +++ b/evm_arithmetization/src/prover.rs @@ -2,29 +2,29 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use anyhow::{anyhow, Result}; +use ethereum_types::U256; use itertools::Itertools; use once_cell::sync::Lazy; use plonky2::field::extension::Extendable; use plonky2::field::polynomial::PolynomialValues; use plonky2::fri::oracle::PolynomialBatch; use plonky2::hash::hash_types::RichField; -use plonky2::hash::merkle_tree::MerkleCap; use plonky2::iop::challenger::Challenger; -use plonky2::plonk::config::{GenericConfig, GenericHashOut}; +use plonky2::plonk::config::GenericConfig; use plonky2::timed; use plonky2::util::timing::TimingTree; use starky::config::StarkConfig; use starky::cross_table_lookup::{get_ctl_data, CtlData}; use starky::lookup::GrandProductChallengeSet; -use starky::proof::{MultiProof, StarkProofWithMetadata}; +use starky::proof::StarkProofWithMetadata; use starky::prover::prove_with_commitment; use starky::stark::Stark; -use crate::all_stark::{AllStark, Table, NUM_TABLES}; +use crate::all_stark::{AllStark, Table, NUM_TABLES, OPTIONAL_TABLE_INDICES}; use crate::cpu::kernel::aggregator::KERNEL; use crate::generation::{generate_traces, GenerationInputs, TrimmedGenerationInputs}; use crate::get_challenges::observe_public_values; -use crate::proof::{AllProof, MemCap, PublicValues, DEFAULT_CAP_LEN}; +use crate::proof::{AllProof, MemCap, MultiProof, PublicValues, DEFAULT_CAP_LEN}; use crate::GenerationSegmentData; /// Generate traces, then create all STARK proofs. @@ -47,7 +47,7 @@ where timed!(timing, "build kernel", Lazy::force(&KERNEL)); - let (traces, mut public_values) = timed!( + let mut tables_with_pvs = timed!( timing, "generate all traces", generate_traces(all_stark, &inputs, config, segment_data, timing)? @@ -58,8 +58,9 @@ where let proof = prove_with_traces( all_stark, config, - traces, - &mut public_values, + tables_with_pvs.tables, + tables_with_pvs.table_in_use, + &mut tables_with_pvs.public_values, timing, abort_signal, )?; @@ -72,6 +73,7 @@ pub(crate) fn prove_with_traces( all_stark: &AllStark, config: &StarkConfig, trace_poly_values: [Vec>; NUM_TABLES], + table_in_use: [bool; NUM_TABLES], public_values: &mut PublicValues, timing: &mut TimingTree, abort_signal: Option>, @@ -114,8 +116,14 @@ where .map(|c| c.merkle_tree.cap.clone()) .collect::>(); let mut challenger = Challenger::::new(); - for cap in &trace_caps { - challenger.observe_cap(cap); + for (i, cap) in trace_caps.iter().enumerate() { + if OPTIONAL_TABLE_INDICES.contains(&i) && !table_in_use[i] { + // Observe zero merkle caps when skipping Keccak tables. + let zero_merkle_cap = cap.flatten().iter().map(|_| F::ZERO).collect::>(); + challenger.observe_elements(&zero_merkle_cap); + } else { + challenger.observe_cap(cap); + } } observe_public_values::(&mut challenger, public_values) @@ -143,6 +151,7 @@ where config, &trace_poly_values, trace_commitments, + table_in_use, ctl_data_per_table, &mut challenger, &ctl_challenges, @@ -150,34 +159,8 @@ where abort_signal, )? ); - public_values.mem_before = MemCap { - mem_cap: mem_before_cap - .0 - .iter() - .map(|h| { - h.to_vec() - .iter() - .map(|hi| hi.to_canonical_u64().into()) - .collect::>() - .try_into() - .unwrap() - }) - .collect::>(), - }; - public_values.mem_after = MemCap { - mem_cap: mem_after_cap - .0 - .iter() - .map(|h| { - h.to_vec() - .iter() - .map(|hi| hi.to_canonical_u64().into()) - .collect::>() - .try_into() - .unwrap() - }) - .collect::>(), - }; + public_values.mem_before = mem_before_cap; + public_values.mem_after = mem_after_cap; // This is an expensive check, hence is only run when `debug_assertions` are // enabled. @@ -206,13 +189,14 @@ where ctl_challenges, }, public_values: public_values.clone(), + table_in_use, }) } -type ProofWithMemCaps = ( - [StarkProofWithMetadata; NUM_TABLES], - MerkleCap, - MerkleCap, +type ProofWithMemCaps = ( + [Option>; NUM_TABLES], + MemCap, + MemCap, ); /// Generates a proof for each STARK. @@ -229,48 +213,65 @@ fn prove_with_commitments( config: &StarkConfig, trace_poly_values: &[Vec>; NUM_TABLES], trace_commitments: Vec>, + table_in_use: [bool; NUM_TABLES], ctl_data_per_table: [CtlData; NUM_TABLES], challenger: &mut Challenger, ctl_challenges: &GrandProductChallengeSet, timing: &mut TimingTree, abort_signal: Option>, -) -> Result> +) -> Result> where F: RichField + Extendable, C: GenericConfig, { macro_rules! prove_table { ($stark:ident, $table:expr) => { - timed!( - timing, - &format!("prove {} STARK", stringify!($stark)), - prove_single_table( - &all_stark.$stark, - config, - &trace_poly_values[*$table], - &trace_commitments[*$table], - &ctl_data_per_table[*$table], - ctl_challenges, - challenger, + if table_in_use[*$table] { + Some(timed!( timing, - abort_signal.clone(), - )? - ) + &format!("prove {} STARK", stringify!($stark)), + prove_single_table( + &all_stark.$stark, + config, + &trace_poly_values[*$table], + &trace_commitments[*$table], + &ctl_data_per_table[*$table], + ctl_challenges, + challenger, + timing, + abort_signal.clone(), + )? + )) + } else { + None + } }; } - let (arithmetic_proof, _) = prove_table!(arithmetic_stark, Table::Arithmetic); - let (byte_packing_proof, _) = prove_table!(byte_packing_stark, Table::BytePacking); - let (cpu_proof, _) = prove_table!(cpu_stark, Table::Cpu); - let (keccak_proof, _) = prove_table!(keccak_stark, Table::Keccak); - let (keccak_sponge_proof, _) = prove_table!(keccak_sponge_stark, Table::KeccakSponge); - let (logic_proof, _) = prove_table!(logic_stark, Table::Logic); - let (memory_proof, _) = prove_table!(memory_stark, Table::Memory); - let (mem_before_proof, mem_before_cap) = prove_table!(mem_before_stark, Table::MemBefore); - let (mem_after_proof, mem_after_cap) = prove_table!(mem_after_stark, Table::MemAfter); + let arithmetic_proof = prove_table!(arithmetic_stark, Table::Arithmetic); + let byte_packing_proof = prove_table!(byte_packing_stark, Table::BytePacking); + let cpu_proof = prove_table!(cpu_stark, Table::Cpu); + let keccak_proof = prove_table!(keccak_stark, Table::Keccak); + let keccak_sponge_proof = prove_table!(keccak_sponge_stark, Table::KeccakSponge); + let logic_proof = prove_table!(logic_stark, Table::Logic); + let memory_proof = prove_table!(memory_stark, Table::Memory); + let mem_before_proof = prove_table!(mem_before_stark, Table::MemBefore); + let mem_after_proof = prove_table!(mem_after_stark, Table::MemAfter); + + let mem_before_cap = trace_commitments[*Table::MemBefore].merkle_tree.cap.clone(); + let mem_before_cap = MemCap::from_merkle_cap(mem_before_cap); + let mem_after_cap = trace_commitments[*Table::MemAfter].merkle_tree.cap.clone(); + let mut mem_after_cap = MemCap::from_merkle_cap(mem_after_cap); + if !table_in_use[*Table::MemAfter] { + for hash in &mut mem_after_cap.mem_cap { + for element in hash.iter_mut() { + *element = U256::zero(); + } + } + } #[cfg(feature = "cdk_erigon")] - let (poseidon_proof, _) = prove_table!(poseidon_stark, Table::Poseidon); + let poseidon_proof = prove_table!(poseidon_stark, Table::Poseidon); Ok(( [ @@ -291,9 +292,6 @@ where )) } -type ProofSingleWithCap = - (StarkProofWithMetadata, MerkleCap); - /// Computes a proof for a single STARK table, including: /// - the initial state of the challenger, /// - all the requires Merkle caps, @@ -310,7 +308,7 @@ pub(crate) fn prove_single_table( challenger: &mut Challenger, timing: &mut TimingTree, abort_signal: Option>, -) -> Result> +) -> Result> where F: RichField + Extendable, C: GenericConfig, @@ -337,7 +335,7 @@ where init_challenger_state, })?; - Ok((proof, trace_commitment.merkle_tree.cap.clone())) + Ok(proof) } /// Utility method that checks whether a kill signal has been emitted by one of diff --git a/evm_arithmetization/src/recursive_verifier.rs b/evm_arithmetization/src/recursive_verifier.rs index 417bf468d..f70b9f166 100644 --- a/evm_arithmetization/src/recursive_verifier.rs +++ b/evm_arithmetization/src/recursive_verifier.rs @@ -4,6 +4,7 @@ use core::fmt::Debug; use anyhow::Result; use ethereum_types::{BigEndianHash, U256}; use plonky2::field::extension::Extendable; +use plonky2::gates::constant::ConstantGate; use plonky2::gates::exponentiation::ExponentiationGate; use plonky2::gates::gate::GateRef; use plonky2::gates::noop::NoopGate; @@ -155,7 +156,7 @@ where &self.stark_proof_target, &proof_with_metadata.proof, self.zero_target, - ); + )?; for (challenge_target, challenge) in self .ctl_challenges_target @@ -163,14 +164,14 @@ where .iter() .zip(&ctl_challenges.challenges) { - inputs.set_target(challenge_target.beta, challenge.beta); - inputs.set_target(challenge_target.gamma, challenge.gamma); + inputs.set_target(challenge_target.beta, challenge.beta)?; + inputs.set_target(challenge_target.gamma, challenge.gamma)?; } inputs.set_target_arr( self.init_challenger_state_target.as_ref(), proof_with_metadata.init_challenger_state.as_ref(), - ); + )?; self.circuit.prove(inputs) } @@ -198,7 +199,7 @@ where proof: &ProofWithPublicInputs, ) -> Result> { let mut inputs = PartialWitness::new(); - inputs.set_proof_with_pis_target(&self.proof_with_pis_target, proof); + inputs.set_proof_with_pis_target(&self.proof_with_pis_target, proof)?; self.circuit.prove(inputs) } } @@ -326,6 +327,9 @@ pub(crate) fn add_common_recursion_gates, const D: builder.add_gate_to_gate_set(GateRef::new(ExponentiationGate::new_from_config( &builder.config, ))); + builder.add_gate_to_gate_set(GateRef::new(ConstantGate::new( + builder.config.num_constants, + ))); } /// Recursive version of `get_memory_extra_looking_sum`. @@ -838,12 +842,12 @@ where witness, &public_values_target.trie_roots_before, &public_values.trie_roots_before, - ); + )?; set_trie_roots_target( witness, &public_values_target.trie_roots_after, &public_values.trie_roots_after, - ); + )?; set_block_metadata_target( witness, &public_values_target.block_metadata, @@ -853,7 +857,7 @@ where witness, &public_values_target.block_hashes, &public_values.block_hashes, - ); + )?; set_extra_public_values_target( witness, &public_values_target.extra_block_data, @@ -902,10 +906,12 @@ where H: Hasher, W: Witness, { - witness.set_target( - public_values_target.chain_id, - F::from_canonical_u64(public_values.chain_id.low_u64()), - ); + witness + .set_target( + public_values_target.chain_id, + F::from_canonical_u64(public_values.chain_id.low_u64()), + ) + .map_err(ProgramError::from)?; for (i, limb) in public_values .checkpoint_state_trie_root @@ -914,14 +920,18 @@ where .into_iter() .enumerate() { - witness.set_target( - public_values_target.checkpoint_state_trie_root[2 * i], - F::from_canonical_u32(limb as u32), - ); - witness.set_target( - public_values_target.checkpoint_state_trie_root[2 * i + 1], - F::from_canonical_u32((limb >> 32) as u32), - ); + witness + .set_target( + public_values_target.checkpoint_state_trie_root[2 * i], + F::from_canonical_u32(limb as u32), + ) + .map_err(ProgramError::from)?; + witness + .set_target( + public_values_target.checkpoint_state_trie_root[2 * i + 1], + F::from_canonical_u32((limb >> 32) as u32), + ) + .map_err(ProgramError::from)?; } for (i, limb) in public_values @@ -931,18 +941,24 @@ where .into_iter() .enumerate() { - witness.set_target( - public_values_target.new_state_trie_root[2 * i], - F::from_canonical_u32(limb as u32), - ); - witness.set_target( - public_values_target.new_state_trie_root[2 * i + 1], - F::from_canonical_u32((limb >> 32) as u32), - ); + witness + .set_target( + public_values_target.new_state_trie_root[2 * i], + F::from_canonical_u32(limb as u32), + ) + .map_err(ProgramError::from)?; + witness + .set_target( + public_values_target.new_state_trie_root[2 * i + 1], + F::from_canonical_u32((limb >> 32) as u32), + ) + .map_err(ProgramError::from)?; } for (i, limb) in public_values.new_consolidated_hash.iter().enumerate() { - witness.set_target(public_values_target.new_consolidated_hash[i], *limb); + witness + .set_target(public_values_target.new_consolidated_hash[i], *limb) + .map_err(ProgramError::from)?; } Ok(()) @@ -952,7 +968,8 @@ pub(crate) fn set_trie_roots_target( witness: &mut W, trie_roots_target: &TrieRootsTarget, trie_roots: &TrieRoots, -) where +) -> Result<()> +where F: RichField + Extendable, W: Witness, { @@ -960,11 +977,11 @@ pub(crate) fn set_trie_roots_target( witness.set_target( trie_roots_target.state_root[2 * i], F::from_canonical_u32(limb as u32), - ); + )?; witness.set_target( trie_roots_target.state_root[2 * i + 1], F::from_canonical_u32((limb >> 32) as u32), - ); + )?; } for (i, limb) in trie_roots @@ -977,11 +994,11 @@ pub(crate) fn set_trie_roots_target( witness.set_target( trie_roots_target.transactions_root[2 * i], F::from_canonical_u32(limb as u32), - ); + )?; witness.set_target( trie_roots_target.transactions_root[2 * i + 1], F::from_canonical_u32((limb >> 32) as u32), - ); + )?; } for (i, limb) in trie_roots @@ -994,12 +1011,14 @@ pub(crate) fn set_trie_roots_target( witness.set_target( trie_roots_target.receipts_root[2 * i], F::from_canonical_u32(limb as u32), - ); + )?; witness.set_target( trie_roots_target.receipts_root[2 * i + 1], F::from_canonical_u32((limb >> 32) as u32), - ); + )?; } + + Ok(()) } #[cfg(feature = "cdk_erigon")] @@ -1015,7 +1034,9 @@ where match burn_addr_target { BurnAddrTarget::BurnAddr(addr_target) => { let burn_addr_limbs: [F; 8] = u256_limbs::(burn_addr); - witness.set_target_arr(addr_target, &burn_addr_limbs); + witness + .set_target_arr(addr_target, &burn_addr_limbs) + .map_err(ProgramError::from)?; } BurnAddrTarget::Burnt() => panic!("There should be an address target set in cdk_erigon."), } @@ -1036,73 +1057,105 @@ where u256_limbs::(U256::from_big_endian(&block_metadata.block_beneficiary.0))[..5] .try_into() .unwrap(); - witness.set_target_arr(&block_metadata_target.block_beneficiary, &beneficiary_limbs); - witness.set_target( - block_metadata_target.block_timestamp, - u256_to_u32(block_metadata.block_timestamp)?, - ); - witness.set_target( - block_metadata_target.block_number, - u256_to_u32(block_metadata.block_number)?, - ); - witness.set_target( - block_metadata_target.block_difficulty, - u256_to_u32(block_metadata.block_difficulty)?, - ); - witness.set_target_arr( - &block_metadata_target.block_random, - &h256_limbs(block_metadata.block_random), - ); - witness.set_target( - block_metadata_target.block_gaslimit, - u256_to_u32(block_metadata.block_gaslimit)?, - ); - witness.set_target( - block_metadata_target.block_chain_id, - u256_to_u32(block_metadata.block_chain_id)?, - ); + witness + .set_target_arr(&block_metadata_target.block_beneficiary, &beneficiary_limbs) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_timestamp, + u256_to_u32(block_metadata.block_timestamp)?, + ) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_number, + u256_to_u32(block_metadata.block_number)?, + ) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_difficulty, + u256_to_u32(block_metadata.block_difficulty)?, + ) + .map_err(ProgramError::from)?; + witness + .set_target_arr( + &block_metadata_target.block_random, + &h256_limbs(block_metadata.block_random), + ) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_gaslimit, + u256_to_u32(block_metadata.block_gaslimit)?, + ) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_chain_id, + u256_to_u32(block_metadata.block_chain_id)?, + ) + .map_err(ProgramError::from)?; // Basefee fits in 2 limbs let basefee = u256_to_u64(block_metadata.block_base_fee)?; - witness.set_target(block_metadata_target.block_base_fee[0], basefee.0); - witness.set_target(block_metadata_target.block_base_fee[1], basefee.1); - witness.set_target( - block_metadata_target.block_gas_used, - u256_to_u32(block_metadata.block_gas_used)?, - ); + witness + .set_target(block_metadata_target.block_base_fee[0], basefee.0) + .map_err(ProgramError::from)?; + witness + .set_target(block_metadata_target.block_base_fee[1], basefee.1) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_gas_used, + u256_to_u32(block_metadata.block_gas_used)?, + ) + .map_err(ProgramError::from)?; #[cfg(feature = "eth_mainnet")] { // BlobGasUsed fits in 2 limbs let blob_gas_used = u256_to_u64(block_metadata.block_blob_gas_used)?; - witness.set_target( - block_metadata_target.block_blob_gas_used[0], - blob_gas_used.0, - ); - witness.set_target( - block_metadata_target.block_blob_gas_used[1], - blob_gas_used.1, - ); + witness + .set_target( + block_metadata_target.block_blob_gas_used[0], + blob_gas_used.0, + ) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_blob_gas_used[1], + blob_gas_used.1, + ) + .map_err(ProgramError::from)?; // ExcessBlobGas fits in 2 limbs let excess_blob_gas = u256_to_u64(block_metadata.block_excess_blob_gas)?; - witness.set_target( - block_metadata_target.block_excess_blob_gas[0], - excess_blob_gas.0, - ); - witness.set_target( - block_metadata_target.block_excess_blob_gas[1], - excess_blob_gas.1, - ); - - witness.set_target_arr( - &block_metadata_target.parent_beacon_block_root, - &h256_limbs(block_metadata.parent_beacon_block_root), - ); + witness + .set_target( + block_metadata_target.block_excess_blob_gas[0], + excess_blob_gas.0, + ) + .map_err(ProgramError::from)?; + witness + .set_target( + block_metadata_target.block_excess_blob_gas[1], + excess_blob_gas.1, + ) + .map_err(ProgramError::from)?; + + witness + .set_target_arr( + &block_metadata_target.parent_beacon_block_root, + &h256_limbs(block_metadata.parent_beacon_block_root), + ) + .map_err(ProgramError::from)?; } let mut block_bloom_limbs = [F::ZERO; 64]; for (i, limbs) in block_bloom_limbs.chunks_exact_mut(8).enumerate() { limbs.copy_from_slice(&u256_limbs(block_metadata.block_bloom[i])); } - witness.set_target_arr(&block_metadata_target.block_bloom, &block_bloom_limbs); + witness + .set_target_arr(&block_metadata_target.block_bloom, &block_bloom_limbs) + .map_err(ProgramError::from)?; Ok(()) } @@ -1111,7 +1164,8 @@ pub(crate) fn set_block_hashes_target( witness: &mut W, block_hashes_target: &BlockHashesTarget, block_hashes: &BlockHashes, -) where +) -> Result<()> +where F: RichField + Extendable, W: Witness, { @@ -1120,10 +1174,10 @@ pub(crate) fn set_block_hashes_target( witness.set_target_arr( &block_hashes_target.prev_hashes[8 * i..8 * (i + 1)], &block_hash_limbs, - ); + )?; } let cur_block_hash_limbs: [F; 8] = h256_limbs::(block_hashes.cur_hash); - witness.set_target_arr(&block_hashes_target.cur_hash, &cur_block_hash_limbs); + witness.set_target_arr(&block_hashes_target.cur_hash, &cur_block_hash_limbs) } pub(crate) fn set_extra_public_values_target( @@ -1135,24 +1189,36 @@ where F: RichField + Extendable, W: Witness, { - witness.set_target_arr( - &ed_target.checkpoint_state_trie_root, - &h256_limbs::(ed.checkpoint_state_trie_root), - ); - witness.set_target_arr( - &ed_target.checkpoint_consolidated_hash, - &ed.checkpoint_consolidated_hash, - ); - witness.set_target( - ed_target.txn_number_before, - u256_to_u32(ed.txn_number_before)?, - ); - witness.set_target( - ed_target.txn_number_after, - u256_to_u32(ed.txn_number_after)?, - ); - witness.set_target(ed_target.gas_used_before, u256_to_u32(ed.gas_used_before)?); - witness.set_target(ed_target.gas_used_after, u256_to_u32(ed.gas_used_after)?); + witness + .set_target_arr( + &ed_target.checkpoint_state_trie_root, + &h256_limbs::(ed.checkpoint_state_trie_root), + ) + .map_err(ProgramError::from)?; + witness + .set_target_arr( + &ed_target.checkpoint_consolidated_hash, + &ed.checkpoint_consolidated_hash, + ) + .map_err(ProgramError::from)?; + witness + .set_target( + ed_target.txn_number_before, + u256_to_u32(ed.txn_number_before)?, + ) + .map_err(ProgramError::from)?; + witness + .set_target( + ed_target.txn_number_after, + u256_to_u32(ed.txn_number_after)?, + ) + .map_err(ProgramError::from)?; + witness + .set_target(ed_target.gas_used_before, u256_to_u32(ed.gas_used_before)?) + .map_err(ProgramError::from)?; + witness + .set_target(ed_target.gas_used_after, u256_to_u32(ed.gas_used_after)?) + .map_err(ProgramError::from)?; Ok(()) } @@ -1166,12 +1232,24 @@ where F: RichField + Extendable, W: Witness, { - witness.set_target(rd_target.program_counter, u256_to_u32(rd.program_counter)?); - witness.set_target(rd_target.is_kernel, u256_to_u32(rd.is_kernel)?); - witness.set_target(rd_target.stack_len, u256_to_u32(rd.stack_len)?); - witness.set_target_arr(&rd_target.stack_top, &u256_limbs(rd.stack_top)); - witness.set_target(rd_target.context, u256_to_u32(rd.context)?); - witness.set_target(rd_target.gas_used, u256_to_u32(rd.gas_used)?); + witness + .set_target(rd_target.program_counter, u256_to_u32(rd.program_counter)?) + .map_err(ProgramError::from)?; + witness + .set_target(rd_target.is_kernel, u256_to_u32(rd.is_kernel)?) + .map_err(ProgramError::from)?; + witness + .set_target(rd_target.stack_len, u256_to_u32(rd.stack_len)?) + .map_err(ProgramError::from)?; + witness + .set_target_arr(&rd_target.stack_top, &u256_limbs(rd.stack_top)) + .map_err(ProgramError::from)?; + witness + .set_target(rd_target.context, u256_to_u32(rd.context)?) + .map_err(ProgramError::from)?; + witness + .set_target(rd_target.gas_used, u256_to_u32(rd.gas_used)?) + .map_err(ProgramError::from)?; Ok(()) } @@ -1186,12 +1264,14 @@ where W: Witness, { for i in 0..mc.mem_cap.len() { - witness.set_hash_target( - mc_target.mem_cap.0[i], - HashOut { - elements: mc.mem_cap[i].map(|elt| F::from_canonical_u64(elt.as_u64())), - }, - ); + witness + .set_hash_target( + mc_target.mem_cap.0[i], + HashOut { + elements: mc.mem_cap[i].map(|elt| F::from_canonical_u64(elt.as_u64())), + }, + ) + .map_err(ProgramError::from)?; } Ok(()) } diff --git a/evm_arithmetization/src/testing_utils.rs b/evm_arithmetization/src/testing_utils.rs index 5f1b1b041..ac3cdcf0f 100644 --- a/evm_arithmetization/src/testing_utils.rs +++ b/evm_arithmetization/src/testing_utils.rs @@ -10,17 +10,65 @@ use mpt_trie::{ nibbles::Nibbles, partial_trie::{HashedPartialTrie, Node, PartialTrie}, }; +use plonky2::field::goldilocks_field::GoldilocksField; +use plonky2::fri::reduction_strategies::FriReductionStrategy; +use plonky2::fri::FriConfig; +use plonky2::plonk::circuit_data::CircuitConfig; +use starky::config::StarkConfig; pub use crate::cpu::kernel::cancun_constants::*; pub use crate::cpu::kernel::constants::global_exit_root::*; -use crate::generation::TrieInputs; +use crate::generation::{TrieInputs, TrimmedGenerationInputs}; use crate::proof::TrieRoots; -use crate::{generation::mpt::AccountRlp, proof::BlockMetadata, util::h2u, GenerationInputs}; +#[cfg(test)] +use crate::witness::operation::Operation; +use crate::{ + generation::mpt::AccountRlp, proof::BlockMetadata, util::h2u, GenerationInputs, + GenerationSegmentData, SegmentDataIterator, +}; pub const EMPTY_NODE_HASH: H256 = H256(hex!( "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" )); +/// The recursion threshold when using test configurations +pub const TEST_THRESHOLD_DEGREE_BITS: usize = 10; + +/// The recursion threshold for 2-to-1 block circuit. +pub const TWO_TO_ONE_BLOCK_CIRCUIT_TEST_THRESHOLD_DEGREE_BITS: usize = 13; + +/// A fast STARK config for testing purposes only. +pub const TEST_STARK_CONFIG: StarkConfig = StarkConfig { + security_bits: 1, + num_challenges: 1, + fri_config: FriConfig { + rate_bits: 1, + cap_height: 4, + proof_of_work_bits: 1, + reduction_strategy: FriReductionStrategy::ConstantArityBits(4, 5), + num_query_rounds: 1, + }, +}; + +/// A fast Circuit config for testing purposes only. +pub const TEST_RECURSION_CONFIG: CircuitConfig = CircuitConfig { + num_wires: 135, + num_routed_wires: 80, + num_constants: 2, + use_base_arithmetic_gate: true, + security_bits: 1, + num_challenges: 1, + zero_knowledge: false, + max_quotient_degree_factor: 8, + fri_config: FriConfig { + rate_bits: 3, + cap_height: 4, + proof_of_work_bits: 1, + reduction_strategy: FriReductionStrategy::ConstantArityBits(4, 5), + num_query_rounds: 1, + }, +}; + pub fn init_logger() { let _ = try_init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info")); } @@ -165,7 +213,7 @@ pub fn scalable_contract_from_storage(storage_trie: &HashedPartialTrie) -> Accou } } -pub fn empty_payload() -> Result { +fn empty_payload() -> Result { // Set up default block metadata let block_metadata = BlockMetadata { block_beneficiary: Address::zero(), @@ -213,3 +261,36 @@ pub fn empty_payload() -> Result { Ok(inputs) } + +pub fn segment_with_empty_tables() -> Result<( + TrimmedGenerationInputs, + GenerationSegmentData, +)> { + let payload = empty_payload()?; + let max_cpu_len_log = Some(7); + let mut segment_iterator = + SegmentDataIterator::::new(&payload, max_cpu_len_log); + let (trimmed_inputs, segment_data) = segment_iterator.next().unwrap()?; + + Ok((trimmed_inputs, segment_data)) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::logic; + + // Ensures that there are no Keccak and Logic ops in the segment. + #[test] + fn test_segment_with_empty_tables() -> Result<()> { + let (_, segment_data) = segment_with_empty_tables()?; + + let opcode_counts = &segment_data.opcode_counts; + assert!(!opcode_counts.contains_key(&Operation::KeccakGeneral)); + assert!(!opcode_counts.contains_key(&Operation::BinaryLogic(logic::Op::And))); + assert!(!opcode_counts.contains_key(&Operation::BinaryLogic(logic::Op::Or))); + assert!(!opcode_counts.contains_key(&Operation::BinaryLogic(logic::Op::Xor))); + + Ok(()) + } +} diff --git a/evm_arithmetization/src/verifier.rs b/evm_arithmetization/src/verifier.rs index 1c3f090c5..1d4fdf387 100644 --- a/evm_arithmetization/src/verifier.rs +++ b/evm_arithmetization/src/verifier.rs @@ -80,17 +80,20 @@ pub(crate) fn initial_memory_merkle_cap< pub mod testing { use anyhow::{ensure, Result}; use ethereum_types::{BigEndianHash, U256}; + use hashbrown::HashMap; use itertools::Itertools; use plonky2::field::extension::Extendable; use plonky2::hash::hash_types::RichField; use plonky2::plonk::config::{GenericConfig, GenericHashOut}; use starky::config::StarkConfig; - use starky::cross_table_lookup::{get_ctl_vars_from_proofs, verify_cross_table_lookups}; + use starky::cross_table_lookup::verify_cross_table_lookups; + use starky::cross_table_lookup::CrossTableLookup; + use starky::cross_table_lookup::CtlCheckVars; use starky::lookup::GrandProductChallenge; use starky::stark::Stark; use starky::verifier::verify_stark_proof_with_challenges; - use crate::all_stark::Table; + use crate::all_stark::{Table, MEMORY_CTL_IDX, NUM_CTLS, OPTIONAL_TABLE_INDICES}; use crate::cpu::kernel::aggregator::KERNEL; use crate::cpu::kernel::constants::global_metadata::GlobalMetadata; use crate::get_challenges::testing::AllProofChallenges; @@ -121,6 +124,22 @@ pub mod testing { self.poseidon_stark.num_lookup_helper_columns(config), ] } + + pub fn get_constraint_degree(&self, table: Table) -> usize { + match table { + Table::Arithmetic => self.arithmetic_stark.constraint_degree(), + Table::BytePacking => self.byte_packing_stark.constraint_degree(), + Table::Cpu => self.cpu_stark.constraint_degree(), + Table::Keccak => self.keccak_stark.constraint_degree(), + Table::KeccakSponge => self.keccak_sponge_stark.constraint_degree(), + Table::Logic => self.logic_stark.constraint_degree(), + Table::Memory => self.memory_stark.constraint_degree(), + Table::MemBefore => self.mem_before_stark.constraint_degree(), + Table::MemAfter => self.mem_after_stark.constraint_degree(), + #[cfg(feature = "cdk_erigon")] + Table::Poseidon => self.poseidon_stark.constraint_degree(), + } + } } fn verify_initial_memory< @@ -184,26 +203,44 @@ pub mod testing { cross_table_lookups, } = all_stark; - let ctl_vars_per_table = get_ctl_vars_from_proofs( - &all_proof.multi_proof, - cross_table_lookups, - &ctl_challenges, - &num_lookup_columns, - all_stark.arithmetic_stark.constraint_degree(), - ); - let stark_proofs = &all_proof.multi_proof.stark_proofs; macro_rules! verify_table { ($stark:ident, $table:expr) => { - verify_stark_proof_with_challenges( - $stark, - &stark_proofs[*$table].proof, - &stark_challenges[*$table], - Some(&ctl_vars_per_table[*$table]), - &[], - config, - )?; + if !OPTIONAL_TABLE_INDICES.contains(&*$table) || all_proof.table_in_use[*$table] { + let stark_proof = &stark_proofs[*$table] + .as_ref() + .expect("Missing stark_proof") + .proof; + let ctl_vars = { + let (total_num_helpers, _, num_helpers_by_ctl) = + CrossTableLookup::num_ctl_helpers_zs_all( + &all_stark.cross_table_lookups, + *$table, + config.num_challenges, + $stark.constraint_degree(), + ); + CtlCheckVars::from_proof( + *$table, + &stark_proof, + &all_stark.cross_table_lookups, + &ctl_challenges, + num_lookup_columns[*$table], + total_num_helpers, + &num_helpers_by_ctl, + ) + }; + verify_stark_proof_with_challenges( + $stark, + stark_proof, + &stark_challenges[*$table] + .as_ref() + .expect("Missing challenges"), + Some(&ctl_vars), + &[], + config, + )?; + } }; } @@ -229,20 +266,48 @@ pub mod testing { // Extra sums to add to the looked last value. // Only necessary for the Memory values. - let mut extra_looking_sums = vec![vec![F::ZERO; config.num_challenges]; NUM_TABLES]; + let mut extra_looking_sums = + HashMap::from_iter((0..NUM_CTLS).map(|i| (i, vec![F::ZERO; config.num_challenges]))); // Memory - extra_looking_sums[*Table::Memory] = (0..config.num_challenges) - .map(|i| get_memory_extra_looking_sum(&public_values, ctl_challenges.challenges[i])) - .collect_vec(); + extra_looking_sums.insert( + MEMORY_CTL_IDX, + (0..config.num_challenges) + .map(|i| get_memory_extra_looking_sum(&public_values, ctl_challenges.challenges[i])) + .collect_vec(), + ); + + let all_ctls = &all_stark.cross_table_lookups; + + let table_all = Table::all(); + let ctl_zs_first_values = core::array::from_fn(|i| { + let table = table_all[i]; + if let Some(stark_proof) = &stark_proofs[i] { + stark_proof + .proof + .openings + .ctl_zs_first + .as_ref() + .expect("Missing ctl_zs") + .clone() + } else if OPTIONAL_TABLE_INDICES.contains(&table) { + let degree = all_stark.get_constraint_degree(table); + let (_, n, _) = CrossTableLookup::num_ctl_helpers_zs_all( + all_ctls, + i, + config.num_challenges, + degree, + ); + vec![F::ZERO; n] + } else { + panic!("Unable to find stark_proof for table {:?}", table); + } + }); verify_cross_table_lookups::( cross_table_lookups, - all_proof - .multi_proof - .stark_proofs - .map(|p| p.proof.openings.ctl_zs_first.unwrap()), - Some(&extra_looking_sums), + ctl_zs_first_values, + &extra_looking_sums, config, ) } diff --git a/evm_arithmetization/src/witness/errors.rs b/evm_arithmetization/src/witness/errors.rs index ef1e9f73b..adb9dd94d 100644 --- a/evm_arithmetization/src/witness/errors.rs +++ b/evm_arithmetization/src/witness/errors.rs @@ -16,6 +16,13 @@ pub enum ProgramError { IntegerTooLarge, ProverInputError(ProverInputError), UnknownContractCode, + Other(String), +} + +impl From for ProgramError { + fn from(e: anyhow::Error) -> Self { + ProgramError::Other(e.to_string()) + } } #[allow(clippy::enum_variant_names)] diff --git a/evm_arithmetization/src/witness/memory.rs b/evm_arithmetization/src/witness/memory.rs index ff616a348..7abced8a1 100644 --- a/evm_arithmetization/src/witness/memory.rs +++ b/evm_arithmetization/src/witness/memory.rs @@ -23,7 +23,8 @@ use crate::witness::errors::ProgramError; use crate::witness::errors::ProgramError::MemoryError; impl MemoryChannel { - pub(crate) fn index(&self) -> usize { + #[inline(always)] + pub(crate) const fn index(&self) -> usize { match *self { Code => 0, GeneralPurpose(n) => { @@ -43,6 +44,7 @@ pub struct MemoryAddress { } impl MemoryAddress { + #[inline(always)] pub(crate) const fn new(context: usize, segment: Segment, virt: usize) -> Self { Self { context, @@ -69,7 +71,8 @@ impl MemoryAddress { Ok(Self::new(context, Segment::all()[segment], virt)) } - pub(crate) fn increment(&mut self) { + #[inline(always)] + pub(crate) const fn increment(&mut self) { self.virt = self.virt.saturating_add(1); } } @@ -104,7 +107,8 @@ pub(crate) static DUMMY_MEMOP: MemoryOp = MemoryOp { }; impl MemoryOp { - pub(crate) fn new( + #[inline(always)] + pub(crate) const fn new( channel: MemoryChannel, clock: usize, address: MemoryAddress, @@ -123,6 +127,7 @@ impl MemoryOp { } } + #[inline(always)] pub(crate) const fn new_dummy_read( address: MemoryAddress, timestamp: usize, @@ -137,6 +142,7 @@ impl MemoryOp { } } + #[inline(always)] pub(crate) const fn sorting_key(&self) -> (usize, usize, usize, usize) { ( self.address.context, @@ -175,6 +181,7 @@ impl MemoryState { } } + #[inline] pub(crate) fn get(&self, address: MemoryAddress) -> Option { if address.context >= self.contexts.len() { return None; @@ -188,7 +195,7 @@ impl MemoryState { return None; } let val = self.contexts[address.context].segments[address.segment].get(address.virt); - assert!( + debug_assert!( val.bits() <= segment.bit_range(), "Value {} exceeds {:?} range of {} bits", val, @@ -245,6 +252,7 @@ impl MemoryState { } } + #[inline] pub(crate) fn set(&mut self, address: MemoryAddress, val: U256) { while address.context >= self.contexts.len() { self.contexts.push(MemoryContextState::default()); @@ -252,7 +260,7 @@ impl MemoryState { let segment = Segment::all()[address.segment]; - assert!( + debug_assert!( val.bits() <= segment.bit_range(), "Value {} exceeds {:?} range of {} bits", val, @@ -320,6 +328,7 @@ pub(crate) struct MemorySegmentState { } impl MemorySegmentState { + #[inline] pub(crate) fn get(&self, virtual_addr: usize) -> U256 { self.content .get(virtual_addr) @@ -328,6 +337,7 @@ impl MemorySegmentState { .unwrap_or_default() } + #[inline] pub(crate) fn set(&mut self, virtual_addr: usize, value: U256) { if virtual_addr >= self.content.len() { self.content.resize(virtual_addr + 1, None); diff --git a/evm_arithmetization/src/witness/traces.rs b/evm_arithmetization/src/witness/traces.rs index 3ff68d8b6..e1daa53b0 100644 --- a/evm_arithmetization/src/witness/traces.rs +++ b/evm_arithmetization/src/witness/traces.rs @@ -126,10 +126,12 @@ impl Traces { self.poseidon_ops.truncate(checkpoint.poseidon_len); } + #[inline(always)] pub(crate) fn mem_ops_since(&self, checkpoint: TraceCheckpoint) -> &[MemoryOp] { &self.memory_ops[checkpoint.memory_len..] } + #[inline(always)] pub(crate) fn clock(&self) -> usize { self.cpu.len() } @@ -142,7 +144,7 @@ impl Traces { mut trace_lengths: TraceCheckpoint, config: &StarkConfig, timing: &mut TimingTree, - ) -> [Vec>; NUM_TABLES] + ) -> ([Vec>; NUM_TABLES], usize) where T: RichField + Extendable, { @@ -238,19 +240,22 @@ impl Traces { final_values.len() ); - [ - arithmetic_trace, - byte_packing_trace, - cpu_trace, - keccak_trace, - keccak_sponge_trace, - logic_trace, - memory_trace, - mem_before_trace, - mem_after_trace, - #[cfg(feature = "cdk_erigon")] - poseidon_trace, - ] + ( + [ + arithmetic_trace, + byte_packing_trace, + cpu_trace, + keccak_trace, + keccak_sponge_trace, + logic_trace, + memory_trace, + mem_before_trace, + mem_after_trace, + #[cfg(feature = "cdk_erigon")] + poseidon_trace, + ], + final_values.len(), + ) } } diff --git a/evm_arithmetization/src/witness/transition.rs b/evm_arithmetization/src/witness/transition.rs index 31bfb5469..fdcf9af65 100644 --- a/evm_arithmetization/src/witness/transition.rs +++ b/evm_arithmetization/src/witness/transition.rs @@ -6,6 +6,7 @@ use super::util::stack_pop_with_log_and_fill; use crate::cpu::columns::CpuColumnsView; use crate::cpu::kernel::aggregator::KERNEL; use crate::cpu::kernel::constants::context_metadata::ContextMetadata; +use crate::cpu::kernel::constants::MAX_CODE_SIZE; use crate::cpu::kernel::opcodes::get_opcode; use crate::cpu::membus::NUM_GP_CHANNELS; use crate::cpu::stack::{ @@ -383,6 +384,10 @@ where .try_into() .map_err(|_| ProgramError::InvalidJumpDestination)?; + if !self.is_kernel() && dst > MAX_CODE_SIZE as u32 { + return Err(ProgramError::InvalidJumpDestination); + } + if !self.generate_jumpdest_analysis(dst as usize) { row.mem_channels[1].value[0] = F::ONE; @@ -450,6 +455,11 @@ where let dst: u32 = dst .try_into() .map_err(|_| ProgramError::InvalidJumpiDestination)?; + + if !self.is_kernel() && dst > MAX_CODE_SIZE as u32 { + return Err(ProgramError::InvalidJumpiDestination); + } + if !self.generate_jumpdest_analysis(dst as usize) { row.general.jumps_mut().should_jump = F::ONE; let cond_sum_u64 = cond diff --git a/evm_arithmetization/src/witness/util.rs b/evm_arithmetization/src/witness/util.rs index 5bd103096..b08009e06 100644 --- a/evm_arithmetization/src/witness/util.rs +++ b/evm_arithmetization/src/witness/util.rs @@ -16,12 +16,14 @@ use crate::memory::segments::Segment; use crate::witness::errors::ProgramError; use crate::witness::memory::{MemoryAddress, MemoryChannel, MemoryOp, MemoryOpKind}; +#[inline(always)] fn to_byte_checked(n: U256) -> u8 { let res = n.byte(0); assert_eq!(n, res.into()); res } +#[inline(always)] fn to_bits_le(n: u8) -> [F; 8] { let mut res = [F::ZERO; 8]; for (i, bit) in res.iter_mut().enumerate() { @@ -76,7 +78,8 @@ pub(crate) fn fill_channel_with_value( /// Pushes without writing in memory. This happens in opcodes where a push /// immediately follows a pop. -pub(crate) fn push_no_write(state: &mut GenerationState, val: U256) { +#[inline(always)] +pub(crate) const fn push_no_write(state: &mut GenerationState, val: U256) { state.registers.stack_top = val; state.registers.stack_len += 1; } @@ -135,6 +138,7 @@ pub(crate) fn mem_read_with_log( (val, op) } +#[inline(always)] pub(crate) fn mem_write_log( channel: MemoryChannel, address: MemoryAddress, diff --git a/evm_arithmetization/tests/add11_yml.rs b/evm_arithmetization/tests/add11_yml.rs index dd9bfb1ce..5406ebe6a 100644 --- a/evm_arithmetization/tests/add11_yml.rs +++ b/evm_arithmetization/tests/add11_yml.rs @@ -11,12 +11,10 @@ use evm_arithmetization::proof::{BlockHashes, BlockMetadata, TrieRoots}; use evm_arithmetization::prover::testing::prove_all_segments; use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, init_logger, - preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, + preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{ - AllStark, GenerationInputs, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH, -}; +use evm_arithmetization::{AllStark, GenerationInputs, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use hex_literal::hex; use keccak_hash::keccak; use mpt_trie::nibbles::Nibbles; @@ -208,7 +206,7 @@ fn add11_yml() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let inputs = get_generation_inputs(); let max_cpu_len_log = 20; diff --git a/evm_arithmetization/tests/empty_tables.rs b/evm_arithmetization/tests/empty_tables.rs new file mode 100644 index 000000000..235bbb715 --- /dev/null +++ b/evm_arithmetization/tests/empty_tables.rs @@ -0,0 +1,117 @@ +#![cfg(feature = "eth_mainnet")] + +use std::time::Duration; + +use evm_arithmetization::fixed_recursive_verifier::AllRecursiveCircuits; +use evm_arithmetization::prover::prove; +use evm_arithmetization::testing_utils::{ + init_logger, segment_with_empty_tables, TEST_RECURSION_CONFIG, TEST_STARK_CONFIG, + TEST_THRESHOLD_DEGREE_BITS, +}; +use evm_arithmetization::verifier::testing::verify_all_proofs; +use evm_arithmetization::AllStark; +use plonky2::field::goldilocks_field::GoldilocksField; +use plonky2::plonk::config::PoseidonGoldilocksConfig; +use plonky2::timed; +use plonky2::util::serialization::{DefaultGateSerializer, DefaultGeneratorSerializer}; +use plonky2::util::timing::TimingTree; + +/// This test focuses on testing zkVM proofs with some empty tables. +#[test] +fn empty_tables() -> anyhow::Result<()> { + type F = GoldilocksField; + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + + init_logger(); + + let all_stark = AllStark::::default(); + let config = TEST_STARK_CONFIG; + let timing = &mut TimingTree::new("Empty Table Test", log::Level::Info); + + // Generate segment data + let (payload, mut segment_data) = segment_with_empty_tables()?; + + // Create all STARK proofs + let mut proofs = vec![]; + let proof = timed!( + timing, + log::Level::Info, + "Create all STARK proofs", + prove::( + &all_stark, + &config, + payload, + &mut segment_data, + timing, + None, + )? + ); + proofs.push(proof); + + // Verify the generated STARK proofs + verify_all_proofs(&all_stark, &proofs, &config)?; + + // Process and generate segment proof + let all_circuits = timed!( + timing, + log::Level::Info, + "Create all recursive circuits", + AllRecursiveCircuits::::new( + &all_stark, + &[16..17, 8..9, 7..8, 4..6, 8..9, 4..5, 16..17, 16..17, 16..17], + &config, + Some(&TEST_RECURSION_CONFIG), + Some(&TEST_RECURSION_CONFIG), + Some(TEST_THRESHOLD_DEGREE_BITS), + ) + ); + + let segment_proof = timed!( + timing, + log::Level::Info, + "Prove segment", + all_circuits.prove_segment_with_all_proofs(&proofs[0], &config, None)? + ); + + // Verify the generated segment proof + timed!( + timing, + log::Level::Info, + "Verify segment proof", + all_circuits.verify_root(segment_proof.proof_with_pvs.intern.clone())? + ); + + // Print timing details + timing.print(); + + // Test serialization of preprocessed circuits + { + let gate_serializer = DefaultGateSerializer; + let generator_serializer = DefaultGeneratorSerializer::::default(); + + let timing = TimingTree::new("serialize AllRecursiveCircuits", log::Level::Info); + let all_circuits_bytes = all_circuits + .to_bytes(false, &gate_serializer, &generator_serializer) + .map_err(|_| anyhow::Error::msg("AllRecursiveCircuits serialization failed."))?; + timing.filter(Duration::from_millis(100)).print(); + log::info!( + "AllRecursiveCircuits length: {} bytes", + all_circuits_bytes.len() + ); + + let timing = TimingTree::new("deserialize AllRecursiveCircuits", log::Level::Info); + let all_circuits_from_bytes = AllRecursiveCircuits::from_bytes( + &all_circuits_bytes, + false, + &gate_serializer, + &generator_serializer, + ) + .map_err(|_| anyhow::Error::msg("AllRecursiveCircuits deserialization failed."))?; + timing.filter(Duration::from_millis(100)).print(); + + assert_eq!(all_circuits, all_circuits_from_bytes); + } + + Ok(()) +} diff --git a/evm_arithmetization/tests/erc20.rs b/evm_arithmetization/tests/erc20.rs index 2baf716e7..f594c7bd3 100644 --- a/evm_arithmetization/tests/erc20.rs +++ b/evm_arithmetization/tests/erc20.rs @@ -11,9 +11,10 @@ use evm_arithmetization::prover::testing::prove_all_segments; use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, create_account_storage, init_logger, preinitialized_state_and_storage_tries, sd2u, update_beacon_roots_account_storage, + TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{AllStark, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH}; +use evm_arithmetization::{AllStark, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use hex_literal::hex; use keccak_hash::keccak; use mpt_trie::nibbles::Nibbles; @@ -52,7 +53,7 @@ fn test_erc20() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let beneficiary = hex!("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"); let sender = hex!("70997970C51812dc3A010C7d01b50e0d17dc79C8"); diff --git a/evm_arithmetization/tests/erc721.rs b/evm_arithmetization/tests/erc721.rs index e416dc87a..8602a9900 100644 --- a/evm_arithmetization/tests/erc721.rs +++ b/evm_arithmetization/tests/erc721.rs @@ -11,10 +11,10 @@ use evm_arithmetization::prover::testing::prove_all_segments; use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, create_account_storage, init_logger, preinitialized_state_and_storage_tries, sd2u, sh2u, - update_beacon_roots_account_storage, + update_beacon_roots_account_storage, TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{AllStark, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH}; +use evm_arithmetization::{AllStark, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use hex_literal::hex; use keccak_hash::keccak; use mpt_trie::nibbles::Nibbles; @@ -56,7 +56,7 @@ fn test_erc721() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let beneficiary = hex!("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"); let owner = hex!("5B38Da6a701c568545dCfcB03FcB875f56beddC4"); diff --git a/evm_arithmetization/tests/global_exit_root.rs b/evm_arithmetization/tests/global_exit_root.rs index b7e82c7a0..5495d4100 100644 --- a/evm_arithmetization/tests/global_exit_root.rs +++ b/evm_arithmetization/tests/global_exit_root.rs @@ -11,9 +11,10 @@ use evm_arithmetization::testing_utils::{ ger_account_nibbles, ger_contract_from_storage, init_logger, scalable_account_nibbles, scalable_contract_from_storage, update_ger_account_storage, update_scalable_account_storage, ADDRESS_SCALABLE_L2_ADDRESS_HASHED, GLOBAL_EXIT_ROOT_ACCOUNT, GLOBAL_EXIT_ROOT_ADDRESS_HASHED, + TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{AllStark, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH}; +use evm_arithmetization::{AllStark, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use keccak_hash::keccak; use mpt_trie::partial_trie::{HashedPartialTrie, PartialTrie}; use plonky2::field::goldilocks_field::GoldilocksField; @@ -31,7 +32,7 @@ fn test_global_exit_root() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let block_metadata = BlockMetadata { block_timestamp: 1.into(), diff --git a/evm_arithmetization/tests/log_opcode.rs b/evm_arithmetization/tests/log_opcode.rs index 81daf588c..4f274b0b9 100644 --- a/evm_arithmetization/tests/log_opcode.rs +++ b/evm_arithmetization/tests/log_opcode.rs @@ -15,10 +15,10 @@ use evm_arithmetization::proof::{BlockHashes, BlockMetadata, TrieRoots}; use evm_arithmetization::prover::testing::prove_all_segments; use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, init_logger, - preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, + preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{AllStark, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH}; +use evm_arithmetization::{AllStark, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use hex_literal::hex; use keccak_hash::keccak; use mpt_trie::nibbles::Nibbles; @@ -38,7 +38,7 @@ fn test_log_opcodes() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let beneficiary = hex!("2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"); let sender = hex!("af1276cbb260bb13deddb4209ae99ae6e497f446"); diff --git a/evm_arithmetization/tests/selfdestruct.rs b/evm_arithmetization/tests/selfdestruct.rs index f97dd41cd..e528ae804 100644 --- a/evm_arithmetization/tests/selfdestruct.rs +++ b/evm_arithmetization/tests/selfdestruct.rs @@ -10,10 +10,10 @@ use evm_arithmetization::proof::{BlockHashes, BlockMetadata, TrieRoots}; use evm_arithmetization::prover::testing::prove_all_segments; use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, init_logger, - preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, + preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{AllStark, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH}; +use evm_arithmetization::{AllStark, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use hex_literal::hex; use keccak_hash::keccak; use mpt_trie::nibbles::Nibbles; @@ -34,7 +34,7 @@ fn test_selfdestruct() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let beneficiary = hex!("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"); let sender = hex!("5eb96AA102a29fAB267E12A40a5bc6E9aC088759"); diff --git a/evm_arithmetization/tests/simple_transfer.rs b/evm_arithmetization/tests/simple_transfer.rs index a1e7fb655..6d2cbb6d0 100644 --- a/evm_arithmetization/tests/simple_transfer.rs +++ b/evm_arithmetization/tests/simple_transfer.rs @@ -11,10 +11,10 @@ use evm_arithmetization::proof::{BlockHashes, BlockMetadata, TrieRoots}; use evm_arithmetization::prover::testing::prove_all_segments; use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, init_logger, - preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, + preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{AllStark, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH}; +use evm_arithmetization::{AllStark, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use hex_literal::hex; use keccak_hash::keccak; use mpt_trie::nibbles::Nibbles; @@ -35,7 +35,7 @@ fn test_simple_transfer() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let beneficiary = hex!("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"); let sender = hex!("2c7536e3605d9c16a7a3d7b1898e529396a65c23"); diff --git a/evm_arithmetization/tests/two_to_one_block.rs b/evm_arithmetization/tests/two_to_one_block.rs index 378aaf3f8..93e26f211 100644 --- a/evm_arithmetization/tests/two_to_one_block.rs +++ b/evm_arithmetization/tests/two_to_one_block.rs @@ -11,6 +11,7 @@ use evm_arithmetization::proof::{ use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, init_logger, preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, + TEST_RECURSION_CONFIG, TEST_STARK_CONFIG, TEST_THRESHOLD_DEGREE_BITS, }; use evm_arithmetization::{AllRecursiveCircuits, AllStark, Node, StarkConfig}; use hex_literal::hex; @@ -161,19 +162,21 @@ fn get_test_block_proof( Ok(wrapped_block_proof) } -#[ignore] #[test] fn test_two_to_one_block_aggregation() -> anyhow::Result<()> { init_logger(); let some_timestamps = [127, 42, 65, 43]; let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let all_circuits = AllRecursiveCircuits::new( &all_stark, - &[16..17, 8..9, 12..13, 8..9, 8..9, 6..7, 17..18, 17..18, 7..8], + &[16..17, 8..9, 12..13, 8..9, 8..9, 6..7, 17..18, 16..17, 7..8], &config, + Some(&TEST_RECURSION_CONFIG), + Some(&TEST_RECURSION_CONFIG), + Some(TEST_THRESHOLD_DEGREE_BITS), ); let bp = some_timestamps diff --git a/evm_arithmetization/tests/withdrawals.rs b/evm_arithmetization/tests/withdrawals.rs index 01b48c0c6..f179d7b7e 100644 --- a/evm_arithmetization/tests/withdrawals.rs +++ b/evm_arithmetization/tests/withdrawals.rs @@ -10,10 +10,10 @@ use evm_arithmetization::proof::{BlockHashes, BlockMetadata, TrieRoots}; use evm_arithmetization::prover::testing::prove_all_segments; use evm_arithmetization::testing_utils::{ beacon_roots_account_nibbles, beacon_roots_contract_from_storage, init_logger, - preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, + preinitialized_state_and_storage_tries, update_beacon_roots_account_storage, TEST_STARK_CONFIG, }; use evm_arithmetization::verifier::testing::verify_all_proofs; -use evm_arithmetization::{AllStark, Node, StarkConfig, EMPTY_CONSOLIDATED_BLOCKHASH}; +use evm_arithmetization::{AllStark, Node, EMPTY_CONSOLIDATED_BLOCKHASH}; use keccak_hash::keccak; use mpt_trie::nibbles::Nibbles; use mpt_trie::partial_trie::{HashedPartialTrie, PartialTrie}; @@ -33,7 +33,7 @@ fn test_withdrawals() -> anyhow::Result<()> { init_logger(); let all_stark = AllStark::::default(); - let config = StarkConfig::standard_fast_config(); + let config = TEST_STARK_CONFIG; let block_metadata = BlockMetadata { block_timestamp: 1.into(), diff --git a/scripts/Cargo.toml b/scripts/Cargo.toml new file mode 100644 index 000000000..d4328f96c --- /dev/null +++ b/scripts/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "xtask" +version = "0.0.0" +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +keywords.workspace = true +categories.workspace = true +publish = false + +[dependencies] +anyhow.workspace = true +clap = { workspace = true, features = ["derive"] } +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true + +[lints] +workspace = true + +[[bin]] +name = "xtask" +path = "xtask.rs" diff --git a/scripts/prove_rpc.sh b/scripts/prove_rpc.sh index 49848fdfe..d56d202fb 100755 --- a/scripts/prove_rpc.sh +++ b/scripts/prove_rpc.sh @@ -1,11 +1,11 @@ #!/bin/bash # Args: -# 1 --> Start block idx -# 2 --> End block index (inclusive) +# 1 --> Start block (number in decimal or block hash with prefix 0x). E.g. `1234` or `0x1d5e7a08dd1f4ce7fa52afe7f4960d78e82e508c874838dee594d5300b8df625`. +# 2 --> End block (number or hash, inclusive). Same format as start block. # 3 --> Rpc endpoint:port (eg. http://35.246.1.96:8545) # 4 --> Rpc type (eg. jerigon / native) -# 5 --> Ignore previous proofs (boolean) +# 5 --> Checkpoint block (number or hash). If argument is missing, start block predecessor will be used. # 6 --> Backoff in milliseconds (optional [default: 0]) # 7 --> Number of retries (optional [default: 0]) # 8 --> Test run only flag `test_only` (optional) @@ -38,13 +38,12 @@ REPO_ROOT=$(git rev-parse --show-toplevel) PROOF_OUTPUT_DIR="${REPO_ROOT}/proofs" OUT_LOG_PATH="${PROOF_OUTPUT_DIR}/b$1_$2.log" ALWAYS_WRITE_LOGS=0 # Change this to `1` if you always want logs to be written. -TOT_BLOCKS=$(($2-$1+1)) START_BLOCK=$1 END_BLOCK=$2 NODE_RPC_URL=$3 NODE_RPC_TYPE=$4 -IGNORE_PREVIOUS_PROOFS=$5 +CHECKPOINT_BLOCK=$5 BACKOFF=${6:-0} RETRIES=${7:-0} @@ -56,41 +55,28 @@ RUN_VERIFICATION="${RUN_VERIFICATION:-false}" # Recommended soft file handle limit. Will warn if it is set lower. RECOMMENDED_FILE_HANDLE_LIMIT=8192 -mkdir -p $PROOF_OUTPUT_DIR +mkdir -p "$PROOF_OUTPUT_DIR" -if $IGNORE_PREVIOUS_PROOFS ; then - # Set checkpoint height to previous block number for the first block in range - prev_proof_num=$(($1-1)) - PREV_PROOF_EXTRA_ARG="--checkpoint-block-number ${prev_proof_num}" +# Handle checkpoint block arg +if [ -n "$CHECKPOINT_BLOCK" ] ; then + # Checkpoint block provided, pass it to the prover as a flag + PREV_PROOF_EXTRA_ARG="--checkpoint-block $CHECKPOINT_BLOCK" else + # Checkpoint block not provided, but is required for hash-based start block + if [[ $START_BLOCK == 0x* ]]; then + echo "Checkpoint block is required when specifying blocks by hash" + exit 1 + fi + + # Checkpoint block not provided, deduce proof starting point from the start block if [[ $1 -gt 1 ]]; then prev_proof_num=$(($1-1)) PREV_PROOF_EXTRA_ARG="-f ${PROOF_OUTPUT_DIR}/b${prev_proof_num}.zkproof" fi fi -# Convert hex to decimal parameters -if [[ $START_BLOCK == 0x* ]]; then - START_BLOCK=$((16#${START_BLOCK#"0x"})) -fi -if [[ $END_BLOCK == 0x* ]]; then - END_BLOCK=$((16#${END_BLOCK#"0x"})) -fi - -# Define block interval -if [ $END_BLOCK == '-' ]; then - # Follow from the start block to the end of the chain - BLOCK_INTERVAL=$START_BLOCK.. -elif [ $START_BLOCK == $END_BLOCK ]; then - # Single block - BLOCK_INTERVAL=$START_BLOCK -else - # Block range - BLOCK_INTERVAL=$START_BLOCK..=$END_BLOCK -fi - # Print out a warning if the we're using `native` and our file descriptor limit is too low. Don't bother if we can't find `ulimit`. -if [ $(command -v ulimit) ] && [ $NODE_RPC_TYPE == "native" ] +if [ "$(command -v ulimit)" ] && [ "$NODE_RPC_TYPE" == "native" ] then file_desc_limit=$(ulimit -n) @@ -108,49 +94,77 @@ fi # other non-proving code. if [[ $8 == "test_only" ]]; then # test only run - echo "Proving blocks ${BLOCK_INTERVAL} in a test_only mode now... (Total: ${TOT_BLOCKS})" - command='cargo r --release --package zero --bin leader -- --test-only --runtime in-memory --load-strategy on-demand --proof-output-dir $PROOF_OUTPUT_DIR --block-batch-size $BLOCK_BATCH_SIZE rpc --rpc-type "$NODE_RPC_TYPE" --rpc-url "$NODE_RPC_URL" --block-interval $BLOCK_INTERVAL $PREV_PROOF_EXTRA_ARG --backoff "$BACKOFF" --max-retries "$RETRIES" ' + echo "Proving blocks from ($START_BLOCK) to ($END_BLOCK)" + command="cargo r --release --package zero --bin leader -- \ +--test-only \ +--runtime in-memory \ +--load-strategy on-demand \ +--proof-output-dir $PROOF_OUTPUT_DIR \ +--block-batch-size $BLOCK_BATCH_SIZE \ +rpc \ +--rpc-type $NODE_RPC_TYPE \ +--rpc-url $NODE_RPC_URL \ +--start-block $START_BLOCK \ +--end-block $END_BLOCK \ +--backoff $BACKOFF \ +--max-retries $RETRIES \ +$PREV_PROOF_EXTRA_ARG" + if [ "$OUTPUT_TO_TERMINAL" = true ]; then - eval $command + eval "$command" retVal=$? echo -e "Proof witness generation finished with result: $retVal" exit $retVal else - eval $command > $OUT_LOG_PATH 2>&1 - if grep -q 'All proof witnesses have been generated successfully.' $OUT_LOG_PATH; then + eval "$command" > "$OUT_LOG_PATH" 2>&1 + if grep -q 'All proof witnesses have been generated successfully.' "$OUT_LOG_PATH"; then echo -e "Success - Note this was just a test, not a proof" # Remove the log on success if we don't want to keep it. if [ $ALWAYS_WRITE_LOGS -ne 1 ]; then - rm $OUT_LOG_PATH + rm "$OUT_LOG_PATH" fi exit else - echo "Failed to create proof witnesses. See ${OUT_LOG_PATH} for more details." + echo "Failed to create proof witnesses. See $OUT_LOG_PATH for more details." exit 1 fi fi else # normal run - echo "Proving blocks ${BLOCK_INTERVAL} now... (Total: ${TOT_BLOCKS})" - command='cargo r --release --package zero --bin leader -- --runtime in-memory --load-strategy on-demand --proof-output-dir $PROOF_OUTPUT_DIR --block-batch-size $BLOCK_BATCH_SIZE rpc --rpc-type "$NODE_RPC_TYPE" --rpc-url "$3" --block-interval $BLOCK_INTERVAL $PREV_PROOF_EXTRA_ARG --backoff "$BACKOFF" --max-retries "$RETRIES" ' + echo "Proving blocks from ($START_BLOCK) to ($END_BLOCK)" + command="cargo r --release --package zero --bin leader -- \ +--runtime in-memory \ +--load-strategy on-demand \ +--proof-output-dir $PROOF_OUTPUT_DIR \ +--block-batch-size $BLOCK_BATCH_SIZE \ +rpc \ +--rpc-type $NODE_RPC_TYPE \ +--rpc-url $3 \ +--start-block $START_BLOCK \ +--end-block $END_BLOCK \ +--backoff $BACKOFF \ +--max-retries $RETRIES \ +$PREV_PROOF_EXTRA_ARG " + if [ "$OUTPUT_TO_TERMINAL" = true ]; then - eval $command + eval "$command" echo -e "Proof generation finished with result: $?" else - eval $command > $OUT_LOG_PATH 2>&1 + eval "$command" > "$OUT_LOG_PATH" 2>&1 retVal=$? if [ $retVal -ne 0 ]; then # Some error occurred, display the logs and exit. - cat $OUT_LOG_PATH - echo "Block ${i} errored. See ${OUT_LOG_PATH} for more details." + cat "$OUT_LOG_PATH" + echo "Error occurred. See $OUT_LOG_PATH for more details." exit $retVal else # Remove the log on success if we don't want to keep it. if [ $ALWAYS_WRITE_LOGS -ne 1 ]; then - rm $OUT_LOG_PATH + rm "$OUT_LOG_PATH" fi fi - echo "Successfully generated ${TOT_BLOCKS} proofs!" + proof_count=$(grep -c 'INFO zero::prover: Proving block \d' < "$OUT_LOG_PATH") + echo "Successfully generated $proof_count proofs!" fi fi @@ -160,15 +174,15 @@ if [ "$RUN_VERIFICATION" = true ]; then echo "Running the verification for the last proof..." proof_file_name=$PROOF_OUTPUT_DIR/b$END_BLOCK.zkproof - echo "Verifying the proof of the latest block in the interval:" $proof_file_name - cargo r --release --package zero --bin verifier -- -f $proof_file_name > $PROOF_OUTPUT_DIR/verify.out 2>&1 + echo "Verifying the proof of the latest block in the interval:" "$proof_file_name" + cargo r --release --package zero --bin verifier -- -f "$proof_file_name" > "$PROOF_OUTPUT_DIR/verify.out" 2>&1 - if grep -q 'All proofs verified successfully!' $PROOF_OUTPUT_DIR/verify.out; then + if grep -q 'All proofs verified successfully!' "$PROOF_OUTPUT_DIR/verify.out"; then echo "$proof_file_name verified successfully!"; - rm $PROOF_OUTPUT_DIR/verify.out + rm "$PROOF_OUTPUT_DIR/verify.out" else # Some error occurred with verification, display the logs and exit. - cat $PROOF_OUTPUT_DIR/verify.out + cat "$PROOF_OUTPUT_DIR/verify.out" echo "There was an issue with proof verification. See $PROOF_OUTPUT_DIR/verify.out for more details."; exit 1 fi diff --git a/scripts/prove_stdio.sh b/scripts/prove_stdio.sh index 75ece8996..b0d0788ca 100755 --- a/scripts/prove_stdio.sh +++ b/scripts/prove_stdio.sh @@ -53,12 +53,12 @@ if ! [[ $TEST_ONLY == "test_only" ]]; then # These sizes are configured specifically for block 19807080. Don't use this in other scenarios echo "Using specific circuit sizes for witness_b19807080.json" export ARITHMETIC_CIRCUIT_SIZE="16..18" - export BYTE_PACKING_CIRCUIT_SIZE="9..15" - export CPU_CIRCUIT_SIZE="15..20" - export KECCAK_CIRCUIT_SIZE="12..18" + export BYTE_PACKING_CIRCUIT_SIZE="8..15" + export CPU_CIRCUIT_SIZE="9..20" + export KECCAK_CIRCUIT_SIZE="7..18" export KECCAK_SPONGE_CIRCUIT_SIZE="8..14" - export LOGIC_CIRCUIT_SIZE="8..17" - export MEMORY_CIRCUIT_SIZE="18..22" + export LOGIC_CIRCUIT_SIZE="5..17" + export MEMORY_CIRCUIT_SIZE="17..22" export MEMORY_BEFORE_CIRCUIT_SIZE="16..20" export MEMORY_AFTER_CIRCUIT_SIZE="7..20" # TODO(Robin): update Poseidon ranges here and below once Kernel ASM supports Poseidon ops @@ -73,7 +73,7 @@ if ! [[ $TEST_ONLY == "test_only" ]]; then export KECCAK_SPONGE_CIRCUIT_SIZE="8..9" export LOGIC_CIRCUIT_SIZE="4..14" export MEMORY_CIRCUIT_SIZE="17..22" - export MEMORY_BEFORE_CIRCUIT_SIZE="17..18" + export MEMORY_BEFORE_CIRCUIT_SIZE="16..18" export MEMORY_AFTER_CIRCUIT_SIZE="7..8" export POSEIDON_CIRCUIT_SIZE="4..8" else @@ -95,15 +95,22 @@ fi # proof. This is useful for quickly testing decoding and all of the # other non-proving code. if [[ $TEST_ONLY == "test_only" ]]; then - cargo run --quiet --release --package zero --bin leader -- --test-only --runtime in-memory --load-strategy on-demand --block-batch-size $BLOCK_BATCH_SIZE --proof-output-dir $PROOF_OUTPUT_DIR stdio < $INPUT_FILE &> $TEST_OUT_PATH - if grep -q 'All proof witnesses have been generated successfully.' $TEST_OUT_PATH; then + cargo run --quiet --release --package zero --bin leader -- \ + --test-only \ + --runtime in-memory \ + --load-strategy on-demand \ + --block-batch-size "$BLOCK_BATCH_SIZE" \ + --proof-output-dir "$PROOF_OUTPUT_DIR" \ + stdio < "$INPUT_FILE" &> "$TEST_OUT_PATH" + + if grep -q 'All proof witnesses have been generated successfully.' "$TEST_OUT_PATH"; then echo -e "\n\nSuccess - Note this was just a test, not a proof" - rm $TEST_OUT_PATH + rm "$TEST_OUT_PATH" exit else # Some error occurred, display the logs and exit. - cat $OUT_LOG_PATH - echo "Failed to create proof witnesses. See $OUT_LOG_PATH for more details." + cat "$TEST_OUT_PATH" + echo "Failed to create proof witnesses. See $TEST_OUT_PATH for more details." exit 1 fi fi @@ -112,46 +119,43 @@ cargo build --release --jobs "$num_procs" start_time=$(date +%s%N) -"${REPO_ROOT}/target/release/leader" --runtime in-memory --load-strategy on-demand --block-batch-size $BLOCK_BATCH_SIZE \ - --proof-output-dir $PROOF_OUTPUT_DIR stdio < $INPUT_FILE &> $OUTPUT_LOG +"${REPO_ROOT}/target/release/leader" --runtime in-memory \ + --load-strategy on-demand -n 1 \ + --block-batch-size "$BLOCK_BATCH_SIZE" \ + --proof-output-dir "$PROOF_OUTPUT_DIR" stdio < "$INPUT_FILE" &> "$OUTPUT_LOG" end_time=$(date +%s%N) -set +o pipefail -cat $OUTPUT_LOG | grep "Successfully wrote to disk proof file " | awk '{print $NF}' | tee $PROOFS_FILE_LIST +grep "Successfully wrote to disk proof file " "$OUTPUT_LOG" | awk '{print $NF}' | tee "$PROOFS_FILE_LIST" if [ ! -s "$PROOFS_FILE_LIST" ]; then # Some error occurred, display the logs and exit. - cat $OUTPUT_LOG + cat "$OUTPUT_LOG" echo "Proof list not generated, some error happened. For more details check the log file $OUTPUT_LOG" exit 1 fi -cat $PROOFS_FILE_LIST | while read proof_file; +while read -r proof_file; do echo "Verifying proof file $proof_file" - verify_file=$PROOF_OUTPUT_DIR/verify_$(basename $proof_file).out - "${REPO_ROOT}/target/release/verifier" -f $proof_file | tee $verify_file - if grep -q 'All proofs verified successfully!' $verify_file; then + verify_file=$PROOF_OUTPUT_DIR/verify_$(basename "$proof_file").out + "${REPO_ROOT}/target/release/verifier" -f "$proof_file" | tee "$verify_file" + if grep -q 'All proofs verified successfully!' "$verify_file"; then echo "Proof verification for file $proof_file successful"; - rm $verify_file # we keep the generated proof for potential reuse + rm "$verify_file" # we keep the generated proof for potential reuse else # Some error occurred with verification, display the logs and exit. - cat $verify_file + cat "$verify_file" echo "There was an issue with proof verification. See $verify_file for more details."; exit 1 fi -done +done < "$PROOFS_FILE_LIST" duration_ns=$((end_time - start_time)) duration_sec=$(echo "$duration_ns / 1000000000" | bc -l) echo "Success!" -echo "Proving duration:" $duration_sec " seconds" +echo "Proving duration: $duration_sec seconds" echo "Note, this duration is inclusive of circuit handling and overall process initialization"; # Clean up in case of success -rm $OUTPUT_LOG - - - - +rm "$OUTPUT_LOG" diff --git a/scripts/xtask.rs b/scripts/xtask.rs new file mode 100644 index 000000000..c60770e28 --- /dev/null +++ b/scripts/xtask.rs @@ -0,0 +1,69 @@ +//! General purpose scripts for development + +use std::process::{Command, Stdio}; + +use anyhow::{ensure, Context as _}; +use clap::Parser; +use serde::Deserialize; + +#[derive(Parser)] +enum Args { + /// Run `cargo-outdated`, printing warnings compatible with GitHub's CI. + /// + /// If a direct dependency listed in our Cargo.lock is behind the latest + /// available on crates-io, a warning will be emitted. + /// + /// Note that we only warn on our _direct_ dependencies, + /// not the entire supply chain. + Outdated, +} + +#[derive(Deserialize)] +struct Outdated<'a> { + crate_name: &'a str, + dependencies: Vec>, +} + +#[derive(Deserialize)] +struct Dependency<'a> { + name: &'a str, + project: &'a str, + latest: &'a str, +} + +fn main() -> anyhow::Result<()> { + match Args::parse() { + Args::Outdated => { + let output = Command::new("cargo") + .args(["outdated", "--root-deps-only", "--format=json"]) + .stderr(Stdio::inherit()) + .stdout(Stdio::piped()) + .output() + .context("couldn't exec `cargo`")?; + ensure!( + output.status.success(), + "command failed with {}", + output.status + ); + for Outdated { + crate_name, + dependencies, + } in serde_json::Deserializer::from_slice(&output.stdout) + .into_iter::>() + .collect::, _>>() + .context("failed to parse output from `cargo outdated`")? + { + for Dependency { + name, + project, + latest, + } in dependencies + { + // https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-a-warning-message + println!("::warning title=outdated-dependency::dependency {name} of crate {crate_name} is at version {project}, but the latest is {latest}") + } + } + } + } + Ok(()) +} diff --git a/trace_decoder/Cargo.toml b/trace_decoder/Cargo.toml index de9b389a2..4b8d8e7bc 100644 --- a/trace_decoder/Cargo.toml +++ b/trace_decoder/Cargo.toml @@ -33,6 +33,7 @@ nunny = { workspace = true, features = ["serde"] } plonky2.workspace = true rlp.workspace = true serde.workspace = true +smt_trie.workspace = true stackstack = "0.3.0" strum = { version = "0.26.3", features = ["derive"] } thiserror.workspace = true @@ -52,7 +53,6 @@ libtest-mimic = "0.7.3" plonky2_maybe_rayon.workspace = true serde_json.workspace = true serde_path_to_error.workspace = true -smt_trie.workspace = true zero.workspace = true [features] diff --git a/trace_decoder/benches/block_processing.rs b/trace_decoder/benches/block_processing.rs index adefdae3f..4e3582e98 100644 --- a/trace_decoder/benches/block_processing.rs +++ b/trace_decoder/benches/block_processing.rs @@ -8,6 +8,7 @@ use criterion::{criterion_group, criterion_main, BatchSize, Criterion}; use trace_decoder::observer::DummyObserver; use trace_decoder::{BlockTrace, OtherBlockData}; +use zero::prover::WIRE_DISPOSITION; #[derive(Clone, Debug, serde::Deserialize)] pub struct ProverInput { @@ -39,6 +40,7 @@ fn criterion_benchmark(c: &mut Criterion) { other_data, batch_size, &mut DummyObserver::new(), + WIRE_DISPOSITION, ) .unwrap() }, diff --git a/trace_decoder/src/core.rs b/trace_decoder/src/core.rs index c5aa890da..8093098c1 100644 --- a/trace_decoder/src/core.rs +++ b/trace_decoder/src/core.rs @@ -4,11 +4,11 @@ use std::{ mem, }; -use alloy_compat::Compat as _; use anyhow::{anyhow, bail, ensure, Context as _}; -use ethereum_types::{Address, U256}; +use either::Either; +use ethereum_types::{Address, BigEndianHash as _, U256}; use evm_arithmetization::{ - generation::{mpt::AccountRlp, TrieInputs}, + generation::TrieInputs, proof::{BlockMetadata, TrieRoots}, GenerationInputs, }; @@ -18,20 +18,36 @@ use mpt_trie::partial_trie::PartialTrie as _; use nunny::NonEmpty; use zk_evm_common::gwei_to_wei; -use crate::observer::Observer; use crate::{ - typed_mpt::{ReceiptTrie, StateMpt, StateTrie, StorageTrie, TransactionTrie, TrieKey}, + observer::{DummyObserver, Observer}, + world::Type2World, +}; +use crate::{ + tries::{MptKey, ReceiptTrie, StateMpt, StorageTrie, TransactionTrie}, + world::{Type1World, World}, BlockLevelData, BlockTrace, BlockTraceTriePreImages, CombinedPreImages, ContractCodeUsage, OtherBlockData, SeparateStorageTriesPreImage, SeparateTriePreImage, SeparateTriePreImages, TxnInfo, TxnMeta, TxnTrace, }; +/// Expected trie type when parsing from binary in a [`BlockTrace`]. +/// +/// See [`crate::wire`] and [`CombinedPreImages`] for more. +#[derive(Debug)] +pub enum WireDisposition { + /// MPT + Type1, + /// SMT + Type2, +} + /// TODO(0xaatif): document this after pub fn entrypoint( trace: BlockTrace, other: OtherBlockData, batch_size_hint: usize, - observer: &mut impl Observer, + observer: &mut impl Observer, + wire_disposition: WireDisposition, ) -> anyhow::Result> { ensure!(batch_size_hint != 0); @@ -45,8 +61,8 @@ pub fn entrypoint( BlockTraceTriePreImages::Separate(_) => FatalMissingCode(true), BlockTraceTriePreImages::Combined(_) => FatalMissingCode(false), }; + let (world, mut code) = start(trie_pre_images, wire_disposition)?; - let (state, storage, mut code) = start(trie_pre_images)?; code.extend(code_db); let OtherBlockData { @@ -66,17 +82,38 @@ pub fn entrypoint( *amt = gwei_to_wei(*amt) } - let batches = middle( - state, - storage, - batch(txn_info, batch_size_hint), - &mut code, - &b_meta, - ger_data, - withdrawals, - fatal_missing_code, - observer, - )?; + let batches = match world { + Either::Left(type1world) => Either::Left( + middle( + type1world, + batch(txn_info, batch_size_hint), + &mut code, + &b_meta, + ger_data, + withdrawals, + fatal_missing_code, + observer, + )? + .into_iter() + .map(|it| it.map(Either::Left)), + ), + Either::Right(type2world) => { + Either::Right( + middle( + type2world, + batch(txn_info, batch_size_hint), + &mut code, + &b_meta, + ger_data, + withdrawals, + fatal_missing_code, + &mut DummyObserver::new(), // TODO(0xaatif) + )? + .into_iter() + .map(|it| it.map(Either::Right)), + ) + } + }; let mut running_gas_used = 0; Ok(batches @@ -89,39 +126,43 @@ pub fn entrypoint( byte_code, before: IntraBlockTries { - state, - storage, + world, transaction, receipt, }, after, withdrawals, - }| GenerationInputs { - txn_number_before: first_txn_ix.into(), - gas_used_before: running_gas_used.into(), - gas_used_after: { - running_gas_used += gas_used; - running_gas_used.into() - }, - signed_txns: byte_code.into_iter().map(Into::into).collect(), - withdrawals, - ger_data, - tries: TrieInputs { - state_trie: state.into(), - transactions_trie: transaction.into(), - receipts_trie: receipt.into(), - storage_tries: storage.into_iter().map(|(k, v)| (k, v.into())).collect(), - }, - trie_roots_after: after, - checkpoint_state_trie_root, - checkpoint_consolidated_hash, - contract_code: contract_code - .into_iter() - .map(|it| (keccak_hash::keccak(&it), it)) - .collect(), - block_metadata: b_meta.clone(), - block_hashes: b_hashes.clone(), - burn_addr, + }| { + let (state, storage) = world + .expect_left("TODO(0xaatif): evm_arithemetization accepts an SMT") + .into_state_and_storage(); + GenerationInputs { + txn_number_before: first_txn_ix.into(), + gas_used_before: running_gas_used.into(), + gas_used_after: { + running_gas_used += gas_used; + running_gas_used.into() + }, + signed_txns: byte_code.into_iter().map(Into::into).collect(), + withdrawals, + ger_data, + tries: TrieInputs { + state_trie: state.into(), + transactions_trie: transaction.into(), + receipts_trie: receipt.into(), + storage_tries: storage.into_iter().map(|(k, v)| (k, v.into())).collect(), + }, + trie_roots_after: after, + checkpoint_state_trie_root, + checkpoint_consolidated_hash, + contract_code: contract_code + .into_iter() + .map(|it| (keccak_hash::keccak(&it), it)) + .collect(), + block_metadata: b_meta.clone(), + block_hashes: b_hashes.clone(), + burn_addr, + } }, ) .collect()) @@ -131,11 +172,12 @@ pub fn entrypoint( /// [`HashedPartialTrie`](mpt_trie::partial_trie::HashedPartialTrie), /// or a [`wire`](crate::wire)-encoded representation of one. /// -/// Turn either of those into our [`typed_mpt`](crate::typed_mpt) -/// representations. +/// Turn either of those into our [internal representations](crate::tries). +#[allow(clippy::type_complexity)] fn start( pre_images: BlockTraceTriePreImages, -) -> anyhow::Result<(StateMpt, BTreeMap, Hash2Code)> { + wire_disposition: WireDisposition, +) -> anyhow::Result<(Either, Hash2Code)> { Ok(match pre_images { // TODO(0xaatif): https://github.com/0xPolygonZero/zk_evm/issues/401 // refactor our convoluted input types @@ -143,33 +185,32 @@ fn start( state: SeparateTriePreImage::Direct(state), storage: SeparateStorageTriesPreImage::MultipleTries(storage), }) => { - let state = state.items().try_fold( - StateMpt::default(), - |mut acc, (nibbles, hash_or_val)| { - let path = TrieKey::from_nibbles(nibbles); - match hash_or_val { - mpt_trie::trie_ops::ValOrHash::Val(bytes) => { - #[expect(deprecated)] // this is MPT specific - acc.insert_by_hashed_address( - path.into_hash() - .context("invalid path length in direct state trie")?, - rlp::decode(&bytes) - .context("invalid AccountRlp in direct state trie")?, - )?; - } - mpt_trie::trie_ops::ValOrHash::Hash(h) => { - acc.insert_hash_by_key(path, h)?; - } - }; - anyhow::Ok(acc) - }, - )?; + let state = + state + .items() + .try_fold(StateMpt::new(), |mut acc, (nibbles, hash_or_val)| { + let path = MptKey::from_nibbles(nibbles); + match hash_or_val { + mpt_trie::trie_ops::ValOrHash::Val(bytes) => { + acc.insert( + path.into_hash() + .context("invalid path length in direct state trie")?, + rlp::decode(&bytes) + .context("invalid AccountRlp in direct state trie")?, + )?; + } + mpt_trie::trie_ops::ValOrHash::Hash(h) => { + acc.insert_hash(path, h)?; + } + }; + anyhow::Ok(acc) + })?; let storage = storage .into_iter() .map(|(k, SeparateTriePreImage::Direct(v))| { v.items() .try_fold(StorageTrie::default(), |mut acc, (nibbles, hash_or_val)| { - let path = TrieKey::from_nibbles(nibbles); + let path = MptKey::from_nibbles(nibbles); match hash_or_val { mpt_trie::trie_ops::ValOrHash::Val(value) => { acc.insert(path, value)?; @@ -183,17 +224,35 @@ fn start( .map(|v| (k, v)) }) .collect::>()?; - (state, storage, Hash2Code::new()) + ( + Either::Left(Type1World::new(state, storage)?), + Hash2Code::new(), + ) } BlockTraceTriePreImages::Combined(CombinedPreImages { compact }) => { let instructions = crate::wire::parse(&compact) .context("couldn't parse instructions from binary format")?; - let crate::type1::Frontend { - state, - storage, - code, - } = crate::type1::frontend(instructions)?; - (state, storage, code.into_iter().map(Into::into).collect()) + match wire_disposition { + WireDisposition::Type1 => { + let crate::type1::Frontend { + state, + storage, + code, + } = crate::type1::frontend(instructions)?; + ( + Either::Left(Type1World::new(state, storage)?), + Hash2Code::from_iter(code.into_iter().map(NonEmpty::into_vec)), + ) + } + WireDisposition::Type2 => { + let crate::type2::Frontend { world: trie, code } = + crate::type2::frontend(instructions)?; + ( + Either::Right(trie), + Hash2Code::from_iter(code.into_iter().map(NonEmpty::into_vec)), + ) + } + } } }) } @@ -267,16 +326,52 @@ struct Batch { pub withdrawals: Vec<(Address, U256)>, } +impl Batch { + fn map(self, f: impl FnMut(T) -> U) -> Batch { + let Self { + first_txn_ix, + gas_used, + contract_code, + byte_code, + before, + after, + withdrawals, + } = self; + Batch { + first_txn_ix, + gas_used, + contract_code, + byte_code, + before: before.map(f), + after, + withdrawals, + } + } +} + /// [`evm_arithmetization::generation::TrieInputs`], /// generic over state trie representation. #[derive(Debug)] -pub struct IntraBlockTries { - pub state: StateTrieT, - pub storage: BTreeMap, +pub struct IntraBlockTries { + pub world: WorldT, pub transaction: TransactionTrie, pub receipt: ReceiptTrie, } +impl IntraBlockTries { + fn map(self, f: impl FnOnce(T) -> U) -> IntraBlockTries { + let Self { + world, + transaction, + receipt, + } = self; + IntraBlockTries { + world: f(world), + transaction, + receipt, + } + } +} /// Hacky handling of possibly missing contract bytecode in `Hash2Code` inner /// map. /// Allows incomplete payloads fetched with the zero tracer to skip these @@ -287,11 +382,9 @@ pub struct FatalMissingCode(pub bool); /// Does the main work mentioned in the [module documentation](super). #[allow(clippy::too_many_arguments)] -fn middle( +fn middle( // state at the beginning of the block - mut state_trie: StateTrieT, - // storage at the beginning of the block - mut storage_tries: BTreeMap, + mut world: WorldT, // None represents a dummy transaction that should not increment the transaction index // all batches SHOULD not be empty batches: Vec>>, @@ -302,22 +395,11 @@ fn middle( mut withdrawals: Vec<(Address, U256)>, fatal_missing_code: FatalMissingCode, // called with the untrimmed tries after each batch - observer: &mut impl Observer, -) -> anyhow::Result>> { - // Initialise the storage tries. - for (haddr, acct) in state_trie.iter() { - let storage = storage_tries.entry(haddr).or_insert({ - let mut it = StorageTrie::default(); - it.insert_hash(TrieKey::default(), acct.storage_root) - .expect("empty trie insert cannot fail"); - it - }); - ensure!( - storage.root() == acct.storage_root, - "inconsistent initial storage for hashed address {haddr:x}" - ) - } - + observer: &mut impl Observer, +) -> anyhow::Result>> +where + WorldT::SubtriePath: Ord + From
, +{ // These are the per-block tries. let mut transaction_trie = TransactionTrie::new(); let mut receipt_trie = ReceiptTrie::new(); @@ -334,26 +416,24 @@ fn middle( let mut batch_contract_code = BTreeSet::from([vec![]]); // always include empty code let mut before = IntraBlockTries { - state: state_trie.clone(), + world: world.clone(), transaction: transaction_trie.clone(), receipt: receipt_trie.clone(), - storage: storage_tries.clone(), }; // We want to perform mask the TrieInputs above, // but won't know the bounds until after the loop below, // so store that information here. - let mut storage_masks = BTreeMap::<_, BTreeSet>::new(); - let mut state_mask = BTreeSet::new(); + let mut storage_masks = BTreeMap::<_, BTreeSet>::new(); + let mut state_mask = BTreeSet::::new(); if txn_ix == 0 { do_pre_execution( block, ger_data, - &mut storage_tries, &mut storage_masks, &mut state_mask, - &mut state_trie, + &mut world, )?; } @@ -403,28 +483,12 @@ fn middle( .map_err(|e| anyhow!("{e:?}")) .context(format!("couldn't decode receipt in txn {tx_hash:x}"))?; - let (mut acct, born) = state_trie - .get_by_address(addr) - .map(|acct| (acct, false)) - .unwrap_or((AccountRlp::default(), true)); + let born = !world.contains(addr)?; if born { // Empty accounts cannot have non-empty storage, // so we can safely insert a default trie. - storage_tries.insert(keccak_hash::keccak(addr), StorageTrie::default()); - } - - if born || just_access { - state_trie - .clone() - .insert_by_address(addr, acct) - .context(format!( - "couldn't reach state of {} address {addr:x} in txn {tx_hash:x}", - match born { - true => "created", - false => "accessed", - } - ))?; + world.create_storage(addr)? } let do_writes = !just_access @@ -440,75 +504,64 @@ fn middle( storage_written .keys() .chain(&storage_read) - .map(|it| TrieKey::from_hash(keccak_hash::keccak(it))), + .map(|it| MptKey::from_hash(keccak_hash::keccak(it))), ); if do_writes { - acct.balance = balance.unwrap_or(acct.balance); - acct.nonce = nonce.unwrap_or(acct.nonce); - acct.code_hash = code_usage - .map(|it| match it { + if let Some(new) = balance { + world.update_balance(addr, |it| *it = new)? + } + if let Some(new) = nonce { + world.update_nonce(addr, |it| *it = new)? + } + if let Some(usage) = code_usage { + match usage { ContractCodeUsage::Read(hash) => { // TODO(Nashtare): https://github.com/0xPolygonZero/zk_evm/issues/700 - // This is a bug in the zero tracer, which shouldn't be giving us - // this read at all. Workaround for now. + // This is a bug in the zero tracer, + // which shouldn't be giving us this read at all. + // Workaround for now. + // The fix should involve removing the `Either` + // below. match (fatal_missing_code, code.get(hash)) { (FatalMissingCode(true), None) => { bail!("no code for hash {hash:x}") } (_, Some(byte_code)) => { + world.set_code(addr, Either::Left(&byte_code))?; batch_contract_code.insert(byte_code); } - (_, None) => { - log::warn!("no code for {hash:x}") - } + (_, None) => world.set_code(addr, Either::Right(hash))?, } - - anyhow::Ok(hash) } ContractCodeUsage::Write(bytes) => { code.insert(bytes.clone()); - let hash = keccak_hash::keccak(&bytes); + world.set_code(addr, Either::Left(&bytes))?; batch_contract_code.insert(bytes); - Ok(hash) } - }) - .transpose()? - .unwrap_or(acct.code_hash); - - if !storage_written.is_empty() { - let storage = match born { - true => storage_tries.entry(keccak_hash::keccak(addr)).or_default(), - false => storage_tries.get_mut(&keccak_hash::keccak(addr)).context( - format!( - "missing storage trie for address {addr:x} in txn {tx_hash:x}" - ), - )?, }; + } + if !storage_written.is_empty() { for (k, v) in storage_written { - let slot = TrieKey::from_hash(keccak_hash::keccak(k)); match v.is_zero() { // this is actually a delete - true => storage_mask.extend(storage.reporting_remove(slot)?), - false => { - storage.insert(slot, rlp::encode(&v).to_vec())?; - } + true => storage_mask + .extend(world.reporting_destroy_slot(addr, k.into_uint())?), + false => world.store_int(addr, k.into_uint(), v)?, } } - acct.storage_root = storage.root(); } - state_trie.insert_by_address(addr, acct)?; - state_mask.insert(TrieKey::from_address(addr)); + state_mask.insert(::from(addr)); } else { // Simple state access - state_mask.insert(TrieKey::from_address(addr)); + state_mask.insert(::from(addr)); } if self_destructed { - storage_tries.remove(&keccak_hash::keccak(addr)); - state_mask.extend(state_trie.reporting_remove(addr)?) + world.destroy_storage(addr)?; + state_mask.extend(world.reporting_destroy(addr)?) } } @@ -526,41 +579,22 @@ fn middle( withdrawals: match loop_ix == loop_len { true => { for (addr, amt) in &withdrawals { - state_mask.insert(TrieKey::from_address(*addr)); - let mut acct = state_trie - .get_by_address(*addr) - .context(format!("missing address {addr:x} for withdrawal"))?; - acct.balance += *amt; - state_trie - .insert_by_address(*addr, acct) - // TODO(0xaatif): https://github.com/0xPolygonZero/zk_evm/issues/275 - // Add an entry API - .expect("insert must succeed with the same key as a successful `get`"); + state_mask.insert(::from(*addr)); + world.update_balance(*addr, |it| *it += *amt)?; } mem::take(&mut withdrawals) } false => vec![], }, before: { - before.state.mask(state_mask)?; + before.world.mask(state_mask)?; before.receipt.mask(batch_first_txn_ix..txn_ix)?; before.transaction.mask(batch_first_txn_ix..txn_ix)?; - - let keep = storage_masks - .keys() - .map(keccak_hash::keccak) - .collect::>(); - before.storage.retain(|haddr, _| keep.contains(haddr)); - - for (addr, mask) in storage_masks { - if let Some(it) = before.storage.get_mut(&keccak_hash::keccak(addr)) { - it.mask(mask)? - } // else must have self-destructed - } + before.world.mask_storage(storage_masks)?; before }, after: TrieRoots { - state_root: state_trie.root(), + state_root: world.root(), transactions_root: transaction_trie.root(), receipts_root: receipt_trie.root(), }, @@ -569,8 +603,7 @@ fn middle( observer.collect_tries( block.block_number, batch_index, - &state_trie, - &storage_tries, + &world, &transaction_trie, &receipt_trie, ) @@ -580,35 +613,29 @@ fn middle( } /// Performs all the pre-txn execution rules of the targeted network. -fn do_pre_execution( +fn do_pre_execution( block: &BlockMetadata, ger_data: Option<(H256, H256)>, - storage: &mut BTreeMap, - trim_storage: &mut BTreeMap>, - trim_state: &mut BTreeSet, - state_trie: &mut StateTrieT, -) -> anyhow::Result<()> { + trim_storage: &mut BTreeMap>, + trim_state: &mut BTreeSet, + world: &mut WorldT, +) -> anyhow::Result<()> +where + WorldT::SubtriePath: From
+ Ord, +{ // Ethereum mainnet: EIP-4788 if cfg!(feature = "eth_mainnet") { return do_beacon_hook( block.block_timestamp, - storage, trim_storage, block.parent_beacon_block_root, trim_state, - state_trie, + world, ); } if cfg!(feature = "cdk_erigon") { - return do_scalable_hook( - block, - ger_data, - storage, - trim_storage, - trim_state, - state_trie, - ); + return do_scalable_hook(block, ger_data, trim_storage, trim_state, world); } Ok(()) @@ -619,34 +646,30 @@ fn do_pre_execution( /// /// This is Polygon-CDK-specific, and runs at the start of the block, /// before any transactions (as per the Etrog specification). -fn do_scalable_hook( +fn do_scalable_hook( block: &BlockMetadata, ger_data: Option<(H256, H256)>, - storage: &mut BTreeMap, - trim_storage: &mut BTreeMap>, - trim_state: &mut BTreeSet, - state_trie: &mut StateTrieT, -) -> anyhow::Result<()> { + trim_storage: &mut BTreeMap>, + trim_state: &mut BTreeSet, + world: &mut WorldT, +) -> anyhow::Result<()> +where + WorldT::SubtriePath: From
+ Ord, +{ use evm_arithmetization::testing_utils::{ - ADDRESS_SCALABLE_L2, ADDRESS_SCALABLE_L2_ADDRESS_HASHED, GLOBAL_EXIT_ROOT_ADDRESS, - GLOBAL_EXIT_ROOT_ADDRESS_HASHED, GLOBAL_EXIT_ROOT_STORAGE_POS, LAST_BLOCK_STORAGE_POS, - STATE_ROOT_STORAGE_POS, TIMESTAMP_STORAGE_POS, + ADDRESS_SCALABLE_L2, GLOBAL_EXIT_ROOT_ADDRESS, GLOBAL_EXIT_ROOT_STORAGE_POS, + LAST_BLOCK_STORAGE_POS, STATE_ROOT_STORAGE_POS, TIMESTAMP_STORAGE_POS, }; if block.block_number.is_zero() { return Err(anyhow!("Attempted to prove the Genesis block!")); } - let scalable_storage = storage - .get_mut(&ADDRESS_SCALABLE_L2_ADDRESS_HASHED) - .context("missing scalable contract storage trie")?; let scalable_trim = trim_storage.entry(ADDRESS_SCALABLE_L2).or_default(); - let timestamp_slot_key = TrieKey::from_slot_position(U256::from(TIMESTAMP_STORAGE_POS.1)); + let timestamp = world + .load_int(ADDRESS_SCALABLE_L2, U256::from(TIMESTAMP_STORAGE_POS.1)) + .unwrap_or_default(); - let timestamp = scalable_storage - .get(×tamp_slot_key) - .map(rlp::decode::) - .unwrap_or(Ok(0.into()))?; let timestamp = core::cmp::max(timestamp, block.block_timestamp); // Store block number and largest timestamp @@ -655,60 +678,48 @@ fn do_scalable_hook( (U256::from(LAST_BLOCK_STORAGE_POS.1), block.block_number), (U256::from(TIMESTAMP_STORAGE_POS.1), timestamp), ] { - let slot = TrieKey::from_slot_position(ix); + let slot = MptKey::from_slot_position(ix); - // These values are never 0. - scalable_storage.insert(slot, alloy::rlp::encode(u.compat()))?; + ensure!(!u.is_zero()); + world.store_int(ADDRESS_SCALABLE_L2, ix, u)?; scalable_trim.insert(slot); } // Store previous block root hash - let prev_block_root_hash = state_trie.root(); + let prev_block_root_hash = world.root(); let mut arr = [0; 64]; (block.block_number - 1).to_big_endian(&mut arr[0..32]); U256::from(STATE_ROOT_STORAGE_POS.1).to_big_endian(&mut arr[32..64]); - let slot = TrieKey::from_hash(keccak_hash::keccak(arr)); + let slot = MptKey::from_hash(keccak_hash::keccak(arr)); + + world.store_hash( + ADDRESS_SCALABLE_L2, + keccak_hash::keccak(arr), + prev_block_root_hash, + )?; - scalable_storage.insert(slot, alloy::rlp::encode(prev_block_root_hash.compat()))?; scalable_trim.insert(slot); - trim_state.insert(TrieKey::from_address(ADDRESS_SCALABLE_L2)); - let mut scalable_acct = state_trie - .get_by_address(ADDRESS_SCALABLE_L2) - .context("missing scalable contract address")?; - scalable_acct.storage_root = scalable_storage.root(); - state_trie - .insert_by_address(ADDRESS_SCALABLE_L2, scalable_acct) - // TODO(0xaatif): https://github.com/0xPolygonZero/zk_evm/issues/275 - // Add an entry API - .expect("insert must succeed with the same key as a successful `get`"); + trim_state.insert(::from(ADDRESS_SCALABLE_L2)); // Update GER contract's storage if necessary if let Some((root, l1blockhash)) = ger_data { - let ger_storage = storage - .get_mut(&GLOBAL_EXIT_ROOT_ADDRESS_HASHED) - .context("missing GER contract storage trie")?; let ger_trim = trim_storage.entry(GLOBAL_EXIT_ROOT_ADDRESS).or_default(); let mut arr = [0; 64]; arr[0..32].copy_from_slice(&root.0); U256::from(GLOBAL_EXIT_ROOT_STORAGE_POS.1).to_big_endian(&mut arr[32..64]); - let slot = TrieKey::from_hash(keccak_hash::keccak(arr)); + let slot = MptKey::from_hash(keccak_hash::keccak(arr)); - ger_storage.insert(slot, alloy::rlp::encode(l1blockhash.compat()))?; + world.store_hash( + GLOBAL_EXIT_ROOT_ADDRESS, + keccak_hash::keccak(arr), + l1blockhash, + )?; ger_trim.insert(slot); - trim_state.insert(TrieKey::from_address(GLOBAL_EXIT_ROOT_ADDRESS)); - let mut ger_acct = state_trie - .get_by_address(GLOBAL_EXIT_ROOT_ADDRESS) - .context("missing GER contract address")?; - ger_acct.storage_root = ger_storage.root(); - state_trie - .insert_by_address(GLOBAL_EXIT_ROOT_ADDRESS, ger_acct) - // TODO(0xaatif): https://github.com/0xPolygonZero/zk_evm/issues/275 - // Add an entry API - .expect("insert must succeed with the same key as a successful `get`"); + trim_state.insert(::from(GLOBAL_EXIT_ROOT_ADDRESS)); } Ok(()) @@ -719,23 +730,22 @@ fn do_scalable_hook( /// /// This is Cancun-specific, and runs at the start of the block, /// before any transactions (as per the EIP). -fn do_beacon_hook( +fn do_beacon_hook( block_timestamp: U256, - storage: &mut BTreeMap, - trim_storage: &mut BTreeMap>, + trim_storage: &mut BTreeMap>, parent_beacon_block_root: H256, - trim_state: &mut BTreeSet, - state_trie: &mut StateTrieT, -) -> anyhow::Result<()> { + trim_state: &mut BTreeSet, + world: &mut WorldT, +) -> anyhow::Result<()> +where + WorldT::SubtriePath: From
+ Ord, +{ use evm_arithmetization::testing_utils::{ - BEACON_ROOTS_CONTRACT_ADDRESS, BEACON_ROOTS_CONTRACT_ADDRESS_HASHED, HISTORY_BUFFER_LENGTH, + BEACON_ROOTS_CONTRACT_ADDRESS, HISTORY_BUFFER_LENGTH, }; let timestamp_idx = block_timestamp % HISTORY_BUFFER_LENGTH.value; let root_idx = timestamp_idx + HISTORY_BUFFER_LENGTH.value; - let beacon_storage = storage - .get_mut(&BEACON_ROOTS_CONTRACT_ADDRESS_HASHED) - .context("missing beacon contract storage trie")?; let beacon_trim = trim_storage .entry(BEACON_ROOTS_CONTRACT_ADDRESS) .or_default(); @@ -747,27 +757,20 @@ fn do_beacon_hook( U256::from_big_endian(parent_beacon_block_root.as_bytes()), ), ] { - let slot = TrieKey::from_slot_position(ix); + let slot = MptKey::from_slot_position(ix); beacon_trim.insert(slot); match u.is_zero() { - true => beacon_trim.extend(beacon_storage.reporting_remove(slot)?), + true => { + beacon_trim.extend(world.reporting_destroy_slot(BEACON_ROOTS_CONTRACT_ADDRESS, ix)?) + } false => { - beacon_storage.insert(slot, alloy::rlp::encode(u.compat()))?; + world.store_int(BEACON_ROOTS_CONTRACT_ADDRESS, ix, u)?; beacon_trim.insert(slot); } } } - trim_state.insert(TrieKey::from_address(BEACON_ROOTS_CONTRACT_ADDRESS)); - let mut beacon_acct = state_trie - .get_by_address(BEACON_ROOTS_CONTRACT_ADDRESS) - .context("missing beacon contract address")?; - beacon_acct.storage_root = beacon_storage.root(); - state_trie - .insert_by_address(BEACON_ROOTS_CONTRACT_ADDRESS, beacon_acct) - // TODO(0xaatif): https://github.com/0xPolygonZero/zk_evm/issues/275 - // Add an entry API - .expect("insert must succeed with the same key as a successful `get`"); + trim_state.insert(::from(BEACON_ROOTS_CONTRACT_ADDRESS)); Ok(()) } @@ -785,7 +788,7 @@ fn map_receipt_bytes(bytes: Vec) -> anyhow::Result> { /// If there are any txns that create contracts, then they will also /// get added here as we process the deltas. struct Hash2Code { - /// Key must always be [`hash`] of value. + /// Key must always be [`hash`](keccak_hash) of value. inner: HashMap>, } diff --git a/trace_decoder/src/lib.rs b/trace_decoder/src/lib.rs index 049472c40..1f1c87888 100644 --- a/trace_decoder/src/lib.rs +++ b/trace_decoder/src/lib.rs @@ -1,8 +1,10 @@ //! An _Ethereum Node_ executes _transactions_ in _blocks_. //! //! Execution mutates two key data structures: -//! - [The state trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/#state-trie). -//! - [The storage tries](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/#storage-trie). +//! - [The state](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/#state-trie), +//! which tracks, e.g the account balance. +//! - [The storage](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/#storage-trie), +//! which is a huge array of integers, per-account. //! //! Ethereum nodes expose information about the transactions over RPC, e.g: //! - [The specific changes to the storage tries](TxnTrace::storage_written). @@ -13,7 +15,8 @@ //! //! **Prover perfomance is a high priority.** //! -//! The aformentioned trie structures may have subtries _hashed out_. +//! The aformentioned data structures are represented as tries, +//! which may have subtries _hashed out_. //! That is, any node (and its children!) may be replaced by its hash, //! while maintaining provability of its contents: //! @@ -44,28 +47,29 @@ /// Over RPC, ethereum nodes expose their tries as a series of binary /// [`wire::Instruction`]s in a node-dependant format. /// -/// These are parsed into the relevant trie depending on the node: +/// These are parsed into the relevant state and storage data structures, +/// depending on the node: /// - [`type2`], which contains an [`smt_trie`]. /// - [`type1`], which contains an [`mpt_trie`]. /// /// After getting the tries, /// we can continue to do the main work of "executing" the transactions. +/// +/// The core of this library is agnostic over the (combined) +/// state and storage representation - see [`world::World`] for more. const _DEVELOPER_DOCS: () = (); mod interface; pub use interface::*; +mod tries; mod type1; -// TODO(0xaatif): https://github.com/0xPolygonZero/zk_evm/issues/275 -// add backend/prod support for type 2 -#[cfg(test)] -#[allow(dead_code)] mod type2; -mod typed_mpt; mod wire; +mod world; -pub use core::entrypoint; +pub use core::{entrypoint, WireDisposition}; mod core; diff --git a/trace_decoder/src/observer.rs b/trace_decoder/src/observer.rs index 320019e55..428cac086 100644 --- a/trace_decoder/src/observer.rs +++ b/trace_decoder/src/observer.rs @@ -1,15 +1,14 @@ -use std::collections::BTreeMap; use std::marker::PhantomData; -use ethereum_types::{H256, U256}; +use ethereum_types::U256; use crate::core::IntraBlockTries; -use crate::typed_mpt::{ReceiptTrie, StorageTrie, TransactionTrie}; +use crate::tries::{ReceiptTrie, TransactionTrie}; /// Observer API for the trace decoder. /// Observer is used to collect various debugging and metadata info /// from the trace decoder run. -pub trait Observer { +pub trait Observer { /// Collect tries after the transaction/batch execution. /// /// Passing the arguments one by one through reference, because @@ -19,8 +18,7 @@ pub trait Observer { &mut self, block: U256, batch: usize, - state_trie: &StateTrieT, - storage: &BTreeMap, + state_trie: &WorldT, transaction_trie: &TransactionTrie, receipt_trie: &ReceiptTrie, ); @@ -55,13 +53,12 @@ impl TriesObserver { } } -impl Observer for TriesObserver { +impl Observer for TriesObserver { fn collect_tries( &mut self, block: U256, batch: usize, - state_trie: &StateTrieT, - storage: &BTreeMap, + state_trie: &WorldT, transaction_trie: &TransactionTrie, receipt_trie: &ReceiptTrie, ) { @@ -69,8 +66,7 @@ impl Observer for TriesObserver { block, batch, tries: IntraBlockTries { - state: state_trie.clone(), - storage: storage.clone(), + world: state_trie.clone(), transaction: transaction_trie.clone(), receipt: receipt_trie.clone(), }, @@ -99,13 +95,12 @@ impl DummyObserver { } } -impl Observer for DummyObserver { +impl Observer for DummyObserver { fn collect_tries( &mut self, _block: U256, _batch: usize, - _state_trie: &StateTrieT, - _storage: &BTreeMap, + _state_trie: &WorldT, _transaction_trie: &TransactionTrie, _receipt_trie: &ReceiptTrie, ) { diff --git a/trace_decoder/src/tries.rs b/trace_decoder/src/tries.rs new file mode 100644 index 000000000..7da8d2cfa --- /dev/null +++ b/trace_decoder/src/tries.rs @@ -0,0 +1,452 @@ +//! Principled trie types used in this library. + +use core::fmt; +use std::cmp; + +use anyhow::ensure; +use bitvec::{array::BitArray, slice::BitSlice}; +use copyvec::CopyVec; +use ethereum_types::{Address, H256, U256}; +use evm_arithmetization::generation::mpt::AccountRlp; +use mpt_trie::partial_trie::{HashedPartialTrie, Node, OnOrphanedHashNode, PartialTrie as _}; +use u4::{AsNibbles, U4}; + +/// Bounded sequence of [`U4`], +/// used as a key for [MPT](HashedPartialTrie) types in this module. +/// +/// Semantically equivalent to [`mpt_trie::nibbles::Nibbles`]. +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] +pub struct MptKey(CopyVec); + +impl fmt::Display for MptKey { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for u in self.0 { + f.write_fmt(format_args!("{:x}", u))? + } + Ok(()) + } +} + +impl MptKey { + pub fn new(components: impl IntoIterator) -> anyhow::Result { + Ok(MptKey(CopyVec::try_from_iter(components)?)) + } + pub fn from_slot_position(pos: U256) -> Self { + let mut bytes = [0; 32]; + pos.to_big_endian(&mut bytes); + Self::from_hash(keccak_hash::keccak(H256::from_slice(&bytes))) + } + pub fn from_hash(H256(bytes): H256) -> Self { + Self::new(AsNibbles(bytes)).expect("32 bytes is 64 nibbles, which fits") + } + + pub fn from_txn_ix(txn_ix: usize) -> Self { + MptKey::new(AsNibbles(rlp::encode(&txn_ix))).expect( + "\ + rlp of an usize goes through a u64, which is 8 bytes, + which will be 9 bytes RLP'ed. + 9 < 32", + ) + } + pub fn into_nibbles(self) -> mpt_trie::nibbles::Nibbles { + let mut theirs = mpt_trie::nibbles::Nibbles::default(); + for component in self.0 { + theirs.push_nibble_back(component as u8) + } + theirs + } + pub fn from_nibbles(mut theirs: mpt_trie::nibbles::Nibbles) -> Self { + let mut ours = CopyVec::new(); + while !theirs.is_empty() { + ours.try_push( + U4::new(theirs.pop_next_nibble_front()) + .expect("mpt_trie returned an invalid nibble"), + ) + .expect("mpt_trie should not have more than 64 nibbles") + } + Self(ours) + } + + pub fn into_hash(self) -> Option { + let Self(nibbles) = self; + let mut bytes = [0; 32]; + AsNibbles(&mut bytes).pack_from_slice(&nibbles.into_array()?); + Some(H256(bytes)) + } +} + +impl From
for MptKey { + fn from(value: Address) -> Self { + Self::from_hash(keccak_hash::keccak(value)) + } +} + +#[test] +fn mpt_key_into_hash() { + assert_eq!(MptKey::new([]).unwrap().into_hash(), None); + assert_eq!( + MptKey::new(itertools::repeat_n(u4::u4!(0), 64)) + .unwrap() + .into_hash(), + Some(H256::zero()) + ) +} + +/// Bounded sequence of bits, +/// used as a key for SMT tries. +/// +/// Semantically equivalent to [`smt_trie::bits::Bits`]. +#[derive(Clone, Copy)] +pub struct SmtKey { + bits: bitvec::array::BitArray<[u8; 32]>, + len: usize, +} + +impl SmtKey { + fn as_bitslice(&self) -> &BitSlice { + self.bits.as_bitslice().get(..self.len).unwrap() + } +} + +impl fmt::Debug for SmtKey { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_list() + .entries(self.as_bitslice().iter().map(|it| match *it { + true => 1, + false => 0, + })) + .finish() + } +} + +impl fmt::Display for SmtKey { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + for bit in self.as_bitslice() { + f.write_str(match *bit { + true => "1", + false => "0", + })? + } + Ok(()) + } +} + +impl SmtKey { + pub fn new(components: impl IntoIterator) -> anyhow::Result { + let mut bits = bitvec::array::BitArray::default(); + let mut len = 0; + for (ix, bit) in components.into_iter().enumerate() { + ensure!( + bits.get(ix).is_some(), + "expected at most {} components", + bits.len() + ); + bits.set(ix, bit); + len += 1 + } + Ok(Self { bits, len }) + } + + pub fn into_smt_bits(self) -> smt_trie::bits::Bits { + let mut bits = smt_trie::bits::Bits::default(); + for bit in self.as_bitslice() { + bits.push_bit(*bit) + } + bits + } +} + +impl From
for SmtKey { + fn from(addr: Address) -> Self { + let H256(bytes) = keccak_hash::keccak(addr); + Self::new(BitArray::<_>::new(bytes)).expect("SmtKey has room for 256 bits") + } +} + +impl Ord for SmtKey { + fn cmp(&self, other: &Self) -> cmp::Ordering { + self.as_bitslice().cmp(other.as_bitslice()) + } +} +impl PartialOrd for SmtKey { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} +impl Eq for SmtKey {} +impl PartialEq for SmtKey { + fn eq(&self, other: &Self) -> bool { + self.as_bitslice().eq(other.as_bitslice()) + } +} + +/// Per-block, `txn_ix -> [u8]`. +/// +/// See +#[derive(Debug, Clone, Default)] +pub struct TransactionTrie { + untyped: HashedPartialTrie, +} + +impl TransactionTrie { + pub fn new() -> Self { + Self::default() + } + pub fn insert(&mut self, txn_ix: usize, val: Vec) -> anyhow::Result>> { + let prev = self + .untyped + .get(MptKey::from_txn_ix(txn_ix).into_nibbles()) + .map(Vec::from); + self.untyped + .insert(MptKey::from_txn_ix(txn_ix).into_nibbles(), val)?; + Ok(prev) + } + pub fn root(&self) -> H256 { + self.untyped.hash() + } + pub const fn as_hashed_partial_trie(&self) -> &mpt_trie::partial_trie::HashedPartialTrie { + &self.untyped + } + /// _Hash out_ parts of the trie that aren't in `txn_ixs`. + pub fn mask(&mut self, txn_ixs: impl IntoIterator) -> anyhow::Result<()> { + self.untyped = mpt_trie::trie_subsets::create_trie_subset( + &self.untyped, + txn_ixs + .into_iter() + .map(|it| MptKey::from_txn_ix(it).into_nibbles()), + )?; + Ok(()) + } +} + +impl From for HashedPartialTrie { + fn from(value: TransactionTrie) -> Self { + value.untyped + } +} + +/// Per-block, `txn_ix -> [u8]`. +/// +/// See +#[derive(Debug, Clone, Default)] +pub struct ReceiptTrie { + untyped: HashedPartialTrie, +} + +impl ReceiptTrie { + pub fn new() -> Self { + Self::default() + } + pub fn insert(&mut self, txn_ix: usize, val: Vec) -> anyhow::Result>> { + let prev = self + .untyped + .get(MptKey::from_txn_ix(txn_ix).into_nibbles()) + .map(Vec::from); + self.untyped + .insert(MptKey::from_txn_ix(txn_ix).into_nibbles(), val)?; + Ok(prev) + } + pub fn root(&self) -> H256 { + self.untyped.hash() + } + pub const fn as_hashed_partial_trie(&self) -> &mpt_trie::partial_trie::HashedPartialTrie { + &self.untyped + } + /// _Hash out_ parts of the trie that aren't in `txn_ixs`. + pub fn mask(&mut self, txn_ixs: impl IntoIterator) -> anyhow::Result<()> { + self.untyped = mpt_trie::trie_subsets::create_trie_subset( + &self.untyped, + txn_ixs + .into_iter() + .map(|it| MptKey::from_txn_ix(it).into_nibbles()), + )?; + Ok(()) + } +} + +impl From for HashedPartialTrie { + fn from(value: ReceiptTrie) -> Self { + value.untyped + } +} + +/// Global, [`Address`] `->` [`AccountRlp`]. +/// +/// See +#[derive(Debug, Clone)] +pub struct StateMpt { + /// Values are always [`rlp`]-encoded [`AccountRlp`], + /// inserted at [256 bits](MptKey::from_hash). + inner: HashedPartialTrie, +} + +impl Default for StateMpt { + fn default() -> Self { + Self::new() + } +} + +#[track_caller] +fn assert_rlp_account(bytes: impl AsRef<[u8]>) -> AccountRlp { + rlp::decode(bytes.as_ref()).expect("invalid RLP in StateMPT") +} + +impl StateMpt { + pub fn new() -> Self { + Self { + inner: HashedPartialTrie::new_with_strategy( + Node::Empty, + // This frontend is intended to be used with our custom `zeroTracer`, + // which covers branch-to-extension collapse edge cases. + OnOrphanedHashNode::CollapseToExtension, + ), + } + } + pub fn as_hashed_partial_trie(&self) -> &HashedPartialTrie { + &self.inner + } + /// Insert a _hashed out_ part of the trie + pub fn insert_hash(&mut self, key: MptKey, hash: H256) -> anyhow::Result<()> { + Ok(self.inner.insert(key.into_nibbles(), hash)?) + } + pub fn insert(&mut self, key: H256, account: AccountRlp) -> anyhow::Result<()> { + Ok(self.inner.insert( + MptKey::from_hash(key).into_nibbles(), + rlp::encode(&account).to_vec(), + )?) + } + pub fn get(&self, key: H256) -> Option { + self.inner + .get(MptKey::from_hash(key).into_nibbles()) + .map(assert_rlp_account) + } + pub fn root(&self) -> H256 { + self.inner.hash() + } + pub fn reporting_remove(&mut self, address: Address) -> anyhow::Result> { + delete_node_and_report_remaining_key_if_branch_collapsed( + &mut self.inner, + MptKey::from_hash(keccak_hash::keccak(address)), + ) + } + pub fn mask(&mut self, addresses: impl IntoIterator) -> anyhow::Result<()> { + let new = mpt_trie::trie_subsets::create_trie_subset( + &self.inner, + addresses.into_iter().map(MptKey::into_nibbles), + )?; + self.inner = new; + Ok(()) + } + pub fn iter(&self) -> impl Iterator + '_ { + self.inner.items().filter_map(|(key, rlp)| match rlp { + mpt_trie::trie_ops::ValOrHash::Val(vec) => Some(( + MptKey::from_nibbles(key).into_hash().expect("bad depth"), + assert_rlp_account(vec), + )), + mpt_trie::trie_ops::ValOrHash::Hash(_) => None, + }) + } +} + +impl From for HashedPartialTrie { + fn from(StateMpt { inner }: StateMpt) -> Self { + inner + } +} + +/// Global, per-account. +/// +/// See +#[derive(Debug, Clone, Default)] +pub struct StorageTrie { + untyped: HashedPartialTrie, +} +impl StorageTrie { + pub fn new(strategy: OnOrphanedHashNode) -> Self { + Self { + untyped: HashedPartialTrie::new_with_strategy(Node::Empty, strategy), + } + } + pub fn get(&mut self, key: &MptKey) -> Option<&[u8]> { + self.untyped.get(key.into_nibbles()) + } + pub fn insert(&mut self, key: MptKey, value: Vec) -> anyhow::Result<()> { + self.untyped.insert(key.into_nibbles(), value)?; + Ok(()) + } + pub fn insert_hash(&mut self, key: MptKey, hash: H256) -> anyhow::Result<()> { + self.untyped.insert(key.into_nibbles(), hash)?; + Ok(()) + } + pub fn root(&self) -> H256 { + self.untyped.hash() + } + pub const fn as_hashed_partial_trie(&self) -> &HashedPartialTrie { + &self.untyped + } + pub fn reporting_remove(&mut self, key: MptKey) -> anyhow::Result> { + delete_node_and_report_remaining_key_if_branch_collapsed(&mut self.untyped, key) + } + pub fn as_mut_hashed_partial_trie_unchecked(&mut self) -> &mut HashedPartialTrie { + &mut self.untyped + } + /// _Hash out_ the parts of the trie that aren't in `paths`. + pub fn mask(&mut self, paths: impl IntoIterator) -> anyhow::Result<()> { + self.untyped = mpt_trie::trie_subsets::create_trie_subset( + &self.untyped, + paths.into_iter().map(MptKey::into_nibbles), + )?; + Ok(()) + } +} + +impl From for HashedPartialTrie { + fn from(value: StorageTrie) -> Self { + value.untyped + } +} + +/// If a branch collapse occurred after a delete, then we must ensure that +/// the other single child that remains also is not hashed when passed into +/// plonky2. Returns the key to the remaining child if a collapse occurred. +fn delete_node_and_report_remaining_key_if_branch_collapsed( + trie: &mut HashedPartialTrie, + key: MptKey, +) -> anyhow::Result> { + let old_trace = get_trie_trace(trie, key); + trie.delete(key.into_nibbles())?; + let new_trace = get_trie_trace(trie, key); + Ok( + node_deletion_resulted_in_a_branch_collapse(&old_trace, &new_trace) + .map(MptKey::from_nibbles), + ) +} + +fn get_trie_trace(trie: &HashedPartialTrie, k: MptKey) -> mpt_trie::utils::TriePath { + mpt_trie::special_query::path_for_query(trie, k.into_nibbles(), true).collect() +} + +/// Comparing the path of the deleted key before and after the deletion, +/// determine if the deletion resulted in a branch collapsing into a leaf or +/// extension node, and return the path to the remaining child if this +/// occurred. +fn node_deletion_resulted_in_a_branch_collapse( + old_path: &mpt_trie::utils::TriePath, + new_path: &mpt_trie::utils::TriePath, +) -> Option { + // Collapse requires at least 2 nodes. + if old_path.0.len() < 2 { + return None; + } + + // If the node path length decreased after the delete, then a collapse occurred. + // As an aside, note that while it's true that the branch could have collapsed + // into an extension node with multiple nodes below it, the query logic will + // always stop at most one node after the keys diverge, which guarantees that + // the new trie path will always be shorter if a collapse occurred. + let branch_collapse_occurred = old_path.0.len() > new_path.0.len(); + + // Now we need to determine the key of the only remaining node after the + // collapse. + branch_collapse_occurred.then(|| mpt_trie::utils::IntoTrieKey::into_key(new_path.iter())) +} diff --git a/trace_decoder/src/type1.rs b/trace_decoder/src/type1.rs index aeea0dbb6..c982a1ab3 100644 --- a/trace_decoder/src/type1.rs +++ b/trace_decoder/src/type1.rs @@ -12,28 +12,16 @@ use mpt_trie::partial_trie::OnOrphanedHashNode; use nunny::NonEmpty; use u4::U4; -use crate::typed_mpt::{StateMpt, StateTrie as _, StorageTrie, TrieKey}; +use crate::tries::{MptKey, StateMpt, StorageTrie}; use crate::wire::{Instruction, SmtLeaf}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Default)] pub struct Frontend { pub state: StateMpt, pub code: BTreeSet>>, pub storage: BTreeMap, } -impl Default for Frontend { - // This frontend is intended to be used with our custom `zeroTracer`, - // which covers branch-to-extension collapse edge cases. - fn default() -> Self { - Self { - state: StateMpt::new(OnOrphanedHashNode::CollapseToExtension), - code: BTreeSet::new(), - storage: BTreeMap::new(), - } - } -} - pub fn frontend(instructions: impl IntoIterator) -> anyhow::Result { let executions = execute(instructions)?; ensure!( @@ -66,10 +54,10 @@ fn visit( Node::Hash(Hash { raw_hash }) => { frontend .state - .insert_hash_by_key(TrieKey::new(path.iter().copied())?, raw_hash.into())?; + .insert_hash(MptKey::new(path.iter().copied())?, raw_hash.into())?; } Node::Leaf(Leaf { key, value }) => { - let path = TrieKey::new(path.iter().copied().chain(key))? + let path = MptKey::new(path.iter().copied().chain(key))? .into_hash() .context("invalid depth for leaf of state trie")?; match value { @@ -105,9 +93,7 @@ fn visit( } }, }; - #[expect(deprecated)] // this is MPT-specific code - let clobbered = frontend.state.insert_by_hashed_address(path, account)?; - ensure!(clobbered.is_none(), "duplicate account"); + frontend.state.insert(path, account)?; } } } @@ -141,12 +127,12 @@ fn node2storagetrie(node: Node) -> anyhow::Result { ) -> anyhow::Result<()> { match node { Node::Hash(Hash { raw_hash }) => { - mpt.insert_hash(TrieKey::new(path.iter().copied())?, raw_hash.into())?; + mpt.insert_hash(MptKey::new(path.iter().copied())?, raw_hash.into())?; } Node::Leaf(Leaf { key, value }) => { match value { Either::Left(Value { raw_value }) => mpt.insert( - TrieKey::new(path.iter().copied().chain(key))?, + MptKey::new(path.iter().copied().chain(key))?, rlp::encode(&raw_value.as_slice()).to_vec(), )?, Either::Right(_) => bail!("unexpected account node in storage trie"), @@ -392,7 +378,7 @@ fn test_tries() { assert_eq!(case.expected_state_root, frontend.state.root()); for (haddr, acct) in frontend.state.iter() { - if acct.storage_root != StateMpt::default().root() { + if acct.storage_root != StorageTrie::default().root() { assert!(frontend.storage.contains_key(&haddr)) } } diff --git a/trace_decoder/src/type2.rs b/trace_decoder/src/type2.rs index dd3e45c4b..845260d47 100644 --- a/trace_decoder/src/type2.rs +++ b/trace_decoder/src/type2.rs @@ -1,35 +1,24 @@ //! Frontend for the witness format emitted by e.g [`0xPolygonHermez/cdk-erigon`](https://github.com/0xPolygonHermez/cdk-erigon/) //! Ethereum node. -use std::{ - collections::{HashMap, HashSet}, - iter, -}; +use std::collections::{BTreeMap, HashSet}; use anyhow::{bail, ensure, Context as _}; -use bitvec::vec::BitVec; -use either::Either; -use ethereum_types::BigEndianHash as _; -use itertools::{EitherOrBoth, Itertools as _}; +use ethereum_types::{Address, U256}; +use itertools::EitherOrBoth; +use keccak_hash::H256; use nunny::NonEmpty; -use plonky2::field::types::Field; - -use crate::wire::{Instruction, SmtLeaf, SmtLeafType}; +use stackstack::Stack; -type SmtTrie = smt_trie::smt::Smt; - -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] -pub struct CollatedLeaf { - pub balance: Option, - pub nonce: Option, - pub code_hash: Option, - pub storage_root: Option, -} +use crate::{ + tries::SmtKey, + wire::{Instruction, SmtLeaf, SmtLeafType}, + world::{Type2Entry, Type2World}, +}; pub struct Frontend { - pub trie: SmtTrie, + pub world: Type2World, pub code: HashSet>>, - pub collation: HashMap, } /// # Panics @@ -37,18 +26,14 @@ pub struct Frontend { /// NOT call this function on untrusted inputs. pub fn frontend(instructions: impl IntoIterator) -> anyhow::Result { let (node, code) = fold(instructions).context("couldn't fold smt from instructions")?; - let (trie, collation) = - node2trie(node).context("couldn't construct trie and collation from folded node")?; - Ok(Frontend { - trie, - code, - collation, - }) + let world = + node2world(node).context("couldn't construct trie and collation from folded node")?; + Ok(Frontend { world, code }) } /// Node in a binary (SMT) tree. /// -/// This is an intermediary type on the way to [`SmtTrie`]. +/// This is an intermediary type on the way to [`Type2World`]. enum Node { Branch(EitherOrBoth>), Hash([u8; 32]), @@ -105,9 +90,9 @@ fn fold1(instructions: impl IntoIterator) -> anyhow::Result< Ok(Some(match mask { // note that the single-child bits are reversed... - 0b0001 => Node::Branch(EitherOrBoth::Left(get_child()?)), - 0b0010 => Node::Branch(EitherOrBoth::Right(get_child()?)), - 0b0011 => Node::Branch(EitherOrBoth::Both(get_child()?, get_child()?)), + 0b_01 => Node::Branch(EitherOrBoth::Left(get_child()?)), + 0b_10 => Node::Branch(EitherOrBoth::Right(get_child()?)), + 0b_11 => Node::Branch(EitherOrBoth::Both(get_child()?, get_child()?)), other => bail!("unexpected bit pattern in Branch mask: {:#b}", other), })) } @@ -119,113 +104,78 @@ fn fold1(instructions: impl IntoIterator) -> anyhow::Result< } } -/// Pack a [`Node`] tree into an [`SmtTrie`]. -/// Also summarizes the [`Node::Leaf`]s out-of-band. -/// -/// # Panics -/// - if the tree is too deep. -/// - if [`SmtLeaf::address`] or [`SmtLeaf::value`] are the wrong length. -/// - if [`SmtLeafType::Storage`] is the wrong length. -/// - [`SmtTrie`] panics internally. -fn node2trie( - node: Node, -) -> anyhow::Result<(SmtTrie, HashMap)> { - let mut trie = SmtTrie::default(); - - let (hashes, leaves) = - iter_leaves(node).partition_map::, Vec<_>, _, _, _>(|(path, leaf)| match leaf { - Either::Left(it) => Either::Left((path, it)), - Either::Right(it) => Either::Right(it), - }); - - for (path, hash) in hashes { - // needs to be called before `set`, below, "to avoid any issues" according - // to the smt docs. - trie.set_hash( - bits2bits(path), - smt_trie::smt::HashOut { - elements: { - let ethereum_types::U256(arr) = ethereum_types::H256(hash).into_uint(); - arr.map(smt_trie::smt::F::from_canonical_u64) - }, - }, - ) - } +fn node2world(node: Node) -> anyhow::Result { + let mut hashes = BTreeMap::new(); + let mut leaves = BTreeMap::new(); + visit(&mut hashes, &mut leaves, Stack::new(), node)?; + Ok(Type2World::new_unchecked(leaves, hashes)) +} - let mut collated = HashMap::::new(); - for SmtLeaf { - node_type, - address, - value, - } in leaves - { - let address = ethereum_types::Address::from_slice(&address); - let collated = collated.entry(address).or_default(); - let value = ethereum_types::U256::from_big_endian(&value); - let key = match node_type { - SmtLeafType::Balance => { - ensure!(collated.balance.is_none(), "double write of field"); - collated.balance = Some(value); - smt_trie::keys::key_balance(address) - } - SmtLeafType::Nonce => { - ensure!(collated.nonce.is_none(), "double write of field"); - collated.nonce = Some(value); - smt_trie::keys::key_nonce(address) +fn visit( + hashes: &mut BTreeMap, + leaves: &mut BTreeMap, + path: Stack, + node: Node, +) -> anyhow::Result<()> { + match node { + Node::Branch(children) => { + let (left, right) = children.left_and_right(); + if let Some(left) = left { + visit(hashes, leaves, path.pushed(false), *left)?; } - SmtLeafType::Code => { - ensure!(collated.code_hash.is_none(), "double write of field"); - collated.code_hash = Some({ - let mut it = ethereum_types::H256::zero(); - value.to_big_endian(it.as_bytes_mut()); - it - }); - smt_trie::keys::key_code(address) + if let Some(right) = right { + visit(hashes, leaves, path.pushed(true), *right)?; } - SmtLeafType::Storage(it) => { - ensure!(collated.storage_root.is_none(), "double write of field"); - // TODO(0xaatif): https://github.com/0xPolygonZero/zk_evm/issues/275 - // do we not do anything with the storage here? - smt_trie::keys::key_storage(address, ethereum_types::U256::from_big_endian(&it)) + } + Node::Hash(hash) => { + hashes.insert(SmtKey::new(path.iter().copied())?, H256(hash)); + } + Node::Leaf(SmtLeaf { + node_type, + address, + value, + }) => { + ensure!(address.len() == Address::len_bytes()); + let address = Address::from_slice(&address); + let collated = leaves.entry(address).or_default(); + ensure!(value.len() <= 32); + let value = U256::from_big_endian(&value); + macro_rules! ensure { + ($expr:expr) => { + ::anyhow::ensure!($expr, "double write of field for address {}", address) + }; } - SmtLeafType::CodeLength => smt_trie::keys::key_code_length(address), - }; - trie.set(key, value) - } - Ok((trie, collated)) -} - -/// # Panics -/// - on overcapacity -fn bits2bits(ours: BitVec) -> smt_trie::bits::Bits { - let mut theirs = smt_trie::bits::Bits::empty(); - for it in ours { - theirs.push_bit(it) - } - theirs -} - -/// Simple, inefficient visitor of all leaves of the [`Node`] tree. -#[allow(clippy::type_complexity)] -fn iter_leaves(node: Node) -> Box)>> { - match node { - Node::Hash(it) => Box::new(iter::once((BitVec::new(), Either::Left(it)))), - Node::Branch(it) => { - let (left, right) = it.left_and_right(); - let left = left - .into_iter() - .flat_map(|it| iter_leaves(*it).update(|(path, _)| path.insert(0, false))); - let right = right - .into_iter() - .flat_map(|it| iter_leaves(*it).update(|(path, _)| path.insert(0, true))); - Box::new(left.chain(right)) + match node_type { + SmtLeafType::Balance => { + ensure!(collated.balance.is_none()); + collated.balance = Some(value) + } + SmtLeafType::Nonce => { + ensure!(collated.nonce.is_none()); + collated.nonce = Some(value) + } + SmtLeafType::Code => { + ensure!(collated.code.is_none()); + collated.code = Some(value) + } + SmtLeafType::Storage(slot) => { + ensure!(slot.len() <= 32); + let clobbered = collated.storage.insert(U256::from_big_endian(&slot), value); + ensure!(clobbered.is_none()) + } + SmtLeafType::CodeLength => { + ensure!(collated.code_length.is_none()); + collated.code_length = Some(value) + } + }; } - Node::Leaf(it) => Box::new(iter::once((BitVec::new(), Either::Right(it)))), } + Ok(()) } #[test] fn test_tries() { + use crate::world::World as _; for (ix, case) in serde_json::from_str::>(include_str!("cases/hermez_cdk_erigon.json")) .unwrap() @@ -233,12 +183,7 @@ fn test_tries() { .enumerate() { println!("case {}", ix); - let instructions = crate::wire::parse(&case.bytes).unwrap(); - let frontend = frontend(instructions).unwrap(); - assert_eq!(case.expected_state_root, { - let mut it = [0; 32]; - smt_trie::utils::hashout2u(frontend.trie.root).to_big_endian(&mut it); - ethereum_types::H256(it) - }); + let mut frontend = frontend(crate::wire::parse(&case.bytes).unwrap()).unwrap(); + assert_eq!(case.expected_state_root, frontend.world.root()); } } diff --git a/trace_decoder/src/typed_mpt.rs b/trace_decoder/src/typed_mpt.rs deleted file mode 100644 index 8baf3cf29..000000000 --- a/trace_decoder/src/typed_mpt.rs +++ /dev/null @@ -1,514 +0,0 @@ -//! Principled MPT types used in this library. - -use core::fmt; -use std::{collections::BTreeMap, marker::PhantomData}; - -use copyvec::CopyVec; -use ethereum_types::{Address, H256, U256}; -use evm_arithmetization::generation::mpt::AccountRlp; -use mpt_trie::partial_trie::{HashedPartialTrie, Node, OnOrphanedHashNode, PartialTrie as _}; -use u4::{AsNibbles, U4}; - -/// See . -/// -/// Portions of the trie may be _hashed out_: see [`Self::insert_hash`]. -#[derive(Debug, Clone, PartialEq, Eq)] -struct TypedMpt { - inner: HashedPartialTrie, - _ty: PhantomData T>, -} - -impl TypedMpt { - const PANIC_MSG: &str = "T encoding/decoding should round-trip,\ - and only encoded `T`s are ever inserted"; - fn new() -> Self { - Self { - inner: HashedPartialTrie::new(Node::Empty), - _ty: PhantomData, - } - } - /// Insert a node which represents an out-of-band sub-trie. - /// - /// See [module documentation](super) for more. - fn insert_hash(&mut self, key: TrieKey, hash: H256) -> anyhow::Result<()> { - self.inner.insert(key.into_nibbles(), hash)?; - Ok(()) - } - /// Returns an [`Error`] if the `key` crosses into a part of the trie that - /// isn't hydrated. - fn insert(&mut self, key: TrieKey, value: T) -> anyhow::Result> - where - T: rlp::Encodable + rlp::Decodable, - { - let prev = self.get(key); - self.inner - .insert(key.into_nibbles(), rlp::encode(&value).to_vec())?; - Ok(prev) - } - /// Note that this returns [`None`] if `key` crosses into a part of the - /// trie that isn't hydrated. - /// - /// # Panics - /// - If [`rlp::decode`]-ing for `T` doesn't round-trip. - fn get(&self, key: TrieKey) -> Option - where - T: rlp::Decodable, - { - let bytes = self.inner.get(key.into_nibbles())?; - Some(rlp::decode(bytes).expect(Self::PANIC_MSG)) - } - const fn as_hashed_partial_trie(&self) -> &HashedPartialTrie { - &self.inner - } - fn as_mut_hashed_partial_trie_unchecked(&mut self) -> &mut HashedPartialTrie { - &mut self.inner - } - fn root(&self) -> H256 { - self.inner.hash() - } - /// Note that this returns owned paths and items. - fn iter(&self) -> impl Iterator + '_ - where - T: rlp::Decodable, - { - self.inner.keys().filter_map(|nib| { - let path = TrieKey::from_nibbles(nib); - Some((path, self.get(path)?)) - }) - } -} - -impl Default for TypedMpt { - fn default() -> Self { - Self::new() - } -} - -impl<'a, T> IntoIterator for &'a TypedMpt -where - T: rlp::Decodable, -{ - type Item = (TrieKey, T); - type IntoIter = Box + 'a>; - fn into_iter(self) -> Self::IntoIter { - Box::new(self.iter()) - } -} - -/// Bounded sequence of [`U4`], -/// used as a key for [`TypedMpt`]. -/// -/// Semantically equivalent to [`mpt_trie::nibbles::Nibbles`]. -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] -pub struct TrieKey(CopyVec); - -impl fmt::Display for TrieKey { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - for u in self.0 { - f.write_fmt(format_args!("{:x}", u))? - } - Ok(()) - } -} - -impl TrieKey { - pub fn new(components: impl IntoIterator) -> anyhow::Result { - Ok(TrieKey(CopyVec::try_from_iter(components)?)) - } - pub fn into_hash_left_padded(mut self) -> H256 { - for _ in 0..self.0.spare_capacity_mut().len() { - self.0.insert(0, U4::Dec00) - } - let mut packed = [0u8; 32]; - AsNibbles(&mut packed).pack_from_slice(&self.0); - H256::from_slice(&packed) - } - pub fn from_address(address: Address) -> Self { - Self::from_hash(keccak_hash::keccak(address)) - } - pub fn from_slot_position(pos: U256) -> Self { - let mut bytes = [0; 32]; - pos.to_big_endian(&mut bytes); - Self::from_hash(keccak_hash::keccak(H256::from_slice(&bytes))) - } - pub fn from_hash(H256(bytes): H256) -> Self { - Self::new(AsNibbles(bytes)).expect("32 bytes is 64 nibbles, which fits") - } - - pub fn from_txn_ix(txn_ix: usize) -> Self { - TrieKey::new(AsNibbles(rlp::encode(&txn_ix))).expect( - "\ - rlp of an usize goes through a u64, which is 8 bytes, - which will be 9 bytes RLP'ed. - 9 < 32", - ) - } - pub fn into_nibbles(self) -> mpt_trie::nibbles::Nibbles { - let mut theirs = mpt_trie::nibbles::Nibbles::default(); - for component in self.0 { - theirs.push_nibble_back(component as u8) - } - theirs - } - pub fn from_nibbles(mut theirs: mpt_trie::nibbles::Nibbles) -> Self { - let mut ours = CopyVec::new(); - while !theirs.is_empty() { - ours.try_push( - U4::new(theirs.pop_next_nibble_front()) - .expect("mpt_trie returned an invalid nibble"), - ) - .expect("mpt_trie should not have more than 64 nibbles") - } - Self(ours) - } - - pub fn into_hash(self) -> Option { - let Self(nibbles) = self; - let mut bytes = [0; 32]; - AsNibbles(&mut bytes).pack_from_slice(&nibbles.into_array()?); - Some(H256(bytes)) - } -} - -#[test] -fn key_into_hash() { - assert_eq!(TrieKey::new([]).unwrap().into_hash(), None); - assert_eq!( - TrieKey::new(itertools::repeat_n(u4::u4!(0), 64)) - .unwrap() - .into_hash(), - Some(H256::zero()) - ) -} - -/// Per-block, `txn_ix -> [u8]`. -/// -/// See -#[derive(Debug, Clone, Default)] -pub struct TransactionTrie { - untyped: HashedPartialTrie, -} - -impl TransactionTrie { - pub fn new() -> Self { - Self::default() - } - pub fn insert(&mut self, txn_ix: usize, val: Vec) -> anyhow::Result>> { - let prev = self - .untyped - .get(TrieKey::from_txn_ix(txn_ix).into_nibbles()) - .map(Vec::from); - self.untyped - .insert(TrieKey::from_txn_ix(txn_ix).into_nibbles(), val)?; - Ok(prev) - } - pub fn root(&self) -> H256 { - self.untyped.hash() - } - pub const fn as_hashed_partial_trie(&self) -> &mpt_trie::partial_trie::HashedPartialTrie { - &self.untyped - } - /// _Hash out_ parts of the trie that aren't in `txn_ixs`. - pub fn mask(&mut self, txn_ixs: impl IntoIterator) -> anyhow::Result<()> { - self.untyped = mpt_trie::trie_subsets::create_trie_subset( - &self.untyped, - txn_ixs - .into_iter() - .map(|it| TrieKey::from_txn_ix(it).into_nibbles()), - )?; - Ok(()) - } -} - -impl From for HashedPartialTrie { - fn from(value: TransactionTrie) -> Self { - value.untyped - } -} - -/// Per-block, `txn_ix -> [u8]`. -/// -/// See -#[derive(Debug, Clone, Default)] -pub struct ReceiptTrie { - untyped: HashedPartialTrie, -} - -impl ReceiptTrie { - pub fn new() -> Self { - Self::default() - } - pub fn insert(&mut self, txn_ix: usize, val: Vec) -> anyhow::Result>> { - let prev = self - .untyped - .get(TrieKey::from_txn_ix(txn_ix).into_nibbles()) - .map(Vec::from); - self.untyped - .insert(TrieKey::from_txn_ix(txn_ix).into_nibbles(), val)?; - Ok(prev) - } - pub fn root(&self) -> H256 { - self.untyped.hash() - } - pub const fn as_hashed_partial_trie(&self) -> &mpt_trie::partial_trie::HashedPartialTrie { - &self.untyped - } - /// _Hash out_ parts of the trie that aren't in `txn_ixs`. - pub fn mask(&mut self, txn_ixs: impl IntoIterator) -> anyhow::Result<()> { - self.untyped = mpt_trie::trie_subsets::create_trie_subset( - &self.untyped, - txn_ixs - .into_iter() - .map(|it| TrieKey::from_txn_ix(it).into_nibbles()), - )?; - Ok(()) - } -} - -impl From for HashedPartialTrie { - fn from(value: ReceiptTrie) -> Self { - value.untyped - } -} - -/// TODO(0xaatif): document this after refactoring is done https://github.com/0xPolygonZero/zk_evm/issues/275 -pub trait StateTrie { - fn insert_by_address( - &mut self, - address: Address, - account: AccountRlp, - ) -> anyhow::Result>; - fn insert_hash_by_key(&mut self, key: TrieKey, hash: H256) -> anyhow::Result<()>; - fn get_by_address(&self, address: Address) -> Option; - fn reporting_remove(&mut self, address: Address) -> anyhow::Result>; - /// _Hash out_ parts of the trie that aren't in `txn_ixs`. - fn mask(&mut self, address: impl IntoIterator) -> anyhow::Result<()>; - fn iter(&self) -> impl Iterator + '_; - fn root(&self) -> H256; -} - -/// Global, [`Address`] `->` [`AccountRlp`]. -/// -/// See -#[derive(Debug, Clone, Default)] -pub struct StateMpt { - typed: TypedMpt, -} - -impl StateMpt { - pub fn new(strategy: OnOrphanedHashNode) -> Self { - Self { - typed: TypedMpt { - inner: HashedPartialTrie::new_with_strategy(Node::Empty, strategy), - _ty: PhantomData, - }, - } - } - #[deprecated = "prefer operations on `Address` where possible, as SMT support requires this"] - pub fn insert_by_hashed_address( - &mut self, - key: H256, - account: AccountRlp, - ) -> anyhow::Result> { - self.typed.insert(TrieKey::from_hash(key), account) - } - pub fn iter(&self) -> impl Iterator + '_ { - self.typed - .iter() - .map(|(key, rlp)| (key.into_hash().expect("key is always H256"), rlp)) - } - pub fn as_hashed_partial_trie(&self) -> &mpt_trie::partial_trie::HashedPartialTrie { - self.typed.as_hashed_partial_trie() - } -} - -impl StateTrie for StateMpt { - fn insert_by_address( - &mut self, - address: Address, - account: AccountRlp, - ) -> anyhow::Result> { - #[expect(deprecated)] - self.insert_by_hashed_address(keccak_hash::keccak(address), account) - } - /// Insert an _hashed out_ part of the trie - fn insert_hash_by_key(&mut self, key: TrieKey, hash: H256) -> anyhow::Result<()> { - self.typed.insert_hash(key, hash) - } - fn get_by_address(&self, address: Address) -> Option { - self.typed - .get(TrieKey::from_hash(keccak_hash::keccak(address))) - } - /// Delete the account at `address`, returning any remaining branch on - /// collapse - fn reporting_remove(&mut self, address: Address) -> anyhow::Result> { - delete_node_and_report_remaining_key_if_branch_collapsed( - self.typed.as_mut_hashed_partial_trie_unchecked(), - TrieKey::from_address(address), - ) - } - fn mask(&mut self, addresses: impl IntoIterator) -> anyhow::Result<()> { - let inner = mpt_trie::trie_subsets::create_trie_subset( - self.typed.as_hashed_partial_trie(), - addresses.into_iter().map(TrieKey::into_nibbles), - )?; - self.typed = TypedMpt { - inner, - _ty: PhantomData, - }; - Ok(()) - } - fn iter(&self) -> impl Iterator + '_ { - self.typed - .iter() - .map(|(key, rlp)| (key.into_hash().expect("key is always H256"), rlp)) - } - fn root(&self) -> H256 { - self.typed.root() - } -} - -impl From for HashedPartialTrie { - fn from(value: StateMpt) -> Self { - let StateMpt { - typed: TypedMpt { inner, _ty }, - } = value; - inner - } -} - -pub struct StateSmt { - address2state: BTreeMap, - hashed_out: BTreeMap, -} - -impl StateTrie for StateSmt { - fn insert_by_address( - &mut self, - address: Address, - account: AccountRlp, - ) -> anyhow::Result> { - Ok(self.address2state.insert(address, account)) - } - fn insert_hash_by_key(&mut self, key: TrieKey, hash: H256) -> anyhow::Result<()> { - self.hashed_out.insert(key, hash); - Ok(()) - } - fn get_by_address(&self, address: Address) -> Option { - self.address2state.get(&address).copied() - } - fn reporting_remove(&mut self, address: Address) -> anyhow::Result> { - self.address2state.remove(&address); - Ok(None) - } - fn mask(&mut self, address: impl IntoIterator) -> anyhow::Result<()> { - let _ = address; - Ok(()) - } - fn iter(&self) -> impl Iterator + '_ { - self.address2state - .iter() - .map(|(addr, acct)| (keccak_hash::keccak(addr), *acct)) - } - fn root(&self) -> H256 { - todo!() - } -} - -/// Global, per-account. -/// -/// See -#[derive(Debug, Clone, Default)] -pub struct StorageTrie { - untyped: HashedPartialTrie, -} -impl StorageTrie { - pub fn new(strategy: OnOrphanedHashNode) -> Self { - Self { - untyped: HashedPartialTrie::new_with_strategy(Node::Empty, strategy), - } - } - pub fn get(&mut self, key: &TrieKey) -> Option<&[u8]> { - self.untyped.get(key.into_nibbles()) - } - pub fn insert(&mut self, key: TrieKey, value: Vec) -> anyhow::Result>> { - let prev = self.get(&key).map(Vec::from); - self.untyped.insert(key.into_nibbles(), value)?; - Ok(prev) - } - pub fn insert_hash(&mut self, key: TrieKey, hash: H256) -> anyhow::Result<()> { - self.untyped.insert(key.into_nibbles(), hash)?; - Ok(()) - } - pub fn root(&self) -> H256 { - self.untyped.hash() - } - pub const fn as_hashed_partial_trie(&self) -> &HashedPartialTrie { - &self.untyped - } - pub fn reporting_remove(&mut self, key: TrieKey) -> anyhow::Result> { - delete_node_and_report_remaining_key_if_branch_collapsed(&mut self.untyped, key) - } - pub fn as_mut_hashed_partial_trie_unchecked(&mut self) -> &mut HashedPartialTrie { - &mut self.untyped - } - /// _Hash out_ the parts of the trie that aren't in `paths`. - pub fn mask(&mut self, paths: impl IntoIterator) -> anyhow::Result<()> { - self.untyped = mpt_trie::trie_subsets::create_trie_subset( - &self.untyped, - paths.into_iter().map(TrieKey::into_nibbles), - )?; - Ok(()) - } -} - -impl From for HashedPartialTrie { - fn from(value: StorageTrie) -> Self { - value.untyped - } -} - -/// If a branch collapse occurred after a delete, then we must ensure that -/// the other single child that remains also is not hashed when passed into -/// plonky2. Returns the key to the remaining child if a collapse occurred. -fn delete_node_and_report_remaining_key_if_branch_collapsed( - trie: &mut HashedPartialTrie, - key: TrieKey, -) -> anyhow::Result> { - let old_trace = get_trie_trace(trie, key); - trie.delete(key.into_nibbles())?; - let new_trace = get_trie_trace(trie, key); - Ok( - node_deletion_resulted_in_a_branch_collapse(&old_trace, &new_trace) - .map(TrieKey::from_nibbles), - ) -} - -fn get_trie_trace(trie: &HashedPartialTrie, k: TrieKey) -> mpt_trie::utils::TriePath { - mpt_trie::special_query::path_for_query(trie, k.into_nibbles(), true).collect() -} - -/// Comparing the path of the deleted key before and after the deletion, -/// determine if the deletion resulted in a branch collapsing into a leaf or -/// extension node, and return the path to the remaining child if this -/// occurred. -fn node_deletion_resulted_in_a_branch_collapse( - old_path: &mpt_trie::utils::TriePath, - new_path: &mpt_trie::utils::TriePath, -) -> Option { - // Collapse requires at least 2 nodes. - if old_path.0.len() < 2 { - return None; - } - - // If the node path length decreased after the delete, then a collapse occurred. - // As an aside, note that while it's true that the branch could have collapsed - // into an extension node with multiple nodes below it, the query logic will - // always stop at most one node after the keys diverge, which guarantees that - // the new trie path will always be shorter if a collapse occurred. - let branch_collapse_occurred = old_path.0.len() > new_path.0.len(); - - // Now we need to determine the key of the only remaining node after the - // collapse. - branch_collapse_occurred.then(|| mpt_trie::utils::IntoTrieKey::into_key(new_path.iter())) -} diff --git a/trace_decoder/src/wire.rs b/trace_decoder/src/wire.rs index 6f56f1e44..359043057 100644 --- a/trace_decoder/src/wire.rs +++ b/trace_decoder/src/wire.rs @@ -1,6 +1,6 @@ //! We support two wire formats: -//! - Type 1, based on [this specification](https://gist.github.com/mandrigin/ff7eccf30d0ef9c572bafcb0ab665cff#the-bytes-layout). -//! - Type 2, loosely based on [this specification](https://github.com/0xPolygonHermez/cdk-erigon/blob/d1d6b3c7a4c81c46fd995c1baa5c1f8069ff0348/turbo/trie/WITNESS.md) +//! - Type 1 (AKA MPT), based on [this specification](https://gist.github.com/mandrigin/ff7eccf30d0ef9c572bafcb0ab665cff#the-bytes-layout). +//! - Type 2 (AKA SMT), loosely based on [this specification](https://github.com/0xPolygonHermez/cdk-erigon/blob/d1d6b3c7a4c81c46fd995c1baa5c1f8069ff0348/turbo/trie/WITNESS.md) //! //! Fortunately, their opcodes don't conflict, so we can have a single //! [`Instruction`] type, with shared parsing logic in this module, and bail on diff --git a/trace_decoder/src/world.rs b/trace_decoder/src/world.rs new file mode 100644 index 000000000..fa68854e4 --- /dev/null +++ b/trace_decoder/src/world.rs @@ -0,0 +1,420 @@ +use std::collections::{BTreeMap, BTreeSet}; + +use alloy_compat::Compat as _; +use anyhow::{ensure, Context as _}; +use either::Either; +use ethereum_types::{Address, BigEndianHash as _, U256}; +use keccak_hash::H256; + +use crate::tries::{MptKey, SmtKey, StateMpt, StorageTrie}; + +/// The [core](crate::core) of this crate is agnostic over state and storage +/// representations. +/// +/// This is the common interface to those data structures. +/// See also [crate::_DEVELOPER_DOCS]. +pub(crate) trait World { + /// (State) subtries may be _hashed out. + /// This type is a key which may identify a subtrie. + type SubtriePath; + + ////////////////////// + /// Account operations + ////////////////////// + + /// Whether the state contains an account at the given address. + /// + /// `false` is not necessarily definitive - the address may belong to a + /// _hashed out_ subtrie. + fn contains(&mut self, address: Address) -> anyhow::Result; + + /// Update the balance for the account at the given address. + /// + /// Creates a new account at `address` if it does not exist. + fn update_balance(&mut self, address: Address, f: impl FnOnce(&mut U256)) + -> anyhow::Result<()>; + + /// Update the nonce for the account at the given address. + /// + /// Creates a new account at `address` if it does not exist. + fn update_nonce(&mut self, address: Address, f: impl FnOnce(&mut U256)) -> anyhow::Result<()>; + + /// Update the code for the account at the given address. + /// + /// Creates a new account at `address` if it does not exist. + fn set_code(&mut self, address: Address, code: Either<&[u8], H256>) -> anyhow::Result<()>; + + /// The [core](crate::core) of this crate tracks required subtries for + /// proving. + /// + /// In case of a state delete, it may be that certain parts of the subtrie + /// must be retained. If so, it will be returned as [`Some`]. + fn reporting_destroy(&mut self, address: Address) -> anyhow::Result>; + + ////////////////////// + /// Storage operations + ////////////////////// + + /// Create an account at the given address. + /// + /// It may not be an error if the address already exists. + fn create_storage(&mut self, address: Address) -> anyhow::Result<()>; + + /// Destroy storage for the given address' account. + fn destroy_storage(&mut self, address: Address) -> anyhow::Result<()>; + + /// Store an integer for the given account at the given `slot`. + fn store_int(&mut self, address: Address, slot: U256, value: U256) -> anyhow::Result<()>; + fn store_hash(&mut self, address: Address, hash: H256, value: H256) -> anyhow::Result<()>; + + /// Load an integer from the given account at the given `slot`. + fn load_int(&mut self, address: Address, slot: U256) -> anyhow::Result; + + /// Delete the given slot from the given account's storage. + /// + /// In case of a delete, it may be that certain parts of the subtrie + /// must be retained. If so, it will be returned as [`Some`]. + fn reporting_destroy_slot( + &mut self, + address: Address, + slot: U256, + ) -> anyhow::Result>; + fn mask_storage(&mut self, masks: BTreeMap>) -> anyhow::Result<()>; + + //////////////////// + /// Other operations + //////////////////// + + /// _Hash out_ parts of the (state) trie that aren't in `paths`. + fn mask(&mut self, paths: impl IntoIterator) -> anyhow::Result<()>; + + /// Return an identifier for the world. + fn root(&mut self) -> H256; +} + +#[derive(Clone, Debug)] +pub struct Type1World { + state: StateMpt, + /// Writes to storage should be reconciled with + /// [`storage_root`](evm_arithmetization::generation::mpt::AccountRlp)s. + storage: BTreeMap, +} + +impl Type1World { + pub fn new(state: StateMpt, mut storage: BTreeMap) -> anyhow::Result { + // Initialise the storage tries. + for (haddr, acct) in state.iter() { + let storage = storage.entry(haddr).or_insert_with(|| { + let mut it = StorageTrie::default(); + it.insert_hash(MptKey::default(), acct.storage_root) + .expect("empty trie insert cannot fail"); + it + }); + ensure!( + storage.root() == acct.storage_root, + "inconsistent initial storage for hashed address {haddr}" + ) + } + Ok(Self { state, storage }) + } + pub fn state_trie(&self) -> &mpt_trie::partial_trie::HashedPartialTrie { + self.state.as_hashed_partial_trie() + } + pub fn into_state_and_storage(self) -> (StateMpt, BTreeMap) { + let Self { state, storage } = self; + (state, storage) + } + fn get_storage_mut(&mut self, address: Address) -> anyhow::Result<&mut StorageTrie> { + self.storage + .get_mut(&keccak_hash::keccak(address)) + .context("no such storage") + } + fn on_storage( + &mut self, + address: Address, + f: impl FnOnce(&mut StorageTrie) -> anyhow::Result, + ) -> anyhow::Result { + let mut acct = self + .state + .get(keccak_hash::keccak(address)) + .context("no such account")?; + let storage = self.get_storage_mut(address)?; + let ret = f(storage)?; + acct.storage_root = storage.root(); + self.state.insert(keccak_hash::keccak(address), acct)?; + Ok(ret) + } +} + +impl World for Type1World { + type SubtriePath = MptKey; + fn contains(&mut self, address: Address) -> anyhow::Result { + Ok(self.state.get(keccak_hash::keccak(address)).is_some()) + } + fn update_balance( + &mut self, + address: Address, + f: impl FnOnce(&mut U256), + ) -> anyhow::Result<()> { + let key = keccak_hash::keccak(address); + let mut acct = self.state.get(key).unwrap_or_default(); + f(&mut acct.balance); + self.state.insert(key, acct) + } + fn update_nonce(&mut self, address: Address, f: impl FnOnce(&mut U256)) -> anyhow::Result<()> { + let key = keccak_hash::keccak(address); + let mut acct = self.state.get(key).unwrap_or_default(); + f(&mut acct.nonce); + self.state.insert(key, acct) + } + fn set_code(&mut self, address: Address, code: Either<&[u8], H256>) -> anyhow::Result<()> { + let key = keccak_hash::keccak(address); + let mut acct = self.state.get(key).unwrap_or_default(); + acct.code_hash = code.right_or_else(keccak_hash::keccak); + self.state.insert(key, acct) + } + fn reporting_destroy(&mut self, address: Address) -> anyhow::Result> { + self.state.reporting_remove(address) + } + fn mask( + &mut self, + addresses: impl IntoIterator, + ) -> anyhow::Result<()> { + self.state.mask(addresses) + } + fn root(&mut self) -> H256 { + self.state.root() + } + fn create_storage(&mut self, address: Address) -> anyhow::Result<()> { + let _clobbered = self + .storage + .insert(keccak_hash::keccak(address), StorageTrie::default()); + // ensure!(_clobbered.is_none()); // TODO(0xaatif): fails our tests + Ok(()) + } + fn destroy_storage(&mut self, address: Address) -> anyhow::Result<()> { + let removed = self.storage.remove(&keccak_hash::keccak(address)); + ensure!(removed.is_some()); + Ok(()) + } + + fn store_int(&mut self, address: Address, slot: U256, value: U256) -> anyhow::Result<()> { + self.on_storage(address, |it| { + it.insert( + MptKey::from_slot_position(slot), + alloy::rlp::encode(value.compat()), + ) + }) + } + + fn store_hash(&mut self, address: Address, hash: H256, value: H256) -> anyhow::Result<()> { + self.on_storage(address, |it| { + it.insert(MptKey::from_hash(hash), alloy::rlp::encode(value.compat())) + }) + } + + fn load_int(&mut self, address: Address, slot: U256) -> anyhow::Result { + let bytes = self + .get_storage_mut(address)? + .get(&MptKey::from_slot_position(slot)) + .context(format!("no storage at slot {slot} for address {address:x}"))?; + Ok(rlp::decode(bytes)?) + } + + fn reporting_destroy_slot( + &mut self, + address: Address, + slot: U256, + ) -> anyhow::Result> { + self.on_storage(address, |it| { + it.reporting_remove(MptKey::from_slot_position(slot)) + }) + } + + fn mask_storage(&mut self, masks: BTreeMap>) -> anyhow::Result<()> { + let keep = masks + .keys() + .map(keccak_hash::keccak) + .collect::>(); + self.storage.retain(|haddr, _| keep.contains(haddr)); + for (addr, mask) in masks { + if let Some(it) = self.storage.get_mut(&keccak_hash::keccak(addr)) { + it.mask(mask)? + } + } + Ok(()) + } +} + +impl World for Type2World { + type SubtriePath = SmtKey; + fn contains(&mut self, address: Address) -> anyhow::Result { + Ok(self.accounts.contains_key(&address)) + } + fn update_balance( + &mut self, + address: Address, + f: impl FnOnce(&mut U256), + ) -> anyhow::Result<()> { + let acct = self.accounts.entry(address).or_default(); + f(acct.balance.get_or_insert(Default::default())); + Ok(()) + } + fn update_nonce(&mut self, address: Address, f: impl FnOnce(&mut U256)) -> anyhow::Result<()> { + let acct = self.accounts.entry(address).or_default(); + f(acct.nonce.get_or_insert(Default::default())); + Ok(()) + } + fn set_code(&mut self, address: Address, code: Either<&[u8], H256>) -> anyhow::Result<()> { + let acct = self.accounts.entry(address).or_default(); + match code { + Either::Left(bytes) => { + acct.code = Some(keccak_hash::keccak(bytes).into_uint()); + acct.code_length = Some(U256::from(bytes.len())) + } + Either::Right(hash) => acct.code = Some(hash.into_uint()), + }; + Ok(()) + } + fn reporting_destroy(&mut self, address: Address) -> anyhow::Result> { + self.accounts.remove(&address); + Ok(None) + } + fn create_storage(&mut self, address: Address) -> anyhow::Result<()> { + let _ = address; + Ok(()) + } + fn destroy_storage(&mut self, address: Address) -> anyhow::Result<()> { + self.accounts + .entry(address) + .and_modify(|it| it.storage.clear()); + Ok(()) + } + fn store_int(&mut self, address: Address, slot: U256, value: U256) -> anyhow::Result<()> { + self.accounts + .entry(address) + .or_default() + .storage + .insert(slot, value); + Ok(()) + } + fn store_hash(&mut self, address: Address, hash: H256, value: H256) -> anyhow::Result<()> { + self.accounts + .entry(address) + .or_default() + .storage + .insert(hash.into_uint(), value.into_uint()); + Ok(()) + } + fn load_int(&mut self, address: Address, slot: U256) -> anyhow::Result { + Ok(self + .accounts + .get(&address) + .context("no account")? + .storage + .get(&slot) + .copied() + .unwrap_or_default()) + } + fn reporting_destroy_slot( + &mut self, + address: Address, + slot: U256, + ) -> anyhow::Result> { + self.accounts.entry(address).and_modify(|it| { + it.storage.remove(&slot); + }); + Ok(None) + } + fn mask_storage(&mut self, masks: BTreeMap>) -> anyhow::Result<()> { + let _ = masks; + Ok(()) + } + fn mask(&mut self, paths: impl IntoIterator) -> anyhow::Result<()> { + let _ = paths; + Ok(()) + } + fn root(&mut self) -> H256 { + let mut it = [0; 32]; + smt_trie::utils::hashout2u(self.as_smt().root).to_big_endian(&mut it); + H256(it) + } +} + +// Having optional fields here is an odd decision, +// but without the distinction, +// the wire tests fail. +// This may be a bug in the SMT library. +#[derive(Default, Clone, Debug)] +pub struct Type2Entry { + pub balance: Option, + pub nonce: Option, + pub code: Option, + pub code_length: Option, + pub storage: BTreeMap, +} + +// This is a buffered version +#[derive(Clone, Debug)] +pub struct Type2World { + accounts: BTreeMap, + hashed_out: BTreeMap, +} + +impl Type2World { + /// # Panics + /// - On untrusted inputs: . + pub fn as_smt(&self) -> smt_trie::smt::Smt { + let mut smt = smt_trie::smt::Smt::::default(); + + for (key, hash) in &self.hashed_out { + smt.set_hash( + key.into_smt_bits(), + smt_trie::smt::HashOut { + elements: { + let ethereum_types::U256(arr) = hash.into_uint(); + arr.map(plonky2::field::goldilocks_field::GoldilocksField) + }, + }, + ); + } + for ( + addr, + Type2Entry { + balance, + nonce, + code, + code_length, + storage, + }, + ) in self.accounts.iter() + { + use smt_trie::keys::{key_balance, key_code, key_code_length, key_nonce, key_storage}; + + for (value, key_fn) in [ + (balance, key_balance as fn(_) -> _), + (nonce, key_nonce), + (code, key_code), + (code_length, key_code_length), + ] { + if let Some(value) = value { + smt.set(key_fn(*addr), *value); + } + } + for (slot, value) in storage { + smt.set(key_storage(*addr, *slot), *value); + } + } + smt + } + + pub fn new_unchecked( + accounts: BTreeMap, + hashed_out: BTreeMap, + ) -> Self { + Self { + accounts, + hashed_out, + } + } +} diff --git a/trace_decoder/tests/cases/b2841_dev.json b/trace_decoder/tests/cases/b2841_dev.json new file mode 100644 index 000000000..86fd47a58 --- /dev/null +++ b/trace_decoder/tests/cases/b2841_dev.json @@ -0,0 +1,3151 @@ +[ + { + "block_trace": { + "trie_pre_images": { + "combined": { + "compact": "0x00034bbfc81d868a773a3d410b46a1c5ad24c77f20ed58eec86dbe61d4124faa5b4903cbabb8d4ae76f2c5bffea3f3a7436087f73743fdf2a234f213912358036101f30324556c079c7eaec0f15837d9ffc8e3a2072b019cd669834e68b1f08e35dbcd9503a85629d0b8f97be4a7b8c00952733ddb25d17a33f048f288865456dfc61dbe890338f8c87588b2c089b456d619e44769e3205d3633db050b59dd1d02b044d58f0903effc9290eeea9ed6690ecd8c4fb0abeccd945de53b58b1f3eafe4ab1dbe33a9b031a372bff58dc3d8b39ad866b00ddf4130fbfb0525984ad237dad59113c62294203bbf3a18149b6e3af8835a174eea6275faf5b72d092ec3a2db79fc77cbbd6883303a5d308bbdc484c732d2c5e70a4d5dc644e87f86b8ee8c0622bd36bdfaa227e590342bc4bd7ba5c341e8bd33322ebb32c301dab4253f2e427e566a4be51bde51f480316e3839865304e873335db86f8d271ac142b92e7715a4fb7b61b3cf77cfa738d03d658d7de53e174c817bebf4b20e58f0f0911119d6d0275192d9e764984e4343f03eb5d40860abb65f5e2c98750aeb59d6bf737f8d775189d9171915b9569cea61203f6708b157103efa2fb86ae881cd4bb5c96f748980f8673eb1cb3153736d11615039cb7689b3177489826f06fbb03140ae9d2ee750e0dc300d3f076cfc96bcfdc1c0309b02fe90cea7b74efd1dfa55348277bdfe7ba15b3ddd9ea130644dac320d4b403361e8321f9e33e266abc3254dba0fb00ba1e5d7fef0fa2a034ea991b33b961bf0341a83967836a647a83b0c0b80a502049421e6a025b0905fec2f8319ce405eee203177be92aff25d80d30fbcece2af98794e81aaf58222b078eab9d41c664a2101b0332e6b7255764b99d049427e8ba3db35ea79b236ddc469df5d7acfaba7643ce1d03a8c53ac1b9a4c5008674856eb32be4dbb023f2606f8363b394cbe1ae55b5ca010369f2f297aa6333265fe333b7ed98adfb7c3a5218d8c1d64a042ed8647d224859038ed9a870a781c1cbb7379b19b67dfc2af98411435e0421761846e2d077cf6cb603d05b00e3998f943f8c82d0cc4cbfccc21992d88cb113c6c27c511517f9e3bedd030b8a6669276185d39e14bb177eb39150b3653387da8c314e993a276313826996034f7496317556da98a5494e597390985cb9126a6264e29923ba7ff77a14c7fb5303fbe256159bb51f5cd5a0efd98673cfbee6a94ad7af90975755f490e5975fccbb0320e5a3b51c847527c93a30b3243479f1c7b1d9548ca136b26d68f08b8387512c0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f0280709686d57b9935f9981f88e81f517b186ac6d1e7143592df5f5bde7b0e0f01410f1bffffffffffffffff05581f0262ba90dec43ec1d6016f9dd39dc324e967f2a3459a78281d1f4b2ba962a60844cae117c60219140503ac6a1efbf2143dd2db3b8fe923af4e0d4b1b6f3abb8fe6dc71e6f919f578e770031f8be787d795b348ea16acaba63f6a5dd5d19227ca668f3d9ad0b6d88a113984037d435b593a39cc1c83353d1e27c255346bf211935a294ca1c0f98d37e4d9f2350312f4bdf38974ace837eeb3b226f5f8e13476e3e9b26a275b2db92c9d752c4ae90219ffff0219ffff031a4118e603a378b306963510749c5ceb869759db40b2f09b1c7047fca6597ad603fbeb601091dc90c4d1e6e98fa323bd174a885b422e1e61393b4f6df59ea3b6b103f14b8542bad156ab275640abb7c6a24e0e560260cef3ba4155e728b163b3862d03e3356d0e14607afa22f1c07b32129add845b121d6f9b1e90b35ceb135ed1d6c003dfe4e8b6a1d13a7765b0e5006c33179ad8c1ff89020c935abc2ba30fc64cbe2503c0ddae962bf3654e7407587e8b0401d7274eb903de6a9d89b264efc2954a0c5c0378b69b978e5046b335b198c1e0a96b2cdb8d2466eeb43400a8c61231011c1bfb03394a9f9f4195b0f87f2dd42aaf3a9b6518f1d37a3ff370361ddc3a288f2f581903a26cb3b2abefcbaf6d60bfefc2e36db64e15822d14ab7812dc1779a5d75e5165039fc062f5f8defc0a8292c9f02ebe091b9dbb1c03d90bf43af94aa1e9132e943603badaee89750f77d2d7e2df1102da9a6458614ab097c4480721d53422443120d70316d2f15c75b47cef40e9a5e6891893d6b005fa68086f480972913c9277ef69f10398f2405e50cfbaaf4b9df7a6b44f9411824fc7d293e9165c4fb9354c7bb6638d03d40ef3ebd4369bc9c738f8f2b5177104e4f9a76f1a496be5591170366dfb88d1036c7265a785a25abb1490ffb8c9114987799521ed622ca9e8e06fb3c3d7cece8c03c71c1efb022e6d7d4c688f014f6b06dfbce060ddcdea9196d7c8348466ebe5f7033b1db21e5beef8e7669cf6d135e6921ddcfb2ec454da1ab1bbe455a8d63aa01205581f02cd7b392606211747518b9fa25f8f3084ea0c6030b92d088e2d257ef350440c014201180314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f0286de927b72a570a4d40f0d20878add0b73dfce7d54fa3735706c742d41f70f01410f1bffffffffffffffff03e0707a684db5bcc6bfa371ee452e7fd3ff2fd907bc6c467cc83eb10258388feb04590e68366060811015610032577f6e6f7420656e6f7567682063616c6c6461746100000000000000000000000000805f5260205ffd5b5f356020356040356060840380606060c0375f845f528360205282604052600185612000116110008711161561006f576110008603915061100195505b85613000116120008711161561008c576120008603915061200195505b85600181146101a057600281146101b057600381146101c057600481146101cf57601181146101de57601281146101fe576013811461021e576014811461023e576021811461025e576022811461027e576023811461029e57602481146102be57603181146102de57603281146102fd576033811461031c576034811461033b576041811461035a5760428114610379576043811461039857604481146103b75761010181146103d65761020181146104245761030181146104725761040181146104c057610501811461050e57610601811461055c5761070181146105a95761080181146105f75761090181146106455761100181146106925761200181146106db575f9150644641494c215f52610721565b5f808560c0888a5af19150610721565b5f808560c0888a5af29150610721565b5f808560c0895af49150610721565b5f808560c0895afa9150610721565b6001606052856080528460a0525f8085606001606088305af19150610721565b6002606052856080528460a0525f8085606001606088305af19150610721565b6003606052856080528460a0525f8085606001606088305af19150610721565b6004606052856080528460a0525f8085606001606088305af19150610721565b6001606052856080528460a0525f8085606001606088305af29150610721565b6002606052856080528460a0525f8085606001606088305af29150610721565b6003606052856080528460a0525f8085606001606088305af29150610721565b6004606052856080528460a0525f8085606001606088305af29150610721565b6001606052856080528460a0525f80856060016060305af49150610721565b6002606052856080528460a0525f80856060016060305af49150610721565b6003606052856080528460a0525f80856060016060305af49150610721565b6004606052856080528460a0525f80856060016060305af49150610721565b6001606052856080528460a0525f80856060016060305afa9150610721565b6002606052856080528460a0525f80856060016060305afa9150610721565b6003606052856080528460a0525f80856060016060305afa9150610721565b6004606052856080528460a0525f80856060016060305afa9150610721565b5f805f80888a5af191507f600e600c600039600e6000f3600160015b8101906300000004560000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6009600c60003960096000f3fe60005260206000f300000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6001600c60003960016000f350000000000000000000000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6007600c60003960076000f35b63ffffffff56000000000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6008600c60003960086000f35b5f6300000000560000000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6003600c60003960036000f35f5f5500000000000000000000000000000000005f5260205f86f05f805f808461c350fa505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6008600c60003960086000f360015f5560025f550000000000000000000000005f5260205f86f05f805f8089856156c2f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6002600c60003960026000f332ff0000000000000000000000000000000000005f5260205f86f05f805f8089856156c2f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6002600c60003960026000f332ff0000000000000000000000000000000000005f5260205f86f05f805f80846156c2fa505f808660c0898b5af1925050610721565b82606052856080528460a0527f333b5f5f333c595ff300000000000000000000000000000000000000000000005f5260205f86f05f80866060016060898561c350f15050610721565b82606052856080528460a0527f333b5f5f333c595ff300000000000000000000000000000000000000000000005f524460205f87f55f80866060016060898561c350f150505b508061072c5760205ffd5b505050505050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038a3f374af9a7a4a128e95f7f1138f6838405db16b72ab4c2d114bb16821914fd032750e8e348c42321841ac7b487e54ff1988c41ef16e7940a4e2aa0dac20dab3c03a34d94d3f28c9d9c7e4552fd1ab98b6916c78cabda5f809a6b897ccd43dd3c8400582002700e13983fefbd9cf16da2ed70fa5c6798ac55062a4803121a869731e308d243020786005820020decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563410100582002fa3b0277c627d5c34939eaa8a18e557bab1c53a19f5d0e3b6ef710ebe40d9a42beef00582002a9afe0c31d8566f9bcc0fe430c62a86995c53c391311d53a1bcae862cae49554fbe07a394847c26b1d998b6e44ee78a9c8191f1302190e50039045098d87a978739897018e256913885cf65253695e37d5227b69deeded4bdf0321d20d51c83b5b9f1cc8d46567c646a2cc149c19bfaee6cebfcc1f9feba25e9603f8cd5b5d80b4f208f18644037b9936045b8d661cdb804f1bb6c4371e435faf7d03ae96d93e5e647f40782078b340ce575963a42e8e223d9378076cc4088fbb24f6032acbbdc731ce092f8a915d24ea0a7538209aca6fc04015e6b6196d23e23516d103f489eeef422757e6ca9f20c20c156a2caa240adab1b665ca87eae887d329e8aa03fba5c0db306536ecbdb64559554f900cfe32735e7090727b78fe992930cf46340334fba8180630be17855c52d67fb8b1746417661ae536a6ffda6393dd2e0e1aa6034db1f36e5f362f626bb7e0233d44e5e40999d0cb20edd0b0ea409037424dca8a00582003e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60410100582003d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e04101020903e417259df144213605eff5c3689e0bc8334bbf834ea66e60047895bf87a31dc903cbdc75f73e4153b65c92feaf497c965c97881c61a2968b17bb022f4834e4455a0058200272e3d370585a87938e12acc2fbde049d39726054660a92bac43f01ef7febde4466fc7c4b0307290582078c24d7d48202269aea87072780267b97b74742ddea08c8c099612c0058200278202e5a359adf61e93fdc611f947d25aa38c16bf7750aa6cc50cfd6e56dbc42beef02194e070353d063f23728ed26a88cc7676584e07a8043f5ceda3db2552ad7db12cf23cf05037302be081053fbf848b7fbe4318480f12e82800e48a9f36ba00c2360136e7f52032a1041d6780653aa50dea2736d3cd7dbb78376d601e5646d9807187cab10f40f03173257e37b2629e6c921d6a5bf9ac1c24bbc5f08e2ac1f104fe922be16b8bf560219ffff05581f02fd704d17547495ce6ea7a13e6b81736f14ba28631d5d4757e212cf20b07f071937f3190e680219c081039526b48dfbe863aab01e9aaafe564529b1b06617b2e87fd7a367e66ebaa21f02032080694847f8d737952ecf601528def1f7882f7424da2b8a63dd42616c5ec568031e017a73bf2c6d56c2e9d27dd4758510ad465355f46c97b955c9fdf9a1ef2f8d039710175bd5dcad0095b7571eefd82f42f6be26d52a321435f740a3651631ec9803698a2bd80bbeb8a97de79964721a410a5ebc9c4cfb7d827526fc9b82b14b7a0f03b85efda7aedbf5ca46e05a629cc20fa3786455454ae535a0a6f6f359ac71989e0219ffff032bbb35bf893348a7a7ba90f7064d8245f050845be71e52738b0fae16fc12b51d031fa510a909fbef1b51802ad3db0da61ba3337be2ffc5a4e61455f59b2713540803bdc55df0a5ed41c48bc0650eb36119201d98771697ef487de0c3de8e38864f8f0370ee0faa698c5528a48894f10b4407ff95b5942e1d4d0f6817cfdd02d773bb8803f8027ae41afe086cf8b63414cb2d425d10a536adef7672298df21abd3549439503c2fd199c44ea176be95d43653982f88becf17b8ab46dafed8f94b6592a356a19031166d4cd10e6dde789216b197e5476496e7cec793d71effde3ab447e75b94256039433c99a08338a98a7a56d95d99a9806c5f2aa94e19bad504a7c09b0807fdb230219ffff0353376a6a50365a5209d9bb4ed3ad271bb81eb8c4cdd33104c59f60f384e6eac7034bbff225cb07003fbb985845f5c27a7076aa909704b820716f3c3899eb113cb103e8250a46cbd06a668bb5024bfdbfe1811cde2931ec727f9d7d5d2f3356b7c87f0395fb719d805bec4b218932618a27500ebafca1c595b053aa8157540819f1539503e56b132a5c084ddd84d9e92a57f3e52c17b00fc4e5dd8527ea628da21a36ebfd0377bb23cf2e0af84d4533eaff241237727f3dba36db0963b3324d8308180df59703c9369bf6fa904bb1927322f676e331465d8aa279d634b85120e0ec2233124b0f032b4890857055c6f2f1745ca2aed9391481fb02822d6e1864b5b6cb16ad3d25cc032068045be1567039d7ddaddf032133fd23cf5ffafd7f33e3e7f7567eec7b9c8005581f03ee2834b372effea65d7c74ab9f3ac60ef271e846721aa8759a346a3b55400c1a000371734c033b2c1d544ff3d0881484da05581f03d3aaa95bc41b1daa58a5f5d17d7cbc0b31fcfaa773183b7f666e188d6f100c014201180219a000038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605581f023fe5e839de3ae07b7a58e253c5d7a76ab68790fbfcb492fd34c72a7ed5980f01410f1bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f02395ac28957f1daff58f479fe8f57dcaa619601c5b0a03f4a240bcdf972f70f01410f1bffffffffffffffff03bcbb7cc09bfdab03049f4cc071e95e826777cd4c35793dec6fc7d54d52e097ec0339ba8f48378f232f4b5828253b94598e1d6bd2edabbb609966b657d399cbb78702190ac403c75fdc148d5573e9263ce7d7d8ce3346aa30ad92bc87625fed81ab9a884fd909032e808f7ecd454d4691af2fdea2cb37baeae8a3f0b499ef513dd6da876cdb538d038d11e96b573b5f1d75e405d5929e91942e4ae134debe4570c6fb59eeb6306a9403d8d4efc8024694b1fbab63c571fa291a01cd4abf7da5bb71703db204451c93fb038a327729bb5fefbd364f6c1a74aebda1c80c6209c26fb7f49dc4568892be9c5803a11d99843a413a03b644eb0377cd490abd2091deef122d24a6c061c62afb60040219ffff03fa2ecfdda9889017118ee9d49e50cb0303b338937d3ba907e809c48619f19dac0306dd9c37c052362169839af55aac2d587390a64fd0d0e4015b742eeca9ae7b270395b9630b25cdcb8d2f985e11ce45889dff3a8cd26840a4f21e499f754ce6163b03a5b10dd2b722b772659074b23a105c5cb76a0c7d8becdca13bcf727d652ce5510377e09ba05a5bf107b4e9ca1897be4cdd74dca44c143f8fd8c78681383fe0e753030b64d20231ac3744aa50b105cf274774877919831ecd20a795b337fec53bb353033c9b5ff8860118fd1a8752f6ff9e293a259356a34cd6fb8ac01bd4465c65a9120355536d17e9fc8df537aa45155f09a2ec3b1c58dcfbf49af71590a46062b9b20003bd6fc7ad30b1e4aca5e87fce5211575a5b31a96a2ff3d82caa39fb9a51dcfb1b03bc469402bbff79385733c4436c4c1bb6a7758a7780c9d46162f7aa2f8149d4c6036eb6ad9ef79b7ed0b1f03081b2a1f7817165d02a9c7ebcf6506c5714925d2ea103ec5e3bc7cb897800b7ef76ab313f3ec8cfd78ffd0265845909011cb303bc7d8a03a5ca52aa6a0930709b662ddc7bc01a5fa81b04621caf1b1e924e17f7213fa683031a1841d4fa56416b703669f8b0413f0188d7de4c1d58f0b5307de1adcb2283940377050839b67cb752e345f4fc3f562d9d911c8936caa0a2b929834290a3625d350339b138c387ca8b06c5b6344815342c0d8498acf8db8106f869b42df40f9949c40340719ced3bfeba94f301d80019522110434ed3f1fa5eda41b2eab0eca9c639bb03db485b911597624c64308b57042fc746cdaeabdf41bf1383078dee79fd2059030355bcfb3f74edfc9ba01842bdd9cf98a8718b8c1434995428c89ec61ba11107a705581f026b5d522bd436259bf6ef1f1022888b34741ce014324e2bf3260d1fc4276b0c01410103a1a2135262612913807cb6fdc66e0f0b8cc66bb458904e3b3dafe63228bd917a0458613373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500033a95726c1146303c80e6f10d8a660be22ccaeb525c622565e4334cb0ea70548703c629f9b3329600fdd5b61dd9bab07d886ed72193d189c33a111d36d2f307fe8d033544b2794a94ef248d18efba243ee8a952f07139c33f1c63003d783ce9590b3303b8611691328ecaf389306b77c47172441456dc24a93e4e517984f2a0f316e40c0381a80ab4dae2e48fb706793438e2689563e4fb9eba490a8adbcbe00bb1206a1d03adc2861939602f8047f1f0e8b8234398a727814482aaa46efa5bc46461576be603c0f7667d14cd3a597dd674d6ee2d46a54458d2dd3a012a5a2bab86084bee668803b3182aca959c0dd895dc977b5879e947b99d6f739f18e31e58f45fe5b0c481c803b2f6bab05e144fc29b6843a45e9c16b37d1f447e6ab9f9cb77e7ef0d6d9abd0803d19a9cfafe22ceec9854bd43cb17c18105fd023028f89a9851a7da644c9a5be10332bd37f7411651dde81a67fb8898c0187b05cf736a4d411ad5a565b48683afbb03fdbba686bb1abedfb36bb8b1c67773d93316d6ef54da83d9b051552d2cc7b35c00582003b2a8f4d43aacfb6522b329d9b7099b52e70b77441f987117cd1258dd2a5b604466fc7c54037ab626c31f0c1dc89c24e692bed270fe793535c6e799201bb68bcaa183c0a2f000582003873ffa04a9bb83d46b0006ba755f409caafe1cb9161f1002d4554acd89c1d04466fc69190359db35529af1f8d412a735055c30984c701ed8cc1de083c685734f495052509e01410403ca8a85257bc4b654c88ddeadb849d0b868af7624e1c4625306eb9e4dfdd699d700581f02f50fe1a9454963a570417cfe533c9b951f4cfe7214558ad831229fd7ff004466fc7a7100581f025d98c98907ce8e48b146d2dcab94472bbb73d543a8c5674200b844efeee1582063d09b19d614aedce61fe280d60bc2e9e6973bafb4fb87bc93b25a4626f2623e0219048003e3c56fb3c80ac098cf694e76aec19db7abdb42c631534a08e666f2d700c59d82030fd184d596e6bfa4473f13a0853bbda16cc4abd0f801b9757cbba0421978972703e50457abec6aded0c6b386d36c589d9d4718e0723c4c5bd301ef4621e39683a1031760f9169d782d2529e98a83f4e182b6ae5f26e8c99350c61e482145835796b30303bb9e372517b00425ca43c8878d44468e3bb58ccd65e5c536180d8462c4dd8e0219efbe03ff10d0771b10f43921076204f936e3d4828b1a683f407bb5e46e6f79e93a93bd03aefa915492a7a93e57bb781974f55c96fcfc3341360fb6440c61e37023e92b9203b76841dea8bd56b3bdd34f97b6c10cccef7df63c9d180bc637c4b523b95518e003497d450d5a3e9ca2fb34641e08c034f31764c88a3712a8adac1c16f0ad4065af03d685f81d178c5a8e0b018a824fe2576a49e9d542fcb11e57935be47a702b94b3032c30f7574c47c3321a36057b1b2b0571ce4e2309107463794c639b8521a6b8b9034fd7edc97eba873e275a11a6d834ab7acc3d9b7a805c3d162454dfb498b37ed8030df486bab19cb8d34667e57b64ce2dadfed7ed35aaa7d2c8492db3bed6f8389f0219ffff03f5bd04db6b3d98d9c257ab25c1263dbd5e2cfdb296d6cb79b40362a02a3acdc803c1e3eda1b663dabc39f5067c4c16d08d098dd658ea9f212b2c1a296a1cee977203bd654c64b64c7df0cd5ec488df56eefa67074458d9096bd3f3d00d8c34914bf8032f1eb861ce78faecb685236dd8bd79fcffa0b96a38fc0dcb3a29b34795390be40324b5054f00706d3e98cbc958fcec3457751f115b19c76f8198ec19d1c9b5dd2503ac539b751625e4aca6a510c55ec599df3f7ca70034613faaadeb614902a83f6d0317c77cc4d095f0ecc3f76a46b9b6b3973b8c7c6a05dc23b4d1c39765f7478c5d03b966fce88d0a299e863c37d285d8bd39fa7bf8ef40699c38dac6a0490b44452703497a2e94811ffbbb14fd3d6a005512faa7e9810ef148ec20042dbce85fe04eb60385916d9b2b8be448f2b3931962cda9bf98f4bfff641bb8d216fa520e6051aa5f0311a680bb122a2229b8e507795d954e12332bb873400680dcf999adcc91fdfa7e03089084cd14ed259240f01f402072bcf8ead3797b8b5308210e118119e6a56214034ce83cdf43e56f5769fc27d9ddb94afdf666b4fb3273f6ca70da2bfcc916c80803605b8ce461d6780e8b58ae4a80e3465be063338956cee98331096aaca3a8d8700058200300fae0e671d01a87eee2107f157640e884f8ad208188ebf9c2b5f1285646304466fc6f16005820032897e944ea76e60cd2c9f7d3b35d6cee1009c90e3a13fc710dfe563525627058201c55dc06678b52bedccfb3c8caa9ac5df2b31858a0cd0e62d948177853606d97038d911d5e1532e183469e471cc2f3e9b7542fea09ca0cd39f9cd3024778d3d9710369230b70b9998552672394a38007633555f1fe7fbb8c899cf5c08e3e42fcc18700581f02f42c264d47cfde67c2b6c4f9ef430312d6749ff6d6c02631c8a5b516f8b64466fc749e021910010389936c29175f6832bf5d54581028b4c02c66689fc15d582932faef45d01bb4b10334da7c3f640752a5ba5db8221c0ef9e7d22975881860e12b30170b8d544e2d1800582003ef9a9cb167fe3f1a4221c95e75bd88b195ee4d2ec02073b3c88aa831ad96905820f192fd2c5764f2e54bdee9541c639b6613b280356e016d13346df9a4d1b6c13003859740b14d6cb1a1304f51d232f44d36dcae6b2f5554ff54bf2c651dc2e0bc22005820038e3e552dc7e5b2004cc915fcc04a2db72ad8750623ba9ad23eed60bb7d4be04466fc7a6b00582003b245a0a6fb652656f5f2dbc77e489493b002ed0705df5509052e9bddbd46704466fc6ef8035c45109f457e74d471e4eae4afc58f210caff65ca4e398f9798c514ac5df402a0219fdff03977a47aa0bb2a22af17f69f71c6f93823df7bfee05f80a7335a0951f63b8efbf035a049bbcef6c00fcdc94a6fc7857e3d3f4cb852f91e63d4ccb7da71865f0ed21039a9a2604cc2fef710c0fa532da623997970c444f7461fe4f1e9bd89d614f99fb03d3357ba978030c828e7e19ecaafc9c3fbedb23abe78b64daab3ad790197dfb4103a227d231a91cb0e674576993039872a72d55c9f374a64201ddb76e1636f755cc0337ec07ecb3814d33525217ac371cf4c5281efc464c98673e8fbfd687f225cf0f037489a8309b78b710312067a5eb13bf427f1a515ab98093e8717cae286ce856050317eeebd0b815965e8ed736bfe40f4ba13d69b45b28b775acc24544621271b5b2035f9157a9ece138b41d17c385f4edd84675b4af04d69234c92198248a4f38bad6032b8651680707f5c236020a9eac22fbc686bcd2b46ed6415ca5e071e9d9f511560219ffff0318fd4e169b314952fdb2732dc2e08d4ab69a046f4763aa461d6614424e1f0f1503e3b38fabd1ea40d09a408ad1f7a01a9351ba14f75ca38dce7e4ce3959a4c296203c76b9e4e6e178b5bd0e7cd25757a94a43bf88caceb749b4bd13fea8021019474031e0bc8ec22c0f9ae38fd9900fdda8a692045ddfcabb3d2d0a05f84828e37cdb803e87fc1f3d0b142cb6ef2252d1edb6b69c412537417fa5bfeeb0330b361d90be80360729b1127ce7c23f0a0b81f1756ada51fef8bf0b0e6921bf4cf83c24d32c6a80219ffff05581f025eaa92c6bc4c13a5ec45527f0c18ea8932588728769ec7aecfe6d9f32e4207011861031888a83729b8878df9609d2adb394752eece1d2fe37a95a1651cdd85ab623e4c0605581f02bff5eea13eef23bf2ceacb26a664f8f6260451ba342871da499594bf8fb00f0141371bffffffffffffffff05581f02b08a7e962573ff36c9e7dce92fb139051f01d1156c7ab14ed969b64d6a7b0c014101038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605581f029a6cd14df2f8900db7070f71c1a3972155d6c210ead02188b3ef1344c6420f01410f1bffffffffffffffff0219b058031aa4dd85142574ff607d2d33ca52bccd496a4cbdcba236aa5b116b219503eef303c3900c6b944e3e40ce2bafa1ce4e49d60326b5266652e19d2cff9050d9764b940219ffff03c11f6b87ab6bdec14d1bd7ea416672b0967bfd9d7cc0ca06b2be4bb6a5b0647e037853af7229b725a3dcebc6b10939d2b88b2ae2ea86018b2172eebf0295bd63ee03817243efd8c02414a04e47147e9054a8c40261fc318d33ed464c32b712e9275303a489cdd18d6fb1179dc94b827cc1c52197e947f94e7f8684b5159e33741d0ef603f879b6500651244b843872468d923e6054a4d726e700757943c1daaa5e1030e703a794b813bd6bda97e4cb0deb1daa613ef9dba79618ecc4ec5ec056b049ae62d103419dc52210e050ca33ba532092f0f6ab5b809fea186218e78fa0192e8d3dbe3603630751b0915e1cbc7b421a7e3dc89ec873f864e9c153b731106005b2da6429aa0219ffff032fb1236fc3fb616f17911446dc929867d588399bae68f110f90e73b11f7dc56a03767538e10a58a90e77bb1eb079f29b8ba02404c4aaf843ae586a2c2442ca93a203fceaec96ade98b750c0c220fc12c4351769451796d99a7b571297166bbf9d0d103d2fae0ea2dc0fe96ba023e27462c964a65e11117c731f5673c876bb35787a718033f01092bb961d2600a9e0dd09e1f306d1a6f3294727c36e00a0d1ac77830ad230390d87a54259444140f6756c0116bafe41346e1e3604c854e21fdeec80f38e83d03821e2556a290c86405f8160a2d662042a431ba456b9db265c79bb837c04be5f005581f024294dd0bfad345bb4500ad4c75f88611161553966dee6f0ff64162ec11240f0141371bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f02d9f5ec18a0a37dcb2e62c211f7ae60e7863905950cf2edb9225a7da0afa00f01410f1bffffffffffffffff03ca2c6c85dab3c023cac59c1690dd7a2f36a4eb5dd5bd56bb5f9290a26428be3c05581f02f2cafb1f7f5f6f82dd919c34862cbeea94a1b8a75404a90678762e7306ad0c0141dc0219802503ad9cbc37001b465c02c41cc09405f08b47381cd98b406c0952a99a7544c7fe5b03dcb1c70f944220adc244cb70456f8342c6443f43d79de2d34e673672f2402848039dc8b43ae40303572f7b2ca2657c2e71c1cf80d9dd8be3dad15c7b1733d4105c03ca68113bc45102cbbacbd323b2480a6a4485fbf024c88b22b9efa88045450a84032e13388d36445c918e86eefb9a2f1a337c836e16a062cddf5cd802069c2e85570387aa0bcca053681c468f72b8039dea6054da83a131c5408e3f69396225021e5d034f689dadef2e6215b1ecf6f0a16b0aa0481abf0de7bf9b1d1f996f84e1652820039bc7dc6a1b3e5d65be7cf141e7e175fd38793fd2e3366f3cf09aba25eb55d0210314019718f3ab543fd0febe2ab32c9e02df10f0b4d659db766f9d90880181fdb603cbf4689e336960cb179c1996b9820ccefd8ad562b4b209b57a199cf1040a754e0352b409dd42247a77589f952910fc0b4c1f338cd9fb7e6057a99d9a8a537e879b03230b5c083f46d4b67ef6046e616abf62971138afa72fa0df018bc3a0eba6dc9d03d2afecdab4ec42cc782ab31e83314f083b4c7daf5a1c5b1c8d1b0687a1e843f203e541a398405d5b330da5a0bde4dc18f2a693b754b1fe19b96340b9aff367bed00219ffff0317deb1b0d996c4ca031ad58e6fac6e1ca8db81057bfd050daa809ad35197f9df0338f327440bf8c3bed2bb2db0c4adb6116509349c3c5295ad92528986b2f108e80396b268cba198c8d9d5ef215f83d62e741c544530f506b658a1de9c99477bc69b033a05bb292df78d5e2daaf856237172d5d95c0b5ad1025b902a9a2eb98f2a94170356079bdadaf146156f4f71972b5e34494c157c9e3eea990049e656f05cb16bf403eccd3154c4deca5f454571a6331aa3c0809c777ec4bd25d01f5f1676bb803778030c425dc814bedd602510b783909b25fc09ca897c6e3145d08ae9ab645ac9f5c103e85b2e281f63150aa68643d8c8979be153370b34313faa673a9233e3ea3091950366b16e2e95ea57e88f7730e7c2a54540015628bdeb86a62a875e0e66d445a395034cdfd7031a37f4393f3d71b7f734de4da8f9d49df38c9f133116efd20fd1989d033ea9af15e0e5963f59b2b6c901c54efa0709486ab1c99dbd2062d07d8b9e760c0605581f02055688db66419a9d9eb33a5320f6ab8aed5d17654ec3d611f9a87169e4b80f01410f1bffffffffffffffff038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605581f0287fd1e56abc90a1080f55e6736d3a609a9e26f1361a8a8394477c74c309f0f01410f1bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f02d00cc648fc557a3da3df8249c45a980710e394bde99cae497f6c2697be610f01410f1bffffffffffffffff02182a030994bc52a814beafb9da346835de18eaf5da1130d0ab1a9a36b941649ad7709603af57cdbb17105bba99167977c7433fcbe57a314ad38445d53d7b6c6cadf941ad031526871b716e0e245339390e1fe02cab62f39a818d36348212e14d5d44d7bc4a0340f6bd22a7becb210eaf74985f94282860dedd23228d0cdfe8decec614819a9603d3e4770e05bede5ee9755c274da7065ceb8c5140b7bc885a2618707ebf6d0bca03150ecb44a9f3df8018bd6b80f127d0b73ffc048d762899ca5f3e26b30c208bc603cd691a8652fbe4d1bd4cdc9f0981700c0bfa696e2d94b3301b73dbb8f147ba8e037e12850676e6ca718c41fcd699b46341fea946cade0f6aae56e33a1c493c511f03edd296b531f9932ba7cca82024dcd6c056ff10dfda4f0faf24ed13a1daed7326031f059fbcd825a0dc1ab05e14e7a6b5a27ab97e762d2b9221795431947ef7798403dd496b5ea662efa7086f5e375c4657790f115fdbc5e4b3a936153c04602efb060219ffff03c7ed56af249c7f494c8b98bb248d871aa26b1ad05fca3bcbacc68d5f7c94e7dd03de719306bf52dc44b58840f38f0bb7952c184f8fc65826297428199959969aa3032586d3b948147b4d97ef21b81eaa8b276be485344f2a618a574b835e65e870bd0300b62715af450f0bd6cad7aec81a5c8c6392500d544320732eeca03227cf55670219ffff03d542d93997cd1b4102a18545cb82223fd86c7060688ab014ba70beaad364e21e03b220830ef967e0cf5a08b7935ec9616ed276d1225b098c27164831ab1488730503cf13bd70035986192662b129084383e55cb97aee3eab54feba29747aada6ee540340811868e981918ba922b918c57d43608cb4a32e16d763467879ba465cadfb7203b5c60f8e54b092c97c174773686135f512655ec3a03e74b1688a8c270ff2b4ab0337a1ebb44f3c2af6674ed677bc1d79017b16c43028e823f73dd758ed07640e9e0330fc0e76b7dc3cbdc0c074cc7c524d29fc9ff1929f6198fa2d62aea666f2987e0339f1ebdacc4e3153497bed6394113885c64d9ca1ed001857fb779dc02ddd29da03e75e07aaa93560b4df4ad97fdf26c554fb2015bcf9b3fa4709442e890af8cdff03bac6043ecc53d04f094fedc8e3fd3fbf00deb1cd520b3cf01cc9af4509d4e65003c57d525389793b0763edd028aac79dfa330b89baf32188508a488ac87cc69a7c03c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4700369434b0ca6b85c6f1c283bfe520466ad1d64a1fb2f23fd2ea628621ee523685a05581f03b84f59a0a2607079e0a6593738ca1721980a0529cff18e45fbc86d12db9007021bffffffffffffffff05581f037b7ae81a58eb98d9c78de4a1fd7fd9535fc953ed2be602daaa41767312a008447e7bf4a5037faa259bf2a641979ed5e1c8db6d8c2e02a5177d3f8df9cc82608254a955bd700301a85cc670849ae645777fae613a730e92ebb60364f4d0a4d90a78926cf28c2705581f03f111576b05ab879c2ea36c36096ec42b004e5374e65393895bad9e29a5d00f01430187221bffffffffffffffff021930200314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f024f72c8fa487359ee35f1173d8e60a71dd9f9e40660db20f926b9c01a23710f01410f1bffffffffffffffff038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605581f0272fa54a607bade40573d7618211f91b000ce00543806714d1fa0214f50340f01410f1bffffffffffffffff0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f02277f11094fa7a01bfc823b6825137130ddbac38c18807c176a24b0f30b880f01410f1bffffffffffffffff02199011033d3cc42e15ce0729c50bc1e15589088d72aace34b49384db2824bd577ca0843f03398d75123e1752d930edebfd15d7393f9f40239bcdc831ab98a195cca3e860dc03517d846357e4061c1dbf7f6d9698a4f8a937e504a474560f613b17ed4fff0f5b0332e1e6224e431a977d881bae18c1f104f789a86b7e3e91cb1812d2226313722a03d59cb0db2d962bc867bdeb6338cf22c152b9bc422aff578112d6bcb82e450fdd0324766dd4f5098bb08c679073323307800cc914233ab3c59a9b6ebac1e107c8eb03cf348344b4c1e5197cb4f657f64fab33825fc4eb94f7e2c0eda0beec975e32360219ffff0381a68a7ea301d29d7169207a1892889e3e91eee261a31b1b664f7b9186ff5eb50330956527d3557e8564b410da13a08f36ab8504a28ddc90d237f679752b8e019a03e45ed053a4ccbb3120142502fbec72aaaddc805cc975282fc89ab8e1efe5ef9003a9dd7dc25272fb1a98fdd0067354a82cffc74f3ed5e249024c9edc007e979eaf03e3cb18de4042b8d5795863d63b74c10e2ed7e59c6a8357624fb8b5c3f80eafff03944c21c361842df5cc658e7711436a2a36a044212d5a6ca45beae7747bcdd04b03224e8e09b433faa9207acdd2e2bd1205eedd7754aaad21c45f7f55e2117d88b50367adcff16cf5181d90b8dc5eac547559b7ffc40613613ef8b57ab70c480a53df036079075bdea4217bd65690a563cb70299f01ac7cce28b65bdb4dbae4f667544f03259059435b9fb792c2f3b7e8df98cc7ecdb5e3776c483cb6b1186f9f6ce6d6e003486756c981a21f8f078684a2bf784f1c27f3bd453b37e28e01d3b1e6054f6aba032464008a8d4a93612d94d5852ee45c4441e810d7ed5ae7ed4851d5af918c0c820219ffff03972de6dcfc55ba569c8f7007f0645d667c9e2da3e523b760d2347d4414198eba03143590b1e6a3aa4e7faae75d42edb9f900d910670fc9243c1249e32d89729ae2034818a5ba8de0757fb9406903b91fffeea0ed9cb7bf7c43f330025c4e47696f7b038b80cbc516b44974ed2f21094afc9e78e589830cb813bdba868ebb702f684cf30304e7bd50a934e65ae83b9d08cfb194996d631a6b2b1fba9f0a39230baaacdbf80336e0b6afa700958f16b2a5b3433f8821f2973695fbd973f8d7bf48b4db5930ea031f1995f029fdf4c873cc2161732d9f471c4ddd33798e688600d37b29d7a0675d037e1e8376fccb980a49a3187c611ad55ce61cbc81ddf45433bae7ccfe30648c5503d75a7b2712cd3f434aea5e2c94b583db02169916edd2048d667ce7391c5fc08503203ed03b5eda5c5c1b2e697b3b2aef343b8b122e4096934120f7d4d74249b18a032db4f293a907b66f2615f54e92dd71792d7f19de55976f04f392b502c595b43f03dac7d0f2c59f67978bc2889620106b6b92f2a8442aabd66d48d6984e3eadb3920372ccf3db83aa51e6a79df55ce2de4c1743cc73f2fe314033fd6c59fe969c699403ccd8db2b9f16ca96741bfd552d2dc02a47d80a56714ca0a0447600c418f4da1e03e122e316e8a62f1e6f2256b5c395c02afdf7b7a3aa1617ca2e3cb24125423868030981e1ec90cd8cd0b838fa96fc0f6f3a4acaca31a695c8bc04285d683be3bf220366231e88154e21867851c2438c0cd0df6e8114d30b74c8394b650faa2aaa79d103a98a34674be96525da452df47f90f8b54e40c4a3132e31cc3d9d25f0d53a1078039539add51191aa0c2bf485671736b9da35f0af5407eef63e668b704c0962dfea03d1e85cbb616a53971bdcb9388459c4d1d3ac05a8de7c2202fcc4dd26c661e0ac03add7a81c8d33bb4515c02299d213bc6637662526f5703602186f67529598271203670e44ace839e05f5b6a6c6a6207831bde9ac3538f187211080dd73090f7eff90344e1c8b279d6bfb1ea4dcfd32ceee853aa334ae788cfec137d61bbbedc83d0d10342ebfb4fb9be1f143acb38aa849cb7d7bd5733dccd2cb662cbc6f871a4fc876f03bbd0a3626d9004c440149116eaf1d6fbbfdb55818844a4a948c4f590d7b90b90030996ddc8dc17908e15f2669de950681ec9995ce51dc984d2ab265d254b5a992e03d4b816b4d987e9397f0f80619e7c0135ad1c8a4112a928ca19058c8875e63de603af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f02f824d498d6024f6d9d12a7ca027ec854e4a6c2fdac38f5c2e58052816aaf0f01410f1bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f02a0f60f9c06090e8b15380eb20a02b79fab7b4e9d35da94472e306305384f0f01410f1bffffffffffffffff035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f979205581f02cf2130b73c8a1862766ce513f7296f47a5acf53eaaf8df080f2edeabad4707011bffffffffffffffff05581f027c75c2ba111abb0bd613209e7046a9483b138794634de259bed1bd5bc6640c0141be033ea8e3ed9c46e428e013bb19ef937682c554ea8191b1920fd6a9de9fd24c8fa90605581f027709f4717243bd954b54513b200103269a44bd1c9ab502f18022bf1f51a20f01410f1bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f0278b6c0c9956e935367da98f01603e12889cdc215b2ef54a9b7030e8674130f01410f1bffffffffffffffff02192a3803ec200d17400a052b715ae938f66966062da649116b03145407897addba6605b0034eb244e6b6356cec857b0b0011193c7ae25f460a6d3b9182bad3b4962598217803d6bcab97aeea4f65d112b522085f3a7fddf1d2fb0c809438eea51177597f752b0219ffff03dd5c42de1c80e54a8f3e2faf7c60cdf949e46927c0cd020d3b7f575f909fcafa031b4e3d0c242a2571ed32cc4941f478071409864d8664d26e969aa7c5fe11361b0219ffff03308c14e1675a9e60b54a4654203f820f7412bed4d6cdc7074d7325109e99ff290348ef289ea0a478f41a4d0b879cb91e373d8207751e17cd31684683e0acf5217503f847778380d1b19573a5267f38b388ed8883e496126c2f0a153e8a6ea15fec3e03ed09148fbe306afb7ce4f14939c8e647ecb9a155073abea201f7b212b27ec76b037459273015d507196fd06e877c6def5f6b0b5d50d8f720a599cbfce8b1f2842303ce66dbbe2fd3d9eede95aaa7b15ba7c393af206ea786fc69bdf794e910843d74036f8500ec99ba2a9d3d5ba90b77f0220c0cc2b7455e318dbdc498c06a2071facb033866760a5050f3603d08b49203ca80f8321a8d790ae7a2df377fd998913126e7039f9bceba89f526cbad6fb7d1dc31203d0a3e252c0529e14420ceb13c5f50e45403fa8cebf1b4458f6fb924b1bee46e82662084be7a70903acee1b476e30a2d60fa037a80579248836dc2db30c4aec9d92897d8f74d288179e80d4435072d280da6ec03aea53aa1c6d0e3765f48d447ed2794efb13e881543630e30ed56ba3a2edc33ea03e7b7a6657d80e93097acbbd99cc2b43ad926ef1b387b91c1158f8648a601893d03cb216f20fdd739f115d4dd4a16026a889a7e6cb9d574845aea22076db4c0c76b035dfd63f2f6f8a52f13b589910008b7d70c0a0b8cfce369a3d1818f44b63a470b03e66c1c1b1790e9ba98f101a6cb1a7f4c51fe87ccac2c6a6d9b582b564601132803e6d59f6ed7db047cd482b9d74209cb098b63dcf69c09c7d7632596e1db93305b033ae36a82b19ccdae4c811a015988f5b28765f54ea0edb0a3ab767b2f1a47fedd033a6ca0f2fdba9798ec7350fb5106f9dd4102ec04a5cbd39ec60cd921c3d7af060605581f0236f2fb522f166076a6f48b96b1882c6fec99cd6054ac623ab77d1df51c3d0f01410f1bffffffffffffffff05581f02ea254d477835bc4a185e26a5a9e3e85a123945f880ef770c75968f4356820c014101037bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99034b49abab66e9f8b3a664e41b7607a466e1b7ef684e2ff6e0df7624d6248e0b1605581f02809d29d5fa52376d48e2baf1b114ca8212156b4732e8a0d5d338ea50f9cc0f014203e81bffffffffffffffff033ea9af15e0e5963f59b2b6c901c54efa0709486ab1c99dbd2062d07d8b9e760c0605581f025b555a2abd6a3bbfd032b5fe621d81aebc7ed569980c7615a08b738adc440f01410f1bffffffffffffffff0219021b03b08b069529cbf3071f9750c9b1b55d604f24428e47ce2b71935056a7053cc0380219ffff033c5335287de924b4817df683b3436480a0a48d654ea557307a735fcd2bbb05d4038dac8b0dfb35f010afb5e6e13ee48a4f43b79356fa5c5fd476978a6b35e529650359d65b9384f4c122f0f31fd77307ce203d32c08cc3ac2acc81228f74d20671730341ecc0d63bf0a4290b91b0ccfd3771a7dc338fa3c33eee054fdbe8efea06b45003e151c29437478437f22011109e23c957e41531de1cc5301bb38cdf8d1a09d8c003df0a363b294345642072527af68a1693df773878252d2062b810fe69af5567300367bf9d766916002b50179e79d7b5085f5aa47471bc8b9bd2bf4a0a2233e8ca38032141f6797ef4b23a82ccfa4af17d27633a96ada1b1cc7831e6806045dc01658903a73cb8ece25e950072c7313f780320f5e333f2c61f70a7fd3197ba8e13cb97e703b7492ad63f207379fbd7b5ee1f0e4793b565a49239d776110fbe119ceb7fcb6b05581f02d2d1cbdcced3766988ef3da880a367c659da7dba0a0e1cda134bd43b35820c0141a003db94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab0605581f02929c7eedcc39301c8ebe25507415c2d7cddb5a5fe73f6a1756c4364209650f0141821bffffffffffffffff038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605581f027ef87378b51d14b64bb179013a923272349ad52c434111a421eb21a7c0d10f01410f1bffffffffffffffff037b2ab94bb7d45041581aa3757ae020084674ccad6f75dc3750eb2ea8a92c4e9a0605581f024bc4a20d6eededc5c764af91cb9f36ef875f7520d0e03546855f66de8e030f01410f1bffffffffffffffff02190348035afeaa30793dd03236e28245b9f262aad2fc5da7b08f8b78d04fdecd715131e303914ac5e8e4665ac67a366ca1bf717d11a31a8022d1061dc11111ac615e5be1ca034b3c1f1a9c87c4d85a632d72511974e60d63c43760b27e0393b735657820f56c03163be67f29c3f05ad1c577f325ce28b11b8be6dd57ab5d8e4fa246469d52ca1803b5d220c6db4be4b64edfd1a9c38d36057097bca620525c47a109d13d1d5191e603ccb7ceb6b5941d3070a64dfccb1bfb23ed9744288c7b9aaa4f5e8c2c6a6fe861030352ad3fe53602e53737737bb66ad60106e574911cea43a7bc27dcee4461e96a0330242e99a12568170a4d05b26718a9716cbeba286b26fb4b3cf0e6a70fa56f8e03f4f44bf85a5ff5d306f5583f75bd3a838b97f10b30e00d48c32dc141f7695b2503c7cadabbafd0f9f6c76433eaf2e7966a17cb16ddf045d89b2e0f1005657ae53f0219ffff0331a2f956d1a207e9f31f84d6479a7e9baf0facacb1e6a7da43920c0a0379aaf603b9d3e2befe8ea6ae599c81f40f3fb1cb0618ad6f97bd0f0f0404017517f781e00376b2e81e68b2b1824c1ad745933e9d7fd6e84d5e541cb3a366072933108a4b7103ec04e59d8a2135678ad26a9105d43a2ff056fcc59630030aed6478ed1577248103bc7ad8a7e74157b2e77ce0011df02ce1cf0078eaca5b0ddec5092a240f879bef0387e1ee2da0ccbdd800794ac10df8eef787a1590c2142d43333d0689cb03fd0a5033ff23471dc8364a1f0cc1bc75cbb752c49b58edbd38b8b45406628a07808d21803eb5618342d48d74db41f4bf68b863255de4f655bda4fd8c7f6cf6dc089459bbe038a54ab958f02235ef4a5147a9e855ae3b71d8f09103353ff24b79ef82e3d69e1031f3a91af7946f805e6f875eef391474a0801e0aeeab7291c9773c1375ff2005603ba9bd2716de363ac5977da2fd9698275315d1aa903ad6dc0d87b429d92f44ec70388070142902e23d53f479c346515d06c997138489fc79c65f5c8e1ae59d59d41030e42f78d0d63c78a52c532aa154f128a81f4f5a56d7a19476aff392bb68262820359282a18f4c6cf27f34e659d2d6172f001c7eb4dc5ba2e6c7a718f2b7e4b29d803abae5aea1e5c24117060d90c784eb04a55acee5b1523fadaf778fea5343da32b032a6d16945c884891da4a6191a0ebf2cb031b510590e1d528e66b3f813acbe6ca0355d66bdeff2cb502da8913e7b1d569a19f9bcb15a60856ebd3c7a864d524eb0c05581f02b07ead0641f0054239f29de9399178b838700d705d0fd721a06c3fff76230c01430186a005581f0260f84989c6287b9d2ea84c6484efa644526946221233a35fb672cd270edf0c01410105581f02bb13b2d5e4ab5b3316dc7f1d2d5de119b84acc2bc7d98435a5455b4ce4090c014201180219210203d12726acc8d20f966b5c6a9f78c09bd6fdab3c51941c7021ec0c49e9a1d4b8f2039a6b121017f066feaa7ffd4a808c6304d5dccc4dbd3a50cfaf51e700bbb01dac034f927a31dedaf42bb4f0ae46168dac59c0738f7268fb7fc9be9af4e91401cab003c338f7cb2a047dfe7085b8df7074033f9585d793f605d58c0408fc1f5c0b3f590219ffff0353559771104caf21c434c77197de27c3363587a5e7749090957dc3d51a9fccde0219ffff0312d2dffc17d367d19500da17148e53bb659bfbe7aac2c7343899ee363508646a031d176a871c8f3b02856a37c31882fea26dd5f674c55407e73855c6cccba51bc50385defc87c149a06ee98498efb7bce13a6b46882a24bd58721992b81223e09080038380ff237bcdcc3059576dcff752edf7cc1da4bdd20fefb42b8ebf93d7f1af8e0375f14db699dabaef8930395ba8026fc159c317b7c4b2a25dcf62c43c8a39fb0b031578a6c961e760e1d90ef0c58240e8654126c31ee2f109a55a11925f2308cf3f034758d1697ebee0c2d86756ffc58f1399dd81ce2d0b6f6e7fb0c59f30c4c7d51f03efb2c9a25d746a62334db6c3a862cb5a7163d86659732e0910d471ad680c1c82032e47bef25e450aa74bf64723c0a481ecdff9c1b07cc049c61270e07216cdc6b7036e4713b2503d0e96762c77c2cf31929ad1ca435b89edd4c4e382d6fe49b82a7103d30fac2db1924e4650ad16892c01b091d9027a1ffb56e10002cf74c68667eaf503b419403bbea6a881c3b7662bde3fc9fe242d21c13d48a1b36a71ee7b28faad9503bf22452df7ecd7eb60e67101805e9e395c60796bd253f9392b7b3128299243cd036f97757c5eb06b3e2e5e43bb582dde614f709f0df26b306e3085a58ac79e5c3e03dfdb5247841a2b24d43e55127cc7403170f27863f809f29899e38d033b9b5ec103f88a6ff2abcf4855c1c9486382d1d35c66f26029e7ae2efb9a27812092a9d1450304e9f1a2a6dc477cab768fe3dece655982d6ace388cd6644cdaacacdcdca2c4c031b79315ccfb78d9f0c86fb543dea7071d7e0909db1fd2ab46429440b3ceb2581035a1f1038c05bdce853c9efa842a0b00f59e11059d77d02e02dffbc333bf0e9dd036e778058b15511bffca4fa0e296fc9e55bdcaf7ae2e5b18709c3050961eccda903c8eb2adcef5e1cc31b56214142194d635a8e05faf753fcf83281e56aea7fc86c037ad28d7b0f9ed316ff78de66172d6f57b50f012ce9080024879dc0cf0637134e03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f028e510cfb4a9d05c57e729de6d2e8a568650b215166a230f32c82d9d42f800f01410f1bffffffffffffffff0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f02a263ca3e1a2f110d4f27e34304f2fe292b8dab9775915e78224e50eefcb40f01410f1bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f02cc2ce3000ce22c48362d1a3bb51f6533147f73544e86606d9e37ff4787f50f01410f1bffffffffffffffff037bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99034b49abab66e9f8b3a664e41b7607a466e1b7ef684e2ff6e0df7624d6248e0b1605581f020739f75f47afd1b39d06d7ec24e816560c18d332a54e5892acb73dd5c8460f014203e81bffffffffffffffff0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f026b24f56255a90313856c01d87ad44e5f093177bd1066ab274eb9ee295b980f01410f1bffffffffffffffff037b2ab94bb7d45041581aa3757ae020084674ccad6f75dc3750eb2ea8a92c4e9a0605581f02ded19b8a377eb8f2a8291bba5581b81f884b31913da0d6804365e9a3ba4f0f01410f1bffffffffffffffff0355135b8799f1011b06137bd95a6c201480cefd8597510caca6be59982db9888501410403189f964df196bf60b3d2af5a40c66d974235ea8bf7ff4904c77a5c61ae47791c02194772035041bbf56155b0d40c7e14a16bab81c65e482d60ef720829ec733d7d565d3ec90381f3bedb7856c8405d5d0b7b7cc9907952f04783e720357f8ed396263c2c7cf60219ffff03b65de1af1e763e6105c418caf3bf6292d3c048830d535a15b2b4af7895bd0d3903720d3ac1e4d6a77accf689e816f87e262c4aa21f0b2863118ae1e2dac7442a7c03a9944f02038341ef023657efd340ef3402432a31b494889dd2365f78c6199b6f034c1a870a56625d37ab20217660cc1c4c5fcafea6147965e29612ebe8ee83986d035a8eab3f8ffd4286ccb09d6e92d7a833667e03c7994c4be4a12de3ac449c381503995e79adedccd9fe3633b3ad70a7ace2c5ae88ecca1ac3dd9a654b540c8563340219ffff032a2015123ac98ad6c26884f2363d913750529a191e3baf63e9343c0efbc9e73b034d52588fb9c4fd49adfa3cb029d0668d5c237bcb3476812fcb667ce8dd01ee0e0356ee939bb71bdbb7b3b3c49e13e39a80e6257e0ab48b7a215f072754eb1337d203ebf0db4b587df4b5d83d338500c1a7bdf97773f390dd74583b6110b7a5f8a24b0558200364f0477e5361cf629b2b2bf7cacff6e4ff8db28763023c25966ad427b8b0600841a00389eed755563a3553bc1ca0a4d021092f826284e6e59ae7205dc7a5fba88acd1703db13659b9e8d020f37be5d33929bae7c2d7b85873b6fc6369c4e86e82e6e98e503de564abed6df3f0ed661a9f0bc4dc76b5d227cc49724f26c9a2399439cf26a8203961d59b9d57d9cd575aefdc478790f894a677ebc041d2aed6bb6aa4719a5bd9403030b4570fb1d09539b7ed13b4c5ef4fc1cdbda7abc72ef542b51034b390e1a5d0346c4ce706d44fe3c2f19cc2fd019393842a40183fa0b763bb55edd8c3ff903ae0399d3349028c59d2abf87473296cd8102a042e6ad0b4c9e9e1b3208d31cf8347f036363085448a9bdb3b9ef17280923ee84b2632a38f42c788ed1a4a76deeebc2a303af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605581f036dc692891c6e6e4d2887fb6ea4586d29c77cb15d1be6592a39f7edf86fe00f01410f1bffffffffffffffff0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f033a25f197a7aa10e00c912c0f4df407a0bf128ba9bb3c73cc6a32973a84200f01410f1bffffffffffffffff0219200103e942ef56b702f278b97acd9c149e45cb42569ff4c00fd60f646d6f9d127169950306f5be2651e5dfb0ae05aca14a79caed14988c3a79dd53f4cb44eb9e72a0713003a58b85187bb13f62ae343b2bb1885857937c5b9c2345d7787450b015575c83ef0605581f02e8cf8e1d041c637a3d054777bddbbe90de8d93789440b08309636e8086ea07011bffffffffffffffff05581f02af14d324abf428b4272abe8288f28888899355f0a057664dbe510d3115bb0c0141640314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f021ec6bb5ebe419ddb81a318968680bc01ce609fca20c8df9058d25ba3bf830f01410f1bffffffffffffffff038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605581f02002f14f8a1a6a29c6aac366b22ca29058ef948ea76b91890435d9f8e47f40f01410f1bffffffffffffffff0219652b03398ecac3b0ec2e5bcce0199541558832fe33246ea9872d3d39bf5a34371dd2e703933fd9aff26c2bccb4e553bb85995f0170e9fdae51b7f590433be8e6f4a49acd03821ff28bc441b5978685d0230499b7e8492cbfa78f96ece5daec117e50da53de0219ffff03dda58ff4ca76bd6c30019abc47a5a56ea397fade96fb2d9b1d7612bd340fe0ee037178e30a1eaae0399303fe4ce7a5ae74f67020ae7093df8ed951c6561a7dc3c903e613b744528bd949c54649727a476a00637b42857a231e63d6881d81096411f605581f02a23f37fb367ba3010e0f1c656fff8848e81545a3fec7229e7aea140303530c0141a005581f0291fa30bc6287a538c74ec339a2028f1dd9e282a3bc8aaf7ad2226bcff7aa0c01410103c927e65e12e139f497b9a27b2718b5a3a488a5ad59442d689742d67806a4733d0605581f0237fac869e6cefed5f37075168bb3060e152f780fcbd8117ec2292b0d685b0f0141221bffffffffffffffff0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605581f02645a1ef8fceac3cc53f2a6a9497a45866bb2723dd6db55042895d95f4d680f01410f1bffffffffffffffff05581f023e6c48bf4bcf10fed52a414fe897ee9d44f5deaccca592be268313f70b940c0241010219a0c803034b557d0c5446d400a259204938b4bce06c1eecbe38301806c7f94a49064c3f034fb21aa0001233c512430c5b01f387d12b76e63f5277d81f98164797d5eefa6f03bb1c457d2a47aedbf4a84cd972ac7254a5cc043ed6e33a74434a67188ee6db4d031473db5e88f5053f419a009a5c0970bd668ca95c67b274f6ba28723c7f2bd86603bb405184e0b740576283e5f108b59e9e9035c51c4f4ce3f014ad2445127b3c700392fc6edafd5ee4f91a0994d5e724a99e0532f58b9e5dd3b88581d5b30988284d036c27f12b16ca81ae1dfb7671b3c4d2bed4dcfbbb1ac6819476072712f703c586037b3c2f1fb06d8945bd24e3cc3d126cf2f080cd6a08d27501976ca06fdaf6b84f0344403e8d7fe628450517730c83825800b7643c35022dd7cda9e07085472f42cd03a28c5b5d378abd43b9eb40fddd78098885cb07a014f16ccd0129af59edbca89803cb780028bc061ef5956507af00177b0f9bd82edf661a9a29968050d0313ed73503f8431657de1bdcfa12cae2d46f4f0d3d7dfe39bfaa6b9dcaf52119aeeb3dbd11031f1ad1c118433502f52103ffdf772b004e2692e0df67b854aa39b429a50db7f503d4b90f6250d8900d8cffbdff2e13ed573d80778a3b078305a648144f7906cb0b03e4fc428eb88773c3c38c35b2a883411500c371ed5e1f5789f327c5dd58e676100219ffff037e2a419691ef839973dce968af177cc940a0066beef2138a8ad8a7ed3cc9ad160378884c208aa1a3ebb26d44bf922ae5d882ce2823ecf76fb772c5a7d962c623980353874ea0adf1245b6f08e1bdb01fbcc2eb3649c466a17bbf05b0a70ef5a265f2030fcdaa2c92834401d68b3dd4e1d4a58d10b8ce2eb545f0f3ef9d17f33118262c03b34804f84557ef4a831b0c6e5d68dd61ac03a777ca577695cd84d82d274109d103cf40ffafef433c00d2b4335f3a35f089f2082764b5b3900141efd0c16431766b014104033e3cb8024bdcfd812c51515adaeea2721ae01ad9d79a9feef9bb5be9c94485590371ca3b2ea6b57e9b9d03bec95dae1335a844d40f4be56c6e726871b79a18cbbb035555c1db4c94dc9e56784638ab0fc19c2792b832f9b4d706023095098a52330403dcbba95714d655f9465a394d108c72b8f8434a0754296bbf1849e4ea47ea4d390352ee52112873ce1951048ce8c27a86b5c5df731ef7be705228b1e5d37396be6a038bd6fe8db56273eb3ea8799c2fb9b88d1438a22a15b7031636f7efe5e53898cc038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605581f023c490bd4cf9aeaa6b56e20fcc885551df6cace0dcfad0ff91c2e34bcc9d90f01410f1bffffffffffffffff03396daaf3a7871f857cc9b5878c6bb66c394a6d109706095617db9f4e4c22edcd0605581f027f24da0462fddf8035e370967cc5715af20b92ca17accb661d59d99365ab07011bffffffffffffffff05581f02549c3e941d27f840e824f23eac3ad29c35b36a2e299ab772c24ab3c942000c0141be03537da40c3396f0f76b6b96eda0a54428f846c54f3583ba33dea966af22589811021982500358122c8619d7af9a1a7d40c6b0d5c38193d0214f766646b0643cf2576b1ec46203f3edabad7ceda5b681f785488771b00d5ac59a22d95e784d581ca3a4430b26c003dbaf1e1b8f2f5a9b26142c1fbe2469a553864731aa19ff55d3caeef5b14c2b3c034bf5288babb7ba7440dfaefc085b1933088d5260b434358cf119ef8bdc064d9c0356fa76f285e0f5f9666b4b4e9c16a9c121816fdaf7894818446732a4058a68850219ffff036e8d5dfdb3e390a1d844349e5684e803f46b4785ed3a8d6cb10f99996c7da603037e321129cb17d0f991b4ada7d5e06f9fd8f332fdc733c0b246e7bf2d5dab709d037928c30de61f0fa0fdf910ab8f2ddee18c4c7bdeae1c4be8512263f85f0960200367cd069f9feddabedeb79c02785bd1b0047dce46fa5758f87497e9781bba6db303ad1a5a107f8f3434cc4b0bbf60589e175c0db13052c3ba3815b3150df37a05bf03142901fd6cf06f5bb1b2eccae660a5a10aee7ad1f2f5a3b5026e1be348c6bf8903209dbb7be0b429ad59b6943766b4fba331eb0e4100fa6fe162eb0fd4cc15d93a03c21474ae6d13c9fa44112b28715f7bde1ac958f59d28b1da5db6dd18b1f5030d0219ffff03ab53603b0ceffd4d778f39bb106ab83c9ef84adeddbb49a04f6371e2a7e35f8003d52152602d4fd230d4ffb444e8e2e670ef88c24d6a761f654fd47fb262ecce9f03c79ee58331ca9bceff2ccb74c569bc748a36083f8168fc2312ce1ba55957620603626cb2e493e8f2b14c930f54abe3c224de127f09cbe6a2a084cc38ceb2fbd54b039cfd4b8b0336694ec6e03f691adfb84f175df74111f6ecb4435b84d7ed5b40a5030fcb5157cab4207cee4f911457a1754c166b381b417c32450348225299e17485031eb0eeb2e896d7d4e4ba31cc5d4ba5ba0b3e38250881dddbbecf87f891ff6a24033a6049d5cabc4aecf27b92a8591131d09ca32ecb6fd5442fb98518f7eb47353103e6e26f07c8bb1e32f4713a457ed621da41c0f465455d6055cdf513b14513d3e303e0774a28fb886d27828d1f840dad5c5a7adc128b147720a730c71c8ebe9dc45d0381a1e26122c36323fe608a510edefad503826aeef13d987ec61fe69e29fe2b5c031700cac5ea8ae51dbc16ee1aa5c5496142f3ad4898c348f524f2e3bdb098b7ca035b991e7a0a70a144af68e19b2d996eccb758cc912646c7ea399e301544ba3f320356835b3f5ccfffc889000474e115030fb1918797a1e3d4e4d1a0190debb63f2e030e6b6a4c5523c0c5df05f6492932b2fc2366f438583bd16d074d05c67cc6d06f0605581f020ab296c085f02ac0b185029189dad9ddf72c501ed6fe898d2621a78ad7d00f014201181bffffffffffffffff021103780897a0385580b6e49824639ca5acdb29c22e5ba3a03c12a0cff10dc34c8a8e03088f562db7c415c2a550b1b1bdb911181b9fa2e1bf6b356c8c7ab827e734887003a927518d62d273394bfd80ff77c7e678075f1b518ad6f54c320f5c8f4d298aa805582003131995c08ace28e43b6310c27ce9138497d094067bdee1cc531684285c9fd00c01410103cc5ecf93539284997929e8bcc20e07ea81cb4831e9df1c94705d78c2677a859d03b68035c54a7f544681c4a42d1a0f5ce37913bc131c9fb3038f75ce5cbdf254bc035d5d2e0652612d54a7bd732b4a57ee1a0ec7b5b3a5346b7e3854a1cdde31a1e803125be79e729c2a8e72fc8313831cb37178b968c40b3724ade191277766cee72103dfb4b778a37e2f1a19b13a68f2bf04b06b0b19f9297913fa4f268f071cbc51d7034fb9e3a4d40adabb1dbb772d1c600cb567445dd5103f71f54d17c22690d21a6b03b57b59f51c1e48717ae2e0cb706619e3ae4adc8de0205d91c512e83f95a50aa603d86b7ebffd838642d7a84d199e863f67c6098689d7f2080429906e7103d1c60103c1b6d3e058f730fb89da062f1177869f6115a31b26ab0dd5243f2500588ceeca03063949e75a03e1183394b7e6190c6e81304b7402495a004d6558c6e41c56770b034e001864e6fc2a5bd94263b280df3d17b9d34578fa8db767ebdbf926d5944b390219ffff0351be34847574aaba667b265455e0800cfe0d4d4d5aff418f5a054a3f6dffa2ae038f92be32e4ec878f003424ff4850f89e2812b0dfb5fd87a31cd86da6f12fe4330219ffff03ba5cb3fac2ad2f040be81149c131f11e339c594b794098d4a38a211d3705f6720323dc15899a762f304e78273109ad918317bb7297e15fda510e8c42b4b13100c303a58a3e4744f10d76c43a4b826bd19c066d9a1744f2f5e4842f0363d4afc3fe90036e9ce472f8f6f715b61656775350902590d5ab00478189856481fcc6b2ab47f803116d789c189b6358f20a8251e6ce6c15eba295ef7c37170bbd7745341745676003292055e128f674777a98ef03654c8176a90187f963b6fc8a7d38b5e9da776c9503f21254e62324f248a522042fe1f2e108824a2cdf0465fc4f67961b06a50069fe03b90201c79c68cde607847203ea5d8017cb009711b7d2f825d69e4f09ab22fb1b036616843104f033926ded3e852ac386c77a803a235026e541af691d98a5c66ca003656c03809234a4a55e418424e39fc491e177a1d19c03c277e89524de469309bd03103de00eaa8aab441ca4b18896a04c29b7ea67886906d033d19808acb0dbaca503cc043922556c2bf67ecc705f57975d0d1510a02893adf89b6ba7f45dd27f6247037cf12d77d283fee6b0114257fc229519ccc273fbdaad7b044d974c97725c70e20349ad755223546db70f2a47273feb5fa0373c8f6d14c2090ef299ce5d4052ff87034169a81721b28e6077315ed333d4984f03bc72b7d9ef94ee537f08ef57e0e49c030087dd6c434536a28d5e78f4f5fc2aaa1e20ae55aa010decb8f43587ec29ce64032977185e0f0cf0295ed628da06ac86a2ba0da3f53bbbf035e499ed5151401c2a03313c43a8d394c74abd537da6f56d3154c33bd57e13a532637a332b81463d5e65039c0e711b8bf6d5e3d3b8a2da183fa5e9d5125b1001a8774a789798c1d08ed55a0362ae6c8948a29dad3a2201589a116cf2091dcf26d7215242252a2555dcbc141e036365c658f42c8a5d6253a804ff80979d7fe3676438d6609b2c5b324fa6f51d4603294e50e7420b0f905f6241af952700b54d36ab9f8484030c52acab2b4beaa3bc03f19152188becb9bbc632ab4d9c424a3c399e2c85046528ef61efb31b6b5d49330605581f02fb1e8e782b9c50ff6db9efa5168b26098b36cf3d67eb39d63bf3234c011f0f0141be1bffffffffffffffff03f20a30179093b7d052c8cf8efbf5ec7989c269e61337279e9a3e4059520aecf10605581f029a69ad9bd9a4a4c1e6c0a990cc64809e05dd046525c6fd907ab45e14628f0f0141be1bffffffffffffffff037bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99034b49abab66e9f8b3a664e41b7607a466e1b7ef684e2ff6e0df7624d6248e0b1605581f020072e4970ee8d9026a7f766bed5e15b33a780527f139af72d8daa1abff960f014203e81bffffffffffffffff05581f02c03c61fe9d9bbb691794d27b745ee76fa0ab881c06ddfb4d654722db89ef0c0141010219842203fc6ff48e781a45024695daa5220f694cc530580f2cab93fa3124b5a53753571603f01fee979d488ada31da72cdbc1fbaf490e9f34be1dc4de6bcadf5cc0e589df703f02d52904f34777f8c67f604ff6447f4c1655b57a82e3c38016b834f83a3ebe503bb2d390790a470dd75f92c82c0ec22ec7eb3c916c87cb08bd8d8ee7ec9c1b0270219fffe0344bff435db9294127705c39c5cf0b6d633260d3fdbfcfb8161e512a5b1b9baac039256aa15a73813fa37b08b88accdb43f7531d4375cc927bfcbfe0707a3ab6fdc033faba8420cbd377d12efff18de297257296f7f64ccafed91f970c4e4bb95a1d70219ffff0219ffff" + } + }, + "code_db": [], + "txn_info": [ + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0880dc1c6", + "nonce": "0x37174" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "nonce": "0x1", + "code_usage": { + "write": "0x6000600060006000600073095e7baea6a6c7c4c2dfeb977efac326af552d87620186a05a03f2600055600160015500" + } + } + }, + "meta": { + "byte_code": "0x02f8998330182483037173010f82f74c8080b844630000002f6300000015600039630000002f6000f36000600060006000600073095e7baea6a6c7c4c2dfeb977efac326af552d87620186a05a03f2600055600160015500c080a034413902dbb81bd0aaf0752bbdc0902faf50015e6b368f89561961e688f3463ea070be3f36e2278b977bfc8e7f1f2a433a306838f5077c9258b0edc8887311fca0", + "new_receipt_trie_node_byte": "0xb9010c02f901080182f74cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 63308 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": { + "balance": "0xcae117c6" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0880682df", + "nonce": "0x37175" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "balance": "0xa", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + } + }, + "meta": { + "byte_code": "0x02f8698330182483037174010f83030d4094eb67a91a93f3164f5d6648b26163560207846d080a80c080a06678e6fbd1f284b1dc9fa05c65f2f8ef387843644134ba9056b63c921ce7a84ea063d4dd52a458e3d3160549d4660f0c6357a8ac184b2ca1fd1c2fc7c8fa65066c", + "new_receipt_trie_node_byte": "0xb9010d02f901090183020047b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 67835 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d088032d56", + "nonce": "0x37176" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037175010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a08838573ec8f5034d8fc0f87e009e549f8bac92dff1111385eef19aa96984276ea06d7987515833ce580012bb05175ed00fca1063c836ee44dfa6f78dc79bf669f1", + "new_receipt_trie_node_byte": "0xb9010d02f901098083027a36b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31215 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087ffd733", + "nonce": "0x37177" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037176010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a044ef98b48177d13f7a076f2c3460939727475a15f9aa165b2491718d0d5a8dcea008f963d18e570c2985d44c1372d31b37337572f03d857512a7164721880c0e9a", + "new_receipt_trie_node_byte": "0xb9010d02f90109808302f43bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31237 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087fc7712", + "nonce": "0x37178" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037177010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0d370bc226d92c9f0bd810f99081db2f625d50ad984ee8df77463d4341be44021a0342fbe687c75628c3352ff0f1c6589c3355c27d5b0084c70fe6c0f89c2327799", + "new_receipt_trie_node_byte": "0xb9010d02f901090183036facb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31601 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087e7642d", + "nonce": "0x37179" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037178010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000004000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a0675a5c06850c68fd5b58c384d198558d2a8b7ade8f893ab2b8daf50c670eb485a00d31e9d6993b9dc35fa23174af45b5266aa06dc1ea546d892bae9da9a1a032d4", + "new_receipt_trie_node_byte": "0xb9010d02f90109808306725fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197299 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087e288ed", + "nonce": "0x3717a" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "balance": "0x19", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037179010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000011000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a083f2741d25f1b4d06289d58dab1f6dce58eb66c0827d558fec513b1906c16508a06d186af5ed3e5efcc260c3f33a16fd192376ef1ab17143e99ea7df7079f10dce", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830723f9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 45466 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087ddac79", + "nonce": "0x3717b" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303717a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a04d39b7871c76d7822a09f35a6cf1550277e971c6c443afa2caa15a183daab40fa0133ea52908d285c43700c40ce7105ea5978f2f98dfbd372d3d494ca80a78984c", + "new_receipt_trie_node_byte": "0xb9010d02f90109018307d5bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 45510 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087d9861a", + "nonce": "0x3717c" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c9833018248303717b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000013000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc0809fce552e435445dfcc8e63936e057fd4d4549a65a523ce6a4d5e7da188056b57a0023900efc04334140120d88637c3b2b206c0587dd7a6a81d5f438333d3d2210a", + "new_receipt_trie_node_byte": "0xb9010d02f901090183086d82b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38851 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087c4b602", + "nonce": "0x3717d" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303717c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000014000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0f733958fb8bc384aedd8d6c887ca92c499dc299349dc74860bbff511eae46544a0263bc46f0b202b3816ed9ce42934158901019e73a9e9e41d42e47f9c93c0d351", + "new_receipt_trie_node_byte": "0xb9010d02f9010980830b66aab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194856 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087bfd85a", + "nonce": "0x3717e" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "balance": "0x28", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x14", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303717d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000021000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a0ef5775be615def3e26b65f70b39598b0485fd9dbe2db395a86305ed0776852f2a0145607f9de35ed87a28ab83cdde541c5cc33bc271a9cc7d3c38b5a3a6c1d009e", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830c189cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 45554 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087baf97e", + "nonce": "0x3717f" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303717e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000022000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a0db2fdddb688df49012f05e1a077394f05e8a6d3b534d778c6de607d3ee0d75fca0187b1d1ae28579ac9386a663a29a126bfab7a0fb179d113b0e1c2770cc32aa13", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830ccabab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 45598 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087b6d0b7", + "nonce": "0x37180" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303717f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000023000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0351f23e4750f47884fa91daba7aad42d585992ba971df2f9809dc53662c0f403a072c01651c915b1e186522e9e79d632fd457ff513576aa2a4ab35a79a62d7ce85", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830d62d5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38939 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087a20091", + "nonce": "0x37181" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037180010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000024000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a07dfb0b2cbd1f70e2644d90463e1040c001a30ca3dc060284fd1d4a0db09e5f0ca0672f9af948f6db97343233b92792c9b0c5d11cd6c8aeb40793858e40bd4d74e1", + "new_receipt_trie_node_byte": "0xb9010d02f901098083105bffb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194858 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0879dd7ca", + "nonce": "0x37182" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "balance": "0x37", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037181010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000031000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a068a2946e7726a4497aff26c5b43813b1c3c7103b88baed0a7a990a48c2c88c40a04b7d76c43f0090140a741d6667c49f98570fb0c66c8203653b0d7b4a9b4d1264", + "new_receipt_trie_node_byte": "0xb9010d02f90109018310f41ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38939 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08799adcf", + "nonce": "0x37183" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x2d", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037182010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000032000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a072d8f696889c1ee52e8d175b937ab83c3c984140f8db3840ccd20a607067f6d6a010a7892b550e5e72ffe0faa43814c18b96a6e369750b9d194f8a03abb1b3eec5", + "new_receipt_trie_node_byte": "0xb9010d02f901090183118c61b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38983 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0879639e9", + "nonce": "0x37184" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037183010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000033000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a0404a8d0fd8938a76fd884305f3ca09766363f239ac51b8f85e74210919c530a4a044c9cb1ada04574144fe7ffc3d4de1d5aaa3bad95f293b9d2fb10fe7240b5d3e", + "new_receipt_trie_node_byte": "0xb9010d02f901090183120aa5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 32324 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d087817053", + "nonce": "0x37185" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037184010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000034000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a08ebcd316044fcd551597a32a958e27c97068506f6e1c42e09e46e5a57bf31a50a0109f063099d88c020a00b8f78976010f7bea9c1ad2efa8e45a4687c15eac70d2", + "new_receipt_trie_node_byte": "0xb9010d02f9010980831502dfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194618 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0876c5e5c", + "nonce": "0x37186" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037185010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000041000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a0aec8aa8248b008ea2a612416d49ef8309c5ea42a924e4ffe382a45094e7347aba04732e28681d9789ed13233459b32070b94d05e8b840a1cb621ec088e8aca262f", + "new_receipt_trie_node_byte": "0xb9010d02f901098083180570b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0875790eb", + "nonce": "0x37187" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037186010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000042000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a07b9fb7e52d08f663516d26a2f7650f64403de2a9c45ba89bfb90c5911f018281a05e2cd6f8a61fd505019c9c80c82bcacb40046c45f899544b39ea1ce9f2eab1bf", + "new_receipt_trie_node_byte": "0xb9010d02f9010980831afe37b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194759 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08742c747", + "nonce": "0x37188" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037187010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000043000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a08b6785f3eb92618b1f8e53e4c101665971e42883338a2d4257339db89a4cf54ba0701a5d1e9eb1072dd775b531826c5f23efb813348fa569571be13024ea7de25b", + "new_receipt_trie_node_byte": "0xb9010d02f9010980831df673b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194620 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0872dfda3", + "nonce": "0x37189" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037188010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000044000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a0c5273b3f78fb68849665fb79a3c692da3dab21b0f91e56bc8f0c5428e4277a2ba07836f360d231609aa1a987271f023108338c964a412bab87419e9f87d3053d09", + "new_receipt_trie_node_byte": "0xb9010d02f90109808320eeafb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194620 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x4c1a88b5c69272f0954f36146e8c096e44e90095": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x600160015b810190630000000456" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0871f0dfc", + "nonce": "0x3718a" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "balance": "0x55", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x14", + "nonce": "0x37f4", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037189010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000101000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0f252a8e64be5b828cc5024ca8b0c142f7517c823cfba66fbe2da78aba134f898a05f5a9d23d1516c82e79c6a6ca7d4ccc229bd5f5f2f7711d3e68900c9d747b371", + "new_receipt_trie_node_byte": "0xb9010d02f9010901832310eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 139835 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08715d8a0", + "nonce": "0x3718b" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303718a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000201000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a04bf4ce0a135b1da0660e337341c584270b102ffa2706812956297ef4c6999ff0a076814f27dd48350bd9f1b7268a787c60a9d84d515ee01aa6f7f64eab4c74386c", + "new_receipt_trie_node_byte": "0xb9010d02f9010980832461aeb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 86212 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0870cce6a", + "nonce": "0x3718c" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303718b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000301000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a0866e23d264ed18294e25a8570e49b1ab311a717ff2707316367d4832adbf97b6a06cc355e84a8c3f86cca1f9eed519df07debb400ac94031b915aef90f316ed48c", + "new_receipt_trie_node_byte": "0xb9010d02f90109808325ac48b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 84634 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08703a2ca", + "nonce": "0x3718d" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c9833018248303718c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000401000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a032e08adb3beff4557c45555c6391b78eaecd4592138cf921ddd9e5de59033bd19fe1a61e75d17f42403a4dfcf44ffa6fc84e41369c0f143c0286f739699997db", + "new_receipt_trie_node_byte": "0xb9010d02f90109808326fba8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 85856 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086fa7118", + "nonce": "0x3718e" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303718d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000501000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0d3e4f16d6276b77ad7da6dbf180d0529cd754891075c14743f2df2a167fd16baa04b2a7b104404428797744bb7a3c526b3a592f73e5f7a106dfce9e25d023b110e", + "new_receipt_trie_node_byte": "0xb9010d02f901098083284be6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 86078 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086ecba3d", + "nonce": "0x3718f" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303718e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000601000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0c2b2c74dcc65db9da92fd5a0fea9a2816ae931adc8c04d083adbef77c192f6b9a077f332d0677410262c44a18117d99f0f034fabf665bb624c1d5fa41ee473f8d4", + "new_receipt_trie_node_byte": "0xb9010d02f9010980832a4173b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 128397 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086e38757", + "nonce": "0x37190" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303718f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000701000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0542a24086bb84da68292be1393ae691e1ef48457eba8f11a360f49fa4ea77988a0130b0507b84c34a0465fb706b555e7292fea2adf69d511c795b8b652ecf53ad9", + "new_receipt_trie_node_byte": "0xb9010d02f9010980832b91ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 86122 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086da74a7", + "nonce": "0x37191" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037190010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000801000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a017c741422bc082477f668c187ef3c1f6438dc091c5121ec0f69b564a1053d7d4a03f696a80b1f764b3d7f72663ac224db3bcabfc80e4ed7737e6f8f3d2ea048903", + "new_receipt_trie_node_byte": "0xb9010d02f9010980832cddadb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 84944 + } + }, + { + "traces": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": {}, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086cfb958", + "nonce": "0x37192" + }, + "0xeb67a91a93f3164f5d6648b26163560207846d08": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x1" + }, + "code_usage": { + "read": "0xbcb31d2fde6716440a65c196f3c212d6b6494445fb0563efac0192df1e3d527d" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037191010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000901000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a0116da1cf7095bd37c56395dc4a47e7ac669e7d22643819738a013ae77086d0b1a054b3301ea452d812ddd5f9525cb18e218f132f0d0fe6b73fb6c90059cce17338", + "new_receipt_trie_node_byte": "0xb9010d02f9010980832e6626b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 100473 + } + }, + { + "traces": { + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086ba5c98", + "nonce": "0x37193" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037192010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001011000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a018c45d66ee8c126b0d320211875cee71b94fdd31e3b61dc767e5d7a046463c94a0283323566176617a8353298972b2c72897d9ac9e11973753b1cc07d44c1b7562", + "new_receipt_trie_node_byte": "0xb9010d02f901098083317366b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086a4ffd8", + "nonce": "0x37194" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037193010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001012000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a03f5be50e3c9f08cf6b8b185e213f2f2fafc818f182f5114a215d5dd47c0f3139a0485d2712c9834ec746a33f2be7b6b5de98f4e81d9274390c2d4bbc559dc9c651", + "new_receipt_trie_node_byte": "0xb9010d02f9010980833480a6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0868fa318", + "nonce": "0x37195" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037194010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001013000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a012bead3144bb74017f32132a97f548a64c84148fc117eaae9c788e6c188e11d9a001e6479788a43acc998887d50648c0796cec2da59ba1dec97fa310aacaa25b75", + "new_receipt_trie_node_byte": "0xb9010d02f901098083378de6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0867a4658", + "nonce": "0x37196" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037195010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001014000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a09db0e4b124c11371f2822c5ba9a895cfccd79ad53938c9014dbd2b2a384f1afea06e64ce592f5324d7a26f92c0675c9635828f7fbd64f684b58d776ce0f0bc8763", + "new_receipt_trie_node_byte": "0xb9010d02f9010980833a9b26b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08664e998", + "nonce": "0x37197" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037196010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002011000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a001469ffaf8ef4a6bb61c57b7906325f0e20077e16b3f1b8e8db3a08037adf452a062e42a7cec3039277bb36201830cdc58db9d8b40040ed66a33b969073afbe09a", + "new_receipt_trie_node_byte": "0xb9010d02f9010980833da866b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0864f8cd8", + "nonce": "0x37198" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037197010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002012000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc080a031e958fcc69e375ff6d5b5b2f414459dfc8f744d110acb494178935c9fb8fceea07fe56e9c3d5efe965307627588c3875f2691f1af29cf580ef664d9e1341fecad", + "new_receipt_trie_node_byte": "0xb9010d02f90109808340b5a6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0863a3018", + "nonce": "0x37199" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037198010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002013000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a02953428253129c2608e00322e1ba6d401cc7cf3c4a66ca6e1e38009d8945745fa060b54018709a0741e26c056005a5e2c7f4c2c36318fb8f0af57a8b9a44c2af9b", + "new_receipt_trie_node_byte": "0xb9010d02f90109808343c2e6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08624d358", + "nonce": "0x3719a" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca8330182483037199010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002014000000000000000000000000eb67a91a93f3164f5d6648b26163560207846d08000000000000000000000000000000000000000000000000000000000000000fc001a04c274393aaf41ac7724ac8eb9916ad2894400289ca6a6d00743611c33b6798c8a01cdb250df0e6588897fdcfa87e30c697c1fa48c09ee5ef5cc991788f35ffd18f", + "new_receipt_trie_node_byte": "0xb9010d02f90109808346d026b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "nonce": "0x1", + "code_usage": { + "write": "0x60016000540160005260006000600060003060e05a03fa00" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0861e9854", + "nonce": "0x3719b" + } + }, + "meta": { + "byte_code": "0x02f881833018248303719a010f82e3dc8080ad6300000018630000001560003963000000186000f360016000540160005260006000600060003060e05a03fa00c001a0948b09573b872a9c5934a86d43e9eb6bfbf58f66818b5393560736ae19989b69a05e3bdf4d12e5865b1d1dbfbb9fc87eaef4933365f5b1c2b1a95c83515042ac8c", + "new_receipt_trie_node_byte": "0xb9010d02f90109018347b402b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 58332 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0xa", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086181cd3", + "nonce": "0x3719c" + } + }, + "meta": { + "byte_code": "0x02f869833018248303719b010f83030d40941eaf29045b2bf25eea7e7d4c2a6d22a65d32a5740a80c001a07e4fdf220cb0e3e75c9f90db0e56558ccef02d319e6b3009e8662296211b3175a01c0338704619311e52974ec718dacf26d636094a7fe2bb2607c93ad61dffffa5", + "new_receipt_trie_node_byte": "0xb9010d02f90109018348a113b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 60689 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0x19", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08610a79e", + "nonce": "0x3719d" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c9833018248303719c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a00c54978ef6e14b71e392a5824734408c328ac6b0ca6601ed939a637c9abd7dfe9fbc08a458fe6592afcc3a9d7e729fbbffe53ef1f5658ff84da0660e6edf07c6", + "new_receipt_trie_node_byte": "0xb9010d02f90109018349b1d0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 69821 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0860d12a9", + "nonce": "0x3719e" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303719d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a09832e5336f1ec30b3bb99d5e04939d0702117c41a2392affcedd9716501a1a7aa02708114b80d03cd78625114167b765299880b6fb100b03adc12df26db887e7d8", + "new_receipt_trie_node_byte": "0xb9010d02f9010901834a34cdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 33533 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0860a3463", + "nonce": "0x3719f" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303719e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000030000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a0c706a98b24ab31c73a5c3558bdc5acf82cfb984820177a24185ecdcd48b1f53ca0261912bb21686a0f8540b66ccec136f10cb662bce1e58a8b14a26d36c7aa1655", + "new_receipt_trie_node_byte": "0xb9010d02f9010901834a9db1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 26852 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d086036505", + "nonce": "0x371a0" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x2d", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca833018248303719f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000040000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a08f10135252d773679b072c565b613ae82aa915510ef391b363ef0d32998353e0a05f54c27fcaa44fb81e30aa9475058d5c2bec25b19ce796dfcaf0d23cd7a8dc21", + "new_receipt_trie_node_byte": "0xb9010d02f9010901834b96bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 63756 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0x28", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085fb402f", + "nonce": "0x371a1" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824830371a0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000110000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc0809fea7db2519ec5e6d3aa6b5e6f379c82736c77b607b405297ce427da09173434a002831fc914aaaf953153b147d54b8bae7f62870a0d183a3706a2bbb40abb748e", + "new_receipt_trie_node_byte": "0xb9010d02f9010901834cc091b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 76244 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085f6e596", + "nonce": "0x371a2" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x32", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000120000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0757bd669565cf7861f9b88a0b878a74cb990c247ee4600e5f4f1944ec52c4dd7a00d6b7f172a0ba8449d8f0941b8678638121a5d6b493856e9f1afd3a1145e35ca", + "new_receipt_trie_node_byte": "0xb9010d02f9010901834d5fcab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40761 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085f34112", + "nonce": "0x371a3" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000130000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a05bac1ee8a30b3b5cda7891b59a099b06208a8059e4736a1e7eb1d93ae6f36feba01e947055bbf9cf39a0cea6fc5bb6ac8a015684308156890af8ec4c5b66638a25", + "new_receipt_trie_node_byte": "0xb9010d02f9010901834de500b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34102 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085ebc275", + "nonce": "0x371a4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x46", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000140000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0ecf38c5dba8bfb2fe0bf72f79659e993a142cbd7fa606305489b5a486c3eedb2a057512899beb968fd9fe81a51d2a66eb5eb0b424c0d9f00ba329b58bf28fbc264", + "new_receipt_trie_node_byte": "0xb9010d02f9010901834ef715b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 70165 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0x37", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085e39b7d", + "nonce": "0x371a5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000210000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0d2b6037be23e7f7ada90852aa8f01850bb98b49792a5351eaa86250f43eee2d1a047a4951e44dd183395f8aa2cb311240726e4079867f81819c5a5442ce4f0b0f0", + "new_receipt_trie_node_byte": "0xb9010d02f901090183502137b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 76322 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085df3e7c", + "nonce": "0x371a6" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x4b", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000220000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a08763caf3bf6b51beec207a631951e880ff6dab4764b6914fcacc82d41b9cd852a05eb4c5951e732248f0580a430d6faa3a787d06dfca1c41a271e35a58570819aa", + "new_receipt_trie_node_byte": "0xb9010d02f90109018350c0c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40849 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085db9790", + "nonce": "0x371a7" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x55", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000230000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a08c6a1e3650d1d786b00856ffee3ca7516ce57fb671f7d6761cba45066746206aa06ee30363618132c2fc71c089b5d99df3bfe3c277b47e09d651e3e19a561ba9bc", + "new_receipt_trie_node_byte": "0xb9010d02f901090183514656b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34190 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085d416f4", + "nonce": "0x371a8" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5f", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a02ae8cf7ea90a246a2ed46b9e2b708cd0684d86f33ef2c9c7caccfecee5a16b6da07bf3f07494e5fadbca609f56825c40233dad54ddaff504a5f64a23165942a8b1", + "new_receipt_trie_node_byte": "0xb9010d02f9010901835258b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 70238 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0x46", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085cc97bd", + "nonce": "0x371a9" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5a", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000310000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0959d3849351dc586c9bfd45930c7bffc69ba4d528ee93cdfd9648ce818b9fa8aa048786c37a9cc3fb41a422d0f9978cebddc7675c0fb0c205285850fd11833d9f0", + "new_receipt_trie_node_byte": "0xb9010d02f901090183536adfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 70187 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085c8ef9d", + "nonce": "0x371aa" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x64", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371a9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000320000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0d0027de964167f55dbe78bc3eaa3378e8cc14a20607f241234dc64eb0d4a0aeca03c189d3db2edb896309d96533d88515206e5cd1f834ce29437b65c1351e36dc1", + "new_receipt_trie_node_byte": "0xb9010d02f90109018353f099b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34234 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085c5fd92", + "nonce": "0x371ab" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x6e", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371aa010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000330000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a075e139336735b50214b36acfe0b65509abd50a752605dae0b524a95785ffdd8aa03e55ae612eabe7097b22f940d0a3197058e229bc2d57b298101d860506da4524", + "new_receipt_trie_node_byte": "0xb9010d02f901090183545c50b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 27575 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085bf2217", + "nonce": "0x371ac" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x78", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371ab010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000340000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a0a0216407960fb07ca9288a6e1fa8e4ded821b77214691dea58d30e4109629baaa0404e63074b0279e2fe6dbdba5f40a9561d3d8ef4173d2afae597bee47ed3012e", + "new_receipt_trie_node_byte": "0xb9010d02f901090183555717b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 64199 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085aa1020", + "nonce": "0x371ad" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371ac010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0ce870188f9b5c1788d9f2d63bf14b13ba10af367c8eda4bfa8857a55dd9549b9a038ce15c1fa9d0d13e7018c5f78fc07be63b443b3a8ecca26c53a41291994a59b", + "new_receipt_trie_node_byte": "0xb9010d02f9010980835859a8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085a66598", + "nonce": "0x371ae" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x82", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371ad010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000420000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0f61b0cf0555717305ec6109f03de1776a8c4e2c6c229cc1d88440fb210c47e98a037aec5bbd00ac3bf9af407d458809a5f3787dadcbfe8866cbca46134abf8a02b", + "new_receipt_trie_node_byte": "0xb9010d02f90109018358dfbab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34322 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085a37125", + "nonce": "0x371af" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x8c", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371ae010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000430000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a08788d37d839038898f68046c01f44b16c3225b3938c1b2f6d7519bb780fe248ca06dfdb12da171c80fc7408b2c4ec09602079be1101fe2a80758ff5a35e8315c93", + "new_receipt_trie_node_byte": "0xb9010d02f901090183594bc9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 27663 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0859c9396", + "nonce": "0x371b0" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x96", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371af010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000440000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a024dd8db0b6a50afc690dd5fd9e8f4b5da8892bd79bb31f46faafe351d902cf29a01cdf8dba9985086285340180cec9418cb46d817dc4276eeb3bf139c8a57092fd", + "new_receipt_trie_node_byte": "0xb9010d02f9010901835a46dcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 64275 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0x64", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x781456f3eca465228160c6cad8ab1ac63f65a96a": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x600160015b810190630000000456" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08588b1dd", + "nonce": "0x371b1" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x73", + "nonce": "0x37f5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000001010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a092b8f4168b3dfc38927ced2be1ce6115692a2e983d62825069ddd4ef879d0488a05b0354839a4e746c868b9016b9a9dfa5bfcc28ac00391ffc124183b33ab6457f", + "new_receipt_trie_node_byte": "0xb9010d02f9010901835d1df5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 186137 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0x82", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08574e3e2", + "nonce": "0x371b2" + }, + "0xdecd6f1305f8b1bb632ee94dbfe45a3b954d8fd4": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0xfe60005260206000f3" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x50", + "nonce": "0x37f6", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000002010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a0365b1b0b6a35ca0f9392e47d42cbe8547ff817e08f79fb39fd30503d29124dcda01aab45551015fdb408cdf35e48ec41521194b0582fe01dfcd72d828f6e54592c", + "new_receipt_trie_node_byte": "0xb9010d02f9010901835ff23cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 185415 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0xa0", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085613249", + "nonce": "0x371b3" + }, + "0x8a6382373cb871fe47ff50a1be1097b5324454a1": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x50" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x2d", + "nonce": "0x37f7", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000003010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a06889537fc012760b9eaff12ff5b386e7faaf1d4c59a119a1c51a2bea76a0a5dda04d8fcf38fcb42e3a0dd840348132c1ff15471afa2733ae1121cea92ca8f65b2b", + "new_receipt_trie_node_byte": "0xb9010d02f90109018362c275b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 184377 + } + }, + { + "traces": { + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "balance": "0xbe", + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x69017b62a189a846738d3c21e3ee84a88f2b5ebe": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x5b63ffffffff56" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0854d694f", + "nonce": "0x371b4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa", + "nonce": "0x37f8", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000004010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a02b343f13cb20ec888d2961c82312cff76e93f3ffe7b2ff9da4277a66eae6f64aa074a87f9307f0593851c0e00837dd51af02f116db3be5f550eaf7b38b6438ff60", + "new_receipt_trie_node_byte": "0xb9010d02f901090183659605b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 185232 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08540c28d", + "nonce": "0x371b5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000005010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a0f918c8f373eeb7e37824c0f5e82d607c4b1ecd30342869699b10852e87265aa2a02dc590ce1f6d1a8df1925ed06fab28e5297cac200192481e8566aa03ed60eb20", + "new_receipt_trie_node_byte": "0xb9010d02f9010980836764b3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 118446 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08534d288", + "nonce": "0x371b6" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000006010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a0eaac7e42b6def713e3a0eeda28add3507e3350552dae4b1f2343d9f4c9f2e4d5a038cf9b1860ea80e9ab260ff52dff61076c48ca40e008c28242b7b4597fadb844", + "new_receipt_trie_node_byte": "0xb9010d02f901098083691946b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 111763 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d085282abc", + "nonce": "0x371b7" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000007010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a021115a4964d96c352ef7c985b9d7bca680f1f2d311361ca1bfd5434f9ba9c5fea0616a46d7000c6eb146edf79d08c6dc14324d43e7d2fee95e0293f0d4240b1c3a", + "new_receipt_trie_node_byte": "0xb9010d02f9010980836ae81ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 118484 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0851b825d", + "nonce": "0x371b8" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000008010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a060d6bf905f2607c5091c95ee3abd166993a2fb4f95d3605b74cdcae561f22f22a00b0958351e1ed8295bf520c1c0631144b87043aed66f230736bdde6de302d49d", + "new_receipt_trie_node_byte": "0xb9010d02f9010980836cb703b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 118505 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1eaf29045b2bf25eea7e7d4c2a6d22a65d32a574": { + "code_usage": { + "read": "0xd649edc1748e78af9aa444728464247472b18f72e6b59c469ed12f4d7038e1cf" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0850f90c9", + "nonce": "0x371b9" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000009010000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a0e01c47b5a88467a8600018e8f60e667b3b1ad12ee57111537feb6b15682f3183a04761ee1d3355924ba405ee2a5b01d538e6cb4aa8f17aad37c23ed99f0f50a110", + "new_receipt_trie_node_byte": "0xb9010d02f9010980836e6bcfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 111820 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x762b4e704fd17060f7d0b416b951ebb9716d9d72": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084fa3409", + "nonce": "0x371ba" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371b9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010110000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0e94018472da8552c5df408a13846591bb555f289ad7fca55eb90ea671b752e9da02dcbafdf297cb07b29f390bf61a650a7e8968d3208a07eb9dd07374770567d0c", + "new_receipt_trie_node_byte": "0xb9010d02f90109808371790fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x762b4e704fd17060f7d0b416b951ebb9716d9d72": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084e4d749", + "nonce": "0x371bb" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371ba010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010120000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a05a1f4d218524abfdfddefac0a783e5ef172ee2ab3c9a53845c4af92fd4352d4da01a265240d0bc5d1ce5ea71caab55eafc9374c02e38bb1bd88280c7d98aacb1bb", + "new_receipt_trie_node_byte": "0xb9010d02f90109808374864fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x762b4e704fd17060f7d0b416b951ebb9716d9d72": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084cf7a89", + "nonce": "0x371bc" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371bb010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010130000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a05773020a4e58bb7beac9a2928e534ecb3c101e6c4b9d80ae08b5952a6eedb121a061c8d55e50bff19c779bff41acbeb26f5d37a79286957289b80d9681ee19519e", + "new_receipt_trie_node_byte": "0xb9010d02f90109808377938fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x762b4e704fd17060f7d0b416b951ebb9716d9d72": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084ba1dc9", + "nonce": "0x371bd" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371bc010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010140000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a054bfa9402340c14380e7ebccf254042ee23b606e9cecbf82cbb8a2124ecfc5fda07d56118821e2c63adbb20c914a0b5f7fc820bb64c607c71b883e93095d5edd25", + "new_receipt_trie_node_byte": "0xb9010d02f9010980837aa0cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084a4c109", + "nonce": "0x371be" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371bd010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020110000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a0bf04f9b59cd2c35a2d7c20d8b8ddb9682e61aec70c02e856a5f466d542c4a327a0289013a5eb51280f4039858125a2e1e39933da06c6f623713b3f906b618c349b", + "new_receipt_trie_node_byte": "0xb9010d02f9010980837dae0fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "nonce": "0x1", + "code_usage": { + "write": "0x60806040526004361061001e5760003560e01c806312bd429914610023575b600080fd5b6100fc6004803603604081101561003957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561007657600080fd5b82018360208201111561008857600080fd5b803590602001918460018302840111640100000000831117156100aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610182565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014657808201518184015260208101905061012b565b50505050905090810190601f1680156101735780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106101d157805182526020820191506020810190506020830392506101ae565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610231576040519150601f19603f3d011682016040523d82523d6000602084013e610236565b606091505b508092508193505050600060405180807f6572726f72000000000000000000000000000000000000000000000000000000815250600501905060405180910390209050821561028a57818051906020012090505b8060025582829250925050925092905056fea2646970667358221220db58d80e8530eed625d9b4250a6055c2eb1d7c117a7ca267e6f8a059bdd2f39e64736f6c634300060a0033" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0848e7706", + "nonce": "0x371bf" + } + }, + "meta": { + "byte_code": "0x02f9033e83301824830371be010f83032f258080b902e763000002d2630000001560003963000002d26000f360806040526004361061001e5760003560e01c806312bd429914610023575b600080fd5b6100fc6004803603604081101561003957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561007657600080fd5b82018360208201111561008857600080fd5b803590602001918460018302840111640100000000831117156100aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610182565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014657808201518184015260208101905061012b565b50505050905090810190601f1680156101735780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106101d157805182526020820191506020810190506020830392506101ae565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610231576040519150601f19603f3d011682016040523d82523d6000602084013e610236565b606091505b508092508193505050600060405180807f6572726f72000000000000000000000000000000000000000000000000000000815250600501905060405180910390209050821561028a57818051906020012090505b8060025582829250925050925092905056fea2646970667358221220db58d80e8530eed625d9b4250a6055c2eb1d7c117a7ca267e6f8a059bdd2f39e64736f6c634300060a0033c001a0077d3ff97ed2c870cd0b48139c6c6e4834fed85e9b5c26a1bef0095e093f2ba7a0069a04286210cfa0be047eac0c0e3d4f61a1d5f1c71de17d5ee33778acfded24", + "new_receipt_trie_node_byte": "0xb9010d02f90109018380dd34b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 208677 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084791a46", + "nonce": "0x371c0" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371bf010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020120000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a02cad194148887a6c4530341141962ba8dda249c67941273b078227f570f29367a033c15b82f53227012cfb8a09b6ffa519bc44a2a2de491d349835a51e76134d0a", + "new_receipt_trie_node_byte": "0xb9010d02f90109808383ea74b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08463bd86", + "nonce": "0x371c1" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371c0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020130000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc080a0cc1cf2f6b547e188b2bc186d6766dbc6f7fd32f657c7511fbe2efb68fe982bafa02b243e087d1e3c846dd68a5765f5a302ac9d3fe44364ad6297ad0195ea78530c", + "new_receipt_trie_node_byte": "0xb9010d02f90109808386f7b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084617e0c", + "nonce": "0x371c2" + } + }, + "meta": { + "byte_code": "0x02f86983301824830371c1010f83030d409475d390f6c872b56c5a183c84fd72da31ab8febad0a80c001a092246ffddc11d1b9f4080a81eb443d4a9643c139c0babdae101f9e47df0e1d20a0252d0954d0211629598fda7964ff03c790a0f0dd16562f8e3da7386949d8d751", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838749eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21046 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0844c214c", + "nonce": "0x371c3" + }, + "0xb0d0eee6217c6030a36ac655712fc86c9213e99b": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371c2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020140000000000000000000000001eaf29045b2bf25eea7e7d4c2a6d22a65d32a574000000000000000000000000000000000000000000000000000000000000000fc001a03e044982d697ea99009edcda1fc68c4d3e527bc65094eabcc682d1469fd7fe93a056428dee7928adb74d34b11e0521554787d765339c2068af119511678fdc06a1", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838a572ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08448ca81", + "nonce": "0x371c4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371c3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000100000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a006a6619d592bb13f415c778f00f01f1d0ef09236afa66577623fa4c0a364753da065753ec624bb90460ba40cf841d1518bafdbed3344d5a56a3bdab11b8ed43411", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838ad147b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31261 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08445731c", + "nonce": "0x371c5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371c4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000200000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a0e8836bb8f4ef884091fbc4cdf867ad0e0f483a53149f917d77bfa36fc8cf81b1a001ff1385bbf2583dac450350ae5f99d3f24d5b431809f9f952aa644941fd8130", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838b4b7ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31283 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": { + "nonce": "0x1" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0843fc46c", + "nonce": "0x371c6" + } + }, + "meta": { + "byte_code": "0x02f86983301824830371c5010f82cfd08080956300000000630000001560003963000000006000f3c001a09e5e127e6b778f80acdaf84bda05098bb3122ccd042c77048b4ab3d4e95c80d3a0661268cabf03263eb2ef3ba37ec59d0dc1eb2241a270ac554a47b807d3934df9", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838c1b4ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 53200 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0843d23b6", + "nonce": "0x371c7" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371c6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000300000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a0672d9d5d44f90eeacb0823e4731662d0abe67c55b692673f4957b810f9f2a984a07cad1df1f84a153b5a910ec9f2c33e192aea004c35bfbf97d2cc20f0458c72ad", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838c7b64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24602 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": { + "balance": "0xa" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0843ae574", + "nonce": "0x371c8" + } + }, + "meta": { + "byte_code": "0x02f86983301824830371c7010f83030d40940f4494d3407291bc10b6f930de68acca381582730a80c001a04fdf585c76bc243a93e9f6b4a940ebeb82d11647a13cfa42db1774ec733f0c5ea07a2e0d2200eb4ae10e07f67dccdc91b3622b1d0a069bc666522e25a92ece82c4", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838ccd6cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21000 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084384424", + "nonce": "0x371c9" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371c8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000400000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a04b345a291708a8619f467c7ab13548e5d3373cd67c4ab85ed443f0e65dedaa56a01d1825b12498bac1a4f4bf8c6dd95a46c6c59e49146b1aaa2fa72771fb0b6f6b", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838d2d9cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24624 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": { + "balance": "0x19" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08434ee4b", + "nonce": "0x371ca" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371c9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a085e8efb88b4a1609a1b5df764d001fb4abeaff6875626c3ca86e967c2c599b76a044a116a6e09c36bc83e515c8b0a41c1b1247fc9d8127ddd14d7bc1876c2decd8", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838da795b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31225 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08430d2bc", + "nonce": "0x371cb" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371ca010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001100000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a0085565636fc358a8e2b3b35cdd7236033ecbc88230e172ee5d63ea876dc30b28a03548d56636b6a49b09c1d687930051f5d901bdade38fdfb6df81afa33d34d9f6", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838e3dceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38457 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0842d7c49", + "nonce": "0x371cc" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371cb010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a05a16a5349216123f887cf5b207616e056defecf6dfd9234e7fccaf407cf3ee6aa026ed05ce52c5da7d1c0aaef8a5ee7d19041a6e6552bf8237a3b3e8722501f521", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838eb7ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31247 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084295f86", + "nonce": "0x371cd" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371cc010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001200000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a0f5bcc2d80cbb05d4b8cb6034af04d8d6c3f06580c9f2194aa9d87307194e7427a03807b89aeab32b668a295ec4668f5f75875cb395d4c3cfae89c76807e5509e02", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838f4e42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38501 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08426bfc2", + "nonce": "0x371ce" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371cd010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a0eca2d543a7f85d8a9267f7fbcfada65aac183010e4257bbe891cc7fa202b8501a04bbf8308bef6acbf9d77f4ae2c65b9b20e4a81e0dd9c92f78ef47bbb45443f81", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838fae38b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24566 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084235914", + "nonce": "0x371cf" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371ce010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001300000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a0833adf27ef2cbd8f8c9642b830e7fe6ccdb06b832c61ec0afe7ecd6982ee65f6a0652b178d17d1cdef6b83d95e654e6676383f4fc1326ae5218c3fbe977cb74633", + "new_receipt_trie_node_byte": "0xb9010d02f901098083902a9ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31842 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08420b8b6", + "nonce": "0x371d0" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371cf010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a04eaefae963c5f875e90633ca0d7442790d1149d7b9eae55ad19d86bec079b837a03de9374cb77fdcd64b2a649862aa4c6cda8ddda7d1b54a39fe62e58a98fc1fb6", + "new_receipt_trie_node_byte": "0xb9010d02f901090183908aa6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24588 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0841d50d4", + "nonce": "0x371d1" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001400000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a07becb5cf3cf48a7d54467f9be71a3d6e399aaff60a82eff86999a03682ee5bb0a05af72732a8b2a2b668ea5db7a8069990a6f8b8bba538c3376bdd27359041da8c", + "new_receipt_trie_node_byte": "0xb9010d02f901098083910734b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31886 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": { + "balance": "0x28" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0841935f1", + "nonce": "0x371d2" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc080a0df4383ee127c779b8a1b3067c9ddb30030b2cce54b6dffea0d10b3b013e19247a00b469166e2c1a0a0c543b2e93d87eb508437964f2cc15fc7e2a2b0faefb6fd23", + "new_receipt_trie_node_byte": "0xb9010d02f901090183919d53b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38431 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0841517fa", + "nonce": "0x371d3" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002100000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a088c1c5e22c9d046a0091736c4caebebcb7efd33281603291c5a9d6f35d9d1a4da0104dd2e237de1e75359d56e15bba27b6ef4474bec2c0dba16e8fc1c1bfbc89c3", + "new_receipt_trie_node_byte": "0xb9010d02f9010980839233e4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38545 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08410f8cf", + "nonce": "0x371d4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002200000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a07cbdf88df309c0c7c391ce53c783a6d0958c18e891fc2b88d9ef2b347d8ed2d5a02b9f1fff6405deb11b05bca48ee710b164a5b2b682cbdda90aadc51e9572f2b2", + "new_receipt_trie_node_byte": "0xb9010d02f90109808392caa1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38589 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0840cdcb8", + "nonce": "0x371d5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a0f569e468e0cf531289503be66da7d16b0e33e3b764804f888adc9651053440e0a01e464d12542b0ac193caf55d9268a758272f2c016729a4e2cbe3ba98701efa33", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839360ecb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38475 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d0840973a2", + "nonce": "0x371d6" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002300000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a0dcccd4ca2f5ba2ea1ef039f2b81dab9886a01e216c26b8e41c7ae82acf452838a072f1de383b05b3208aa6ae9d875a49f0afa480716843f37f0419a1e3a80a860a", + "new_receipt_trie_node_byte": "0xb9010d02f90109808393dda6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31930 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d084060da0", + "nonce": "0x371d7" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x32", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000130000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a0a24fdf3092219fa3bd8aa6df76455533f4f52c5c963e2d76f1adaa60db514612a061e125bdf4c9a7766943209f4e6bc1c5e6bc69712f330050b822f913e3abbf9c", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839459eeb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31816 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d08402a356", + "nonce": "0x371d8" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002400000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a035d463236f8827363438113496742501e15ff1947c1638dfeaf3bb569040625aa05a2582ec7396e67ba597fa9fbc1ecdbb57fc5195a33e797e3f2f8dfc85bdf7f5", + "new_receipt_trie_node_byte": "0xb9010d02f90109808394d6d4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31974 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083ff3c20", + "nonce": "0x371d9" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc080a08a087c1fd3a7b971ca70618f2936b9af0de1999641bf107e15fdde7c1d8fd3aba0180dde27ad460cd90b6ea559e168a7cb8ccc4c16e5e75e41ac86b3d684e02f85", + "new_receipt_trie_node_byte": "0xb9010d02f901090183955348b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31860 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083fbd30a", + "nonce": "0x371da" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371d9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003100000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a0ee950fe5367d2022a0a1f75d8c03e23502ba9759261a0bf73c11801457753b45a00d98c6f4e3a0bc64ced369a9f63af29c13e89716880b146fc0bf9699f2458cd6", + "new_receipt_trie_node_byte": "0xb9010d02f90109808395d002b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31930 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": { + "balance": "0x37" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083f7b5bf", + "nonce": "0x371db" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371da010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000210000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a0f80d5cd134aa1480fd8e0b66edf51681868891579dacaf9fedb7c9956966fb5ba008e99914c67a4eef54be07681b9e5267279c46818ae0c7c4a224fdd969095a23", + "new_receipt_trie_node_byte": "0xb9010d02f901090183966679b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38519 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083f44b75", + "nonce": "0x371dc" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371db010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003200000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a00e79729ed563c3ecbb5ba400edde541837c87cbbe612e11a8600a5c9d8d41ec3a0409a8d5178376a698740de84d94f1a566a4cd164b11a1ed5dfa0d68e2efaa1a0", + "new_receipt_trie_node_byte": "0xb9010d02f90109808396e35fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31974 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083f02cf6", + "nonce": "0x371dd" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371dc010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a0acf7f6b9462d2bb3ae8d007356b29e24f10a16ba0c98457647cb09c175ad101aa00539710c7fe69262a5fea378e67627e6cea31c14054c65626da1a05affc3148a", + "new_receipt_trie_node_byte": "0xb9010d02f901090183977a02b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38563 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083ed78c1", + "nonce": "0x371de" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371dd010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003300000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a0367b36492e09520a88db02752f373201d19a2bb49712736765817e59a58b95efa00b2a64941f1dd167ffc0a17ac1915fceda1d6dc3c9cab7d92797f10c80ff1caa", + "new_receipt_trie_node_byte": "0xb9010d02f90109808397dce5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25315 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083ea1057", + "nonce": "0x371df" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x4b", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371de010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000230000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc080a0bccac4854c0e587029fad438e2f6cce9d92c5a48c088213fc174a829bb0c929aa01ae1eb6cdd3364ce6c21b26c02023e83f46334eb85df367e7cf78f9f7f64ad74", + "new_receipt_trie_node_byte": "0xb9010d02f901090183985985b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083e75aee", + "nonce": "0x371e0" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371df010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003400000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a04d513b29f3052a5004dfb6a71a2d654a0ce5c3b699eb874b52596d4bf6d70392a03df5339186ef75372f9c60797a439677a6bb77c76e9b40ffa5f217354abe157d", + "new_receipt_trie_node_byte": "0xb9010d02f90109808398bc94b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25359 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083e3f150", + "nonce": "0x371e1" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x55", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a00eefab7d748855b39f7bcc53a5c888675438c2bfc78c239865eae36444130506a05c018e1f6b7e12269035b972d9939a60660033c789e72b7c7a464e6aac3cba3f", + "new_receipt_trie_node_byte": "0xb9010d02f901090183993960b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083cedf59", + "nonce": "0x371e2" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004100000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a0be4d8c5a9623255cb0df465523e9384817044b06e941b264073f2f6420cbc12ca02376cc52fdddcb97c6b17db80c30a91bacf04d41efa6b851b9119e2a1abbe799", + "new_receipt_trie_node_byte": "0xb9010d02f9010980839c3bf1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": { + "balance": "0x46" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083cb76ef", + "nonce": "0x371e3" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x50", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000310000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc080a01fa9b4d2f8ec1b9db3d85fe5665690786edaa12905603cbc3f6f534cd5dbd281a04acb18f93b0c29f97c859f2e02b25a52cf8733e9bfd25c32f9e525b8a4aa31e9", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839cb891b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083c80a3d", + "nonce": "0x371e4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004200000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc001a0b0a09f53392d9e7ac152552b09a30afdf247a15923cf66d2bd1e0fb4579fc045a0508c851f3e1ff3ae51f1acd9a4469c3ea4fd940d8480e322f0bf2eefb46e4b07", + "new_receipt_trie_node_byte": "0xb9010d02f9010980839d35cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 32062 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083c4a09f", + "nonce": "0x371e5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5a", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc080a0074fa94f552f6425ea5efbd6d4fec7ba4e46743ec23dc94f371592aab668c6cba04f1b7f3ec047a846034f1cbe31096700b599f89eb17a00d423e9359c95ba4270", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839db29bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083c1ed16", + "nonce": "0x371e6" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x64", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000330000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc001a0663caf9fad1eecd41c1bbaf26963c7573cc7bd8ac693d8c496abd812279520b6a068610bf225f334bdfef420341545a4d6962707604645a1e9911559b7cbe9389d", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839e1564b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25289 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083bf3679", + "nonce": "0x371e7" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004300000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a0945da180dd8a24696e6c8f857db4aaf47c09da30ab9b605da65d8ee4afadd681a03abc39fe01f31c86815e5fd1f3c7655f13aa71a85670cb83c2b146b855c881d8", + "new_receipt_trie_node_byte": "0xb9010d02f9010980839e789fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25403 + } + }, + { + "traces": { + "0x0f4494d3407291bc10b6f930de68acca38158273": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083bc81bc", + "nonce": "0x371e8" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x6e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000340000000000000000000000000f4494d3407291bc10b6f930de68acca38158273000000000000000000000000000000000000000000000000000000000000000fc080a0ab5c20e5cfb6b39ea6f2fdbabfdfc9a15f0b23c849a7d2c68aa92120f1f69b63a01a931bd393dafbc12c591ab00e62d9677c5ce6e600044d3d6e0a9f28f703aa46", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839edb94b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25333 + } + }, + { + "traces": { + "0x75d390f6c872b56c5a183c84fd72da31ab8febad": { + "code_usage": { + "read": "0x7bf8466393e493d4cb74ceae7b4da4f113e9d21a36ba07e7e32080ab351ddd99" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1d544ff3d083b9c9eb", + "nonce": "0x371e9" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8ca83301824830371e8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004400000000000000000000000075d390f6c872b56c5a183c84fd72da31ab8febad000000000000000000000000000000000000000000000000000000000000000fc080a076b3bfa83e351b6cab35a70d0094e066972f2a6e9e4d1cc131079bbe7cc74479a0328894b6e8ff4f393642bf928dbf5aa849c765958f86e00bd074f651cf36611e", + "new_receipt_trie_node_byte": "0xb9010d02f9010980839f3efbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25447 + } + } + ] + }, + "other_data": { + "b_data": { + "b_meta": { + "block_beneficiary": "0x8943545177806ed17b9f23f0a21ee5948ecaa776", + "block_timestamp": "0x66fc833e", + "block_number": "0xb19", + "block_difficulty": "0x0", + "block_random": "0x86b12a5e0efc625fd8126428336b6b7450a85846ac8345ec5c8e4628b0892aa2", + "block_gaslimit": "0x1c9c380", + "block_chain_id": "0x301824", + "block_base_fee": "0x7", + "block_gas_used": "0x9f3efb", + "block_blob_gas_used": "0x0", + "block_excess_blob_gas": "0x0", + "parent_beacon_block_root": "0x3735e215c95012c10477f575e0c801e1e202549a6afb415b3cbb4c5e6b12ef38", + "block_bloom": [ + "0x0", + "0x0", + "0x0", + "0x0", + "0x0", + "0x0", + "0x0", + "0x0" + ] + }, + "b_hashes": { + "prev_hashes": [ + "0x9e10350b26291720d3982ff3981c33fd68f4f03f4649ea670ec49bc9346d0340", + "0x867445137d5ae299e53c454710fd9928a383f94502a6333f378db13ee410af7f", + "0xcfac5c97f9f3da9544796ade37a753913188bc16eb935c0a1ad4911e286ba750", + "0xaf079878813cbb4d4313a004bf3d89086bea2b0d60fd3fcb1a05bce2835ff0e0", + "0x2cdcbe48b18ffa28772dc91191f96f87cf3c56d8aab7f2267b91ceef4580198e", + "0xd3810f0a72b8f7c64d929c1939911cd32b8a4b635280077fca274ea19ead4bbb", + "0x6e4678d269898b1fcd13f3e6f5e552d6c6853b59ddbb9e4649cae70e5f1bec5b", + "0xe044ef80131838f1c6f75a0a73ae492bd16289b0e04540515fc480144f5ee67d", + "0x565f980b7b1cd1237f2405cc3229e070f84f91d9fe338e9dc57d90e77953c9b0", + "0x2282a1cc65b31adec4c7ee7199b86c4c622081590cd9f2d5d907fe98b7fdbf52", + "0xf714cc5e8ccef49392065a180210a462166994509f7f27df44b920c4ef7d6688", + "0x236bc7ee64115c828a42c4cb8de9d9ae13d191410be553c86e1a3e6501cf08eb", + "0xc958005e90ac9b2c354282837022b75d73de0ba848136841cac9817db4a934c4", + "0x5d21e243381f5fd989958a388dd096c5c63ac87750781dce731531cc9b0a56ac", + "0xf359e5b04f4a091e5180eea5433ef2cffdee3985ba7f7faec5cfed6ecb726f41", + "0x2c3ee263d238312e063b0cc2325fc04c11bc220479a31f9a525a948b6714b23d", + "0x14a5e86bb0f5ae739114ae94ee0e4acf6c44ed4c293693d2f3ff9d41ecbc6516", + "0xb9492e91bd9c7f89609c1ddc7040a7e8f6f2bce97b0979e49a33c5ac7491e82c", + "0x831db11ac1ea086331686ed2e0c090bd4bce5b3eaae03ce4bd1183c97cc05583", + "0x20ff4dc7208fe775beee66d2ebbead7f458d289147764b46edebb9b5e45b3131", + "0x0d2823f567d15441b4a086118dfca4d5c097dcb01d150f9dbd9c5d81a7fe23e3", + "0xb0902d7644abe59fa41ff2f91084537e2c9347f99ce8789942cad0f8ddeeb2fb", + "0x2efd67f34972f057b5e8a4380b49b8f493e3ab6ad0e1737371820fc636358b06", + "0xa25d64a851dd8f1e527f06f5f1d6968122e681070c56040d0fdd3e30c8e63d45", + "0x7ca67603dd635adf712979507a15c72c15bd89ee274fdb108548f639901e4cbb", + "0x6eb92b0afe098b30fe4a8d185a72adde3e04e8ef40b1f4af1fbc6d972250285c", + "0x7f3de1104180e85aaaa2e26d43ac11009b413e659586ea2be476070a4d6b44b0", + "0x93f97a9f755e19005001bc59cf38a266484551e115632b23995458f4ef3123fb", + "0x99a82751bd562744a5ab898b74d6cdc4fcc3703d7a5a109dbca0fb923a92bc50", + "0x7848eeb5188c61b4adc7662f5b280d4c377e94b3871ea68f39fec756fe64c1d6", + "0xa3f645585e4c9eecbd54a7241207fb998135a7970643f7463d3f7cee7b91140e", + "0x6f88f96cbaff8e11c6e60b7a18146343324800878d82b680eb75b7036f3e2bfe", + "0x7c3b81dc58ca541534f11f36a9d3a060ef9298177ee364cf93bd5f1d39f15c9c", + "0x03cdcfb77baade498c87f03834e6b9f88c73d36060f13fb04468a906c679058e", + "0x99b514fae3ad10059c4bff72722d9ebaf6d1a22649d709ad384016460834732b", + "0xe8c9e78d1b8465b92ba8d624c37fc4de2d747703cace5e7b990b501dc6e1b7dc", + "0x1c0da92aafd86d4ed4be08944c8da71a5430bc142078027b0f9e0ae9ed8e1636", + "0x8f143f700e2042975abdd0744836fa705b9c30b925fa5f5f7c479391d2f7c2d1", + "0x2862f01458f7786921fbdd144a1467fd8a1357af85a5d8037febd0314b65fa85", + "0x1fa107d74788647facb33b8a37449758e2181cb4d335406494c83d6c0eef3f51", + "0xb4969a047cb2d92c5297297b9ff54651ab1707929cd0d30e0e2d647c852aa5f6", + "0x7659dba28dcf44166027e2e632d3e4c76f436f30382c1c2fd22082e10a8eb4a4", + "0xccdcffa4da09224ee2a737dd49cfd2a1f2fcf7b629ff57681c9c2b482ab07e9c", + "0x1a24417152b7a830152bfb1d76a9904a0d6c2780eadab2b91f5335b50476ac72", + "0x9469725b0603add689f830269689320ff758317594f340af2e85a1f55dab4140", + "0x07339a7addc72f7e67d31fb9c1c7a90343d339068b2205bd5fb2d2f1bcb0e079", + "0x82fd1d7aeec287c3477d79cdbc8a723b34dd26396bb94dd4343395f8f235f7a3", + "0x56c16d7018b8468af567194e4047b9e0d368922eb09d7946dafc96b5dd891356", + "0xe9861fe84cfbae43210b6075d8b837b1157c982885c075a6fec6bfcd75228287", + "0x2513cb69e388e4d7e2b4455ccc946619e68528eaad95460e98f0d7cab7ed583d", + "0x00055192a7580fe32288b4f865e69f834bb5fa87249de0dbaff984a711e06eb8", + "0x23467d1703ed4c29815f37131a7d2aba61d1e2c9241896069c11b647e2b27380", + "0x541cacd1ce097ad524bef8f5d7a91e45c6281f2b00151788230a147c1f5285f2", + "0x9881f9a823ed24b22087a99de424bb2825d931e02e5e6cde7df37c80066d8c0d", + "0x3dca61afcfe2844254d10f8f58afc36dc3349840f320b459554cdee80319891b", + "0xa17382885be5ea9cd6a8ee344da38e7a74cd996c404b99ca2e7785b3c9619058", + "0x7890ef6d80856c838dfdc993fb8cd06a0fa22897fbd0e1397f11e5a874fa2ce1", + "0x54bc262d62d6b6c273d5bb550ec390237b2ef6464db9acbe3612d6e911c64092", + "0xc17b26799abfb55252b46576da0973bbc26100b8f9cc399c7f97ca28c395c07f", + "0x3a62329c61ca3ad6c0c939c455caae06d541cde0f4179ae514007d5fcd385ba5", + "0x242208e0dade66b1bbaf578ddcd00a140e9d11f0caf39a0ad9c4d8bf4338140e", + "0x7c4c97b70a19f13fa11d35068cc3a2b63c5d494f1d38f75f12f759b7512c4393", + "0xcf4e543b40008fe9f7a449d3a11a853a6f5dc7414b8c50962a66f188a2df0f49", + "0xe2f9aa3a3fa403ed21ae77bc74f3b1c7bcb6292c78f8b80576e8570c1663c8a4", + "0x191b2e0c89a7bc4147ff4a0739db7f4bf4b4ad378a12ebbbf0b71ee571103ce3", + "0x6f94615383c057555cf85ce811d29f0d07fae598522b32f17d277fde4beae7b2", + "0x5534dd8ace5e762aa36caad95466a0058f06b9e86c92e26ebc841c47a65295e2", + "0x91b6127c120bc98dad6967938629a9d97a2afaa4829be5677f1ceb0520223470", + "0x0db12b109bb9e5d8742f7613baf94d3e5dbdde2caae5d4fb4d55d2ff3a416630", + "0x70cc3d176c75b4ec8d61fe3af35f63adaa98b8943fe07bcc9d0c0f60467fb850", + "0x5bfba49e6fa6d2a607f3978c5cea6d3beac0ede995d3c4c3ec9467bfd741dc7b", + "0x16fc78b41e422db38731f588d50d6a463b068500ba670aea8df40767127b8b51", + "0x512eb7947daac5899abca13b493d28f561ceff0f0b9046696948f1713f3a6530", + "0x1eda2164d01adf1a4e993044953b3b9a0747b91ae6e24b9675d56c0855fc58ad", + "0xee7283261ba87a6475575424fbfed6ae69079510d5649f531a54293043b6d10e", + "0xff4f5809303c8c40b49eeec8972c5a767fff2b17b6b17a9656f48624a6d8d341", + "0x1051d6a3b8d3068978c12757d7ff7b0e80460ab2015948dc394bf44e73208f93", + "0x469f8b28c59708e37ac61b22783678c05f8ac29402229e2aac4e37e352a2ff8f", + "0x16bf68b9380ac947756bcfff31830014762f7bc17e54a6d894686132ed4b20f0", + "0xff28e9d5af3ec759b49a3366424d630d99fcfbe44f05e0ee4b8bcafe60781c8f", + "0x264a3627d61883801fa924116e277765352faf7657e970e29b3dbf376d249402", + "0x15d482573c53b0625ed962225485e0dcc1e9698ddbdc890e2259d9f56b4a8361", + "0x3d14e34d2fefe09d62a949dcf9e95261a1059a84a4cb4a6e12006abd197da928", + "0x3db7fea43e72ed8895d593791b12ef70a30e953f9d946e9a1b099f9d7a47a3f9", + "0xd069d588e82992bb5342acd1af9dd1c7b26dede9b36bfa749b5b0491efc727cb", + "0x00122a035bf5fcc2bc70f9aaedd1285ab89c06ea6b881f94854d6cef6f3b9107", + "0x077c7bf7a2137a4270705f43af3a8dbcc5ed6517841355c4e6ce04a84b7c9667", + "0x3a447cc32fc6b65371ee06426110c7af61e8a34b70a531fa139ac8c7ae95eb8e", + "0xc6b6a02813fd3e18ae653c60ad6c53236ca2dc0d6cc020a645139112d0e0ba5e", + "0xa2a4e384eb6b2451110d8dc2a3858d0d7e06dd6cddc48affb990d7ce90953b3b", + "0xf385fb0e500d8117ffac2b7c56a1bb398fd8e2744c4268b238264baca5da6108", + "0xabb244426b626b480ee63331536768964b014ec698abfb5eb7a688a9eb3984c0", + "0x591eff89cfd378f8e274d257418f85cccc8ea608d39c030442e48953c5e7c4e9", + "0x6d3526bde60d3882abfbdc80329199f6a650ebe318948a5de1e3734b4e1f0ef9", + "0xb9e55cc428907ca5988b11608500c2b5a3e07d8332e35cf9edcccd8c19a2c072", + "0x9f509afbaa6c3789abc58701f6cfdf5b3629f29cff527b80b571baa7de4b0c4e", + "0x48ffb72c1b8d04fe1b64f62ff8f10587dd4f11e5119cfe4053761e57b3ae230a", + "0x4533372869eb83787438e9f534020898b4c7a8ecd554baded672a8d92bf06583", + "0x1edcf2520e894222e788e6947b8a088ff3a33a88daf7d8b0f3715c3cca13a74e", + "0xe562d8eef16521279d040e502f387d0c7753acb3cdbbe1782c12bc8a51241b60", + "0xab52361daa8711e0811e9a21a0f56a24ff83f5a11e6d9a74f0eff57c66c20801", + "0xe5866606dd38a6fbfe3e7e317dcfd1e5a1a9405a7340befc36eade92b4679bc4", + "0xc0371692dc2ad272f2401ff37778571665fa3c2d269f154f69d8a9af246d5fb2", + "0x324a6197a35d7f1c33b5032305072c805a05ea4617ecd2a5f19de137982f0558", + "0x9ecb7f97e8b2194bc0e9e7a52aead8a7709bf9135f91de10a05426151c2de23e", + "0x8f2c3692881380ba655c547c36a033c2ee6504796d451a079c941256ba979879", + "0xe5bf63d6cdc26455c3722c4930026dba3c3c56ac150bd2c409fa8bebf44ed644", + "0xe94adc63569215c25a4af99ccf5b019d5065976b26cd32ac01dff112801424a0", + "0xd2df24f4a2edcc2df76cd037f7f0516886b1c56d072a02f544142175cb26f654", + "0x5343098c881681c94a06e51586f8e0322348f6c6a7fc3febcb4114948cc5d2c3", + "0x38fab639309c408361723dd77718fd6b9baa642438e778eee43d444cf225b206", + "0x97db56a96bd3b1ee0495c032a6ea8fbea72a671c2cb35c79cb1dbe366b6bfa9e", + "0xaf3119838ed4f06223d212df8ea0b2c5c5ba74507d2a7458b4ab28e72aa4e01a", + "0x8ac76eb2375e933ee939ac4bb0b91722bbd2de168246bc12a04d97f542536945", + "0x304329691d338682e695d594507220a989baba31fd1a3152367f52b717b5ede0", + "0x0f9b867db2956c4c72f4e310bffa9b454e61a7f89f28c0cb38d05fb853391e34", + "0x5b342f008fb602aa4ef4a093088bafbcbcf2749bca0a4b3bdb37f98d1ed1b2ba", + "0xb0074e89db0887e4f6b2b22249d98654c9d98ce1d931312fe2e3bef422023e5a", + "0xf93fa0761cad8803545389a93a76084c8f90dde0e6156e4eeaa4c93a2204a70f", + "0x5bbf68f62f8b1ce646b541f07d90b461b7cf54021c208091f8ea858f86f49855", + "0xdf2ad1212c945b83e464da2e76bbf98c66b702ee6dce2748d00d067f5f1b1826", + "0x6132a1224a1a8251d65574aa38da76043e4c8b9389eba021aabcdb1b6796449b", + "0x518cb6e84f45f99adc17809ffa39b91b659afd68e9283a7f54e9db6b6531f047", + "0x01d849d014f1b478f0c3840025b931989bf72c5988033976030a7ec62daecbb6", + "0xe990b208717d79041a929c6e2cb52f637bd04b9c731a98334b0dfd320a9bd7fd", + "0x03a6052d6a683c07a55b545a232245dc7156e6f64a3de85391165159fc4a8cf7", + "0xb9c2206af1a6551d6f445e19cd406420fec0fb10984a355d288b375ddddd0aec", + "0xa4d44cbc8985fbd757215a34b906ca19791415db36086cf1992f12e896d8a484", + "0xcc594756b37e56e4af197f47ac7b1e91264dbca712af37f272f8fbf2e4e991d7", + "0x400cf91bf65c92a2ec61236bee8fece5ce742debb2c068b9601749379b1dd82d", + "0x1649eff83de139ef5bbfeaba76e3dc3a8dffed45f373b4b076acca46e1e6def4", + "0x7a0de9ef694640c1498d5e9e92ff460670c788051986b635c98ac8f7e745188b", + "0x26422c48694fb84ad465ccf2ce0c7e07e5d53d80f34385852cd7f3fa1a35d784", + "0x20379f64bbbaec581d1d8518abee0b13d4999e05dbeb87db7e8e0341e98d7d1d", + "0x5a1babfd90b2c42d24e8a20fb30759b59f120677cff6a570c8d00497b77d931f", + "0xfeae04a61dba701d6d8f4bb1d0f6461a58df9f1d0605afddfdb9048207484a67", + "0x4ac30aa45bf2fbd8ef2ed96b1fdba061cc0aeb28f88d88f499f4909ed96a0ba1", + "0xffb64570db3008c926098e819d80f3bf0e4b3ed30dffd6aba9a4e2bf5baa0853", + "0xf64652659d1855213d8b4135ac002597e42804ffc8423644116414b8c956bde2", + "0x165451aa47b0f4f8afe0446fdcdb14892bec9ea2d4658a3ccc868c8dd55eebb1", + "0xd8cc08300a49d1f08001e83901c3458728051f2d7b329314943636a5fd40907d", + "0x1f1d3ea7cb9c04c2fb5a22453e86061f13614fdd57a771b8512c64f4b7457af8", + "0x5cec546018a4f74a9500887e76068762a1f3c9b1af838775706c1770461b57ba", + "0x0e9b7661723e031f79ff2a13db8fe4417f1801c4fef2c5d5df27301b6054c6dd", + "0xc272ad95f5b24948b5bb63b19bf0350938e0ff8114061b18465f054ba1733ed9", + "0x47017dd31b57a295568aa8dd28accce7b18a811ee834a7027da7dc31a94a91d2", + "0x95a7cd3b133e302d041e036538e5bf97556e4e6aa2fc4ee1928e7f48918b9215", + "0x7f8d8f8d7ddab7098d3a9a08df66734101e8605ad46044959c057136b2a1c8c7", + "0x51d73a9d3b00f993290900f3a2ecead8033a9d01ac9151046d0973cdead80b68", + "0xd5094088fec65d8004f0c3381c5ffee0bab9cbe8fa037ab5e06eebd29ae1676a", + "0x0a7c14a424213e07014d637fa90131357d5f35fe0ea34c4d0f25d56f07947c2a", + "0x8ee24316f3bb5123e4e3eb3254c42e7397b1d4edc0198d39e92b5db492ee00c4", + "0x03df6c3f2589f48d4c160378f952415cb3901d1e0725a50c084f6964cd586e67", + "0x17f7b5850ab8a4adafd38ba6ce10c1279adacd769e7b3e99e1bf9202cb32953e", + "0x9e7ec1e107bb4ff47e5a51d3a8170fde79b4304afc5d456b8243cb07c4049d43", + "0xa62b3f706293e28af3a4592373f1c9cb2bb3c25f7edf270136406a2bc0915dce", + "0x1f7e6287539f7e94037cc7c5ee1c6daf64412c348dc6c8f8c62f1c994401e420", + "0x4c5ac21f8a955e7e81ad86dfec9c02b6c4242c2ded719fd5fb606dd2391e7ba6", + "0x6c5e2b18d693071df40c3faad3631ec486c836349c2b03c139293e61d310bc5c", + "0xecfc124965da0fcafdb9a5134277caaf0899075dca4954b59916c5e2814820a9", + "0x3f893e824e7461a83128b627c0f02d871e170cb32d08981126be92cf5d12d954", + "0x60220965a65c992e71650598c24d8b9cac2dcdedfbed780788e70c4c2b3b6e5b", + "0xd5c9ccdbd60784b2834ef9e840c69e55fe0ad89f10e148974d852c82a58df354", + "0xe8dea8e01ea0385e3d426f88a21027bb8f950d5cb0ffa30236fc26eab632bd0a", + "0x5bb2d8acb32f452f964728f081076823004c4837d6062f8b32158500a8220cc2", + "0x3b18263b4632d7ab65c84fa74ceadc4cb4893477e7aaf2b00158b12f4f5b0184", + "0x0ebe0609ea28600222d072599484949857e27622d2bf78be3155c32a3898a54a", + "0xece95868e13d6dc3bedbafdb75a8adc9042428361dd4e4048946119ae4e76ea4", + "0x8b5f6163ef501f543b28a5c082718f9969a86773c1c69ff918b914913b8ccd35", + "0x50c9e618f2276718e0a08a187297e10caf1caf012d4acb518822724c989b7c40", + "0x7c72dd66a11d869caf35d008ee561ce6bb3e36093060596eb690fc2ee45d7ece", + "0x5e7d0b3ebf979086890946be32d31b20a9dd3e6c61430ac5a59cd246ff87f3e6", + "0xd235a2d193f4f31efa90203842b1e915a4ea6d44963e628f69ef2cdf7b4a3b41", + "0xf36de2387ed9a1f85311296172a2ffbb2756a6d5a264907da1bcc361a3ea28c7", + "0xc19fd44851a7c7630a0f0a1618a378573daf0773b9c867ba8efaeba754de4af3", + "0x82f3b44791e31f117bf8fd422936249831e90649311fb4d0dd8b8a2f4468923a", + "0x5d45271cc9e1ae233727b7fdb2d62bc74b79c267f4cae52f99ec1294d98411b7", + "0xb2a850245904d4456f3478d14595f8c1aad61b8c632fc0d7a1dc16037d1b7ad6", + "0x4d3b00643ece5408aed8667858cf10f2e2bbef5dd6c59838dc9a0fb00cace06c", + "0x7086307d9fd62f3a4b40d2b40b11c24eefa20f91ae0769825c7a3521c1842d79", + "0x8abaadd3856283edfc2bdbcf3b9d02c6987631fda381975e132e9ee5609abd8d", + "0x1c916d5056688a97771b0fab607f2f7c2872e292d657af03e94f1017192ffbe5", + "0x46662dccb743889663ffc8f2f6a6074f369a90399bd148f653bc44ba20fe6f54", + "0xc5ce291165d434261da36546576c7b06e232c70956d97a1f25918271f9b5e266", + "0x72d5a207581f1d22e04689c177929bcb8c0f095d37c8785bd25faf616cd7d64f", + "0xb25da78aa2eb3948105e625a7f1a47c7d735c41b326b2b1b30098c5592d79554", + "0xdd4ba187f0d63b7ddc22e4ba314da4b4c97586e02085d3a1f9c447d904382cf2", + "0x02fe2612b33dc5cfe4ec11b18bff2ac9bf16bac2857bf5d5bd635a949f65299a", + "0x25159263787299885a349ee5a026a4685837a07505d80e7cc1573af44de0b0c2", + "0x672e6feeeec2ab9b3fdeb27eb6baaac5a08d4d6231c4d3572ab73b85a5d01161", + "0x53bc49bea57b906eeb276b5d65afd3cff8da64a2655c05442f04c4c08ec4b2b8", + "0x4b76837b3f272037c6103c1fc9213109c33f07765286af0e800e094ce1c36f28", + "0xca39bf0c4790b6f35195319dac3b89f8234acfdc58d0d3d5815fc8fd10ada952", + "0x603b4a3c067e20bfc5c4ada990da01fad1c7d5f528a505ca1a0ff7de54743e91", + "0x9487555f41a15defa6a467bc5f0bbf5de660a5f2d4928e3b141512a5fba2be6c", + "0xa1825561ded2adb001ab7bb27a145bf79d75c8ea6295ef105886e0c06a8536fd", + "0x2c4c1b4c8c0be51c6fd23a898fc38ca86e48a48e6ec65617899791dc5bf8d8ad", + "0xaf0ac8d5b045fd3818003cdec98e742e6ce633ac69d7cdb5ab3db227c896fa26", + "0x9877152eab1efa8873916f1dd653e003a638ae338412b707a4efcdaf4ad6b0bb", + "0xf7cb6fcbaaec468eb3b9d39fb912a7f16b82f630ed48766e6f2b89ebeac7fb19", + "0xaca00f4242c9bd77f3cc55691d9d4b905bbdc3f86a5c658249d48ff989834154", + "0x90495eadac81f5ac222b4c27a532d8182677de997176d5dc17787282b7b4e2b0", + "0x437ac61d59cd27cfa859639527b6de1571fe99fb59431226ca0d6f7b082cbfea", + "0xcef8a1106c3d5e03ed6f04cfc6594249a212254282164f86338663b5b50f5fff", + "0xf5bb7ed474740a65fa392774a46fdca07deba1cc82230fb99d5ae701b5eca79f", + "0x5d08711269a7f25dbd494a543879530b260575bf67ba7e2f12cb75c06263fa1e", + "0x89de0e342c6e02a36571334bf2d2c1ee90a9936c9ec48c78899e457e58eabbdb", + "0xb4596d3d686af3909ec69df1338daa4003bff8db932a22547beb7802ab7219ab", + "0xdaa41e1bef7c0f583330f8515951fe41d367f77a416bdffa3eda4eeae65ddb91", + "0x00e1114df64b66b1c81b8bb3f60b4c2735ea62c3488ed7216b8a6442df3f372c", + "0xb7937285d9c669188209f8ae750cf1f2182e1dcec5b5a15c87fabeee8f843025", + "0x36ab131c4cb0344bea8f742787a82d351671653f8f97d38fca58a18a4c0fba27", + "0x2de11f3d4df613829c27aab12d82eb1f3fc51c0d01cf73fae8abc968572c3201", + "0xe48dafcd172a43b68c1f07ae5dad32acb7e134f90179099b2beacdff28d5743b", + "0x0b1a8ea884d66ca3fe1f6ec7cd1491aa915ee92e4df6f5bb143c8a3f86c9db5a", + "0x9a348b9f969d677ecd79fd28e4c4f4c3875c756140ee8f8e443c3a65950b9e32", + "0xd98a7f700dfef001bb6d010abec237ead00ef761847ff86effc99bbd1e8121e4", + "0x4b6708747735c51b07b8e9fefaa708bbd05eb7a2dd86a027c5785f7d919b3f91", + "0xd9bf2aba34e7fe8729518339d932465d02a2b8638bad8d5c83ab58e9ed37bded", + "0x7d3f7a7badc79eaa13ec85f29280f7157091a121ee1907114635c5d42b9f4645", + "0x4787fb6383b45992d24f89c85905a47f87e8dfa20611b9f9e06dde630f90d541", + "0xaffbcbaac8fb8b6249af28315e0db8d5afd5a5c9959bc0baed69a52a09f5a5bf", + "0x02c8bfd76ea5ac21b190bee354eb6a09842ad59169b41b3e07b0b5b1bd6b6974", + "0x5b9b77661619719ce29c7739d3e66e0f904b3fabe0d360ff8095992aee861750", + "0xba4373e591abaecf0ae8606f923931173d9f54e2d191aa542ec7fcf48a88c404", + "0x5df8b62cfd6f425d8672fca356f386e553c3066b2ae56bb1079690486638a3b4", + "0xfb372834f7a57f4c81ba8c9558ae23fd84fe9799b2296c7f3859433b8c4788f6", + "0x982c77b1a9fca1751d5ca93e39c3affb2a237c667f92789ba7561590f2d63d57", + "0x2e88629c4a50b2569de629ad7b937f8d2eaa42768d618d037948645230b106ca", + "0xdc0130bbc01ae17abe3da35d850ce8a72ae5339e3c1cd79a49b6f34d411665e7", + "0xdb61f9d7563b9fb8981581a7df03c3394eebfd976673f49321b6f6116ad15f7d", + "0x2c417b10d55365d339a170d9c3548f5c18663e0db0e94d2994beaa201aa32d38", + "0xb3419bdc8d31fe16e1ba9a1b4a2127791bda86668ae76a51104652a4aef0a17d", + "0x0723f33f759af3fff188deac6d967a2ff8c6b11e0fe9681ff469ee4f7e9ae502", + "0x002480d28b9c4cfd404472b1220162bc4d0d6bad68bb10c8eab20af083eaebbc", + "0xc0f8039504f315f34061e9f0e4a94bea4f025ba66e36a3456ae1ee25f9cce3db", + "0x52ca59f4faf0af6bc493154570661ad29713ab30b39c038b1af8828976cfec2a", + "0x8e6df000ecc5b7b8d0dae1a88c0abfa24d73f97295ec760206336cab62cd8ca2", + "0xfd9270fa70788a35422d70bef1d94d24b666cefd2061dab4e0bc2e36bb5151d7", + "0xb6fce1f2eaf898276c3fb57ef4e9eb7387f85dc641699d9f539af1408f3fd44c", + "0x014d005cad46e0d92178b0c2b609e8b36ba8cde9840ec196959a3a70834176db", + "0x05c1478ac4919bd7ad2282a560754fc878431ef39b1849dd54383802cf99dd3d", + "0xbdd7b401e64d344129e189ccc531c88f8cb7f618bb538063a37dda000c380cae", + "0x2db5585eff0e8b87c571650b068b35b96a5c2a78deba02e4c3ae3da5e86901b1", + "0x4ee01bdfa83e94f54df331fa09e7dab3004ae3d9292d0433dcff0a0dedf511e0", + "0x467e1b38339a5bb061dfe551fbac33fac98f407e9322f44e0e9c2dd3d97d712e", + "0x8a85cd6286a6380f1ce9fb7ff74f7a5d2916903a54d4e5d0b86654a1ade13ff4", + "0x18c33ef6fd00b9a24b52378c4ecb9938b5f590b1b5f04624583e791f6f8ff0cc", + "0x3228b929f25a541187ca3f245c004c86423b49376c83543ab62e86d81b87e01c", + "0x876a6012dc45575e40e632f4e134a4fb9f54dcd460ac7b411f197f16030565ea", + "0xec43a9d08fcdabc36bb8d9a3ce370d3b12e1cbba8edd7d86cd12641aedc60943", + "0xd64b543f28e1f99357c79ef6a1f27888b1feed0b2ba035ba9f5e2c621663654f", + "0x7570619e24c1c421e8ed6edd12e4c93b2a6956970516b9e39c97d0acab3d5eac", + "0x1d669f457872df094c2afc822940e69ef887bd94f654e2744df0336d9b777ab4", + "0x74a4e907225a628ebcd57514d128f8b3eb9c687d68d74a6a0a9fb18c43de13a1", + "0xabbf6dbec7540dfa974f22433cf62b0d9f810cfe9e46d6d8fc3dc4c656473ac4" + ], + "cur_hash": "0xe5d0fbf5e2994b0737221392b716d1780e366df7ff1f64ff6448206a955c51b1" + }, + "withdrawals": [] + }, + "checkpoint_state_trie_root": "0x5614248caff0bc4bb96be770daa0cbc6c1c4d1bbddd87db92178d728d281f710", + "checkpoint_consolidated_hash": [ + 18157657286856958476, + 10839826525142613581, + 1481161779188348041, + 6327883978007058470 + ], + "burn_addr": null, + "ger_data": null + } + } +] \ No newline at end of file diff --git a/trace_decoder/tests/cases/b2841_dev_header.json b/trace_decoder/tests/cases/b2841_dev_header.json new file mode 100644 index 000000000..c29aef295 --- /dev/null +++ b/trace_decoder/tests/cases/b2841_dev_header.json @@ -0,0 +1,149 @@ +[ + { + "baseFeePerGas": "0x7", + "blobGasUsed": "0x0", + "difficulty": "0x0", + "excessBlobGas": "0x0", + "extraData": "0x", + "gasLimit": "0x1c9c380", + "gasUsed": "0x9f3efb", + "hash": "0xe5d0fbf5e2994b0737221392b716d1780e366df7ff1f64ff6448206a955c51b1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x8943545177806ed17b9f23f0a21ee5948ecaa776", + "mixHash": "0x86b12a5e0efc625fd8126428336b6b7450a85846ac8345ec5c8e4628b0892aa2", + "nonce": "0x0000000000000000", + "number": "0xb19", + "parentBeaconBlockRoot": "0x3735e215c95012c10477f575e0c801e1e202549a6afb415b3cbb4c5e6b12ef38", + "parentHash": "0xabbf6dbec7540dfa974f22433cf62b0d9f810cfe9e46d6d8fc3dc4c656473ac4", + "receiptsRoot": "0xb3e40167d70657de58c19298310e10e57f37deba82e4804b27753ceffc513c2a", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x61c7", + "stateRoot": "0xccaa36d52000ab1bcda4c478c2720a2693ad06fd3407ae8b61aa713b913ccecb", + "timestamp": "0x66fc833e", + "totalDifficulty": "0x1", + "transactions": [ + "0x0ec8c4c3f97927e9c4fd7bf0c00b9f521ea25d27888c19ca2d244f7e2e087c79", + "0x28ce3d27d0163b9d5211e787e57073631166e8c62b784ef60ed99f94fa5dcf9d", + "0x57772e633ca7487a9588b338e853b229a2d22da4ce5a7243fc5cdabfdd6e7a20", + "0x5349c366d092e783bddaf59832f4ae53c81b0bc3e2bb74c86b91e0336e81d9d6", + "0x2514a877aa02e7909196193b5ea1591f612cdf635b2b7da2c29287c2b41751c1", + "0x0503a74e74e48868270f8e8f52da7fecc83d65e7539da5b9ab95da492ce32c9b", + "0x6d432214f0b8761ada709a28d8ab35e9abb3932397bf9c56f647c8bdd39b4b42", + "0x878095b2c3f6f1963893dea019fdd51c02b2e774e79fa93ba24c162eae1c3839", + "0x2f81cd8f554898ce904fbd769ecdf184644fa5350349a0c8710d8f6710f314ac", + "0xf7a46b9f6360f8636fce9b37da09cb555a41649af1076e0b1084147a6e05f223", + "0x9d1c3bfe9e64cbaef4675cf0c60779c1ad8ada9827b569bc5d1fb750a216b6e9", + "0x2b5a024448253461698f4d3c712465b20b57ae8a32f3d535256c9e30ad0e7529", + "0xf5566afaa52c4b66edbabd2fcc57064630e742b9d0d656250fe69a9dfe0cfb90", + "0x291a973687202833cd4d51cad4a055113ae2dc5d140c7f68b2733deb1f0016c1", + "0x730f260d60bcc529e48b73ffcbfdc7c561f7336291d238073b39672cb6278748", + "0x73b9fc2e52e431a4fe2292c2af0221c0eb83751c06e18109164bacf35e180705", + "0xf6360e4018c1e1b827a0835490aae6a6b248ce45501539efde60579dd5473d79", + "0x76f420e1d74a64b7e12777f3595f08fd6e08072e69099782dd8cedb65a66405b", + "0xe5ecd0f639a84d5763922677366ff10329f0ea5b2f5590f3f30e017d4a143174", + "0xb972fccd5a6333ed76fd55925ed443564d5e4e2e8db0ac5ac8603f4141af8733", + "0x628db84bacfd00911548f7a9b609c50aaeec42f565b673241148e2cf4a333e2f", + "0x0bcc4d1a43ae0c26d6c12310e2f32b5ed554f606d19876d9af857fc3a4d0948d", + "0xf318120dee1e20c7fba63b903a01596fe870fbbdae51f999e4c3116ac668fa5a", + "0x4f70fb5b82671948fefb76091fca39727bd9295851ae19f4bef44b4d679e2237", + "0xeb3be6b45bf2b28dd2acbe0070986048973cf1f4e80bafa604a8e907eab41250", + "0x34984e8c38a981db4a84c63f00335ef0263d0effe0e6db9ad650576a08fa5890", + "0xa4ca7edf8b171e55ea5368f00b150ff328463dbb8bed0a3076b11bc2fe65ba0d", + "0x00128fcd345d774817878e2d3cf6b5ff563f23bcdf4f0445e986e0afba6266ff", + "0x3fed209034fcef370bbb1b1ef301265ce357ed2d1f735cae3d0238a8b473f01e", + "0xdad778c8f15e83168018744766722809d3375b30ab72974d4934a1b7de57eb7e", + "0x24c6f1fb2cc6e7b8c92573cbe57a026b627c1e5b2fb78e4c53b07d535fa6850a", + "0xc1cf6e94661feed43ebf18bcb2662fcf2df1c7610e8d783b9a6fa91368d49f81", + "0xeb7d92fc9b2c2777e5a15394a59ec0180d84414b68ae8934fb5416754144d85d", + "0x5f69f461216bf4697eebe0fe723b52107969435190ab84bc34467c6d4fbcda6b", + "0xc3188ffe2a4611e55a245a69788ead9cd6fedea72bbe21ee8064c11f1aaadcd2", + "0x163c61c0ab15dfbe1fbaf01ad818dca0be9e06baeb89c7d8b87addaa2806d8d2", + "0x0bd91fc0b9bf18cb718f2c76e1ea978c70d4124def877e89004c7f5bce21db43", + "0xba63d51c57e8ae390ba8ac201c10540fb9dda1716bc06fabed4acff0131dd24b", + "0xf84bff96ddce689f87c2509566d2f262b04945e9c9d72798f2307b2e9d64663c", + "0x5589aaff354d861131f109fa1e5ea9ce0f4f58a009a4117c529db5c84cacfcb2", + "0x727c9838c04e23459faca2a84ac629674d27382284468d244fded688ebd926df", + "0x1420a77460871721abc8ce0fab84b76b4e3049edfdc38fc8277213e006099e9a", + "0xde0ce2f7a562842362ac1d77b052c1dddb55407d4e83bc22d45ef354bafce90f", + "0x1d45600feef71e7c7379f5336e8b4ebc47775e946a1fce678df204b3ac784936", + "0xdc42907cd1b696a11870775f0764638a7c4e4e7b2cab127683ff2af41ce1e0ee", + "0x996eabe55b4a3c0f6da4c421e32ac1916b89183195db335028f67c475d2aa456", + "0xd6d2b427f5c706486340d8a0f72dc9486887302fffd945bd428301bc3075d86f", + "0xb70192c5955874e473dad834fea1add19d88e09e7236239f9770213e003c86e4", + "0xaf666bf66cdfe2f874117b02db4354280e3f9020f782eff18bd1809ce962e8f2", + "0xcb757bf6174476be26e391dc8eb0d49173abd2ed0a5502d6b008392e572783b4", + "0xea8b1579d2979ce0d58e218c9fe89b8f37a7a8ad4583e319e5d7f9ad700139f9", + "0xb94b1d6e8515d5d06a5eadaade82b1283344dc0fdbcd2d8855888e64f22e510a", + "0x62ae0524c9df743a391eb95807cf8ba0d374fcb0d9c3306ba48cac56d7dc5c28", + "0x47d21fc665836206d264405b78e8d991cf53d7e2005806b36f9af541e2017798", + "0x60da5789394b2b3deae8fa71d859c56d5387a7db09d65f555e713d3c46a05989", + "0xc07cb40d43c1051e14d4ca282ee0bf6e865bbcc45e69e4361c9af987d0317a99", + "0x11a2bf16d10988a7cb95b3d4d8a07d9c76d6b9815b6a99ab5846ae64ca422910", + "0x402586e89631edae4f5374a25ac2626509404d29aeca0e103276df43de6e8877", + "0xcbce1e483ef23de73456852adc9fff668e4cb7f59c26ab2bf68e1137416d5f90", + "0x0174579cfb993fdf432f06dcedc0b354ef419a93faf91ce21c963497c1d6a27a", + "0x1717d2e0406b449a56b38db891518cd75c4619a889ca591e21429148d74daeb2", + "0xec9812e59865c1e0b68cdd8e1842778c7f6fd820e90905e467dd495b57f6bc5d", + "0xeaaf2b91b3b7ce0db577df879aa44de18c7f67924e84ad0dea84094f6a62df19", + "0x877ed3bd2b8bbf6043875c904186f10c13337f8444e5b55973bf66436ff443be", + "0x76cf523df49c319e605ab372180fe551fa01e2b979142292c33a73d67e5d8329", + "0x105fdc710a70a27f66c579a630c786cb53a0efd909909927a075ff909b9a576f", + "0x469e2b247792f58ad0cd9f43ff7b09045e29b14c9a2c50e116d525c5e6f724cb", + "0xb9f7eaff4071d080c1a250794f91773b8ccfbf08a8c699df6ab68d3b9f851087", + "0x0c5c3fa206c9c0a8359ee502268709124e8e5fc2d11e7ee9db39e154a05b003a", + "0x7898aa03996149fe0f3634e41d652859f9adb21e605a02aeb1f988047b040577", + "0x7efe47c0ecf47c338d2f3d8131820be5aa116b9740dfa7781476941a0a4bc804", + "0xcc57fbf1caf53ae226cccf0560c100c921de3e980550a3c70812151cba8b84a2", + "0x4293f41ee4bbb2de9591e6549451c5e94bb0cc97e58465e22b0e71e1004f5f8c", + "0x056ea9da9738730df499fecc386144303dd2d2b06c6ac0814623a6b992ce1eaf", + "0xf30dca1a056870f02875566a0f964d1bdc40a3a4856bd979710f6093afab1803", + "0x3169c0c7ea2deb040e523375590783a38362c8035a87580e76833fe9f9c3cace", + "0xee5d5794e128005a8e5aad68399a5e9e1c0f3a95a66b40c3c9d29448339cc598", + "0xa10e3acb06f9342ebf9e3a20aa060a85703c51a01a89f46c1c219888e16267b4", + "0x27a7b7287153ccf9ac1b9987757851cc4195052faaa2178fef5c47c4d876b95e", + "0x765243b1ed58c0407115b0eabd0bc4847beb955c8007d8c636dd473853d80a7c", + "0xb740720e8a6b43716a59fabc4ee6184dcabd0bacae97061dceb9ba3e8c29e6f8", + "0x9ac85721275539f7e70161a0cae9ff5dc7d8859f355f9622864990fe9de01147", + "0x5b3e9de4e0f7823b33b647edb152988cace96e8a176af8080fa705c40d39c1e4", + "0x6edb3024e165751d6cd2451eb0254a0cea1077d7d1b2789cdf543c16d0c966c8", + "0xec6da41b6aa442f71ff21a118cf2b801b3832a5c2132b95f4d3b77d8113e7c22", + "0x020785bab473dc0037f35cbaffd18979275a30d39e7f826673a76144d84e5ec3", + "0x73417c7ebb3440a1f8d7fa4345efd6ba14dd71ace30bf1a7c6e20a3b0e95d14f", + "0x278fc91c5bcfbe86da4501c93ef394b78bd334900669830102db8d1c44e1fb22", + "0xca63f738d70b4a98f2aa6734e2af78c60c6ff2eef1427641b87f2dea6b9a762a", + "0x03ad674066f6bd88ce777f84f1989fe4bb95b7bb2de2bccec461d5fb54be76bc", + "0xba4cc6d38cc44d9f15492e0a58e2071aeb7adc7185c00ac1a7d5a222277ba6c4", + "0xf2f636c9b38df0f93d418599e2a613f3879003a82a1750d89c9ede17d99de93e", + "0x392e8a46b30310f217f19c0485b8933cde3b5dcf2ab3ffbe49fb51d9c79ad83a", + "0x313c2856ef0f01ade2552fffa6e9620dea80d81da26ed1a60dd780e12e8be1f0", + "0x83fa5f8cbdb3e5eb7735c0765663c52c69b76dc00dae4c6118d1ab87fdeace7a", + "0x88259cac721a80d7e19a6f746ccf196b1cab86fcf4d541b707760321ac52acb6", + "0xdfc1f4fef1a92302fcbf9c89437302e9516d53b17871ef4f7a078e6f6a71c39d", + "0x9542dc4d7c5f788cf088530a7153d1edeee33faef0cc7db133b24ea06b43fa54", + "0xeb419ed6e48daa3c0db7f255af5359f53f48ed6bb504e179315684ceef2f8181", + "0x9667a47fb25a6625521fcce788e9b7e800b0cefb17b94e32c34ec3f8ff0737d1", + "0x410e8e7c075a62dac699ee4b2bef9c4b90075c7f87b22b6a3aadee59e5d35c54", + "0xe61571ec6acb5670fb70f8202699f0128b598d59fba8d43e5008b91dd4530315", + "0xf1ef28046e8f4508e0542440882739a976fecab95e1545bdf4ee7f2963019721", + "0xfaad385b7cb16658c3762fc2f5688e7d35cc79c7bd53709b225aca545e071167", + "0xc8a26ff33952538f8545cc8a3214539a969b233c7d0188c53ca1e0ebd82eee96", + "0x7e79ff48a6244f9ad48087e0a74633c3425c5c0e845f32c3d8aa209ed11958d3", + "0x09b2125403fa089c66e151c4828bf570d1a9d52a3e99b95833239adbac31a7d3", + "0x81f8c2016d61d5a1f125bc720bc671adeb0027d3ad75894b4b085e99beeb4b07", + "0x1615b9df8616400c0513b68fec9e5e134a8a901d043a6a549fe0afd0d3bff8b6", + "0xe7d3e66c4558a68c13c87caf936364bac48316d3473f96c66e4ef2dbb898ec49", + "0x14c3bab28a82514565824249a7a692b06d91ee3cd01b0d371551d41ab6e69b07", + "0x2730860ce09438f901b31bc68cfc8fefe4e93cd84e224ef3f6765de2be7249ef", + "0x9b24df8feb283575b0a6c97e8982e14a4f18c4e7d96f3d957aa8865dabc911b9", + "0x6e3ea3166849162549afaa181ecbaf190dfd5268da444537807f31fb255b8a88", + "0xb38ae9229929c10fce79db990d92b8bc8efcc000233de3c94c23ad5bf2b6e271", + "0xba547d02e1e4f5827594029dd1fdc047ea7042664d940531fe371820a5d52a4c", + "0x0768152d13f4217b39290fba762ae4a269125f6c162d027a2b50267636d11929", + "0xd936d172d92ebb7020bec7ad901e4299747d53f2a67eb64a5539e98b162ed029" + ], + "transactionsRoot": "0xa4c7d658be2f5f421a65a1fe71de37164f792451390783f4b66daedce774201b", + "uncles": [], + "withdrawals": [], + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" + } +] \ No newline at end of file diff --git a/trace_decoder/tests/cases/b978_dev.json b/trace_decoder/tests/cases/b978_dev.json new file mode 100644 index 000000000..39e0f269f --- /dev/null +++ b/trace_decoder/tests/cases/b978_dev.json @@ -0,0 +1,6033 @@ +[ + { + "block_trace": { + "trie_pre_images": { + "combined": { + "compact": "0x00055820025e54f1867fd030f90673b8b625ac8f0656e44a88cfc0b3af3e3f3c3d4869600841010320c10abbcca17eca67df61479765cb23e4129bd3812e7928cd898fc32a14313703b7ce59a29f3e7dea7c302aba761237945df17816b64a2f00266d188e3977a8b4031d9c304e0b56d5eb889a59255b6106c4df2c643b25bc2e7ecb6b05e3d1378f9d03af271ff7b02e0d3ddd807ae85497a29582d593f60829125f130caca209adca1d03b62cb0c479e86d66ef8ea6563036e0ccee132be454010f6ac9e96f2431b21ebd0371dc9d53a4ddd8f92ef1932b868c38eb16fb87c082cd8e07dc71280acdc01f19030b0c0e16efb4a9a57ef719be5b9d299d861dd7fad51995e8a7a0d4625c0093a8031c81c588989684c605a922007b74b04526d9dc7f21bc6b9ef2c12b1b38111408030f7041c0b666de2c820d816b27347738f0e8e2d4d7e1e94e2908b88bc3665a330390be6f59df22de6f2a637e9e58eb76ce76dc44aa1361b17f7dc437afc4aedada060558200213f411fafee7722760e2ade1da894e9fdd0f17fa15c0533389de17aae4726f07011bffffffffffffffff03c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470038df3b4226b0688c5ad2acd9df9f58de71d775c09a32f15cd4241fbc649061847055820036f31b111f5ad384d5995209cd4c12dbb8d86f59e11de6f8a36115a6f00e72007011bffffffffffffffff03f2dead12c4d4053acfe7a39fe608f8f41133a24be827b51ffd6375b69b9ab197031692e8bf911cb8ec1e7a758d392e93cb54c7f84e1e201424cd504cf45ec0eef0038b8428cc4d6d4ea6dd7c806a4a468d70049177bc69d19327572850b2f6ce908b05582003d186988e51d1bd2b2f56df9a7a044613e2efeb4541b03bbe5c4645e7e9b24007011bffffffffffffffff0219200c03537e95c119ad7b91b5211c530683c958fa3320ad914c7d490f7da637d53f78d703e20d629ffd2bee3848106f86b98c50a9de755283203bb778c19fa269c8ddb2e303310e652f9e71442fdb91d55444caa687ad9f55a8e08dfe71ea4ff44deecdb3ee0605582002708b5d97499ffbe1b5d781a5049a35cc648cbe0fa5444e9b335d3426ce7bbc07011bffffffffffffffff0219f7ff0558200206d053b145502b0160bc41cd6980d8c51f26baeb89c87226512fe654e3e96f08493635c9adc5dea0000003bda900cad2d898fae80ce80eaeddadc310a6bc2d77a598337f94875560d1eb560605582002523960822ae7c648ef57d3676b4eb3a6e41f4bb5d8cdf63253df22557e632607011bffffffffffffffff03b2b067209e605205860445bb334607adcdf38d881ac8dc2d6731db6fc2656e7903dc76ff7ed8deccc754cf17bf45c4a0c3d90864a06a531d4b2da9e47274757a450340cf161d34d8389b60d012ca548a9105bbfb6f7227254db41952a60b0701350603d5e272ff92693b526d16eab231fd6e81379bf84f51ffe970e244fa42ac6476eb0388d796a92615f23f23237700550a88be42511d3e36897a8ad385c1d741ef405905582002dcd435bf7d1820085f6c46d587cae669ca7c2d3ad4cea9db320a0b3c8bd21d08410103567f03bdd31f26cda44cbfa4c18e39555c86f5d88fb1c94892d231e2646d5bcf0605582002671e41d106ccbdfd71aec174ade652e1bef0dbb88ad47ba045b66e7773972907011bffffffffffffffff033115463458c47637c56d2a35533655fca22d5bcdbbf7b03e11812df5418b5ddd035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f97920558200286e3bc8faad27adf6af71870c163b93174090ff4ddebce53f1289823edc83807011bffffffffffffffff05582002d15c5aece6131a76cec93c8e7696c7bde6e0b0c1852f1505793136030e45e508493635c9adc5dea0000003698d4f06325f11f00c98bbe3e762a4e3e33983f72fdbb87be084d6d7746e635c03b5446286c6212e3f3b6270fc1462382177a1e54f6b896922e8c9a9a42623b8de0371f73e85d8854d8e277a6cda561b393bdbe1fb00ff9452452daa3beb0f16464b0219ff7f03ff6e7815b0d6df7ed4ad5e501cc8649dda9baccff59cccc13149fcc66429adf803d824ad267b926051a297bdf654a1edbe5faa6d0df67a3dc0ab774b73fd07617c03474898a923e0ea6c2e31090caa81ccb9158944407fb02e1d136390920328be040605582002870eb558f294496f928002299838e45a4478cae3174698a40308dea4b18b4907011bffffffffffffffff0337bd18d1a0d139e7c9fb675b25add739f675fba03c50823084c942296ccfb03c035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f979205582002f5ab783cef7c76b0560fa3897b933df5fa2e3361e7b62ef0df894ffcd3c45d07011bffffffffffffffff055820028487f1d48945c7743c412b0f026d722a4641d5978f11a0b44dbf7c1d274d41084101032b02523185a77fc2c030170820b20b55cea57725d45e49b03a29fe105b17a5d1035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f979205582003c21c92355e22e9ce761f218e8ec108bee90373d49da2cc0fef88156737c29007011bffffffffffffffff04590e68366060811015610032577f6e6f7420656e6f7567682063616c6c6461746100000000000000000000000000805f5260205ffd5b5f356020356040356060840380606060c0375f845f528360205282604052600185612000116110008711161561006f576110008603915061100195505b85613000116120008711161561008c576120008603915061200195505b85600181146101a057600281146101b057600381146101c057600481146101cf57601181146101de57601281146101fe576013811461021e576014811461023e576021811461025e576022811461027e576023811461029e57602481146102be57603181146102de57603281146102fd576033811461031c576034811461033b576041811461035a5760428114610379576043811461039857604481146103b75761010181146103d65761020181146104245761030181146104725761040181146104c057610501811461050e57610601811461055c5761070181146105a95761080181146105f75761090181146106455761100181146106925761200181146106db575f9150644641494c215f52610721565b5f808560c0888a5af19150610721565b5f808560c0888a5af29150610721565b5f808560c0895af49150610721565b5f808560c0895afa9150610721565b6001606052856080528460a0525f8085606001606088305af19150610721565b6002606052856080528460a0525f8085606001606088305af19150610721565b6003606052856080528460a0525f8085606001606088305af19150610721565b6004606052856080528460a0525f8085606001606088305af19150610721565b6001606052856080528460a0525f8085606001606088305af29150610721565b6002606052856080528460a0525f8085606001606088305af29150610721565b6003606052856080528460a0525f8085606001606088305af29150610721565b6004606052856080528460a0525f8085606001606088305af29150610721565b6001606052856080528460a0525f80856060016060305af49150610721565b6002606052856080528460a0525f80856060016060305af49150610721565b6003606052856080528460a0525f80856060016060305af49150610721565b6004606052856080528460a0525f80856060016060305af49150610721565b6001606052856080528460a0525f80856060016060305afa9150610721565b6002606052856080528460a0525f80856060016060305afa9150610721565b6003606052856080528460a0525f80856060016060305afa9150610721565b6004606052856080528460a0525f80856060016060305afa9150610721565b5f805f80888a5af191507f600e600c600039600e6000f3600160015b8101906300000004560000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6009600c60003960096000f3fe60005260206000f300000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6001600c60003960016000f350000000000000000000000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6007600c60003960076000f35b63ffffffff56000000000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6008600c60003960086000f35b5f6300000000560000000000000000000000005f5260205f86f05f805f80898561c350f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6003600c60003960036000f35f5f5500000000000000000000000000000000005f5260205f86f05f805f808461c350fa505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6008600c60003960086000f360015f5560025f550000000000000000000000005f5260205f86f05f805f8089856156c2f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6002600c60003960026000f332ff0000000000000000000000000000000000005f5260205f86f05f805f8089856156c2f1505f808660c0898b5af1925050610721565b5f805f80888a5af191507f6002600c60003960026000f332ff0000000000000000000000000000000000005f5260205f86f05f805f80846156c2fa505f808660c0898b5af1925050610721565b82606052856080528460a0527f333b5f5f333c595ff300000000000000000000000000000000000000000000005f5260205f86f05f80866060016060898561c350f15050610721565b82606052856080528460a0527f333b5f5f333c595ff300000000000000000000000000000000000000000000005f524460205f87f55f80866060016060898561c350f150505b508061072c5760205ffd5b5050505050505000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000605582003ffd704d17547495ce6ea7a13e6b81736f14ba28631d5d4757e212cf20b07f00f104105190e680314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605582003a5cdd66883edb5874cdb431734eeea6459a9635a019f04c829ff0937503fe007011bffffffffffffffff02198202031d7955142fb0b10e5214a61ae84c592852408c3318904c7a6ef8c282dd8411ae03cb940effabfd5e6ede752d7475c8b3849bf910c93e4227b5bc2d43125116f2a00345286388d85843005fe4042a1193d4d3b95bfbc72c145b8286f5fb936b3a80d7036f86fa9540b982d46b6c0c5bddf66e78796f68d197467b1983fab90c5a33d00a0301edb4495b103ff50813bc031216625cce7d326010108881a5e444a99d932453055820035e1e82ca50b7334be8990b93a8b043e771340cc9398baa23845763c696d220084101055820030d59ed8aa4492bfe6ac5aee4b01f965f8d6e170c3779b73895bea05819b37008493635c9adc5dea0000005582003a5ecd4ef2ed02c149b1c125405584db0d4a10acd4bce7234abd910a3c1f7100847d529ae9e86000005582003378e8ecee785e1d65200d738178432cbc9ad55c49ea5af905629d348416c200841010219801a032451445de446d278512ff1eedde6f7cdfd6a01b16d0a0de35d2f60e96e15280f06055820029bbafe1b0e515351ea85918426a34932726d30e13ae03f1918196e9e95f3df07011bffffffffffffffff03909021f99ec9553be5e10dca60e00aa977313feaef35d27172c8c9c4447e78740219ffff05582003d2dbe83a6ba7fd75737c8d7453d984e7938ba7ae113d3da2ad7433061157b0084101055820039c0a91ba30d346a55890b1b07287d8aae35baa8c4068ef8f1de66084aca75008410105581f02dee2834b372effea65d7c74ab9f3ac60ef271e846721aa8759a346a3b5540c191b714c033b2c1e83cf1fbb92641248033ea9af15e0e5963f59b2b6c901c54efa0709486ab1c99dbd2062d07d8b9e760c0605581f025e3f6e2fa9787175ab13355bba26e781e285ec8607e5773d52db392d41200f01410f1bffffffffffffffff021902040316a883f7f1b7061db0ea8505e4898e9eb57ecc170ff857f15c198f88e7185af50605582003a8254fae77737f53f00a32a8c0dfc5f287e2e95193e94ba27168dade6b049007011bffffffffffffffff02194203034e11317a25ff9effae06c68e28e7e4d31aa989f643e069110b560080be78f8b303e73280758f9e4700919f537c8c981148cd6172ee88ce68b7797ec448c25918dd03fb0b6f4ea93ac71109edc14c3b37ad9839b8bbfe39dbf5c8eb3d1b902a3fc729014101034d78166b48044fdc28ed22d2fd39c8df6f8aaa04cb71d3a17286856f6893ff8303d1430c2c751a0b4c9b2479b032ec2dff354a85c820dafa5657f4e5fe2ae8615c05582002b3096c912adc7674ca92b68ddb3b0494e9b988fbef1bed7938e8fac4c2df7a084101030711cfb4b45489aa689dadffd9b80681f874a232f41a222b6a37d98ef40a679c0605582003c5950e111dab744db0972d0049e5a101e795021ff1e970a6b36da374d4a6e007011bffffffffffffffff0458613373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff01550003472c9c26c94c495f5f1f98227554ff084fa8f38eabe83cf26217918533af115603d8787bebfb05380cdaf4e201df379cc77983863cbfd8f34020f12290be52fc8203ac9469d9562a8bcd56c7a5de66c396ef5512ba600fe595ca28336c19ce53b7fb038dba63ad4d4924e65a3efe728551627cdf3418fac17e5b2958d4749445b9c8eb030f4224e3c76c3a7947f24f7b1f29d73d8a1362786f05c9519be4a6e632473011035a2229df04c79218cfc35ed1de930d4b9b83f32d0614c70759f2fdd46fa3b3bb03fad286d452cf04aac48117a7154e840d8c170ebc40fa3803deb6522a94bc9510031da0b24a36a01d4931ce049e328c631b7e11e4ce661b26d35696cd030862138003f8cffdafeec9f1393c2179c8bcb295b7d675db283a76871324597d1f8dcff4b503a1015d478882044bef1a2c712d06b852e80b1db01bfcd51d5063539be5eff4b7031515a1f864841529a2d1dcaa552b9e5bde2558894edf2378ac2d0dfaff775e02031aa76a1f7ed1fcf696a87ac921ba2a62ebd44de1ee393fbe7a5051846ffc10110344033dbb5b1e6806ff65ce6d01b9afb5a44a88f7771f19f5a30837103e6d00e903df2faf3b273a49d81fbc69af46f4a88e8c68b417cc3c80c04a32a78a44a3536c03320bb1464897b5b53b079001c4ae3c412c3ae2c5437a3c36ed94600948b3f60503f7cbb775637715793fae3fca26ee0f0364bced6caf01ae80e04b73dacdf5ba27031b8b3425f60903b04d148548c55520a96d5794651fbb01969d3bf7edf1a4af76030898968528ed3c1abfce199dd29181fea38f4c6b0109881903d685a5005896e100582003af2db092449fddddc700f2598b876c6df61626fd3e106be4331a07f7de966058205c8e244392f235f1272c6a41950afc7b65d306d501eed0cee0fbc2db45551fbf0058200377d57444bb67710ee068732df08cd7b77505c5c41c1d9042b7946137ab5d405820e1670a6837e5f99920fc9264b470137f20e6a9255186b520c90d0095cf2491d600582003b7b9e82b9d6374dc0b2761fa109d525dbeae376d405750fd79a6429b22db105820634b27bacac1e4d0cb0ced84d4706ec8b5990c01b7ecd3b7ad9c34c2af67fcfe005820035361b0b51a1816fb7d4b5d8ce198007962c9ba8e35d77b249514a92b4e2b505820e874e18834597360de6540ce2b1614c1b469952a9302c2bfa385f126073e27f90058200307c23b82313bfa127412052192a6c95aeb0317569fa1220e4bd2a094e3e1405820da410106202920bb3f7527ff5c25cbef26a96bd98dc2b7a66ce10312f022d03d005820035c7b7f993d21d223b7eca548f638e9ed4aa2d806369c59bdad070736d7cde04466fc63100219349103894b946fa53b1873bbdec967b5977df4472a69ffd460cd63d2bba9ba6a3bcece0219ffff03de3e4f88dc2fe5cf874665d8e4f381de4d1b7f5d171ecc65c0095ec73715718d037ef650bde84196867f76c718e5824acec0beecbcf9e36938972f3485dd6884cb036693313389c29bd0d3cac7e7c5cd9df33bd05280eae36060db57c1b7c0eec89603c90fe5498eef9185758be469501ba330cb4658a161c055d90332cc88a669f1e5036458aaea3c6f914e4a39229ab973f701bc7e92aa071434bf21967b9e9ca63ad103c31676c33e8cb6ea164d872345bb9fb49eda1303d10c6905b3932ce51165d0f803695a4a7f187a17a236619ddf57ac0dd537067c5edf9186e23071c0fa47bce68303c49c9856890e43df1e97dd2a9f700d85b52a115df9a98177f36bdc8d57d464c003f827d914b1d8843ebf642d7c74f7d2e76203f2f7ab17bd23641ac7ceb53caed203e452b920437085aabf3e198d0715118ade7c980208df095b0ca6a3099160843d039d2154ecb9cb3fb8f560be6efdfdb43f8eb1d1b9254279b1b3936c22c6f5ef2b03bae09c4a14ea2435ac17f2a4590c34067c88f6783ad971081b217ecf55b450870356c15043271a28edde841f0d9d3108d539b24a12027ac14d0149a987dfd83192039c75cda7aab1801be3b6a29da3653afaac4cc0b4b89c4c9b242d28454213b55403e662b638a7e89ef97558d1db5b8c2170bf3713121d979657cc86d426ce391326035389f623cf45d7ed7145f7839d9e39e5991808043c5033eafe8a274e26e576e703bd637d199ba5df4e3f978e6cb6c2db1963846da98e33ac1439a3ef462479a4aa005820035d670be10ebba87bd45db7561fa31f5ae2ee46373c6e1df2855ac9db10c2704466fc6c5b005820038a5ab261262d884eadfcb790e2252bb9944640583854ec50dd3addc61b52304466fc674e035d450c7bd9d1fd9fb233d56b65c7a98c0c1481bdc9d5df685370323c6793b12100582003a317aed006899113ecf1a23a6122eb510905106fd58ea962c258a61f8ed1104466fc6c8803712cc3ee7bba34f400a449232664bc1e01f53143221af065d8c7c6a493a7384f01410400582003fc3c4561084176ca824e670d3fddc6fc8e1f8c23858579b15a737565694e304466fc65f50058200359d83028feae5da415867a4f0e421f18a256acfabb8749b35464f6997ee8304466fc6979021943d503c224a6d12e1d08388cc971a400592e5d1fded6dcbe87892c9e8198546893f348035d6a0e6dccd2c61170d54d58cbb7f6d4c53d4a3485958afabb8ea16e12c5b4b4032e17bd6b14e94ae003a34004076f1be8c47dbbfddafafb61ef8352f728d651e803409818675b822dacf648b18a65944bd536aca5e3d823c7c0480c7a8b9495ed8003203532129c1c24e6ce3273eae4cc113214f4beb49f7b57ded87fe9375f3eeb8403298f8bd555e425a3be80b484259a8c5583142d4eb6aaecd3a4c2ca592a3a206403f46fae9936ec08eead18f51aaf7f9e7728951ae3c0cbb9596b7b07ac00ffc3050219ffff037bbf7aec017329c2a3acbf1b634d50ed89ebf04c2a31e30ebb9fb1e8efd4dbfd03a4e3774092077e3cbb21cd962c58069ac17e56c6ce0b919ad3f3f8b97f98aaa10219ffff0558200365eaa92c6bc4c13a5ec45527f0c18ea8932588728769ec7aecfe6d9f32e420070118610219210003b3a38fd4f9a544853cc2ebf827a9b6d6734abb3c0d44304e752266c5f57315a705582002c8bb92227ba91a2657f29c5498f5c5b07ae36369c8d9283444f477930c79be08410103cfab26401f5f8e58107c0fc91e14ed1054edbe6357ced5836b113237c572748f0334daed56f7437d82b6ecfc8ece36f202ae8fb0c4b1418bdfe49683793d040bb5055820029bd268aedc8dbb36db0a4664e17b83abcfd87e404901eee7bd5704a95064ee084101032164a2801082460ce34a3174478a1d5d678b562b88f1c8e7f588482d79a938fe03d9240a9d2d5851d05a97ff3305334dfdb0101e1e321fc279d2bb3cad6afa8fc803551dffd0bcf527c9cf01051fec4006da344d3d43702d67a0995b0f12e5bb96360605582002d7bcbb065e272d185755b3a7c68e6db393865f253b19acd90bcfe5fb894cec07011bffffffffffffffff0219ffff039d33c6744563a085963ae1af6f7f75b4a740e83a9306d50fc0207dff8e9c524303a91de3e69b23209cdfc6eed87e0e438d97e51033ed516360e62655f7188df59803e7db404c517aac29e39bf0a09db21f09f72dbb6c2706a6cf9d334dff480415f503a936c07960a161f94dc4fffe62078e956e8df71615359246d930fcb6d95d6c9203b18e2da77918d564d9c013c40f5ee142bc1c7eddf266dfb213f751de2669ff560605582002c059784a1c422d1c55066e0dd926509454ea2705c1b2870769fbbed0f7f95707011bffffffffffffffff03274d51f780b63e212dfc445aef0983c58c8f7bd6fd10441bc096c1a5a37880f20381b2e51f87502bb712f404026cc4af65c1690c57ed57e16bed93e44a5c6ad0d905582003703c5eda8644a64cec152c58f5aacec93d72fb0bfa705f0473f9043a8357c008410303dcc2604034f2a69794e70822a9f3309efd4508542128f31986dc409636a6b8650605582003523eb3734a0941fbdee018ebee07aff592976f4b2cc2238987b2e93139e42007011bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605582003895fbb3c34fc051f3008289e11adf31b1c6875f98aa9be5d5a35e964408ff00f01410f1bffffffffffffffff02192082055820029fe686547f4a999d2818aedbc18b735ed2cd502c30124a0b8af861b2251f9108410103cb565c52b33f7c8a74114d14cbf4097f20a7d482d5ab200587dcb0935624b96d0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b06055820028f448fdf4d6fac8aa814554855fa8b5c5f617918e640b695144df7a260592207011bffffffffffffffff032f5ab5a647862753fce9d165069875f6709e91a86c42b566ac2ba4407a1f3032035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f9792055820035c5cfa717b08a11f6fa3daa92e8e6e61b6f39972c308af189318c0d2eeaa6007011bffffffffffffffff03b18e2da77918d564d9c013c40f5ee142bc1c7eddf266dfb213f751de2669ff560605582003d3cb2d2f1d4985e8228e4d626309d017b434751e92249770d7884deab9605007011bffffffffffffffff033a6ca0f2fdba9798ec7350fb5106f9dd4102ec04a5cbd39ec60cd921c3d7af060605582003f823d89ed020e679b155c507c2d4944ad658617c611f66575dcf720aae5f8007011bffffffffffffffff0219080a05582002a47b0096edc63bd82ff436f3be00e0998d92eb1db3c72e2c71e4f9abd0ea7f084c033b2e3c9fd0803ce80000000558200209550da9ca55ba375e56c525b49b27814d20165528e4e7f309878221b2878b0841010382f22f9b2c8bd726d06d08c35c00294e35bf31178ed43b1a7009dc6128cf333806055820021381b00cbb5bb0e44160ca499b1aec48f9220f64c04b955cdf9287d1e7465607011bffffffffffffffff0219ffff03cd59d7f99bc34ffe1962b1e979dbe1d9ebcfb17dc7993417563b14b204a3d3140558200319c7c6095d22b48d270ca5e6f4aef41db3dbf09573e0e8fab10d8dfc70cb00040103c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470034b9ebc62fa01c7762251d683e54f2170eff28b797c24801db2babb76aec66447055820038c5e96481fe5e7b80da1e7a098fdc43699d23e0867062ae2dca18bc4e1ebe007011bffffffffffffffff05582003e1e08db014fc699587667b7256e7b9090e1755c587420cff5fbe0e20194fc0084101055820030e21d8c8aeef60da6ae58d10dcf1f42e7d9a0cb8ee2b4a97caa566a152b6100841010219d00103ba580353c520d4097c52bd481df16da654869fb0e37dfd91af6f42bf33f1ee310370091b81dab61abd1d93e4769711004b698565dde1736f12d29840acfdd8845706055820030f79b57ad859c969ad50068a75a4e9dcaae2f23c0bd570581111804efb234007011bffffffffffffffff055820030c7b7ae81a58eb98d9c78de4a1fd7fd9535fc953ed2be602daaa41767312a008417105582003aeed3a6d3e499fd766dcf598353e51c7e2862cba45f7c4bdb09444da0fdb4004010314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605582003fd45ff940625fc08b6631f72f201390beafe177996516743653aa10827a34007011bffffffffffffffff0219450103a447d462e022a9f19b25312b7d10ecfa4ef20c86e3167dc332f79cc787eb782c03e9bcdc3bea3cda0b9e8e9337899c43175a19aac915d12bde6fa519df72cb95a903947d3a57e7f22ee067064d01f6b137920fefd9fce761f5868b11c4b7d4abe14505582002844743a8e54abd6d45161d74fc4a41135074ae3f872b644f5a26b191422b5d07011bffffffffffffffff038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605582003815c37f33a45828da98d146234381e6ff8784709bed898350675aa4394d0d007011bffffffffffffffff05582003423ba59df7075b27e5d573ad8399ac6ab8a7541efb9a1e646a67244301fed008410102192200037b52a1d39f7b83e8945090b558d1653e0af42f224cbe005036cc841825867a1b031a238a95e858551c0a0af9ce48f575811d7c363f91b12850e237a7c4f7b8cef503e5d38e9630b04f3caee9d733cd0f227cc163b45e09c9212f6a98a1bbed2d4797055820024be2322eb50cfea1051978c284526cd5a6e28caca681855736a5d3c31d9bad08410103b1a5e8f61bb53b40ae9ea95f5feb58ffbeb8240e822ba7ab74b1a9bd976452d503b6076588b4e82f0848f1834be7b0406de8c6dca0d85b65d157b8fb96d6e6b2580361e5323a1cb9773661167b71f9b752d0c508b2a701be30bba27a7b7d9a075a08030abd92e9c33a5ce8611beef2181326fae0c71a52537ac66c051e598db7b6a45e0605582002c3da258d038ad6d25424997ef191ace519bd83844a0d22f6c22792c1f0d77207011bffffffffffffffff05582003e4ee172469cfda38a7457ef192b6efb169fedb73943e4c987d4eb910189d40084101038e420da48b45ebb4dabf5846a34506bac3bca0cbc70caf54b9d7e156f9a2223503a4d9204c5c3240aabf5437e54d00476b94d0c74918117387fddc015478cd0f14055820036b220213ba0a535537fcff94e8f9f52ce5a753f0b0d2c5991f32a1421a408007011bffffffffffffffff035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f979205582003eb61bf236a1da649ae102c3e9b1223175ccfd3bf3f152f45dbd96ba7a7666007011bffffffffffffffff02194a000219ffff03c78cb526383e55b56a62cb8451de143945ca3d299ba51db75a68341f56605ae205582003f300bf600b7b050b9b70fa57140c59a5f0b9fc5b9d0bdab11d108a71fc1a3008410103c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4700385e99083aaae6cd65b9228d9728f9d4a27e0bd64e20e0d6c3ee7408e97bfa909055820030d2682795e9ef6fd62702cd2596106204dbe9da7a2d8eba4c4b681ebb7c3b007011bffffffffffffffff055820038deb7c736dc50b4590ca066b72173d4e2c3f75bb109396f32eaaf9ad11bc800841010219022805582002344e1f991a45b0672fb4a406fcf2eaaf6742936c6abe7d206adfb20c49bd7d0401030e0f62ccea81b12fa7c90b2ad792327127b38033b3217fea7382c2794c92b25103f188863d0a88202407839905069629fcfa84be9e6be71da8c1f83fcfd5708bd303d2f12b3d434bfddc5a3119944fe7ffcfc5c48d5d009ce9b6bcdc369c8d1e9704033b53f5b4571fca1ca5a7a86c3218d4e302f05d98885c4d94ee8dafd6e3341c50033202a772e5f2883ec731b7253dc8cccde49712188bde8281675aa7ba2856a8bc0558200258a41babfbceeee64164e5f9e7a513dbdfd4858ac8eee4c4ad12cdcd5e026e07111bffffffffffffffff033c976a674d5092e426393a9f29cf733e014e2f4b18560adfd6af685ae8b1958d03c5558be2df60a45c34ffd0a5aae1251c497662fa1c8a5ac87a1302198087fab103763ebe453bdddcf6b98008422a245653b41c52a57dcc70afec9ebed169d38e7f03310a60acb2fdd4a2cb695bf7f93b32c14811506200e5d905f3e00d04991fd29403a2bdc5dee679f69e5106aae26d34da8e2a854ca9bbbceda2c13932ea782874bb03b5fa59f87520c7b1c726a2573d26ae8a5eef19cbac0e1c4896464bebef054cc1035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f9792055820020dd61ef17b473012675752d3426da41fce3f2c07d332c44a402b4dd1c83e6b07011bffffffffffffffff039bdeae033cf448fc92531502b89e4d4aa939947860f6d9976db2a57d3eae6f91060558200275bf2013bfccabb2e56d29f90260b223541b73b5832f867f1c73ac65aa439607011bffffffffffffffff0219fffd055820023c81666ac58a473a9de51fd3a8d68186d36346fb4e01f881fdfde9d7771c80084102037e5e236973804534667e8be0ebfb9b7d6396b339ab6a0e471d4299b2655044e50314643bfcf02a5dbc7345c12c232f110a8fa96cb571a7813abec19216812d57aa038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c060558200237a8a11f3f6f1e21978a033227fe4fa110993a034cac6d56301a42885feaff0f01410f1bffffffffffffffff03c01c56efbf25d353cc92bff3ed98e2b797c7f0ae46bdc6361d1b4876436e2c26030c38b031a588fcb6009865e6d7e81bf67288c1eb20fa773092559ad8a45102fb03ec829c87888176dc5ad07dacb793d0562cdd5520d196b89a4f99300d5c214359033f38d052ec1b70725695371b47c8d849d0517810f0073916d80f9cd848eb2c0e036fd9ed5936ac19bdfdea4670904150956ba0ff13b2ff8537073ec29d02e36276031f2262d86c8205ae6e87a0766d067319b14e43923d10f59b5d4a8b1b94618d3e0324c94a3a5d6751f7d637795cfa6f49e5a71ae8012c5b87f0c3472a75f3c409fb033ea9af15e0e5963f59b2b6c901c54efa0709486ab1c99dbd2062d07d8b9e760c0605582002ae5fb1ffc959d3c74921e927d848e713b05010330c1f2e6b174e37788bb1d407011bffffffffffffffff03af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d86060558200252ac5597230e0ececc456b1050de4d3075f44b83a46f953e165bd866baaad307011bffffffffffffffff03f2f8ac63ed944da580e00e0f512df468902d4a13cd5842c1c57d21d5b6433b220558200366503b9158ee06b0a587859f6e24974c78c3a64b6e4d8aefbcb8ad3bc21270084101021882039df14aca57590ebcb70d9a39f4a00ec27aa812a51b29fc278d7b131f2fd4c1cb03500b87d7a9f333e1e507a81e7083a622d6ec703d5526287de26aa05a1d8678640219ffff03f8e5107dd3dbf5fd4ed39ea6c2d2581f8bc06f89fb913b6da9c3c7829aceb390055820032716e93807a94ed8bc95ad11ffa885266ee48732ef7a459f6a936e29deef3008493635c9adc5dea00000038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c0605582003e9172402b94f2109dcd1b761a9709e9ec2bdb6770f31e59b9952e4d2065fa00f01410f1bffffffffffffffff02190402038d2db43dda049141dfbbc195a2cf3bdc49b02fc71ba848f977dd9eb7d7064ad703193da909e8ff9fd53d9477a9ffad4ec9a7e05c5cf58382b24fb922ae68a0a827035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f97920558200202a8368e48d5210297d511c26cd571e15b8bf40f170f323ca3ff4124a992a007011bffffffffffffffff03cc88c1ef05c2c2e647ae70fce361e35cf9b4cae3ef240a9ab923d10223aad6400352c7f435dbb5e20afc57d47e8682602db53597beafcecf9cdfecce131e3640a10605582002ac0ba5a4b9eba1052227aa35971cb989e88e36214dcad9d2e46eb7ec23c7bb07011bffffffffffffffff03276ed6267049207ec8f66a55fed6f281bceeb629309b051d49d66b96a1c0a8d303382fd69d15c485c1cb252cc4857473da745a9996e7e7796017231a9f02b27d4f055820038be2ad9950390d6d92213ca102fc21a4304c88354d0e74f4b3ff696ce5791008410103aa2f42ac8eed7b6fce9828f68d29f3734387c3508e9a71fa83068cdff475cee806055820038657662a0abd2fd11e49cc255de7cc17b90356bbc911875864f8f9d735978007011bffffffffffffffff0558200304bcba396d12de1ed36f41df60ce0ae0449bae83f14c740451cf19362ae8f0084101021920280338dec309e04b6156106fa6be5612ef2bcec657346c7fec471b79b60bc93fe55503ae9a83786d5492c8e19cd12fea87b75a960771fd8c5ede12e48b1c7adf9fec9e03695e8e54686352a8fb2a2d07d7a56615ab5fc7a903051dad924798d4e68daf6103d0ad94ea562664901d5072b778c23f3db4f48688996b983b81164dcff27730ec03587d84408209902a1462b7b8916c60c88cf0a17a0cbd4b798cee794ea84545e203288e24ff6b4f745d6fda673036ef8c263c36793a93f8c4dd08d47d331598227a0219ffff03814cc13b20961bdc3243ef5c50a6de2778fa2134f1f6c58dc094b20a7db760db01410b0378383c5d88cb9c9f62d4aaf8548d877dcd6619552ee1dab839618ef76c8ca6f0036a175e72a55d80063399d1e095808fe58657231474f8ffa41ebd58ec477796bf031653665497542253da39c044311de65b6f53f10c33c0d5f867aecb8440f34e610605582002e29823a0ea07e1f1ec5cd848611bd93c15ce62d5b324eef301e98435582b3807011bffffffffffffffff03d06a3576210a5774170c5ef0972eefb15e6ad4eb242d69b702f06ca3ab49efad03d3d9dd8b4f24d16a4ebb1377a4d051c8f85a91954f7218dba76fe35664f69b6703e3aab64a6a6b7a65d96971b1cecc33f3f66f82db0f6f76509a685b40256aa68e03bdd8db487da29ea1bfa6f6ddb1bfdb186f10e9e2321d509c7dffc38369248cfe032cb44555a900771a1e175469bbb6aee4656fc45678120d68ed8b4ff78bcc536f03231643ddb1cb5c2aefceff72045e683f18e5cd55286b28d349240e792f894f7b03731d60b465af2cae92c2b7718fd9f397640f9345ad8e730290664fb1f44d7ec2039fcd898b7a44d257cffacc68fc077253af33e944e41f08a0eedbf51aa553bb9c038783d434acbb3a784b8606b5a596fc330cd80be00ad49ccea6db44e26673735c06055820038319787df01e0a2d04b6129650625e2d1ef9c95bafee7761c7fda9ccb259c007011bffffffffffffffff03b0ca1bcda4054273ee2c3c0a666ae468c782166f1492f9f65993f23060674a910605582003251c86d7be6b03d9b6721341f1488906227218261a7ea88db5f2549f38dbb007011bffffffffffffffff0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b06055820036b2223f639dc4dd1cae6aeb95b885e157b2a1236d5cde63ca1a56ddbe0982007011bffffffffffffffff0558200340dcbc49746e31a754155515aaa232bf0bdbfd5a7ab77ea9cd39f4b7282a100841010219618005582003dbaecc6581cfbb57cd6c6f50e24c23ad4fcdf228140c0cb51a8a4edf5d0b0008410105582003e60123db23e3f3055f75087248fd5923d469e76d344d28b4f24a449ca639800841010558200395d10732f34365f34f5a2f7702a9dae40c583105c40921a5052dca1f9f7930084101021904110219fbf7031f2dfb622c8df55e78a716f60f8cfa20f6f7132bea1ae685f97fbd87989a6c8103dd5505328134391fcb9040bce5681a17e133440a7e3aece27f60abd83e8de51c035e5dfaf0e8bdc21a3a64e8608564e6d6540837aa0811c42dcc40169bd9a9282a055820024e05d6234c5a38a5ff4c1c1435d5f204ea15b14c9edbbf968eb2bee7ab328b07011bffffffffffffffff036e87c06403ee95c7592b21500ccc54e47fc47df52ead658b8dcaf6f2842e9f1e03fb7a823ba9f0705efd4c76d3fa20a5f1b4f57c9a05733821c9dea0c787d43fb30324b2544b4d374bbeccad977dea8819703fba8c4c3b9033e8863322ffe779a6ad0605582003dc90a4b683f57302f165399b6e53598476bed58728fc6942c0e0fe9bd7ce1007011bffffffffffffffff055820035fd832d00c025204251bf6c3f044d57347429973f8c48fd3d325f0e758f1b0084c033b2e3c9fd0803ce800000003c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47003c02999106b218e03799372272ef57e2714e5a2efee3284713222f762659a7f5d05582003363b65d369877e3d997e4411d46d19fe459e6b1d57c0e8f0c9ab2ca65f3eb007011bffffffffffffffff02184503a598b55d5ecd661cbbcefc1858616063e161af5888dd126f826f0d65b4b02a0903b3e13e95dd22a73099f6e63fad6aab3f02ef258873232102f3a089d6ecb309db035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f979205582002f5f2676acee292006c28e881b410bc1afb37091f8104b1e4f79b631c016b6a07011bffffffffffffffff035c68a6752ff851f5d85d8054b2aa343f541a1da39b39057d168c017ba951432503aca2fa386f0cb00bdf5decd96b53efb90575e7156683272ffa6a42d46bc360cd035dd863890db0ec44077b57ff57db57ef4d91540b141fb9694217eb72946562c403a0f10d07ebbb8f146eac3737abd6224890b857a758702cae059d3cc36a74fa3603a4d036eb81f375b2f366bfc8c7e455de6b25ef1e28c59fcaae4d2dfdd9e2438c036d26eca602b3d3fe085baa1f5f2dc33b53627839f52a33a0ab5ba5157e5aab740219e7ff03dc40b9d44e5aeddff69258ed186183afdad44eea16892b6eea8be16347e6f1280397b17a89fd2c03ee98cb6459c08f51b269da5cee46650e84470f62bf83b43efe032262c34d402e3d9addc90ef884a894311d5ed11ffe106a8705f7c6115fb588f205582002646dc6911d8cc638dc3ab1ac612dcf73c1d3fd9114a9d46e162f392ee14a9b0841020310910d3eb13ab7a8b880e6fbe9971b8400e8388d1378f8aa67bb0fa176b848cf033d944094257fe9044bc614fd28dd4c90222e9d1616964fdcabe79ef4294a22f00343d18fa8b26ab248f9681e13ff526ca935607161656784f3cce0c1238da9d26a0349d1d83db2d37293b8ec95a0376e23c136024c9e811b4db68d5cddd999bcc8bd037b2ab94bb7d45041581aa3757ae020084674ccad6f75dc3750eb2ea8a92c4e9a06055820029530f9a9de12ac4b8e9694f5be920d997c0524e22e37404fb22387d406f1530f01410f1bffffffffffffffff03ddbaffa7220d36eb69715fffd6c68877b542c01452ad1281b3f948ab6503924e038147e25e5419e15d7316666ffe4576c4483f95f9de33908866a6c338a4cba72803af95346d9127f1a950d72aec9bdf168c599460c2b5b6c2eb2377df2471826d860605582003c1d69158b88840379e5be6af398cbb93ce1261818d2d9c4adc33af2466040007011bffffffffffffffff0558200346204baa86f733abf208b358ba8b807081d6d46a407745238aef2c133fd4d00841010219401003a9f01a531414cd4c099a5c58a41f5412ce67d00cf6a03f0fa84cdfa087bd756d0338c60440b7cdc5743a56a10e93e3aae0152d66243ff96957a0c76d1a4a5bc59e0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b06055820028ecd40f09d22789602d8612a1b85b0eb50838dae03869dcd93fc94d78a6ac107011bffffffffffffffff0219fbfd03496135afb6845ff00ed474bd4c642ed522461a0ee91d518047de39b2d5e68a4b03c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47003821e2556a290c86405f8160a2d662042a431ba456b9db265c79bb837c04be5f0055820039512126584916b9d643b42ed602bb6864e2b93703ff69f63558cdb773ccdd007011bffffffffffffffff0372cb67b03e2450f8d38e321f3889d58dc87d43e9d043b3c38af87de5e50c6e3b0605582003af67252cad09c4435f28c337cf120c6666cdca179d2efd797090a7f154975007011bffffffffffffffff0219802003b8dcdae0e4070fb9392b0fe2a004a57537fc6d3d6ab04da17614cbda9d2eb8b103d8fc41cc27d55f950c15d497da2a859127225903c722b895aa1325ce03b692fa03e824e58109938438c29c5c96f33202decb381ca5989ae86c9d787c13b1c2a4460306660523384a7da436c9a7e606e1da069ff702cf185be1ca812b433c582fcb4603a5523508f78169e5c437682b83caaac0e155103f0f105456796781a911386ab40605582002b7cf5a7d4ae7684d294e5f5ab1a46bf0027416b2bf76c311e02ed59f5bbb5107011bffffffffffffffff036fa373cee76b9c147da62f9dc5f122679955fb284bbbe663f8904fd653e5f5660329955b3f5545cfa8a37a513711dbea72fd399813102eac9278bbbea07f62d1300382df013ab84ad20577ab980459a50981f5cc554fcbe0ce4a3f4339c0b67f1f9f03d1e0e65e282064075cef83532b914afe6295ed8a171d8b4959b494397fafbba603691540e52ab2c3e7f72e2d545a773c0af2b87d62c57f8cae8e996a90bd53368403a64b5d923348003dd8f567d7b6d5deac71b95b39dd33428893ef80d162e39cce03ee28396b9e86f720b3281f7c197ecb7a6dc0c56d889a13eea69827ca33f58a45035b8df87c568d26a745b4acb914e7222d4649047ecccb60a5125421f32dcaf4b00219ffef03946074fb58a94fc210ff5a9b60e150b0f71c0dfa3e507dfadcb12188b7b0770a05582002e23690e890cdec6eb19b06f5d31d422b5c17bd4c435afb2a2532180011453f0841010370e747253f99fc07c07922d8322ca3c3872e6574fc88d62ff1e397be8c44c60c034fa1c1edbfc90978a0b9465648b6fd1be91beb6a1486916608d5ca29a354b62c03597b5a1a4591ad180fc362833e34f2dbf090a38ac169c4b84e03f6343bb419cf037f5c17831c1c29b956167b2ab07a6eb34b060fad188dab65b39cc5ec114ea45603d29bb2e42d711481e00517da317d2f4058c2bd2a03deb0996f850e617edd65b30334e2666cc9dab5896219da23ef910609b1d8551e03b53d0bf0d58181657c65f8039e928ad5191a19c841c3cb4281c4a752d77e8a3f7dcb7c9c8c4a37f35e1093c003e201a29fbb412cff462c55696efe787e78dd4db43f7c8b2f9dd0485f374cac220353739daf8784dd85af60e48f7371adfeac62c068bc414f0fa7d12e25e208ad0603cd8896667bfeaa8d71b39a88f6fd360ccacf703b9f487432997cb3ad55bd6d73030711cfb4b45489aa689dadffd9b80681f874a232f41a222b6a37d98ef40a679c06055820022104b1085fc25927cfcd4c5221cff44000a82d5e09cf55afd679d3e783bc4007011bffffffffffffffff037338d0953b249e5586249667b94d2096b1b0e944ed8ad9f7c15ee905ae31f1640314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b06055820031ae11fac2b1fdff5058ac361d244bdea0cd3bdff6867aa6bacbae0d0a29ae007011bffffffffffffffff0314ad00a877b26c7b0a9bed9bfb195fe91df15009e54482387c168abcc97e3b3b0605582003be31267cb871a29b09aa9bb8c0e3a9b893f238219a0a345cace1902108445007011bffffffffffffffff021920800219fdff05582003db4f61547c9d8c58b4f37f84f74eff767c24cf81b957662e96622f2ac4d1900841010558200339056fcc9dc5154bd966e3ea4aa9b13660746e1439deb784a825784595baa0084c033b2e3c9fd0803ce800000003c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47003ce3c8534ad9e6851c88d3a14bedbb848936f561d7c628794a3120ea3cb23207e05582003f344ce46d4f6c631e7796d94b4448f26a14935039d753aff54c5bd2ab6ca3007011bffffffffffffffff035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f9792055820039c54e62d21a2b8462fbadeb9aec783eab90280043934a993c3f982f006551007011bffffffffffffffff037e452ccdd13cbd4f86ecbcaf49dbc90b661a991c114d09e98a6bb6e98fc5f447021941380373000faa01f361a51cad3057bd598f1fd3cc0460a40ec6cec991e5ee268db60d031809691da36bb3a7a58e9555b053cdc3e0fba6ff9e43bb397d944ba5e752c31d01410a0319e96bef607b470b16f300f9eca614981143717dfca5c4dd0fea9b007d4246b403be38a837caa16c6c65470965271e3ad1bb1244216cd42d07584bf61f53cfc1720605582002fb807ae46b11103d9f55d420d3c13848de925b1c5a16026925b1c2699da44c07011bffffffffffffffff0399ce8f01f66979f76cd7d87e091c2ffa16d41b8bcdf3c806c5865bcda6719ef503e297e1d322ec7d8bdda0c0acb77148a8ad193d05ee19f616f1d46331566f36970332676b26616eef22fcd4b01fa7ac1b68c6b7887385e16a785d37fbc68da8dfd206055820021e382849675f42478f82f1cc96b6fb2e94499b498edd2083b16c2292a9e48407011bffffffffffffffff032dc18397d187604d8a84845cecdea04003d5f726f5a4c9ec73f583d53c984489036392d82a08b16f584c0875bb5a8cbb1ead6323f63d12c18c0f87efd4b3e616ee0366c889b988c4224d11a4dd3eac50356f60f7045da9447a1c843eb6886eb396cb032766d4f43c0557e4ff848e8f364c9b5a59e27f22c516039a4851d5a538edca9d055820039bbcf08818ec3329e5769dff3fbdad66e6312a961acb32c1b203edf70aeba0084101031c13664b9096979e0a6a58919940b248687992af952308581eff9d0e8c14119a02194008034703db48314fd90d9f48514de8f4fc2f540e33d4d926d2f56fc20336bad6d2610605582003ba0b37a193a512a47a436ca84f33ea338dc4c4927a087af3ea3d78ead74c9007011bffffffffffffffff05582003acf5483fdda2fc98d08bcce1a68d5d308d3ad88ee21b50004fd694ba6f80500841010219800103c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4700312adf64b5091f7c8498adbb9eded9ee4a186304c93dc272d5ef2dc59bd4b9359055820032d53fb8b9294817f1311158b4c1e0f98a85a3ef9d4996c4780ac9d59877a8007011bffffffffffffffff05582003a58207750197f48cb90864096850259845c2c8e90c74433325c0b144bf8bb0084101035c9967a6c4ac2ccf345398c4d2034179ffd2056d1347a4b1e00d36c4a71811b203db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f979205582003fb9f3e7828d398f0272ed0df0d604cec8d81cfbdff446f33afc27b29e5a59007011bffffffffffffffff0219014405582002fa0eae268038cfa984647a1d0635beb86eda9fb7b500688f3189520cfa9ee50841010219ffff0219ffff" + } + }, + "code_db": [], + "txn_info": [ + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb925a23dc", + "nonce": "0x1b72" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "nonce": "0x1", + "code_usage": { + "write": "0x7f000000000000000000000001000000000000000000000000000000000000000041417f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f059b6b83f294740688598c52195a925560005155" + } + } + }, + "meta": { + "byte_code": "0x02f9012783301824821b71010f83016b348080b8d263000000bd630000001560003963000000bd6000f37f000000000000000000000001000000000000000000000000000000000000000041417f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f059b6b83f294740688598c52195a925560005155c080a07b233ac8132e58c013aff3adc7e2e9a2f8db9e5e65842d8e68ddce0a118e79a6a028c53c5deb1128a073e86ac57f35789802bb7f613d7e7a1a9e36027d1a6a50d1", + "new_receipt_trie_node_byte": "0xb9010d02f901090183016b34b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 92980 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb92558867", + "nonce": "0x1b73" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0xa", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + } + }, + "meta": { + "byte_code": "0x02f86883301824821b72010f83030d4094c184d44272f907a8113bcaabe8b859c1fc8911000a80c001a057bcc91c86bcbb69a015a2550a97f4c1088ae2cec3472f153bc018c38dbd8bd8a03cf43c711fb90fdc54c416b3ec3e67472718b00aeac4cef2c8c6918aa2e6016d", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830213b1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 43133 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9251f5d3", + "nonce": "0x1b74" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0x19", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x0", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b73010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0cec17aba7942d3f5c20e7852c1918cd2e6196bab3436c505996b0f27890ed619a049af446389960c2980e0e2beef8e5bded12c48b51c72b0e771ebdeef9fbb0fe5", + "new_receipt_trie_node_byte": "0xb9010d02f901090183029657b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 33446 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb924ea004", + "nonce": "0x1b75" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b74010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a046d55d3d1d5fda915b31215a5483a560357debe03575b96f4b756990b071774ba072e55b97c7176558c90bbf4f85b3858311775f725b3de0caf1b55bfb73278c19", + "new_receipt_trie_node_byte": "0xb9010d02f901098083031050b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31225 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9249a361", + "nonce": "0x1b76" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b75010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0eac70eb624c13c420946b50f15f233dad3e220ab98bc852fdf4a3b6aa33d92dca034044efdbd54b2c092f62452a9ca0597c442971806f9ca8a2d0e0c2c03ac069c", + "new_receipt_trie_node_byte": "0xb9010d02f90109018303c6afb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 46687 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9234907c", + "nonce": "0x1b77" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b76010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0ff0344f6878e34c21027463fc2b185f585b01f878e191ae5a65e53f07a9bfa16a04fbb0dcfc79d90d1a3a48551e3b00e9f3cddb518fa95cc27e293c207ac42f267", + "new_receipt_trie_node_byte": "0xb9010d02f90109808306c962b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197299 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb923038de", + "nonce": "0x1b78" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0x28", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b77010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000011000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0e30693882404a436518e809f8a46d4884d5d18ab50a84399ebab7c7dd6f9eb4ea03efddcea7e6498d7c096dc0d3671c2e7a4e3273ca19a7fe9063bb4cc228c1468", + "new_receipt_trie_node_byte": "0xb9010d02f90109018307682eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40652 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb922be00c", + "nonce": "0x1b79" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b78010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a042c4f4c955b9257a8e1eb58e83234eb986f5f79725e6f33d638e98c2938f3bd6a0509f68a67ec8662cfe5aa94b293447989f3174798078ab39776057d69b1f039b", + "new_receipt_trie_node_byte": "0xb9010d02f901090183080726b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40696 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb92283d4f", + "nonce": "0x1b7a" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b79010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000013000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a092da9c6c9af65063dc8a1793a538ecad0480ac73931b906d1d91018f3dc3a10da032fbdcc91ace4a56783188103c91fd90ee27290ad467972343c8d7cc5cbdda88", + "new_receipt_trie_node_byte": "0xb9010d02f901090183088c1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34037 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb92228e9f", + "nonce": "0x1b7b" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": { + "nonce": "0x1" + } + }, + "meta": { + "byte_code": "0x02f86883301824821b7a010f82cfd08080956300000000630000001560003963000000006000f3c001a0ae687442e6a9c718d267aa1dc13a5f6abe28c10a76fd756b4ccf2a6812a12c58a00edac4ab1e96efe53c5f1a490d61ad61056ce6958485ff94a3a9ac8c1e774a3e", + "new_receipt_trie_node_byte": "0xb9010d02f901090183095bebb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 53200 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb920dbe8e", + "nonce": "0x1b7c" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b7b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000014000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a02648e3fe071d71244cb9320831c1ee85df7c82b2fee61353f326641b9df505eca0579268982760f0be4bff5895572ef78d1ed0ada81a1b7cc76c6a7e2f6151e9c2", + "new_receipt_trie_node_byte": "0xb9010d02f9010980830c5512b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194855 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb92096488", + "nonce": "0x1b7d" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0x37", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x14", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b7c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000021000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0d4b217ad8d242f1f0aeb49253b7d4325e466729021472620be64ee3ac1408b3ca039bf70d60b6a4739edf551ad3f53256290f4fcc78cca424fb6e9968bbaafc54f", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830cf436b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40740 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb92072646", + "nonce": "0x1b7e" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": { + "balance": "0xa" + } + }, + "meta": { + "byte_code": "0x02f86883301824821b7d010f83030d4094cb16ecdb5df7104defa049209c75b33ff1dae6030a80c001a072629ea0d8bb3dfd20901584cdd38c23aca5fa61018bf8bccd9175405c79eda9a04f9146197c5da6ba030d10471cd844e2691365f50bf2b497db95b0ef0a2dac08", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830d463eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9202cb0c", + "nonce": "0x1b7f" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b7e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000022000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0bc9fc4e431febde2507b97e7b49c9d83d12ab0765d71d209e63f1a3f3f7d37aea0724c414f00c66722880404c68538c5165ec17bda91ecb4c9ed64fabfbb44aa47", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830de58eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40784 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91ff7533", + "nonce": "0x1b80" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": { + "balance": "0x19" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b7f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0a604424478f41ceaeba3b94a98dc77bd67c5c668330db64275316f1a1754ffb2a04f3ec9a967ff1621afa0cfd451e1eafbb838ce7a460b827f904778c9cc8c6087", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830e5f87b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31225 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91fbd00e", + "nonce": "0x1b81" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b80010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000023000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a01586853e136b7e08b64b1f62d8ec87e46ad8d0243cdfe32488ff1371a45e2069a07db87d012ddba8c8c41cf22d7e066ced10eb947615d8606cd2d9cf5aef947c10", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830ee4d4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34125 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91f8799b", + "nonce": "0x1b82" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x2d", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b81010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0576dfb27e4b8ccf2f3e896ece50a754e249a75a9f1f693426843e54f03e0f7dba04d936afe92b8b825a30875789e34a892e4ba61f5586818379cd1717d91a1d0b4", + "new_receipt_trie_node_byte": "0xb9010d02f9010901830f5ee3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31247 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91e3a975", + "nonce": "0x1b83" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b82010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000024000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a0860350d7d2b52c028985f3fb8ed43ac300cef8e9d8fd5aed26c130665d55d476a07da1b18b79d5744473834f672f920f9e2935810adc9c4ba074a4cb7fdad2f505", + "new_receipt_trie_node_byte": "0xb9010d02f90109808312580db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194858 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91e109b1", + "nonce": "0x1b84" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b83010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0f0743f89907e0e295924f3ebf774a1c9231e032544f1155a9de3ffd6c5fb3448a01c54f588eff178c8d01c8dce9859d9d56b9eddbfaa45d460e42b56f0cf23f90e", + "new_receipt_trie_node_byte": "0xb9010d02f90109018312b803b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24566 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91de6953", + "nonce": "0x1b85" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b84010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000004000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a01a67ebb141722794c05637f40a61c941997e9b3d9688f9c6f84b12290a1fe7bca06d73198621dcb03ed171deedfbdf3a576da27c2cb20dfad8ff8943b273e1b634", + "new_receipt_trie_node_byte": "0xb9010d02f90109018313180fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24588 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91dac42e", + "nonce": "0x1b86" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0x46", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b85010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000031000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a02d2f9d77a6848dcdfe6df5864bae99a6715b9a8c024e5ceee6879769c7b20668a076410b80c73c10eb286bb7bd6c1f699b0515bfcf003b7f128dc85814549fc8a1", + "new_receipt_trie_node_byte": "0xb9010d02f901090183139d5cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34125 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91d71dd5", + "nonce": "0x1b87" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x46", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b86010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000032000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a0e640c05626374c1280ecc1d7a2286799d31ff8a32f2355476e7b96d696ed0f2ca05b1ce193e4336febe26abb6c758b4ec1ac1fb397314913c9a1f99c001e0ec73f", + "new_receipt_trie_node_byte": "0xb9010d02f9010901831422d5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34169 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91d302f2", + "nonce": "0x1b88" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": { + "balance": "0x28" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b87010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000011000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a00a12763aab8c760640cb2e75b2473b4d4491873bf40fa9b8298b31a89ff89854a0319091bfbc619da86f3e0ef82b8d0dc28569b91be674d866bfd564eb92229dfd", + "new_receipt_trie_node_byte": "0xb9010d02f90109018314b8f4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38431 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91cee6db", + "nonce": "0x1b89" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x4b", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b88010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0a2a73a4233d69ec9275c719bb7ad560c3b69a926cee19800ee4084f99968a3baa05b830970a4f7d67bfd38cdba4c7c51eeae3620a896c0a094da70be2061721ec3", + "new_receipt_trie_node_byte": "0xb9010d02f901090183154f3fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38475 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91cbf697", + "nonce": "0x1b8a" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x55", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b89010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000033000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a03ddcd4d7ef97e36da0f8f8002faea383eed5f83e98d875400cf3cbc47404e038a067dc018532234204468066b321fdf8f63da041adb401d912dac915b6a7bf53f9", + "new_receipt_trie_node_byte": "0xb9010d02f90109018315bab5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 27510 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91c89095", + "nonce": "0x1b8b" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5f", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b8a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000013000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0b968b06522213eb91f18b08df6f29b20771237774acb49778446f29be7c83015a0579834124ea61abfa4b246c58b4050cafede52ae47b031f0540ef8c5088326af", + "new_receipt_trie_node_byte": "0xb9010d02f9010901831636fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31816 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91b3c706", + "nonce": "0x1b8c" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b8b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000034000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a061259826f31cabf728427579182b13b25e50928d1201e5d714120d367a020e52a0499e8c7331fe2b2ec1b48cad40195eefe7ff8791d000d5384d83fddf24994442", + "new_receipt_trie_node_byte": "0xb9010d02f901098083192f36b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194617 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91b05fd0", + "nonce": "0x1b8d" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x69", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b8c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000014000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0594e4feddb9531b170875e3fcaf5cb2aab02ee365418a83bcad4337f13e24859a07e766e1bdc4e8db7fb1ca28675cf82cb97c8d024e3238f6de83959696aab33b2", + "new_receipt_trie_node_byte": "0xb9010d02f90109018319abaab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31860 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb919b4dd9", + "nonce": "0x1b8e" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b8d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000041000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a01fc3a09d0fed1b4181655ecca81d3b7f720713a3ad22d2ee165e80d132505478a020b6aaf9bbcff7b935e9787419d7c0c71cb07e08d5e9e565d84659dbb2d0a61f", + "new_receipt_trie_node_byte": "0xb9010d02f9010980831cae3bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91868068", + "nonce": "0x1b8f" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b8e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000042000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a06ce4a43c6c59f5505829ef3cd1989fb5404b76b79d6b3d6cd9b158b631384c21a03ffdde960a79897aeec1a79d00b8b50456cfdac47f32ba22494830c11a2e0153", + "new_receipt_trie_node_byte": "0xb9010d02f9010980831fa702b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194759 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9182631d", + "nonce": "0x1b90" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": { + "balance": "0x37" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x64", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b8f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000021000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0e1303697bec4c7b2a07cff6f3854fa316d54a2ff47140ff6ad819b5bc7dd786ea02e0810da7d55e4313d2fe4b057a89c58f63748fd28c4c7e94528d3a7e3a49aa5", + "new_receipt_trie_node_byte": "0xb9010d02f901090183203d79b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38519 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb917e449e", + "nonce": "0x1b91" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x6e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b90010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000022000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a02cd00dbbbce95b42aaf0a150a1ad7f5abc7569dea13667eebe021d11a46736eca03db2932509aa09e5a90fd054b6a68f98d30ecd0a44a28869016d519e516f5a58", + "new_receipt_trie_node_byte": "0xb9010d02f90109018320d41cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38563 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91697b01", + "nonce": "0x1b92" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b91010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000043000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0497d58983162755c1f5159e414eac7abc61d3e888db5dac3d2f2ae65c7948d0fa030de3b557de4e915e1950a4824c5282d91de8c59db82ed87a7bf54b4ecffd018", + "new_receipt_trie_node_byte": "0xb9010d02f90109808323cc57b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194619 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9154b15d", + "nonce": "0x1b93" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b92010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000044000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a03fa79d3787955413e2db50fcd2706aafe836aa505ae07ce1c6a48fa7a64d5e69a03c144e77cdfa5f9f1bc90a1e8263bfdba8686e47f8403c76fdd8c071f5690ce9", + "new_receipt_trie_node_byte": "0xb9010d02f90109808326c493b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194620 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb915148f3", + "nonce": "0x1b94" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x78", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b93010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000023000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0534e41c4d86f67e5614426c344eded5ac4ac82fa33c04a3f2b94554aa614fd8ea00b29cad8c38491ddca03a047519386028659b1da012aab09138b1fe9119896c3", + "new_receipt_trie_node_byte": "0xb9010d02f901090183274133b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9142e274", + "nonce": "0x1b95" + }, + "0xb47ab8fecfaa8f15f08a1679be740ea73f1dfd23": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x600160015b810190630000000456" + } + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0x64", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x55", + "nonce": "0x11", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b94010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000101000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0a5ef94e3ab86b2e58c1c3b59b3354c231635621be6efd538b3b6f04fa66e99b8a040c766f387a0296e31fe5f12b4d3c7e37db074a61aef53b9b9f45f02fbfd4dcf", + "new_receipt_trie_node_byte": "0xb9010d02f901090183294fd6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 134819 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb913f78d6", + "nonce": "0x1b96" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5f", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b95010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000024000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0921146ab0f4ef501ba669aa6eb7aabe3482f21ce5566c5aee917b89eed401575a044029343e5a6f5d36096e740e77e35e36a682ccd8e5bac6ae6875681bfe6e07b", + "new_receipt_trie_node_byte": "0xb9010d02f90109018329cca2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91312d15", + "nonce": "0x1b97" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0x82", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xe02b4fa8886f7b02b63d74b694b441008d065226": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0xfe60005260206000f3" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "nonce": "0x12", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b96010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000201000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a00e64f571a9c1b37a70b0fa9a64615800192932cfc1f0f100201e839f3a6d83dea02dbb3a3ef09fbd901fcc2ca1e177b271f1c805b35bdf9895f46a43fc71591b27", + "new_receipt_trie_node_byte": "0xb9010d02f9010901832bd773b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 133841 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb912dc4ab", + "nonce": "0x1b98" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": { + "balance": "0x46" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b97010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000031000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0c57497d8e85e491fe8981ca11dcf4fc888d216915be1f087beafa964d76a5a30a0542c03573c47331177b817e2501bc0f209c05a27ce87fdccc68a7ebada1a35e5", + "new_receipt_trie_node_byte": "0xb9010d02f9010901832c5413b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x8824f50426d79aa53383c30de68971b6f560ded9": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x50" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb911fa410", + "nonce": "0x1b99" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0xa0", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x14", + "nonce": "0x13", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b98010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000301000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a00d692582b1d1bb3e4214de3feeec152eeaa7198b90c949b526ba805bc3e19338a0402b1c9a74229929137d8f69f1aca11e7a2eaf613aff7439cabef92fca62b34c", + "new_receipt_trie_node_byte": "0xb9010d02f9010901832e58bab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 132263 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb911c3a72", + "nonce": "0x1b9a" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b99010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000032000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0273481a86601d7afac1011bc70b253bf3b5016b78e3367f13d1ddeb1ce62b5ada02bc7c8a211ba10eff599a86d6e86c5ba2f14f380ccf400f5ca3a1416a76e8f15", + "new_receipt_trie_node_byte": "0xb9010d02f9010901832ed586b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb911986e9", + "nonce": "0x1b9b" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b9a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000033000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0c34c638ea3299a1ceaa82323ad6f7ba6b47b74ca49da150eea3c64b4886cd877a04c3c13e3f8166be7b7886d06c1c396eae87e2c4ea83e9a86f014221aaa0eac42", + "new_receipt_trie_node_byte": "0xb9010d02f9010901832f384fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25289 + } + }, + { + "traces": { + "0x15d9f947c070037a44d7d66e81cca0fbd1c75d49": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x5b63ffffffff56" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb910b44e4", + "nonce": "0x1b9c" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0xbe", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5", + "nonce": "0x14", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b9b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000401000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a08ad6eb74eb65fe43a2109e55a715e4ff87342436e55a19353d4c3064c60b9aa0a017d06fa736e4a314581a998d79d7084b37aaf09f2a1817a9f647847f71bd8bac", + "new_receipt_trie_node_byte": "0xb9010d02f9010901833141bcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 133485 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb91027ee0", + "nonce": "0x1b9d" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b9c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000501000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0050f22995b5274267553b571b4a3ce4bb3f84692e5c60c8b5df47c562b2a4968a030d41fe1880da371c904fbb62a56edc2eb8610671f4012f16a848e6c22dc4a66", + "new_receipt_trie_node_byte": "0xb9010d02f901098083328298b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 82140 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90ffca23", + "nonce": "0x1b9e" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b9d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000034000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a009d8b6ae4c2d23fbf7969a20aa563b238c4c52f00f6a4844a0546628a70b3682a070304f51fc579a9bb28b2c7e7e10d78e1ae509bcd833e3b189f5be1d5799e826", + "new_receipt_trie_node_byte": "0xb9010d02f90109018332e58db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25333 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90eab82c", + "nonce": "0x1b9f" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b9e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000041000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0fa69635ed55bbd3b82bff1823d91f1fb5c6d2a8d34feda052882f6e9b4577ff6a0753a69586b1145d7426b1d9a156a49d204b932a155f018d07fb24c49ae5f7603", + "new_receipt_trie_node_byte": "0xb9010d02f90109808335e81eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90e2a8d7", + "nonce": "0x1ba0" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821b9f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000601000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a0a9065df6cec15c93709e449ba28f3d1e37ae23357b43e64ea4a7e05a9e35cf3da0520d7ae84970e5e4e9e17480d3f8920c119590c4f4b30551a7174f3ba1841db6", + "new_receipt_trie_node_byte": "0xb9010d02f901098083370ee1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 75459 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90d9e19f", + "nonce": "0x1ba1" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000701000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0c25b658efbe93736f5091b565e8db448abcc66dc324661206056613d5bd7cc31a03fcd62b7c87874d36341168f092c95825743ee7d6481bb72118c2080b615d790", + "new_receipt_trie_node_byte": "0xb9010d02f901098083384fe9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 82184 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90d67599", + "nonce": "0x1ba2" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000042000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0b9f7c0ed9adbf210745399761a539af63334388419ac7f137bb07566e1302f95a033c77d169a933d7f437d09cdd9e1ba2df992b054a94e2179963d894122301873", + "new_receipt_trie_node_byte": "0xb9010d02f90109018338cd0db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 32036 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90cde68b", + "nonce": "0x1ba3" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xf1d875c3fb0c212dc5205ec2ef68dbd97e101c45": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000801000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a03f15a77603fb42e79170823696413adc4c0122092703a153cd3a4568d99280d5a05a112049123b74f762e557b2c998f6b197e2543a803e2a3f90b7880fe9f08182", + "new_receipt_trie_node_byte": "0xb9010d02f9010980833a060fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 80130 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90cb309a", + "nonce": "0x1ba4" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000043000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0db7275ef5f8fcfbb70b6cad4ea46038535a69f1a9a713a5c900ecb61b7f57597a04923a4b63de71e720ea212a9c46d49ce4d8c44e8333abb4ffdd849387c0133a3", + "new_receipt_trie_node_byte": "0xb9010d02f9010901833a6930b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25377 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90c0f4fa", + "nonce": "0x1ba5" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0xdc", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + }, + "0xf1d875c3fb0c212dc5205ec2ef68dbd97e101c45": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x32ff" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x0", + "nonce": "0x15", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000901000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0f486fb368f113c797ce16fac838efe7d2a0dc4f559cf89fb5d85fe21216511aba03a20b3a05e5ac8ba7d786dcb743d9524ddca4c22b99b8e399e6f4b0ec19f12e4", + "new_receipt_trie_node_byte": "0xb9010d02f9010901833bdf6ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 95802 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90be3dd5", + "nonce": "0x1ba6" + }, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000044000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0d4437d83043df631fc67b07b1f1b6783fc6c9419c47091f94f6da082faf703a7a017427bcc648284ac98685bf98eeedffbd1e6b0e0c64167e2a0fb8d4a29f86686", + "new_receipt_trie_node_byte": "0xb9010d02f9010901833c42b7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25421 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90a8e115", + "nonce": "0x1ba7" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001011000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a043a51bf40db7e29f9c7a46954dc75dc8b9ff2299c2615399ea45f755f827871ea071ec35c57547edfd7315a2e3ee8fb865e934fd41537ecb95b1ed39cba3666e50", + "new_receipt_trie_node_byte": "0xb9010d02f9010980833f4ff7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90a05a34", + "nonce": "0x1ba8" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000101000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a05edebe9b18e23260f0e75720919922fa7f4bd9d8c14cc8d4162b7b808a3cb5c4a07175a5f85cc55cb2d1ed4d3f9c5e30c71df09ef6c8314b2abafafcfcb4d04d14", + "new_receipt_trie_node_byte": "0xb9010d02f9010980834087ceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79831 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9097d2b9", + "nonce": "0x1ba9" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000201000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0cedf8a7d2e801a95f6e4dd118065bfa93c8fb5736f91f8fb7021869461358937a03758675e599152dcc2947959c623184a4f3035ebefe02df5a181a5556e374822", + "new_receipt_trie_node_byte": "0xb9010d02f90109808341bfbbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79853 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb908275f9", + "nonce": "0x1baa" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821ba9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001012000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a0f94eec365830a0080875a616284c48bbb4d8d21127334609a18d9de5c1060928a01b52e2b61bd9f58469fcd4544b5aaeb1782e7c04811383ba72993fe59fddc975", + "new_receipt_trie_node_byte": "0xb9010d02f90109808344ccfbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb906d1939", + "nonce": "0x1bab" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821baa010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001013000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a0c981f4751ade6d7bda868b9b8642ad6512979a1197c0758131e9fcff267db270a068ffa18ddee16c81b55672479b704bd07641c024eff614fc0f4fe85656a02e07", + "new_receipt_trie_node_byte": "0xb9010d02f90109808347da3bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb90649124", + "nonce": "0x1bac" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bab010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000301000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0111a7ff19defa395f888334ccb0b5b06fef6ee7ac3ea3ddc535b4f4b48c76b2fa0783212b8ebdb01cd3b9c17a0f77d5f364ebbfbc5709df6e710f79f333d3eb362", + "new_receipt_trie_node_byte": "0xb9010d02f90109808349123eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79875 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb905c0875", + "nonce": "0x1bad" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bac010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000401000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0bbdf7cb775b4e0e28704e3f2731fdaa93053ce6cf7c1f50ed776f4fe6719c12ea064e1c75bb2e832e6106bfa024ebd53e4af0286c6c7b945b1cb7dad2d7ea1e73a", + "new_receipt_trie_node_byte": "0xb9010d02f9010980834a4a57b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79897 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9046abb5", + "nonce": "0x1bae" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bad010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001014000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0a8b04f266a4e04345bf530ead675e20c5aaf8a16b598636f4ecca93c8fb3d306a00e1af3c17a5992aec30b17532b3e095170703ce2e594c05afdc0657c7e809234", + "new_receipt_trie_node_byte": "0xb9010d02f9010980834d5797b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb903e226c", + "nonce": "0x1baf" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bae010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000501000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0898d7375f4b82f4341c3a1660dcd5d12a4e4da022f508a5ab0f41f2e54620320a02cdcddbdfe4a8a6e9ad18d3b8cbab4fa6528f6f734d879f35f9c1e983e26ffb5", + "new_receipt_trie_node_byte": "0xb9010d02f9010980834e8fc6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79919 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb9028c5ac", + "nonce": "0x1bb0" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821baf010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002011000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a0af36b6c3f11a5f6ae0197e4a670ea362194705fb543a0b5ff3ecabc3a18b6de4a009659932305f08846713cea9a5aa31409eac532343c05fab457755443d9a539d", + "new_receipt_trie_node_byte": "0xb9010d02f901098083519d06b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb901368ec", + "nonce": "0x1bb1" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002012000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a03df92e057383f67d43ba224a359c4b23b3410ab326a8b6ab368d15981fbf58bca0459dc3a1aa6080c1d43eb20a531c6bb42c6aa708d7fba4994a0a58b0d6a4f816", + "new_receipt_trie_node_byte": "0xb9010d02f90109808354aa46b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb900b9652", + "nonce": "0x1bb2" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000601000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a047b2884402d924f751950d5e9ca5d2d75a54415b545c194ce3dc29fa3dbbe6fda0707fcc5a63f8153758d87d698435e25d5a00472a0dbfaa637f914ca27ed72bde", + "new_receipt_trie_node_byte": "0xb9010d02f90109808355c85cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 73238 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ff63992", + "nonce": "0x1bb3" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002013000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc001a0aaef400d464092981c1d2d5a1fd40c2b1ebe47f8923bbf1f48a61bfd269ba8e8a02c581ad515375eafc246853a9bf790386d699000862b304e8d58b14eb23c77e7", + "new_receipt_trie_node_byte": "0xb9010d02f90109808358d59cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8fedaf15", + "nonce": "0x1bb4" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000701000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a091fc427e1203b08037db66bccf54c36a9cc36db877917d177435a5b26630bcf3a01752883fc66de67de383df6dd77f97e833bc448a300e5bf0c8c11d2efc1586f2", + "new_receipt_trie_node_byte": "0xb9010d02f9010980835a0df7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79963 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8fe523fe", + "nonce": "0x1bb5" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000801000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a039487fbb250c107ee9e68ee17f2f52801efafd38b082acbbf6f48beb0bd418a9a041bfb79a5aa54681e074d11d5afd0392df059b3a8e3a9ccd054dfd912171c162", + "new_receipt_trie_node_byte": "0xb9010d02f9010980835b4668b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79985 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8fcfc73e", + "nonce": "0x1bb6" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002014000000000000000000000000c184d44272f907a8113bcaabe8b859c1fc891100000000000000000000000000000000000000000000000000000000000000000fc080a0279eba897640913531c7c4a04f3638f795c07a633fe62deaab3d3664f745fba1a075e72e9015e62754be54a1bd2af6a6ce1199fc1f2f966f93ee8ab2e928aef48f", + "new_receipt_trie_node_byte": "0xb9010d02f9010980835e53a8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8fc7f2d6", + "nonce": "0x1bb7" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xcb16ecdb5df7104defa049209c75b33ff1dae603": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000901000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a08fbea5540651d70406ed11d4c0140e538ff342b0495b6717ad224521fc9fdf9da079463a44b66909a6634d71ae01386c1e6188eb2ff1f9aef661babe5159f1410c", + "new_receipt_trie_node_byte": "0xb9010d02f9010980835f7200b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 73304 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "nonce": "0x1", + "code_usage": { + "write": "0x6000355415600957005b60203560003555" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8fc1dfda", + "nonce": "0x1bb8" + } + }, + "meta": { + "byte_code": "0x02f87983301824821bb7010f82de248080a66300000011630000001560003963000000116000f36000355415600957005b60203560003555c080a06ccb7fef5e02dcaf8c004fb749a021927b682b347dc9b7bae618fe72f88b0565a07b0f6ee25bd6ef914705ec86b89435c06cdcf6c5762314ed65d6ac00e0d1ab5b", + "new_receipt_trie_node_byte": "0xb9010d02f901090183605024b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 56868 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8fac831a", + "nonce": "0x1bb9" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bb8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001011000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a03f90f095bbb56a31d7d30a55ff9568628e1c3f60ce5ab98ac2b3a575c137d049a0704232bc91453abc6d924162474c00bb36621e03264813e9bf75ac2fb4bf823c", + "new_receipt_trie_node_byte": "0xb9010d02f901098083635d64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0xa", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8faa07bb", + "nonce": "0x1bba" + } + }, + "meta": { + "byte_code": "0x02f86883301824821bb9010f83030d409486a500a930bb8fd4eb5706160f6a53b09df1bba60a80c080a0cde7d0aa3481ea82f47848a55a755e3d8b729d8c3a721d0359446d8c90a6d539a008d6df366ee068ac6ade129cd3d03397f2b0433eee1ab2e33b95f5dbb5e1595e", + "new_receipt_trie_node_byte": "0xb9010d02f90109018363b827b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 23235 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f94aafb", + "nonce": "0x1bbb" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bba010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001012000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a0465773b67bc1ad6db0b759617a11848ca6cc7a76cdee2da06ddffed9e9302f79a071550af870d1ca535d9836a8fc1fd1de0a0204f422a5889a94769512378c81af", + "new_receipt_trie_node_byte": "0xb9010d02f90109808366c567b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0x19", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f911859", + "nonce": "0x1bbc" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bbb010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a00ee3bc065a73660bf97454692dbd185c6541e0abbeb73ab348892a2fdaca32a8a04adc5a3690c897b1fe46dd1acb984495ecfa2c5cd389b17e0e4ccabf7f162ec7", + "new_receipt_trie_node_byte": "0xb9010d02f90109018367480fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 33448 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f7bbb99", + "nonce": "0x1bbd" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bbc010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001013000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a0338b69e62afda5a5debbcb0602b318dc72831d2eb78801ae6736fe2a5e725d30a0131e4f64c4f35744c36e2843837c7f0b6c15b1405e285a5844cf3b2e96b0156e", + "new_receipt_trie_node_byte": "0xb9010d02f9010980836a554fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f782b74", + "nonce": "0x1bbe" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bbd010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000200000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0f78d756130f043d16e81e41054f9e892acc72471547c668ec692e25d64121cb3a0076ba654ae8b1c11208b07bef7143ea4c5c791d6b9cd2a3036093286028fcdf7", + "new_receipt_trie_node_byte": "0xb9010d02f9010901836ad79cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 33357 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f62ceb4", + "nonce": "0x1bbf" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bbe010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000001014000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a08cc0ed24077412677f513b1a1eb54ee46dcda2ec592b58ff465db82169a49916a0607c35e5da6e6960f0ac7abda5954634b2e0f5bfe37bd1fb7387be9250042f6f", + "new_receipt_trie_node_byte": "0xb9010d02f9010980836de4dcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f4d71f4", + "nonce": "0x1bc0" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bbf010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002011000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a04e6f8f0deae26426c9c6ca9229b492a9a06684ccc18db17b04bc682b3009d928a06a80c38a186a91b74fd37d0d954c74df4e6a8cd45c9484e8f4bd2414114c498f", + "new_receipt_trie_node_byte": "0xb9010d02f90109808370f21cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f4a987e", + "nonce": "0x1bc1" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000300000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0449de7c8e53e78f89d81e0718a285d60f4e245f8c13ae13f8111109f7044f50ea01ede31df6e6426a764a3242b98c2cdffc8719a0b4dd248023c9e1b2e07b7fa1d", + "new_receipt_trie_node_byte": "0xb9010d02f901090183715a50b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 26676 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f358599", + "nonce": "0x1bc2" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000000400000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0dc6b91233959c9c9c673e2b70c6cd118033663d5213a0ac2efc8b753e44eb19ca05f25346961c66a35da190b4b1a48ea5c53863a59c7ea9a03a449b6a75a4a4f5a", + "new_receipt_trie_node_byte": "0xb9010d02f901098083745d03b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197299 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f2028d9", + "nonce": "0x1bc3" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002012000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a08460105265cb49ca8627ae68356e1a883d639701986f549ce6ad1399cb0576cea0716384aca49b071a445d23c3b2e4dc700facc0a48997cba69aafa72364ecf009", + "new_receipt_trie_node_byte": "0xb9010d02f901098083776a43b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f0acc19", + "nonce": "0x1bc4" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002013000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc001a02eccab9909d250112dbaf45105457d3e25a8402ac6de09cf2501702a2f28e661a02afb02ece1d475dcaaebcac1fa8d123cde871056925e343a0e8ac2e4b444a6ee", + "new_receipt_trie_node_byte": "0xb9010d02f9010980837a7783b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0x28", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8f06746d", + "nonce": "0x1bc5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x14", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a044f10e8989a86118ace42e6d5a2286eb8c17200241293286f336ff1d124501a4a057d0370e28dc9a037137538f232c84f2f531daf2dd6e2a73835ace57fa22b08e", + "new_receipt_trie_node_byte": "0xb9010d02f9010901837b1651b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40654 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ef117ad", + "nonce": "0x1bc6" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000002014000000000000000000000000cb16ecdb5df7104defa049209c75b33ff1dae603000000000000000000000000000000000000000000000000000000000000000fc080a03de1400c3bae95c1db2c4e246d7775d003564bbc6263ef16b00b72aeaa014d90a04c443dcf54547382206ba35ea640c459293cbb186c86a7207d369f9420189697", + "new_receipt_trie_node_byte": "0xb9010d02f9010980837e2391b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8eecc1e4", + "nonce": "0x1bc7" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001200000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0f0c8a65bc65b97f6c0fdc310f2e62452abf2d074112f3e09350a6fdcd7e42085a01a4aefc7f16af9a4b15c4126771d26c93eefc6c530bf40c1d33da7a98f923d96", + "new_receipt_trie_node_byte": "0xb9010d02f9010901837ec21ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40585 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ee92230", + "nonce": "0x1bc8" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001300000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a02ac226fd56e43cdf10f5343ebc411fba96de3ab94989347e8f10bfd3ae13ed30a00a7e3953fefd19ee7d8adf8c69c7e782c033273e855434007b337e67d77280d3", + "new_receipt_trie_node_byte": "0xb9010d02f9010901837f46a0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 33926 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": { + "nonce": "0x1" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ee37380", + "nonce": "0x1bc9" + } + }, + "meta": { + "byte_code": "0x02f86883301824821bc8010f82cfd08080956300000000630000001560003963000000006000f3c001a04491a5ad1cf9b531a4d596b1cba0991ba8de66bdb0ae32713b6a8769a06f0d56a045987fac415e72906d166f0cd6c45ac7a05f824f2101e733fdc76ec189a60613", + "new_receipt_trie_node_byte": "0xb9010d02f901090183801670b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 53200 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ecea36f", + "nonce": "0x1bca" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bc9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000001400000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a02dca8a515e7d8bb0bc26332c5401ddac7a50af8e363bedd4ada33d76050fd502a0722c39e0a21b1690e8cb2e0438e7f57b9cae2ae59e72ea04a45e151f90f7c18d", + "new_receipt_trie_node_byte": "0xb9010d02f901098083830f97b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194855 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": { + "balance": "0xa" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ecc652d", + "nonce": "0x1bcb" + } + }, + "meta": { + "byte_code": "0x02f86883301824821bca010f83030d40945c943c342cfc3f68bcf42f9b805787abb8c116400a80c080a06cb9f58ef05346aefa2eb93012581e454675cb0f5fee63a15a03ab6c4f1ceda0a052ddb91467c83fe857d087d26c721a8c258654b036c75a94a52cbd7b694c0496", + "new_receipt_trie_node_byte": "0xb9010d02f90109018383619fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21000 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0x37", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ec80b19", + "nonce": "0x1bcc" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bcb010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0352ba768028a8c56e1d3cf089c79bf8a52ee9a06562c06fd71af5ec444ddf2d2a0576e36b872a867d751fa818901b059c6478ad7754e18201dcaf6586bef6a5691", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838400c5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40742 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ec3b2e8", + "nonce": "0x1bcd" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x2d", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bcc010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002200000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0d5e799952ee4d7e79114a0944379f2490bd3336a1ca61b30629c70827ad4003ca0358930c55c11d49c8a4123bea833df596a744c3e3e08d356cec62020ee3e6a47", + "new_receipt_trie_node_byte": "0xb9010d02f901090183849fa6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 40673 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": { + "balance": "0x19" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ec05d0f", + "nonce": "0x1bce" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bcd010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a012e81cf00d2d2df673dce1992446f877d1a9337758c22ad1e74b2a7dfd6a145da030686a0d7cbe4890011ced139674adc9e936b6d4f080349d6d1285ff13df244f", + "new_receipt_trie_node_byte": "0xb9010d02f90109018385199fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31225 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ebd069c", + "nonce": "0x1bcf" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x32", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bce010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0594e663b24230809d4fdf2de84130e266d06259ba30564cabf67b3045974708fa04d94b6501b49ab30493e1c9f7b1327de554b1bce5dc7df7b69a07257fad9fd35", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838593aeb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31247 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8eb96480", + "nonce": "0x1bd0" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bcf010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002300000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a02fe6cfa24e5d6604cf21ee17276135a92fa7ecef4e28c45fa9e0acb027c22ef6a019a8e127765338ff1587a09be73fb04309cd1899afc631bd798c3ee2714e64ac", + "new_receipt_trie_node_byte": "0xb9010d02f90109018386188cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34014 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8eb6c4bc", + "nonce": "0x1bd1" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x46", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000030000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a01812a4018e7706488869c6be654100f194d4dd18f13cb0e96806fd469e04c873a029bfb8eeeb3788a82f603534351d7f9c1f2cc06581ec08d00172c8b50666c189", + "new_receipt_trie_node_byte": "0xb9010d02f901090183867882b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24566 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ea1f496", + "nonce": "0x1bd2" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000002400000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a01a18b5b24711e6e678af41695d709edbb894da8ab0e7dd719eccfd1a6c5943efa041b6ce50bcead4e3c9315ef0a35e756d01d3022805240b097de2c7927fd681a1", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838971acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194858 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e9f5438", + "nonce": "0x1bd3" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x50", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000040000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0b23b4a6578469ffcfa577374ba1b853f7fb2019ec063d61ce27f56a769cec71ea06adef792ea2a66ab242d57b8f5a3f90f6d430066b783ec2c35fdd1bf159ae586", + "new_receipt_trie_node_byte": "0xb9010d02f90109018389d1b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24588 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0x46", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e9baf05", + "nonce": "0x1bd4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x4b", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0407f1efbbfa6dce487c2403ae30b332576e8abfa87882c1899025d375746116fa0691103754db41a82ecc900003d53a523756ddc8dba91e940eebc8156e7529090", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838a5707b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34127 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e980bb5", + "nonce": "0x1bd5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x55", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003200000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a032ccd6b0a82e26e21341ba5933eae786cde7c3904c46969555681feaf2c9f131a01dddedcc40b58d84194dffa98704586491079713e1deca86fcda249cdfe0a9ce", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838adc11b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34058 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": { + "balance": "0x28" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e93f0d2", + "nonce": "0x1bd6" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x50", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000110000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a01bf0dbaceae64e3724c082d5b27df64fbd4e6c1949394abb090c554991567995a07dfeb459ff436a71eb4a19f03bdcc6de8e5b70d1830344d9d6ace330a2650f6e", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838b7230b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38431 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e910397", + "nonce": "0x1bd7" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5a", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003300000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a086c781a0a52fbeda04e168f3878ff19e71e06540da7aaa555931910503497e17a057ceabc0f42f26fbad66979f240341b86f88bb95925aff74a88fee54aff253b4", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838bdd37b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 27399 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e8ce780", + "nonce": "0x1bd8" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x64", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000120000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a09e9086c4edd0d19c974f6f03387416992091c43ea0c0414fc1235b77c7c4da2ba0774fedba72768ea0ec657782ede096e4ecf3f2c079edcba2e62eaaca45891cd5", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838c7382b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38475 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e89817e", + "nonce": "0x1bd9" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x6e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000130000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a0b91b1c03b70d4d6d7d2f3e40a47767fbd62284da906b8894fa844fb589c5f7a5a07bb6a320275b80b08b9502539c931ee41f7f51dc9d2de603551155421d341c7f", + "new_receipt_trie_node_byte": "0xb9010d02f9010901838cefcab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31816 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e74b7ef", + "nonce": "0x1bda" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bd9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000003400000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a03161c7f07c3a3e1bec0cee03e7e7422ef493813283cee5996a112b3d3fffa743a0048cd6b182f1cec629dd3b101bb69b1316f6ebe9399b883e5caa03d073682646", + "new_receipt_trie_node_byte": "0xb9010d02f9010980838fe803b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194617 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e7150b9", + "nonce": "0x1bdb" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x78", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bda010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000140000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a0150f2bac249e4674623768be1276c567e95104d3e3a1305baac550f664a5ef91a0265fe942f10aa93669717feb936181d59dd5ae6aee0b824d6020c11c8f6728b6", + "new_receipt_trie_node_byte": "0xb9010d02f901090183906477b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31860 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e5c3ec2", + "nonce": "0x1bdc" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bdb010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a09c5ef769cfec83cbdc2d7c2581554a6fad4069ac40587f11a87acd399979a9eda07e5e32d75d97bdcd5c47e6a048f6557eb89538038eed09888d5f15bb3f45c7b6", + "new_receipt_trie_node_byte": "0xb9010d02f901098083936708b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e58990a", + "nonce": "0x1bdd" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x82", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bdc010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004200000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0daf6c06f9e5df382a8437d3ef021ad9ab1b9e3c94984a2b103c85c929b7a2769a04f4f28af5ecb12eb920f6d4ec7711ace2487bb60c8b96ac01906b23bf02a0f54", + "new_receipt_trie_node_byte": "0xb9010d02f90109018393ec6ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 34146 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": { + "balance": "0x37" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e547bbf", + "nonce": "0x1bde" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x7d", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bdd010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000210000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0c76394b41bf78012af8e5e1adc0e76528b9cafeb3b2270bfabfdd7a9acae654aa053a710d0b384eca9b6a55bde9b819cf3828080fdc0d254f2ae1c44c3220158b2", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839482e1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38519 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e518c1c", + "nonce": "0x1bdf" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x87", + "storage_read": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bde010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004300000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0afab26e1597ed5241be95b9afaa491fb979d5ad1c838922d8814332cddd8ee15a05840ff73202d5abdf1fc46e98536db8dd611c930f10bab57184c58a3871f17c7", + "new_receipt_trie_node_byte": "0xb9010d02f90109018394ee40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 27487 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e4d6d9d", + "nonce": "0x1be0" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x91", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bdf010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000220000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a031ce5bd9587f0263dab47d28eccc2bbd8c89aea1b5691c26cb9775c0bc2333a9a061de53732c691ed79a37139c477a28482c07681b3b007b5f310b9abf9270c386", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839584e3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38563 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e38a3f9", + "nonce": "0x1be1" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000004400000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0b06b689251c7f4392d33d7d172b990e0560aa61f00e9e64a10682cbabda2ce8fa067afa384d6618c4df5838e589e1b2f5ce4512e9b18681b267b08ffb9d746bbc4", + "new_receipt_trie_node_byte": "0xb9010d02f901098083987d1fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 194620 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e353b8f", + "nonce": "0x1be2" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x9b", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000230000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a09f25a1efc8635d4ef2c0028f7b6ca91aeda61b74cfe6309eb76d3230a48aa437a05f3da4b9147fbc01c85f0499b5391e7280f572c595459192296fdc48fd7c73a0", + "new_receipt_trie_node_byte": "0xb9010d02f90109018398f9bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0x64", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e26d238", + "nonce": "0x1be3" + }, + "0x95e20b14e3645ccbf85686d285ae56ae988c6836": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x600160015b810190630000000456" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x78", + "nonce": "0x16", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000010100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0ace85e1d86d60bcaf61632f798809fa9036e29300a91b9d0fcc2a3f2f5ad45afa069eb93e187f4ccd4cd5799ae36a3bc7b4e406608abbeb2f4e4aa353065224f97", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839b08cab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 134923 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e23689a", + "nonce": "0x1be4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x82", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000240000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0a8fbda4e2c71829e1c981c7667ee73f458cf10ebefbcd0ba7804b1349eca5b36a003632536bca8ee4ed2f6c1bd75135e19c4cc22287c1df2006ef3fb4288c79593", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839b8596b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x5a09159b55d55be8cf906b480bdbd2689e71731f": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0xfe60005260206000f3" + } + }, + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0x82", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e151a01", + "nonce": "0x1be5" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5f", + "nonce": "0x17", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000020100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a06aebb180f4cb780d7a6910deff599f11311ad2e17ea4a518ac90cb59763980fba07b91a6eb1db65d3bf2341dc0be9ee029ba695053a0898563c3070c7266d0cd5d", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839d90cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 133945 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": { + "balance": "0x46" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e11b197", + "nonce": "0x1be6" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5a", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000310000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a079d4992735cf90c09307094d3916a58c994f0630561fdfc7be58e7c372e36e54a03bcadc74b91094af271e50d77ed17abbcd9fe2941a1a6746ad642b4b52e6a56a", + "new_receipt_trie_node_byte": "0xb9010d02f9010901839e0d6fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0xa0", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e038e24", + "nonce": "0x1be7" + }, + "0x89ae2be48249ae544a1cc9da0c3d5b10b4af16d1": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x50" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "nonce": "0x18", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000030100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a00e914d001240b000022d409c791a76283805b55a019f6e105f44bb5e290706aca00a19b76bfc56943ac707966cc7b4f8e70e4df6925ad1bf6c63a68aecfb89acbf", + "new_receipt_trie_node_byte": "0xb9010d02f901090183a0127eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 132367 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8e002486", + "nonce": "0x1be8" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000320000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0d7dab223ad0e3669fc49e0ecdb716422114761c24959092b321aaa5a2d1396efa05d8b85d813c50d433a48e52fa37ceea3c51e2325d4fc6cffb65594dcd26e16da", + "new_receipt_trie_node_byte": "0xb9010d02f901090183a08f4ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x4e000aff04e32580159b5046d0fc7ee3c291b3de": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x5b63ffffffff56" + } + }, + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0xbe", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8df1dfa9", + "nonce": "0x1be9" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "nonce": "0x19", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000040100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0e9fe9b977f38c131b10a763637a74ffcb262918fc3998fab1afb590cb6e6d3f1a04d936741accdd9344bd7577a15fc9f431bcbe33b582f12064d55d062ec2f9dca", + "new_receipt_trie_node_byte": "0xb9010d02f901090183a2991fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 133589 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8def2c20", + "nonce": "0x1bea" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821be9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000330000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a023b132f1a5b024512710b51dc1d3d1036b88c8b70218251a9f9a36599a6a1611a02637c2fd6357afb8698db2456f5bd512d8adb6044778b732366ee483595e02b3", + "new_receipt_trie_node_byte": "0xb9010d02f901090183a2fbe8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25289 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8dec7763", + "nonce": "0x1beb" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x32", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bea010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000340000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0954dc5d003d54e30524bb3bc1b4fc8b30dce9ec4e6c55c37a888ba64dff2831ba020c8aada7b0cb8c1eeafc6211daaed4c1eba7807b5d364039b67b4d739f41bed", + "new_receipt_trie_node_byte": "0xb9010d02f901090183a35eddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25333 + } + }, + { + "traces": { + "0x68417389258d8bd279a5deccfdadb52a0840ba2d": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x5b5f630000000056" + } + }, + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0xdc", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8dde2c74", + "nonce": "0x1bec" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "nonce": "0x1a", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821beb010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000050100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a01895c98ee195c60072d1690cc65256d2ee24110a28acaf34b9eff5093ddd98a8a027198914ae41fd22b131cbc8a278e06a263f1bea754dd0fa5ef684c9cec6724a", + "new_receipt_trie_node_byte": "0xb9010d02f901090183a56990b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 133811 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8dc91a7d", + "nonce": "0x1bed" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bec010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000410000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0583f2d9f78e39421ace2eb7f20338dacb4ab90ecccea58ef3c47fb560039f09fa044ba2572e5a727541f5f6ba2250006ff4da6622db25670cfeb8c509b49abe276", + "new_receipt_trie_node_byte": "0xb9010d02f901098083a86c21b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8dc10b1a", + "nonce": "0x1bee" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bed010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000060100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0a519ae07590c4d3e69fd34d0c66726995317acbec557331dbce0c4bbf0e32931a0630cff931d0ae3560c7bcfd9df7d1f9c62819587b526bcece821b7b25c3b8a4c", + "new_receipt_trie_node_byte": "0xb9010d02f901098083a992e6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 75461 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8db843d4", + "nonce": "0x1bef" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bee010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000070100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a009a4a7cfae3f9baf9be7d486d408378619d3db3bb95a04701d09670eb87aaa94a05b1f1cb1ba8496a771e7a7a6a6ed17ffa1252763a59521e9b653206f1322c53c", + "new_receipt_trie_node_byte": "0xb9010d02f901098083aad3f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 82186 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8db4d7ce", + "nonce": "0x1bf0" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bef010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000420000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a089eef4bdc6da16013d5200ec617db7e66343c41f2a70b7f1cc4cb2e546f045bba03ba0bd7aa1de0f18a5bfb3833f0fe577d02fc9e79e3162491293b62af343b31b", + "new_receipt_trie_node_byte": "0xb9010d02f901090183ab5114b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 32036 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8dac48b2", + "nonce": "0x1bf1" + }, + "0xec5f5d9e08ff0ab3b0a2d1ab048d0e7c4731b1f6": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf0010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000080100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0fe181c8381ed011fa66a4aee15ad1998f7e11bc332bc3f0786c4d6d970d1b820a04165db89ba579f830c8f84dd3a2f60d4d86c9b9daf27c95e47fa817c50f32ddc", + "new_receipt_trie_node_byte": "0xb9010d02f901098083ac8a18b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 80132 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8da992c1", + "nonce": "0x1bf2" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf1010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000430000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0d9791207c67eec9894887f58c1eaac79dbd8dcff48469d132e884016a4ec9a6fa058604d4249c4f81c05ad379519c99127e4032ad3fbbda349279ec65c0afcbd1d", + "new_receipt_trie_node_byte": "0xb9010d02f901090183aced39b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25377 + } + }, + { + "traces": { + "0x86a500a930bb8fd4eb5706160f6a53b09df1bba6": { + "balance": "0xfa", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "read": "0xdb94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d9f5449", + "nonce": "0x1bf3" + }, + "0xec5f5d9e08ff0ab3b0a2d1ab048d0e7c4731b1f6": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x32ff" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x0", + "nonce": "0x1b", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf2010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000090100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0c4c3e7a14ab63d6008daea42434eb95c0133f56e70731954d9a21c9f40e661b6a0781212d7f5883c54765fa37c137c393e8e764033f478f0828f2533d627e27529", + "new_receipt_trie_node_byte": "0xb9010d02f901090183ae63dbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 95906 + } + }, + { + "traces": { + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d9c9d24", + "nonce": "0x1bf4" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf3010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000440000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0112d18fe5ba0fe95288cb52066eb340e66d2b9e6bdcc4cddc6cd8b5fdda49211a02ebbf6f1bfa3301717a37b4c344eae4af536d6b0c22f52bb249702d81179e8b7", + "new_receipt_trie_node_byte": "0xb9010d02f901090183aec728b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25421 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d874064", + "nonce": "0x1bf5" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf4010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000101100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a07088f7550a9c3d8b331add63140deae54f10478858d070a3b7b1deb10d9bf580a002c74b258064050951fa216c64ddea59d63a698f7d7dd419edb8c4b122ae6e56", + "new_receipt_trie_node_byte": "0xb9010d02f901098083b1d468b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d7eb983", + "nonce": "0x1bf6" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf5010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000001010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0733eb4c97ccb2ce8fc1ef577f91c5c87574eddf4bf026c4c11b9ab51c84dac27a06c95e51f570aff6fce1a243bb7867f3876b1fb04931c6006afb2c513da7707a2", + "new_receipt_trie_node_byte": "0xb9010d02f901098083b30c3fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79831 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d695cc3", + "nonce": "0x1bf7" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf6010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000101200000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0ce27ef03f04a0acd0cbcf6de5e227151a5913d3e75bd199499156edd71b9cd38a00ee6e85a69337c767835aad5af50b1ec41921539e25209d7ddd5f5785b3a4cad", + "new_receipt_trie_node_byte": "0xb9010d02f901098083b6197fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d60d548", + "nonce": "0x1bf8" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf7010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000002010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a080e5d624ed0878c3ab16da39f52689b36cdf86cf3b01be3abc65a3033a22f33fa057a38935ba268eedb198a83a83c77c849b5a80224d21dc03b2cebf552af4c2d1", + "new_receipt_trie_node_byte": "0xb9010d02f901098083b7516cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79853 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d584d33", + "nonce": "0x1bf9" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf8010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000003010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a01385906be800883c0e013f371e8c09500bad87be70f96b1df52d48bc5c75bbe0a06e2ffb7a3865cd5f160a9aedac68250f1daa20904688067038656bf3efbf8da3", + "new_receipt_trie_node_byte": "0xb9010d02f901098083b8896fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79875 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d42f073", + "nonce": "0x1bfa" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bf9010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000101300000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0633c74226aec9900e563a561761e48807dec60d6621bdee2ddf342a5151dc4ffa04bc49c58826511cc2b17cf58a752bf1fe027a78dc638d3c81f37c1a207e33050", + "new_receipt_trie_node_byte": "0xb9010d02f901098083bb96afb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d2d93b3", + "nonce": "0x1bfb" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bfa010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000101400000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0a38cb1f7ed6bd832092073f7fd82f4b95d60b3875713464515fb45bac338eeb1a00889a9203441a02a5ff1c93708056db7441223204faf93a13fbcfc95e7e0ca0c", + "new_receipt_trie_node_byte": "0xb9010d02f901098083bea3efb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d250b04", + "nonce": "0x1bfc" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bfb010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000004010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a07d604155c607c4b773ac59f46262121eab074fc1d3fc694c25bbd7c51d591966a05c28bfaa05ece88bae8e15275e0266c09321c9ee66163aa8d1a28c427b934efc", + "new_receipt_trie_node_byte": "0xb9010d02f901098083bfdc08b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79897 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d0fae44", + "nonce": "0x1bfd" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bfc010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000201100000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0f7923b25abd607900fe8902b45679c22e1a955f0a0291e464ce6e6f26d6b384fa0796598435b99db4abd5b877af2b1ca4cedc129860fb4461559fe8944e0565796", + "new_receipt_trie_node_byte": "0xb9010d02f901098083c2e948b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8d0724fb", + "nonce": "0x1bfe" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bfd010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000005010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a0d12e29ff2408e9b568dcba3edd9dc6cf01930014168a1585118e8ebb8264ad63a0635ce594693e76fe103117e9282ceebaefc9b121799b46da31453d3e3af5d60a", + "new_receipt_trie_node_byte": "0xb9010d02f901098083c42177b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79919 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8cf1c83b", + "nonce": "0x1bff" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bfe010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000201200000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0e251de10345fae177e918d15e90ab6eb0fa9ccf7a049a1b452862872dd189221a062e70da21b6654a809ff09e9e4b9cf3155d33e0f331767f61944fa7f7781c0f0", + "new_receipt_trie_node_byte": "0xb9010d02f901098083c72eb7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ce9f5a1", + "nonce": "0x1c00" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821bff010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000006010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a07cf7c3d245fc9da55920d06b8d545f55d13ffec22291cfdecca27a5d41cb4d7ba0287a62da218740a67d1b5f3769bf515f8b916ea8b2709486279f730190fc2ea7", + "new_receipt_trie_node_byte": "0xb9010d02f901098083c84ccdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 73238 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8cd498e1", + "nonce": "0x1c01" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c00010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000201300000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc080a0ea6f1d1f0fdd8f5997acf5de5dcf62242572dad6d3c42150bf0b3dcca73b67e1a0246187e3c3b0b992ab1c5b014ef6472f63d339a6b94cfab6f1ede83e3f5f2408", + "new_receipt_trie_node_byte": "0xb9010d02f901098083cb5a0db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ccc0e64", + "nonce": "0x1c02" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c01010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000007010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a0fe14a4716ef77ba6d680cee4f013e02f8fcc1162776753be64cf39f58802b714a04f4cda4a678339aad1cba01190968f01332be995b1d6a7f36cff081660193c80", + "new_receipt_trie_node_byte": "0xb9010d02f901098083cc9268b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79963 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8cc3834d", + "nonce": "0x1c03" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c02010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000008010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a0a24b237f4066d280ab2babb69e5e486144e693c362e63f1697041974ace9a1e6a070dd3c2b09a98e03021260496c58adcc02260c50e7160a825bf6be08b6ac2799", + "new_receipt_trie_node_byte": "0xb9010d02f901098083cdcad9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79985 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8cae268d", + "nonce": "0x1c04" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c03010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab860000000000000000000000000000000000000000000000000000000000000201400000000000000000000000086a500a930bb8fd4eb5706160f6a53b09df1bba6000000000000000000000000000000000000000000000000000000000000000fc001a0d6bde6c961329f5f46189ba92666e9baa6f062ff0e7870851021eaefd3a0a475a00313164ba9b368d350fa39c90c27b9760cf4e6c5484fb612a54b6db287e00014", + "new_receipt_trie_node_byte": "0xb9010d02f901098083d0d819b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x5c943c342cfc3f68bcf42f9b805787abb8c11640": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ca65225", + "nonce": "0x1c05" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c04010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000009010000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a079d361b594d9bdced0d308d3bde80df814a70efd6b5b65f64b495f9b6cf3beada061f45c0154165ff821b3b2c40f892899ed6403d611de62e6d07568591ee1f894", + "new_receipt_trie_node_byte": "0xb9010d02f901098083d1f671b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 73304 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ca0a375", + "nonce": "0x1c06" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "nonce": "0x1" + } + }, + "meta": { + "byte_code": "0x02f86883301824821c05010f82cfd08080956300000000630000001560003963000000006000f3c080a09d55a4bf27348b116202b333a7b903eec04d97dd8372e5c338c3be93863d23caa057d618c87cb75873bd4099c05b42185d3ff4a9de580d096dcc0c9fdaf345dc2a", + "new_receipt_trie_node_byte": "0xb9010d02f901090183d2c641b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 53200 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c8b46b5", + "nonce": "0x1c07" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c06010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010110000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a03cb7481fda4cda344819b12aadbbf866ea57447982d670616ace81872b22986ba008a3fca2765533f1248e5831a9b9e7b8c85445b495e2aa7ca6758a93533a9c09", + "new_receipt_trie_node_byte": "0xb9010d02f901098083d5d381b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c890873", + "nonce": "0x1c08" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0xa" + } + }, + "meta": { + "byte_code": "0x02f86883301824821c07010f83030d40949e12d3865d18b6f5fb92569fa3fa498ac6da3c130a80c080a074bb20169e5a54588fdc0063e49ef9363de5a9006a0470e587a78695e20af310a07f248083dc95d9151d97c496a606911e53c5e64ac604ffdf1afbd0a358819801", + "new_receipt_trie_node_byte": "0xb9010d02f901090183d62589b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c73abb3", + "nonce": "0x1c09" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c08010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010120000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a026a144f11ee26e91824aaf5f5ff89e55340188c2f01dca2f1020db198319c392a040b5b92603117d6f241293b9ee0987bc2c24e302368568e7ad7284c9072b2044", + "new_receipt_trie_node_byte": "0xb9010d02f901098083d932c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c7055da", + "nonce": "0x1c0a" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0x19" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c09010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a00b1fd5fdbb5595e95f1498371ac9fadd5ed31155ab05d609da3e20023e306aafa07957831b4c37de9ca7739abaf6d395b47b308248330ea6aa0f2abb95b252fd82", + "new_receipt_trie_node_byte": "0xb9010d02f901090183d9acc2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31225 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c5af91a", + "nonce": "0x1c0b" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c0a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010130000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a047a259370acde898cee1401c4a3efe9c96202536adc3890359a25248d5b7de41a008d995f11ad29bccbe03ffa87ba57bc567be33978af7e3a4be3ffdab30d60247", + "new_receipt_trie_node_byte": "0xb9010d02f901098083dcba02b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c57a2a7", + "nonce": "0x1c0c" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c0b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a077f03da60edb809fa84dd1334824de5759942841426595c30723718c54f5548ba043e19fabdecb08a6c9e32eafd3f21590965002a20c224fe80e963fe0ed901692", + "new_receipt_trie_node_byte": "0xb9010d02f901090183dd3411b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31247 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c4245e7", + "nonce": "0x1c0d" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c0c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010140000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a0e3358a35fb032c370f476b1a87924216fe0b030b7569a688af443c8d00287862a05f178cbf7dbb508c230bddade30136af1f4e5bae4313b799f115c79205787a08", + "new_receipt_trie_node_byte": "0xb9010d02f901098083e04151b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c3fa623", + "nonce": "0x1c0e" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c0d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000030000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a085a0e727cf528210a672212f6748d40d76072eef41af65085882bdf2e801268da00d0c3ffd1522dd505d71db4cff463a4df1549a1712b4753fa02e62d4df3e159e", + "new_receipt_trie_node_byte": "0xb9010d02f901090183e0a147b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24566 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c2a4963", + "nonce": "0x1c0f" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c0e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020110000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc080a005b12ffd1b159697c4fcd3136c2640b86303c429f909c746883d3287b17be77ca0639d3460dec1a54823ff73348b589d15f1e95f81663d618269e9cb11b082278d", + "new_receipt_trie_node_byte": "0xb9010d02f901098083e3ae87b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c27a905", + "nonce": "0x1c10" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c0f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0f90aece8f80d1cf6e3cbb1e5a1942c2704ffd2ef435eda9546338dcb0bade518a0090d653c10a6801df7eb059ca732d7eeee909c716b0dc6900484730111179920", + "new_receipt_trie_node_byte": "0xb9010d02f901090183e40e93b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24588 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8c124c45", + "nonce": "0x1c11" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c10010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020120000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a08530008d7fe12bbdb31c6199c6c2946d142f576fb653127b1329f62c5a8a1494a03cce73b788b5ffebe973ce4b7e0868dc8ae6af08a17d2c63ddc2caddd2ee4428", + "new_receipt_trie_node_byte": "0xb9010d02f901098083e71bd3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bfcef85", + "nonce": "0x1c12" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c11010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020130000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a061db403446f75a3754144650dcdd0ab24896a7cfa1b9cb43b642fbc3c3c63863a0132c083dcd1ccc9683d1c8be6945bdf962777d8eadec90bb3532f6dede9c2364", + "new_receipt_trie_node_byte": "0xb9010d02f901098083ea2913b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bf8d4a2", + "nonce": "0x1c13" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0x28" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c12010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000110000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0484010e6e6c71f3eb08183c842e2b0c93071ffb81614c6bd22d1a9029cf0d551a023d3e10ac429bd93bd54755fded71b1972fedf51685cbfc041db8f9ba988bfa1", + "new_receipt_trie_node_byte": "0xb9010d02f901090183eabf32b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38431 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8be377e2", + "nonce": "0x1c14" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c13010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020140000000000000000000000005c943c342cfc3f68bcf42f9b805787abb8c11640000000000000000000000000000000000000000000000000000000000000000fc001a00c2d82239516e2792a18e157c27cfb2e2c04a7d01387ad514a87a50f6d8e9139a07352a87714ae933b5bb7bdcd720562237d6037167115d2bab574f033a71290dd", + "new_receipt_trie_node_byte": "0xb9010d02f901098083edcc72b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bdf5bcb", + "nonce": "0x1c15" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c14010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000120000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a01b3e7295a4dfacb73dc6188c54d78f412586ddab998b8667343703bafb7c9564a00bae65d8ace38534800a6bdc40a9cf9ff08f77471a55c2370fc97d3ed25de2b6", + "new_receipt_trie_node_byte": "0xb9010d02f901090183ee62bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38475 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bdbf5c9", + "nonce": "0x1c16" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x32", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c15010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000130000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0701b0db531eea3a418fb2000fb4a642381cf3f86ec784dcb5002b1539997071ca04a3b7c873f429902a1a4db0ecd0c12437a65414ee060a141c064f8f0141e064f", + "new_receipt_trie_node_byte": "0xb9010d02f901090183eedf05b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31816 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": { + "nonce": "0x1" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bd64719", + "nonce": "0x1c17" + } + }, + "meta": { + "byte_code": "0x02f86883301824821c16010f82cfd08080956300000000630000001560003963000000006000f3c080a0134d0c64536c9dfa03e692ac8cfb08c199f7f7c21d8179aa9aeb03cdb111a262a03674acf76104b91665ab4170f7700132de3b43ae770f1f325f6611645d522d83", + "new_receipt_trie_node_byte": "0xb9010d02f901090183efaed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 53200 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bd2dfe3", + "nonce": "0x1c18" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c17010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000140000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0e67c4ca5cd288e9100a6831f44c7d87aa4c5debc749f8575b7fecaa984221dcba01eb64555a08355645710255ddc02866d2598c090f961819ab9d6b44f90fe6b27", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f02b49b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31860 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": { + "balance": "0xa" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bd0a1a1", + "nonce": "0x1c19" + } + }, + "meta": { + "byte_code": "0x02f86883301824821c18010f83030d40941048c0cab85423ad892560aea91f074c10e9d3370a80c001a0ea19df4105b515272f3b67f8179c84f1c647bdd03be70d9c5182024708925097a015117e109e8fa2439d2fc9285147930ae741b761894565f5ab1278595b75f1fd", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f07d51b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bcc8456", + "nonce": "0x1c1a" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0x37" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c19010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000210000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0bf6a90e1f7c54fd912468d5f74a72f56c2a950312dd44f1d58cc56d66d640573a00d285f0b8098a2737ed743696fbb5f08395a361de113d737b04046b9d7203afd", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f113c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38519 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bc865d7", + "nonce": "0x1c1b" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c1a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000220000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0af7027604d2bacf04cc6d2beb3a74df31bd8d1fab87a0e34fee638f651c7675ca03d6c0c5257f83cf94b5c6a30d5c3b824c4a59d6643c16a6c6b731fe6b77f0e1e", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f1aa6bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38563 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": { + "balance": "0x19" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bc50ffe", + "nonce": "0x1c1c" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c1b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a0322407d0ae0de4ccc6af4621e24e9e635b9a5cb53a8ef2772ef7dfc2a6c93b68a07a3e926972a56c67f0b434aae557841e32904904087b75b33fdc9973c50b19f8", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f22464b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31225 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bc1b98b", + "nonce": "0x1c1d" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x46", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c1c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0e95c9b3e7ec3f05904868d5f57d04006bb02636ef948a2ab18878cd6f4aea432a032e1266097952ff2134c8d0a17ed98e68a26b902e7351ab2ff1d5056135cf84e", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f29e73b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31247 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bbe5121", + "nonce": "0x1c1e" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x50", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c1d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000230000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a05a207c23a42fcfccda32d3ea9b055c8459c4acc1e0a61e81c73627869414758da05cad9889a0da93d39a76b4375ba2d6a5866d2a06118e49c73e0d58a7330de360", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f31b13b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bbae783", + "nonce": "0x1c1f" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5a", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c1e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000240000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a05e5fb09d352e8157e2602ec313ab86818efe8cc471a32b6f7c72def32f5b076aa018ba9a0e85fe7bbb564cceb1ce9b52c0fff80cb68dccabbc69464985c4e12109", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f397dfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bb847bf", + "nonce": "0x1c20" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x64", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c1f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000030000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a071a1e354c528dd48dc8cdd5bc3987c0220d54c4baa18e1a70bd2b7df37caeea1a01a343752d2419fe72967d07d4794cbc6acf62ad9bfd47c29a020d69b9a3617e6", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f3f7d5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24566 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bb5a761", + "nonce": "0x1c21" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x6e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c20010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000040000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a09ba3d114d85ee03ecb1a708657e5a4f7771907b62b42323e2b488869350887b8a04e3fa626d913e20b19ac75f217b6e529b73403d3161b758180db2fce7e4bec89", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f457e1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24588 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8bb23ef7", + "nonce": "0x1c22" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0x46" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x69", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c21010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000310000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0ebdb94be59d752adb1268b6f3de95ba04dbdfe1ca96bfc79eadaa10621120a60a030db555fe80432557e9c5ee7218456239190470f198d8cb541e9fdee84870810", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f4d481b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8baed559", + "nonce": "0x1c23" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x73", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c22010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000320000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a07069084ce7b5d0a5f07024d7687f83774c4b4902925847b9aebef30d33e4deada019a249173d83277d6831e56847a6bafd4fa8d3f42f651315e201000e5e84c115", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f5514db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": { + "balance": "0x28" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8baaba76", + "nonce": "0x1c24" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x6e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c23010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000110000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a0c0222873b81040f5ac459b7a54ac3458621235148ce0bc556777c34aa90a6c16a01c4f4f5474e5e547d65edd708c664205f57ff2cdd09c33eb9c5462577bcd180a", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f5e76cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38431 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ba69e5f", + "nonce": "0x1c25" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x78", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c24010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000120000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a004bd962572b2527e18da73c450b22fd165712d52c8fb375c16a26af689831ff4a052395d253d741cb48cf783390a93517a724bd85f081934db0ba4cfc93a809f99", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f67db7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38475 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ba3ead6", + "nonce": "0x1c26" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x82", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c25010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000330000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0530aa3c8456bf06b4579463dccc81a14b7e52ccfc4645bd009088c4bbff0c1e7a0387c53c234c7b9168e26f4bd0fc9e92d413c8f5aeeeb3f94ffec8200dd5a322e", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f6e080b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25289 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ba13619", + "nonce": "0x1c27" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x8c", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c26010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000340000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0fd21d2f6542ec4cbe3835a4a271d888efa65466a909d3215815c1f83a2f8d3c7a04c19b8887ae28d4e8362a1a564a55020a70b5c0ded85f0f2a10b393d7fd46c09", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f74375b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25333 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b9dd017", + "nonce": "0x1c28" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x96", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c27010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000130000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a037279b0211af29c00e2b68277844114ad934be52b1758b4ac096cd844a3deea7a03c5124962be79152a70444f389bed76a7565d7827eaee015796c2dbe1d359462", + "new_receipt_trie_node_byte": "0xb9010d02f901090183f7bfbdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31816 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b88be20", + "nonce": "0x1c29" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c28010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000410000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a03355eca1de8f8ff8f587c001034bca105649af07823c95bf5d673254e771833ba03be969d9801fcd0561cfefd21242ebe3d0a0ad49234ae085846dbec909bb4e7a", + "new_receipt_trie_node_byte": "0xb9010d02f901098083fac24eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b8556ea", + "nonce": "0x1c2a" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa0", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c29010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000140000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a07e2591db49453d38619fcb0d0a364c3e3c6b4fde977f9e802854a64f46d96026a00b45a42d7a86d4f77f1497a16dfb525a2dd248cbe03781d2b2c72925f3b35306", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fb3ec2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31860 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b81eae4", + "nonce": "0x1c2b" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xaa", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c2a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000420000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a01c529cfe82186d39d6009e08cf1666fa91ef012c20d25b91d85646712934a94ea0436f4e95df28757618acfdfa40c94c85728def1a51c09196fa1651aa46324f68", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fbbbe6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 32036 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": { + "balance": "0x37" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b7dcd99", + "nonce": "0x1c2c" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c2b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000210000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a07806d1c68707252bf70aa437ce500135a63b14ba1a5a134acc5663479e58c193a022c342e494fa18bd8807acd525294a9f5a01a58c1174560bee5810fd1d5e8b20", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fc525db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38519 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b7b17a8", + "nonce": "0x1c2d" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xaf", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c2c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000430000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0943cabdc08ad79d3ef37e261f620b3c1c96a0eef71cbd37ac084f77a97c9c409a02256e9736baddf0fc062a7e0e313e2a7bd3070d9fedc490f3c13599af1802408", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fcb57eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25377 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b76f929", + "nonce": "0x1c2e" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xb9", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c2d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000220000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a0c5ca0ea55372207a49facfe7899a52e13ef799780cbecc10c95143b78dd449e1a01e69cc5f9554d18fd84fa5ad675e125774773a89a3b7556bb82aeac4c0dd7816", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fd4c21b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38563 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b744204", + "nonce": "0x1c2f" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xc3", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c2e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000440000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0f80b771db2112be78dd1705655e2f229d3448146a4de44cabcc3fb051472e29ba03fc72856d0b7bf90e6cb81716235aee85da8d880b0a71ffee24675ec66eb2a25", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fdaf6eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25421 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b70d99a", + "nonce": "0x1c30" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xcd", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c2f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000230000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0c079b0f6f2f81e4d15ac9172b629726d8063947c8f9679599d97d51158c36cd1a00b2ab9274160dbcb5c2dc130ecdc1287aec47426fa5064e0e11b86c9b4f5f7f9", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fe2c0eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b6d6ffc", + "nonce": "0x1c31" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xd7", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c30010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a073d075c8ea0e06e53a751d72aa3bcdcb9dc4619782561f34102a2fe6f469a221a04520020dbf34268750f17cb4831b1bd00eacbac9b1447f42244a91e1a1e8cb56", + "new_receipt_trie_node_byte": "0xb9010d02f901090183fea8dab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b5f49db", + "nonce": "0x1c32" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0x64" + }, + "0xb5f8695e818c8fb4e49e0503303e73dfa6d35ec8": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x600160015b810190630000000456" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xb4", + "nonce": "0x1c", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c31010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000001010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a069fbef34a61057390846b138513f4479e5c88018794a1655a3abd5c10cfa0173a01ce63f596a65f0524f4a504d45f1c7a2a08739d9b352712d435fb812d63c5bba", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840100ae4bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 132465 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": { + "balance": "0x46" + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b5be171", + "nonce": "0x1c33" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xaf", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c32010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000310000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a053cc54ecdfd9f4ef10e7a33f9b0a02915a57304c2318eb76d347dda7b0147127a0455e8bde786b4fa2d9dc303096435c98b55cd3ab8a1723857003aa4f85c62571", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401012aebb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x2c10cf0c3fdbf530eef00399120eba462de3e8aa": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0xfe60005260206000f3" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b4dd60e", + "nonce": "0x1c34" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0x82" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x8c", + "nonce": "0x1d", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c33010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000002010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a03adc024ecc3291841a770747a7ec63b7cd5260788b554ae7c132edfdc68e71f5a05aa879669590acee2e05ed9504b9e0e6a5ab90888c6e9bc8e971756323d561a1", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401032c8ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 131487 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b4a6c70", + "nonce": "0x1c35" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x96", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c34010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000320000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0e89a7eea9ca9b719cfdcbd2a100b6a72c8280038dd03011981675205b1fb543aa022ceb7b8ab91bdc13756f36de48e59a7bd6805a1e59c678da81112c37c8944b7", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840103a956b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b3c8c33", + "nonce": "0x1c36" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0xa0" + }, + "0xaddb35adaf8d1de7a48d5f4f582b75b6aa4185df": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x50" + } + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x73", + "nonce": "0x1e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c35010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000003010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0eee91b70ae984d67e99c551a2c3841207ddf50d0b763ec45fde7c77a0db82eb0a034b40963f0e215321e35a1539ce4b5398aa693b0bd5f9fb340b0b8ec8eb1c85e", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840105a4cbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 129909 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b39d8aa", + "nonce": "0x1c37" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x7d", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c36010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000330000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0b95a36c7bd8d63ae193cf7291fe53d6ae24935f2538059efc2e03ef4f43ccbd1a027a785f4610e76137baa0505ba3695f739cdf8d30cf8e059934d95417191cb90", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401060794b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25289 + } + }, + { + "traces": { + "0x1c323208a3e058b5d8f2f10ffce7113a39114baf": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x5b63ffffffff56" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b2bd703", + "nonce": "0x1c38" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0xbe" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5a", + "nonce": "0x1f", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c37010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000004010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0d3024e5c82da01c21900979d33d099a1fe97efb032c2915619413402176450f2a029c75fcec238fde7fca14905c1d3fb787adee73a6a1f59dc0cce77e6bae83658", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184010807cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 131131 + } + }, + { + "traces": { + "0x6818ed76b36ea1b8d7252798bcc7389272dbad26": { + "balance": "0xf", + "nonce": "0x1", + "code_usage": { + "write": "0x5b5f630000000056" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b1dcf4a", + "nonce": "0x1c39" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0xdc" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "nonce": "0x20", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c38010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000005010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0ea0eb6be5602c08d4e5bb7983c031cc9189ee0fd45363e0c1ab7a56050ca24faa0219ba072a4675c3d61ed0e9ef59aeb1703e8667c4e00d576894457abc98da5fd", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184010a08e8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 131353 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b1b1a8d", + "nonce": "0x1c3a" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c39010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000340000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0f0b5dfbf34bfa419e9563d72578ea4767452485c8bfd5ef4e8244189f5aa8399a05865ecfeccec1674e36a9b2a142c9046624cb9a85dec2abc7b95cb10a61b63c2", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184010a6bddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25333 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8b060896", + "nonce": "0x1c3b" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c3a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a063afa1d657ed1cfc4ee1783d7298688caa2a8a502fc75af54c66ce517a8fa6e7a07e21791d0df9837da994e2180cdc8554a640734e36e6e3d5d47dff7acf59b928", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084010d6e6eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8af911c8", + "nonce": "0x1c3c" + }, + "0x9b406dbbbfb10fa4526a36e7fb8a6a9f4bd75acf": { + "balance": "0xf", + "nonce": "0x1", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0" + }, + "code_usage": { + "write": "0x5f5f55" + } + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0xfa" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "nonce": "0x21", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c3b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000006010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a020321b8dba07c5673298c3319791dcffa7f1dc7f04a215eaef1cdd15069e10a7a071440963dce005ae2e317e79b9eaf693ad555d050f66e23ca3222b760ce5159d", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184010f488ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 121372 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8af09f3f", + "nonce": "0x1c3d" + }, + "0x98a9283cb52f199cfaf92a9b38d337bc4d0ba20c": {}, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c3c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000007010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a095845962930a706e94a1df86c8095c7864465032c0e0c9e92143dc967f9526daa06ce703565da804edf7753acf85f885acab60e3c4bc092cb148e16b9a0c99049d", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401107d79b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79087 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8aed3339", + "nonce": "0x1c3e" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c3d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000420000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0bd9cdf4f39c674e8702e1efdb3c3863112aefe0e3ce90595dbfc6c6487fdbfeca07d8ae83db95abdf49d666eef81feae788d7a26ed42aef73f5c354fdffc4fc12a", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840110fa9db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 32036 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8aea7d48", + "nonce": "0x1c3f" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x32", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c3e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000430000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a063594a147bb5d0541d2ae9b46c78ffdd14bc8c23220743f757ceb079136bb5aba0444b73cb275523aa248ad0ec12afd57c4fbc57dcae212bbc5d0bb6334ea69fd7", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401115dbeb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25377 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ae1a1fd", + "nonce": "0x1c40" + }, + "0x98a9283cb52f199cfaf92a9b38d337bc4d0ba20c": { + "nonce": "0x1", + "code_usage": { + "write": "0x32ff" + }, + "self_destructed": true + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": { + "balance": "0x118" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x0", + "nonce": "0x22", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c3f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000008010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0f4d43b8fc2d4c9be22280413b38014d5b3c70ab1a58ae8081c0de8062471c5cfa0728af61257cf80c2469e970b1103ac977a059cabdacb3fa6dd44916eb7c10ad7", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840112a1a7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 82921 + } + }, + { + "traces": { + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8adeead8", + "nonce": "0x1c41" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xa", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c40010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000000440000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a0274a7067f5bcbc4ca6301a9de406ed3db210b33d59596ce803bbdf8b098ec853a039cd6108b2e657b1d0f4417c145c744a8b9ed30eeb2d544f278548f76d89f6c3", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184011304f4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25421 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ad71670", + "nonce": "0x1c42" + }, + "0x9e12d3865d18b6f5fb92569fa3fa498ac6da3c13": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c41010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000009010000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0620ec157b0c8b8ac951000561430b1b2117bab5a4a03cc60bbed1b57f8909ceda007ec4dae465441eba66498cb1112e8a0d75262dfd78226e0e701c5a532fb6728", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840114234cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 73304 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ace8f8f", + "nonce": "0x1c43" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c42010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000001010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a03537cb429fbd7cefcee820fbe950b8e45b7066dbe5e24fa0138f1a5b78c08b1aa0109a7db59cf8bbac1f52a122d75524e2d0509d5dcae46f6298ad499a2cc974f0", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401155b23b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79831 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8ab932cf", + "nonce": "0x1c44" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c43010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010110000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a0093974b0cce2c8f1c19fa193f89fae73eae1ebbebf50decefd3cd1804ff4e9bfa049496045338a45a4ee8b7eaa8ed2b1b19019176a12e42a98e969e4712b17eb0e", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401186863b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8aa3d60f", + "nonce": "0x1c45" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c44010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010120000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a002dc330d0ae4b2706b63a6a511e6e959789eb03fbe8d2c832f351f6a55616e26a0690323ceedb40d4e7efe95fd77c65bbccebb4bf43134437f0703092cbd1ed66b", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084011b75a3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a9b4e94", + "nonce": "0x1c46" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c45010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000002010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a051dcb2b5d57cdc283d2b02bbf7f6d93971baa4451fd31990bcc1f73960ba79b0a0761aea5948496fdf95f6ecd2fbf7fcb82a89011329f7f32453d174c7c9278059", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084011cad90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79853 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a85f1d4", + "nonce": "0x1c47" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c46010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010130000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a084576d54e96a01e4f846037394a1a647cdcc19b995439f5a84833f8928087ef2a02e5c9601bfbd4a7dea0b309498430b94eaf3d4dfc160698c2167be653604f979", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084011fbad0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a7d69bf", + "nonce": "0x1c48" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c47010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000003010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0711d8c5c4f596fbf025c8a3a71990c03c26e6a35ac201e89bd8359d75a80316fa004bc837641b836fe6121453a8504675da6f211774154a77a4b5facf51e7e3c53", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840120f2d3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79875 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a680cff", + "nonce": "0x1c49" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c48010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010140000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a08bb94b4da9850346a32c879154cf316b46db75d2e23f44b46bab50b2354356b4a00862e163ea3bb9a369a76af288aaf34e44b51aaf025310625f8b8af951210286", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401240013b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a5f8450", + "nonce": "0x1c4a" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c49010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000004010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a01862c236a6c0d149e530d947d91a6fa2ee3753b75af1515c1c72362ff7139322a02994d17dfe4b8e385a3ba48eda0c590c46a6aee9a25ec9c27072ad692762aa16", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840125382cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79897 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a56fb07", + "nonce": "0x1c4b" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c4a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000005010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a03ec6f076123e594d95b7bd9f2c3335af619028deb3c6ab89961a2b87cf74390ca040d30a50018426ab8ee2db4885ea13f707eb5ff94f1d52e6bcd811d0ae5a2cd1", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840126705bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79919 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a419e47", + "nonce": "0x1c4c" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c4b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020110000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a03155e5a6480a5c8734007485d9a4826a9eedeb28d2a8d8967fc94b83d5cf155ba025231d63a0ac03a597686d979da3c8434b9ab60cf629088ac1a86117515849ac", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401297d9bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a39cbad", + "nonce": "0x1c4d" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c4c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000006010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a046162d91b2d33a8246628fecc82b24b62f82de12ce46ab4948e30efc9f8b6ceba0749da5482c61e48c6372335618c870feca45dda6ea627c2baed6ae6ba6d3f451", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084012a9bb1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 73238 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a246eed", + "nonce": "0x1c4e" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c4d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020120000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc001a05b3dc9167fd10a3dc5daa94bef0c7063fd122ba9b87ca8dfe28253bba453c174a003063119a9326a525041e61451a4f2212e6574c1d62a6684b4db28504a8174dc", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084012da8f1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a0f122d", + "nonce": "0x1c4f" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c4e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020130000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a06f24894ff7e647f2d6f6753ae9b503df51d34cd7ede509b4d277d22b4f638ab4a07e088e4302df42e452ea299de6654d22e82cfb3a10ee60bd64c9fde9a455eda0", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840130b631b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb8a0687b0", + "nonce": "0x1c50" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c4f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000007010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0e01208b4cd6608cf6136cf11f7133d815910065a084c2b885903db1662645ad5a0543154b4c8cf8e6be35ead007a5dcdb95b89c5635ea5ab2448ca23c9e648a4c3", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840131ee8cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79963 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb89fdfc99", + "nonce": "0x1c51" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c50010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000008010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a024176c96ca5b9aaf6eab20e4bbda47fb9798a380df183a051a731b95d2f14c8aa05826162cd8d5b1908f0fc6bf18e4356bf3040fc1b97bc4e523a771914e14c4a3", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084013326fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 79985 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb89e89fd9", + "nonce": "0x1c52" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c51010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020140000000000000000000000009e12d3865d18b6f5fb92569fa3fa498ac6da3c13000000000000000000000000000000000000000000000000000000000000000fc080a0b66b0fc78a7ebf8fa687af8c4d6ee068683b594221e0e2b9db8f31bf1797abfaa0060ca926af4c53fd372d044f349e94ad40d8d9c73291d1bb6fa7fc1560ac037a", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840136343db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x1048c0cab85423ad892560aea91f074c10e9d337": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb89e0cb71", + "nonce": "0x1c53" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c52010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000009010000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a0e6149ef71528cae86a21fe76806b8dad55444ec065bf9b300bad7f4fb8ec4bc1a01e7d0f03f08427e0f0c2ab69f606322817581d386e4956c94064c77d4c7eefec", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401375295b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 73304 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb89cb6eb1", + "nonce": "0x1c54" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c53010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010110000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0df0cf069058ffac8d3ab80067a88c846fa2f2dc80c1d76f0d09b88b552590e24a02874f57f7ddd756cfad0efdee6cf4d4fcb941c286e7383936ce3509d5761b982", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084013a5fd5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2db4fe1b", + "nonce": "0x1c55" + }, + "0xc184d44272f907a8113bcaabe8b859c1fc891100": { + "balance": "0x5c13c3db", + "storage_written": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x59b6b83f294740688598c52195a9255" + }, + "code_usage": { + "read": "0x886b874d8be8665a54b988b547f520040dc032cebaaf5ccf1da43cbdd650d290" + } + } + }, + "meta": { + "byte_code": "0x02f9012583301824821c54010f830186a094c184d44272f907a8113bcaabe8b859c1fc891100845c13c2ffb8b87f000000000000000000000001000000000000000000000000000000000000000041417f0000000000000000000000000000000000000000000000000000000000000001447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506f059b6b83f294740688598c52195a92c080a0837fe2726a56d4d818a676b8d7b6f67a419439c1cc3bb53eefa8d539a1d39886a06f5a5c3a65459a9c6ec1335bd57b283efb34198345346a23d47a26a064463756", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184013ac1c6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25073 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d9fa15b", + "nonce": "0x1c56" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c55010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010120000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a039a9663e060033fdfb4d10d18c3ebcd2da5762b0e156b6f569a2b9b7b0fb278da062a254a24cee8022e3c4d8525055ac9663aa9aa3ea46e1f56e19eb82192301a3", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084013dcf06b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d9d6323", + "nonce": "0x1c57" + } + }, + "meta": { + "byte_code": "0x02f86783301824821c56010f825208948943545177806ed17b9f23f0a21ee5948ecaa7760180c001a012c0f5b6dfd8949f8d2c47603c6c29cee5c7d62bc3691210e149498d76c41ad4a0765a74088f368db4c5cae62a0f1f1ab1ce5c2320d82c32217e68fc8e511fc2ae", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184013e210eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d880663", + "nonce": "0x1c58" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c57010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010130000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a0e06bf67ad0e51bb56f87ab0bad58d08542ed92adf2edaf5d542c4900fe25599ba0233612bc90d6ab54079252c58db4819dec270fbf7e00e9fa9220df46c7ab1afe", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401412e4eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d72a9a3", + "nonce": "0x1c59" + }, + "0xefeddb0e271e2a1913f9913defb44b881ecf0a1f": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c58010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000010140000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a088e1052f431befa1774adaf4c936a3b5bcf48cac2668905fab9aad1c552397dda01a6462a9a21eabe43223fd1c4c01ddc9094e6a32add11037146e986f24464f3f", + "new_receipt_trie_node_byte": "0xb9010e02f9010a808401443b8eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d5d4ce3", + "nonce": "0x1c5a" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c59010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020110000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a0c684142fcbb975428e9ae23082825b79ae8bb86d5effd0d5053e864e2198a1f3a04e50f4e3d9cdd22c1b43279a13ffa8936f747119f6317aaa173042719329beb7", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084014748ceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d47f023", + "nonce": "0x1c5b" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c5a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020120000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a06f24c1215aaf40d2b2cdc0885abe55677a88edbc01f6a01b4cd73c92d2b04d50a031b8cfed8c1f565dcdc292a2db8f6865d41ed7f09db8f4c311adaa1141cb0ca4", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084014a560eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d329363", + "nonce": "0x1c5c" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c5b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020130000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc080a0552f8984a28004085aadafad802658c60282aadd9d2269861ef4ffac61f9a0c6a05b89b06e492a2fac413decb37102b0e90ef47e50b8446fdd5558f3418ae716f6", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084014d634eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x0000000000000000000000000000000000000000": {}, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d1d36a3", + "nonce": "0x1c5d" + }, + "0xc5e6b737f4d871711b235bd46424034f5f3cccb7": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c5c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab86000000000000000000000000000000000000000000000000000000000000020140000000000000000000000001048c0cab85423ad892560aea91f074c10e9d337000000000000000000000000000000000000000000000000000000000000000fc001a03e6298b07ad9c60b19e800c6bd25a4e4be111f9616aca4fc825fb472ba794293a027335a988458266a0350c867d45055505ab056f1a3d28eae19771b628a3cafc3", + "new_receipt_trie_node_byte": "0xb9010e02f9010a80840150708eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 200000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d1787f3", + "nonce": "0x1c5e" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": { + "nonce": "0x1" + } + }, + "meta": { + "byte_code": "0x02f86883301824821c5d010f82cfd08080956300000000630000001560003963000000006000f3c001a021ead56efafbeab1be5d3dd0ef654edf85d5a833dab3383ba8d0f14c55e104bea063cef82643bd780e4f61c866e353a978c1acb89114367720033af270324fe033", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840151405eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 53200 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d1549b1", + "nonce": "0x1c5f" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": { + "balance": "0xa" + } + }, + "meta": { + "byte_code": "0x02f86883301824821c5e010f83030d4094aab31ee996606fcf61312c903221c3a18b18123c0a80c001a0ef81fab047adc5c40f90048c2047a47d7e800bd06fc028f70e489a3a245b6dfba05ac0905364bbf9f2f2afc1a0552819f518e18809af0f1f9698d0abe236db1a43", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401519266b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 21000 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d11f3d8", + "nonce": "0x1c60" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": { + "balance": "0x19" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c5f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0223cec4664edad017fba70ede54b2cea75d284abd698dabc8fd1ade9368f4245a05ff5279b4757e2c688ed1538b8029e2e5890915c86542142a243c0e292e6e36c", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401520c5fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31225 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d0e9d65", + "nonce": "0x1c61" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0xf", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c60010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0dac7f749cc38fff8c96cd185ddae916ed436aac26844534734750196d075b7c4a071fb491c0a75b3d72ee82ca0ee0c0bb11b8cafdc1d0ab3771afa231d38d8d95d", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840152866eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31247 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d0bfda1", + "nonce": "0x1c62" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x19", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c61010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0657559d0a488850726170b848b8ebde0df9137f193e6390694842aa3a1f0f687a05ebaf81e345663967c5b8c85e21e4a5a413b2b492ac3305f85c4225ef3985d83", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840152e664b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24566 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d095d43", + "nonce": "0x1c63" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x23", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c62010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000004000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a05e74850ce9a0ab836d4ed1447157d596a052998b7752fee8289ea2ed441c29cca00b3eefbff7242a836dc7f6ac0bdb46e8db752bbcdc11a73648dacab8a6a4a98b", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401534670b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 24588 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d054260", + "nonce": "0x1c64" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": { + "balance": "0x28" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x1e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c63010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000011000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a0fea4760069d160dd52110757a467e0ec40b3ee20629564a2e874f46e2e2dc655a0241fa4bacbdefe9e466201512906c0ae27b2e9b7db2117acd79748ee66fb0da5", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840153dc8fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38431 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2d012649", + "nonce": "0x1c65" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x28", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c64010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a0b964e4f690f46d72931d7f800ff02e9e55ac67ff908414593f123f9ef9b46461a02fb723e8b8700b2f4140ad08804671db5a8f8fdb502c25dd557dd9889a4302c0", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184015472dab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38475 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cfdc047", + "nonce": "0x1c66" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x32", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c65010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000013000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a0cf277fb68b512ffcac417aa52af6f758d50c8ca948b7f4c2724136bab82adb54a03e6d6788b7bface191ae7dbe18f289ea81df833375ce1b5ffdff867483536762", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840154ef22b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31816 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cfa5911", + "nonce": "0x1c67" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x3c", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c66010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000014000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0eec905839aa654c4fbbe68c1af72a57b638344bb0cdb5008d6ac52ad82316459a01037fe02a54987ad79f2f0b56557ea674363166a248d4757ebb8d883bbf594d2", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401556b96b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31860 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cf63bc6", + "nonce": "0x1c68" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": { + "balance": "0x37" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x37", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c67010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000021000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0d86dd1105a018f8caa22f98ea927cc262502ee4e5caa8136927370b8b76a7c52a03fd758693eb7c634b026187231a1da3ed22e2cc93a5d0c87b7edc12874d45877", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840156020db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38519 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cf21d47", + "nonce": "0x1c69" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x41", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c68010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000022000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a0200f41ebef2bc60fd1855b32e7cf22c2548101d0836b5a47be43550b080ee62aa02532c758443bfa4b11adbc45bea18c7209bbfeed06bc457be26a33ed6a5c8757", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184015698b0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 38563 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2ceeb4dd", + "nonce": "0x1c6a" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x4b", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c69010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000023000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a026be2d268408562ae810394009230610c3626b2eac40b1e23425d53ef54a8303a03c48149b6cf4cd26607619f7accebe0e5f6c2f8e0f3f0ab75719dd1c625d42d4", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401571550b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2ceb4b3f", + "nonce": "0x1c6b" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x55", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c6a010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000024000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a011835e2697446ea6078486e9360cad56e22e30beead7f392e899eecc1eacb73da06c0444f9e2656bd70e1d33cdb844a6c4718dc545e9104f09de6733599477dc8e", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840157921cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2ce7e2d5", + "nonce": "0x1c6c" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": { + "balance": "0x46" + }, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x50", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c6b010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000031000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a0aa1f20091bf2b4cbbf0a9be02f3a391a82b70f9163b4e3d193b28bd97c9866b7a049ac468f337ed88dc1353d8b90e19b0f39472eb1ae059fe1564cd400ec9237f3", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401580ebcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31904 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2ce47937", + "nonce": "0x1c6d" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x5a", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c6c010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000032000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a08a492431dda99e76cefc3a7263413f5ede22459dfb1b2fa953ae4248d787cd3ea0751d71b8d7297ba1a7a5c60c87f5a853dd699886ae6027aa85acd85674d0a28f", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401588b88b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 31948 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2ce1c5ae", + "nonce": "0x1c6e" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x64", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c6d010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000033000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0a0ac153f247f4b915427c5948e42f7db8d3b4943ad8d13de6b1b9ca0fa4deacea01c77276b742c581907be66abbc21ba4f430f4b57219e3feedbdd2e9229841c3a", + "new_receipt_trie_node_byte": "0xb9010e02f9010a01840158ee51b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25289 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cdf10f1", + "nonce": "0x1c6f" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x6e", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c6e010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000034000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0c9581946b43257a12bcc840a2745b8231eb3b39c6ec823213009ca5330c4ba61a0401f5a5ba0d5964c838cdd181be06ca80dc927727f94cf7d65d8eec47862b749", + "new_receipt_trie_node_byte": "0xb9010e02f9010a018401595146b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25333 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cc9fefa", + "nonce": "0x1c70" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c6f010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000041000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a0570cf5ad6dacff4e5bcb0c8f6b73d3e51938a245445b4aa1c9f630f2e0a97016a074c846466a9b76ebf4c4587c74326c62d4a2fd3f87cf885c4c760917878383da", + "new_receipt_trie_node_byte": "0xb9010e02f9010a8084015c53d7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 197265 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cc692f4", + "nonce": "0x1c71" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x78", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c70010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000042000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc080a0329845ed5132d72ad1443a9d18121ad67da7561aa0c294d2a3628482a2017282a014ca7fde5a0f8b81dd029e822a58e030ef670ac7ae5803cc4241159dd0c5fd14", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184015cd0fbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 32036 + } + }, + { + "traces": { + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x33b2c1e83cf1fbb2cc3dd03", + "nonce": "0x1c72" + }, + "0xaab31ee996606fcf61312c903221c3a18b18123c": {}, + "0xfbe07a394847c26b1d998b6e44ee78a9c8191f13": { + "balance": "0x82", + "code_usage": { + "read": "0x65e5b8f50b26ce5647aec49e6a483898835997018702dc70f41130a2f8479387" + } + } + }, + "meta": { + "byte_code": "0x02f8c983301824821c71010f83030d4094fbe07a394847c26b1d998b6e44ee78a9c8191f130ab8600000000000000000000000000000000000000000000000000000000000000043000000000000000000000000aab31ee996606fcf61312c903221c3a18b18123c000000000000000000000000000000000000000000000000000000000000000fc001a060140b3bdb36df1aaf43d5aaed7b7384aa752557a87a780566ebbb25f731b089a0153321af36e55b42d27dc97799005ab1debe23e209cbccba88ac8bb4df28ce5c", + "new_receipt_trie_node_byte": "0xb9010e02f9010a0184015d341cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", + "gas_used": 25377 + } + } + ] + }, + "other_data": { + "b_data": { + "b_meta": { + "block_beneficiary": "0x8943545177806ed17b9f23f0a21ee5948ecaa776", + "block_timestamp": "0x66fc6d69", + "block_number": "0x3d2", + "block_difficulty": "0x0", + "block_random": "0xeb5cd899cf355f16bb6f10e36f56c5b1d7e510f4eb27ca10154f0c722070481c", + "block_gaslimit": "0x1c9c380", + "block_chain_id": "0x301824", + "block_base_fee": "0x7", + "block_gas_used": "0x15d341c", + "block_blob_gas_used": "0x0", + "block_excess_blob_gas": "0x0", + "parent_beacon_block_root": "0x88b1eeda007b5cb530b1ea907979a331c102a85b2a400ef046f0f76dfdc8f2c6", + "block_bloom": [ + "0x0", + "0x0", + "0x0", + "0x0", + "0x0", + "0x0", + "0x0", + "0x0" + ] + }, + "b_hashes": { + "prev_hashes": [ + "0x4bbfc0a667565181acce742be2ec8d1fa158cbca38399e753cbb68cefc9c56ad", + "0x6038f356278fb69b75273b85ea0aa5a9f0aea5ec77872154c14086fbf9d7fa75", + "0x15f6c0182a7cd6aeddf2494c6b5ae00e01e1977a59900b87f2d4c97de135ac3a", + "0x240166cf185e1a4282ad92dfbc13126cbeb0a4c64573b28d36a3723d243a89c9", + "0x447a73c2efce9c23f2dcb8e3ce1ae6034f5d2fc27a5ccab8ae3deeeacd5a52a6", + "0x2cff6f3e2459882ab3ef638f9ed83618f26c2ea55a656f06a30080b7c16643c3", + "0x1c7b9cc9d39d2c576a5de2263f7a2b7aa7d65634a2a174e84e323cf66c742827", + "0x068806428d43c0d82cbb7bb6bd18bb4bcffcef52f7e91cd81b9e903066fbf5cd", + "0x2e2c4339396e687df56d2bab1f7190fac5c3063f015b55c2f5b1c930e2c5eb06", + "0x3f6c64f15e1e27641cae980bf9e7f72c8cac5e373fe860ad55da29a936e533c1", + "0xd31bd7b78cd794576fc9d024a2d6a63b7fefb6e64276f8216a2067c4a90285ef", + "0x80d968a4d1cf2e28c94877746a8694b9173d0cf213a0bcfa3ffea071e93621a6", + "0xb0b9324bd657a7359b5980f5f81f077d769a23cfda288f484f91a639b0ebde80", + "0x563a5a80aa0462590007974814083b07c85189a2e728f81b4fd61f2eaaf83df5", + "0x31b89b8b6c5288cca45016feec1db60232b415b8e8791677352246ea9b55af86", + "0xe322f3d311e850d6149ec5666e8b9a2bd9335c2f1aeed9f22fea185939c32bce", + "0x9b8c248024be0ae16d36f967430fd4506d759e566352c3b0cb72cb7ae75da8fb", + "0x16bd9a0d72e56fc13dd57f624b93c6046d1d3220418485ba20255d190611731a", + "0xbd3414a9a7a7f83a180ee0b80b70e9e7832295f8bf386188b15b749e43a38428", + "0x3ab218ac4761eda688f6e8bcc202593cf5886c308b0bb0cb373e75f4dfac8860", + "0x205015d9bcf6c86994041b6a90cb3c4eac08938b08615e469ca38493dbc5cb74", + "0xac69b1b13d3a8ab80a55a57e48597fe69be74fea196c84dc4dab2c2d1bf741a2", + "0x8cbdb4bad2ed6d00b2761de093379ca999699667925cf50f5bbdd2de995c1496", + "0x08a7243dc6ddc14e27ddb485e0bab7408ef189de4ce26b66d9982e9f97cb1b7c", + "0x48822a934bcd55be705e49f610e0230c717609239b603834bc1ab541da375141", + "0x5a513f656023536d085387affec1b82a82f7d898253e006ec9f45ba6607f72b4", + "0xea405392342b01f3df671cf34f590ea0d8ed69dc2c828f4e46af5ca74e58fbce", + "0xaff082422c02b408cf541dfd85f88c8067485dd29a003dff12c591777a10b83c", + "0x8d01e33a1281888593c1da3a7bffa7012a22b891109d2c3b5dbed399ce7c031f", + "0x6600652af5e65dfb87b93b09f86c8262f7b69c874ee4e8a6cefd9fb2097fcdd6", + "0xf398972bd5c2026312abd17a6616f763d40036cdecfe399955d0b5be002e5852", + "0xca0aaf3011d975b9b65a59f6e2009ab2ee5ac5d7ed905c590892db368411f6d6", + "0xec2ad6b5d6c86c0de03e2a8168e1e20c91078a15712976ecc626d2e0c3ec3c5a", + "0x37996e860d9ec2e99e8f1167dc52202a87ffef4979a1fcf431a73c4b69d16029", + "0x5326fbabf082c995ca3bd9d3415d389cfbd72b50c89e4bf101f2af433dc95da2", + "0x4fd7a36f5dcb519ffee62165b6f76a14e3b41b4a44c2c4b21089a6e3bda3d645", + "0xdef56bf981fb37159fbb585d7325f431c5900e5bc5ca436c4175ab8234abd42d", + "0xdaf5565eadf269939cd4078ef036d74e2377de5cb232eb1fd4a2da00c0f2abb4", + "0x8356df256e44b5d660ac625376b22bf107edee59658e4e30f49e315a31a0ad95", + "0x3896b213a61b257cd5560165415e19b2dfdc0d711b52a18a67c9664f29e0b555", + "0x7733cdb49274177db7f09ee2428442141f70ff1fff98d5b2977832a001b0dfe3", + "0xa99dd1373d4304c79536e13f726169b26a6159039f91a43f04a2863c329d1b91", + "0xeb586ade8ca73cb7762866ddfb372d23ffeeb0e03108388ad353e34e81f8e5e0", + "0x7e860c68923fa4edacc9e0396ccdb72402428bdb8c0d325353e330aa7eac2023", + "0x80a549622bb09c59b1c7cfc7b571efb874da71f39e9a992c56f3e04858d19b44", + "0x9f0091e6dc75ac1a0cf650f119177514b380dd069ddc9d1b7a1761edecc2c3fe", + "0x1dad9c062a23dbcd6d3360bee0b06cbeb5400fabdadc9ba4aa0c035f068ffd23", + "0xdb77c7f07745ec6ab71d6da418c51147be5a4553f8382a4c99ba3c0f8a4dd15e", + "0xa3a00effd14e4f978e5b824522e0d89ea2fbc3e1b06a0fc93b9cc7553131229f", + "0x9caa58521e0d86c20e5e2bdd395f8f97e4e8ca4651da5da2936a42b51c9e88ea", + "0x66dfc546590b7cdc5297ff89e863a7d69dd2bb1cf3e9de08d62c65177ed07009", + "0x8548984d0acde928c4cd8e2c5b9813e81b636b141208307f175dc5423e2d4c2b", + "0xfe75c7d9e41c5d0b8232bc54869bf679ac757d1cbf28b202d7c65977db94107b", + "0x0ff25a96a140d652db9a655d63efda76fa56546aa12021b884d08cf671b690fd", + "0xe4da5308c087c0a3e3889b7018acec64c750cdcb916f70903d7564b3100e303b", + "0xbd3338044987a8ef7ae13ba8ac5db359a861cfafa4a80634611ef51a177daf11", + "0x4255fdd3d0cf709633b28bda19a9d6138bbc39326859231d97e6a42d89f6e9cd", + "0xdbf195a54c7a0e58e564142e9665abc32dd5b56736c513c763f01a00f5254b19", + "0x82e34afffe7296388ce6a477c14bc06729d2e749dd48f79acd3a76bd147de6e0", + "0x220e006cb3388e5f1ed96d7e8fdcba20dbbc55146e1937e77ce1c846fad97889", + "0x11a1a1d3db39f237995966e9e282826b4829188f5df8adc70ba0198ccd72f9ed", + "0xac9ff4ce06718a76d24e41cb909f83165f04ab16cb0c414b7c54c8dfebed10e4", + "0xd72367728eaaacf15cf15014cd0a6c4999ca20cbcf4cd9a659ef12e64a219c6e", + "0x46998dc753d8d3535222ac345294c4493ee70002289df8c59213bbab36370984", + "0x55bc88289d9889219fa173f465ae22e47f4d0cac3e7fdc6ae97c88c5a4be49eb", + "0x05ed2455b1d17d963b89b8a3c894424f09bf2566008a10b2c78039d622c046de", + "0x519630a9b63571b0b95306ec113370796aa93ffcce73b98c3af3971f2710abc9", + "0xca13956408ea4688ca05168527abda0e9f223fb86acbda24f184a499f6ab9a49", + "0x0053185ddead912b453941a82632c6ce62c54c88dd3e4c9855fcc8bcce48fd6d", + "0x2edf4326d8e63522b6bee5fc2bcd21bde12bfc8f7a731711045a9a4f17002b47", + "0x3efb7434d60744b24600c033840ced84826507163a8f8b491beb2878977eaf83", + "0x5453607ff1d1087534178f2168a79262a04aef5200d09fed97c92a936db04cde", + "0x67889a8543024fd4670910d556cbd2aba96018f52dfed55188f00cad759aff01", + "0xc363cd9c0be454d940a9a2c2710cb501bbd680bb6e1446d3fa5677beeef890c1", + "0xb6e65b30d28afe02ba1584133ec17c89219b008171fd43b3187a0ec96664ae54", + "0xa952db9ce76c02751c9db6136e5ed337b8df60827e162136823d10962ad7df49", + "0x0ab29a6f61b178172870bca7df49ed559e9c4d70568a3e9f5d74960575da7bb8", + "0x6a6b4f17d24e56c70848af08cd83a72fd703246998827185a4e1467f4291edf0", + "0xcc51d662d9df07ba0ecc6987e905fa8a08df013750c274a7f81df73490e9f244", + "0x3b9d85f01ed516fdab71d45c5f0947797c2cb7c075d1a81b98282352f27e8bc7", + "0xa4ffc291a48df20aa8e6bba0985465f43f29cbd19baceb3de2feccf5a77add36", + "0x9a11228d5702da29f2df80e4a1730468cec419e08dba0f8c741f62352691caab", + "0xdc588f0d7e5b529739aa2db06fdcb9a276c38f1d18c0b5058dfc5eca24234aad", + "0x9f17691ee105508820ee7e86dc446b4fc213e19365add0aa1795cbf0ee83d46d", + "0x3d83d7abd1b63f57534946f36504cc9d61528bb02213e02467d836e742e05488", + "0x7aa21e1adf4f9d7d9ddedae35062743dae1021b739acb83d0d2cb1e132e00dca", + "0xb0969356a2b12a1978bc7d5ef9c00e49a8535bb784d965ca16ca788de190959f", + "0x3b6fc0bd4f560682fa68c62a52490627260d998b6c52c132ddb8d60ce6662faf", + "0xa01ac7177aa3794b11a9cc9daba9e421403b377a9c59de25c8e118fce67966d0", + "0x872a0019b48487ae80a18a75fcd0a93229d40078d6db9ee6ef02bf89636c4ed9", + "0xb8139b5355569565849402d8b2a871b750a3d3f0419354d70ccfc93ee89c3e6e", + "0x42ae893f07b1d46ab9ab711e9323feca0eecfa7ca00c6e10ea1bb33e708b5cd8", + "0x0caf8e7d40e6a23aeb472b275b11232263576da38697ac51d79a18d8597b6aef", + "0xd6199b3c92a9e7910c02b6deaae391f34d5acebbedd32f1a4c262dd5d3011f5f", + "0x53a7ce1dc407097cffd8eaaad0be7aaf2e805c08c8e666be6bf5a79f2c06de75", + "0xb5c639439d9dbb3c473406b464e65a874484d7c69667b651a9e78363b42e0d73", + "0x5f14cc37b8e304f805a15952aba21b703d57be8b6cb7483162beee8af7ce6ba4", + "0x3eefbc5798a8adc6759a6a9f2d5e5be9e949d6288ccba2ad918808cf8f206b28", + "0xbed3b5ee771907acd69349830d6f83192a54763b3943d01236fc8d83e728bdc3", + "0xa4baae8ccbf0b636100e621e170ea35c2cffbbad5a9655407ae3d4690b94107a", + "0xbdc023624f64672ed3ff30047334210a330e1e155c3f95c19f2c51768706c5d2", + "0x380e434216127eebf3e418f44626e6850523207bfa443ec154afe5a79245c18f", + "0x3a5eb4261ed4d45b4b3b15baaea5346e7537a33dad491abb00bdd21159f62b00", + "0xb276e740eaf811084ac2842e8cf90eacead9fb3e68821403400d9908b3394659", + "0x3c5000f6577bc7377936bb0af58b8a07ada06aef35fc7d56ecf6b3c2fcf0dcd1", + "0x95490b4e2b89809aeb7d8eaa0ae55b284434828d11558f9f44e758c08fcb772c", + "0x43ba4aa7b45c9a266a982ce855669f547ed8933005af031f0fb33f64aed724b8", + "0x2657760f85adf332c3d1e29edc91ac56696145a9ca164814deb178e90c2f76de", + "0xfbc37ea9b7124bf80fbc88ce26165efaa431538d968d023a4fca4e80626bd59c", + "0x4b02ba20608a2033e61b8115c0687cab0780af7e9da939089c6ba5ea44521b36", + "0x782ce6fc04864323134a4624c65f4401bf6777777003e3a64cddde0ebd2aa815", + "0xa63bde473d38b0ac9d98f46f137a57869d4bd6d8105a3c24d1aca5a719b94d74", + "0xf1be788fae57f942761c10d2692d3954ef75a23f6d2b6a14e1662f521667a761", + "0x6e0aef3313e73a93544c8f6e37dd2c308c1b403d84f558e9bab72936fdf09d42", + "0x88e5e2a755601946da85d0ac1410b9104834f114142a04dbde325ec8dbb5f42f", + "0x115692bda13ccc3a3a2e57857f101bf10dfa2c696eddcdfe57ac2f4daef7d619", + "0x0969242bf7b81f5c858ed460cf725cb0f5874a6d8de7fb90c5f2bb18e9259c1a", + "0xb454e1b7f5227a3189b855adaf06b9a75f7cbc827673e6cd9aab4ed50145f902", + "0x372cc2b5c6670804ac408a53b099d4f8f91136560beda04de37bcbd37a2c74a4", + "0x0a57f2046f7850bb650a5a875f78214dac27e905d1592bca650bb8841f6885c2", + "0x96f8f3a8db3a5252956315d468ebae35c8a23df3cb761ab5f395c3f181834d1e", + "0x4b1dc47acd5b2a4a7d8bb7600a82a83df58536dcfb2ef74b9bfc31eb1dae140c", + "0x8f2c7279206a9a9f6619daa5a0c1f2301f0b5934ccb8db1857c23eca62426ac7", + "0x42412452cf55ab3f1ce6de66aa7d5c141d2fdb559f4cc38469ead122f62e6e14", + "0xb895478edb98c293d452beec43fa4e67c717e3659ca28eaddcf1a72eeb14f9f3", + "0x3ce197f15a565b4df53ca92b9881ca745b4c89bfe24bc732ee0cad813d940397", + "0xbc3b03d07cf971b97f33a16d024c5f2a02e1815beb222f26bcc84ee07b8a064b", + "0x5fcf957bf6ce50df2f674696e6eb74a2a68ef934d6ff812deefdb6edd1bc1c7c", + "0x64425e0184cca7b99a107eb2ac2afb438867e62182ddac638d0ee88b2d942c52", + "0x1355183dca13b7089d3f78068ec4e6d1ccb4f08a7396a51f76c7db59a7469e3c", + "0x54295203a544f5268234c7aedeb6057c8eb0038a236dff92e913b457bf4bfd67", + "0xa4e89b4482c28bbfbe511d1eaaee7c7996bc114f66753c7f72cd67352558ef84", + "0x220e5605cdbdbafd948cdb5ca30368e7deeeb53288d3adf6e64b3eec27f918c0", + "0xade7c4905f2f943f88a5debc96711bd1b142201d05c12967f615dec8ae0a5f4c", + "0x409981aac732b46331245015bf24b7c3f68a404348130656aea6372c31fe05b7", + "0xe5bd526623aad4123593728756f05726f093bc0176678ebd2be79acdab3d6542", + "0x62454d944fbfaecddecf627d2d51c04945cedb5748273bb15fa6adbbe2ea8c04", + "0x998a0e30a5fba56041f521969acb9f4ca8289ce633aad709c86334709b00bbe5", + "0x09ad7c294cdc2646bca0dc9c5fe5d4fb210db196cc310f267b66bf9a169788d3", + "0xcdc72b78820c914fb0553e5bb72ba51840bb38de92068a945185c3baed2da8ea", + "0xe55e6c512bed2170807555c0c0fd1478a5d1053426ebc729422900c9aa8d883e", + "0x8cab1a642df8cba4b62272866d552e14d6172ac91ed81178be1062c559539c66", + "0xbee992904dd67ff93f230c45336f33557ad4e74b7bdd56d51a0de019f930ef37", + "0x9d85381fc7c440c86a35b6b8e6ce00bc41117e34eb12366a20e6fbee6062cbfc", + "0x5f226cf776162cc610ea77d4c84ab05ff44a4dc11ff7d61d734945595f64125b", + "0x3697e5ca06779a8d120c8c92e529ede8976cf963d461387a73c10390ee61c229", + "0x875688a01cd7b5519b1b752ea42f4c5c31e520ef467c9d1cceb62b830811fdec", + "0x2268be2d8c22d80cffdec62a73965064f4adc2d995d5702f22ba0603e2aeec2f", + "0xf2ba6e9b9d5053d8edd37192a4ef32e99e3f6ef768efe81a20cc290ae6a22330", + "0x8f33aa5b82d2be2a2b0b7722ede22c38a315f0b787beff62ccd4aef0e75cbdd4", + "0x4c53a3c2bb2b0741141370aa76d20b7e5928ad5aae73d4a4fa08d57d9261bc6d", + "0x231c96e46d4b0777332709ecd8abc1f436459c828d2fd7d6b494e8f7f13ff9b0", + "0x3ca9bfee1b5075d1919a6f4328325e78636326b89330043a90f780a3560c8fce", + "0x690caccd6d94f4e40f46697e37f1c8c42df279a89fc93591c53fa2f8f19dc771", + "0xa5dc7e121e0afdde9f9e8c3dba735379a3beb83152dc4eb80f0b6068a734aa0f", + "0xedb058d843afe3adde1d7e1dda21525eaa035307ebd0e0e0d5e7ed9807631ba3", + "0x482ffb0a11dbc43edcfb6ed1e5c1a9d53984d5ffb6874c6c98bc57a74f318ad3", + "0x40047315065ae340e11b82caacf4e69ee8264a5efe56e192cf7902f9addb2ad4", + "0xd22e616b95cd98b53f3f520a2978ce8f2e757e67da2f5f4b1b891a6eab1f3561", + "0xe24e66f6b8a92e33467323d462450238f902f2abaa5fc1ee897f218f2da42fca", + "0x0b5a29d456dda2ece0d3f8ad88df72d27e29aa51331b124266338d11d2654d2c", + "0xeb12f158b0ebef6c5427f87c4a86d53373fe5457501e386b44ea7a2e67222490", + "0x48a84acb689672edf4baff39795a3daf3f0f13a61812f6cba5236f50b3b98c5e", + "0x5d3dde9d3bbdd550deb8d6d14680c02f512d0ec3473d7a02e6288e1ad7033d47", + "0xc77f80d76cccc5cbd05b6a21c0592f0e2f4619afef64517bd754da1714c80c22", + "0x51adc2e1a8b3eba20d9f6a1499491a9b1f9c4180ae79defd8c3f6fa4fe41da23", + "0xb379af506372144b2ce67410976d2c9d7e5fa2fbafb8d39c0b6f682597d921f3", + "0x9bc8d706b7e629cc0154a8c48a7e8dfd40d233031dd2b187cb928c62cb68edfe", + "0xfa9905cfafaa2252169db28fa55d9465cd586cab222b7badf3a535b11b3a8a85", + "0x949f86db7d536c85207b2b62ef362fd7a6956a8690c75ca764cc62a8dd8db023", + "0x1d4969facd54957909041e5bfadc5356755703c824dc52a76d1fff3aedd10347", + "0x95317bd8e287872d77989ce263813588d41f4a6c4c830845905f04946250d463", + "0xe3e824c0390156a455138a0134d26be55ecec76b75900a187d3e12ad4cf5e75d", + "0x0e2155a9cc1f9f848f1a55b3a4922901933dd98f763b890389d9d1266ee846a1", + "0xe46a3d1ab97b2029a36685a3bd791f09f8fb4c301cf39ecfb595c6b1a7026a63", + "0x7cf80587ee6e85159052468ef044f5a3a2303b8258d21cb86f38d071ae2edde2", + "0x3f9efbaacede29e907dbdffad59067621e0606780fbf7bfcbb25b15fb4ed17b7", + "0xaf0def9f2b795216ba28bc6d3ec4faf19acfd3100cf70aac330de4aa535ebe20", + "0xa2198bbc5893780e217c19865915a2b6a77135ddbc694cd5bd36d2e804219ae0", + "0x8257caf0d4a013e73aeb1b73374b5d9e8e23bea25580ef4ba5afcbf2ff99d482", + "0xfed4416281a2df4adae61ca90f2e4c1c5b76c62f14c8becd588d47ded30d5eeb", + "0x336801d9e0e236efa6abe0f71b7371f3deddf3a361009287345b5c9dff2fe2b4", + "0xf4beaafe49f79dabe4945932a09f42f30ecd95b32f7e6723ca17b7d5445a9a94", + "0xe1bccc5d5f5414cce1c5f271fe45bd0e7f39f2aa49d8c9b96dcd418decbbea1f", + "0xd2f64a92c88814fb5eb9c156c21f08c7f0049872db71cd8ffcdb1bd67d538dcd", + "0xf0177fb7d4925b2d157ea907804d27365eb9ae58961066b11c36585267fb0952", + "0x76fbd4a131c0976bb85ab389db16de34a52a2d41a04d03ceb7f89d3a9f686686", + "0xf78c5ea3ad3111440eaed5847eedea816fc82e19b3b87be0a4b9a7c39abb8f78", + "0xc132eddf3a3f5c572d562919d7fd0083ae51be45708ed9f1c5c001907a7da4be", + "0x69b91d564f9d527867389af070c0f44917cecd6fd2d5f05271e0c8dbb6bba761", + "0x24f15f1a2a405dd67f8216995a3f3d961397f0f915f39964c239861dfbc37cf5", + "0x5f59a0cde6f239055041bce9b99a0e79fa10d0aaa8ecfdd5e40ceab44cc09001", + "0xcca1f90225607f4ef11488ac3c1df5f512cec0909da61d1fcdc0c5a304d71963", + "0xf086ea9bad8a7b5bcaeb4d29844d00cc6c114f7076052927294d69acf9726d85", + "0xca0c2693592ef3db8478bcf4087e123149470b3f4fbc142f99346a5e0b92ca63", + "0xf11353040a19eb026d3d50ae241162468146ec6406b8915366668e653d05ddd7", + "0x2fdf1873ac7830d428be0563177a211e032593fbc75f9e9894b02475b73fa3a0", + "0xc7ac18d6f6d71e8fe2ad5a7db181c4a4cb6c412b1119e59caaedfebb8e6abab5", + "0xd71e5bc0153aa51ff01b89e5e4a38dd82681aced330fb604ca9fbac6b6bf7c10", + "0x561970a33b564745125fba6d13a4bad9b7499d20759cf4749d3eec284a8e6e72", + "0x7196923ae5e784a9da4f45a92607d85251440abe3d8e22ade63ce8c9d00d5910", + "0x9377df1dafb2d24edd5970744291d0927bfaa8b2699cbcbd7abae9ba5eb9382e", + "0x03fda8226c42101ccf894c213c7e7ee008146380e2cdb8f6e22e95bd281df8aa", + "0x3ace31891cd6cf8c958f433013c51a147cecb7db0fab57b2f0f86e72a262e21c", + "0xa3c0239ab51b3cbc198fff8cd5e9aae9188ab10a2dceb1ac3ccaafaa36bf32b0", + "0x98b4a78b706f2ee2361eeabeb561b62d46a9cc20f8564a42c5b5282361935abd", + "0x1618c2f1e06b531f4de088b394f17cbb2933962a57c6a5429ed7776cd3f7142d", + "0xaa08ac4e6d70afabd965f8834950b490b3e91f39945bac8c288acc82c035cc29", + "0x395313d30fe6e9a51afdadafe3b640fc9891599aea676efa931c0a33bc7c4305", + "0xb943001a7e9aa3a3c1a3e9fa51ab78c1a2ac2f982b5aaf598436d48547712429", + "0xb27605b0ea771144240ec990e277120c1866ce24bbb2ec6c72f867a20b59cfe4", + "0x3b001500f5c9896ab5133bf13cc1d638485871c62fad8a04d270b33aea68d6f8", + "0xfca076b9e3260992cbec24e8bd9e2636bd2a726d94d5e390669308e8a2e7692c", + "0x1f9a3f7cab143b6f50386d49a2368bb0eff99f09267c36004b9ddece627ae862", + "0x0ba4493c97ce8ce9efdfbd331a6b5b9df44f1462a1c5f027a4c397fa147e6257", + "0x793345bcd31973d85ff23341a72669a912011c19b9d4c3ba5be22c919c97125d", + "0x434f0958bcbd46492f1ae27d4abb1813a5e156881402d425ad7f0f13f14eced5", + "0xa6d57c888a91620732bc887ddb40730a614df8bf1328c0529eb7b2629211dbd2", + "0x5cfc5c983b7cd948146d7bed0f4b05d9d570213724e13e3e1c05c0074d21c31e", + "0x450fc6f27104f973bc169016609396d80f7bdf598a514997af3502695b2aaff1", + "0x524a38eae0a5058a69609ed69576ae1a5278059bb24dd35aed540175a39a3222", + "0x012aead61a59c1fa5efec720e739df1f53c6d9e729048ec41b6576208ffc60e3", + "0x76103873a986d968ea8b5795377a5e7b3b27fa2dfd89ce085872f4ab91db2759", + "0x1612305957d76330110ba0053dc4c7fa7c22f48bf395ac219bb3cc16651f442c", + "0x55bbbea2e1c9abcc7385ab262a0121c12edb9c97cc2a40cc77a8dd1f564a8d8b", + "0x21ae2f326d52f3468aaaacdfdad0ec5e22efb75b9d2083cffa412b213c480cbb", + "0x4656bb56d9ced263fc83cf0b4c631553f79cb57951318ea659e13a383c737020", + "0x3e9561078ec90bbe7c45ede19d7741c8d1436a16fa5cbdeca1fd2835f42c28c4", + "0xaed36997334919c435cf74258f82ebd778e516398d01a5ab7e71f7b4e92ba963", + "0xb5c4a35aadf9595299abd7fd180a09b7362e4d2a32c65dee37f74edc296e3979", + "0x7dc65e33e30fd9a16609e230aebaab57b1c9341c272d0a02a7d81b4c8c3679a4", + "0xc3b44ae0aa7f9a68e48fcfed9fee0c185d30a09728ff77cdbcb7d8e0496d1bd5", + "0x3b38ad8dfcf3d247ff27a2625728904641a26861a471f2d91093ad62cce50a33", + "0xa0b1dc92eb4f15759776805d18fca451916f1533f094e62d134d209a9daa7c69", + "0x4c2d6c585a7f788c100ce3053ddbcee4e08f0714465468e13620ef5a5b583e0c", + "0xd7f660f55a8f7e0561a9cedbbc3717c6d1e10587faf71f1b16c29dcacea0b0db", + "0xe260555d7585a51f748ee35a54a31677804fece053efd25297fc559ece83140d", + "0xc3ae488edeef677110aa7599af9464bacdc5e08ee5d70dbda032b74b069c73ac", + "0x2cf7016f8d8a22c1ee4e7de80d68d69314f6114185a1980208931ac11d475ba6", + "0xd30c1e139e9c92fa1d7a4b6c351f02935554b22da099dba7e2b2261611f2785a", + "0x0c95bc98ec8d68d716d547454f0daa3e09d136d54f066bd8d1c407882d9b081b", + "0xc1555a9e2e6823716bd06027d4e31a75bc52584a2e9e64f01e523cfa2df7032f", + "0xd1122073b942ea026000e46c20d132271860a197cb3e134f2bc7d31a7a1e9963", + "0xe04b47b54c879fc02f5dc051311a39cd52b77946a5a83be428fb6a62fa9645b6", + "0x5df9abdbeed33409adca8f653584365fec9d8a0fcefb8e1b7eb234faae96460f", + "0x2156753afcd16a0c151f722711957ebf8bfbf22c5dacb5e61f3986386d588aed", + "0x1b36dcb0a8504059aadd583aaba264268a67c6b6d01894a0b1851ec713c272a7", + "0x35d0cd067ed535e660abedb30c4b151211c541d24ed339a5aefcc014eb60273c", + "0xd670b8f672a9f3204a2399d263550142169395bd23888115782862c0a01d0282", + "0x1c2794384507f3ca09a72c1b3a8abfbf32c39b4d26a33bddb631f8a3d480ff94", + "0xc22de903c717c00386ff48bbe45469bd70125ca5b903b048625d3d83a8770672", + "0xb9c5e0b328059c02e21b96ecce5041cccc66598268147859f91982d1a14d4868", + "0x337d38a728b141f85df619546c17f43832db902978ba4610b019ab4b84a82b91", + "0xcc9ea47ae76609228a3941eb8eef682d097e6772d63a6698364bcf0d88a914ec", + "0xf8c017bb42315ef3c1e73d291d07b58fec31e9a2984f2aab56d9c23396d71c3b", + "0x248ec63e064c389cddb6fbc96f8c0e48c7727b8895ed3fa8db966ea26b59c223" + ], + "cur_hash": "0xf3abb3d4b42b2600b2873757e37ad5928010ae92707eab6463d7546054ba92ad" + }, + "withdrawals": [] + }, + "checkpoint_state_trie_root": "0x9a753dc52d1f27e37367b414b4e7c2120d5ef91a201aec655e260444ba5af932", + "checkpoint_consolidated_hash": [ + 10560559466777599028, + 11006508390709331407, + 15182941328564586367, + 4238920726707310573 + ], + "burn_addr": null, + "ger_data": null + } + } +] \ No newline at end of file diff --git a/trace_decoder/tests/cases/b978_dev_header.json b/trace_decoder/tests/cases/b978_dev_header.json new file mode 100644 index 000000000..2331ec552 --- /dev/null +++ b/trace_decoder/tests/cases/b978_dev_header.json @@ -0,0 +1,288 @@ +[ + { + "baseFeePerGas": "0x7", + "blobGasUsed": "0x0", + "difficulty": "0x0", + "excessBlobGas": "0x0", + "extraData": "0x", + "gasLimit": "0x1c9c380", + "gasUsed": "0x15d341c", + "hash": "0xf3abb3d4b42b2600b2873757e37ad5928010ae92707eab6463d7546054ba92ad", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x8943545177806ed17b9f23f0a21ee5948ecaa776", + "mixHash": "0xeb5cd899cf355f16bb6f10e36f56c5b1d7e510f4eb27ca10154f0c722070481c", + "nonce": "0x0000000000000000", + "number": "0x3d2", + "parentBeaconBlockRoot": "0x88b1eeda007b5cb530b1ea907979a331c102a85b2a400ef046f0f76dfdc8f2c6", + "parentHash": "0x248ec63e064c389cddb6fbc96f8c0e48c7727b8895ed3fa8db966ea26b59c223", + "receiptsRoot": "0x51a05470e2973f4b547f3b5ea462275789f15e5f607bbda3d231b273ad071184", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0xcc99", + "stateRoot": "0x1ac71e034c41a2ed242a7adf7309aa5341c51d2d19a205ec7bc7728a2f996214", + "timestamp": "0x66fc6d69", + "totalDifficulty": "0x1", + "transactions": [ + "0x6d5b5a53921da2134d0f008b15e648604a4a9d1ccf048a99249521042f5ca9fb", + "0x516c1d9ad51b771caa8d9a6dbc7afca0e417810210d3fd907a8f05630299ae1d", + "0x75c1f92166e95bb238435fb73ab27b0b4dbccb3cf24ed215cad3828ff7bbd01b", + "0xd0dee75c74ec4545045a9782aa5a838eaa4e2bc1312a0dd35a008f39f2197703", + "0xf6dfbfda769129bf465f2a3479172ee89bbf38eec360e1aa63b926244cbb9f0d", + "0xbd4153d385d93721085b9d505933350097441a6ef86fb5a2e9ee1a8f2bd874d0", + "0x6ca0119b9da4954693096868af1ed893e25af4c548964d83342bd628e4b389f6", + "0xb7db7cfc985c16b9cd7e94bf1c59f1ae176a938f89b9254cabbd4b1210acf51a", + "0x86b04f25c2b13cb6f41fc8c1652481a20d89a41a10b5f28672fa1e0e53a19a61", + "0x79e7a883c21b0033d3a66197be394c0951613d7dad143fd6ef918a302c980a31", + "0x0e60071aac002f5f2a2ba0310bf28e50f0b26b493d64921bac9eef20a3cacb5d", + "0x4b041da67c86c4230d856eb29fabd28f4a8680454f4bf9d6dcaccd9284223c6a", + "0xd52ca0e41b856973cb9289c5f4f8edd86a80399dbf7a3eb251232af5d2701969", + "0x5cf3e42784cbbaf9787d7149eb8b76741c6ec60391d89322cf2bf89e623f3028", + "0xb3a8ba8f997902363357420e6d44f744113f9b9dddb8c06dafbf106351763aec", + "0x859362a294f524e681bc3c5096078f5e013eea890f26815ece3b7227d411d02a", + "0x36f356b7089b6bf71536ee886552edbbf18a4554ae8130a0ae0532ee528eb894", + "0xb8c17440a5cb3554f42ac0dd8300f87e849e6fc27c5ea5785578476d7dc48e8f", + "0x38f790a59580699ab10b9e6a9d6a3ac95bde03e479d6fb79ccbc45ad70753947", + "0x33f7f09a008256c4ca15dcc2ccd25d945e8f8c11565f57f1a439771e6b49b8ef", + "0x09e2b35040157b4c9ea0fb20041a47c76ba0ebe39d691a149c19f55fd9dfaf63", + "0xe22b5f095f8bc2e018f48e8bf964d59102c00d2f27bf3d60a8e0f4c8b6a53735", + "0xa013eddc0855cbc9bf980634268f4f3bfe4d0b05cfb7bec27d9fe1a05e771513", + "0xd0da982b3b28350bedb317e8a4fd2173d7a127867d2eec62623c484fca8547cc", + "0x9b1d5cc860b72d7cc1ee5f061393d38ca36f2cf0c41c299f7af64e514a2c9b9e", + "0xe2a5873dfd339d8ea39e1bfee8f5564decc823e6445470bd734528da97eb5d7d", + "0xe8be62130b5acf5769f403232acded591a298568fca30f8aa71e5cbf74849941", + "0xbb58a4709c36f5f6bad655090401d9fcc277f26d3006b30372d96613a433abad", + "0xbd486e306d75b2c392cb504fef8351cba53f382f8a6faaf45b8ade2c577ea3a6", + "0xa5f868acb87a385b0c99d93f6a8e1fe243245c69c4d8ac99aefe1ce43b816099", + "0xca6adb4d28ed3a05df4b61202877806156fbaa06f9461f18f2e413347d4b0cd9", + "0x8b4c9ef639baa51ae17477de311064d85a8c8d5749a22e503914cb991c6146e8", + "0x5fc7ea9b26d7f0b52bf7a0d61bc89de5d8a9fcb7e9c8457af7bc362e676af642", + "0xf9f9fab318f98c1a8aac534a6ba29655f52229f9cd7804652f031c13d56d1f3c", + "0x7c4f3b7dc82709dbdbd4480797264c41dacb9b3408bc8616e132ba5d28c360d4", + "0x449c3280dd76b269b38dfd7d3f5c6432a46a3fadd98a79c558794374841f64e6", + "0xea9b9f6d4ec0dd446e31257e886a694ba6c662463de8e81c262bcf1099b41bbb", + "0x92deeb8e0760aa6ac3d5d350cf7f9c997a362af68d1355415cda1dba832eb906", + "0xabedc1fd12905b262fc9c74b8a8711707729e5f9ce08b16c4ca9f2fff2620c3f", + "0xc3b860a028a129d4cbf0795fdcdc6bf3c166a1309531f5d13aeb59ef804cc638", + "0x12f86e4572e48b60dd3c5cc6b520a3b8273ab03169bf93a4da9258df6ceb0726", + "0xac9aa57a887e9b7a576d934844768093251763a682dbd598e085b0cabafcc6ae", + "0xff9a89c9809fc916e51359093d4a6d416627ef69a37c6a3e9156bac4fcc5f73b", + "0x3f08f2035fb90deb132a2cdf81de9d0a3d5743c3a6d62a852478f07bbd109817", + "0xac9930dcda3bf2602a700494ff66e3fcbde58bdd248598a825be7804041c3e34", + "0x64774e36955ee27d861f69e25552edd8c2621ea0416267ad81d26bcf61c11220", + "0x32c134a20123cb0d95b55dd04b17c8db2fb3bd08fce01a893737575b80fd5a99", + "0x6a22d2523920f4ab2808702e2ee1ef5ad9c7d8e3187f81edf24ac5229025245a", + "0xabb32f9080794b6ab9257f902ee8eaefc2397f471e3fcfe77d0edbd2ef692b4d", + "0x6a383ca80481d79bf8134e4c75237b0498fbaacb71dcd417fb0f96028b9427d5", + "0xa8381777843a3837f67ac807c99637ad251770345e6ab79e10253b1aa8cfef72", + "0xf3f77722140c407da194cebb394fb29c59ce1acf076a2be2f7248c7b17fc0e81", + "0x6c86aae750926e3c1c67cd4395f32e1698e6fcc9f0190b6b964881b1dd943672", + "0xe6957d977f631f7521002333247cd5c96a0453936afafab07f584798c11cfc7a", + "0x230402cace9974539ed0818fb5cce7ad53b03731b3c5c0e8bae98754477277f2", + "0x9f61f89f088cbed7ba4bc75285875cee296f1662a04949b61a85888995c55ae6", + "0xf14dda853e27c7fb1e23b5c8e906c740dc6515ba04ac884bf69eaf2ea3e40838", + "0x127290f9a9658df93ccc8e3251ed3408b7d7ec9a4a7aa410a693afc8515ce0b1", + "0x0f9a54589aa836bebe93c549a5e9051b4174f547162e16ca0c494ad3ec8fba27", + "0x3c7d86804057f8b292dd38e432a82c1ce89aaa5ef851cfa4f9567337df16bda5", + "0x22f885af535b585b62b56a5ee59761d11224a852e88b01861b520cb8237613bd", + "0x84ace9803850ba39af19b9a9b8dd583330ba85b461d52e45f32c49da076402ea", + "0x205ca635e142858ce40b38b585be3092f60a973fd3457435cb611b4c8063d8f3", + "0xb2bbdb97a6afafb7ebe5ac9b348ae50eb7b19ba31fa1b9eabdf03de915ddf1f7", + "0x836002c65cbad3b9f9a20aaa1897a8b8206917137431de55eaf269f2855b83ac", + "0x805d5a47c00d0c57efa47c2ee6464408285cec9a29960483a2706d7752022e10", + "0x83ef8b16ba4b14cb0c936b26b31b13a61ffb747481be43069af8a9e609c0a77f", + "0x45721864030b0affaea524e0ee090a27471fa27268958204f5bfd57fd171e9f8", + "0x639ce3288af135ac8f1c1e5a330253e66ea631d4a34f0782856e90b44d816586", + "0x6ca3ad1859d93428e3cd0c609a53f7b2348a5f42fb7f44ca79a0f4c480449c71", + "0xbba8ff806fc6a28348d88c7c06a69291bbd1b8cd3049395aefe9347b7f1f6f55", + "0x29c1cbb3b87c7476755b8d73725c584785dc539d7fc6c3d14152009b96259751", + "0x970645cb512a23b4422ed95ba579aa9d3f1ef0582a4543f0c929459e67e5c5e6", + "0x67dd976bbd1e97068ce422435612c6a9fefd21c26ec4f45788571ddc5400b8ac", + "0x4372c54b3eecf1dc6debed28b07cb73341b099646ec1694d589f0baca2a13d62", + "0x833797e2e03e45d297b6ae61c6659cf4de18ea2fd4f33f46250dccf1e259fbb3", + "0x6dd4919eaf7cc33a0333c3d7f6d29500479be77e3ac68cf17eace4ba4aa7db85", + "0x2571d06952f24336b84aae4e49e0bac9194092ce701f5a5290e81e0d99242e6a", + "0x99204a258f8f4539d3d09989277cb41b4782691a3e3ad087008f7b8e68f85497", + "0x6eeefd7406baad4a7ff29dbfa3f65cb12927286a1db982339f98aa48ff6261c0", + "0x1d632c2833bfdb57892ffb6999b777770853a5ee578f29cd284cfb77f8e497a1", + "0x6e7dbd34d0a734f5c16f23c86c24a1821643ea65357387fa580e078d78647ba0", + "0x8fd5292953ea3b35e5ff77dc54d3b3c06dcf3cc24f7f92b62ce00e19d1ab196a", + "0x4c9f2bfe60d54164e809bd7678ecca2e46bd468de4f13a640357955c029d4c12", + "0xb2d3d89f39f043a4c924de924bf6ef869e9e0b4fd4e42b994d4ccaa6f7137108", + "0xe3e3f1180f4a78c6c14e8f04e447f38c018582bdb87fb7565dd855957b519ec7", + "0x83c4e2f58640ac2b91524ac37518cd8944db2a49770c330c95dc27ce533023b1", + "0x66f7abf1e5360994c86f8e1be51dd730734d9f34f6b4db0163f66b716841b029", + "0x9cd39908c103c8ee07bf6839a1e121a96050eb917f6226d4f73ed08c4eed675e", + "0x4a677e31051cc89b26215eaca209dd8be47909f0cc298d3abf50d7983ab9dcbc", + "0x70efbaf85c424226829ec8e6d632e76977fcc66c8ff303e1f3db8619cd30ba8d", + "0xf06c33ec804104448b6e7df025140edb30955845743c65dab866d48ef5a34898", + "0xc7755596d97e0a3ee0c7cd5be1acab6665c4fdeba53e05e001351f48f124e561", + "0x7568309e8468b4e064dc18d650abd0bcfb6ce36f10960dd04b10925d8c3363be", + "0xb04d88cce29b77ffd5a2364bee93b4d06c47c40f6670c0a7ce31c6feec252722", + "0x0f277254b052932a70e08e291597f23bd7d35b6e438d4c1872505f03e4201fd3", + "0xa214b27cb56e07cb3943f05d88aecaae8ad3e687f824e94f4831a76926ecbe73", + "0x6a5361a080ac5bf860a86da238b24e6b2202a34b00db2a749ca31a586834c309", + "0xe66ebbbff4d3540691e5bafa9a6218d5acdd40a6bf05ce9bd835ecff9953d08e", + "0x9b48d3ffabf54d9e03b7515225eb6c83552a86425c8e1e835b320a5d87ece818", + "0x7051c5b905c30e0e58ab36551942fbb990c68b712b3d886bb1e50b43a95ae613", + "0xa1585a12b7f453d5fb38ac643349f90205d4ad3f965da113e4b28132a535489b", + "0x0f10e13b0bf804afad35ea614a859c70e46521509d5bddfdfcffe93d28993b74", + "0xa3db88de7ad6cfd8f00e845ba9d836c878122c24eb2049f43665fae56ca1cc75", + "0x49c970a6895750b5053f09bbf9e7c5544ba811f2b773e51ce904967566380983", + "0xd6208bdf5d9f50d23248f36d5965152df16ebd8a7a66f8a132f852907ab4aa96", + "0x96fb7f910274ca43bd6096030b8a3ac33dddac8ba59eac4647c28d44bba4824d", + "0x50a56b0a207ce6a9c078e4bb3f6d5b2cba167f3bb525c4f52ac67652697dc00a", + "0x735bf8ae4c26dab3ab9d6402d515198ebef198e508456728dc21043dd1300d6a", + "0x651b7679d7d4969f89c947bfc6d181cab264b489a957395e755a1082000fe60b", + "0x9b73423c01d985bf504acb6edd8d2b2b4617b383dc177cf38df72e0ba7512472", + "0x59b2fd0d67f62e7f547c8ed4c4c93408ec8f0abc9676d680a76f4fdb21a66868", + "0x2f9308cd9394bb67a22c96faaae48671e78229a3c2a186fd361f66de15d116f9", + "0x8bec01b1a7460109eddfeb9b0f32d22d24165cb32f621784e223e8eccfc8f4c2", + "0x341e3c05dac6c784f2988634fab89c72033f3035c65baba4c3050e345e3cf527", + "0x9c9c1ceeffe9d9f10c33370888fe4d6409d4a1da87c0e3d3d763119fab4dbad3", + "0xf99b86fbd5925cf456e6b8e144eb7ddbf9c24fd3f48f4c424cd369a083a801d5", + "0x0bc891fb8f48dabbcb278eab69da38726d66326d782fd911849e83902e1f85a9", + "0x1882accefe96676fd94f930e08ad8231fcbbb89352e1b43d16001b5929a96e00", + "0x68a319163e4234e717b010d49829f2d4a480e960408f09c32d3f1b82806c3901", + "0x9a0e9494ec0c51e708b1cd901aa35497045ee66ef47f76f1e40d88a9a2c5e57e", + "0xf30f4ea2d076f1ff889b7376891c234005b96b9c88fcff82c307b8251b95d6c6", + "0x4ca6162c1389387664af6a4e15f8d256624ba4305d5513793b3ad0737e900eb2", + "0x889fd8518006ce0f53deca71c0a0fc77428e19bd30b86e306f657a8bc720541b", + "0x6f342e35c07c0e5bfce329f2efbabcf394c18eaad14cef233b92fd9f4c573232", + "0xb75bcac08382675f2a385f6e85dec64e54b65509ffb8d69be71b9eb7e5ff5416", + "0xe8d5ca24ad1581c8aca62796bb07bdd88462908ad2892c82d6a0bf817463673e", + "0x8c543d27ab622471b1096891ecaf7abacb2e6298eebda0892170eef8ee039f40", + "0xa9263f747178bfc67b71660ff7c5acb309f237b2d9688010455fbfa99e5385d6", + "0x6a7d765e1852e6aa94c86b72a8e62cf01538e0ad2b2925c7e95b2e0a415202af", + "0xa90014a70baeba9ab35255d921446bdc92c35cf13012fba31aa59ed0f7ec3d60", + "0x40776509110e21a5856834c4db302066e77ea3b70fab9c16c9b81ad9a8b44b13", + "0x5a15ccc042516dbc8c17ab3dd8edc8b1a240dc9fe29ce70e6188bdbf46f4ec9b", + "0xa0d86bf7c33ccaa70ff198bec99c71d5108556b5f0bacbee89eb689e35178773", + "0xf5fa516100d0eaeb0b832d5f08c0a9f612c788ed7c6336dd8771b7e731f8cf41", + "0x20eb77fa17cf7ece414a1f2f0b68a51b1c7491443c1b6082c05604dc65fb8cb2", + "0xf79d391264988fe71211165da0666286af3f72e885e3e1858b554a276b5ecee8", + "0x906c2a3d11b66d55c76ffcfcd476945c4bbb2e9f2949fa8946ecb7289679eb80", + "0x77e0da0c5caee0a5ead854f994265ed9c7cf8bdcd83191de4a48a68573f62886", + "0x0c3c1e849b84afab63c65ad3f121913a1d617fb51022a1948bf4fa515ff1211b", + "0x30bce2c56aa4dd57952706c6e40c1891bc122aa27724f9cc9f53990903b1fe69", + "0x6b2798bc2a3495acff9e2ee36462808c9d65593c21222af3e563145e5daa3d9f", + "0x87dec447427073cc65e7493a7573af1655c547f8dee9ca2ea26e05eb58505f3a", + "0x5a6def1809cdbf89879665930ffa280154b360f0d0728d5c697263313dff52f8", + "0x2ece83a6d5d466996bfa8cd832fd9365f833df4d44f91508045f6768568762a0", + "0xdf82bd2b7ca505da72b110d3f6462c3680daa8a77b3f34bac1d592658472eaf4", + "0x0defdf118127f1177f93d6c67e2bd26b9289a5dc3d401f3c60a81262f752b459", + "0x1e7053177d1d51f7034df1132ef908266828d1a474f9730585e03e1591908ae4", + "0x4394b7257769f48a06b02f1b27f89510321d49965cf9c3d7fe023abb27a706ad", + "0xc363aa47cdb24905d5b48a3b5b6347facc07563d3cfe4932ee3a92a1c429b2b2", + "0xbf58566eebcc7b5c7bb14adf0a4e8815e438d7feb7735c46a55faab8ee0eddd6", + "0x1c724ef262e6436ac4474aafd45104b05f3f3977dba7770e6093877e729b5a08", + "0x0c0c79d07cd7fc052aece7c4a59c476bb88e2c66e0496640e64f7e33c30abaec", + "0x76fe8f11abe5c226b82dba5f34f1a21e29b2dc62f492b49cb38f1b6d61b42f1a", + "0x20634b3e774192e5aa9064d082689e7d06e82343b99da9bf3c9c0383b98885ac", + "0x1880620c5c23f543f8b4b0a0088d3b82ab9d5cd13ec0e794d613f4b4b239efba", + "0x0f019022f99d6d213b31573d319ddb948e6c6b1021f69d0273820498f4bfb996", + "0xe17d981f60ad6fd369c99450900997fc7922c2d80b83aa1a1cb8b629c37b4caf", + "0x8866c27215aeb4959461c013285105e8d42bacf54e6feaff227541cd0257d53a", + "0x0d0477d6d727544d34a8d72e1adb27d4728b18cff70646d46cc403bc4fe34dcf", + "0x3be424a0a8e58c15e78daa5073a7560eaab8515706ca279588de4af7929173e9", + "0x5e1036bf8cb5cb0b28fa4676ae142ef61196fb15c1b98b4d3db5bd94fee033f9", + "0x3fefd3c548743199c8868cc305454fdbf2c21ac9b01ba73db203db49f4bd0ba2", + "0xedfa24cab5d249c1141e56d62e5dc156c8fa303f4ec400727974290f809beb18", + "0xa8083180fa45dbecd8c1156dd9a144fbcd3961e093b6ef6651d1bdff118c29db", + "0x687cfbf5fcd60536ee0a3c676c397fa08cbce7abced31a1f2c3dfac86717f05d", + "0x82166cd63df2806a41288770fdf210019f121c5b645ea8c093e106382948a87a", + "0xdf7aedb33ffaebd8103dbe2bceaf77a5c3c58ba62c2003c60da441b5ef07a69d", + "0x11abebc2f29ad3db5e667a08499728af7af5f7065bfd28db708a3372f98a8fbe", + "0x2d688be8453f4957c724a0e040713955887d292b50947bfafa435ae6d0c2362e", + "0xd3526a81f6a3ad4f41cfffa23e2b7eba9c9d21d7250de54859c0e5817630c5dd", + "0xa487fd205d43277e17e0091f101d42c76ba4fe8a7a9128f3c490658f05d4ae7e", + "0xce5f80e0cc00ee5c5d381c9ba0704ccfd2a504af77c2ff5640505557f2ace927", + "0x015bb4cee81b93274f7cea721a2e80a2c550a853df293b23f21457a5f57c4a2d", + "0xe4dfc765c5851223ce6e7314dade41c40dab1ae8362eb541ab37d5b3ee1a65c5", + "0x6aedfd384e66a9ca861edcbe8a05b001b4753a711a26bea48bda27aedbe05e3a", + "0x1c45c39cf9da91a093120d51a36bf313a87cebae05632e33c399310abbd44b2c", + "0xb77ed574d02e9525ed2e94069344f453d75f79eb961229ce2c59d1e6e676ea41", + "0x685cc57457bb3d03bfd379b300f7b37cf328c5fe7781adf72e45d0c4acc10c95", + "0x3693bd4a1676c6e972b0214e29a1b4a394cf06d11bd23f087d9821f8589fd675", + "0x956b6714ed861184865e713fe56a501727052b576eedab7e1bf40c607945acd0", + "0xc12a1fa434bc1064ae43c3c5e778fc0f989ebc0bc133505272c74cdd9bf54118", + "0x601143d7c0f087561a41e1de4edb618836443b6edce3a0df2d5b799de1c80c42", + "0xe096c2a27a60592bfd146820e9168884472cd55a2e8870fdb5963c3ba2845961", + "0xfe3ace091bcf0507e6b98abaca2149e2eb9cbe3a4e60f0388e10ce97183edc61", + "0x4a75b93caeddaa590b6baadfd83837c668b27e365ede5e4ec457421db31972ef", + "0x761ec4f49c18d354c86c1cc4a6fe1cce228619969f2a234738db2ee30e0a90e2", + "0xe975b38e68c88aad58667c8be5a8d1a6ffd98a65f4188c6e9638b9705c33c959", + "0xa740823653ac08f2f0605829f6845c33dd42d22c15904dac03030fab93b5af70", + "0x121c718ee3b96576d7782c01463c41dc1b7ee750e384bb17b8bbda05ae28945d", + "0x0eafed49f93e45f317a0ded18b4415e6e1a5322aae98845e64d2700d251428f5", + "0x35dcdc9e410e419f847cf0984b25c7770e7ca6067b863859916b550d4093177a", + "0x15d74439fb224224883c8a029e9a118f7986d149fad4005a28740d9d1212e27f", + "0xa67a2bcf21fe349bd4f307532dcb2ea2cc4af0d787a0c28b16bd3fbd4e20bda0", + "0xa75b22e41e8552d11b0973bc4158fbe4ca4d01d10025a4e37c2e8ed28169eab0", + "0x6734c5b31206eec8091ff5ddaa8ad64005a0db4e32e208b367c815ef40830490", + "0xb6bc2cfa20452f5ed9ad3b468b51d4376f18c96b2371c57edbd82be15978c775", + "0x66e93ed451caba1ab025f56d0c9b913dfa47cffc996de0adedf291d1f7347113", + "0x1c8a4ef436f319dd5b91b68b91fd6b5472c5e7fe792770978f68ab15ba9d9f41", + "0x7d5966a5062429aaedfc288108e187df3efdb0499793997fa67df862e4908f34", + "0x7bd80dbd41c9a27940f40c6d4e33bdde52bc4993d55faaf7decb23159dfa1ced", + "0x8c62dba3620f0505171f991041aada202250232d437706c54ed6275c585b6785", + "0xb0c3e92ea9ea5e039f62ac17fca05581b1678eb465d1d5c2d8b82ef4c291b595", + "0x7d79c3a6fc3ee2fb9dcabfe740c75b1f71ddc45e85322d05f52de52072553382", + "0xe4df071390581ecebcc2e4d9b28fa02d8803daa50313fbc99d46d5aaf68d2c47", + "0xc552404a7d4205a6c98de3e700c6a9a737a26fbadac75ccf256ceefeb2204e27", + "0xb4151a22ea49e569c96c508c2113dfe64fe47010b2e119d130d52464381827d9", + "0x7af4b2a9ef35c1560e166985343c2c2fa8934f2dc60de546698bec75b6b94b05", + "0x4f930b8345e17d79f45e166e22350ef49c0bd2afdc7daabe1820fc621a277673", + "0xb49cdcf5ed65df5d3c7e4039ca820b53223c76c4a2dea1408ae7246c38fabc7f", + "0xbe54a26ce7539ab703c29eca8332e2cb7467ecb3b1e57d9bc1773c72ee3de0c2", + "0x11f160e94b987a0f99d8dcd26c31f5f93c11e0fe655d661763c555516d2467c6", + "0xfdcf9e177297c4ed538cdf272764dafe1cc160c77cfd86dde826c3dae61f1c86", + "0xc56716de9bd54bce36533e8940ac6f87577856515d0c53a4504e39de75412683", + "0xbe46027c893d18e7fa330bac8a40c3e92506d1a0bb0af0c263a156257fad99e6", + "0xa2b70f28ccd8db25679b305488909faacf59fb4582d63cca02f0187b121514b0", + "0x7eb9ccc7cdbcdd63203e5f0b667cf52ad9649efb80afab8a4ba783bdf91ffe40", + "0xafcb8d3779a5377565b34e99eb6e442b5efc6f424a28bf7db17d738ddd845710", + "0xff994a6cb4b96118f36eed169ae53d27f656462bc896a56f95540a5a746bba23", + "0xc795d97829015910f3e3b6255b20d97208a929588b026fc4cb70571150e26ce6", + "0x9bb815f71639b8e937aef7eb14175aa0fac48537d47cefc8a1bd11e346c6d996", + "0x2e73d9363022d3a85690732994754d3d62a89e685606503083761f95da9e3d51", + "0x9235ad975c10d0e31ca634ea56d196e3d1ccf9664e76d320b5f938234b5a7ee5", + "0x549581618d4f9fbaf951ee19cd0ec5a737f7d001d0d7bdcf047b15cb2d6f15c2", + "0x35087f092f32f408c0e3e26de9d18f9e02a49588095ecb154e399eb2f180aeb4", + "0x1fec7cac295a794ff6bc4c467085d3b6f059eefecf45e5e1b41d7dd97e27d8d9", + "0xf5221e288196d212e947e32f0148cf852f33187cfaba92851ab01edc81b6220b", + "0x7c6f09c52c3820e18de480079909f621f7831a66d0302dead6c95a406c34088d", + "0x0543d10f3136562c7d55351b450dd6166a04ba5ce7c4912a5fe255dd4951602f", + "0xa3b3f92544f341348a0f3cae0c920a5df3641ff56240e8c573fd64a4f792cef7", + "0x369ff631453b663b5e92f86165915c8bee5839d00f02af94df557e54bd67b521", + "0x424cdb20d43209623adced802bc6a4a541be26e5248d071af27c8542e71a4901", + "0x6e4af40b4e28ff61c1154f83d097bf7fccbd9207fbc80f813a4e7ad97989e51a", + "0x75a1b537f45d91c144d019a4a0c59dc32833c94657ba6a4def9e3c4b32f94244", + "0xd94664286cd87ccc638374b0f0beafb653300015a34bf0a6abf53f1b4852ac63", + "0x08135522f77300a4bee17fb5a4dd994f2fafed2f407b81ed67a88cc95069b16f", + "0x92c66de2b301682eee3e264cccdaf7ff206c4d2be48365283c96b18432c10ddf", + "0x32814ad4cd9c5f7de44cb30593cdd174dda823ce388a97195ee389a39b26ed21", + "0xa9b0a90323e5b1562d3b1ba3ef633fc6a6a3bcf5776bcb40a2fde6f28315ad9e", + "0x209d18e8c1d6ff27c0e6901190222f52661cb88c3893d34cc900d8b0ee09b939", + "0x5bd2b0ab46d7ea5806a82afe291cb4b2be874a2caa1dc4b41befcb87a5e5ed41", + "0x728ed1f39fbeaff0e0fa254217f8eb3265c15d49bb91d83426e03576f045bf0a", + "0x69ea0b64a6cdc2a99d38644ff2b0a823ce70a69fde8e5e00671b6813d340c136", + "0x57c683eeb4f88f78ce064371e4c994883a6e73ca6e7df6ea0e293c0bb34581d7", + "0x5f852b669a4040c0e97d450a449980aa8eecd50d028582c7a48608e96b497edb", + "0x016aced3dbc08614f3add9c940051b4021f60538c414bf6efc7d53e739642803", + "0xbcdbdbf5ec019c8f9ea2d1d235aca2cd4890c18427a4a87d5b4fd682409d7e2e", + "0xa93231759f0ac330e3900b1f2d33426def6e37589c921c06051378021f0a85ee", + "0x35fc566ee64366dff4707b644810ad4b16ce3487ecf926ec9056fc1a6c31b0c8", + "0xe324823645a929c02d7f66dc9013300011a467729cff44dd3bb39a0f1652afca", + "0xaaf751e0f43b97130510db8bdd97e6e3b3de926ddcc156bda6758c283b215086", + "0xa66ebfc1229b821b9451f009ab925b5dd0215effe5c0d2c61712d8b90dc91006", + "0x26e7c111eea5a610d46ac5a93ac367a922a2c20cd2011a18e8ccd1364015a7f1", + "0xaec285ac49960b8c39b12e8eacdd54ddd7171e2f626f1dfa24c235baba0e918c", + "0xdc5103d8cd8f3d1c6e18bd242273e716532b5824006f420f32c02db7de846a77", + "0xb65d1d80f0412067cacb2046991a910c263af4140cd82aab2a153315ace21bba", + "0x2b1a20287cbb2d3dd6046917ae416c2d826d3778fd647fae25c5b7d2359e98f3" + ], + "transactionsRoot": "0xdbeb4a4822d0733142bc97ebc167b5224e5fe6a3fbf841262cc1b9f394cbd46e", + "uncles": [], + "withdrawals": [], + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" + } +] \ No newline at end of file diff --git a/trace_decoder/tests/consistent-with-header.rs b/trace_decoder/tests/consistent-with-header.rs index 609fd57bb..63df41b4f 100644 --- a/trace_decoder/tests/consistent-with-header.rs +++ b/trace_decoder/tests/consistent-with-header.rs @@ -11,6 +11,7 @@ use itertools::Itertools; use libtest_mimic::{Arguments, Trial}; use mpt_trie::partial_trie::PartialTrie as _; use trace_decoder::observer::DummyObserver; +use zero::prover::WIRE_DISPOSITION; fn main() -> anyhow::Result<()> { let mut trials = vec![]; @@ -29,6 +30,7 @@ fn main() -> anyhow::Result<()> { other.clone(), batch_size, &mut DummyObserver::new(), + WIRE_DISPOSITION, ) .map_err(|e| format!("{e:?}"))?; // get the full cause chain check!(gen_inputs.len() >= 2); diff --git a/trace_decoder/tests/simulate-execution.rs b/trace_decoder/tests/simulate-execution.rs index d0476c2b7..fc7136c34 100644 --- a/trace_decoder/tests/simulate-execution.rs +++ b/trace_decoder/tests/simulate-execution.rs @@ -9,6 +9,7 @@ use common::{cases, Case}; use libtest_mimic::{Arguments, Trial}; use plonky2::field::goldilocks_field::GoldilocksField; use trace_decoder::observer::DummyObserver; +use zero::prover::WIRE_DISPOSITION; fn main() -> anyhow::Result<()> { let mut trials = vec![]; @@ -20,11 +21,16 @@ fn main() -> anyhow::Result<()> { other, } in cases()? { - let gen_inputs = - trace_decoder::entrypoint(trace, other, batch_size, &mut DummyObserver::new()) - .context(format!( - "error in `trace_decoder` for {name} at batch size {batch_size}" - ))?; + let gen_inputs = trace_decoder::entrypoint( + trace, + other, + batch_size, + &mut DummyObserver::new(), + WIRE_DISPOSITION, + ) + .context(format!( + "error in `trace_decoder` for {name} at batch size {batch_size}" + ))?; for (ix, gi) in gen_inputs.into_iter().enumerate() { trials.push(Trial::test( format!("{name}@{batch_size}/{ix}"), diff --git a/zero/Cargo.toml b/zero/Cargo.toml index 22c2a8bfb..96d3bdeba 100644 --- a/zero/Cargo.toml +++ b/zero/Cargo.toml @@ -15,6 +15,7 @@ alloy-compat = "0.1.0" anyhow.workspace = true async-stream.workspace = true axum.workspace = true +cfg-if = "1.0.0" clap = { workspace = true, features = ["derive", "string"] } compat.workspace = true directories = "5.0.1" @@ -25,6 +26,7 @@ hashbrown.workspace = true hex.workspace = true itertools.workspace = true keccak-hash.workspace = true +lazy-regex = "3.3.0" lru.workspace = true mpt_trie.workspace = true num-traits.workspace = true @@ -32,7 +34,6 @@ once_cell.workspace = true paladin-core.workspace = true plonky2.workspace = true plonky2_maybe_rayon.workspace = true -regex = "1.5.4" rlp.workspace = true ruint = { workspace = true, features = ["num-traits", "primitive-types"] } serde.workspace = true @@ -50,11 +51,13 @@ zk_evm_common.workspace = true [target.'cfg(not(target_env = "msvc"))'.dependencies] jemallocator = "0.5.4" - [build-dependencies] anyhow.workspace = true vergen-git2 = { version = "1.0.0", features = ["build"] } +[dev-dependencies] +mockall = "0.13.0" + [features] default = ["eth_mainnet"] diff --git a/zero/README.md b/zero/README.md index 936a73c91..e320b8d62 100644 --- a/zero/README.md +++ b/zero/README.md @@ -425,13 +425,13 @@ For testing proof generation for blocks, the `testing` branch should be used. If you want to generate a full block proof, you can use `tools/prove_rpc.sh`: ```sh -./prove_rpc.sh +./prove_rpc.sh ``` Which may look like this: ```sh -./prove_rpc.sh 17 18 http://127.0.0.1:8545 jerigon false +./prove_rpc.sh 17 18 http://127.0.0.1:8545 jerigon ``` Which will attempt to generate proofs for blocks `17` & `18` consecutively and incorporate the previous block proof during generation. @@ -439,7 +439,7 @@ Which will attempt to generate proofs for blocks `17` & `18` consecutively and i A few other notes: - Proving blocks is very resource intensive in terms of both CPU and memory. You can also only generate the witness for a block instead (see [Generating Witnesses Only](#generating-witnesses-only)) to significantly reduce the CPU and memory requirements. -- Because incorporating the previous block proof requires a chain of proofs back to the last checkpoint height, you can also disable this requirement by passing `true` for `` (which internally just sets the current checkpoint height to the previous block height). +- Because incorporating the previous block proof requires a chain of proofs back to the last checkpoint height, you must specify a ``. The above example omits this argument which causes the command to treat block `16` as the checkpoint. - When proving multiple blocks concurrently, one may need to increase the system resource usage limit because of the number of RPC connections opened simultaneously, in particular when running a native tracer. For Linux systems, it is recommended to set `ulimit` to 8192. ### Generating Witnesses Only @@ -447,13 +447,13 @@ A few other notes: If you want to test a block without the high CPU & memory requirements that come with creating a full proof, you can instead generate only the witness using `tools/prove_rpc.sh` in the `test_only` mode: ```sh -./prove_rpc.sh test_only +./prove_rpc.sh test_only ``` Filled in: ```sh -./prove_rpc.sh 18299898 18299899 http://34.89.57.138:8545 jerigon true 0 0 test_only +./prove_rpc.sh 18299898 18299899 http://34.89.57.138:8545 jerigon 18299897 0 0 test_only ``` Finally, note that both of these testing scripts force proof generation to be sequential by allowing only one worker. Because of this, this is not a realistic representation of performance but makes the debugging logs much easier to follow. diff --git a/zero/src/bin/leader.rs b/zero/src/bin/leader.rs index 728f6bb0e..5d11845c6 100644 --- a/zero/src/bin/leader.rs +++ b/zero/src/bin/leader.rs @@ -5,11 +5,12 @@ use std::sync::Arc; use anyhow::Result; use clap::Parser; use cli::Command; -use client::RpcParams; +use paladin::config::Config; use paladin::runtime::Runtime; use tracing::info; use zero::env::load_dotenvy_vars_if_present; -use zero::prover::ProverConfig; +use zero::prover::{ProofRuntime, ProverConfig}; +use zero::rpc::retry::build_http_retry_provider; use zero::{ block_interval::BlockInterval, prover_state::persistence::set_circuit_cache_dir_env_if_not_set, }; @@ -24,6 +25,10 @@ mod leader { pub mod stdio; } +const HEAVY_PROOF_ROUTING_KEY: &str = "heavy-proof"; +const LIGHT_PROOF_ROUTING_KEY: &str = "light-proof"; +const DEFAULT_ROUTING_KEY: &str = paladin::runtime::DEFAULT_ROUTING_KEY; + #[tokio::main] async fn main() -> Result<()> { load_dotenvy_vars_if_present(); @@ -36,7 +41,33 @@ async fn main() -> Result<()> { return zero::prover_state::persistence::delete_all(); } - let runtime = Arc::new(Runtime::from_config(&args.paladin, register()).await?); + let mut light_proof_routing_key = DEFAULT_ROUTING_KEY.to_string(); + let mut heavy_proof_routing_key = DEFAULT_ROUTING_KEY.to_string(); + if args.worker_run_mode == cli::WorkerRunMode::Affinity { + // If we're running in affinity mode, we need to set the routing key for the + // heavy proof and light proof. + info!("Workers running in affinity mode"); + light_proof_routing_key = LIGHT_PROOF_ROUTING_KEY.to_string(); + heavy_proof_routing_key = HEAVY_PROOF_ROUTING_KEY.to_string(); + } + + let light_proof_paladin_args = Config { + task_bus_routing_key: Some(light_proof_routing_key), + ..args.paladin.clone() + }; + + let heavy_proof_paladin_args = Config { + task_bus_routing_key: Some(heavy_proof_routing_key), + ..args.paladin + }; + + let light_proof = Runtime::from_config(&light_proof_paladin_args, register()).await?; + let heavy_proof = Runtime::from_config(&heavy_proof_paladin_args, register()).await?; + + let proof_runtime = Arc::new(ProofRuntime { + light_proof, + heavy_proof, + }); let prover_config: ProverConfig = args.prover_config.into(); if prover_config.block_pool_size == 0 { panic!("block-pool-size must be greater than 0"); @@ -55,7 +86,7 @@ async fn main() -> Result<()> { match args.command { Command::Stdio { previous_proof } => { let previous_proof = get_previous_proof(previous_proof)?; - stdio::stdio_main(runtime, previous_proof, Arc::new(prover_config)).await?; + stdio::stdio_main(proof_runtime, previous_proof, Arc::new(prover_config)).await?; } Command::Http { port, output_dir } => { // check if output_dir exists, is a directory, and is writable @@ -67,31 +98,41 @@ async fn main() -> Result<()> { panic!("output-dir is not a writable directory"); } - http::http_main(runtime, port, output_dir, Arc::new(prover_config)).await?; + http::http_main(proof_runtime, port, output_dir, Arc::new(prover_config)).await?; } Command::Rpc { rpc_url, rpc_type, - block_interval, - checkpoint_block_number, + checkpoint_block, previous_proof, block_time, + start_block, + end_block, backoff, max_retries, } => { + // Construct the provider. let previous_proof = get_previous_proof(previous_proof)?; - let block_interval = BlockInterval::new(&block_interval)?; + let retry_provider = build_http_retry_provider(rpc_url.clone(), backoff, max_retries)?; + let cached_provider = Arc::new(zero::provider::CachedProvider::new( + retry_provider, + rpc_type, + )); + + // Construct the block interval. + let block_interval = + BlockInterval::new(cached_provider.clone(), start_block, end_block).await?; + // Convert the checkpoint block to a block number. + let checkpoint_block_number = + BlockInterval::block_to_num(cached_provider.clone(), checkpoint_block).await?; + + // Prove the block interval. info!("Proving interval {block_interval}"); client_main( - runtime, - RpcParams { - rpc_url, - rpc_type, - backoff, - max_retries, - block_time, - }, + proof_runtime, + cached_provider, + block_time, block_interval, LeaderConfig { checkpoint_block_number, diff --git a/zero/src/bin/leader/cli.rs b/zero/src/bin/leader/cli.rs index 3569efc41..c085ae83f 100644 --- a/zero/src/bin/leader/cli.rs +++ b/zero/src/bin/leader/cli.rs @@ -1,11 +1,14 @@ use std::path::PathBuf; +use alloy::eips::BlockId; use alloy::transports::http::reqwest::Url; -use clap::{Parser, Subcommand, ValueHint}; +use clap::{Parser, Subcommand, ValueEnum, ValueHint}; use zero::prover::cli::CliProverConfig; use zero::prover_state::cli::CliProverStateConfig; use zero::rpc::RpcType; +const WORKER_HELP_HEADING: &str = "Worker Config options"; + /// zero-bin leader config #[derive(Parser)] #[command(version = zero::version(), propagate_version = true)] @@ -23,8 +26,27 @@ pub(crate) struct Cli { // mode. #[clap(flatten)] pub(crate) prover_state_config: CliProverStateConfig, + + // Mode to use for worker for setup (affinity or default) + #[arg(long = "worker-run-mode", help_heading = WORKER_HELP_HEADING, value_enum, default_value = "default")] + pub(crate) worker_run_mode: WorkerRunMode, +} + +/// Defines the mode for worker setup in terms of job allocation: +/// +/// - `Affinity`: Workers are assigned specific types of jobs based on their +/// capabilities, distinguishing between heavy and light jobs. +/// - `Default`: No job distinction is made — any worker can handle any type of +/// job, whether heavy or light. +/// +/// This enum allows for flexible worker configuration based on workload needs. +#[derive(ValueEnum, Clone, PartialEq, Debug)] +pub enum WorkerRunMode { + Affinity, + Default, } +#[allow(clippy::large_enum_variant)] #[derive(Subcommand)] pub(crate) enum Command { /// Deletes all the previously cached circuits. @@ -43,12 +65,17 @@ pub(crate) enum Command { // The node RPC type (jerigon / native). #[arg(long, short = 't', default_value = "jerigon")] rpc_type: RpcType, - /// The block interval for which to generate a proof. - #[arg(long, short = 'i')] - block_interval: String, - /// The checkpoint block number. - #[arg(short, long, default_value_t = 0)] - checkpoint_block_number: u64, + /// The start of the block range to prove (inclusive). + #[arg(long, short = 's')] + start_block: BlockId, + /// The end of the block range to prove (inclusive). + /// If not provided, leader will work in dynamic mode from `start_block` + /// following head of the blockchain. + #[arg(long, short = 'e')] + end_block: Option, + /// The checkpoint block. + #[arg(short, long, default_value = "0")] + checkpoint_block: BlockId, /// The previous proof output. #[arg(long, short = 'f', value_hint = ValueHint::FilePath)] previous_proof: Option, diff --git a/zero/src/bin/leader/client.rs b/zero/src/bin/leader/client.rs index 455cceb8b..6f2015833 100644 --- a/zero/src/bin/leader/client.rs +++ b/zero/src/bin/leader/client.rs @@ -1,26 +1,19 @@ use std::sync::Arc; +use alloy::providers::Provider; use alloy::rpc::types::{BlockId, BlockNumberOrTag}; -use alloy::transports::http::reqwest::Url; +use alloy::transports::Transport; use anyhow::{anyhow, Result}; -use paladin::runtime::Runtime; use tokio::sync::mpsc; use tracing::info; use zero::block_interval::{BlockInterval, BlockIntervalStream}; use zero::pre_checks::check_previous_proof_and_checkpoint; use zero::proof_types::GeneratedBlockProof; use zero::prover::{self, BlockProverInput, ProverConfig}; +use zero::provider::CachedProvider; use zero::rpc; -use zero::rpc::{retry::build_http_retry_provider, RpcType}; -#[derive(Debug)] -pub struct RpcParams { - pub rpc_url: Url, - pub rpc_type: RpcType, - pub backoff: u64, - pub max_retries: u32, - pub block_time: u64, -} +use crate::ProofRuntime; #[derive(Debug)] pub struct LeaderConfig { @@ -30,24 +23,21 @@ pub struct LeaderConfig { } /// The main function for the client. -pub(crate) async fn client_main( - runtime: Arc, - rpc_params: RpcParams, +pub(crate) async fn client_main( + proof_runtime: Arc, + cached_provider: Arc>, + block_time: u64, block_interval: BlockInterval, mut leader_config: LeaderConfig, -) -> Result<()> { +) -> Result<()> +where + ProviderT: Provider + 'static, + TransportT: Transport + Clone, +{ use futures::StreamExt; let test_only = leader_config.prover_config.test_only; - let cached_provider = Arc::new(zero::provider::CachedProvider::new( - build_http_retry_provider( - rpc_params.rpc_url.clone(), - rpc_params.backoff, - rpc_params.max_retries, - )?, - )); - if !test_only { // For actual proof runs, perform a sanity check on the provided inputs. check_previous_proof_and_checkpoint( @@ -63,10 +53,10 @@ pub(crate) async fn client_main( let (block_tx, block_rx) = mpsc::channel::<(BlockProverInput, bool)>(zero::BLOCK_CHANNEL_SIZE); // Run proving task - let runtime_ = runtime.clone(); + let proof_runtime_ = proof_runtime.clone(); let proving_task = tokio::spawn(prover::prove( block_rx, - runtime_, + proof_runtime_, leader_config.previous_proof.take(), Arc::new(leader_config.prover_config), )); @@ -75,7 +65,7 @@ pub(crate) async fn client_main( let mut block_interval_stream: BlockIntervalStream = match block_interval { block_interval @ BlockInterval::FollowFrom { .. } => { block_interval - .into_unbounded_stream(cached_provider.clone(), rpc_params.block_time) + .into_unbounded_stream(cached_provider.clone(), block_time) .await? } _ => block_interval.into_bounded_stream()?, @@ -91,7 +81,6 @@ pub(crate) async fn client_main( cached_provider.clone(), block_id, leader_config.checkpoint_block_number, - rpc_params.rpc_type, ) .await?; block_tx @@ -112,7 +101,8 @@ pub(crate) async fn client_main( } } - runtime.close().await?; + proof_runtime.light_proof.close().await?; + proof_runtime.heavy_proof.close().await?; if test_only { info!("All proof witnesses have been generated successfully."); diff --git a/zero/src/bin/leader/http.rs b/zero/src/bin/leader/http.rs index 02e968ec0..0bc90ac40 100644 --- a/zero/src/bin/leader/http.rs +++ b/zero/src/bin/leader/http.rs @@ -3,16 +3,17 @@ use std::{net::SocketAddr, path::PathBuf, sync::Arc}; use alloy::primitives::U256; use anyhow::{bail, Result}; use axum::{http::StatusCode, routing::post, Json, Router}; -use paladin::runtime::Runtime; use serde::{Deserialize, Serialize}; use serde_json::to_writer; use tracing::{debug, error, info}; use zero::proof_types::GeneratedBlockProof; use zero::prover::{BlockProverInput, ProverConfig}; +use crate::ProofRuntime; + /// The main function for the HTTP mode. pub(crate) async fn http_main( - runtime: Arc, + proof_runtime: Arc, port: u16, output_dir: PathBuf, prover_config: Arc, @@ -22,10 +23,7 @@ pub(crate) async fn http_main( let app = Router::new().route( "/prove", - post({ - let runtime = runtime.clone(); - move |body| prove(body, runtime, output_dir.clone(), prover_config) - }), + post(move |body| prove(body, proof_runtime, output_dir.clone(), prover_config)), ); let listener = tokio::net::TcpListener::bind(&addr).await?; Ok(axum::serve(listener, app).await?) @@ -62,7 +60,7 @@ struct HttpProverInput { async fn prove( Json(payload): Json, - runtime: Arc, + proof_runtime: Arc, output_dir: PathBuf, prover_config: Arc, ) -> StatusCode { @@ -74,7 +72,7 @@ async fn prove( payload .prover_input .prove_test( - runtime, + proof_runtime, payload.previous.map(futures::future::ok), prover_config, ) @@ -83,7 +81,7 @@ async fn prove( payload .prover_input .prove( - runtime, + proof_runtime, payload.previous.map(futures::future::ok), prover_config, ) diff --git a/zero/src/bin/leader/stdio.rs b/zero/src/bin/leader/stdio.rs index 306a08c65..9e451e13f 100644 --- a/zero/src/bin/leader/stdio.rs +++ b/zero/src/bin/leader/stdio.rs @@ -2,15 +2,16 @@ use std::io::Read; use std::sync::Arc; use anyhow::{anyhow, Result}; -use paladin::runtime::Runtime; use tokio::sync::mpsc; use tracing::info; use zero::proof_types::GeneratedBlockProof; use zero::prover::{self, BlockProverInput, ProverConfig}; +use crate::ProofRuntime; + /// The main function for the stdio mode. pub(crate) async fn stdio_main( - runtime: Arc, + proof_runtime: Arc, previous: Option, prover_config: Arc, ) -> Result<()> { @@ -24,9 +25,14 @@ pub(crate) async fn stdio_main( let (block_tx, block_rx) = mpsc::channel::<(BlockProverInput, bool)>(zero::BLOCK_CHANNEL_SIZE); - let runtime_ = runtime.clone(); + let proof_runtime_ = proof_runtime.clone(); let prover_config_ = prover_config.clone(); - let proving_task = tokio::spawn(prover::prove(block_rx, runtime_, previous, prover_config_)); + let proving_task = tokio::spawn(prover::prove( + block_rx, + proof_runtime_, + previous, + prover_config_, + )); let interval_len = block_prover_inputs.len(); for (index, block_prover_input) in block_prover_inputs.into_iter().enumerate() { @@ -48,7 +54,8 @@ pub(crate) async fn stdio_main( } } - runtime.close().await?; + proof_runtime.light_proof.close().await?; + proof_runtime.heavy_proof.close().await?; if prover_config.test_only { info!("All proof witnesses have been generated successfully."); diff --git a/zero/src/bin/rpc.rs b/zero/src/bin/rpc.rs index d49cdde5c..a8a42a6d4 100644 --- a/zero/src/bin/rpc.rs +++ b/zero/src/bin/rpc.rs @@ -14,6 +14,7 @@ use url::Url; use zero::block_interval::BlockInterval; use zero::block_interval::BlockIntervalStream; use zero::prover::BlockProverInput; +use zero::prover::WIRE_DISPOSITION; use zero::provider::CachedProvider; use zero::rpc; @@ -24,7 +25,6 @@ struct FetchParams { pub start_block: u64, pub end_block: u64, pub checkpoint_block_number: Option, - pub rpc_type: RpcType, } #[derive(Args, Clone, Debug)] @@ -97,13 +97,9 @@ where let (block_num, _is_last_block) = block_interval_elem?; let block_id = BlockId::Number(BlockNumberOrTag::Number(block_num)); // Get the prover input for particular block. - let result = rpc::block_prover_input( - cached_provider.clone(), - block_id, - checkpoint_block_number, - params.rpc_type, - ) - .await?; + let result = + rpc::block_prover_input(cached_provider.clone(), block_id, checkpoint_block_number) + .await?; block_prover_inputs.push(result); } @@ -113,11 +109,12 @@ where impl Cli { /// Execute the cli command. pub async fn execute(self) -> anyhow::Result<()> { - let cached_provider = Arc::new(CachedProvider::new(build_http_retry_provider( + let retry_provider = build_http_retry_provider( self.config.rpc_url.clone(), self.config.backoff, self.config.max_retries, - )?)); + )?; + let cached_provider = Arc::new(CachedProvider::new(retry_provider, self.config.rpc_type)); match self.command { Command::Fetch { @@ -129,7 +126,6 @@ impl Cli { start_block, end_block, checkpoint_block_number, - rpc_type: self.config.rpc_type, }; let block_prover_inputs = @@ -155,7 +151,6 @@ impl Cli { start_block: block_number, end_block: block_number, checkpoint_block_number: None, - rpc_type: self.config.rpc_type, }; let block_prover_inputs = @@ -172,6 +167,7 @@ impl Cli { block_prover_input.other_data, batch_size, &mut DummyObserver::new(), + WIRE_DISPOSITION, )?; if let Some(index) = tx_info.transaction_index { diff --git a/zero/src/bin/trie_diff.rs b/zero/src/bin/trie_diff.rs index 4c00d2ca3..480441486 100644 --- a/zero/src/bin/trie_diff.rs +++ b/zero/src/bin/trie_diff.rs @@ -20,12 +20,13 @@ use anyhow::Result; use clap::{Parser, ValueHint}; use evm_arithmetization::generation::DebugOutputTries; use futures::{future, TryStreamExt}; +use lazy_regex::regex_captures; use paladin::directive::{Directive, IndexedStream}; use paladin::runtime::Runtime; -use regex::Regex; use trace_decoder::observer::TriesObserver; use tracing::{error, info}; use zero::ops::register; +use zero::prover::WIRE_DISPOSITION; use zero::prover::{cli::CliProverConfig, BlockProverInput, ProverConfig}; /// This binary is a debugging tool used to compare @@ -97,6 +98,7 @@ async fn main() -> Result<()> { block_prover_input.other_data.clone(), prover_config.batch_size, &mut observer, + WIRE_DISPOSITION, )?; info!( "Number of collected batch tries for block {}: {}", @@ -130,10 +132,11 @@ async fn main() -> Result<()> { { // Try to parse block and batch index from error message. let error_message = e2.to_string(); - let re = Regex::new(r"block:(\d+) batch:(\d+)")?; - if let Some(cap) = re.captures(&error_message) { - let block_number: u64 = cap[1].parse()?; - let batch_index: usize = cap[2].parse()?; + if let Some((_, block_number, block_index)) = + regex_captures!(r"block:(\d+) batch:(\d+)", error_message.as_str()) + { + let block_number: u64 = block_number.parse()?; + let batch_index: usize = block_index.parse()?; let prover_tries = zero::debug_utils::load_tries_from_disk(block_number, batch_index)?; @@ -145,8 +148,8 @@ async fn main() -> Result<()> { &DebugOutputTries { state_trie: observer.data[prover_tries.batch_index] .tries - .state - .as_hashed_partial_trie() + .world + .state_trie() .clone(), transaction_trie: observer.data[prover_tries.batch_index] .tries diff --git a/zero/src/block_interval.rs b/zero/src/block_interval.rs index e424076e0..27d03fe3c 100644 --- a/zero/src/block_interval.rs +++ b/zero/src/block_interval.rs @@ -1,16 +1,52 @@ use std::pin::Pin; use std::sync::Arc; +use std::{future::Future, ops::Range}; -use alloy::primitives::B256; -use alloy::rpc::types::eth::BlockId; -use alloy::{hex, providers::Provider, transports::Transport}; +use alloy::rpc::types::{eth::BlockId, Block}; use anyhow::{anyhow, Result}; use async_stream::try_stream; use futures::Stream; +#[cfg(test)] +use mockall::automock; use tracing::info; -use crate::parsing; -use crate::provider::CachedProvider; +#[cfg_attr(test, automock)] +pub trait BlockIntervalProvider { + fn get_block_by_id( + &self, + block_id: BlockId, + ) -> impl Future>> + Send; + + fn latest_block_number(&self) -> impl Future> + Send; +} + +#[cfg(not(test))] +mod block_interval_provider_impl { + use alloy::providers::Provider; + use alloy::rpc::types::BlockTransactionsKind; + use alloy::transports::Transport; + + use super::{Block, BlockId, BlockIntervalProvider}; + + /// Implements the [`BlockIntervalProvider`] trait for [`Provider`]. + impl BlockIntervalProvider for P + where + T: Transport + Clone, + P: Provider, + { + /// Retrieves block without transaction contents from the provider. + async fn get_block_by_id(&self, block_id: BlockId) -> anyhow::Result> { + Ok(self + .get_block(block_id, BlockTransactionsKind::Hashes) + .await?) + } + + /// Retrieves the latest block number from the provider. + async fn latest_block_number(&self) -> anyhow::Result { + Ok(self.get_block_number().await?) + } + } +} /// The async stream of block numbers. /// The second bool flag indicates if the element is last in the interval. @@ -20,9 +56,9 @@ pub type BlockIntervalStream = Pin), + Range(Range), // Dynamic interval from the start block to the latest network block FollowFrom { // Interval starting block number @@ -31,64 +67,43 @@ pub enum BlockInterval { } impl BlockInterval { - /// Create a new block interval + /// Creates a new block interval. /// - /// A valid block range is of the form: - /// * `block_number` for a single block number - /// * `lhs..rhs`, `lhs..=rhs` as an exclusive/inclusive range - /// * `lhs..` for a range starting from `lhs` to the chain tip. `lhs..=` - /// is also valid format. + /// If end_block is None, the interval is unbounded and will follow from + /// start_block. If start_block == end_block, the interval is a single + /// block. Otherwise, the interval is an inclusive range from start_block to + /// end_block. /// - /// # Example - /// - /// ```rust - /// # use alloy::rpc::types::eth::BlockId; - /// # use zero::block_interval::BlockInterval; - /// assert_eq!(BlockInterval::new("0..10").unwrap(), BlockInterval::Range(0..10)); - /// assert_eq!(BlockInterval::new("0..=10").unwrap(), BlockInterval::Range(0..11)); - /// assert_eq!(BlockInterval::new("32141").unwrap(), BlockInterval::SingleBlockId(BlockId::Number(32141.into()))); - /// assert_eq!(BlockInterval::new("100..").unwrap(), BlockInterval::FollowFrom{start_block: 100}); - /// ``` - pub fn new(s: &str) -> anyhow::Result { - if (s.starts_with("0x") && s.len() == 66) || s.len() == 64 { - // Try to parse hash - let hash = s - .parse::() - .map_err(|_| anyhow!("invalid block hash '{s}'"))?; - return Ok(BlockInterval::SingleBlockId(BlockId::Hash(hash.into()))); - } - - // First we parse for inclusive range and then for exclusive range, - // because both separators start with `..` - if let Ok(range) = parsing::parse_range_inclusive(s) { - Ok(BlockInterval::Range(range)) - } else if let Ok(range) = parsing::parse_range_exclusive(s) { - Ok(BlockInterval::Range(range)) - } - // Now we look for the follow from range - else if s.contains("..") { - let mut split = s.trim().split("..").filter(|s| *s != "=" && !s.is_empty()); + /// end_block is always treated as inclusive because it may have been + /// specified as a block hash. + pub async fn new( + provider: Arc>, + start_block: BlockId, + end_block: Option, + ) -> Result { + // Ensure the start block is a valid block number. + let start_block_num = Self::block_to_num(provider.clone(), start_block).await?; - // Any other character after `..` or `..=` is invalid - if split.clone().count() > 1 { - return Err(anyhow!("invalid block interval range '{s}'")); + // Create the block interval. + match end_block { + // Start and end are the same. + Some(end_block) if end_block == start_block => { + Ok(BlockInterval::SingleBlockId(start_block_num)) } - let num = split - .next() - .map(|num| { - num.parse::() - .map_err(|_| anyhow!("invalid block number '{num}'")) - }) - .ok_or(anyhow!("invalid block interval range '{s}'"))??; - return Ok(BlockInterval::FollowFrom { start_block: num }); - } - // Only single block number is left to try to parse - else { - let num: u64 = s - .trim() - .parse() - .map_err(|_| anyhow!("invalid block interval range '{s}'"))?; - return Ok(BlockInterval::SingleBlockId(BlockId::Number(num.into()))); + // Bounded range provided. + Some(end_block) => { + let end_block_num = Self::block_to_num(provider.clone(), end_block).await?; + if end_block_num <= start_block_num { + return Err(anyhow!( + "invalid block interval range ({start_block_num}..{end_block_num})" + )); + } + Ok(BlockInterval::Range(start_block_num..end_block_num + 1)) + } + // Unbounded range provided. + None => Ok(BlockInterval::FollowFrom { + start_block: start_block_num, + }), } } @@ -96,10 +111,7 @@ impl BlockInterval { /// second bool flag indicates if the element is last in the interval. pub fn into_bounded_stream(self) -> Result { match self { - BlockInterval::SingleBlockId(BlockId::Number(num)) => { - let num = num - .as_number() - .ok_or(anyhow!("invalid block number '{num}'"))?; + BlockInterval::SingleBlockId(num) => { let range = (num..num + 1).map(|it| Ok((it, true))).collect::>(); Ok(Box::pin(futures::stream::iter(range))) @@ -110,42 +122,33 @@ impl BlockInterval { range.last_mut().map(|it| it.as_mut().map(|it| it.1 = true)); Ok(Box::pin(futures::stream::iter(range))) } - _ => Err(anyhow!( + BlockInterval::FollowFrom { .. } => Err(anyhow!( "could not create bounded stream from unbounded follow-from interval", )), } } + /// Returns the start block number of the interval. pub fn get_start_block(&self) -> Result { match self { - BlockInterval::SingleBlockId(BlockId::Number(num)) => { - let num_value = num - .as_number() - .ok_or_else(|| anyhow!("invalid block number '{num}'"))?; - Ok(num_value) // Return the valid block number - } + BlockInterval::SingleBlockId(num) => Ok(*num), BlockInterval::Range(range) => Ok(range.start), BlockInterval::FollowFrom { start_block, .. } => Ok(*start_block), - _ => Err(anyhow!("Unknown BlockInterval variant")), // Handle unknown variants } } /// Convert the block interval into an unbounded async stream of block /// numbers. Query the blockchain node for the latest block number. - pub async fn into_unbounded_stream( + pub async fn into_unbounded_stream( self, - cached_provider: Arc>, + provider: Arc + 'static>, block_time: u64, - ) -> Result - where - ProviderT: Provider + 'static, - TransportT: Transport + Clone, - { + ) -> Result { match self { BlockInterval::FollowFrom { start_block } => Ok(Box::pin(try_stream! { let mut current = start_block; loop { - let last_block_number = cached_provider.get_provider().await?.get_block_number().await.map_err(|e: alloy::transports::RpcError<_>| { + let last_block_number = provider.latest_block_number().await.map_err(|e| { anyhow!("could not retrieve latest block number from the provider: {e}") })?; @@ -166,15 +169,40 @@ impl BlockInterval { )), } } + + /// Converts a [`BlockId`] into a block number by querying the provider. + pub async fn block_to_num( + provider: Arc>, + block: BlockId, + ) -> Result { + let block_num = match block { + // Number already provided + BlockId::Number(num) => num + .as_number() + .ok_or_else(|| anyhow!("invalid block number '{num}'"))?, + + // Hash provided, query the provider for the block number. + BlockId::Hash(hash) => { + let block = provider + .get_block_by_id(BlockId::Hash(hash)) + .await + .map_err(|e| { + anyhow!("could not retrieve block number by hash from the provider: {e}") + })?; + block + .ok_or(anyhow!("block not found {hash}"))? + .header + .number + } + }; + Ok(block_num) + } } impl std::fmt::Display for BlockInterval { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { - BlockInterval::SingleBlockId(block_id) => match block_id { - BlockId::Number(it) => f.write_fmt(format_args!("{}", it)), - BlockId::Hash(it) => f.write_fmt(format_args!("0x{}", &hex::encode(it.block_hash))), - }, + BlockInterval::SingleBlockId(num) => f.write_fmt(format_args!("{}", num)), BlockInterval::Range(range) => { write!(f, "{}..{}", range.start, range.end) } @@ -185,92 +213,174 @@ impl std::fmt::Display for BlockInterval { } } -impl std::str::FromStr for BlockInterval { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - BlockInterval::new(s) - } -} - #[cfg(test)] mod test { use alloy::primitives::B256; + use alloy::rpc::types::{Block, Header, Transaction}; + use alloy::transports::BoxTransport; + use mockall::predicate::*; + use MockBlockIntervalProvider; use super::*; - #[test] - fn can_create_block_interval_from_exclusive_range() { + type Mocker = MockBlockIntervalProvider; + + #[tokio::test] + async fn can_create_block_interval_from_inclusive_range() { assert_eq!( - BlockInterval::new("0..10").unwrap(), - BlockInterval::Range(0..10) + BlockInterval::new( + Arc::new(Mocker::new()), + BlockId::from(0), + Some(BlockId::from(10)) + ) + .await + .unwrap(), + BlockInterval::Range(0..11) ); } - #[test] - fn can_create_block_interval_from_inclusive_range() { + #[tokio::test] + async fn can_create_follow_from_block_interval() { assert_eq!( - BlockInterval::new("0..=10").unwrap(), - BlockInterval::Range(0..11) + BlockInterval::new(Arc::new(Mocker::new()), BlockId::from(100), None) + .await + .unwrap(), + BlockInterval::FollowFrom { start_block: 100 } ); } - #[test] - fn can_create_follow_from_block_interval() { + #[tokio::test] + async fn can_create_single_block_interval() { assert_eq!( - BlockInterval::new("100..").unwrap(), - BlockInterval::FollowFrom { start_block: 100 } + BlockInterval::new( + Arc::new(Mocker::new()), + BlockId::from(123415131), + Some(BlockId::from(123415131)) + ) + .await + .unwrap(), + BlockInterval::SingleBlockId(123415131) ); } - #[test] - fn can_create_single_block_interval() { + #[tokio::test] + async fn cannot_create_invalid_range() { assert_eq!( - BlockInterval::new("123415131").unwrap(), - BlockInterval::SingleBlockId(BlockId::Number(123415131.into())) + BlockInterval::new( + Arc::new(Mocker::new()), + BlockId::from(123415131), + Some(BlockId::from(0)) + ) + .await + .unwrap_err() + .to_string(), + anyhow!("invalid block interval range (123415131..0)").to_string() ); } - #[test] - fn new_interval_proper_single_block_error() { + #[tokio::test] + async fn can_create_single_block_interval_from_hash() { + // Mock the block for single block interval. + let mut mock = Mocker::new(); + let block_id = BlockId::Hash( + "0xb51ceca7ba912779ed6721d2b93849758af0d2354683170fb71dead6e439e6cb" + .parse::() + .unwrap() + .into(), + ); + mock_block(&mut mock, block_id, 12345); + + // Create the interval. + let mock = Arc::new(mock); assert_eq!( - BlockInterval::new("113A").err().unwrap().to_string(), - "invalid block interval range '113A'" + BlockInterval::new(mock, block_id, Some(block_id)) + .await + .unwrap(), + BlockInterval::SingleBlockId(12345) ); } - #[test] - fn new_interval_proper_range_error() { + #[tokio::test] + async fn can_create_block_interval_from_inclusive_hash_range() { + // Mock the blocks for the range. + let mut mock = Mocker::new(); + let start_block_id = BlockId::Hash( + "0xb51ceca7ba912779ed6721d2b93849758af0d2354683170fb71dead6e439e6cb" + .parse::() + .unwrap() + .into(), + ); + mock_block(&mut mock, start_block_id, 12345); + let end_block_id = BlockId::Hash( + "0x351ceca7ba912779ed6721d2b93849758af0d2354683170fb71dead6e439e6cb" + .parse::() + .unwrap() + .into(), + ); + mock_block(&mut mock, end_block_id, 12355); + + // Create the interval. + let mock = Arc::new(mock); assert_eq!( - BlockInterval::new("111...156").err().unwrap().to_string(), - "invalid block interval range '111...156'" + BlockInterval::new(mock, start_block_id, Some(end_block_id)) + .await + .unwrap(), + BlockInterval::Range(12345..12356) ); } - #[test] - fn new_interval_parse_block_hash() { + #[tokio::test] + async fn can_create_follow_from_block_interval_hash() { + // Mock a block for range to start from. + let start_block_id = BlockId::Hash( + "0xb51ceca7ba912779ed6721d2b93849758af0d2354683170fb71dead6e439e6cb" + .parse::() + .unwrap() + .into(), + ); + let mut mock = Mocker::new(); + mock_block(&mut mock, start_block_id, 12345); + + // Create the interval. + let mock = Arc::new(mock); assert_eq!( - BlockInterval::new( - "0xb51ceca7ba912779ed6721d2b93849758af0d2354683170fb71dead6e439e6cb" - ) - .unwrap(), - BlockInterval::SingleBlockId(BlockId::Hash( - "0xb51ceca7ba912779ed6721d2b93849758af0d2354683170fb71dead6e439e6cb" - .parse::() - .unwrap() - .into() - )) - ) + BlockInterval::new(mock, start_block_id, None) + .await + .unwrap(), + BlockInterval::FollowFrom { start_block: 12345 } + ); + } + + /// Configures the mock to expect a query for a block by id and return + /// the expected block number. + fn mock_block( + mock: &mut MockBlockIntervalProvider, + query_id: BlockId, + resulting_block_num: u64, + ) { + let mut block: Block = Block::default(); + block.header.number = resulting_block_num; + mock.expect_get_block_by_id() + .with(eq(query_id)) + .returning(move |_| { + let block = block.clone(); + Box::pin(async move { Ok(Some(block)) }) + }); } #[tokio::test] async fn can_into_bounded_stream() { use futures::StreamExt; let mut result = Vec::new(); - let mut stream = BlockInterval::new("1..10") - .unwrap() - .into_bounded_stream() - .unwrap(); + let mut stream = BlockInterval::new( + Arc::new(Mocker::new()), + BlockId::from(1), + Some(BlockId::from(9)), + ) + .await + .unwrap() + .into_bounded_stream() + .unwrap(); while let Some(val) = stream.next().await { result.push(val.unwrap()); } @@ -281,13 +391,4 @@ mod test { expected.last_mut().unwrap().1 = true; assert_eq!(result, expected); } - - #[test] - fn can_create_from_string() { - use std::str::FromStr; - assert_eq!( - &format!("{}", BlockInterval::from_str("0..10").unwrap()), - "0..10" - ); - } } diff --git a/zero/src/parsing.rs b/zero/src/parsing.rs index d1452a464..5643f82f5 100644 --- a/zero/src/parsing.rs +++ b/zero/src/parsing.rs @@ -34,19 +34,6 @@ where parse_range_gen(s, "..", false) } -/// Parse an inclusive range from a string. -/// -/// A valid range is of the form `lhs..=rhs`, where `lhs` and `rhs` are numbers. -pub(crate) fn parse_range_inclusive( - s: &str, -) -> Result, RangeParseError> -where - NumberT: Display + FromStr + From + Add, - NumberT::Err: Display, -{ - parse_range_gen(s, "..=", true) -} - pub(crate) fn parse_range_gen( s: &str, separator: SeparatorT, @@ -88,11 +75,6 @@ mod test { assert_eq!(parse_range_exclusive::("0..10"), Ok(0..10)); } - #[test] - fn it_parses_inclusive_ranges() { - assert_eq!(parse_range_inclusive::("0..=10"), Ok(0..11)); - } - #[test] fn it_handles_missing_lhs() { assert_eq!( diff --git a/zero/src/prover.rs b/zero/src/prover.rs index 6a194ddf1..7cc840f02 100644 --- a/zero/src/prover.rs +++ b/zero/src/prover.rs @@ -9,9 +9,13 @@ use std::sync::Arc; use alloy::primitives::U256; use anyhow::{Context, Result}; use evm_arithmetization::Field; -use futures::{future::BoxFuture, FutureExt, TryFutureExt, TryStreamExt}; +use evm_arithmetization::SegmentDataIterator; +use futures::{ + future, future::BoxFuture, stream::FuturesUnordered, FutureExt, TryFutureExt, TryStreamExt, +}; use hashbrown::HashMap; use num_traits::ToPrimitive as _; +use paladin::directive::{Directive, IndexedStream}; use paladin::runtime::Runtime; use plonky2::gates::noop::NoopGate; use plonky2::plonk::circuit_builder::CircuitBuilder; @@ -21,13 +25,25 @@ use tokio::io::AsyncWriteExt; use tokio::sync::mpsc::Receiver; use tokio::sync::{oneshot, Semaphore}; use trace_decoder::observer::DummyObserver; -use trace_decoder::{BlockTrace, OtherBlockData}; +use trace_decoder::{BlockTrace, OtherBlockData, WireDisposition}; use tracing::{error, info}; use crate::fs::generate_block_proof_file_name; use crate::ops; use crate::proof_types::GeneratedBlockProof; +/// `ProofRuntime` represents the runtime environments used for generating +/// different types of proofs. It contains separate runtimes for handling: +/// +/// - `light_proof`: Typically for smaller, less resource-intensive tasks, such +/// as aggregation. +/// - `heavy_proof`: For larger, more computationally expensive tasks, such as +/// STARK proof generation. +pub struct ProofRuntime { + pub light_proof: Runtime, + pub heavy_proof: Runtime, +} + // All proving tasks are executed concurrently, which can cause issues for large // block intervals, where distant future blocks may be proven first. // @@ -39,6 +55,18 @@ use crate::proof_types::GeneratedBlockProof; // batches as soon as they are generated. static PARALLEL_BLOCK_PROVING_PERMIT_POOL: Semaphore = Semaphore::const_new(0); +pub const WIRE_DISPOSITION: WireDisposition = { + cfg_if::cfg_if! { + if #[cfg(feature = "eth_mainnet")] { + WireDisposition::Type1 + } else if #[cfg(feature = "cdk_erigon")] { + WireDisposition::Type2 + } else { + compile_error!("must select a feature"); + } + } +}; + #[derive(Debug, Clone)] pub struct ProverConfig { pub batch_size: usize, @@ -65,14 +93,11 @@ impl BlockProverInput { pub async fn prove( self, - runtime: Arc, + proof_runtime: Arc, previous: Option>>, prover_config: Arc, ) -> Result { use anyhow::Context as _; - use evm_arithmetization::SegmentDataIterator; - use futures::{stream::FuturesUnordered, FutureExt}; - use paladin::directive::{Directive, IndexedStream}; let ProverConfig { max_cpu_len_log, @@ -88,6 +113,7 @@ impl BlockProverInput { self.other_data, batch_size, &mut DummyObserver::new(), + WIRE_DISPOSITION, )?; // Create segment proof. @@ -116,7 +142,7 @@ impl BlockProverInput { Directive::map(IndexedStream::from(segment_data_iterator), &seg_prove_ops) .fold(&seg_agg_ops) - .run(&runtime) + .run(&proof_runtime.heavy_proof) .map(move |e| { e.map(|p| (idx, crate::proof_types::BatchAggregatableProof::from(p))) }) @@ -126,7 +152,7 @@ impl BlockProverInput { // Fold the batch aggregated proof stream into a single proof. let final_batch_proof = Directive::fold(IndexedStream::new(batch_proof_futs), &batch_agg_ops) - .run(&runtime) + .run(&proof_runtime.light_proof) .await?; if let crate::proof_types::BatchAggregatableProof::BatchAgg(proof) = final_batch_proof { @@ -143,7 +169,7 @@ impl BlockProverInput { prev, save_inputs_on_error, }) - .run(&runtime) + .run(&proof_runtime.light_proof) .await?; info!("Successfully proved block {block_number}"); @@ -156,13 +182,12 @@ impl BlockProverInput { pub async fn prove_test( self, - runtime: Arc, + proof_runtime: Arc, previous: Option>>, prover_config: Arc, ) -> Result { use std::iter::repeat; - use futures::future; use paladin::directive::{Directive, IndexedStream}; let ProverConfig { @@ -181,6 +206,7 @@ impl BlockProverInput { self.other_data, batch_size, &mut DummyObserver::new(), + WIRE_DISPOSITION, )?; let seg_ops = ops::SegmentProofTestOnly { @@ -202,7 +228,7 @@ impl BlockProverInput { ); simulation - .run(&runtime) + .run(&proof_runtime.light_proof) .await? .try_for_each(|_| future::ok(())) .await?; @@ -236,17 +262,17 @@ impl BlockProverInput { async fn prove_block( block: BlockProverInput, - runtime: Arc, + proof_runtime: Arc, previous_block_proof: Option>>, prover_config: Arc, ) -> Result { if prover_config.test_only { block - .prove_test(runtime, previous_block_proof, prover_config) + .prove_test(proof_runtime, previous_block_proof, prover_config) .await } else { block - .prove(runtime, previous_block_proof, prover_config) + .prove(proof_runtime, previous_block_proof, prover_config) .await } } @@ -257,7 +283,7 @@ async fn prove_block( /// block proofs as well. pub async fn prove( mut block_receiver: Receiver<(BlockProverInput, bool)>, - runtime: Arc, + proof_runtime: Arc, checkpoint_proof: Option, prover_config: Arc, ) -> Result<()> { @@ -277,7 +303,7 @@ pub async fn prove( let (tx, rx) = oneshot::channel::(); let prover_config = prover_config.clone(); let previous_block_proof = prev_proof.take(); - let runtime = runtime.clone(); + let proof_runtime = proof_runtime.clone(); let block_number = block_prover_input.get_block_number(); let prove_permit = PARALLEL_BLOCK_PROVING_PERMIT_POOL.acquire().await?; @@ -288,7 +314,7 @@ pub async fn prove( // Prove the block let block_proof = prove_block( block_prover_input, - runtime, + proof_runtime, previous_block_proof, prover_config.clone(), ) diff --git a/zero/src/prover_state/circuit.rs b/zero/src/prover_state/circuit.rs index da9fb367d..44bbeeeef 100644 --- a/zero/src/prover_state/circuit.rs +++ b/zero/src/prover_state/circuit.rs @@ -5,6 +5,9 @@ use std::{ str::FromStr, }; +use evm_arithmetization::testing_utils::{ + TEST_RECURSION_CONFIG, TEST_STARK_CONFIG, TEST_THRESHOLD_DEGREE_BITS, +}; pub use evm_arithmetization::NUM_TABLES; use evm_arithmetization::{AllRecursiveCircuits, AllStark, StarkConfig}; @@ -165,6 +168,7 @@ impl From for Circuit { #[derive(Debug, Clone)] pub struct CircuitConfig { circuits: [Range; NUM_TABLES], + pub use_test_config: bool, } impl std::ops::Index for CircuitConfig { @@ -199,6 +203,7 @@ impl Default for CircuitConfig { #[cfg(feature = "cdk_erigon")] Circuit::Poseidon.default_size(), ], + use_test_config: false, } } } @@ -244,11 +249,25 @@ impl CircuitConfig { /// Build the circuits from the current config. pub fn as_all_recursive_circuits(&self) -> AllRecursiveCircuits { - AllRecursiveCircuits::new( - &AllStark::default(), - self.as_degree_bits_ranges(), - &StarkConfig::standard_fast_config(), - ) + if self.use_test_config { + AllRecursiveCircuits::new( + &AllStark::default(), + self.as_degree_bits_ranges(), + &TEST_STARK_CONFIG, + Some(&TEST_RECURSION_CONFIG), + Some(&TEST_RECURSION_CONFIG), + Some(TEST_THRESHOLD_DEGREE_BITS), + ) + } else { + AllRecursiveCircuits::new( + &AllStark::default(), + self.as_degree_bits_ranges(), + &StarkConfig::standard_fast_config(), + None, + None, + None, + ) + } } } diff --git a/zero/src/prover_state/cli.rs b/zero/src/prover_state/cli.rs index b0bebb331..ce0457dec 100644 --- a/zero/src/prover_state/cli.rs +++ b/zero/src/prover_state/cli.rs @@ -62,6 +62,9 @@ macro_rules! gen_prover_state_config { pub persistence: CircuitPersistence, #[clap(long, help_heading = HEADING, default_value_t = TableLoadStrategy::OnDemand)] pub load_strategy: TableLoadStrategy, + /// Run with a low-security but fast STARK configuration. Enable this only for testing. + #[arg(long)] + pub use_test_config: bool, $( #[clap( @@ -108,6 +111,7 @@ impl CliProverStateConfig { .filter_map(|(circuit, range)| range.map(|range| (circuit, range))) .for_each(|(circuit, range)| config.set_circuit_size(circuit, range)); + config.use_test_config = self.use_test_config; config } diff --git a/zero/src/prover_state/mod.rs b/zero/src/prover_state/mod.rs index edbad02ba..376d4c90a 100644 --- a/zero/src/prover_state/mod.rs +++ b/zero/src/prover_state/mod.rs @@ -15,6 +15,7 @@ use std::borrow::Borrow; use std::{fmt::Display, sync::OnceLock}; use clap::ValueEnum; +use evm_arithmetization::testing_utils::TEST_STARK_CONFIG; use evm_arithmetization::{ fixed_recursive_verifier::ProverOutputData, prover::prove, AllProof, AllRecursiveCircuits, AllStark, GenerationSegmentData, RecursiveCircuitsForTableSize, StarkConfig, @@ -174,45 +175,30 @@ impl ProverStateManager { &self, config: &StarkConfig, all_proof: &AllProof, - ) -> anyhow::Result<[(RecursiveCircuitsForTableSize, u8); NUM_TABLES]> { + ) -> anyhow::Result<[Option<(RecursiveCircuitsForTableSize, u8)>; NUM_TABLES]> { let degrees = all_proof.degree_bits(config); - /// Given a recursive circuit index (e.g., Arithmetic / 0), return a - /// tuple containing the loaded table at the specified size and - /// its offset relative to the configured range used to pre-process the - /// circuits. - macro_rules! circuit { - ($circuit_index:expr) => { - ( - RecursiveCircuitResource::get(&( - $circuit_index.into(), - degrees[$circuit_index], + // Given a recursive circuit index (e.g., Arithmetic / 0), return a + // tuple containing the loaded table at the specified size and + // its offset relative to the configured range used to pre-process the + // circuits. + let circuits = core::array::from_fn(|i| match degrees[i] { + Some(size) => RecursiveCircuitResource::get(&(i.into(), size)) + .map(|circuit_resource| { + Some(( + circuit_resource, + (size - self.circuit_config[i].start) as u8, )) - .map_err(|e| { - let circuit: $crate::prover_state::circuit::Circuit = $circuit_index.into(); - let size = degrees[$circuit_index]; - anyhow::Error::from(e).context(format!( - "Attempting to load circuit: {circuit:?} at size: {size}" - )) - })?, - (degrees[$circuit_index] - self.circuit_config[$circuit_index].start) as u8, - ) - }; - } + }) + .map_err(|e| { + anyhow::Error::from(e) + .context(format!("Attempting to load circuit: {i} at size: {size}")) + }) + .unwrap_or(None), + None => None, + }); - Ok([ - circuit!(0), - circuit!(1), - circuit!(2), - circuit!(3), - circuit!(4), - circuit!(5), - circuit!(6), - circuit!(7), - circuit!(8), - #[cfg(feature = "cdk_erigon")] - circuit!(9), - ]) + Ok(circuits) } /// Generate a segment proof using the specified input, loading @@ -222,20 +208,20 @@ impl ProverStateManager { &self, input: TrimmedGenerationInputs, segment_data: &mut GenerationSegmentData, + config: &StarkConfig, ) -> anyhow::Result { - let config = StarkConfig::standard_fast_config(); let all_stark = AllStark::default(); let all_proof = prove( &all_stark, - &config, + config, input, segment_data, &mut TimingTree::default(), None, )?; - let table_circuits = self.load_table_circuits(&config, &all_proof)?; + let table_circuits = self.load_table_circuits(config, &all_proof)?; let proof_with_pvs = p_state() @@ -251,10 +237,11 @@ impl ProverStateManager { &self, input: TrimmedGenerationInputs, segment_data: &mut GenerationSegmentData, + config: &StarkConfig, ) -> anyhow::Result { let p_out = p_state().state.prove_segment( &AllStark::default(), - &StarkConfig::standard_fast_config(), + config, input, segment_data, &mut TimingTree::default(), @@ -284,15 +271,20 @@ impl ProverStateManager { input: (TrimmedGenerationInputs, GenerationSegmentData), ) -> anyhow::Result { let (generation_inputs, mut segment_data) = input; + let config = if self.circuit_config.use_test_config { + TEST_STARK_CONFIG + } else { + StarkConfig::standard_fast_config() + }; match self.persistence { CircuitPersistence::None | CircuitPersistence::Disk(TableLoadStrategy::Monolithic) => { info!("using monolithic circuit {:?}", self); - self.segment_proof_monolithic(generation_inputs, &mut segment_data) + self.segment_proof_monolithic(generation_inputs, &mut segment_data, &config) } CircuitPersistence::Disk(TableLoadStrategy::OnDemand) => { info!("using on demand circuit {:?}", self); - self.segment_proof_on_demand(generation_inputs, &mut segment_data) + self.segment_proof_on_demand(generation_inputs, &mut segment_data, &config) } } } diff --git a/zero/src/provider.rs b/zero/src/provider.rs index 876cb270c..a2168bbb7 100644 --- a/zero/src/provider.rs +++ b/zero/src/provider.rs @@ -2,14 +2,27 @@ use std::ops::{Deref, DerefMut}; use std::sync::Arc; use alloy::primitives::BlockHash; +use alloy::providers::RootProvider; use alloy::rpc::types::{Block, BlockId, BlockTransactionsKind}; use alloy::{providers::Provider, transports::Transport}; use anyhow::Context; use tokio::sync::{Mutex, Semaphore, SemaphorePermit}; +use crate::rpc::RpcType; + const CACHE_SIZE: usize = 1024; const MAX_NUMBER_OF_PARALLEL_REQUESTS: usize = 128; +impl Provider for CachedProvider +where + T: Transport + Clone, + P: Provider, +{ + fn root(&self) -> &RootProvider { + self.provider.root() + } +} + /// Wrapper around alloy provider to cache blocks and other /// frequently used data. pub struct CachedProvider { @@ -22,6 +35,7 @@ pub struct CachedProvider { blocks_by_number: Arc>>, blocks_by_hash: Arc>>, _phantom: std::marker::PhantomData, + pub rpc_type: RpcType, } pub struct ProviderGuard<'a, ProviderT> { @@ -48,7 +62,7 @@ where ProviderT: Provider, TransportT: Transport + Clone, { - pub fn new(provider: ProviderT) -> Self { + pub fn new(provider: ProviderT, rpc_type: RpcType) -> Self { Self { provider: provider.into(), semaphore: Arc::new(Semaphore::new(MAX_NUMBER_OF_PARALLEL_REQUESTS)), @@ -58,6 +72,7 @@ where blocks_by_hash: Arc::new(Mutex::new(lru::LruCache::new( std::num::NonZero::new(CACHE_SIZE).unwrap(), ))), + rpc_type, _phantom: std::marker::PhantomData, } } diff --git a/zero/src/rpc/mod.rs b/zero/src/rpc/mod.rs index 007a4fdb2..016c1d242 100644 --- a/zero/src/rpc/mod.rs +++ b/zero/src/rpc/mod.rs @@ -45,13 +45,12 @@ pub async fn block_prover_input( cached_provider: Arc>, block_id: BlockId, checkpoint_block_number: u64, - rpc_type: RpcType, ) -> Result where ProviderT: Provider, TransportT: Transport + Clone, { - match rpc_type { + match cached_provider.rpc_type { RpcType::Jerigon => { jerigon::block_prover_input(cached_provider, block_id, checkpoint_block_number).await } @@ -105,8 +104,8 @@ where async move { let block = cached_provider .get_block((block_num as u64).into(), BlockTransactionsKind::Hashes) - .await - .context("couldn't get block")?; + .await? + .ok_or(anyhow!("block not found {block_num}"))?; anyhow::Ok([ (block.header.hash, Some(block_num)), (block.header.parent_hash, previous_block_number), @@ -212,8 +211,8 @@ where { let target_block = cached_provider .get_block(target_block_id, BlockTransactionsKind::Hashes) - .await?; - let target_block_number = target_block.header.number; + .await? + .ok_or(anyhow!("target block not found {}", target_block_id))?; let chain_id = cached_provider.get_provider().await?.get_chain_id().await?; // Grab interval checkpoint block state trie @@ -223,11 +222,15 @@ where BlockTransactionsKind::Hashes, ) .await? + .ok_or(anyhow!( + "checkpoint block not found {}", + checkpoint_block_number + ))? .header .state_root; let prev_hashes = - fetch_previous_block_hashes(cached_provider.clone(), target_block_number).await?; + fetch_previous_block_hashes(cached_provider.clone(), target_block.header.number).await?; let checkpoint_prev_hashes = fetch_previous_block_hashes(cached_provider, checkpoint_block_number + 1) // include the checkpoint block .await? @@ -238,7 +241,7 @@ where b_meta: BlockMetadata { block_beneficiary: target_block.header.miner.compat(), block_timestamp: target_block.header.timestamp.into(), - block_number: target_block_number.into(), + block_number: target_block.header.number.into(), block_difficulty: target_block.header.difficulty.into(), block_random: target_block .header diff --git a/zero/src/rpc/native/mod.rs b/zero/src/rpc/native/mod.rs index 5b4ed5dd9..a4dc7e0c6 100644 --- a/zero/src/rpc/native/mod.rs +++ b/zero/src/rpc/native/mod.rs @@ -50,7 +50,8 @@ where { let block = cached_provider .get_block(block_number, BlockTransactionsKind::Full) - .await?; + .await? + .ok_or(anyhow::anyhow!("block not found {}", block_number))?; let (code_db, txn_info) = txn::process_transactions(&block, cached_provider.get_provider().await?.deref()).await?; diff --git a/zero/src/rpc/native/state.rs b/zero/src/rpc/native/state.rs index 3c37e8cbc..b5b82106a 100644 --- a/zero/src/rpc/native/state.rs +++ b/zero/src/rpc/native/state.rs @@ -35,6 +35,7 @@ where let prev_state_root = cached_provider .get_block((block_number - 1).into(), BlockTransactionsKind::Hashes) .await? + .ok_or(anyhow::anyhow!("block not found {}", block_number - 1))? .header .state_root;