switch back to InputStream

This commit is contained in:
andri lim 2020-04-23 09:56:35 +07:00
parent 323204d939
commit 73c487fdb0
No known key found for this signature in database
GPG Key ID: 31702AE10541E6B9
3 changed files with 53 additions and 36 deletions

View File

@ -27,27 +27,29 @@ proc isValidBranch(branch: openArray[seq[byte]], rootHash: KeccakHash, key, valu
proc testGetBranch(tester: Tester, rootHash: KeccakHash, testStatusIMPL: var TestStatus) = proc testGetBranch(tester: Tester, rootHash: KeccakHash, testStatusIMPL: var TestStatus) =
var trie = initHexaryTrie(tester.memdb, rootHash) var trie = initHexaryTrie(tester.memdb, rootHash)
try: #try:
for address in tester.address: for address in tester.address:
var wb = initWitnessBuilder(tester.memdb, rootHash) var wb = initWitnessBuilder(tester.memdb, rootHash)
var witness = wb.getBranchRecurse(address) var witness = wb.getBranchRecurse(address)
var db = newMemoryDB() var db = newMemoryDB()
var tb = initTreeBuilder(witness, db) var input = memoryInput(witness)
var root = tb.treeNode() var tb = initTreeBuilder(input, db)
check root.data == rootHash.data var root = tb.treeNode()
#echo "ROOT: ", root.data.toHex check root.data == rootHash.data
#echo "rootHash: ", rootHash.data.toHex
#echo "ROOT: ", root.data.toHex
#var stackBranch = wb.getBranchStack(address) #echo "rootHash: ", rootHash.data.toHex
#check recurseBranch == stackBranch
# #var stackBranch = wb.getBranchStack(address)
#var branch = wb.getBranch(address) #check recurseBranch == stackBranch
#let account = trie.get(address) #
#check isValidBranch(branch, trie.rootHash, address, account) #var branch = wb.getBranch(address)
except: #let account = trie.get(address)
debugEcho "MSG: ", getCurrentExceptionMsg() #check isValidBranch(branch, trie.rootHash, address, account)
quit(1) #except:
#debugEcho "MSG: ", getCurrentExceptionMsg()
#quit(1)
func parseHash256(n: JsonNode, name: string): Hash256 = func parseHash256(n: JsonNode, name: string): Hash256 =
hexToByteArray(n[name].getStr(), result.data) hexToByteArray(n[name].getStr(), result.data)
@ -95,8 +97,8 @@ proc testFixtureGST(node: JsonNode, testStatusIMPL: var TestStatus) =
fixture["pre"].testBlockWitness(emptyRlpHash, testStatusIMPL) fixture["pre"].testBlockWitness(emptyRlpHash, testStatusIMPL)
suite "Block Witness": #suite "Block Witness":
jsonTest("newBlockChainTests", "witnessBuilderBC", testFixtureBC) #jsonTest("newBlockChainTests", "witnessBuilderBC", testFixtureBC)
suite "Block Witness": suite "Block Witness":
jsonTest("GeneralStateTests", "witnessBuilderGST", testFixtureGST) jsonTest("GeneralStateTests", "witnessBuilderGST", testFixtureGST)

View File

@ -1,6 +1,7 @@
import import
randutils, stew/byteutils, random, randutils, stew/byteutils, random,
eth/[common, rlp], eth/trie/[hexary, db, trie_defs], eth/[common, rlp], eth/trie/[hexary, db, trie_defs],
faststreams/input_stream,
../stateless/[witness_from_tree, tree_from_witness] ../stateless/[witness_from_tree, tree_from_witness]
proc runTest(keyBytes: int, valBytes: int, numPairs: int) = proc runTest(keyBytes: int, valBytes: int, numPairs: int) =
@ -20,9 +21,10 @@ proc runTest(keyBytes: int, valBytes: int, numPairs: int) =
var wb = initWitnessBuilder(memDB, rootHash) var wb = initWitnessBuilder(memDB, rootHash)
var witness = wb.getBranchRecurse(keys[0]) var witness = wb.getBranchRecurse(keys[0])
var input = memoryInput(witness)
var db = newMemoryDB() var db = newMemoryDB()
var tb = initTreeBuilder(witness, db) var tb = initTreeBuilder(input, db)
var root = tb.treeNode() var root = tb.treeNode()
debugEcho "root: ", root.data.toHex debugEcho "root: ", root.data.toHex
debugEcho "rootHash: ", rootHash.data.toHex debugEcho "rootHash: ", rootHash.data.toHex

View File

@ -11,23 +11,23 @@ type
data*: array[32, byte] data*: array[32, byte]
TreeBuilder = object TreeBuilder = object
data: seq[byte] #data: seq[byte]
pos: int #pos: int
#input: InputStream input: InputStream
db: DB db: DB
root: KeccakHash root: KeccakHash
# InputStream is unstable, so we hack our own inputstream # InputStream is unstable, so we hack our own inputstream
#proc initTreeBuilder*(input: InputStream, db: DB): TreeBuilder = proc initTreeBuilder*(input: InputStream, db: DB): TreeBuilder =
#result.input = input result.input = input
#result.db = db
#result.root = emptyRlpHash
proc initTreeBuilder*(input: openArray[byte], db: DB): TreeBuilder =
result.data = @input
result.db = db result.db = db
result.root = emptyRlpHash result.root = emptyRlpHash
#proc initTreeBuilder*(input: openArray[byte], db: DB): TreeBuilder =
# result.data = @input
# result.db = db
# result.root = emptyRlpHash
func rootHash*(t: TreeBuilder): KeccakHash {.inline.} = func rootHash*(t: TreeBuilder): KeccakHash {.inline.} =
t.root t.root
@ -35,7 +35,19 @@ proc writeNode(t: var TreeBuilder, n: openArray[byte]): KeccakHash =
result = keccak(n) result = keccak(n)
t.db.put(result.data, n) t.db.put(result.data, n)
proc readByte(t: var TreeBuilder): byte = template readByte(t: var TreeBuilder): byte =
t.input.read
template len(t: TreeBuilder): int =
t.input.len
template peek(t: TreeBuilder): byte =
t.input.peek
template read(t: var TreeBuilder, len: int): auto =
t.input.read(len)
#[proc readByte(t: var TreeBuilder): byte =
if t.pos < t.data.len: if t.pos < t.data.len:
result = t.data[t.pos] result = t.data[t.pos]
inc t.pos inc t.pos
@ -51,6 +63,7 @@ template read(t: var TreeBuilder, len: int): auto =
let pos = t.pos let pos = t.pos
inc(t.pos, len) inc(t.pos, len)
toOpenArray(t.data, pos, pos + len - 1) toOpenArray(t.data, pos, pos + len - 1)
]#
proc readU32(t: var TreeBuilder): int = proc readU32(t: var TreeBuilder): int =
# TODO: what if the value overflow int32.high? # TODO: what if the value overflow int32.high?