From 82604fd3a8feb639b459f02b4b6624a9c07c1e7d Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Mon, 26 Aug 2024 10:05:02 +0530 Subject: [PATCH] feat : updated implementation temp --- .env.test | 1 + Cargo.lock | 406 +- Cargo.toml | 8 +- crates/orchestrator/src/config.rs | 5 +- .../src/jobs/state_update_job/mod.rs | 1 + crates/orchestrator/src/queue/job_queue.rs | 38 +- crates/orchestrator/src/workers/mod.rs | 13 + .../gps-fact-checker/Cargo.toml | 1 + .../gps-fact-checker/src/lib.rs | 2 +- .../tests/artifacts/FactRegistry.json | 1033 +---- .../tests/artifacts/FactRegistry2.json | 194 + .../prover-services/sharp-service/Cargo.toml | 2 + .../sharp-service/src/client.rs | 25 +- .../sharp-service/src/config.rs | 7 +- .../sharp-service/src/error.rs | 36 + .../prover-services/sharp-service/src/lib.rs | 16 +- .../sharp-service/src/types.rs | 1 + e2e-tests/Cargo.toml | 5 + .../artifacts/get_state_update_238996.json | 3479 +++++++++++++++++ e2e-tests/artifacts/program_output_238996.txt | 102 + e2e-tests/artifacts/snos_output.json | 12 + e2e-tests/src/ethereum.rs | 29 +- e2e-tests/src/lib.rs | 94 + e2e-tests/src/localstack.rs | 105 +- e2e-tests/src/mongodb.rs | 35 +- e2e-tests/src/node.rs | 80 +- e2e-tests/tests.rs | 113 +- 27 files changed, 4704 insertions(+), 1139 deletions(-) create mode 100644 crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry2.json create mode 100644 e2e-tests/artifacts/get_state_update_238996.json create mode 100644 e2e-tests/artifacts/program_output_238996.txt create mode 100644 e2e-tests/artifacts/snos_output.json diff --git a/.env.test b/.env.test index 08b22c73..8144cf1c 100644 --- a/.env.test +++ b/.env.test @@ -15,6 +15,7 @@ AWS_DEFAULT_REGION="localhost" MADARA_RPC_URL="http://localhost:3000" ETHEREUM_RPC_URL="http://localhost:3001" +ETHEREUM_MAINNET_RPC_URL="https://mainnet.infura.io/v3/bf9e41563a6a45e28eb60382d85ef3c9" # for forking during tests MEMORY_PAGES_CONTRACT_ADDRESS="0x000000000000000000000000000000000001dead" PRIVATE_KEY="0xdead" # Private key of Test wallet provided by Anvil diff --git a/Cargo.lock b/Cargo.lock index a8e27295..33cd2f9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -87,29 +87,29 @@ dependencies = [ [[package]] name = "alloy" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134b68e24175eff6c3c4d2bffeefb0a1b7435462130862c88d1524ca376e7e5" +checksum = "3f4a4aaae80afd4be443a6aecd92a6b255dcdd000f97996928efb33d8a71e100" dependencies = [ - "alloy-consensus 0.1.2", + "alloy-consensus 0.2.1", "alloy-contract", - "alloy-core 0.7.6", - "alloy-eips 0.1.2", + "alloy-core 0.7.7", + "alloy-eips 0.2.1", "alloy-genesis", - "alloy-network 0.1.2", + "alloy-json-rpc 0.2.1", + "alloy-network 0.2.1", "alloy-node-bindings", - "alloy-provider 0.1.2", + "alloy-provider 0.2.1", "alloy-pubsub", - "alloy-rpc-client 0.1.2", - "alloy-rpc-types 0.1.2", - "alloy-serde 0.1.2", - "alloy-signer 0.1.2", + "alloy-rpc-client 0.2.1", + "alloy-rpc-types 0.2.1", + "alloy-serde 0.2.1", + "alloy-signer 0.2.1", "alloy-signer-local", - "alloy-transport 0.1.2", - "alloy-transport-http 0.1.2", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", - "reqwest 0.12.5", ] [[package]] @@ -135,33 +135,34 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a016bfa21193744d4c38b3f3ab845462284d129e5e23c7cc0fafca7e92d9db37" +checksum = "04c309895995eaa4bfcc345f5515a39c7df9447798645cc8bf462b6c5bf1dc96" dependencies = [ - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-eips 0.2.1", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", + "alloy-serde 0.2.1", "c-kzg", "serde", ] [[package]] name = "alloy-contract" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47b2a620fd588d463ccf0f5931b41357664b293a8d31592768845a2a101bb9e" +checksum = "3f4e0ef72b0876ae3068b2ed7dfae9ae1779ce13cfaec2ee1f08f5bd0348dc57" dependencies = [ - "alloy-dyn-abi 0.7.6", - "alloy-json-abi 0.7.6", - "alloy-network 0.1.2", - "alloy-primitives 0.7.6", - "alloy-provider 0.1.2", + "alloy-dyn-abi 0.7.7", + "alloy-json-abi 0.7.7", + "alloy-network 0.2.1", + "alloy-network-primitives", + "alloy-primitives 0.7.7", + "alloy-provider 0.2.1", "alloy-pubsub", "alloy-rpc-types-eth", - "alloy-sol-types 0.7.6", - "alloy-transport 0.1.2", + "alloy-sol-types 0.7.7", + "alloy-transport 0.2.1", "futures", "futures-util", "thiserror", @@ -181,14 +182,14 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af3faff14c12c8b11037e0a093dd157c3702becb8435577a2408534d0758315" +checksum = "529fc6310dc1126c8de51c376cbc59c79c7f662bd742be7dc67055d5421a81b4" dependencies = [ - "alloy-dyn-abi 0.7.6", - "alloy-json-abi 0.7.6", - "alloy-primitives 0.7.6", - "alloy-sol-types 0.7.6", + "alloy-dyn-abi 0.7.7", + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-types 0.7.7", ] [[package]] @@ -210,14 +211,14 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6e6436a9530f25010d13653e206fab4c9feddacf21a54de8d7311b275bc56b" +checksum = "413902aa18a97569e60f679c23f46a18db1656d87ab4d4e49d0e1e52042f66df" dependencies = [ - "alloy-json-abi 0.7.6", - "alloy-primitives 0.7.6", - "alloy-sol-type-parser 0.7.6", - "alloy-sol-types 0.7.6", + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-type-parser 0.7.7", + "alloy-sol-types 0.7.7", "const-hex", "itoa", "serde", @@ -240,15 +241,16 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d6d8118b83b0489cfb7e6435106948add2b35217f4a5004ef895f613f60299" +checksum = "d9431c99a3b3fe606ede4b3d4043bdfbcb780c45b8d8d226c3804e2b75cfbe68" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", + "alloy-serde 0.2.1", "c-kzg", "derive_more", + "k256", "once_cell", "serde", "sha2", @@ -256,12 +258,12 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894f33a7822abb018db56b10ab90398e63273ce1b5a33282afd186c132d764a6" +checksum = "79614dfe86144328da11098edcc7bc1a3f25ad8d3134a9eb9e857e06f0d9840d" dependencies = [ - "alloy-primitives 0.7.6", - "alloy-serde 0.1.2", + "alloy-primitives 0.7.7", + "alloy-serde 0.2.1", "serde", ] @@ -279,12 +281,12 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" +checksum = "bc05b04ac331a9f07e3a4036ef7926e49a8bf84a99a1ccfc7e2ab55a5fcbb372" dependencies = [ - "alloy-primitives 0.7.6", - "alloy-sol-type-parser 0.7.6", + "alloy-primitives 0.7.7", + "alloy-sol-type-parser 0.7.7", "serde", "serde_json", ] @@ -302,11 +304,12 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f0ae6e93b885cc70fe8dae449e7fd629751dbee8f59767eaaa7285333c5727" +checksum = "57e2865c4c3bb4cdad3f0d9ec1ab5c0c657ba69a375651bd35e32fb6c180ccc2" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", + "alloy-sol-types 0.7.7", "serde", "serde_json", "thiserror", @@ -332,32 +335,44 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc122cbee2b8523854cc11d87bcd5773741602c553d2d2d106d82eeb9c16924a" +checksum = "6e701fc87ef9a3139154b0b4ccb935b565d27ffd9de020fe541bf2dec5ae4ede" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-json-rpc 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-json-rpc 0.2.1", + "alloy-network-primitives", + "alloy-primitives 0.7.7", "alloy-rpc-types-eth", - "alloy-serde 0.1.2", - "alloy-signer 0.1.2", - "alloy-sol-types 0.7.6", + "alloy-serde 0.2.1", + "alloy-signer 0.2.1", + "alloy-sol-types 0.7.7", "async-trait", "auto_impl", "futures-utils-wasm", "thiserror", ] +[[package]] +name = "alloy-network-primitives" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9d5a0f9170b10988b6774498a022845e13eda94318440d17709d50687f67f9" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-serde 0.2.1", + "serde", +] + [[package]] name = "alloy-node-bindings" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494b2fb0276a78ec13791446a417c2517eee5c8e8a8c520ae0681975b8056e5c" +checksum = "16faebb9ea31a244fd6ce3288d47df4be96797d9c3c020144b8f2c31543a4512" dependencies = [ "alloy-genesis", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "k256", "serde_json", "tempfile", @@ -390,9 +405,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", "bytes", @@ -437,24 +452,26 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d5af289798fe8783acd0c5f10644d9d26f54a12bc52a083e4f3b31718e9bf92" +checksum = "3f9c0ab10b93de601a6396fc7ff2ea10d3b28c46f079338fa562107ebf9857c8" dependencies = [ "alloy-chains", - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-json-rpc 0.1.2", - "alloy-network 0.1.2", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-json-rpc 0.2.1", + "alloy-network 0.2.1", + "alloy-network-primitives", "alloy-node-bindings", - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-pubsub", - "alloy-rpc-client 0.1.2", + "alloy-rpc-client 0.2.1", "alloy-rpc-types-anvil", "alloy-rpc-types-eth", + "alloy-rpc-types-trace", "alloy-signer-local", - "alloy-transport 0.1.2", - "alloy-transport-http 0.1.2", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", "async-stream", @@ -475,13 +492,13 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702f330b7da123a71465ab9d39616292f8344a2811c28f2cc8d8438a69d79e35" +checksum = "3f5da2c55cbaf229bad3c5f8b00b5ab66c74ef093e5f3a753d874cfecf7d2281" dependencies = [ - "alloy-json-rpc 0.1.2", - "alloy-primitives 0.7.6", - "alloy-transport 0.1.2", + "alloy-json-rpc 0.2.1", + "alloy-primitives 0.7.7", + "alloy-transport 0.2.1", "bimap", "futures", "serde", @@ -536,15 +553,15 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40fcb53b2a9d0a78a4968b2eca8805a4b7011b9ee3fdfa2acaf137c5128f36b" +checksum = "5b38e3ffdb285df5d9f60cb988d336d9b8e3505acb78750c3bc60336a7af41d3" dependencies = [ - "alloy-json-rpc 0.1.2", - "alloy-primitives 0.7.6", + "alloy-json-rpc 0.2.1", + "alloy-primitives 0.7.7", "alloy-pubsub", - "alloy-transport 0.1.2", - "alloy-transport-http 0.1.2", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", "futures", @@ -589,38 +606,40 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f2fbe956a3e0f0975c798f488dc6be96b669544df3737e18f4a325b42f4c86" +checksum = "e6c31a3750b8f5a350d17354e46a52b0f2f19ec5f2006d816935af599dedc521" dependencies = [ "alloy-rpc-types-engine", "alloy-rpc-types-eth", - "alloy-serde 0.1.2", + "alloy-rpc-types-trace", + "alloy-serde 0.2.1", + "serde", ] [[package]] name = "alloy-rpc-types-anvil" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7cf4356a9d00df76d6e90d002e2a7b5edc1c8476e90e6f17ab868d99db6435" +checksum = "52ab6509cd38b2e8c8da726e0f61c1e314a81df06a38d37ddec8bced3f8d25ed" dependencies = [ - "alloy-primitives 0.7.6", - "alloy-serde 0.1.2", + "alloy-primitives 0.7.7", + "alloy-serde 0.2.1", "serde", ] [[package]] name = "alloy-rpc-types-engine" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd473d98ec552f8229cd6d566bd2b0bbfc5bb4efcefbb5288c834aa8fd832020" +checksum = "ff63f51b2fb2f547df5218527fd0653afb1947bf7fead5b3ce58c75d170b30f7" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde 0.1.2", + "alloy-serde 0.2.1", "jsonwebtoken", "rand", "serde", @@ -629,22 +648,37 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "083f443a83b9313373817236a8f4bea09cca862618e9177d822aee579640a5d6" +checksum = "81e18424d962d7700a882fe423714bd5b9dde74c7a7589d4255ea64068773aef" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-network-primitives", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", - "alloy-sol-types 0.7.6", + "alloy-serde 0.2.1", + "alloy-sol-types 0.7.7", "itertools 0.13.0", "serde", "serde_json", "thiserror", ] +[[package]] +name = "alloy-rpc-types-trace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a86eeb49ea0cc79f249faa1d35c20541bb1c317a59b5962cb07b1890355b0064" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-rpc-types-eth", + "alloy-serde 0.2.1", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "alloy-serde" version = "0.1.0" @@ -657,11 +691,11 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d94da1c0c4e27cc344b05626fe22a89dc6b8b531b9475f3b7691dbf6913e4109" +checksum = "e33feda6a53e6079895aed1d08dcb98a1377b000d80d16370fbbdb8155d547ef" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "serde", "serde_json", ] @@ -681,11 +715,11 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58d876be3afd8b78979540084ff63995292a26aa527ad0d44276405780aa0ffd" +checksum = "740a25b92e849ed7b0fa013951fe2f64be9af1ad5abe805037b44fb7770c5c47" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "async-trait", "auto_impl", "elliptic-curve 0.13.8", @@ -695,14 +729,14 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40a37dc216c269b8a7244047cb1c18a9c69f7a0332ab2c4c2aa4cbb1a31468b" +checksum = "1b0707d4f63e4356a110b30ef3add8732ab6d181dd7be4607bf79b8777105cee" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-network 0.1.2", - "alloy-primitives 0.7.6", - "alloy-signer 0.1.2", + "alloy-consensus 0.2.1", + "alloy-network 0.2.1", + "alloy-primitives 0.7.7", + "alloy-signer 0.2.1", "async-trait", "k256", "rand", @@ -744,9 +778,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bad41a7c19498e3f6079f7744656328699f8ea3e783bdd10d85788cd439f572" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -758,11 +792,11 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" dependencies = [ - "alloy-json-abi 0.7.6", + "alloy-json-abi 0.7.7", "alloy-sol-macro-input", "const-hex", "heck 0.5.0", @@ -771,17 +805,17 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.66", - "syn-solidity 0.7.6", + "syn-solidity 0.7.7", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" dependencies = [ - "alloy-json-abi 0.7.6", + "alloy-json-abi 0.7.7", "const-hex", "dunce", "heck 0.5.0", @@ -789,7 +823,7 @@ dependencies = [ "quote", "serde_json", "syn 2.0.66", - "syn-solidity 0.7.6", + "syn-solidity 0.7.7", ] [[package]] @@ -803,10 +837,11 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" +checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" dependencies = [ + "serde", "winnow 0.6.13", ] @@ -824,13 +859,13 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" dependencies = [ - "alloy-json-abi 0.7.6", - "alloy-primitives 0.7.6", - "alloy-sol-macro 0.7.6", + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", "const-hex", "serde", ] @@ -855,11 +890,11 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245af9541f0a0dbd5258669c80dfe3af118164cacec978a520041fc130550deb" +checksum = "3d0590afbdacf2f8cca49d025a2466f3b6584a016a8b28f532f29f8da1007bae" dependencies = [ - "alloy-json-rpc 0.1.2", + "alloy-json-rpc 0.2.1", "base64 0.22.1", "futures-util", "futures-utils-wasm", @@ -868,6 +903,7 @@ dependencies = [ "thiserror", "tokio", "tower", + "tracing", "url", ] @@ -886,12 +922,12 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5619c017e1fdaa1db87f9182f4f0ed97c53d674957f4902fba655e972d359c6c" +checksum = "2437d145d80ea1aecde8574d2058cceb8b3c9cba05f6aea8e67907c660d46698" dependencies = [ - "alloy-json-rpc 0.1.2", - "alloy-transport 0.1.2", + "alloy-json-rpc 0.2.1", + "alloy-transport 0.2.1", "reqwest 0.12.5", "serde_json", "tower", @@ -901,13 +937,13 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173cefa110afac7a53cf2e75519327761f2344d305eea2993f3af1b2c1fc1c44" +checksum = "804494366e20468776db4e18f9eb5db7db0fe14f1271eb6dbf155d867233405c" dependencies = [ - "alloy-json-rpc 0.1.2", + "alloy-json-rpc 0.2.1", "alloy-pubsub", - "alloy-transport 0.1.2", + "alloy-transport 0.2.1", "bytes", "futures", "interprocess", @@ -920,12 +956,12 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c0aff8af5be5e58856c5cdd1e46db2c67c7ecd3a652d9100b4822c96c899947" +checksum = "af855163e7df008799941aa6dd324a43ef2bf264b08ba4b22d44aad6ced65300" dependencies = [ "alloy-pubsub", - "alloy-transport 0.1.2", + "alloy-transport 0.2.1", "futures", "http 1.1.0", "rustls 0.23.10", @@ -1678,9 +1714,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5f920ffd1e0526ec9e70e50bf444db50b204395a0fa7016bbf9e31ea1698f" +checksum = "f42c2d4218de4dcd890a109461e2f799a1a2ba3bcd2cde9af88360f5df9266c6" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -1694,12 +1730,35 @@ dependencies = [ "fastrand 2.1.0", "http 0.2.12", "http-body 0.4.6", + "once_cell", "percent-encoding", "pin-project-lite", "tracing", "uuid 1.8.0", ] +[[package]] +name = "aws-sdk-eventbridge" +version = "1.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4fb65d775433ba494cc8b67584129989ae31316b5f0a204d7638b5592fb2570" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] + [[package]] name = "aws-sdk-s3" version = "1.38.0" @@ -1938,9 +1997,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.6.2" +version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce87155eba55e11768b8c1afa607f3e864ae82f03caf63258b37455b0ad02537" +checksum = "0abbf454960d0db2ad12684a1640120e7557294b0ff8e2f11236290a1b293225" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -1965,9 +2024,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30819352ed0a04ecf6a2f3477e344d2d1ba33d43e0f09ad9047c12e0d923616f" +checksum = "e086682a53d3aa241192aa110fa8dfce98f2f5ac2ead0de84d41582c7e8fdb96" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -1982,9 +2041,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe321a6b21f5d8eabd0ade9c55d3d0335f3c3157fc2b3e87f05f34b539e4df5" +checksum = "6cee7cadb433c781d3299b916fbf620fea813bf38f49db282fb6858141a05cc8" dependencies = [ "base64-simd", "bytes", @@ -3888,23 +3947,28 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" name = "e2e-tests" version = "0.1.0" dependencies = [ - "alloy 0.1.2", + "alloy 0.2.1", "async-trait", "aws-config", + "aws-sdk-eventbridge", "aws-sdk-s3", "aws-sdk-sqs", + "bytes", "color-eyre", "dotenvy", "httpmock", "log", + "mongodb", "orchestrator", "reqwest 0.11.27", "serde_json", + "starknet", "testcontainers", "tokio", "tokio-stream", "tokio-util", "url", + "uuid 1.8.0", ] [[package]] @@ -4119,11 +4183,14 @@ dependencies = [ name = "ethereum-settlement-client" version = "0.1.0" dependencies = [ - "alloy 0.1.2", + "alloy 0.2.1", + "alloy-primitives 0.7.7", "async-trait", "c-kzg", "color-eyre", "dotenv", + "dotenvy", + "lazy_static", "mockall 0.12.1", "reqwest 0.12.5", "rstest 0.18.2", @@ -4660,10 +4727,11 @@ dependencies = [ name = "gps-fact-checker" version = "0.1.0" dependencies = [ - "alloy 0.1.2", + "alloy 0.2.1", "async-trait", "cairo-vm 1.0.0-rc3", "itertools 0.13.0", + "log", "starknet", "thiserror", "url", @@ -6354,7 +6422,7 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" name = "orchestrator" version = "0.1.0" dependencies = [ - "alloy 0.1.2", + "alloy 0.2.1", "arc-swap", "assert_matches", "async-std", @@ -8323,15 +8391,17 @@ dependencies = [ name = "sharp-service" version = "0.1.0" dependencies = [ - "alloy 0.1.2", + "alloy 0.2.1", "async-trait", "base64 0.22.1", "cairo-vm 1.0.0-rc3", + "color-eyre", "dotenvy", "gps-fact-checker", "hex", "httpmock", "lazy_static", + "log", "prover-client-interface", "reqwest 0.11.27", "rstest 0.18.2", @@ -8999,9 +9069,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d71e19bca02c807c9faa67b5a47673ff231b6e7449b251695188522f1dc44b2" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" dependencies = [ "paste", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 4d38f8b3..f508a2eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,9 +24,15 @@ authors = ["Apoorv Sadana <@apoorvsadana>"] [workspace.dependencies] num = { version = "0.4.1" } async-trait = { version = "0.1.77" } -alloy = { version = "0.1.2", features = ["full", "node-bindings"] } +alloy = { version = "0.2.1", features = ["full", + "node-bindings", + "rpc-types-debug", + "rpc-types-trace", + "json-rpc", + "rpc-client",] } aws-config = { version = "1.1.7", features = ["behavior-version-latest"] } aws-sdk-s3 = { version = "1.38.0", features = ["behavior-version-latest"] } +aws-sdk-eventbridge = { version = "1.41.0", features = ["behavior-version-latest"] } aws-sdk-sqs = "1.36.0" axum = { version = "0.7.4" } axum-macros = "0.4.1" diff --git a/crates/orchestrator/src/config.rs b/crates/orchestrator/src/config.rs index 447b25ec..aa930368 100644 --- a/crates/orchestrator/src/config.rs +++ b/crates/orchestrator/src/config.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use crate::data_storage::aws_s3::config::{AWSS3Config, AWSS3ConfigType}; +use crate::data_storage::aws_s3::config::{AWSS3Config, AWSS3ConfigType, S3LocalStackConfig}; use crate::data_storage::aws_s3::AWSS3; use crate::data_storage::{DataStorage, DataStorageConfig}; use arc_swap::{ArcSwap, Guard}; @@ -180,6 +180,9 @@ pub async fn build_settlement_client( pub async fn build_storage_client() -> Box { match get_env_var_or_panic("DATA_STORAGE").as_str() { "s3" => Box::new(AWSS3::new(AWSS3ConfigType::WithoutEndpoint(AWSS3Config::new_from_env())).await), + "s3_localstack" => { + Box::new(AWSS3::new(AWSS3ConfigType::WithEndpoint(S3LocalStackConfig::new_from_env())).await) + } _ => panic!("Unsupported Storage Client"), } } diff --git a/crates/orchestrator/src/jobs/state_update_job/mod.rs b/crates/orchestrator/src/jobs/state_update_job/mod.rs index 48e4aeb9..b6391264 100644 --- a/crates/orchestrator/src/jobs/state_update_job/mod.rs +++ b/crates/orchestrator/src/jobs/state_update_job/mod.rs @@ -275,6 +275,7 @@ impl StateUpdateJob { } else if snos.use_kzg_da == Felt252::ONE { let blob_data = fetch_blob_data_for_block(block_no).await.map_err(|e| JobError::Other(OtherError(e)))?; + // TODO : Fetch Program Output from data storage client // Fetching nonce before the transaction is run // Sending update_state transaction from the settlement client settlement_client diff --git a/crates/orchestrator/src/queue/job_queue.rs b/crates/orchestrator/src/queue/job_queue.rs index d6769aea..5defa8f9 100644 --- a/crates/orchestrator/src/queue/job_queue.rs +++ b/crates/orchestrator/src/queue/job_queue.rs @@ -1,10 +1,11 @@ use std::future::Future; +use std::str::FromStr; use std::time::Duration; use color_eyre::eyre::Context; use color_eyre::Result as EyreResult; use omniqueue::{Delivery, QueueError}; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Deserializer, Serialize}; use tokio::time::sleep; use tracing::log; use uuid::Uuid; @@ -57,11 +58,42 @@ pub enum WorkerTriggerType { UpdateState, } -#[derive(Debug, Serialize, Deserialize, Clone)] +#[derive(Debug, Serialize, Clone)] pub struct WorkerTriggerMessage { - pub(crate) worker: WorkerTriggerType, + pub worker: WorkerTriggerType, } +impl FromStr for WorkerTriggerType { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + "Proving" => Ok(WorkerTriggerType::Proving), + "Snos" => Ok(WorkerTriggerType::Snos), + "ProofRegistration" => Ok(WorkerTriggerType::ProofRegistration), + "DataSubmission" => Ok(WorkerTriggerType::DataSubmission), + "UpdateState" => Ok(WorkerTriggerType::UpdateState), + _ => Err(format!("Unknown WorkerTriggerType: {}", s)), + } + } +} + +impl<'de> Deserialize<'de> for WorkerTriggerMessage { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + let s = s.trim_start_matches('{').trim_end_matches('}'); + let parts: Vec<&str> = s.split(':').collect(); + if parts.len() != 2 || parts[0] != "worker" { + return Err(serde::de::Error::custom("Invalid format")); + } + Ok(WorkerTriggerMessage { worker: WorkerTriggerType::from_str(parts[1]).map_err(serde::de::Error::custom)? }) + } +} + +#[derive(Debug)] enum DeliveryReturnType { Message(Delivery), NoMessage, diff --git a/crates/orchestrator/src/workers/mod.rs b/crates/orchestrator/src/workers/mod.rs index 785b1e2d..7b4a83c9 100644 --- a/crates/orchestrator/src/workers/mod.rs +++ b/crates/orchestrator/src/workers/mod.rs @@ -1,6 +1,7 @@ use crate::{config::config, jobs::types::JobStatus}; use async_trait::async_trait; use std::error::Error; +use thiserror::Error; pub mod data_submission_worker; pub mod proof_registration; @@ -8,6 +9,18 @@ pub mod proving; pub mod snos; pub mod update_state; +#[derive(Error, Debug)] +pub enum WorkerError { + #[error("Worker execution failed: {0}")] + ExecutionError(String), + + #[error("JSON RPC error: {0}")] + JsonRpcError(String), + + #[error("Other error: {0}")] + Other(Box), +} + #[async_trait] pub trait Worker: Send + Sync { async fn run_worker_if_enabled(&self) -> Result<(), Box> { diff --git a/crates/prover-services/gps-fact-checker/Cargo.toml b/crates/prover-services/gps-fact-checker/Cargo.toml index fb0e7478..87500636 100644 --- a/crates/prover-services/gps-fact-checker/Cargo.toml +++ b/crates/prover-services/gps-fact-checker/Cargo.toml @@ -20,3 +20,4 @@ starknet.workspace = true thiserror.workspace = true url.workspace = true utils.workspace = true +log = "0.4.21" diff --git a/crates/prover-services/gps-fact-checker/src/lib.rs b/crates/prover-services/gps-fact-checker/src/lib.rs index 239e7556..0694fe07 100644 --- a/crates/prover-services/gps-fact-checker/src/lib.rs +++ b/crates/prover-services/gps-fact-checker/src/lib.rs @@ -15,7 +15,7 @@ sol!( #[allow(missing_docs)] #[sol(rpc)] FactRegistry, - "tests/artifacts/FactRegistry.json" + "tests/artifacts/FactRegistry2.json" ); pub struct FactChecker { diff --git a/crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry.json b/crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry.json index c687ed7e..1c5ff4b1 100644 --- a/crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry.json +++ b/crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry.json @@ -1,863 +1,194 @@ -{ - "abi": [ - { - "type": "function", - "name": "hasRegisteredFact", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValid", - "inputs": [ - { "name": "fact", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b5060ce8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636a938567146037578063d6354e15146065575b600080fd5b605160048036036020811015604b57600080fd5b5035606b565b604080519115158252519081900360200190f35b6051607a565b60006074826083565b92915050565b60015460ff1690565b60009081526020819052604090205460ff169056fea2646970667358221220553e722d7d055d1334a20223ec1ae1a12bf73d8488850f4be28de564102b902764736f6c634300060c0033", - "sourceMap": "118:1279:8:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052348015600f57600080fd5b506004361060325760003560e01c80636a938567146037578063d6354e15146065575b600080fd5b605160048036036020811015604b57600080fd5b5035606b565b604080519115158252519081900360200190f35b6051607a565b60006074826083565b92915050565b60015460ff1690565b60009081526020819052604090205460ff169056fea2646970667358221220553e722d7d055d1334a20223ec1ae1a12bf73d8488850f4be28de564102b902764736f6c634300060c0033", - "sourceMap": "118:1279:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;421:109;;;;;;;;;;;;;;;;-1:-1:-1;421:109:8;;:::i;:::-;;;;;;;;;;;;;;;;;;1287:108;;;:::i;421:109::-;484:4;507:16;518:4;507:10;:16::i;:::-;500:23;421:109;-1:-1:-1;;421:109:8:o;1287:108::-;1371:17;;;;1287:108;:::o;826:105::-;883:4;906:18;;;;;;;;;;;;;;826:105::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "hasRegisteredFact()": "d6354e15", - "isValid(bytes32)": "6a938567" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"hasRegisteredFact\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fact\",\"type\":\"bytes32\"}],\"name\":\"isValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/src/components/FactRegistry.sol\":\"FactRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/src/components/FactRegistry.sol\":{\"keccak256\":\"0xf1dde737bfeb616fad002bb7ad229c73fec98f1e539420566fa89805c5bb120d\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1952c89d683c9f58ce06cf222f42772131113b3dd2442c6dc9150a2bde6d4d34\",\"dweb:/ipfs/QmT8u7c1gAYRVF4kCdW7v9QiE65TwwdVu76pdvsFzXnZWg\"]},\"contracts/src/interfaces/IFactRegistry.sol\":{\"keccak256\":\"0xab04b296b506dfb0b4a8828f3dc463072fd50449a5ad8327d1baf01438b0fb35\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e451abe007f98081d1adfd759cc4168f81982992d8c0554650b94d37bc009e64\",\"dweb:/ipfs/QmVBNUWFhNX8PqSMcqRkHVaTbcm7KNpgSg91Sj6MepFG6u\"]},\"contracts/src/interfaces/IQueryableFactRegistry.sol\":{\"keccak256\":\"0x9689f96215bae9da993a5f1b16a7c1460b1abd478569d969d5b901fa4520b4b6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cfe2f9ca69bffdfaad8cdea188f0e6e385fbd2f5b1ee2194f989f25c76a30250\",\"dweb:/ipfs/QmSffz94BEf9MuqrQ41LuAcBL6FnsxqY4pxfxM8b4s3iSi\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.6.12+commit.27d51765" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "hasRegisteredFact", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "fact", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isValid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "contracts/src/components/FactRegistry.sol": "FactRegistry" +[ + { + "inputs": [ + { + "internalType": "address", + "name": "bootloaderProgramContract", + "type": "address" + }, + { + "internalType": "address", + "name": "memoryPageFactRegistry_", + "type": "address" + }, + { + "internalType": "address[]", + "name": "cairoVerifierContracts", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "simpleBootloaderProgramHash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "applicativeBootloaderProgramHash", + "type": "uint256" }, - "libraries": {} - }, - "sources": { - "contracts/src/components/FactRegistry.sol": { - "keccak256": "0xf1dde737bfeb616fad002bb7ad229c73fec98f1e539420566fa89805c5bb120d", - "urls": [ - "bzz-raw://1952c89d683c9f58ce06cf222f42772131113b3dd2442c6dc9150a2bde6d4d34", - "dweb:/ipfs/QmT8u7c1gAYRVF4kCdW7v9QiE65TwwdVu76pdvsFzXnZWg" - ], - "license": "Apache-2.0." + { + "internalType": "uint256", + "name": "hashedSupportedCairoVerifiers", + "type": "uint256" }, - "contracts/src/interfaces/IFactRegistry.sol": { - "keccak256": "0xab04b296b506dfb0b4a8828f3dc463072fd50449a5ad8327d1baf01438b0fb35", - "urls": [ - "bzz-raw://e451abe007f98081d1adfd759cc4168f81982992d8c0554650b94d37bc009e64", - "dweb:/ipfs/QmVBNUWFhNX8PqSMcqRkHVaTbcm7KNpgSg91Sj6MepFG6u" - ], - "license": "Apache-2.0." + { + "internalType": "address", + "name": "referenceVerifier", + "type": "address" }, - "contracts/src/interfaces/IQueryableFactRegistry.sol": { - "keccak256": "0x9689f96215bae9da993a5f1b16a7c1460b1abd478569d969d5b901fa4520b4b6", - "urls": [ - "bzz-raw://cfe2f9ca69bffdfaad8cdea188f0e6e385fbd2f5b1ee2194f989f25c76a30250", - "dweb:/ipfs/QmSffz94BEf9MuqrQ41LuAcBL6FnsxqY4pxfxM8b4s3iSi" - ], - "license": "Apache-2.0." + { + "internalType": "uint256", + "name": "referralDurationSeconds", + "type": "uint256" } - }, - "version": 1 + ], + "stateMutability": "nonpayable", + "type": "constructor" }, - "ast": { - "absolutePath": "contracts/src/components/FactRegistry.sol", - "id": 1175, - "exportedSymbols": { "FactRegistry": [1174] }, - "nodeType": "SourceUnit", - "src": "40:1358:8", - "nodes": [ + { + "anonymous": false, + "inputs": [ { - "id": 1110, - "nodeType": "PragmaDirective", - "src": "40:24:8", - "nodes": [], - "literals": ["solidity", "^", "0.6", ".12"] + "indexed": false, + "internalType": "bytes32", + "name": "programOutputFact", + "type": "bytes32" }, { - "id": 1111, - "nodeType": "ImportDirective", - "src": "66:50:8", - "nodes": [], - "absolutePath": "contracts/src/interfaces/IQueryableFactRegistry.sol", - "file": "../interfaces/IQueryableFactRegistry.sol", - "scope": 1175, - "sourceUnit": 6348, - "symbolAliases": [], - "unitAlias": "" - }, + "indexed": false, + "internalType": "bytes32[]", + "name": "pagesHashes", + "type": "bytes32[]" + } + ], + "name": "LogMemoryPagesHashes", + "type": "event" + }, + { + "inputs": [], + "name": "PAGE_INFO_ADDRESS_OFFSET", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_HASH_OFFSET", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_SIZE", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_SIZE_IN_BYTES", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_SIZE_OFFSET", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBootloaderConfig", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hasRegisteredFact", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "identify", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "fact", "type": "bytes32" } + ], + "name": "isValid", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "fact", "type": "bytes32" } + ], + "name": "localIsValid", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "referenceFactRegistry", + "outputs": [ { - "id": 1174, - "nodeType": "ContractDefinition", - "src": "118:1279:8", - "nodes": [ - { - "id": 1117, - "nodeType": "VariableDeclaration", - "src": "207:45:8", - "nodes": [], - "constant": false, - "mutability": "mutable", - "name": "verifiedFact", - "overrides": null, - "scope": 1174, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - }, - "typeName": { - "id": 1116, - "keyType": { - "id": 1114, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "215:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "207:24:8", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - }, - "valueType": { - "id": 1115, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "226:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "id": 1119, - "nodeType": "VariableDeclaration", - "src": "336:22:8", - "nodes": [], - "constant": false, - "mutability": "mutable", - "name": "anyFactRegistered", - "overrides": null, - "scope": 1174, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1118, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "336:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "id": 1132, - "nodeType": "FunctionDefinition", - "src": "421:109:8", - "nodes": [], - "body": { - "id": 1131, - "nodeType": "Block", - "src": "490:40:8", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1128, - "name": "fact", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "518:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 1127, - "name": "_factCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1144, - "src": "507:10:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes32) view returns (bool)" - } - }, - "id": 1129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "507:16:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1126, - "id": 1130, - "nodeType": "Return", - "src": "500:23:8" - } - ] - }, - "baseFunctions": [6327], - "documentation": null, - "functionSelector": "6a938567", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isValid", - "overrides": { - "id": 1123, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "466:8:8" - }, - "parameters": { - "id": 1122, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1121, - "mutability": "mutable", - "name": "fact", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1132, - "src": "438:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1120, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "438:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "437:14:8" - }, - "returnParameters": { - "id": 1126, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1125, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1132, - "src": "484:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1124, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "484:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "483:6:8" - }, - "scope": 1174, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 1144, - "nodeType": "FunctionDefinition", - "src": "826:105:8", - "nodes": [], - "body": { - "id": 1143, - "nodeType": "Block", - "src": "889:42:8", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1139, - "name": "verifiedFact", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1117, - "src": "906:12:8", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - } - }, - "id": 1141, - "indexExpression": { - "argumentTypes": null, - "id": 1140, - "name": "fact", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1134, - "src": "919:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "906:18:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1138, - "id": 1142, - "nodeType": "Return", - "src": "899:25:8" - } - ] - }, - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_factCheck", - "overrides": null, - "parameters": { - "id": 1135, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1134, - "mutability": "mutable", - "name": "fact", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1144, - "src": "846:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1133, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "846:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "845:14:8" - }, - "returnParameters": { - "id": 1138, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1137, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1144, - "src": "883:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1136, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "883:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "882:6:8" - }, - "scope": 1174, - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "id": 1164, - "nodeType": "FunctionDefinition", - "src": "937:272:8", - "nodes": [], - "body": { - "id": 1163, - "nodeType": "Block", - "src": "986:223:8", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1149, - "name": "verifiedFact", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1117, - "src": "1058:12:8", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", - "typeString": "mapping(bytes32 => bool)" - } - }, - "id": 1151, - "indexExpression": { - "argumentTypes": null, - "id": 1150, - "name": "factHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1146, - "src": "1071:8:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1058:22:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1152, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1083:4:8", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "1058:29:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1154, - "nodeType": "ExpressionStatement", - "src": "1058:29:8" - }, - { - "condition": { - "argumentTypes": null, - "id": 1156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1134:18:8", - "subExpression": { - "argumentTypes": null, - "id": 1155, - "name": "anyFactRegistered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1119, - "src": "1135:17:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1162, - "nodeType": "IfStatement", - "src": "1130:73:8", - "trueBody": { - "id": 1161, - "nodeType": "Block", - "src": "1154:49:8", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1159, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1157, - "name": "anyFactRegistered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1119, - "src": "1168:17:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1158, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1188:4:8", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "1168:24:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1160, - "nodeType": "ExpressionStatement", - "src": "1168:24:8" - } - ] - } - } - ] - }, - "documentation": null, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "registerFact", - "overrides": null, - "parameters": { - "id": 1147, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1146, - "mutability": "mutable", - "name": "factHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1164, - "src": "959:16:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1145, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "959:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "958:18:8" - }, - "returnParameters": { - "id": 1148, - "nodeType": "ParameterList", - "parameters": [], - "src": "986:0:8" - }, - "scope": 1174, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 1173, - "nodeType": "FunctionDefinition", - "src": "1287:108:8", - "nodes": [], - "body": { - "id": 1172, - "nodeType": "Block", - "src": "1354:41:8", - "nodes": [], - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1170, - "name": "anyFactRegistered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1119, - "src": "1371:17:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1169, - "id": 1171, - "nodeType": "Return", - "src": "1364:24:8" - } - ] - }, - "baseFunctions": [6346], - "documentation": null, - "functionSelector": "d6354e15", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "hasRegisteredFact", - "overrides": { - "id": 1166, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1330:8:8" - }, - "parameters": { - "id": 1165, - "nodeType": "ParameterList", - "parameters": [], - "src": "1313:2:8" - }, - "returnParameters": { - "id": 1169, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1168, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1173, - "src": "1348:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1167, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1348:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1347:6:8" - }, - "scope": 1174, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1112, - "name": "IQueryableFactRegistry", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 6347, - "src": "143:22:8", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IQueryableFactRegistry_$6347", - "typeString": "contract IQueryableFactRegistry" - } - }, - "id": 1113, - "nodeType": "InheritanceSpecifier", - "src": "143:22:8" - } - ], - "contractDependencies": [6328, 6347], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "linearizedBaseContracts": [1174, 6347, 6328], - "name": "FactRegistry", - "scope": 1175 + "internalType": "contract IFactRegistry", + "name": "", + "type": "address" } ], - "license": "Apache-2.0." + "stateMutability": "view", + "type": "function" }, - "id": 8 -} + { + "inputs": [], + "name": "referralExpirationTime", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "proofParams", + "type": "uint256[]" + }, + { "internalType": "uint256[]", "name": "proof", "type": "uint256[]" }, + { + "internalType": "uint256[]", + "name": "taskMetadata", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "cairoAuxInput", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "cairoVerifierId", + "type": "uint256" + } + ], + "name": "verifyProofAndRegister", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry2.json b/crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry2.json new file mode 100644 index 00000000..1c5ff4b1 --- /dev/null +++ b/crates/prover-services/gps-fact-checker/tests/artifacts/FactRegistry2.json @@ -0,0 +1,194 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "bootloaderProgramContract", + "type": "address" + }, + { + "internalType": "address", + "name": "memoryPageFactRegistry_", + "type": "address" + }, + { + "internalType": "address[]", + "name": "cairoVerifierContracts", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "simpleBootloaderProgramHash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "applicativeBootloaderProgramHash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "hashedSupportedCairoVerifiers", + "type": "uint256" + }, + { + "internalType": "address", + "name": "referenceVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "referralDurationSeconds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "programOutputFact", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32[]", + "name": "pagesHashes", + "type": "bytes32[]" + } + ], + "name": "LogMemoryPagesHashes", + "type": "event" + }, + { + "inputs": [], + "name": "PAGE_INFO_ADDRESS_OFFSET", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_HASH_OFFSET", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_SIZE", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_SIZE_IN_BYTES", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAGE_INFO_SIZE_OFFSET", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBootloaderConfig", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hasRegisteredFact", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "identify", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "fact", "type": "bytes32" } + ], + "name": "isValid", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "fact", "type": "bytes32" } + ], + "name": "localIsValid", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "referenceFactRegistry", + "outputs": [ + { + "internalType": "contract IFactRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "referralExpirationTime", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "proofParams", + "type": "uint256[]" + }, + { "internalType": "uint256[]", "name": "proof", "type": "uint256[]" }, + { + "internalType": "uint256[]", + "name": "taskMetadata", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "cairoAuxInput", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "cairoVerifierId", + "type": "uint256" + } + ], + "name": "verifyProofAndRegister", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/crates/prover-services/sharp-service/Cargo.toml b/crates/prover-services/sharp-service/Cargo.toml index dd46b05a..7f508aeb 100644 --- a/crates/prover-services/sharp-service/Cargo.toml +++ b/crates/prover-services/sharp-service/Cargo.toml @@ -8,6 +8,7 @@ alloy.workspace = true async-trait.workspace = true base64 = "0.22.1" cairo-vm.workspace = true +color-eyre.workspace = true dotenvy.workspace = true gps-fact-checker.workspace = true hex.workspace = true @@ -25,6 +26,7 @@ tracing.workspace = true url.workspace = true utils.workspace = true uuid.workspace = true +log = "0.4.21" [dev-dependencies] tokio.workspace = true diff --git a/crates/prover-services/sharp-service/src/client.rs b/crates/prover-services/sharp-service/src/client.rs index 71550924..52576a26 100644 --- a/crates/prover-services/sharp-service/src/client.rs +++ b/crates/prover-services/sharp-service/src/client.rs @@ -6,12 +6,9 @@ use url::Url; use utils::env_utils::get_env_var_or_panic; use uuid::Uuid; -use crate::error::SharpError; +use crate::error::{OtherError, SharpError}; use crate::types::{SharpAddJobResponse, SharpGetStatusResponse}; -/// SHARP endpoint for Sepolia testnet -pub const DEFAULT_SHARP_URL: &str = "https://sepolia-recursive.public-testnet.provingservice.io/v1/gateway"; - /// SHARP API async wrapper pub struct SharpClient { base_url: Url, @@ -97,10 +94,24 @@ impl SharpClient { // Adding params to the url add_params_to_url(&mut base_url, params); - let res = self.client.post(base_url).send().await.map_err(SharpError::GetJobStatusFailure)?; + let res = self.client.post(base_url.clone()).send().await.map_err(SharpError::GetJobStatusFailure)?; match res.status() { - reqwest::StatusCode::OK => res.json().await.map_err(SharpError::GetJobStatusFailure), + reqwest::StatusCode::OK => { + let text = res.text().await.unwrap(); + log::info!("Received response text: {:?}", text); + + match serde_json::from_str::(&text) { + Ok(response) => { + log::info!("Deserialization successful: {:?}", response); + Ok(response) + } + Err(e) => { + log::error!("Deserialization failed: {:?}", e); + Err(SharpError::Other(OtherError::from(e.to_string()))) + } + } + } code => Err(SharpError::SharpService(code)), } } @@ -115,6 +126,6 @@ fn add_params_to_url(url: &mut Url, params: Vec<(&str, &str)>) { impl Default for SharpClient { fn default() -> Self { - Self::new(DEFAULT_SHARP_URL.parse().unwrap()) + Self::new(get_env_var_or_panic("SHARP_URL").parse().unwrap()) } } diff --git a/crates/prover-services/sharp-service/src/config.rs b/crates/prover-services/sharp-service/src/config.rs index eddd4768..7117c131 100644 --- a/crates/prover-services/sharp-service/src/config.rs +++ b/crates/prover-services/sharp-service/src/config.rs @@ -1,8 +1,7 @@ use alloy::primitives::Address; use serde::{Deserialize, Serialize}; use url::Url; - -use crate::client::DEFAULT_SHARP_URL; +use utils::env_utils::get_env_var_or_panic; /// SHARP proving service configuration #[derive(Debug, Clone, Serialize, Deserialize)] @@ -19,8 +18,8 @@ impl Default for SharpConfig { /// Default config for Sepolia testnet fn default() -> Self { Self { - service_url: DEFAULT_SHARP_URL.parse().unwrap(), - rpc_node_url: "https://ethereum-sepolia-rpc.publicnode.com".parse().unwrap(), + service_url: get_env_var_or_panic("SHARP_URL").parse().unwrap(), + rpc_node_url: get_env_var_or_panic("ETHEREUM_RPC_URL").parse().unwrap(), verifier_address: "0x07ec0D28e50322Eb0C159B9090ecF3aeA8346DFe".parse().unwrap(), } } diff --git a/crates/prover-services/sharp-service/src/error.rs b/crates/prover-services/sharp-service/src/error.rs index c17e9feb..b77718b0 100644 --- a/crates/prover-services/sharp-service/src/error.rs +++ b/crates/prover-services/sharp-service/src/error.rs @@ -1,7 +1,41 @@ use alloy::primitives::hex::FromHexError; +use color_eyre::eyre::eyre; use gps_fact_checker::error::FactCheckerError; use prover_client_interface::ProverClientError; use reqwest::StatusCode; +use std::fmt; + +// ==================================================== +/// Wrapper Type for Other(<>) job type +#[derive(Debug)] +pub struct OtherError(color_eyre::eyre::Error); + +impl fmt::Display for OtherError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(f) + } +} + +impl std::error::Error for OtherError {} + +impl PartialEq for OtherError { + fn eq(&self, _other: &Self) -> bool { + false + } +} + +impl From for OtherError { + fn from(err: color_eyre::eyre::Error) -> Self { + OtherError(err) + } +} + +impl From for OtherError { + fn from(error_string: String) -> Self { + OtherError(eyre!(error_string)) + } +} +// ==================================================== #[derive(Debug, thiserror::Error)] pub enum SharpError { @@ -23,6 +57,8 @@ pub enum SharpError { PieEncode(#[source] snos::error::SnOsError), #[error("Failed to get url as path segment mut. URL is cannot-be-a-base.")] PathSegmentMutFailOnUrl, + #[error("Other error: {0}")] + Other(#[from] OtherError), } impl From for ProverClientError { diff --git a/crates/prover-services/sharp-service/src/lib.rs b/crates/prover-services/sharp-service/src/lib.rs index 1ef26004..4abe68de 100644 --- a/crates/prover-services/sharp-service/src/lib.rs +++ b/crates/prover-services/sharp-service/src/lib.rs @@ -5,7 +5,7 @@ mod types; use std::str::FromStr; -use alloy::primitives::B256; +use alloy::primitives::{B256, I256}; use async_trait::async_trait; use gps_fact_checker::fact_info::get_fact_info; use gps_fact_checker::FactChecker; @@ -30,12 +30,13 @@ pub struct SharpProverService { impl ProverClient for SharpProverService { async fn submit_task(&self, task: Task) -> Result { match task { - Task::CairoPie(cairo_pie) => { - let fact_info = get_fact_info(&cairo_pie, None)?; - let encoded_pie = - snos::sharp::pie::encode_pie_mem(cairo_pie).map_err(ProverClientError::PieEncoding)?; - let (_, job_key) = self.sharp_client.add_job(&encoded_pie).await?; - Ok(combine_task_id(&job_key, &fact_info.fact)) + Task::CairoPie(_cairo_pie) => { + // let fact_info = get_fact_info(&cairo_pie, None)?; + // let encoded_pie = + // snos::sharp::pie::encode_pie_mem(cairo_pie).map_err(ProverClientError::PieEncoding)?; + // let (_, job_key) = self.sharp_client.add_job(&encoded_pie).await?; + // Ok(combine_task_id(&job_key, &fact_info.fact)) + Ok(combine_task_id(&Uuid::new_v4(), &B256::from(I256::ZERO))) } } } @@ -43,6 +44,7 @@ impl ProverClient for SharpProverService { async fn get_task_status(&self, task_id: &TaskId) -> Result { let (job_key, fact) = split_task_id(task_id)?; let res = self.sharp_client.get_job_status(&job_key).await?; + match res.status { // TODO : We would need to remove the FAILED, UNKNOWN, NOT_CREATED status as it is not in the sharp client response specs : // https://docs.google.com/document/d/1-9ggQoYmjqAtLBGNNR2Z5eLreBmlckGYjbVl0khtpU0 diff --git a/crates/prover-services/sharp-service/src/types.rs b/crates/prover-services/sharp-service/src/types.rs index 89c18352..eab8eaa7 100644 --- a/crates/prover-services/sharp-service/src/types.rs +++ b/crates/prover-services/sharp-service/src/types.rs @@ -14,6 +14,7 @@ pub struct SharpGetProofResponse { #[derive(Default, Debug, Clone, Deserialize)] pub struct SharpGetStatusResponse { + #[serde(default)] pub status: CairoJobStatus, pub invalid_reason: Option, pub error_log: Option, diff --git a/e2e-tests/Cargo.toml b/e2e-tests/Cargo.toml index 15aa9da8..30bac038 100644 --- a/e2e-tests/Cargo.toml +++ b/e2e-tests/Cargo.toml @@ -9,18 +9,23 @@ async-trait.workspace = true aws-config.workspace = true aws-sdk-s3.workspace = true aws-sdk-sqs.workspace = true +aws-sdk-eventbridge.workspace = true color-eyre.workspace = true dotenvy.workspace = true httpmock.workspace = true log = "0.4.21" +mongodb.workspace = true orchestrator.workspace = true reqwest = { workspace = true, features = ["json"] } serde_json.workspace = true +starknet.workspace = true testcontainers.workspace = true tokio = { workspace = true, features = ["full"] } tokio-stream.workspace = true tokio-util.workspace = true url.workspace = true +uuid = { version = "1.8.0", features = ["v4"] } +bytes = "1.6.0" [[test]] name = "test_samples" diff --git a/e2e-tests/artifacts/get_state_update_238996.json b/e2e-tests/artifacts/get_state_update_238996.json new file mode 100644 index 00000000..dc6f46ac --- /dev/null +++ b/e2e-tests/artifacts/get_state_update_238996.json @@ -0,0 +1,3479 @@ +{ + "block_hash": "0x2f593697232a57276f3c8f32586164b77f9d886e8e4b2386c36ee5fa9ff6dd5", + "old_root": "0x407bcd19337c8fc1846138863802ffc57ec365616d6bbcb2eda878387d1683a", + "new_root": "0x37bf86e51616172b8d3d32957ca44f0b11b0e24fdae8fd9e44464ccd420b420", + "state_diff": { + "storage_diffs": [ + { + "address": "0x3d39f7248fb2bfb960275746470f7fb470317350ad8656249ec66067559e892", + "storage_entries": [ + { + "key": "0x2d7cec932c6cc9e9c2f31a355b609695158d021b50fa78790bb407b4a1b5ad2", + "value": "0x6509095f" + }, + { + "key": "0x4b0162661745aadb8cb9078e90cd69999b5e12aeef3f298faf79f0dba5f7e14", + "value": "0x10ecd1d800590" + }, + { + "key": "0x89511a56ef72ffebcbbfaedee4c41170b8453ddd69b1d9c3efd3ed846d7d1f", + "value": "0xde8664f83f26677" + }, + { + "key": "0x35f67f399e2ef386797ff346fd4f9049c698443d9f16698349a52d1f9c58443", + "value": "0x180b938ed8b906" + }, + { + "key": "0x74acf2ae9192e0a29fac335bd19550b0bf9fe26ee35ddc265e8eaf969c5775c", + "value": "0xe158e7e4c982daf" + } + ] + }, + { + "address": "0x62fa7afe1ca2992f8d8015385a279f49fad36299754fb1e9866f4f052289376", + "storage_entries": [ + { + "key": "0x48be3692ab3e9e8bd4a134a7b958b4e69bcb00a71d4f58c22f9311921f12bcf", + "value": "0xb4794d6ab20aa417e" + }, + { + "key": "0x1d430bf138ea7c30cc4ba41938ff8081ecede809c1d7bc56b785784aceaae08", + "value": "0x1c58fd5fb9759a02b631" + } + ] + }, + { + "address": "0x136910b27feeb0d898bef1786746528380ffa35ce4f1167a6872d89fa62b6d4", + "storage_entries": [ + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x309c042d3729173c7f2f91a34f04d8c509c1b292d334679ef1aabf8da0899cc" + }, + { + "key": "0x1ccc09c8a19948e048de7add6929589945e25f22059c7345aaf7837188d8d05", + "value": "0x32cc0ae279afa02bcccf7fff00051b1022ecbe04c9897591cb64963c4cac42d" + } + ] + }, + { + "address": "0x1b23ed400b210766111ba5b1e63e33922c6ba0c45e6ad56ce112e5f4c578e62", + "storage_entries": [ + { + "key": "0x672d16a175120754045e21563dd49c5debabff275022aec6cd39c53e8e9c57d", + "value": "0x2febab219deb3f32" + }, + { + "key": "0x131f6efd2d7938489c8c68e405dfeba9ef8881de389b5501b1cc949f0369ed9", + "value": "0x937575e55e54663e59" + }, + { + "key": "0x16959433341337ac941cd4e57b41288667ddd17669996bef9d213060da40dbf", + "value": "0x10bcec2f7" + } + ] + }, + { + "address": "0x72291cbfd4d8be52134884cb34ee0b268258cb8ac209bfc185bcb91db1e7999", + "storage_entries": [ + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x0" + } + ] + }, + { + "address": "0x1ea237607b7d9d2e9997aa373795929807552503683e35d8739f4dc46652de1", + "storage_entries": [ + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x4e616c647b" + }, + { + "key": "0x43f863fbfec515e09baf07ce0460de605f678a1561a44e0bfa821525f5c7d0d", + "value": "0x1f8e7f7c" + } + ] + }, + { + "address": "0x41a708cf109737a50baa6cbeb9adf0bf8d97112dc6cc80c7a458cbad35328b0", + "storage_entries": [ + { + "key": "0x332df419aa058c3f4b36acbf5af4b7e8e3d4dd58918d5f0ab2841741e7b55c2", + "value": "0x6509095f" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0x56417b8a5f" + }, + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0x565eeab0d2" + }, + { + "key": "0x2712b812fff3c2f3b38d4c532c684b5a1800dae9c4a8001c6f855bb520c7c5", + "value": "0x9a3b09820822aed833a99746fe36f346" + }, + { + "key": "0x19dbc9b4eab95d05b7871c69cdeef24e69dc2a3536f0c6bf169000dc1fdd20d", + "value": "0x62dd27e936e33c5993cab7f724c6fe64" + } + ] + }, + { + "address": "0xcfd39f5244f7b617418c018204a8a9f9a7f72e71f0ef38f968eeb2a9ca302b", + "storage_entries": [ + { + "key": "0x3351bce4793f90e4aa00447357c2d34ac08611756193d8249009e0396dd7b41", + "value": "0x6509095f" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0x24c04d2041" + }, + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0x2181ea0cdd1d2c148f41" + }, + { + "key": "0x57c60b189063035eed65879a14ad5f6e718027a212dafbe52f9bcd79e9f4fa", + "value": "0x15cb2b06bef596721" + } + ] + }, + { + "address": "0x47ad51726d891f972e74e4ad858a261b43869f7126ce7436ee0b2529a98f486", + "storage_entries": [ + { + "key": "0x48be3692ab3e9e8bd4a134a7b958b4e69bcb00a71d4f58c22f9311921f12bcf", + "value": "0x534feb82" + }, + { + "key": "0x1d430bf138ea7c30cc4ba41938ff8081ecede809c1d7bc56b785784aceaae08", + "value": "0x113218040f6" + } + ] + }, + { + "address": "0x75b0d87aca8dee25df35cdc39a82b406168fa23a76fc3f03abbfdc6620bb6d7", + "storage_entries": [ + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x1130d4" + }, + { + "key": "0x2b9344ffc09b3bfd715dc285845f90dfcc746fc49a0c817b6cbe532092d90c7", + "value": "0x3c45" + } + ] + }, + { + "address": "0x45e7131d776dddc137e30bdd490b431c7144677e97bf9369f629ed8d3fb7dd6", + "storage_entries": [ + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x4629f0eb2737b5" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0xf181da12c7" + }, + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0x2260eb9a4d8a2e38a7" + }, + { + "key": "0x57c60b189063035eed65879a14ad5f6e718027a212dafbe52f9bcd79e9f4fa", + "value": "0x36865ce2c924d3" + }, + { + "key": "0xb6980fbfd6243019e03c00f3074a127dc9c7f7b763341a1c0b7ee968fdcb43", + "value": "0x0" + }, + { + "key": "0x18930a4a425df4de774a74c429d4fedf40de3ee97cc0a73b89194edd162a642", + "value": "0x17817fc84c2473569014bbb4" + }, + { + "key": "0x73e94e71dc9f37e98e6aa7cc11536eb94e7c55d6605f311c99584f326f45179", + "value": "0x1b3a6dce2defeb07737a4810" + }, + { + "key": "0x144fb6d7f48cd1daa2f3d0a93b3e0048a8e1f7394caf134818ae57f7150e396", + "value": "0x589e039eb6" + }, + { + "key": "0x3351bce4793f90e4aa00447357c2d34ac08611756193d8249009e0396dd7b41", + "value": "0x6509095f" + }, + { + "key": "0x6edded4efb159b71fb1701ffb016a4a4ce076ff5cd4b6eec20c504b5fdace5e", + "value": "0x0" + } + ] + }, + { + "address": "0x4d0390b777b424e43839cd1e744799f3de6c176c7e32c1812a41dbd9c19db6a", + "storage_entries": [ + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x11ea9c7311dc5d9" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0x3f521d3d2ed" + }, + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0x902573550586a6f133" + }, + { + "key": "0x57c60b189063035eed65879a14ad5f6e718027a212dafbe52f9bcd79e9f4fa", + "value": "0x37bdc1de60db1c" + }, + { + "key": "0x2c6705dcc5ac75d87473b218701d811d6731e1863067927cc311120b16a28a5", + "value": "0x3f0598a58e" + }, + { + "key": "0x51449a3d9b9b9e3f79123bedfc512feb297d98e9ba80aa8f03bfca471ec386a", + "value": "0x3be1d77316c" + }, + { + "key": "0x3351bce4793f90e4aa00447357c2d34ac08611756193d8249009e0396dd7b41", + "value": "0x6509095f" + }, + { + "key": "0x622de76fde18c4ad7b9b4a4afb34709868be06146472b53cbe2f74c91f0a001", + "value": "0x11b97c6b02d" + } + ] + }, + { + "address": "0x2aab581754064a87ade1b680fd9756dc3a17440a87aaf496dcfb39fd163d1dd", + "storage_entries": [ + { + "key": "0x2e3f9cadd00a7b869d6b98db5d32847ff18a5561c3f3f7a944380864c8f247b", + "value": "0x6509095f" + }, + { + "key": "0x4e9417c05bcf183e111558ce4666b053bbfe9736b74fba16b017ab7ae075f1", + "value": "0x317d034999b7ee22e1" + }, + { + "key": "0x3cdef5d80c6ad04af135e445867114b5ce32ed8dc8de667995f3d27760e3520", + "value": "0x29611c30263a809" + }, + { + "key": "0x3e65716c9b9f010d10085941d0c6e6dfb190695b7cf09a71f0aca74ab94cdf", + "value": "0xe02a6371fa1b04ff569a" + }, + { + "key": "0x24dc99466e4418b4fccd818c369e805aa4b2c2e28731ca51ec24311cfb85a69", + "value": "0x1203a109580ba7f751e369b8" + }, + { + "key": "0xf1ec356adea149fcc8824a2b8712d81d1df416b0f8f8ac32931c66d5f80501", + "value": "0x1d5eeb91005e9" + } + ] + }, + { + "address": "0x1435498bf393da86b4733b9264a86b58a42b31f8d8b8ba309593e5c17847672", + "storage_entries": [ + { + "key": "0x47ca6125fb3ca33c5847b5336c43e2dfa4ebd1e76a6f8149cf3801b506fab29", + "value": "0x5d1b6a7134efa09a2999261b48ac7e2ece40b9595f89c1f2000000000000000" + }, + { + "key": "0x4c431dbf92cec0a48a728442a1b14edeaf5144712f3f7b3bb98f43c21cd7670", + "value": "0x1" + }, + { + "key": "0x55000ecd829d69447f8c5549b3c8157875d1942b4d0e9128bb3287dc8578f79", + "value": "0x25e23874d051a17bd1d145e3634970d1bb290dae5c0d73386d4598278861715" + } + ] + }, + { + "address": "0x5dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b", + "storage_entries": [ + { + "key": "0x52e76cad75d24a019190b75f2d94e4313f9f92cfb1dbcfe62c863faa2dca81c", + "value": "0x16360204b48d7098cc79" + }, + { + "key": "0x4ed55f236b424b2eeb2bc294c9359c3d917b6b20213a60c392be5a80c881e6b", + "value": "0x100762b9da0759d1a73a6f959d821f95ca" + }, + { + "key": "0x1568e314a5593860f749f3ea8d2e0add62f38e80e8f30b04ebb278f40c385f5", + "value": "0x10134b5210000000000000000000002a672f03c6dc384bb278e75a746cd" + }, + { + "key": "0x5f0bef2282f18a0bc659723ff06c529cf4af154628a7b1cf925f71552b1258d", + "value": "0x10070e55c00000000000000000006554c75ce048f9dd6ce0d7a82276c6a" + }, + { + "key": "0x5bcaa1e73a4bce52448a05f6c1621a8e96cac50a493f14b47bfd9472b21a366", + "value": "0x7c3d75ddb7114c719824fb08a9" + }, + { + "key": "0x3f4bb10a68f4e591ee94e94546ce408da0dc22eb52f265ffdf1fb192372302f", + "value": "0x596206b481c53bb3f" + }, + { + "key": "0xc37a99b03e26aa791e82083190c484f773383fbdc97b455ebb37590ac5f448", + "value": "0x10134b63d0000000000000000000002a65a4aba271fe357b8ca100c3940" + }, + { + "key": "0x1ea2e870fda4f7c97320ae0f1d6fe31d5932ff1f279659ab0c7fedab55e9d8a", + "value": "0x133216c143a0e1b59db4f39843b54f1" + }, + { + "key": "0x1c872221e7c3919f427e7039c18d634fa2ff516f539c5a72776d82418ffa07", + "value": "0x3fdaf23ca8" + } + ] + }, + { + "address": "0x5900cfa2b50d53b097cb305d54e249e31f24f881885aae5639b0cd6af4ed298", + "storage_entries": [ + { + "key": "0x19dbc9b4eab95d05b7871c69cdeef24e69dc2a3536f0c6bf169000dc1fdd20e", + "value": "0x42cf44452f" + }, + { + "key": "0x19dbc9b4eab95d05b7871c69cdeef24e69dc2a3536f0c6bf169000dc1fdd20d", + "value": "0x3825fcbd846741be1aa64cccc4d968a9" + }, + { + "key": "0x332df419aa058c3f4b36acbf5af4b7e8e3d4dd58918d5f0ab2841741e7b55c2", + "value": "0x6509095f" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0x6392c561fd" + }, + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0xe22be37d71caa09d1" + }, + { + "key": "0x2712b812fff3c2f3b38d4c532c684b5a1800dae9c4a8001c6f855bb520c7c5", + "value": "0xc685c52f8b3b13e834dd6c1ef38" + } + ] + }, + { + "address": "0x5d1ea877c135deda37c55aa05b9fb9ca6d5d86a077f8a9895a269dd60c827d0", + "storage_entries": [ + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x309c042d3729173c7f2f91a34f04d8c509c1b292d334679ef1aabf8da0899cc" + }, + { + "key": "0x1ccc09c8a19948e048de7add6929589945e25f22059c7345aaf7837188d8d05", + "value": "0xc74fc4052ee6370c68856e04555e4becb6b4c49a923d654ab22d090209a731" + } + ] + }, + { + "address": "0x6a05844a03bb9e744479e3298f54705a35966ab04140d3d8dd797c1f6dc49d0", + "storage_entries": [ + { + "key": "0x5350bbaed2e5c775f513eaa016d87163780d3161f7df1fc317c2eab49cd62ed", + "value": "0x1" + }, + { + "key": "0x58a811c5ad77c74cf08bfb1dd6f68f0d825b41cc60b1fa566461aaa996327c0", + "value": "0x3" + }, + { + "key": "0x3186fed43d566a7bcd07f65083ab337b0b6c556695b4146d6676fb8ba0fdf33", + "value": "0x200000" + }, + { + "key": "0x1af3d70b811b085a474e106800858ba4988c13a935b5fa0ad914e6bb92fef4", + "value": "0x2001100220044000001100220044000001100220044002000000000" + }, + { + "key": "0xf8616ddc2e26a7d530fa0e85535efe63b0b25f1157305eeee8357c90da4fb3", + "value": "0x1" + } + ] + }, + { + "address": "0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac", + "storage_entries": [ + { + "key": "0x2b9344ffc09b3bfd715dc285845f90dfcc746fc49a0c817b6cbe532092d90c7", + "value": "0x3d2a" + }, + { + "key": "0x6cbaf8ee62a613b7c0acc6e3c8acc2c6877e054581a419941a3d7c04d04469d", + "value": "0x12bd0b1" + } + ] + }, + { + "address": "0xda114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3", + "storage_entries": [ + { + "key": "0x20c1b0d1bdbb9619de8128bf2e21d42be3e4c0627010a51e3ad06117685472b", + "value": "0x5afe5eded13ebea6" + }, + { + "key": "0x626cd57f7b1ef2ae5d753fb8f7daeeecbb6139215d779d3640e3f0d4faaf856", + "value": "0x0" + }, + { + "key": "0x1727959ffc61af4f1ac7048675a680562826825924160a0fa211500787052a1", + "value": "0x434bdddeaf976f2f360b" + }, + { + "key": "0x48f8225953b5814ef869e07c5031a60c8c45699e7822ff65bb51107d39e7a2f", + "value": "0x2c6080fc5846049f" + }, + { + "key": "0x20a182af61ab40a02d8fd523799be7116ddb218122f1af7a97eaf06fb3c563c", + "value": "0x937575e55e54663e59" + }, + { + "key": "0x26060d61d31da33eeb607f5d1663e02708c4dee77b372f92e830bd58e53382f", + "value": "0x2cfb5ea058e093d" + }, + { + "key": "0x6692ef9068f8189d7de8933d47519a33bdf45e5602cb13adcf9ba702dc73998", + "value": "0x0" + }, + { + "key": "0x3ff74950807efa466579c63e6d97bd1e04fceba6b0132c6ab6498cc93d98a78", + "value": "0xb4e6925601614eb5" + }, + { + "key": "0x2434ebadb0067f67679b11a394311df7eee1bd5b5042de2973d31268dd2eec9", + "value": "0x317d034999b7ee22e1" + }, + { + "key": "0x5962a8d31790f02aa28bdbad4a7acd695032017a2ca9769651d89ca82ea7d73", + "value": "0x0" + }, + { + "key": "0x1d386e0b7275a139cd9861312ad91b0451d2262cf2fc6f822a23c3109427b12", + "value": "0x0" + }, + { + "key": "0x5dc24f22288195e83cb53382e4bd0d035166b4a29c85422270cd9bee19f2e9c", + "value": "0x2181ea0cdd1d2c148f41" + }, + { + "key": "0x28424ab1e5a1b72ef45e34ef9d955931e0721623afc53bb09edaac96b5bb54d", + "value": "0x3a69de0ac1d8a53b8127" + }, + { + "key": "0x267ed491a3c5edee79deba58b2a6c9b479548b5611a0abad94fbbfa1382acb3", + "value": "0x452aef7800b55f33de" + }, + { + "key": "0x342708c8af0293dd3d2f3f82a6532a327eb9680542f0779ef21bcb9db83c896", + "value": "0x90cbaf7a6408a331a62" + }, + { + "key": "0x1809b1d86c33d5ea2158d5358d8b525b6ba26a842b4b9737d2b159c3db70e7f", + "value": "0x1333d555e680487f4" + }, + { + "key": "0x7feeda11add29e849906193e5f532be0d7e966c0f824a123c4e5d2ac56d6c72", + "value": "0x36439d36257deb57" + }, + { + "key": "0x5fd36391c29476d20d2b2d89c6fbc5603ba4e1bcbbdcb3ffb7b28e924a9b049", + "value": "0x0" + }, + { + "key": "0x134baede4718349f03381eb58ade4d2a2b29845f335bd80eabcfe0fa26e3b98", + "value": "0x169ad500c8f21805" + }, + { + "key": "0x2de7ac669936cc3b4e9784ff23826dc9056c74d54d3f41f1b0d28b36966369e", + "value": "0x16360204b48d7098cc79" + }, + { + "key": "0x3bd0a232d9aad2407320377e94c1b3da70aa82ba22e5bd5f3d439018e58d3c8", + "value": "0xe1f40d993d228b20" + }, + { + "key": "0x66917995e581ab132d87b79b446118e4c6a9e96c2a13049bab9b743213e23b3", + "value": "0x0" + }, + { + "key": "0x48bc77d23694a42ec3dbde485164a09a7ffebd2cc6cac3d158c1087545560f", + "value": "0x18dee6cf7d14061022fe" + }, + { + "key": "0x3b1a93e68c62c7aac3b3499bbc779dc3a27d542530e361ce8d77a52e28a0d38", + "value": "0x0" + }, + { + "key": "0x5e3d70329a243fd54aa12e338bb8c7ca72d6c4b9e8cc7738488b6f8e702255b", + "value": "0xebde4999ccb4166" + } + ] + }, + { + "address": "0x249f6a22da8d928a975f9f5834faa2acea7b78eb3f9db18b2be9cc5f239a56", + "storage_entries": [ + { + "key": "0xdeb535c18c50db2297b3febff490af42a972af00185705355db663271fde1b", + "value": "0x71afd498d0000" + }, + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x4373691de6338000" + } + ] + }, + { + "address": "0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05", + "storage_entries": [ + { + "key": "0x5635ec61c70e8897f7e6d93793eb811da2ffff97ecf5c5a82cca63dace01201", + "value": "0x151" + }, + { + "key": "0x15747a46069346d90141609543b95da3a3c8a6183b04b6ab8b577ca202d0126", + "value": "0x0" + }, + { + "key": "0x6859ec11c0b9cc8be469175ab187f34272e67a87b44e67d28a77decc688870d", + "value": "0x670daac3e" + }, + { + "key": "0x3f4bb10a68f4e591ee94e94546ce408da0dc22eb52f265ffdf1fb1923723036", + "value": "0x6509095f" + }, + { + "key": "0x2d31c55b6083286b4807bb1860f2dcac2846618422022a778fcaec2fdd97480", + "value": "0x1" + }, + { + "key": "0x48debd70ae9d943ab4f84d69ab1e7980db8e11bd0ba9c6a17f10403db1c513a", + "value": "0x1e692dac502aa92afac598" + }, + { + "key": "0x3f4bb10a68f4e591ee94e94546ce408da0dc22eb52f265ffdf1fb1923723038", + "value": "0x33f199b4d54f4231496476e" + }, + { + "key": "0x5a8b6210538e8f727dd3461bc944adca665c90d1e32d1c4490166a807736e63", + "value": "0x1" + }, + { + "key": "0x1c872221e7c3919f427e7039c18d634fa2ff516f539c5a72776d82418ffa13", + "value": "0xf3ae16a1be" + }, + { + "key": "0x1c872221e7c3919f427e7039c18d634fa2ff516f539c5a72776d82418ffa11", + "value": "0x1d1d792716126a8e2e507a" + }, + { + "key": "0x1a301a1b492f2dfb83d6cf060793df802fb882b06465ac3afe96556ed873ab0", + "value": "0x89b9c1f30e22b25" + }, + { + "key": "0x48debd70ae9d943ab4f84d69ab1e7980db8e11bd0ba9c6a17f10403db1c5137", + "value": "0x3457e1f04d0003e08b5ec0e" + }, + { + "key": "0x48debd70ae9d943ab4f84d69ab1e7980db8e11bd0ba9c6a17f10403db1c5136", + "value": "0x6509095f" + }, + { + "key": "0x23649aa29c91fa0c06951a97713069363f5cf05d86a3400d6d0ef5f344f240b", + "value": "0xc" + }, + { + "key": "0x76507800084b5549df2b7dc4b2852e4cf217c5227259cb0ab52d541662ff49c", + "value": "0x1" + }, + { + "key": "0x3f4bb10a68f4e591ee94e94546ce408da0dc22eb52f265ffdf1fb1923723039", + "value": "0x2f946000605bb7d437629" + }, + { + "key": "0x52e76cad75d24a019190b75f2d94e4313f9f92cfb1dbcfe62c863faa2dca828", + "value": "0x134e0c10552d2a3f9302" + }, + { + "key": "0x52e76cad75d24a019190b75f2d94e4313f9f92cfb1dbcfe62c863faa2dca825", + "value": "0x3521b1c1314281fa05e311c" + }, + { + "key": "0x1c872221e7c3919f427e7039c18d634fa2ff516f539c5a72776d82418ffa10", + "value": "0x346ea33db57a48297898293" + }, + { + "key": "0x4db46e30bcb155ece6ae2e194ac51678ffe1e125bf962521f8543dfc6cd9b5d", + "value": "0xae45f4" + }, + { + "key": "0x7bfaef3bb7ce24e7c55cc6f9b17c4849263353e074fa60667d32c132d1fda23", + "value": "0x9" + }, + { + "key": "0x3f4bb10a68f4e591ee94e94546ce408da0dc22eb52f265ffdf1fb192372303a", + "value": "0x11664b152db3472a9ff4fa" + }, + { + "key": "0xeebcc3a7804cb778280e0bb48163294876a44cbb1a12372236ece212c03c2b", + "value": "0x434d6c2a7ac4217dd0" + }, + { + "key": "0x52e76cad75d24a019190b75f2d94e4313f9f92cfb1dbcfe62c863faa2dca826", + "value": "0x1381812cb144c3ef6f2da2" + }, + { + "key": "0x1c872221e7c3919f427e7039c18d634fa2ff516f539c5a72776d82418ffa0e", + "value": "0x6509095f" + }, + { + "key": "0x5fd1e6b692a1f055be577b88f9e2f5c506dc19e9d4474dbfb7f077551d85a6d", + "value": "0x9" + }, + { + "key": "0x7eee8125f49c32011e4edbb40cf0808b21b266c9e7234d91f32457bfbe89f60", + "value": "0x2e63e43b9d2" + }, + { + "key": "0x3f4bb10a68f4e591ee94e94546ce408da0dc22eb52f265ffdf1fb192372303b", + "value": "0x200789447016da6746" + }, + { + "key": "0x3f4bb10a68f4e591ee94e94546ce408da0dc22eb52f265ffdf1fb1923723037", + "value": "0x33b8cf539afbfec37a91dc8" + }, + { + "key": "0x4e21fb2bf3f45d2e78cf144a1d050df1fe73962b268ff4286025c63c0fd8e4f", + "value": "0x4" + }, + { + "key": "0x7d815a2f092d7a65fc770e2a6047c22c3fe703e8f20b81322460b401c9a82ca", + "value": "0x1" + }, + { + "key": "0x48debd70ae9d943ab4f84d69ab1e7980db8e11bd0ba9c6a17f10403db1c5139", + "value": "0x1927e73db01d46c1f5f8a5" + }, + { + "key": "0x48debd70ae9d943ab4f84d69ab1e7980db8e11bd0ba9c6a17f10403db1c5138", + "value": "0x349fb7a13608adc8f31f8a8" + }, + { + "key": "0x74fd31a23327e5ca0628d8c1c917967dde831cf6cbea1d28ed110e9be73415", + "value": "0x286f34d9" + }, + { + "key": "0x233e35bc7092c2404d3292ec8986d873192460ed0f0e984d73efd02d9c78a48", + "value": "0x3" + }, + { + "key": "0x52e76cad75d24a019190b75f2d94e4313f9f92cfb1dbcfe62c863faa2dca827", + "value": "0x1c673ae42d822e5e63aa2a" + }, + { + "key": "0x1a42ad5ac776d83bda83005392af441ee5a957173cd2bc8a632d4d585c8b585", + "value": "0x209" + }, + { + "key": "0x52e76cad75d24a019190b75f2d94e4313f9f92cfb1dbcfe62c863faa2dca824", + "value": "0x34aff2284992de6f8e7dfd0" + }, + { + "key": "0x52e76cad75d24a019190b75f2d94e4313f9f92cfb1dbcfe62c863faa2dca823", + "value": "0x6509095f" + }, + { + "key": "0x11f81db73b6613735c00cc426f5b6b86448e70f14c544730b046a109595859", + "value": "0x145" + }, + { + "key": "0x1c872221e7c3919f427e7039c18d634fa2ff516f539c5a72776d82418ffa0f", + "value": "0x342ed11886317f5d2929196" + }, + { + "key": "0x1c872221e7c3919f427e7039c18d634fa2ff516f539c5a72776d82418ffa12", + "value": "0x20b773abc18dc7cb81b355" + } + ] + }, + { + "address": "0x408f08dd87750f5218c029563db17cbcde313ff44c7d01d15be3cc9d5af60bf", + "storage_entries": [ + { + "key": "0x1ccc09c8a19948e048de7add6929589945e25f22059c7345aaf7837188d8d05", + "value": "0x5a6421176acfead29981fb12486a2e48df3dbaf1613ba53d53a057242c4856a" + }, + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x309c042d3729173c7f2f91a34f04d8c509c1b292d334679ef1aabf8da0899cc" + } + ] + }, + { + "address": "0x30615bec9c1506bfac97d9dbd3c546307987d467a7f95d5533c2e861eb81f3f", + "storage_entries": [ + { + "key": "0x7df487a369eb490d3ce0edce44d207d633058f4726221419f16d2ed25ef69a7", + "value": "0x8d75fdd04aa" + }, + { + "key": "0x5fbd4be969f5807b2ade6aed315cda0728ab8098bcb7dd0aa948a1d2edb0e75", + "value": "0x12e1d118094d6f12759" + }, + { + "key": "0x773fa9f4d2f7c3d7d4a2247b1cb67e3091a53d024ad91fbba9b1996e6ed0463", + "value": "0x42828a0b16" + }, + { + "key": "0x2c095994ab24c079511f4f4c771bb47fe3f97f400a638ee83878309d1ea31cd", + "value": "0x12e1d118094d6f12759" + }, + { + "key": "0x3cdef5d80c6ad04af135e445867114b5ce32ed8dc8de667995f3d27760e3520", + "value": "0xf00fe46e88" + }, + { + "key": "0x3e65716c9b9f010d10085941d0c6e6dfb190695b7cf09a71f0aca74ab94cdf", + "value": "0x1de940d98bcdfe23" + }, + { + "key": "0x597eac3b42ecb51c303520e05217f6550e7cb37ccfc0a1fe931184d438e6d3f", + "value": "0x406ec7082b" + }, + { + "key": "0x4e9417c05bcf183e111558ce4666b053bbfe9736b74fba16b017ab7ae075f1", + "value": "0x221eb4e3b2e4c4298f" + }, + { + "key": "0x25d9306a3dd51d4276fa92f67bcbd66be9d76c61120929a3ca417a0ac223785", + "value": "0x12e1d118094d6f12759" + }, + { + "key": "0x55cfa0d6954e4ab7a93f16a49b5ac2e36b4d90d9d675f2b23566f3f7dd4abbb", + "value": "0x8d75fdd04aa" + }, + { + "key": "0x24dc99466e4418b4fccd818c369e805aa4b2c2e28731ca51ec24311cfb85a69", + "value": "0x40d95df3f37ced441367891" + }, + { + "key": "0xf1ec356adea149fcc8824a2b8712d81d1df416b0f8f8ac32931c66d5f80501", + "value": "0x8d75fdd04aa" + }, + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x5a80e2a014c73e" + }, + { + "key": "0x2e3f9cadd00a7b869d6b98db5d32847ff18a5561c3f3f7a944380864c8f247b", + "value": "0x6509095f" + } + ] + }, + { + "address": "0x6ac597f8116f886fa1c97a23fa4e08299975ecaf6b598873ca6792b9bbfb678", + "storage_entries": [ + { + "key": "0x678836f7279a32f701ec9a345d49c040487c59eef4a53c70cec33dec96c950b", + "value": "0x1" + }, + { + "key": "0x48446553630d18ce593636c20a57f733ad9dd5c0fa7cbc43908480ba655c022", + "value": "0x44afd1" + }, + { + "key": "0x5f844b7a58a2baa20a8a87b277f4d84e6caf288023c310735000f5321c92873", + "value": "0x6573d2df" + }, + { + "key": "0x3fba4728ecb97a2e433014ce97e0125a361938e90369ba132f4472e01ca0052", + "value": "0x2e2ade3e622" + }, + { + "key": "0x2bdc35d4070e4262b6fb41b96655a8be336dddb222348fc877673f3c3b4d311", + "value": "0x6573d2df" + }, + { + "key": "0x5f844b7a58a2baa20a8a87b277f4d84e6caf288023c310735000f5321c92874", + "value": "0x1" + }, + { + "key": "0x5f844b7a58a2baa20a8a87b277f4d84e6caf288023c310735000f5321c92872", + "value": "0x519b85c7331ac2aeb4cade1f2222404a174a8e0b3ee747169c66e2f40bee99" + }, + { + "key": "0x23b221ddaa6e54dd1734a606bfea105946986f032fa39f16c73bcbd788d4248", + "value": "0x7d669ff910" + }, + { + "key": "0x6c48e2a85c15d8e0c2c3844838a72196f665b5708b4094ed2587dfb55589d4c", + "value": "0x385020dfa38ee8a559cab4ca42e1ac64908c2e35bf2e2b2cf207beefa4f37ff" + }, + { + "key": "0x6c48e2a85c15d8e0c2c3844838a72196f665b5708b4094ed2587dfb55589d4a", + "value": "0xab052cba5e" + }, + { + "key": "0x13c9cf8da023f523734ee524d6dd4f8e9ccf8d1159f1b444815ce089cf7b198", + "value": "0x1083b5c249" + }, + { + "key": "0x5709042f5b0075f00934694d58f4576e1d9d9d3a2574a59f97b6687407fbd4f", + "value": "0x6573d2df" + }, + { + "key": "0x260b06ba0fa1768166a51296315830f27d997b25c8808bc57d3a8c5452adf2e", + "value": "0x48d52ce36d" + }, + { + "key": "0x2bdc35d4070e4262b6fb41b96655a8be336dddb222348fc877673f3c3b4d312", + "value": "0x1" + }, + { + "key": "0x5709042f5b0075f00934694d58f4576e1d9d9d3a2574a59f97b6687407fbd4e", + "value": "0x47d5788081f93242204357c1d893138ab1065293e9278eb63abfb030f3e2c5f" + }, + { + "key": "0x5709042f5b0075f00934694d58f4576e1d9d9d3a2574a59f97b6687407fbd4c", + "value": "0xcd2307dfb9" + }, + { + "key": "0x5f844b7a58a2baa20a8a87b277f4d84e6caf288023c310735000f5321c92870", + "value": "0xbbf174c023" + }, + { + "key": "0x23b221ddaa6e54dd1734a606bfea105946986f032fa39f16c73bcbd788d424c", + "value": "0x1" + }, + { + "key": "0x260b06ba0fa1768166a51296315830f27d997b25c8808bc57d3a8c5452adf31", + "value": "0x6573d2df" + }, + { + "key": "0x678836f7279a32f701ec9a345d49c040487c59eef4a53c70cec33dec96c9507", + "value": "0x7386b030d1" + }, + { + "key": "0x2bdc35d4070e4262b6fb41b96655a8be336dddb222348fc877673f3c3b4d30e", + "value": "0x467030d0cd" + }, + { + "key": "0x2e6c5857ad5f9537794e7d3ed13f52ed0810d89670321a7c30b9e3ea13ce4e", + "value": "0x24cfd4ab214" + }, + { + "key": "0x7e7a3c9d053aceaf886bc5b1a196979f3f761f4374873b3bf06105034028980", + "value": "0x640d70ab" + }, + { + "key": "0x6c48e2a85c15d8e0c2c3844838a72196f665b5708b4094ed2587dfb55589d4e", + "value": "0x1" + }, + { + "key": "0x6c48e2a85c15d8e0c2c3844838a72196f665b5708b4094ed2587dfb55589d4d", + "value": "0x6573d2df" + }, + { + "key": "0x678836f7279a32f701ec9a345d49c040487c59eef4a53c70cec33dec96c950a", + "value": "0x6573d2df" + }, + { + "key": "0x5709042f5b0075f00934694d58f4576e1d9d9d3a2574a59f97b6687407fbd50", + "value": "0x1" + }, + { + "key": "0x260b06ba0fa1768166a51296315830f27d997b25c8808bc57d3a8c5452adf32", + "value": "0x1" + }, + { + "key": "0x678836f7279a32f701ec9a345d49c040487c59eef4a53c70cec33dec96c9509", + "value": "0x55a1279f91ea6b4fdcc28038eff829eb58228b888ce5236cdeea0a624fa0ea1" + }, + { + "key": "0x23b221ddaa6e54dd1734a606bfea105946986f032fa39f16c73bcbd788d424b", + "value": "0x6573d2df" + }, + { + "key": "0x260b06ba0fa1768166a51296315830f27d997b25c8808bc57d3a8c5452adf30", + "value": "0x207a638e512242596e6d7d8f24f906548ee17812ca76c41aa2e1fd842cdb9bf" + }, + { + "key": "0x14841a5a11351608327939e0c19cad291f9c901d51946f5ce50b176645efb21", + "value": "0x763bf970" + }, + { + "key": "0x2bdc35d4070e4262b6fb41b96655a8be336dddb222348fc877673f3c3b4d310", + "value": "0x575e2f0650aaf9964cf0da778dd40b7487f6f14189c761118b40e81e21a2cff" + }, + { + "key": "0x23b221ddaa6e54dd1734a606bfea105946986f032fa39f16c73bcbd788d424a", + "value": "0x5197a6af3f299cf77c9ed5d814fcd5ffc7b807265333c903b1f99286f9ca01d" + } + ] + }, + { + "address": "0x4b1b3fdf34d00288a7956e6342fb366a1510a9387d321c87f3301d990ac19d4", + "storage_entries": [ + { + "key": "0x47bcafe13fc507313e106336239a4b5d33005032d0aea63473e56568590e36c", + "value": "0x1" + }, + { + "key": "0x1832133ca68c7af4bd8e1be1b8ea8db866a255b1cae06a9bc8969af06bf4129", + "value": "0x1" + } + ] + }, + { + "address": "0x76dbabc4293db346b0a56b29b6ea9fe18e93742c73f12348c8747ecfc1050aa", + "storage_entries": [ + { + "key": "0x61b2233a468207458e65de7cbdf7e03ad3403cb3f0f70ee34d8a515a8f582fa", + "value": "0x7d3cc9bddcfe27b48" + }, + { + "key": "0x6de8218650e95ebf0c8a3a2e1c983a8670d12da42e6ba7db187e5d136dcf95f", + "value": "0x1ce1ce73e62ab8039" + }, + { + "key": "0x73bc2d23d3e894bbd512ad38772573f7de247e7491f0ece42aabff721f768cf", + "value": "0x1f3e1882fa8965c69" + }, + { + "key": "0x17894ca9ec109d388d8a78bceccac1dc83c24a4e692e0270f29d7b6a64ea161", + "value": "0x42dc4bc278ae1000" + } + ] + }, + { + "address": "0x4848d0dd8a296352ba4fe100fed9d6f44cbd0a8d360b7d551d986732a14791a", + "storage_entries": [ + { + "key": "0x2dc2930796ed0d1dc0f8f1392dd08bc982787926ce9e90d3762ad7514705a59", + "value": "0x5b681e69d55dec63fd9c025473f017e9b66e0037faf7d864b5333540012ecdf" + } + ] + }, + { + "address": "0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8", + "storage_entries": [ + { + "key": "0x4a93ee107891028d67918cf171605b918288ce306aa9e861785cc482eaa75b", + "value": "0x27e48" + }, + { + "key": "0x4445c2abe8771f416adfc196ac8d500177b4a7041c701a8c7e1af5e45723574", + "value": "0xffffffffffffffffffffffffff3ceb47" + }, + { + "key": "0x79d9c4c8571265c53e983218cdddfcb9ca42ef0e203f38e9990e3a455cfd302", + "value": "0x33dc" + }, + { + "key": "0x5fdf971868bba85dfd60a725d142bc82a991fbec1947c31b85925597d9b9bb9", + "value": "0x0" + }, + { + "key": "0x1c0d06bd7060fec0ae69b82cb9dbed198512b21e28f74090aed0092ad8497f1", + "value": "0x3f521d3d2ed" + }, + { + "key": "0x43e1ef374bc5f9e49c6c9764a9aac6e36bc8e3df0ca3bffb3cde5a0990ca369", + "value": "0x3fdaf23ca8" + }, + { + "key": "0x166130563ae6ab94d9e00b8fd4ae5d1bf585092a1600061a74a3d5954d08be5", + "value": "0xea4c0" + }, + { + "key": "0x5e98ed6b9a59c7e19369a1be15a79aae7940ddbb45689648aa4aa85277253b", + "value": "0x15dae0d" + }, + { + "key": "0x496d7267d8a8ec7097e4eedb6e9c3913912a0bb22f77d302b051e6e573637ee", + "value": "0xf00fe46e88" + }, + { + "key": "0x3d0db130480a59c191f40585647196c048231a1e5077ba26dcb9d7bde15234e", + "value": "0x6884aef5d" + }, + { + "key": "0x1526497a520f4b5ca79f5d031ff4fa4142801f9b0fbfbdbb55cf7ba951e56e0", + "value": "0x17dac61" + }, + { + "key": "0x597eac3b42ecb51c303520e05217f6550e7cb37ccfc0a1fe931184d438e6d3f", + "value": "0x1" + }, + { + "key": "0x2b37b0d90d6730cde7ea32367bab601df6c01a0c6ce3b0a8c44af134995e210", + "value": "0x248a33a" + }, + { + "key": "0x5797885c2725f592c5504f676e254c5d2564e03ae0e44af30a9b400d2626845", + "value": "0x78687536" + }, + { + "key": "0x369f752ab77bae83965a4441870ca03b17b3dc6aa8161e867211a69fd081c51", + "value": "0xb0a3e5" + }, + { + "key": "0x6c0e497c7778d73ca13170223e09b4b0f91820504b75211c07fc57365ffc52f", + "value": "0x63a133" + }, + { + "key": "0x2c6705dcc5ac75d87473b218701d811d6731e1863067927cc311120b16a28a5", + "value": "0x54d6" + }, + { + "key": "0x6b4d3b3ed62ab015998321fb07d993cba9935b0e67aedbd0b522bb6a5a6b905", + "value": "0x0" + }, + { + "key": "0x49a8ef79cab313360767015d427d0307368eff5c2c81b019aff018ec638eef2", + "value": "0x300611a140b" + }, + { + "key": "0x332cecccb4c630fe3d6a7510a783cb8ce0f2768addd456e9767eb5df0b71797", + "value": "0x0" + }, + { + "key": "0x35be9549b4cfd2bb0c0796f34a923e01aca6f5365a46430fb9a37b6f920db5d", + "value": "0x207b" + }, + { + "key": "0x1ac24a7b768a9aa561b0e38c32a9ea35e909d2cac583b69cb68aca28b72aa3c", + "value": "0x65142b6" + }, + { + "key": "0x6fd7e93d009f1501741ae3106190c636e4e15283f16727fa0ce1fe3185a7e26", + "value": "0x3188345ec" + }, + { + "key": "0x487ad12990c3190ca0323d098b22ef952be71247599415175070dec08095002", + "value": "0x312b" + }, + { + "key": "0x1616c2861603ece945a82de03e5ebbb40762a796b12e835c2267de3cff94952", + "value": "0x357f23e6" + }, + { + "key": "0x3f9c8cfe69ed75925719e1ad4d7921a04781878fafee018d302532aacfcd06b", + "value": "0x28820e2" + }, + { + "key": "0x25e1cc4f1f3ce9af20c71e0fb29e4086b6fd7e9401766999dcfb92e348eeb7a", + "value": "0x3e82e8" + }, + { + "key": "0x4aa2885ee95e2eaf83fcdaa59539ef9301372e916bc2419274d92a453c2b422", + "value": "0x1c23ca4cc35" + }, + { + "key": "0x3c510986699890a63f2eefa4a5e1aabe05133761a36bb2774508a6f074a0627", + "value": "0x0" + }, + { + "key": "0x5aaf48b5e4ca2b8274ee5586e47bdafcc6a279415d9a3e3cfb9c869bb397788", + "value": "0x5ae7" + }, + { + "key": "0x75f7d9b2864838d29901b96b6b260b8cb80ed75091da0e7011b5a131ada1d53", + "value": "0x7c6661" + }, + { + "key": "0x53645920eac20936201dccb4f32c86871e405050f7ff1d66cd4244780ea0989", + "value": "0x2bd55" + }, + { + "key": "0x7e745be538f073367d61bddae88e1ef145c8b4c1cf194f95ef33cee6b3ca0db", + "value": "0x1265bee" + }, + { + "key": "0x43f863fbfec515e09baf07ce0460de605f678a1561a44e0bfa821525f5c7d0d", + "value": "0xf7c1bb" + }, + { + "key": "0x3e6b0989e98a92870d8adc93c47b66012be07d88c18215ede84003f41bd5a8b", + "value": "0x1f224d9" + }, + { + "key": "0x3d37bf28dcf87abc1c3472ec18467db45f4b69ed1d1d23439c86d3e56dbbfbd", + "value": "0x565eeab0d2" + }, + { + "key": "0x1c443ec48b88be24b5ab373438471bc6979d6682b529104ef12bf02b92a1b67", + "value": "0x86e6704" + }, + { + "key": "0x5728f65f1dbccbdad8e117e873d17f8488099785f379c6dfb4ec3da2176d372", + "value": "0x21dc641" + }, + { + "key": "0x5be2cbba5dc6102944391bf26c251a361cd9616eae67b1ffab1673391edfd01", + "value": "0xfce84e" + }, + { + "key": "0x1d46e593c07d148fdf2f391245884f108ae66890feb8a9947214ef60c9a1090", + "value": "0x152b4" + }, + { + "key": "0x3713bab4467fdf657069badcb2d75f21c64f43f2e011c9d32255678d94b7eed", + "value": "0x1e91fecdcf" + }, + { + "key": "0x6c6417fd35a3c55106a25adc610b49c90b3e3b028dd80757074ac8696b71aa5", + "value": "0x2a886330" + }, + { + "key": "0x5f3ce98ce02ae19b9942132c6ae704316c799119602cbf7677952ea37f3e5a1", + "value": "0x797a1" + }, + { + "key": "0xc2a038868252b31ec07bfc9482312828a0f35201f4c6a3002be2e11923a423", + "value": "0xbe68a3" + }, + { + "key": "0x51449a3d9b9b9e3f79123bedfc512feb297d98e9ba80aa8f03bfca471ec386a", + "value": "0x989680" + }, + { + "key": "0x622de76fde18c4ad7b9b4a4afb34709868be06146472b53cbe2f74c91f0a001", + "value": "0xfb420ce" + }, + { + "key": "0x773fa9f4d2f7c3d7d4a2247b1cb67e3091a53d024ad91fbba9b1996e6ed0463", + "value": "0x0" + }, + { + "key": "0x6430116fe34e45414893a9e23c18f185d42c6e5b8b8c8c083bd5bbe4eb94e49", + "value": "0x24c04d2041" + } + ] + }, + { + "address": "0x61281febf3f4c4a37fd701e9a7d55751bc33fcc58e881e62a9b7addaa04a7f3", + "storage_entries": [ + { + "key": "0x1ccc09c8a19948e048de7add6929589945e25f22059c7345aaf7837188d8d05", + "value": "0x7b62090f7313d29dbe4110762ddaced7dcf538c5d5c8f78799be7b4f296e82f" + } + ] + }, + { + "address": "0x7606cac9053e9b8b573a4b0a0ce608880f64869e24b8a605210d7a85bb6e5f1", + "storage_entries": [ + { + "key": "0x36c480a44179ef472d737ccdb7d3f4f88ec37ae2a26145b0be60d2fae8c96aa", + "value": "0x1" + } + ] + }, + { + "address": "0xf0f5b3eed258344152e1f17baf84a2e1b621cd754b625bec169e8595aea767", + "storage_entries": [ + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0x1b6ddbfcf7" + }, + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0x18dee6cf7d14061022fe" + }, + { + "key": "0x57c60b189063035eed65879a14ad5f6e718027a212dafbe52f9bcd79e9f4fa", + "value": "0x15d9d087b69229b1a" + }, + { + "key": "0x3351bce4793f90e4aa00447357c2d34ac08611756193d8249009e0396dd7b41", + "value": "0x6509095f" + } + ] + }, + { + "address": "0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8", + "storage_entries": [ + { + "key": "0x764d355edc54321dfe2f543f7a36ea87d28287c34cfc1d7d2c7adc58294fe80", + "value": "0x1a53eea" + }, + { + "key": "0x5aaf48b5e4ca2b8274ee5586e47bdafcc6a279415d9a3e3cfb9c869bb397788", + "value": "0x15a4a10" + }, + { + "key": "0x5aeab87da2ea3824a350b316078eb7525d3eced8159ee58f0afefc06cf165ed", + "value": "0x1bec" + }, + { + "key": "0x41ab16fd8e86aa7721e204c45791a31bda0d9b96fbc68393fe1879b1819a511", + "value": "0x10bcec2f7" + }, + { + "key": "0x510c664db84ee917626c9a54fc14d86c3f1ac58176a20b04944d035a87fd0c7", + "value": "0x6392c561fd" + }, + { + "key": "0x25509252f18c5fd4d47feb32272c38aa4f727ade1b51e3b5376fe8dd53c3cbb", + "value": "0xd68bef" + }, + { + "key": "0x30145392e0879ca5c4dce72e875b6cb79c4be4add3d50b90b06d1de776fc9ba", + "value": "0x78cac02" + }, + { + "key": "0x166130563ae6ab94d9e00b8fd4ae5d1bf585092a1600061a74a3d5954d08be5", + "value": "0x992137" + }, + { + "key": "0x36edf716fee368dc5b1d513a03aa8ec659a4c117199936849897f205f2d907e", + "value": "0x993ce7" + }, + { + "key": "0x5fad7613fd327fc13290b4c80dcb56b41035cff52310cc2f9e1d7de286fcff1", + "value": "0xf181da12c7" + }, + { + "key": "0x43c91473256328ffe6e6c34a16fcee5395bc63d2797f64f6e4aa7a357195b2b", + "value": "0x1b2c38" + }, + { + "key": "0x7bcd382428d0a60441bc6420ec5dbff0ef13baad699c7b06a5c9ccab40feab6", + "value": "0x19aaabc" + }, + { + "key": "0x39a007943ea45f7c9f73fe13cf9eee26e5844828ae7c191ff4f08906f64f951", + "value": "0x5ee09c1" + }, + { + "key": "0x1bdceb369d2d39e055c22db25800d6aa51d526f3ea4be22a5e5af43857e2280", + "value": "0xc2f647" + }, + { + "key": "0xb6980fbfd6243019e03c00f3074a127dc9c7f7b763341a1c0b7ee968fdcb43", + "value": "0x1474a4" + }, + { + "key": "0x3f9c8cfe69ed75925719e1ad4d7921a04781878fafee018d302532aacfcd06b", + "value": "0x0" + }, + { + "key": "0x7301c4f90fe6606a2004bcb07c21d86b05b0f9f9983c0abfec1053848f8f2b1", + "value": "0x6827" + }, + { + "key": "0x5fdd31370faf3464a14c84d816f9822685e72b364232e0b85d015e937e4ff18", + "value": "0x11782" + }, + { + "key": "0x49a8ef79cab313360767015d427d0307368eff5c2c81b019aff018ec638eef2", + "value": "0x1140a127fea" + }, + { + "key": "0x1a231342ccc9ed6b68a70936632b64f66d81fd6a08064f00f0253f4f6ca492d", + "value": "0x1e1ca4" + }, + { + "key": "0x26fe2b53c7313db918f770b466b0916590973618203ba2cd4871944566797e0", + "value": "0x1b6ddbfcf7" + }, + { + "key": "0x3713bab4467fdf657069badcb2d75f21c64f43f2e011c9d32255678d94b7eed", + "value": "0xe9fb23876" + }, + { + "key": "0x63ecb374177ad3aaa28dab33d7c69176d788db559cbe6fb54c5324038de2438", + "value": "0x0" + }, + { + "key": "0x39a3200e942ffc3f7ce9f031920458f516b20bfa82d18acee616a1e8ce9c846", + "value": "0x18dec5" + }, + { + "key": "0x62f560b58cc9849d6286cb988c471dc0450eba7255a4247208c9af87ac54f0", + "value": "0x3fdf" + }, + { + "key": "0x71c196421272ec4fa87fb657064d3d2b74538f0b8b8644f90d0d7c944983b9a", + "value": "0x1751517" + }, + { + "key": "0x3d37bf28dcf87abc1c3472ec18467db45f4b69ed1d1d23439c86d3e56dbbfbd", + "value": "0x56417b8a5f" + }, + { + "key": "0x6edded4efb159b71fb1701ffb016a4a4ce076ff5cd4b6eec20c504b5fdace5e", + "value": "0x1ae39b" + }, + { + "key": "0x1ac24a7b768a9aa561b0e38c32a9ea35e909d2cac583b69cb68aca28b72aa3c", + "value": "0x3dcfed8" + }, + { + "key": "0x5a32563cea8e2291fa594391a65ab56442f11999ca867d48b1851c71a2c5e84", + "value": "0x118deff9" + }, + { + "key": "0x18fed7834ee967311911d57deea47a37a48556305a110ea6863b6d38d5f9678", + "value": "0x40a7" + }, + { + "key": "0x144fb6d7f48cd1daa2f3d0a93b3e0048a8e1f7394caf134818ae57f7150e396", + "value": "0x1bec" + }, + { + "key": "0x52c876c2cfd7abac1ceaa34278a31a2dcdc73753fa6e9e3081ab2470038b2b8", + "value": "0xf8c7f6" + }, + { + "key": "0x43f863fbfec515e09baf07ce0460de605f678a1561a44e0bfa821525f5c7d0d", + "value": "0x11782" + } + ] + }, + { + "address": "0x10884171baf1914edc28d7afb619b40a4051cfae78a094a55d230f19e944a28", + "storage_entries": [ + { + "key": "0x7c679b59d4a3e95d904c93ba8ab33a18bfc774680e69105d4cef5798c143185", + "value": "0x13816bf332" + }, + { + "key": "0xb61ad1b0cce680166d9ae08293663dd76ee32f60afcffb51a601414abe03e6", + "value": "0x65f3b07f04a4769da" + }, + { + "key": "0x5d2fd44e5fc99262e4e3933de973a776fa7737d0bffbba63567324b6bdae8a4", + "value": "0x58d21ce8e4" + }, + { + "key": "0x2487f67598912d31ab84d8fa97c9e78332d00795ecdad092ea09f9c9c14a9a3", + "value": "0x292ae10bf75" + }, + { + "key": "0x2487f67598912d31ab84d8fa97c9e78332d00795ecdad092ea09f9c9c14a9a0", + "value": "0x5dc53fb9905d57b23d" + }, + { + "key": "0x7c679b59d4a3e95d904c93ba8ab33a18bfc774680e69105d4cef5798c143182", + "value": "0x11bd6cb2a682aea860fd" + }, + { + "key": "0xb61ad1b0cce680166d9ae08293663dd76ee32f60afcffb51a601414abe03e3", + "value": "0x28ac71581b55f693202a" + }, + { + "key": "0x4ad5399a6c5b6103e5ad130e0430f02556c7cffc406625fbcbcea4e612b0ac7", + "value": "0xbb37f563b2" + }, + { + "key": "0x4ad5399a6c5b6103e5ad130e0430f02556c7cffc406625fbcbcea4e612b0ac4", + "value": "0x1aa9a6857f2f9dc62a" + }, + { + "key": "0x5d2fd44e5fc99262e4e3933de973a776fa7737d0bffbba63567324b6bdae8a1", + "value": "0x58a63870ed" + } + ] + }, + { + "address": "0x1", + "storage_entries": [ + { + "key": "0x3a58a", + "value": "0x6d504e77964ac443c7ed2b69691239be18f2477c6d76505a3fd9e59c1205cb" + } + ] + }, + { + "address": "0x124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49", + "storage_entries": [ + { + "key": "0xf174f7bd91106ca66d6e4d6a9bc24635ec61030f04b1a992cf5124c25784d5", + "value": "0xae1244878b06599c34" + }, + { + "key": "0x75b8f1368b0555219710be5471aec1d43a370115ab7039abf7216c064ea5671", + "value": "0x0" + } + ] + }, + { + "address": "0x7c662b10f409d7a0a69c8da79b397fd91187ca5f6230ed30effef2dceddc5b3", + "storage_entries": [ + { + "key": "0x604e7fb7848c9c93786aed9fa57b49c439d834262d7da9739dde01902a4046d", + "value": "0x0" + }, + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0xbc3770ed74eba2d773" + } + ] + }, + { + "address": "0x5e904bcfdc42e08b0d9a98ce4f1a24486c01b45c0e61b60834a80a49d15f677", + "storage_entries": [ + { + "key": "0x10064c6264bc3361adf2b26fd01272239473906cb7bbc183b1819e75188451", + "value": "0x3030302e3030302e303131" + }, + { + "key": "0x3ad34fad732b51fe0d1a1350f149f21a0cf14a9382c9c6e7b262c4e0c8dbf18", + "value": "0x5dec330eebf36c8672b60db4a718d44762d3ae6d1333e553197acb47ee5a062" + } + ] + }, + { + "address": "0x811d8da5dc8a2206ea7fd0b28627c2d77280a515126e62baa4d78e22714c4a", + "storage_entries": [ + { + "key": "0x48be3692ab3e9e8bd4a134a7b958b4e69bcb00a71d4f58c22f9311921f12bcf", + "value": "0x1dc5498c" + }, + { + "key": "0x195698f007a0ccf18c48cde16249d60f00d3a1f74b23942b61dee66f7996d51", + "value": "0x0" + }, + { + "key": "0x1d430bf138ea7c30cc4ba41938ff8081ecede809c1d7bc56b785784aceaae08", + "value": "0x539633816c" + }, + { + "key": "0x2bf5ea7e09ba9198897340bf66c067155d7e0bdd7a6f4eb60db9829e34d32a2", + "value": "0x0" + } + ] + }, + { + "address": "0x6d791d7100e445cb6eaf79f395765dd81869f6b3c4aefb8039a0e54fdac5f75", + "storage_entries": [ + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x33434ad846cdd5f23eb73ff09fe6fddd568284a0fb7d1be20ee482f044dabe2" + }, + { + "key": "0x1ccc09c8a19948e048de7add6929589945e25f22059c7345aaf7837188d8d05", + "value": "0x635840880dd2fae4d153134d8d4a26df964e6adbfb15448e2947674af89c050" + } + ] + }, + { + "address": "0x2d5f0f2fcba62a54f0d8a73fb2e437d76c53f7297153b2afd1f198af6d12aa", + "storage_entries": [ + { + "key": "0x14b3c2a2e1c618b002f0c05691a55979e4855673b6b336434a18a0e79b4f3a", + "value": "0x1" + }, + { + "key": "0x6534825ff0aeec29745f1bf8662b36b4febae7b02bbe59b58842df5ebce5a91", + "value": "0x1" + }, + { + "key": "0x10e58727bef0b0199a4f3aa94a679050b1386c747fd592ce63d976db9823e8a", + "value": "0x1" + } + ] + }, + { + "address": "0x8d4f5b0830bd49a88730133a538ccaca3048ccf2b557114b1076feeff13c11", + "storage_entries": [ + { + "key": "0x1b4491c95df6942335174bcfc05749f14b6fbef8205ea29efa6f440f2994de8", + "value": "0x1" + } + ] + }, + { + "address": "0x388ffcdddab0eb1518bbfa0599e32c195398c76a476afda1b0f75bdb64a6de7", + "storage_entries": [ + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x0" + } + ] + }, + { + "address": "0x51184e312f09abcbf28132d6ef58259a6ebe9b5e7e32b5200427fdc96973f94", + "storage_entries": [ + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0xae1244878b06599c34" + }, + { + "key": "0x57c60b189063035eed65879a14ad5f6e718027a212dafbe52f9bcd79e9f4fa", + "value": "0x3356e156625ead500" + }, + { + "key": "0x3351bce4793f90e4aa00447357c2d34ac08611756193d8249009e0396dd7b41", + "value": "0x6509095f" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0x118deff9" + } + ] + }, + { + "address": "0x7e2a13b40fc1119ec55e0bcf9428eedaa581ab3c924561ad4e955f95da63138", + "storage_entries": [ + { + "key": "0x57c60b189063035eed65879a14ad5f6e718027a212dafbe52f9bcd79e9f4fa", + "value": "0x9fb40aad8" + }, + { + "key": "0x3351bce4793f90e4aa00447357c2d34ac08611756193d8249009e0396dd7b41", + "value": "0x6509095f" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0xa860e5bc4463b7de7" + }, + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0x434bdddeaf976f2f360b" + } + ] + }, + { + "address": "0x55098bdfda961f539769be571a591796937e86d0d5329de0d076575c3b7c35", + "storage_entries": [ + { + "key": "0x3ad34fad732b51fe0d1a1350f149f21a0cf14a9382c9c6e7b262c4e0c8dbf18", + "value": "0x5dec330eebf36c8672b60db4a718d44762d3ae6d1333e553197acb47ee5a062" + }, + { + "key": "0x10064c6264bc3361adf2b26fd01272239473906cb7bbc183b1819e75188451", + "value": "0x3030302e3030302e303131" + } + ] + }, + { + "address": "0x5dbdedc203e92749e2e746e2d40a768d966bd243df04a6b712e222bc040a9af", + "storage_entries": [ + { + "key": "0x43c539fc52399f3560ef443c745f6e5be7938902d1e0fda8898a837a456f507", + "value": "0x6fbbf64308e4d5c632462b3a90c929921d38ba2f9bf86760a86d7d8187fd7a8" + }, + { + "key": "0x7e05aa7d2a4c1137c3929079bb0a62d041894a6b0271eca8d1e536b68d14798", + "value": "0xbc88b533" + }, + { + "key": "0x2999c38b959d15d14a931b9ef93c41ad578ab827f239151103bb07a0ddd847", + "value": "0x55a1279f91ea6b4fdcc28038eff829eb58228b888ce5236cdeea0a624fa0ea1" + }, + { + "key": "0x3c4153d59048567b79576b46fa3483b1077a42249b8eb6d9f0ee2187e924c0e", + "value": "0x519b85c7331ac2aeb4cade1f2222404a174a8e0b3ee747169c66e2f40bee99" + }, + { + "key": "0x2104d43923abc4dc1a827d463f2f32bf7a57f5c06109a1819015ce61027b5d", + "value": "0x1" + }, + { + "key": "0x234a8b617442f132148c54f5252aa11cb90f8126da8d8fa7a98e7def236ae07", + "value": "0x1" + }, + { + "key": "0x5ddf51a412cc21611e721fac20b3cbad0f46379bee6d9c1499d89d2c5cd7fe3", + "value": "0x385020dfa38ee8a559cab4ca42e1ac64908c2e35bf2e2b2cf207beefa4f37ff" + }, + { + "key": "0x7809573caf175baa850aa6f31576cd8e0bfa510669672bce6fd482a3b16b300", + "value": "0x1" + }, + { + "key": "0x10be812d2ad9211ae389e39c8d45770c93b8e5aa0474ed708bb60fbb196f56e", + "value": "0x1" + }, + { + "key": "0x7903251eabf5d0ca03a7546e04224ee34e5fac0ad5b92a7ff99c5a2b8306d35", + "value": "0x3" + }, + { + "key": "0x1fbce8cb7d8de458d7dfbe2be7bb8a8b19b59b5970dd3513dc0f789036aae57", + "value": "0x1" + }, + { + "key": "0x63ee1a503237a450bb102b952b428d6537647ba933f158dfe447d52b7807720", + "value": "0x47d5788081f93242204357c1d893138ab1065293e9278eb63abfb030f3e2c5f" + }, + { + "key": "0x152d8c2d30981fe16571568d130726553470bb3e774c12db6aa3242f1d47f4d", + "value": "0x5197a6af3f299cf77c9ed5d814fcd5ffc7b807265333c903b1f99286f9ca01d" + }, + { + "key": "0x6036ee00c789a1d3bc382ff220f4270374703b4115a31e7e2647e9181eabf22", + "value": "0x7f72dd7c0ab8a9deb014d6f03da0c9b9a1116c950241c3ad5d36292118e0772" + }, + { + "key": "0x47ac569e70ae61b76bf51015c7ad162c86c7f0ba5ca7dfe67b505a7c53a673a", + "value": "0x2e8454f19a77ef28502b1d9dff74c506474ff0e1a21eb919023a3d200f7e623" + }, + { + "key": "0x5a2edd253ac2ecc4914f137b0837eead7a82ee007a91583d3983d8f737c571a", + "value": "0x647aff70695bbf69673a3c5d20fb3a0bf42dd714229f1f7918daa87be6de163" + }, + { + "key": "0x66a685fb3858b2ba9b6e4f1cdb1ea1d1c2f145cb4df788c131032806a4b181e", + "value": "0x8af26540a9c49923159b852395b1297c1089202311fd75c77eec5b4418372a" + }, + { + "key": "0x46da86d14ed0de66d38dc5f2e32698c13c3db3e169e208b45a8a001549c8866", + "value": "0x1" + }, + { + "key": "0x5ba91d12f2a6fd4745c0a1a392e37fb342a3d978faa842ed95245074436842b", + "value": "0x575e2f0650aaf9964cf0da778dd40b7487f6f14189c761118b40e81e21a2cff" + }, + { + "key": "0xc7d17b9e21f976a86806b8de2cdf5ac8839bad9c29d5e8e8f73fb13d58d8c7", + "value": "0x3" + }, + { + "key": "0x3df18210264e9e25439cd57f56be1496e654e388a89f5049920f7da2bf41fea", + "value": "0x384b35211f922c5c5cf6eb257c0f0e83203dfb9975ddc20cf0b091c759a03e5" + }, + { + "key": "0x6b5b6439720bb6aac5379db102c0eafe05659f6efda9587a9dce3fc80da9400", + "value": "0xbc895126" + }, + { + "key": "0x5d886e90b566437607b066439e5334a21c24b5a44239103c2e856fd9df9913f", + "value": "0x37511e984c219c9990d4c8a0d43e455da5e4d53bd81688d7c11738a0bb5e4f6" + }, + { + "key": "0x6647a5bd87425a4a9df1ec38961fd6664df24a5de4d21e667d6b9b89493af7c", + "value": "0x1" + }, + { + "key": "0x7f5963c0cfe2522b8617babebc7d68ee9dd25969cdbb145d275e70492c912ba", + "value": "0x1" + }, + { + "key": "0x7c43e09706ad74e4fc865dc69b99db936735edb9cd3c1c542415f6e73933a1f", + "value": "0x1448b4eb934eb79410d7abb8467b5cc190078119f74c24c201baed4cad98cea" + }, + { + "key": "0x2ab6096807e8ab038b491102a99e2c181cea05f08004f4bcb4120caa5a5e966", + "value": "0x6b5af5e69896e6a8a7162b066d7c78c52c85bf2cda704f1ddcc4ce75ef34ef8" + }, + { + "key": "0x755b92be0a3cfa518da138be4671c925c001f9b746e50a04edb0b7d3900eb23", + "value": "0x3" + }, + { + "key": "0x5d40c0dee08b0e56336cff9ad0cfc7ea5cf2f6c0450c56e55c2352a4662cd7", + "value": "0x1" + }, + { + "key": "0x568108b3bc72b8897ae270e6379d7d41beaa90964d6fd5f06db37b7ffc77b8b", + "value": "0xbc893f14" + }, + { + "key": "0x6f6000430103fee11c3f738412b24422a1844e3bf5847694ec053f16749fa4f", + "value": "0x1" + }, + { + "key": "0x5f21fcb70a79812389d473051e54d19c10b5ae5644a14297d968c51a799eb70", + "value": "0x19f20acbe8600fa1ee24c0514cd77620332aac26f695a29b0f4e3d95eddd8c" + }, + { + "key": "0x39527461f31e08ae914814dcd5ca9fcfd8c3ae99b21703560b44e7dffe5246f", + "value": "0x1" + }, + { + "key": "0x17fb584a1e01fef796453f7db644b47db6624fdaf7866bd49a82aa8a51e63e3", + "value": "0x3308e99bd4e65f053a51d05348dbf20e53800ef5843bf139899b6080f88e5f5" + }, + { + "key": "0x1b204e492d8cb502a4a90ced5796f4928f3774ac87b55d4dfb29c82f9d6324e", + "value": "0x207a638e512242596e6d7d8f24f906548ee17812ca76c41aa2e1fd842cdb9bf" + }, + { + "key": "0x588b7edbd5a8c3f7f075e3a164c4e941c83a65db3a09833087bfcfb4f808738", + "value": "0x46e2cfecb05dd08ba75bcb134d92c53b2bf163cef84836c3a7747bb6bf04854" + }, + { + "key": "0x7ffe5207e0d40efbecf5fbd260ee8687cc4ec2fcefffb4ee7486d45a29fe23f", + "value": "0x2" + }, + { + "key": "0x440ab52e57bc81d05bed8d7eea7ae7e1c68d2339ce89fbbc08da2536996393c", + "value": "0x54d50716b8cba8bd053ebdb9be0237b1263e9713c7139eb9fb09d2fcb6dab22" + }, + { + "key": "0x78e92cf6389ec7fb1887723c19a837e95f61ba1a77a73453882e98ba6fd6ae9", + "value": "0x1" + }, + { + "key": "0x62c35c939235b81f672390397c89f275146d703cba6cca732e2355ee97de692", + "value": "0x6b7c455a8dbcb641d6839542eecddc0b56ad3ea97a1621492d6a71be6c9ca24" + } + ] + }, + { + "address": "0x68b6e5d3d9bf46c5451a3a5e921500adece742c8419117a6412aeb8527c8ebc", + "storage_entries": [ + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x0" + } + ] + }, + { + "address": "0x5a64a8169d195cf20626ed99fa9dd7c8ff72bbe50aa4ac0f40e599d4b362750", + "storage_entries": [ + { + "key": "0xf920571b9f85bdd92a867cfdc73319d0f8836f0e69e06e4c5566b6203f75cc", + "value": "0x0" + } + ] + }, + { + "address": "0x22b05f9396d2c48183f6deaf138a57522bcc8b35b67dee919f76403d1783136", + "storage_entries": [ + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0xa16900e66eea18" + }, + { + "key": "0x5728f65f1dbccbdad8e117e873d17f8488099785f379c6dfb4ec3da2176d372", + "value": "0x0" + } + ] + }, + { + "address": "0x23c72abdf49dffc85ae3ede714f2168ad384cc67d08524732acea90df325", + "storage_entries": [ + { + "key": "0x1e6f3e4333da349f86a03f030be7f2c76d8266a97c625746ebb9d3220a39d87", + "value": "0x4019f81d679320e9e5" + }, + { + "key": "0x5205bcb3e3f49a913e913df275c9ea1e4773ccf90f439baf079f61b80303917", + "value": "0x23dc5a6947502" + }, + { + "key": "0x2712b812fff3c2f3b38d4c532c684b5a1800dae9c4a8001c6f855bb520c7c5", + "value": "0xd00112576faa8c7f2ec3222817f" + }, + { + "key": "0x19dbc9b4eab95d05b7871c69cdeef24e69dc2a3536f0c6bf169000dc1fdd20e", + "value": "0x475ae6b23c" + }, + { + "key": "0x19dbc9b4eab95d05b7871c69cdeef24e69dc2a3536f0c6bf169000dc1fdd20d", + "value": "0xe928c100f8530019ca6ca0b111fcf5d7" + }, + { + "key": "0xc2a038868252b31ec07bfc9482312828a0f35201f4c6a3002be2e11923a423", + "value": "0xf81db9ae14" + }, + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0x7456cacdb99c99" + }, + { + "key": "0x3b3a699bb6ef37ff4b9c4e14319c7d8e9c9bdd10ff402d1ebde18c62ae58381", + "value": "0x1c23ca4cc35" + }, + { + "key": "0x332df419aa058c3f4b36acbf5af4b7e8e3d4dd58918d5f0ab2841741e7b55c2", + "value": "0x6509095f" + }, + { + "key": "0x7af134b7c4f8214516c071148fe043502a19625938f2a16f0538ff40518abc", + "value": "0x70bcd55456cf3cb568fa5f4360f7" + } + ] + }, + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x3ee08d4d25d18e6b94794a8faabf546e02a2862502e405150991927f3ee876a", + "value": "0x5865c12d667af" + }, + { + "key": "0x3d0db130480a59c191f40585647196c048231a1e5077ba26dcb9d7bde15234e", + "value": "0x320abe31c590e6d" + }, + { + "key": "0xc2a038868252b31ec07bfc9482312828a0f35201f4c6a3002be2e11923a423", + "value": "0x27d25107adfd9fde" + }, + { + "key": "0x4f3a1181c8681f86d1ac2e79e373ea550efddbd11e7b85fabdc3b845da4c2cc", + "value": "0x9f7dcd3505d18" + }, + { + "key": "0x45790e6b863e805c10d715384d8655f955c168dc29d33f2dbc941faeb4888a4", + "value": "0x5af3107a4000" + }, + { + "key": "0x2adad32e613091d1bb1d36a89d0f1b77290948d7e784611c904f6602d57d367", + "value": "0x1617c1a0f82ec9" + }, + { + "key": "0x6620ca81fca221dcf423ee80ff135039c02653d4ffdee096a7edb1988633e85", + "value": "0x1e6411278480d3" + }, + { + "key": "0x35be9549b4cfd2bb0c0796f34a923e01aca6f5365a46430fb9a37b6f920db5d", + "value": "0x0" + }, + { + "key": "0x312a169dce2cc79cee477d5612f10ab882f525ccd112157472416da989810c6", + "value": "0x55f8e7dc35dd" + }, + { + "key": "0x25df3a1ffcd26e75291c5b58a666cceb52743712ae809d9fa686c5cc0109e21", + "value": "0x1332832b49397fe8" + }, + { + "key": "0x6e64dc4c4d16d7e0393b02af3d6da5227e1396c56794b0fa57257eb8d537071", + "value": "0x33c7393c2621773" + }, + { + "key": "0x1fc14a4bdfc9d8f0c2b9d9328e4f6a49448ae8b52d81e85530109039f683f3e", + "value": "0x124cf324b7fff206" + }, + { + "key": "0x597eac3b42ecb51c303520e05217f6550e7cb37ccfc0a1fe931184d438e6d3f", + "value": "0xaf0d8e0d55a54a" + }, + { + "key": "0x6355aae1afdc8a3d329dfbf50b2e393f647a9448d1995d38ab56ce91efda3c3", + "value": "0xd9520d4b6039" + }, + { + "key": "0x25509252f18c5fd4d47feb32272c38aa4f727ade1b51e3b5376fe8dd53c3cbb", + "value": "0xf98fece21692b" + }, + { + "key": "0x4b0f686915b177abac371e8fa418dbcc4e19a53ac9b57791b8c1c0b6b6427ed", + "value": "0x2130f97fd72546" + }, + { + "key": "0x73137572f0e5c74e6a75544d6cc16ca72ec577cc650d8016b38d5e4b7429d32", + "value": "0x5f858949fc0c10" + }, + { + "key": "0x465118250b457d55b324ecbddf7a31ab3304115260d1cde1086ef4a142649a5", + "value": "0x739d243f49cd49" + }, + { + "key": "0x764d355edc54321dfe2f543f7a36ea87d28287c34cfc1d7d2c7adc58294fe80", + "value": "0x5066ee814fe9a77" + }, + { + "key": "0x43927e734ff57368ee5a3c06c5e19141508ea8e866aa4e672262cf1471cec63", + "value": "0x2524b93d58a2d4" + }, + { + "key": "0x2a54f1f7bd0dd40ab48c1022108b72e2cefa59227b2af37935e4b4e7a9335a1", + "value": "0x1af262c0ecec088" + }, + { + "key": "0x6b4d3b3ed62ab015998321fb07d993cba9935b0e67aedbd0b522bb6a5a6b905", + "value": "0x9d7ee413ca9d25" + }, + { + "key": "0x43e1ef374bc5f9e49c6c9764a9aac6e36bc8e3df0ca3bffb3cde5a0990ca369", + "value": "0x596206b481c53bb3f" + }, + { + "key": "0x737aa802a8a23e218015e2654ce5ac39ce2e0fcd4595263e112ddf68059d70b", + "value": "0xc00757fbd6696" + }, + { + "key": "0x6fd7e93d009f1501741ae3106190c636e4e15283f16727fa0ce1fe3185a7e26", + "value": "0x6c1a0c57025cb454" + }, + { + "key": "0x278001aff9c5e4a8cfc5a4e24d39eaeb1b0a6b23821354343f1186ee327419e", + "value": "0x52f6bf8ab80ed" + }, + { + "key": "0x5e98ed6b9a59c7e19369a1be15a79aae7940ddbb45689648aa4aa85277253b", + "value": "0x2ce7740e77ab5d" + }, + { + "key": "0x7b5eae139345f010e0abbdea7c44548cbf15d5eed75cb94caa5f4293534f873", + "value": "0x0" + }, + { + "key": "0x51449a3d9b9b9e3f79123bedfc512feb297d98e9ba80aa8f03bfca471ec386a", + "value": "0x1494f8bd972c16" + }, + { + "key": "0x75d6eec778730e48375a9fcfac72369519f09c4ffd9df4a9f24952bcb6f6f82", + "value": "0x24722c53a6e57b" + }, + { + "key": "0x97df8a793598089aefdd463b1c92f4d33bdcafdb9c6402b7e25a3029a4b944", + "value": "0x370c3e0f87050d" + }, + { + "key": "0x3bcb5239535a3fd561789b7cdabe55c8ba8f5ff6fb0ddff4ed7b7a8ad8ec8d4", + "value": "0x114b57eae0cf592b" + }, + { + "key": "0x775fab57fe26b35adfed51f1bd4ece87c5990e79ad2b9e7f84455e5c6a244e4", + "value": "0x55e1693fb4da9" + }, + { + "key": "0x6a24709644db4d4afd096cbd54f2288e80c19accf5cd891efe3d8a3cbdae12b", + "value": "0x21f0a291e341f6" + }, + { + "key": "0x29a8ce0a2e2ed29740aee0cacb575b058c3a4d89f310e9bcef4652ff746583e", + "value": "0xaa46deac032512" + }, + { + "key": "0x7e8f32537a73205a1005b25ecb20596d09ba1b470381be30636a00c05d317ad", + "value": "0xd959838a463ff64" + }, + { + "key": "0x351027ba7dde13941698c0a62b7f89b521a128b1ca7e2dab4467f1b3aa48aea", + "value": "0xe4c0fa9f9d040" + }, + { + "key": "0x5e738fbcbb0d07258e9d01b18aa9e57d67ad75c3c1198bccccfc278cc01a612", + "value": "0x37e23cc8f7089a" + }, + { + "key": "0x1a231342ccc9ed6b68a70936632b64f66d81fd6a08064f00f0253f4f6ca492d", + "value": "0x682d206e47a9c" + }, + { + "key": "0x659a645cfdba0410ff2a368fa48e461f099061ed42a745b9fdeec4e687cc1d", + "value": "0x571be3acbd72f" + }, + { + "key": "0x3f9c8cfe69ed75925719e1ad4d7921a04781878fafee018d302532aacfcd06b", + "value": "0x78ec6276cd320" + }, + { + "key": "0x5171eed1a35e69d43c5e908d0a0b34d2c459703f17e0f9d1853d044946232b8", + "value": "0x23e59f155dd7f1" + }, + { + "key": "0x588002530ca35c3990703b64199bd03cee0d09db2c78ebb7793ae0b134208d3", + "value": "0x1afb772ba7615c" + }, + { + "key": "0x50456409fbb1c71fbf7b5cfca51a9cdd7967b2e7810d265a632d9969b313576", + "value": "0xc5ca01d62f" + }, + { + "key": "0x5cd61a539cb40ab5a0c71ed48449cec5e1a89b7a8f00c74fc0f686fd51321f", + "value": "0x1b47a81bd112c0" + }, + { + "key": "0x5197c4536c40276bd753bc5c60052d93abe71394815b62d7c2a9d9d7ea507e5", + "value": "0xb7d2c601725ac24" + }, + { + "key": "0x4db20f0a7c940bf6bf972483d1cf92de02f99ea0e647cd98d0f6334007df6d8", + "value": "0x6b982b7877c7a1" + }, + { + "key": "0x76ee213b2988fb6d758acc23004f6faba07f5d7b2099f112d8d7f706660b9ee", + "value": "0x0" + }, + { + "key": "0x6f5f596b12e37e5ddbb08690209c7fe4b100f32ee9fc350aa64189bc449f705", + "value": "0x5b329d6c047e5686" + }, + { + "key": "0x224a13ff8e291dbc630c0a252a8eae501cffcf3c398aff5b0f5e993129ef6ab", + "value": "0x6026b4bea228cde6" + }, + { + "key": "0x3a311817de43bbbb14e4b5922ef5940ae579a15ed2839ea96ddda6ba21fa480", + "value": "0x107872eaef60e1" + }, + { + "key": "0x3adeaea50e2564ffa4d0c5c9a76de3ee700fabc915d2e0daf17f4e77af66f7f", + "value": "0x416f70729a3957" + }, + { + "key": "0x5405f9088f8937b8d58b45d7cd60842585880e4b744d859375a38712f58c76c", + "value": "0x6a6db6ebc3cce0" + }, + { + "key": "0x476507f14d3b54f13379b0f4818b0ddd42990984fdb26e228a132b8a780853d", + "value": "0x834f18362076c1" + }, + { + "key": "0x5f3ce98ce02ae19b9942132c6ae704316c799119602cbf7677952ea37f3e5a1", + "value": "0x6e079fa17beb194" + }, + { + "key": "0x75f7d9b2864838d29901b96b6b260b8cb80ed75091da0e7011b5a131ada1d53", + "value": "0x1cd52ac93348f9" + }, + { + "key": "0x21d83ce8c79de94a064090271be1ef0fbb409d3b7a8ae68a1ad023257e643be", + "value": "0x32825c2d083c3d" + }, + { + "key": "0x6edded4efb159b71fb1701ffb016a4a4ce076ff5cd4b6eec20c504b5fdace5e", + "value": "0x1041ee55640f12" + }, + { + "key": "0x2037a6c955a0a3ae3586f9c32ad0a18f611d2e284797b231912c810a077ddb8", + "value": "0x0" + }, + { + "key": "0x5489da9312188ea57f59ddec4bcea4fa0be0d086dd6b49c9ce309966f1f0905", + "value": "0xe8f6b4dfe8ce6" + }, + { + "key": "0x6421bc80bc9d8f946b0e73dfd79d7fef596e4742c64d66ef9394cf7ea60261d", + "value": "0x17dfe1f1e49a11" + }, + { + "key": "0x4d67ca49fee01a0ca06f697befd57304d6b48383e324032b9a38458683453af", + "value": "0x29611c30263a809" + }, + { + "key": "0x320e9b93cc1e61c6edfe0517e5067c84d8e4c6b7beffe0f67afd546704d885c", + "value": "0x8d8edfad47012" + }, + { + "key": "0x25e1cc4f1f3ce9af20c71e0fb29e4086b6fd7e9401766999dcfb92e348eeb7a", + "value": "0x180f5175791fe7" + }, + { + "key": "0x14274eb1c3bfe419f8db0d8c20a6e37ef81d3475222f6ea34c584fe10a1f25d", + "value": "0x26ae67c04fe59f" + }, + { + "key": "0x53645920eac20936201dccb4f32c86871e405050f7ff1d66cd4244780ea0989", + "value": "0x9e39becdb807d" + }, + { + "key": "0x7e745be538f073367d61bddae88e1ef145c8b4c1cf194f95ef33cee6b3ca0db", + "value": "0xedda3420f5e80" + }, + { + "key": "0x1d4d0313a8cb20065e67c8bc7a680c5c71f577fd65eccc1f1b4ef87f50cdecc", + "value": "0x7adce156c0a7d357" + }, + { + "key": "0x14417eb11937366d0b688923a539cd896ae519de6d99012dc6dddf37fa36fdc", + "value": "0xab847eadca928ed" + }, + { + "key": "0x49a8ef79cab313360767015d427d0307368eff5c2c81b019aff018ec638eef2", + "value": "0x99612c0c802c2d8ed8" + }, + { + "key": "0x2b0b97a93ec1f367241bb641f2acc920eb934b3cd6c37ccd2a68ef2fdfae07f", + "value": "0x30038a31455f2b57" + }, + { + "key": "0x5728f65f1dbccbdad8e117e873d17f8488099785f379c6dfb4ec3da2176d372", + "value": "0x6eec62d6f2d1ee" + }, + { + "key": "0x48fb763f0e734e7c8345ad1e45150a91541b1b9a29062d8fb7b65857e60841d", + "value": "0xd187393aaf9c000" + }, + { + "key": "0x558692aa59307787ce5642979bf402d47cbdc0e593f527e8a4447ac227be705", + "value": "0x1183c2b137e63f" + }, + { + "key": "0x60e5f5a75121977417e7979741ab8530d20f3b5a3ebc4d4ae9f69996a4a73d4", + "value": "0xe32add790a260a" + }, + { + "key": "0x6b803d83bd497850377f3501da6d7d37d0564b7a2971adc586a992b1ff19029", + "value": "0x963e1bd2b1b05c" + }, + { + "key": "0x476e1fb2e01c5d103c273ac785d84da9d8696e0cc998ab05d5573a899d4125d", + "value": "0x36f13b6cb14b1b" + }, + { + "key": "0x324f76c4b88d11809a837815f103ebe4e7441c9539bfe450c25d86b830227a9", + "value": "0x0" + }, + { + "key": "0x5be2cbba5dc6102944391bf26c251a361cd9616eae67b1ffab1673391edfd01", + "value": "0x13d2320c581aebd" + }, + { + "key": "0x510c664db84ee917626c9a54fc14d86c3f1ac58176a20b04944d035a87fd0c7", + "value": "0xe22be37d71caa09d1" + }, + { + "key": "0x4b70c66c4d3dd4221208cef5048569ee7eb5ac17ec3b83011569c25e53d8cdd", + "value": "0x171106c3119dd" + }, + { + "key": "0x5e43132a127926d088b6ce6e66adb0ec366d8448473abee41cc813ab784eeb5", + "value": "0x578d6b20b9f4a" + }, + { + "key": "0x6c717cfd8eb2c6c66b511f44803a656dd303ddeb45dd68466e778b39c097483", + "value": "0x9ef2b3ba02fa2" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x2146ebbff43bba033" + }, + { + "key": "0x696274d77f5b0c432221c1a14e1350cd2ae1777ecad3685d34f074ee3cf4fe9", + "value": "0xb965fbd253875" + }, + { + "key": "0x332cecccb4c630fe3d6a7510a783cb8ce0f2768addd456e9767eb5df0b71797", + "value": "0x20525b08c3026a10" + }, + { + "key": "0x786f1f09e18bdbef1973730868e4981b5b9ade8a71890bb369709ba11fea9e1", + "value": "0xda9e406c600a7" + }, + { + "key": "0x10da9915e9edccc5dad1181adab91746b7c01e5d9f31183bda1b5bb801eac4b", + "value": "0x73e9ed7aed2" + }, + { + "key": "0x4aa2885ee95e2eaf83fcdaa59539ef9301372e916bc2419274d92a453c2b422", + "value": "0x4019f81d679320e9e5" + }, + { + "key": "0x49c1f3f5f2cfcce86e95763c90746e9455461a0928290b118f2db1256da9cdc", + "value": "0x7fe59cea65364e" + }, + { + "key": "0x273ce3f4cf5f20c72a57c80a1eb3502bdfba6c7803cb4f55b3517e83fdcb055", + "value": "0x23788ffc5dc5a518" + }, + { + "key": "0xb6980fbfd6243019e03c00f3074a127dc9c7f7b763341a1c0b7ee968fdcb43", + "value": "0x1053222fe42221" + }, + { + "key": "0x52553b4b6ed1543dbff450cb5bdc3f7115b2a81070b0aacc2821729eb4a9187", + "value": "0x56bea2a58ce3a" + }, + { + "key": "0x1526497a520f4b5ca79f5d031ff4fa4142801f9b0fbfbdbb55cf7ba951e56e0", + "value": "0x2e169462a6ac1c" + }, + { + "key": "0x2b9344ffc09b3bfd715dc285845f90dfcc746fc49a0c817b6cbe532092d90c7", + "value": "0x17e5db6b29bf2c" + }, + { + "key": "0x5fad7613fd327fc13290b4c80dcb56b41035cff52310cc2f9e1d7de286fcff1", + "value": "0x2260eb9a4d8a2e38a7" + }, + { + "key": "0x60baf59b9853ce4779f36c8d3bf03eced96b2cfb5200155383b97aa8a2b3f66", + "value": "0x3c753bee65d0bf" + }, + { + "key": "0x33f0c8ee294a14dad53745da05bb90dbdef6e78de534e8822923f46f2cb5d24", + "value": "0xfdfc68476716518" + }, + { + "key": "0x1bdceb369d2d39e055c22db25800d6aa51d526f3ea4be22a5e5af43857e2280", + "value": "0xa8f86a615eb6e58" + }, + { + "key": "0x6d89744a040efc40509aa2e8161deb83c00cdd467450b60303efcb205dcbc7a", + "value": "0x50fad906287f7e" + }, + { + "key": "0x3a2e403d5ae423a53f92c8902189b65c1675e5f7dfa6b509de20f4964df1176", + "value": "0x1531cfdf62d2aa" + }, + { + "key": "0x43b93079603c736faa41bf060a0180eacaf47c1329b0faa284328f79ab99b95", + "value": "0x3c33252728bee" + }, + { + "key": "0xf8616ddc2e26a7d530fa0e85535efe63b0b25f1157305eeee8357c90da4fb3", + "value": "0xc87e06d9f6a6f" + }, + { + "key": "0x189f421443795ae59bc938c5e129cafdf78082f389c2d203f8f56dd4fd6b656", + "value": "0x1e4febc5ea7f65" + }, + { + "key": "0x6c6417fd35a3c55106a25adc610b49c90b3e3b028dd80757074ac8696b71aa5", + "value": "0x48bb69aee52675" + }, + { + "key": "0x484b58d14b5ae33aa29b25f31f3558c0e6013d59f6c58193cc3a87d843bc34b", + "value": "0x7a5b02976ad3d09aba" + }, + { + "key": "0x5df2a97bf5eb4941f9a318b0df056a60873cc783ea8ba4ac05ad32110f15a", + "value": "0xad24072455f99" + }, + { + "key": "0x5035d6cc1aa46366de3e345b1a11fcb310efcc2e99719b14664580d61f5838f", + "value": "0x1484f4ebae9a60" + }, + { + "key": "0x4674d19a24d0dc7182142a040cda17c06b60e990abf1b1a0701e63a5253abdf", + "value": "0x362dcb50d320000" + }, + { + "key": "0x604e7fb7848c9c93786aed9fa57b49c439d834262d7da9739dde01902a4046d", + "value": "0x6e165975d2de03" + }, + { + "key": "0x450e4c4d0f04a431c7d4961350fac2612765ab8911d388aeb66d44046b786e4", + "value": "0x23d9cc5897efe46" + }, + { + "key": "0x39465f14fa8ab04311b2ac4c65a1d2ebcea468352381bc0d656654e77b1dbae", + "value": "0x5ec1908dfac8f" + }, + { + "key": "0x2c6705dcc5ac75d87473b218701d811d6731e1863067927cc311120b16a28a5", + "value": "0x181d41c782c665" + }, + { + "key": "0x779b8c599645d38ffcda12fe2ef0c397589b768da14839d553c6f4470023fab", + "value": "0x29ceba413e51a4" + }, + { + "key": "0x4a93ee107891028d67918cf171605b918288ce306aa9e861785cc482eaa75b", + "value": "0x91f2239dcc774" + }, + { + "key": "0x43f863fbfec515e09baf07ce0460de605f678a1561a44e0bfa821525f5c7d0d", + "value": "0x3730d7e60a099a" + }, + { + "key": "0x496d7267d8a8ec7097e4eedb6e9c3913912a0bb22f77d302b051e6e573637ee", + "value": "0x221eb4e3b2e4c4298f" + }, + { + "key": "0x1271de89b7411ef08b898fdb508fbc8d8d1131657a2552eb44350a1786c183f", + "value": "0x34aa8b0158f7b9" + }, + { + "key": "0x775baa087cdf0d733e1b9b46270c5164038fa38136eb1a8f39879b5db6ff3b4", + "value": "0xfa6081b7a8" + }, + { + "key": "0x5ae8b0b3431c8b279bffa04f2af6824a732c97b9a45a2132ce926dcc66f60f4", + "value": "0xa04b656a50ba8d2" + }, + { + "key": "0x1ef49b0c57d43b99e6d392f7b11846867f242b99fc5ba8d3f6857ba09991d17", + "value": "0x5376ef0c99396" + }, + { + "key": "0x6dd0182567da231e1ff1cbb3537bc81be012bf173529aac2372247cccd5bae0", + "value": "0x521608264e943c" + }, + { + "key": "0x55e58654b3641926525ee1ba66df8e43200ef0b6ae5da1bdd4d5be4b2e84477", + "value": "0x57c83297ff070" + }, + { + "key": "0x4189e52e8d290d14dbab84427b0582700f849dfec2da2f2146ffbe023978c27", + "value": "0xa26dfebd05" + }, + { + "key": "0x30145392e0879ca5c4dce72e875b6cb79c4be4add3d50b90b06d1de776fc9ba", + "value": "0x112c1691b830108" + }, + { + "key": "0x5aeab87da2ea3824a350b316078eb7525d3eced8159ee58f0afefc06cf165ed", + "value": "0x0" + }, + { + "key": "0x57b80b58a4ac8483874931359045426251d93b1726b9bcc87c5b7eab6e701c7", + "value": "0x14c69183f420b8f" + }, + { + "key": "0x144fb6d7f48cd1daa2f3d0a93b3e0048a8e1f7394caf134818ae57f7150e396", + "value": "0x1ee480fac761335" + }, + { + "key": "0x4606b971a1cfe4e5418ecd6ccca787ca29b9fae630748c4750854351ac86084", + "value": "0x277c552c54378b" + }, + { + "key": "0x5457ec56c73fc738dfd7ff3b89067c1ac632feb96c3f0dbf8850ed1ae9a2781", + "value": "0x5635e360189c8" + }, + { + "key": "0x24a89f59a90e033ed2c2d70155d431730facb3bef1a4e8265c877e6e7efa844", + "value": "0xae9efc38aefa2" + }, + { + "key": "0x1f409fbc06daa4d3fb86915e326f965f13ffab887b7e88d75e67b343f9d6a09", + "value": "0x17147731b0608c" + }, + { + "key": "0x7380093719a5ca22265c1ac3ba424c5d661f17f54305f410a74c3e815c7ceac", + "value": "0x11e617439446d" + }, + { + "key": "0x1c443ec48b88be24b5ab373438471bc6979d6682b529104ef12bf02b92a1b67", + "value": "0x5904b2a5a3979791" + }, + { + "key": "0x34f73df68e41816f4705b999fd9936bb67e74c5fafe0f2ebedb01e62f2aaa1a", + "value": "0x1ce3347b313ec0" + }, + { + "key": "0x265b51683e92ead6c7a6bc8a853d093e41421f4dc61d74a74b194182196ae59", + "value": "0x8d450c41a59d0c4" + }, + { + "key": "0x3e6b0989e98a92870d8adc93c47b66012be07d88c18215ede84003f41bd5a8b", + "value": "0x2dd049c53cd818" + }, + { + "key": "0x24c86bd5d54046e2f819ad5cbb9c4ae9cd7847a3a4c496e305bec938b0847f7", + "value": "0x1d0390c7bc82ede" + }, + { + "key": "0x5a19f995f76152a326123a9464685541b0697a76091710eda6416642a877745", + "value": "0x374a899d14b3c4" + }, + { + "key": "0x5c30a09c84f95e5a14c724df84a27aae24a67d20be0b9eb7ee70dff6af50c9f", + "value": "0x2c47077005aadf7" + }, + { + "key": "0x166130563ae6ab94d9e00b8fd4ae5d1bf585092a1600061a74a3d5954d08be5", + "value": "0x433571c95447d4" + }, + { + "key": "0x1b7e2095fde35ec725c9c69e68fc436bcee206451664a5d395a055f01a4542", + "value": "0xb25b458d4ea095b" + }, + { + "key": "0x4e06349c92198ca69c94b3c25bd7dcf9d4081d199b87a6dd98ec8d6bb8ea9c", + "value": "0x54101b8079b6593" + }, + { + "key": "0x61ae574ce0f54d68d83899fcfbe073d7e95bd59a0997649a62f46393b50e832", + "value": "0x978a0c9c1816136" + }, + { + "key": "0x2677b1a3331434bcda6889ff1d729c64786efa1195ceab2d1662857b0363e49", + "value": "0x8ebcfd488187536" + }, + { + "key": "0x3d3ae9c2513683f83cffd32f1b55f2ed2bcdef71591e54fd94b3a7410fcee0a", + "value": "0x0" + }, + { + "key": "0x5350bbaed2e5c775f513eaa016d87163780d3161f7df1fc317c2eab49cd62ed", + "value": "0x6a9cfdf4a07ba7" + }, + { + "key": "0x6c0e497c7778d73ca13170223e09b4b0f91820504b75211c07fc57365ffc52f", + "value": "0x8e99c0673b4906" + }, + { + "key": "0x71c196421272ec4fa87fb657064d3d2b74538f0b8b8644f90d0d7c944983b9a", + "value": "0xaa2b6e6f551dd" + }, + { + "key": "0x7b29dabf3f1155805333954606efcfaed70d716fcf69d0d270bf23ced7b1ffd", + "value": "0xb9e69b1bcde098" + }, + { + "key": "0x52c876c2cfd7abac1ceaa34278a31a2dcdc73753fa6e9e3081ab2470038b2b8", + "value": "0x80ec8494895e71" + }, + { + "key": "0x7bcd382428d0a60441bc6420ec5dbff0ef13baad699c7b06a5c9ccab40feab6", + "value": "0x7deba07ad993c" + }, + { + "key": "0x5afd8183a0693f43e5b0df4cebcbee0c2e10d17f0143487f6642c9709b6a7f7", + "value": "0xf9c8e2f432ed7" + }, + { + "key": "0x200dcffeedc92c26597ab450b7036556158faef4aa2b61c355d5a3a5494458b", + "value": "0xce34647a19de8" + }, + { + "key": "0x5c7afb30230efd10e6b0b054f8076b736f3eb642abb1a1d1053c08baf97f33d", + "value": "0x2a59254467bad2" + }, + { + "key": "0x369f752ab77bae83965a4441870ca03b17b3dc6aa8161e867211a69fd081c51", + "value": "0x9a0cbf86abab29" + }, + { + "key": "0x5c9eb87f859ed4317df981c9bb27fb1f910eb2878e6f57c5300de07267576e8", + "value": "0x10a9943ae1e8b5" + }, + { + "key": "0x1fcc08181dd2da46cd5918639fd037bb6de682517fc8b664ebc5f991ba5a384", + "value": "0x1d36d1e5806c4f5" + }, + { + "key": "0x75944a6a3f7601672881359362ec17c9d1296f857a7f2bbd2577f611c43eabb", + "value": "0x25d48615c996a518" + }, + { + "key": "0x773fa9f4d2f7c3d7d4a2247b1cb67e3091a53d024ad91fbba9b1996e6ed0463", + "value": "0xa68bb54651b348" + }, + { + "key": "0x6a8c0e67cd69f25f9107ec4a0ea60736464b39dd3e7e7361237364f31fa78db", + "value": "0x55492e52218b1a" + }, + { + "key": "0x2b9f134fedc89748f7a67525121e01ba084455fee3347768e780040ffc271e7", + "value": "0x9de320bf74f1" + }, + { + "key": "0x999246f1b7b1b1d4a844aee2a1a8c7bb9a1b3c25a10bc293fce8e144989599", + "value": "0x198d40d5287b8d" + }, + { + "key": "0x51462eb2072fd943d9507f3eb706475b8782a0b2e8e25108131f589b72cf54d", + "value": "0x2581376c4d70e" + }, + { + "key": "0xd72ba2d9a036c47c2a85ea43ad6d749f1df5fc2f75b7ccf30b01da9b859c6a", + "value": "0x565cd2cdba66be" + }, + { + "key": "0xd926e26b20e28495b94adc7b6cd14466d994a4c86a687f5b07c47e6db2da4d", + "value": "0x4199e4c55568efd3" + }, + { + "key": "0x1c0d06bd7060fec0ae69b82cb9dbed198512b21e28f74090aed0092ad8497f1", + "value": "0x902573550586a6f133" + }, + { + "key": "0x2cbcb37cda697c24a0e80280187b5080f1e6947537118ae532d7279b76bdec4", + "value": "0x234145b4a5e19847" + }, + { + "key": "0xdeb535c18c50db2297b3febff490af42a972af00185705355db663271fde1b", + "value": "0x139ed596737826" + }, + { + "key": "0x1616c2861603ece945a82de03e5ebbb40762a796b12e835c2267de3cff94952", + "value": "0xafb5b00e78f11" + }, + { + "key": "0x3e16683db14eebdaa50dce56a1044668b1a59620f8683f234c02e57413215d", + "value": "0x1fa97a82ca384" + }, + { + "key": "0x41ab16fd8e86aa7721e204c45791a31bda0d9b96fbc68393fe1879b1819a511", + "value": "0x2febab219deb3f32" + }, + { + "key": "0x6074837b7ac1a7f99df4b6cd8799e0660daf3d439c0e9724d7818b7f8b3e28b", + "value": "0xb7b6e20c9302e" + }, + { + "key": "0x7301c4f90fe6606a2004bcb07c21d86b05b0f9f9983c0abfec1053848f8f2b1", + "value": "0x3a0f95703f097e" + }, + { + "key": "0x18fed7834ee967311911d57deea47a37a48556305a110ea6863b6d38d5f9678", + "value": "0x1b0ebf4ef0483b" + }, + { + "key": "0x10e26aea5f15cc57abe9164f1ed1aa499b55d2f137adef3bd49a3e06301c7d5", + "value": "0x25f4ac0264b18000" + }, + { + "key": "0x79d9c4c8571265c53e983218cdddfcb9ca42ef0e203f38e9990e3a455cfd302", + "value": "0xfb656792f3d095" + }, + { + "key": "0x2b37b0d90d6730cde7ea32367bab601df6c01a0c6ce3b0a8c44af134995e210", + "value": "0x453dd5649cc624" + }, + { + "key": "0xf963692e8b5270be661fb56c16d7638462e901d0603f77dcc07fc81a42af2a", + "value": "0xae8b88ab2a14f6" + }, + { + "key": "0xaa3c5a4ae58646f857d65e1fa97163e25ef2e1bb9a03260e8db54db91d0e2b", + "value": "0x1321a42a80b" + }, + { + "key": "0x1ac24a7b768a9aa561b0e38c32a9ea35e909d2cac583b69cb68aca28b72aa3c", + "value": "0xbe2c3f23935b1c" + }, + { + "key": "0x49faadb6b39b4913f0b1d9310d49ad12e6ad62fa1671db41e371ea2cd0450da", + "value": "0xea5c14406bb2bd" + }, + { + "key": "0x2aeee57e3179a5b1d7cfa868e586408dc1c66424302c508cc702e7df09ec00", + "value": "0x65c2e696681761" + }, + { + "key": "0x3ca4869fc2c2e20c676f6ff8ab38fb9ce7ec0784069f483ca90b1d15c0b3a74", + "value": "0x4ee2d6d415b85acef8100000000" + }, + { + "key": "0x5fdf971868bba85dfd60a725d142bc82a991fbec1947c31b85925597d9b9bb9", + "value": "0x23fabff09d80b7" + }, + { + "key": "0x584fd2096a2e4407036870a16719a5fbcbf5e0ac129e8d52d7407f797ecc64a", + "value": "0x280a5a60439e85" + }, + { + "key": "0x3c510986699890a63f2eefa4a5e1aabe05133761a36bb2774508a6f074a0627", + "value": "0x4e32c60bd747fd" + }, + { + "key": "0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a", + "value": "0xb1aa6ded93f6b59df9b" + }, + { + "key": "0x3bed98af2f2a951f633f3c32520659f1505e4f053c3f29664acda817eb27e45", + "value": "0xa2fd70b7b0424" + }, + { + "key": "0x30dd8d392d6c765768217a26fcc2591ff29bcc703ec01de0d460ab4595fcc71", + "value": "0x5724ea0ec9d2934" + }, + { + "key": "0x21291b90804d9b28ddff8d558fb24387a0e226d33cb75e9344147ee0636d9bf", + "value": "0x40e2dd97b4b148" + }, + { + "key": "0x82df99399c81c5d047102f91ed6d6e5a25d0ebbcc89471ea3ef7ebad239607", + "value": "0xaaea8d3f7437a04" + }, + { + "key": "0x32976cb353ca8ed756b1f127a1dd66f530ac347856c9a67d886366abfeb0d42", + "value": "0x32330a9bd72d12004" + }, + { + "key": "0x36fbd8a35a6e285e9d7aa1bf6dba2cea8ea56473af8e93b8f786403faa6c12", + "value": "0x2207a25852c19c" + }, + { + "key": "0x13fcf322febb7272a2691e99724e92ece7cae9137d4442ab12105d2d62ff85a", + "value": "0x467bf951eac595" + }, + { + "key": "0x3713bab4467fdf657069badcb2d75f21c64f43f2e011c9d32255678d94b7eed", + "value": "0x9c1d4fbe456b9f80d7" + }, + { + "key": "0x1d46e593c07d148fdf2f391245884f108ae66890feb8a9947214ef60c9a1090", + "value": "0x2b9c8e9c87842c" + }, + { + "key": "0x63ecb374177ad3aaa28dab33d7c69176d788db559cbe6fb54c5324038de2438", + "value": "0x327c2fa61f0159" + }, + { + "key": "0x36b4cd37bb769f7eb567506d7e698ef4b9d087281b5042eaf644bfd8a59f15f", + "value": "0x18de76816d8000" + }, + { + "key": "0x39a007943ea45f7c9f73fe13cf9eee26e5844828ae7c191ff4f08906f64f951", + "value": "0x114c6001762517" + }, + { + "key": "0x146521d834a245b0c3325ca5bd55effeaeb21dd7466cf506d12595011c275ec", + "value": "0x62fe72dbb8b505" + }, + { + "key": "0x4ec50f63c9dbaa8da9a7a270af6ee37ce5f4043d7a27f3e13c0c90f0d080efa", + "value": "0x1d4f54392400a12" + }, + { + "key": "0x191173181be33f69c8ff052d500f988c1e4e2273b50a17241b98d4a499ac8af", + "value": "0x1f11e8bb088d51" + }, + { + "key": "0x622de76fde18c4ad7b9b4a4afb34709868be06146472b53cbe2f74c91f0a001", + "value": "0x698a032fa1730" + }, + { + "key": "0x7667eca993a06da12c4d640c1cd3deb1fb26aa08c25a690f6139e5d74750d8f", + "value": "0x6a95b23516b370" + }, + { + "key": "0x36edf716fee368dc5b1d513a03aa8ec659a4c117199936849897f205f2d907e", + "value": "0x413bdd371e20f" + }, + { + "key": "0x5797885c2725f592c5504f676e254c5d2564e03ae0e44af30a9b400d2626845", + "value": "0x690afecc964ace" + }, + { + "key": "0x3c0dccd55ab26726d4a9c5d844da2004fb0941ca63e910c1971929697c8d121", + "value": "0x4aad2262e5831b" + }, + { + "key": "0x141f95f017119e011b00403c3448dd7497063e2375e7df22d65d3436bb46b47", + "value": "0x89cfef3b13cd7" + }, + { + "key": "0x36e008accf5696f1002cffa271fde440d7e4d73861756cea55e9476f071c46d", + "value": "0xa860e5bc4463b7de7" + }, + { + "key": "0x62f560b58cc9849d6286cb988c471dc0450eba7255a4247208c9af87ac54f0", + "value": "0x30e6b973c64553d" + }, + { + "key": "0x31d785e3cbbb1c72405f6200be875457f60a9d04734e291a807556165721fa9", + "value": "0x1431cb316c183f" + }, + { + "key": "0x43c91473256328ffe6e6c34a16fcee5395bc63d2797f64f6e4aa7a357195b2b", + "value": "0x41355af83e980" + }, + { + "key": "0x39a3200e942ffc3f7ce9f031920458f516b20bfa82d18acee616a1e8ce9c846", + "value": "0x1606d69dd341b5" + }, + { + "key": "0xe9bd753a67ca2c8a40a5902d7611f5eb4985d3f572fbad0a100c460cef54", + "value": "0x85d798ccf038bb" + }, + { + "key": "0x5aaf48b5e4ca2b8274ee5586e47bdafcc6a279415d9a3e3cfb9c869bb397788", + "value": "0x2de356abe123cd" + } + ] + }, + { + "address": "0x1b5bd713e72fdc5d63ffd83762f81297f6175a5e0a4771cdadbc1dd5fe72cb1", + "storage_entries": [ + { + "key": "0x36929a188a04ab62bd04e6c8570fd537cbe704208d61f647023bfa4dc58df37", + "value": "0x0" + }, + { + "key": "0x47b7a2a1e09d304a3e6d92fe27e1280c56bfc931da78c91a3ef1a50089dbb2e", + "value": "0xfa5ab54cf0f6a9d" + }, + { + "key": "0x5728052634af786a29590e94e9c604fb4aa9e499cbe18df7f0a064e083e0c82", + "value": "0x10d66b8b144f0df4" + }, + { + "key": "0x33c2b8d82426b3ddea58c6a9e5982f3de49fd2574cc5a051abc856822ede56a", + "value": "0xcbbeed6b8da29d4" + }, + { + "key": "0x438650d5bfac8bec8df76b94366f4774565ab7295280c572eb12296ae968d9f", + "value": "0x145a9848b" + }, + { + "key": "0x7d99d75132ca703353e6994dff949f1cba965e43754aad7e201a2c6a3f1725c", + "value": "0x0" + }, + { + "key": "0x6b5ec96d066072f05daba42a589e5a0f6d08257b1feb9a7bbf2fe20d532e63c", + "value": "0x0" + }, + { + "key": "0x4f3417591710891c3a59640190dfd1534e2dfdbbf6867803a0d4e4c5e69da6a", + "value": "0xdd805e22f06d4cc" + }, + { + "key": "0x351f611461b9233a3dfead76c7266ff9da0344ba798cea3253aa700c7defbda", + "value": "0x4797371cc1873" + }, + { + "key": "0x22c4bf46b2070636acdfb199cb04b00b5ee68b789d9bbb65fc268634cba5658", + "value": "0x0" + }, + { + "key": "0x48be3692ab3e9e8bd4a134a7b958b4e69bcb00a71d4f58c22f9311921f12bcf", + "value": "0x1cdd9b93ad11feb" + }, + { + "key": "0x2d3a3f7bb59900ced1bc84e5b6b0ecf8433ba1d55b208b2d24765d9ab8b469a", + "value": "0x946b2ddb5694802" + }, + { + "key": "0x7e14fd6000d4fcc713e12b6f663ec138ba8479619b5dce677f30f367cbe8ab7", + "value": "0x3212667af2caf3" + }, + { + "key": "0x4dbad9918314c1c82698955fa70fd826eaadd4f42c6b73b0709e383b24a9844", + "value": "0x1248621007b980a9" + }, + { + "key": "0x2da4aac028f10b6a15ba0e2b48e103d14857939e8a6ccfae8d276c7ad5fe0b5", + "value": "0x7fbe8fe1cb7f431" + }, + { + "key": "0x5b49e54b6904675c29525f217593e9454054b62146fb1a5d733410efadf7b1b", + "value": "0x2810cb5c" + }, + { + "key": "0x1d430bf138ea7c30cc4ba41938ff8081ecede809c1d7bc56b785784aceaae08", + "value": "0xbc3625ab94dbc1f41a" + }, + { + "key": "0x1eac5fa65039185eedf86909d861e9ccce7c6a860d266e5ca52dc1791026782", + "value": "0x0" + }, + { + "key": "0x9f31593996a0a8f30c653bdc6a5b08935bae29295146522d93783a9dbea066", + "value": "0x6a6912b76065" + }, + { + "key": "0x3d37be32ade4c0be4db94442ebd1a405f62b504a3f2461b295bf8ff4806c026", + "value": "0x12d66d95c2cfd624" + }, + { + "key": "0x364327a1df0f2eb067d39ec1d2dadb773e3a720465e87eabd8d37c589101cb3", + "value": "0x10d407f47b72e290" + } + ] + }, + { + "address": "0x247444a11a98ee7896f9dec18020808249e8aad21662f2fa00402933dce402", + "storage_entries": [ + { + "key": "0x70176b9e5d57f7532fbea6c667116906048b6eb94c49a0ad5cc7b51273d184c", + "value": "0xb" + }, + { + "key": "0x2da4e0cdfc95f8ad825f6010d32f4fe1ed447414fc651dabf42f2de5d8ec38f", + "value": "0x1" + }, + { + "key": "0x7d0c3344c72c0a1d2f423f3b4a9a6918177d73b731a20d785282a2d8746e52a", + "value": "0x1" + } + ] + } + ], + "deprecated_declared_classes": [], + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x61281febf3f4c4a37fd701e9a7d55751bc33fcc58e881e62a9b7addaa04a7f3", + "class_hash": "0x1a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003" + }, + { + "address": "0x136910b27feeb0d898bef1786746528380ffa35ce4f1167a6872d89fa62b6d4", + "class_hash": "0x3530cc4759d78042f1b543bf797f5f3d647cde0388c33734cf91b7f7b9314a9" + }, + { + "address": "0x6d791d7100e445cb6eaf79f395765dd81869f6b3c4aefb8039a0e54fdac5f75", + "class_hash": "0x25ec026985a3bf9d0cc1fe17326b245dfdc3ff89b8fde106542a3ea56c5a918" + }, + { + "address": "0x5d1ea877c135deda37c55aa05b9fb9ca6d5d86a077f8a9895a269dd60c827d0", + "class_hash": "0x3530cc4759d78042f1b543bf797f5f3d647cde0388c33734cf91b7f7b9314a9" + }, + { + "address": "0x408f08dd87750f5218c029563db17cbcde313ff44c7d01d15be3cc9d5af60bf", + "class_hash": "0x3530cc4759d78042f1b543bf797f5f3d647cde0388c33734cf91b7f7b9314a9" + } + ], + "replaced_classes": [ + { + "contract_address": "0x388ffcdddab0eb1518bbfa0599e32c195398c76a476afda1b0f75bdb64a6de7", + "class_hash": "0x1a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003" + }, + { + "contract_address": "0x68b6e5d3d9bf46c5451a3a5e921500adece742c8419117a6412aeb8527c8ebc", + "class_hash": "0x1a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003" + }, + { + "contract_address": "0x5a64a8169d195cf20626ed99fa9dd7c8ff72bbe50aa4ac0f40e599d4b362750", + "class_hash": "0x1a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003" + }, + { + "contract_address": "0x72291cbfd4d8be52134884cb34ee0b268258cb8ac209bfc185bcb91db1e7999", + "class_hash": "0x1a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003" + } + ], + "nonces": [ + { + "contract_address": "0x5c21b7aa62231f8d99e266d18fa00062403f4ba071ba95d174179f04d744014", + "nonce": "0x3e" + }, + { + "contract_address": "0x1c17191276440ee2e338dbf9f5406966b16531dcf4702a37a5aef8344078208", + "nonce": "0x1b" + }, + { + "contract_address": "0x15dcbeeaa53c6f2aa4559a880175540255c6d9268d7dbefa79cf575b03f21a3", + "nonce": "0x3" + }, + { + "contract_address": "0x1e670f4f40f11a6488dd8bacffaaea26b04b7dd4f775a6df504e8b76cef85fe", + "nonce": "0x1f" + }, + { + "contract_address": "0x384b35211f922c5c5cf6eb257c0f0e83203dfb9975ddc20cf0b091c759a03e5", + "nonce": "0xb" + }, + { + "contract_address": "0x85a1896d13213afc7bd7495b50e9fbe11daf5595979a4896e05c15c4ee36f7", + "nonce": "0x21" + }, + { + "contract_address": "0x1f5adbb3ecc4c3432fd23df11140928e106694bac9ae2fdd18a78fd294de57c", + "nonce": "0x1c" + }, + { + "contract_address": "0x6f6289f8f7acad8b81f72803ff226e1f7706f9bf4faa945823292098407ecce", + "nonce": "0x1a" + }, + { + "contract_address": "0x12bc25706bb8554512f924d903b0cb6e240c60a93c94d5fe1ca45b1fb693ddd", + "nonce": "0x51" + }, + { + "contract_address": "0xca1c554b6ccbc949e59ddda8ce0ddbb9b5dcfc462bd3bf612d046c50bc628d", + "nonce": "0x1e" + }, + { + "contract_address": "0x328f8e8d0c5ed1f171a4cdae748a473fb6d82d274bba6392a11fe0d5837776", + "nonce": "0x41" + }, + { + "contract_address": "0x3d9c29ed4bc69f1f10cb299344924c034259947260187319955153125733855", + "nonce": "0x10" + }, + { + "contract_address": "0x207a638e512242596e6d7d8f24f906548ee17812ca76c41aa2e1fd842cdb9bf", + "nonce": "0x18" + }, + { + "contract_address": "0x6ed626e921310dc500fff72c212b80d4597bec4b82aba0599e1a18b6b57c986", + "nonce": "0x1a" + }, + { + "contract_address": "0x37a18d80a3995b13d1508f9d3b0fc6d376d00109564ad211673b82a6817abf4", + "nonce": "0x40" + }, + { + "contract_address": "0x136910b27feeb0d898bef1786746528380ffa35ce4f1167a6872d89fa62b6d4", + "nonce": "0x1" + }, + { + "contract_address": "0x6f7e65a93049d04a6d83804fec7025c5d5ddb32d79d13a44e95c165ec63c7e4", + "nonce": "0x38" + }, + { + "contract_address": "0x128fcbd5ac8a98eedc4d83c968bdea25ad06c78341425c6050e7d0feeb697e2", + "nonce": "0xc" + }, + { + "contract_address": "0x14f9f06ff5981e5f6915b8cf0a959c5e5e3effdecd37bc51d94404501d49e25", + "nonce": "0x20" + }, + { + "contract_address": "0x3b64cb597b23d970c0b9df5bff789a9e8b49162ca8721c734e1a3668fcb02e7", + "nonce": "0x30" + }, + { + "contract_address": "0x42726d87c7dfb36f5254791dfe79ba792ac147ffa6035f6ba355585087e6b31", + "nonce": "0x41" + }, + { + "contract_address": "0x793d1793e8515ad16432e7873f264182c7d8a1c6e45bb2d025cb63afa923124", + "nonce": "0x17" + }, + { + "contract_address": "0x25a504d884a2c50d34d578e97c47ca10b43e3ae92b81ef15656b16d22016bf", + "nonce": "0xc" + }, + { + "contract_address": "0x152f1614e347d2f0bc7d652da7d32c27f9ee38984ad910875545ab268dfbb2f", + "nonce": "0x14" + }, + { + "contract_address": "0x25e23874d051a17bd1d145e3634970d1bb290dae5c0d73386d4598278861715", + "nonce": "0x185" + }, + { + "contract_address": "0x60790b386f44b999831a7a60d20258eceb8b0f21e49423028de616ccd312c96", + "nonce": "0x19" + }, + { + "contract_address": "0x2da0f2b8fac36863f131efeb65d73ca148f5ea55fa358bd6f552c226501c901", + "nonce": "0x5a" + }, + { + "contract_address": "0x414c0f350113323c2609804c86227cdeb34258c828aacabab3cc913554ca153", + "nonce": "0xd" + }, + { + "contract_address": "0x185c52379e556e9cd7d290be97712a491c328dd4e91ae7f3ab86adb7896c816", + "nonce": "0x40" + }, + { + "contract_address": "0x5197a6af3f299cf77c9ed5d814fcd5ffc7b807265333c903b1f99286f9ca01d", + "nonce": "0x17" + }, + { + "contract_address": "0x6720786d99c4c40a0d8641d596ece3878d8785701b586691a6a7855ac8c748e", + "nonce": "0x18" + }, + { + "contract_address": "0x575e2f0650aaf9964cf0da778dd40b7487f6f14189c761118b40e81e21a2cff", + "nonce": "0x18" + }, + { + "contract_address": "0x3a58bdee7b0a258829801a7f14230eb88b86301b263fe9fb5f40e7993a37165", + "nonce": "0x14" + }, + { + "contract_address": "0x2983472c8683388fc73f88139cb3b5c04da42a89008188129886c38ef1eb8bd", + "nonce": "0x26" + }, + { + "contract_address": "0x1cae80284ab2b27915c06ad966a54303d30eccb3b70764e1573ecd68747218c", + "nonce": "0x18" + }, + { + "contract_address": "0x6c7b10697e6c4441f04acb26096badc253e329e099754811d948aae4c680564", + "nonce": "0x22" + }, + { + "contract_address": "0x7f72dd7c0ab8a9deb014d6f03da0c9b9a1116c950241c3ad5d36292118e0772", + "nonce": "0xb" + }, + { + "contract_address": "0x34b4cfbf7cfe83b0888fcac9cd34c435e50a44fcd112b8373959097d10465fe", + "nonce": "0x3e" + }, + { + "contract_address": "0x993c091f0d0480c9f793ca2bf4c0ba4a6ae7c8fc52aeed7a2604b43269254f", + "nonce": "0x2d" + }, + { + "contract_address": "0x167487a5ea04a1dce2023efba67175c649970f8ce49757a2e2f0ec236dc64e2", + "nonce": "0xf" + }, + { + "contract_address": "0x459b565077fc9a00f7968898cf691412f9bcb420d0fbb2cc1cebfd85323ed68", + "nonce": "0xd" + }, + { + "contract_address": "0x21e0abccdeebd618b3a0793af890829e624822a670dfd97e85c708df289abe1", + "nonce": "0x19" + }, + { + "contract_address": "0x18d79e2abcc734a550e41bcc60b37f2823e2c73936d4a8cabc9d47ed7ab3163", + "nonce": "0x15" + }, + { + "contract_address": "0x8af26540a9c49923159b852395b1297c1089202311fd75c77eec5b4418372a", + "nonce": "0xd" + }, + { + "contract_address": "0xd52115230ac0de286850b2dffb328c00999cba010691f78d6f74754317afb9", + "nonce": "0x13" + }, + { + "contract_address": "0x1b74669b4eff662b5fefe9c12f7960d8ee782960e9aed7106d689e88921fab2", + "nonce": "0xb" + }, + { + "contract_address": "0x17f991315097a9a21f8666bcd813615446e5886e9b6532735e2b69c315ed33f", + "nonce": "0x5c" + }, + { + "contract_address": "0x41969fa75160f181a0129c5971563c9db4548a2b32ff764efcf2c45f367f7d6", + "nonce": "0x22" + }, + { + "contract_address": "0x242635a04dc647e028658e0718780d4203b356653eee7fa2b0b266f050019dd", + "nonce": "0x4" + }, + { + "contract_address": "0x7f158f583c7c8fc21f35ba5b086c931464ee23aa0552f861243d60c3a64526c", + "nonce": "0xd" + }, + { + "contract_address": "0x176fddca3f94edaa29b98cea39a68b76aefccde75e4aef5f482835541c7a6f4", + "nonce": "0x6" + }, + { + "contract_address": "0x4316e91e4eb07fb73de074d193d5da11a0a535a829993ad7b4600cc589b1b0b", + "nonce": "0x1f" + }, + { + "contract_address": "0x6dd58012ed1a77371c6ddd467ace0bd1f3b2e766d1623d02dcc7be330eb6a47", + "nonce": "0x29" + }, + { + "contract_address": "0x2f12e3edb139414e9b3dd2ba2ce848c05700e9bbb2f47181f6e1fea1bb5ccbb", + "nonce": "0x10" + }, + { + "contract_address": "0x77df21fde1005cb749f85d1ad085b0358d1a09d84e4dae3f96eaed0fe6b9371", + "nonce": "0x56" + }, + { + "contract_address": "0x33725fb40e1a4246f5eabd5f3127f2d150141d93e36abf4f97051527aabb5b3", + "nonce": "0x18" + }, + { + "contract_address": "0x29ace44cae516282d9dd250722da3f5a6d4e925db7bdf5e161e997cd2864eed", + "nonce": "0x28" + }, + { + "contract_address": "0x21c985ef91240bd3a69153d34859754df4a33fb10a2d612eb08c2ea34e1a7d2", + "nonce": "0x15" + }, + { + "contract_address": "0xd97bc41c23f4b15b74a4b0443dfeed051d8f3e28a77ebb7d9ed74e5801483d", + "nonce": "0x7" + }, + { + "contract_address": "0x4d5758f8c016f9d4becb3798d80b2e74bb8744cd2f1e23f487ccfe90445ae83", + "nonce": "0x23" + }, + { + "contract_address": "0x6083599966bf4dad4f3ff547b3f96a57fb50e97d65201d60fcb5c6ecb8a9893", + "nonce": "0x28" + }, + { + "contract_address": "0x6b5af5e69896e6a8a7162b066d7c78c52c85bf2cda704f1ddcc4ce75ef34ef8", + "nonce": "0x20" + }, + { + "contract_address": "0x423508635cf395398567422c7d1f6ba102f25e115cc3c8d2b2b5faba26ce74a", + "nonce": "0x5c" + }, + { + "contract_address": "0x508a4ff58295dbef862abe3234e5acedc57f8def087f1b07272b4541edfbffb", + "nonce": "0x9" + }, + { + "contract_address": "0x676562b29a115b718a79a7496c2a1996d789b3f87c544b2476e6b36a6e61a29", + "nonce": "0x12" + }, + { + "contract_address": "0x1664f7aaf4a3f72814f828f98dfca15b4a555ebcc63b9651903d2cd034d2588", + "nonce": "0xf" + }, + { + "contract_address": "0x5076c2ad76e56b24072798d1a18fa1f460d1bc3cc136a34859e4fc2c00c64e9", + "nonce": "0x25" + }, + { + "contract_address": "0x3da4c90ef3ccd4a7e0bc6c4139a7a9d35f0dc17d0a1dd2c8df3520f11d57653", + "nonce": "0x3" + }, + { + "contract_address": "0x1f509ea65d63edb0fdb2f28c74630393334b1f4b045397d5b4d765382ef9762", + "nonce": "0xe" + }, + { + "contract_address": "0x5250b56265f724618a90acf327c45d9dd6271de682a768039c6ccf88c6adbf5", + "nonce": "0x47" + }, + { + "contract_address": "0x71ea5151ae74d60aff9f39b5d2d7b2be50079208a2d4cf468f419aec9af18cd", + "nonce": "0x52" + }, + { + "contract_address": "0x6c7919259808f142f071b4d159cc5966176e1cddd9c465d64110111fce55ec4", + "nonce": "0x37" + }, + { + "contract_address": "0x2e8454f19a77ef28502b1d9dff74c506474ff0e1a21eb919023a3d200f7e623", + "nonce": "0x5" + }, + { + "contract_address": "0x35fc38cd032a6f6c338944dc41bfa6bf8e3bf56f3e262e4c7120c7ef56f4def", + "nonce": "0x21" + }, + { + "contract_address": "0x1ecba75c3feb29ef4fab06122a17b7ef9162c1b9ea4a5487140ee80a9f35daf", + "nonce": "0x8" + }, + { + "contract_address": "0x32c99033f99260006590412fd519c0d26049d2fefa546c5c4ae50c617fbc2ee", + "nonce": "0x15" + }, + { + "contract_address": "0x2fc003a0260946abc69633e4ef31f03ccd22c901b4af9de6c63b74635eb1cb7", + "nonce": "0x4" + }, + { + "contract_address": "0x669ccac65ea54f9db3118cc0135306d70dca350595e04fa025af6993ed90c4a", + "nonce": "0x11" + }, + { + "contract_address": "0x1648d3ba795b8a596afc3eaa407559f9707257d6585cf4d05aeb3d6402726a1", + "nonce": "0xe" + }, + { + "contract_address": "0x60e1770d9c3216687a394bdfb27edbf390233760cb8e95cab952938d886b08f", + "nonce": "0x28" + }, + { + "contract_address": "0x1ce2f16d382b646cc3960738c1137c75fd6a29f9e283e3fa10513332a26669c", + "nonce": "0x11" + }, + { + "contract_address": "0x5201ea4dd69f9bbf561e9b4c2c7f9709a1b96bf216d311b60c4a54371dd1738", + "nonce": "0x7" + }, + { + "contract_address": "0x6813d8ff50bd367569b685b2281bc8961fd1746ab60ea5f16af1dd5c47891bf", + "nonce": "0x13" + }, + { + "contract_address": "0x62819c26df4821c42a638bc1059ed5fdd747b5ba8745f5fa8f89069d901f41d", + "nonce": "0x4" + }, + { + "contract_address": "0x42ae6db06206ef2475297ea9d7ae41c16f8aea7381aa08a428c0b4fd67aebbf", + "nonce": "0x4" + }, + { + "contract_address": "0x408f08dd87750f5218c029563db17cbcde313ff44c7d01d15be3cc9d5af60bf", + "nonce": "0x1" + }, + { + "contract_address": "0x5e904bcfdc42e08b0d9a98ce4f1a24486c01b45c0e61b60834a80a49d15f677", + "nonce": "0x25" + }, + { + "contract_address": "0xb8ac914346625dab1f4fb186d7110a19c6e49856f6bd352f259edba08a3e27", + "nonce": "0xa" + }, + { + "contract_address": "0x28c33d71f1d49e31ebb1739d46c718017c12b929888dc4269bfba15222931e8", + "nonce": "0x5" + }, + { + "contract_address": "0x6da9492c537c0d774474d34b1cec00da3ca2d774a1302de9c8bff0a9deeff4", + "nonce": "0x53" + }, + { + "contract_address": "0x3a197aa034674f9d27b7aba01e9479ca5adeb0504855bb39252c86048131eb5", + "nonce": "0x10" + }, + { + "contract_address": "0x6918de0f4e305e6501962867513a07ba70c54ad258085ba0a6a62cc8cbeb575", + "nonce": "0x8" + }, + { + "contract_address": "0x72291cbfd4d8be52134884cb34ee0b268258cb8ac209bfc185bcb91db1e7999", + "nonce": "0x13" + }, + { + "contract_address": "0x583cedc3226bec710925c0013c248268499d9a81a0d345e0843e1cd44dba6b5", + "nonce": "0x22" + }, + { + "contract_address": "0x388ffcdddab0eb1518bbfa0599e32c195398c76a476afda1b0f75bdb64a6de7", + "nonce": "0x13" + }, + { + "contract_address": "0x690d1dec308c40d9426440c96af3e1b1d31fc4ee8935ca35d7f57604283c894", + "nonce": "0x11" + }, + { + "contract_address": "0x6d791d7100e445cb6eaf79f395765dd81869f6b3c4aefb8039a0e54fdac5f75", + "nonce": "0x1" + }, + { + "contract_address": "0x3f7c1e8f76877127b5bfd4ce39bab7f63d793024d2ac436ada4657af72bbbdb", + "nonce": "0x12" + }, + { + "contract_address": "0x4ee5ef283df69389fcc850e20dc6b1207f058a5bc3c991a9609d16f3013efab", + "nonce": "0x4" + }, + { + "contract_address": "0xabccbd0d7dda5629761e064f771ea51f2babdb8740d38a8acf39c6358f048", + "nonce": "0x27" + }, + { + "contract_address": "0x7e0ff6a3b133ba5bad78a5bdf0465b065e7a9b62384b6b74f9a2f7803f49036", + "nonce": "0x16" + }, + { + "contract_address": "0x62341497b412f0aa8e2f5bf3fbc4724a704338066b19a5b490b56f8f48ccb2f", + "nonce": "0x17" + }, + { + "contract_address": "0x4e68830fe8be1f79ed4c00289e64dd057905981a1840ad5c5e0aa24f22815ca", + "nonce": "0x18" + }, + { + "contract_address": "0x4142dd4be719a72edb17e97bcd603b576f02d5b0d148b5f02525784a169d98d", + "nonce": "0x37" + }, + { + "contract_address": "0x179aa76deab144ef996ddda6b37f9fb259c291f7b79f4e0fca63e64228a53f5", + "nonce": "0x1ef02" + }, + { + "contract_address": "0x2ad8829fd3ce54f776bb260277c3325268eefbd480c8e0745d5a47950269951", + "nonce": "0x4" + }, + { + "contract_address": "0x5a64a8169d195cf20626ed99fa9dd7c8ff72bbe50aa4ac0f40e599d4b362750", + "nonce": "0x16" + }, + { + "contract_address": "0x4cb6ebc671eb059831541fa8c269ddac84a57535b34c12e3d907f82e3e4bea3", + "nonce": "0x2c" + }, + { + "contract_address": "0x57771f24bdcfc85ee64c0ef104cb12313fb3b4617817163a0dd18f66de3d356", + "nonce": "0x24" + }, + { + "contract_address": "0x3ca7b52f806c6200f26d61c2b3ad082c698614cedfc7f4e31a58913dea37bfe", + "nonce": "0xf" + }, + { + "contract_address": "0x39e0e699b6dbd66675319832b405e9fc717c709d1df1bdfaa5ca96d394ebc78", + "nonce": "0x2a" + }, + { + "contract_address": "0x20cbfb7cadb604429719da134eee0d0f889abd5dfca89b84cc14c5f3184f37f", + "nonce": "0xb" + }, + { + "contract_address": "0x7ea646f7b616340984647eb4bd8a3151e62dc0d9e10315374f1205a66a887c4", + "nonce": "0x33" + }, + { + "contract_address": "0x347a413305735f5354eb8f90e4102b29392a99eebba52a3eb048041a14abbdd", + "nonce": "0x8" + }, + { + "contract_address": "0x77582f956544534f20c7fe066e8ba4b5dcf13f4889f151ad584d5f948d3aae3", + "nonce": "0x34" + }, + { + "contract_address": "0x70166c74c096faf839648a018ee8063d0e64a023ad2b0503a1d177e824f243e", + "nonce": "0x53" + }, + { + "contract_address": "0x45e9b8f2e677f8d872fe7b87cffdc798e9864126c89864a7026b5765d2fcef3", + "nonce": "0x56" + }, + { + "contract_address": "0x55a1279f91ea6b4fdcc28038eff829eb58228b888ce5236cdeea0a624fa0ea1", + "nonce": "0x19" + }, + { + "contract_address": "0x1a056c7b5d4b981439a870ad94c126101aadad9d37f9c50aa899ca31872fac0", + "nonce": "0x2" + }, + { + "contract_address": "0x423fa685549c80eefb33e3c5c4613bb3429bb88bf85d116534b84b4694f6b58", + "nonce": "0xa" + }, + { + "contract_address": "0x10db94f197387dfbf3fb1b0d0f6f0985e12ff871711606286ae152b456b376", + "nonce": "0x14" + }, + { + "contract_address": "0x175dd442db5dd1430d9e4bd1c5bcff6293da2e71754dd2bc8b0b49d68dafcbb", + "nonce": "0x17" + }, + { + "contract_address": "0x63d6c807bd1f74ec456abb1d8b0a42dc90df1a64f3f974bc943a66bb5b1e58", + "nonce": "0x8" + }, + { + "contract_address": "0x5b593d7157976e09247ecae125153813437c0ed1781464972f09fd7cb3040f3", + "nonce": "0x17" + }, + { + "contract_address": "0x5d1ea877c135deda37c55aa05b9fb9ca6d5d86a077f8a9895a269dd60c827d0", + "nonce": "0x1" + }, + { + "contract_address": "0x61281febf3f4c4a37fd701e9a7d55751bc33fcc58e881e62a9b7addaa04a7f3", + "nonce": "0x1" + }, + { + "contract_address": "0x467470244db5f6d88b21478b71b3d32739706794efb2c380303acae7d2ca0fb", + "nonce": "0x5" + }, + { + "contract_address": "0x375944b09f0350e5c2340277cd38bdde3cfdb7b84ef7fc3c2aa22ee6c799a35", + "nonce": "0x21" + }, + { + "contract_address": "0xe7afa8a24a553396847ab357df55df7d95c7e51ecd483b2990f61426e364b4", + "nonce": "0x71" + }, + { + "contract_address": "0x4e3e27bdbcdf5b1152a4b097892ed893edcc5cfb03fcef7e2d9342a1dc020a0", + "nonce": "0xf" + }, + { + "contract_address": "0x69c06405546cbb672717d1e7980b95300e5e6301f3220f316935741c811f398", + "nonce": "0x18" + }, + { + "contract_address": "0x114fbb727a4604aadf8fbda4512728b12a7ff74fdeeb861d6ddecbec7b2d594", + "nonce": "0x11" + }, + { + "contract_address": "0x50350d68e7e354615775ef383d32bc2d04338aa4041256c7085cf5769259b78", + "nonce": "0x13" + }, + { + "contract_address": "0x1d1c15c607230c876e96be6a0fee89b2e173cb848e26bbbb1ef7a6d5d6e7ed4", + "nonce": "0x12" + }, + { + "contract_address": "0x4433d90fad089fabd1316c3675920c05da9109336670342c34ae0a27dcf1d44", + "nonce": "0xb" + }, + { + "contract_address": "0x7c703a2cea0c5f38100f9d66d2cc70f6d6ee1d6be9c43b4f7a0fa980ffcd732", + "nonce": "0x31" + }, + { + "contract_address": "0x3335df4e4d01cbf05f38855b76689d6ad4f67e26d4111d811be51dd296e94f1", + "nonce": "0x8" + }, + { + "contract_address": "0x2020d23fe919a209b1e745884b3e80513476b46e73bfba9e06234d11251453c", + "nonce": "0x13" + }, + { + "contract_address": "0x45481816d8a277adecb5214f0d60415c6ca9c9f27460d53971b690f22c8c9b0", + "nonce": "0x19" + }, + { + "contract_address": "0x3c00ded573f01f8eff7d5e67cd53d0a42e367b9ab4da9d2e7580a47c5c444ac", + "nonce": "0x1c" + }, + { + "contract_address": "0x2bf75693b6228b597488dbaf7ca55edaf9373fd4a012c7b54eef2c1a86f22f1", + "nonce": "0x30" + }, + { + "contract_address": "0x1674b3231d8c6ebd8cca067d8778cbafae9b4d3c5af68d59a97c3c458823c77", + "nonce": "0x7" + }, + { + "contract_address": "0x68b6e5d3d9bf46c5451a3a5e921500adece742c8419117a6412aeb8527c8ebc", + "nonce": "0x14" + }, + { + "contract_address": "0x55098bdfda961f539769be571a591796937e86d0d5329de0d076575c3b7c35", + "nonce": "0x26" + }, + { + "contract_address": "0x61a6c8eb1e5cc8f6033f779723efeea7d7c8a157b8f3fa91c40b97bc91b5707", + "nonce": "0x63" + }, + { + "contract_address": "0x6d07fd67fec855bcae14f28429ea875532715ac19fa04efb8edf11c394e6cd2", + "nonce": "0x11" + }, + { + "contract_address": "0x29e10c4fc9c7bdcd966185c1914871bd70834adfb100ff11f807d7fe503494b", + "nonce": "0x2a" + }, + { + "contract_address": "0x46e2cfecb05dd08ba75bcb134d92c53b2bf163cef84836c3a7747bb6bf04854", + "nonce": "0x2" + }, + { + "contract_address": "0x519b85c7331ac2aeb4cade1f2222404a174a8e0b3ee747169c66e2f40bee99", + "nonce": "0x14" + }, + { + "contract_address": "0x418948d83033b3a7ecdf9170cc334aaa48ea1c8e0d8926e855f9dbbd107de48", + "nonce": "0x57" + }, + { + "contract_address": "0x5003e44a7fd883cdfeddababf43aa3a59432fc83bb8a13d4ea164dec0afe510", + "nonce": "0x1b" + }, + { + "contract_address": "0x6b045b4f0de83159e5bd65bc1434a59ac043ad5d61b4a1e9485a89a50ed48a7", + "nonce": "0x21" + }, + { + "contract_address": "0x552d67025769b09ca108414300e43986ac2470e29a3d06f4233dece1475d6f", + "nonce": "0x25" + }, + { + "contract_address": "0x385020dfa38ee8a559cab4ca42e1ac64908c2e35bf2e2b2cf207beefa4f37ff", + "nonce": "0x19" + }, + { + "contract_address": "0x3cf0925a4b9c4ebde97970f449f1de1e4be55e744d9f88fde5b7924ee4a1dbb", + "nonce": "0x1a" + }, + { + "contract_address": "0x5bfe664214ad911ba618f717523ed2f089d4bcff9e3e1bb65ed26969bbb48f4", + "nonce": "0xaa" + }, + { + "contract_address": "0x1448b4eb934eb79410d7abb8467b5cc190078119f74c24c201baed4cad98cea", + "nonce": "0xe" + }, + { + "contract_address": "0xb8e757d56ec5491ec9b035d66a6754a075a8be07a6b2e98cf70ab794b534e3", + "nonce": "0x2" + }, + { + "contract_address": "0x66d8d61bb85464c291c00deb7eae860cdfc4082cabde9610748dc94adddf9f0", + "nonce": "0xf" + }, + { + "contract_address": "0x7f04d1308182f7f5852249c277474ccce27a8fc1e3c0110a34e0d0270b26bfc", + "nonce": "0x63" + }, + { + "contract_address": "0x2609ba6641ffd0c129fb14cd524fba0a84ec0713ceae05a43614ffd668c769f", + "nonce": "0xa" + }, + { + "contract_address": "0x47d5788081f93242204357c1d893138ab1065293e9278eb63abfb030f3e2c5f", + "nonce": "0x18" + }, + { + "contract_address": "0x1cb1fd41a68a36365a2a576d424ef2a57bf928602fc5a315bab4286ed391d1e", + "nonce": "0x12" + }, + { + "contract_address": "0x67b4d6fec279cf80ce0910573406a03eabc7e612f4ad5a752107ac4bfb83592", + "nonce": "0x13" + } + ] + } +} diff --git a/e2e-tests/artifacts/program_output_238996.txt b/e2e-tests/artifacts/program_output_238996.txt new file mode 100644 index 00000000..9dc75ff7 --- /dev/null +++ b/e2e-tests/artifacts/program_output_238996.txt @@ -0,0 +1,102 @@ +1822922502232419837250886949706477034225078151827907081290472545297754056762 +1575975341976033587828397293328945422807168398550414997080377553292877673504 +238996 +1338520627571051121654124025202042913813489381715816541993765995406348479957 +671483050609816861429812414688707376174032882875357307847551691140236175837 +7 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +993696174272377493693496825928908586134624850969 +4 +0 +1051195669891659433555637051801932554623347152093 +307000000000000000 +0 +88 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247820 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2703378999549632419301897627932541816250740708707798580500072430987523754698 +11114229349496715 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247821 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +1143387524800542912827323660214641581984816946811867156195570217140464801355 +128500000000000000 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247822 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +3496794549129298843272925358385643343914338801679783374153674383329039463443 +41747368794231730 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247823 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2275328500449361401852439083133519412445303435877185954682932199340280534232 +809800000000000000 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247824 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2398504191038257754602083118044408419011945436568671774709183397196672882094 +800000000000000000 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247825 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +1597456322245318876737870449155828097073464928197293858582694865169026585761 +6910000000000000000 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247826 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2156992103548378709439156869380283072682215287835224552808562473636240237268 +1299000000000000000 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247827 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2384796211375691500906214678988290645567986753928375202953551583049477672140 +10454952155062996 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247828 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2083028049574058891691341847693575636689286278981463916743720322874352362635 +129500000000000000 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247829 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2724390671094763747228216104750955256481898495701067776080492422659412539271 +4719000000000000000 +0 +993696174272377493693496825928908586134624850969 +3256441166037631918262930812410838598500200462657642943867372734773841898370 +1247830 +1285101517810983806491589552491143496277809242732141897358598292095611420389 +3 +2732531119861745145492580393321309303646146194169251696076657349465120407109 +6570000000000000000 +0 \ No newline at end of file diff --git a/e2e-tests/artifacts/snos_output.json b/e2e-tests/artifacts/snos_output.json new file mode 100644 index 00000000..b0cfffad --- /dev/null +++ b/e2e-tests/artifacts/snos_output.json @@ -0,0 +1,12 @@ +{ + "initial_root": "0x7D7E0C5772392D15F3F0C9CFF6DFE549BE29250462485F80D7ECBBC283256CF", + "final_root": "0x4EC6744B24853BDEC273225D76232DD0A342535816FFBD578CF8A5B3D1F2AE6", + "block_number": "0x9EF2F", + "block_hash": "0x7FBECAFB986506E1EC0D529A1A706B1FF810EC48CF71BDE18825E111D1211FF", + "starknet_os_config_hash": "0x5BA2078240F1585F96424C2D1EE48211DA3B3F9177BF2B9880B4FC91D59E9A2", + "use_kzg_da": "0x0", + "messages_to_l1": [], + "messages_to_l2": [], + "contracts": [], + "classes": {} +} diff --git a/e2e-tests/src/ethereum.rs b/e2e-tests/src/ethereum.rs index 31131a36..dcdf8436 100644 --- a/e2e-tests/src/ethereum.rs +++ b/e2e-tests/src/ethereum.rs @@ -1,28 +1,49 @@ -use alloy::node_bindings::Anvil; +use crate::get_env_var_or_panic; +use alloy::network::EthereumWallet; +use alloy::node_bindings::{Anvil, AnvilInstance}; +use alloy::signers::local::LocalSigner; +use std::str::FromStr; +// This is the transaction for updateState : +// https://etherscan.io/tx/0xacc442468b2297ea3fe7aee63f3dac0816625f3f0fd7ba074217316a25658355 const BLOCK_TO_FORK: u64 = 18169622; -const ETH_MAINNET_URL: &str = ""; pub struct EthereumClient { anvil_endpoint: String, + anvil_instance: AnvilInstance, } impl EthereumClient { /// To create a new Ethereum Client (spawns a new anvil instance) pub fn new() -> Self { + let eth_mainnet_rpc_url = get_env_var_or_panic("ETHEREUM_MAINNET_RPC_URL"); + let forked_anvil = Anvil::new() - .fork(ETH_MAINNET_URL) + .fork(eth_mainnet_rpc_url).port(8545u16) .fork_block_number(BLOCK_TO_FORK) .try_spawn() .expect("Unable to fork eth mainnet and run anvil."); - Self { anvil_endpoint: forked_anvil.endpoint() } + // TODO : uncomment + // Self { anvil_endpoint: forked_anvil.endpoint(), anvil_instance: forked_anvil } + Self { anvil_endpoint: "https://dbd8-2405-201-4059-e00f-b442-3c8d-7769-1c1e.ngrok-free.app".parse().unwrap(), anvil_instance: forked_anvil } } /// To get the anvil endpoint pub fn endpoint(&self) -> String { self.anvil_endpoint.clone() } + + /// To get anvil instance + pub fn anvil_instance(&self) -> &AnvilInstance { + &self.anvil_instance + } + + /// To get the signer + pub fn get_signer(&self) -> EthereumWallet { + let signer = LocalSigner::from_str(get_env_var_or_panic("ETHEREUM_PRIVATE_KEY").as_str()).unwrap(); + EthereumWallet::from(signer) + } } impl Default for EthereumClient { diff --git a/e2e-tests/src/lib.rs b/e2e-tests/src/lib.rs index 55e99e24..2d2b5fb4 100644 --- a/e2e-tests/src/lib.rs +++ b/e2e-tests/src/lib.rs @@ -6,15 +6,28 @@ pub mod node; pub mod sharp; pub mod starknet_client; +use ::mongodb::bson::doc; +use ::mongodb::options::{ClientOptions, ServerApi, ServerApiVersion}; +use serde_json::json; +use starknet::core::types::{MaybePendingStateUpdate, StateUpdate}; +use std::collections::HashMap; +use std::env::VarError; +use std::fs::File; +use std::io::Read; use std::net::TcpListener; use std::path::{Path, PathBuf}; +use crate::sharp::SharpClient; +use crate::starknet_client::StarknetClient; pub use mongodb::MongoDbServer; pub use node::Orchestrator; pub use orchestrator::database::mongodb::MongoDb as MongoDbClient; +use orchestrator::jobs::types::{ExternalId, JobItem, JobStatus, JobType}; +use uuid::Uuid; const MIN_PORT: u16 = 49_152; const MAX_PORT: u16 = 65_535; +const TEST_BLOCK_NUMBER_L2: u64 = 238_996; fn get_free_port() -> u16 { for port in MIN_PORT..=MAX_PORT { @@ -31,3 +44,84 @@ fn get_repository_root() -> PathBuf { let repository_root = manifest_path.parent().expect("Failed to get parent directory of CARGO_MANIFEST_DIR"); repository_root.to_path_buf() } + +pub async fn get_mongo_db_client(mongo_db: &MongoDbServer) -> ::mongodb::Client { + let mut client_options = ClientOptions::parse(mongo_db.endpoint()).await.expect("Failed to parse MongoDB Url"); + // Set the server_api field of the client_options object to set the version of the Stable API on the + // client + let server_api = ServerApi::builder().version(ServerApiVersion::V1).build(); + client_options.server_api = Some(server_api); + // Get a handle to the cluster + let client = ::mongodb::Client::with_options(client_options).expect("Failed to create MongoDB client"); + // Ping the server to see if you can connect to the cluster + client.database("admin").run_command(doc! {"ping": 1}, None).await.expect("Failed to ping MongoDB deployment"); + println!("Pinged your deployment. You successfully connected to MongoDB!"); + + client +} + +pub fn get_env_var(key: &str) -> Result { + std::env::var(key) +} + +pub fn get_env_var_or_panic(key: &str) -> String { + get_env_var(key).unwrap_or_else(|e| panic!("Failed to get env var {}: {}", key, e)) +} + +fn read_state_update_from_file(file_path: &str) -> color_eyre::Result { + // let file_path = format!("state_update_block_no_{}.txt", block_no); + let mut file = File::open(file_path)?; + let mut json = String::new(); + file.read_to_string(&mut json)?; + let state_update: StateUpdate = serde_json::from_str(&json)?; + Ok(state_update) +} + +/// Puts after SNOS job state into the database +pub async fn put_job_data_in_db(mongo_db: &MongoDbServer) { + let job_item = JobItem { + id: Uuid::new_v4(), + internal_id: TEST_BLOCK_NUMBER_L2.to_string(), + job_type: JobType::SnosRun, + status: JobStatus::Completed, + external_id: ExternalId::Number(0), + metadata: HashMap::new(), + version: 0, + }; + + let mongo_db_client = get_mongo_db_client(mongo_db).await; + mongo_db_client.database("orchestrator").drop(None).await.unwrap(); + mongo_db_client.database("orchestrator").collection("jobs").insert_one(job_item, None).await.unwrap(); +} + +/// Mocks the endpoint for sharp client +pub async fn mock_proving_job_endpoint_output(sharp_client: &mut SharpClient) { + // Add job response + let add_job_response = json!( + { + "code" : "JOB_RECEIVED_SUCCESSFULLY" + } + ); + sharp_client.add_mock_on_endpoint("/add_job", None, Some(200), &add_job_response); + + // Getting job response + let get_job_response = json!( + { + "status": "ONCHAIN", + "validation_done": true + } + ); + sharp_client.add_mock_on_endpoint("/get_status", None, Some(200), &get_job_response); +} + +/// Mocks the starknet get state update call (happens in da client for ethereum) +pub async fn mock_starknet_get_state_update(starknet_client: &mut StarknetClient) { + let state_update = + read_state_update_from_file("artifacts/get_state_update_238996.json").expect("issue while reading"); + + let state_update = MaybePendingStateUpdate::Update(state_update); + let state_update = serde_json::to_value(&state_update).unwrap(); + let response = json!({ "id": 640641,"jsonrpc":"2.0","result": state_update }); + + starknet_client.add_mock_on_endpoint("/", Some("starknet_getStateUpdate"), Some(200), &response); +} diff --git a/e2e-tests/src/localstack.rs b/e2e-tests/src/localstack.rs index d71071d6..8327c124 100644 --- a/e2e-tests/src/localstack.rs +++ b/e2e-tests/src/localstack.rs @@ -1,8 +1,15 @@ use aws_config::Region; +use aws_sdk_eventbridge::types::{InputTransformer, RuleState, Target}; +use aws_sdk_sqs::types::QueueAttributeName; +use bytes::Bytes; use orchestrator::data_storage::aws_s3::config::{AWSS3ConfigType, S3LocalStackConfig}; use orchestrator::data_storage::aws_s3::AWSS3; use orchestrator::data_storage::{DataStorage, DataStorageConfig}; -use orchestrator::queue::job_queue::{JOB_HANDLE_FAILURE_QUEUE, JOB_PROCESSING_QUEUE, JOB_VERIFICATION_QUEUE}; +use orchestrator::queue::job_queue::{ + WorkerTriggerMessage, WorkerTriggerType, JOB_HANDLE_FAILURE_QUEUE, JOB_PROCESSING_QUEUE, JOB_VERIFICATION_QUEUE, + WORKER_TRIGGER_QUEUE, +}; +use std::fs::read; const PIE_FILE_URL: &str = "https://madara-orchestrator-sharp-pie.s3.amazonaws.com/238996-SN.zip"; const PIE_FILE_BLOCK_NUMBER: u64 = 238996; @@ -29,6 +36,8 @@ impl LocalStack { sqs_client.create_queue().queue_name(JOB_PROCESSING_QUEUE).send().await?; sqs_client.create_queue().queue_name(JOB_VERIFICATION_QUEUE).send().await?; sqs_client.create_queue().queue_name(JOB_HANDLE_FAILURE_QUEUE).send().await?; + sqs_client.create_queue().queue_name(WORKER_TRIGGER_QUEUE).send().await?; + println!("sqs queues creation completed ✅"); Ok(()) } @@ -37,12 +46,77 @@ impl LocalStack { pub async fn setup_s3(&self) -> color_eyre::Result<()> { let s3_client = self.s3_client().await; + // putting the snos output and program output for the given block into localstack s3 + let snos_output_key = PIE_FILE_BLOCK_NUMBER.to_string() + "/snos_output.json"; + let snos_output_json = read("artifacts/snos_output.json").unwrap(); + s3_client.put_data(Bytes::from(snos_output_json), &snos_output_key).await?; + println!("snos output file uploaded to localstack s3 ✅"); + + let program_output_key = PIE_FILE_BLOCK_NUMBER.to_string() + "/program_output.json"; + let program_output = read(format!("artifacts/program_output_{}.txt", PIE_FILE_BLOCK_NUMBER)).unwrap(); + s3_client.put_data(Bytes::from(program_output), &program_output_key).await?; + println!("program output file uploaded to localstack s3 ✅"); + // getting the PIE file from s3 bucket using URL provided let file = reqwest::get(PIE_FILE_URL).await?; let file_bytes = file.bytes().await?; + // putting the pie file into localstack s3 let s3_file_key = PIE_FILE_BLOCK_NUMBER.to_string() + "/pie.zip"; s3_client.put_data(file_bytes, &s3_file_key).await?; + println!("PIE file uploaded to localstack s3 ✅"); + + Ok(()) + } + + /// Event Bridge setup + pub async fn setup_event_bridge(&self, worker_trigger_type: WorkerTriggerType) -> color_eyre::Result<()> { + let event_bridge_client = self.event_bridge_client().await; + let sqs_client = self.sqs_client().await; + + let rule_name = "worker_trigger_scheduled"; + + event_bridge_client + .put_rule() + .name(rule_name) + .schedule_expression("rate(1 minute)") + .state(RuleState::Enabled) + .send() + .await?; + let queue_url = sqs_client.get_queue_url().queue_name(WORKER_TRIGGER_QUEUE).send().await?; + + let queue_attributes = sqs_client + .get_queue_attributes() + .queue_url(&queue_url.queue_url.unwrap()) + .attribute_names(QueueAttributeName::QueueArn) + .send() + .await?; + let queue_arn = queue_attributes.attributes().unwrap().get(&QueueAttributeName::QueueArn).unwrap(); + + // Create a sample WorkerTriggerMessage + let message = WorkerTriggerMessage { worker: worker_trigger_type.clone() }; + let event_detail = serde_json::to_string(&message)?; + + // Create the EventBridge target with the input transformer + let input_transformer = InputTransformer::builder() + .input_paths_map("$.time", "time") + .input_template(format!("{}", event_detail)) + .build()?; + + event_bridge_client + .put_targets() + .rule(rule_name) + .targets( + Target::builder() + .id(format!("worker-trigger-target-{:?}", worker_trigger_type)) + .arn(queue_arn) + .input_transformer(input_transformer) + .build()?, + ) + .send() + .await?; + + println!("Event bridge setup completed ✅. Trigger Type : {:?}", worker_trigger_type); Ok(()) } @@ -63,4 +137,33 @@ impl LocalStack { async fn s3_client(&self) -> Box { Box::new(AWSS3::new(AWSS3ConfigType::WithEndpoint(S3LocalStackConfig::new_from_env())).await) } + + async fn event_bridge_client(&self) -> aws_sdk_eventbridge::Client { + let region_provider = Region::new("us-east-1"); + let config = aws_config::from_env().region(region_provider).load().await; + aws_sdk_eventbridge::Client::new(&config) + } + + pub async fn delete_event_bridge_rule(&self, rule_name: &str) -> color_eyre::Result<()> { + let event_bridge_client = self.event_bridge_client().await; + + let list_targets_output = event_bridge_client.list_targets_by_rule().rule(rule_name).send().await?; + + let targets = list_targets_output.targets(); + if !targets.is_empty() { + let target_ids: Vec = targets.iter().map(|t| t.id().to_string()).collect(); + + event_bridge_client.remove_targets().rule(rule_name).set_ids(Some(target_ids)).send().await?; + + println!("Removed targets from rule: {}", rule_name); + } + + // Step 2: Delete the rule + event_bridge_client.delete_rule().name(rule_name).send().await?; + + println!("Deleted EventBridge rule: {}", rule_name); + println!("Rule deleted successfully ✅"); + + Ok(()) + } } diff --git a/e2e-tests/src/mongodb.rs b/e2e-tests/src/mongodb.rs index 0d99020f..9f37efcd 100644 --- a/e2e-tests/src/mongodb.rs +++ b/e2e-tests/src/mongodb.rs @@ -1,34 +1,27 @@ -use testcontainers::core::{ContainerPort, WaitFor}; -use testcontainers::runners::AsyncRunner; -use testcontainers::{ContainerAsync, GenericImage, ImageExt}; -use url::Url; - -use crate::get_free_port; +use std::str::FromStr; -const MONGODB_DEFAULT_PORT: u16 = 27017; -const MONGODB_IMAGE_NAME: &str = "mongo"; -const MONGODB_IMAGE_TAG: &str = "8.0-rc"; +use url::Url; #[allow(dead_code)] pub struct MongoDbServer { - container: ContainerAsync, + // container: ContainerAsync, endpoint: Url, } impl MongoDbServer { pub async fn run() -> Self { - let host_port = get_free_port(); - - let container = GenericImage::new(MONGODB_IMAGE_NAME, MONGODB_IMAGE_TAG) - .with_wait_for(WaitFor::message_on_stdout("Waiting for connections")) - .with_mapped_port(host_port, ContainerPort::Tcp(MONGODB_DEFAULT_PORT)) - .start() - .await - .expect("Failed to create docker container"); - Self { container, endpoint: Url::parse(&format!("http://127.0.0.1:{}", host_port)).unwrap() } + // let host_port = get_free_port(); + // + // let container = GenericImage::new(MONGODB_IMAGE_NAME, MONGODB_IMAGE_TAG) + // .with_wait_for(WaitFor::message_on_stdout("Waiting for connections")) + // .with_mapped_port(host_port, ContainerPort::Tcp(MONGODB_DEFAULT_PORT)) + // .start() + // .await + // .expect("Failed to create docker container"); + Self { endpoint: Url::from_str("mongodb://localhost:27017").unwrap() } } - pub fn endpoint(&self) -> &Url { - &self.endpoint + pub fn endpoint(&self) -> Url { + Url::from_str("mongodb://localhost:27017").unwrap() } } diff --git a/e2e-tests/src/node.rs b/e2e-tests/src/node.rs index 3a00d67a..10748fb8 100644 --- a/e2e-tests/src/node.rs +++ b/e2e-tests/src/node.rs @@ -1,6 +1,6 @@ -use std::fs::{create_dir_all, File}; -use std::path::Path; +use std::io::{BufRead, BufReader}; use std::process::{Child, Command, ExitStatus, Stdio}; +use std::thread; use std::time::Duration; use tokio::net::TcpStream; @@ -26,25 +26,25 @@ impl Drop for Orchestrator { } impl Orchestrator { - fn cargo_run(root_dir: &Path, binary: &str, args: Vec<&str>, envs: Vec<(&str, &str)>) -> Child { - let arguments = [vec!["run", "--bin", binary, "--release", "--"], args].concat(); - - let logs_dir = Path::join(root_dir, Path::new("target/logs")); - create_dir_all(logs_dir.clone()).expect("Failed to create logs dir"); - - let stdout = Stdio::from(File::create(logs_dir.join(format!("{}-stdout.txt", binary))).unwrap()); - let stderr = Stdio::from(File::create(logs_dir.join(format!("{}-stderr.txt", binary))).unwrap()); - - Command::new("cargo") - .stdout(stdout) - .stderr(stderr) - .envs(envs) - .args(arguments) - .spawn() - .expect("Could not run orchestrator node") - } - - pub fn run(envs: Vec<(&str, &str)>) -> Self { + // fn cargo_run(root_dir: &Path, binary: &str, args: Vec<&str>, envs: Vec<(String, String)>) -> Child { + // let arguments = [vec!["run", "--bin", binary, "--release", "--"], args].concat(); + // + // let logs_dir = Path::join(root_dir, Path::new("target/logs")); + // create_dir_all(logs_dir.clone()).expect("Failed to create logs dir"); + // + // let stdout = Stdio::from(File::create(logs_dir.join(format!("{}-stdout.txt", binary))).unwrap()); + // let stderr = Stdio::from(File::create(logs_dir.join(format!("{}-stderr.txt", binary))).unwrap()); + // + // Command::new("cargo") + // .stdout(stdout) + // .stderr(stderr) + // .envs(envs) + // .args(arguments) + // .spawn() + // .expect("Could not run orchestrator node") + // } + + pub fn run(envs: Vec<(String, String)>) -> Self { let port = get_free_port(); let address = format!("127.0.0.1:{}", port); let repository_root = &get_repository_root(); @@ -52,9 +52,41 @@ impl Orchestrator { std::env::set_current_dir(repository_root).expect("Failed to change working directory"); let port_str = format!("{}", port); - let envs = [envs, vec![("PORT", port_str.as_str())]].concat(); - - let process = Self::cargo_run(repository_root.as_path(), "orchestrator", vec![], envs); + let envs = [envs, vec![("PORT".to_string(), port_str)]].concat(); + + let mut command = Command::new("cargo"); + command + .arg("run") + .arg("--bin") + .arg("orchestrator") + .current_dir(repository_root) + .envs(envs) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()); + + let mut process = command.spawn().expect("Failed to start process"); + + // Capture and print stdout + let stdout = process.stdout.take().expect("Failed to capture stdout"); + thread::spawn(move || { + let reader = BufReader::new(stdout); + reader.lines().for_each(|line| { + if let Ok(line) = line { + println!("STDOUT: {}", line); + } + }); + }); + + // Capture and print stderr + let stderr = process.stderr.take().expect("Failed to capture stderr"); + thread::spawn(move || { + let reader = BufReader::new(stderr); + reader.lines().for_each(|line| { + if let Ok(line) = line { + eprintln!("STDERR: {}", line); + } + }); + }); Self { process, address } } diff --git a/e2e-tests/tests.rs b/e2e-tests/tests.rs index 44dc2f11..1e6cc830 100644 --- a/e2e-tests/tests.rs +++ b/e2e-tests/tests.rs @@ -2,30 +2,56 @@ use e2e_tests::ethereum::EthereumClient; use e2e_tests::localstack::LocalStack; use e2e_tests::sharp::SharpClient; use e2e_tests::starknet_client::StarknetClient; -use e2e_tests::{MongoDbServer, Orchestrator}; -use std::env::VarError; +use e2e_tests::{ + get_env_var_or_panic, mock_proving_job_endpoint_output, mock_starknet_get_state_update, put_job_data_in_db, + MongoDbServer, Orchestrator, +}; +use orchestrator::queue::job_queue::WorkerTriggerType; +use std::time::Duration; +use tokio::time::sleep; extern crate e2e_tests; -#[ignore] #[tokio::test] -async fn test_orchestrator_launches() { - let mongodb = MongoDbServer::run().await; - let mut orchestrator = Orchestrator::run(vec![ - // TODO: mock Madara RPC API - ("MADARA_RPC_URL", "http://localhost"), - ("MONGODB_CONNECTION_STRING", mongodb.endpoint().as_str()), - ]); +async fn test_orchestrator_workflow() { + // Fetching the env vars from the test env file because setting up of the environment + // requires all these variables. + dotenvy::from_filename("../.env.test").expect("Failed to load the .env file"); + + let (mongo_db_instance, mut starknet_client_mock, _ethereum_client_mock, mut sharp_client_mock, env_vec) = + setup_for_test().await.unwrap(); + + // Step 1 : SNOS job runs + // TODO : Update the code with actual SNOS implementation + // Updates the job in the db + put_job_data_in_db(&mongo_db_instance).await; + + // Step 2: Proving Job + // Mocking the endpoint + mock_proving_job_endpoint_output(&mut sharp_client_mock).await; + + // Step 3: DA job + // mocking get_block_call from starknet client + mock_starknet_get_state_update(&mut starknet_client_mock).await; + + // Step 4: State Update job + // For now use_kzg_da is 0 + // TODO : After getting latest PIE file update the code here to perform actual `update_state_with_blobs` + + println!("Orchestrator setup completed ✅ >>> "); + + // Run orchestrator + let mut orchestrator = Orchestrator::run(env_vec); orchestrator.wait_till_started().await; -} -#[ignore] -#[tokio::test] -async fn test_orchestrator_workflow() { - let (mongo_db_instance, starknet_client, ethereum_client, sharp_client) = setup_for_test().await.unwrap(); + sleep(Duration::from_secs(1200)).await; + + // TODO : + // Adding a case here to check for required state of the orchestrator to end the test. } -pub async fn setup_for_test() -> color_eyre::Result<(MongoDbServer, StarknetClient, EthereumClient, SharpClient)> { +pub async fn setup_for_test( +) -> color_eyre::Result<(MongoDbServer, StarknetClient, EthereumClient, SharpClient, Vec<(String, String)>)> { let mongo_db_instance = MongoDbServer::run().await; let starknet_client = StarknetClient::new(); let ethereum_client = EthereumClient::new(); @@ -33,36 +59,35 @@ pub async fn setup_for_test() -> color_eyre::Result<(MongoDbServer, StarknetClie // Setting up LocalStack let localstack_instance = LocalStack {}; - localstack_instance.setup_s3().await.unwrap(); + // TODO : uncomment + // localstack_instance.setup_s3().await.unwrap(); localstack_instance.setup_sqs().await.unwrap(); + localstack_instance.delete_event_bridge_rule("worker_trigger_scheduled").await.unwrap(); + localstack_instance.setup_event_bridge(WorkerTriggerType::Proving).await.unwrap(); + localstack_instance.setup_event_bridge(WorkerTriggerType::DataSubmission).await.unwrap(); + localstack_instance.setup_event_bridge(WorkerTriggerType::UpdateState).await.unwrap(); + println!("Localstack instance setup completed ✅"); let mut env_vec = get_env_vec(); - let starknet_client_url = starknet_client.url(); - let sharp_client_url = sharp_client.url(); - let ethereum_client_endpoint = ethereum_client.endpoint(); - // Adding other values to the environment variables vector - env_vec.push(("MONGODB_CONNECTION_STRING", mongo_db_instance.endpoint().as_str())); - env_vec.push(("MADARA_RPC_URL", starknet_client_url.as_str())); - env_vec.push(("ETHEREUM_RPC_URL", ethereum_client_endpoint.as_str())); - env_vec.push(("SHARP_URL", sharp_client_url.as_str())); + env_vec.push(("MONGODB_CONNECTION_STRING".to_string(), mongo_db_instance.endpoint().to_string())); + env_vec.push(("MADARA_RPC_URL".to_string(), starknet_client.url())); + env_vec.push(("ETHEREUM_RPC_URL".to_string(), ethereum_client.endpoint())); + env_vec.push(("SHARP_URL".to_string(), sharp_client.url())); + // Sharp envs - let sharp_customer_id = get_env_var_or_panic("SHARP_CUSTOMER_ID"); - let sharp_user_cert = get_env_var_or_panic("SHARP_USER_CRT"); - let sharp_user_key = get_env_var_or_panic("SHARP_USER_KEY"); - let sharp_server_cert = get_env_var_or_panic("SHARP_SERVER_CRT"); - env_vec.push(("SHARP_CUSTOMER_ID", sharp_customer_id.as_str())); - env_vec.push(("SHARP_USER_CRT", sharp_user_cert.as_str())); - env_vec.push(("SHARP_USER_KEY", sharp_user_key.as_str())); - env_vec.push(("SHARP_SERVER_CRT", sharp_server_cert.as_str())); - - Ok((mongo_db_instance, starknet_client, ethereum_client, sharp_client)) + env_vec.push(("SHARP_CUSTOMER_ID".to_string(), get_env_var_or_panic("SHARP_CUSTOMER_ID"))); + env_vec.push(("SHARP_USER_CRT".to_string(), get_env_var_or_panic("SHARP_USER_CRT"))); + env_vec.push(("SHARP_USER_KEY".to_string(), get_env_var_or_panic("SHARP_USER_KEY"))); + env_vec.push(("SHARP_SERVER_CRT".to_string(), get_env_var_or_panic("SHARP_SERVER_CRT"))); + + Ok((mongo_db_instance, starknet_client, ethereum_client, sharp_client, env_vec)) } /// To get env variables to be used in testing -fn get_env_vec() -> Vec<(&'static str, &'static str)> { - vec![ +fn get_env_vec() -> Vec<(String, String)> { + let env_vec = vec![ // AWS env vars ("AWS_ACCESS_KEY_ID", "AWS_ACCESS_KEY_ID"), ("AWS_SECRET_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY"), @@ -71,6 +96,8 @@ fn get_env_vec() -> Vec<(&'static str, &'static str)> { ("AWS_ENDPOINT_URL", "http://localhost.localstack.cloud:4566"), ("SQS_JOB_PROCESSING_QUEUE_URL", "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/madara_orchestrator_job_processing_queue"), ("SQS_JOB_VERIFICATION_QUEUE_URL", "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/madara_orchestrator_job_verification_queue"), + ("SQS_JOB_HANDLE_FAILURE_QUEUE_URL", "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/madara_orchestrator_job_handle_failure_queue"), + ("SQS_WORKER_TRIGGER_QUEUE_URL", "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/madara_orchestrator_worker_trigger_queue"), ("AWS_DEFAULT_REGION", "localhost"), // On chain config urls ("ETHEREUM_PRIVATE_KEY", "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"), // Private key from anvil @@ -79,17 +106,11 @@ fn get_env_vec() -> Vec<(&'static str, &'static str)> { ("DA_LAYER", "ethereum"), ("PROVER_SERVICE", "sharp"), ("SETTLEMENT_CLIENT", "ethereum"), - ("DATA_STORAGE", "s3"), + ("DATA_STORAGE", "s3_localstack"), ("ALERTS", "sns"), // Sharp configs ("SHARP_PROOF_LAYOUT", "small") - ] -} - -pub fn get_env_var(key: &str) -> Result { - std::env::var(key) -} + ]; -pub fn get_env_var_or_panic(key: &str) -> String { - get_env_var(key).unwrap_or_else(|e| panic!("Failed to get env var {}: {}", key, e)) + env_vec.into_iter().map(|(first, second)| (first.to_string(), second.to_string())).collect() }