block witness: add test for unwanted multiple identical keys when constructing witness from trie
This commit is contained in:
parent
fc271b3e8d
commit
7d062e171b
|
@ -148,6 +148,6 @@ func isValidMatch(mg: MatchGroup): bool {.inline.} =
|
||||||
result = mg.match and mg.group.first == mg.group.last
|
result = mg.match and mg.group.first == mg.group.last
|
||||||
|
|
||||||
proc visitMatch*(m: var MultikeysRef, mg: MatchGroup, depth: int): KeyData =
|
proc visitMatch*(m: var MultikeysRef, mg: MatchGroup, depth: int): KeyData =
|
||||||
doAssert(mg.isValidMatch)
|
doAssert(mg.isValidMatch, "Multiple identical keys are not allowed")
|
||||||
m.keys[mg.group.first].visited = true
|
m.keys[mg.group.first].visited = true
|
||||||
result = m.keys[mg.group.first]
|
result = m.keys[mg.group.first]
|
||||||
|
|
|
@ -65,7 +65,9 @@ proc randAccount(db: DB): AccountDef =
|
||||||
proc randAddress(): EthAddress =
|
proc randAddress(): EthAddress =
|
||||||
discard randomBytes(result.addr, sizeof(result))
|
discard randomBytes(result.addr, sizeof(result))
|
||||||
|
|
||||||
proc runTest(numPairs: int, testStatusIMPL: var TestStatus, addInvalidKeys: static[bool] = false) =
|
proc runTest(numPairs: int, testStatusIMPL: var TestStatus,
|
||||||
|
addIdenticalKeys: bool = false, addInvalidKeys: static[bool] = false) =
|
||||||
|
|
||||||
var memDB = newMemoryDB()
|
var memDB = newMemoryDB()
|
||||||
var trie = initSecureHexaryTrie(memDB)
|
var trie = initSecureHexaryTrie(memDB)
|
||||||
var addrs = newSeq[AccountKey](numPairs)
|
var addrs = newSeq[AccountKey](numPairs)
|
||||||
|
@ -82,6 +84,10 @@ proc runTest(numPairs: int, testStatusIMPL: var TestStatus, addInvalidKeys: stat
|
||||||
let invalidAddress = randAddress()
|
let invalidAddress = randAddress()
|
||||||
addrs.add((invalidAddress, false, MultikeysRef(nil)))
|
addrs.add((invalidAddress, false, MultikeysRef(nil)))
|
||||||
|
|
||||||
|
if addIdenticalKeys:
|
||||||
|
let invalidAddress = addrs[0].address
|
||||||
|
addrs.add((invalidAddress, false, MultikeysRef(nil)))
|
||||||
|
|
||||||
var mkeys = newMultiKeys(addrs)
|
var mkeys = newMultiKeys(addrs)
|
||||||
let rootHash = trie.rootHash
|
let rootHash = trie.rootHash
|
||||||
|
|
||||||
|
@ -146,7 +152,11 @@ proc witnessKeysMain*() =
|
||||||
check rlpBytes.len > 32
|
check rlpBytes.len > 32
|
||||||
|
|
||||||
test "invalid address ignored":
|
test "invalid address ignored":
|
||||||
runTest(rand(1..30), testStatusIMPL, addInvalidKeys = true)
|
runTest(rand(1..30), testStatusIMPL, false, addInvalidKeys = true)
|
||||||
|
|
||||||
|
test "multiple identical addresses rejected":
|
||||||
|
expect AssertionError:
|
||||||
|
runTest(rand(5..30), testStatusIMPL, true)
|
||||||
|
|
||||||
test "case 1: all keys is a match":
|
test "case 1: all keys is a match":
|
||||||
let keys = [
|
let keys = [
|
||||||
|
|
|
@ -129,7 +129,7 @@ proc readUVarint32(t: var TreeBuilder): uint32 =
|
||||||
break
|
break
|
||||||
inc(shift, 7)
|
inc(shift, 7)
|
||||||
if shift > 28:
|
if shift > 28:
|
||||||
raise newException(ParsingError, "Failed when try to uvarint32")
|
raise newException(ParsingError, "Failed when try to parse uvarint32")
|
||||||
|
|
||||||
proc readUVarint256(t: var TreeBuilder): UInt256 =
|
proc readUVarint256(t: var TreeBuilder): UInt256 =
|
||||||
# LEB128 varint encoding
|
# LEB128 varint encoding
|
||||||
|
@ -141,7 +141,7 @@ proc readUVarint256(t: var TreeBuilder): UInt256 =
|
||||||
break
|
break
|
||||||
inc(shift, 7)
|
inc(shift, 7)
|
||||||
if shift > 252:
|
if shift > 252:
|
||||||
raise newException(ParsingError, "Failed when try to uvarint256")
|
raise newException(ParsingError, "Failed when try to parse uvarint256")
|
||||||
|
|
||||||
proc toKeccak(r: var NodeKey, x: openArray[byte]) {.inline.} =
|
proc toKeccak(r: var NodeKey, x: openArray[byte]) {.inline.} =
|
||||||
r.data[0..31] = x[0..31]
|
r.data[0..31] = x[0..31]
|
||||||
|
|
Loading…
Reference in New Issue