Skip to content

Commit b408f09

Browse files
committed
update evm tool to build the proof before computing the root
Signed-off-by: Guillaume Ballet <[email protected]>
1 parent 132f200 commit b408f09

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

cmd/evm/internal/t8ntool/execution.go

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -345,24 +345,19 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
345345
statedb.AddBalance(w.Address, amount)
346346
statedb.Witness().TouchFullAccount(w.Address[:], true, math.MaxUint64)
347347
}
348+
349+
var (
350+
verkleProof *verkle.Proof
351+
statelessProof *verkle.VerkleProof
352+
keys = statedb.Witness().Keys()
353+
proofTrie *trie.VerkleTrie
354+
)
348355
if chainConfig.IsVerkle(big.NewInt(int64(pre.Env.Number)), pre.Env.Timestamp) {
349356
if err := overlay.OverlayVerkleTransition(statedb, common.Hash{}, chainConfig.OverlayStride); err != nil {
350357
return nil, nil, fmt.Errorf("error performing the transition, err=%w", err)
351358
}
352-
}
353-
// Commit block
354-
root, err := statedb.Commit(vmContext.BlockNumber.Uint64(), chainConfig.IsEIP158(vmContext.BlockNumber))
355-
if err != nil {
356-
return nil, nil, NewError(ErrorEVM, fmt.Errorf("could not commit state: %v", err))
357-
}
358359

359-
// Add the witness to the execution result
360-
var vktProof *verkle.VerkleProof
361-
var vktStateDiff verkle.StateDiff
362-
if chainConfig.IsVerkle(big.NewInt(int64(pre.Env.Number)), pre.Env.Timestamp) {
363-
keys := statedb.Witness().Keys()
364360
if len(keys) > 0 && vtrpre != nil {
365-
var proofTrie *trie.VerkleTrie
366361
switch tr := statedb.GetTrie().(type) {
367362
case *trie.VerkleTrie:
368363
proofTrie = tr
@@ -371,18 +366,29 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
371366
default:
372367
return nil, nil, fmt.Errorf("invalid tree type in proof generation: %v", tr)
373368
}
374-
proof, err := trie.Proof(vtrpre, proofTrie, keys, vtrpre.FlatdbNodeResolver)
369+
var err error
370+
verkleProof, err = trie.Proof(vtrpre, proofTrie, keys, vtrpre.FlatdbNodeResolver)
375371
if err != nil {
376372
return nil, nil, fmt.Errorf("error generating verkle proof for block %d: %w", pre.Env.Number, err)
377373
}
378-
err = trie.AddPostValuesToProof(keys, proofTrie, proof)
379-
if err != nil {
380-
return nil, nil, fmt.Errorf("error adding post values to proof: %w", err)
381-
}
382-
vktProof, vktStateDiff, err = verkle.SerializeProof(proof)
383-
if err != nil {
384-
return nil, nil, fmt.Errorf("error serializing proof: %w", err)
385-
}
374+
}
375+
}
376+
// Commit block
377+
root, err := statedb.Commit(vmContext.BlockNumber.Uint64(), chainConfig.IsEIP158(vmContext.BlockNumber))
378+
if err != nil {
379+
return nil, nil, NewError(ErrorEVM, fmt.Errorf("could not commit state: %v", err))
380+
}
381+
382+
// Add the witness to the execution result
383+
var statelessDiff verkle.StateDiff
384+
if chainConfig.IsVerkle(big.NewInt(int64(pre.Env.Number)), pre.Env.Timestamp) {
385+
err = trie.AddPostValuesToProof(keys, proofTrie, verkleProof)
386+
if err != nil {
387+
return nil, nil, fmt.Errorf("error adding post values to proof: %w", err)
388+
}
389+
statelessProof, statelessDiff, err = verkle.SerializeProof(verkleProof)
390+
if err != nil {
391+
return nil, nil, fmt.Errorf("error serializing proof: %w", err)
386392
}
387393
}
388394

@@ -397,8 +403,8 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
397403
Difficulty: (*math.HexOrDecimal256)(vmContext.Difficulty),
398404
GasUsed: (math.HexOrDecimal64)(gasUsed),
399405
BaseFee: (*math.HexOrDecimal256)(vmContext.BaseFee),
400-
VerkleProof: vktProof,
401-
StateDiff: vktStateDiff,
406+
VerkleProof: statelessProof,
407+
StateDiff: statelessDiff,
402408
ParentRoot: parentStateRoot,
403409
}
404410
if pre.Env.Withdrawals != nil {

0 commit comments

Comments
 (0)