From db8c5b90bd39738f91a95ce5d991ce3b584a2983 Mon Sep 17 00:00:00 2001 From: web3-developer <51288821+web3-developer@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:05:00 +0800 Subject: [PATCH] Cleanup stateless and block witness code. (#2295) * Cleanup unneeded stateless and block witness code. Keeping MultiKeys which is used in the eth_getProofsByBlockNumber RPC endpoint which is needed for the Fluffy state network bridge. * Rename generateWitness flag to collectWitnessData to better describe what the flag does. We only collect the keys of the touched accounts and storage slots but no block witness generation is supported for now. * Move remaining stateless code into nimbus directory. * Add vmstate parameter to ChainRef to fix test. * Exclude *.in from check copyright year --------- Co-authored-by: jangko --- nimbus/config.nim | 6 - nimbus/core/chain/chain_desc.nim | 21 +- nimbus/core/chain/persist_blocks.nim | 20 +- nimbus/core/executor/process_block.nim | 2 +- nimbus/core/executor/process_transaction.nim | 2 +- nimbus/core/tx_pool/tx_tasks/tx_packer.nim | 4 +- nimbus/db/core_db/core_apps_newapi.nim | 14 - nimbus/db/ledger/accounts_ledger.nim | 2 +- nimbus/db/ledger/base.nim | 2 +- nimbus/evm/state.nim | 30 +- nimbus/evm/types.nim | 2 +- nimbus/nimbus.nim | 1 - nimbus/rpc/experimental.nim | 33 +- .../stateless}/multi_keys.nim | 8 +- nimbus/vm_state.nim | 5 +- scripts/check_copyright_year.sh | 2 +- stateless/does-not-compile/json_from_tree.nim | 361 --- .../does-not-compile/json_witness_gen.nim | 128 - .../1_keys_0_storage_extended_touched.json | 26 - .../1_keys_0_storage_extended_untouched.json | 29 - .../fixtures/1_keys_0_storage_simple.json | 17 - stateless/fixtures/1_keys_1_storage.json | 29 - .../fixtures/1_keys_1_storage_untouched.json | 29 - stateless/fixtures/1_keys_30_storage.json | 304 -- stateless/fixtures/30_keys_0_storage.json | 552 ---- stateless/fixtures/30_keys_30_storage.json | 2855 ----------------- stateless/fixtures/bad_address.json | 17 - stateless/fixtures/bad_balance.json | 17 - stateless/fixtures/bad_code.json | 26 - stateless/fixtures/bad_code_len.json | 26 - stateless/fixtures/bad_nonce.json | 17 - .../fixtures/code_len_exceed_eip170.json | 26 - stateless/fixtures/invalid_account_type.json | 18 - stateless/fixtures/invalid_code_len.json | 29 - stateless/fixtures/invalid_code_len2.json | 29 - stateless/fixtures/invalid_code_type.json | 29 - stateless/fixtures/invalid_hash_type.json | 29 - stateless/fixtures/invalid_metadata.json | 17 - stateless/fixtures/invalid_node_type.json | 17 - .../fixtures/invalid_storage_hash_type.json | 29 - stateless/fixtures/invalid_version.json | 17 - .../valid_account_type_invalid_data.json | 18 - .../valid_code_type_invalid_data.json | 29 - .../fixtures/valid_hash_type_bad_data.json | 29 - .../valid_node_type_invalid_data.json | 18 - ...h-6081fe3734250348623b03c1d3acb35d90d2ecfc | Bin 13 -> 0 bytes ...h-a865d42d79ebbfd42b86d11e2e068643cf0fd503 | Bin 28 -> 0 bytes ...h-a8a8b9592a31539c0318ae6a1cd416d5644cb74a | Bin 9 -> 0 bytes ...h-d755f044304f53abf28a735763865a449a198235 | Bin 198 -> 0 bytes ...h-eb262bbb7d5a0b11e1a8112ea592eb67cc618c9b | Bin 137 -> 0 bytes ...h-f9a002e389b120714a2324487a6e473b0fedc12e | Bin 202 -> 0 bytes stateless/randutils.nim | 69 - stateless/readme.md | 197 -- stateless/stack_based_witness_builder.nim | 102 - stateless/test_block_witness.nim | 149 - stateless/test_fuzz.nim | 25 - stateless/test_witness_json.nim | 190 -- stateless/test_witness_keys.nim | 296 -- stateless/test_witness_verification.nim | 102 - stateless/witness_types.nim | 69 - tests/all_tests.nim | 6 +- tests/rpc/experimental_rpc_client.nim | 3 +- tests/test_blockchain_json.nim | 47 +- tests/test_configuration.nim | 16 - tests/test_multi_keys.nim | 119 + tests/test_persistblock_witness_json.nim | 69 - tests/test_rpc_experimental_json.nim | 94 +- ...test_rpc_getproofs_track_state_changes.nim | 29 - 68 files changed, 182 insertions(+), 6321 deletions(-) rename {stateless => nimbus/stateless}/multi_keys.nim (96%) delete mode 100644 stateless/does-not-compile/json_from_tree.nim delete mode 100644 stateless/does-not-compile/json_witness_gen.nim delete mode 100644 stateless/fixtures/1_keys_0_storage_extended_touched.json delete mode 100644 stateless/fixtures/1_keys_0_storage_extended_untouched.json delete mode 100644 stateless/fixtures/1_keys_0_storage_simple.json delete mode 100644 stateless/fixtures/1_keys_1_storage.json delete mode 100644 stateless/fixtures/1_keys_1_storage_untouched.json delete mode 100644 stateless/fixtures/1_keys_30_storage.json delete mode 100644 stateless/fixtures/30_keys_0_storage.json delete mode 100644 stateless/fixtures/30_keys_30_storage.json delete mode 100644 stateless/fixtures/bad_address.json delete mode 100644 stateless/fixtures/bad_balance.json delete mode 100644 stateless/fixtures/bad_code.json delete mode 100644 stateless/fixtures/bad_code_len.json delete mode 100644 stateless/fixtures/bad_nonce.json delete mode 100644 stateless/fixtures/code_len_exceed_eip170.json delete mode 100644 stateless/fixtures/invalid_account_type.json delete mode 100644 stateless/fixtures/invalid_code_len.json delete mode 100644 stateless/fixtures/invalid_code_len2.json delete mode 100644 stateless/fixtures/invalid_code_type.json delete mode 100644 stateless/fixtures/invalid_hash_type.json delete mode 100644 stateless/fixtures/invalid_metadata.json delete mode 100644 stateless/fixtures/invalid_node_type.json delete mode 100644 stateless/fixtures/invalid_storage_hash_type.json delete mode 100644 stateless/fixtures/invalid_version.json delete mode 100644 stateless/fixtures/valid_account_type_invalid_data.json delete mode 100644 stateless/fixtures/valid_code_type_invalid_data.json delete mode 100644 stateless/fixtures/valid_hash_type_bad_data.json delete mode 100644 stateless/fixtures/valid_node_type_invalid_data.json delete mode 100644 stateless/invalidInput/crash-6081fe3734250348623b03c1d3acb35d90d2ecfc delete mode 100644 stateless/invalidInput/crash-a865d42d79ebbfd42b86d11e2e068643cf0fd503 delete mode 100644 stateless/invalidInput/crash-a8a8b9592a31539c0318ae6a1cd416d5644cb74a delete mode 100644 stateless/invalidInput/crash-d755f044304f53abf28a735763865a449a198235 delete mode 100644 stateless/invalidInput/crash-eb262bbb7d5a0b11e1a8112ea592eb67cc618c9b delete mode 100644 stateless/invalidInput/crash-f9a002e389b120714a2324487a6e473b0fedc12e delete mode 100644 stateless/randutils.nim delete mode 100644 stateless/readme.md delete mode 100644 stateless/stack_based_witness_builder.nim delete mode 100644 stateless/test_block_witness.nim delete mode 100644 stateless/test_fuzz.nim delete mode 100644 stateless/test_witness_json.nim delete mode 100644 stateless/test_witness_keys.nim delete mode 100644 stateless/test_witness_verification.nim delete mode 100644 stateless/witness_types.nim create mode 100644 tests/test_multi_keys.nim delete mode 100644 tests/test_persistblock_witness_json.nim diff --git a/nimbus/config.nim b/nimbus/config.nim index 7aef4d4c7..2cf875ca3 100644 --- a/nimbus/config.nim +++ b/nimbus/config.nim @@ -197,12 +197,6 @@ type defaultValueDesc: "" name: "verify-from" }: Option[uint64] - generateWitness* {. - hidden - desc: "Enable experimental generation and storage of block witnesses" - defaultValue: false - name: "generate-witness" }: bool - evm* {. desc: "Load alternative EVM from EVMC-compatible shared library" & sharedLibText defaultValue: "" diff --git a/nimbus/core/chain/chain_desc.nim b/nimbus/core/chain/chain_desc.nim index 8c67a4910..b944ca8ff 100644 --- a/nimbus/core/chain/chain_desc.nim +++ b/nimbus/core/chain/chain_desc.nim @@ -33,20 +33,21 @@ type ## Trigger extra validation, currently within `persistBlocks()` ## function only. - generateWitness: bool ##\ - ## Enable generation of block witness, currently within `persistBlocks()` - ## function only. - verifyFrom: BlockNumber ##\ ## First block to when `extraValidation` will be applied (only ## effective if `extraValidation` is true.) + vmState: BaseVMState + ## If it's not nil, block validation will use this + ## If it's nil, a new vmState state will be created. + # ------------------------------------------------------------------------------ # Public constructors # ------------------------------------------------------------------------------ proc newChain*(com: CommonRef, - extraValidation: bool): ChainRef = + extraValidation: bool, + vmState = BaseVMState(nil)): ChainRef = ## Constructor for the `Chain` descriptor object. ## The argument `extraValidation` enables extra block ## chain validation if set `true`. @@ -54,6 +55,7 @@ proc newChain*(com: CommonRef, com: com, validateBlock: true, extraValidation: extraValidation, + vmState: vmState ) func newChain*(com: CommonRef): ChainRef = @@ -93,10 +95,6 @@ proc extraValidation*(c: ChainRef): bool = ## Getter c.extraValidation -proc generateWitness*(c: ChainRef): bool = - ## Getter - c.generateWitness - proc verifyFrom*(c: ChainRef): BlockNumber = ## Getter c.verifyFrom @@ -121,11 +119,6 @@ proc `extraValidation=`*(c: ChainRef; extraValidation: bool) = ## extra block chain validation. c.extraValidation = extraValidation -proc `generateWitness=`*(c: ChainRef; generateWitness: bool) = - ## Setter. If set `true`, the assignment value `generateWitness` enables - ## block witness generation. - c.generateWitness = generateWitness - proc `verifyFrom=`*(c: ChainRef; verifyFrom: BlockNumber) = ## Setter. The assignment value `verifyFrom` defines the first block where ## validation should start if the `Clique` field `extraValidation` was set diff --git a/nimbus/core/chain/persist_blocks.nim b/nimbus/core/chain/persist_blocks.nim index 14522c483..53cb41a8b 100644 --- a/nimbus/core/chain/persist_blocks.nim +++ b/nimbus/core/chain/persist_blocks.nim @@ -111,11 +111,8 @@ proc persistBlocksImpl(c: ChainRef; headers: openArray[BlockHeader]; body, checkSealOK = false) # TODO: how to checkseal from here - if c.generateWitness: - vmState.generateWitness = true - let - validationResult = if c.validateBlock or c.generateWitness: + validationResult = if c.validateBlock: vmState.processBlock(header, body) else: ValidationResult.OK @@ -129,21 +126,6 @@ proc persistBlocksImpl(c: ChainRef; headers: openArray[BlockHeader]; if validationResult != ValidationResult.OK: return err("Failed to validate block") - if c.generateWitness: - let dbTx = c.db.newTransaction() - defer: dbTx.dispose() - - let - mkeys = vmState.stateDB.makeMultiKeys() - # Reset state to what it was before executing the block of transactions - initialState = BaseVMState.new(header, c.com).valueOr: - return err("Failed to create vm state") - witness = initialState.buildWitness(mkeys) - - dbTx.rollback() - - c.db.setBlockWitness(header.blockHash(), witness) - if NoPersistHeader notin flags: discard c.db.persistHeaderToDb( header, c.com.consensus == ConsensusType.POS, c.com.startOfHistory) diff --git a/nimbus/core/executor/process_block.nim b/nimbus/core/executor/process_block.nim index bde378890..9033c4aa8 100644 --- a/nimbus/core/executor/process_block.nim +++ b/nimbus/core/executor/process_block.nim @@ -114,7 +114,7 @@ proc procBlkEpilogue(vmState: BaseVMState; {.gcsafe, raises: [].} = # Reward beneficiary vmState.mutateStateDB: - if vmState.generateWitness: + if vmState.collectWitnessData: db.collectWitnessData() db.persist(clearEmptyAccount = vmState.determineFork >= FkSpurious) diff --git a/nimbus/core/executor/process_transaction.nim b/nimbus/core/executor/process_transaction.nim index 4172f2f18..08fd7b274 100644 --- a/nimbus/core/executor/process_transaction.nim +++ b/nimbus/core/executor/process_transaction.nim @@ -115,7 +115,7 @@ proc processTransactionImpl( else: res = err(txRes.error) - if vmState.generateWitness: + if vmState.collectWitnessData: vmState.stateDB.collectWitnessData() vmState.stateDB.persist(clearEmptyAccount = fork >= FkSpurious) diff --git a/nimbus/core/tx_pool/tx_tasks/tx_packer.nim b/nimbus/core/tx_pool/tx_tasks/tx_packer.nim index d0d4dd019..77ecc4354 100644 --- a/nimbus/core/tx_pool/tx_tasks/tx_packer.nim +++ b/nimbus/core/tx_pool/tx_tasks/tx_packer.nim @@ -108,7 +108,7 @@ proc runTxCommit(pst: TxPackerStateRef; item: TxItemRef; gasBurned: GasInt) vmState.stateDB.addBalance(xp.chain.feeRecipient, reward) xp.blockValue += reward - if vmState.generateWitness: + if vmState.collectWitnessData: vmState.stateDB.collectWitnessData() # Save accounts via persist() is not needed unless the fork is smaller @@ -245,7 +245,7 @@ proc vmExecCommit(pst: TxPackerStateRef) # Reward beneficiary vmState.mutateStateDB: - if vmState.generateWitness: + if vmState.collectWitnessData: db.collectWitnessData() # Finish up, then vmState.stateDB.rootHash may be accessed db.persist(clearEmptyAccount = xp.chain.nextFork >= FkSpurious) diff --git a/nimbus/db/core_db/core_apps_newapi.nim b/nimbus/db/core_db/core_apps_newapi.nim index dc513ba2d..559d1ba7d 100644 --- a/nimbus/db/core_db/core_apps_newapi.nim +++ b/nimbus/db/core_db/core_apps_newapi.nim @@ -984,20 +984,6 @@ proc haveBlockAndState*(db: CoreDbRef, headerHash: Hash256): bool = # see if stateRoot exists db.exists(header.stateRoot) -proc getBlockWitness*( - db: CoreDbRef, blockHash: Hash256): Result[seq[byte], string] {.gcsafe.} = - let res = db.newKvt().get(blockHashToBlockWitnessKey(blockHash).toOpenArray) - if res.isErr(): - err("Failed to get block witness from database: " & $res.error.error) - else: - ok(res.value()) - -proc setBlockWitness*(db: CoreDbRef, blockHash: Hash256, witness: seq[byte]) = - let witnessKey = blockHashToBlockWitnessKey(blockHash) - db.newKvt.put(witnessKey.toOpenArray, witness).isOkOr: - warn logTxt "setBlockWitness()", witnessKey, action="put()", error=($$error) - return - # ------------------------------------------------------------------------------ # End # ------------------------------------------------------------------------------ diff --git a/nimbus/db/ledger/accounts_ledger.nim b/nimbus/db/ledger/accounts_ledger.nim index 0c9408d2e..8898fa2ff 100644 --- a/nimbus/db/ledger/accounts_ledger.nim +++ b/nimbus/db/ledger/accounts_ledger.nim @@ -29,7 +29,7 @@ import chronicles, eth/[common, rlp], results, - ../../../stateless/multi_keys, + ../../stateless/multi_keys, "../.."/[constants, utils/utils], ../access_list as ac_access_list, ".."/[core_db, storage_types, transient_storage], diff --git a/nimbus/db/ledger/base.nim b/nimbus/db/ledger/base.nim index 52f3c9a56..3a7ca754e 100644 --- a/nimbus/db/ledger/base.nim +++ b/nimbus/db/ledger/base.nim @@ -14,7 +14,7 @@ import eth/common, - ../../../stateless/multi_keys, + ../../stateless/multi_keys, ../core_db, ./base/[api_tracking, base_desc] diff --git a/nimbus/evm/state.nim b/nimbus/evm/state.nim index 18d95b939..7f6bf6fb0 100644 --- a/nimbus/evm/state.nim +++ b/nimbus/evm/state.nim @@ -13,7 +13,6 @@ import std/[options, sets, strformat], eth/keys, - ../../stateless/[witness_from_tree, witness_types, multi_keys], ../db/ledger, ../common/[common, evmforks], ./interpreter/[op_codes, gas_costs], @@ -259,31 +258,12 @@ proc `status=`*(vmState: BaseVMState, status: bool) = if status: vmState.flags.incl ExecutionOK else: vmState.flags.excl ExecutionOK -proc generateWitness*(vmState: BaseVMState): bool = - GenerateWitness in vmState.flags +proc collectWitnessData*(vmState: BaseVMState): bool = + CollectWitnessData in vmState.flags -proc `generateWitness=`*(vmState: BaseVMState, status: bool) = - if status: vmState.flags.incl GenerateWitness - else: vmState.flags.excl GenerateWitness - -proc buildWitness*( - vmState: BaseVMState, - mkeys: MultiKeysRef): seq[byte] {.raises: [CatchableError].} = - let rootHash = vmState.stateDB.rootHash - let flags = if vmState.fork >= FkSpurious: {wfEIP170} else: {} - - # A valid block having no transactions should return an empty witness - if mkeys.keys.len() == 0: - return @[] - - # build witness from tree - var wb = initWitnessBuilder(vmState.com.db, rootHash, flags) - wb.buildWitness(mkeys) - -proc buildWitness*( - vmState: BaseVMState): seq[byte] {.raises: [CatchableError].} = - let mkeys = vmState.stateDB.makeMultiKeys() - buildWitness(vmState, mkeys) +proc `collectWitnessData=`*(vmState: BaseVMState, status: bool) = + if status: vmState.flags.incl CollectWitnessData + else: vmState.flags.excl CollectWitnessData func forkDeterminationInfoForVMState*(vmState: BaseVMState): ForkDeterminationInfo = # FIXME-Adam: Is this timestamp right? Note that up above in blockNumber we add 1; diff --git a/nimbus/evm/types.nim b/nimbus/evm/types.nim index 5970cab8b..b39e2ae67 100644 --- a/nimbus/evm/types.nim +++ b/nimbus/evm/types.nim @@ -36,7 +36,7 @@ const vm_use_recursion* = defined(evmc_enabled) type VMFlag* = enum ExecutionOK - GenerateWitness + CollectWitnessData BlockContext* = object timestamp* : EthTime diff --git a/nimbus/nimbus.nim b/nimbus/nimbus.nim index 18d0d2f10..dd433b3f5 100644 --- a/nimbus/nimbus.nim +++ b/nimbus/nimbus.nim @@ -54,7 +54,6 @@ proc basicServices(nimbus: NimbusNode, nimbus.chainRef.extraValidation = 0 < verifyFrom nimbus.chainRef.verifyFrom = verifyFrom - nimbus.chainRef.generateWitness = conf.generateWitness nimbus.beaconEngine = BeaconEngineRef.new(nimbus.txPool, nimbus.chainRef) proc manageAccounts(nimbus: NimbusNode, conf: NimbusConf) = diff --git a/nimbus/rpc/experimental.nim b/nimbus/rpc/experimental.nim index a5d846e4b..f2c9e6fed 100644 --- a/nimbus/rpc/experimental.nim +++ b/nimbus/rpc/experimental.nim @@ -22,17 +22,17 @@ import ./filters, ../core/executor/process_block, ../db/ledger, - ../../stateless/[witness_verification, multi_keys], + ../stateless/multi_keys, ./p2p type BlockHeader = eth_types.BlockHeader ReadOnlyStateDB = state_db.ReadOnlyStateDB -proc getBlockWitness*( +proc getMultiKeys*( com: CommonRef, blockHeader: BlockHeader, - statePostExecution: bool): (MultiKeysRef, BlockWitness) + statePostExecution: bool): MultiKeysRef {.raises: [RlpError, BlockNotFound, ValueError, CatchableError].} = let @@ -45,7 +45,7 @@ proc getBlockWitness*( vmState = BaseVMState.new(blockHeader, com).valueOr: raise newException(ValueError, "Cannot create vm state") - vmState.generateWitness = true # Enable saving witness data + vmState.collectWitnessData = true # Enable saving witness data vmState.com.hardForkTransition(blockHeader) let dbTx = vmState.com.db.newTransaction() @@ -57,16 +57,10 @@ proc getBlockWitness*( let mkeys = vmState.stateDB.makeMultiKeys() - if statePostExecution: - result = (mkeys, vmState.buildWitness(mkeys)) - else: - # Use the initial state from prior to executing the block of transactions - let initialState = BaseVMState.new(blockHeader, com).valueOr: - raise newException(ValueError, "Cannot create vm state") - result = (mkeys, initialState.buildWitness(mkeys)) - dbTx.rollback() + mkeys + proc getBlockProofs*( accDB: ReadOnlyStateDB, mkeys: MultiKeysRef): seq[ProofResponse] {.raises: [RlpError].} = @@ -95,19 +89,6 @@ proc setupExpRpc*(com: CommonRef, server: RpcServer) = let ac = newAccountStateDB(chainDB, header.stateRoot) result = ReadOnlyStateDB(ac) - server.rpc("exp_getWitnessByBlockNumber") do(quantityTag: BlockTag, statePostExecution: bool) -> seq[byte]: - ## Returns the block witness for a block by block number or tag. - ## - ## quantityTag: integer of a block number, or the string "earliest", "latest" or "pending", as in the default block parameter. - ## statePostExecution: bool which indicates whether to return the witness based on the state before or after executing the block. - ## Returns seq[byte] - - let - blockHeader = chainDB.headerFromTag(quantityTag) - (_, witness) = getBlockWitness(com, blockHeader, statePostExecution) - - return witness - server.rpc("exp_getProofsByBlockNumber") do(quantityTag: BlockTag, statePostExecution: bool) -> seq[ProofResponse]: ## Returns the block proofs for a block by block number or tag. ## @@ -117,7 +98,7 @@ proc setupExpRpc*(com: CommonRef, server: RpcServer) = let blockHeader = chainDB.headerFromTag(quantityTag) - (mkeys, _) = getBlockWitness(com, blockHeader, statePostExecution) + mkeys = getMultiKeys(com, blockHeader, statePostExecution) let accDB = if statePostExecution: getStateDB(blockHeader) diff --git a/stateless/multi_keys.nim b/nimbus/stateless/multi_keys.nim similarity index 96% rename from stateless/multi_keys.nim rename to nimbus/stateless/multi_keys.nim index 0ce964376..9cd49f8df 100644 --- a/stateless/multi_keys.nim +++ b/nimbus/stateless/multi_keys.nim @@ -9,11 +9,11 @@ # according to those terms. import - eth/common, eth/trie/nibbles, algorithm, - ./witness_types + eth/common, eth/trie/nibbles, algorithm type KeyHash* = array[32, byte] + StorageSlot* = array[32, byte] KeyData* = object visited*: bool @@ -47,6 +47,10 @@ type match*: bool group*: Group +proc setBranchMaskBit(x: var uint, i: int) = + assert(i >= 0 and i < 17) + x = x or (1 shl i).uint + func cmpHash(a, b: KeyHash): int = var i = 0 var m = min(a.len, b.len) diff --git a/nimbus/vm_state.nim b/nimbus/vm_state.nim index caf6a7ece..d729c9fa9 100644 --- a/nimbus/vm_state.nim +++ b/nimbus/vm_state.nim @@ -17,14 +17,13 @@ export export vms.`$`, vms.blockNumber, - vms.buildWitness, vms.coinbase, vms.determineFork, vms.difficultyOrPrevRandao, vms.baseFee, vms.forkDeterminationInfoForVMState, - vms.generateWitness, - vms.`generateWitness=`, + vms.collectWitnessData, + vms.`collectWitnessData=`, vms.getAncestorHash, vms.getAndClearLogEntries, vms.init, diff --git a/scripts/check_copyright_year.sh b/scripts/check_copyright_year.sh index 6ce0e8f63..ea7bea72d 100644 --- a/scripts/check_copyright_year.sh +++ b/scripts/check_copyright_year.sh @@ -8,7 +8,7 @@ # according to those terms. excluded_files="config.yaml|.gitmodules|.gitignore" -excluded_extensions="json|md|png|txt|toml|gz|key|rlp|era1|cfg|py|sh" +excluded_extensions="json|md|png|txt|toml|gz|key|rlp|era1|cfg|py|sh|in" current_year=$(date +"%Y") outdated_files=() diff --git a/stateless/does-not-compile/json_from_tree.nim b/stateless/does-not-compile/json_from_tree.nim deleted file mode 100644 index c2c7f16c4..000000000 --- a/stateless/does-not-compile/json_from_tree.nim +++ /dev/null @@ -1,361 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2024 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -import - stew/[byteutils, endians2], json, strutils, - eth/[common, rlp], - eth/trie/[trie_defs, nibbles, db], - ./witness_types, ../nimbus/constants, - ../nimbus/db/storage_types, ./multi_keys - -type - DB = TrieDatabaseRef - - WitnessBuilder* = object - db*: DB - root: KeccakHash - flags: WitnessFlags - node: JsonNode - jStack: seq[JsonNode] - - StackElem = object - node: seq[byte] - parentGroup: Group - keys: MultiKeysRef - depth: int - storageMode: bool - -proc initWitnessBuilder*(db: DB, rootHash: KeccakHash, flags: WitnessFlags = {}): WitnessBuilder = - result.db = db - result.root = rootHash - result.flags = flags - result.node = newJObject() - result.jStack = @[] - -template extensionNodeKey(r: Rlp): auto = - hexPrefixDecode r.listElem(0).toBytes - -proc expectHash(r: Rlp): seq[byte] = - result = r.toBytes - if result.len != 32: - raise newException(RlpTypeMismatch, - "RLP expected to be a Keccak hash value, but has an incorrect length") - -template getNode(elem: untyped): untyped = - if elem.isList: @(elem.rawData) - else: @(get(wb.db, elem.expectHash)) - -proc rlpListToBitmask(r: var Rlp): uint = - var i = 0 - for branch in r: - if not branch.isEmpty: - result.setBranchMaskBit(i) - inc i - r.position = 0 - -proc writeByte(wb: var WitnessBuilder, x: byte, name: string) = - wb.node[name] = newJString("0x" & toHex(x.int, 2)) - -proc write(wb: var WitnessBuilder, x: openArray[byte], name: string) = - wb.node[name] = newJString("0x" & toHex(x)) - -proc write(wb: var WitnessBuilder, a, b: byte, name: string) = - wb.node[name] = newJString("0x" & toHex(a.int, 2) & toHex(b.int, 2)) - -proc write(wb: var WitnessBuilder, x: bool, name: string) = - wb.node[name] = newJBool(x) - -proc pushArray(wb: var WitnessBuilder, name: string) = - var node = newJArray() - wb.node[name] = node - wb.jStack.add wb.node - wb.node = node - -proc pushObject(wb: var WitnessBuilder, name: string) = - var node = newJObject() - wb.node[name] = node - wb.jStack.add wb.node - wb.node = node - -proc addObject(wb: var WitnessBuilder) = - var node = newJObject() - wb.node.add node - wb.jStack.add wb.node - wb.node = node - -proc pop(wb: var WitnessBuilder) = - wb.node = wb.jStack.pop() - -proc writeU32Impl(wb: var WitnessBuilder, x: uint32, name: string) = - let y = toBytesBE(x) - wb.node[name] = newJString("0x" & toHex(y)) - -template writeU32(wb: var WitnessBuilder, x: untyped, name: string) = - wb.writeU32Impl(uint32(x), name) - -template writeByte(wb: var WitnessBuilder, x: untyped, name: string) = - writeByte(wb, byte(x), name) - -proc writeUVarint[T](wb: var WitnessBuilder, x: T, name: string) = - # LEB128 varint encoding - var data: array[50, byte] - var len = 0 - - template writeByte(x) = - data[len] = x.byte - inc len - - var value = x - while true: - when T is UInt256: - var b = value.truncate(int) and 0x7F # low order 7 bits of value - else: - var b = value and 0x7F # low order 7 bits of value - value = value shr 7 - if value != 0: # more bytes to come - b = b or 0x80 # set high order bit of b - writeByte(b) - if value == 0: break - - wb.write(data.toOpenArray(0, len-1), name) - -template writeUVarint32(wb: var WitnessBuilder, x: untyped, name: string) = - wb.writeUVarint(uint32(x), name) - -proc writeNibbles(wb: var WitnessBuilder; n: NibblesSeq) = - # convert the NibblesSeq into left aligned byte seq - # perhaps we can optimize it if the NibblesSeq already left aligned - let nibblesLen = n.len - let numBytes = nibblesLen div 2 + nibblesLen mod 2 - var bytes: array[32, byte] - doAssert(nibblesLen >= 1) - doAssert(numBytes >= 0 and numBytes <= 64) - for pos in 0.. EIP170_MAX_CODE_SIZE: - raise newException(ContractCodeError, "code len exceed EIP170 code size limit") - wb.writeUVarint32(code.len, "codeLen") - wb.writeHashNode(acc.codeHash.data, "codeHash") - # no need to write 'code' here - return - - wb.writeByte(CodeTouched, "codeType") - if acc.codeHash == blankStringHash: - # no code - wb.writeUVarint32(0'u32, "codeLen") - return - - # the account have code and the EVM use it - let code = get(wb.db, contractHashKey(acc.codeHash).toOpenArray) - if wfEIP170 in wb.flags and code.len > EIP170_MAX_CODE_SIZE: - raise newException(ContractCodeError, "code len exceed EIP170 code size limit") - wb.writeUVarint32(code.len, "codeLen") - wb.write(code, "code") - -proc writeStorage(wb: var WitnessBuilder, kd: KeyData, acc: Account) = - wb.pushArray("storage") - if kd.storageKeys.isNil: - # the account have storage but not touched by EVM - wb.writeHashNode(acc.storageRoot.data) - elif acc.storageRoot != emptyRlpHash: - # the account have storage and the EVM use it - var zz = StackElem( - node: wb.db.get(acc.storageRoot.data), - parentGroup: kd.storageKeys.initGroup(), - keys: kd.storageKeys, - depth: 0, # set depth to zero - storageMode: true # switch to storage mode - ) - getBranchRecurse(wb, zz) - else: - # no storage at all - wb.writeHashNode(emptyRlpHash.data) - wb.pop() - -proc writeAccountNode(wb: var WitnessBuilder, kd: KeyData, acc: Account, node: openArray[byte], depth: int) = - wb.addObject() - wb.writeByte(AccountNodeType, "nodeType") - - var accountType = if acc.codeHash == blankStringHash and acc.storageRoot == emptyRlpHash: SimpleAccountType - else: ExtendedAccountType - - wb.writeByte(accountType, "accountType") - wb.write(kd.address, "address") - wb.writeUVarint(acc.balance, "balance") - wb.writeUVarint(acc.nonce, "nonce") - - if accountType != SimpleAccountType: - wb.writeByteCode(kd, acc) - wb.writeStorage(kd, acc) - - wb.writeByte(depth, "debugDepth") - wb.write(keccakHash(node).data, "debugHash") - wb.pop() - -proc writeAccountStorageLeafNode(wb: var WitnessBuilder, key: openArray[byte], val: UInt256, node: openArray[byte], depth: int) = - wb.addObject() - wb.writeByte(StorageLeafNodeType, "nodeType") - wb.write(key, "key") - wb.write(val.toBytesBE, "value") - wb.writeByte(depth, "debugDepth") - wb.write(keccakHash(node).data, "debugHash") - wb.pop() - -proc getBranchRecurse(wb: var WitnessBuilder, z: var StackElem) = - if z.node.len == 0: return - var nodeRlp = rlpFromBytes z.node - - case nodeRlp.listLen - of 2: - let (isLeaf, k) = nodeRlp.extensionNodeKey - let mg = groups(z.keys, z.depth, k, z.parentGroup) - - if not mg.match: - # return immediately if there is no match - writeHashNode(wb, keccakHash(z.node).data) - return - - let value = nodeRlp.listElem(1) - if not isLeaf: - # recursion will go deeper depend on the common-prefix length nibbles - writeExtensionNode(wb, k, z.depth, z.node) - var zz = StackElem( - node: value.getNode, - parentGroup: mg.group, - keys: z.keys, - depth: z.depth + k.len, # increase the depth by k.len - storageMode: z.storageMode - ) - getBranchRecurse(wb, zz) - return - - # there should be only one match - let kd = z.keys.visitMatch(mg, z.depth, k) - if z.storageMode: - doAssert(kd.storageMode) - writeAccountStorageLeafNode(wb, kd.storageSlot, value.toBytes.decode(UInt256), z.node, z.depth) - else: - doAssert(not kd.storageMode) - writeAccountNode(wb, kd, value.toBytes.decode(Account), z.node, z.depth) - - of 17: - let branchMask = rlpListToBitmask(nodeRlp) - writeBranchNode(wb, branchMask, z.depth, z.node) - - # if there is a match in any branch elem - # 1st to 16th, the recursion will go deeper - # by one nibble - doAssert(z.depth != 64) # notLeaf or path.len == 0 - - let path = groups(z.keys, z.parentGroup, z.depth) - for i in nonEmpty(branchMask): - let branch = nodeRlp.listElem(i) - if branchMaskBitIsSet(path.mask, i): - # it is a match between multikeys and Branch Node elem - var zz = StackElem( - node: branch.getNode, - parentGroup: path.groups[i], - keys: z.keys, - depth: z.depth + 1, # increase the depth by one - storageMode: z.storageMode - ) - getBranchRecurse(wb, zz) - continue - - if branch.isList: - # short node appear in yellow paper - # but never in the actual ethereum state trie - # an rlp encoded ethereum account will have length > 32 bytes - # block witness spec silent about this - doAssert(false, "Short node should not exist in block witness") - else: - # if branch elem not empty and not a match, emit hash - writeHashNode(wb, branch.expectHash) - - # 17th elem should always empty - # 17th elem appear in yellow paper but never in - # the actual ethereum state trie - # the 17th elem also not included in block witness spec - doAssert branchMask.branchMaskBitIsSet(16) == false - else: - raise newException(CorruptedTrieDatabase, - "HexaryTrie node with an unexpected number of children") - -proc buildWitness*(wb: var WitnessBuilder, keys: MultiKeysRef): string = - - # witness version - wb.writeByte(BlockWitnessVersion, "version") - - # one or more trees - - # we only output one tree - wb.writeByte(MetadataNothing, "metadata") - - wb.write(wb.root.data, "rootHash") - wb.write(false, "error") - - wb.pushArray("tree") - - var z = StackElem( - node: @(wb.db.get(wb.root.data)), - parentGroup: keys.initGroup(), - keys: keys, - depth: 0, - storageMode: false - ) - getBranchRecurse(wb, z) - - wb.pop() - result = wb.node.pretty() diff --git a/stateless/does-not-compile/json_witness_gen.nim b/stateless/does-not-compile/json_witness_gen.nim deleted file mode 100644 index fbb3c380d..000000000 --- a/stateless/does-not-compile/json_witness_gen.nim +++ /dev/null @@ -1,128 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2024 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -import - randutils, random, parseopt, strutils, os, - eth/[common, rlp], eth/trie/[hexary, db, trie_defs], - nimcrypto/sysrand, ../stateless/[json_from_tree], - ../nimbus/db/[storage_types, distinct_tries], - ./witness_types, ./multi_keys - -type - DB = TrieDatabaseRef - - StorageKeys = tuple[storageRoot: Hash256, keys: MultiKeysRef] - - AccountDef = object - storageKeys: MultiKeysRef - account: Account - codeTouched: bool - -proc randU256(): UInt256 = - var bytes: array[32, byte] - discard randomBytes(bytes[0].addr, sizeof(result)) - result = UInt256.fromBytesBE(bytes) - -proc randStorageSlot(): StorageSlot = - discard randomBytes(result[0].addr, sizeof(result)) - -proc randNonce(): AccountNonce = - discard randomBytes(result.addr, sizeof(result)) - -proc randCode(db: DB): Hash256 = - if rand(0..1) == 0: - result = blankStringHash - else: - let codeLen = rand(1..150) - let code = randList(byte, rng(0, 255), codeLen, unique = false) - result = keccakHash(code) - db.put(contractHashKey(result).toOpenArray, code) - -proc randStorage(db: DB, numSlots: int): StorageKeys = - if rand(0..1) == 0 or numSlots == 0: - result = (emptyRlpHash, MultiKeysRef(nil)) - else: - var trie = initStorageTrie(db) - var keys = newSeq[StorageSlot](numSlots) - - for i in 0.. 0: outputDir / filename: else: filename - writeFile(filePath, witness) - -main() diff --git a/stateless/fixtures/1_keys_0_storage_extended_touched.json b/stateless/fixtures/1_keys_0_storage_extended_touched.json deleted file mode 100644 index c34c1d63d..000000000 --- a/stateless/fixtures/1_keys_0_storage_extended_touched.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a", - "error": false, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x720ef0ee74f1b3b8252eb3270d484b223f775810", - "balance": "0xb3c2cee7e2cb9289c8cdd1d9b99ff0e7829fdce2f5afd2fca6a2ff9f9bf8e38493d09bc403", - "nonce": "0xad83abd1899ad9ee56", - "codeType": "0x00", - "codeLen": "0x3d", - "code": "0x09ddefda93a915fe9ac8998e195a5fe0bb85a2474e676551e8978cba5b5ea3af0dc90606fd0e6d4f07b0262ada94b579676f51e4226b2dc456be061e99", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/1_keys_0_storage_extended_untouched.json b/stateless/fixtures/1_keys_0_storage_extended_untouched.json deleted file mode 100644 index bddc4cb0d..000000000 --- a/stateless/fixtures/1_keys_0_storage_extended_untouched.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": false, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x01", - "codeLen": "0x5e", - "codeHash": { - "nodeType": "0x03", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/1_keys_0_storage_simple.json b/stateless/fixtures/1_keys_0_storage_simple.json deleted file mode 100644 index 8c9de7f12..000000000 --- a/stateless/fixtures/1_keys_0_storage_simple.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": false, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/1_keys_1_storage.json b/stateless/fixtures/1_keys_1_storage.json deleted file mode 100644 index d98aa938b..000000000 --- a/stateless/fixtures/1_keys_1_storage.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x0e90a5b7a3cb36d99e318df559f7516e97fbf779bfaa83c7487bef343908f608", - "error": false, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x2a425b119d8bfa8fdb9852f731aaacec27ea76b1", - "balance": "0xeed4ddc3b2b598e1c29ca99aafc3a5e9c3bffbcae3adc4b3a09ea8f6b98ef6ddcaeae3b20c", - "nonce": "0xe5ebf99b83ebe2cfd601", - "codeType": "0x00", - "codeLen": "0x40", - "code": "0x3841c4b026645417401c750b610b3571de8fa8c219933057df4d1b890091a67b2480d3e07459bfa475156f691e0c56c2558c3d01370d15b7f5ceb6f672770899", - "storage": [ - { - "nodeType": "0x02", - "key": "0x37e5d5966c3a6e98d9502ae2fe458ce543761384abf07621534a3c8c419bd00b", - "value": "0xd48881272c825d7755d2b88842ab99e8d7ed122050fe3aef9660a0095712bec7", - "debugDepth": "0x00", - "debugHash": "0x77e607b809ddcd8b02a5e1a274d178c8df487ce70667bab68cf1033a721009af" - } - ], - "debugDepth": "0x00", - "debugHash": "0x0e90a5b7a3cb36d99e318df559f7516e97fbf779bfaa83c7487bef343908f608" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/1_keys_1_storage_untouched.json b/stateless/fixtures/1_keys_1_storage_untouched.json deleted file mode 100644 index 0959d8162..000000000 --- a/stateless/fixtures/1_keys_1_storage_untouched.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x27e1adcca01a43ba9addd0309b170dbe54a13fd6fc8db32d603ff8acc74c114a", - "error": false, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x1f6d2e14d36e46ed0ffd4bc8f7a99c215c37a987", - "balance": "0xb9c3fdeb80eedb84a7d5cda2a2cccd9dafda8be4fda3a2a5cd848cb0a6f7efd9898b83fd0a", - "nonce": "0xcfea87d0e695cadb11", - "codeType": "0x01", - "codeLen": "0x42", - "codeHash": { - "nodeType": "0x03", - "data": "0x8617fb2d49a06427c5982b03b581f1c7c9bfa7ab4da2e67ca665f21ecc2f70f4" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0xe36ab8ab77009fccb7763c179b8bd1c9d87999e60969de56f96c45d868e1c300" - } - ], - "debugDepth": "0x00", - "debugHash": "0x27e1adcca01a43ba9addd0309b170dbe54a13fd6fc8db32d603ff8acc74c114a" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/1_keys_30_storage.json b/stateless/fixtures/1_keys_30_storage.json deleted file mode 100644 index 434228b81..000000000 --- a/stateless/fixtures/1_keys_30_storage.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x4b7082248440f9d040a2f7f55a4177c4f25a70f671aa0cb371b7bf189cc4fc68", - "error": false, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x06852d62c3a302f0cec4a92908f1040f6c1a9357", - "balance": "0xf5bdb1a883a8d8b094ada48e9c80cfa18488f6adbbf0c592f4ceeb98d696d08988d7cb07", - "nonce": "0xcea3dea7b4fb98cdaa01", - "codeType": "0x00", - "codeLen": "0x1a", - "code": "0xd0936ffd3b2a2867f12c8251f72b4997b3080d0f168d34860cb8", - "storage": [ - { - "nodeType": "0x00", - "mask": "0xF9FF", - "debugDepth": "0x00", - "debugHash": "0xa8a27dea0be0d4138a6da655a7f5694cb2a0802bba453f7276fb33dd160a5945" - }, - { - "nodeType": "0x00", - "mask": "0x0108", - "debugDepth": "0x01", - "debugHash": "0x376834c93db082a8620b021d9a1e3ac5cb14c237d36ded719061153c68d22ae5" - }, - { - "nodeType": "0x00", - "mask": "0x4800", - "debugDepth": "0x02", - "debugHash": "0xd9e37be3b9a0c1fa3d53d0c679ccc5401db5a47701c95f2be3f4a084e7a3f27b" - }, - { - "nodeType": "0x02", - "key": "0xaa217d9dd11ad18dd431cb5e2270b64c88f9557ef1800f6243c20ed1ae7e3dea", - "value": "0xe13cbcd714d9b1943eec9c6b84062d38f1009fdedf2a52b258cc051d4c4b1e09", - "debugDepth": "0x03", - "debugHash": "0x0a4fa8d829c222e87bc33df9aadd790434a78997fc56a3fb6ae85b7341e2641d" - }, - { - "nodeType": "0x02", - "key": "0x2fe189467d5c589df80c15868d154f45647f477ed50cc1989b53555c6c4cfda9", - "value": "0xb792e2a1f4dfc913c45583b1982727a603a4f3a2bdaf2037b38d15664413bbe7", - "debugDepth": "0x03", - "debugHash": "0x288d92ade25c3ceb2cca22ddbf2732f174f7e1d217163893091a4b287ef0fb4b" - }, - { - "nodeType": "0x02", - "key": "0xcc70ae02ac6b231c46b6f605d2ace7e5eb0d9944abe28a158e209bbc9afd0c5a", - "value": "0x3dd88f3b80115f0289e52e52f2cfcf04190d1c972ba2314d099ee7a7bc92a1c3", - "debugDepth": "0x02", - "debugHash": "0x1d880ea9b065359bff4373d94b696572bf689d76500377760f460a23af737ae7" - }, - { - "nodeType": "0x00", - "mask": "0xC140", - "debugDepth": "0x01", - "debugHash": "0x5e481953f2e2a5b52c2c7857f4ea0dcc318d4d74482632c35c22923331e0c304" - }, - { - "nodeType": "0x02", - "key": "0x0e90d4692a812cace9cc53a41c094309bc5f2698066d22187fe658f0fb12aa0a", - "value": "0xc4e820a2d7865ab420db28c3bbafde4d710b18b722403e1e8f6ae88508ff8978", - "debugDepth": "0x02", - "debugHash": "0xf9499523f940aafd0c360880769a33bdbc1ef1f9d55e3ee01b11360fffbccdd4" - }, - { - "nodeType": "0x02", - "key": "0xe950abb124a710179726d8ae3443b17f93a67472a20aebee84104c77f6c4cc78", - "value": "0x2d61084050ba6f779324acc8a0ec615ed0bd76e599b4c3b60026bb65bd7e5a9b", - "debugDepth": "0x02", - "debugHash": "0x68cd75fdd8506d48fc81d3e05b3dc7567edd5633787d902283c88eeee0c54694" - }, - { - "nodeType": "0x02", - "key": "0xccf524783653b1a14f93d97531222f1a800778fb171c131d3d6774d61325e6bd", - "value": "0x5cb6b329a21ff21795368dd94a2cd50213b5f1daa79f031dbffa66b85a61b348", - "debugDepth": "0x02", - "debugHash": "0x9394b13fc593ee3eff55c8089dc09c6a63cebe879a1717d422f29ed86b344768" - }, - { - "nodeType": "0x02", - "key": "0x9e65049f8e10b9388af2a91c131813d960c627f318e10673cf85195cc1656573", - "value": "0x259bc2273654b6da367eba244b38262eec21ba0f07908a22bf3c2dbf080c2465", - "debugDepth": "0x02", - "debugHash": "0x10e97f103bbfe03db4e90ed4441272f535528258c17c16a388f33722e80b046d" - }, - { - "nodeType": "0x00", - "mask": "0x8044", - "debugDepth": "0x01", - "debugHash": "0xe1f5c7cd519df9104a4733797d1c3fa748fcd2b3dec935bc4de49db359189cc1" - }, - { - "nodeType": "0x02", - "key": "0x5adb66219b58e831bd3723486a3856ae459918527e1414a907d7752c3a528104", - "value": "0x510ddd96fd0fc7919cee9b45b722eb1e58472b39030dc834f107729cd5aeb3e2", - "debugDepth": "0x02", - "debugHash": "0xf0d1de3adf7f429fb2b917ff73d179e801610249bca7eb0bc2855650bcf8dff9" - }, - { - "nodeType": "0x02", - "key": "0x162830d8f8deefd4b54836aecad18e6be06c75368ce3856995bf3f95a27bb1dd", - "value": "0x3ac191252ff512e11fc02542185b9fc77160b11d748fd37e6548ef3b4f3b383e", - "debugDepth": "0x02", - "debugHash": "0x02c1bd87d0012905bb8775b5ea773192ab89221e0889e14c33425cb4439a5e94" - }, - { - "nodeType": "0x02", - "key": "0xace41e727612c5e12460dd04b2fd0300318b6939572ac5454e4626131b23423a", - "value": "0x40d970c83de360a739f0fedd9d0187ef1c53d258a3927445fedb3320b77c9c9d", - "debugDepth": "0x02", - "debugHash": "0x8bd758a0867e0b61c5adba329379f0e789935f64632924fbf728fc0968be180e" - }, - { - "nodeType": "0x02", - "key": "0x5128809b5b57dad7da874ef299779dbb001b3783569ac074d59c50c943d8d198", - "value": "0xcdf46d3f3f58d88f8a614c904e133891f71f136041416f47a52bb751e4c5e563", - "debugDepth": "0x01", - "debugHash": "0xadcbec6b5b96a3a1968bc47904b0a7c725a3e564abb7ceb6ab1df73715a2f54a" - }, - { - "nodeType": "0x00", - "mask": "0x2150", - "debugDepth": "0x01", - "debugHash": "0x90891286049642bb7a5e30320d18c6a3f0d27555963d8c6287a05fedc90ec57c" - }, - { - "nodeType": "0x02", - "key": "0xc7bb062663c3cbdfaeea8d5a9bc5cf0418bc13a4f9d614fa7dededcba471d7ea", - "value": "0x0a4accc3049d45e5a1c3c53d95d835e0fe78ea8f2da23235fee53fabb5c856b1", - "debugDepth": "0x02", - "debugHash": "0x20d0c7f141867307fbf4423598b7eb9bc5697f85b11d6c8e95c8dd09a2f9005d" - }, - { - "nodeType": "0x02", - "key": "0x2df9e20b09b850841177f8cc2e2454f199b2f1ca9d8165879cac6e4e199e4381", - "value": "0x1d3316148b02384ceee672189743dc48b464632e1ce10bf5a747f7bcca63e5b8", - "debugDepth": "0x02", - "debugHash": "0xd36a5b199aeb50b4c540599ec1992cc6d4ed76f4453e0305ae95c9681be27661" - }, - { - "nodeType": "0x02", - "key": "0x0cfe461cb96c37e35c97b7c9b0e1cfa4d64133cd9be6b7deb88da316520e534b", - "value": "0x048eef6d6bc92290f3a0fb903c332bb8b89ad3393293e5c74af19190ef634eaa", - "debugDepth": "0x02", - "debugHash": "0x2bb074cb43c3afb0e6c0dcd709ea1943d462932ece4e6677a0bb527a21c1c62a" - }, - { - "nodeType": "0x00", - "mask": "0x2040", - "debugDepth": "0x02", - "debugHash": "0xacd53be6d16856dda1b55eac2103188f11b8118b73dc43785f214d8bca184853" - }, - { - "nodeType": "0x02", - "key": "0x8d938a0ec13be0f5541b141414293bf0b4aee794aa200530434edb878a577705", - "value": "0xe9f344e60c2353f2781346b26aac0e8bc3fcae11baed9490db849650cd38d0a8", - "debugDepth": "0x03", - "debugHash": "0x166c1a8b7e76bbbe60a2dbe9cb9140dcdee74f18f40b36a8e0ca811a31cf0130" - }, - { - "nodeType": "0x02", - "key": "0x890bfd8808f2338b91e2f294e2e80337c2bb485070eea237556201d3d5f46efb", - "value": "0xbea2f844de233796ec0ea2ac2c241c1e149e7bd5037514b0edd89d557aa47dad", - "debugDepth": "0x03", - "debugHash": "0x6a1aa24523cf98745017656555e8adb7d443aff10f3db34e942dee58b6e76d32" - }, - { - "nodeType": "0x00", - "mask": "0x0804", - "debugDepth": "0x01", - "debugHash": "0x3b0b7b29bfdccd1bb908c85768e9dc8d96b1eca5344a75d0e2bcdfb92ec7f3e3" - }, - { - "nodeType": "0x02", - "key": "0x893135bb24b98b68f6c7bf2fc4d753dd6116f185e15c0f5ff0814224daafae8c", - "value": "0xbad1635b9ac609ebeede00d2a43ec80ee0d4186a59cb3d1bf0854cfa5bd46465", - "debugDepth": "0x02", - "debugHash": "0x61797d1f0b345e427676995ef359ac4da3f8400ac33d86584bc48eb783e4661e" - }, - { - "nodeType": "0x02", - "key": "0x20821aa715a79dc7f575d1daae8ee2064211f5e7f1eb19d35197234309191ffc", - "value": "0xe080c2e4c5eaa1d6ebac17bad0c7b1e2be2ea0c1a233f7e7e5a677fa883a6aa6", - "debugDepth": "0x02", - "debugHash": "0x0f6c12390f8054a97d3a6cf5cf5d012ba33989b610af274c6fd215739342edf3" - }, - { - "nodeType": "0x00", - "mask": "0x0084", - "debugDepth": "0x01", - "debugHash": "0xecd51e9ed1f6e86de3c6915f648aca3d19dccfffc1403012221d7f561b40b232" - }, - { - "nodeType": "0x02", - "key": "0x4ce1880bb013748d79562267a41a55146ab63a9486b80f32b76a9fd368ac383a", - "value": "0x008d79d6b57c0a4d31b0707a3cc09131825ddeda6fa6768fe92408e93b430364", - "debugDepth": "0x02", - "debugHash": "0x5b211f8844398de4a853e07965b9230655532d4ea6702386992ac165399176c8" - }, - { - "nodeType": "0x02", - "key": "0x73e5dfe909c2e65e055c8817548f1606e3d3ea5264cef9e9b0d904c33b83fe86", - "value": "0xbe14ee00a056882b3d7a4d172af274bcdba7100b43dd5f4c1519c67151e9b042", - "debugDepth": "0x02", - "debugHash": "0xb66189f5ba1b5921352c5ea8657cfcb2c3f5fe6b047af3ee9ac3a6dda3b26069" - }, - { - "nodeType": "0x02", - "key": "0xe4ea4d108992ebb8cda227aa8ce91dd38ab66678c2f4e7ecb522619edfec83ca", - "value": "0xc34e633c1f9d2b04c457277b0da9c31098d8d81a02d12ae8194927b9d92be240", - "debugDepth": "0x01", - "debugHash": "0x9a3c86ac04cff263de7b4ef056c6b6e74903a359f64c284f98b82a8a5bd551e7" - }, - { - "nodeType": "0x00", - "mask": "0x0042", - "debugDepth": "0x01", - "debugHash": "0x770756b645c662e497e5f0dc240b5baa9ab9459c87b0f09a1547f1f377257e56" - }, - { - "nodeType": "0x02", - "key": "0x6c25538cacf9f7df86f7ed93eac5a56df604f520c5354e04b849a754e92d3406", - "value": "0x0111bded60a83c16f8c75728ae8ea949a823feb9a2f509ec77a454477e550cbe", - "debugDepth": "0x02", - "debugHash": "0xb0e2c050a871f02b05990890fc9c713f67dcad76bde574d9a212e0f884345bb0" - }, - { - "nodeType": "0x02", - "key": "0x850a0fde14f360af8a6599f99ccb2d5c6609ef848db2d7caca60476a4b5d476c", - "value": "0xb8c5474632b02c967c98fbc7b96d32c6afa3ea67228c7e6873e79916f0150f8c", - "debugDepth": "0x02", - "debugHash": "0xff4a54e6393b0ebb761138933dd551ad7367cc5d4254dc1742fe47da9db33d6d" - }, - { - "nodeType": "0x00", - "mask": "0x2100", - "debugDepth": "0x01", - "debugHash": "0x44bbc4a59fe05c72c24c7f978a388df249933d82c21d10e2ba3a881985f058d0" - }, - { - "nodeType": "0x02", - "key": "0x7b3ad2728d8167702b0975e32b881cbbae7f5f8cb2c384372bcb218f400bf34b", - "value": "0x25e6f3859659b65fe4e110e41ccc704aa9562b0e0ec8c11ebf0b2c9de1e4b558", - "debugDepth": "0x02", - "debugHash": "0x6cb83a539fe400b0c89105e150dfe86bd5363e37456d02d64ba1f46122f295ff" - }, - { - "nodeType": "0x02", - "key": "0xa9e36fa3f11cad78f92146effddc9983175781527abad56821ba325a9b07ec8f", - "value": "0x93dabe158e5d4de4c752cee95e20bcf896bd9e6e94a41f27277124c3b051e9b0", - "debugDepth": "0x02", - "debugHash": "0x70eb6ee011384f47bb370a3808cf679840fb804358b36b112d861e3d7f607a16" - }, - { - "nodeType": "0x02", - "key": "0xa40b51651e9723b9a7c912b96e210b49534188f35d05942aabd87e2b04f337d7", - "value": "0xa293648270a4e3b87140a279d8d169b0cc49b27596a8fff90bfa38a6492f1977", - "debugDepth": "0x01", - "debugHash": "0x12248a11dd27983addce5267b17d6ef210d78b232a53a3ff84d842c3c7446a28" - }, - { - "nodeType": "0x02", - "key": "0x69d4da4813c2c4f421a6e86f34989a1c5792b271d74b18e474678054b3c5d410", - "value": "0xd73141b5219ced97e71cd5f09e603439b83358d42e1d0d13054e96fb898b897a", - "debugDepth": "0x01", - "debugHash": "0xb34a23b3999eff09e70284480f09fe7821829f734300577d8580ec5a38f8afd6" - }, - { - "nodeType": "0x00", - "mask": "0x8004", - "debugDepth": "0x01", - "debugHash": "0x3e7b136950036ffd956a5aa800861e8578c505bfae051505637ea55959b4dec6" - }, - { - "nodeType": "0x02", - "key": "0xcf4a5c8979d764e5cb47226dd8fe5971a13a97e84dc15f5151dabcb132f29f41", - "value": "0x228d8126026eec55f79ef977ec11ba5bb2c8afc68c589c71d989086fe7f39013", - "debugDepth": "0x02", - "debugHash": "0xc41a210065dfc6c2166a0d3a5a1f4300c6c6c01820b66a1ad143401fb3d41eb6" - }, - { - "nodeType": "0x02", - "key": "0x1eb5b1d559ad696037a8b6254927200ffafb4f21e55f23470844bf580a8f6c10", - "value": "0x077390e527bedacc743328b2d57a5e04401a94ab7bb671cbc3e1d00d33e56ef2", - "debugDepth": "0x02", - "debugHash": "0x08dfaeea00282b2a7ec8bd615fba98aaa789a6114fc0d129720215b1c3408667" - }, - { - "nodeType": "0x02", - "key": "0x23dc4eb4f09b99fc8a22ec960d5de31f2a9144e48046201ead186a60189ca4ac", - "value": "0x3644f85fa6f69f31236d3f57a9eb33c9b6215f3599c3ab765f7e5885660cbb12", - "debugDepth": "0x01", - "debugHash": "0x9216bc6261f0cf48198c006164f9e5a0a05032e8e658f506ce64b006d02e2331" - } - ], - "debugDepth": "0x00", - "debugHash": "0x4b7082248440f9d040a2f7f55a4177c4f25a70f671aa0cb371b7bf189cc4fc68" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/30_keys_0_storage.json b/stateless/fixtures/30_keys_0_storage.json deleted file mode 100644 index 15afb6e10..000000000 --- a/stateless/fixtures/30_keys_0_storage.json +++ /dev/null @@ -1,552 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x550f7029a2cf5a8540f63d9210f3eeec2153013317040065c533c0acdab2cd8e", - "error": false, - "tree": [ - { - "nodeType": "0x00", - "mask": "0xEFFC", - "debugDepth": "0x00", - "debugHash": "0x550f7029a2cf5a8540f63d9210f3eeec2153013317040065c533c0acdab2cd8e" - }, - { - "nodeType": "0x00", - "mask": "0x0260", - "debugDepth": "0x01", - "debugHash": "0x9f4a94996eb88336cd53f37f5d444f7fd2b98e8e9b450eb7b248b472696a0082" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x7e82a56264733a213ffcdd5a218bd999da849257", - "balance": "0xa3e8b6fbcfb7f4a791c7b597aac5cc93bbe5e8b4d299d290d4e79ebe97efa98af8d5e5d407", - "nonce": "0xb190b8fbc0d0c8936d", - "codeType": "0x00", - "codeLen": "0x1c", - "code": "0x55ef5ace99c1023203252cdf1ffa0bb23ac3d37a1eba1da733ee43ab", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x02", - "debugHash": "0x1967ef43921054004b23174b05ad795499bffbbe93dcab9cc1440d8d12f18350" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x5e3eea97a4565105f98032ef418d883eef902a1f", - "balance": "0xb591a18ee5f3b4d485f3ce85d397c5ffbb9c87dbfec3f881a2c4ee85bbf8a7baccf2b99b03", - "nonce": "0xe2a98eccf69288ca03", - "debugDepth": "0x02", - "debugHash": "0x0df000b5883e85bfc2bd0f2af715b607a3c8201065719beb4b0f3576cf42954a" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x4e53d140f9555fba626103f37741849fa64e9de1", - "balance": "0xfbdcd5fa8bc1d0d8dfb5ebaaf9e3abaa91d6c8f6d5ffc18cbe9485d4b2c2ccb5eef790a401", - "nonce": "0xf2b2acced7e1a4fba801", - "debugDepth": "0x02", - "debugHash": "0x589041613b78de52cd96f1e7defa29a80f9fb58001bb757f33a31ba86f1a2838" - }, - { - "nodeType": "0x00", - "mask": "0x1100", - "debugDepth": "0x01", - "debugHash": "0x083da979966f48e2c5a6777f5f5c1b80a70f1bc66dee2bf8615dbbd5dfcff6f4" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x8c095521efe5fa9541e286f4747ea2153c0c6e87", - "balance": "0xa2dafbd7e5d6c581aedcdc82f696dca0d581859eefa0e1cb8e8ec7bad4d885b996a7b9e005", - "nonce": "0xfdf7aacac6d982da9801", - "debugDepth": "0x02", - "debugHash": "0x1010d6c54f31785bfb342a7baac249957fefd79fef1c691f51f2c90a8cd28a82" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x0d9a1172cfdfc7cb8db0ebf9c74f8bc816d1594f", - "balance": "0x82f2b5a8d7b88df1c899debaf69dea83bba6b8f4d7efe2bbc3dab4e8edcfe8d1bb8884ce09", - "nonce": "0x82c5df84d7f3c0b502", - "codeType": "0x00", - "codeLen": "0x71", - "code": "0x7fac9431579dea7e21b894993c8eace8238fe594ce4de5ba6b17dbe4059c9c0ac7ccdeb5cb8dc7d4b8535832c5e1a01001c200ac8c14fc3a6085cd45bd178f094746ef5bd2f2b07782b1a92c120e7e994699001e2c7127a91df8c18a8f118bb3c6b7f8c7f14916ec94726ade5756f4e692", - "storage": [ - { - "nodeType": "0x02", - "key": "0x32a0b97a49bc4b41275f2c6cf1afb44fe15e0597da428a46a4f28c1e34ba7f49", - "value": "0x7ce1875ff13e5274f09bbfee4ce2454eed95eb3ef13fe0d41cfe8184a8416d88", - "debugDepth": "0x00", - "debugHash": "0x7c9b62bcb983d19eb1ce478b773166924971a20f40edf2bb489825fbc0bd1803" - } - ], - "debugDepth": "0x02", - "debugHash": "0x9b7724ac4ea19385dd9747ad0d27b940bf0e6e588588b07b54957e37aa77915a" - }, - { - "nodeType": "0x00", - "mask": "0x1C00", - "debugDepth": "0x01", - "debugHash": "0x328fb899d5b2cd098baa71272cd0c75dac0886774d74d2a2d58d9b345935c472" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xffa97a82be3512beda8de06865e8ca5a9c7f86a8", - "balance": "0xa2a0a7ccf4ebf38cfcae9f94c0e8c2ecb1b5a499b2a0ad8cc8d7dac4e0bbf0e9f2ad88980d", - "nonce": "0xddf7d0f1c2ddf0a97a", - "codeType": "0x01", - "codeLen": "0x35", - "codeHash": { - "nodeType": "0x03", - "data": "0x287a92b81f6a48744403ad694e309b7e06865b02685644bfcc739afb46ee0cf8" - }, - "storage": [ - { - "nodeType": "0x02", - "key": "0x715fe227be869e650b1c18b68011be30002e297b17890fb87b95797bc224ed7e", - "value": "0xee15a1528a177599e0706e2adcb132086011475675e883e92a7ca6d8c28f6630", - "debugDepth": "0x00", - "debugHash": "0xb367a969b00fd441ceb23bf718d1b9e8d382036dbfbefe0f1b803bdf92c67a70" - } - ], - "debugDepth": "0x02", - "debugHash": "0x466e4aab91b42fa821df749033d11708d222db09f24c73d929cf51c5cd739695" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x2b2e60e1321308f0ca88b430a0a8882a7f2c804c", - "balance": "0xfb88a5eac9aae3fda29af9a8d7a7b593b2a6cbc0d2fca0efe2a282adbed4a692e0cbe8b507", - "nonce": "0xc9beceb1abd8f1ebfc01", - "debugDepth": "0x02", - "debugHash": "0x114ead6a99a020b05538a991a984997dbb7ae5587f666a84d549cf8bf3fe0569" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x200bf417f0def72a080fcab1ffa05d2830e688cc", - "balance": "0xaecee8d5a5aef2e7868aa3edbbefaedcf8f582c4fb8780f1cceecfa5ae99fde88be5ceb103", - "nonce": "0x84e2c9dec5c0c48eff01", - "codeType": "0x01", - "codeLen": "0x00", - "codeHash": { - "nodeType": "0x03", - "data": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x012298ef3a049f2e882b7f02bdd5ed14b8ceaa397b8044a655071c183443974d" - } - ], - "debugDepth": "0x02", - "debugHash": "0x65862fef5dd243421555ef135984f0f58b16214a084709dc8af3174a0e41897a" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x21650b3a41a04a687a787e7699c1e9154204dd72", - "balance": "0x80fab99bf190d6f3c7cbdda293ec87f3e7ede9da87a1c8ede38ec4d1d0d2989bd8d3e5bd05", - "nonce": "0xcff9c7aeb2c1f2d2f601", - "codeType": "0x00", - "codeLen": "0x74", - "code": "0x8846e1571b671559b35c69c83a21b831fac866552aa0f9bcdafb892aa1dfc3d630e4bc04b06968d8efb0801884df61f5f433e5f98e8b3f37c333f531559079868e0d4b1676007477857548c83c902cdd86889a6f75050e9e5e4cf545979dd333616b3d3d38ea4585df4123fcf416f1d7922d8f1a", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x01", - "debugHash": "0x4849fba014fefc2334af528cdbf71d864e54adc8c73d9aed0e98e0a21f2e3d1a" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x9bd73033c374e374b0c377a5230ba96d2ac74acb", - "balance": "0xa785e48c85a7c89ac2f3d3c7f19ae4a2ffa594c0e0acf3e9d8fbc2b386cdcedbabc2abb009", - "nonce": "0xb0a1eb9be1eadef4d901", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x03", - "data": "0x8294e6e0606231185bdf41da7fc63de48164c15b98f0159290c758e44374e510" - } - ], - "debugDepth": "0x01", - "debugHash": "0x3e38ce6c0bb9d113cdec3368f2e1339088e14a0ca55d49ff0d50061a7bb2c864" - }, - { - "nodeType": "0x00", - "mask": "0x0012", - "debugDepth": "0x01", - "debugHash": "0x5beed605dc01452aa4f1d21ba8ef73737ceddb240c52d441c7294eaa1680a34c" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xa4339d77b9e78b3da6c525dabe94361d359accb7", - "balance": "0xe1f7cbabfb83f1ae96b3b780a8ff9fedcb96b4869af0d0e5a0dea7ef9194d5f6dda8c58c0b", - "nonce": "0xf69ee596a9eefd8e13", - "codeType": "0x00", - "codeLen": "0x73", - "code": "0x81e13a7f3dac825c46ae3d5c78183347460a5be6d6c74a6db406581a1c768e8ca6956037a767bbb646f52acfccbe7df13fb547df5421b9ef338d975cbbd1ae1c7b30660941f380bc70c4129f9164e017082f13ef5e5c4d20b27131e1dfd3028a48ab165ccdd73d497a2be10c1dea936badba90", - "storage": [ - { - "nodeType": "0x03", - "data": "0x2a96d4ab3c1695b5f724d82877cfdf49bf2205e5df690f9aa69c74d7d44cf5d5" - } - ], - "debugDepth": "0x02", - "debugHash": "0x514734ee243da65ac9e3cf6b82a46e6ea2a4b73f40e9dab84e633a90fbe20689" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x25fbbd3025c0d58df78959aa62625df228accae5", - "balance": "0xc3dbeebcd483a4849086a7feb8b7b094d7a2c4dce2ecb4e1fcb2bd899bdba8e3ad9dd6a604", - "nonce": "0x9ff2db9ffb8b85f8ee01", - "debugDepth": "0x02", - "debugHash": "0x3d1eb4951424196849d3fb044c0f7fb6fc8ec6535df8b43f66bb42115a2ffe30" - }, - { - "nodeType": "0x00", - "mask": "0xA200", - "debugDepth": "0x01", - "debugHash": "0xaa43092e6689861ee517fc806ff58a413c2fc7892deffa7c2f96c1420c9f7727" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x5a82d40f3a15434eca11825c21b250e4a795526a", - "balance": "0xbb89f9a7cee1b08295f7fcc0edcae681f2d9e99bfbdaffbda0edc3e290bfb2c6d2d9b8b203", - "nonce": "0xc2fbfea5e198f59dba01", - "codeType": "0x00", - "codeLen": "0x23", - "code": "0x491b0781509547a5312567a6cf15f01c2722df7b30bfbc92ffd323acbeafb470c144fd", - "storage": [ - { - "nodeType": "0x02", - "key": "0xb71cf463f922b0517bebf1da1903d6e5c276460afec3b1254562bfdae97766a9", - "value": "0x9102ff128ff12ea11191af870ec1d7a7c411f085eb0d18b37eb421a68c55f3aa", - "debugDepth": "0x00", - "debugHash": "0x5e9e575223be8c32ba09e7893a8c5565980eed31174c81108443250d26f60814" - } - ], - "debugDepth": "0x02", - "debugHash": "0x26b8bcb90801173039330a43715332fe0e028692eb7b67a878abb602568879ff" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x68350d559adf571cb37c531f8ff3adbda04575f3", - "balance": "0xafe7d58ad18fa89ee58fdea9b5a6adc39888c1b4b39aa8b9f1a290c88db395baa58ab6a609", - "nonce": "0xd4ccb6cea398a6d238", - "codeType": "0x01", - "codeLen": "0x2d", - "codeHash": { - "nodeType": "0x03", - "data": "0xb8c8feb51d228c6228d812f867798c339f275abb0caa7b287b84d5cda7628190" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0xc6a2ab7bdc5aea78bfa5d4e587f7c0581fd5071e154eb0e95df5bf7882de0824" - } - ], - "debugDepth": "0x02", - "debugHash": "0xa43857f15eb5ec8feb46411fbfa867e9fd14079f14a8002e5927f320538522e5" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x3d90a6de4db54512c71781c5d69d945034f86a85", - "balance": "0xdb8df2d6a4b590ca86bf80f39e9eb18f94bafecbcad187c6b6c68ca2afe4b7bdf0fcbf9a0d", - "nonce": "0x95dfb8c8cdf9cdbaf101", - "debugDepth": "0x02", - "debugHash": "0x1492b6fd1a6655bb8c6bc0b89b36308316d6d15edb78e0f1edc213dc6d30bb5b" - }, - { - "nodeType": "0x00", - "mask": "0x6000", - "debugDepth": "0x01", - "debugHash": "0x50ada0e13e97d062e7c2cf197e0c1e81ab0a07dc2814f999560a3bbcb15c84f7" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x8659163d026652d6e1f7ca0661222619f337e77c", - "balance": "0xdfa4d3a3ffd4eceefe90cda6c3e5a8ddade5b8b192a996e499a8a9d5cabfc3bd8ecbfcf707", - "nonce": "0xaccca8efed91e9a3be01", - "codeType": "0x00", - "codeLen": "0x5a", - "code": "0x361e7dec35956b2930c232cd6eace370710e5699a1ba8149ac1ebe4d6cbeb6a72c7c4563cc02e1779618c9f9b9b60651d70d2c0789b2b2d729582822243a2e31f74f7ec9c2e23ffa9477b73291c913f46a54d70100d420c6a55f", - "storage": [ - { - "nodeType": "0x03", - "data": "0x23afb0029e5bb7b18f434cc4f94aecc17f9b0bc535db5dc2fde3b02977456cfd" - } - ], - "debugDepth": "0x02", - "debugHash": "0x9b159719b97763ab2592d8200734e3ce78c0bf566e67ea282c3ddf786ae42a11" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0xb2adbc8a2593561d490c3e9ae84971b1805f9458", - "balance": "0xbcc4a198d9f4c4db8add8dad909c9ae6fde8a8dff6ffb78cafcfd8cbb7b6c6faf7d2f1ec05", - "nonce": "0xa695a6d9e6bcbdea8101", - "debugDepth": "0x02", - "debugHash": "0x7d7e4c6477332ec28b116e0e45f64c89a193bc7be23b6f59f3842b0ee9fdbec1" - }, - { - "nodeType": "0x00", - "mask": "0x0500", - "debugDepth": "0x01", - "debugHash": "0xa4e9de182f32f89dd9d116e28e4485bda488643e1035c4e9257f4609ac88d58f" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xc61222cc7e65887ce773e993a802d66d94bba0f9", - "balance": "0xcbdd8ad9b2e0f5b5c0cebaadcf89cef7fafaf1f4ff87b5c9f0c5c4b5f1f5d081eda487a409", - "nonce": "0xf8c0be88fadcbbcd9501", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x02", - "key": "0x4a34ae1657e74becf881a35f189835e9368fbae8516d2859b3fdbeca07aa8f3f", - "value": "0x1cfd3004e237243633ee5fbd6503f938de86530004f08bc249dc1abdc0b35b99", - "debugDepth": "0x00", - "debugHash": "0xe519de5d80c8bbe1330e491b42cc0727fef93531d18f0461edfdf7192947c043" - } - ], - "debugDepth": "0x02", - "debugHash": "0x3d8029187f65bb81ea29f2f58531b2b6c9eb585608fbc8fd336a7c8e08ce92b0" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xe611fcf90e8484fd09f0cfd38bc53c82b006dd9e", - "balance": "0x9cbdbfbcafb9ca84a6d09998d8fca291d29ffff68592c8cdf5dc89b4a88bf386deb9aeaa0f", - "nonce": "0xaac2f898cadb8aac8301", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x03", - "data": "0x4a68a9d749f0ad92cc7227793335f251bd1eeb1fb71feb286b372e64daac227b" - } - ], - "debugDepth": "0x02", - "debugHash": "0x7e13c9c259bccdbb16d47ba493b0d4d8f1f6e2dc2add466f5eb196ba7ccce27d" - }, - { - "nodeType": "0x00", - "mask": "0x0021", - "debugDepth": "0x01", - "debugHash": "0xe546754c720e62df8f96752d1f6f33c6c0d0112c77795feeaec6c5ae34838dce" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x125324c1125eea8cbfe6c6417b5db7d0213b07d0", - "balance": "0xd38ae7b2a7f9e5bbcfddcde68ca2a5eeec8ba3ddcab29bd8a5e9c99d99c4b8cf95bab4c30b", - "nonce": "0xd9c1a4e99a8797e48301", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x02", - "key": "0x9f81659503482f67f747dd0a25a4e55b84bbe55933f3082be384ab99aa61f6fa", - "value": "0x9971505b88b5b7e20a56df1df54be099f3457751cca98ba43055b38dabc2f7cd", - "debugDepth": "0x00", - "debugHash": "0x9913a588d20876ba9d16aba4272cd364971af214d1a4153784d51d3884b4f815" - } - ], - "debugDepth": "0x02", - "debugHash": "0x5c6baec0dfe8badb90634561a7d87645e21c3d8e9e58dfeb62d6fe6bf23a9f31" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0xfb3ead2e001376237f144fb21279ded073a795dc", - "balance": "0xd0fdffaf95c7e5a0c0e6e285858f85f2dbb18d9ecbc68c9981f0b4d598c1ec94dadbc36b", - "nonce": "0xf786fdcab8faf4c307", - "debugDepth": "0x02", - "debugHash": "0xf212c3dc84a139f1a38077a337a3b16da4837d4c0e3e62b7265a08c9040f6dae" - }, - { - "nodeType": "0x00", - "mask": "0x4104", - "debugDepth": "0x01", - "debugHash": "0x22d9d7948fa08ceab4c275bba8bf7a21fc522a4c63b85d33f41244dd5f88e217" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x6bfbdf61b0350adf2d9bfb95566b9a44ff8498a3", - "balance": "0xce92abf7e1e987accdfad682a4f0f6eabc9eddd3b2e5e4c6c6ad8db2e6a1f8dd89b1bab10f", - "nonce": "0xac95ecc8c1d7ddbce601", - "debugDepth": "0x02", - "debugHash": "0xc0c71493b2cdf9344b47c525ac7abb6f0f3737dcbd352df4166008f6da889842" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xf6bdbc998413b9aba0ad47481126f04652f174a9", - "balance": "0xc3c58bd6c693d2ef83a895caabdbd5e5f0d79fb188fb83f1bbcbfecac896ac9eeb8eb9a70f", - "nonce": "0x8de5fdc68ccaf3ebbc01", - "codeType": "0x01", - "codeLen": "0x1e", - "codeHash": { - "nodeType": "0x03", - "data": "0xdc480c80186f0489d6fa64a296dbd719668fa828c2049ba669219cf219a792fb" - }, - "storage": [ - { - "nodeType": "0x02", - "key": "0x6b382cc3c8c4729021a9d037022b0dbb76222ce3508afc528d08f1526a6dd9f0", - "value": "0x4bd2f8313e0f628860e2a4df80f7127f6ee702490dae207eb4943652d8cfb31b", - "debugDepth": "0x00", - "debugHash": "0x084cfc59a9738a93e43f97ff4a95c75d1b656d44b7494d47e0740b6dd55e8dac" - } - ], - "debugDepth": "0x02", - "debugHash": "0x241c229777bbf37aa07fc58013728f97982b4405b091c140383baf5aa55f4938" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xed0747eab87cddcbcfed24fc0b4efad5f42850aa", - "balance": "0xe2fdf3c19da1a5ce96a584f289c6f9dff5d9b894e39afcbe83c39c83f394be8fd780a173", - "nonce": "0xb7869dd4a18482acca01", - "codeType": "0x01", - "codeLen": "0x00", - "codeHash": { - "nodeType": "0x03", - "data": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - "storage": [ - { - "nodeType": "0x02", - "key": "0xc2ca9211965601a2d393f576e44497b0ec820d40099a5fb295bb9efef0a14d71", - "value": "0xa6e9d4b25b32bda3dab519b8a2335b47fd4d8ba1261aa1fa4669f9ec92f07205", - "debugDepth": "0x00", - "debugHash": "0x2218c60510cba020a5eb26d98bd3b90d7436844f0d515c247c5ca93937b83e05" - } - ], - "debugDepth": "0x02", - "debugHash": "0x9e551d743e6940f98f6dd1569c91969f759da53e3871b7c8e8de96cd1d28c66f" - }, - { - "nodeType": "0x00", - "mask": "0x1080", - "debugDepth": "0x01", - "debugHash": "0xf891936886af1bf2c61e9cc813f02b310f9f66290c32c63adc5fb874631963b9" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x6237190cfd2f7a51e4ef8da5dd65b740e7b9d2b0", - "balance": "0xfbaed58ebfaad8a5ddedb1a0d1bea295ecdfd5a9c9f1b4b68f8b8184c9cffdd6b3edd69905", - "nonce": "0xcac9b4a5d9aae79969", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x03", - "data": "0x3c0c419d914676bc52fbf527370bec8c4a9fda5d5cf6029e1535300cbf9cb5fb" - } - ], - "debugDepth": "0x02", - "debugHash": "0x35ac5d7a202206c0f02dd464bbf9445f571733f081fe6adb8cb36f5767eab678" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x73d940cb1e6963a1234c2ae1ebae388cbfc6666c", - "balance": "0xb198a8b5d59efb9a9781f295ede3a8bdcb9490f383bce4b4f6ab98ceeddacbccbccb95a50c", - "nonce": "0x96ab91a0f1a490e370", - "debugDepth": "0x02", - "debugHash": "0x044e8b1beeda914bdf5cc888275af44de4517204745111d4feb8f755fdf8ce05" - }, - { - "nodeType": "0x00", - "mask": "0x4030", - "debugDepth": "0x01", - "debugHash": "0x2205eac67196e6c0d0be7e4c47b4a9fd0fb668f5496ce6bb3ad57b25680b4631" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x7c55aa59700a5ef1440452f6a6e97af67796fc63", - "balance": "0x91eca584b2dd8896c6a299bae7ade2acacc6eefec8bfedf3eee4a5bfbcf79c8cd2cee1d60c", - "nonce": "0xc3eac180c0dabbdc55", - "debugDepth": "0x02", - "debugHash": "0x33b835c937442c856fdfd5a0f9ca61e57b50359ac4551d70532db20ee3d7aa63" - }, - { - "nodeType": "0x00", - "mask": "0x00A0", - "debugDepth": "0x02", - "debugHash": "0x6cc62b401d6fc829a72bd7b4ea5c3a0ca300bcbb248ec3145217416772307a5e" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x66c622e5d6fb2aa939459dd2092f09fdc4a9bc89", - "balance": "0xbbf4829d9ef88093d1a2e2a2c9f7e5f6deb7f0ddc7f99f9eb9b2eac9f3f6f8a3ce8ec237", - "nonce": "0x9db6d2c0f9d9ac9def01", - "codeType": "0x01", - "codeLen": "0x00", - "codeHash": { - "nodeType": "0x03", - "data": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0xf6ae1bfb1bab034c671b20634b07703ec57d7620fe94a3ff1d43319f81359403" - } - ], - "debugDepth": "0x03", - "debugHash": "0xfc06383f3e720f7e8c7f811047fe1bf71307cbad113402f749d56f295072e506" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xfeac1e36a9ea61bfa477edf9193312e11e9211a5", - "balance": "0xc0d7ccee85edd3f3f9e1d4df91b1dbd68ec1dedbcb98b6bca1daa0b5a0ebebb28d9e9ad502", - "nonce": "0x9edf86e5a0d6b8ca73", - "codeType": "0x00", - "codeLen": "0x5c", - "code": "0x2e12ba0c7dbbf09e0ef55fb3e40fcaf5c46d36a0fee73c811443f9a6126e3ea2b8d251dbeb47e5366b7e6e89ce4a7c21026523942f8fc0b707122c6ab170422a2419444ba035d710825b6e2a8a687678dd01fb23fd259020863e155d", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x03", - "debugHash": "0xc0d68acbd64bc9c645ba6990db6b6ec11a880d3d1ebc3ab11ebbcc89ee67dde3" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x6b786876ea119d95258e9f4b11a08c6f18a20721", - "balance": "0xb7ff8da3eaacdcc7e5d7d9d9c2eddafeb8f1c1d1f4fcf0f2b3df98899bfdfcb18c87808a02", - "nonce": "0x96a290c4f689bced50", - "debugDepth": "0x02", - "debugHash": "0x978e501b6422b28254c8bddb760622c0eea111ee008a915481b48aaa986426a1" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/30_keys_30_storage.json b/stateless/fixtures/30_keys_30_storage.json deleted file mode 100644 index 45ca7f9a9..000000000 --- a/stateless/fixtures/30_keys_30_storage.json +++ /dev/null @@ -1,2855 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x7cbf8408152652adff16b2476665bbe0b6758eebbc6287eb57786f08b41ed1c7", - "error": false, - "tree": [ - { - "nodeType": "0x00", - "mask": "0x5FFF", - "debugDepth": "0x00", - "debugHash": "0x7cbf8408152652adff16b2476665bbe0b6758eebbc6287eb57786f08b41ed1c7" - }, - { - "nodeType": "0x00", - "mask": "0x0029", - "debugDepth": "0x01", - "debugHash": "0x7d339b4f50a31a8daa8a3acfaa8f7b0d2065ffd3e748ad2b01375d4b1c7c239c" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x9778e7c07b6ce13d655e5c841d817b24a915efa8", - "balance": "0xfdd0ad9be3a3de8d8df3c8f5bdb8998ca58ab383fec7c3f5f6bee5f0c4dc84d2c4fc978a0b", - "nonce": "0xbfd8cfeedea79be322", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x00", - "mask": "0xFD7D", - "debugDepth": "0x00", - "debugHash": "0xd27e73d8aa603cdff03cabe1d3746e9b38db401058af137e977beeed1da160cb" - }, - { - "nodeType": "0x00", - "mask": "0xA000", - "debugDepth": "0x01", - "debugHash": "0xa94972ca81f6b2859a8b84508dff72159a9d1fc0b8cc44e511321216c649dbfa" - }, - { - "nodeType": "0x02", - "key": "0x2e06eafb4a3148a0ca0630460e152422222d94c8fcf19039d13f503e6ec4dbb5", - "value": "0x8218fe1ecc9429980c0bcf023d78cba24408a660bd406026be2eeb0dc46c6b49", - "debugDepth": "0x02", - "debugHash": "0x6a635402d61eb83d172566f4e9962428e354f90ef59924cf7645af26adcab707" - }, - { - "nodeType": "0x02", - "key": "0x113185b8e1c1d8dd8850e3a3bcbf9cc637cccf402b49c882483fbd3483015213", - "value": "0x825e7a27e246ecf35054a42a7fdfd17e1e45cf97227397f2700d1c5baf1a9035", - "debugDepth": "0x02", - "debugHash": "0x5d9f8a6d93950d67a3f94667ff032b29eb5829475ab3c59ca669a4bd2f46bccf" - }, - { - "nodeType": "0x02", - "key": "0x040112c12dc8ada0c9756697862e23f9f6009fd937cdb37778b9d53a61bdf234", - "value": "0xa580daab5d985256ca3f1756ea649056acc15f9e18eb8da279415f25d5ef3efc", - "debugDepth": "0x01", - "debugHash": "0xd567a671fbaf9c7fd86c46a841234e56598ab75cc1cc89997e002ad485eff43d" - }, - { - "nodeType": "0x00", - "mask": "0x1231", - "debugDepth": "0x01", - "debugHash": "0xeeef08de230cb22c6b74e308756fd51d75847a5bf2865af70e6b8fa58d590154" - }, - { - "nodeType": "0x02", - "key": "0xfc832206d260a5f58aaada46d64ebedb24cc9c6d5f2b8693db386b278d548ed2", - "value": "0x9eb5223f08d4b470a91089fc1a40182f9de1703e2303656cd5537a70132b0954", - "debugDepth": "0x02", - "debugHash": "0xd5b0d535d755dd1403bea3f195e585c07200ec95e402b484382e9889de44d051" - }, - { - "nodeType": "0x02", - "key": "0xa8eec760d293e6760969fa54705fdc58c84a59230afc874827edc519b909c87a", - "value": "0xb3ec7db6160a6c958a226cac06230170ff93f2e9681c0292a54f55384d1203dd", - "debugDepth": "0x02", - "debugHash": "0xb2002ae9fa705b8f4be0e6d0a4c1d6365788f414d37c9c4f5146e492650c4fcd" - }, - { - "nodeType": "0x02", - "key": "0x107698dfc6c5ccfcfbf01be29e80392ddb476974f676edd2eba5c08e37fa112b", - "value": "0x7a0b5a32b71fd6822940f0843ae8acaea7a7fb15b0b21990e9a103b3b60eecd2", - "debugDepth": "0x02", - "debugHash": "0xb5c1f85ab1b055cb6c7a12fc66e18579d0b0ecd49b6ba79b71955541edae4c47" - }, - { - "nodeType": "0x02", - "key": "0x207c3a2f56021ea4391f986ca1a0e764bc9843eef14940aa31583dc4b501c8b8", - "value": "0xd9424d5c832c85ffcc2f536c41d1a8e65304b0ef7f8b12873400a19d04f439c8", - "debugDepth": "0x02", - "debugHash": "0x109211a09031581dcd4c03333201ebd209d1adf783795804400284dfd01139c5" - }, - { - "nodeType": "0x02", - "key": "0x029a06c28389816ecf8c46c4f2462f8af7370de95a34ae9153bef72ae174587a", - "value": "0x09ced57629090772bd38e84ddf9bfdda61a899b116134a5baf231a9e1a06893c", - "debugDepth": "0x02", - "debugHash": "0x2a7e1b75a0168343f93fca84092915fa8c5b8a00896bd76d91c1785875ce8cce" - }, - { - "nodeType": "0x00", - "mask": "0x0844", - "debugDepth": "0x01", - "debugHash": "0x4687f01df7ba6651a2c6cb96b6718a498bcd624be140d6a8a86338428c88e3c1" - }, - { - "nodeType": "0x02", - "key": "0x45a5fc5d74fd1235f4b1613fcf8abaf160f8385871d940558d2a9a0b6a72494f", - "value": "0xda6b29518da266569fcf2d6009e8ba47ad3af614d65387431137d9e7463fb182", - "debugDepth": "0x02", - "debugHash": "0xbaf23684ac5c6e37f0736bb497f674c907b1b15133f54530b5842f73fd5f2e02" - }, - { - "nodeType": "0x02", - "key": "0x323c147a1338304dc47fdacaf0d8ec4d60cda1341783961d4baa0120ef5ef6a6", - "value": "0xcdfb63f3bf83923ae9f2abd92985725369864a85e9861f9d75f44c5e244a6f08", - "debugDepth": "0x02", - "debugHash": "0x46d2620c25afa531b3f5395848b7baf531aec0212f61050e5ce212cc8f264265" - }, - { - "nodeType": "0x02", - "key": "0xbc7ccda3716448ee88f5191942814e07dd74fca3eae7823b79c6a252324337d7", - "value": "0x563a394955defcb32c4bf447510326aaf11a185f0b95dc367c37c562d2dbdec2", - "debugDepth": "0x02", - "debugHash": "0x8655d47a21a22d5cc65fdba765e09d34f7bed708fbd4fe34f51fb677823d7732" - }, - { - "nodeType": "0x00", - "mask": "0x8480", - "debugDepth": "0x01", - "debugHash": "0xd3e356eabba21aa07c1c1e026e9078e7d7d804757d6116c866cfc70e9cf436f9" - }, - { - "nodeType": "0x00", - "mask": "0x0A00", - "debugDepth": "0x02", - "debugHash": "0xf86c29d547915a620db73182adb43930263f310a5792ac17037087965932d504" - }, - { - "nodeType": "0x02", - "key": "0xe84020cbda8265c8261c2ff18c7f9e2d6c66e50a1e948630006240f9efef75e7", - "value": "0xa183e2bd5ba98fa4abc139805cf17bb0c809638140e933382667d2df439209fc", - "debugDepth": "0x03", - "debugHash": "0x4024a3365c7ec4e8de519957f2b13bed018ee383cf8bd5682de7c4474c84ef2a" - }, - { - "nodeType": "0x02", - "key": "0x4eefb826e707a0063e40d5b0ad7981470e75663ad78b5c1aa1d75d15818d20d3", - "value": "0x98b84782b1bc370d365af9ee32ae10c8e7493b14dbafebae724fed2535ac7fdb", - "debugDepth": "0x03", - "debugHash": "0xf0234be2caac10500717b103d06d17fc213c3629d2bea5bacd09f889d5175198" - }, - { - "nodeType": "0x02", - "key": "0x3496c5f907a0db2b59afbbe814ec518bda36af85918d8f17762b9f29128a03a0", - "value": "0xe202073a861681b4e028814a06673830032338eb42789cd71db7b67448e7b52d", - "debugDepth": "0x02", - "debugHash": "0xc9bf557e726b167ab2543426cabdd948b04411783a84abf20d09c822987f652f" - }, - { - "nodeType": "0x00", - "mask": "0x0402", - "debugDepth": "0x02", - "debugHash": "0x65c79d5a944c8a5198e4e532dfb03988af6f1ac49138e1018ab25823898b6b7b" - }, - { - "nodeType": "0x02", - "key": "0x6efc6a93e140ca5690829fb4a16bdb7a4ea50f66518334841c1e198eefaa9d7a", - "value": "0x9397620f01fd56f7dd644c699fdbc264cb35854629615c07d4907d43a47d1b2a", - "debugDepth": "0x03", - "debugHash": "0x730337dae68472009a14391b15641b35f860239d27c42f554cf064a44e6da44f" - }, - { - "nodeType": "0x02", - "key": "0x353e461c0d6bf9163fd56b730698b5e078f51fa8019b3b809d5950317900fdf5", - "value": "0xbaba9001ff512c3a9aee208594faf9588c48e8747777cf6a50d5747c102f92cb", - "debugDepth": "0x03", - "debugHash": "0xb5b4b4689a31c74c4466dfa7bbaf54bf5e021817a972a76500d4bc55ddb5cb62" - }, - { - "nodeType": "0x02", - "key": "0x118dedf3c3960f36f6b18cc5db6fc931c8174a2d41489745639b243d66d51142", - "value": "0x0756f91ebcb71f89de12f69455dfb30daf79c788b595000cc439a7bb13d86698", - "debugDepth": "0x01", - "debugHash": "0xd71304350c84c880ad840b8cf2df3bc9880b2c53443c5d5b473a6a3f67d10bd0" - }, - { - "nodeType": "0x00", - "mask": "0x4001", - "debugDepth": "0x01", - "debugHash": "0x8c9b131e2186a4d69b2ec913e96a04754950bb777b6343ad926c27674b6af648" - }, - { - "nodeType": "0x02", - "key": "0x305257bb4a4246352456981bfab8cb39d034e845783195166e89dce071c58631", - "value": "0xb6cd822f7320f6e4ce3e506144f378016f621339555b9887090ca1310eed42d7", - "debugDepth": "0x02", - "debugHash": "0x15d4615e738ca8dea16f747ee4e5dcd98c55dbafec9de05716eff13779ffe4e5" - }, - { - "nodeType": "0x02", - "key": "0x7753f0a2d7130a77dc9dc861ab9521cbf66ec8843d052d915ed86c832a1ec8ed", - "value": "0x55590ae9fa2e002b51feca36aa9c8792f72b1fe3f155f4b9ec86eaaa73a3231b", - "debugDepth": "0x02", - "debugHash": "0xec8d548ad5005cdde4aa299edb6430988470427d98331bdb737783bc0dab587b" - }, - { - "nodeType": "0x00", - "mask": "0x2400", - "debugDepth": "0x01", - "debugHash": "0x1f8f0344f91f0c905ac50dc5aedfcad41a799f9c681409cb929cea49ae5cb37a" - }, - { - "nodeType": "0x02", - "key": "0x30170c78fdabffb7dbfac9827740099069504dfeb57886494ceeef1590f7ff3d", - "value": "0x410f13eb7156afa00d96a6495a26f2b13ffbf9b58e4a9a23532f1c4d71aee2ad", - "debugDepth": "0x02", - "debugHash": "0xbfbb4bb1e9c03f2abf7c8f8b6f0622d0a3cc8b26a779a67aed3c136900a56e8c" - }, - { - "nodeType": "0x02", - "key": "0x14f7b03695cbff31be09a2fc37452237d26c89e44eb8bfe87dc6b62279f2977e", - "value": "0x0c6226ce54c57d1d9a5056cc1a1b40adb7951e34240772be2b694a5d8ef2d9c3", - "debugDepth": "0x02", - "debugHash": "0xeb008527ea3e47af21707a4f02d105c2282ad1dc518e4d0fa33d827bd29fc0da" - }, - { - "nodeType": "0x00", - "mask": "0x1011", - "debugDepth": "0x01", - "debugHash": "0x4d1538151ac11388425de63de9fb41fee9ce0bb1c79cd053045690f70941b2de" - }, - { - "nodeType": "0x00", - "mask": "0x2004", - "debugDepth": "0x02", - "debugHash": "0x897093485961fb06c01d123075cea7cb5f3fd4507c36cd14f03318b2b814912c" - }, - { - "nodeType": "0x02", - "key": "0xda13017146ef12c44285632900070da3ac56d94055df7d66803239359d51b832", - "value": "0x727b7ed7e719042e1d3f31ad00ec30dad9b29c46ed8678c6c2f21ff72899a5c1", - "debugDepth": "0x03", - "debugHash": "0x73e9b90fe2b3e01e203daf6e839be4f6d40af6377149d257224c8ce552590fc1" - }, - { - "nodeType": "0x02", - "key": "0xf78d885cff607aec3d8147ad882185163e77ba6a45842003be9c622300e42956", - "value": "0x45b8651698fc5dd33ddc31e89b54e7c538337b44c6f37eac98d82971651272c4", - "debugDepth": "0x03", - "debugHash": "0xbc29bfd51452d1ebb5ae25335cff06550d667aa3cd5ac1306c05ce2048dfee5b" - }, - { - "nodeType": "0x02", - "key": "0x5f3855294d41df7b1801207a81e6ce20dec26c7ad817e0bc0e81ba565558d03f", - "value": "0x36c901698bb1ac7db6c3847b9e38e2c5dfac8eb7f65017cb3a5b009ac43637b6", - "debugDepth": "0x02", - "debugHash": "0x1cc9c2600a2280e3be4e3a8c9807a770992ffcd0b8ed39b871a243ab9654e7c4" - }, - { - "nodeType": "0x02", - "key": "0x8a355a96ce076a2cd47cd7108613c4c03b078aa00d611a95aa8f87f5baa823c8", - "value": "0x531f6add50d926f7a455af7bba7c77489f2b472e2eefe987881da8814cdeed9b", - "debugDepth": "0x02", - "debugHash": "0x51fbd8ee92adcb3c82e821af6e34f4eb11e33b948a87bea46008e542751e2e53" - }, - { - "nodeType": "0x02", - "key": "0x7ad80ecd0ecc4298361f9813cd875310fb767735ce08633d4ee502ea9694685b", - "value": "0x9eae8a0c4a5ea9bc8f516a686adb7bc8ce2e177dcb860d1dce895ad9645e4a5c", - "debugDepth": "0x01", - "debugHash": "0xa9784f17bc1e1b1582ab82e2c648925b53fdff40c42ca89aedd2ac073b43e6a0" - }, - { - "nodeType": "0x02", - "key": "0xe228bca46781c1ecc34fc920bdff10caffe05fe7ceed8a6117e3012fb33d48c4", - "value": "0x5e02fff552d2167a41a95adc339d37ac7d5527c5c762aba57e99da94653cc0d6", - "debugDepth": "0x01", - "debugHash": "0xf6138c73f5a0ca1c66f5a046ffbdfad6bf8fdb2ed86df415b3dfe1e897cfff09" - }, - { - "nodeType": "0x02", - "key": "0x15281526266c86222002b84e1e1a768e759ed50aa26bdff1eedd57f5d0f564a6", - "value": "0x7f6a387af1df284a0ddb52504a5d39a2ce56683ca663d97b1508b7ccdfaff300", - "debugDepth": "0x01", - "debugHash": "0xa0d83f880a28e64b77d57156d56b4755d0af44191b1f34bc1e0dcce6989df694" - }, - { - "nodeType": "0x00", - "mask": "0x1002", - "debugDepth": "0x01", - "debugHash": "0x526166815d4ffeaab5cf96f0925e3e9e5e211244ca2076b6fb61af5900f3f9eb" - }, - { - "nodeType": "0x02", - "key": "0xde59d600ab4f1ec11cc268b75e6c7f6c5c7c423d8f6e9d385305d82a50836c37", - "value": "0xee9f56a9fa15b06657ed394d987fa3978e04af423e379ced2915aecc82cb326a", - "debugDepth": "0x02", - "debugHash": "0xa0266cd6c172fbf1adf15e9edd2ce5ade2e02079bf837be2bb2590cea17e3f60" - }, - { - "nodeType": "0x02", - "key": "0x5188afde90fc3605554a4db33e908f1f76e56ac72deef1f1d9cf04c69efb0493", - "value": "0x0eea1b64a4ad4c4e02d58ed43b7e949cb90c5874205bb83a4f56560655751876", - "debugDepth": "0x02", - "debugHash": "0x9fd149c7fd9f2e904b19f71f84fb0ddab8ca15af2045d7e553e05363d66b9af4" - } - ], - "debugDepth": "0x02", - "debugHash": "0x22f436df8c7794a83b8dbaa41d56df554de915ecbe73f56ce69137c0476ef365" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x98dbaf5b8dc8774ea0939c6855d7359bbe11c90c", - "balance": "0xe0e998a9fffcc8acd2f6ebc1ddf28898979fb89cf097c4fbacaaeebfba96acafe0f9d5be0d", - "nonce": "0xa9fe92928d9ecaaaf301", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x00", - "mask": "0xDFFF", - "debugDepth": "0x00", - "debugHash": "0xd2c2cfcf7390ed995c41070416161f5be08fdf6adc32de8e2c5548f63bf68566" - }, - { - "nodeType": "0x00", - "mask": "0x8900", - "debugDepth": "0x01", - "debugHash": "0xc6ee93eea954633765d5496fd4b870ebbf83a189e25329d488c6addd0c0c49b6" - }, - { - "nodeType": "0x02", - "key": "0x47e23fa88a301cf5dbc8843ada5373deef4463ea386943199be69aae51bd4508", - "value": "0x2e2cebed597414165d6a66ca89acd2f9cee9b27544d89b48a798516df8ed7cf5", - "debugDepth": "0x02", - "debugHash": "0x8250bd7d9c009645763ecbd549446e0563544f5c694364984d61eff7540603e7" - }, - { - "nodeType": "0x02", - "key": "0xde1040ddde1474996204a9bbf0a76cfce0b54b94c39be813df4c08b56a76865e", - "value": "0x4d8dade00dd2166d42a5d50b391fa91f96de44989ad7eddf80ebdb8b6abf102c", - "debugDepth": "0x02", - "debugHash": "0xd475955d06c1532696eb2118fd3e172ee5d89737525dd1b38d7144a0b54a2121" - }, - { - "nodeType": "0x02", - "key": "0x885af5af0d6476a67cb0584ebc12e291235b882240535ca70c13fee0d5a40450", - "value": "0xe6a5f9711e3596611f20bea588e1cdda895db18b8d0302debbd758329f39fda3", - "debugDepth": "0x02", - "debugHash": "0x56f0bcf0149a9f9c9f835346f563f7e156380b41df62a3828d767bb34e1bbe37" - }, - { - "nodeType": "0x02", - "key": "0xb19da8bb4e5f46983768ccc733fca9a82642083fde9e15760a2461707155fecb", - "value": "0x447e2ade0951974ef9ebb10dc2f954b0c4370aae94ddea8b2ca6cfa3f55ac934", - "debugDepth": "0x01", - "debugHash": "0xc7cc330690410f87ebee1d3999fdbb5f12bcccdd79f25ab8e5b07b5cf1641aaf" - }, - { - "nodeType": "0x00", - "mask": "0x0033", - "debugDepth": "0x01", - "debugHash": "0xbb5514713c6a701b1d52eb6544cbd29eb9bee93d77bc3233e5f75d96e97f3ce2" - }, - { - "nodeType": "0x02", - "key": "0x4c043a46673eab713bae0528ba27d7fe6716ff4929ccbc6607ed27907f9ced5b", - "value": "0x30b12578ed07ef70e8665a1d20ada16bfe6bab02930fb00890f1a3eff21b5174", - "debugDepth": "0x02", - "debugHash": "0x7d1b689fbeb059081f0e00a59ac931a7d32fd4ece8ab37d2f9d9facbb0e563bc" - }, - { - "nodeType": "0x02", - "key": "0x935c7f8ba96d1790cad9bf065881f3dd07a90665244f2e5e083daf57a3106b7d", - "value": "0x7aa4da2a7537f0abeee99eb716afdba762e6291f3b64e4d5fe37f295bc17e811", - "debugDepth": "0x02", - "debugHash": "0xa654ec181ddfde56d340f299f3712de58d695cd1e7a4648c5d0408ceceafc51d" - }, - { - "nodeType": "0x02", - "key": "0x6534e0209a409c4c6f67f457639f6aededc095a03cc882863b55a9fad5973e00", - "value": "0x983f351ecb5a5828c14e20c60e007ec9a83280479bd213a6af6d1df4925497a7", - "debugDepth": "0x02", - "debugHash": "0x53907b8d967b3dca2e819d9f0635d7fe51b8cb18c321bcb16e31731496a11a7f" - }, - { - "nodeType": "0x02", - "key": "0x55c18f56b1582706ace9682a2dabd549b370fc57a367008bf18f7a187d4d4181", - "value": "0x26446c65f2d6577dc8a6beadaf8619c522442abc166ee70cfdb5abf311879d5a", - "debugDepth": "0x02", - "debugHash": "0x6095ef217c67b856c91cbd4d43ffced05a466ccc9dc0e4bf9d6cd4ad9bcd4c74" - }, - { - "nodeType": "0x02", - "key": "0x8140cc8e9a500d66df607824d3088846f87b1d2fb6c8163ba1233f0697abeb35", - "value": "0xca5c854c6aeb3a05991dfe2f426ee11f6c23d505003d0011072b03c80cc44e3e", - "debugDepth": "0x01", - "debugHash": "0x65ac541b160da64e1ed1191f0ef3f848c3b7158f985e397bb3d583429dac7995" - }, - { - "nodeType": "0x02", - "key": "0x0370997cf17ccc69d211dab75b71d404b02c12aa0e38f06877e850256701a080", - "value": "0xcbd07d2c44e417930777074352d45fd40a61ea83fe336f9de1c62461f5f4f570", - "debugDepth": "0x01", - "debugHash": "0xa7360683d892c1cf1d098f436fe10bd3f37e7122c5e4fcdd7c4ad2644c5ff03b" - }, - { - "nodeType": "0x02", - "key": "0x56ffad7b6299d4e66a02a4dde7afa8a3f17f09f981438d91f491f553f7a0684e", - "value": "0x7c2ed75f55de72bec58f547bf2d9d5f146af70de4b37edc001367af5ffe41bd8", - "debugDepth": "0x01", - "debugHash": "0xe6f2de61cbb2efbc5904e7c866408f3edd4becdfee4280c1a17b33cc3e08bdc7" - }, - { - "nodeType": "0x02", - "key": "0x8861cbb1d2803da13b8f75dd2d4d88e59ea7e52046c516fcd2f0ef9bcf4966d9", - "value": "0x07be958df02659f2de0506f9e1bbdc2c3f76822025126ed34188dde068d27c47", - "debugDepth": "0x01", - "debugHash": "0xfcc30eb0b11cf6e1f4eda167d41bba7c69cecb2f6a865aac367977cc53ed647a" - }, - { - "nodeType": "0x00", - "mask": "0x4501", - "debugDepth": "0x01", - "debugHash": "0xf453456a331d90d5c91989e70c82b7ef0dbda9b3e505fb6840347e583cf90df5" - }, - { - "nodeType": "0x02", - "key": "0x44d1218e875dfd6191004ee8bd10ec049898984a2940f7080ce2a8a8de503bec", - "value": "0xbfd76fe1557427bc5d2cf6c886717dca1fc1473eded567d65b2ca62903a264db", - "debugDepth": "0x02", - "debugHash": "0x8d99bed5fcfb7e17171e5618b74b9e67da20c56883bb9a1a560cc699f80569f7" - }, - { - "nodeType": "0x02", - "key": "0x1664202e107a5ad913d4125e7e59d4d1a3885a8f12ee1e478290896f30b9363d", - "value": "0xe0592ae922544ea1e473690d67aaa1666fbd31f93c23b49512120ec78e7d29b2", - "debugDepth": "0x02", - "debugHash": "0xdb8cb9dd3018bdee9b5e43ced3b2c5ae75b25165e4f84077a08a735d160ba10a" - }, - { - "nodeType": "0x02", - "key": "0x38d0bcb3d51994d935c80378f4d8c8ea1def22399d868d666a47cb6158959532", - "value": "0xa92920dc573022a9fe42db35e24177874eb5c74812de0089e184db96dccaa939", - "debugDepth": "0x02", - "debugHash": "0x9bef07bd1ff4bc856d22881df1969a96a14d3cfc61dce3771af56ba5f7396d43" - }, - { - "nodeType": "0x02", - "key": "0x8b2509ebf6b73b16b64841fe2f26bd5bd3ca8e99d2c1caae804b92df135b3d26", - "value": "0xf4e70a0b4f7d9358b32aa7d1bc5c0f00e8eb8d56bc190ee5f064e38eeb8f3543", - "debugDepth": "0x02", - "debugHash": "0xac659d85aeb18a32a9f2b569e156eac6f04b3ea3e5cc641188d62c8ea00d10eb" - }, - { - "nodeType": "0x00", - "mask": "0x0808", - "debugDepth": "0x01", - "debugHash": "0x55ce980c75bfbfe363dbec74b10029b83f3dd6f69c46c8c8aeeb15b1dffc0103" - }, - { - "nodeType": "0x02", - "key": "0x7020fd5a285fdcf92e5c141591e1e07b142513c7404f21b993ab0b913d91eca0", - "value": "0x9479e9881a70ef06caefa7beead508438b52690d69e0c884a09fdfdfcca83203", - "debugDepth": "0x02", - "debugHash": "0x196204663cd541cacb7dbd19ec8a94ab1589e3a424a155c116e695ee60c11ae3" - }, - { - "nodeType": "0x02", - "key": "0x063640a020db9a4d2bf8001cd08f97a455d634179ca09502a28de9950ab63ce9", - "value": "0xc475c896b784cf1140f19fb6c8dc73051148f5c18dd3049908792b246e011484", - "debugDepth": "0x02", - "debugHash": "0x27fc8dbb82b0d0bc122e05083057efffa68341187ae440ca257a865da569170e" - }, - { - "nodeType": "0x00", - "mask": "0x0210", - "debugDepth": "0x01", - "debugHash": "0xade86c6ec13f5e34cd449e7f2d0848fc82d632d98b65bb782b7c23c76e24f145" - }, - { - "nodeType": "0x02", - "key": "0x9e868066e22c51f26c41c951a565dc6b9bd69528be7b64b6d802ea83574a58f0", - "value": "0x7f975c4c6914d15352908a0880c04bbe0dda6be0f8c40e6871295ccf5e6ef4dc", - "debugDepth": "0x02", - "debugHash": "0xe7636a136fe3ce8ec7792ed7d81e00890a037b5d663b570b661f96be8eac3c84" - }, - { - "nodeType": "0x02", - "key": "0xaf8d65462090356894da210a6cd73dbe1b30555c2ec3e1c0479290862e129b69", - "value": "0xdae68e8a1032fca95bc42e82b6b8a665488fd8e1184a5fd50bbcbf26585e30b3", - "debugDepth": "0x02", - "debugHash": "0x296164fe40c40a5e88615f1342e38d56749e9811f768114b8c80dac6c05fb5dd" - }, - { - "nodeType": "0x00", - "mask": "0x0204", - "debugDepth": "0x01", - "debugHash": "0x0310fce6b4251d455ce229365c89674ecf3876add42a19bf4a07b3d19c0c53b2" - }, - { - "nodeType": "0x02", - "key": "0x73b79e4f67e0733ec499e4602e5d437c6be6e6d7d4781cbcd044914a665da498", - "value": "0xbd6956fed07fb62f2a911fefa2528445108b5a9fd6e801e00e2c76e67f181e5e", - "debugDepth": "0x02", - "debugHash": "0xf5fb4821de5f92fb8e346958b2348259fc26a168050f1865e7ace376181b8c43" - }, - { - "nodeType": "0x02", - "key": "0xfeea521e6f2799265a858336abf7cdd50b0b5741a7b51fe3fafa5073e007da5c", - "value": "0x568fc3d6620b3d56aeb119e0b05d6aa13a8b5d09132b6869f462408304ed3cad", - "debugDepth": "0x02", - "debugHash": "0xbf0e3fc16dc754b0bd7a8bbe7957705f8a288cc0a8d6b67b14d37b6df958cb40" - }, - { - "nodeType": "0x02", - "key": "0x2ebd787381617070aacbab953b022dd0fbba0288d7b36cf07a13cb162b0884b9", - "value": "0xf0fd35888691ce65bc09551a696def868dc5a6e123da4c4bf0e11fc3d7b5faa3", - "debugDepth": "0x01", - "debugHash": "0x85ca81cf50ab78c5313114fd30d35db99479db8a920cb4fa4d29c232f1a7e17b" - }, - { - "nodeType": "0x02", - "key": "0xc33a0aafb628df6626c9a47945b83cd0630efedf40b6d88fcf2514b7959e0674", - "value": "0x9c2164ae34b5bcaa174a15ca1067bb7bcd231277ed86501c80ed698c8cb0697a", - "debugDepth": "0x01", - "debugHash": "0x07c38f55edaf8d6bd638048ee053ad229973c73839aea163cb01ea1390fb794e" - }, - { - "nodeType": "0x00", - "mask": "0x2804", - "debugDepth": "0x01", - "debugHash": "0x3266eafafef7563d4cc6ad4d950ad6783afadc5784825553fc266e6bbf55b72e" - }, - { - "nodeType": "0x02", - "key": "0xb8139531c9e8a4c6bb5e6028515fc2eb1e9d26199e66d8360afe52aa51cb1094", - "value": "0x4c1457eb3da76bba09093ee67cda2ef93e9dfeb613e801328144f0f607345a2d", - "debugDepth": "0x02", - "debugHash": "0x23489b5989ae88bc5404882a26c5ccd05f283071ded87ee60de16e0294f03d2f" - }, - { - "nodeType": "0x01", - "nibblesLen": "0x01", - "nibbles": "0x10", - "debugDepth": "0x02", - "debugHash": "0x4e9180dabd98a6475e120c36b1547d4fde9adf00d39ef101cba078d95fa10b9f" - }, - { - "nodeType": "0x00", - "mask": "0x0140", - "debugDepth": "0x03", - "debugHash": "0xa51022035b0e82d87f88dd599593fa90b4d4fe5b642cec19fa6b38ca183a8739" - }, - { - "nodeType": "0x02", - "key": "0x88ea6a17075c4d38bcabaea606d7cd13d6f4c725d7ed10bdb132cfc9f10a0d37", - "value": "0x99c627e3e08ef141e12eed6b27a0313df1647199dff46a91bec64c577bafc853", - "debugDepth": "0x04", - "debugHash": "0xe5f4f5b14cccc662d4c10745ea74f53139256e7c80ece2f733967ef2010617c2" - }, - { - "nodeType": "0x02", - "key": "0x4de4a30856a16564c64d818b1726e67b2771e68e3b7e5dcc21e0b6e50fd68322", - "value": "0x251702ca17817fecec2f939b418b9f284b2130095b51a5321762a32ecafc1919", - "debugDepth": "0x04", - "debugHash": "0x8e44d7db3cd65154306a75b6e2ff72916f296137603974667d3abecc6e33a87e" - }, - { - "nodeType": "0x02", - "key": "0x2a614978971556856161ce5bf23713e6aba9105e6c55c7f34262bd09247ed9f6", - "value": "0xa1acde87e43223f066b12823605ec67328cf7fb033656a03e51b68db5d986dc6", - "debugDepth": "0x02", - "debugHash": "0xd6a1eb95999bc351be7f66e98185f4aac3968f13fd91a4f457a2c2a94f773a44" - }, - { - "nodeType": "0x00", - "mask": "0x0084", - "debugDepth": "0x01", - "debugHash": "0x3c3de753c944332bbbe66d9b127b66da4585dbeae84a10f639478af77767497c" - }, - { - "nodeType": "0x02", - "key": "0xddefa7a2e19b8af9c754f003fdc896cb764e02d7a9e2aa1f8116cfebf1d9e52a", - "value": "0x932e9f7759fa39c7b8d16d9b56286a6c8fa9a0d1f18890b923e5d89dd9f0ed2d", - "debugDepth": "0x02", - "debugHash": "0x0c9d8d04d491b29ba5b15b712aefcd33bbdd4d39cdca2b34a6ea7a78ece519bb" - }, - { - "nodeType": "0x02", - "key": "0xd14002021c9a4ea2ca62ace8dc360ce261de976cc05b4aed6b0fbd6a793e7a92", - "value": "0xcb1a34612bbd08cc87f0c426d7f3ee888a573d60b5556bddfe74d4477e336c3f", - "debugDepth": "0x02", - "debugHash": "0x5c329d54dc4b012aef1ed7190bc37cd95922442f8601b9e4f8f15188f38afce1" - } - ], - "debugDepth": "0x02", - "debugHash": "0x8bce0f0c74912c0c58a1115bdc5d737db002d1b1cdbfa1fdf82825f19f37b322" - }, - { - "nodeType": "0x00", - "mask": "0x4080", - "debugDepth": "0x02", - "debugHash": "0x624977830c972b45026ce0707f1dc7b60fdedb70d040300d44f4ea72df0c2dfa" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x2584609905e5fe526fd97dab09e51aaaa8fd98af", - "balance": "0x86958a81fcae9bebcc959ab7dc9496f4ee9cb6d3cbd3b7aee981f7c8f6eccedbd48aa78c0f", - "nonce": "0x8faeffd3d7e2b3dfa401", - "codeType": "0x01", - "codeLen": "0x00", - "codeHash": { - "nodeType": "0x03", - "data": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - "storage": [ - { - "nodeType": "0x00", - "mask": "0xFBCF", - "debugDepth": "0x00", - "debugHash": "0xb6c860b169a9e8346a1c2f47b1407b1c4927a46c1e778f73e40c02db0b689c95" - }, - { - "nodeType": "0x00", - "mask": "0x2100", - "debugDepth": "0x01", - "debugHash": "0x88d728b1f4416bcf4fc370efa5a3a9dc9a8485852048621c042bfbd14e7d3beb" - }, - { - "nodeType": "0x02", - "key": "0xd5b6e06d9ab367fe49b2b6b3ece2d809dadc2303a15e3aedfc3f109b7bbc66a2", - "value": "0x2b03931c887e539b957cd4462a838fd9945a8be6879c70c1d5fb65ccd8f4ce2a", - "debugDepth": "0x02", - "debugHash": "0x360ff1f84c6c7445916658f765ded0b441e916997fbfed2828a69bc8fdfc6f83" - }, - { - "nodeType": "0x00", - "mask": "0x0404", - "debugDepth": "0x02", - "debugHash": "0xb2ad72bb727050c149dc4f6e8a845e3e4e278d7f8033b6d048c7bc75243de1fe" - }, - { - "nodeType": "0x02", - "key": "0x78120aea0d5493d67dc71e995f8371b16e20ab1f7dd58f42e870c86fd4d92a79", - "value": "0x095cf358d9b232084cdd9716624a14ed57df93ee2408f04b99b9e159402c16ab", - "debugDepth": "0x03", - "debugHash": "0x9d1b51eefc83d2b91913367a8b20d30652f4736712d90d2d5168f7846bb242d3" - }, - { - "nodeType": "0x02", - "key": "0x4c4276a32890a43352aef01683840c28327375ac2aca435e7d982027536a204f", - "value": "0x251ebb27e7ed8bfe67c40eaa70d58c0350f35680d99aa36140a6fd3161d8cab0", - "debugDepth": "0x03", - "debugHash": "0x094c6d37025924dacf68fed66d6a2f93c7f46879ca1f29224774c1b1369dd53b" - }, - { - "nodeType": "0x00", - "mask": "0x8020", - "debugDepth": "0x01", - "debugHash": "0xd2b19d42e5728a48af223c1bacd6df21ac9c3ccf08f239ad01715dd1eb89c467" - }, - { - "nodeType": "0x02", - "key": "0x7717e6991cf3392632f9f78fc7594dd8b57ef07aa0d7508c70b49d3e1828c090", - "value": "0x03165890c7493b7d8022132c41c8ced17e9f3fcf704e83de870e805854bb4dfe", - "debugDepth": "0x02", - "debugHash": "0x9dc8ad6602843d65c0514833b346d40cc1e6db826bd108329c009a9e58192fca" - }, - { - "nodeType": "0x02", - "key": "0x37fce93c7ac3265673cfbb87235d6be3dab78e7469677ccac2742b05f857da12", - "value": "0x5524c46a6cc98a3b747605ef399b1efaed89c2bcbe69973c13aa8a189dda0a57", - "debugDepth": "0x02", - "debugHash": "0x263a23909ae4356a48e9e932807da9c015434ca9c4be31d7d7ed43a5a9d34f57" - }, - { - "nodeType": "0x00", - "mask": "0x4088", - "debugDepth": "0x01", - "debugHash": "0x38c49c56e12c22f4622d661c79110d1811300ead4d0872a90fb1a2a834700686" - }, - { - "nodeType": "0x02", - "key": "0xebaa4bd13191f8088bdf2e1f958f23a9f9dfb91c1130055790ea8962dc334c19", - "value": "0x93993cc1a4d50f0d0aa69bc74a94a44f0a31e7e2328ae229509179ddd12e25c7", - "debugDepth": "0x02", - "debugHash": "0x019e8ad18a5afaf865e33a0dbbeabc44e996cdcdeacf8c372de918814abfc4f7" - }, - { - "nodeType": "0x02", - "key": "0x5564e3485f03a913081efdc504a72627f5533d3b596e209e8ea3ab454a92e641", - "value": "0x42c54e075b1cd0dbd5f8bfa4f90c75ed147e32137dae7fbc07df961840847f9d", - "debugDepth": "0x02", - "debugHash": "0x4fb02938e145bb9cef95c53326705def6a04b2a37fd9820b29963732aca20334" - }, - { - "nodeType": "0x02", - "key": "0x9998dba467a63278e071d345fc63d887b2f50da264aa4df6abda41eb7e457809", - "value": "0x8dbbc72bc216e1117051da2c677c36abca48ce13b68e438dce3c30c0a812717b", - "debugDepth": "0x02", - "debugHash": "0xaecfc0f9382589c586703b99aab9ae493b2c2309e0480402b021cb9ad303db73" - }, - { - "nodeType": "0x00", - "mask": "0x0880", - "debugDepth": "0x01", - "debugHash": "0x1b6c68d696d5e8409f178da88324822e33baa903e8678cfe78ffd2a7bc80b2f8" - }, - { - "nodeType": "0x02", - "key": "0x98d7d198d0e8523404bc700996dfd682de0bd82ae38070ba8f66f5d4e950191c", - "value": "0x7447f96070cef9c2f4518ebb8b2006761ddd3f6bf79b54217393dc38f171c38b", - "debugDepth": "0x02", - "debugHash": "0xd38aab153f6a5719a89aa5b3c59e1484bc5172410f7e44264b270ddf66720cd2" - }, - { - "nodeType": "0x02", - "key": "0xd2ea4136990e1ca9d1695e4384f7299495785f00e4f7540afc9bb6046468f144", - "value": "0xcfdb824fb141a277d73638394d8a1a0e07c2a605ce3b70a0e4630e894cb08e49", - "debugDepth": "0x02", - "debugHash": "0x7c59657a389585bffaa90172e99c6d3b352c44a5ad873f4e7c6087a93badffa8" - }, - { - "nodeType": "0x00", - "mask": "0x4080", - "debugDepth": "0x01", - "debugHash": "0x69e679ccaaedf208be14d83e17b78566b389e9015752c90290a0d4a26105222b" - }, - { - "nodeType": "0x02", - "key": "0xaa238b48e3bcfab1129b93bc32314d2f3d0f77aa65ca6f5755f4529b03c58eae", - "value": "0x0cec2c7b84e33cde3bf9a496533b96489a68fbc69bf3c6769f47504870b43b92", - "debugDepth": "0x02", - "debugHash": "0xaf0d4377cac46cfebef001ff71b1c0c4996998d22251b8dbfe0fc298cdd2fa51" - }, - { - "nodeType": "0x02", - "key": "0x731af2bc48219b8f3ed4494b5ea6dcc39a0a59985acace636745830881af0ac9", - "value": "0xd54368f873f016e269019bcc4a111e82a881b42a3ee40db400af6986ff45e4d5", - "debugDepth": "0x02", - "debugHash": "0x57b6f4ac724753148669e3b38c937ca7cb9654c990457cdc84bffe5a7390287e" - }, - { - "nodeType": "0x02", - "key": "0x72527e5e8065c792478d9a64d710f881a3140d0fa61f94f99870a9ee5dbd39cd", - "value": "0x144809fce55dbca42b49f1872db182e91a84b2fc53591365f8df7fa93bfb68d5", - "debugDepth": "0x01", - "debugHash": "0x20959c4c998d1568163fe4b661d1b8aaa95d427ef61144fcbe0db6ad3e2ebd6e" - }, - { - "nodeType": "0x00", - "mask": "0x0412", - "debugDepth": "0x01", - "debugHash": "0x59e47a1e78bd4a20dfbbeade1a2d89eb1fbf1d23939c8768917e989d42f68d6c" - }, - { - "nodeType": "0x02", - "key": "0xdb34906b867ea5b9e397327f8c4372010466431b7a00d49470e87c40681a2170", - "value": "0x44da59c9dff65e66dc4d8db85bbd483a12351f21ead2c5fb63e2c822fcffd746", - "debugDepth": "0x02", - "debugHash": "0x660d3ce5f4fc00ed3a3ea6ff318ae189a6b61a6794987a862a91a33c01efc0ff" - }, - { - "nodeType": "0x02", - "key": "0x43c107c6edad0cca44d791162832d32e5fad23178b37d45ec2017149e7acda81", - "value": "0x3516c23a44ab6de63bbd454704f09a717383dce4e459ab35f3a53b239bf0f566", - "debugDepth": "0x02", - "debugHash": "0xfc98fc68828d4feda23c9ac1c97c0a31336f1d94d00011842712ce6255c6995e" - }, - { - "nodeType": "0x02", - "key": "0x8f9adec5cb578252b963715eae4196b57071afc58a5f749238e1876d4753542d", - "value": "0x22c0d3ef22b9ed50f2672560a3e726e83491393517ac97355dd089bfc78bcd9d", - "debugDepth": "0x02", - "debugHash": "0x815172dd6942459473fffd58386c8ff504290ecbd967935fd2e0398c8827c06c" - }, - { - "nodeType": "0x00", - "mask": "0x9020", - "debugDepth": "0x01", - "debugHash": "0x4aa86b67a3984f79a22189ecd97edc9e7f00bebcc92b5d51804f5ab839f3e7c3" - }, - { - "nodeType": "0x00", - "mask": "0x8800", - "debugDepth": "0x02", - "debugHash": "0x6bc65f0a2dfaa64a632c12bdc64d102db5e5952a328a8041bd9c44e1c79db946" - }, - { - "nodeType": "0x02", - "key": "0x539cae94ac4ff471403ce075d5ce42275b884a5bed28b3232130b80aa239ff77", - "value": "0x87fafb93438a7a6cbebc86bf24a0dad6939a2541b4ee560aa86a505deae720ec", - "debugDepth": "0x03", - "debugHash": "0x0c85879a4f3135c00ce756d715d3d7f139a09775bcaf4b01a2a76bb9aeb39faa" - }, - { - "nodeType": "0x02", - "key": "0x0cad172129e50a01480890661fdbbc2d5906d9b29534b6554a193968f421e5b7", - "value": "0xd6438d5754894c27dcd577f3cf1298377f42a3a49c0adca52cf730eca4625351", - "debugDepth": "0x03", - "debugHash": "0x32ca4aaf6593ce0b7c22037413094a31612a87fd530ffc5218179e25ac92b373" - }, - { - "nodeType": "0x00", - "mask": "0x0022", - "debugDepth": "0x02", - "debugHash": "0x5132af8d14c7a19fb6c0cdee9e19dcc08c7b695da902234fe4227932b7608549" - }, - { - "nodeType": "0x02", - "key": "0x944730c186c1d634156887a6e14dd63f7d8971f1bdb57e7621a06841fffbf0c5", - "value": "0x87657fc0d0ead65375bc7d2413f9ad8c60b00fcd60a2f5959c57554ff77f799d", - "debugDepth": "0x03", - "debugHash": "0x4782d8ca8fd8ad17cc3dc4d8112801badb601fd9607d21a9f9b65e88cf14133a" - }, - { - "nodeType": "0x02", - "key": "0x337ed06f8a56ce8a4e29692f4be651d858219e744cbd115dfb5ba84ca9488d20", - "value": "0x9cd1243b7f0fa5e45f722cea57b947991144abdfbc27fc20a75a6ed63e1fb65c", - "debugDepth": "0x03", - "debugHash": "0x32ad0b37f3b580c0abb16c5085f87fcc388be138654d809fa5e268be22a725da" - }, - { - "nodeType": "0x02", - "key": "0xbbd8afed86ae128f33478894d9adc0106cc5e6588be5e19d4c85bd4d2a5553ea", - "value": "0x6ea0f9c09d4caf0f93faa4566bf692245e8b1bdb66dfa51e166c26b46c6b08f4", - "debugDepth": "0x02", - "debugHash": "0x6a585b40661a694d438d190264675865ad4cc3b3b2c1a9280f616ca134021e6c" - }, - { - "nodeType": "0x00", - "mask": "0x0081", - "debugDepth": "0x01", - "debugHash": "0x9c45e562911ee3a9f769b1ee5eb92db3fb4cecf9d287eb2e872ad2d37040a76c" - }, - { - "nodeType": "0x02", - "key": "0x301b6753acd023fa87789082ea37843c9b708fa3467d9b081adbc30ab53a0d2c", - "value": "0x7df722126f1eb6cd43ca3bc47f7bcfca2ac2a01c454a6aa579980abe73351981", - "debugDepth": "0x02", - "debugHash": "0x3cf881fb8e64fbc096596a484cd09fd61b5e205429e8b7a34f2c2904c6d8dc45" - }, - { - "nodeType": "0x02", - "key": "0x4851420eab0abecc28b80f7aa3777907546547ed171a03e7534db934c9ee92ae", - "value": "0x459d9cbe5c4b4a2f443830133c79bf14a6f07b2153247972efa47b56f9bf5d8e", - "debugDepth": "0x02", - "debugHash": "0xd0b0ca5d30d6aecef6dc655534788600c1750ec3adc52c091576c7abe5f3904f" - }, - { - "nodeType": "0x02", - "key": "0xe4e25947e3a9c074c5b47c693bdb03966fb7df5a33a812bb8da731dc11b0a121", - "value": "0xc788351d1b350d85552a3b1bc989a40f10c385b77307cafc26a13320ec411e92", - "debugDepth": "0x01", - "debugHash": "0x988064ee2f40e5c1e520732ac20e51712fab3b041a9dfc71f87ba8bef80dcdd1" - }, - { - "nodeType": "0x00", - "mask": "0x0011", - "debugDepth": "0x01", - "debugHash": "0x4498156ea906faf73e5132a73e74cb9cde2fff03e8cd86069b95dd5f42b8d6d4" - }, - { - "nodeType": "0x02", - "key": "0xc4376d44ab6b2c38471d184f7803434cb44650fa7ad4152724bd6561864c3863", - "value": "0x993029df87b12dd7c7fc6292766f2b6df5cd96fda42cd92045046455efba6d6e", - "debugDepth": "0x02", - "debugHash": "0x5c3d0102595df82f808dedcea5bc02a77f078c68ca97dd02f61c0a0a5634cdbe" - }, - { - "nodeType": "0x02", - "key": "0x204b76f209ae5b0098311413b904cea5b7b32702c283155a4edefaf8e1eb1602", - "value": "0x25d97fdae0d6e5761070256ab6044328ebf247d22303b931ad7a88195dab91f9", - "debugDepth": "0x02", - "debugHash": "0x61df40cb754b39322f7913cd56da1628a427ec0a6ad60c686c325d8719f21e15" - }, - { - "nodeType": "0x02", - "key": "0x6648da878741115864e632451648eb6729f34bc35c7d5f445f3bd15b223863f2", - "value": "0x259abc608abcc770db7cfcbeab7fbdeb9281701ff067c24c6318bf14ed036bf3", - "debugDepth": "0x01", - "debugHash": "0x09cd434250e24d183ecb7a614b87fcde327f3d5c00fd4e140fbe55fdb0a29ed8" - }, - { - "nodeType": "0x00", - "mask": "0x0060", - "debugDepth": "0x01", - "debugHash": "0xba9c1a9e67e141aaab4b435ed98b24bb5cb3e166082e8aa0978c97913dde9bc2" - }, - { - "nodeType": "0x02", - "key": "0x9a180778a4730e18fbd27a044ca8d90c77d62828c9e5c96e5c7222401b92651a", - "value": "0x2821736693bc1fa2b007746ed7c3462450a62bae380f07e15ea8bdcbb5af065b", - "debugDepth": "0x02", - "debugHash": "0xd50c274d94165e0e4bfdb3f6c2c04fab56124ca37e5dedbd92c1ea4616936349" - }, - { - "nodeType": "0x00", - "mask": "0x4040", - "debugDepth": "0x02", - "debugHash": "0x2978e37b6a12c5491993d1ef71c9b95e7f96320fccc3a003eabffe78b1c972fb" - }, - { - "nodeType": "0x02", - "key": "0x98697373eca06886dd0f3578c1d2631e887e089d7820e3fb63e31a939bd1436c", - "value": "0x1b622b61dbdc2cb042160e9ee57eb31c3be4737c3c24391e6f508bf1134cdd1c", - "debugDepth": "0x03", - "debugHash": "0xad3304c99b3af37f8505e9fbe7079e0188937f67965f1ef20027359aa3c9dec4" - }, - { - "nodeType": "0x02", - "key": "0x6f2f6e65462dcafb9b00327a7d151f07d7cabe15849292f861c8291369f80c4a", - "value": "0x39c90a27ca55128a14176702e33fa429b68e4caff2302792c325026de1f9ed95", - "debugDepth": "0x03", - "debugHash": "0x54a6b7d19f465e57b9ce745f1be10581fddf698f6be1088dd1eee397faa32f51" - } - ], - "debugDepth": "0x03", - "debugHash": "0x47047634cff13d79b01b2bbb2725ef5f5cbb01edc073139606620f7664fde7de" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x2597dda4860fc4c24a0a8a5d99b83842779933dc", - "balance": "0xbdacfcdcdda0accae8ed8ec5e8f7fca9afa38ee0febde8b6e3b4f2a7cbbdc2e5d5ffafa70f", - "nonce": "0xdcd6b79eb39ffff419", - "debugDepth": "0x03", - "debugHash": "0x2d165b2deb3c2f29c63ed2ed384100fd33a6988cb418f89fcb28c6ceaeb79b90" - }, - { - "nodeType": "0x00", - "mask": "0x8080", - "debugDepth": "0x01", - "debugHash": "0x3e3a044319e817b29b6269876cf3ad972478ef45be424eba43ecb24d1ad3a14c" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x3fac75bc4028066e43d06fe16174213be1190819", - "balance": "0xf2ee91aea693dc8491dcd492dc98bbd0c2dfe597b4da84f2f68cedd788ccb8e79eb5fb8305", - "nonce": "0xf08ce1c9d99789e5b501", - "codeType": "0x00", - "codeLen": "0x32", - "code": "0x8b9ccebdd2452e3e4e9964adc51e039db23221fba6ad8bc58f84fec8ee2556be43d7be6e87ca81f0cd38b33e768cb5673f8d", - "storage": [ - { - "nodeType": "0x00", - "mask": "0xBD57", - "debugDepth": "0x00", - "debugHash": "0xc2afa4ccf6735427fa478a46b702d9ab888e2d1c9e2e1fbddcaed934c372f2a1" - }, - { - "nodeType": "0x02", - "key": "0x4b57e0d452e49e2b5b2cd811c9468b0fc5a88fda00520f639e8cf6427e849fb4", - "value": "0x45c8db5bfa7c6ef55f4f42639fcd1524a575fedc44b4623ea3a61a8934f38665", - "debugDepth": "0x01", - "debugHash": "0xeb7046664f4fdbb63b029107cb0abcee6d800ffe207804d08e2a4134097c4478" - }, - { - "nodeType": "0x00", - "mask": "0x8040", - "debugDepth": "0x01", - "debugHash": "0x6bcd3e0bf6d884703077a640cb4d587fa07032f6d417b40d8b99b5005df80346" - }, - { - "nodeType": "0x02", - "key": "0x3dd8bdfc67688bca1ecaebab54c52b1b3b0a1ae6d852beb31322bc3388e5b62d", - "value": "0xa7f93e35aaf2f9494e22a9b1637ef51db2c7417a6c14127247e46125c77472ee", - "debugDepth": "0x02", - "debugHash": "0xe458c69a5c97866548c606a94bea82061f400cc7cd20fcf2ff45e95c081c2732" - }, - { - "nodeType": "0x02", - "key": "0x49761c88ce82a492a34420435ca73b01df982ff0564bcfeae4822d37052a0530", - "value": "0xc9eb375193ef6587c9fbb369767adefb19b6b36a1cf86a1901a93543bb1469e5", - "debugDepth": "0x02", - "debugHash": "0xd43f6fca4db1638c43723705ba5e07e0673e42b3551da4cef5352e04a3f0693a" - }, - { - "nodeType": "0x02", - "key": "0x3ed85442fb984596163d4fa27e319dd0b6216006b887b7ff25d4af2e99c0b447", - "value": "0xba0d4c3757ea604ee7c4fddcb25a952817d8c42190ff8abd8a8380a1fcd16510", - "debugDepth": "0x01", - "debugHash": "0xfbe4604eec918be848e2f7aae9421a97aaffe134e9690345abea82130fb616e0" - }, - { - "nodeType": "0x00", - "mask": "0x8180", - "debugDepth": "0x01", - "debugHash": "0xd70daf6f58f1751f08d2959d46013219d793ebe6182d0134cb0427d6af735b60" - }, - { - "nodeType": "0x02", - "key": "0xb7c7085fc989b33a0129d28196c657167ef615062c39af0be601d6e8484ccf00", - "value": "0xa5d3a79d1e3531b9305451073f79b34b9bab08f6a136630a3fd9daeaf6e0448c", - "debugDepth": "0x02", - "debugHash": "0xd4671bb398b7b381e79681bf0d900f9f8d6745ec6bf0479dd4033e5c94fc22cc" - }, - { - "nodeType": "0x02", - "key": "0x90e63886738ca511737ef4b0a867b4b85c722c4e76e6681df2791b0ba68f175c", - "value": "0x343674ea2b1f757cfc7794f3f4f80ec0dcd05bf80a13d84367e82056006c1006", - "debugDepth": "0x02", - "debugHash": "0x49e7c22b8a6fce9cadd3f81dc8759ee9079ecdf0aac5d8d012939e8da28cb4c8" - }, - { - "nodeType": "0x02", - "key": "0xafcfbfcba091734d117644c8670ff0312b5f21d83cbe7a09ed19b02d13935bb0", - "value": "0x23f516988f089d7ed1c0465609e8f3983f30b05a980e1b449871bcb007cd5576", - "debugDepth": "0x02", - "debugHash": "0xcdb38282ae0d4c0c8120feecdc812bdf43a79ac5ae7461da3b290b2fda8b68e0" - }, - { - "nodeType": "0x00", - "mask": "0x1204", - "debugDepth": "0x01", - "debugHash": "0x6c36e1765733bad741319348cafbec082a7362b98fcde5ef310fdf9b95719576" - }, - { - "nodeType": "0x02", - "key": "0x233e45f75592f3dc2ba54a85873ae18832ea016bbd3097f905e2eb51fd538d68", - "value": "0xdde593be8a4675793288f2a5bda861df14dde9e067f83857f2fac87b5360c733", - "debugDepth": "0x02", - "debugHash": "0x8489dc36570d7f439c6d08d8e96a7c7b92a14e177ba3e77a3990bcac64d3496a" - }, - { - "nodeType": "0x02", - "key": "0x3a136bfe640490bfa49958cfb03d8c41cfc7ac76acd54c864690995c8cdf99c5", - "value": "0x3332308265aa8bc0dca59da1c973e7fb06882eeb3bd046c3df4f5a13c3131dfb", - "debugDepth": "0x02", - "debugHash": "0x4e6d5ea9e570ef97506aae9c66d329fd6539e343e482677abe207e69c5fb4000" - }, - { - "nodeType": "0x00", - "mask": "0x0006", - "debugDepth": "0x02", - "debugHash": "0xfc0bdf013c235c261a7b3ed82d79327c56262571285b70404a3adc339d79b6c5" - }, - { - "nodeType": "0x02", - "key": "0x98dda7ec6bc4953e02d0dc6657054c66755016328bae139bbf00b835f3c2712d", - "value": "0x0b4d1610b08495442f51aa246d0092989fcab039882f492e74cecc1a9b350473", - "debugDepth": "0x03", - "debugHash": "0xae36879dc4addd32a5febeb26ff48ff8e0522f5e0f01ccad8be7dbce15136c49" - }, - { - "nodeType": "0x02", - "key": "0xaf7489aacb9260c9f98a3553b9479984c88cbcfcdf364b794094e579abb8cb3d", - "value": "0x699fda1f11c79b22f279b1a447ae6d4ba7814aa85d597757fb0015fed3e86e3c", - "debugDepth": "0x03", - "debugHash": "0x57d839164591b4634f0684061e0bfbd4be43b5ae8ce8bfffc7e749d9c8a41d2d" - }, - { - "nodeType": "0x00", - "mask": "0x2008", - "debugDepth": "0x01", - "debugHash": "0xe835f7553c82e76e8ba55d811e9972290393b7a59bd2c3fc312259f00ac0c424" - }, - { - "nodeType": "0x02", - "key": "0x6f815566e3f2fc2537e809a71a78b19c30fcf5ad1ba3215ab388caf7b58460c0", - "value": "0xe9dbb8ab47426e446be73c5ae10ec93b2af282e0514e35b4c4b8f292a25fcfe2", - "debugDepth": "0x02", - "debugHash": "0xa6bdae61c43c09f3301f8b848e6c1a4994851d4fa685186ebc29100bcc4545c5" - }, - { - "nodeType": "0x02", - "key": "0x042b0a40edad525e3f22dc7cc05287a534b4e00d0153d967b7f259f87bf2c14e", - "value": "0xa6011a44311c2b09fe95f99aa2984509f4d31a99dfad4cf15056fb5facdb9922", - "debugDepth": "0x02", - "debugHash": "0xa3074445ba6fa47dbd8969d12d3cf7a41cc2534ae454398f5cbd56da290f66c4" - }, - { - "nodeType": "0x00", - "mask": "0x0011", - "debugDepth": "0x01", - "debugHash": "0xad112195c20a2cdbe95bf6bb070daddf54a9bea07a86c113c0b682fadaf8cb8a" - }, - { - "nodeType": "0x01", - "nibblesLen": "0x01", - "nibbles": "0xc0", - "debugDepth": "0x02", - "debugHash": "0xc12dc44c56e8695a8ff7c13b3e8bf5c8970ab399fb3fdbf552a6ecb54af4ab12" - }, - { - "nodeType": "0x00", - "mask": "0x1010", - "debugDepth": "0x03", - "debugHash": "0x23c4c04c45070dc15f4c3c34e871fe272de67d5e56fee40ec8330bc152c910f0" - }, - { - "nodeType": "0x02", - "key": "0x602301a06e0111164306f4cd24c3cd538a4f89779a1a218852cac9a3308a3981", - "value": "0xc4f625e8ed95e791b0f81243441f995f4fe9c53db4e83ab843270483ed7dc704", - "debugDepth": "0x04", - "debugHash": "0xe8839c26bb300893b746f3895e23b98cdfac30cf886035a2ded7c76b05288ee5" - }, - { - "nodeType": "0x02", - "key": "0x726054e67510b86aca3ef1652f83b10456b78b41892492870115b18cc267c5d3", - "value": "0xd658aa0521fa9fc66b83831708ea383d57f72a98831f9d22857c0288cddcd245", - "debugDepth": "0x04", - "debugHash": "0x14bd306f1e6ed1963a7818e96a033770e35048ebce0d64fd3de155c2d8bc4500" - }, - { - "nodeType": "0x02", - "key": "0x50872bf19bdc2abc183f5f4948d7435a67bba4403599409a07ee10a339d6065c", - "value": "0xd86b7f1d20c88033da75973f0d0ccce2e4e03d094ee214d17abb71bf637afb9d", - "debugDepth": "0x02", - "debugHash": "0xe6b4ddfa7a2596d2e3d36405a0ecfb58ee85f58e817235a62eec25166385fbb7" - }, - { - "nodeType": "0x00", - "mask": "0x8400", - "debugDepth": "0x01", - "debugHash": "0x28acb4395faad13a3e1f5367ff39c0b0cf656c659e356edcd304953cc61dc749" - }, - { - "nodeType": "0x02", - "key": "0xd6091936b5f39c4f529cbe8bef93aebd2da0d9b5bb2a51029e3141fe50d23827", - "value": "0xf686411c840353026deedfadc369b2368465d246c02d11a50f7fd81639e47486", - "debugDepth": "0x02", - "debugHash": "0xead1b0c4c8ec3cb365cba67aa2a920c1efc1e0872e33a97e37ea7d4f8ee17c5d" - }, - { - "nodeType": "0x00", - "mask": "0x0C00", - "debugDepth": "0x02", - "debugHash": "0x60dfbbc82e8aeb1f3ffc8a1813158546a8aac78468b8830f7b743d4726b49052" - }, - { - "nodeType": "0x02", - "key": "0xf190d501ce347ebc2e745bdaacc884d51aacd1e61a3cf00eefbd52f1a363be97", - "value": "0xea3c467feffc49e6e12c17e49a6e272e8b5d1b0682857f3b8672ab9b0f7c0804", - "debugDepth": "0x03", - "debugHash": "0x2aee116f3cf8ec39c8409c1e06db7cfca9e5a81e5b5169f87f524b180e3a2279" - }, - { - "nodeType": "0x02", - "key": "0x605ae25705e80180d803a8bbd5e65076960d7aacf6c7afc9b4676be86b29b4dd", - "value": "0xd5012ee4d7d83801dc2fb0dc4da6810376964737710908bfaf225aa13a19e814", - "debugDepth": "0x03", - "debugHash": "0xd45d0aff5c1910e299727959b75722446d32c7e6bc718040efb47e6e4516ec20" - }, - { - "nodeType": "0x00", - "mask": "0x1303", - "debugDepth": "0x01", - "debugHash": "0x63841fe03c110250944a2fccfe971b0e79803deedc48900e6bb78f0275d2b85f" - }, - { - "nodeType": "0x02", - "key": "0xccfe872511d085ca36a1a69f84a6be07fb17615cd3269a7226734b8c15d7b29e", - "value": "0x32c2bbdea955afb03c09f6bd76bb564e01020875962a99638ea43b141cbff82c", - "debugDepth": "0x02", - "debugHash": "0x33ae21ec7ce4d42d3f215ee18de61b309622b7913a6d75ea28252630523e5bbb" - }, - { - "nodeType": "0x02", - "key": "0x6c0fc326f35962376e283796c94f7501c267664edbdec17fb65c7025e3955a18", - "value": "0xa6b74e12eeefc76f6820149972b98560bff8ede2e5d14e494a6bf8103b075d35", - "debugDepth": "0x02", - "debugHash": "0x7556ac6a3bb5f76f3588b5e5daaed4d47dfbb8530fd3819b77b1533411d292aa" - }, - { - "nodeType": "0x02", - "key": "0x570eafac221ca747275c4603c23985a41667d260557463ea19ece6dd45c6dfbb", - "value": "0x341826c443a7d23f8a99b7bed0526ab09f50be0b8f964ae06bae9d5550ec60d1", - "debugDepth": "0x02", - "debugHash": "0xa0cc4ade1e5cde04de58e22582dd6345d5d65a266dcd0f9a4f893fb00666a432" - }, - { - "nodeType": "0x02", - "key": "0xfc5e001d055178e2d0ec53654c7f7fd335a581a5bc0e2884da9f3a39d45f0d2e", - "value": "0x0f30e9d1382b566be2e47ab87f06099e3ff3f59c3a319da7612b3ef83399be13", - "debugDepth": "0x02", - "debugHash": "0x23c6710f55ec69a68208e4fc14319e7edc71921183aed51a21112910d889fe1e" - }, - { - "nodeType": "0x02", - "key": "0xb6b25ddf38a52ce25715d3e293640b4c5d78aba5aa5d377635df89f214906062", - "value": "0xb1d8911906ef61dba25526ae28fa617d675dde7d5f325c93f1d088e7acd7a32c", - "debugDepth": "0x02", - "debugHash": "0xd7962e9bd4c08455b28329fb09498c6aa521a7430fb32325b9788ce2b87139a9" - }, - { - "nodeType": "0x00", - "mask": "0x4801", - "debugDepth": "0x01", - "debugHash": "0x07e035d99f2e8a91c47cdde57815fb3acd2bb4e85a114abc411323564d52136d" - }, - { - "nodeType": "0x02", - "key": "0xfa00edb4216a436f98445319229bb81b0882cc5cae213dcc248cae60e16d71e0", - "value": "0xe9d7c8102a4bfa19e54538ee099daf62963df5458cc16be56390f8a3ecbee26a", - "debugDepth": "0x02", - "debugHash": "0x27cbaa649c52919d483822eb5fdf8f2bebf59d7846d8e13ea78742e75b6e8ee8" - }, - { - "nodeType": "0x02", - "key": "0x5449f8d7dacfd456685c9d718e5d6a03f270e618e0411695b3218b79ab2bd08d", - "value": "0xf3c7a06e4fa5c8ad1b62e8942229f1c9033c6fb7a2f934d7a9b0da8d66322980", - "debugDepth": "0x02", - "debugHash": "0xe04cf3b68a606d7f321e2ca0aecd006adc3ee727fb37b934c11da3d230f3799b" - }, - { - "nodeType": "0x01", - "nibblesLen": "0x01", - "nibbles": "0x20", - "debugDepth": "0x02", - "debugHash": "0x99ca6174d47f7c446be815a54661c6d4abee2aae6ab2cda787ddb38c7730e5aa" - }, - { - "nodeType": "0x00", - "mask": "0x2100", - "debugDepth": "0x03", - "debugHash": "0x674b60b9871cb8b94f382af3b9e35eb22baf3e1967a162b64cf047570d47cab0" - }, - { - "nodeType": "0x02", - "key": "0x9a86923d6d2ec732e48df130e398719951a94012f573f0f452672f0cd12e05f1", - "value": "0xd2074bfe0f7dc2e0409b2bd655544fa49c86fc1ea5f5c6a605ee7ace053422a5", - "debugDepth": "0x04", - "debugHash": "0x9d7a7c26c18092801f1a41d6fdc017ce098642a4557ab9fa3984d211bc9f6109" - }, - { - "nodeType": "0x02", - "key": "0x59b2c888e6c228594073da49bdd0ebddfef3e60c7233430c0715a6001c8df3eb", - "value": "0xdc5b2afbaadcba7d606d059e3d11b6b0a91853b483a43cd8b36525520ed24759", - "debugDepth": "0x04", - "debugHash": "0xc09c909eebd69cff529ab09d2e6499efb081b0635af4cbcdba7a7f56c7f03279" - }, - { - "nodeType": "0x00", - "mask": "0x1200", - "debugDepth": "0x01", - "debugHash": "0x4fa923802fc74f012c4330ba476cc682448a765ea5e202ba4e4a07dd6a836490" - }, - { - "nodeType": "0x02", - "key": "0xf1482ab73f05f5fe3ca43e679c1c99d9a93bc8c78b0f86a0806454703a7a93df", - "value": "0x2fa84cfa01c6c8d4a27f2b980ce3882f99e89236a0434fcce492753cf698bc9d", - "debugDepth": "0x02", - "debugHash": "0x68829946d2b87f8428d296b6856ab2d6f353ad25a5a4ab224f6d7a97eadb0fd3" - }, - { - "nodeType": "0x02", - "key": "0x2f033ec23ad18d42bfbf03bfa2e7f88a95d742bb56fef99ddeff18371ad447ce", - "value": "0xb8a44976ec8ea0473f03bc96f34bda90cfbae249fd98472b3aeb53985764d4c2", - "debugDepth": "0x02", - "debugHash": "0x5764758d7eba981f774a0e4decdb83e5c5c4ea5076ed0e5989c3a67a56b9577b" - } - ], - "debugDepth": "0x02", - "debugHash": "0x6853fa43bd77cab65d94d892257200c878da5425786ec4e5212535635203f3f0" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x93ac420a70f0f7e34d9cfdd9e79de8d0125f4c3e", - "balance": "0xa2b8cfa894b78592f785cada80aef3fea787a9fef8ffd6ccebbcfa9eeccf86bfdbb5a7db03", - "nonce": "0xd6aa9e85c4c7df8b04", - "codeType": "0x01", - "codeLen": "0x15", - "codeHash": { - "nodeType": "0x03", - "data": "0x23498601ddd86ed9ff9dba5e3cb583dc45233d3788d2264537136284e347cea4" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x02", - "debugHash": "0x058f08d41559addb2fef8ea1d7a7348413129ca874ff6fa2dbfbc5cb0dfcde0d" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x62cf6597d7a4467b8882612f35f9ee5dc64cb1d4", - "balance": "0xa1ebb7fe89d79fc8d4c9a1fe86a0f2adeef7ffb3a8ade7b594de8fafd8ebd59495c9cf8b04", - "nonce": "0x87d6eda4a6d6d0c2a101", - "debugDepth": "0x01", - "debugHash": "0xa6c68ae3207032d9803e400141716d97d30c6dff75593a434189b7536236e825" - }, - { - "nodeType": "0x00", - "mask": "0x0084", - "debugDepth": "0x01", - "debugHash": "0x8f0d93b188a4b51b116b76a188b977589f487f76e923ad36ead822f2a4302413" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xc5a49553156ece311959c6b5f3fbb07e420189ee", - "balance": "0xd092fab2aa8dbeb0b1ede7ddc8ace3cfe9c7c1a39aea9cd8b5cfe181d9b99aafe4af93e007", - "nonce": "0x92a4b7be9fe28dbe3c", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x00", - "mask": "0xFFF7", - "debugDepth": "0x00", - "debugHash": "0x52c94b996d636843389290cba201c7caef34ff5835eefdad7375c75db71147ca" - }, - { - "nodeType": "0x00", - "mask": "0x1040", - "debugDepth": "0x01", - "debugHash": "0x23e4da5f42ed0e09400b1c774b682883ebd02e64829001778d997ce409eababb" - }, - { - "nodeType": "0x02", - "key": "0x556c437cb0eee0b0210a2620aad2e1e4fa322d13c2331391cfa27c034222ce73", - "value": "0x3801660b300fa36bb9fa9103b71f942be840712e042545890e0b9c12b0a0afab", - "debugDepth": "0x02", - "debugHash": "0x47646ef667fdaa125eb6e397dfdef8bf8e0bf574332a292933179af361c7a3d4" - }, - { - "nodeType": "0x02", - "key": "0x8a343063ba787069993694edd2148fbe56def7df520b64de34b85fb5866b9621", - "value": "0x0d7f1df96908ce77b5480c70c2553be0b9852a1276a70f4e8f338a8c5b835874", - "debugDepth": "0x02", - "debugHash": "0x9235d4642790f338b246d6adb9f28a2e030b935d7c31587a17e0ee1cc8e11470" - }, - { - "nodeType": "0x00", - "mask": "0x1200", - "debugDepth": "0x01", - "debugHash": "0x5d4e8334c78099d747ce3088bab068bb1788e83f86cfd06ca6738b0f7e67117b" - }, - { - "nodeType": "0x02", - "key": "0x3df420e49734217697dc35ebee0ed14327d18f4b0407a434caacc2a49a3da142", - "value": "0xc3ba9ae848c8d23584a983c3e3f4d8b98f90d78c82249d9894029f8f364ece46", - "debugDepth": "0x02", - "debugHash": "0xd3b05ba8463d25f3a52c172cf26ab4c3669e1c9108bbfe61e32e56c7fdd4a6dc" - }, - { - "nodeType": "0x02", - "key": "0x93bad03ae2990643e5ca4c83541679374feb56da8dc716824e148a480fceee29", - "value": "0x107e2d9a1ae05f4bd6e36974079819255480f1eba030f6b72b6fda1a3d54ea68", - "debugDepth": "0x02", - "debugHash": "0xaf8529b5e6d642a09dc84d81c44e37b0e8fc0385b9de0bb7828d341eda5ebafe" - }, - { - "nodeType": "0x00", - "mask": "0x2020", - "debugDepth": "0x01", - "debugHash": "0xe42ab96b8fce2d1e0ce35a25a6eadd0d19faecef2ff041970543038e33078123" - }, - { - "nodeType": "0x02", - "key": "0x030c29a9065d622527745be654416fffb0a73a7d91351527a13ba31926fb6028", - "value": "0x493c045717e0e36aaabbb09874a97e9ceb77421b3b731bcadcc6223f42c6b605", - "debugDepth": "0x02", - "debugHash": "0x271e5f2a9e369549404ff1b802ea494ebe95efae4b7d0c908a98f69f4badba11" - }, - { - "nodeType": "0x02", - "key": "0x2ecd7d012f309574c6365dae1c76eaa57e21ebf4ee6433cf09c5fc0d56cae170", - "value": "0xb97ffe08662da2139733a93d31adee82ec661eaa89cd955d743da643757a0be6", - "debugDepth": "0x02", - "debugHash": "0x3454c95c505f59ac0b642fe9fddfac045a643803f0132a157d8be90e49e95cab" - }, - { - "nodeType": "0x00", - "mask": "0x1200", - "debugDepth": "0x01", - "debugHash": "0x60b4cfabb1f5b99401fd8ae6c96c1bb872edbb203ad4e74cbc783343d55cd4db" - }, - { - "nodeType": "0x02", - "key": "0xc5d8f23e36ceb7c05d2c5ac1ada710879aa018f15f4099d43589f0f31beb2235", - "value": "0x291dbb15110aa0a9024ebde83bf504cbde110ee0b1d078cb8480fc09258e4780", - "debugDepth": "0x02", - "debugHash": "0x60ed9700c72643c49ae0b99efd844f0bcaab7d1f3a84ccc9a749a2020c99695a" - }, - { - "nodeType": "0x02", - "key": "0xe93a93db85dbb67d5cd5a07dce14aaecc3e27c830dcb3388a27b19a95fd6f7e4", - "value": "0x63af2a60c310da3ce5ed366d573bb66060ac773657af9b3d5a705d5ed8ae1084", - "debugDepth": "0x02", - "debugHash": "0x657d9fd7d4cebc4ba68b7d1de19e96e29cd5f6dd3eb62d59f252f291d297d5c5" - }, - { - "nodeType": "0x00", - "mask": "0x4200", - "debugDepth": "0x01", - "debugHash": "0x4ecfc1bd8591c22f94587c35ad06c22acc8e7f4ee398f49b0f404c5e28ee9ee0" - }, - { - "nodeType": "0x02", - "key": "0x445510b8da514c13ad510a4a6ec78a7b413ac02904282bfb9029b14a2c9cb78d", - "value": "0x23e51768de96bb83559606257a99afcd7698c0111dd760a205ebe5530f65ee91", - "debugDepth": "0x02", - "debugHash": "0x447eafed2d0f20f33deb556c52b4d20b97eee3ae796c94ac9927fd15a9e55d2c" - }, - { - "nodeType": "0x02", - "key": "0x5889d84eeb69807ae78b85f3cc5ba936e5a7cbaa9e44c1333e10ca09b2f65ea2", - "value": "0xa0bac9af8e570dea3ee0bc98470944a12cfdf8ee6388102908d7caf767dfaddd", - "debugDepth": "0x02", - "debugHash": "0xf52e5691e89cff47de5301a3d28ae798172997ee30c1c7c49990fa7250d9c554" - }, - { - "nodeType": "0x00", - "mask": "0x4010", - "debugDepth": "0x01", - "debugHash": "0x6c3d339e25abb5f60e775526badfbc653e3b13bfce7cf698601e354af02a9e6c" - }, - { - "nodeType": "0x02", - "key": "0xbc97dc92d13f3648c9948adb4c4611d99b3a55c6f0c886a17f16cad29eda6751", - "value": "0xdeb8888ff7315ad3da56793a446f5de9d2fe0921c609eaddf4c7bde094ef9998", - "debugDepth": "0x02", - "debugHash": "0x5c51e97ad2973d292151c578fc558c4b08736351e0dfc5c470e2dcb4c02491e6" - }, - { - "nodeType": "0x02", - "key": "0x6258fc2a1da5836059434d17954464f9ed1ef2c83d2e71c0ddb3dee0e5de28a3", - "value": "0xd18816b14916d9f5e282be0df89a807d106bace29cc7505ce470de1c58664111", - "debugDepth": "0x02", - "debugHash": "0xcc815895e89ec92398b4f7cf4d60c7894bddbacc5b459840ebd71c11dbf17579" - }, - { - "nodeType": "0x00", - "mask": "0x0804", - "debugDepth": "0x01", - "debugHash": "0x412202952e391a616a6a275a38f04b1072fa59e87ad516dff23cea843d58ae95" - }, - { - "nodeType": "0x02", - "key": "0x328b2e9bbd636aa0d821cf6e8d2df310d19aa7812b88a101bf07c1c25b7bdea7", - "value": "0xea2d064e7b11d3f6c101fc62b6b5fc0222873ca532ba4463b428c9baad9d2fb5", - "debugDepth": "0x02", - "debugHash": "0xcadb3f98fa232a25b83d6d7e2c860e480f1566c6afe27f61a962d094966ca313" - }, - { - "nodeType": "0x02", - "key": "0x7e60ab8971a3d13d6babd675c37887244473b144bde52e1f75a43008ceb42c9c", - "value": "0x29948af78c8412584f2d765a337f1127b78ab73dde84a718271e3e7834678b9f", - "debugDepth": "0x02", - "debugHash": "0xee1ccc5cad2c514924d8da95e03e5153c32c0b6880f7e8d8fa4bee14c01a9204" - }, - { - "nodeType": "0x00", - "mask": "0x8010", - "debugDepth": "0x01", - "debugHash": "0xa3fa88538b4b87bcfb34779a16796e6ab5f44ab3e63f9b8703c674e7de632e32" - }, - { - "nodeType": "0x00", - "mask": "0x0022", - "debugDepth": "0x02", - "debugHash": "0xbbc6c1ff637847fb19ad41e1aa0037602da3d88cdc003e085cf6b60b813bf16a" - }, - { - "nodeType": "0x02", - "key": "0x609dd3ea336044d0dd505ac2fe3a87ccb0047ee7d5e7cce5e309343343dd2163", - "value": "0x42bd6c877ae66ad6d7244a713406b89df69f74f267d5567f11acce2f0eba75b0", - "debugDepth": "0x03", - "debugHash": "0x15dcbc35635dd4d7d9499de269943cbbcfd569ba63b2b4604352f96db5aabda8" - }, - { - "nodeType": "0x02", - "key": "0x3b139a74e9deff6791b0573700577b7359787054cc641d95aacfc91507206d93", - "value": "0xf4a752b947fcb47e15574238827ecceb3e20e548426408621df192408ebeb598", - "debugDepth": "0x03", - "debugHash": "0x936d79e8426b2c1d0f64b507241093b5431f4c96206893328fb2db79f0369276" - }, - { - "nodeType": "0x02", - "key": "0x4e777f3810ed5dbbdfc8f04e9fe17c75c692f4ac2289e79aad260ef82b48df54", - "value": "0x73e376f4fe0eb26edc1571f8cca455c43f970350bf7a4214e8fa001ae1520013", - "debugDepth": "0x02", - "debugHash": "0x411da6c68346d0c2de04fd1ca910261684464e2205a1183238611d3fe74c29ac" - }, - { - "nodeType": "0x00", - "mask": "0x0900", - "debugDepth": "0x01", - "debugHash": "0xb37c0fc3f749cd08f20e66cb02845115883dcab2252888126f343752e02d87b8" - }, - { - "nodeType": "0x02", - "key": "0xfad8ee6683bcc0ebf7972f1e813b525dddcae90472f30f030ec09af8ae541b03", - "value": "0xe4fdce6ebfd027b569e0ed6dbbf930655cca3c11985d1894ec223282b2d85ea3", - "debugDepth": "0x02", - "debugHash": "0xdd7305fd397131dafd36feda7ee3fb88c332c464a12aff47ac5b1100d47a314b" - }, - { - "nodeType": "0x02", - "key": "0xe5f269a785b4e7289d3a2f9c89c4f5057aa579647fab5b2a6b4ac8dc08f9568d", - "value": "0xff68ce70ce1f4b58eb4f3dc6a46f940e38eac1d8fb3df6dc3fb20d34619d6591", - "debugDepth": "0x02", - "debugHash": "0xbee86fd97146ebd318c657c3adbc2ff3000d82232a347b76b276cbc11edc3a2a" - }, - { - "nodeType": "0x00", - "mask": "0x1040", - "debugDepth": "0x01", - "debugHash": "0xe0ac3891250ee916d5d41bc2d5a4e00cbcd4d3325cf92c9a43c2e6fdf42cd1de" - }, - { - "nodeType": "0x02", - "key": "0x95981a2544b8ccec2a2e0bb1918ca79b101c08db7d6cbe1afbee65dab0183b40", - "value": "0x6a334b4524ec9cb1843d51dd4c65e54741d67f9e08a32bb55c9bd644351abf8d", - "debugDepth": "0x02", - "debugHash": "0x57f20971b274379d801757f191fa1aeb52143a625e39ff92a6e69ca5af832c0e" - }, - { - "nodeType": "0x02", - "key": "0xb6aa795601c6ff32c4f9506185ea22711ad1002928a0692b2ced3275c66fd06c", - "value": "0xe6ea43e8f203325e1352cf3f6024f871593d298f7db99e3476a1c1e8dacef09b", - "debugDepth": "0x02", - "debugHash": "0xb6d7efdf7ecbd6a43dd260170e81a7fc9ae26362625a5b42dd2f79c01c231891" - }, - { - "nodeType": "0x02", - "key": "0x9a393a45b2accf038a996f76f10b3063e657ff777ddf64e37aa38053a119af31", - "value": "0xeb3f3cc1d3a1f3dc44a4220173b4753c0cb68b8a92f52f89bb336026b8d54eec", - "debugDepth": "0x01", - "debugHash": "0xfb3bb78cdf73ce7239128480801b57bbfdb9c9ba0a6356088561fd5d92cc762e" - }, - { - "nodeType": "0x00", - "mask": "0x0015", - "debugDepth": "0x01", - "debugHash": "0xd3fcd8e642afb1396ce63a3f029ec2432ded07df6840c4d2b4d439ca6c110055" - }, - { - "nodeType": "0x02", - "key": "0x5d443fc797508570e87f2f8f1bd2539c5cd20f538e4560cf76c94d18e58b1631", - "value": "0x5dae754d585def96fc08cc01d33f8456ef1b5c219c98afa6588f4ea9850d0d4d", - "debugDepth": "0x02", - "debugHash": "0x58ac432235cb107b59af9b48f5eca858f70c3f581c377ecc605fa56932b70e33" - }, - { - "nodeType": "0x02", - "key": "0x1798aa38cbc7d30dbe9824d3665d64fc907330467f6a90f8ee76cf34ae7bf7df", - "value": "0x668acdf9d3032873717c69df8012af1fe3f306ae51d22f1c2bf7499295aa3765", - "debugDepth": "0x02", - "debugHash": "0x8cfe87a71a4348d25212d4d80789aa721d40f72f79e95605e0ee561c8db69491" - }, - { - "nodeType": "0x02", - "key": "0x9ec1d9b03bddd2b5040c68f8c94e8c73fd3cff8af166862388dc07d008d81935", - "value": "0xa12b366a2d71396da959e34631c67e5851559f62e7f425943581fe4fcd9aaac1", - "debugDepth": "0x02", - "debugHash": "0x82cd1a03e1bc527472fbf520fb93fe8a7d9ec46b465d59e9fb94f7e9a7c0b204" - }, - { - "nodeType": "0x02", - "key": "0x89919935ebb3d694bd69bc30da7a8a8becf7d5a35912c5fbee58ab7bc5536cec", - "value": "0x1cf1d98d981715961b44ec0f167eb4825618922a1795f4da376dc220e3918c3c", - "debugDepth": "0x01", - "debugHash": "0x42c99ad11281fe1ccde8837c4c7d6452026587f4909910af58d083bac115c87e" - }, - { - "nodeType": "0x00", - "mask": "0x000A", - "debugDepth": "0x01", - "debugHash": "0x2eb2a2aa94468a29a39c4a408b4bfd9b9b8dedbc0dd72a0d72262c7cd46e0018" - }, - { - "nodeType": "0x02", - "key": "0x3fa6e15f5d2182f3408d97548194606067a090be346cfe88e33a332d757e4687", - "value": "0x9c8f2af7808d8b9aa4e832417704c5d58617dc4e7b9fabf1818a8f20ce80100a", - "debugDepth": "0x02", - "debugHash": "0x8f8066cc0a1362e3bf3e8caf9ce1c809ddb415101e174f7a8212efc510f5ae7f" - }, - { - "nodeType": "0x02", - "key": "0xc43407a54c2b3260059d20e8127842cab538675448802943aa88e958fe3cf399", - "value": "0x2fdf6c0dd7abd266485dcff82a87d456b4da3c8898d7e7c4fc77d799059d5583", - "debugDepth": "0x02", - "debugHash": "0xbcd2f2d79f409b89256d487941fd254a6cad9effdfc7e41d04d7d760b78be131" - }, - { - "nodeType": "0x00", - "mask": "0x1010", - "debugDepth": "0x01", - "debugHash": "0x2430ec91482074356179531c4143754aa7a1e3507b19e061a4182567e36749df" - }, - { - "nodeType": "0x02", - "key": "0x9cd2c647f4b55a52237256c0c430b024159035b52af3c7a1191b97ed2fa26da2", - "value": "0x7531b1d22ea358805e8251d0582a0e6710782d8ab12397548026850d5e4a75a5", - "debugDepth": "0x02", - "debugHash": "0x207ebf03ac9c4863cd98f95b652c0e2bb3e17638cc87fc2c19131341562b9cff" - }, - { - "nodeType": "0x02", - "key": "0x64c025ac79b7c6152cc2974c451d083058b0fab4e9637e2ffb0721124426676e", - "value": "0xbaa0c25b2795ffa5ef7d0d583fbfbc07bdd74438370df538865a944f7ada47be", - "debugDepth": "0x02", - "debugHash": "0x614f00874b3f78e933146da6ec871e72dd6597f887f57e07ae54418269fc1bda" - } - ], - "debugDepth": "0x02", - "debugHash": "0xc2799f81a7c06b0b68a9863d72381ca43a2cd6d508d7543434c9e45110446ea2" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x03aecb7651ed1438e4a843b689a02b263b7ea4bb", - "balance": "0xf8e890dae8efa2f199b0cada9c81e9abe3db92ddc887b8c1e4f9a1e3bab599b3d7bb80b20d", - "nonce": "0xfebda7b5d4f0d9bf03", - "debugDepth": "0x02", - "debugHash": "0xbd6bad472a3d724b807b3130e3c28c0e783b4b70e32685a710a6d4766ffe1276" - }, - { - "nodeType": "0x00", - "mask": "0x0210", - "debugDepth": "0x01", - "debugHash": "0xb639ae534b54af3df7422d69b1e7c964f768d46ae838bf68746853f0107a26d1" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x7c72d706df495e340460dc6e3861d722fdfbfcc9", - "balance": "0xd4fe89dce99c81e4bef8f5cac0d789a2ff8bddb68894ed9394c0f1b4cfae87befea682910d", - "nonce": "0xc7c8d884c2bdb69dad01", - "codeType": "0x01", - "codeLen": "0x00", - "codeHash": { - "nodeType": "0x03", - "data": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x2d14f45d2e668d6166b155a1da89141de70fc73d6331fcca4ca6db6c4b6ab33e" - } - ], - "debugDepth": "0x02", - "debugHash": "0x0bcf55aaeb7ab6dbfec16496e6e10cfb4c7b1de975a403beabcb9f8a304b1ce1" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x5b0c9f2dc9e276044228585c70d77f1b1e54d2ae", - "balance": "0xeface3c384bffcbed7c097d48cd0bc9a84b8eb91c3f6cd93e5d6f6c08cffaf95d4d394db0a", - "nonce": "0x9dd7cba09dddfccd1f", - "codeType": "0x00", - "codeLen": "0x7c", - "code": "0x85cda91d26c9865833e9cfc0eee476fae47dfd56a90b0b2dffbcb5639bd67271642f5fa86ac23f0e4a7ae12bb86b3b9863393ffd1d198f1bb72680045e9ac1e6f7e686ccb3ed77227ddbef33f94398db5b19dbc8d9d8569d6d1ec1a7fa2205e62b2c5a470ae8620051c8097aec2e4d970661a5383984492c68f54f38", - "storage": [ - { - "nodeType": "0x03", - "data": "0x5fea6ce2a29a4301537822b7eb80a8f5c30cacd6d62208f22ca7ed92828cbb26" - } - ], - "debugDepth": "0x02", - "debugHash": "0x5b0598d510d849e774a6bb06d8c9d5e186522fd9c2cec97a9412f3fc25728e85" - }, - { - "nodeType": "0x00", - "mask": "0x1110", - "debugDepth": "0x01", - "debugHash": "0xf99e62f12a4d416b3bb656a99d6263daafafd0b3b89ae8c0c16b8debe8c8aa05" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xdcf2269fbdd13cbcea4ab83c253fd91f9c9234c7", - "balance": "0xe79cb4fdd3c2c7b6c5d783f497fcf4f5c99b8bc6d4d1cdcd9c99c295c1c289efccddea8d0f", - "nonce": "0xccadcbbb9e8ab9b146", - "codeType": "0x01", - "codeLen": "0x00", - "codeHash": { - "nodeType": "0x03", - "data": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - "storage": [ - { - "nodeType": "0x00", - "mask": "0xDFFB", - "debugDepth": "0x00", - "debugHash": "0x97196169298273e79373b22ba3d84f5a65bb2a44d68cbe910cae3649580b0ec5" - }, - { - "nodeType": "0x02", - "key": "0xf08c6fa96e84a1b6fae8088b3b6848bf0a10a9c5f4e11cc0be40fbcb03cdc40d", - "value": "0xbc9a8b8c740a3ea1151295e7d59e45e64835de3f26547b9f0272940e0394b1e3", - "debugDepth": "0x01", - "debugHash": "0x9dba51ae370d47bb2fd6a92c67eed4a8c0488293e8f3a481c330751cd095c649" - }, - { - "nodeType": "0x02", - "key": "0x675e10a48324f93a5df3bd9bafdfb9cb094d1b2c90438c5ac799e8231277e40f", - "value": "0x35fc1e8294fa5b3b2431751c2855286caf762f888a231612d471a79440ab1814", - "debugDepth": "0x01", - "debugHash": "0xf991f725457622d929dd01ec759793b66640a65aa0eeabbea9f60750e260fc63" - }, - { - "nodeType": "0x00", - "mask": "0x9000", - "debugDepth": "0x01", - "debugHash": "0x36b25caf851b66572f8f9eba609cdc2444394f26d1a8b0100631e1bf3cd0aa2d" - }, - { - "nodeType": "0x02", - "key": "0xf7e4f8e40b25e162fec9934a1ed34114d8bc3bdbccb78adadaaf075e22698eb0", - "value": "0x77e20f376f1655c8b866dd2de086faf403628bd9c71a128db34bbb79b2c8d88c", - "debugDepth": "0x02", - "debugHash": "0x0c0adce6b317c0c4718308df3b5078f18c50732fa43de32b4b5dc79347799511" - }, - { - "nodeType": "0x00", - "mask": "0x1200", - "debugDepth": "0x02", - "debugHash": "0xe5e4dbbccc6524e1de9a502edc39ebb99c31dd80ba22e081d6dc162c50536d13" - }, - { - "nodeType": "0x02", - "key": "0xe4a6f1590d0fe6a51a2f5a0e768d08b95b703a317a8173728888ca1d118366f9", - "value": "0xfca29e0768a25635ef5982680c1d474f30274dca44795ae0c1194e1528c82030", - "debugDepth": "0x03", - "debugHash": "0x9f7e316025c08ac4fcc82d4efb4453d7a7a66bce2e2a47109918278caa177988" - }, - { - "nodeType": "0x02", - "key": "0x1815b9b68d8f40df04f3e162f2e6abfa3363fcc18779b1eadc2659e1897d9a53", - "value": "0x7ee445b171fd886682ba04fca3cf32fe800d0bbe4c9c93dbe042f77d16d6910e", - "debugDepth": "0x03", - "debugHash": "0x77bad12027ac5f10824b23720dcf6e8585b7bf711419358002802f94e5820c16" - }, - { - "nodeType": "0x00", - "mask": "0x0804", - "debugDepth": "0x01", - "debugHash": "0x6e1bc8d41b70e248bc581d81e6f01a3419d206589e941278d27b2388ed6f3e3f" - }, - { - "nodeType": "0x02", - "key": "0x8f0242540a2f5aa0db18aad1c628125108e543e99b771583b60453107c1b23c2", - "value": "0xf8525b041ac6e8b97fe60424505c081adf37e3db24fe343feaa99a4e1de3df78", - "debugDepth": "0x02", - "debugHash": "0xc67162609f32161e8d8fbe48dcc5a328e8322b5a35cca2900e1069d32d1ac12d" - }, - { - "nodeType": "0x02", - "key": "0x99e7a7a2096b93a6d7f8fd1798befc1e7f02b829ddbd50f7a73e4ffa0d83ab91", - "value": "0xe7fd5f23d77d9aa2261d9f025e847e71617f11410d3d2215e862ba0da26d01d6", - "debugDepth": "0x02", - "debugHash": "0x217583b755d02b2848350b4b61df2467037eb262da15018264dfef685b4eaf7b" - }, - { - "nodeType": "0x00", - "mask": "0x1008", - "debugDepth": "0x01", - "debugHash": "0x62a7168fa639707aaaa32c6d8c8663a750be04fa32d8326dfbefebd03a10d804" - }, - { - "nodeType": "0x02", - "key": "0x2665ffa69ece21e99c48daeb98749a358151e2a6a9035c5b59f624585b939965", - "value": "0x910fbf7f584a2de8578e67533e95e791091a35e6be376116c22d34b0ac12fcf1", - "debugDepth": "0x02", - "debugHash": "0xec1f2edda218cdcc01612ba4d97f4a3c3763f59836ed03d1811fd28d078755ee" - }, - { - "nodeType": "0x02", - "key": "0xc73d851a4f8b343920be605f28c987fd9dcabb6855570bd206f70042c22b629e", - "value": "0x75a2230af7cc19daf8ad059d5911821bd8e5f72a837b0f00b23c132992030070", - "debugDepth": "0x02", - "debugHash": "0xd456e86b54f6dd11c903f9a1835a690052bebc1aa8f703336cc5aaae2dc5cfc5" - }, - { - "nodeType": "0x00", - "mask": "0x8260", - "debugDepth": "0x01", - "debugHash": "0x9652184e463a3d013f1fa4f29e5f01a3ddbf646f7bc40c9d2b0de64ede9513ef" - }, - { - "nodeType": "0x02", - "key": "0x03dadfb25c28914b36983df3caf669fc5594718b5bc44994613a54432979ad08", - "value": "0xdb1ba68c65f11271f6703fbeba7c32e25f0f2f13a1fb77cede262e7f1e47ab10", - "debugDepth": "0x02", - "debugHash": "0x78151777054f323bc1e9e2a31aeb0e5dfa7be7b240b53e9e4b2bbc5daf147653" - }, - { - "nodeType": "0x02", - "key": "0x694edfe642c32dffd4abd889efe35c18beb256b27f013030bfd2364be09e8d05", - "value": "0xa64564e6482cf63d4a1ebc2bb6b83c28543547adf2157593e421ceaaa6a511a5", - "debugDepth": "0x02", - "debugHash": "0x127af3e68169d8db505f995a601ba38c010e87f8392559c2cd7d99131d950c32" - }, - { - "nodeType": "0x00", - "mask": "0x0801", - "debugDepth": "0x02", - "debugHash": "0xd27f5fe29ab05e762033299b5fa42543382bf11b7a1e55fe97d955bc5f72ba97" - }, - { - "nodeType": "0x02", - "key": "0x538f0ccd070c40f9703faaafce7ffe9e8130efcd4af8678d03dab44be7787230", - "value": "0xe973a50bfe0bcae6abd7bae46a08cbe1ab73df7cf27192e4aee07f6b0325412f", - "debugDepth": "0x03", - "debugHash": "0xeb2274a428ebb0caf5b1b83dc60f7cf1a558ddda7e23facbd4a06f4d318aec5b" - }, - { - "nodeType": "0x02", - "key": "0xb897594017e9c198dc1bd5c9fba10e15298ac777f42f4bbebe7bae4d4c86aaf6", - "value": "0x36a640fc128e453cc2011bb62cfdfdeb29a63e8a6bc10a618c4231b26123d211", - "debugDepth": "0x03", - "debugHash": "0x43b82b636944c061c9d5c7e59b02a9c247e15822ab60a97719ba439e7b40a3af" - }, - { - "nodeType": "0x02", - "key": "0x04713d309027ece8f5ef07e94400becd925bb2906af290a0e6b5461f9f0b9c80", - "value": "0xe826b60903bbd698f1d2581ce5ba15cfaddb1158ea592bfe42d35f2974f9ff85", - "debugDepth": "0x02", - "debugHash": "0x45ab79f72edf740cff058ca238916558dc200b989dd0d2104837ed35fe254bfd" - }, - { - "nodeType": "0x02", - "key": "0x2ddcb6e6934c2b890789700f97b0537e44e192172232f986a955612d7b37b456", - "value": "0xfc265c38a22aa3cf5ebf777670681266243700671c91860e3eae7658b1ceca66", - "debugDepth": "0x01", - "debugHash": "0xd99594a7db19510f7079cb9a1f1c8068a834dde7c10e7c21d26ff6511cfbc269" - }, - { - "nodeType": "0x00", - "mask": "0x8200", - "debugDepth": "0x01", - "debugHash": "0x00c0bffeb93eb62cf02a029a0fd4bd158116c8bb99663d581cb39c4fe8c958e9" - }, - { - "nodeType": "0x02", - "key": "0x2e6ef606caf909e33a2725223f6f6cbda71e93fe08c1ce4306a3b08cb350096d", - "value": "0xa16d317454103c826476150d95708b407d39fc9c314df1ab0d6dc96519c229c2", - "debugDepth": "0x02", - "debugHash": "0xd64c9a6449bca037e0648c92a416d391cf97f82128763e44a78d8150b00fa26a" - }, - { - "nodeType": "0x02", - "key": "0xb5077e36765df9a65d9c6e95432c5524579074c40af1a7c44a56b2d727533e8d", - "value": "0x2590673df6bc524a70821829521fc936050eac487207c4164dc75097a675e11e", - "debugDepth": "0x02", - "debugHash": "0x9aea6c65a57bec457def5af0be2e2d14648268abad361aac5533dfcd9482d61b" - }, - { - "nodeType": "0x02", - "key": "0x7d237285c017887745655e2c5aec27b2a6825a85fe24b5b741ed740c2b62d1f1", - "value": "0x43415f56e927221bd8a74166b04753964af56bcb115dda26bf9fd6a139fc3a10", - "debugDepth": "0x01", - "debugHash": "0x512e7841a654d801512ca02bd74ad1de41d7f59a771bfd40ed3443d722e5ee83" - }, - { - "nodeType": "0x00", - "mask": "0x6021", - "debugDepth": "0x01", - "debugHash": "0x026c6eca53f5fe9d267ecd0d5b506dd04a04d6f0983948e5cd49d5e4d82c8586" - }, - { - "nodeType": "0x02", - "key": "0x42a4f41eca77832d71189e4538643aa599f2930ff05fcf2066a101ecc19be9a9", - "value": "0xf04e9e15217405f86ab5b5573a7fe538bfaf4ac3b1610c5aaf4b748b52ca1fb6", - "debugDepth": "0x02", - "debugHash": "0x97ff43c8eb84228a26bff6097aa98b2aba6b63154971ef97af86645c90b495dc" - }, - { - "nodeType": "0x02", - "key": "0x563479f064650d06050e806c53113ada9c80b17f7d8a04d0b1e196d0a7db0b7d", - "value": "0x69136069bc282f5fea244290bcda482b940672748c25d4536baeb52110d5517a", - "debugDepth": "0x02", - "debugHash": "0x355abd7bce043d860ab95f9b6a03b8df9ac0e030736a560283dd1cf2baf8b23b" - }, - { - "nodeType": "0x02", - "key": "0x40226d49b8523fc05f7bdae40700a5ce41049fc8d0422f37f77b417d9c925bdc", - "value": "0xfaf1128c1cd119cb7fddccff9c08e4a4d36cfeefb418745f064386bbe5cc3c1f", - "debugDepth": "0x02", - "debugHash": "0x0a4574ddcd35b233c92cf3b8c4aeca6db772775f5295af886a0ce716c57aff6d" - }, - { - "nodeType": "0x02", - "key": "0x410df493e0af9575d106dde1d700ff167c63dc0c9c8bef6ad8f62df108fb59cc", - "value": "0x24ca130aa427d2fc711bed6ef6980fdcc95cb5251d914081b9364040e5fc706b", - "debugDepth": "0x02", - "debugHash": "0x03588fe3402a76ce7f9b566adaf4aad4988968c2a445315199c48e859bcf5831" - }, - { - "nodeType": "0x02", - "key": "0xe8e14ea60cbdd19dec14d4a4843d8ca761aed98fa2d5e690214fe0ec12f6e52f", - "value": "0x97687d13449b6143f93bdde1bcbdba300318a9f6d59f7503b55a9d699d07e13f", - "debugDepth": "0x01", - "debugHash": "0x07dd74c21ee0a446190e76ea3745ccabb697aa5f5d9761059bb1df51ca0120a6" - }, - { - "nodeType": "0x02", - "key": "0x68ce102dc0847cb1fa3635cd49e7625e7a69851557be9ffe954d939f33c639fb", - "value": "0x13b24e1ab5bb7bf85d0291c2472e6abf432f2be7d05fbe2dde70fc7a2e776fd1", - "debugDepth": "0x01", - "debugHash": "0x956375f645c6a98041ea41495ba21ac523a3d517c94d0907e43cc43252f79c36" - }, - { - "nodeType": "0x02", - "key": "0xf63f427b5f6c77cbf3429cdb54d912d41b45c36a2dd293db7170cb461c48ef8e", - "value": "0x35abb3ed7895bc6c154fea130d18458d8afd1dccac123198dffb32ad6eccf7a8", - "debugDepth": "0x01", - "debugHash": "0x876f951757036d9a49ecc05adb3c7bcf5ed5b0bbbb9cd419ed254e19d8fee05e" - }, - { - "nodeType": "0x00", - "mask": "0x6482", - "debugDepth": "0x01", - "debugHash": "0x22c1b06677721205ec47e1e7749e9e60285a64e2bdbad514da999e23154bbada" - }, - { - "nodeType": "0x02", - "key": "0x570607be3ca48225c2204f3f846a7c452be919a65f8ce008f1989e6111a0a6c6", - "value": "0x108af6316fef84742b753d4fafadfea80b2b568dad937d99f97b72fb8c06b260", - "debugDepth": "0x02", - "debugHash": "0x1b98a9f2b19b00ec13544789eb2a82337e30ecec52e7a7aac5c4b1531934c68f" - }, - { - "nodeType": "0x02", - "key": "0x4357070663a7ad99128313577739edba78fd61f2053416b809cad342963a1e21", - "value": "0x9e1b4dfa31bcaeceac9a4abb984a47b7c6e7d5a0be4cb6a83afb96699e1e272f", - "debugDepth": "0x02", - "debugHash": "0x279d8f0c62d5249cad3d86155dc26aab33835fb1257d5134e082e675191e3d16" - }, - { - "nodeType": "0x02", - "key": "0x1db124a258bdc0619d17272abced28a849a6323571eca75e574a390eb243ecfa", - "value": "0xdce0ce028e1591c719d6d36db87bc8c201248f2147b2eb69df67153fda5529f1", - "debugDepth": "0x02", - "debugHash": "0x493d0a942940a36d23029017d3a4b13135c58d06ca142ae5d48952c1e10cf042" - }, - { - "nodeType": "0x02", - "key": "0x83a7e56531fa42c130894cd0647c6a2b3babac2bba36bbfa12616db942e83061", - "value": "0x34cb2de090cea0eea2e848faaf42f34cd86889d4fd6f87df95285c2c4fef1102", - "debugDepth": "0x02", - "debugHash": "0x3c3059900bdb81045a57119ab11300027ee5d2ff24c81bb3aecc296f29c3eb9d" - }, - { - "nodeType": "0x02", - "key": "0x696780816b6f46b6d83f7fcf96e42776d3fe0bb9c020008edf3b11473fd2fe9f", - "value": "0xb8181f97359269c6d412d9c1253798af2024e2a50c7ab105fa7d19f9e3a2b5cb", - "debugDepth": "0x02", - "debugHash": "0x770e14f8d166547209866ea578b40952e5f62243124120a6e760b5a82532de22" - } - ], - "debugDepth": "0x02", - "debugHash": "0xe1c036e26595b2e0daf664d4808f2ca83c3fe0fb0b952df4626e323a3905f713" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xc63b86995cc1bd0c01bfb80ff3e6d3589cb83ba2", - "balance": "0x848abef9e7d7f6abf082e0ead7fce7cdffd3c6c3f6fce0dbccf0e99b8cf1eff5b1e1d4bf09", - "nonce": "0xcb82f59b93d8ceb49301", - "codeType": "0x00", - "codeLen": "0x9001", - "code": "0xbf05532cfe1de725023395e2e1f8bd37bcd42e5cbd06b4e068dd77027bef07939bcad63b74f4e41a7713d52c939777836a020fb60af2cea885fff6ad77da4816a80ca10f8e7c0c4ec77c24ac474fffcd18bdc658ae56017d41b8dda186325cd945d2d4c327449b84c60187b1fc01835eac03c39fb4b227d616f243ccc0aed92b61cf2be2bbaf59aa3ced6c763c36a940", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x02", - "debugHash": "0x83c4c3a4435cb01e2c267194298b51f6d1a4d13605cd53f5316e8a947881a49d" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x37f25e0f7d48b6382d09f822b574050e186b3640", - "balance": "0xa6fa80e4b5d9f7f79c99d5bae3d9b6cec2b7cf82bae982ea9c80d1aba7dbc5f7d3f296ce0f", - "nonce": "0xe2adc8ba809beffa41", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x00", - "mask": "0x9EFB", - "debugDepth": "0x00", - "debugHash": "0x271ef9012d440f8cf551b76eeb914dcce1be88ba02f6a798e2ffd72736c5258b" - }, - { - "nodeType": "0x02", - "key": "0x37cf0adb6aa0207c0ac3dad65f931ac55875223989699805168ab47d151103a8", - "value": "0x45ba84db6187ec2c630b4377d82b764774cd383c6bb8f122e50a39c8b9ca6d69", - "debugDepth": "0x01", - "debugHash": "0x7d1f55c4e8e799b1fde1bd8e4c91e8140af6fb56af020f2cdf8ee00f9d61d568" - }, - { - "nodeType": "0x00", - "mask": "0x0880", - "debugDepth": "0x01", - "debugHash": "0x904258d819bee3caa601f68d6420cd70abeb76976fe6e4fab5b6f02218e6ad82" - }, - { - "nodeType": "0x02", - "key": "0xa200743e726b6df7b835555149ff5600d6f3f78fab75e5406ccd1573086f79ab", - "value": "0x3a0e7b8e7ed1215203cb4e682ae3d0ff712f027c05fc8a62fdf5e5177d145ce2", - "debugDepth": "0x02", - "debugHash": "0x910e11e74e6b1b19961d4281d7436d9c9fd1ea6d85bbf51743425b558dbeb3b7" - }, - { - "nodeType": "0x02", - "key": "0x596202ae8b343762861a59c926e54ae8c9a48fa422cd6b713605181fee49c9ef", - "value": "0x15612a23ba68ac58e813a97e68c9d32a7af02933d734ac731b8ac002906ade2f", - "debugDepth": "0x02", - "debugHash": "0x60676acf58d8db42d79594aba1f54d444f32de1519695772e9f08570edea1c05" - }, - { - "nodeType": "0x00", - "mask": "0x8510", - "debugDepth": "0x01", - "debugHash": "0xb756fd331824d87d9d5a691d59416711b01da2c92e6f3d8b4dac60952639142f" - }, - { - "nodeType": "0x02", - "key": "0x6962a2531439abaebafbbfdc359c459cfc9cfeadfa2e8a2cc357e75545b9aac8", - "value": "0xe2fe5d21948790147cd774e3c25fa26bfa172c3a7d1a964acd7b7e9cb7546199", - "debugDepth": "0x02", - "debugHash": "0x6f9bc25565794a52f5259f2ece7ea03c2e355e232c37f0029c2aa1e50083e648" - }, - { - "nodeType": "0x02", - "key": "0xa668b8716496fdd3e940e4c7098979d8216b1951bf46ddd78290f489d1bab9b9", - "value": "0xed18a34b2850508b5d3ba3df102356c0f589092cad5f32ee19770297817c9ef0", - "debugDepth": "0x02", - "debugHash": "0xa2229be01903fd18c6a6b830c5e9f3f7cc8469998473f267b16c19d3d8dadbbb" - }, - { - "nodeType": "0x02", - "key": "0x0e94f468c00a79a76b1ed038a73b774f96b72890f17e16d2429ad6a9f809e43f", - "value": "0x083ccffeb9099d5fdeb045a0ad35449228bbbbb5859befaf4bb45a6bd3e12d68", - "debugDepth": "0x02", - "debugHash": "0x7d2cbbbdf746aca82b3e4e766aea364a488b78f2b7bf606b7eca79af20e5d82e" - }, - { - "nodeType": "0x02", - "key": "0x8428dc0eb13f14fda48128565559ccd6220fe37d456d5bf374c009271aa28e5b", - "value": "0xe5c1e8c2b230e3df8a96ff333a974e6a1cc50b8defbb5e2a9dc7aa8451f4aac5", - "debugDepth": "0x02", - "debugHash": "0x837baff6f0e74509425d2e8b5e1103d60d456ecd07938e22b753428daad44cf3" - }, - { - "nodeType": "0x00", - "mask": "0x2001", - "debugDepth": "0x01", - "debugHash": "0x9f37011e99b57680bbc136e6f54aa5873997814a16815eafd792cc8645b14691" - }, - { - "nodeType": "0x02", - "key": "0xdc9eb31586f28083464b625ac59982dbf0cea1f506b3f3ea12c2829a55fd6dde", - "value": "0xba8c82eb71f0039f767b8ac8f84ef9c240dba6f1155684ff5fc8f885e3f1771a", - "debugDepth": "0x02", - "debugHash": "0xb5b292421a13124ed90feb1f0321b76bd75a971e09fc83d1bbab95eb2bc0950e" - }, - { - "nodeType": "0x02", - "key": "0xe39f70bcb8955e049f4cebeddfc2123ed73763298756e8602f9df547fa21f5a5", - "value": "0x07ee10306fb0a6ff5c0910576e29e6cd1d243a1a9b0fc7ebc3c54b6390d3797b", - "debugDepth": "0x02", - "debugHash": "0x3b8c1e842a5e80605f48993b75f5aeab7b1644a007bd7790a0478ad188013ac4" - }, - { - "nodeType": "0x00", - "mask": "0x2802", - "debugDepth": "0x01", - "debugHash": "0xc4590b321fd119668b08876aaf7530ae923915e7049a268e4bd8d9739d1b907c" - }, - { - "nodeType": "0x02", - "key": "0x54654a6829c3518f36a0e3560190ef867420edf154aff153b4276d4a8649cc90", - "value": "0xe4cc4bde7c71503626c89db647c4f09348f45f486d950f6404d18ac1b26a31d9", - "debugDepth": "0x02", - "debugHash": "0x1dbe6733be93127ba17e1a6ca168dc96a8893cea1a11785391e747a4ae02b27b" - }, - { - "nodeType": "0x02", - "key": "0x4c5c6f89326f7fd0e411dab13a081f16a29e36119cafc4cc5a54392f213a3841", - "value": "0xc4391547ec575fa2a7cb48cc30535f53b8b6c276ef066388fe9245424f14d218", - "debugDepth": "0x02", - "debugHash": "0x02d22f1b712ab6b12e016e7645735225fbcaa1aeefe88aa9c09fa3d177d57874" - }, - { - "nodeType": "0x02", - "key": "0x2a7c57c2d810ba0edc5a6f778d66b0bf2141eb84d81860be95c7c3815d655646", - "value": "0x779c54295e36eabace31e77e05da47b22538acbaec5ac2a1f5d827e5eeb42f71", - "debugDepth": "0x02", - "debugHash": "0x5654e9d3a520fd3c5bf19d023865ddd835e4a95c0c9ca7dc0fc0a5ae9731adae" - }, - { - "nodeType": "0x00", - "mask": "0x4800", - "debugDepth": "0x01", - "debugHash": "0xff53d56eb6945d27e4a7b3e6ce17844e7c7c6238b469ee2b6771f26dc8bf2e11" - }, - { - "nodeType": "0x02", - "key": "0x07ccc5159904a2a2df6458a76b07068320cd1d1289836b0b82583f1cf2c64774", - "value": "0xf96f64dbb7f09a30c83108c86ad8fbcc818512a49058dd3311d38bd04dc621da", - "debugDepth": "0x02", - "debugHash": "0xb8fce700fa51c62f528aa91581e837c1648d140a550baa3f9ed1f5791352bbe9" - }, - { - "nodeType": "0x02", - "key": "0x169b94ac813c8e287f5684f0541f2e8fcd2cae82e14840c6dfcd6579577e032c", - "value": "0xf35bb193f84d056ddf93252c472810e3c916824be24291c5be69807c0efec7e2", - "debugDepth": "0x02", - "debugHash": "0x9f49b1eb3810bcf01e3d32131b8a44590a438e989f22486682b93d949fe5526e" - }, - { - "nodeType": "0x00", - "mask": "0x0540", - "debugDepth": "0x01", - "debugHash": "0x2b272d59e8150cfd263949922af0e9fb20995a5c1c4320a02fc949897f067bf9" - }, - { - "nodeType": "0x02", - "key": "0x6629a34c8bcf8b7359e5e644dc92b500ce90291ca3c1f02ad8c423799d5e2fcd", - "value": "0x81d046742ba36199ca420a79e50c1c0db17dc30353aed8b9c896396ff43d7899", - "debugDepth": "0x02", - "debugHash": "0x21d03a55c7edde6cf1efee6cf9aac8132831ea7bb29d8b80e543f7fc981b6310" - }, - { - "nodeType": "0x02", - "key": "0x88b40f9d867e859f26d1ddacc6d9b3d1775db44117a2b02b3d6e051cd0e29704", - "value": "0x20cba7f842a67348fc0b0328e734a9affd88bf8f78bd8ae668e4d1a9f0287477", - "debugDepth": "0x02", - "debugHash": "0x14a0449cdf29c7d517b330f4645923ba8c8b2d76bb2ea93e8b0382eb42bd5939" - }, - { - "nodeType": "0x02", - "key": "0x962fd11d3dfd9f64c54ba1c042bf63619a7bd539270672af4bcf28faab6c541a", - "value": "0xa0870c29a9b8cbdb2aaafedb287df8addef13b2fe4487297f1019da1f5abcb9b", - "debugDepth": "0x02", - "debugHash": "0xb8e0d282d3df542c9da0b1f94cf48f50fef0f23604b5e3d1361df57b20e03cad" - }, - { - "nodeType": "0x02", - "key": "0x95e59daeac9e27c19f5816aed368ef99c5859317543d9458515f3fd47fa0132b", - "value": "0x9d361a947028c4a3523f7f78fcd94b083b31465fbbe225336bfbf6fa50ca0814", - "debugDepth": "0x01", - "debugHash": "0x52f5152cdaa23f1305572dbc38678f936f8d67d2e10b55505a15e6ec7f454b3e" - }, - { - "nodeType": "0x00", - "mask": "0x8002", - "debugDepth": "0x01", - "debugHash": "0xa888e1d90b47d9ac202c1018a85bcba195a584cfe885e894545558d4acb20750" - }, - { - "nodeType": "0x02", - "key": "0x1bdcc9c4fd43d7d186458c46934258be8faea38fa5bf558e13c10521936b6439", - "value": "0xce93ce62e4b4650d03d562e30c427f84a81526249a62b6aacf11175c3dd41f50", - "debugDepth": "0x02", - "debugHash": "0x6c7469100c80cce05595672587ef239c2a53a19f735ed0941507b2c5c1a9d661" - }, - { - "nodeType": "0x02", - "key": "0x865c3df6163d46d6b9354e77c89ac5ad40c27f7d31bb8c63e4fcfbc205ffaa0d", - "value": "0x2d3b6f075593067c27550e9d9800c09c98f3947c2312cc2b737292cf1560e348", - "debugDepth": "0x02", - "debugHash": "0x6e2bf90f616d744804aacbb0cf843ec189b6e94765af1487630aedc26b260804" - }, - { - "nodeType": "0x00", - "mask": "0x4980", - "debugDepth": "0x01", - "debugHash": "0x59e2772e2fe627a66903efb6e87abcfb08b1e197b9efaaa8e0fa94cfdd41692f" - }, - { - "nodeType": "0x02", - "key": "0xc55f40039a3155c4da8c8b27e497a450551563e9540fba85d87781826d552e34", - "value": "0x0e6415d812040837f5c9299a4daa70576d8edd6a7430dbdb496cca29e64b51a0", - "debugDepth": "0x02", - "debugHash": "0xfe7a943cec5f6691575e2a092076cecb0e110b2b7649f57c7b54e9ae66bd68a3" - }, - { - "nodeType": "0x02", - "key": "0x39102336c024bb747152ab6534548e3283d1141e5049d31d7539af3d7285e969", - "value": "0xfe825b5e89d5624a9d97b874670ffa276d1465f8fa49079c256f91a3ead5b4f7", - "debugDepth": "0x02", - "debugHash": "0x826b953d6754c27a881239f6154cd556aae9b72155c09ddebc39446b27b25915" - }, - { - "nodeType": "0x02", - "key": "0xaf0e5c2cea10e6ba1e4fa221fe079de15837fe4e999d7021c1ac8862bd260df4", - "value": "0x8be1f439f2c0e40f7231057db9c026ff9042c93d135675d720b971724606d3c4", - "debugDepth": "0x02", - "debugHash": "0x1b5db54eae6f5215a23e3e0545417ab95e21ce83dbe921ad7b7e763fa58355f0" - }, - { - "nodeType": "0x02", - "key": "0x13e273b53d7209ce6f06b5f8c06598e3b0c127ddb5e68292597dfa750e3ee200", - "value": "0x9ac9aee58de63e79a2ac2b689e4d0f03eca22f5ad9667073795441dce851e281", - "debugDepth": "0x02", - "debugHash": "0x3e6be548016e5430155c10634628a9a93d72e92767ed83e6a779fe893ac98595" - }, - { - "nodeType": "0x00", - "mask": "0x2480", - "debugDepth": "0x01", - "debugHash": "0x729f93a093e9655c04c2cae47fb3d7d908ccf25d3c7790bfe69a576b54d2847d" - }, - { - "nodeType": "0x02", - "key": "0x6630397d907e8d479aaa9c240d0511fe0e3f827f19323dfa2725b98fe668cbf7", - "value": "0xae01dc3c1538aaf587d2568af1c26db5a58e089516f5b229798e75b323a6d48b", - "debugDepth": "0x02", - "debugHash": "0x903fbb27abfec2c3970656fc33bb6c0bf59f1541b3e3525843103b87cb434e44" - }, - { - "nodeType": "0x00", - "mask": "0x000C", - "debugDepth": "0x02", - "debugHash": "0x1083b81a0b584e268dc1b3c708a3a99616e531a0d011d949443c8473ff87e11c" - }, - { - "nodeType": "0x02", - "key": "0xe6df0d536daf2d6151fefbea4638b78b0fcf84614cd11eb4d62ba02a95b3b361", - "value": "0xa99c806d92e1c5c0eae0ce790ac0128216e1ee15a6a0edeb35cff9e0a6c317cc", - "debugDepth": "0x03", - "debugHash": "0x4edc7ee96a451fc1cc0ff3f29ba4542ece933f1700f8a0582b60aa9b2d9e125e" - }, - { - "nodeType": "0x02", - "key": "0x2f691ed73e47247e9f28288cf2f4ce9617fdb2b46218d80df22c821d93e5dad6", - "value": "0xb2db9f93d38a1cf27a14c5ff000e044f994f56bc0ac8096d1610bab0acd5f082", - "debugDepth": "0x03", - "debugHash": "0x9e02f0e901d94049d62ddfba180b01dfd409848bf4f06b35a33a4803f202fe45" - }, - { - "nodeType": "0x02", - "key": "0x3e1fae2df40a64044f11559e2209f32662b4171e8ef9c991b3a2ba183e53d430", - "value": "0x880498e5fd3c203167442e6bdead9edb4d20463339547c95007186f3e8d3ac1f", - "debugDepth": "0x02", - "debugHash": "0x7fa330cef372293cef639de3f9edd63f1e616ab9fdf4de700f432305ef3fc659" - }, - { - "nodeType": "0x00", - "mask": "0x0050", - "debugDepth": "0x01", - "debugHash": "0x059abbb15fbd3decac8bfd030e37eba2d6f45fee1753dcfcfbf72c88cfcbb08f" - }, - { - "nodeType": "0x02", - "key": "0x8e5b10295ad2ddf1b39560d150382d1969c4db28d7897dadfe06fadd86ba8897", - "value": "0xfa15718276d08f4d9c0277dcf13845fbeb241363656ff073d06db7e24ad76e5e", - "debugDepth": "0x02", - "debugHash": "0x32561eafa2da4e76160342113ea9ff3331a010168898a002f184fc446b2dd562" - }, - { - "nodeType": "0x02", - "key": "0xafc2c84fda125be16db8938aec816f3be42aac9d5f58b13cbe8b8be9bef475e4", - "value": "0xb8244d1adb6d44c1d4ce0d6fa8400479a93b6f32c1854daddc9b634a327a0ca1", - "debugDepth": "0x02", - "debugHash": "0xdff2d7c58d0a9a7394062341c9dbeb7b958b5f5dd749bb824c3e00c5514661ee" - } - ], - "debugDepth": "0x02", - "debugHash": "0x568feba151fb2885c6985ca4e3d97541774c4f7c9ed1b5eefd064250ea98cea6" - }, - { - "nodeType": "0x00", - "mask": "0x2048", - "debugDepth": "0x01", - "debugHash": "0xca0b86bf0b198e740c9324ec2c7f51e9b32e0d01585ef5b75513cefeba414b9b" - }, - { - "nodeType": "0x00", - "mask": "0x6000", - "debugDepth": "0x02", - "debugHash": "0xd9cd96f3be11575953a3b0d5c4ff64b80e5aafab5b800c80c12381e89fbae377" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0xb5138abb1e4d9c5db604b86b770e6d6e5451cb80", - "balance": "0xad99cbc0f7d288b88b94dcc4f8dafa8580e497eaf4b9aa8083e6c395e9eff6b5c28ecfec0d", - "nonce": "0x83b7e09ab2ecd0e29801", - "debugDepth": "0x03", - "debugHash": "0xd157d809860f62fb9098e78a08b7b249c08df0da8f1fb57b4e3357fb075b9881" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xe448811bca560c51d35adf8f21c468bed3f867ac", - "balance": "0xc292cfda9c9da5e5dd86ae8c94e6eab5c48ba7bbc1809a8f99b2a4daa6abd491e6b98de302", - "nonce": "0xb9f2b182bfc187e87c", - "codeType": "0x01", - "codeLen": "0x15", - "codeHash": { - "nodeType": "0x03", - "data": "0x7e465fad9958600f50923e98a8b7837a38806ce1c930ed72a55d4fc45bcbcfb0" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0xed90e4e15b156824415adbdbbb09727407c218f369b45e447f5807407b274229" - } - ], - "debugDepth": "0x03", - "debugHash": "0x5298a9fcdee1ba4d683003c387a7577bd3a69336c51d40e6baf7ab4afa01f60b" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x996e4feef6d34c45724b16fe0890d8962373b758", - "balance": "0xc0bcce9aa9e5b9b392c0a7f0d7aa86e5cbfbc5fc869fc19cbcc9bafde189f9a6c7f095b509", - "nonce": "0xf0d786b097daefbd8701", - "codeType": "0x00", - "codeLen": "0x00", - "storage": [ - { - "nodeType": "0x00", - "mask": "0xBBFD", - "debugDepth": "0x00", - "debugHash": "0x2f47460f7826c3757dbc2d0e1df2ca48542520ee9fc0d7c181b02df2903afa3c" - }, - { - "nodeType": "0x00", - "mask": "0x1800", - "debugDepth": "0x01", - "debugHash": "0x129d3efb91a6556abd4f3bd2ecf061454cb10c10a804031ce923cf54db2077b3" - }, - { - "nodeType": "0x02", - "key": "0x58c7bfe417ccac34a58fb43555de871a2e772c4b0d09dbbacbddc5818c2151a3", - "value": "0x09c2932496442d49595d226b17657d69cc2ac3921280f9efe38f9a953397073a", - "debugDepth": "0x02", - "debugHash": "0x34920d4ee3fcb5af7789d0ccac4ba3bf7ccf1814133a1d33405d492a54558771" - }, - { - "nodeType": "0x02", - "key": "0xa4b2b96e9644daa2716f681e57159fbf7da20384b51c0e43a87414f407df9d1e", - "value": "0x33ddfdb81076b6c08860cad28c2f7eed403400d74c544a380f41533fc0270a42", - "debugDepth": "0x02", - "debugHash": "0x0061e7cc2cdfde18078405f58646a7b8ceeeeaffce66569dd7c1f376241a9e7b" - }, - { - "nodeType": "0x00", - "mask": "0x0810", - "debugDepth": "0x01", - "debugHash": "0x46cf34096f218b6d72b5038dcebbb8940525903fdfe40e3a6ee51394563a4d6c" - }, - { - "nodeType": "0x00", - "mask": "0x0140", - "debugDepth": "0x02", - "debugHash": "0x06e409d3d4edafd4fd065caadd19d11dfcd374625e342839bca28440bfb24505" - }, - { - "nodeType": "0x02", - "key": "0xf667218c37c507b0ea4700fef5215029de42abe1412ca4f5a05ac0ebb4b3f29b", - "value": "0x91a5c864e84b34497f758a850ddb95531f56e34530d1bb7d6f16015fca3c8f4e", - "debugDepth": "0x03", - "debugHash": "0x8ce56738a7d4362ccea2e3ca90a111fb74c300a730768a251e2f7e40b1f49147" - }, - { - "nodeType": "0x02", - "key": "0x35a1d4df0a2cdd7154630869bebe62479667ee3d4c3a5f3ee98fd9c7ff0a0b31", - "value": "0x24a7bcb79c4231469fb6d11af3a807b3dc397a047f98aabbd4f356e2d1b71614", - "debugDepth": "0x03", - "debugHash": "0xdc423993b5c049c09434c2d3befe95512f0cdb11e3d8d479d40d8621f678b043" - }, - { - "nodeType": "0x02", - "key": "0xb7bf8cae73dbd9a13944e417e7e81b614398ad4c2a668d7152ccbb3a074869ba", - "value": "0x32f6e37cb399514605f68bcc2945d25259c9ae09fbc62eff2cc96e746d64a6ea", - "debugDepth": "0x02", - "debugHash": "0x132d0105f4e63a74a8469d004a4156f1f9e3296d680321b85a85c6473358b96f" - }, - { - "nodeType": "0x00", - "mask": "0x8040", - "debugDepth": "0x01", - "debugHash": "0xcac084022f5e6b5ae88906be5d54dacbe6a812d60ccaa3b0218fbad0f8dab433" - }, - { - "nodeType": "0x02", - "key": "0x67a107f6b8cf6dfa15abc2759e1a4b4fd8fc7760dba33bd363b78db0af3e00c6", - "value": "0xd7450a23140ae931398f3823801325db6a5bc761b67b997e5d02977ff569eae0", - "debugDepth": "0x02", - "debugHash": "0x0755ad919db8ccb43bde83f1eaac10f3d9e50c42206f50e2845baf8f05f9ed62" - }, - { - "nodeType": "0x02", - "key": "0xa4d056299ee08e309287fddb14aedf5ac6b8a0bfd25b96d891843952fb9326f0", - "value": "0x3803260c37724d449ca048d18286ffe795cb03fef6b887df91f7e1ec98224c38", - "debugDepth": "0x02", - "debugHash": "0x03902924bc58965cbc83359b8716db1fd5192af6d13c7f7af2ebe739d6febc17" - }, - { - "nodeType": "0x02", - "key": "0xe613a51b3ec16cfe32e5dc468d3e73253dad92923aaaaef753d957319c629e57", - "value": "0x4dfbdc27f52fa9b1ee8e81e3d0bad3e3943ac02d5a332c5b46308322f5d83611", - "debugDepth": "0x01", - "debugHash": "0xe6614b9552b352e52fe343bc66bdc3ef3b157924a983d8d9d6534c1454eff75b" - }, - { - "nodeType": "0x02", - "key": "0x7f07e191e1ef0fe526d58449d1984c92aa4c9e203432f01f52c79242a0d8133a", - "value": "0x117f07546cf819a3061c20adb9e16a5961487f7ed972ac406414b65c7e886580", - "debugDepth": "0x01", - "debugHash": "0x47546466ef22bdf544c58c17de43226b244615808d2790a43afe24a0b81fcb84" - }, - { - "nodeType": "0x00", - "mask": "0x8100", - "debugDepth": "0x01", - "debugHash": "0xd0708de65a0f816f3f7e97d597864111782c0b0710c12de4767228a6586327cc" - }, - { - "nodeType": "0x02", - "key": "0x2c96ab715698e2d047378ca9ad29c0040f05dc4088f49ca28a1d27006b5dad0b", - "value": "0x1239062a150f1b6d5ee361ef85260ffa67c0089e5b4128825113c206a1864a72", - "debugDepth": "0x02", - "debugHash": "0x907c3587c27dca19529b7e306f59d1271ded68eac7358fe9bfeda5d60b4c0956" - }, - { - "nodeType": "0x02", - "key": "0x9e035896f4353d6586021ef1d1ceceba03833756e1a7a9184b22a41be0f7c60a", - "value": "0xfe8d4b046d70ed098b9017c5503211cac4dc4caf54c65fb19a29fac437f39fc2", - "debugDepth": "0x02", - "debugHash": "0x4126926ac33ffa8aafdf648616218b594624328dffac0af43aeb9534f238f578" - }, - { - "nodeType": "0x00", - "mask": "0x1150", - "debugDepth": "0x01", - "debugHash": "0xef9ec80585f36155608193251b9f6c642abc8f006a3aec13a2c99687e99dcc42" - }, - { - "nodeType": "0x02", - "key": "0x794907b4e3f1a7d45e808243af78b7115177c7a9c3e31e79cc1ca6e2e2386a95", - "value": "0x97b8108a9e60f7a84877daabd181453c169f39e321da553911a9d647e602bc4e", - "debugDepth": "0x02", - "debugHash": "0x59d81b2b4aa7654d074454b084e1f04c2164e4e790c3bfa508e3dcf795e91181" - }, - { - "nodeType": "0x02", - "key": "0x3e5e50d83ae185d180eead043be14b881af964e5a2745baf44cc5cadfae3e295", - "value": "0x2248bc95b230a87be21944079ba156470d77eceeaea4fd688fdf0fe7a453c05e", - "debugDepth": "0x02", - "debugHash": "0xc1fdce72b2b86f50908f9b94555e67e614b0df07d121c072344d178335da3339" - }, - { - "nodeType": "0x02", - "key": "0xa3ca96c3ab97f5e52a49bbcc46e62893893972325669e53853ab303dd2f36cc3", - "value": "0x5dfd7382bc86472b312d85cc3c681cb6eeb97773d77db94450bcfc7ce0de8768", - "debugDepth": "0x02", - "debugHash": "0xd1db5143a0d9b4ad329ae288d527178c06eb051e0382f2f15a847d73c7e7bd6d" - }, - { - "nodeType": "0x02", - "key": "0x210b152d667c43d67e63dacd2ce24348c69ef6d43251fddbd9648c46e69eef1a", - "value": "0x69a12b28aee31d8cd1871ea04e673f9a9b13fbda5d61647b1f0bb4f57bfdb8b9", - "debugDepth": "0x02", - "debugHash": "0xbf61894ebacb65c55e0740e0438081a43df734ba1d6ece61bc313237339d2134" - }, - { - "nodeType": "0x00", - "mask": "0x0530", - "debugDepth": "0x01", - "debugHash": "0xb024cb582d8a9e9c08440e9cbe6907d692f92446dd466e1d2e8254a5f7948fa2" - }, - { - "nodeType": "0x02", - "key": "0x4c6c41d361c296c518d827e366a90fe081cbabd9619bd4c07560595c203f5404", - "value": "0x8f8462ccea59ebfb645ee9ed166262db2b7aa7d3f178c263b634de60232e8def", - "debugDepth": "0x02", - "debugHash": "0xb0a529b0972e9f7aee9d000a94ec0429eea7e6e18f2ed2122c6698b7ebac121b" - }, - { - "nodeType": "0x00", - "mask": "0x0204", - "debugDepth": "0x02", - "debugHash": "0x351e8b424424ed10b2cb3b80a56e08c5c5d746a4df7db5b6cd0072d6abd6d128" - }, - { - "nodeType": "0x02", - "key": "0x44dff37ead8a4223d967f47c6ed94c6f70282fac30351d9cdd312bdc16c11321", - "value": "0x8508403683c94facd1ca8ee22562675f0c969ca15bee1dd932f7e6ed311c2a77", - "debugDepth": "0x03", - "debugHash": "0xdfcaf0c32114f8426272720a1c1eee84a24d76a25ff8d29800e4a51c4e3f2d5b" - }, - { - "nodeType": "0x02", - "key": "0x64903bcabcf157c85fd955e17d3e60c8d8444040f6d66e4d8cb34e4ada70f161", - "value": "0xbedf39811bef1b298f18a5a963426efe25b4e410ba36504a4e6e1848a572399c", - "debugDepth": "0x03", - "debugHash": "0x59da4e7f809990ef691043ebe34b145be1bed07f81e96095bcf2f90059dff111" - }, - { - "nodeType": "0x02", - "key": "0xb8ea1e4fb6fbf0bab634447ec21f9dba89bb46e781bd36282fa4fd1d16940715", - "value": "0xe13a1ce5d30ca9bcc1e659c5c7a1601998b5fb1bd56f85bb13647fb22e4348b1", - "debugDepth": "0x02", - "debugHash": "0x9c908a604cf2f457a17b2294127e32912d40bed95c13b398548a09b86bf5f049" - }, - { - "nodeType": "0x02", - "key": "0xa55cfd9599efca06423183a50149847b52513f95c9bbf965c57492370d11601d", - "value": "0xceba4377dc99d9edae4fe8c9434cfa2e284141fe13a2c8142c3da31eb90999df", - "debugDepth": "0x02", - "debugHash": "0xf0ff78102eeb3d8f615b5822e0061ae2506c310d9925a3f2383b797f2c68237c" - }, - { - "nodeType": "0x00", - "mask": "0x0201", - "debugDepth": "0x01", - "debugHash": "0x533413d74493c65d526bd7f1226a3063778f7a953aa724a6a39501770ad7bdf4" - }, - { - "nodeType": "0x02", - "key": "0xf9631a69fc0e4a3329dcf8687559708fb355890990a0030b2b398cc535dce789", - "value": "0x549f9f19f49fea4ac8cde30c13e2b018b0016b0646574a869c99da53796157a5", - "debugDepth": "0x02", - "debugHash": "0xcd91d0a99f774f1f3bd59d8010104d1a3d782a8664cf7c4f8f699721cbf669c8" - }, - { - "nodeType": "0x00", - "mask": "0x8020", - "debugDepth": "0x02", - "debugHash": "0x1f87aa1ca8e26c40a553ed08ba0fff4902c763d128c18fa696d1e3ccca7c9b56" - }, - { - "nodeType": "0x02", - "key": "0xdda4a098721686dbeb0d773c4b47e27a0aedd4f2905048342fcff076bf2f1115", - "value": "0x61a21314d166fd69bf1df2299517c32d73ef5b602a6fe992c273f09df71d42e0", - "debugDepth": "0x03", - "debugHash": "0x263074add4974655761837fea02dbdccf61840388bdb47b1dba98c248ac0a5ef" - }, - { - "nodeType": "0x02", - "key": "0x7c21a1cc4f96354a4af38ab3090069a2a70f47126a860bec33e18ff8c17b7114", - "value": "0xcf40b24a1ab92894f594512bcc3cb1fa4c6b6d5ff1988019635f92244af49ccd", - "debugDepth": "0x03", - "debugHash": "0x62389caee85a257df9df0876c662f304d3feca36627035f974581b95a46c2c88" - }, - { - "nodeType": "0x00", - "mask": "0x0408", - "debugDepth": "0x01", - "debugHash": "0x99647bc21e9fed032119f88edb47277a455f4cd803a23d6058b758794cad167b" - }, - { - "nodeType": "0x02", - "key": "0x5dd7376d65aa16886606c4cb8a81f69d6e8e59ca27d8b76835955d11235c982b", - "value": "0x6ba066fae51c139bea5710d6c802aa52568b0461c39894ad0ff2b31946ab1521", - "debugDepth": "0x02", - "debugHash": "0x6f3d5cd28ae3a993f4b81bbe1d70dee3da5d0e91c510745889d71b8189a4ac6b" - }, - { - "nodeType": "0x02", - "key": "0x0277c24accc110cbfce144d0aae3b99b81aaa9bcb16d0ac17c4e11157376ba65", - "value": "0xe6161dd3c35a2e03a48101d4e9333bde57889728010f2b472fc30b77012a9b68", - "debugDepth": "0x02", - "debugHash": "0xe295924b2753d972cffff213364467c6505cd5a6f6a75f9575eadbad0fc00ca4" - }, - { - "nodeType": "0x00", - "mask": "0x1010", - "debugDepth": "0x01", - "debugHash": "0x886b9116ece3c6880e8027ed9ee4313a81139ee537eebd5e11fa6bb6f91e7e76" - }, - { - "nodeType": "0x02", - "key": "0x3ae0322b213cb8fa991c91a03ed975460eddc75fa4bd790830d59cc333e0563a", - "value": "0x4aee64a8fc2e42eb7441c4c13ef0e231fdbf5930eaa16f8fe229f0d8270813f9", - "debugDepth": "0x02", - "debugHash": "0x14cffbcdbc0d9ebdb9011ca56a5d718bd5700ac7cdf5ec9cacbfb5079e47b22f" - }, - { - "nodeType": "0x02", - "key": "0x2fb1db3bfe9d7994b82d77df110ddda4a5ec1a1876da3cc9350303d545b7b113", - "value": "0xf20a6907919370b70bf8887868c15a30471e639dbae741feb566599dc8224abd", - "debugDepth": "0x02", - "debugHash": "0x526b70897bc607f4e0cff1821938e1dbd5d57e3dfe98805ff1fc5e268f63ba70" - }, - { - "nodeType": "0x00", - "mask": "0x0480", - "debugDepth": "0x01", - "debugHash": "0x524c1b150aeecd9f7926fb50211134086511857c8b6f975148fabc8452e82ea7" - }, - { - "nodeType": "0x02", - "key": "0xc614837eef641893b5d862b1f1a31218bd317c214a91a950022f02af5818eea0", - "value": "0x9cf6284ffe506217adf820bfa2691db48fe3156d812b9b09d15b6a9f339a80b8", - "debugDepth": "0x02", - "debugHash": "0x159f3dc49eaf1597f0e58302b7ce873b4c2e022bb330419aa38e80a200ee05e0" - }, - { - "nodeType": "0x02", - "key": "0xe80fd3bcf48d98b4fafb011d4fa9f7b4038d5fd0d27fe6c36642d59680ae5c38", - "value": "0x90932fe47a782db029d7c5207254933108aedd085d6be6a8aaea3e4280c80561", - "debugDepth": "0x02", - "debugHash": "0x07a3d95597aa55016982744826cfde5e07bee04ccf22c9a76169668199a72ae2" - }, - { - "nodeType": "0x02", - "key": "0xe7d6ec0b041a66763623893b8e3550260d7113156583b05320f6bc5a5877fec0", - "value": "0x917b8c12a17ee612f79179c2b304a0c413d4025f66a9a124f5a3b9ec454f6920", - "debugDepth": "0x01", - "debugHash": "0xcc426926b4dd1b0f09fad8265b453f9ccbf92edccd9096470a8be1715f30184c" - } - ], - "debugDepth": "0x02", - "debugHash": "0x096209cb0218e85cccfb142e8d07a88b1a850748af3d50b0a3ba59ca93a24f26" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x724585a52f5680cf9032b235983e07375ae03680", - "balance": "0xebe0b6fa95f09696b6caa997effdbef4bdc5f4a5a9dcfeecdaa9b8f2d9cfdcc2e2befcbb0e", - "nonce": "0xe590dbc0a2fae7ca8c01", - "debugDepth": "0x02", - "debugHash": "0x06c48449255ac5e071c9f0ddf3264a2466cf42c43ca642a5b47267a8e4ac61fd" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x3bc4c43af3c522427b7bb14bd66500b86c990aa5", - "balance": "0xd9b2feb7ffd7f4afab8be6d5a7eec99f83dc819494bc8ae2b4ebc3f0ccffd9b4dbf2ecd30c", - "nonce": "0xcfa1fba1dcf3a2d6b301", - "codeType": "0x01", - "codeLen": "0x18", - "codeHash": { - "nodeType": "0x03", - "data": "0x534a40cbc0af7b3942b32a942ecdcdfc2187009e4b1a10a8a7662d2079ed445e" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0xb6be8eca65cbd10faf8c38e7a6fc9ef355c821fd8c4016329708ccd02d5be12b" - } - ], - "debugDepth": "0x01", - "debugHash": "0xfc1ce4d57338d5c582b66ca0a1600080a29121a8d9631205cd1a6987ef25a85f" - }, - { - "nodeType": "0x00", - "mask": "0x0240", - "debugDepth": "0x01", - "debugHash": "0x6417b3ea31067051c952f8af4d3951ebc1379e0ae261b51b8a0946021b90ea5b" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x47d6b7a05922529f2f459c6b4f90c8dc6e4854c3", - "balance": "0x9be682c3dcc09ad3bb92db82d798b2b1e4d9f5f5a6a5f3979fc3e29cdb88c9bc9c94d9b70e", - "nonce": "0xb9ffd2d8beca9db6d201", - "codeType": "0x01", - "codeLen": "0x52", - "codeHash": { - "nodeType": "0x03", - "data": "0x0695fd3aa1803a54e7b801137497c9b1384a577d9fa98890e0d773aa6646f4b6" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x35dd39ccaac9e5964cde756f033dfffbe18b4a010f023b459c26419ed0784d35" - } - ], - "debugDepth": "0x02", - "debugHash": "0x25ff32cc8a9d2e8005a5b687d0e8f10b2a1b10a74934a76847753b83ba190729" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x3844a8ed9faf6abaf2f997ff7c91538190b15bcb", - "balance": "0xb598e1daf2c5b9b5a895f4b89581b5a8bdb3ec86b491c3d691eac0c4d9fab7eb95aeb0a50c", - "nonce": "0xa2a8d8a1fbe4f9c1b401", - "debugDepth": "0x02", - "debugHash": "0x051866bf87791feb67613e6a4df2e3f98305187508d1321e8d0851800527e024" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x5ef4b2ea37ea89c3cdf4977de5c8339ce17f659e", - "balance": "0xa7a18e8fcbb0d8caa48d92ecd2eeaff9ff8e97e1c1a68785cbaec9f2bb81e28fb6b5dae00f", - "nonce": "0xc9cfeeadb2d0ec908701", - "debugDepth": "0x01", - "debugHash": "0x1579e585155014c0e682643b33569f5c79aa76e486845c435968aa996a7d9be8" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x91a850dbf40a43113b3da5170a7cbe8f8a15e126", - "balance": "0xc4abf4fcb5c3e5d48af2c1febfa2df99d2cabba58ededfd49ffbe8978fd4ec94fbdda0a202", - "nonce": "0xb2a6e787b6928d959301", - "debugDepth": "0x01", - "debugHash": "0xd9302aa1333c3211729c26b2ec2e9feada720f43d8226d65d8bbe62a18aa5020" - }, - { - "nodeType": "0x00", - "mask": "0x9020", - "debugDepth": "0x01", - "debugHash": "0x2c6ba3a53b187f1748e10bfba381afba20c7ac38b54ad38845d04541b9315291" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xb943a6d6f009f5c44cb04f455aba68177bb0cfe8", - "balance": "0xe9cca7e5f8efcfd7cec39dde90c5b9fd88a981f397e8deef99cbeed5a79cf6e3b3f387840e", - "nonce": "0xbfd7a6e1a2f58cfb0e", - "codeType": "0x01", - "codeLen": "0x24", - "codeHash": { - "nodeType": "0x03", - "data": "0x0328a45bf123177d32d8340501f91ef50d6aaf1e2d488752b49fb7d112e7e18b" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x02", - "debugHash": "0x73b772b1d4329e16865974686bf424aaf1fede81610eabac556b2e68fe423dbb" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xe8e9736b328369d09bdf324ccb7e79cf54aa4d19", - "balance": "0xcdb6f39b8396fcd495dcf7f5c399c1aff5dbcaebe28dc69ae694feb58392dca98bd0e0a10e", - "nonce": "0xc8a1b1c5dc89eaa7ba01", - "codeType": "0x00", - "codeLen": "0x40", - "code": "0xa4bb9f38d5e9eecbfcf5541a1593fd784502a31e57d612f039831b3f71de1d7843a5c79b05c7cfe13bcc89d2bd251101bc948fef2e88960122ba6a292a8f8d4b", - "storage": [ - { - "nodeType": "0x03", - "data": "0xdbd78c56c65c6e03ec21842cc84c39026dd2ce45ce978272c20ceaf120898363" - } - ], - "debugDepth": "0x02", - "debugHash": "0xbe401ff9f09ade3b9d388445d30cd407dd724bc60b3fdf3e9506f63a509b73ff" - }, - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x070aef02f7ba5cd82e234e30833efb083977d624", - "balance": "0xbef396ee9781c193fcc6e8e983c8b6dbb5a2d8a5ed85ece6f1a5e1e1d6f3ead7d8cca4e70c", - "nonce": "0xb8a3d5c8b1d6baf03f", - "debugDepth": "0x02", - "debugHash": "0x1477130ad8a4b8a9424bdd3211db501328c9113547d74dbc27193e8845a0ee56" - }, - { - "nodeType": "0x00", - "mask": "0x0101", - "debugDepth": "0x01", - "debugHash": "0x6be1340be63aa51a5ec66d3abfb2da53f41af1f2b5e68e9359747be2e389733f" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xec15e9fa0710999d5d0428de21bec3498051c320", - "balance": "0xb2f78386dac7adc4dbb3b6b8eafad0dfd6bb8cfccd85fc99b8a3ddd8c3d796bea5f5d8c00e", - "nonce": "0xdccec8fab69b94f6bc01", - "codeType": "0x00", - "codeLen": "0x44", - "code": "0x07f35186ccdf94ab120469adeb7ae991b3c5a5760b5dec74199b2b039d99b58089ea2e4991635571c4fd941c44d07371073a31c7d1ab6dcfa66ef4498032c05999df1bca", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x02", - "debugHash": "0xb99a9b58db31fee333e7f76070bf46b70c2118d880a8e28e2582bb732bf1d722" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x4f4f02b85743e51eeb9b29fab6f1bdcf905d7144", - "balance": "0xe288e3ac89c2fbb9ffb3f9aba7ef9fc99cfce2bcfea490c9babdc88b8199fabfa596a69c04", - "nonce": "0x95c6bb8bf793ecfddf01", - "codeType": "0x01", - "codeLen": "0x72", - "codeHash": { - "nodeType": "0x03", - "data": "0x354b47d208104e085f8dd993f6f38b4d4251295e0892eb65006a3d8a49192f02" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x02", - "debugHash": "0xd204dd341b710ec3a03a0654310bd09075fd999a5628b542ffc8dc40515bc717" - }, - { - "nodeType": "0x01", - "nibblesLen": "0x01", - "nibbles": "0xc0", - "debugDepth": "0x01", - "debugHash": "0x97d111eb3e020815ee22293932107c3bf1f97b3fd375199fc148c8e0e9e34c72" - }, - { - "nodeType": "0x00", - "mask": "0x0050", - "debugDepth": "0x02", - "debugHash": "0x57fdde094ce54de043f4601eb0903d567e05cb75e2aecbef2330079fd0713ded" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xf8001bf89b36c33418001a4ffca6d9e92d5644b3", - "balance": "0xa3c08edbf8958cffb4ae8087a1cfa094cfa7dce1d3b2d7f2ffbaf295fbbba68cf0fe99c303", - "nonce": "0xa6def5c6db93809574", - "codeType": "0x00", - "codeLen": "0x2b", - "code": "0x02fda5416a060c44144177500c89d032760a6cb2f05ac3e407f105cf0f3f16eee3473e01954c6c5913a217", - "storage": [ - { - "nodeType": "0x03", - "data": "0x2df94f0aea1c56fb24d7d6ec8ae2492914d432cebee6048609f26190fe6b1f5b" - } - ], - "debugDepth": "0x03", - "debugHash": "0xc775f8647f49a6ae3555cca3f6f7797bcde1da76cccc6a60073b8573a0e8303e" - }, - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0xc5c77c90d656ff719e6da32e245c4359447dca94", - "balance": "0xbc8f90b4eec991d5b4e183abef88adb395b5a6ce98beca86bcf280b9e2acb6d8cca592c004", - "nonce": "0xa88b949ad2afc2bc34", - "codeType": "0x00", - "codeLen": "0x44", - "code": "0xa69cd7135ed78016acf0a51c78ef016fd1be53551417c67c30696bb182a2f121fe930efa000435b95fdbda0269f16572cfd73598e753254e7b030a5ae7a8c1897d4310a3", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x03", - "debugHash": "0xe564c934dd3ab231abe5e73b4d7529e1227fd8ec7abd6b91477d86dea7d784d1" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/bad_address.json b/stateless/fixtures/bad_address.json deleted file mode 100644 index 71caa9466..000000000 --- a/stateless/fixtures/bad_address.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0xAA0e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/bad_balance.json b/stateless/fixtures/bad_balance.json deleted file mode 100644 index 33c452afc..000000000 --- a/stateless/fixtures/bad_balance.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8ef8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/bad_code.json b/stateless/fixtures/bad_code.json deleted file mode 100644 index 9f91e5c78..000000000 --- a/stateless/fixtures/bad_code.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x720ef0ee74f1b3b8252eb3270d484b223f775810", - "balance": "0xb3c2cee7e2cb9289c8cdd1d9b99ff0e7829fdce2f5afd2fca6a2ff9f9bf8e38493d09bc403", - "nonce": "0xad83abd1899ad9ee56", - "codeType": "0x00", - "codeLen": "0x3d", - "code": "0xefda93a915fe9ac8998e195a5fe0bb85a2474e676551e8978cba5b5ea3af0dc90606fd0e6d4f07b0262ada94b579676f51e4226b2dc456be061e99", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/bad_code_len.json b/stateless/fixtures/bad_code_len.json deleted file mode 100644 index c0c63b3da..000000000 --- a/stateless/fixtures/bad_code_len.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x720ef0ee74f1b3b8252eb3270d484b223f775810", - "balance": "0xb3c2cee7e2cb9289c8cdd1d9b99ff0e7829fdce2f5afd2fca6a2ff9f9bf8e38493d09bc403", - "nonce": "0xad83abd1899ad9ee56", - "codeType": "0x00", - "codeLen": "0xee56", - "code": "0x09ddefda93a915fe9ac8998e195a5fe0bb85a2474e676551e8978cba5b5ea3af0dc90606fd0e6d4f07b0262ada94b579676f51e4226b2dc456be061e99", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/bad_nonce.json b/stateless/fixtures/bad_nonce.json deleted file mode 100644 index ebc416015..000000000 --- a/stateless/fixtures/bad_nonce.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xEEe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/code_len_exceed_eip170.json b/stateless/fixtures/code_len_exceed_eip170.json deleted file mode 100644 index 03c278947..000000000 --- a/stateless/fixtures/code_len_exceed_eip170.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x720ef0ee74f1b3b8252eb3270d484b223f775810", - "balance": "0xb3c2cee7e2cb9289c8cdd1d9b99ff0e7829fdce2f5afd2fca6a2ff9f9bf8e38493d09bc403", - "nonce": "0xad83abd1899ad9ee56", - "codeType": "0x00", - "codeLen": "0xad9ee56", - "code": "0x09ddefda93a915fe9ac8998e195a5fe0bb85a2474e676551e8978cba5b5ea3af0dc90606fd0e6d4f07b0262ada94b579676f51e4226b2dc456be061e99", - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x3ef071a43e07a7a209d4a67f9edd05477e8e3ac30af64656cfe784961fd2433a" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_account_type.json b/stateless/fixtures/invalid_account_type.json deleted file mode 100644 index c4ec914e6..000000000 --- a/stateless/fixtures/invalid_account_type.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "accountTypeSub": "0x07", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_code_len.json b/stateless/fixtures/invalid_code_len.json deleted file mode 100644 index aae928c14..000000000 --- a/stateless/fixtures/invalid_code_len.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x01", - "codeLen": "0xa3e99cc2e5e5e5d6ce01", - "codeHash": { - "nodeType": "0x03", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_code_len2.json b/stateless/fixtures/invalid_code_len2.json deleted file mode 100644 index 1cd3d091b..000000000 --- a/stateless/fixtures/invalid_code_len2.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x01", - "codeLen": "0xcc2e5e5e5d6ce01", - "codeHash": { - "nodeType": "0x03", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_code_type.json b/stateless/fixtures/invalid_code_type.json deleted file mode 100644 index c44a45eee..000000000 --- a/stateless/fixtures/invalid_code_type.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x07", - "codeLen": "0x5e", - "codeHash": { - "nodeType": "0x03", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_hash_type.json b/stateless/fixtures/invalid_hash_type.json deleted file mode 100644 index 305f1ec40..000000000 --- a/stateless/fixtures/invalid_hash_type.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x01", - "codeLen": "0x5e", - "codeHash": { - "nodeType": "0x04", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_metadata.json b/stateless/fixtures/invalid_metadata.json deleted file mode 100644 index aca266c5c..000000000 --- a/stateless/fixtures/invalid_metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x01", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_node_type.json b/stateless/fixtures/invalid_node_type.json deleted file mode 100644 index 402a918bd..000000000 --- a/stateless/fixtures/invalid_node_type.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x06", - "accountType": "0x00", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_storage_hash_type.json b/stateless/fixtures/invalid_storage_hash_type.json deleted file mode 100644 index e50cbf4ba..000000000 --- a/stateless/fixtures/invalid_storage_hash_type.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x01", - "codeLen": "0x5e", - "codeHash": { - "nodeType": "0x03", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x04", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/invalid_version.json b/stateless/fixtures/invalid_version.json deleted file mode 100644 index 234193ae1..000000000 --- a/stateless/fixtures/invalid_version.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0x02", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/valid_account_type_invalid_data.json b/stateless/fixtures/valid_account_type_invalid_data.json deleted file mode 100644 index 504292dbd..000000000 --- a/stateless/fixtures/valid_account_type_invalid_data.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x00", - "accountTypeSub": "0x01", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/valid_code_type_invalid_data.json b/stateless/fixtures/valid_code_type_invalid_data.json deleted file mode 100644 index 8101dd428..000000000 --- a/stateless/fixtures/valid_code_type_invalid_data.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x02", - "codeLen": "0x5e", - "codeHash": { - "nodeType": "0x03", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/valid_hash_type_bad_data.json b/stateless/fixtures/valid_hash_type_bad_data.json deleted file mode 100644 index 0453b49d0..000000000 --- a/stateless/fixtures/valid_hash_type_bad_data.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "accountType": "0x01", - "address": "0x205aea15c1e739b4acdae0cc3b57c34f55907a73", - "balance": "0x8ca589e2e38294c9899abddfbbe887c9bbc5d296eda1f59b8180d8d88883c88d9a86bdba06", - "nonce": "0xa3e99cc2e5e5e5d6ce01", - "codeType": "0x01", - "codeLen": "0x5e", - "codeHash": { - "nodeType": "0x02", - "data": "0x8dd74346f58c605477239378ca66f42e8a75b9cc8aea3287ad30c8a5932a92da" - }, - "storage": [ - { - "nodeType": "0x03", - "data": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - ], - "debugDepth": "0x00", - "debugHash": "0x12d52947c2ec748f833d7d13d78ffac0594834a5e6d8e4e32831f4717eefc64d" - } - ] -} \ No newline at end of file diff --git a/stateless/fixtures/valid_node_type_invalid_data.json b/stateless/fixtures/valid_node_type_invalid_data.json deleted file mode 100644 index 0aa007d40..000000000 --- a/stateless/fixtures/valid_node_type_invalid_data.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "0x01", - "metadata": "0x00", - "rootHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4", - "error": true, - "tree": [ - { - "nodeType": "0x02", - "nodeTypeSub": "0x00", - "accountType": "0x00", - "address": "0x080e7dabd304f1acd44786d3ac613a5f2ff66b77", - "balance": "0x8cf8c7f1f3ffad95bce2f996d7e1f5a6d9aa96efce9ccba59789dcd6dce3969cc99bc9c50e", - "nonce": "0xe3f483f981dee9db5e", - "debugDepth": "0x00", - "debugHash": "0x5b6f632c9fe4ab50cc0f4d09b38235a3a6afbe85048af44bae35297795a932f4" - } - ] -} \ No newline at end of file diff --git a/stateless/invalidInput/crash-6081fe3734250348623b03c1d3acb35d90d2ecfc b/stateless/invalidInput/crash-6081fe3734250348623b03c1d3acb35d90d2ecfc deleted file mode 100644 index 1bf239ad0608a0689781f6fb1e365acae3dfc632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13 UcmZQ%VEF%^k%5VUiBXFY026xxF#rGn diff --git a/stateless/invalidInput/crash-a865d42d79ebbfd42b86d11e2e068643cf0fd503 b/stateless/invalidInput/crash-a865d42d79ebbfd42b86d11e2e068643cf0fd503 deleted file mode 100644 index 09e441efd8166e54223de47e1dd6921a11cc5e2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28 ccmZQ%U}R)q=mruj3_u`we}--Xhyes;03<&HAOHXW diff --git a/stateless/invalidInput/crash-a8a8b9592a31539c0318ae6a1cd416d5644cb74a b/stateless/invalidInput/crash-a8a8b9592a31539c0318ae6a1cd416d5644cb74a deleted file mode 100644 index d5d64275bee6b2cc40100ed9c83037fbee401f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9 QcmZQ%U}Ruo)N+aj00D#m%>V!Z diff --git a/stateless/invalidInput/crash-d755f044304f53abf28a735763865a449a198235 b/stateless/invalidInput/crash-d755f044304f53abf28a735763865a449a198235 deleted file mode 100644 index bece4c4b9b5b817cfe1fc23eaba2716d439af173..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmZQ%V67xSS7O}Gc$uG16(y&^gjgHVb{5y6u=0z Y24oKcKrH}LKrzMy2B5{-2fwFHzUygG5|Oz27CYj diff --git a/stateless/invalidInput/crash-f9a002e389b120714a2324487a6e473b0fedc12e b/stateless/invalidInput/crash-f9a002e389b120714a2324487a6e473b0fedc12e deleted file mode 100644 index 83050f8a5a177523a3d503ddd10beffa81afac9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmZQ%U}DsAiWZ#P{j2}>jG*s9-&ZlO`Om= 9. -* In Yellow Paper, the 17th elem of the `Branch Node` can contains a value. But it always empty in a real Ethereum State trie. - The block witness spec also ignore this 17th elem when encoding or decoding `Branch Node`. - This can happen because in Ethereum `Secure Hexary Trie`, every keys have uniform length of 32 bytes or 64 nibbles. - With the absence of 17th element, a `Branch Node` will never contains leaf value. -* When processing a `Branch Node` you need to emit the `hash to next elem` if the elem is not match for the current path nibble. -* When processing a `Leaf Node` or an `Extension Node` and you meet no match condition, you'll also emit a hash. - - -If you try to build witness on something else that is not an `Ethereum Account` and using keys with different length, -you will probably need to implement full spec from the Yellow Paper. - -## Multi keys - -Before we produce multiproof block witness, let us create a multi keys data structure that will help us doing nibbles comparison. - -### Sort the keys lexicographically - -For example, I have 16 keys. Before sort: - -```text -e26f87f8d83b61dbd890cda95c46c74f8d22067c323a89b58e6e8f561f2fb8ea -5e00236babd8b0737512348d0a6bae0ed3e69e76391a8f16085c1c7a4864a098 -28d0cacafa7c17f7a9b759289c11908f3ca0783fc1940399b8e8c216dcccab2d -a1ba56edb2cfcd4914d5bfc35965be5b7df3fc289f8c8c4f3987aaf58196119a -5021c9457544d81b9870ab986ba52a1fccedd35df09c66de268ecdf289e1127d -bac9405b4813ac28cc27bc09fb6b27aefa3e341d3ab7f91c63f2482446abb28b -d676c8ea429a4b2e075538475c4cc89cf0251335d167cac2bb516a6cd046fbfd -df3585baa4162db6431f36ea2d70380b855cdb53203c707463b5df2c4ed573dc -903b206fc2b1aed80eecc439e7ce5049e955b1d5e7b784aadf1c424c99bd270a -26eb8904b00d91adf989f5919b71e8bdf96ded347ee25f8cceeb32fb68fb396f -6a52cf44e5d529973c5f8c10e4a88301076065529370776136b08ddf28617634 -6c4cb76d2205904095b8ac41e9deb533ced6d3f5cc5c4f5a55d6abd50b21d022 -850169badff8c49045afcb92bddaa59bf0aa3bd996d5a9a2f19984659e0df156 -1d86f4ba779b3e61f65cd0f1b4eea004ddb1cd42b6294979447579e57bb32e02 -b63e59b25dc10e89b04f622ca45cd3da097e1ba41ff2fe202ca0587c53fdbe98 -5b0f8a5612111ffbc215a7fb82ee382c1a36f0035653c1f3fa3f520c83bee256 -``` - -After sort: -``` -1d86f4ba779b3e61f65cd0f1b4eea004ddb1cd42b6294979447579e57bb32e02 -26eb8904b00d91adf989f5919b71e8bdf96ded347ee25f8cceeb32fb68fb396f -28d0cacafa7c17f7a9b759289c11908f3ca0783fc1940399b8e8c216dcccab2d -5021c9457544d81b9870ab986ba52a1fccedd35df09c66de268ecdf289e1127d -5b0f8a5612111ffbc215a7fb82ee382c1a36f0035653c1f3fa3f520c83bee256 -5e00236babd8b0737512348d0a6bae0ed3e69e76391a8f16085c1c7a4864a098 -6a52cf44e5d529973c5f8c10e4a88301076065529370776136b08ddf28617634 -6c4cb76d2205904095b8ac41e9deb533ced6d3f5cc5c4f5a55d6abd50b21d022 -850169badff8c49045afcb92bddaa59bf0aa3bd996d5a9a2f19984659e0df156 -903b206fc2b1aed80eecc439e7ce5049e955b1d5e7b784aadf1c424c99bd270a -a1ba56edb2cfcd4914d5bfc35965be5b7df3fc289f8c8c4f3987aaf58196119a -b63e59b25dc10e89b04f622ca45cd3da097e1ba41ff2fe202ca0587c53fdbe98 -bac9405b4813ac28cc27bc09fb6b27aefa3e341d3ab7f91c63f2482446abb28b -d676c8ea429a4b2e075538475c4cc89cf0251335d167cac2bb516a6cd046fbfd -df3585baa4162db6431f36ea2d70380b855cdb53203c707463b5df2c4ed573dc -e26f87f8d83b61dbd890cda95c46c74f8d22067c323a89b58e6e8f561f2fb8ea -``` - -### A group - -After you have nicely sorted keys, now is the time to make a parent group. -A `group` is a tuple of [first, last] act as index of keys. -A top level parent group will always have `first: 0` and `last: numkeys-1` -Besides sorting, we are not going to produce groups before the actual block witness take place. -We produce the top level group right before entering the block witness generation algorithm. -Top level group always start with `depth: 0`. - -### Multi keys and Branch Node - -During block witness construction, and you encounter a `Branch Node` you'll grouping the keys together -based on their prefix nibble. We only use a single nibble in this case. Therefore you'll probably end up with -16 groups of keys. __Each of the group consist of the same single nibble prefix__ - -Assume we are at `depth: 0`, the parent group is: `[0, 15]`, this is the result we have: - -``` -1d86f4ba779b3e61f65cd0f1b4eea004ddb1cd42b6294979447579e57bb32e02 # group 1: [0, 0] - -26eb8904b00d91adf989f5919b71e8bdf96ded347ee25f8cceeb32fb68fb396f # group 2: [1, 2] -28d0cacafa7c17f7a9b759289c11908f3ca0783fc1940399b8e8c216dcccab2d - -5021c9457544d81b9870ab986ba52a1fccedd35df09c66de268ecdf289e1127d # group 3: [3, 5] -5021b0f8a5612111ffbc215a7fb82ee382c1a36f0035653c1f3fa3f520c83bee -5e00236babd8b0737512348d0a6bae0ed3e69e76391a8f16085c1c7a4864a098 - -6a52cf44e5d529973c5f8c10e4a88301076065529370776136b08ddf28617634 # group 4: [6, 7] -6c4cb76d2205904095b8ac41e9deb533ced6d3f5cc5c4f5a55d6abd50b21d022 - -850169badff8c49045afcb92bddaa59bf0aa3bd996d5a9a2f19984659e0df156 # group 5: [8, 8] - -903b206fc2b1aed80eecc439e7ce5049e955b1d5e7b784aadf1c424c99bd270a # group 6: [9, 9] - -a1ba56edb2cfcd4914d5bfc35965be5b7df3fc289f8c8c4f3987aaf58196119a # group 7: [10, 10] - -b63e59b25dc10e89b04f622ca45cd3da097e1ba41ff2fe202ca0587c53fdbe98 # group 8: [11, 12] -bac9405b4813ac28cc27bc09fb6b27aefa3e341d3ab7f91c63f2482446abb28b - -d676c8ea429a4b2e075538475c4cc89cf0251335d167cac2bb516a6cd046fbfd # group 9: [13, 14] -df3585baa4162db6431f36ea2d70380b855cdb53203c707463b5df2c4ed573dc - -e26f87f8d83b61dbd890cda95c46c74f8d22067c323a89b58e6e8f561f2fb8ea # group 10: [15, 15] -``` - -In a `Hexary Trie` you'll only match the current head(nibble) of the path with one elem from `Branch Node`. -In multiproof algorithm, you need to match every elem with as much groups as possible. -If there is no __invalid address__ or the invalid address hiding in one of the group, you will have -branches as much as non empty elements in a `Branch Node` and they will have the same nibble/prefix. - -Because the match only involve one nibble, we advance the depth only one. - -### Multi keys and Leaf Node and Extension Node - -If you encounter a `Leaf Node` or `Extension Node`, they will have the same algorithm to generate groups. -For example, we are at `depth: 1`, and we are processing `group 3: [3, 5]`. -Using the prefix nibbles from `Leaf Node` or `Extension Node`, we produce two groups if our prefix nibbles is `021`: - -``` -5 021c9457544d81b9870ab986ba52a1fccedd35df09c66de268ecdf289e1127d # group 1: [3, 4] -5 021b0f8a5612111ffbc215a7fb82ee382c1a36f0035653c1f3fa3f520c83bee - -5 e00236babd8b0737512348d0a6bae0ed3e69e76391a8f16085c1c7a4864a098 # group 2: [5, 5] -``` - -At max we will have 3 groups, and every possible combinations will be: - -* match(1 group): all keys are matching the prefix nibbles. -* no match(1 group): there is no match. -* not match, match( 2 groups): a non matching group preceding matching group. -* match, not match(2 groups): a matching group before non matching group. -* not match, match, not match(3 groups): a matching group is between two non matching groups. - -As you can see, we will only have a single match group or no match at all during constructing these groups. -And we only interested in this match group if it exist and ignore all other not matching groups. - -#### A matching group for Extension Node - -If we have a matching group for `Extension Node`, we will use this group as parent group -when we move deeper into the trie. We will advance our depth with the length of the prefix nibbles. - -Let's say we have a match using nibbles `021`, the matching group is `group 1: [3, 4]`, -we can move deeper after `Extension Node` by adding 3 to our depth. - -#### A matching group for Leaf Node - -If we move deeper, finally we will encounter a `Leaf Node`. -If you have multiple keys inside your match group, then it is a bug in your multi keys algorithm. -If there is an __invalid address__ hiding in a matching group, you also have bug in your multi keys algorithm. -If you meet with a leaf group and a match group, emit an `Account` or a `Account Storage Leaf`. - -``` -5 021 c9457544d81b9870ab986ba52a1fccedd35df09c66de268ecdf289e1127d # group 1: [3, 3] - -5 021 b0f8a5612111ffbc215a7fb82ee382c1a36f0035653c1f3fa3f520c83bee # group 2: [3, 4] -``` - -One of this group is a match for a `Leaf Node`, or no match at all. - -### Emitting an `Account` - -During emitting a `Leaf Node` or an `Account`, and the account have storage trie along with keys and values needs -to be included in the block witness too, we again repeat the algorithm in account storage mode and set the new depth to 0. diff --git a/stateless/stack_based_witness_builder.nim b/stateless/stack_based_witness_builder.nim deleted file mode 100644 index cf9fee1ad..000000000 --- a/stateless/stack_based_witness_builder.nim +++ /dev/null @@ -1,102 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2023 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -proc getBranchStack*(wb: WitnessBuilder; key: openArray[byte]): string = - var - node = wb.db.get(wb.root.data) - stack = @[(node, initNibbleRange(key))] - - result.add node.toHex - while stack.len > 0: - let (node, path) = stack.pop() - if node.len == 0: continue - var nodeRlp = rlpFromBytes node - - case nodeRlp.listLen - of 2: - let (isLeaf, k) = nodeRlp.extensionNodeKey - let sharedNibbles = sharedPrefixLen(path, k) - if sharedNibbles == k.len: - let value = nodeRlp.listElem(1) - if not isLeaf: - let nextLookup = value.getNode - stack.add((nextLookup, path.slice(sharedNibbles))) - result.add nextLookup.toHex - of 17: - if path.len != 0: - var branch = nodeRlp.listElem(path[0].int) - if not branch.isEmpty: - let nextLookup = branch.getNode - stack.add((nextLookup, path.slice(1))) - result.add nextLookup.toHex - else: - raise newException(CorruptedTrieDatabase, - "HexaryTrie node with an unexpected number of children") - -proc getBranch*(wb: WitnessBuilder; key: openArray[byte]): seq[seq[byte]] = - var - node = wb.db.get(wb.root.data) - stack = @[(node, initNibbleRange(key))] - - result.add node - while stack.len > 0: - let (node, path) = stack.pop() - if node.len == 0: continue - var nodeRlp = rlpFromBytes node - - case nodeRlp.listLen - of 2: - let (isLeaf, k) = nodeRlp.extensionNodeKey - let sharedNibbles = sharedPrefixLen(path, k) - if sharedNibbles == k.len: - let value = nodeRlp.listElem(1) - if not isLeaf: - let nextLookup = value.getNode - stack.add((nextLookup, path.slice(sharedNibbles))) - result.add nextLookup - of 17: - if path.len != 0: - var branch = nodeRlp.listElem(path[0].int) - if not branch.isEmpty: - let nextLookup = branch.getNode - stack.add((nextLookup, path.slice(1))) - result.add nextLookup - else: - raise newException(CorruptedTrieDatabase, - "HexaryTrie node with an unexpected number of children") - -proc buildWitness*(wb: var WitnessBuilder; key: openArray[byte]) = - var - node = wb.db.get(wb.root.data) - stack = @[(node, initNibbleRange(key))] - - while stack.len > 0: - let (node, path) = stack.pop() - if node.len == 0: continue - var nodeRlp = rlpFromBytes node - - case nodeRlp.listLen - of 2: - let (isLeaf, k) = nodeRlp.extensionNodeKey - let sharedNibbles = sharedPrefixLen(path, k) - if sharedNibbles == k.len: - let value = nodeRlp.listElem(1) - if not isLeaf: - let nextLookup = value.getNode - stack.add((nextLookup, path.slice(sharedNibbles))) - of 17: - if path.len != 0: - var branch = nodeRlp.listElem(path[0].int) - if not branch.isEmpty: - let nextLookup = branch.getNode - stack.add((nextLookup, path.slice(1))) - else: - raise newException(CorruptedTrieDatabase, - "HexaryTrie node with an unexpected number of children") diff --git a/stateless/test_block_witness.nim b/stateless/test_block_witness.nim deleted file mode 100644 index 9b02a7cc8..000000000 --- a/stateless/test_block_witness.nim +++ /dev/null @@ -1,149 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2024 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -import - unittest2, os, json, strutils, - eth/[common, rlp], eth/trie/trie_defs, - stew/byteutils, - ../tests/[test_helpers, test_config], - ../nimbus/db/[ledger, core_db, distinct_tries], ./witness_types, - ../stateless/[witness_from_tree, tree_from_witness], - ./multi_keys - -type - Tester = object - keys: MultiKeysRef - memDB: CoreDbRef - -proc testGetBranch(tester: Tester, rootHash: KeccakHash, testStatusIMPL: var TestStatus) = - var trie = initAccountsTrie(tester.memDB, rootHash) - let flags = {wfNoFlag} - - try: - var wb = initWitnessBuilder(tester.memDB, rootHash, flags) - var witness = wb.buildWitness(tester.keys) - - var db = newCoreDbRef(DefaultDbMemory) - when defined(useInputStream): - var input = memoryInput(witness) - var tb = initTreeBuilder(input, db, flags) - else: - var tb = initTreeBuilder(witness, db, flags) - - var root = tb.buildTree() - check root.data == rootHash.data - - let newTrie = initAccountsTrie(tb.getDB(), root) - for kd in tester.keys.keys: - let account = rlp.decode(trie.getAccountBytes(kd.address), Account) - let recordFound = newTrie.getAccountBytes(kd.address) - if recordFound.len > 0: - let acc = rlp.decode(recordFound, Account) - doAssert acc == account - else: - doAssert(false, "BUG IN WITNESS/TREE BUILDER") - - except ContractCodeError as e: - debugEcho "CONTRACT CODE ERROR: ", e.msg - -func parseHash256(n: JsonNode, name: string): Hash256 = - hexToByteArray(n[name].getStr(), result.data) - -proc setupStateDB(tester: var Tester, wantedState: JsonNode, stateDB: LedgerRef): Hash256 = - var keys = newSeqOfCap[AccountKey](wantedState.len) - - for ac, accountData in wantedState: - let account = ethAddressFromHex(ac) - let slotVals = accountData{"storage"} - var storageKeys = newSeqOfCap[StorageSlot](slotVals.len) - - for slotStr, value in slotVals: - let slot = fromHex(UInt256, slotStr) - storageKeys.add(slot.toBytesBE) - stateDB.setStorage(account, slot, fromHex(UInt256, value.getStr)) - - let nonce = accountData{"nonce"}.getHexadecimalInt.AccountNonce - let code = accountData{"code"}.getStr.safeHexToSeqByte - let balance = UInt256.fromHex accountData{"balance"}.getStr - - stateDB.setNonce(account, nonce) - stateDB.setCode(account, code) - stateDB.setBalance(account, balance) - - let sKeys = if storageKeys.len != 0: newMultiKeys(storageKeys) else: MultiKeysRef(nil) - let codeTouched = code.len > 0 - keys.add(AccountKey(address: account, codeTouched: codeTouched, storageKeys: sKeys)) - - tester.keys = newMultiKeys(keys) - stateDB.persist() - result = stateDB.rootHash - -proc testBlockWitness(node: JsonNode, rootHash: Hash256, testStatusIMPL: var TestStatus) = - var - tester = Tester(memDB: newCoreDbRef(DefaultDbMemory)) - ac = LedgerRef.init(tester.memDB, emptyRlpHash) - - let root = tester.setupStateDB(node, ac) - if rootHash != emptyRlpHash: - check root == rootHash - - tester.testGetBranch(root, testStatusIMPL) - -proc testFixtureBC(node: JsonNode, testStatusIMPL: var TestStatus) = - for fixtureName, fixture in node: - let rootHash = parseHash256(fixture["genesisBlockHeader"], "stateRoot") - fixture["pre"].testBlockWitness(rootHash, testStatusIMPL) - -proc testFixtureGST(node: JsonNode, testStatusIMPL: var TestStatus) = - var fixture: JsonNode - - for fixtureName, child in node: - fixture = child - break - - fixture["pre"].testBlockWitness(emptyRlpHash, testStatusIMPL) - -proc blockWitnessMain*(debugMode = false) = - const - legacyGSTFolder = "eth_tests" / "LegacyTests" / "Constantinople" / "GeneralStateTests" - newGSTFolder = "eth_tests" / "GeneralStateTests" - newBCFolder = "eth_tests" / "BlockchainTests" - - if paramCount() == 0 or not debugMode: - # run all test fixtures - suite "Block Witness": - jsonTest(newBCFolder, "witnessBuilderBC", testFixtureBC) - suite "Block Witness": - jsonTest(newGSTFolder, "witnessBuilderGST", testFixtureGST) - else: - # execute single test in debug mode - let config = getConfiguration() - if config.testSubject.len == 0: - echo "missing test subject" - quit(QuitFailure) - - let folder = if config.legacy: legacyGSTFolder else: newGSTFolder - let path = "tests" / "fixtures" / folder - let n = json.parseFile(path / config.testSubject) - var testStatusIMPL: TestStatus - testFixtureGST(n, testStatusIMPL) - -when isMainModule: - var message: string - - ## Processing command line arguments - if processArguments(message) != Success: - echo message - quit(QuitFailure) - else: - if len(message) > 0: - echo message - quit(QuitSuccess) - blockWitnessMain(true) diff --git a/stateless/test_fuzz.nim b/stateless/test_fuzz.nim deleted file mode 100644 index 2c3409724..000000000 --- a/stateless/test_fuzz.nim +++ /dev/null @@ -1,25 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2024 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -import - testutils/fuzzing, ../../nimbus/db/core_db, - ./tree_from_witness, ./witness_types - -# please read instruction in status-im/nim-testutils/fuzzing/readme.md -# or status-im/nim-testutils/fuzzing/fuzzing_on_windows.md -# if you want to run fuzz test - -test: - var db = newCoreDbRef(DefaultDbMemory) - try: - var tb = initTreeBuilder(payload, db, {wfNoFlag}) - let root = tb.buildTree() - except ParsingError, ContractCodeError: - debugEcho "Error detected ", getCurrentExceptionMsg() diff --git a/stateless/test_witness_json.nim b/stateless/test_witness_json.nim deleted file mode 100644 index 2cb99193a..000000000 --- a/stateless/test_witness_json.nim +++ /dev/null @@ -1,190 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2024 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -import - eth/common, json, os, unittest2, - ../nimbus/db/core_db, - ./tree_from_witness, parseopt, - ./witness_types, stew/byteutils - -type - Tester = object - rootHash: KeccakHash - error: bool - output: seq[byte] - -proc write(t: var Tester, x: openArray[byte]) = - t.output.add x - -proc write(t: var Tester, x: string) = - let len = (x.len - 2) div 2 - var buf: array[4096, byte] - hexToByteArray(x, buf, 0, len - 1) - t.write(buf.toOpenArray(0, len - 1)) - -proc write(t: var Tester, x: JsonNode) = - t.write(x.getStr()) - -proc processBranchNode(t: var Tester, x: JsonNode) = - t.write(x["mask"]) - -proc processExtensionNode(t: var Tester, x: JsonNode) = - t.write(x["nibblesLen"]) - t.write(x["nibbles"]) - -proc processNode(t: var Tester, x: JsonNode, storageMode: bool = false) - -proc writeSub(t: var Tester, x: JsonNode, name: string): string = - let subName = name & "Sub" - let nodeType = x[name].getStr() - if subName in x: - let subType = x[subName].getStr() - t.write(subType) - else: - t.write(nodeType) - result = nodeType - -proc processHashNode(t: var Tester, x: JsonNode) = - discard t.writeSub(x, "nodeType") - t.write(x["data"]) - -proc processStorage(t: var Tester, tree: JsonNode) = - for x in tree: - t.processNode(x, true) - -proc processByteCode(t: var Tester, x: JsonNode) = - let codeType = t.writeSub(x, "codeType") - case codeType - of "0x00": - let codeLen = x["codeLen"].getStr() - t.write(codeLen) - if codeLen != "0x00": - t.write(x["code"]) - of "0x01": - t.write(x["codeLen"]) - t.processHashNode(x["codeHash"]) - else: - raise newException(ParsingError, "wrong bytecode type") - -proc processAccountNode(t: var Tester, x: JsonNode) = - let accountType = t.writeSub(x, "accountType") - t.write(x["address"]) - t.write(x["balance"]) - t.write(x["nonce"]) - - case accountType: - of "0x00": - discard - of "0x01": - t.processByteCode(x) - t.processStorage(x["storage"]) - else: - raise newException(ParsingError, "wrong account type") - -proc processStorageLeafNode(t: var Tester, x: JsonNode) = - t.write(x["key"]) - t.write(x["value"]) - -proc processNode(t: var Tester, x: JsonNode, storageMode: bool = false) = - let nodeType = t.writeSub(x, "nodeType") - case nodeType - of "0x00": t.processBranchNode(x) - of "0x01": t.processExtensionNode(x) - of "0x02": - if storageMode: - t.processStorageLeafNode(x) - else: - t.processAccountNode(x) - of "0x03": - t.write(x["data"]) - else: - raise newException(ParsingError, "wrong node type") - -proc parseRootHash(x: string): KeccakHash = - result.data = hexToByteArray[32](x) - -proc parseTester(t: var Tester, n: JsonNode, testStatusIMPL: var TestStatus) = - t.error = n["error"].getBool() - t.rootHash = parseRootHash(n["rootHash"].getStr()) - t.write(n["version"]) - t.write(n["metadata"]) - - let tree = n["tree"] - try: - for x in tree: - t.processNode(x) - except ParsingError: - check t.error == true - -proc parseTester(filename: string, testStatusIMPL: var TestStatus): Tester = - let n = parseFile(filename) - parseTester(result, n, testStatusIMPL) - -proc runTest(filePath, fileName: string) = - test fileName: - let t = parseTester(filePath, testStatusIMPL) - var db = newCoreDbRef(DefaultDbMemory) - try: - var tb = initTreeBuilder(t.output, db, {wfNoFlag}) - let root = tb.buildTree() - if t.error: - check root != t.rootHash - else: - check root == t.rootHash - check t.error == false - except ParsingError, ContractCodeError: - # echo "Exception detected ", getCurrentExceptionMsg() - check t.error == true - -proc writeFuzzData(filePath, fileName: string) = - var testStatusIMPL: TestStatus - let t = parseTester(filePath, testStatusIMPL) - - # this block below check the parsed json - var db = newCoreDbRef(DefaultDbMemory) - var tb = initTreeBuilder(t.output, db, {wfNoFlag}) - discard tb.buildTree() - - writeFile(fileName, t.output) - -proc fuzzTool(): bool {.used.} = - var filename: string - var numArg = 0 - - for kind, key, val in getopt(): - case kind - of cmdArgument: - inc numArg - case numArg - of 1: - if key != "fuzz": - quit(1) - of 2: - filename = key - else: - discard - of cmdLongOption, cmdShortOption: - discard - of cmdEnd: assert(false) # cannot happen - - if filename != "": - echo "generate fuzz data" - writeFuzzData(filename, "fuzz.data") - return true - -proc witnessJsonMain*() = - suite "test tree builder against json fixtures": - for x in walkDirRec("stateless" / "fixtures"): - let y = splitPath(x) - runTest(x, y.tail) - -when isMainModule: - if not fuzzTool(): - witnessJsonMain() diff --git a/stateless/test_witness_keys.nim b/stateless/test_witness_keys.nim deleted file mode 100644 index 9a5e2f1a5..000000000 --- a/stateless/test_witness_keys.nim +++ /dev/null @@ -1,296 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2024 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -import - randutils, random, unittest2, stew/byteutils, os, - eth/[common, rlp], eth/trie/[trie_defs, nibbles], - faststreams/inputs, nimcrypto/sysrand, - ../stateless/[witness_from_tree, tree_from_witness], - ../nimbus/db/[core_db, distinct_tries, storage_types], ./witness_types, ./multi_keys - -type - DB = CoreDbRef - - StorageKeys = tuple[storageRoot: Hash256, keys: MultiKeysRef] - - AccountDef = object - storageKeys: MultiKeysRef - account: Account - codeTouched: bool - -proc randU256(): UInt256 = - var bytes: array[32, byte] - discard randomBytes(bytes[0].addr, sizeof(result)) - result = UInt256.fromBytesBE(bytes) - -proc randStorageSlot(): StorageSlot = - discard randomBytes(result[0].addr, sizeof(result)) - -proc randNonce(): AccountNonce = - discard randomBytes(result.addr, sizeof(result)) - -proc randCode(db: DB): Hash256 = - if rand(0..1) == 0: - result = blankStringHash - else: - let codeLen = rand(1..150) - let code = randList(byte, rng(0, 255), codeLen, unique = false) - result = keccakHash(code) - db.kvt.put(contractHashKey(result).toOpenArray, code) - -proc randStorage(db: DB): StorageKeys = - if rand(0..1) == 0: - result = (emptyRlpHash, MultiKeysRef(nil)) - else: - var trie = initStorageTrie(db) - let numPairs = rand(1..10) - var keys = newSeq[StorageSlot](numPairs) - - for i in 0.. 0: - let acc = rlp.decode(recordFound, Account) - check acc == accs[i] - else: - debugEcho "BUG IN WITNESS/TREE BUILDER ", i - check false - - when addInvalidKeys: - for kd in mkeys.keys: - if kd.address == invalidAddress: - check kd.visited == false - else: - check kd.visited == true - else: - for kd in mkeys.keys: - check kd.visited == true - -proc initMultiKeys(keys: openArray[string], storageMode: bool = false): MultiKeysRef = - result.new - if storageMode: - for i, x in keys: - result.keys.add KeyData( - storageMode: true, - hash: hexToByteArray[32](x) - ) - else: - for x in keys: - result.keys.add KeyData( - storageMode: false, - hash: hexToByteArray[32](x) - ) - -proc parseInvalidInput(payload: openArray[byte]): bool = - var db = newCoreDbRef(DefaultDbMemory) - try: - var tb = initTreeBuilder(payload, db, {wfNoFlag}) - discard tb.buildTree() - except ParsingError, ContractCodeError: - result = true - -proc witnessKeysMain*() = - suite "random keys block witness roundtrip test": - randomize() - - test "random multiple keys": - for i in 0..<100: - runTest(rand(1..30), testStatusIMPL) - - test "there is no short node": - let acc = newAccount() - let rlpBytes = rlp.encode(acc) - check rlpBytes.len > 32 - - test "invalid address ignored": - runTest(rand(1..30), testStatusIMPL, false, addInvalidKeys = true) - - test "multiple identical addresses rejected": - expect AssertionDefect: - runTest(rand(5..30), testStatusIMPL, true) - - test "case 1: all keys is a match": - let keys = [ - "0abc7124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", - "0abccc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", - "0abca163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6bb" - ] - - let m = initMultiKeys(keys) - let pg = m.initGroup() - let n = initNibbleRange(hexToByteArray[2]("0abc")) - let mg = m.groups(0, n, pg) - check: - mg.match == true - mg.group.first == 0 - mg.group.last == 2 - - test "case 2: all keys is not a match": - let keys = [ - "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", - "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", - "0456a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6bb" - ] - - let m = initMultiKeys(keys) - let pg = m.initGroup() - let n = initNibbleRange(hexToByteArray[2]("0abc")) - let mg = m.groups(0, n, pg) - check: - mg.match == false - - test "case 3: not match and match": - let keys = [ - "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", - "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", - "0abc6a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", - "0abc7a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b" - ] - - let m = initMultiKeys(keys) - let pg = m.initGroup() - let n = initNibbleRange(hexToByteArray[2]("0abc")) - let mg = m.groups(0, n, pg) - check: - mg.match == true - mg.group.first == 2 - mg.group.last == 3 - - test "case 4: match and not match": - let keys = [ - "0abc6a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", - "0abc7a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", - "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", - "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606" - ] - - let m = initMultiKeys(keys) - let pg = m.initGroup() - let n = initNibbleRange(hexToByteArray[2]("0abc")) - let mg = m.groups(0, n, pg) - check: - mg.match == true - mg.group.first == 0 - mg.group.last == 1 - - test "case 5: not match, match and not match": - let keys = [ - "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", - "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", - "0abc6a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", - "0abc7a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", - "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", - "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606" - ] - - let m = initMultiKeys(keys) - let pg = m.initGroup() - let n = initNibbleRange(hexToByteArray[2]("0abc")) - let mg = m.groups(0, n, pg) - check: - mg.match == true - mg.group.first == 2 - mg.group.last == 3 - - test "parse invalid input": - for x in walkDirRec("stateless" / "invalidInput"): - let z = readFile(x) - check parseInvalidInput(z.toOpenArrayByte(0, z.len-1)) - - test "short rlp test": - let keys = [ - "01234567abce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c325", - "01234567b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff5660", - "01234567c140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", - ] - let m = initMultiKeys(keys, true) - var memDB = newCoreDbRef(DefaultDbMemory) - var trie = initAccountsTrie(memDB) - var acc = randAccount(memDB) - - var tt = memDB.mptPrune - for x in m.keys: - tt.put(x.hash, rlp.encode(1.u256)) - acc.account.storageRoot = tt.rootHash - - let addrs = @[AccountKey(address: randAddress(), codeTouched: acc.codeTouched, storageKeys: m)] - - trie.putAccountBytes(addrs[0].address, rlp.encode(acc.account)) - var mkeys = newMultiKeys(addrs) - let rootHash = trie.rootHash - - var wb = initWitnessBuilder(memDB, rootHash, {wfNoFlag}) - var witness = wb.buildWitness(mkeys) - var db = newCoreDbRef(DefaultDbMemory) - var tb = initTreeBuilder(witness, db, {wfNoFlag}) - let root = tb.buildTree() - check root.data == rootHash.data - -when isMainModule: - witnessKeysMain() diff --git a/stateless/test_witness_verification.nim b/stateless/test_witness_verification.nim deleted file mode 100644 index 8587bc481..000000000 --- a/stateless/test_witness_verification.nim +++ /dev/null @@ -1,102 +0,0 @@ -# Nimbus -# Copyright (c) 2023-2024 Status Research & Development GmbH -# Licensed and distributed under either of -# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). -# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). -# at your option. This file may not be copied, modified, or distributed except according to those terms. - -{.push raises: [].} - -import - std/os, - unittest2, - results, - eth/[common, trie/trie_defs], - ../nimbus/db/[ledger, core_db], - ../nimbus/common/chain_config, - ./[witness_from_tree, multi_keys, witness_types, witness_verification] - -proc getGenesisAlloc(filePath: string): GenesisAlloc = - var cn: NetworkParams - if not loadNetworkParams(filePath, cn): - quit(1) - - cn.genesis.alloc - -proc setupStateDB( - genAccounts: GenesisAlloc, - stateDB: LedgerRef): (Hash256, MultiKeysRef) = - - var keys = newSeqOfCap[AccountKey](genAccounts.len) - - for address, genAccount in genAccounts: - var storageKeys = newSeqOfCap[StorageSlot](genAccount.storage.len) - - for slotKey, slotValue in genAccount.storage: - storageKeys.add(slotKey.toBytesBE) - stateDB.setStorage(address, slotKey, slotValue) - - stateDB.setNonce(address, genAccount.nonce) - stateDB.setCode(address, genAccount.code) - stateDB.setBalance(address, genAccount.balance) - - let sKeys = if storageKeys.len != 0: newMultiKeys(storageKeys) else: MultiKeysRef(nil) - let codeTouched = genAccount.code.len > 0 - keys.add(AccountKey(address: address, codeTouched: codeTouched, storageKeys: sKeys)) - - stateDB.persist() - (stateDB.rootHash, newMultiKeys(keys)) - -proc buildWitness( - genAccounts: GenesisAlloc): (KeccakHash, BlockWitness) {.raises: [CatchableError].} = - - let - coreDb = newCoreDbRef(DefaultDbMemory) - accountsCache = LedgerRef.init(coreDb, emptyRlpHash) - (rootHash, multiKeys) = setupStateDB(genAccounts, accountsCache) - - var wb = initWitnessBuilder(coreDb, rootHash, {wfNoFlag}) - (rootHash, wb.buildWitness(multiKeys)) - -proc checkWitnessDataMatchesAccounts( - genAccounts: GenesisAlloc, - witnessData: TableRef[EthAddress, AccountData]) {.raises: [CatchableError].} = - - for address, genAccount in genAccounts: - let accountData = witnessData[address] - check genAccount.code == accountData.code - check genAccount.storage == accountData.storage - check genAccount.balance == accountData.account.balance - check genAccount.nonce == accountData.account.nonce - -proc witnessVerificationMain*() = - suite "Witness verification json tests": - - let genesisFiles = ["berlin2000.json", "chainid1.json", "chainid7.json", "merge.json", "devnet4.json", "devnet5.json", "holesky.json"] - - test "Block witness verification with valid state root": - for file in genesisFiles: - - let - accounts = getGenesisAlloc("tests" / "customgenesis" / file) - (stateRoot, witness) = buildWitness(accounts) - verifyResult = verifyWitness(stateRoot, witness, {wfNoFlag}) - - check verifyResult.isOk() - checkWitnessDataMatchesAccounts(accounts, verifyResult.get()) - - test "Block witness verification with invalid state root": - let badStateRoot = toDigest("2cb1b80b285d09e0570fdbbb808e1d14e4ac53e36dcd95dbc268deec2915b3e7") - - for file in genesisFiles: - let - accounts = getGenesisAlloc("tests" / "customgenesis" / file) - (_, witness) = buildWitness(accounts) - verifyResult = verifyWitness(badStateRoot, witness, {wfNoFlag}) - - check verifyResult.isErr() - check verifyResult.error() == "witness stateRoot doesn't match trustedStateRoot" - -when isMainModule: - witnessVerificationMain() - diff --git a/stateless/witness_types.nim b/stateless/witness_types.nim deleted file mode 100644 index 76046f116..000000000 --- a/stateless/witness_types.nim +++ /dev/null @@ -1,69 +0,0 @@ -# Nimbus -# Copyright (c) 2020-2023 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or -# http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or -# http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except -# according to those terms. - -import stew/bitops2 - -{.push raises: [].} - -type - TrieNodeType* = enum - BranchNodeType - ExtensionNodeType - AccountNodeType - HashNodeType - - AccountType* = enum - SimpleAccountType - ExtendedAccountType - - BytecodeType* = enum - CodeTouched - CodeUntouched - - WitnessFlag* = enum - wfNoFlag - wfEIP170 # fork >= Spurious Dragon - - MetadataType* = enum - MetadataNothing - MetadataSomething - - WitnessFlags* = set[WitnessFlag] - - ContractCodeError* = object of ValueError - ParsingError* = object of ValueError - - StorageSlot* = array[32, byte] - -const - StorageLeafNodeType* = AccountNodeType - BlockWitnessVersion* = 0x01 - ShortRlpPrefix* = 0.byte - -proc setBranchMaskBit*(x: var uint, i: int) = - assert(i >= 0 and i < 17) - x = x or (1 shl i).uint - -func branchMaskBitIsSet*(x: uint, i: int): bool = - assert(i >= 0 and i < 17) - result = ((x shr i.uint) and 1'u) == 1'u - -func constructBranchMask*(b1, b2: byte): uint - {.gcsafe, raises: [ParsingError].} = - result = uint(b1) shl 8 or uint(b2) - if countOnes(result) < 2 or ((result and (not 0x1FFFF'u)) != 0): - raise newException(ParsingError, "Invalid branch mask pattern " & $result) - -iterator nonEmpty*(branchMask: uint): int = - for i in 0..<16: - if not branchMask.branchMaskBitIsSet(i): - # we skip an empty elem - continue - yield i diff --git a/tests/all_tests.nim b/tests/all_tests.nim index 5d8c5c60b..48e25ac44 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -34,10 +34,7 @@ cliBuilder: ./test_transaction_json, #./test_blockchain_json, -- fails ./test_forkid, - #../stateless/test_witness_keys, -- fails - #../stateless/test_block_witness, -- fails - #../stateless/test_witness_json, -- fails - #../stateless/test_witness_verification, -- fails + ./test_multi_keys, ./test_misc, #./test_graphql, -- fails ./test_pow, @@ -50,6 +47,5 @@ cliBuilder: ./test_overflow, #./test_getproof_json, -- fails #./test_rpc_experimental_json, -- fails - #./test_persistblock_witness_json -- fails ./test_aristo, ./test_coredb diff --git a/tests/rpc/experimental_rpc_client.nim b/tests/rpc/experimental_rpc_client.nim index 5880cb196..5ec2bcc44 100644 --- a/tests/rpc/experimental_rpc_client.nim +++ b/tests/rpc/experimental_rpc_client.nim @@ -17,5 +17,4 @@ export conversions createRpcSigsFromNim(RpcClient): - proc exp_getWitnessByBlockNumber(blockId: BlockIdentifier, statePostExecution: bool): seq[byte] - proc exp_getProofsByBlockNumber(blockId: BlockIdentifier, statePostExecution: bool): seq[ProofResponse] \ No newline at end of file + proc exp_getProofsByBlockNumber(blockId: BlockIdentifier, statePostExecution: bool): seq[ProofResponse] diff --git a/tests/test_blockchain_json.nim b/tests/test_blockchain_json.nim index ac17df838..34527efb2 100644 --- a/tests/test_blockchain_json.nim +++ b/tests/test_blockchain_json.nim @@ -21,7 +21,6 @@ import ../nimbus/evm/tracer/legacy_tracer, ../nimbus/evm/tracer/json_tracer, ../nimbus/core/[validate, chain, pow/header], - ../stateless/[tree_from_witness, witness_types], ../tools/common/helpers as chp, ../tools/evmstate/helpers, ../nimbus/common/common, @@ -174,56 +173,23 @@ proc parseTestCtx(fixture: JsonNode, testStatusIMPL: var TestStatus): TestCtx = result.network = fixture["network"].getStr -proc blockWitness(vmState: BaseVMState, chainDB: CoreDbRef) = - let rootHash = vmState.stateDB.rootHash - let witness = vmState.buildWitness() - - if witness.len() == 0: - if vmState.stateDB.makeMultiKeys().keys.len() != 0: - raise newException(ValidationError, "Invalid trie generated from block witness") - return - - let fork = vmState.fork - let flags = if fork >= FkSpurious: {wfEIP170} else: {} - - # build tree from witness - var db = newCoreDbRef DefaultDbMemory - when defined(useInputStream): - var input = memoryInput(witness) - var tb = initTreeBuilder(input, db, flags) - else: - var tb = initTreeBuilder(witness, db, flags) - let root = tb.buildTree() - - # compare the result - if root != rootHash: - raise newException(ValidationError, "Invalid trie generated from block witness") - -proc testGetBlockWitness(chain: ChainRef, parentHeader, currentHeader: BlockHeader) = +proc testGetMultiKeys(chain: ChainRef, parentHeader, currentHeader: BlockHeader) = # check that current state matches current header let currentStateRoot = chain.vmState.stateDB.rootHash if currentStateRoot != currentHeader.stateRoot: raise newException(ValidationError, "Expected currentStateRoot == currentHeader.stateRoot") - let (mkeys, witness) = getBlockWitness(chain.com, currentHeader, false) + let mkeys = getMultiKeys(chain.com, currentHeader, false) - # check that the vmstate hasn't changed after call to getBlockWitness + # check that the vmstate hasn't changed after call to getMultiKeys if chain.vmState.stateDB.rootHash != currentHeader.stateRoot: raise newException(ValidationError, "Expected chain.vmstate.stateDB.rootHash == currentHeader.stateRoot") - # check the witnessRoot against the witness tree if the witness isn't empty - if witness.len() > 0: - let fgs = if chain.vmState.fork >= FkSpurious: {wfEIP170} else: {} - var tb = initTreeBuilder(witness, chain.com.db, fgs) - let witnessRoot = tb.buildTree() - if witnessRoot != parentHeader.stateRoot: - raise newException(ValidationError, "Expected witnessRoot == parentHeader.stateRoot") - # use the MultiKeysRef to build the block proofs let ac = newAccountStateDB(chain.com.db, currentHeader.stateRoot) blockProofs = getBlockProofs(state_db.ReadOnlyStateDB(ac), mkeys) - if witness.len() == 0 and blockProofs.len() != 0: + if blockProofs.len() != 0: raise newException(ValidationError, "Expected blockProofs.len() == 0") proc setupTracer(ctx: TestCtx): TracerRef = @@ -255,7 +221,7 @@ proc importBlock(ctx: var TestCtx, com: CommonRef, com, tracerInst, ) - ctx.vmState.generateWitness = true # Enable saving witness data + ctx.vmState.collectWitnessData = true # Enable saving witness data let chain = newChain(com, extraValidation = true, ctx.vmState) @@ -264,8 +230,7 @@ proc importBlock(ctx: var TestCtx, com: CommonRef, if res.isErr(): raise newException(ValidationError, res.error()) else: - blockWitness(chain.vmState, com.db) - testGetBlockWitness(chain, chain.vmState.parent, tb.header) + testGetMultiKeys(chain, chain.vmState.parent, tb.header) proc applyFixtureBlockToChain(ctx: var TestCtx, tb: var TestBlock, com: CommonRef, checkSeal: bool) = diff --git a/tests/test_configuration.nim b/tests/test_configuration.nim index fecaa41c9..bef16f670 100644 --- a/tests/test_configuration.nim +++ b/tests/test_configuration.nim @@ -319,21 +319,5 @@ proc configurationMain*() = check conf.dataDir.string == defaultDataDir() check conf.keyStore.string == "banana" - test "generate-witness default": - let conf = makeTestConfig() - check conf.generateWitness == false - - test "generate-witness enabled": - let conf = makeConfig(@["--generate-witness"]) - check conf.generateWitness == true - - test "generate-witness equals true": - let conf = makeConfig(@["--generate-witness=true"]) - check conf.generateWitness == true - - test "generate-witness equals false": - let conf = makeConfig(@["--generate-witness=false"]) - check conf.generateWitness == false - when isMainModule: configurationMain() diff --git a/tests/test_multi_keys.nim b/tests/test_multi_keys.nim new file mode 100644 index 000000000..432fe2e85 --- /dev/null +++ b/tests/test_multi_keys.nim @@ -0,0 +1,119 @@ +# Nimbus +# Copyright (c) 2020-2024 Status Research & Development GmbH +# Licensed under either of +# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or +# http://www.apache.org/licenses/LICENSE-2.0) +# * MIT license ([LICENSE-MIT](LICENSE-MIT) or +# http://opensource.org/licenses/MIT) +# at your option. This file may not be copied, modified, or distributed except +# according to those terms. + +import + random, unittest2, stew/byteutils, + eth/trie/nibbles, + ../nimbus/stateless/multi_keys + +proc initMultiKeys(keys: openArray[string], storageMode: bool = false): MultiKeysRef = + result.new + if storageMode: + for i, x in keys: + result.keys.add KeyData( + storageMode: true, + hash: hexToByteArray[32](x) + ) + else: + for x in keys: + result.keys.add KeyData( + storageMode: false, + hash: hexToByteArray[32](x) + ) + +proc multiKeysMain*() = + suite "random keys block witness roundtrip test": + randomize() + + test "case 1: all keys is a match": + let keys = [ + "0abc7124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", + "0abccc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", + "0abca163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6bb" + ] + + let m = initMultiKeys(keys) + let pg = m.initGroup() + let n = initNibbleRange(hexToByteArray[2]("0abc")) + let mg = m.groups(0, n, pg) + check: + mg.match == true + mg.group.first == 0 + mg.group.last == 2 + + test "case 2: all keys is not a match": + let keys = [ + "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", + "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", + "0456a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6bb" + ] + + let m = initMultiKeys(keys) + let pg = m.initGroup() + let n = initNibbleRange(hexToByteArray[2]("0abc")) + let mg = m.groups(0, n, pg) + check: + mg.match == false + + test "case 3: not match and match": + let keys = [ + "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", + "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", + "0abc6a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", + "0abc7a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b" + ] + + let m = initMultiKeys(keys) + let pg = m.initGroup() + let n = initNibbleRange(hexToByteArray[2]("0abc")) + let mg = m.groups(0, n, pg) + check: + mg.match == true + mg.group.first == 2 + mg.group.last == 3 + + test "case 4: match and not match": + let keys = [ + "0abc6a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", + "0abc7a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", + "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", + "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606" + ] + + let m = initMultiKeys(keys) + let pg = m.initGroup() + let n = initNibbleRange(hexToByteArray[2]("0abc")) + let mg = m.groups(0, n, pg) + check: + mg.match == true + mg.group.first == 0 + mg.group.last == 1 + + test "case 5: not match, match and not match": + let keys = [ + "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", + "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606", + "0abc6a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", + "0abc7a163140158288775c8912aed274fb9d6a3a260e9e95e03e70ba8df30f6b", + "01237124bce7762869be690036144c12c256bdb06ee9073ad5ecca18a47c3254", + "0890cc5b491732f964182ce4bde5e2468318692ed446e008f621b26f8ff56606" + ] + + let m = initMultiKeys(keys) + let pg = m.initGroup() + let n = initNibbleRange(hexToByteArray[2]("0abc")) + let mg = m.groups(0, n, pg) + check: + mg.match == true + mg.group.first == 2 + mg.group.last == 3 + +when isMainModule: + multiKeysMain() diff --git a/tests/test_persistblock_witness_json.nim b/tests/test_persistblock_witness_json.nim deleted file mode 100644 index af4e26263..000000000 --- a/tests/test_persistblock_witness_json.nim +++ /dev/null @@ -1,69 +0,0 @@ -# Nimbus -# Copyright (c) 2018-2024 Status Research & Development GmbH -# Licensed under either of -# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) -# * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) -# at your option. This file may not be copied, modified, or distributed except according to those terms. - -import - std/[json, os, tables, strutils], - unittest2, - stew/byteutils, - ./test_helpers, - ../nimbus/core/chain, - ../nimbus/common/common, - ../stateless/[witness_verification, witness_types] - -# use tracerTestGen.nim to generate additional test data -proc testFixture(node: JsonNode, testStatusIMPL: var TestStatus) = - var - blockNumber = UInt256.fromHex(node["blockNumber"].getStr()) - memoryDB = newCoreDbRef DefaultDbMemory - config = chainConfigForNetwork(MainNet) - com = CommonRef.new(memoryDB, config) - state = node["state"] - - for k, v in state: - let key = hexToSeqByte(k) - let value = hexToSeqByte(v.getStr()) - memoryDB.kvt.put(key, value) - - let - parentNumber = blockNumber - 1 - parent = com.db.getBlockHeader(parentNumber) - header = com.db.getBlockHeader(blockNumber) - headerHash = header.blockHash - blockBody = com.db.getBlockBody(headerHash) - chain = newChain(com) - headers = @[header] - bodies = @[blockBody] - - chain.generateWitness = true # Enable code to generate and store witness in the db - - # it's ok if setHead fails here because of missing ancestors - discard com.db.setHead(parent, true) - let validationResult = chain.persistBlocks(headers, bodies) - check validationResult.isOk() - - let - blockHash = memoryDB.getBlockHash(blockNumber) - witness = memoryDB.getBlockWitness(blockHash).value() - verifyWitnessResult = verifyWitness(parent.stateRoot, witness, {wfNoFlag}) - - check verifyWitnessResult.isOk() - let witnessData = verifyWitnessResult.value() - - if blockBody.transactions.len() > 0: - check: - witness.len() > 0 - witnessData.len() > 0 - -proc persistBlockWitnessJsonMain*() = - suite "persist block json tests": - jsonTest("PersistBlockTests", testFixture) - #var testStatusIMPL: TestStatus - #let n = json.parseFile("tests" / "fixtures" / "PersistBlockTests" / "block420301.json") - #testFixture(n, testStatusIMPL) - -when isMainModule: - persistBlockWitnessJsonMain() diff --git a/tests/test_rpc_experimental_json.nim b/tests/test_rpc_experimental_json.nim index a0d96bb80..f8efc1c2a 100644 --- a/tests/test_rpc_experimental_json.nim +++ b/tests/test_rpc_experimental_json.nim @@ -6,7 +6,7 @@ # at your option. This file may not be copied, modified, or distributed except according to those terms. import - std/[json, os, tables], + std/[json, os], asynctest, json_rpc/[rpcclient, rpcserver], stew/byteutils, @@ -14,7 +14,6 @@ import ../nimbus/common/common, ../nimbus/rpc, ../nimbus/db/[ledger, core_db], - ../stateless/[witness_verification, witness_types], ./rpc/experimental_rpc_client type @@ -56,24 +55,17 @@ proc importBlockData(node: JsonNode): (CommonRef, Hash256, Hash256, UInt256) {. return (com, parent.stateRoot, header.stateRoot, blockNumber) -proc checkAndValidateWitnessAgainstProofs( +proc checkAndValidateProofs( db: CoreDbRef, parentStateRoot: KeccakHash, expectedStateRoot: KeccakHash, - witness: seq[byte], proofs: seq[ProofResponse]) = let stateDB = LedgerRef.init(db, parentStateRoot) - verifyWitnessResult = verifyWitness(expectedStateRoot, witness, {wfNoFlag}) - - check verifyWitnessResult.isOk() - let witnessData = verifyWitnessResult.value() check: - witness.len() > 0 proofs.len() > 0 - witnessData.len() > 0 for proof in proofs: let @@ -84,22 +76,10 @@ proc checkAndValidateWitnessAgainstProofs( storageHash = proof.storageHash.toHash256() slotProofs = proof.storageProof - if witnessData.contains(address): - let - storageData = witnessData[address].storage - code = witnessData[address].code - - check: - witnessData[address].account.balance == balance - witnessData[address].account.nonce == nonce - witnessData[address].account.codeHash == codeHash - - for slotProof in slotProofs: - if storageData.contains(slotProof.key): - check storageData[slotProof.key] == slotProof.value - - if code.len() > 0: - stateDB.setCode(address, code) + # TODO: Fix this test. Update the code by checking if codeHash has changed + # and calling eth_getCode to set the updated code in the stateDB + # if code.len() > 0: + # stateDB.setCode(address, code) stateDB.setBalance(address, balance) stateDB.setNonce(address, nonce) @@ -203,31 +183,27 @@ proc rpcExperimentalJsonMain*() = waitFor client.connect(RPC_HOST, rpcServer.localAddress[0].port, secure = false) - test "exp_getWitnessByBlockNumber and exp_getProofsByBlockNumber - latest block pre-execution state": + test "exp_getProofsByBlockNumber - latest block pre-execution state": for file in importFiles: let (com, parentStateRoot, _, _) = importBlockDataFromFile(file) setupExpRpc(com, rpcServer) - let - witness = await client.exp_getWitnessByBlockNumber("latest", false) - proofs = await client.exp_getProofsByBlockNumber("latest", false) + let proofs = await client.exp_getProofsByBlockNumber("latest", false) - checkAndValidateWitnessAgainstProofs(com.db, parentStateRoot, parentStateRoot, witness, proofs) + checkAndValidateProofs(com.db, parentStateRoot, parentStateRoot, proofs) - test "exp_getWitnessByBlockNumber and exp_getProofsByBlockNumber - latest block post-execution state": + test "exp_getProofsByBlockNumber - latest block post-execution state": for file in importFiles: let (com, parentStateRoot, stateRoot, _) = importBlockDataFromFile(file) setupExpRpc(com, rpcServer) - let - witness = await client.exp_getWitnessByBlockNumber("latest", true) - proofs = await client.exp_getProofsByBlockNumber("latest", true) + let proofs = await client.exp_getProofsByBlockNumber("latest", true) - checkAndValidateWitnessAgainstProofs(com.db, parentStateRoot, stateRoot, witness, proofs) + checkAndValidateProofs(com.db, parentStateRoot, stateRoot, proofs) - test "exp_getWitnessByBlockNumber and exp_getProofsByBlockNumber - block by number pre-execution state": + test "exp_getProofsByBlockNumber - block by number pre-execution state": for file in importFiles: let (com, parentStateRoot, _, blockNumber) = importBlockDataFromFile(file) @@ -235,13 +211,11 @@ proc rpcExperimentalJsonMain*() = setupExpRpc(com, rpcServer) - let - witness = await client.exp_getWitnessByBlockNumber(blockNum, false) - proofs = await client.exp_getProofsByBlockNumber(blockNum, false) + let proofs = await client.exp_getProofsByBlockNumber(blockNum, false) - checkAndValidateWitnessAgainstProofs(com.db, parentStateRoot, parentStateRoot, witness, proofs) + checkAndValidateProofs(com.db, parentStateRoot, parentStateRoot, proofs) - test "exp_getWitnessByBlockNumber and exp_getProofsByBlockNumber - block by number post-execution state": + test "exp_getProofsByBlockNumber - block by number post-execution state": for file in importFiles: let (com, parentStateRoot, stateRoot, blockNumber) = importBlockDataFromFile(file) @@ -249,13 +223,11 @@ proc rpcExperimentalJsonMain*() = setupExpRpc(com, rpcServer) - let - witness = await client.exp_getWitnessByBlockNumber(blockNum, true) - proofs = await client.exp_getProofsByBlockNumber(blockNum, true) + let proofs = await client.exp_getProofsByBlockNumber(blockNum, true) - checkAndValidateWitnessAgainstProofs(com.db, parentStateRoot, stateRoot, witness, proofs) + checkAndValidateProofs(com.db, parentStateRoot, stateRoot, proofs) - test "exp_getWitnessByBlockNumber and exp_getProofsByBlockNumber - block by number that doesn't exist": + test "exp_getProofsByBlockNumber - block by number that doesn't exist": for file in importFiles: let (com, _, _, blockNumber) = importBlockDataFromFile(file) @@ -263,40 +235,12 @@ proc rpcExperimentalJsonMain*() = setupExpRpc(com, rpcServer) - expect JsonRpcError: - discard await client.exp_getWitnessByBlockNumber(blockNum, false) - expect JsonRpcError: discard await client.exp_getProofsByBlockNumber(blockNum, false) - expect JsonRpcError: - discard await client.exp_getWitnessByBlockNumber(blockNum, true) - expect JsonRpcError: discard await client.exp_getProofsByBlockNumber(blockNum, true) - test "Contract storage updated - bytecode should exist in witness": - for file in importFiles: - let - (com, parentStateRoot, _, blockNumber) = importBlockDataFromFile(file) - blockNum = blockId(blockNumber.truncate(uint64)) - - setupExpRpc(com, rpcServer) - - let - witness = await client.exp_getWitnessByBlockNumber(blockNum, false) - proofs = await client.exp_getProofsByBlockNumber(blockNum, true) - verifyWitnessResult = verifyWitness(parentStateRoot, witness, {wfNoFlag}) - - check verifyWitnessResult.isOk() - let witnessData = verifyWitnessResult.value() - - for proof in proofs: - let address = ethAddr(proof.address) - # if the storage was read or updated on an existing contract - if proof.storageProof.len() > 0 and witnessData.contains(address): - check witnessData[address].code.len() > 0 - waitFor rpcServer.stop() waitFor rpcServer.closeWait() diff --git a/tests/test_rpc_getproofs_track_state_changes.nim b/tests/test_rpc_getproofs_track_state_changes.nim index 70e10b643..e1c6a7817 100644 --- a/tests/test_rpc_getproofs_track_state_changes.nim +++ b/tests/test_rpc_getproofs_track_state_changes.nim @@ -23,7 +23,6 @@ # 3. Start the test. import - std/tables, unittest2, web3/eth_api, json_rpc/rpcclient, @@ -35,7 +34,6 @@ import ../nimbus/db/core_db, ../nimbus/db/core_db/persistent, ../nimbus/db/state_db/base, - ../stateless/[witness_verification, witness_types], ./rpc/experimental_rpc_client const @@ -57,17 +55,10 @@ template toHash256(hash: untyped): Hash256 = proc updateStateUsingProofsAndCheckStateRoot( stateDB: AccountStateDB, expectedStateRoot: Hash256, - witness: seq[byte], proofs: seq[ProofResponse]) = - let verifyWitnessResult = verifyWitness(expectedStateRoot, witness, {wfNoFlag}) - check verifyWitnessResult.isOk() - let witnessData = verifyWitnessResult.value() - check: - witness.len() > 0 proofs.len() > 0 - witnessData.len() > 0 for proof in proofs: let @@ -78,24 +69,6 @@ proc updateStateUsingProofsAndCheckStateRoot( storageHash = proof.storageHash.toHash256() slotProofs = proof.storageProof - if witnessData.contains(address): - - let - storageData = witnessData[address].storage - code = witnessData[address].code - - check: - witnessData[address].account.balance == balance - witnessData[address].account.nonce == nonce - witnessData[address].account.codeHash == codeHash - - for slotProof in slotProofs: - if storageData.contains(slotProof.key): - check storageData[slotProof.key] == slotProof.value - - if code.len() > 0: - stateDB.setCode(address, code) - if (balance == 0 and nonce == 0 and codeHash == ZERO_HASH256 and storageHash == ZERO_HASH256): # Account doesn't exist: # The account was deleted due to a self destruct and the data no longer exists in the state. @@ -158,13 +131,11 @@ proc rpcGetProofsTrackStateChangesMain*() = let blockNum = blockId(i.uint64) blockHeader: BlockObject = waitFor client.eth_getBlockByNumber(blockNum, false) - witness = waitFor client.exp_getWitnessByBlockNumber(blockNum, true) proofs = waitFor client.exp_getProofsByBlockNumber(blockNum, true) updateStateUsingProofsAndCheckStateRoot( stateDB, blockHeader.stateRoot.toHash256(), - witness, proofs) if i mod 1000 == 0: