@@ -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