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 1bf239ad0..000000000 Binary files a/stateless/invalidInput/crash-6081fe3734250348623b03c1d3acb35d90d2ecfc and /dev/null differ diff --git a/stateless/invalidInput/crash-a865d42d79ebbfd42b86d11e2e068643cf0fd503 b/stateless/invalidInput/crash-a865d42d79ebbfd42b86d11e2e068643cf0fd503 deleted file mode 100644 index 09e441efd..000000000 Binary files a/stateless/invalidInput/crash-a865d42d79ebbfd42b86d11e2e068643cf0fd503 and /dev/null differ diff --git a/stateless/invalidInput/crash-a8a8b9592a31539c0318ae6a1cd416d5644cb74a b/stateless/invalidInput/crash-a8a8b9592a31539c0318ae6a1cd416d5644cb74a deleted file mode 100644 index d5d64275b..000000000 Binary files a/stateless/invalidInput/crash-a8a8b9592a31539c0318ae6a1cd416d5644cb74a and /dev/null differ diff --git a/stateless/invalidInput/crash-d755f044304f53abf28a735763865a449a198235 b/stateless/invalidInput/crash-d755f044304f53abf28a735763865a449a198235 deleted file mode 100644 index bece4c4b9..000000000 Binary files a/stateless/invalidInput/crash-d755f044304f53abf28a735763865a449a198235 and /dev/null differ diff --git a/stateless/invalidInput/crash-eb262bbb7d5a0b11e1a8112ea592eb67cc618c9b b/stateless/invalidInput/crash-eb262bbb7d5a0b11e1a8112ea592eb67cc618c9b deleted file mode 100644 index 5d6b306eb..000000000 Binary files a/stateless/invalidInput/crash-eb262bbb7d5a0b11e1a8112ea592eb67cc618c9b and /dev/null differ diff --git a/stateless/invalidInput/crash-f9a002e389b120714a2324487a6e473b0fedc12e b/stateless/invalidInput/crash-f9a002e389b120714a2324487a6e473b0fedc12e deleted file mode 100644 index 83050f8a5..000000000 Binary files a/stateless/invalidInput/crash-f9a002e389b120714a2324487a6e473b0fedc12e and /dev/null differ diff --git a/stateless/randutils.nim b/stateless/randutils.nim deleted file mode 100644 index 65ee92854..000000000 --- a/stateless/randutils.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 random, sets, nimcrypto/sysrand - -type - RandGen*[T] = object - minVal, maxVal: T - - Bytes* = seq[byte] - -proc rng*[T](minVal, maxVal: T): RandGen[T] = - doAssert(minVal <= maxVal) - result.minVal = minVal - result.maxVal = maxVal - -proc rng*[T](minMax: T): RandGen[T] = - rng(minMax, minMax) - -proc getVal*[T](x: RandGen[T]): T = - if x.minVal == x.maxVal: return x.minVal - rand(x.minVal..x.maxVal) - -proc randString*(len: int): string = - result = newString(len) - discard randomBytes(result[0].addr, len) - -proc randBytes*(len: int): Bytes = - result = newSeq[byte](len) - discard randomBytes(result[0].addr, len) - -proc randPrimitives*[T](val: int): T = - type - ByteLike = uint8 | byte | char - - when T is string: - randString(val) - elif T is int: - result = val - elif T is ByteLike: - result = T(val) - elif T is Bytes: - result = randBytes(val) - -proc randList*(T: typedesc, fillGen: RandGen, listLen: int, unique: static[bool] = true): seq[T] = - result = newSeqOfCap[T](listLen) - when unique: - var set = initHashSet[T]() - for len in 0..= 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: