Skip to content

Commit 670e689

Browse files
authored
Stateless: Minor improvement to witness building (#3547)
1 parent 230e18f commit 670e689

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

execution_chain/core/chain/persist_blocks.nim

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,10 @@ proc persistBlock*(p: var Persister, blk: Block): Result[void, string] =
179179
processBlock()
180180

181181
let
182-
blockHash = header.computeBlockHash()
183182
preStateLedger = LedgerRef.init(parentTxFrame)
184183
witness = Witness.build(preStateLedger, vmState.ledger, p.parent, header)
185184

186-
?vmState.ledger.txFrame.persistWitness(blockHash, witness)
185+
?vmState.ledger.txFrame.persistWitness(header.computeBlockHash(), witness)
187186

188187
if NoPersistHeader notin p.flags:
189188
let blockHash = header.computeBlockHash()

execution_chain/stateless/witness_generation.nim

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ proc build*(
2727
preStateLedger: LedgerRef): T =
2828
var
2929
witness = Witness.init()
30-
addedStateHashes = initHashSet[Hash32]()
30+
addedState = initHashSet[seq[byte]]()
3131
addedCodeHashes = initHashSet[Hash32]()
3232

3333
for key, codeTouched in witnessKeys:
@@ -36,10 +36,7 @@ proc build*(
3636

3737
let proof = preStateLedger.getAccountProof(key.address)
3838
for trieNode in proof:
39-
let nodeHash = keccak256(trieNode)
40-
if nodeHash notin addedStateHashes:
41-
witness.addState(trieNode)
42-
addedStateHashes.incl(nodeHash)
39+
addedState.incl(trieNode)
4340

4441
if codeTouched:
4542
let codeHash = preStateLedger.getCodeHash(key.address)
@@ -48,18 +45,22 @@ proc build*(
4845
addedCodeHashes.incl(codeHash)
4946

5047
# Add the storage slots for this account
48+
var slots: seq[UInt256]
5149
for key2, codeTouched2 in witnessKeys:
5250
if key2.address == key.address and key2.slot.isSome():
5351
let slot = key2.slot.get()
52+
slots.add(slot)
5453
witness.addKey(slot.toBytesBE())
5554

56-
let proofs = preStateLedger.getStorageProof(key.address, @[slot])
57-
doAssert(proofs.len() == 1)
58-
for trieNode in proofs[0]:
59-
let nodeHash = keccak256(trieNode)
60-
if nodeHash notin addedStateHashes:
61-
witness.addState(trieNode)
62-
addedStateHashes.incl(nodeHash)
55+
if slots.len() > 0:
56+
let proofs = preStateLedger.getStorageProof(key.address, slots)
57+
doAssert(proofs.len() == slots.len())
58+
for proof in proofs:
59+
for trieNode in proof:
60+
addedState.incl(trieNode)
61+
62+
for s in addedState.items():
63+
witness.addState(s)
6364

6465
witness
6566

0 commit comments

Comments
 (0)