@@ -32,9 +32,7 @@ import (
32
32
"github.com/holiman/uint256"
33
33
)
34
34
35
- var (
36
- errInvalidRootType = errors .New ("invalid node type for root" )
37
- )
35
+ var errInvalidRootType = errors .New ("invalid node type for root" )
38
36
39
37
// VerkleTrie is a wrapper around VerkleNode that implements the trie.Trie
40
38
// interface so that Verkle trees can be reused verbatim.
@@ -90,7 +88,7 @@ func (t *VerkleTrie) GetAccount(addr common.Address) (*types.StateAccount, error
90
88
)
91
89
switch n := t .root .(type ) {
92
90
case * verkle.InternalNode :
93
- values , err = n .GetValuesAtStem (t .cache .GetStem (addr [:]), t .nodeResolver )
91
+ values , err = n .GetValuesAtStem (t .cache .GetStem (addr [:]), 0 , t .nodeResolver )
94
92
if err != nil {
95
93
return nil , fmt .Errorf ("GetAccount (%x) error: %v" , addr , err )
96
94
}
@@ -114,7 +112,7 @@ func (t *VerkleTrie) GetAccount(addr common.Address) (*types.StateAccount, error
114
112
// nil will be returned. If the tree is corrupted, an error will be returned.
115
113
func (t * VerkleTrie ) GetStorage (addr common.Address , key []byte ) ([]byte , error ) {
116
114
k := utils .StorageSlotKeyWithEvaluatedAddress (t .cache .Get (addr .Bytes ()), key )
117
- val , err := t .root .Get (k , t .nodeResolver )
115
+ val , err := t .root .Get (k , 0 , t .nodeResolver )
118
116
if err != nil {
119
117
return nil , err
120
118
}
@@ -145,7 +143,7 @@ func (t *VerkleTrie) UpdateAccount(addr common.Address, acc *types.StateAccount,
145
143
146
144
switch root := t .root .(type ) {
147
145
case * verkle.InternalNode :
148
- err = root .InsertValuesAtStem (stem , values , t .nodeResolver )
146
+ err = root .InsertValuesAtStem (stem , values , 0 , true , t .nodeResolver )
149
147
default :
150
148
return errInvalidRootType
151
149
}
@@ -167,7 +165,7 @@ func (t *VerkleTrie) UpdateStorage(address common.Address, key, value []byte) er
167
165
copy (v [32 - len (value ):], value [:])
168
166
}
169
167
k := utils .StorageSlotKeyWithEvaluatedAddress (t .cache .Get (address .Bytes ()), key )
170
- return t .root .Insert (k , v [:], t .nodeResolver )
168
+ return t .root .Insert (k , v [:], 0 , t .nodeResolver )
171
169
}
172
170
173
171
// DeleteAccount leaves the account untouched, as no account deletion can happen
@@ -179,7 +177,7 @@ func (t *VerkleTrie) UpdateStorage(address common.Address, key, value []byte) er
179
177
// the balance with 0. This will be removed once the spec has been clarified.
180
178
func (t * VerkleTrie ) DeleteAccount (addr common.Address ) error {
181
179
k := utils .BasicDataKeyWithEvaluatedAddress (t .cache .Get (addr .Bytes ()))
182
- values , err := t .root .(* verkle.InternalNode ).GetValuesAtStem (k , t .nodeResolver )
180
+ values , err := t .root .(* verkle.InternalNode ).GetValuesAtStem (k , 0 , t .nodeResolver )
183
181
if err != nil {
184
182
return fmt .Errorf ("Error getting data at %x in delete: %w" , k , err )
185
183
}
@@ -198,7 +196,7 @@ func (t *VerkleTrie) DeleteAccount(addr common.Address) error {
198
196
}
199
197
}
200
198
if prefunded {
201
- t .root .Insert (k , common.Hash {}.Bytes (), t .nodeResolver )
199
+ t .root .Insert (k , common.Hash {}.Bytes (), 0 , t .nodeResolver )
202
200
}
203
201
return nil
204
202
}
@@ -210,7 +208,7 @@ func (t *VerkleTrie) RollBackAccount(addr common.Address) error {
210
208
evaluatedAddr = t .cache .Get (addr .Bytes ())
211
209
basicDataKey = utils .BasicDataKeyWithEvaluatedAddress (evaluatedAddr )
212
210
)
213
- basicDataBytes , err := t .root .Get (basicDataKey , t .nodeResolver )
211
+ basicDataBytes , err := t .root .Get (basicDataKey , 0 , t .nodeResolver )
214
212
if err != nil {
215
213
return fmt .Errorf ("rollback: error finding code size: %w" , err )
216
214
}
@@ -223,7 +221,7 @@ func (t *VerkleTrie) RollBackAccount(addr common.Address) error {
223
221
codeSize := binary .BigEndian .Uint32 (basicDataBytes [utils .BasicDataCodeSizeOffset - 1 :])
224
222
225
223
// Delete the account header + first 64 slots + first 128 code chunks
226
- _ , err = t .root .(* verkle.InternalNode ).DeleteAtStem (basicDataKey [:31 ], t .nodeResolver )
224
+ _ , err = t .root .(* verkle.InternalNode ).DeleteAtStem (basicDataKey [:31 ], 0 , t .nodeResolver )
227
225
if err != nil {
228
226
return fmt .Errorf ("error rolling back account header: %w" , err )
229
227
}
@@ -234,7 +232,7 @@ func (t *VerkleTrie) RollBackAccount(addr common.Address) error {
234
232
offset := uint256 .NewInt (chunknr )
235
233
key := utils .CodeChunkKeyWithEvaluatedAddress (evaluatedAddr , offset )
236
234
237
- if _ , err = t .root .(* verkle.InternalNode ).DeleteAtStem (key [:], t .nodeResolver ); err != nil {
235
+ if _ , err = t .root .(* verkle.InternalNode ).DeleteAtStem (key [:], 0 , t .nodeResolver ); err != nil {
238
236
return fmt .Errorf ("error deleting code chunk stem (addr=%x, offset=%d) error: %w" , addr [:], offset , err )
239
237
}
240
238
}
@@ -247,7 +245,7 @@ func (t *VerkleTrie) RollBackAccount(addr common.Address) error {
247
245
func (t * VerkleTrie ) DeleteStorage (addr common.Address , key []byte ) error {
248
246
var zero [32 ]byte
249
247
k := utils .StorageSlotKeyWithEvaluatedAddress (t .cache .Get (addr .Bytes ()), key )
250
- return t .root .Insert (k , zero [:], t .nodeResolver )
248
+ return t .root .Insert (k , zero [:], 0 , t .nodeResolver )
251
249
}
252
250
253
251
// Hash returns the root hash of the tree. It does not write to the database and
@@ -317,7 +315,7 @@ func (t *VerkleTrie) Proof(posttrie *VerkleTrie, keys [][]byte) (*verkle.VerkleP
317
315
if posttrie != nil {
318
316
postroot = posttrie .root
319
317
}
320
- proof , _ , _ , _ , err := verkle .MakeVerkleMultiProof (t .root , postroot , keys , t .FlatdbNodeResolver )
318
+ proof , _ , _ , _ , err := verkle .MakeVerkleMultiProof (t .root , postroot , keys , 0 , t .FlatdbNodeResolver )
321
319
if err != nil {
322
320
return nil , nil , err
323
321
}
@@ -404,7 +402,7 @@ func (t *VerkleTrie) UpdateContractCode(addr common.Address, codeHash common.Has
404
402
if groupOffset == 255 || len (chunks )- i <= 32 {
405
403
switch root := t .root .(type ) {
406
404
case * verkle.InternalNode :
407
- err = root .InsertValuesAtStem (key [:31 ], values , t .nodeResolver )
405
+ err = root .InsertValuesAtStem (key [:31 ], values , 0 , true , t .nodeResolver )
408
406
if err != nil {
409
407
return fmt .Errorf ("UpdateContractCode (addr=%x) error: %w" , addr [:], err )
410
408
}
0 commit comments