From dd6a800965cae183cda50f37f84ac66f687caea8 Mon Sep 17 00:00:00 2001 From: Vladislav Volosnikov Date: Fri, 7 Mar 2025 10:12:31 +0100 Subject: [PATCH] feat!: V27 update (#3580) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ ## Why ❔ ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. - [ ] Documentation comments have been added / updated. --------- Signed-off-by: Danil Co-authored-by: Alex Ostrovski Co-authored-by: zksync-admin-bot2 Co-authored-by: Alex Ostrovski Co-authored-by: Joonatan Saarhelo Co-authored-by: Danil --- .github/workflows/ci-core-reusable.yml | 14 + .github/workflows/ci-prover-e2e.yml | 23 +- contracts | 2 +- core/Cargo.lock | 124 +- core/Cargo.toml | 21 +- core/bin/genesis_generator/src/main.rs | 2 +- core/lib/basic_types/src/protocol_version.rs | 19 +- core/lib/basic_types/src/vm.rs | 3 +- core/lib/constants/src/contracts.rs | 15 + core/lib/contracts/src/lib.rs | 106 +- core/lib/contracts/src/tests.rs | 49 + core/lib/multivm/src/utils/mod.rs | 49 +- .../multivm/src/versions/testonly/circuits.rs | 2 +- .../src/versions/testonly/evm_emulator.rs | 9 +- .../src/versions/testonly/precompiles.rs | 8 +- .../v26_utils_outputs/post-bridging.json | 561 ++--- .../v26_utils_outputs/post-registration.json | 560 ++--- .../v26_utils_outputs/simple-test.json | 532 ++--- .../src/versions/vm_fast/tests/precompiles.rs | 2 +- .../src/versions/vm_fast/tracers/circuits.rs | 2 +- .../multivm/src/versions/vm_fast/version.rs | 3 +- .../versions/vm_latest/bootloader/utils.rs | 2 +- .../src/versions/vm_latest/constants.rs | 7 +- .../vm_latest/tracers/circuits_capacity.rs | 2 +- .../src/versions/vm_latest/types/vm_state.rs | 11 +- .../versions/vm_latest/utils/v26_upgrade.rs | 2 +- core/lib/multivm/src/versions/vm_latest/vm.rs | 11 +- core/lib/multivm/src/vm_instance.rs | 9 + core/lib/prover_interface/Cargo.toml | 2 - .../contracts/mock-evm/mock-evm.sol | 37 +- core/lib/types/src/abi.rs | 190 +- core/lib/types/src/protocol_upgrade.rs | 39 +- core/lib/types/src/storage/mod.rs | 10 +- core/lib/types/src/system_contracts.rs | 58 +- core/lib/vm_executor/src/oneshot/block.rs | 39 +- core/lib/vm_executor/src/oneshot/contracts.rs | 28 +- core/lib/vm_executor/src/oneshot/mock.rs | 2 +- core/lib/vm_executor/src/storage.rs | 61 +- .../lib/vm_interface/src/storage/in_memory.rs | 2 +- core/node/api_server/src/web3/tests/mod.rs | 32 +- core/node/commitment_generator/src/utils.rs | 1 + core/node/consensus/src/storage/testonly.rs | 2 +- core/node/eth_watch/src/tests/client.rs | 1 + core/node/genesis/src/lib.rs | 15 +- core/node/genesis/src/utils.rs | 11 +- .../src/api_server/tests.rs | 4 +- core/node/node_sync/src/genesis.rs | 11 +- .../state_keeper/src/executor/tests/tester.rs | 2 +- core/node/state_keeper/src/io/tests/tester.rs | 2 +- core/tests/upgrade-test/tests/upgrade.test.ts | 16 +- etc/env/base/chain.toml | 5 +- etc/env/base/contracts.toml | 8 +- etc/env/file_based/genesis.yaml | 21 +- .../vm_evm_emulator/commit | 1 + .../fee_estimate.yul/fee_estimate.yul.zbin | Bin 0 -> 73760 bytes .../gas_test.yul/gas_test.yul.zbin | Bin 0 -> 69024 bytes .../playground_batch.yul.zbin | Bin 0 -> 73952 bytes .../proved_batch.yul/proved_batch.yul.zbin | Bin 0 -> 69600 bytes prover/Cargo.lock | 180 +- prover/Cargo.toml | 23 +- .../prover_cli/src/commands/get_file_info.rs | 2 +- .../src/gpu_prover_job_processor.rs | 2 - .../prover_fri/src/prover_job_processor.rs | 1 - prover/crates/bin/prover_fri/src/utils.rs | 1 - .../src/rounds/basic_circuits/utils.rs | 2 +- .../witness_vector_generator/src/generator.rs | 3 - .../lib/circuit_prover_service/README.md | 7 +- .../gpu_circuit_prover_job_saver.rs | 2 +- .../src/types/circuit.rs | 4 +- .../witness_vector_generator_job_picker.rs | 68 +- .../crates/lib/prover_fri_types/src/keys.rs | 8 - prover/crates/lib/prover_fri_types/src/lib.rs | 34 +- prover/crates/lib/prover_fri_utils/src/lib.rs | 59 +- .../historical_data/0.27.0/commitments.json | 7 + .../0.27.0/verification_snark_key.json | 399 ++++ prover/data/keys/commitments.json | 8 +- .../keys/fflonk_verification_snark_key.json | 16 +- .../data/keys/finalization_hints_basic_1.bin | Bin 276 -> 276 bytes .../data/keys/finalization_hints_basic_11.bin | Bin 156 -> 156 bytes .../data/keys/finalization_hints_basic_12.bin | Bin 156 -> 156 bytes .../data/keys/finalization_hints_basic_14.bin | Bin 156 -> 156 bytes .../data/keys/finalization_hints_basic_15.bin | Bin 3240 -> 3240 bytes .../data/keys/finalization_hints_basic_2.bin | Bin 156 -> 156 bytes .../keys/finalization_hints_basic_255.bin | Bin 200 -> 200 bytes .../data/keys/finalization_hints_basic_3.bin | Bin 204 -> 204 bytes .../data/keys/finalization_hints_basic_5.bin | Bin 216 -> 216 bytes .../data/keys/finalization_hints_basic_6.bin | Bin 204 -> 204 bytes .../data/keys/finalization_hints_basic_7.bin | Bin 3288 -> 3288 bytes .../data/keys/finalization_hints_basic_8.bin | Bin 156 -> 156 bytes .../data/keys/finalization_hints_basic_9.bin | Bin 156 -> 156 bytes .../keys/finalization_hints_compression_4.bin | 1806 +++++++-------- ...nalization_hints_compression_wrapper_5.bin | 1790 +++++++------- .../data/keys/verification_basic_10_key.json | 136 +- .../data/keys/verification_basic_11_key.json | 136 +- .../data/keys/verification_basic_12_key.json | 136 +- .../data/keys/verification_basic_14_key.json | 136 +- .../data/keys/verification_basic_15_key.json | 136 +- .../data/keys/verification_basic_1_key.json | 136 +- .../data/keys/verification_basic_255_key.json | 136 +- .../data/keys/verification_basic_2_key.json | 136 +- .../data/keys/verification_basic_3_key.json | 128 +- .../data/keys/verification_basic_5_key.json | 136 +- .../data/keys/verification_basic_6_key.json | 128 +- .../data/keys/verification_basic_7_key.json | 136 +- .../data/keys/verification_basic_8_key.json | 136 +- .../data/keys/verification_basic_9_key.json | 136 +- .../keys/verification_compression_1_key.json | 128 +- .../keys/verification_compression_2_key.json | 128 +- .../keys/verification_compression_3_key.json | 128 +- .../keys/verification_compression_4_key.json | 2048 ++++++++--------- ...erification_compression_wrapper_1_key.json | 128 +- ...erification_compression_wrapper_5_key.json | 64 +- .../data/keys/verification_leaf_10_key.json | 128 +- .../data/keys/verification_leaf_11_key.json | 128 +- .../data/keys/verification_leaf_12_key.json | 128 +- .../data/keys/verification_leaf_13_key.json | 128 +- .../data/keys/verification_leaf_14_key.json | 128 +- .../data/keys/verification_leaf_16_key.json | 128 +- .../data/keys/verification_leaf_17_key.json | 128 +- .../data/keys/verification_leaf_18_key.json | 128 +- prover/data/keys/verification_leaf_3_key.json | 128 +- prover/data/keys/verification_leaf_4_key.json | 128 +- prover/data/keys/verification_leaf_7_key.json | 128 +- prover/data/keys/verification_leaf_9_key.json | 128 +- .../data/keys/verification_scheduler_key.json | 128 +- prover/data/keys/verification_snark_key.json | 32 +- prover/setup-data-gpu-keys.json | 6 +- yarn.lock | 22 +- .../deploy_gateway_ctm/input.rs | 2 + .../src/commands/chain/init/configs.rs | 2 +- .../src/commands/chain/migrate_to_gateway.rs | 2 +- .../src/commands/dev/commands/genesis.rs | 3 +- .../src/commands/dev/commands/status/mod.rs | 2 +- .../zkstack/src/commands/explorer/init.rs | 2 +- .../commands/external_node/prepare_configs.rs | 3 +- zkstack_cli/crates/zkstack/src/utils/ports.rs | 11 +- 136 files changed, 7014 insertions(+), 6421 deletions(-) create mode 100644 core/lib/contracts/src/tests.rs create mode 100644 etc/multivm_bootloaders/vm_evm_emulator/commit create mode 100644 etc/multivm_bootloaders/vm_evm_emulator/fee_estimate.yul/fee_estimate.yul.zbin create mode 100644 etc/multivm_bootloaders/vm_evm_emulator/gas_test.yul/gas_test.yul.zbin create mode 100644 etc/multivm_bootloaders/vm_evm_emulator/playground_batch.yul/playground_batch.yul.zbin create mode 100644 etc/multivm_bootloaders/vm_evm_emulator/proved_batch.yul/proved_batch.yul.zbin create mode 100644 prover/data/historical_data/0.27.0/commitments.json create mode 100644 prover/data/historical_data/0.27.0/verification_snark_key.json diff --git a/.github/workflows/ci-core-reusable.yml b/.github/workflows/ci-core-reusable.yml index 0567b8c36355..762db08d4a48 100644 --- a/.github/workflows/ci-core-reusable.yml +++ b/.github/workflows/ci-core-reusable.yml @@ -71,6 +71,20 @@ jobs: run: | ci_run zkstack dev contracts + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: 18.18.0 + + - name: Install yarn + run: | + npm install -g yarn + + - name: Check contracts hashes + working-directory: contracts + run: | + yarn calculate-hashes:check + - name: Download compilers for contract verifier tests run: ci_run zkstack contract-verifier init --zksolc-version=v1.5.10 --zkvyper-version=v1.5.4 --solc-version=0.8.26 --vyper-version=v0.3.10 --era-vm-solc-version=0.8.26-1.0.1 --only --chain era diff --git a/.github/workflows/ci-prover-e2e.yml b/.github/workflows/ci-prover-e2e.yml index 73701eb7fb9d..591e1dce0ffd 100644 --- a/.github/workflows/ci-prover-e2e.yml +++ b/.github/workflows/ci-prover-e2e.yml @@ -37,25 +37,6 @@ jobs: ci_run sccache --start-server ci_run git config --global --add safe.directory "*" - - name: Checkout DualVerifier commit - working-directory: ./contracts - if: matrix.compressor-mode == 'fflonk' - run: | - git fetch - # Checkout the commit with the DualVerifier contract to test FFLONK interface - git checkout bcdd1cb05e8f4d9ec2dd41e2cc668cdfe30ee535 - git submodule update --init --recursive - git rev-parse HEAD - - - name: Set new genesis for fflonk - # Note, that while `Verifier` is not explicitly a part of the genensis state, - # it affects it indirectly as it is a part of the repo. - working-directory: ./etc/env/file_based - if: matrix.compressor-mode == 'fflonk' - run: | - sudo sed -i 's/^genesis_root: .*/genesis_root: 0xf15e1f51b54d18843eb6ff18532921165b3393910b489a7b58933220363d9204/' genesis.yaml - sudo sed -i "s/^genesis_batch_commitment: .*/genesis_batch_commitment: 0xabfaad1553b5325624826db5b57de11b6be33285b9e0324665cce50d7f179a63/" genesis.yaml - - name: Init run: | ci_run chmod -R +x ./bin @@ -75,9 +56,9 @@ jobs: --set-as-default true \ --ignore-prerequisites \ --evm-emulator false \ - --update-submodules=${{matrix.compressor-mode == 'plonk'}} + --update-submodules=true - ci_run zkstack ecosystem init --dev --update-submodules=${{matrix.compressor-mode == 'plonk'}} --verbose + ci_run zkstack ecosystem init --dev --update-submodules=true --verbose ci_run zkstack prover init --dev --verbose echo "URL=$(grep "http_url" ./chains/proving_chain/configs/general.yaml | awk '{ print $2 }')" >> $GITHUB_ENV diff --git a/contracts b/contracts index 352e0dd70ca0..00946002e684 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 352e0dd70ca0740ac191ea7d04a9cef9606aa521 +Subproject commit 00946002e684966eab680f919c8c517f8cc64d9e diff --git a/core/Cargo.lock b/core/Cargo.lock index 1bee0a239d24..d0cc985bf502 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -1713,9 +1713,9 @@ dependencies = [ [[package]] name = "boojum" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d689807d79092f8f7cfcb72a2313a43da77d56314e41324810566f385875c185" +checksum = "d69e1f291face76bbdb6c3fe235af5d554932c9d1ac466f3e9ac91abba7737bb" dependencies = [ "arrayvec 0.7.6", "bincode", @@ -2122,9 +2122,9 @@ dependencies = [ [[package]] name = "circuit_definitions" -version = "0.150.20" +version = "0.151.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f04f9c7c6b39255199aaba49802c5f40f95bcff24f5a456446a912d254f4bb1" +checksum = "0dad6ee3324a8ca75feeb50e85236c26783df45924637672bceda7371d7d06c9" dependencies = [ "circuit_encodings", "crossbeam", @@ -2136,26 +2136,26 @@ dependencies = [ [[package]] name = "circuit_encodings" -version = "0.150.20" +version = "0.151.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3399f1981164c3c687ea15b1eedd35a16f28069c845a24530de21f996f3fdd" +checksum = "98267ff65f737116d0364fc37bd58e82889523ad848b36ee5c888700df306b6b" dependencies = [ "derivative", "serde", - "zk_evm 0.150.20", + "zk_evm 0.151.3", "zkevm_circuits", ] [[package]] name = "circuit_sequencer_api" -version = "0.150.20" +version = "0.151.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5583037ec61607ac481b0c887b7fb4f860e65c92c6f3f7be74f6bab7c40c3ce" +checksum = "359172aea9566a0e428eb4b351e3f30ebb5ccf4e5dfadde35fd1e5813dc1114c" dependencies = [ "derivative", "rayon", "serde", - "zk_evm 0.150.20", + "zk_evm 0.151.3", "zksync_bellman", ] @@ -3400,9 +3400,9 @@ dependencies = [ [[package]] name = "fflonk" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36c5fa909ab71b7eb4b8f7fd092f72ed83b93f2615e42f245ca808d8f308917" +checksum = "31ab2f6ac520a1dd84282b2aa6270a4797b2f92d9d64403ba09d55448489a76f" dependencies = [ "bincode", "byteorder", @@ -3692,9 +3692,9 @@ dependencies = [ [[package]] name = "franklin-crypto" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8309d8fc22fc389d831390473b0ee9fe94e85f19a8b9229b9aec8aa73f5bcee3" +checksum = "8663eb93bf4ebbed63fe9eda79683ad6db0e59dede3bf95f7a7f7b870f9473f1" dependencies = [ "arr_macro", "bit-vec", @@ -7530,9 +7530,9 @@ dependencies = [ [[package]] name = "rescue_poseidon" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e631fd184b6d2f2c04f9dc75405289d99fd0d6612d8dfbb478c01bfbab648fb" +checksum = "c97c9b11edc237111172d9f87d5780e2394163f1e93de4d1933129e7d7b236aa" dependencies = [ "addchain", "arrayvec 0.7.6", @@ -8827,9 +8827,9 @@ dependencies = [ [[package]] name = "snark_wrapper" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddb498315057210abd25e2fbe2ea30ab69a07ca0c166406a3e7c056ec8fbbfd" +checksum = "4a2399a1eb052467c3203bd122fe408a46ccb48889f0e47f2827a2f7a42f49ac" dependencies = [ "derivative", "rand 0.4.6", @@ -11188,9 +11188,9 @@ dependencies = [ [[package]] name = "zk_evm" -version = "0.150.20" +version = "0.151.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11d0310228af78e804e5e7deccd1ad6797fce1c44c3b8016722ab78dc183c4a" +checksum = "2b255c641faf40e20be07d8f3842ddd00793b597c0bd74c91b7a9a34b5a94308" dependencies = [ "anyhow", "lazy_static", @@ -11198,7 +11198,7 @@ dependencies = [ "serde", "serde_json", "static_assertions", - "zk_evm_abstractions 0.150.20", + "zk_evm_abstractions 0.151.3", ] [[package]] @@ -11240,6 +11240,19 @@ dependencies = [ "zkevm_opcode_defs 0.150.20", ] +[[package]] +name = "zk_evm_abstractions" +version = "0.151.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d0349e9aaa8845759e7ac462427ce7f0f63a8f3e229423aa220f24fca1a12b" +dependencies = [ + "anyhow", + "num_enum 0.6.1", + "serde", + "static_assertions", + "zkevm_opcode_defs 0.151.3", +] + [[package]] name = "zk_os_merkle_tree" version = "26.7.0-non-semver-compat" @@ -11262,9 +11275,9 @@ dependencies = [ [[package]] name = "zkevm_circuits" -version = "0.150.20" +version = "0.151.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f36004572f5086c513715e11f38230e2538c159d4f5d90dc518833c6fc78293" +checksum = "c51ee9324ec9002b288afb086a19b5bfb6ef1adb4cfd1451a1ac0d5749a5c717" dependencies = [ "arrayvec 0.7.6", "boojum", @@ -11276,7 +11289,7 @@ dependencies = [ "seq-macro", "serde", "smallvec", - "zkevm_opcode_defs 0.150.20", + "zkevm_opcode_defs 0.151.3", "zksync_cs_derive", ] @@ -11339,6 +11352,23 @@ dependencies = [ "sha3 0.10.8", ] +[[package]] +name = "zkevm_opcode_defs" +version = "0.151.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77281d3d9e706f1abdade5b8ffb8feee287a680d492705f012b2db37c516f267" +dependencies = [ + "bitflags 2.6.0", + "blake2 0.10.6", + "ethereum-types", + "k256 0.13.4", + "lazy_static", + "p256 0.13.2", + "serde", + "sha2 0.10.8", + "sha3 0.10.8", +] + [[package]] name = "zksync_base_token_adjuster" version = "26.7.0-non-semver-compat" @@ -11385,9 +11415,9 @@ dependencies = [ [[package]] name = "zksync_bellman" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78fc3c598daf718b6fc791bfbb01c4634199e479ea9b2c82d06cd108b967d441" +checksum = "d0c48d04dd04eceedd4d1ced200b227ddb0795335151e7d80a0cbd0dd62e9872" dependencies = [ "arrayvec 0.7.6", "bit-vec", @@ -11459,7 +11489,7 @@ dependencies = [ "tokio", "tracing", "vise", - "zk_evm 0.150.20", + "zk_evm 0.151.3", "zksync_contracts", "zksync_dal", "zksync_eth_client", @@ -11810,9 +11840,9 @@ dependencies = [ [[package]] name = "zksync_cs_derive" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ab7469afcd9e1cb220fe17b3c9f2abe031648b94add97da37065c58be08554" +checksum = "e4b2b1530b986536fe435e804b35e0f8fe3d6a20522673c31aa29eba047cad99" dependencies = [ "proc-macro-error", "proc-macro2 1.0.92", @@ -12159,9 +12189,9 @@ dependencies = [ [[package]] name = "zksync_ff" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6583c2db6dc787600879d27ec98d2eb628a757ee41831e54f8be1dae4acc599f" +checksum = "ab3db5c178ae12b338d1e93e50a6a04f412e538f3896750198874504c25cdc27" dependencies = [ "byteorder", "hex", @@ -12172,9 +12202,9 @@ dependencies = [ [[package]] name = "zksync_ff_derive" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f62e93dde881d8dd44d1864c7682394dde6d18e582fc5af78768221a1766fdf" +checksum = "82177d7ec9f0472042b8e1f4c8ae90030f2ce4833e9ad4ba538bf9e9834fe4c7" dependencies = [ "num-bigint 0.4.6", "num-integer", @@ -12217,9 +12247,9 @@ dependencies = [ [[package]] name = "zksync_kzg" -version = "0.150.20" +version = "0.151.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "174f82592590901cbcf2b298059c89f817b404299ffbd050a3915ea72357f545" +checksum = "76e0399be30229dabd480ff459eaeac83419831808f9c4d48418ac5398e5cf9b" dependencies = [ "boojum", "derivative", @@ -12368,7 +12398,7 @@ dependencies = [ "zk_evm 0.133.0", "zk_evm 0.140.0", "zk_evm 0.141.0", - "zk_evm 0.150.20", + "zk_evm 0.151.3", "zksync_contracts", "zksync_eth_signer", "zksync_mini_merkle_tree", @@ -12408,7 +12438,7 @@ dependencies = [ "tower-http 0.5.2", "tracing", "vise", - "zk_evm 0.150.20", + "zk_evm 0.151.3", "zksync_config", "zksync_consensus_roles", "zksync_contracts", @@ -12714,9 +12744,9 @@ dependencies = [ [[package]] name = "zksync_pairing" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baafdd03ca7a48dc9b6808be3630f2d8a003aa425d71946e9158d8c0aeb1cc79" +checksum = "425a3f2a2334bc8bdee9cab20a1d144dbc76c171dbf1f9b24763e35ff92e3da9" dependencies = [ "byteorder", "cfg-if", @@ -12813,12 +12843,10 @@ version = "26.7.0-non-semver-compat" dependencies = [ "bincode", "circuit_definitions", - "circuit_sequencer_api", "fflonk", "serde", "serde_json", "serde_with", - "strum", "tokio", "zksync_bellman", "zksync_object_store", @@ -12925,9 +12953,9 @@ dependencies = [ [[package]] name = "zksync_solidity_vk_codegen" -version = "0.30.13" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb05a12f5552d7947427f755e29f548ce94733851f1fa16edaf8b75c28033e73" +checksum = "55b3bd52c4b513029e1367be17a57684155d782d1e5ea2637ab0859d357c6d58" dependencies = [ "ethereum-types", "franklin-crypto", @@ -13168,8 +13196,9 @@ dependencies = [ [[package]] name = "zksync_vm2" -version = "0.2.1" -source = "git+https://github.com/matter-labs/vm2.git?rev=3841f5a430288a63c8207853eca11560bf7a5712#3841f5a430288a63c8207853eca11560bf7a5712" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05288e092ece683b9d3de5654d3fc747792bc55201a9e9375ad12f440e0c0c" dependencies = [ "enum_dispatch", "primitive-types", @@ -13180,8 +13209,9 @@ dependencies = [ [[package]] name = "zksync_vm2_interface" -version = "0.2.1" -source = "git+https://github.com/matter-labs/vm2.git?rev=3841f5a430288a63c8207853eca11560bf7a5712#3841f5a430288a63c8207853eca11560bf7a5712" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "603c54ea4253fa03e9844e874e13c105fd09a79499b88d7a2bc762252c1b7ce6" dependencies = [ "primitive-types", ] diff --git a/core/Cargo.toml b/core/Cargo.toml index 74af4e397902..9947dfbf5e06 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -240,22 +240,21 @@ serial_test = { version = "3.1.1", features = ["file_locks"] } # We *always* pin the latest version of protocol to disallow accidental changes in the execution logic. # However, for the historical version of protocol crates, we have lax requirements. Otherwise, # Bumping a crypto dependency like `boojum` would require us to republish all the historical packages. -circuit_encodings = "=0.150.20" -circuit_sequencer_api = "=0.150.20" -circuit_definitions = "=0.150.20" -crypto_codegen = { package = "zksync_solidity_vk_codegen", version = "=0.30.13" } -kzg = { package = "zksync_kzg", version = "=0.150.20" } -zk_evm = { version = "=0.133.0" } +circuit_encodings = "=0.151.3" +circuit_sequencer_api = "=0.151.3" +circuit_definitions = "=0.151.3" +crypto_codegen = { package = "zksync_solidity_vk_codegen", version = "=0.31.0" } +kzg = { package = "zksync_kzg", version = "=0.151.3" } zk_evm_1_3_1 = { package = "zk_evm", version = "0.131.0-rc.2" } zk_evm_1_3_3 = { package = "zk_evm", version = "0.133" } zk_evm_1_4_0 = { package = "zk_evm", version = "0.140" } zk_evm_1_4_1 = { package = "zk_evm", version = "0.141" } -zk_evm_1_5_0 = { package = "zk_evm", version = "=0.150.20" } -fflonk = "=0.30.13" -bellman = { package = "zksync_bellman", version = "=0.30.13" } +zk_evm_1_5_0 = { package = "zk_evm", version = "=0.151.3" } +fflonk = "=0.31.0" +bellman = { package = "zksync_bellman", version = "=0.31.0" } -# New VM; pinned to a specific commit because of instability -zksync_vm2 = { git = "https://github.com/matter-labs/vm2.git", rev = "3841f5a430288a63c8207853eca11560bf7a5712" } +# New VM; pinned to a specific version because of instability +zksync_vm2 = "=0.3.0" # Consensus dependencies. zksync_concurrency = "=0.8.0" diff --git a/core/bin/genesis_generator/src/main.rs b/core/bin/genesis_generator/src/main.rs index 2a96cdc6c6cc..d48f05f1b6e5 100644 --- a/core/bin/genesis_generator/src/main.rs +++ b/core/bin/genesis_generator/src/main.rs @@ -22,7 +22,7 @@ use zksync_types::{ protocol_version::ProtocolSemanticVersion, url::SensitiveUrl, ProtocolVersionId, }; -const DEFAULT_GENESIS_FILE_PATH: &str = "./etc/env/file_based/genesis.yaml"; +const DEFAULT_GENESIS_FILE_PATH: &str = "../etc/env/file_based/genesis.yaml"; #[derive(Debug, Parser)] #[command(author = "Matter Labs", version, about = "Genesis config generator", long_about = None)] diff --git a/core/lib/basic_types/src/protocol_version.rs b/core/lib/basic_types/src/protocol_version.rs index 58997d7baa33..273e7febec56 100644 --- a/core/lib/basic_types/src/protocol_version.rs +++ b/core/lib/basic_types/src/protocol_version.rs @@ -70,15 +70,16 @@ pub enum ProtocolVersionId { Version25, Version26, Version27, + Version28, } impl ProtocolVersionId { pub const fn latest() -> Self { - Self::Version26 + Self::Version27 } pub const fn next() -> Self { - Self::Version27 + Self::Version28 } pub fn try_from_packed_semver(packed_semver: U256) -> Result { @@ -123,7 +124,10 @@ impl ProtocolVersionId { ProtocolVersionId::Version24 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, ProtocolVersionId::Version25 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, ProtocolVersionId::Version26 => VmVersion::VmGateway, - ProtocolVersionId::Version27 => VmVersion::VmGateway, + ProtocolVersionId::Version27 => VmVersion::VmEvmEmulator, + + // Speculative VM version for the next protocol version to be used in the upgrade integration test etc. + ProtocolVersionId::Version28 => VmVersion::VmEvmEmulator, } } @@ -153,6 +157,10 @@ impl ProtocolVersionId { self < &Self::Version27 } + pub fn is_post_fflonk(&self) -> bool { + self >= &Self::Version27 + } + pub fn is_1_4_0(&self) -> bool { self >= &ProtocolVersionId::Version18 && self < &ProtocolVersionId::Version20 } @@ -297,7 +305,10 @@ impl From for VmVersion { ProtocolVersionId::Version24 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, ProtocolVersionId::Version25 => VmVersion::Vm1_5_0IncreasedBootloaderMemory, ProtocolVersionId::Version26 => VmVersion::VmGateway, - ProtocolVersionId::Version27 => VmVersion::VmGateway, + ProtocolVersionId::Version27 => VmVersion::VmEvmEmulator, + + // Speculative VM version for the next protocol version to be used in the upgrade integration test etc. + ProtocolVersionId::Version28 => VmVersion::VmEvmEmulator, } } } diff --git a/core/lib/basic_types/src/vm.rs b/core/lib/basic_types/src/vm.rs index 4469785c7411..b1a71ecde3e5 100644 --- a/core/lib/basic_types/src/vm.rs +++ b/core/lib/basic_types/src/vm.rs @@ -17,12 +17,13 @@ pub enum VmVersion { Vm1_5_0SmallBootloaderMemory, Vm1_5_0IncreasedBootloaderMemory, VmGateway, + VmEvmEmulator, } impl VmVersion { /// Returns the latest supported VM version. pub const fn latest() -> VmVersion { - Self::VmGateway + Self::VmEvmEmulator } } diff --git a/core/lib/constants/src/contracts.rs b/core/lib/constants/src/contracts.rs index c30277cbd958..c88e33676897 100644 --- a/core/lib/constants/src/contracts.rs +++ b/core/lib/constants/src/contracts.rs @@ -124,6 +124,11 @@ pub const EC_PAIRING_PRECOMPILE_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x08, ]); +pub const IDENTITY_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, +]); + pub const SECP256R1_VERIFY_PRECOMPILE_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, @@ -139,6 +144,16 @@ pub const EVM_GAS_MANAGER_ADDRESS: Address = H160([ 0x00, 0x00, 0x80, 0x13, ]); +pub const EVM_PREDEPLOYS_MANAGER_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x14, +]); + +pub const EVM_HASHES_STORAGE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x15, +]); + /// Note, that the `Create2Factory` and higher are explicitly deployed on a non-system-contract address /// as they don't require any kernel space features. pub const CREATE2_FACTORY_ADDRESS: Address = H160([ diff --git a/core/lib/contracts/src/lib.rs b/core/lib/contracts/src/lib.rs index 972394894d29..985843b44da2 100644 --- a/core/lib/contracts/src/lib.rs +++ b/core/lib/contracts/src/lib.rs @@ -20,6 +20,8 @@ use zksync_basic_types::{ use zksync_utils::env::Workspace; mod serde_bytecode; +#[cfg(test)] +mod tests; #[derive(Debug, Clone)] pub enum ContractLanguage { @@ -285,7 +287,7 @@ pub fn read_bytecode_from_path( } pub fn read_sys_contract_bytecode(directory: &str, name: &str, lang: ContractLanguage) -> Vec { - DEFAULT_SYSTEM_CONTRACTS_REPO.read_sys_contract_bytecode(directory, name, lang) + DEFAULT_SYSTEM_CONTRACTS_REPO.read_sys_contract_bytecode(directory, name, None, lang) } static DEFAULT_SYSTEM_CONTRACTS_REPO: Lazy = @@ -313,6 +315,7 @@ impl SystemContractsRepo { &self, directory: &str, name: &str, + object_name: Option<&str>, lang: ContractLanguage, ) -> Vec { match lang { @@ -337,6 +340,8 @@ impl SystemContractsRepo { // easily get rid of the old lookup, because old foundry-zksync is compiled into `zk_environment` // image. Once `foundry-zksync` is updated to at least 0.0.4, we can remove folder names from the // `SYSTEM_CONTRACT_LIST` for yul contracts and merge two lookups below. + // in foundry-zksync starting from 0.0.8 json file name corresponds to the object inside the yul component + let object_name = object_name.unwrap_or(name); let possible_paths = [ self.root.join(format!("zkout/{0}.yul/{0}.json", name)), self.root @@ -344,6 +349,11 @@ impl SystemContractsRepo { self.root.join(format!( "zkout/{name}.yul/contracts-preprocessed/{directory}/{name}.yul.json", )), + self.root + .join(format!("zkout/{name}.yul/{object_name}.json",)), + self.root.join(format!( + "zkout/{name}.yul/contracts-preprocessed/{name}.yul.json", + )), ]; for path in &possible_paths { @@ -384,7 +394,12 @@ impl SystemContractsRepo { } pub fn read_bootloader_code(bootloader_type: &str) -> Vec { - read_sys_contract_bytecode("bootloader", bootloader_type, ContractLanguage::Yul) + DEFAULT_SYSTEM_CONTRACTS_REPO.read_sys_contract_bytecode( + "bootloader", + bootloader_type, + Some("Bootloader"), + ContractLanguage::Yul, + ) } /// Reads zbin bytecode from a given path, relative to workspace location. @@ -419,7 +434,6 @@ pub struct SystemContractCode { pub struct BaseSystemContracts { pub bootloader: SystemContractCode, pub default_aa: SystemContractCode, - /// Never filled in constructors for now. The only way to get the EVM emulator enabled is to call [`Self::with_evm_emulator()`]. pub evm_emulator: Option, } @@ -427,6 +441,7 @@ pub struct BaseSystemContracts { pub struct BaseSystemContractsHashes { pub bootloader: H256, pub default_aa: H256, + /// Optional for backward compatibility reasons. Having a hash present doesn't mean that EVM emulation is enabled for the network. pub evm_emulator: Option, } @@ -440,13 +455,14 @@ impl PartialEq for BaseSystemContracts { } impl BaseSystemContracts { - fn load_with_bootloader(bootloader_bytecode: Vec) -> Self { + fn load_with_bootloader(bootloader_bytecode: Vec, load_evm_emulator: bool) -> Self { let hash = BytecodeHash::for_bytecode(&bootloader_bytecode).value(); let bootloader = SystemContractCode { code: bootloader_bytecode, hash, }; + // `DefaultAccount` is not versioned. let bytecode = read_sys_contract_bytecode("", "DefaultAccount", ContractLanguage::Sol); let hash = BytecodeHash::for_bytecode(&bytecode).value(); let default_aa = SystemContractCode { @@ -454,180 +470,190 @@ impl BaseSystemContracts { hash, }; + // EVM emulator is not versioned either. It is only accessed for protocol versions >=27. + let evm_emulator = load_evm_emulator.then(|| { + let bytecode = read_sys_contract_bytecode("", "EvmEmulator", ContractLanguage::Yul); + let hash = BytecodeHash::for_bytecode(&bytecode).value(); + SystemContractCode { + code: bytecode, + hash, + } + }); + BaseSystemContracts { bootloader, default_aa, - evm_emulator: None, + evm_emulator, } } /// BaseSystemContracts with proved bootloader - for handling transactions. pub fn load_from_disk() -> Self { let bootloader_bytecode = read_bootloader_code("proved_batch"); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) - } - - /// Loads the latest EVM emulator for these base system contracts. Logically, it only makes sense to do for the latest protocol version. - pub fn with_latest_evm_emulator(mut self) -> Self { - let bytecode = read_sys_contract_bytecode("", "EvmEmulator", ContractLanguage::Yul); - let hash = BytecodeHash::for_bytecode(&bytecode).value(); - self.evm_emulator = Some(SystemContractCode { - code: bytecode, - hash, - }); - self + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, true) } /// BaseSystemContracts with playground bootloader - used for handling eth_calls. pub fn playground() -> Self { let bootloader_bytecode = read_bootloader_code("playground_batch"); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, true) } pub fn playground_pre_virtual_blocks() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_3_2/playground_block.yul/playground_block.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_virtual_blocks() -> Self { let bootloader_bytecode = read_zbin_bytecode("etc/multivm_bootloaders/vm_virtual_blocks/playground_batch.yul/playground_batch.yul.zbin"); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_virtual_blocks_finish_upgrade_fix() -> Self { let bootloader_bytecode = read_zbin_bytecode("etc/multivm_bootloaders/vm_virtual_blocks_finish_upgrade_fix/playground_batch.yul/playground_batch.yul.zbin"); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_boojum() -> Self { let bootloader_bytecode = read_zbin_bytecode("etc/multivm_bootloaders/vm_boojum_integration/playground_batch.yul/playground_batch.yul.zbin"); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_allowlist_removal() -> Self { let bootloader_bytecode = read_zbin_bytecode("etc/multivm_bootloaders/vm_remove_allowlist/playground_batch.yul/playground_batch.yul.zbin"); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_1_4_1() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_4_1/playground_batch.yul/playground_batch.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_1_4_2() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_4_2/playground_batch.yul/playground_batch.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_1_5_0_small_memory() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_5_0_small_memory/playground_batch.yul/playground_batch.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_1_5_0_increased_memory() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_5_0_increased_memory/playground_batch.yul/playground_batch.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_post_protocol_defense() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_protocol_defense/playground_batch.yul/playground_batch.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn playground_gateway() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_gateway/playground_batch.yul/playground_batch.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) + } + + pub fn playground_evm_emulator() -> Self { + let bootloader_bytecode: Vec = read_bootloader_code("playground_batch"); + + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, true) } pub fn estimate_gas_pre_virtual_blocks() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_3_2/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_virtual_blocks() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_virtual_blocks/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_virtual_blocks_finish_upgrade_fix() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_virtual_blocks_finish_upgrade_fix/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_boojum() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_boojum_integration/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_allowlist_removal() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_remove_allowlist/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_1_4_1() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_4_1/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_1_4_2() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_4_2/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_1_5_0_small_memory() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_5_0_small_memory/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_1_5_0_increased_memory() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_1_5_0_increased_memory/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_post_protocol_defense() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_protocol_defense/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) } pub fn estimate_gas_gateway() -> Self { let bootloader_bytecode = read_zbin_bytecode( "etc/multivm_bootloaders/vm_gateway/fee_estimate.yul/fee_estimate.yul.zbin", ); - BaseSystemContracts::load_with_bootloader(bootloader_bytecode) + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, false) + } + + pub fn estimate_gas_evm_emulator() -> Self { + let bootloader_bytecode = read_bootloader_code("fee_estimate"); + BaseSystemContracts::load_with_bootloader(bootloader_bytecode, true) } pub fn hashes(&self) -> BaseSystemContractsHashes { diff --git a/core/lib/contracts/src/tests.rs b/core/lib/contracts/src/tests.rs new file mode 100644 index 000000000000..5962228c2793 --- /dev/null +++ b/core/lib/contracts/src/tests.rs @@ -0,0 +1,49 @@ +use crate::BaseSystemContracts; + +#[test] +fn loading_historic_estimation_base_contracts() { + let load_fns = [ + BaseSystemContracts::estimate_gas_pre_virtual_blocks, + BaseSystemContracts::estimate_gas_post_virtual_blocks, + BaseSystemContracts::estimate_gas_post_virtual_blocks_finish_upgrade_fix, + BaseSystemContracts::estimate_gas_post_boojum, + BaseSystemContracts::estimate_gas_post_allowlist_removal, + BaseSystemContracts::estimate_gas_post_1_4_1, + BaseSystemContracts::estimate_gas_post_1_4_2, + BaseSystemContracts::estimate_gas_1_5_0_small_memory, + BaseSystemContracts::estimate_gas_post_1_5_0_increased_memory, + BaseSystemContracts::estimate_gas_post_protocol_defense, + BaseSystemContracts::estimate_gas_gateway, + BaseSystemContracts::estimate_gas_evm_emulator, + ]; + for (i, load_fn) in load_fns.into_iter().enumerate() { + println!("Testing base contracts #{i}"); + let base_contracts = load_fn(); + assert!(!base_contracts.bootloader.code.is_empty()); + assert!(!base_contracts.default_aa.code.is_empty()); + } +} + +#[test] +fn loading_historic_playground_contracts() { + let load_fns = [ + BaseSystemContracts::playground_pre_virtual_blocks, + BaseSystemContracts::playground_post_virtual_blocks, + BaseSystemContracts::playground_post_virtual_blocks_finish_upgrade_fix, + BaseSystemContracts::playground_post_boojum, + BaseSystemContracts::playground_post_allowlist_removal, + BaseSystemContracts::playground_post_1_4_1, + BaseSystemContracts::playground_post_1_4_2, + BaseSystemContracts::playground_1_5_0_small_memory, + BaseSystemContracts::playground_post_1_5_0_increased_memory, + BaseSystemContracts::playground_post_protocol_defense, + BaseSystemContracts::playground_gateway, + BaseSystemContracts::playground_evm_emulator, + ]; + for (i, load_fn) in load_fns.into_iter().enumerate() { + println!("Testing base contracts #{i}"); + let base_contracts = load_fn(); + assert!(!base_contracts.bootloader.code.is_empty()); + assert!(!base_contracts.default_aa.code.is_empty()); + } +} diff --git a/core/lib/multivm/src/utils/mod.rs b/core/lib/multivm/src/utils/mod.rs index d53df9e363cc..fe43b5215048 100644 --- a/core/lib/multivm/src/utils/mod.rs +++ b/core/lib/multivm/src/utils/mod.rs @@ -70,7 +70,8 @@ pub fn derive_base_fee_and_gas_per_pubdata( ), VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => { + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => { crate::vm_latest::utils::fee::derive_base_fee_and_gas_per_pubdata( batch_fee_input.into_pubdata_independent(), ) @@ -100,7 +101,10 @@ pub fn get_batch_base_fee(l1_batch_env: &L1BatchEnv, vm_version: VmVersion) -> u VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::fee::get_batch_base_fee(l1_batch_env), VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env), + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => { + crate::vm_latest::utils::fee::get_batch_base_fee(l1_batch_env) + } } } @@ -232,7 +236,10 @@ pub fn derive_overhead( VmVersion::Vm1_4_2 => crate::vm_1_4_2::utils::overhead::derive_overhead(encoded_len), VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::utils::overhead::derive_overhead(encoded_len), + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => { + crate::vm_latest::utils::overhead::derive_overhead(encoded_len) + } } } @@ -269,6 +276,9 @@ pub fn get_bootloader_encoding_space(version: VmVersion) -> u32 { VmVersion::VmGateway => crate::vm_latest::constants::get_bootloader_tx_encoding_space( crate::vm_latest::MultiVmSubversion::Gateway, ), + VmVersion::VmEvmEmulator => crate::vm_latest::constants::get_bootloader_tx_encoding_space( + crate::vm_latest::MultiVmSubversion::EvmEmulator, + ), } } @@ -290,7 +300,8 @@ pub fn get_bootloader_max_txs_in_batch(version: VmVersion) -> usize { VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_TXS_IN_BATCH, VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::constants::MAX_TXS_IN_BATCH, + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => crate::vm_latest::constants::MAX_TXS_IN_BATCH, } } @@ -313,7 +324,8 @@ pub fn gas_bootloader_batch_tip_overhead(version: VmVersion) -> u32 { VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_OVERHEAD, } } @@ -336,7 +348,8 @@ pub fn circuit_statistics_bootloader_batch_tip_overhead(version: VmVersion) -> u } VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => { + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_CIRCUIT_STATISTICS_OVERHEAD as usize } } @@ -361,7 +374,8 @@ pub fn execution_metrics_bootloader_batch_tip_overhead(version: VmVersion) -> us } VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => { + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => { crate::vm_latest::constants::BOOTLOADER_BATCH_TIP_METRICS_SIZE_OVERHEAD as usize } } @@ -387,7 +401,8 @@ pub fn get_max_gas_per_pubdata_byte(version: VmVersion) -> u64 { VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_GAS_PER_PUBDATA_BYTE, VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE, + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => crate::vm_latest::constants::MAX_GAS_PER_PUBDATA_BYTE, } } @@ -424,6 +439,9 @@ pub fn get_used_bootloader_memory_bytes(version: VmVersion) -> usize { VmVersion::VmGateway => crate::vm_latest::constants::get_used_bootloader_memory_bytes( crate::vm_latest::MultiVmSubversion::Gateway, ), + VmVersion::VmEvmEmulator => crate::vm_latest::constants::get_used_bootloader_memory_bytes( + crate::vm_latest::MultiVmSubversion::EvmEmulator, + ), } } @@ -460,6 +478,9 @@ pub fn get_used_bootloader_memory_words(version: VmVersion) -> usize { VmVersion::VmGateway => crate::vm_latest::constants::get_used_bootloader_memory_bytes( crate::vm_latest::MultiVmSubversion::Gateway, ), + VmVersion::VmEvmEmulator => crate::vm_latest::constants::get_used_bootloader_memory_bytes( + crate::vm_latest::MultiVmSubversion::EvmEmulator, + ), } } @@ -483,7 +504,8 @@ pub fn get_max_batch_gas_limit(version: VmVersion) -> u64 { VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::BLOCK_GAS_LIMIT as u64, VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::constants::BATCH_GAS_LIMIT, + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => crate::vm_latest::constants::BATCH_GAS_LIMIT, } } @@ -509,7 +531,8 @@ pub fn get_eth_call_gas_limit(version: VmVersion) -> u64 { VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::ETH_CALL_GAS_LIMIT as u64, VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::constants::ETH_CALL_GAS_LIMIT, + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => crate::vm_latest::constants::ETH_CALL_GAS_LIMIT, } } @@ -532,7 +555,8 @@ pub fn get_max_batch_base_layer_circuits(version: VmVersion) -> usize { } VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway => crate::vm_latest::constants::MAX_BASE_LAYER_CIRCUITS, + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator => crate::vm_latest::constants::MAX_BASE_LAYER_CIRCUITS, } } @@ -556,7 +580,8 @@ pub fn get_max_new_factory_deps(version: VmVersion) -> usize { VmVersion::Vm1_4_2 => crate::vm_1_4_2::constants::MAX_NEW_FACTORY_DEPS, version @ (VmVersion::Vm1_5_0SmallBootloaderMemory | VmVersion::Vm1_5_0IncreasedBootloaderMemory - | VmVersion::VmGateway) => { + | VmVersion::VmGateway + | VmVersion::VmEvmEmulator) => { crate::vm_latest::constants::get_max_new_factory_deps(version.try_into().unwrap()) } } diff --git a/core/lib/multivm/src/versions/testonly/circuits.rs b/core/lib/multivm/src/versions/testonly/circuits.rs index c379372bc970..0ad0a5819d6f 100644 --- a/core/lib/multivm/src/versions/testonly/circuits.rs +++ b/core/lib/multivm/src/versions/testonly/circuits.rs @@ -38,7 +38,7 @@ pub(crate) fn test_circuits() { 0.13982475, 1.6666666, 0.003154238, - 0.9247803, + 1.0797892, 0.00058723404, 0.0034893616, 0.00076709175, diff --git a/core/lib/multivm/src/versions/testonly/evm_emulator.rs b/core/lib/multivm/src/versions/testonly/evm_emulator.rs index bcf6eccfdf5d..383fdcbefafb 100644 --- a/core/lib/multivm/src/versions/testonly/evm_emulator.rs +++ b/core/lib/multivm/src/versions/testonly/evm_emulator.rs @@ -10,9 +10,9 @@ use zksync_system_constants::{ use zksync_test_contracts::{TestContract, TxType}; use zksync_types::{ bytecode::BytecodeHash, - get_code_key, get_known_code_key, h256_to_u256, + get_code_key, get_evm_code_hash_key, get_known_code_key, h256_to_u256, utils::{key_for_eth_balance, storage_key_for_eth_balance}, - AccountTreeId, Address, Execute, StorageKey, H256, U256, + web3, AccountTreeId, Address, Execute, StorageKey, H256, U256, }; use super::{default_system_env, TestedVm, VmTester, VmTesterBuilder}; @@ -78,12 +78,17 @@ impl EvmTestBuilder { let evm_bytecode: Vec<_> = (0..32).collect(); let evm_bytecode_hash = BytecodeHash::for_evm_bytecode(evm_bytecode.len(), &evm_bytecode).value(); + let keccak_bytecode_hash = H256(web3::keccak256(&evm_bytecode)); storage.set_value( get_known_code_key(&evm_bytecode_hash), H256::from_low_u64_be(1), ); for evm_address in self.evm_contract_addresses { storage.set_value(get_code_key(&evm_address), evm_bytecode_hash); + storage.set_value( + get_evm_code_hash_key(evm_bytecode_hash), + keccak_bytecode_hash, + ); } system_env.base_system_smart_contracts.evm_emulator = Some(SystemContractCode { diff --git a/core/lib/multivm/src/versions/testonly/precompiles.rs b/core/lib/multivm/src/versions/testonly/precompiles.rs index dee60686a4f0..a69ba35c806a 100644 --- a/core/lib/multivm/src/versions/testonly/precompiles.rs +++ b/core/lib/multivm/src/versions/testonly/precompiles.rs @@ -41,7 +41,7 @@ pub(crate) fn test_keccak() { assert!(!exec_result.result.is_failed(), "{exec_result:#?}"); let keccak_count = exec_result.statistics.circuit_statistic.keccak256 - * ProtocolGeometry::V1_5_0 + * ProtocolGeometry::latest() .config() .cycles_per_keccak256_circuit as f32; assert!(keccak_count >= 1000.0, "{keccak_count}"); @@ -79,7 +79,9 @@ pub(crate) fn test_sha256() { assert!(!exec_result.result.is_failed(), "{exec_result:#?}"); let sha_count = exec_result.statistics.circuit_statistic.sha256 - * ProtocolGeometry::V1_5_0.config().cycles_per_sha256_circuit as f32; + * ProtocolGeometry::latest() + .config() + .cycles_per_sha256_circuit as f32; assert!(sha_count >= 1000.0, "{sha_count}"); } @@ -108,7 +110,7 @@ pub(crate) fn test_ecrecover() { assert!(!exec_result.result.is_failed(), "{exec_result:#?}"); let ecrecover_count = exec_result.statistics.circuit_statistic.ecrecover - * ProtocolGeometry::V1_5_0 + * ProtocolGeometry::latest() .config() .cycles_per_ecrecover_circuit as f32; assert!((ecrecover_count - 1.0).abs() < 1e-4, "{ecrecover_count}"); diff --git a/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-bridging.json b/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-bridging.json index 0380a46a895e..af3af7205fa8 100644 --- a/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-bridging.json +++ b/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-bridging.json @@ -2,155 +2,155 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x000000000000000000000000000000000000800a" }, - "key": "0xb62ada1fb8084bc5425b2aea59d59080ac3d0a10a1cc368978230741dca77a19" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x5bad0400c1a2cec7acfd85c5c5c25108540c42f405d3ae6ea01209dfbcc63c29" + "key": "0x72cb9aedccd67ba54bb5790ca8b0ed7c2c72d69aae47313e5a88dde191361cda" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x010001a745b7d42ace07b7715205a72b7aea1aff057d28b215e876f200d6db02" + "key": "0xb38e0a4921f99b2c0d1bacbebb812989763f326a7b4a3ce7ffc5e43d5a992aaa" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x00000000000000000000000000000000000000000000000000000000ffffffff" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000d0" + "key": "0x3859fd065954dbed7c74a1359d0e5bc38403ea4cdf0274ae615ce0e3e2afec6b" }, - "0x337e46b67468ced879cfa3e4f5a80102dc9b171897ed4ee236d8b022c2bab287" + "0x0000000000000000000000000000000000000000000000000000000000010002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000008f8213b67eaa7201a63bc99521af36326ba11f3d" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0x01000411c68fb68ec34d89d9051cf0948ad2b6621d6e0957222793343d146ec1" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x4c61297e4655be30d3d195f2bd8fb04ca1887c13893ca54a860373a17c0d7604" + "key": "0x4643bf0e1136d91836661ecb1a6cf75c76f6871ca2a6ee6c86e8c1aa08652ea2" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x1ddea0b775b221639c02aa71f797c3b048ca1a5c24eacff135327fd8fd88f6e4" + "key": "0x5bad0400c1a2cec7acfd85c5c5c25108540c42f405d3ae6ea01209dfbcc63c29" }, - "0x0000000000000000000000000000000000000000000000000000000000010004" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008008" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x71d2d9399f0017d99e02441b51c782e6f5613748934c615622bc6f2327b79b8d" }, - "0x27dcd35b5cbe990adf0abff676b4e7e3eba28d4eaf2c6e17228e966be8cf0945" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x000000000000000000000000000000000000800f" }, - "key": "0x01000411c68fb68ec34d89d9051cf0948ad2b6621d6e0957222793343d146ec1" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x000000000000000000000000bcbdabac00000000000000000000000000001112" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008003" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010f" + "key": "0xbe6d45d9287a1fb4471901bc62a1ea07d573e5dd0b949449cf0370a5932f5a6d" }, - "0x0000000000000000000000000000000000000000000000000000000000000320" + "0x0000000000000000000000000000000500000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x35dc0a033f8f3476b52059199e9babf078fddd76cb3c290e05ae42462bfc33eb" + "key": "0x2f0f4ef292cef99af6c26b38e0ba8f90858fa109941a4376221a992d0a47fdaa" }, - "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000110" + "key": "0x35dc0a033f8f3476b52059199e9babf078fddd76cb3c290e05ae42462bfc33eb" }, - "0x0000000000000000000000000000000000000000000000000000000000000c6c" + "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x45910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "key": "0x67e4e63de4234c7b3b476a49a198e74521ab491f37e3fe3a35c29872bfc80cc5" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "key": "0xfa3c19aceb121637ec90838c80aaee75e4d4ff659d7173b97d671510d9d80ec3" }, - "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" + "0x000000000000000000000000abacabac00000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0x0000000000000000000000000000000000000000000000000000000000000006" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000000000000000000000000000000000000ee6b280" ], [ { "account": { - "address": "0xd69f720ad3b6a7fb8bbee577455f5271c7639278" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x010001a79286282fe8b3215c08486d44cd480234e0816b8481658b20ab300a91" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" + "key": "0x000000000000000000000000000000000000000000000000000000000000010f" }, - "0x010004b15c2a96b846f8cc6e157f455e7686abdfa23261dd35223527c4de99de" + "0x0000000000000000000000000000000000000000000000000000000000000320" ], [ { @@ -164,115 +164,124 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x4643bf0e1136d91836661ecb1a6cf75c76f6871ca2a6ee6c86e8c1aa08652ea2" + "key": "0x0000000000000000000000000000000000000000000000000000000000000033" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008008" }, - "key": "0x962d8512b88c87f0272660761794a46a130b867d7d15b38fc1adc33433e4fce8" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" + "0x0000000000000000000000000000000000000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0xc8b21c64cb5c80d81dfdd26f0636121b670efd74de1d3503b13bf6572987f767" + "key": "0xf2a45b5a6fef4c1ced330074ee4eaf91d109f868aedc9ecce93a8fc0e6d1daab" }, - "0x000000000000000000000000abacabac00000000000000000000000000000001" + "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" ], [ { "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010c" + "key": "0x000000000000000000000000000000000000000000000000000000000000010d" }, - "0x000000000000000000000000000000010000000000000000000000006553f101" + "0x0000000000000000000000000000000100000000000000000000000000000001" ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000f7371ff06f6ff23b4f9b45459a1591e0830caca" + "key": "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" }, - "0x010001a745b7d42ace07b7715205a72b7aea1aff057d28b215e876f200d6db02" + "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" ], [ { "account": { - "address": "0x8f8213b67eaa7201a63bc99521af36326ba11f3d" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000010003" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x010004cf4b79057c7de304b2cdc8ab2b4e1e33c9f345e9f5c560a12b4b1aa64b" + ], + [ + { + "account": { + "address": "0x000000000000000000000000000000000000800b" + }, + "key": "0x000000000000000000000000000000000000000000000000000000000000010e" + }, + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000068" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x3100000000000000000000000000000000000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0xf2a45b5a6fef4c1ced330074ee4eaf91d109f868aedc9ecce93a8fc0e6d1daab" + "key": "0x0000000000000000000000000000000000000000000000000000000000000036" }, - "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "0x6e616d6500000000000000000000000000000000000000000000000000000008" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50" + "key": "0x14f2c283c7f5b4a4f29ea6d76b7df12be4d26a7cd55d3da19ce12f4c4d2b32ff" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000cf" + "key": "0x0000000000000000000000000000000000000000000000000000000000000033" }, - "0x0000000000000000000000000000000000000000000000000000000000010004" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000008003" }, - "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" + "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" }, - "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" + "0x0000000000000000000000000000000300000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0xb022392da155f0ad95728a2199a5da136ed6468cd0cf1906cbda16c7274a576d" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x337e46b67468ced879cfa3e4f5a80102dc9b171897ed4ee236d8b022c2bab287" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0xd6d0aec6cce9469da2cd7ce64917217795b50f04" }, "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, @@ -281,110 +290,110 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x71d2d9399f0017d99e02441b51c782e6f5613748934c615622bc6f2327b79b8d" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000009" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000000000010000000000000000000000006553f101" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x14f2c283c7f5b4a4f29ea6d76b7df12be4d26a7cd55d3da19ce12f4c4d2b32ff" + "key": "0x5c78f6bb82c799d3a0bd9b05844aa7fe20e680858e6e16548d48c56f10cc25c1" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000cc" + "key": "0x0000000000000000000000000000000000000000000000000000000000000035" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000100000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "key": "0x8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4" }, - "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x906264790f6027c59e6c89c6d068d880b2b463ce" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x010004b142d5a05f388a0a2ea197a87af126fb8c7cc31bc903bbc821f5beade3" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0xf50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000ce" + "key": "0x1ddea0b775b221639c02aa71f797c3b048ca1a5c24eacff135327fd8fd88f6e4" }, - "0x000000000000000000000000abacabac00000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000010004" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x56ac350d4507987c7732160b520e62245d020aa922df37b48a14bc5f3b992c5d" + "key": "0x201f2e5549e69135c92587d30523c730fd01553abf72828402fad9b12c172e10" }, - "0x0000000000000000000000000000000000000000000000000000000000010004" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "key": "0x0000000000000000000000000000000000000000000000000000000000000037" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x73796d626f6c000000000000000000000000000000000000000000000000000c" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000033" + "key": "0x9629a7684941c722757c19413febcbfbe8ca7d43152d48e39868d4a12c912345" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x0000000000000000000000000000000000000000000000000000000000000002" ], [ { @@ -398,171 +407,171 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" + "key": "0xaf1ddde7878feb905369f3527c335401193b795b365ffca160f6aaaf4496f73a" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0xd69f720ad3b6a7fb8bbee577455f5271c7639278" }, "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x906264790f6027c59e6c89c6d068d880b2b463ce" }, - "key": "0x9629a7684941c722757c19413febcbfbe8ca7d43152d48e39868d4a12c912345" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x45910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "key": "0x01000191368e78dd1d875771584429156157404b35e3ae3b618e0995ff276974" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x000000000000000000000000000000000000800f" }, - "key": "0xd74ae1a4629e292d9acabed40c1a0f957a75a350154454b77d15cba50fb34878" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000066" + "key": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000000010004" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800a" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x31b66141c575a054316a84da9cf4aa6fe0abd373cab1bf4ac029ffc061aae0da" + "key": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000007" + "key": "0x0000000000000000000000000000000000000000000000000000000000000009" }, "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800a" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x00000000000000000000000000000000000000000000000000000000000000ce" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000abacabac00000000000000000000000000000002" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + "key": "0x00000000000000000000000000000000000000000000000000000000000000cd" }, - "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" + "0x0000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e53512" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008008" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" }, - "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000cd" + "key": "0x01000191638e6a9107c16623a9b08e38d64ee19190a1627709b8091de48310a5" }, - "0x0000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e53512" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0f7371ff06f6ff23b4f9b45459a1591e0830caca" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x000000000000000000000000bcbdabac00000000000000000000000000001112" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x85a40329f37cf82b31a61b67a2bdb3eb5054cbe50bb4a24d14a418a8c3f36b9f" + "key": "0x0000000000000000000000000000000000000000000000000000000000000066" }, - "0x337e46b67468ced879cfa3e4f5a80102dc9b171897ed4ee236d8b022c2bab287" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0f7371ff06f6ff23b4f9b45459a1591e0830caca" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000036" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x6e616d6500000000000000000000000000000000000000000000000000000008" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x98985b546c10c2f2a809ca69bb99482fa9ec97e501971f1f3b1b25beba43df27" + "key": "0x0000000000000000000000000000000000000000000000000000000000000067" }, - "0x000000000000000000000000abacabac00000000000000000000000000000002" + "0x6e616d6500000000000000000000000000000000000000000000000000000008" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x00000000000000000000abacabac000000000000000000000000000000010002" ], [ { "account": { "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x010004b15c2a96b846f8cc6e157f455e7686abdfa23261dd35223527c4de99de" + "key": "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], @@ -571,72 +580,72 @@ "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0000000000000000000000000000000000000000000000000000000000000110" }, - "0x000000000000000000000000bcbdabac00000000000000000000000000001112" + "0x0000000000000000000000000000000000000000000000000000000000000c6c" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008003" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0xbe6d45d9287a1fb4471901bc62a1ea07d573e5dd0b949449cf0370a5932f5a6d" + "key": "0x000000000000000000000000000000000000000000000000000000000000000b" }, - "0x0000000000000000000000000000000500000000000000000000000000000000" + "0xe8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x87c06ae8fd6d2ee9919bb86c39ee03f70b0d87028d77b914408152f07043c769" + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, - "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" ], [ { "account": { "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x966c17f7599309e518d3bd4b955480567aa89fc082dc9a988c8042478fd4c171" + "key": "0x523c4057471fbc63b2a93ecd665ac206bb9a7bc8ad1a84f236558c495959b2a5" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x523c4057471fbc63b2a93ecd665ac206bb9a7bc8ad1a84f236558c495959b2a5" + "key": "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x010004b142d5a05f388a0a2ea197a87af126fb8c7cc31bc903bbc821f5beade3" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" + "key": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x01000191638e6a9107c16623a9b08e38d64ee19190a1627709b8091de48310a5" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000035" + "key": "0x0000000000000000000000000f7371ff06f6ff23b4f9b45459a1591e0830caca" }, - "0x0000000000000000000000000000000000000000000000000000000100000000" + "0x010001a79286282fe8b3215c08486d44cd480234e0816b8481658b20ab300a91" ], [ { @@ -652,7 +661,7 @@ "account": { "address": "0x0000000000000000000000000000000000008006" }, - "key": "0xaf1ddde7878feb905369f3527c335401193b795b365ffca160f6aaaf4496f73a" + "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], @@ -661,269 +670,269 @@ "account": { "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000010004" + "key": "0x0000000000000000000000000000000000000000000000000000000000000007" }, - "0x010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb7" + "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x6b9536609383d920d08570079f8957dc7af1ef9d555dffd9b618ef13eee4c18c" + "key": "0x87c06ae8fd6d2ee9919bb86c39ee03f70b0d87028d77b914408152f07043c769" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008003" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" + "key": "0x0000000000000000000000000000000000000000000000000000000000010004" }, - "0x0000000000000000000000000000000300000000000000000000000000000000" + "0x010007ed389525b956c17da38dcc6d7dd8a8ef40beef423584d8639a5d3be48a" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008008" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000037" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x73796d626f6c000000000000000000000000000000000000000000000000000c" + "0xce3b42448e005fefb2119ee22b6c959c2f53f6e10ff89913e22b8bee40801a59" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000033" + "key": "0x0100041135c31ffcef3b778b603ca68cf3cef4770c91b1535554adab78593be3" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010e" + "key": "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0xb38e0a4921f99b2c0d1bacbebb812989763f326a7b4a3ce7ffc5e43d5a992aaa" + "key": "0x9f4693a69c182083198dd36e2803bc42bbe3f851aa03cb0f0de7687a2171336b" }, - "0x00000000000000000000000000000000000000000000000000000000ffffffff" + "0x0000000000000000000000000000000000000000000000000000000000010003" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" + "key": "0x000000000000000000000000000000000000000000000000000000000000000a" }, - "0x01000191368e78dd1d875771584429156157404b35e3ae3b618e0995ff276974" + "0x827c80afe16dd114d74d777ce09b389128c449b012ece07041bfa3c6bbade1b9" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000006" + "key": "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" }, - "0x000000000000000000000000000000000000000000000000000000000ee6b280" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x3859fd065954dbed7c74a1359d0e5bc38403ea4cdf0274ae615ce0e3e2afec6b" + "key": "0x0000000000000000000000000000000000000000000000000000000000000068" }, - "0x0000000000000000000000000000000000000000000000000000000000010002" + "0x3100000000000000000000000000000000000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x000000000000000000000000000000000000000000000000000000000000010c" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000010003" + "key": "0x000000000000000000000000d6d0aec6cce9469da2cd7ce64917217795b50f04" }, - "0x010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939" + "0x0100041135c31ffcef3b778b603ca68cf3cef4770c91b1535554adab78593be3" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000067" + "key": "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" }, - "0x6e616d6500000000000000000000000000000000000000000000000000000008" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0xc8b21c64cb5c80d81dfdd26f0636121b670efd74de1d3503b13bf6572987f767" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000abacabac00000000000000000000000000000001" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000000b" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0xe8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x65b6e19ac20b2a5a4a631fbb265535dd374095105cf30fe5a6b5c89c276db48b" + "key": "0x00000000000000000000000000000000000000000000000000000000000000c9" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4" + "key": "0xb62ada1fb8084bc5425b2aea59d59080ac3d0a10a1cc368978230741dca77a19" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010d" + "key": "0xd1cffc024225408009d2409fbd399f29af349bd5ab3b7b4e12f519e019ab9797" }, - "0x0000000000000000000000000000000100000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000000a" + "key": "0x966c17f7599309e518d3bd4b955480567aa89fc082dc9a988c8042478fd4c171" }, - "0x91f4ea457ad7d0724fac5002a58ae5d8a76a5a2e92d12bf4bc8a37674a26625f" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" + "key": "0x00000000000000000000000000000000000000000000000000000000000000d0" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x337e46b67468ced879cfa3e4f5a80102dc9b171897ed4ee236d8b022c2bab287" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x000000000000000000000000000000000000800a" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0x31b66141c575a054316a84da9cf4aa6fe0abd373cab1bf4ac029ffc061aae0da" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x201f2e5549e69135c92587d30523c730fd01553abf72828402fad9b12c172e10" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { - "address": "0xf50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x4c61297e4655be30d3d195f2bd8fb04ca1887c13893ca54a860373a17c0d7604" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000c9" + "key": "0x962d8512b88c87f0272660761794a46a130b867d7d15b38fc1adc33433e4fce8" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0xd74ae1a4629e292d9acabed40c1a0f957a75a350154454b77d15cba50fb34878" }, - "0x000000000000000000000000bcbdabac00000000000000000000000000001112" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x9f4693a69c182083198dd36e2803bc42bbe3f851aa03cb0f0de7687a2171336b" + "key": "0x67e4e63de4234c7b3b476a49a198e74521ab491f37e3fe3a35c29872bfc80cc5" }, - "0x0000000000000000000000000000000000000000000000000000000000010003" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0xcc5ba8531cab39af2cd2d01f0273ab5e41413d055aaa2aac6dcad52478b22c58" + "key": "0x56ac350d4507987c7732160b520e62245d020aa922df37b48a14bc5f3b992c5d" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000000010004" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x000000000000000000000000000000000000800f" }, "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x00000000000000000000abacabac000000000000000000000000000000010002" + "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" ] ] \ No newline at end of file diff --git a/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-registration.json b/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-registration.json index 681f92b8e5fd..07154ee3e035 100644 --- a/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-registration.json +++ b/core/lib/multivm/src/versions/testonly/v26_utils_outputs/post-registration.json @@ -2,110 +2,110 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" + "key": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0xc8b21c64cb5c80d81dfdd26f0636121b670efd74de1d3503b13bf6572987f767" + "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" }, - "0x000000000000000000000000abacabac00000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" + "key": "0x00000000000000000000000000000000000000000000000000000000000000ce" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x000000000000000000000000abacabac00000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x523c4057471fbc63b2a93ecd665ac206bb9a7bc8ad1a84f236558c495959b2a5" + "key": "0x0000000000000000000000000000000000000000000000000000000000000036" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x6e616d6500000000000000000000000000000000000000000000000000000008" ], [ { "account": { - "address": "0x906264790f6027c59e6c89c6d068d880b2b463ce" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x35dc0a033f8f3476b52059199e9babf078fddd76cb3c290e05ae42462bfc33eb" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800a" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x000000000000000000000000000000000000000000000000000000000000010c" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000cc" + "key": "0x9f4693a69c182083198dd36e2803bc42bbe3f851aa03cb0f0de7687a2171336b" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000000010003" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000000b" + "key": "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" }, - "0xe8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x6b9536609383d920d08570079f8957dc7af1ef9d555dffd9b618ef13eee4c18c" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000abacabac000000000000000000000000000000010002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x01000411c68fb68ec34d89d9051cf0948ad2b6621d6e0957222793343d146ec1" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0xb38e0a4921f99b2c0d1bacbebb812989763f326a7b4a3ce7ffc5e43d5a992aaa" + "key": "0x00000000000000000000000000000000000000000000000000000000000000cd" }, - "0x00000000000000000000000000000000000000000000000000000000ffffffff" + "0x0000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e53512" ], [ { @@ -119,38 +119,29 @@ [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" - }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" - }, - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - [ - { - "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008003" }, - "key": "0x9f4693a69c182083198dd36e2803bc42bbe3f851aa03cb0f0de7687a2171336b" + "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" }, - "0x0000000000000000000000000000000000000000000000000000000000010003" + "0x0000000000000000000000000000000300000000000000000000000000000000" ], [ { "account": { "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000033" + "key": "0x0000000000000000000000000000000000000000000000000000000000000068" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x3100000000000000000000000000000000000000000000000000000000000002" ], [ { @@ -164,461 +155,461 @@ [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x5bad0400c1a2cec7acfd85c5c5c25108540c42f405d3ae6ea01209dfbcc63c29" }, - "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { "account": { "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x85a40329f37cf82b31a61b67a2bdb3eb5054cbe50bb4a24d14a418a8c3f36b9f" + "key": "0x00000000000000000000000000000000000000000000000000000000000000c9" }, - "0x337e46b67468ced879cfa3e4f5a80102dc9b171897ed4ee236d8b022c2bab287" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { - "address": "0xf50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000000007" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008003" + "address": "0x45910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x0000000000000000000000000000000300000000000000000000000000000000" + "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000007" + "key": "0x0000000000000000000000000000000000000000000000000000000000000035" }, - "0x000000000000000000000000000000010000000000000000000000006553f101" + "0x00000000000000000000000000000000000000000000000000000000ffffffff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x010001a745b7d42ace07b7715205a72b7aea1aff057d28b215e876f200d6db02" + "key": "0x0000000000000000000000000000000000000000000000000000000000000066" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0xaf1ddde7878feb905369f3527c335401193b795b365ffca160f6aaaf4496f73a" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000067" + "key": "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" }, - "0x6e616d6500000000000000000000000000000000000000000000000000000008" + "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0x906264790f6027c59e6c89c6d068d880b2b463ce" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0xd74ae1a4629e292d9acabed40c1a0f957a75a350154454b77d15cba50fb34878" + "key": "0xb38e0a4921f99b2c0d1bacbebb812989763f326a7b4a3ce7ffc5e43d5a992aaa" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000000000000000000000000000000000000000ffffffff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x4643bf0e1136d91836661ecb1a6cf75c76f6871ca2a6ee6c86e8c1aa08652ea2" + "key": "0x000000000000000000000000d6d0aec6cce9469da2cd7ce64917217795b50f04" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0100041135c31ffcef3b778b603ca68cf3cef4770c91b1535554adab78593be3" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x87c06ae8fd6d2ee9919bb86c39ee03f70b0d87028d77b914408152f07043c769" }, - "0x000000000000000000000000bcbdabac00000000000000000000000000001112" + "0x0000000000000000000000000000000000000000000000000000000000000002" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0xd6d0aec6cce9469da2cd7ce64917217795b50f04" }, - "key": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0xaf1ddde7878feb905369f3527c335401193b795b365ffca160f6aaaf4496f73a" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000009" + "key": "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" }, - "0x000000000000000000000000000000010000000000000000000000006553f101" + "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000110" + "key": "0xe6d904d46c5d8b2934bf40eee45740c707124a9797010ceae3f79534391b6de5" }, - "0x0000000000000000000000000000000000000000000000000000000000000c6c" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008003" + "address": "0x7ec2e8105e1f5bee0153abd0d0f669e0d15786aa" }, - "key": "0xbe6d45d9287a1fb4471901bc62a1ea07d573e5dd0b949449cf0370a5932f5a6d" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000500000000000000000000000000000000" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" + "key": "0x523c4057471fbc63b2a93ecd665ac206bb9a7bc8ad1a84f236558c495959b2a5" }, - "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000036" + "key": "0x0000000000000000000000000000000000000000000000000000000000000110" }, - "0x6e616d6500000000000000000000000000000000000000000000000000000008" + "0x0000000000000000000000000000000000000000000000000000000000000c6c" ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "key": "0x0000000000000000000000000f7371ff06f6ff23b4f9b45459a1591e0830caca" }, - "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" + "0x010001a79286282fe8b3215c08486d44cd480234e0816b8481658b20ab300a91" ], [ { "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000006" + "key": "0x000000000000000000000000000000000000000000000000000000000000010d" }, - "0x000000000000000000000000000000000000000000000000000000000ee6b280" + "0x0000000000000000000000000000000100000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0xfa3c19aceb121637ec90838c80aaee75e4d4ff659d7173b97d671510d9d80ec3" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x000000000000000000000000abacabac00000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0x201f2e5549e69135c92587d30523c730fd01553abf72828402fad9b12c172e10" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" + "0x000000000000000000000000bcbdabac00000000000000000000000000001112" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x3859fd065954dbed7c74a1359d0e5bc38403ea4cdf0274ae615ce0e3e2afec6b" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0x0000000000000000000000000000000000000000000000000000000000010002" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x966c17f7599309e518d3bd4b955480567aa89fc082dc9a988c8042478fd4c171" + "key": "0x8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010d" + "key": "0x71d2d9399f0017d99e02441b51c782e6f5613748934c615622bc6f2327b79b8d" }, - "0x0000000000000000000000000000000100000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0xd69f720ad3b6a7fb8bbee577455f5271c7639278" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0f7371ff06f6ff23b4f9b45459a1591e0830caca" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000066" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" + "key": "0x2f0f4ef292cef99af6c26b38e0ba8f90858fa109941a4376221a992d0a47fdaa" }, - "0x01000191368e78dd1d875771584429156157404b35e3ae3b618e0995ff276974" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" + "key": "0xd74ae1a4629e292d9acabed40c1a0f957a75a350154454b77d15cba50fb34878" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800a" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x31b66141c575a054316a84da9cf4aa6fe0abd373cab1bf4ac029ffc061aae0da" + "key": "0x9629a7684941c722757c19413febcbfbe8ca7d43152d48e39868d4a12c912345" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000000000002" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000000033" }, - "0x00000000000000000000abacabac000000000000000000000000000000010002" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x000000000000000000000000000000000000800f" }, - "key": "0x962d8512b88c87f0272660761794a46a130b867d7d15b38fc1adc33433e4fce8" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x000000000000000000000000000000000000000000000000000000000000000a" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x8357441841c7e8b78d694f9da8fac16ad50a857a7dc84cb8525a01c5abffa936" ], [ { "account": { - "address": "0x7ec2e8105e1f5bee0153abd0d0f669e0d15786aa" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x010001a79286282fe8b3215c08486d44cd480234e0816b8481658b20ab300a91" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008008" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, - "0x60d20963d495c0cdf497857fe3ff811dc55c636f0f86cd8a46c8ef544e631e54" + "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0xd1cffc024225408009d2409fbd399f29af349bd5ab3b7b4e12f519e019ab9797" + "key": "0x0000000000000000000000000000000000000000000000000000000000010004" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x010007ed389525b956c17da38dcc6d7dd8a8ef40beef423584d8639a5d3be48a" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0xd69f720ad3b6a7fb8bbee577455f5271c7639278" }, - "key": "0x0000000000000000000000008f8213b67eaa7201a63bc99521af36326ba11f3d" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x01000411c68fb68ec34d89d9051cf0948ad2b6621d6e0957222793343d146ec1" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x000000000000000000000000000000000000800a" }, - "key": "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x000000000000000000000000000000000000800a" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000068" + "key": "0x31b66141c575a054316a84da9cf4aa6fe0abd373cab1bf4ac029ffc061aae0da" }, - "0x3100000000000000000000000000000000000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "key": "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" }, - "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" + "0x01000191638e6a9107c16623a9b08e38d64ee19190a1627709b8091de48310a5" ], [ { "account": { - "address": "0x0f7371ff06f6ff23b4f9b45459a1591e0830caca" + "address": "0x0000000000000000000000000000000000008008" }, "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0xd11f0ec8f7d8d0d96ad34d5ed1a2d2b6adf72437241d8358ca82777d6bee720e" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008008" + "address": "0x0000000000000000000000000000000000008003" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0xbe6d45d9287a1fb4471901bc62a1ea07d573e5dd0b949449cf0370a5932f5a6d" }, - "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x0000000000000000000000000000000500000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0xf2a45b5a6fef4c1ced330074ee4eaf91d109f868aedc9ecce93a8fc0e6d1daab" + "key": "0x0000000000000000000000000000000000000000000000000000000000000006" }, - "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "0x000000000000000000000000000000000000000000000000000000000ee6b280" ], [ { "account": { "address": "0x0000000000000000000000000000000000008006" }, - "key": "0xcc5ba8531cab39af2cd2d01f0273ab5e41413d055aaa2aac6dcad52478b22c58" + "key": "0x72cb9aedccd67ba54bb5790ca8b0ed7c2c72d69aae47313e5a88dde191361cda" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x010004b15c2a96b846f8cc6e157f455e7686abdfa23261dd35223527c4de99de" + "key": "0x0000000000000000000000000000000000000000000000000000000000000067" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x6e616d6500000000000000000000000000000000000000000000000000000008" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000f7371ff06f6ff23b4f9b45459a1591e0830caca" + "key": "0x962d8512b88c87f0272660761794a46a130b867d7d15b38fc1adc33433e4fce8" }, - "0x010001a745b7d42ace07b7715205a72b7aea1aff057d28b215e876f200d6db02" + "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "key": "0x000000000000000000000000000000000000000000000000000000000000010e" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010c" + "key": "0x0000000000000000000000000000000000000000000000000000000000000037" }, - "0x000000000000000000000000000000010000000000000000000000006553f101" + "0x73796d626f6c000000000000000000000000000000000000000000000000000c" ], [ { @@ -632,180 +623,189 @@ [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000035" + "key": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50" }, - "0x00000000000000000000000000000000000000000000000000000000ffffffff" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008008" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000037" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x73796d626f6c000000000000000000000000000000000000000000000000000c" + "0x0000000000000000000000000000000000000000000000000000000000000002" ], [ { "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x000000000000000000000000000000000000000000000000000000000000000b" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0xe8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x87c06ae8fd6d2ee9919bb86c39ee03f70b0d87028d77b914408152f07043c769" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" + "key": "0x5c78f6bb82c799d3a0bd9b05844aa7fe20e680858e6e16548d48c56f10cc25c1" }, - "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000c9" + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x000000000000000000000000000000000000800f" }, - "key": "0x65b6e19ac20b2a5a4a631fbb265535dd374095105cf30fe5a6b5c89c276db48b" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000bcbdabac00000000000000000000000000001112" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x9629a7684941c722757c19413febcbfbe8ca7d43152d48e39868d4a12c912345" + "key": "0x01000191638e6a9107c16623a9b08e38d64ee19190a1627709b8091de48310a5" }, - "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0xf50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0000000000000000000000000000000000000000000000000000000000000009" }, - "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" + "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x010004b142d5a05f388a0a2ea197a87af126fb8c7cc31bc903bbc821f5beade3" }, - "0x000000000000000000000000bcbdabac00000000000000000000000000001112" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4" + "key": "0x4643bf0e1136d91836661ecb1a6cf75c76f6871ca2a6ee6c86e8c1aa08652ea2" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0xe6d904d46c5d8b2934bf40eee45740c707124a9797010ceae3f79534391b6de5" + "key": "0xc8b21c64cb5c80d81dfdd26f0636121b670efd74de1d3503b13bf6572987f767" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000abacabac00000000000000000000000000000001" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010f" + "key": "0x1ddea0b775b221639c02aa71f797c3b048ca1a5c24eacff135327fd8fd88f6e4" }, - "0x0000000000000000000000000000000000000000000000000000000000000320" + "0x0000000000000000000000000000000000000000000000000000000000010004" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" + "key": "0xf2a45b5a6fef4c1ced330074ee4eaf91d109f868aedc9ecce93a8fc0e6d1daab" }, - "0x010004b15c2a96b846f8cc6e157f455e7686abdfa23261dd35223527c4de99de" + "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" ], [ { "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010e" + "key": "0x000000000000000000000000000000000000000000000000000000000000010f" + }, + "0x0000000000000000000000000000000000000000000000000000000000000320" + ], + [ + { + "account": { + "address": "0x0000000000000000000000000000000000010004" + }, + "key": "0xd1cffc024225408009d2409fbd399f29af349bd5ab3b7b4e12f519e019ab9797" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x1ddea0b775b221639c02aa71f797c3b048ca1a5c24eacff135327fd8fd88f6e4" + "key": "0x0000000000000000000000000000000000000000000000000000000000010003" }, - "0x0000000000000000000000000000000000000000000000000000000000010004" + "0x010004cf4b79057c7de304b2cdc8ab2b4e1e33c9f345e9f5c560a12b4b1aa64b" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x71d2d9399f0017d99e02441b51c782e6f5613748934c615622bc6f2327b79b8d" + "key": "0x67e4e63de4234c7b3b476a49a198e74521ab491f37e3fe3a35c29872bfc80cc5" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000000a" + "key": "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "0x9452cb2f952ddce0fd26362ce48baf778eaf59411b96acdbb99e8bfd6aad8bfe" + "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000033" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x01000191368e78dd1d875771584429156157404b35e3ae3b618e0995ff276974" + "key": "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], @@ -814,98 +814,98 @@ "account": { "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" + "key": "0x0100041135c31ffcef3b778b603ca68cf3cef4770c91b1535554adab78593be3" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x8f8213b67eaa7201a63bc99521af36326ba11f3d" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x3859fd065954dbed7c74a1359d0e5bc38403ea4cdf0274ae615ce0e3e2afec6b" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000010002" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x98985b546c10c2f2a809ca69bb99482fa9ec97e501971f1f3b1b25beba43df27" + "key": "0x966c17f7599309e518d3bd4b955480567aa89fc082dc9a988c8042478fd4c171" }, - "0x000000000000000000000000abacabac00000000000000000000000000000002" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x67e4e63de4234c7b3b476a49a198e74521ab491f37e3fe3a35c29872bfc80cc5" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x45910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000cd" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e53512" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000010003" + "key": "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" }, - "0x010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939" + "0x010004b142d5a05f388a0a2ea197a87af126fb8c7cc31bc903bbc821f5beade3" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x201f2e5549e69135c92587d30523c730fd01553abf72828402fad9b12c172e10" + "key": "0x0000000000000000000000000000000000000000000000000000000000000033" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x35dc0a033f8f3476b52059199e9babf078fddd76cb3c290e05ae42462bfc33eb" + "key": "0xb022392da155f0ad95728a2199a5da136ed6468cd0cf1906cbda16c7274a576d" }, - "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" + "0x337e46b67468ced879cfa3e4f5a80102dc9b171897ed4ee236d8b022c2bab287" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x000000000000000000000000000000000000800f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000010004" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb7" + "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x5bad0400c1a2cec7acfd85c5c5c25108540c42f405d3ae6ea01209dfbcc63c29" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000ce" + "key": "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" }, - "0x000000000000000000000000abacabac00000000000000000000000000000002" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ] ] \ No newline at end of file diff --git a/core/lib/multivm/src/versions/testonly/v26_utils_outputs/simple-test.json b/core/lib/multivm/src/versions/testonly/v26_utils_outputs/simple-test.json index ca29027c06fa..9283a381f6ab 100644 --- a/core/lib/multivm/src/versions/testonly/v26_utils_outputs/simple-test.json +++ b/core/lib/multivm/src/versions/testonly/v26_utils_outputs/simple-test.json @@ -2,92 +2,92 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x201f2e5549e69135c92587d30523c730fd01553abf72828402fad9b12c172e10" + "key": "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0xd6d0aec6cce9469da2cd7ce64917217795b50f04" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x67e4e63de4234c7b3b476a49a198e74521ab491f37e3fe3a35c29872bfc80cc5" + "key": "0x0000000000000000000000000000000000000000000000000000000000000037" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x73796d626f6c000000000000000000000000000000000000000000000000000c" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000066" + "key": "0xb38e0a4921f99b2c0d1bacbebb812989763f326a7b4a3ce7ffc5e43d5a992aaa" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000000000000000000000000000000000000000ffffffff" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000009" + "key": "0x0000000000000000000000000000000000000000000000000000000000010004" }, - "0x000000000000000000000000000000010000000000000000000000006553f101" + "0x010007ed389525b956c17da38dcc6d7dd8a8ef40beef423584d8639a5d3be48a" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008003" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x0000000000000000000000000000000300000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000007" + "key": "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" }, - "0x000000000000000000000000000000010000000000000000000000006553f101" + "0x010004b142d5a05f388a0a2ea197a87af126fb8c7cc31bc903bbc821f5beade3" ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "key": "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" }, - "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000cc" + "key": "0x201f2e5549e69135c92587d30523c730fd01553abf72828402fad9b12c172e10" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { @@ -101,56 +101,65 @@ [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x56ac350d4507987c7732160b520e62245d020aa922df37b48a14bc5f3b992c5d" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x0000000000000000000000000000000000000000000000000000000000010004" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x906264790f6027c59e6c89c6d068d880b2b463ce" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010d" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000100000000000000000000000000000001" + "0x000000000000000000000000000000000000000000000000000000000000800f" + ], + [ + { + "account": { + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + }, + "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + }, + "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" ], [ { "account": { "address": "0x0000000000000000000000000000000000008006" }, - "key": "0xaf1ddde7878feb905369f3527c335401193b795b365ffca160f6aaaf4496f73a" + "key": "0xd74ae1a4629e292d9acabed40c1a0f957a75a350154454b77d15cba50fb34878" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0xf50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000000009" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010f" + "key": "0x5c78f6bb82c799d3a0bd9b05844aa7fe20e680858e6e16548d48c56f10cc25c1" }, - "0x0000000000000000000000000000000000000000000000000000000000000320" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000036" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x6e616d6500000000000000000000000000000000000000000000000000000008" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { @@ -164,74 +173,74 @@ [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000000a" + "key": "0x0000000000000000000000000000000000000000000000000000000000000033" }, - "0x83a9f089381dd030f84a204e9516f414176ec3951be1176f90cf1df085d474a7" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x01000411c68fb68ec34d89d9051cf0948ad2b6621d6e0957222793343d146ec1" + "key": "0x14f2c283c7f5b4a4f29ea6d76b7df12be4d26a7cd55d3da19ce12f4c4d2b32ff" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" + "key": "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "key": "0x966c17f7599309e518d3bd4b955480567aa89fc082dc9a988c8042478fd4c171" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "key": "0x0100041135c31ffcef3b778b603ca68cf3cef4770c91b1535554adab78593be3" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0xb62ada1fb8084bc5425b2aea59d59080ac3d0a10a1cc368978230741dca77a19" + "key": "0x00000000000000000000000000000000000000000000000000000000000000cd" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e53512" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x5bad0400c1a2cec7acfd85c5c5c25108540c42f405d3ae6ea01209dfbcc63c29" + "key": "0x0000000000000000000000000000000000000000000000000000000000000006" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x000000000000000000000000000000000000000000000000000000000ee6b280" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x000000000000000000000000000000000000800f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000000001bc724595f63502a1c697304e602f9d3d813a3f" ], [ { @@ -245,36 +254,36 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x14f2c283c7f5b4a4f29ea6d76b7df12be4d26a7cd55d3da19ce12f4c4d2b32ff" + "key": "0x00000000000000000000000000000000000000000000000000000000000000ce" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000abacabac00000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x000000000000000000000000000000000000800a" }, - "key": "0x65b6e19ac20b2a5a4a631fbb265535dd374095105cf30fe5a6b5c89c276db48b" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0f7371ff06f6ff23b4f9b45459a1591e0830caca" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000035" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x00000000000000000000000000000000000000000000000000000000ffffffff" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000110" + "key": "0x0000000000000000000000000000000000000000000000000000000000000066" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], @@ -283,54 +292,36 @@ "account": { "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "0x00000000000000000000abacabac000000000000000000000000000000010002" - ], - [ - { - "account": { - "address": "0x0000000000000000000000000000000000010003" - }, - "key": "0x56ac350d4507987c7732160b520e62245d020aa922df37b48a14bc5f3b992c5d" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x0000000000000000000000000000000000000000000000000000000000010004" + "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000f7371ff06f6ff23b4f9b45459a1591e0830caca" - }, - "0x010001a745b7d42ace07b7715205a72b7aea1aff057d28b215e876f200d6db02" - ], - [ - { - "account": { - "address": "0x0000000000000000000000000000000000008006" - }, - "key": "0x6b9536609383d920d08570079f8957dc7af1ef9d555dffd9b618ef13eee4c18c" + "key": "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000006" + "key": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50" }, - "0x000000000000000000000000000000000000000000000000000000000ee6b280" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { - "address": "0xf50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x3859fd065954dbed7c74a1359d0e5bc38403ea4cdf0274ae615ce0e3e2afec6b" }, - "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" + "0x0000000000000000000000000000000000000000000000000000000000010002" ], [ { @@ -344,133 +335,115 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000008004" - }, - "key": "0x010001a745b7d42ace07b7715205a72b7aea1aff057d28b215e876f200d6db02" - }, - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - [ - { - "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000010004" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb7" + "0x0000000000000000000000000000000000000000000000000000000000008007" ], [ { "account": { - "address": "0x0f7371ff06f6ff23b4f9b45459a1591e0830caca" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x71d2d9399f0017d99e02441b51c782e6f5613748934c615622bc6f2327b79b8d" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0x0000000000000000000000000000000000000000000000000000000000000110" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], - [ - { - "account": { - "address": "0x000000000000000000000000000000000000800f" - }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "0x0000000000000000000000001b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" - ], [ { "account": { "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "key": "0x000000000000000000000000d6d0aec6cce9469da2cd7ce64917217795b50f04" }, - "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" + "0x0100041135c31ffcef3b778b603ca68cf3cef4770c91b1535554adab78593be3" ], [ { "account": { "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x962d8512b88c87f0272660761794a46a130b867d7d15b38fc1adc33433e4fce8" + "key": "0x9f4693a69c182083198dd36e2803bc42bbe3f851aa03cb0f0de7687a2171336b" }, - "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" + "0x0000000000000000000000000000000000000000000000000000000000010003" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x523c4057471fbc63b2a93ecd665ac206bb9a7bc8ad1a84f236558c495959b2a5" + "key": "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x01000191638e6a9107c16623a9b08e38d64ee19190a1627709b8091de48310a5" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x0000000000000000000000000000000000008008" }, - "key": "0x010000db713109f1ac5ff00fe50167ec7ea3f566e6f2bb839175f876dc042ad7" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0xd69f720ad3b6a7fb8bbee577455f5271c7639278" }, - "key": "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x00000000000000000000000000000000000000000000000000000000000000ff" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x45910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "key": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50" + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0xb38e0a4921f99b2c0d1bacbebb812989763f326a7b4a3ce7ffc5e43d5a992aaa" + "key": "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, - "0x00000000000000000000000000000000000000000000000000000000ffffffff" + "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x000000000000000000000000000000000000800a" }, - "key": "0xe6d904d46c5d8b2934bf40eee45740c707124a9797010ceae3f79534391b6de5" + "key": "0x31b66141c575a054316a84da9cf4aa6fe0abd373cab1bf4ac029ffc061aae0da" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, "key": "0x0000000000000000000000000000000000000000000000000000000000000068" }, @@ -479,268 +452,277 @@ [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + "key": "0x9629a7684941c722757c19413febcbfbe8ca7d43152d48e39868d4a12c912345" }, - "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" + "0x0000000000000000000000000000000000000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x9629a7684941c722757c19413febcbfbe8ca7d43152d48e39868d4a12c912345" + "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" }, - "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x98985b546c10c2f2a809ca69bb99482fa9ec97e501971f1f3b1b25beba43df27" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x000000000000000000000000abacabac00000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008003" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" + "key": "0x01000191638e6a9107c16623a9b08e38d64ee19190a1627709b8091de48310a5" }, - "0x0000000000000000000000000000000300000000000000000000000000000000" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x3859fd065954dbed7c74a1359d0e5bc38403ea4cdf0274ae615ce0e3e2afec6b" + "key": "0x01000143db90f04838859f6b0abfc68c1f894d495523b957f3b899966f8761ea" }, - "0x0000000000000000000000000000000000000000000000000000000000010002" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x9f4693a69c182083198dd36e2803bc42bbe3f851aa03cb0f0de7687a2171336b" + "key": "0x0000000000000000000000000000000000000000000000000000000000000035" }, - "0x0000000000000000000000000000000000000000000000000000000000010003" + "0x00000000000000000000000000000000000000000000000000000000ffffffff" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008005" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x966c17f7599309e518d3bd4b955480567aa89fc082dc9a988c8042478fd4c171" + "key": "0xaf1ddde7878feb905369f3527c335401193b795b365ffca160f6aaaf4496f73a" }, - "0x010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, - "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000010c" + "key": "0x0000000000000000000000000000000000000000000000000000000000000007" }, "0x000000000000000000000000000000010000000000000000000000006553f101" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800f" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000002" + "key": "0x67e4e63de4234c7b3b476a49a198e74521ab491f37e3fe3a35c29872bfc80cc5" }, - "0x000000000000000000000000bcbdabac00000000000000000000000000001112" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x0000000000000000000000000000000000008008" }, - "key": "0xd74ae1a4629e292d9acabed40c1a0f957a75a350154454b77d15cba50fb34878" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x859eb9469cb5591f5adc2340f428f89e31d186a971904641428c27f55bc99448" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4" + "key": "0x00000000000000000000000000000000000000000000000000000000000000c9" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x00000000000000000000000045910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" ], [ { "account": { "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" + "key": "0xe6d904d46c5d8b2934bf40eee45740c707124a9797010ceae3f79534391b6de5" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x01000191368e78dd1d875771584429156157404b35e3ae3b618e0995ff276974" + "key": "0x000000000000000000000000000000000000000000000000000000000000000b" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0xe8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c" ], [ { "account": { "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x4643bf0e1136d91836661ecb1a6cf75c76f6871ca2a6ee6c86e8c1aa08652ea2" + "key": "0x2f0f4ef292cef99af6c26b38e0ba8f90858fa109941a4376221a992d0a47fdaa" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000cd" + "key": "0x4643bf0e1136d91836661ecb1a6cf75c76f6871ca2a6ee6c86e8c1aa08652ea2" }, - "0x0000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e53512" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000010003" + "key": "0x0000000000000000000000000000000000000000000000000000000000000036" }, - "0x010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939" + "0x6e616d6500000000000000000000000000000000000000000000000000000008" ], [ { "account": { - "address": "0xd69f720ad3b6a7fb8bbee577455f5271c7639278" + "address": "0x0000000000000000000000000000000000010003" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x0000000000000000000000000000000000010004" }, - "key": "0x0000000000000000000000007ec2e8105e1f5bee0153abd0d0f669e0d15786aa" + "key": "0x0000000000000000000000000000000000000000000000000000000000000033" }, - "0x010004b15c2a96b846f8cc6e157f455e7686abdfa23261dd35223527c4de99de" + "0x000000000000000000000000000000000000000000000000000000000000800f" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800a" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x00000000000000000000abacabac000000000000000000000000000000010002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x0000000000000000000000000000000000008002" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000033" + "key": "0x0000000000000000000000000000000000000000000000000000000000010003" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x010004cf4b79057c7de304b2cdc8ab2b4e1e33c9f345e9f5c560a12b4b1aa64b" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800a" + "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" }, - "key": "0x31b66141c575a054316a84da9cf4aa6fe0abd373cab1bf4ac029ffc061aae0da" + "key": "0xfa3c19aceb121637ec90838c80aaee75e4d4ff659d7173b97d671510d9d80ec3" }, - "0x0000000000000000000000000000000000000000000000000000000000000000" + "0x000000000000000000000000abacabac00000000000000000000000000000002" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008008" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x010001a79286282fe8b3215c08486d44cd480234e0816b8481658b20ab300a91" }, - "0x2d95f0872a77807832a648f290611568057337716a0860f9b73b48d300b9e847" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x0100006734cb11edfcd895002aca2cf959d3bdfe96026599fb3276dd3fcff10d" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010004" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000c9" + "key": "0x010000fbbf5e37826b71bed7ec92a530feed3441e2f20fe085eaaf709c1ac872" }, - "0x000000000000000000000000f50c20fa64ef4e54f2123c04c1cb6d30069c3182" + "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x000000000000000000000000000000000000800f" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000037" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x73796d626f6c000000000000000000000000000000000000000000000000000c" + "0x000000000000000000000000bcbdabac00000000000000000000000000001112" ], [ { "account": { "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x000000000000000000000000000000000000000000000000000000000000000b" + "key": "0x000000000000000000000000000000000000000000000000000000000000010f" }, - "0xe8e77626586f73b955364c7b4bbf0bb7f7685ebd40e852b164633a4acbd3244c" + "0x0000000000000000000000000000000000000000000000000000000000000320" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008004" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x010004b15c2a96b846f8cc6e157f455e7686abdfa23261dd35223527c4de99de" + "key": "0x0000000000000000000000000000000000000000000000000000000000000002" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008006" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0xcc5ba8531cab39af2cd2d01f0273ab5e41413d055aaa2aac6dcad52478b22c58" + "key": "0x0000000000000000000000000000000000000000000000000000000000000065" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x906264790f6027c59e6c89c6d068d880b2b463ce" + "address": "0x0000000000000000000000000000000000008002" + }, + "key": "0x0000000000000000000000000f7371ff06f6ff23b4f9b45459a1591e0830caca" + }, + "0x010001a79286282fe8b3215c08486d44cd480234e0816b8481658b20ab300a91" + ], + [ + { + "account": { + "address": "0x45910da6479fd9d6c307f5c0ffe8c9f27f0bfb13" }, "key": "0x0000000000000000000000000000000000000000000000000000000000000000" }, @@ -749,56 +731,56 @@ [ { "account": { - "address": "0x8f8213b67eaa7201a63bc99521af36326ba11f3d" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000000" + "key": "0x72cb9aedccd67ba54bb5790ca8b0ed7c2c72d69aae47313e5a88dde191361cda" }, - "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000033" + "key": "0x962d8512b88c87f0272660761794a46a130b867d7d15b38fc1adc33433e4fce8" }, - "0x000000000000000000000000000000000000000000000000000000000000800f" + "0x05e1c3ae4b9732444ae25217ac7666e46fa365fee1768de00c9fcb65532b7609" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008008" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0xb62ada1fb8084bc5425b2aea59d59080ac3d0a10a1cc368978230741dca77a19" }, "0x0000000000000000000000000000000000000000000000000000000000000001" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0x0000000000000000000000008f8213b67eaa7201a63bc99521af36326ba11f3d" + "key": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, - "0x01000411c68fb68ec34d89d9051cf0948ad2b6621d6e0957222793343d146ec1" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000067" + "key": "0x000000000000000000000000000000000000000000000000000000000000000a" }, - "0x6e616d6500000000000000000000000000000000000000000000000000000008" + "0x3fc8d70e2fd87e00c2479e1c49d2c9394582d0291e37d1a1bb092957b7b1d083" ], [ { "account": { "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x71d2d9399f0017d99e02441b51c782e6f5613748934c615622bc6f2327b79b8d" + "key": "0x5bad0400c1a2cec7acfd85c5c5c25108540c42f405d3ae6ea01209dfbcc63c29" }, - "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" ], [ { @@ -809,6 +791,24 @@ }, "0x0000000000000000000000000000000000000000000000000000000000000002" ], + [ + { + "account": { + "address": "0x000000000000000000000000000000000000800f" + }, + "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "0x000000000000000000000000d316600b6009f94ab776e97f1fc985bc18b4e535" + ], + [ + { + "account": { + "address": "0x000000000000000000000000000000000000800b" + }, + "key": "0x000000000000000000000000000000000000000000000000000000000000010c" + }, + "0x000000000000000000000000000000010000000000000000000000006553f101" + ], [ { "account": { @@ -821,46 +821,46 @@ [ { "account": { - "address": "0x0000000000000000000000000000000000010003" + "address": "0x0000000000000000000000000000000000008005" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000065" + "key": "0x523c4057471fbc63b2a93ecd665ac206bb9a7bc8ad1a84f236558c495959b2a5" }, "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0xd316600b6009f94ab776e97f1fc985bc18b4e535" + "address": "0x01bc724595f63502a1c697304e602f9d3d813a3f" }, - "key": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103" + "key": "0x0000000000000000000000000000000000000000000000000000000000000067" }, - "0x000000000000000000000000906264790f6027c59e6c89c6d068d880b2b463ce" + "0x6e616d6500000000000000000000000000000000000000000000000000000008" ], [ { "account": { - "address": "0x0000000000000000000000000000000000008002" + "address": "0x000000000000000000000000000000000000800b" }, - "key": "0x000000000000000000000000d69f720ad3b6a7fb8bbee577455f5271c7639278" + "key": "0x000000000000000000000000000000000000000000000000000000000000010d" }, - "0x01000191368e78dd1d875771584429156157404b35e3ae3b618e0995ff276974" + "0x0000000000000000000000000000000100000000000000000000000000000001" ], [ { "account": { - "address": "0x1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85" + "address": "0x0000000000000000000000000000000000008006" }, - "key": "0x00000000000000000000000000000000000000000000000000000000000000ce" + "key": "0x42086d2064a4d498dcaaf1b11d96906e618bf5cf523c0b49a2190a37c4561d97" }, - "0x000000000000000000000000abacabac00000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000000" ], [ { "account": { - "address": "0x000000000000000000000000000000000000800b" + "address": "0x0000000000000000000000000000000000008004" }, - "key": "0x0000000000000000000000000000000000000000000000000000000000000001" + "key": "0x010004b142d5a05f388a0a2ea197a87af126fb8c7cc31bc903bbc821f5beade3" }, - "0x0000000000000000000000000000000000000000000000000000000000008007" + "0x0000000000000000000000000000000000000000000000000000000000000001" ] ] \ No newline at end of file diff --git a/core/lib/multivm/src/versions/vm_fast/tests/precompiles.rs b/core/lib/multivm/src/versions/vm_fast/tests/precompiles.rs index 80d73f38c9dc..c2dbc77fefcb 100644 --- a/core/lib/multivm/src/versions/vm_fast/tests/precompiles.rs +++ b/core/lib/multivm/src/versions/vm_fast/tests/precompiles.rs @@ -55,7 +55,7 @@ fn caching_ecrecover_result() { // Cycle stats should still be produced for the cached call let ecrecover_count = exec_result.statistics.circuit_statistic.ecrecover - * ProtocolGeometry::V1_5_0 + * ProtocolGeometry::latest() .config() .cycles_per_ecrecover_circuit as f32; assert!((ecrecover_count - 1.0).abs() < 1e-4, "{ecrecover_count}"); diff --git a/core/lib/multivm/src/versions/vm_fast/tracers/circuits.rs b/core/lib/multivm/src/versions/vm_fast/tracers/circuits.rs index 420d6c0e1b7e..05d834a55a4b 100644 --- a/core/lib/multivm/src/versions/vm_fast/tracers/circuits.rs +++ b/core/lib/multivm/src/versions/vm_fast/tracers/circuits.rs @@ -165,4 +165,4 @@ impl CircuitsTracer { } } -const GEOMETRY_CONFIG: GeometryConfig = ProtocolGeometry::V1_5_0.config(); +const GEOMETRY_CONFIG: GeometryConfig = ProtocolGeometry::latest().config(); diff --git a/core/lib/multivm/src/versions/vm_fast/version.rs b/core/lib/multivm/src/versions/vm_fast/version.rs index 8da180d8ba59..451f18d11d5b 100644 --- a/core/lib/multivm/src/versions/vm_fast/version.rs +++ b/core/lib/multivm/src/versions/vm_fast/version.rs @@ -21,7 +21,8 @@ impl TryFrom for FastVmVersion { fn try_from(value: VmVersion) -> Result { match value { VmVersion::Vm1_5_0IncreasedBootloaderMemory => Ok(Self::IncreasedBootloaderMemory), - VmVersion::VmGateway => Ok(Self::Gateway), + // FIXME: implement differentiated memory model in fast VM + VmVersion::VmGateway | VmVersion::VmEvmEmulator => Ok(Self::Gateway), _ => Err(()), } } diff --git a/core/lib/multivm/src/versions/vm_latest/bootloader/utils.rs b/core/lib/multivm/src/versions/vm_latest/bootloader/utils.rs index e309c6c45acb..e2ee239e3a7f 100644 --- a/core/lib/multivm/src/versions/vm_latest/bootloader/utils.rs +++ b/core/lib/multivm/src/versions/vm_latest/bootloader/utils.rs @@ -179,7 +179,7 @@ pub(crate) fn apply_pubdata_to_memory( (l1_messenger_pubdata_start_slot, pubdata) } - MultiVmSubversion::Gateway => { + MultiVmSubversion::Gateway | MultiVmSubversion::EvmEmulator => { // Skipping the first slot as it will be filled by the bootloader itself: // It is for the selector of the call to the L1Messenger. let l1_messenger_pubdata_start_slot = diff --git a/core/lib/multivm/src/versions/vm_latest/constants.rs b/core/lib/multivm/src/versions/vm_latest/constants.rs index f454ced06227..d3e5c14eb2c4 100644 --- a/core/lib/multivm/src/versions/vm_latest/constants.rs +++ b/core/lib/multivm/src/versions/vm_latest/constants.rs @@ -23,8 +23,9 @@ pub(crate) const MAX_BASE_LAYER_CIRCUITS: usize = 34100; pub(crate) const fn get_used_bootloader_memory_bytes(subversion: MultiVmSubversion) -> usize { match subversion { MultiVmSubversion::SmallBootloaderMemory => 59_000_000, - MultiVmSubversion::IncreasedBootloaderMemory => 63_800_000, - MultiVmSubversion::Gateway => 63_800_000, + MultiVmSubversion::IncreasedBootloaderMemory + | MultiVmSubversion::Gateway + | MultiVmSubversion::EvmEmulator => 63_800_000, } } @@ -65,7 +66,7 @@ pub(crate) const fn get_max_new_factory_deps(subversion: MultiVmSubversion) -> u 32 } // With gateway upgrade we increased max number of factory dependencies - MultiVmSubversion::Gateway => 64, + MultiVmSubversion::Gateway | MultiVmSubversion::EvmEmulator => 64, } } diff --git a/core/lib/multivm/src/versions/vm_latest/tracers/circuits_capacity.rs b/core/lib/multivm/src/versions/vm_latest/tracers/circuits_capacity.rs index 2d31a69393bb..0338ef71f43e 100644 --- a/core/lib/multivm/src/versions/vm_latest/tracers/circuits_capacity.rs +++ b/core/lib/multivm/src/versions/vm_latest/tracers/circuits_capacity.rs @@ -52,7 +52,7 @@ pub(crate) const PRECOMPILE_LOG_DEMUXER_CYCLES: u32 = 1; pub(crate) const LOG_DECOMMIT_RAM_CYCLES: u32 = 1; pub(crate) const LOG_DECOMMIT_DECOMMITTER_SORTER_CYCLES: u32 = 1; -const GEOMETRY_CONFIG: GeometryConfig = ProtocolGeometry::V1_5_0.config(); +const GEOMETRY_CONFIG: GeometryConfig = ProtocolGeometry::latest().config(); pub(crate) fn circuit_statistic_from_cycles(cycles: CircuitCycleStatistic) -> CircuitStatistic { CircuitStatistic { diff --git a/core/lib/multivm/src/versions/vm_latest/types/vm_state.rs b/core/lib/multivm/src/versions/vm_latest/types/vm_state.rs index 55b504a85f7c..a285e1f49ed8 100644 --- a/core/lib/multivm/src/versions/vm_latest/types/vm_state.rs +++ b/core/lib/multivm/src/versions/vm_latest/types/vm_state.rs @@ -2,7 +2,7 @@ use circuit_sequencer_api::INITIAL_MONOTONIC_CYCLE_COUNTER; use zk_evm_1_5_0::{ aux_structures::{MemoryPage, PubdataCost, Timestamp}, block_properties::BlockProperties, - vm_state::{CallStackEntry, PrimitiveValue, VmState}, + vm_state::{CallStackEntry, PrimitiveValue, Version, VmState}, witness_trace::DummyTracer, zkevm_opcode_defs::{ system_params::{BOOTLOADER_MAX_MEMORY, INITIAL_FRAME_FORMAL_EH_LOCATION}, @@ -32,6 +32,7 @@ use crate::{ }, oracles::storage::StorageOracle, utils::l2_blocks::{assert_next_block, load_last_l2_block}, + MultiVmSubversion, }, }; @@ -63,6 +64,7 @@ pub(crate) fn new_vm_state( storage: StoragePtr, system_env: &SystemEnv, l1_batch_env: &L1BatchEnv, + subversion: MultiVmSubversion, ) -> (ZkSyncVmState, BootloaderState) { let last_l2_block = if let Some(last_l2_block) = load_last_l2_block(&storage) { last_l2_block @@ -130,9 +132,14 @@ pub(crate) fn new_vm_state( default_aa_code_hash: h256_to_u256( system_env.base_system_smart_contracts.default_aa.hash, ), - evm_simulator_code_hash: h256_to_u256(evm_emulator_code_hash), + evm_emulator_code_hash: h256_to_u256(evm_emulator_code_hash), zkporter_is_available: system_env.zk_porter_available, }, + if subversion < MultiVmSubversion::EvmEmulator { + Version::Initial + } else { + Version::Version27 + }, ); vm.local_state.callstack.current.ergs_remaining = system_env.bootloader_gas_limit; diff --git a/core/lib/multivm/src/versions/vm_latest/utils/v26_upgrade.rs b/core/lib/multivm/src/versions/vm_latest/utils/v26_upgrade.rs index 662e10436753..6ac699047a2f 100644 --- a/core/lib/multivm/src/versions/vm_latest/utils/v26_upgrade.rs +++ b/core/lib/multivm/src/versions/vm_latest/utils/v26_upgrade.rs @@ -22,7 +22,7 @@ pub fn get_test_data() -> V26TestData { l1_chain_id: 1.into(), l1_shared_bridge_address: "abacabac00000000000000000000000000000001".parse().unwrap(), l1_token_address: "abacabac00000000000000000000000000000002".parse().unwrap(), - l2_token_address: "1b5bf1cfb09fca6a08a0585f7a2c73d59e7a9b85".parse().unwrap(), + l2_token_address: "01bc724595f63502a1c697304e602f9d3d813a3f".parse().unwrap(), l2_legacy_shared_bridge_address: "d316600b6009f94ab776e97f1fc985bc18b4e535" .parse() .unwrap(), diff --git a/core/lib/multivm/src/versions/vm_latest/vm.rs b/core/lib/multivm/src/versions/vm_latest/vm.rs index 9eb342a6c8d6..47b7a4d7c07b 100644 --- a/core/lib/multivm/src/versions/vm_latest/vm.rs +++ b/core/lib/multivm/src/versions/vm_latest/vm.rs @@ -34,7 +34,7 @@ use crate::{ /// In the first version of the v1.5.0 release, the bootloader memory was too small, so a new /// version was released with increased bootloader memory. The version with the small bootloader memory /// is available only on internal staging environments. -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)] pub(crate) enum MultiVmSubversion { /// The initial version of v1.5.0, available only on staging environments. SmallBootloaderMemory, @@ -42,24 +42,28 @@ pub(crate) enum MultiVmSubversion { IncreasedBootloaderMemory, /// VM for post-gateway versions. Gateway, + EvmEmulator, } impl MultiVmSubversion { #[cfg(test)] pub(crate) fn latest() -> Self { - Self::Gateway + Self::EvmEmulator } } #[derive(Debug)] pub(crate) struct VmVersionIsNotVm150Error; + impl TryFrom for MultiVmSubversion { type Error = VmVersionIsNotVm150Error; + fn try_from(value: VmVersion) -> Result { match value { VmVersion::Vm1_5_0SmallBootloaderMemory => Ok(Self::SmallBootloaderMemory), VmVersion::Vm1_5_0IncreasedBootloaderMemory => Ok(Self::IncreasedBootloaderMemory), VmVersion::VmGateway => Ok(Self::Gateway), + VmVersion::VmEvmEmulator => Ok(Self::EvmEmulator), _ => Err(VmVersionIsNotVm150Error), } } @@ -249,7 +253,8 @@ impl Vm { storage: StoragePtr, subversion: MultiVmSubversion, ) -> Self { - let (state, bootloader_state) = new_vm_state(storage.clone(), &system_env, &batch_env); + let (state, bootloader_state) = + new_vm_state(storage.clone(), &system_env, &batch_env, subversion); Self { bootloader_state, state, diff --git a/core/lib/multivm/src/vm_instance.rs b/core/lib/multivm/src/vm_instance.rs index 650e1f70fb0a..2c056d002967 100644 --- a/core/lib/multivm/src/vm_instance.rs +++ b/core/lib/multivm/src/vm_instance.rs @@ -216,6 +216,15 @@ impl LegacyVmInstance { ); Self::Vm1_5_0(vm) } + VmVersion::VmEvmEmulator => { + let vm = vm_latest::Vm::new_with_subversion( + l1_batch_env, + system_env, + storage_view, + vm_latest::MultiVmSubversion::EvmEmulator, + ); + Self::Vm1_5_0(vm) + } } } diff --git a/core/lib/prover_interface/Cargo.toml b/core/lib/prover_interface/Cargo.toml index cb0ba18ef10c..2ad91df5a132 100644 --- a/core/lib/prover_interface/Cargo.toml +++ b/core/lib/prover_interface/Cargo.toml @@ -19,10 +19,8 @@ zksync_types.workspace = true circuit_definitions.workspace = true fflonk.workspace = true bellman.workspace = true -circuit_sequencer_api.workspace = true serde.workspace = true -strum = { workspace = true, features = ["derive"] } serde_with = { workspace = true, features = ["base64", "hex"] } [dev-dependencies] diff --git a/core/lib/test_contracts/contracts/mock-evm/mock-evm.sol b/core/lib/test_contracts/contracts/mock-evm/mock-evm.sol index 61cd483a5f7d..6ca4471b416a 100644 --- a/core/lib/test_contracts/contracts/mock-evm/mock-evm.sol +++ b/core/lib/test_contracts/contracts/mock-evm/mock-evm.sol @@ -70,6 +70,7 @@ contract MockContractDeployer { IAccountCodeStorage constant ACCOUNT_CODE_STORAGE_CONTRACT = IAccountCodeStorage(address(0x8002)); MockKnownCodeStorage constant KNOWN_CODE_STORAGE_CONTRACT = MockKnownCodeStorage(address(0x8004)); + IEvmHashesStorage constant EVM_HASHES_STORAGE_CONTRACT = IEvmHashesStorage(address(0x8015)); /// The returned value is obviously incorrect in the general case, but works well enough when called by the bootloader. function extendedAccountVersion(address _address) public view returns (AccountAbstractionVersion) { @@ -88,6 +89,9 @@ contract MockContractDeployer { KNOWN_CODE_STORAGE_CONTRACT.publishEVMBytecode(_input.length, _input); address newAddress = address(uint160(msg.sender) + 1); ACCOUNT_CODE_STORAGE_CONTRACT.storeAccountConstructedCodeHash(newAddress, _salt); + + bytes32 evmBytecodeHash = keccak256(_input); + EVM_HASHES_STORAGE_CONTRACT.storeEvmCodeHash(_salt, evmBytecodeHash); return newAddress; } @@ -108,6 +112,7 @@ contract MockContractDeployer { ); newAddress = address(uint160(uint256(hash))); ACCOUNT_CODE_STORAGE_CONTRACT.storeAccountConstructedCodeHash(newAddress, _bytecodeHash); + EVM_HASHES_STORAGE_CONTRACT.storeEvmCodeHash(_bytecodeHash, _bytecodeHash); } } @@ -116,6 +121,10 @@ interface IAccountCodeStorage { function storeAccountConstructedCodeHash(address _address, bytes32 _hash) external; } +interface IEvmHashesStorage { + function storeEvmCodeHash(bytes32 versionedBytecodeHash, bytes32 evmBytecodeHash) external; +} + interface IRecursiveContract { function recurse(uint _depth) external returns (uint); } @@ -178,8 +187,6 @@ contract IncrementingContract { } } -uint constant EVM_EMULATOR_STIPEND = 1 << 30; - /** * Mock EVM emulator used in low-level tests. */ @@ -191,8 +198,7 @@ contract MockEvmEmulator is IRecursiveContract, IRecursiveDeployment, Incrementi modifier validEvmEntry() { if (!isUserSpace) { - require(gasleft() >= EVM_EMULATOR_STIPEND, "no stipend"); - // Fetch bytecode for the executed contract. + // Fetch versioned bytecode hash for the executed contract. Note that it's **not** equal to the `codehash` obtained below. bytes32 bytecodeHash = ACCOUNT_CODE_STORAGE_CONTRACT.getRawCodeHash(address(this)); require(bytecodeHash != bytes32(0), "called contract not deployed"); uint bytecodeVersion = uint(bytecodeHash) >> 248; @@ -200,7 +206,9 @@ contract MockEvmEmulator is IRecursiveContract, IRecursiveDeployment, Incrementi // Check that members of the current address are well-defined. require(address(this).code.length != 0, "invalid code"); - require(address(this).codehash == bytecodeHash, "bytecode hash mismatch"); + bytes32 codeHash = address(this).codehash; + require(codeHash != bytes32(0), "zero bytecode hash"); + require(codeHash != bytecodeHash, "bytecode hash match"); } _; } @@ -213,15 +221,11 @@ contract MockEvmEmulator is IRecursiveContract, IRecursiveDeployment, Incrementi IRecursiveContract recursionTarget; function recurse(uint _depth) public validEvmEntry returns (uint) { - require(gasleft() < 2 * EVM_EMULATOR_STIPEND, "stipend provided multiple times"); - if (_depth <= 1) { return 1; } else { IRecursiveContract target = (address(recursionTarget) == address(0)) ? this : recursionTarget; - // The real emulator limits amount of gas when performing far calls by EVM gas, so we emulate this behavior as well. - uint gasToSend = isUserSpace ? gasleft() : (gasleft() - EVM_EMULATOR_STIPEND); - return target.recurse{gas: gasToSend}(_depth - 1) * _depth; + return target.recurse(_depth - 1) * _depth; } } @@ -253,8 +257,7 @@ contract MockEvmEmulator is IRecursiveContract, IRecursiveDeployment, Incrementi require(address(newContract).code.length > 0, "contract code length"); require(address(newContract).codehash != bytes32(0), "contract code hash"); - uint gasToSend = gasleft() - EVM_EMULATOR_STIPEND; - require(newContract.recurse{gas: gasToSend}(5) == 120, "unexpected recursive result"); + require(newContract.recurse(5) == 120, "unexpected recursive result"); require(!_revert, "requested revert"); } @@ -263,8 +266,7 @@ contract MockEvmEmulator is IRecursiveContract, IRecursiveDeployment, Incrementi require(address(newContract).code.length > 0, "contract code length"); require(address(newContract).codehash != bytes32(0), "contract code hash"); - uint gasToSend = gasleft() - EVM_EMULATOR_STIPEND; - require(newContract.recurse{gas: gasToSend}(5) == 120, "unexpected recursive result"); + require(newContract.recurse(5) == 120, "unexpected recursive result"); } function testRecursiveDeployment(EvmDeployment[] calldata _deployments) external override validEvmEntry { @@ -277,8 +279,7 @@ contract MockEvmEmulator is IRecursiveContract, IRecursiveDeployment, Incrementi _deployments[0].bytecodeHash, bytes.concat(_deployments[0].bytecode) )); - uint gasToSend = gasleft() - EVM_EMULATOR_STIPEND; - newContract.testRecursiveDeployment{gas: gasToSend}(_deployments[1:]); + newContract.testRecursiveDeployment(_deployments[1:]); } function testDeploymentWithPartialRevert( @@ -288,8 +289,7 @@ contract MockEvmEmulator is IRecursiveContract, IRecursiveDeployment, Incrementi require(_deployments.length == _shouldRevert.length, "length mismatch"); for (uint i = 0; i < _deployments.length; i++) { - uint gasToSend = gasleft() - EVM_EMULATOR_STIPEND; - try this.deployThenRevert{gas: gasToSend}( + try this.deployThenRevert( _deployments[i], bytes32(i), _shouldRevert[i] @@ -333,7 +333,6 @@ contract NativeRecursiveContract is IRecursiveContract { } function recurse(uint _depth) external returns (uint) { - require(gasleft() < EVM_EMULATOR_STIPEND, "stipend spilled to native contract"); return (_depth <= 1) ? 1 : target.recurse(_depth - 1) * _depth; } } diff --git a/core/lib/types/src/abi.rs b/core/lib/types/src/abi.rs index da51c6297d4d..3b5d6ce9526f 100644 --- a/core/lib/types/src/abi.rs +++ b/core/lib/types/src/abi.rs @@ -1,5 +1,5 @@ use anyhow::Context as _; -use zksync_basic_types::protocol_version::ProtocolSemanticVersion; +use zksync_basic_types::protocol_version::{ProtocolSemanticVersion, ProtocolVersionId}; use crate::{ bytecode::BytecodeHash, @@ -193,6 +193,86 @@ pub struct VerifierParams { pub recursion_circuits_set_vks_hash: [u8; 32], } +#[derive(Debug, Clone, Copy)] +enum ProposedUpgradeSchema { + PreGateway, + PostGateway, + PostEvmEmulator, +} + +impl ProposedUpgradeSchema { + fn tuple_type(self) -> ParamType { + match self { + Self::PreGateway => ParamType::Tuple(vec![ + L2CanonicalTransaction::schema(), // transaction data + ParamType::Array(ParamType::Bytes.into()), // factory deps + ParamType::FixedBytes(32), // bootloader code hash + ParamType::FixedBytes(32), // default account code hash + ParamType::Address, // verifier address + VerifierParams::schema(), // verifier params + ParamType::Bytes, // l1 custom data + ParamType::Bytes, // l1 post-upgrade custom data + ParamType::Uint(256), // timestamp + ParamType::Uint(256), // version id + ]), + Self::PostGateway => ParamType::Tuple(vec![ + L2CanonicalTransaction::schema(), // transaction data + ParamType::FixedBytes(32), // bootloader code hash + ParamType::FixedBytes(32), // default account code hash + ParamType::Address, // verifier address + VerifierParams::schema(), // verifier params + ParamType::Bytes, // l1 custom data + ParamType::Bytes, // l1 post-upgrade custom data + ParamType::Uint(256), // timestamp + ParamType::Uint(256), // version id + ]), + Self::PostEvmEmulator => ParamType::Tuple(vec![ + L2CanonicalTransaction::schema(), // transaction data + ParamType::FixedBytes(32), // bootloader code hash + ParamType::FixedBytes(32), // default account code hash + ParamType::FixedBytes(32), // EVM emulator code hash + ParamType::Address, // verifier address + VerifierParams::schema(), // verifier params + ParamType::Bytes, // l1 custom data + ParamType::Bytes, // l1 post-upgrade custom data + ParamType::Uint(256), // timestamp + ParamType::Uint(256), // version id + ]), + } + } + + fn expected_tuple_len(self) -> usize { + match self { + Self::PreGateway | Self::PostEvmEmulator => 10, + Self::PostGateway => 9, + } + } + + fn decode_to_token(data: &[u8]) -> Vec<(Self, Token)> { + let mut output = vec![]; + for schema in [Self::PreGateway, Self::PostGateway, Self::PostEvmEmulator] { + match ethabi::decode(&[schema.tuple_type()], data) { + Ok(tokens) => { + output.push((schema, tokens.into_iter().next().unwrap())); + } + Err(err) => tracing::debug!(?schema, %err, "Error decoding proposed upgrade bytes"), + } + } + output + } + + fn matches_protocol_version(self, protocol_version: ProtocolVersionId) -> bool { + match self { + Self::PreGateway => protocol_version.is_pre_gateway(), + // EVM emulator shares a protocol version upgrade with FFLONK + Self::PostGateway => { + protocol_version.is_post_gateway() && protocol_version.is_pre_fflonk() + } + Self::PostEvmEmulator => protocol_version.is_post_fflonk(), + } + } +} + /// `ProposedUpgrade` from, `l1-contracts/contracts/upgrades/BazeZkSyncUpgrade.sol`. #[derive(Debug)] pub struct ProposedUpgrade { @@ -201,6 +281,7 @@ pub struct ProposedUpgrade { pub factory_deps: Option>>, pub bootloader_hash: [u8; 32], pub default_account_hash: [u8; 32], + pub evm_emulator_hash: [u8; 32], pub verifier: Address, pub verifier_params: VerifierParams, pub l1_contracts_upgrade_calldata: Vec, @@ -253,38 +334,7 @@ impl VerifierParams { } impl ProposedUpgrade { - /// Pre-gateway RLP schema of the `ProposedUpgrade`. - pub fn schema_pre_gateway() -> ParamType { - ParamType::Tuple(vec![ - L2CanonicalTransaction::schema(), // transaction data - ParamType::Array(ParamType::Bytes.into()), // factory deps - ParamType::FixedBytes(32), // bootloader code hash - ParamType::FixedBytes(32), // default account code hash - ParamType::Address, // verifier address - VerifierParams::schema(), // verifier params - ParamType::Bytes, // l1 custom data - ParamType::Bytes, // l1 post-upgrade custom data - ParamType::Uint(256), // timestamp - ParamType::Uint(256), // version id - ]) - } - - /// Post-gateway RLP schema of the `ProposedUpgrade`. - pub fn schema_post_gateway() -> ParamType { - ParamType::Tuple(vec![ - L2CanonicalTransaction::schema(), // transaction data - ParamType::FixedBytes(32), // bootloader code hash - ParamType::FixedBytes(32), // default account code hash - ParamType::Address, // verifier address - VerifierParams::schema(), // verifier params - ParamType::Bytes, // l1 custom data - ParamType::Bytes, // l1 post-upgrade custom data - ParamType::Uint(256), // timestamp - ParamType::Uint(256), // version id - ]) - } - - /// Encodes `ProposedUpgrade` to a RLP token. + /// Encodes `ProposedUpgrade` to a RLP token. Uses the latest schema. pub fn encode(&self) -> Token { let mut tokens = vec![self.l2_protocol_upgrade_tx.encode()]; @@ -304,6 +354,7 @@ impl ProposedUpgrade { tokens.extend([ Token::FixedBytes(self.bootloader_hash.into()), Token::FixedBytes(self.default_account_hash.into()), + Token::FixedBytes(self.evm_emulator_hash.into()), Token::Address(self.verifier), self.verifier_params.encode(), Token::Bytes(self.l1_contracts_upgrade_calldata.clone()), @@ -315,12 +366,29 @@ impl ProposedUpgrade { Token::Tuple(tokens) } - /// Decodes `ProposedUpgrade` from a RLP token. - /// Returns an error if token doesn't match the `schema()`. - pub fn decode(token: Token) -> anyhow::Result { + pub(crate) fn decode(data: &[u8]) -> anyhow::Result { + let mut upgrade = None; + for (schema, token) in ProposedUpgradeSchema::decode_to_token(data) { + match Self::decode_from_token(schema, token) { + Ok(decoded) => { + if let Some(upgrade) = &upgrade { + anyhow::bail!("Ambiguous upgrade: can be decoded as either {decoded:?} or {upgrade:?}"); + } + upgrade = Some(decoded); + } + Err(err) => { + tracing::debug!(?schema, %err, "Error decoding proposed upgrade"); + } + } + } + upgrade.context("upgrade cannot be decoded") + } + + /// Decodes `ProposedUpgrade` from a RLP token. Returns an error if token doesn't match the `schema`. + fn decode_from_token(schema: ProposedUpgradeSchema, token: Token) -> anyhow::Result { let tokens = token.into_tuple().context("not a tuple")?; let tokens_len = tokens.len(); - anyhow::ensure!(tokens_len >= 9); + anyhow::ensure!(tokens_len == schema.expected_tuple_len()); let mut t = tokens.into_iter(); let mut next = || t.next().unwrap(); @@ -328,30 +396,29 @@ impl ProposedUpgrade { .context("l2_protocol_upgrade_tx")? .into(); let next_token = next(); - let (factory_deps, bootloader_hash) = match next_token { - Token::Array(tokens) => { - anyhow::ensure!(tokens_len == 10); - ( - Some( - tokens - .into_iter() - .enumerate() - .map(|(i, b)| b.into_bytes().context(i)) - .collect::>() - .context("factory_deps")?, - ), - next().into_fixed_bytes(), - ) + let (factory_deps, bootloader_hash) = match schema { + ProposedUpgradeSchema::PreGateway => { + let factory_deps = next_token + .into_array() + .context("expected factory deps array")? + .into_iter(); + let factory_deps = factory_deps + .enumerate() + .map(|(i, b)| b.into_bytes().context(i)) + .collect::>() + .context("factory_deps")?; + (Some(factory_deps), next().into_fixed_bytes()) } - Token::FixedBytes(bytes) => { - anyhow::ensure!(tokens_len == 9); - (None, Some(bytes)) + ProposedUpgradeSchema::PostGateway | ProposedUpgradeSchema::PostEvmEmulator => { + let bootloader_hash = next_token.into_fixed_bytes().context("bootloader_hash")?; + (None, Some(bootloader_hash)) } - _ => anyhow::bail!("Unexpected type of the second token"), }; + let bootloader_hash = bootloader_hash .and_then(|b| b.try_into().ok()) .context("bootloader_hash")?; + let upgrade = Self { l2_protocol_upgrade_tx, factory_deps, @@ -360,6 +427,14 @@ impl ProposedUpgrade { .into_fixed_bytes() .and_then(|b| b.try_into().ok()) .context("default_account_hash")?, + evm_emulator_hash: if matches!(schema, ProposedUpgradeSchema::PostEvmEmulator) { + next() + .into_fixed_bytes() + .and_then(|b| b.try_into().ok()) + .context("evm_emulator_hash")? + } else { + [0_u8; 32] + }, verifier: next().into_address().context("verifier")?, verifier_params: VerifierParams::decode(next()).context("verifier_params")?, l1_contracts_upgrade_calldata: next() @@ -375,7 +450,10 @@ impl ProposedUpgrade { .map_err(|err| anyhow::anyhow!(err)) .context("Version is not supported")? .minor; - anyhow::ensure!(protocol_version.is_pre_gateway() == upgrade.factory_deps.is_some()); + anyhow::ensure!( + schema.matches_protocol_version(protocol_version), + "Unexpected protocol version: {protocol_version:?} for upgrade schema: {schema:?}" + ); Ok(upgrade) } diff --git a/core/lib/types/src/protocol_upgrade.rs b/core/lib/types/src/protocol_upgrade.rs index 324650c97e21..7e1510cd7ad0 100644 --- a/core/lib/types/src/protocol_upgrade.rs +++ b/core/lib/types/src/protocol_upgrade.rs @@ -8,11 +8,8 @@ use zksync_basic_types::protocol_version::{ use zksync_contracts::{BaseSystemContractsHashes, DIAMOND_CUT}; use crate::{ - abi::{ - self, ForceDeployment, GatewayUpgradeEncodedInput, ProposedUpgrade, - ZkChainSpecificUpgradeData, - }, - ethabi::{self, decode, encode, ParamType, Token}, + abi::{self, ForceDeployment, GatewayUpgradeEncodedInput, ZkChainSpecificUpgradeData}, + ethabi::{self, ParamType, Token}, h256_to_u256, u256_to_h256, web3::Log, Address, Execute, ExecuteTransactionCommon, Transaction, TransactionType, H256, U256, @@ -105,7 +102,7 @@ pub trait ProtocolUpgradePreimageOracle: Send + Sync { /// Some upgrades have chain-dependent calldata that has to be prepared properly. async fn prepare_upgrade_call( - proposed_upgrade: &ProposedUpgrade, + proposed_upgrade: &abi::ProposedUpgrade, chain_specific: Option, ) -> anyhow::Result> { // No upgrade @@ -125,14 +122,14 @@ async fn prepare_upgrade_call( // The source of truth for the code below is the one that is present in // `GatewayUpgrade.sol`. let mut encoded_input = GatewayUpgradeEncodedInput::decode( - decode( + ethabi::decode( &[GatewayUpgradeEncodedInput::schema()], &proposed_upgrade.post_upgrade_calldata, )?[0] .clone(), )?; - let gateway_upgrade_calldata = encode(&[ + let gateway_upgrade_calldata = ethabi::encode(&[ Token::Address(encoded_input.ctm_deployer), Token::Bytes(encoded_input.fixed_force_deployments_data), Token::Bytes(chain_specific.context("chain_specific")?.encode_bytes()), @@ -183,24 +180,13 @@ impl ProtocolUpgrade { preimage_oracle: impl ProtocolUpgradePreimageOracle, chain_specific: Option, ) -> anyhow::Result { - let upgrade = if let Ok(upgrade) = ethabi::decode( - &[abi::ProposedUpgrade::schema_pre_gateway()], - init_calldata.get(4..).context("need >= 4 bytes")?, - ) { - upgrade - } else { - ethabi::decode( - &[abi::ProposedUpgrade::schema_post_gateway()], - init_calldata.get(4..).context("need >= 4 bytes")?, - ) - .context("ethabi::decode()")? - }; - - let mut upgrade = abi::ProposedUpgrade::decode(upgrade.into_iter().next().unwrap()) - .context("ProposedUpgrade::decode()")?; + let raw_data = init_calldata.get(4..).context("need >= 4 bytes")?; + let mut upgrade = + abi::ProposedUpgrade::decode(raw_data).context("ProposedUpgrade::decode()")?; - let bootloader_hash = H256::from_slice(&upgrade.bootloader_hash); - let default_account_hash = H256::from_slice(&upgrade.default_account_hash); + let bootloader_hash = H256(upgrade.bootloader_hash); + let default_account_hash = H256(upgrade.default_account_hash); + let evm_emulator_hash = H256(upgrade.evm_emulator_hash); let version = ProtocolSemanticVersion::try_from_packed(upgrade.new_protocol_version) .map_err(|err| anyhow::format_err!("Version is not supported: {err}"))?; @@ -245,7 +231,8 @@ impl ProtocolUpgrade { bootloader_code_hash: (bootloader_hash != H256::zero()).then_some(bootloader_hash), default_account_code_hash: (default_account_hash != H256::zero()) .then_some(default_account_hash), - evm_emulator_code_hash: None, // EVM emulator upgrades are not supported yet + evm_emulator_code_hash: (evm_emulator_hash != H256::zero()) + .then_some(evm_emulator_hash), verifier_params: (upgrade.verifier_params != abi::VerifierParams::default()) .then_some(upgrade.verifier_params.into()), verifier_address: (upgrade.verifier != Address::zero()).then_some(upgrade.verifier), diff --git a/core/lib/types/src/storage/mod.rs b/core/lib/types/src/storage/mod.rs index a5f812376e48..9f473927b20a 100644 --- a/core/lib/types/src/storage/mod.rs +++ b/core/lib/types/src/storage/mod.rs @@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize}; use zksync_basic_types::{web3::keccak256_concat, L2ChainId}; pub use zksync_system_constants::*; -use crate::{address_to_h256, u256_to_h256, AccountTreeId, Address, H160, H256, U256}; +use crate::{address_to_h256, AccountTreeId, Address, H160, H256, U256}; pub mod log; pub mod witness_block_state; @@ -75,8 +75,12 @@ pub fn get_code_key(account: &Address) -> StorageKey { StorageKey::new(account_code_storage, address_to_h256(account)) } -pub fn get_evm_code_hash_key(account: &Address) -> StorageKey { - get_deployer_key(get_address_mapping_key(account, u256_to_h256(1.into()))) +/// Gets a slot holding EVM-compatible bytecode hash (i.e., `keccak256` of the non-padded EVM bytecode). +pub fn get_evm_code_hash_key(versioned_bytecode_hash: H256) -> StorageKey { + StorageKey::new( + AccountTreeId::new(EVM_HASHES_STORAGE_ADDRESS), + versioned_bytecode_hash, + ) } pub fn get_known_code_key(hash: &H256) -> StorageKey { diff --git a/core/lib/types/src/system_contracts.rs b/core/lib/types/src/system_contracts.rs index 9e32bf172da4..bf02aa4acb91 100644 --- a/core/lib/types/src/system_contracts.rs +++ b/core/lib/types/src/system_contracts.rs @@ -4,9 +4,10 @@ use zksync_basic_types::{AccountTreeId, Address, U256}; use zksync_contracts::{read_sys_contract_bytecode, ContractLanguage, SystemContractsRepo}; use zksync_system_constants::{ BOOTLOADER_UTILITIES_ADDRESS, CODE_ORACLE_ADDRESS, COMPRESSOR_ADDRESS, CREATE2_FACTORY_ADDRESS, - EVENT_WRITER_ADDRESS, EVM_GAS_MANAGER_ADDRESS, L2_ASSET_ROUTER_ADDRESS, L2_BRIDGEHUB_ADDRESS, - L2_GENESIS_UPGRADE_ADDRESS, L2_MESSAGE_ROOT_ADDRESS, L2_NATIVE_TOKEN_VAULT_ADDRESS, - L2_WRAPPED_BASE_TOKEN_IMPL, PUBDATA_CHUNK_PUBLISHER_ADDRESS, + EVENT_WRITER_ADDRESS, EVM_GAS_MANAGER_ADDRESS, EVM_HASHES_STORAGE_ADDRESS, + EVM_PREDEPLOYS_MANAGER_ADDRESS, IDENTITY_ADDRESS, L2_ASSET_ROUTER_ADDRESS, + L2_BRIDGEHUB_ADDRESS, L2_GENESIS_UPGRADE_ADDRESS, L2_MESSAGE_ROOT_ADDRESS, + L2_NATIVE_TOKEN_VAULT_ADDRESS, L2_WRAPPED_BASE_TOKEN_IMPL, PUBDATA_CHUNK_PUBLISHER_ADDRESS, SECP256R1_VERIFY_PRECOMPILE_ADDRESS, SLOAD_CONTRACT_ADDRESS, }; @@ -27,7 +28,7 @@ use crate::{ pub const TX_NONCE_INCREMENT: U256 = U256([1, 0, 0, 0]); // 1 pub const DEPLOYMENT_NONCE_INCREMENT: U256 = U256([0, 0, 1, 0]); // 2^128 -static SYSTEM_CONTRACT_LIST: [(&str, &str, Address, ContractLanguage); 33] = [ +static SYSTEM_CONTRACT_LIST: [(&str, &str, Address, ContractLanguage); 36] = [ ( "", "AccountCodeStorage", @@ -124,6 +125,12 @@ static SYSTEM_CONTRACT_LIST: [(&str, &str, Address, ContractLanguage); 33] = [ CODE_ORACLE_ADDRESS, ContractLanguage::Yul, ), + ( + "precompiles/", + "Identity", + IDENTITY_ADDRESS, + ContractLanguage::Yul, + ), ( "", "SystemContext", @@ -155,6 +162,18 @@ static SYSTEM_CONTRACT_LIST: [(&str, &str, Address, ContractLanguage); 33] = [ EVM_GAS_MANAGER_ADDRESS, ContractLanguage::Yul, ), + ( + "", + "EvmPredeploysManager", + EVM_PREDEPLOYS_MANAGER_ADDRESS, + ContractLanguage::Sol, + ), + ( + "", + "EvmHashesStorage", + EVM_HASHES_STORAGE_ADDRESS, + ContractLanguage::Sol, + ), // For now, only zero address and the bootloader address have empty bytecode at the init // In the future, we might want to set all of the system contracts this way. ("", "EmptyContract", Address::zero(), ContractLanguage::Sol), @@ -221,39 +240,24 @@ static SYSTEM_CONTRACT_LIST: [(&str, &str, Address, ContractLanguage); 33] = [ ]; /// Gets default set of system contracts, based on Cargo workspace location. -pub fn get_system_smart_contracts(use_evm_emulator: bool) -> Vec { +pub fn get_system_smart_contracts() -> Vec { SYSTEM_CONTRACT_LIST .iter() - .filter_map(|(path, name, address, contract_lang)| { - if *name == "EvmGasManager" && !use_evm_emulator { - None - } else { - Some(DeployedContract { - account_id: AccountTreeId::new(*address), - bytecode: read_sys_contract_bytecode(path, name, contract_lang.clone()), - }) - } + .map(|(path, name, address, contract_lang)| DeployedContract { + account_id: AccountTreeId::new(*address), + bytecode: read_sys_contract_bytecode(path, name, contract_lang.clone()), }) .collect() } /// Loads system contracts from a given directory. -pub fn get_system_smart_contracts_from_dir( - path: PathBuf, - use_evm_emulator: bool, -) -> Vec { +pub fn get_system_smart_contracts_from_dir(path: PathBuf) -> Vec { let repo = SystemContractsRepo { root: path }; SYSTEM_CONTRACT_LIST .iter() - .filter_map(|(path, name, address, contract_lang)| { - if *name == "EvmGasManager" && !use_evm_emulator { - None - } else { - Some(DeployedContract { - account_id: AccountTreeId::new(*address), - bytecode: repo.read_sys_contract_bytecode(path, name, contract_lang.clone()), - }) - } + .map(|(path, name, address, contract_lang)| DeployedContract { + account_id: AccountTreeId::new(*address), + bytecode: repo.read_sys_contract_bytecode(path, name, None, contract_lang.clone()), }) .collect::>() } diff --git a/core/lib/vm_executor/src/oneshot/block.rs b/core/lib/vm_executor/src/oneshot/block.rs index 66bdd30e40ea..d9b201b22525 100644 --- a/core/lib/vm_executor/src/oneshot/block.rs +++ b/core/lib/vm_executor/src/oneshot/block.rs @@ -10,8 +10,8 @@ use zksync_types::{ api, block::{unpack_block_info, L2BlockHasher}, fee_model::BatchFeeInput, - h256_to_u256, AccountTreeId, L1BatchNumber, L2BlockNumber, ProtocolVersionId, StorageKey, H256, - SYSTEM_CONTEXT_ADDRESS, SYSTEM_CONTEXT_CURRENT_L2_BLOCK_INFO_POSITION, + get_deployer_key, h256_to_u256, AccountTreeId, L1BatchNumber, L2BlockNumber, ProtocolVersionId, + StorageKey, H256, SYSTEM_CONTEXT_ADDRESS, SYSTEM_CONTEXT_CURRENT_L2_BLOCK_INFO_POSITION, SYSTEM_CONTEXT_CURRENT_TX_ROLLING_HASH_POSITION, ZKPORTER_IS_AVAILABLE, }; @@ -138,12 +138,9 @@ impl BlockInfo { let protocol_version = l2_block_header .protocol_version .unwrap_or(ProtocolVersionId::last_potentially_undefined()); - // We cannot use the EVM emulator mentioned in the block as is because of batch vs playground settings etc. - // Instead, we just check whether EVM emulation in general is enabled for a block, and store this binary flag for further use. - let use_evm_emulator = l2_block_header - .base_system_contracts_hashes - .evm_emulator - .is_some(); + + let use_evm_emulator = + Self::is_evm_emulation_enabled(connection, state_l2_block_number).await?; Ok(ResolvedBlockInfo { state_l2_block_number, state_l2_block_hash: l2_block_header.hash, @@ -154,6 +151,32 @@ impl BlockInfo { is_pending: self.is_pending_l2_block(), }) } + + // Whether the EVM emulation is enabled is determined by a value inside `ContractDeployer`. + async fn is_evm_emulation_enabled( + connection: &mut Connection<'_, Core>, + at_block: L2BlockNumber, + ) -> anyhow::Result { + let allowed_contract_types_hashed_key = + get_deployer_key(H256::from_low_u64_be(1)).hashed_key(); + let storage_values = connection + .storage_logs_dal() + .get_storage_values(&[allowed_contract_types_hashed_key], at_block) + .await?; + let allowed_contract_types = storage_values + .get(&allowed_contract_types_hashed_key) + .copied() + .flatten() + .unwrap_or_default(); + Ok(match allowed_contract_types { + val if val.is_zero() => false, + val if val == H256::from_low_u64_be(1) => true, + _ => { + tracing::warn!(?allowed_contract_types, %at_block, "Unknown allowed contract types in ContractDeployer storage"); + false + } + }) + } } /// Resolved [`BlockInfo`] containing additional data from VM state. diff --git a/core/lib/vm_executor/src/oneshot/contracts.rs b/core/lib/vm_executor/src/oneshot/contracts.rs index 025cc6a40cd0..6092b86889b5 100644 --- a/core/lib/vm_executor/src/oneshot/contracts.rs +++ b/core/lib/vm_executor/src/oneshot/contracts.rs @@ -71,16 +71,14 @@ pub struct MultiVmBaseSystemContracts { vm_protocol_defense: BaseSystemContracts, /// Contracts to be used after the gateway upgrade gateway: BaseSystemContracts, + /// Contracts to be used after the evm emulator upgrade + vm_evm_emulator: BaseSystemContracts, // We use `fn() -> C` marker so that the `MultiVmBaseSystemContracts` unconditionally implements `Send + Sync`. _contracts_kind: PhantomData C>, } impl MultiVmBaseSystemContracts { - fn get_by_protocol_version( - &self, - version: ProtocolVersionId, - use_evm_emulator: bool, - ) -> BaseSystemContracts { + fn get_by_protocol_version(&self, version: ProtocolVersionId) -> BaseSystemContracts { let base = match version { ProtocolVersionId::Version0 | ProtocolVersionId::Version1 @@ -107,16 +105,13 @@ impl MultiVmBaseSystemContracts { ProtocolVersionId::Version23 => &self.vm_1_5_0_small_memory, ProtocolVersionId::Version24 => &self.vm_1_5_0_increased_memory, ProtocolVersionId::Version25 => &self.vm_protocol_defense, - ProtocolVersionId::Version26 | ProtocolVersionId::Version27 => &self.gateway, - }; - let base = base.clone(); + ProtocolVersionId::Version26 => &self.gateway, + ProtocolVersionId::Version27 => &self.vm_evm_emulator, - if version.is_post_1_5_0() && use_evm_emulator { - // EVM emulator is not versioned now; the latest version is always checked out - base.with_latest_evm_emulator() - } else { - base - } + // Speculative base system contracts for the next protocol version to be used in the upgrade integration test etc. + ProtocolVersionId::Version28 => &self.vm_evm_emulator, + }; + base.clone() } } @@ -137,6 +132,7 @@ impl MultiVmBaseSystemContracts { BaseSystemContracts::estimate_gas_post_1_5_0_increased_memory(), vm_protocol_defense: BaseSystemContracts::estimate_gas_post_protocol_defense(), gateway: BaseSystemContracts::estimate_gas_gateway(), + vm_evm_emulator: BaseSystemContracts::estimate_gas_evm_emulator(), _contracts_kind: PhantomData, } } @@ -159,6 +155,7 @@ impl MultiVmBaseSystemContracts { ), vm_protocol_defense: BaseSystemContracts::playground_post_protocol_defense(), gateway: BaseSystemContracts::playground_gateway(), + vm_evm_emulator: BaseSystemContracts::playground_evm_emulator(), _contracts_kind: PhantomData, } } @@ -170,7 +167,6 @@ impl BaseSystemContractsProvider for MultiVmBaseSystemContr &self, block_info: &ResolvedBlockInfo, ) -> anyhow::Result { - Ok(self - .get_by_protocol_version(block_info.protocol_version(), block_info.use_evm_emulator())) + Ok(self.get_by_protocol_version(block_info.protocol_version())) } } diff --git a/core/lib/vm_executor/src/oneshot/mock.rs b/core/lib/vm_executor/src/oneshot/mock.rs index 89eaf3c75e29..1de8572f79b7 100644 --- a/core/lib/vm_executor/src/oneshot/mock.rs +++ b/core/lib/vm_executor/src/oneshot/mock.rs @@ -36,7 +36,7 @@ impl Default for MockOneshotExecutor { panic!("Unexpected call with data {:?}", tx.execute.calldata()); }), tx_responses: Box::new(|tx, _| { - panic!("Unexpect transaction call: {tx:?}"); + panic!("Unexpected transaction call: {tx:?}"); }), tx_validation_traces_responses: Box::new(|_, _| ValidationTraces::default()), } diff --git a/core/lib/vm_executor/src/storage.rs b/core/lib/vm_executor/src/storage.rs index 96b0d60ed122..bdca207d29c5 100644 --- a/core/lib/vm_executor/src/storage.rs +++ b/core/lib/vm_executor/src/storage.rs @@ -1,6 +1,9 @@ //! Utils to get data for L1 batch execution from storage. -use std::time::{Duration, Instant}; +use std::{ + collections::HashMap, + time::{Duration, Instant}, +}; use anyhow::Context; use zksync_contracts::{BaseSystemContracts, SystemContractCode}; @@ -379,19 +382,19 @@ async fn get_base_system_contracts( protocol_version: Option, bootloader_hash: H256, default_aa_hash: H256, - evm_simulator_hash: Option, + evm_emulator_hash: Option, ) -> anyhow::Result { // There are two potential sources of base contracts bytecode: // - Factory deps table in case the upgrade transaction has been executed before. // - Factory deps of the upgrade transaction. - // Firstly trying from factory deps + // Firstly trying from factory deps in Postgres if let Some(deps) = storage .factory_deps_dal() .get_base_system_contracts_from_factory_deps( bootloader_hash, default_aa_hash, - evm_simulator_hash, + evm_emulator_hash, ) .await? { @@ -408,27 +411,33 @@ async fn get_base_system_contracts( format!("Could not find base contracts for version {protocol_version:?}: bootloader {bootloader_hash:?} or {default_aa_hash:?}") })?; - anyhow::ensure!( - upgrade_tx.execute.factory_deps.len() >= 2, - "Upgrade transaction does not have enough factory deps" - ); - - let bootloader_preimage = upgrade_tx.execute.factory_deps[0].clone(); - let default_aa_preimage = upgrade_tx.execute.factory_deps[1].clone(); - - anyhow::ensure!( - BytecodeHash::for_bytecode(&bootloader_preimage).value() == bootloader_hash, - "Bootloader hash mismatch" - ); - anyhow::ensure!( - BytecodeHash::for_bytecode(&default_aa_preimage).value() == default_aa_hash, - "Default account hash mismatch" - ); - - if evm_simulator_hash.is_some() { - // TODO(EVM-933): support EVM emulator. - panic!("EVM simulator not supported as part of gateway upgrade"); - } + let factory_deps = &upgrade_tx.execute.factory_deps; + let factory_deps_by_code_hash: HashMap<_, _> = factory_deps + .iter() + .map(|bytecode| (BytecodeHash::for_bytecode(bytecode).value(), bytecode)) + .collect(); + + let bootloader_preimage = factory_deps_by_code_hash + .get(&bootloader_hash) + .context("missing bootloader factory dep")? + .to_vec(); + let default_aa_preimage = factory_deps_by_code_hash + .get(&default_aa_hash) + .context("missing default AA factory dep")? + .to_vec(); + + let evm_emulator = if let Some(evm_emulator_hash) = evm_emulator_hash { + let evm_emulator_preimage = factory_deps_by_code_hash + .get(&evm_emulator_hash) + .context("missing EVM emulator factory dep")? + .to_vec(); + Some(SystemContractCode { + code: evm_emulator_preimage, + hash: evm_emulator_hash, + }) + } else { + None + }; Ok(BaseSystemContracts { bootloader: SystemContractCode { @@ -439,7 +448,7 @@ async fn get_base_system_contracts( code: default_aa_preimage, hash: default_aa_hash, }, - evm_emulator: None, + evm_emulator, }) } diff --git a/core/lib/vm_interface/src/storage/in_memory.rs b/core/lib/vm_interface/src/storage/in_memory.rs index f756e7a6d76f..c6e76504cc40 100644 --- a/core/lib/vm_interface/src/storage/in_memory.rs +++ b/core/lib/vm_interface/src/storage/in_memory.rs @@ -29,7 +29,7 @@ impl InMemoryStorage { /// Constructs a storage that contains system smart contracts (with a given chain id). pub fn with_system_contracts_and_chain_id(chain_id: L2ChainId) -> Self { - Self::with_custom_system_contracts_and_chain_id(chain_id, get_system_smart_contracts(false)) + Self::with_custom_system_contracts_and_chain_id(chain_id, get_system_smart_contracts()) } /// Constructs a storage that contains custom system contracts (provided in a vector). diff --git a/core/node/api_server/src/web3/tests/mod.rs b/core/node/api_server/src/web3/tests/mod.rs index 93854f99ef79..afe6c30f7b3b 100644 --- a/core/node/api_server/src/web3/tests/mod.rs +++ b/core/node/api_server/src/web3/tests/mod.rs @@ -37,7 +37,7 @@ use zksync_types::{ BytecodeHash, }, fee_model::{BatchFeeInput, FeeParams}, - get_nonce_key, + get_deployer_key, get_nonce_key, storage::get_code_key, system_contracts::get_system_smart_contracts, tokens::{TokenInfo, TokenMetadata}, @@ -207,31 +207,35 @@ impl StorageInitialization { ) -> anyhow::Result<()> { match self { Self::Genesis { evm_emulator } => { - let mut config = GenesisConfig { + let config = GenesisConfig { l2_chain_id: network_config.zksync_network_id, ..mock_genesis_config() }; - let mut base_system_contracts = BaseSystemContracts::load_from_disk(); - if evm_emulator { - config.evm_emulator_hash = Some(config.default_aa_hash.unwrap()); - base_system_contracts.evm_emulator = - Some(base_system_contracts.default_aa.clone()); - } else { - assert!(config.evm_emulator_hash.is_none()); - } + let base_system_contracts = BaseSystemContracts::load_from_disk(); + assert!(config.evm_emulator_hash.is_some()); let params = GenesisParams::from_genesis_config( config, base_system_contracts, - // We cannot load system contracts with EVM emulator yet because these contracts are missing. - // This doesn't matter for tests because the EVM emulator won't be invoked. - get_system_smart_contracts(false), + get_system_smart_contracts(), ) .unwrap(); if storage.blocks_dal().is_genesis_needed().await? { insert_genesis_batch(storage, ¶ms).await?; } + if evm_emulator { + // Enable EVM contract deployment in `ContractDeployer` storage. + let contract_types_storage_key = get_deployer_key(H256::from_low_u64_be(1)); + let contract_types_log = StorageLog::new_write_log( + contract_types_storage_key, + H256::from_low_u64_be(1), + ); + storage + .storage_logs_dal() + .append_storage_logs(L2BlockNumber(0), &[contract_types_log]) + .await?; + } } Self::Recovery { mut logs, @@ -1152,7 +1156,7 @@ impl HttpTest for GetBytecodeTest { let mut connection = pool.connection().await?; Self::insert_evm_bytecode(&mut connection, L2BlockNumber(0), genesis_evm_address).await?; - for contract in get_system_smart_contracts(false) { + for contract in get_system_smart_contracts() { let bytecode = client .get_code(*contract.account_id.address(), None) .await?; diff --git a/core/node/commitment_generator/src/utils.rs b/core/node/commitment_generator/src/utils.rs index b0a0562d8ec5..37651439a2ed 100644 --- a/core/node/commitment_generator/src/utils.rs +++ b/core/node/commitment_generator/src/utils.rs @@ -47,6 +47,7 @@ impl CommitmentComputer for RealCommitmentComputer { events_queue: &[LogQuery], _protocol_version: ProtocolVersionId, ) -> anyhow::Result { + // FIXME: is this OK to process using 0.151.x? let commitment = circuit_encodings::commitments::events_queue_commitment_fixed( &events_queue .iter() diff --git a/core/node/consensus/src/storage/testonly.rs b/core/node/consensus/src/storage/testonly.rs index 858bca542c33..efb0e88b1a58 100644 --- a/core/node/consensus/src/storage/testonly.rs +++ b/core/node/consensus/src/storage/testonly.rs @@ -60,7 +60,7 @@ pub(crate) fn mock_genesis_params(protocol_version: ProtocolVersionId) -> Genesi GenesisParams::from_genesis_config( cfg, BaseSystemContracts::load_from_disk(), - get_system_smart_contracts(false), + get_system_smart_contracts(), ) .unwrap() } diff --git a/core/node/eth_watch/src/tests/client.rs b/core/node/eth_watch/src/tests/client.rs index 29bb334a97d9..1f35c643895e 100644 --- a/core/node/eth_watch/src/tests/client.rs +++ b/core/node/eth_watch/src/tests/client.rs @@ -502,6 +502,7 @@ fn upgrade_into_diamond_cut(upgrade: ProtocolUpgrade) -> Token { factory_deps, bootloader_hash: upgrade.bootloader_code_hash.unwrap_or_default().into(), default_account_hash: upgrade.default_account_code_hash.unwrap_or_default().into(), + evm_emulator_hash: upgrade.evm_emulator_code_hash.unwrap_or_default().into(), verifier: upgrade.verifier_address.unwrap_or_default(), verifier_params: upgrade.verifier_params.unwrap_or_default().into(), l1_contracts_upgrade_calldata: vec![], diff --git a/core/node/genesis/src/lib.rs b/core/node/genesis/src/lib.rs index 0425a475c5bc..dd133ea77411 100644 --- a/core/node/genesis/src/lib.rs +++ b/core/node/genesis/src/lib.rs @@ -106,7 +106,11 @@ impl GenesisParams { default_aa: config .default_aa_hash .ok_or(GenesisError::MalformedConfig("default_aa_hash"))?, - evm_emulator: config.evm_emulator_hash, + evm_emulator: Some( + config + .evm_emulator_hash + .ok_or(GenesisError::MalformedConfig("evm_emulator_hash"))?, + ), }; if base_system_contracts_hashes != base_system_contracts.hashes() { return Err(GenesisError::BaseSystemContractsHashes(Box::new( @@ -127,18 +131,15 @@ impl GenesisParams { } pub fn load_genesis_params(config: GenesisConfig) -> Result { - let mut base_system_contracts = BaseSystemContracts::load_from_disk(); - if config.evm_emulator_hash.is_some() { - base_system_contracts = base_system_contracts.with_latest_evm_emulator(); - } - let system_contracts = get_system_smart_contracts(config.evm_emulator_hash.is_some()); + let base_system_contracts = BaseSystemContracts::load_from_disk(); + let system_contracts = get_system_smart_contracts(); Self::from_genesis_config(config, base_system_contracts, system_contracts) } pub fn mock() -> Self { Self { base_system_contracts: BaseSystemContracts::load_from_disk(), - system_contracts: get_system_smart_contracts(false), + system_contracts: get_system_smart_contracts(), config: mock_genesis_config(), } } diff --git a/core/node/genesis/src/utils.rs b/core/node/genesis/src/utils.rs index ac3435835e80..85ffd0dbaf88 100644 --- a/core/node/genesis/src/utils.rs +++ b/core/node/genesis/src/utils.rs @@ -120,12 +120,11 @@ pub fn get_deduped_log_queries(storage_logs: &[StorageLog]) -> Vec { deduped_log_queries } -// Default account and bootloader are not a regular system contracts -// they have never been actually deployed anywhere, -// They are the initial code that is fed into the VM upon its start. -// Both are rather parameters of a block and not system contracts. -// The code of the bootloader should not be deployed anywhere anywhere in the kernel space (i.e. addresses below 2^16) -// because in this case we will have to worry about protecting it. +/// Default account, bootloader and EVM emulator are not regular system contracts. +/// They have never been actually deployed anywhere, rather, they are the initial code that is fed into the VM upon its start. +/// Hence, they are rather parameters of a block and not *real* system contracts. +/// The code of the bootloader should not be deployed anywhere in the kernel space (i.e. addresses below 2^16) +/// because in this case we will have to worry about protecting it. pub(super) async fn insert_base_system_contracts_to_factory_deps( storage: &mut Connection<'_, Core>, contracts: &BaseSystemContracts, diff --git a/core/node/metadata_calculator/src/api_server/tests.rs b/core/node/metadata_calculator/src/api_server/tests.rs index 483236c3bc9b..a699daa929f9 100644 --- a/core/node/metadata_calculator/src/api_server/tests.rs +++ b/core/node/metadata_calculator/src/api_server/tests.rs @@ -134,7 +134,9 @@ fn assert_raw_nodes_response(response: &serde_json::Value) { if let Some(value) = response.get("0:0") { let node = value.as_object().expect("not an object"); assert!( - node.len() == 2 && node.contains_key("internal") && node.contains_key("raw"), + node.len() == 2 + && (node.contains_key("internal") || node.contains_key("leaf")) + && node.contains_key("raw"), "{node:#?}" ); } diff --git a/core/node/node_sync/src/genesis.rs b/core/node/node_sync/src/genesis.rs index 8d60599ff7ca..90eff486250b 100644 --- a/core/node/node_sync/src/genesis.rs +++ b/core/node/node_sync/src/genesis.rs @@ -49,11 +49,10 @@ async fn create_genesis_params( // Load the list of addresses that are known to contain system contracts at any point in time. // Not every of these addresses is guaranteed to be present in the genesis state, but we'll iterate through // them and try to fetch the contract bytecode for each of them. - let system_contract_addresses: Vec<_> = - get_system_smart_contracts(config.evm_emulator_hash.is_some()) - .into_iter() - .map(|contract| *contract.account_id.address()) - .collect(); + let system_contract_addresses: Vec<_> = get_system_smart_contracts() + .into_iter() + .map(|contract| *contract.account_id.address()) + .collect(); // These have to be *initial* base contract hashes of main node // (those that were used during genesis), not necessarily the current ones. @@ -74,7 +73,7 @@ async fn create_genesis_params( .fetch_genesis_contract_bytecode(system_contract_address) .await? else { - // It's OK for some of contracts to be absent. + // It's OK for some contracts to be absent. // If this is a bug, the genesis root hash won't match. tracing::debug!("System contract with address {system_contract_address:?} is absent at genesis state"); continue; diff --git a/core/node/state_keeper/src/executor/tests/tester.rs b/core/node/state_keeper/src/executor/tests/tester.rs index dc2791833e64..704d1dc630fe 100644 --- a/core/node/state_keeper/src/executor/tests/tester.rs +++ b/core/node/state_keeper/src/executor/tests/tester.rs @@ -285,7 +285,7 @@ impl Tester { patch: 0.into(), }, &BASE_SYSTEM_CONTRACTS, - &get_system_smart_contracts(false), + &get_system_smart_contracts(), Default::default(), ) .await diff --git a/core/node/state_keeper/src/io/tests/tester.rs b/core/node/state_keeper/src/io/tests/tester.rs index 32a746eecdfb..4a7cde52019c 100644 --- a/core/node/state_keeper/src/io/tests/tester.rs +++ b/core/node/state_keeper/src/io/tests/tester.rs @@ -172,7 +172,7 @@ impl Tester { patch: 0.into(), }, &self.base_system_contracts, - &get_system_smart_contracts(false), + &get_system_smart_contracts(), L1VerifierConfig::default(), ) .await diff --git a/core/tests/upgrade-test/tests/upgrade.test.ts b/core/tests/upgrade-test/tests/upgrade.test.ts index b593e5ad6677..3035ba30bc9a 100644 --- a/core/tests/upgrade-test/tests/upgrade.test.ts +++ b/core/tests/upgrade-test/tests/upgrade.test.ts @@ -72,6 +72,7 @@ describe('Upgrade test', function () { let bootloaderHash: string; let defaultAccountHash: string; + let evmEmulatorHash: string; let bytecodeSupplier: string; let executeOperation: string; let forceDeployAddress: string; @@ -265,12 +266,18 @@ describe('Upgrade test', function () { 'contracts/system-contracts/artifacts-zk/contracts-preprocessed/DefaultAccount.sol/DefaultAccount.json' ); + const evmEmulatorCode = readCode( + 'contracts/system-contracts/zkout/EvmEmulator.yul/contracts-preprocessed/EvmEmulator.yul.json' + ); + bootloaderHash = ethers.hexlify(zksync.utils.hashBytecode(bootloaderCode)); defaultAccountHash = ethers.hexlify(zksync.utils.hashBytecode(defaultAACode)); + evmEmulatorHash = ethers.hexlify(zksync.utils.hashBytecode(evmEmulatorCode)); let nonce = await tester.ethWallet.getNonce(); nonce += await publishBytecode(tester.ethWallet, bytecodeSupplier, bootloaderCode, nonce); nonce += await publishBytecode(tester.ethWallet, bytecodeSupplier, defaultAACode, nonce); + nonce += await publishBytecode(tester.ethWallet, bytecodeSupplier, evmEmulatorCode, nonce); await publishBytecode(tester.ethWallet, bytecodeSupplier, forceDeployBytecode, nonce); }); @@ -312,6 +319,7 @@ describe('Upgrade test', function () { factoryDeps: [ bootloaderHash, defaultAccountHash, + evmEmulatorHash, ethers.hexlify(zksync.utils.hashBytecode(forceDeployBytecode)) ], paymasterInput: '0x', @@ -510,17 +518,19 @@ describe('Upgrade test', function () { } }); -function readCode(newPath: string, legacyPath: string): string { +function readCode(newPath: string, legacyPath?: string): string { let path = `${pathToHome}/${newPath}`; if (existsSync(path)) { return '0x'.concat(require(path).bytecode.object); - } else { + } else if (legacyPath) { path = `${pathToHome}/${legacyPath}`; if (path.endsWith('.zbin')) { return ethers.hexlify(readFileSync(path)); } else { return require(path).bytecode; } + } else { + throw new Error(`Cannot read contract at ${newPath}`); } } @@ -629,6 +639,7 @@ async function prepareUpgradeCalldata( }; bootloaderHash?: BytesLike; defaultAAHash?: BytesLike; + evmEmulatorHash?: BytesLike; verifier?: string; verifierParams?: { recursionNodeLevelVkHash: BytesLike; @@ -663,6 +674,7 @@ async function prepareUpgradeCalldata( params.l2ProtocolUpgradeTx, params.bootloaderHash ?? ethers.ZeroHash, params.defaultAAHash ?? ethers.ZeroHash, + params.evmEmulatorHash ?? ethers.ZeroHash, params.verifier ?? ethers.ZeroAddress, params.verifierParams ?? [ethers.ZeroHash, ethers.ZeroHash, ethers.ZeroHash], params.l1ContractsUpgradeCalldata ?? '0x', diff --git a/etc/env/base/chain.toml b/etc/env/base/chain.toml index 7b632c3ae3a4..cb0c59223ca0 100644 --- a/etc/env/base/chain.toml +++ b/etc/env/base/chain.toml @@ -90,8 +90,9 @@ fee_model_version = "V2" validation_computational_gas_limit = 300000 save_call_traces = true -bootloader_hash = "0x010008c753336bc8d1ddca235602b9f31d346412b2d463cd342899f7bfb73baf" -default_aa_hash = "0x0100055d760f11a3d737e7fd1816e600a4cd874a9f17f7a225d1f1c537c51a1e" +bootloader_hash = "0x0100087fe7df1cf5616646f85bd5eebc8efe5d8deac4d85bea9b9aefd88803dd" +default_aa_hash = "0x0100050bf9baf9d08e5d3c037f8d8b486076de7e6dceb3f3fc0989ea2c99cd67" +evm_emulator_hash = "0x01000bbb8116fe7bdf690c19740ea350375426cec23f4f1f69a12fdc58adc9ba" protective_reads_persistence_enabled = false diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml index d3eaabf92bd8..80a9bc9c3527 100644 --- a/etc/env/base/contracts.toml +++ b/etc/env/base/contracts.toml @@ -80,10 +80,10 @@ L1_BRIDGED_STANDARD_ERC20_IMPL_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeC L1_BRIDGED_TOKEN_BEACON_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" L2_LEGACY_SHARED_BRIDGE_IMPL_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" L2_LEGACY_SHARED_BRIDGE_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -FRI_RECURSION_LEAF_LEVEL_VK_HASH = "0xf9664f4324c1400fa5c3822d667f30e873f53f1b8033180cd15fe41c1e2355c6" -FRI_RECURSION_NODE_LEVEL_VK_HASH = "0xf520cd5b37e74e19fdb369c8d676a04dce8a19457497ac6686d2bb95d94109c8" -FRI_RECURSION_SCHEDULER_LEVEL_VK_HASH = "0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2" -SNARK_WRAPPER_VK_HASH = "0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2" +FRI_RECURSION_LEAF_LEVEL_VK_HASH ="0x5a11d22ec76c8af17e5945e8f82f97b2e076a5654eb5807ed210a54fce7093f0" +FRI_RECURSION_NODE_LEVEL_VK_HASH ="0xf520cd5b37e74e19fdb369c8d676a04dce8a19457497ac6686d2bb95d94109c8" +FRI_RECURSION_SCHEDULER_LEVEL_VK_HASH ="0x7e4ad3251ad738ed8a6acdf7a34d9dfe378ad516efcb098448cf14d5f2c0c90e" +SNARK_WRAPPER_VK_HASH ="0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2" FFLONK_SNARK_WRAPPER_VK_HASH = "0x560b19cfd6bcf1049c6409c18d81db288ab7639db080ed3b48df17ddfbcc4666" SHARED_BRIDGE_UPGRADE_STORAGE_SWITCH = 0 ERA_CHAIN_ID = 9 diff --git a/etc/env/file_based/genesis.yaml b/etc/env/file_based/genesis.yaml index 480f798ce4df..d1df764e6f34 100644 --- a/etc/env/file_based/genesis.yaml +++ b/etc/env/file_based/genesis.yaml @@ -1,17 +1,16 @@ -genesis_root: 0x7bdb3d822ad837a3611c436d3be457363a08d06d83b74469831482353a7d8277 -genesis_rollup_leaf_index: 68 -genesis_batch_commitment: 0x81f5e324a4019e4161fb9dc5058a588aa364a551fdd5c0e8788521e64e7ad596 -genesis_protocol_version: 26 -default_aa_hash: 0x010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0 -bootloader_hash: 0x0100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81 +genesis_root: 0x025f5dbd1ac1b87be9d80858b70c10146aca7cdd4a20371723d988b9ba7a1b74 +genesis_rollup_leaf_index: 76 +genesis_batch_commitment: 0xa006e72373d26d07e6587cea4f5cbeb7b6b5eccf24fc9a75460d7b88fd75b616 +genesis_protocol_version: 27 +default_aa_hash: 0x0100050bf9baf9d08e5d3c037f8d8b486076de7e6dceb3f3fc0989ea2c99cd67 +bootloader_hash: 0x0100087fe7df1cf5616646f85bd5eebc8efe5d8deac4d85bea9b9aefd88803dd +evm_emulator_hash: 0x01000bbb8116fe7bdf690c19740ea350375426cec23f4f1f69a12fdc58adc9ba l1_chain_id: 9 l2_chain_id: 270 fee_account: '0x0000000000000000000000000000000000000001' prover: - fflonk_snark_wrapper_vk_hash: 0x560b19cfd6bcf1049c6409c18d81db288ab7639db080ed3b48df17ddfbcc4666 + fflonk_snark_wrapper_vk_hash: 0x941fd36f78a5ba753dbbe65b9123a43ae833405fafd03b5149b959eee766e03c dummy_verifier: true - snark_wrapper_vk_hash: 0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2 -genesis_protocol_semantic_version: 0.26.0 + snark_wrapper_vk_hash: 0xf688611ad4e0ef20184a89e7b593493dffcefe92071f85c1a0b94d4852c4f82f +genesis_protocol_semantic_version: 0.27.0 l1_batch_commit_data_generator_mode: Rollup -# TODO: uncomment once EVM emulator is present in the `contracts` submodule -# evm_emulator_hash: 0x01000e53aa35d9d19fa99341c2e2901cf93b3668f01569dd5c6ca409c7696b91 diff --git a/etc/multivm_bootloaders/vm_evm_emulator/commit b/etc/multivm_bootloaders/vm_evm_emulator/commit new file mode 100644 index 000000000000..657e1524aba9 --- /dev/null +++ b/etc/multivm_bootloaders/vm_evm_emulator/commit @@ -0,0 +1 @@ +00946002e684966eab680f919c8c517f8cc64d9e diff --git a/etc/multivm_bootloaders/vm_evm_emulator/fee_estimate.yul/fee_estimate.yul.zbin b/etc/multivm_bootloaders/vm_evm_emulator/fee_estimate.yul/fee_estimate.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..ab34bc6edfacf380b5b40f757420decf68f5220f GIT binary patch literal 73760 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 literal 0 HcmV?d00001 diff --git a/etc/multivm_bootloaders/vm_evm_emulator/gas_test.yul/gas_test.yul.zbin b/etc/multivm_bootloaders/vm_evm_emulator/gas_test.yul/gas_test.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..6d78069322d5e64b4575c8f5e3059e6357e23a08 GIT binary patch literal 69024 zcmeHw37i~9b$9g~+dW!o4@s-luC!JwmSf9cSQ#6T!7yWKeSmDOELmVK?MOS4){=JD zd&m+bVQq{ZJMcxhKEN1|9S#$R7_cD$d`O=m=1RhmKmvRq8=Hhc5)%U93jY4@y{bNH zdU|HHngzaOe!tzG>Q_~->eaiex<_RceKP7aeN}2G+mRVp%Dp_>@4QJlxW6uY75+QQ zcaA94iWbK&q}myk>!Pcpau=dNU;6NWhRe#mLUpLymFhqb*HitYS*l0(`}ux5->3dF z-0m3q<9^Z4i*fgKrOH%xoDOv>+HH0^FdlqzS=B?=Y=*864`w=?UKE{-uh!FjwT9cP zT;?d??&eHU+BvJ$KM*)$+UL-|1K2v$g(^o79>*Ezipn&y3js6tX+$(G<(T%2zoSpn zV@T$$iaD8wpO^W*45TS>FMjTYJn}r_$*Dn!Axaxn2VaL(KVLDB+)`Q( zp{IMfqh_eTV@^i~qjO&lx;&!P3@yz1&ind&bl9$#BH68|*XyY44xWv}>o|mVyuMhP zw*ju#wPS$keVSXwJ$!d}W@+4*oyyXGcNYi(yzX!?pT)WJQLgCwyRG|s~qs z5BT~Bd}|!;UQ?%k&~YyP^NjW>Rd`(U^>XTuh~PT8XW??1DXVM2XG9N|=-xVGBXRg;;Rc~DCwSGv~JC-GUXl2$nmu0-ysv_h4sjhdTpvRRjX!sz* zCj<^ICb$>&la+qP6zh}LZ|Hg_TBsf*MzzTJTUw|;)!Q;e^v=w<8jm_i^4$6`)2{_J z3c9|_^;daAr0*2wQN9q@RcH^od1n`fSfBVUN7MyqzgWW+`h(PU`e0M4pY>))J{{%F zs9VtPX(+FftFs4iRXEJ6tO`6|+_(iRs9K?kj#GQpa**L4Lmw!6XR9Hm$MZG4dh~pb z%DB)#=JO(rzXz;9^Hn_GC4e(O;Ue?v#eKl>*+X<#_&S5v6?(1m#(DmKXXY<-!~Dl( z{;oa$J+qwuNc#NUJq-V-D*ZE^l{Zzi|{ z31|L$ddPp8{(HH7NdKEzo&x$qREhpW;Q#dsQUclS!++(;{CaU;`0o(U|7tV;f|kDp zN0|Rsc}Ga@oHK+D-r21)!hePLTk}60pZ|iRGXDifW&SAh{1+UR`M17C=HJ??=YO{~ zf0j?@>B0Pu#QCrACYe9zi}B%enC1cbD$sq+hvZjjxhuGI-~A2n>utFHrttGZ=%zb} zpM5n$`g|egc|DbTMSf9J=rNA^fIHVJCG_O|4p15v&?_iVbVOPCJZHUF&2 zOMA$3ne{|ViQ8xM@D!=Ko0Ii+U*h}?mtT^3CS74Co(FoW{2=iQ%G>3Be!JAmPdo3R z`)V8cJ@{nRDpW_4sDJDn(BlAz=!8#4&Zi5?JRW?Zb-P!_*R~bk>Hf8{UYXT;+&|al z=j!rP@%1$8l>waip^bP$`rk(Vw}HowqipK^(yZ$r1?$q-xg@`Zj@(|o)*oEe1H?Lpn%jlgbo6e7Gg#!|P9i4+DJyKBV@XI>~%^s`zYL^FR2D z#|<`PJqKHGoW`*%E-#3CV|=Psp-gs0$4#U+OK8`2h48EU+Dt#$W$zr+fSk2M?`S-1 zCo_;W#TGpOF4)$!9zKe!}M*tI_^b0(XBG^G=J4 zK_=A`iF;=m7ppF`XFVqLrig;)?_|`_dbL2&jXwN$bv}Z;PS6pzDZX4};O_6m?zaW^ ze?NAgJO%F0{R6BQ_rrPz+6DN5$NfW|?_D+X0Npg+&JdnF-w(|z2X#Kjx>POXTFZtgrB6=PV+$fIsp#Mv> zp3AcuzvPABo^OzG=seN1l01=b^t!W};rUFz#07{^d%+gQzf#U(hA$KQru7-(GBeN2 zMbf|I(bOs#7v|}6d%NsP~fjD1_U5`nEd#&rvT*{ucAF^V~(TE2>@S1~~JNdwE9k;6oW-*3Vfi z@fr3JBwrq{cPw7deY@5p9c0fUajMRTciyArLxGPG7b=(P;Y$49r&^(=D1WW8XG4Kp zh%$ZpAg4V#-c?9AzGFM-NaP3t}R833v$TuL@0*_pXTQ}e3@0+pVEBZdGc~7a`vk!hYGu59h?t@ zA4qbj76~2QJIuN;Jp+FSdgLtfTNlE=gFKV}M0qhJH}KcT`Rx{5DIcB370D6thtz^> zhl1@=3o`u<^a?(UxgX?njsx$R9nf#^J|y8!I|}kc zR+9ZuxU<-|`4&Yh_K z=(&VNny&6Wb><0jBhL}iA(@UL+@hnZndi*N{(MPszGuQ)9{Mi#YRM-R zjv?+Ky$VBwa{&0{w(0$kbyPohQ0i-YRP9F})A^YXVjkolelXd8cJGBh1AlTR2fMQ# z{;ZF_3R5VfgkQYGmL*$6CIamI_h&VK$9BZpLG0F?N|K&75^*{I)?F2*5rZ74{gT^ z^phOw_y@|8&t*`YL-7vcn_0yU44Xm)(?Ii`AclS zF4yOK$)Do$D$eTJbZ5Y_|e>yB}qGhU;$6cdmT% zu{!;WoeJ?MuU81S>CNpy=lh{|5C<-Lh1n02eG^cc^UAF+g*hR6tMl2MAKl0C9`-rl zv|TOqasP$K8`>$G9x~n#o;=sH;s$qBBsbb_&xAM z%Iq&G&L>d$`U^Yn)caE*-5%n3yuGG=kT@`eC$C=!x7N=+7Vlpz=XG3GGwu{Rh5gME zAM^yp|1>}0(>t_XGW)pQ4#&ylSb}cLVRbvy16Z#od7Po#*nBMf6T*|n6~Zk#s9w## zUBFNN0b#~|1FZ|oSr+)$NBmQ(z56{LU+90@0#^o_}@bZL3((EI+qtbe}VeGBWKXg_=& zt>s^|UK~cd68FD^{qbcPUyU$*MNWHB4*8TaR7#x#KJ+=?M|78ZvM!u&BfVSK{;=O4 zvA4;5P?JyVuEQMHSuH2}VIKE8Pc~$KtofU~e~|Zztxw_ayS^K@3u>vByJe2Zovb_2 zbG6!naeSZUDzrbgT+PjHEF-bZLLWHB^-4xTUfU`$;uz&GO<{!_I|I9h!x^_bNKdzLR_N$mJ z6z1xFR{K@PuZjCr;4Z`$A3^ml{T$OW*zZx9L)0Irz;>7f4e}W7 z^P6)7=6qi_QpMCy2l5x(U%RJz3SV0BMPrYdAL-mx2kb4*g(Hi?a?XA-$vNBA0`}@0 z&A*Ia=WQJ1WgzeLyqdPZCJ&_ZJiE=fC9mTQaeb1T>iUqMMUU$GLZ{`(a{HA3rg;J{ zS$+0Xz4wSbxqrd(-zbQ3f306=ULpte{Kh%@bQ{J8Na z+q56jofW=iKdA6%@0HBAhF%NNO8f<(i{XQXYGDn3f%g?7{(!AV=ISrZb$#mj3o`zb z_7^n26@=cP19S)UFsP;ZPxNruzpaPox-WE$$f9TUc~b92Y2S|ha?yvZm!P*bzZP`A3(zm=Q)pJ! z-@wcI+vsJ5_hW#I+q(k&xRmv(%A77&=u3=Oj|;VUeJIY!VZXn&zbF1`2)Fs$-lzUQ z7trh_e`R+Ucd$FFHwAiJ^DDMsQq z<^37caXFtecmVL_=}{%M>w{9s-eKxdnWrTt+#Z|$?30!g}G-1;ib-=ra7$GyjNc`=&O zx+wjef#j9whCCNA74V^)uUP`TT;JGp;YaVEB>&kqik@g)Tk!`x?Rb6|>lOMT0UoR? zt>@LIfABH*+WWa4mw6s;CgTe~2|o7|kRzcdpTl%NnUUuNa!Q`Bo-aC@=U$B826|C` z!u<^BnYKSFcA&N#=FvWlUq4IzgPxk7Ku*+0$;4Icx1((6!1z$!*kGRjuk`-0SA)M) z`g1{ToqGNB`WHT|@O0e{ML4=d`~|{xAH^|4#7=+Mf@&Xf5-i|YW*wEb%pvj*=~h!OFt{}>tc3GpEK)GV*e4(93_3n{syi_e?g;> zzH0j-1Rwg%ypO9L_pT>>XZBgdzX;}E_#G`D%1JzzR(ONJ+h3>o5ac1cyFWI3D|&9m zA^8LzqxXznUZeHkY~@|-i8-eTr0Mp= zQ(WJ9G{_s+d_kloy8jgQN+=k8h4r9(H|3pT=L}5V>SwX@H?w}Oa?#T?f2;)FwQ42M z(R3b`XnSIBq6g*cBln5lF(%mabLl?lW#t3Gw{p(69zElEz~|tzUp2{$mKY{bJ#-5MIS6!Vj1&@4I_s&q_Rdd9JtF^E^%F>5-pW zip-*~J@^daf#x#>Ui z-akw(UH^&RLoGUgw!ZV;fWK`1NPq4>$fMPG?w{fu&WBmg{RjJ6Zv44_Xe?bn{@g#w zBj-`{bN?Yf+k7JWHiXYo9_sebd7KEJp6dQ3&TZcKB_2Ha{_W@fjekyZL(e^!Jl7gs zHu0gc=f+6i#q4!*3@1+d=>e2X(9-#5p!ymVg z20!!XtlqP!^@B(Du!(xlBRl+ynBNzKzOEfNk)9*JkMc6GukIc*J{?!lIphf3Th(0p zuwT5s^8>Z?pXbZ?yww<&(2?JJ;Qg94Zt`2;`*wU!+p{$mT>BZ64-~&kKX-FXKaV~v zaa@&OM*Dj%$^K6WxBN+Wf1UotzY5#Wvi~{j4YJ1( zy155vyfx_tz#R1=``_qB>qU>wZ8Z}g+0)4UJkra}#7A-)!RJmi86TaGjp7?^GCs?$ zd4#{zM1Ha8=}~;vOnlUTgq|Mdqne42`j6tH_dGNcAH^RLeC~Bk#z*=sito2l@sVEU z_mR6z*2^C4kEZB-kMf{V_T?NBTaBZ>q`oY`^hflkr*l z(Vc8EK5Kp+?R%7($S)Q?_Z#z!@6IOUv;0W+>#6v9KxxX;k>1KuKE!?5MSH= zB8sur`aKzZ_UQMp=cn~^pk1`D zxCqBRY5xKresAugm+1Drd2Y986S`*j9Q|io{=SyVpBT;@@lif4s;~cVDn1iekz9y8 z{1?@atfwsx7$5d?8s;bSJW<2z{qqLb`!Z|2@jDi&>pf6oy?bQ6v9U5B&;Mridp7fO zzDniK*U$ByFVFera`OByo}0df*e7?M+|QmT^|D*#IcT+x&#UZEl26-V-ecqNdmvrp z&FK9#HRJu+#_u+teJOR_mHS>^=Xci8dm%hoZv^mm<^Sc*y-~Dj$&i(>Xud z@1pY~qz8DPqV77%K32F+vt37NAFNZ|b=2nz8eYdgYj7QBt4ID?)^QQqHN`&sL+X0b z^2{yIZS%*Mn~X1m{-gHj15L(f>%p(g4xg8a^NkzN%aWXs{}|fKzoz~>@2;uuct0@$ zPnMIgy`}Hmdi{$Wh3)I~ub*qi`I-j(ufK`Yqo)5gOF3$LPF#+VKQ?|~WBWBWAOElP zbvFICKPYl*%5A?JFSni^FSp-ml|L(G{GXc~+J4%t>EoX>K3gvSe4g?BWs~vI{y|jF z{3IQpS^svNt3D-q+|HBSkdA-O>uKYALpr`-zVA<-uh$Znb4%~d-R{_N`db?u?^lw? zi}~>HiDF=l=?k5obHAI8*IpMdXW@z4gSpd%>_dcaJvwh*LbuJ@x3u$zUz{C2FJF%y zIIqb2@Y=q72iHe1AEo5^fmOMFde5l)s(io1@0mf0-`kM}C{w)c;CV@+2M%n>@2MTq z?{R9mNyqQM&gX)k3jFCDmD_O!f!ixbzsD(8lyeFC{fsI94DUgIL^+$|84sE)Q#ih{C4PPC;JB>-10wc zd6>1_*>;-aPAqS;_}jK~52w>_&hxX@%L7L>RetUHeZI-~to<(c3r)sn?{6P(GCrH0 zKWZ{Qi(lNCCgY?0b;Q27*EboTZC`F`GCq6%=Eix(_xgFpck?{sdtH<9S?3`P# zVjnVquZ4GTvgiCP{o<`{GCqpWBl72+m5MKxk4K(Cxr0={iRYcR)#;z~)!GRDWd9*N z4`urgb6qbx&UtAn{rH?U)9n>JukakXy^kUD3gOA~3gOng+lsTNQC>*W2hj(y@^Q#*&Ak0M8j_)+#VL%P^>m3&kP zpDkVM^*`5jtJnW5*RATkR`vRqd|<=$QQev^^m`5(=8FdRO=ry)cz?ig#A%u@dIG+X zeZz2GHeZlmJd5YR0(sESsW&|D2KNtVJ@3Ctp0`JNjZ^r1#L3RvJFQ82;JdMT^K#GW zoV__Gbvn_lrkxM?%KPpU8hFp2ve9raE~)s`H&y@b_x?J^K0qeZ5;>-$z&ML&o~W zIi7g=9;^HTt9-9jzR#3NVdS34@1vvVvoLagPL|$JCw}7(^n7)`eunbg#LqeX{1xf9 zl;@e<*mLS#|J>+v>YZN_{VLC?cl}eXeOeh$1fJ-(M&MRFK-1Lk=}mr4ozMBr!+ifk z<}1&uN5*UWV?3S+e6I8Dr}gdnb}jl6eN;~bo{TSSZ_}6ZJc#>Mk)K1vZh`O>*o@C< zdFu#2?h1d=6N&Pk!<>?Rher8}e#dfsz+bBBcPV`A1K>GI^eX&|AJ8b0x3Vf<MbXdULlDWY!ySIl z>(Wme`~YBlirxnV`Y(k%@x1hUI6kijD#&|Xyl2JMf#jR$4`T88B6@#7Kg#sJq{iM) zVcwU-&)o*=V#bYNRzFvb^K_YUP(|KX+rn4;URW?6>?6v0plOs3Ek5(kqwz=N!j>B% zSx*F>%*UagnQi~PU(`#`JSv#jVnq4<3l{ktLyQB&kXzjv-sgx;cc zA0ocTRjJdNKYVW2igK(z>T!SG`9!Dicgj$Y_sN_S4vk|G%B=Ts(dQ_gEyDl0T;uoF zm%d%z?~_s7PoeRC;Gg5U->k~`dLI0KwXO#-Oq!pjQ$~KjkluTlReku6W3P}Wyj4s8 zu9w28aF)~f@3AlaQ~ll{<;Z*5tlxp|`mDyIe@90x7J11Oc|3Tjtf8ZRuUjWXg4RuC zE)snDevRK}U;0tge_novP0L>fe2@7;xm3}+luYj|(+Tyr(kb{Z$c4}c>q+C;h_{S@ zU#L5_XIkz_j-mHZ3Ex1s#UEmQg=NAW(0B2t(Sqo#@=QO-Us0YT2Y;66el}Mmx)$~M z+F|+qp0Hj{|4zEux5atdcZfVEy$1-`);aG8^Z|{-cm9A!<7BVGTA~8K@1T}mVE;B^ zk1RRGYVrH^mj1KW8+5LeSdiNzQz`95ubuQh zf#t7z>xoXlmmF`=c$De`Jt==k^~ev|pj6DyMVY3V=I6%W+XMbS11v(`H1Rk5imq=5 z^P}?%%;$tx8GEc^bdr_?H}w5X&_2};YI}kAvWXre3}hDqdtrXpPTx29BX)$}*XUiK z>0#b0Z0gf=&T`xECkm2XqP~lwipSp&$ee-iBjyf-PA9hdnjq(0*oS(#}Nb!7bwJI{+ zijI?z4Y?Ps4s<6k;p<_n8Q}(p=h+XY_>13n-i6#4^A*ms)BDf6N>W~mSd8SO?t3mxyt_t8-f*^Y z7{6~bh)bdL5r*iJUr>cP?Xz0(i~Bf+0$S9FU*?XF;#iVH zy}#?eah~x#nvT!CDpMpqKI4${d8V_>5t9$;P?{V^X56`?Roj#$FE3?% z_k@g(+R^y%Kh9sx#{Yvr|MKsFbRlA9`sTC!oHxm4e93R?-?dP=HCq3!5j~4IjL++5 ze93QTPnY|d)1_YKBCUVrcf~dR+#QmKad$X6za;M~taonTdv<(1?DfNW6tTbXCq+)h z9=qScRn}4R+^g`O0$#toeqRCX8P-oZNC{%yx>jpCV8O+%8vErP((CtJw!eJ={n&nW zJ;SuCdftKZnfRRa^A7wT2GH#n^4z+2k(Qg}JWDm-zCC@Ns`z|5ULV?7`$xcwxWGF* zCvvtb&vK`n48LEZ3%M6dA7o{{lAllM+A8Zs?ULlJt1S1CpW^pmcrS>LtBT)Dy%*N4 zCwi`!Ue7B!#i+iq@p&&yhhy|{{W06;v1p%z^p>#~KS8;Ka)aycZHUjWY3m4I`Z()L zIGW@iyGHJ^8^mwS>3z9c&lwrLWu7z2ZqWK{gXpc`eG%tUevSGUeu+OvE9@6TuShV3H$6vF4&dK(-9-C); zC(`gC4|W>mk>Quh^*h$N4ar|;c-MpWchDIOTOa-qnBj^b3-@4y^!_^)Xm&mNp7;rBgv z-yG!GhfJKU<7;2yY4j@ks>Xi*vK2;dj2(v{_kcPz_WPH02Xe=HW!YIl`}x`L*YU?P z_z}lhzX`oCU_QS>%gX!0^aXm)(7zjTUYY2AO3(9v{yy(>5Z|T7OUnjjymFqW`}MW> zZHD8i2t1kJ!uB@5Y5oc50sorwSH3gIcB`1-d`7_+{}1(8e=A?#FIxA9Vf`7p`ai(fcKN zV-MAN+}|GQ59;JRZm;Q>Da!sYR$ZTGfwcAz8FYD-j0^K*e+B^VFW^J)B+0+&H#21S z=ji@ePvLwH@&QaY_;r*wQ|f#k-!%6_`wYB~&3unNNV6}p>|uSz}?C#nKJb4~r`}jDNdkpPMVSCMA zbbiQp-U>P<&1(+$AjYCc$gYBimwiw3R}1t4?dxS7`CTl~rP#xCNZjXM_V2nK(T~>q z6g>~;9w&NW9Lat-tqZT4`y|sXef`%))<1b&!uHm>sJy0=RM7RC9zZg7t18|E7t zjhwfYTl3yx=?XXJX5zTT{_zb#kr1Ig_()dK!j9p{k!p*Tmm!_Yg# zpW<&(eZCLBj{OHj;dG_ANa7)hgUFsqJ>|%`5M3YDM<)cuIDca6nY-4APetit{ywg20o{k+Ck-8f%)9P3$g{Rlwul`HnY$Bdiyk>C$_ zXM<1R-}k&x_{4j0upXSJ^{&?Nw`e|kzT-3fiW#};b?tdAmXXJi)p;Dnzk}VY<7jwY z{QKA5CdKhY&(oD!E%n7eUxoMefR6Mt+GV;Q#1So$2lul>>H>^2*jH5?PxLO+c(ZbT z-BEHr-Fq6!t1v%Y9mEI-FfS(l$F)V`4Yl1FM}Ld%^GQ8l zH*%!o3_sg1e1vfjeRaE@&*|~ZnD_>k0`Q(|4Sm!$E@LjoX`Txp+T@oF<%+t$H4Oid zsc+&JoNPz@)Vs#q&#a;OfS$5`0X;!?!e{zd8OhhvJ^|6!azmM(* ze8uMlG(7`7SvB7U(0cnY-}eYz$gd`T#{P-kkCAw7QKdd5XV(RZ`dH_NXI^o8D+L08P5$r-xAk1%XbFt=U3m{DdX_2 za6s_hO*P{tkVW-G;E8@>1aA3>5?}TX)a;+naYf+C{fF(X{_*-R$Xx_~QXIBEgm=GP z_}0CL=Y46-amlzmtsDN3echez%?dHrBqUeS)_(!Ce+zfGwbvF|U|az}m! z`3YDI&gYTeqva5C4ZTkC?z|1x`%tCS8`9feXLG(6zax%)RO%P~MC#9W{ip}%qvekZ zT{RzXtjRAP#<#XNgeT(*;WocW``Yv4JV|6ec6+@(7Gi~X39nyR-<>5sJ73a+ym^`IQ2}zZ7T3HJ z&6f}zBwtd<#GVW2!E^T9j_8T@^OP^4@hHfFl6*;IofG*y0#Bw>$Vb+?D09x-aeSsr zLHz%ovyERQa*ojmA1xq0puwG@^G5XC1L>PHI8IRBHk3;!H!IFR&BBK~OH=XD^A(Z# zxrdvK&(52?CLP~N^RxZ_(aq_2Nd3-9eyn+UTjv?y_H=yaJ-OiA#@;Jy&*!D-{hxCB zy`;(btbCd`*kpV*J+Dm1chY=sz1PxvQ97PezHW==8DCqI@pYm9sDAuvlksINd>?2s zK8r8iugo*Pd46Ayw`G3k=UtVC4}LD^cadK~ob8bRhYRw#`U<~^;k}pG^?El^{oczo z{6+fuVpC80>Ak{~rT^YRtGvaOHD1{Vlc%34Pl}|2&Wj#HzJuc~-mgcpiti&BqqqhC zk=GEob$;e$H2)R%*Yw-bT=hiYiT+^(Zuy7a%j@*d`?-2%jrGchsTh9OYM$ABK3% z5&ePSSL+j#hoUm_%Dq39IM@9IRFcqN_NDdtxnQ4qjrg~QFRJpd$Mk;nU2@KLhM#L$ z@nFMzjd9RAnEsg$eEiq*pndL$9wa@<`q3L=I)>|Vs@IL|ILE!Le*-#t;fP@nfYfxI8`W!_H3c{tjZW4a-a zID~$^UHZP0?Jqxs^029=^M6iG>Qzj=T#@R*Eb;p_ls?xq)1vtKJ-dI@JKY&W^&K>t8qCEvK>BQ@!n!F<+6;K}q1+gtRId}G*N(<5Iq-zat~>~EI%@VtlS zJNRwTrz_s2^M-lNkC|A$k?0`#M&#$C?;%<7?q5j0k;W6rH%9o(=0l-VsArSu6vC}_ z3C?Hblu!Be6@OkM&uIK8NMi0B@DKax7?)h{*VhO1^+CDvEZD#I_Od*Dt|othKj9aL z@Z@=faC;uK&$NEU=Y#%jxQzSrdVF87#%JOHk`EXDJ<-1fSGu3al`anHuRO^S*~8!* zYC+DS`kv4F?(vo*d{xd~bs6;R$O2<8?%?-vhPe*OIzt)26oBrtnIcL)P8NCm60n68qbU!Nlhf+_yj_$8KD*DJd zkrn#Ld%A!y`#Pzo&o>9>5aQ>dSH4g95$B;BY@d7{dgT)`zKmbc{S*qae_psn#vx^# zhdx64WGiw0_Ijd=(&rWOxg%sZ@!|8!E59Gim(N3IiaFh{IY*GYQTk0k2fgxBRzE|~ zKTPl7-1rUBk2yCkaPMrKV3PCCe13pmUoGS1{eO&e7o96u`DN3;?7PDP43b@6iSq%+ zslG#UgYw1rD(!a>zA8VmsQpO$Ju*Y)cXqY?x6cI}Gy9#v{(oNe^!021Q-$Y;6us99 zgVAx8_N%WwkbhfGvi^#|6ZK03Zs`xPUm;x4 zdkojAY)$*cer8xddA}?Ix9|meneq-KN584jo--#E|s9&Iu{i=N)TCgZc|`OPNdv*zbMHqZD@q~U|T zU_TWuHO>z>7eXJ!%UxEv+bSNMIU|(^D4@Lc)SEygaexr>Haa;nIaL{*idCpC#E6yo$x9AbS4q8d zV-$LEd1QZO*q<8nCo5C_XyrP8XL)MZ-V1zPNz8V%MdRN=v=eEy0snatVbj_~Vc9i3 zN26u?d$xBl6|R1*IAgbom4B@`^ocKA?A-L9r$7Jqf9p3t__ar}$DU9h-umeq&V1f$ ze)9LZSHAw8UVAD*D_deGGtahet;D z=n9dRRbT7s1gk|-{i=Hbej26K0Tl!I;Y z_Srv{&H_RI4GzLGn4*Xd);Fpvq z{qf3#KR&&a8$9PZ>(2Fe zl}G*Q$qEhioPo_Hs^^-;s&Pfrb?2YI-XAYdln+>Ar}n$AOJ{H`HvTZ=CW%Cqsl6M@ z`}b2H3VXAMtVfssj*#S z`~B(hJrm{Oia&J-%QWTh9+{XVEp%yV>!mw3UwrY_fo+ji;n$6&ZKWNX2Cled+oj>n z$Tv#Iq1~*NF;j<|wJQ@kBoa!BgsIa;iMR0v1&isVzd_6Uz>sRt_|2c)!ta;Jvpd@E`8| z@J7=|bXfl6^sZf%$(a3LY%12cV*Rh01pAEESpV^{bo-0;V5tH2;+UZf;J?fq7~N;xjTa{>yQfEo&jOi}saQPTo~oh` zPu8|=glXS+`uayl6B0iB)*Y?T*mrnU;b$wP-#-ARF7JWvhy1S#Vf1agd)p`Dcj}g6 zIx=eCfN9gZ%Ymyhx(6=NrgJxq?O9o;y9E1Dj5axVO>N$%dRK*Jtx7i%eABuMz`3-> zm%vkdfscib8G_03ZfO1C3;gjh3cW|l`>*8MhD^2KNSN?v*EQGbZ^;+0`tPr};J%;U{?X~DdanKEzn60h*S~+yH@eUHyXAv7|Lm%* z@A@$K+h*}xv?&000YU1@JZ@Kbki2!{w#4lRTuG{~_XCJWd)hWmLGwh!{5r6Apq%aQn8^%Vb zDu>9M=8f1o9o7P8*DO6MqrPnP5@=_{&J>zVkBm+|`#jw!3a{4Q_*J1=o$LEc>%iOU zz;QM$^^;G9!aj}e8y&lDl)|p5!{gP`yQ#Ew+m4H`92nTKb<^f;bvm=a@NfJY`Mp3# zPo}4bRCzL0J*skg_^-z67_cC}6(n-vlL+7k%7+lxj!leA9makDVp?znsz%|_`=*xw z4n-3N!WSW9CT2bgj~Ra5K>(i$b4sRfx(0AcG(`dW`$MZ9_Y-ahw?g@${5l5dk5l*_ zz;A!#KfQbY^6HH@y!CHy{z&V@)_px&Zrc3N@hcYZ_|(L^2Vc8B!G5d>8sp2e&;S0n zqGkI#)arg{O-gZ0jld6_Djyh^jIKC?zwy@3f8TBsE$i`*OE-}|v@eMRC8?hXe%@G! z;!bS{;7x!2qwT46ZYUnD13#hj*1N~xk4Ah`t!e@_libY>r5g8(_ZvXCzJ^5X_D=FV zQE7##SmTO#e0O%V6JwKM%BzE%~u~Jn*IaRk}H~uT# zK0o!dr?#5>KxpV=l=@ivmpWoMtU}CKSuiS&KKeC3;dXFqe4=uWMjZ-e08RhmKkc*s z*p*&IQJu6Z*k1`}?(Z5qFuuPMb@KL?)BT6EzVCcP@4u$Ov$w9fzmQe|FshSQg*UiU zDzvA-2$Z_Gb=p4m{pH`hwvPYq*6AZ#2OeYRs=`mdp))s7uaM-aR9CSI(>HGKx+T^g z?zdfO)2^jY+V`Sm?WV(X*ZL<4tn>W`-@5IR)G9Z;U}yt45}BV#a=^(0luZt7Md>X- z;#h)1zp{e}WrqFauvgl09`(@XcbO4OcMmYR^X6hw;_O)MRCU)mqnZyMj?bIZn@7G3(Z^eD0Y+ zKS^Jn|CMKLNxEZ#cEXSUu#ub`>%B+aVc8&wrXvyMiv)PWE0thet*B;Id?g8?|bty zc~Pswhun9z-#O=Ze)~E1T$NJvmr_0YsnlS)B{im0?%s62bE|TYzdU^r{&ke++^kg7 zCZ!IpqS`5yX{V>7GOLiF9|UD8O=*?8PxY&}D%G+@scWeIey&IPEu25e`CTYUqaF1l zqd1V^_85me3+RX1ACmU?<*4&ihpxX6&kXl_sZu4X=Vhh;`vJ0uG=`8lUC~IhTrZ>6 zBdydjgVT>D)1BFGi@|~8E5WZM@ zt4`E#(i`w^r=!xB0|=!FZ-Z#Z_*5;5q6$?#O}hk!5R zpPyNYTJ0$B3zh%KD$k;PAXNT9w7e?(j@sa>PM7AXR2TZ`BYdSi(2L4FkT&C9z~d%- zVqJ0%0&i6QW5FL<(z+E|-2Xyxv3yL~peIvhHhUxbBY}nRRbnq36{_ z_~!8uJu9_P@Tgv?%ZVS(Q%zih#_KpO2X3U4v*f_Hbb5fxodZ;UHP74B@5w!eytTl? z$u&vpKjR{m3xPd#EiyK_%7+!p;j1}UXhF@GuGmH0sLtLCRO zCo7_F;%nklq4Q@5Uh9L2bPoOjod@OdbRLx3bpC7=_>A|%htD(Grc~n^y-o{hyqKNJ zIhm92=rL)v6YEFw&Jn%MnQ!Fgl3WNcN_mhoH=+D2U0!g;K<^o}6M2e-C%A4#hH2tmae<4sx^He;~1t@3w!9(WPg?y$r zwUy`pUej+*@YL&$(fl2(e2Mz&6?|d-V>17oJ^!sW&VRV_{Bv8W+yTAw{6DS6%>0+o zcvMdC=!e zul3h`56}Be8t*E)rhixHp|^30>9038MRez!CjGewn>7C2 zJ1zRVEsFof{X&0@`-T3HX8LQ~FZ9=RyWqd6Nz>o^qV(t9#`r(O$Ny9m|LzUkp74S3 z;qNw@M}Ysl;D0cGGs;_0o>x6oP1Ac9@`e6x;Q2pj=HKWF|26HG`RDiZ{QtkP&$&tFKWC1f|HrNQ-^lZaoYeHUKRW-$_sIN# zUzz`nG!JlUBjsy6(2QM~ccV-BZY%Kh7Ch%G#^;>RD)kPcJ5Sxr^80p8Z(T0q4>biJ zW2k=<#piE_|De;)OPcB* z1l;GJ7ro-3oceA4riP=`M(V$LgVg)Z{An@@sZu3=KYUeS8bO#gN`To5`DxY zr+K_y`k(hy0{jaD_}9>UNwmem-|xi2pL@5A!#R*p{&hW0k`n~?L7ny>cL?v8e-Zu8 zy;sKPwgV2W<7Y&lHh*5Pn;w_*Zr#3D+EY8ipRv!9@IdoFhlD*D+{+q~Xu2GyJ);g#QAmJ4Kl0b|GURU{J=xn{|8X*@2j-K ze(GR?-=AkbRdXOON+efW^mx!-`^!YP0iVAR<;B(qs?b|d9#0QJxlM1sTLpd-jW5)H zjqsK4=W4y7^-}61dj8LeyhsC|Br3%QN^vW}c}t1ituDs#nH^ zd2$@az-#)X1+UeDr)CDH6>Cx?dX;fC1B)%{CD5yg?-3olCjgJd)<7=V`bYfkpgf+A zf^wTqUsMJDEajroetgc3`xQj5sAj<%%9(x;?~=ISV9JyAbLKm5C;T8@De=Q-y#vvD z?ulBCv;giv>;1im-yn_%^h$iN^-0YiM8_{ievax9e9(Un^gPgkxQj}C6irqkO@BS$ z(@_maAs|TfQ!}3kovS&9P8!(nSM55T<#_~pwI6iH`Zg!=f#u@wxyy5Ee-X9}`Dw5< zK_NMzSGS>nae)sx4&3DPq3KW4a}~NwE8%MZ7QWf5>9ck|6h8a)DDP_x%H!oiP;SeG zl~v$N+&pMsEBsTcz!!Vzu;KfBHBWhJJMf8pks|O(`v{`n!0EuVa1#EzDMijX>tW5B>MP5;d8B*E&Z$Jn0e`Vsj=^~+J5f`ov}P|S&zEQ75m%na+l-@ z{u-_qKOoP3IpPvImM8y$abtcYPnHn=7HE7aUmtIfap`n#x?k)9-se&wy}mT6*Nwi- zWJIrLHVPa`yQixH_dBKgRjH+1o=q3DUKe=2Uf1RGt?_jk{9zY~BRIq%IsE%HKh)FqB+RrHULV0T z>0!MtYPHC@6ycxjD2a2(dXYZodhUxEUjhBt^dDT5A6Tz{amDJykvK- z#Q0Cs+i41cva4}s}E>-zbfKSKQPUo9*p;+=RTtKpNH`bpw}biA5POF zfG>JY_V-ks{KM0g?;kE9{iU2=XaBHW#rubWon+Ig_=iDxJe>yRw%ic^Feta-&(aR8 z>K|(V2y`Cx`v#+aAF=Ua_=k^7^A8_4_8n`&6hW`WkUosZgU|1|csvK?HlEL5 z_;tgxyPDt={p)y~u@5sdjL)s9B2QFC>}CI)lj;wj%b9nX;MF~=$~=K?)phuOi()-V z)6{ly7xVzjnUu(xqGJ1fUX$o2_iX4R;3YpO=T`Dl@bgbc^8)fA|ML4KKli+xr$NaI z(jW6+fgL1yB7Qr5q(!cHV*esz0oVI;fJeQ|=VV_ie*k)ndM@SxyWBlDK3?LUhk3)koFct5fcV93z;0&yg!CPd%yCt+FX?<$V5f*) zAUl)kp7aZ?qq`1GilKF}>EFa7ah?X}j({C%AF3bE4*|Vf{J;=kU(JJVED@dsA6?kJ zX;Bl%KTh!Ep3mb7_$qc>A-;_tN6_9LM-K3re$qlezMrM(i3HDiyq`<@nefT>L>3;u z9`{o9UK+plA2t1Cb5h>C95d7N<2f%B`^YJz$d4ksU)v`peuF&330mLf(+S5}oI$Qn z>o&bU(d#X`zML!TK=i>QJc267#N{(miD!KVSVBI^ulxq`W5>+ zptpEB3CiQ?Bq+DEGD7WDYzJl@^;TySD&A#^SYT=hTSXJg@qi0oK+tZywXR3qk z>0y*2)XF2^5gA+fBYvrKi@yq z{&{EO{ATOVPK(27|5G_dk(PEG4tnoaOxKU^XXE1gw4cE8+4bZ5vJZfG+#u`ozb^q0#L9^HR|{)@!pG(YQee*k}m)Q{i4I_&uVbU*6`4oR(zy6mV&zF6^!&#Qpcz#;bzl(g* zSH`aqx#Rn9IL8u>H~4ayw(~-92wGRxm+qe;zlaq1ORMp(KF?sq?`Zu*zv5BRUVoM4 zKiT_|PiXmR_9aDrQ}mbT)v|`;;Qsi~FUNUXuvfeU_M`h}G~NpF!`bfR%KUu1xl`O< zU^m@>!o#_-!0Y)4TB}D(eg2Tl@|1 zR+0P^?VqR&{9LRH$e;B9^f1TS5Z{#jd-yNBPebRu1|Tf$I3@X+d_KcjQp^7S6zSK% zpHvPUrWZrcBp zlV@p%C~gltSJ{X1{bXOS^ZpaX!6XiHu8xEJIn!6No|EwgxSV@km2u269z*N~It}RH`e=W8->wb*e?QL5t7-P#Ecc83eY-X=b{{Q* z!*Ny`7v#4;E{;?}7d4L>`o+FI*Uu@*e3|et^O3fAItbr?0388Ydo0qS)CEToA9tiy&wN}q&)Q$ z;T8HE_;N3hcFpW>Q#Qu|gZ)!;E@lqk4O2N{n-q7vOWOgaKYebZ`PDjKIYLF|yaw3^ z=ufXBh@0g)jVpsViSN%(qbI>rP;Re_<=?x12)q=jAAOFM&La=O(} z;=9eTASiCpoKgD;&ux-!-X(T6&ixhOXHZ;1l>L|m=$GpodspZ& z_pI#yG-I#FAv=&FGw7!oyh3(`vd=Hmy3%^$ENYR;iH?bn5TP$o+Pu#*1wJEunfEX+ zOB;Ohd(n7nPR)2FQ6BDd?Xse@-cpVL3?|AXb(Gv_cc`y zA%)X~AMuN-?E}pcKUMdEgr5TZ#?LP(x96w%gY8>BKNvk<<=eH!t~Bzo9dd}|pgBj? z1y$VFcv|Pb$vG+tOKU$xJJAODHXQ78f*vS7W$14KTWTjjE`FKq zXUgYzw_XR@pPbn`u>1|tagBJYx(>5kXW2KyJU2QIQ#?NDyqmusLWlnR{rFbw`ZS)> zu`+7^E2GES9N{}zFM_v3U5Ihq$b1#(eVeajzCn3BK7;Zo-L+x(vL6_Q!H<~ zZ1)3axqj}&jIV&tY}=mI^!ZXvdUpXAFu z_a^F}@)PVhp~vZQxdZzAVD!AtBQv$z@-NbHnb-3C1N>O?7rXNC`CH2qnV*LT#bE-w zkj_m={D_{g)AFy&Y^q&Rqe*IeeQ%%rkOeZSM zbaAbw3u6~|LZ6ZU2l)zqB63(E`_}2@df%Gk4SAgFBK_$5&p7@TM}K+jYdfo$FWElR zX@X1VZm?ek2b{*!hWN9LOYYD3lD4N5-a6-TWV9chk#QM6$ehnL{&;6r;4~rr&G4G> zK1bupi~Ee8XM2eJn-=!#+Yq&8`N8ug`2l_Xn?MJ!s|DX2N690uLF;MGr-QDo^9yNn zeqm|&{6hYKMF$`&UavL{U+iRB!L$;4l+XFm`h&g}A|HGfIu~Q}m(Y8lmu)@7@#CO< zLL4M$Z}FcZJq$bqaS(mZZK0C+W4~uV;mJSu=KDi@zOe;+I7`S*ybtwZ2a%g|4dF2# z!LL96{EsxAl@og|F8_d(x4fMBhS5X#bZ-W{B9cn+{c=+d(gR2tKia&Pu}sSS_tJr0 zvTJkp{*%^ozW>-r@ceU~r5U&2CVY{qec`G<_U{e*4rh=&ptDL6fIa-JIX8 z;C~~(ML(5V#QBR#x&IoU zpF1~_4=jn_gnkI_e;c^sm;3z?{j>bfYPz=VGtjY|JFbS`s9pBZH2fy)mo=6mc3JX$ zi0B`7X;5y<8=<$Ld>Y+o{X%x92l{zG;1zlHLO=DMC+xg~SZDVG)Ng1Wwp=~Z^Za0F zo~voTzys}XQ{2>~E65@DPR%zWhaR5xUcy7Z+~oJxtIER^FgYs*2n)t91-$n18G4xJ!Cil()-c0VDZP9wm z{d;RZ)%uU>OVdBoC*OMu`kPVzpB4Gw{zDad#&~8U-`x-WlIC}x%x_v;p5)vBR*Uxi zdSK^0WyYuNR5~9RDtG^>zW8A~d7$-&N%GJAu#C_BXN;?;$GsBz>Lb>;$&R@Rb~)S$ z)@L8H%C+4AyEgh>+yVVw+z{j)<~_~sCHsK%l5+UmmHTn6cU;1gfA4b5^w$cQC9?a8 z-eFrQ+NT(nG>Lf17e5vopokB1J=FK_FMeLefdaM@T&iE>YGOBdNYgrIHD8neOX*{E zeL8PQ_1EfjO47ZrL4WV@=^ZI6n*8|bfidod`t{J-3DRp5)g8?>(x{;cIV z#TCMMqw@&GM7%NDW~DdC-wF5ko;vqO=MlsGkz6m{gFH=Ch{|_55U+&!M^ zw?5(fceehNcuP9Ul4qcGtN-+y35F=l*Pb zPSm+S+HVTWk;#hvO_w8YruwblPLv}MJBZT-bZXU=R2p^M~T|6>~qJ z`D|fU^H*lAyf2s5_cLeZ9Jk7@)bGKql=tFr4e-)dA1|)lpZgLjZ~ajspNYN>%H#PgD7W-nVsKP)HDsdIlezl~MyPrpBUZz6s0eo|{t9#0=ZxlJF^KA<1lUZiu20|9-SbG|dS zcU~HmUrF}PyjNKEPFrPrXWm5#a=cCC_}q7~9YlH!?{SHJj3@2G^1fMByh@xYz+0_& zmG(2ot3D?;W4xX@L%e>$!fR(0yiN&T=b>F)?8u#!>3!DxY|D?4iv5w_ME(=eh4@cp zs^9u}BEJ#*zEF8QT?FkdesinA7rF`BSAlQd>zXm$Y^f97+?~LWIPXc{3)TF{=$=)) z()N!DUqygDTJ{5-@2Y2iHvN*HQqTTudyMRjdiH0>w_j1`{!)M+*6)9Cl>0li&i&c; z#05vWzdx?6KliVr^5=;AGj=?jhUg?rr?*t=59iJKbZ`l?3H@Lmw0N>f4qMk zl-vG$wegcasbT!8! z8wvY}EeAw?Q9EaqdH)Y|@n+2H2)?hP@V#t`3)CFHnBl%q&GY_l!o2_SS7hG*KPrEd z;;1#x`?<)xu^>@8t67d4d*`EsH-L+e%b2*EazF7ag5OWp2fwW^^zDJ@exu5qO?)`_ z4(78iMm*$i?$Ijvka&F{pK6p}RpCo~bH?yhr{-h*e)>$~khve%3EwY2!t`w031p`v z)Aj86$L{Z{I`?Ov>waaO`?Ke_x6b{M-4?ck-g%V!8?AGHHa;(}bAPsJi)(+x-dG9+kUfaLo@r24}JKwt*zblgPOZZV; z9YJ|~e?hs8U)nz+{1y0pJ~%A^*n@wSe1FRQ9Q99W#xK3uC+|;Zl*Cx-YiPPjRk+@AmgT!;P>m{DkaIxfPFV=CN%J-^+ zFv;%&nmihRd#mXm1sES+XafAVgP%%NPp^mL@p>Rb?n`n1HL?yw?}UFK3+Lcyy_U&$ zEOnGc$V>CmDx z_X{-s5MS7Q1Au5B$dPzD4$5nVPjT_SnZsA+JI`LWpX?9&ds2$NpN2a>^u73VfDz#f ztRS5i%oiM4_d%k2lq$89@7?#fU6Wm34GKK>i-afo3RV=JbI74_%tgNDPyPO}aw>ke z+x@KKbBk?1kb84dis9sE4hMGrtwdxgPtSwz!R-Ls6`5WkGC;p6`7U82;0itBI0nAE z4Qkilt+Bpq?KXnnah9{~XZk)L<;Z=yS^ZrH;F0cw?m%RV`_bQlQ2HL8RDs8XORWr^ z^!>Z7UWv-XO-pe zi|6iD1;Sen-@y>MoX)VEEa>yDL-PHJpk7A4moaGK);Qn#cHw7%<4E}d|Gn+y&f9%? zK;!V7TX-~dpK^7%kix(RLi)(!Q>+%>gWP_SmK)|?Jx|_8_vPV5T5f0gegZU-xH|6r zY@uUz+abl*+H&PAH0S<%jo+<~g8TPb zkC^_UAB-N6d$qr&@nOE>gpsm-q4$jfdVqssD3}XCGG0(zL6f_ew8ybJ>UW#4EG4heR{unM)OUO^P2vQ{382|?AZmM zH*}F<`3b|L z*!$G)2ehArcnIkS_h5ECjWgpQE&;#7{kB@qcJYTGHi`c{sRsdntms=kjt|Q?;IFLb zb27b|^%P&pD)^s(+x7;TZjXWtkn-|B>UI* zOCj`ONx?@{@Y7R4d=#8M7|&ZwP(r~BV}Jmd#L zK2|$_?(TzsayRg&>qDH0o!<+;2XZg>6WH^&q118u>AYb38D@Mid}(}H^Iq}AS&1)a zhID+njpg@?^!U(@#)p3+>s|N$U*gMOzGuAs0zLk0x}VSIr1gD$&=iQr;V-jHBnWgYuz-ErQN&f~-pJDx!gODKBt^G=k2P}A0f4O_~`uzc~ zANCW7zVOHTtNkj|&auyXQalrXhkf3Y&w(B8d*n6C4O>oqt1=%?quUcJuhX>pjnVq# z=ZbxVe&H9m2Q$KFy;hy<#os}5 zzaAaeGNulsz* z`*Q8;4d10#i`|&f`*KO=tc~2t=yTTT)momd7P;l$->`z>Vgz64#X3j+?=#a|zFaZ- zD_O1_&vNAve|{`i=z9E;=m%S_XuJ5Z=Q84m3;@IE%vJ@EnL2=RR<*uF&kk;M!J@G`?uS2xQ-s{FpKBzXj)AD3|vKX}rYGa_>mzmy-BHv40dQkLQn|z0Due zKHwjF-&^|g2 zCEqO%+H3lv^F#69Eth!*@M`Q2Y%Fv{dKGcV&QmpgH9#&9eWji7_qGTRvHRSe@P(N! z34d7c!`|n%-xqrY;Tyfi$BAe>yl(P+-O&2Rt$$yrJRVO0{aEXwvKmj0<1t&dpu+h_Jzvh#}n8u_IS8GbtmyTTmO-~sLAf2{quoo{H;_1 zU(ZzUX}%8d8b8mV+@7cKqv}Ac$pKw4f6j)!Y&-QgJPtW)d=ed!UN&*o-)O%E`eKsw z1>}r8zoMUC)z7cVljs2ZzVi&eEK+s0zZy+G?79}hJG^jul3yfx zSo|Q;XWSmyaxO&IM_S^U*q;CdItMtP^`5Kv`y7Mda?gV?J<`U z@QQuHqv~HRT&l;Bw0>A_vIA63^nbS*ccbV(_aNv5vBa)#2%Wh1`s=}QTK5rMevhW3 z(;ScSS4hcIuWQ%mu#7zaw2tGbrDXqhYd;!Xw3O)2y-%?}(X|VPhtwDQychQs5FXcQ zJod_ftqSe&Ihce#Kv*jUtWTwNd=0 zR?v7C{;9_6r-iNvuR;eYrVot6&=sE-(D?M_BY#q_#X%bSEkC8x1)bh6>D=>a-Y*2*3V*HEbd@!9p4Rq-FW>n4 z!`&AOe=U4m&i&*MKyINQ>?mmcp4q7P6ZyN#3pGCydsK{*o{RZF|G4Ky`PJ~HdmiQw z+Mg2r{zlDrWM`0_0A%s`2eNxKA4cOA?mAQ{b_e*j{Wf#H7vE9CJ}SWloKXE**N-5O zJbIz#leOIcYZK|kMR{L$P#)i3P;S$Uv`?O&&~Z?1x7X`~Q3rNk8{3hDhu7+OiN*`o ziQ^^RHzdvn?+f6VNiNg-R=L>q3+l(;6BR1A`m^IDU4vS# z=D|08z)Cg}FCjcgyd@X1NZF0iWcX@q_QLbAR+6 zO1Qsyb?%S!Ot?SVFE1wJ^RVgJzTfNzmHV0Xy4mx3@F@3(b3hgG_`EJBJ~g+3}_y*110$pAS^-@386KzVGs$%KaSib-Uvz z_xJ8P_h;WHJznSjQh*=24peqHLnwPI{;-R32*|hRQAb(0!~5 zeBRd#wXYTa<5l3Z-!TjLKdSZ&1DY=2zenS* z2PFRLu99=MQ;mQ(uqZcEx~6d)WH}wBJ2Ma3=MKq1l9MbS-6!k3ZlqT!ZU9Faac~3? zbiYqk>6hDu__GSV;8>IN^rjdK@$iIp^i?8|w34hYid;8gztnQ-oF-r=vX9huI|zN7I|q^o4p0sGWKL zWGYW|hURI^lh+BVwhQToxky8QO!4_30Oz0!~UpeMpp4s?w3P)6@kDetQs^Ecsm z-=cICIUAJ6uX9jt%UN4a+j57>2SRjYwRhS74D_Tv2h+gwxFsgOCjA9=L;QGya;rbK zWDpNM2JgAX@~fjAtP`@{Pln(koFod>*NKfFY8EUW1;6^S`X?;E!udXbqHgm0SFkcdEc=ItjI}5k9T~ zXMV!D{VCc|r=-VfIL!oLTS&+TK~aejgC$4T7Z)p{`D zp1wtw8a|!bKJTJSjGTmyfqXFYTQuy$IjZ};iy)5=#_=8Dk@N8b<0QOOy_j>0wc%ap zf5D9DU+Wb)ufMpp3LOXK@pKlHTXalffc%?958@Zi^Ce8zL48~P@%KwY<2juE(9dDV zAMJPK#udJ2c#1m3VPa&&pemTR*lzzNcQzkJbC}8Ek`3K!4zio?A5@jDM1I_?$JZOM&p+ zlx|TU;rir9AdUNkp2kz3lkK@r+exnh>Wd-%u=$DOL80<^JO%t^kDJa*5x=;O@C(t~ zc8vegc=?K&vG<6`IXtX0-XA49c-r|JvhVvsCa@9Mc8uls!sH}g|DSEzG925G3ABI?83VLHe( zN?iUxlhBD$ALV@2_#UdSmNn_Py?P(#uaWwBugUnEQvVK}U-0wK<@(p+ercjVywA(& zA;@D%e~8jqFMTtmF+qOse(?{redT31UwtOe^%uWP=qgJgAa3837rOkrMtPs5=?hv8 zoJxGZ_w^?_JNZ zef)dZy)TyWrM$d`lh4aJ{rn9w4oTy^>zm2G>}@rALcbT0&D>1!dBQ8b7to8fDiR&& z_pVcgjD~C8SIAr|a4WxW-P>!y8AP0u@$J8#zE9xjwEx}$JT>TI{PBAVy@;FW@$h>F z$luK4Ji+A4`F>FNdh*{E->Bt?mRE~0XGi9_P6;?rM|CL?=zr0 z`u@QIbFSKd&mgP1dau**4Hdknr0Cv7FfrTV_}8Ix+7P11>%qUocWqLxdV05NyNm1+ zE|+t;y=9;Os61A_gvu@XA$C_#uEZWs(|lvk<+A+})Q`8jLgiL}{`cDo%Nu|Q>>f3$J{$yWnF^u_;m@& zZ9JL%gp4D0o_=3%@%Ih?GTjiOl144*8{xXSE1h0>h+Xr zo=fd|uSNa7>h*iCgNLyK_1TWc^EDV(KMkYSzvuCn&<0bMztq#0>@~k<_`Eh;@66Kh z_VSQ7IqFT6C%uvKRo}Bey2aTzmQPG*(e{ZQodi&BrE)hnyUmQxeQZGS=atBEc7(qzfX^h@#4j?nM8pYEsk?vKkic^mh5L+HR8Uh!}HXk`-f;g6N}?kG)6mdDQ-8QT@$)-N9~Pn5@ZmxtEu9VzV?-fTME zR2uR&?VT)7cx63OQzFlyS61$S=#_C;iNZ)qfxe4z^2Ovm`}>!FXJmBbgz}ED$-Q3u z1h$Ni?f^-7+sfl3wco=?yjPaTu^S)$TYJv>N;sN)z5#dE6V@wTbxv3=pXk^dAr3^uHpZe^Y)^Lb)b8ZwPc3 zSHhY1Yy$$8bNfIBVx!0}mHfye+J}8$S8fQ(_06oOwsMD9~TVK8W@rhF7>n^!F}s z<@)i_-B5f(>xD+vj}LDypQ@{EElsRP4Jk31ArNRgIl6gtySHm>>v##;b8-(Banjo| zJU&5E;OydtvoF8k%riHv-56>W{9IGqSiF4Q+Vjuacy^E(`bFW7N`JBIVltn2p;xJG z<}?3TdHtT5;|-4nvMdhP%v#`*QD!(!>=Zh|!t7_O3nkyZ;wGc@}9WXv^#jNq;EcII0C?T%8#F1X&M%;(*x47#Z0Q zyS7iBY9VQQd6Z5zl_tuXLE^es+P+S#vSZiwQ@yR_$+hEKCpLi8CxNZR%2p4skEV8v zY_oEs$?@`*T_Z!s15NQ*EF5gEsDk!RB%k^$(9GKz#74GhAV2zhRXHe;Xhj zyd5Cw(pKm;$cN=Y8U4CA_mp<%U=pu<&mv0$=0n{H@bCEwEDDEjQ%Tx zEA75AnYO9kMS)tLCR?d|-SSgGnY4yy!BTvQhlPwNvWe0bXsw}By|K|rP|t8_`^&ht zK|@kG0xbNu`O2O8SNsEZ;poILJVOtb91uL}Z66J*w9(4sq4rdvkImaE(+~ByqcpM? znuq-(HdI4H-C5opN=^THf!5#0O?VVQAQjKExMFxKD;=ZPJ<7nMPhL?P2_t!X1>How zO2?iU=xA?1^n>GD$wMTrnBebL7!KI`to)dFw}a zJ>RwS-bYKBIRkfY{ch(8UthTX`e!fN@a}&CecL3S34<{7NOn=&NKh{J$;GAZ!%(v` zcfOQ*@V<9_Gs5iQj`i<}((dxcJ!iv&C{GZl7;O%BZ8!B8NSc^m4}an=u7qI~&p0Or zx>CavJn+~u%EbIgKVtgv6PzHKPQpDwsO$bo0c{x`8OAh*B7MPDAKtQe!*s>1YX$l# zwz+!Gg&&Ap7Qc_M{F{VxaKZTS*5Qy{d*!yu48CP(iw`UA$0cum*|Tx^CNJn;q@2k& zPsu%J>3`KJmq9vAzVIPI^wIQ22jFtUP8Xfo@;(2Jp1qe;wKV{lCmTG z6U?71A#cN8glKknt4BvB%X`RM!3O1F|D~6;?Qg5nI$NduqLFPQqgRcP+c>#*Y&!R@ zD{k0$`I#?UyY})8>n_+>1(;O~`^8I$Kl(CyqH=gil_n~RM^&oqeyFi33e1m>`GJt= zB>eInr9E)WN5_XJ_nuiU!zTyDqH4H2oNu7`1RX?(-Bt_!cb z;I4z`&%gZh3;U_PySZ7~hf0gn>IxfCt6!vJy zHr1lg7lZL&_7xNI3m-QH!TK5$vDrJp^F*a%OvQvJ{P8WN;qibne9n~yfFA@mnRKER zVzhENt8#oVTr>XncjL27u5!$;_~$Pw$7h~@_W2FQ{|^*-1XCYt{zgkA!%9SyfmKGy zk?(!mi^=x0#>UGh=&l2%^h+!M@P7A;KWML9MNyqfRj_{(%-q{Nx?^m6Ic(%@FIBc5 zD#3o|P2CSwDo@|I?Bn@L6;MWXDplbP@d_1ipt|B;#l@}IQmK0$TX^rzD)xJ>3XF7> z@_4#7xzBu8M`j>i!O4@;O~seqb6;|Bu1eqEeQWy-5%@6A?I!Csw>@mt3k1d{7jGmP8OJK!US88MA1|Z`O5|xgdO(#1E{n&h8@T< zc_49HmwR?zRnb7+y=fXs0^s;nzN)f+zI(E=fn??svJ*zVO~ZcFad&LgGZ@0|$z4Gr z=GX4Y%Kq=}9hK*2C^6yrnGpRfkE727v&J7OnN<;k#V?T`uxdDb3;PzfTg3I@3Z{Iz zg`#>!b_g@=e~4pSl!hY?J@q z`qB-TCalXL(<-t)G5k&I6W&iV?aXs>v{I>3e|X-8SDe54^3}zStIxjt{I$iG;pe(_ zrZrAbUfo$yejs`^dBGUMW0T|Fl2zc)kum}mYy2|}R}NR^ugJUo_-n1LRjWlo6G5$y{%b8#QIsGeT3-lNtD^M#`~A+j_s*F+ zcXl(GMgKbaWbd5wJI~+wz0bL4R7%k&rJkXmN)4u4Q{zgxFH5g<-l!bpuS#EnzmD>q zgGx1bDRpEul}@Ql2R$8?S&amJ>BZk^PAm82s#U#3sn#=;x|YfxN>e$?U&;AvIG@^2 zalON6kK08%FGB8#N);*XIIZd?)Vthi#dz?^q*XUP(J6B=w$jFI$4lijj}dR<%hGrphUjv{Xz+8s;NxO4^B3`+c>_b9-Ob<&Ng` zxUxA7A7J>m1P&@DxEHpQmUgaDEKi#MTbDc9MCHISs!7J*)I{y6o~A*XOmPVI%xqP2DNb*kolU}br)CbP+ARD^(=CDzpc#YXkok zD4q7Ei9a3XO{*JG?`)*|v6!NXCU6o=@{;-G4Vof#wU&#kfxZoaqSx;Xf*(IvPo76Oe=I4@-)HY8orPjKG7YjTtPsY`)`_FU#oeBM4 z&-fn-`uBwXKxd#oCmY~j)89OU|3eo2-B6DI+(Dtg+(Dr~q?!J52ZjFT-6Z&*H;?;M z>Xvf)b8jHH0}gjEFK=~7e;WTgxPFNL8)zOO{=uq*|3T1yzgmR(d#V?Il_&G-LB7!6 zKA!)CnSW06-@JoNe|_FT;ydRg!Gm{J^R&=k?tRw$_m|Iq-XWR)yhAd7qCFxcz zPwu`5J)nNeL%MyE$Ee@(L&5t~Pl-NRc!i9|eM6uh$!;MlMeGttv_yO4ue3dqLVeP= zFBN@l*_AZkl{6mZgTNVo*>oQGQGRBC>HcMU9;(SnL+2A38Q*G0Q|4?=-;jAOJ=J-P z2k_$&!ed`n>TeI~7r1^p3rmrTyBS$;_cG_-IDJ{_+4O{-I1Bhx*#V*#q%W2H?4?pJ zyT^Ge<*Q9(_u!LOeJGA9QTy20W$0M&1bA!4$6pkU+PBUJWPA&E0z%{7E$fw9rpNs& zoqoPfKUKb-X1!8?6Fn^af^G-nBYZ6U#INbP!k#J8d}q3@e{QYo?LqyyUDtQbY+Y$R znGTyl8Z6($4!e6m^Vjz@|9a(cCJ}^DcFZm6j!*2z2G&A|~4ZSW# zzC01spIbWonH~qp6S8uv$d{^gcu`1)*AgGjk`9gBAv&b>R^6Ho4>|F4c)aNBfTn-Y z7mpic#&YhJ8Xuj>bgKG5x1?u$nLo+R0?{kfC-bsEj(4@K} ze(x;(V%35AEXM@jO@b@*d?qA|U zFwfV>ICPxofRZ>7Z1-!aymFQ?Jeyi6egS;c9>j0Pb$iNL#PCkhZ(5!qj%4PUI!D@< zI2!ZR(p%A_SDSUX?t~9J1xLst9pS_3zo?`y6*-a3lX_w$44c8 z8OptQItt-7o&If&_Un|362FBWw&UD+(JQJ&@CG>3kNdKe#K8wszO0|KNc=PGBfu`I zD0jHLockUvM_SQt)KAs%@V19Fe<;u~{6ghYIiefTf3IqWHlp~oNIvp^ny<> z)c&qQz!^Gx_Ix6A&VfnhrzVcmst!#zS)NCzSN{%l$9mG0c*W>Y|3L?;6wH&n%5XU)a~oIFz7vzzSBzEQ<~1(wrKjCJs%36{bur^!md~= z#{++=>1Bc7(fxa~E-W7cdk1(uh3wV^2zx+ok^Mw*F$4=0*-;2`;D0a2xts7rDg5un z-+Ad)^%;7mRyvR?_$=afP7pbLax3H;;wdM$rq!W-MRpX&+uipu-+ryC{$hRH7Q*A@ zLI}6z!avq%U*tkqf41$vzef9FFCBCHMy{xZ%2y*;7sP@Jq#ul31NJ67D=#hj#TEJA z^fe^jlger6!?X#diI}H4)TNT3bxNlFG+q=Sw86{ z@wb0U@&+l2Gp)g2?XNxeCy-~5Z&VEJlfIF5@JQSr_@6TW?fzhYz}Q_68M&(Mu7!GD z^Ayi(;m?`xg7Kl>WgG|kZ{bJxXEfdfJGfpuRpuAq&HXv|_tmQURrFH`kJo=8+|sYc zE@nI9Ch+AifR6&KGUGJx5WuL8SQ1;ofC7oZI%|07Vxk!3n z&$HzZWn4L*_u0ro7Ws82^Ji!u+V+w7#UVVNKSQ|1pYC1MK6)ehNc*JR9-f&Q#xo7=o)yeP5uG45LG%+nx0MAVjsOqt$9SIiRh2_B&k!Cz&k%0SQ|1-%6Kp(^ z{^*au?fN1&F)iT5$9Vsl#!E?!CysL=W$5xzhtIxbiRe=YFsnT}+9 z0lwYO(fA_svFBSa-F&`A`*r$Fit7W<{|dPSIlo}k#Jwaw0=%&Q*t`qVBt8oCI^@&M ziq6X*o&o0*`+&C*ef^5Z8|o<=A2Qw$9#3B(+@=pczlT2OX?@=U!d{VktnE9h1@eu? zBmDeSjdAdPWn0+KY{y~Ifrm8cAZSnZu-xy2zqk^6_Lcq???Z*<-P!i9<6Np!>lfvm z#{MV90r?%!Cu0P5-hvwp{mS`NN?*IW?LHlc3i0*@p2ruf$_MciLwNkSL%6km?!T9} zuex|0JFEJof~T;(S@s7xL2>GkPX9*hB@?e*?65yiWCOf)fvQ{8U2x+a9%m@eZ8{eE z3E}bM3gH$WRF9_L4)jm<0rgCA1*{A6SsMNKN9nMdZ%o{!L-Sj!j_>!d{CT45 zE|x#hb~qlC{V(A=cQ@)4s2_C#+vA-nUkx*UIlcjUAiu@XX*+Z9sj$W%TOn5|U&_h4 zv?DEYuGTuR-5=3U@pMp?PHV11o$IW+2!E`99-EQ=vF0E6J+bSP`+lcit`}6h=DSWu z_)gZH@VQJ~1isHOUj=f!g0Je+8=V-wN|WDR-cBb`LVD{l=n0C;_DA%H#mDad~VEdH8XZnr;Bu@7Cv-fVi6=qZoRcO}@DGM;1SZ!PC#em)-M=X|hhfC)kd z@e_VsZiBWX0=y~4TMn^4vj22@f&KBc+sAd%pW^x~pUim`bDpZ)E*3h_avAG!AxK2O zUqkqF#jXndCYuk%t_tDtd=kQKJ{P+xfNT4rr>b35ub(G&6|c8KyrAhb+O9HoO}SkK z?ty=C2a0#NEbmpPocl)3KHg8i2V~ClliEk^0eg&JVl?n0v?lm~>?Cu(!0aC`Mktx` zTM@sYr)u$3cka7OU89fn`L}lTKMZguqA1MgDZ}TiS99VVD+%&J_rrO^lc}RBVaXuIFK*jz9_HB!z59wS;U{AOotsxHt525`T zuLnZ7&HuIHn04a0B96)Jft-)c9H11)q|5nR`V1yWF72)!Z~@LUG-o>G=C9D(`+k%4>V9x_x>#=0W^$clajmg8kIA(9eAI$M%Y*C&K58g7Y|pPqruA9|z+;QN0_v zN}n6i^yB_S;0s?5#EZNE-J_V^cXF_=1UjMj>a=~L^$o>!ft$8l0y^P+DQA$&)4Elb z2VE`136lc#BX(XFPA2(;M-l+&m$1$8VDC;H5B^LIyq5dHYPNAu_p^;{U-J*mYi9A5 zdi7+jxR>B7lw0w17{Uj^w*_7mvAeiF_;9B2eoPzu6572c9%lC27el@g9djHf_miIM z+3q&@nokmf;~jz*!yoh2eB{T)JD4vb_Od;{dgC4Su1~Fahm1eOzde46XVl*R$_c#z z58_7xTblmFj||(l>m&Rd!fpDHI6w&h4~u^(K9jI7 zVD{(QjzVv9SZLRDH9V{e9hA@48Xz0v~JQ;yh&73Ua*9=%_R zJ-YCAl%(>__>X>CVCNj6w27kx{a{^bJz-Z%`7iV?$@Y&;78LF z&*XI-)DxV2wn#&5=p zxB&YtAcMs7c@OFF&G5Ylx8mL(%!~2o$hlv-zlr6Q#D{3SOuyytHbdpKd;pMZ0Nos-ir4C?f`DgK6i)XL%xt*mR7y^s~q+d37ycZXp!(5vAb-& zRc^mk+Ua~QCsIFNZyEbf*>Ovy->VDtmiCjnmFR!?Gpx7R-r(_zUeo?@3(i<9gS>L} zy`c=8x1m5y)Aco{1&_h`ANZvEuikzEvh(7@~a?i-+ z{wgd0BmZjhvSA9)wUimx^!?^yj_7 zc@s;{Qo#)2oz`9OJ|p?$Ezt5w&dbgE{m%th^CGSLQuMn*EyeQF{cj!msninAU!ou{ zk>94DkVTx|tMZ($5dUGh=FxjMh_lcha{=wr{a()Mwy!LCg6#&?^q*yEva8S*_Ej+V zNVy=N&Ra$DQCQ9|(0PMMKG8e3-=Kuu3z9oKPxefU}*w69#6!9Cb+2eE8Zu$KL#CHt0?k6CB zN%G6@Cji&#{6ny7Zb1qLBJMdLeq{T_y{!hFh`bHyeU|)Cvwe=^MCkN*w=aHdZlJ@aeBv4SG>SB2li_m&Y~^LyUP z4el}3eiglE)gQvWm5s%ZBKxSn?U8Eo&s!z<^G?IK3VK}dlfCCizLrl)k==4L;$bIg zeRhTghgj2eRlbjUSid(vBz|0lz9IXS^pbM;{T1)IW&Z6k(_hzKxsDIPn^$qTi?eR!|w=}pv8=pU(+y1=1Iqr|{?=1koGo%*}=a%T+ zW_*M`zbf^s($`mJS$?+kZ_~%)vzyPX`HlR>2>pA@6Z;G8t9?{1A`fjlTX&(bp<>AeETVuo^R)_hIxkwxa`zGiOw^Pbt@{@5P{{thg1Nnjc$LRd7YjA($&qn)uU1EQv zSNYz1x50YVBfXiRw>{F^QTSZzRm0DuUkeSS2f{;ieg02kf87`f#g%BC(&WFpZ>REY z4+Z|9ZU1mQBLa`dV_4s|e`>Wa=i0;i$Gd$w=hC?L>73Dund8UoljB^mK9?WtkIVah zwte-Eaywo1$+=K>XU2ElM62oKosZ*u;>)#vOBehTJ@hnDTnL}-`hN559)0e!gW{U= z9~Zx!>N)Up>$dAGIp{u?NQd?JXW2dO4;$Q{J->gL^J8gacD^Wkjy#A|5`pDegc_yh#Y_ckv;%!uNAswb=YE3;1SDM{;lKeKwjIeUh_ zf8-3gk0g_kdrEL#`$p7PnbRddeY%uOZ*<;D`DzuPOBqoTHybhMtsTCX(%mKd1Xca| z+4|`=T|b(*?#lfLuk)8{=!*~@FV6#b%er{^?b`x;RlH|R`?UQbe71b!e!LvdRrSj!Ed8=L zS-&j!SQWm(dw8Um7Q8Zk-Dm9|TK=~Cy~K5-Wvee{+oKHug??GCeNDp288fb1XUD-e7wCcH(-m z95Hf*?ePbxeA|On`h0QJzNine7YN^6J(^`lw%C z*>>F<8{D5QA3rq5{e7^({n_&PU*@>K|7>u7bUrhp-#m&>7C?qo;=6`lTHsGc`KJ|c zkW(6e>(jS(JnzlP<2mmA{aJ(iv;Ek2CHEKL`zHNv&RXTM?@w}c zi;izRiKpyK%6b33%u0H%)!mt0De;Tc0L3p_Krcn27Y7F^i2iWEN`9wppT0M;>3SW% zcqYX!TJWaX5vDKL<&<8c>nlg!8=1+=IRbrOw92m2{@6P4yKw&EET)#c_+w5%=NF`$ zbCLGP-UYh?a!lg{f)#Y?Q=xv#r5jmTdRH9e-7){XkYbs5+~B{kIgtPbw#;fQ!NhOX2+#elP7*k{61?d_H@Wk zp?VIz7ekKdhgR=;wp_`4By^|5{cL=bFmX4_oO+tn{N+`r9T=1ebX>-@`}mrD5dw+skRO z59qu{0l9j=aoRze@K5h?zmT%A-;(e?XZbzjozIx*`}vD>yj|YU?_64Ke_F;9fydgd z5xC_KnDO)ce7tvPzn@QjF8tPp&-WD3*WM|F@5p#_n`U%`cf6Y zC+1^61@DidRiR(}@EPuxQK~PS=X+26OrCxZY!U9kD6-ye()&TKeou3UKG*8rp!bE& zqkW)7xCieDm&co!l*TzDUB4jb^s)o8FXU$Mo;^P9WwPJnUMBlLO--^dlpT#N*QI;rP5B zC?NOQcx%hnf#{v^4`fL^Be<7)EkHBjdvi||zi%9@iy1c#4eR&G2l+l$bAL<|-^Y3@ zL1jK2W}l9x9Hm2x&b)Or{s>>#d?WQkITBCDA$+#&^L|vM{~GP9MPLQu3qMQupeoxR zRdhei5O5zsaW%aqyezw@>H>zZ1{zDdTsz`P^vx7v)}~l;U=BGj9j>Io@|p ztCX+j!S~8_JdWigy4H9~$-Tp%Voi^DodDx$Lt1`cTH!Pk@w4PB_W<}E_u8}{)%Pta zNA9Pye&-g~z(_ylcX0LZ+o$q89{d=9!IQq9whb&n>!wmOx+lH;2d4e3{7$&$zZB>m z^M!D!z;_`Y-)Y7Z%5S8%DLS!&f*-6Wjb|-xR{_0HbEJ9?&>^=P!9QPWlq8C5FTIJXDhlDGa*_Z`92HkR_>8GALT$d9cc3i@KQxC0-L&Ba}S4uH1VOihXYeew2PAE zqYCwxD!XUA<6N1ScLDk(Pia_5lMOCt74pCcyd%3 zo}?zh4St^r>L=wVVu|AaVy-4H3+^1~H)BCX@ zJ;1Rs^3bUwx3r$ft3XdIBRu4+c2u?cHT1(g$SEEV>jN~LUQ?zA^zZeO9^ihJGc!Fv z_giwi$4TzHGo5c0Ij`x@$S*C|)d?RobdeGL=LkL^f93p8@H@VN{La%l*D1eyYxr>) zru)Cda@3O7B%w%NU#;iCaw{UQEct%i=zBfZqkz7DN8fVKX~4(FXxAJs`Zm8GDt3!% zUu*m;(Df?VbC9c!$kDlxgBSmfPJR>QU^{f|5uyvRdsO?|44pjPaxraw_nPfE{65x7 z@^@H1V$2=zn~F5<7eZbmKGA{yx9NGLwm&4#6zgQcUE?Q#+h*tmw;d4 zU8)AyF8&*cO&XssNW&1+ zah8hx?2~Bx?fcDqq46kIYNs2y4wHt*M+{y;wKoCL%-v*2=fs;J$XKuHA<5H)po=j+rc0V z*u5j@AGFSNMZarD={=He|AMS{&HFudoU6Y3Jp;cKLLYwUCHPzJhZ0uVp6__4rb8`n zsC+~2ar?2>Kk@zxb*s<6i=B+~`sMd>4e9#T?u{cqmiW-@_uVqb{XL%CAI|mXNe+2y zW_GT>oT%jtU}S&ZCI_MHo@eLx?_hpTzUiJkOQ1?y3*>UGVy4 z^}QEqes4rM2nm9&Iv^W(9kJk|SB?Ji_UZL|KCd746EyxfT|<=JPQ+kjBRCxw3~rsQ`o(|96Sg1lbYPr*~^ z{dar`;_&Prc$bmf?)pgb{(l4>yMGXY4`L_et z90}q*tanL1VgIVy{!wtAgzvfT`e+bmA2fcp_OE^Mr_rjm12bvf$FlbOJ2x1`9Tls^M@4W;pCG;xgsbBUl)JY`&oueqnY4ba#DcSE;I^CD{2@X4j z?N98R=P91jwN>ISDV5gsgMEw>qWc(lKY-&Wh^ugYj54qLUqk!BU4J5cmGTj<;c;ZM z+Meu?b|j5`agO73?bh)grT0s+MjxuvxxHJZJ?y8P&h<4OQ+e6{#j5M`Ea28|V9})e zWL%gh+cN-gd)V*eb?ACcdAq4WyFEv@$8rjGIN||}H`sL)H&f~i9^bpU9olE$eQc(C z$PKeE()mNpms#*X?c=P)xOjg&dj^fSV*ewr<4DJ4f4hP&nlJ*1$5e?Y(0EC%$bC9p z|6Gkf6#GXJcszfE^=$#&aQ1-=czfx?ey$ zg{}`*od@qLN8s`E2NJMw#AKu5lt@esSu-StdekMKw9eXRHWTkpfwc>k5wh1bm^d0&XEZ`}H? zh`{65C8Qr4Pg#v8$MG32O^V}rUAW)oTGpH8`pSDLkEgo*LH6K^h9kzN;^9a_az>sX(a(?S=biG@eEV$vo$ok5hx8BmIm+D)xl^F> zY;Vmo`LOHQet;KFPY7$$S5%Je3({v?A89!kqRVSI?@yowItRFj>v_tj{fWhQ1oA9J z_Cy!_apJp*bDWwlQNP?i*K)BNvEd`A7o3OjL|%sNFLE-ciVh1M<4bdQGYQoUnKmfraASm7UO&+uS>P{qxFCSM-X&uK={QKWM+f06j zfA`yag<^lAdr+xmQeN!yKHPgmczmA5W8g-W zaz5QV8|gmG4^L;i!l&t6vHx+7o#WT)QfD0PU1RX4{fl{^58!3-3xrRAAC4#WEHZqg z{R}_7Qs@ZdApGijJ>XQv!?f{lAV~r5euu$>+QjKm-S0e9AiHcZlh^GnXZUwadE>ue z#}NKg&r3{xYB|jZ_>}b{jh(|@nQBW%kg^}_ZQ$- z&dtIq;y9ysHqwk=_)m;q@mIiC+MiSF%JG{zjmEophsNt_88_io=pZG(3-1SX#peYy zJ_9*fG2eNRdOI=SuL@qst|ofM{)yg?k$s1S&J3x5PbXC6z zXi?n}c&wcmfm?Q>_?JEVtG3VQxFYcQ_QU#C`?y98d>83I&cEmn;ay)8x^)lpysxP` zE}3@-j~`bEx5vf)CeeY8D`a2~kbF?`9ujmVos(BRzQ`l@2;_PJYI#t}exQRi^jmIP zr}H{}NYd_8Y2GhHgTh~bsOc(e_D9p&z6j*o2_#Q?&KCY!{Ggos$sLB=LOuk>V;&<<`k4o*Lok;oFt{=5P@~A`bs_A%NReGWKG*|S5@c8~h zxJ@rozxw<*P7;}qU0<&cMjhIH?QBO99`@;YiN*`oiQ^?bQ&s1K_Y^Rn5FS6D5N?e} z;w52ym18?4S2bS3>lc=fkC#N?R)2Q9q#LweB)cRBzFC21wk%#kc#wEWE>-qkK=*nh zk3sLKKS%Kr8c!r%5?SY1I*-8P*CnJQ8&Bq(x#ReZmz>!D-LEuuk?=W2BXktl|HtXP z5#5_Y@<#imUJ2;}((Bl7Q0_KKAGiDe>30UB{k^im{n7gkk^bE48{D5AH~Hh_{*IZR z?fVi3llvj@TNnRW^YVt~xWDbm{h51enNMB_Ibp_E?cAF^pW)>8k30T$G`K%2-sBY< z+@Folt;zizGu>PFXnHSC?&r9#+bn-4b=K!GZ9MihczzvdKPn%;*WmtAR)3#paDNs) z-5S4ValGlpyf1-j^c}2S`#BCxsD=|GoHo81W9`1Bo9aSjG7i z9~S>7&+%hQ(m7X(r*gixlkmOdv8r}Eb=4h#$J&Px_#lQ)soc2zCt6qDM_6*I__^+V0sqUsv_3ZjdY1HZ@yiTdRK#Bo>vQsV$T{0- z+K=d8^7u^Yn#MuvVA{tQ@jLZAXrEi;B+EgPlOhLqGakcrvHj$F*NyZz#SKLMB8Z^- zov6_-*Nf0o4SK;bCh5mdz=eM5cT>nP%W*az_@ z702O7-7ww|M;t`E-jvRF(kqJ}M|zJbr{jNkKZMKeHRUpSDhIX1_iHG9u4%eS@%wvr z`zUv!Glt@M?ANuT{VNf7M7%E;_h6RuQSS_n)29)4K>U-?D&usN&-yUCjN3sz%OOo) zD0c$YGw;7lQ#^^vr!h}nC#cA7q?;BX4gG<5M&z7epg*m16GrdSFnC{O$)88#eM^2& zL(Ycq_;n89ww$%)v`xPR?~l-tRo~kOc*G7+at@}6=YjX&z$u zvR>ML0p2cT{0ICh@x~?JuZqtU=CdLKkH=?N-@=E)8^ihXw8R@}Jdt=~gwAX_tXGbj^I6a*6i;9B z-70ZLV@H7#GpB-n*iOf|{zyL`mnYAH?h{nre&UCvnX2>!`c&N!c6drCLCFZ0C@^P?>q6FAq11d{pWqoUi7+i^{9z&03$T_i+AN zDWCJ3rC(G2?K(dn2`8CIiHZbQN|%@oQFP0 z`(#UT{`Ok7d(v`$Og3|n^d{kz_Un634(7|}p;P&cZr7Y6$XqAw>U5QJ&`W=5wKE9$ z!}t!)jUSM9%(-!aq~Jy;0Vpn z0pFp&rB~sr%y%pGS7ArywH;~SBQt1zcUbFx`&__bv)?KEj97uJ>h2xV_NNNZ4=K72 z0fW)+4LA<%pF)TuuNQxb@7e{fdVAMt{RLqzaM54AYXbhaMyo4!}9U_Wf8d5pVp7mKkKih|ETqlv8S5K^cTq~(O=d*T1(&m zwCFF9r&u>RU)+0Mjdcm(@#_-8Z9Ex0pK*M)Gxa&TrS};A)pn}!TiA{vw2~g<$8p^U zX?Q%*?8{vZRw4Rq)V`b@C;i=d-{VRr-Zc$gKl0B>k7#;vf2+?ILtn7n2R(`N1I}v5 zqw@3xR{BL&dc8@r+<-mH`sf6D8aV>}N|%Qk|3ApbIzXQifb8Jj%ha;WGD<;z(E0@B zkT&HYmwGQpxf5%b!!J)RpnAPqP@eqkTI~+O1U(JqOBfH%B!&C$CHQRo@JMOM zpBnQgOH=-6=}Lb~acb+1Gksl1)ONJS%)bL^N0Uke{;N2|Ce?|;(#yLKMbq~8bk9H{ zT>V~t+OAWU{=NL*C%<^EbNx?GJo_(R{i^pr@agp7N7RQle)ho0XI=gCFK1ryy0;^K zm+(1|A54HMbs)Ka(C^`?eFIYy35}HYmA3AgDkF)q(p&dTOn{`;?Hey`ohl7&+P7ib zHmr0|W@_Ks;#ASf44_JF+UF0UfIr67{NYKaRJ6HO+E@p=9U30pt_wtJR(!1~6Ra9> z9cMWefeQqfZ`CIl+l_vd?#ENFGx#MrJXRk@5A)ym4MW$@E#z@JkEeqM3XA1_V#<9oI+pMXKG zoERJBbNSRkF#am_FZ{+g;djsKvpiaQ!|2FME^F*mf7_MG1g_b}9|GURO|dk!V@+{ngqn)|R2i0J|LDBK zHQ+~+;peLwaDQWIYKp`cX}eupK#K4Qz zDF2S-oEVrG+dDi|8X6E98<-g0S~^n~+g_X;Kna1E%t#ZcJ2kd-Y{cI)zI~!NRPv|x zVVS17N<$m=mL_(TibHlA zV_@zg6oY}EJ2tUtqBuGUZ81ECH+>R6shfYi`^v-;$@BZ=Wb?KwlIvsr&nayinajn8BlhDgsaX`bg*AXA}cTo>Vd( z2HL+hhW?TFlj}^4=&=0BJzKYyCd=%PMW$etC)WRxNs#YomGvJVOV4f|% zO~7&8D{UWFEwXFR$eI53($u<%?UNfp%2U8r)xuT}u%D)PjqbE^%aaqOZF@$CP63+Y zv6w&7lBgo~Pgd8h)YH!K2mHS(gweN4 z-CO>pJf~)=Oh!lbD|%YL>O%BY8r=?)Z2f8L$F?u6(OiuF%15j0y`nnpQ@Kk*wOSz? z3BG>SnV?)+vQF>?Kfiz63vX@jO}a0G1lv-OJI`dj=1 zcG=kEFg!mWmKYXb%pVzxs-&@G@=^P0(9hPL$@E1%?kbM%hvs1aiVelcPB`7j|$lf)@T+ry{ZOFi-*bXz#*f|%M$4NvmGVquht@sobU^x`KlNiv;;dljLs z`zHmoZFqDT!z>d&$@bf0cYPeT_VBj-8!HvN9&xC@Vw+d*y6ErYmL-^PRQ^rDxZf}_ zynQ%gmtL_mnZdUWZ426p`*PWvFMcvE-{gh;iTYZGVSY9f8!O5X;ms?7*qwu5pPdi!pf3t^fXnT_>8>;~$r1B5i0} z5(ixpKau`v3s6aM(N;_yUB83E@?1+*UqH<@(G3xu9R?6;$_xiimvFuAC5 zlHtEh*3VBp`P4=e9|#qF8Kyqka$jp%hLtE&Ru+tsqYpjc$7Bat;}fM*b=M(N2GHa$ z{_lVO(T?OIipnGv!TwG-bARjDuJMsl)W{ntCfg55ZQp)#&kvH|>6@0{nM*1F7?nvX z!W--f1zHkd1WH`o8g;+%#Nvl{*RbE+8f~O&z?13w7Z2*l4a6%rc`DIVtmx^%w{+ZC zRv+fKU1wrG=TSRsX$5CIKGvxO!mL`P9+;a zW=?^gCx>~G3@Jh=@>WBW-@YG~!q++eBm|ejrARPD1S}^O{uXz5+ zK|66@&i=}CE{e-HdEfil%WpE@ { + CircuitWrapper::Base(circuit) => { println!( "Type: basic. Id: {:?} ({})", circuit.numeric_circuit_type(), diff --git a/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs b/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs index 9817362c9fea..a989fff17e48 100644 --- a/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs +++ b/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs @@ -166,7 +166,6 @@ pub mod gpu_prover { recursion_layer_proof_config(), circuit.numeric_circuit_type(), ), - CircuitWrapper::BasePartial(_) => panic!("Invalid CircuitWrapper received"), }; let started_at = Instant::now(); @@ -212,7 +211,6 @@ pub mod gpu_prover { CircuitWrapper::Recursive(_) => FriProofWrapper::Recursive( ZkSyncRecursionLayerProof::from_inner(circuit_id, proof), ), - CircuitWrapper::BasePartial(_) => panic!("Received partial base circuit"), }; ProverArtifacts::new(prover_job.block_number, proof_wrapper) } diff --git a/prover/crates/bin/prover_fri/src/prover_job_processor.rs b/prover/crates/bin/prover_fri/src/prover_job_processor.rs index 5e8740d1b728..fe7a5d7f7692 100644 --- a/prover/crates/bin/prover_fri/src/prover_job_processor.rs +++ b/prover/crates/bin/prover_fri/src/prover_job_processor.rs @@ -112,7 +112,6 @@ impl Prover { CircuitWrapper::Recursive(recursive_circuit) => { Self::prove_recursive_layer(job.job_id, recursive_circuit, config, setup_data) } - CircuitWrapper::BasePartial(_) => panic!("Received partial base circuit"), }; ProverArtifacts::new(job.block_number, proof) } diff --git a/prover/crates/bin/prover_fri/src/utils.rs b/prover/crates/bin/prover_fri/src/utils.rs index e4328dde8ddb..78bd23bae958 100644 --- a/prover/crates/bin/prover_fri/src/utils.rs +++ b/prover/crates/bin/prover_fri/src/utils.rs @@ -128,7 +128,6 @@ pub fn verify_proof( verify_recursion_layer_proof::(recursive_circuit, proof, vk), recursive_circuit.numeric_circuit_type(), ), - CircuitWrapper::BasePartial(_) => panic!("Invalid CircuitWrapper received"), }; METRICS.proof_verification_time[&circuit_id.to_string()].observe(started_at.elapsed()); diff --git a/prover/crates/bin/witness_generator/src/rounds/basic_circuits/utils.rs b/prover/crates/bin/witness_generator/src/rounds/basic_circuits/utils.rs index 690bb8820981..a4eb195b74f8 100644 --- a/prover/crates/bin/witness_generator/src/rounds/basic_circuits/utils.rs +++ b/prover/crates/bin/witness_generator/src/rounds/basic_circuits/utils.rs @@ -53,7 +53,7 @@ pub(super) async fn generate_witness( input.merkle_paths, input.previous_batch_metadata.root_hash.0, ); - let geometry_config = ProtocolGeometry::V1_5_0.config(); + let geometry_config = ProtocolGeometry::latest().config(); let mut hasher = DefaultHasher::new(); geometry_config.hash(&mut hasher); tracing::info!( diff --git a/prover/crates/bin/witness_vector_generator/src/generator.rs b/prover/crates/bin/witness_vector_generator/src/generator.rs index 646dd8ffda78..9abba9e02048 100644 --- a/prover/crates/bin/witness_vector_generator/src/generator.rs +++ b/prover/crates/bin/witness_vector_generator/src/generator.rs @@ -79,9 +79,6 @@ impl WitnessVectorGenerator { CircuitWrapper::Recursive(recursive_circuit) => { recursive_circuit.synthesis::(&finalization_hints) } - CircuitWrapper::BasePartial(_) => { - panic!("Invalid circuit wrapper received for witness vector generation"); - } }; Ok(WitnessVectorArtifacts::new(cs.witness.unwrap(), job)) } diff --git a/prover/crates/lib/circuit_prover_service/README.md b/prover/crates/lib/circuit_prover_service/README.md index 3cc8a80e966d..6d43642c6abe 100644 --- a/prover/crates/lib/circuit_prover_service/README.md +++ b/prover/crates/lib/circuit_prover_service/README.md @@ -31,10 +31,7 @@ to maximize usage. ### Job Picker -Interacts with the database to get a job (as described above), loads the data from object store and then hydrates the -circuit. In current implementation, Ram Permutation circuits are sent separately in order to save RAM in basic witness -generation & reduce the amount of storage used by object store. A further optimization will be introduced later on, -which will remove the necessity of witness hydration on circuits. +Interacts with the database to get a job (as described above) and loads the data from object store. ### Executor @@ -82,7 +79,7 @@ sequenceDiagram end wvg_p-->>db: Get job metadata wvg_p-->>os: Get circuit - wvg_p-->>wvg_p: Hydrate circuit & get finalization hints + wvg_p-->>wvg_p: Get finalization hints wvg_p-->>wvg_e: Provide metadata & circuit wvg_e-->>wvg_e: Synthesize witness vector wvg_e-->>wvg_s: Provide metadata & witness vector & circuit diff --git a/prover/crates/lib/circuit_prover_service/src/gpu_circuit_prover/gpu_circuit_prover_job_saver.rs b/prover/crates/lib/circuit_prover_service/src/gpu_circuit_prover/gpu_circuit_prover_job_saver.rs index 0ba28a0d9f5a..e3a61bf3e4b3 100644 --- a/prover/crates/lib/circuit_prover_service/src/gpu_circuit_prover/gpu_circuit_prover_job_saver.rs +++ b/prover/crates/lib/circuit_prover_service/src/gpu_circuit_prover/gpu_circuit_prover_job_saver.rs @@ -97,7 +97,7 @@ impl JobSaver for GpuCircuitProverJobSaver { } Err(error) => { let error_message = error.to_string(); - tracing::error!("GPU circuit prover failed: {:?}", error_message); + tracing::error!("GPU circuit prover failed: {:?}", error); self.connection_pool .connection() .await diff --git a/prover/crates/lib/circuit_prover_service/src/types/circuit.rs b/prover/crates/lib/circuit_prover_service/src/types/circuit.rs index e741e4c37136..d5b270f86087 100644 --- a/prover/crates/lib/circuit_prover_service/src/types/circuit.rs +++ b/prover/crates/lib/circuit_prover_service/src/types/circuit.rs @@ -37,9 +37,7 @@ type Extension = GoldilocksExt2; type Proof = CryptoProof; /// Hydrated circuit. -/// Circuits are currently dehydrated for memory and storage reasons. -/// Circuits are hydrated on the flight where necessary. -// TODO: This enum will be merged with CircuitWrapper once BWG changes are done. +// TODO: This enum should be merged with CircuitWrapper. #[allow(clippy::large_enum_variant)] pub enum Circuit { Base(ZkSyncBaseLayerCircuit), diff --git a/prover/crates/lib/circuit_prover_service/src/witness_vector_generator/witness_vector_generator_job_picker.rs b/prover/crates/lib/circuit_prover_service/src/witness_vector_generator/witness_vector_generator_job_picker.rs index b83baa8bbd35..fc275b8505c4 100644 --- a/prover/crates/lib/circuit_prover_service/src/witness_vector_generator/witness_vector_generator_job_picker.rs +++ b/prover/crates/lib/circuit_prover_service/src/witness_vector_generator/witness_vector_generator_job_picker.rs @@ -5,18 +5,11 @@ use async_trait::async_trait; use zksync_object_store::ObjectStore; use zksync_prover_dal::{ConnectionPool, Prover}; use zksync_prover_fri_types::{ - circuit_definitions::{ - boojum::{ - cs::implementations::setup::FinalizationHintsForProver, - gadgets::queue::full_state_queue::FullStateCircuitQueueRawWitness, - }, - circuit_definitions::base_layer::ZkSyncBaseLayerCircuit, - }, - keys::RamPermutationQueueWitnessKey, - CircuitAuxData, CircuitWrapper, ProverServiceDataKey, RamPermutationQueueWitness, + circuit_definitions::boojum::cs::implementations::setup::FinalizationHintsForProver, + CircuitWrapper, ProverServiceDataKey, }; use zksync_prover_job_processor::JobPicker; -use zksync_types::{prover_dal::FriProverJobMetadata, L1BatchNumber}; +use zksync_types::prover_dal::FriProverJobMetadata; use crate::{ metrics::WITNESS_VECTOR_GENERATOR_METRICS, @@ -51,57 +44,6 @@ impl WitnessVectorGeneratorJobPicker { metadata_loader, } } - - /// Hydrates job data with witness information which is stored separately. - /// This is done in order to save RAM & storage. - // TODO: Once new BWG is done, this won't be necessary. - async fn fill_witness( - &self, - circuit: ZkSyncBaseLayerCircuit, - aux_data: CircuitAuxData, - l1_batch_number: L1BatchNumber, - ) -> anyhow::Result { - if let ZkSyncBaseLayerCircuit::RAMPermutation(circuit_instance) = circuit { - let sorted_witness_key = RamPermutationQueueWitnessKey { - block_number: l1_batch_number, - circuit_subsequence_number: aux_data.circuit_subsequence_number as usize, - is_sorted: true, - }; - let sorted_witness: RamPermutationQueueWitness = self - .object_store - .get(sorted_witness_key) - .await - .context("failed to load sorted witness key")?; - - let unsorted_witness_key = RamPermutationQueueWitnessKey { - block_number: l1_batch_number, - circuit_subsequence_number: aux_data.circuit_subsequence_number as usize, - is_sorted: false, - }; - let unsorted_witness: RamPermutationQueueWitness = self - .object_store - .get(unsorted_witness_key) - .await - .context("failed to load unsorted witness key")?; - - let mut witness = circuit_instance.witness.take().unwrap(); - witness.unsorted_queue_witness = FullStateCircuitQueueRawWitness { - elements: unsorted_witness.witness.into(), - }; - witness.sorted_queue_witness = FullStateCircuitQueueRawWitness { - elements: sorted_witness.witness.into(), - }; - circuit_instance.witness.store(Some(witness)); - - return Ok(Circuit::Base(ZkSyncBaseLayerCircuit::RAMPermutation( - circuit_instance, - ))); - } - Err(anyhow::anyhow!( - "unexpected circuit received with partial witness, expected RAM permutation, got {:?}", - circuit.short_description() - )) - } } #[async_trait] @@ -130,10 +72,6 @@ impl JobPicker for WitnessVectorGeneratorJobPic let circuit = match circuit_wrapper { CircuitWrapper::Base(circuit) => Circuit::Base(circuit), CircuitWrapper::Recursive(circuit) => Circuit::Recursive(circuit), - CircuitWrapper::BasePartial((circuit, aux_data)) => self - .fill_witness(circuit, aux_data, metadata.block_number) - .await - .context("failed to fill witness")?, }; let key = ProverServiceDataKey { diff --git a/prover/crates/lib/prover_fri_types/src/keys.rs b/prover/crates/lib/prover_fri_types/src/keys.rs index 26aa679b4a94..96865aee9f52 100644 --- a/prover/crates/lib/prover_fri_types/src/keys.rs +++ b/prover/crates/lib/prover_fri_types/src/keys.rs @@ -49,11 +49,3 @@ pub struct CircuitKey<'a> { pub circuit_type: &'a str, pub aggregation_round: AggregationRound, } - -/// Storage key for a [`RamPermutationQueueWitness`]. -#[derive(Debug, Clone, Copy)] -pub struct RamPermutationQueueWitnessKey { - pub block_number: L1BatchNumber, - pub circuit_subsequence_number: usize, - pub is_sorted: bool, -} diff --git a/prover/crates/lib/prover_fri_types/src/lib.rs b/prover/crates/lib/prover_fri_types/src/lib.rs index 5b7a54a31052..818e1a5fab95 100644 --- a/prover/crates/lib/prover_fri_types/src/lib.rs +++ b/prover/crates/lib/prover_fri_types/src/lib.rs @@ -9,12 +9,10 @@ use circuit_definitions::{ ZkSyncRecursionLayerProof, ZkSyncRecursionLayerStorageType, ZkSyncRecursiveLayerCircuit, }, }, - encodings::memory_query::MemoryQueueStateWitnesses, zkevm_circuits::scheduler::{ aux::BaseLayerCircuitType, block_header::BlockAuxilaryOutputWitness, }, }; -use keys::RamPermutationQueueWitnessKey; use zksync_object_store::{serialize_using_bincode, Bucket, StoredObject}; use zksync_types::{ basic_fri_types::AggregationRound, @@ -30,24 +28,18 @@ pub mod queue; pub const MAX_COMPRESSION_CIRCUITS: u8 = 5; // THESE VALUES SHOULD BE UPDATED ON ANY PROTOCOL UPGRADE OF PROVERS -pub const PROVER_PROTOCOL_VERSION: ProtocolVersionId = ProtocolVersionId::Version26; +pub const PROVER_PROTOCOL_VERSION: ProtocolVersionId = ProtocolVersionId::Version27; pub const PROVER_PROTOCOL_PATCH: VersionPatch = VersionPatch(0); pub const PROVER_PROTOCOL_SEMANTIC_VERSION: ProtocolSemanticVersion = ProtocolSemanticVersion { minor: PROVER_PROTOCOL_VERSION, patch: PROVER_PROTOCOL_PATCH, }; -#[derive(serde::Serialize, serde::Deserialize, Clone)] -pub struct CircuitAuxData { - pub circuit_subsequence_number: u32, -} - #[derive(serde::Serialize, serde::Deserialize, Clone)] #[allow(clippy::large_enum_variant)] pub enum CircuitWrapper { Base(ZkSyncBaseLayerCircuit), Recursive(ZkSyncRecursiveLayerCircuit), - BasePartial((ZkSyncBaseLayerCircuit, CircuitAuxData)), } impl StoredObject for CircuitWrapper { @@ -344,27 +336,3 @@ impl StoredObject for AuxOutputWitnessWrapper { pub fn get_current_pod_name() -> String { env::var("POD_NAME").unwrap_or("UNKNOWN_POD".to_owned()) } - -#[derive(serde::Serialize, serde::Deserialize)] -pub struct RamPermutationQueueWitness { - pub witness: MemoryQueueStateWitnesses, -} - -impl StoredObject for RamPermutationQueueWitness { - const BUCKET: Bucket = Bucket::ProverJobsFri; - type Key<'a> = RamPermutationQueueWitnessKey; - - fn encode_key(key: Self::Key<'_>) -> String { - let RamPermutationQueueWitnessKey { - block_number, - circuit_subsequence_number, - is_sorted, - } = key; - format!( - "queue_witness_{block_number}_{circuit_subsequence_number}_{}.bin", - is_sorted as u64 - ) - } - - serialize_using_bincode!(); -} diff --git a/prover/crates/lib/prover_fri_utils/src/lib.rs b/prover/crates/lib/prover_fri_utils/src/lib.rs index 341eaa213698..105c04b1c4fe 100644 --- a/prover/crates/lib/prover_fri_utils/src/lib.rs +++ b/prover/crates/lib/prover_fri_utils/src/lib.rs @@ -4,18 +4,14 @@ use zksync_object_store::ObjectStore; use zksync_prover_dal::{Connection, Prover, ProverDal}; use zksync_prover_fri_types::{ circuit_definitions::{ - boojum::gadgets::queue::full_state_queue::FullStateCircuitQueueRawWitness, - circuit_definitions::{ - base_layer::ZkSyncBaseLayerCircuit, - recursion_layer::{ - base_circuit_type_into_recursive_leaf_circuit_type, ZkSyncRecursionLayerStorageType, - }, + circuit_definitions::recursion_layer::{ + base_circuit_type_into_recursive_leaf_circuit_type, ZkSyncRecursionLayerStorageType, }, zkevm_circuits::scheduler::aux::BaseLayerCircuitType, }, get_current_pod_name, - keys::{FriCircuitKey, RamPermutationQueueWitnessKey}, - CircuitWrapper, ProverJob, ProverServiceDataKey, RamPermutationQueueWitness, + keys::FriCircuitKey, + CircuitWrapper, ProverJob, ProverServiceDataKey, }; use zksync_types::{ basic_fri_types::{AggregationRound, CircuitIdRoundTuple}, @@ -69,48 +65,7 @@ pub async fn fetch_next_circuit( .get(circuit_key) .await .unwrap_or_else(|err| panic!("{err:?}")); - let input = match circuit_wrapper { - a @ CircuitWrapper::Base(_) => a, - a @ CircuitWrapper::Recursive(_) => a, - CircuitWrapper::BasePartial((circuit, aux_data)) => { - // inject additional data - if let ZkSyncBaseLayerCircuit::RAMPermutation(circuit_instance) = circuit { - let sorted_witness_key = RamPermutationQueueWitnessKey { - block_number: prover_job.block_number, - circuit_subsequence_number: aux_data.circuit_subsequence_number as usize, - is_sorted: true, - }; - - let sorted_witness_handle = blob_store.get(sorted_witness_key); - - let unsorted_witness_key = RamPermutationQueueWitnessKey { - block_number: prover_job.block_number, - circuit_subsequence_number: aux_data.circuit_subsequence_number as usize, - is_sorted: false, - }; - - let unsorted_witness_handle = blob_store.get(unsorted_witness_key); - - let unsorted_witness: RamPermutationQueueWitness = - unsorted_witness_handle.await.unwrap(); - let sorted_witness: RamPermutationQueueWitness = - sorted_witness_handle.await.unwrap(); - - let mut witness = circuit_instance.witness.take().unwrap(); - witness.unsorted_queue_witness = FullStateCircuitQueueRawWitness { - elements: unsorted_witness.witness.into(), - }; - witness.sorted_queue_witness = FullStateCircuitQueueRawWitness { - elements: sorted_witness.witness.into(), - }; - circuit_instance.witness.store(Some(witness)); - - CircuitWrapper::Base(ZkSyncBaseLayerCircuit::RAMPermutation(circuit_instance)) - } else { - panic!("Unexpected circuit received with partial witness"); - } - } - }; + let input = circuit_wrapper; let label = CircuitLabels { circuit_type: prover_job.circuit_id, @@ -143,9 +98,7 @@ pub fn get_base_layer_circuit_id_for_recursive_layer(recursive_layer_circuit_id: pub fn get_numeric_circuit_id(circuit_wrapper: &CircuitWrapper) -> u8 { match circuit_wrapper { - CircuitWrapper::Base(circuit) | CircuitWrapper::BasePartial((circuit, _)) => { - circuit.numeric_circuit_type() - } + CircuitWrapper::Base(circuit) => circuit.numeric_circuit_type(), CircuitWrapper::Recursive(circuit) => circuit.numeric_circuit_type(), } } diff --git a/prover/data/historical_data/0.27.0/commitments.json b/prover/data/historical_data/0.27.0/commitments.json new file mode 100644 index 000000000000..ff89f17cc723 --- /dev/null +++ b/prover/data/historical_data/0.27.0/commitments.json @@ -0,0 +1,7 @@ +{ + "leaf": "0xf9664f4324c1400fa5c3822d667f30e873f53f1b8033180cd15fe41c1e2355c6", + "node": "0xf520cd5b37e74e19fdb369c8d676a04dce8a19457497ac6686d2bb95d94109c8", + "scheduler": "0xe6ba9d6b042440c480fa1c7182be32387db6e90281e82f37398d3f98f63f098a", + "snark_wrapper": "0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2", + "fflonk_snark_wrapper": "0x560b19cfd6bcf1049c6409c18d81db288ab7639db080ed3b48df17ddfbcc4666" +} \ No newline at end of file diff --git a/prover/data/historical_data/0.27.0/verification_snark_key.json b/prover/data/historical_data/0.27.0/verification_snark_key.json new file mode 100644 index 000000000000..acb7e3fe8969 --- /dev/null +++ b/prover/data/historical_data/0.27.0/verification_snark_key.json @@ -0,0 +1,399 @@ +{ + "n": 16777215, + "num_inputs": 1, + "state_width": 4, + "num_witness_polys": 0, + "gate_setup_commitments": [ + { + "x": [ + 14543631136906534221, + 11532161447842416044, + 11114175029926010938, + 1228896787564295039 + ], + "y": [ + 13293602262342424489, + 8897930584356943159, + 13256028170406220369, + 3214939367598363288 + ], + "infinity": false + }, + { + "x": [ + 11488992528554025682, + 12016824828223971094, + 11942004360057333370, + 316831626296641307 + ], + "y": [ + 304673622018339856, + 7139037552557818730, + 12475560967982555143, + 1055588351918295250 + ], + "infinity": false + }, + { + "x": [ + 2274984630539920017, + 5398167177582250136, + 16440396753384808945, + 1037682586893548769 + ], + "y": [ + 10168660308952593373, + 16526369642614237721, + 569062739734175056, + 155645558476901406 + ], + "infinity": false + }, + { + "x": [ + 14005362797509427677, + 2662603874351919260, + 14261489165672308143, + 1470528288349794782 + ], + "y": [ + 11144229651170108862, + 11439490264313454962, + 114993091474760680, + 1037267173208738614 + ], + "infinity": false + }, + { + "x": [ + 10726125240955612787, + 1916320162213728495, + 1058608086768277905, + 1651114031905829493 + ], + "y": [ + 13237242732587628574, + 4774776044666137690, + 14401013098807103799, + 2514139699916115771 + ], + "infinity": false + }, + { + "x": [ + 14434760601334248377, + 5316938318287831815, + 6221098547630910324, + 980422841280734466 + ], + "y": [ + 9201886393750447942, + 3840149540273146267, + 18179910191622136829, + 1563809864380914603 + ], + "infinity": false + }, + { + "x": [ + 9586697317366528906, + 2325800863365957883, + 1243781259615311278, + 3048012003267036960 + ], + "y": [ + 612821620743617231, + 1510385666449513894, + 9368337288452385056, + 2949736812933507034 + ], + "infinity": false + }, + { + "x": [ + 11830690209042008764, + 11761396005838073769, + 18271188400274886574, + 2896734446482773484 + ], + "y": [ + 1890606551566554401, + 10220931290312275762, + 3256711195869515344, + 2466626485328709457 + ], + "infinity": false + } + ], + "gate_selectors_commitments": [ + { + "x": [ + 10865727529243127085, + 4083978853392244827, + 14303622309482785753, + 2263042021033673595 + ], + "y": [ + 3019601017411802529, + 880444282195426618, + 9998743525359587628, + 2891421025832200233 + ], + "infinity": false + }, + { + "x": [ + 5208608554346323426, + 8575970970223832576, + 2966209169082345602, + 239576408267301488 + ], + "y": [ + 17715084817752316452, + 2726293100894160682, + 17920596859559317135, + 3485576345363305439 + ], + "infinity": false + } + ], + "permutation_commitments": [ + { + "x": [ + 14761045450946573029, + 17157644513453531531, + 2555518804134782053, + 1415819224310783987 + ], + "y": [ + 17265629196749977462, + 4128711855633066822, + 8435602817910411328, + 1408116296902303196 + ], + "infinity": false + }, + { + "x": [ + 3307267823832528482, + 2406249680085831639, + 9091964031261402109, + 2846274000290842933 + ], + "y": [ + 17374905554931807856, + 6690578002079222163, + 11809376320193686210, + 2676076649992974574 + ], + "infinity": false + }, + { + "x": [ + 3159118708748226574, + 5508845413629697013, + 13350869305506486049, + 689297560178790472 + ], + "y": [ + 15696011303896469684, + 12551611148155235140, + 14438660833518031207, + 425021756161657108 + ], + "infinity": false + }, + { + "x": [ + 18349397811516917436, + 4473982696343317918, + 13070312540813307819, + 2109468484629113245 + ], + "y": [ + 13254534552549721008, + 17388411854346636521, + 17875890960520499518, + 1062184221180884481 + ], + "infinity": false + } + ], + "total_lookup_entries_length": 1787472, + "lookup_selector_commitment": { + "x": [ + 9324906502432882695, + 14977861238256290580, + 12538013124354067293, + 3408438202312564138 + ], + "y": [ + 14942105932194201701, + 12210090881357612547, + 14774705021036784261, + 2531694948512337448 + ], + "infinity": false + }, + "lookup_tables_commitments": [ + { + "x": [ + 10873859091125335643, + 3906092213625635374, + 17046157606087980048, + 3193402705223440293 + ], + "y": [ + 10158946293873382504, + 2171386304067884865, + 6918663094168980658, + 350601565475975409 + ], + "infinity": false + }, + { + "x": [ + 12822112641313049260, + 3646552465186399021, + 10324071010773924047, + 2209084192380614662 + ], + "y": [ + 11045141628975531869, + 12589678537679955590, + 3065046617868727674, + 2099447669854151830 + ], + "infinity": false + }, + { + "x": [ + 11395032673621937545, + 3000063650268118516, + 7857619430005721792, + 805706808484810738 + ], + "y": [ + 6817063666434679427, + 1646386051225388537, + 4677946977082722827, + 1369650305976868514 + ], + "infinity": false + }, + { + "x": [ + 2885179371868476351, + 159944842081142878, + 6092294387055034894, + 213843603626505240 + ], + "y": [ + 11868113133779277990, + 8509646480531194854, + 14088068011597639414, + 707070630614027545 + ], + "infinity": false + } + ], + "lookup_table_type_commitment": { + "x": [ + 1732877442096985191, + 7537030715658833452, + 14073502080301311448, + 2178792007727681099 + ], + "y": [ + 8513095304113652904, + 6581396660744182779, + 13939755637576387431, + 2477157044961106453 + ], + "infinity": false + }, + "non_residues": [ + [ + 5, + 0, + 0, + 0 + ], + [ + 7, + 0, + 0, + 0 + ], + [ + 10, + 0, + 0, + 0 + ] + ], + "g2_elements": [ + { + "x": { + "c0": [ + 5106727233969649389, + 7440829307424791261, + 4785637993704342649, + 1729627375292849782 + ], + "c1": [ + 10945020018377822914, + 17413811393473931026, + 8241798111626485029, + 1841571559660931130 + ] + }, + "y": { + "c0": [ + 5541340697920699818, + 16416156555105522555, + 5380518976772849807, + 1353435754470862315 + ], + "c1": [ + 6173549831154472795, + 13567992399387660019, + 17050234209342075797, + 650358724130500725 + ] + }, + "infinity": false + }, + { + "x": { + "c0": [ + 9089143573911733168, + 11482283522806384523, + 13585589533905622862, + 79029415676722370 + ], + "c1": [ + 5692040832573735873, + 16884514497384809355, + 16717166481813659368, + 2742131088506155463 + ] + }, + "y": { + "c0": [ + 9604638503594647125, + 1289961608472612514, + 6217038149984805214, + 2521661352385209130 + ], + "c1": [ + 17168069778630926308, + 11309277837895768996, + 15154989611154567813, + 359271377050603491 + ] + }, + "infinity": false + } + ] +} \ No newline at end of file diff --git a/prover/data/keys/commitments.json b/prover/data/keys/commitments.json index ff89f17cc723..961d5220772a 100644 --- a/prover/data/keys/commitments.json +++ b/prover/data/keys/commitments.json @@ -1,7 +1,7 @@ { - "leaf": "0xf9664f4324c1400fa5c3822d667f30e873f53f1b8033180cd15fe41c1e2355c6", + "leaf": "0x5a11d22ec76c8af17e5945e8f82f97b2e076a5654eb5807ed210a54fce7093f0", "node": "0xf520cd5b37e74e19fdb369c8d676a04dce8a19457497ac6686d2bb95d94109c8", - "scheduler": "0xe6ba9d6b042440c480fa1c7182be32387db6e90281e82f37398d3f98f63f098a", - "snark_wrapper": "0x14f97b81e54b35fe673d8708cc1a19e1ea5b5e348e12d31e39824ed4f42bbca2", - "fflonk_snark_wrapper": "0x560b19cfd6bcf1049c6409c18d81db288ab7639db080ed3b48df17ddfbcc4666" + "scheduler": "0x7e4ad3251ad738ed8a6acdf7a34d9dfe378ad516efcb098448cf14d5f2c0c90e", + "snark_wrapper": "0xf688611ad4e0ef20184a89e7b593493dffcefe92071f85c1a0b94d4852c4f82f", + "fflonk_snark_wrapper": "0x941fd36f78a5ba753dbbe65b9123a43ae833405fafd03b5149b959eee766e03c" } \ No newline at end of file diff --git a/prover/data/keys/fflonk_verification_snark_key.json b/prover/data/keys/fflonk_verification_snark_key.json index 1a3e574087f9..0fa88b68741b 100644 --- a/prover/data/keys/fflonk_verification_snark_key.json +++ b/prover/data/keys/fflonk_verification_snark_key.json @@ -2,16 +2,16 @@ "n": 8388607, "c0": { "x": [ - 567544074442165672, - 13354717851181412284, - 3162323342193286480, - 2325730709376302348 + 17655115125307728133, + 3289976927456367870, + 18041775612642266827, + 1471631491568711289 ], "y": [ - 6823582351851933504, - 10833859904006380911, - 14065230796268133554, - 2923459656706414695 + 15338821962727434493, + 1194855086586086768, + 16737925382100132506, + 2731357540660744509 ], "infinity": false }, diff --git a/prover/data/keys/finalization_hints_basic_1.bin b/prover/data/keys/finalization_hints_basic_1.bin index b1623bfe3ef1d593a5eb321903de9daafddce42f..d7a561cb72d0107906ad9f4e0da90410143aa205 100644 GIT binary patch literal 276 zcmZQ%fB+6C%><mfbp5p F_yAH#w+mmfbp5p F_y9^K1?T_( diff --git a/prover/data/keys/finalization_hints_basic_12.bin b/prover/data/keys/finalization_hints_basic_12.bin index 2a35af3e7b288f4e63947f4b9bc5bd39b5427b3b..c60ba4d81f4f6a53148bb50b483459f2a9e10e03 100644 GIT binary patch literal 156 zcmZQ%fB+6CtqG+Wp|lJdA0*BO6`R2eVF-l4Lmfbp5p F_yAH#w+mmfbp5p F_y9^K1?T_( diff --git a/prover/data/keys/finalization_hints_basic_14.bin b/prover/data/keys/finalization_hints_basic_14.bin index fbd72ba1908594c59fe44df9aedcfaab8687604e..a510c0b39bcfa379c44ca665e96db536666c4fac 100644 GIT binary patch literal 156 zcmZQ%fB+6C%?qU&p|lJdA0`eG{tyr0Z48Hr3V>C!K=r^VzZHC7CQKEK&jeKf<1?f2 E0eR&Hxc~qF literal 156 zcmZQ%fB+6C%?qU&p|lJdA0`eG{tyr0txsTrsuBRxEKnYd3YZTu6{Z))hv|axnV}kB Fd;oaH2B81| diff --git a/prover/data/keys/finalization_hints_basic_15.bin b/prover/data/keys/finalization_hints_basic_15.bin index c310392144906a11d5fcfcf759d7010bea5b033a..9583317b26ab741bbf7848bd1c8f617512d65111 100644 GIT binary patch delta 78 scmZ1>xk7S-2M_0jo^uQ!@PBe3kGutgJujHY2qu99l+T35XGY@#0Q92=_5c6? delta 78 scmZ1>xk7S-2M=dJ`#A;>@S7aSBX6+r@NEGwc5Rm30wX0X7xQ2O;HelQDWCXCO7CeMt< F2LP;~2|@q> literal 156 zcmZQ%fB+6C%?qU&p|lJdA0*BM6`L1o3}z)}Km`~Czzh}`7fR2Y&JSk6%!Kjb=0N3{ H(bNL~bjSx$ diff --git a/prover/data/keys/finalization_hints_basic_255.bin b/prover/data/keys/finalization_hints_basic_255.bin index 3abbc382b036b708fe89a2669751be53abc332a5..a8b8efa66f64a609a93b461199d93952540140f7 100644 GIT binary patch delta 73 qcmX@Xc!F_)3ZuY8Rc}V4iG}hOXMK4YK!6cUGBCjSOlW*&G(G^-;0cES delta 73 qcmX@Xc!F_)3M0crRc}W9iG}hO7kqgcK!6cUGBCjSOlW*&G(G^)i3xxJ diff --git a/prover/data/keys/finalization_hints_basic_3.bin b/prover/data/keys/finalization_hints_basic_3.bin index 5525db5ff3905b8296671d1bc90422e0a113b1fb..9a20c7e06dd3e9b7b218d3d770d31c5e3bdcedbc 100644 GIT binary patch delta 18 ZcmX@Zc!qI;2_x4;Q*-7c)l3ufV*xpl1_%HE delta 18 ZcmX@Zc!qI;2_x%7Q*&m^i7XTIV*xgf1&{y$ diff --git a/prover/data/keys/finalization_hints_basic_5.bin b/prover/data/keys/finalization_hints_basic_5.bin index 4ef8ad2edd4e2e46a0e505833f3c8fb4362b1591..4ee8cf55180faf6ce6cbf3827a2e17f7426e87b4 100644 GIT binary patch literal 216 zcmZQ%fB+6C%?qU&p>zb4WBQJXRz&$PAboyLpX39s|RM hB$!PCU_MAMGVq_v2j;?5!T2D%K>)@F*$)CRJ^2R8r! literal 216 zcmZQ%fB+6C%?qU&p>zb4W+(6JXRz&$PAbojjfGf)f&k# hn*_jonAuds71vCHv delta 18 acmX@Zc!qI;2_wfuQ*-8rN7*Ol#{vL5uLg1e diff --git a/prover/data/keys/finalization_hints_basic_7.bin b/prover/data/keys/finalization_hints_basic_7.bin index 2417f2ad65e3259d1f9b90aa5b93becc2fe5e0c3..46ef73936baac4564f520c281433c736e05b969c 100644 GIT binary patch delta 104 zcmca1c|&qT1y4eQ>RAR52wcMmrWqInz%&b#2cy;n^MRQ#RWLpiQ~`|7jK&85%4rHc delta 104 zcmca1c|&qT1y8~Q>9Y(Vz_*$aOfxVDfN2&e4@P|q;R7>as$hI3r~(+D8I2DB^-v36 diff --git a/prover/data/keys/finalization_hints_basic_8.bin b/prover/data/keys/finalization_hints_basic_8.bin index 64ca51d1b70df3d4ccd75647b9bdfbee67ec2a74..7bac281380f06813558b7b3ad8cb45773d68a6ca 100644 GIT binary patch literal 156 zcmZQ%fB+6C%>|_yp|lJdA0*BP6^p8n1G7HD6f+2b`7BU*7{&LGAIyX)gYlW53SfL@ GG(G@aE(WOp literal 156 zcmZQ%fB+6CEeNFE|i}B7h)>ROc)=g4aR3i GQx5>7TnNYj literal 156 zcmZQ%fB+6C%?za(p|lJdA0*BX6+6Ht0cKr-X=V@r^I4$sFiQ73L, priority_tx_max_gas_limit: u64, @@ -109,6 +110,7 @@ impl DeployGatewayCTMInput { bootloader_hash: genesis_input.bootloader_hash, default_aa_hash: genesis_input.default_aa_hash, + evm_emulator_hash: genesis_input.evm_emulator_hash, priority_tx_max_gas_limit: initial_deployment_config.priority_tx_max_gas_limit, diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/init/configs.rs b/zkstack_cli/crates/zkstack/src/commands/chain/init/configs.rs index 40ed279911b8..4614432d5b10 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/init/configs.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/init/configs.rs @@ -49,7 +49,7 @@ pub async fn init_configs( chain_config: &ChainConfig, ) -> anyhow::Result { // Port scanner should run before copying configs to avoid marking initial ports as assigned - let mut ecosystem_ports = EcosystemPortsScanner::scan(shell)?; + let mut ecosystem_ports = EcosystemPortsScanner::scan(shell, Some(&chain_config.name))?; copy_configs(shell, &ecosystem_config.link_to_code, &chain_config.configs)?; if !init_args.no_port_reallocation { diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/migrate_to_gateway.rs b/zkstack_cli/crates/zkstack/src/commands/chain/migrate_to_gateway.rs index 0be8c62da627..1c020f858cf2 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/migrate_to_gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/migrate_to_gateway.rs @@ -399,7 +399,7 @@ async fn await_for_tx_to_complete( if receipt.status == Some(U64::from(1)) { println!("Transaction completed successfully!"); } else { - panic!("Transaction failed!"); + panic!("Transaction failed! Receipt: {:?}", receipt); } Ok(()) diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/genesis.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/genesis.rs index 29e5f734e528..7d932887dcf8 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/genesis.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/genesis.rs @@ -17,9 +17,10 @@ pub(crate) async fn run(shell: &Shell) -> anyhow::Result<()> { .load_chain(Some(ecosystem.current_chain().to_string())) .context(MSG_CHAIN_NOT_FOUND_ERR)?; let spinner = Spinner::new(MSG_GENESIS_FILE_GENERATION_STARTED); - let secrets_path = chain.path_to_secrets_config(); + let secrets_path = chain.path_to_secrets_config().canonicalize().unwrap(); let dal = get_core_dal(shell, None).await?; reset_database(shell, ecosystem.link_to_code, dal).await?; + let _a = shell.push_dir("core"); Cmd::new(cmd!(shell,"cargo run --package genesis_generator --bin genesis_generator -- --config-path={secrets_path}")).run()?; spinner.finish(); Ok(()) diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/status/mod.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/status/mod.rs index 7de264ca8252..6b2741dbfcce 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/status/mod.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/status/mod.rs @@ -93,7 +93,7 @@ fn print_status(health_check_url: String) -> anyhow::Result<()> { } fn print_ports(shell: &Shell) -> anyhow::Result<()> { - let ports = EcosystemPortsScanner::scan(shell)?; + let ports = EcosystemPortsScanner::scan(shell, None)?; let grouped_ports = ports.group_by_file_path(); let mut all_port_lines: Vec = Vec::new(); diff --git a/zkstack_cli/crates/zkstack/src/commands/explorer/init.rs b/zkstack_cli/crates/zkstack/src/commands/explorer/init.rs index d5c8b6f905f5..bdaeeacec87d 100644 --- a/zkstack_cli/crates/zkstack/src/commands/explorer/init.rs +++ b/zkstack_cli/crates/zkstack/src/commands/explorer/init.rs @@ -28,7 +28,6 @@ pub(crate) async fn run(shell: &Shell) -> anyhow::Result<()> { Some(ref chain_name) => vec![chain_name.clone()], None => ecosystem_config.list_of_chains(), }; - let mut ports = EcosystemPortsScanner::scan(shell)?; // Initialize chains one by one let mut explorer_config = ExplorerConfig::read_or_create_default(shell)?; for chain_name in chains_enabled.iter() { @@ -36,6 +35,7 @@ pub(crate) async fn run(shell: &Shell) -> anyhow::Result<()> { let chain_config = ecosystem_config .load_chain(Some(chain_name.clone())) .context(msg_chain_load_err(chain_name))?; + let mut ports = EcosystemPortsScanner::scan(shell, Some(&chain_config.name))?; // Build backend config - parameters required to create explorer backend services let backend_config = build_backend_config(&mut ports, &chain_config)?; // Initialize explorer database diff --git a/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs b/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs index 9f0cd6bfbc8e..26bb187635bb 100644 --- a/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs +++ b/zkstack_cli/crates/zkstack/src/commands/external_node/prepare_configs.rs @@ -50,7 +50,8 @@ async fn prepare_configs( en_configs_path: &Path, args: PrepareConfigFinal, ) -> anyhow::Result<()> { - let mut ports = EcosystemPortsScanner::scan(shell)?; + // Reallocating ports for en required to use the current chain ports as well + let mut ports = EcosystemPortsScanner::scan(shell, None)?; let genesis = config.get_genesis_config().await?; let general = config.get_general_config().await?; let gateway = config.get_gateway_chain_config().ok(); diff --git a/zkstack_cli/crates/zkstack/src/utils/ports.rs b/zkstack_cli/crates/zkstack/src/utils/ports.rs index f46acc9402e3..5bf056a30e7a 100644 --- a/zkstack_cli/crates/zkstack/src/utils/ports.rs +++ b/zkstack_cli/crates/zkstack/src/utils/ports.rs @@ -205,7 +205,10 @@ pub struct EcosystemPortsScanner; impl EcosystemPortsScanner { /// Scans the ecosystem directory for YAML files and extracts port information. /// Specifically, it looks for keys ending with "port" or "ports" and collects their values. - pub fn scan(shell: &Shell) -> Result { + /// We could skip searching ports in the current chain if we initialize this chain. + /// It allows to reuse default ports even if the general file exist with previously allocated ports. + /// It makes allocation more predictable + pub fn scan(shell: &Shell, current_chain: Option<&str>) -> Result { let ecosystem_config = EcosystemConfig::from_file(shell)?; // Create a list of directories to scan: @@ -215,6 +218,12 @@ impl EcosystemPortsScanner { // - Ecosystem directory (docker-compose files) let mut dirs = vec![ecosystem_config.config.clone()]; for chain in ecosystem_config.list_of_chains() { + // skip current chain for avoiding wrong reallocation + if let Some(name) = current_chain { + if name.eq(&chain) { + continue; + } + } if let Ok(chain_config) = ecosystem_config.load_chain(Some(chain)) { dirs.push(chain_config.configs.clone()); if let Some(external_node_config_path) = &chain_config.external_node_config_path {