review feedback + root node resolution in OpenTrie

This commit is contained in:
Guillaume Ballet 2023-10-09 15:42:10 +02:00 committed by Gary Rong
parent 3249aa6949
commit 9a95be4ba1
3 changed files with 19 additions and 3 deletions

View file

@ -421,13 +421,15 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig {
} }
} }
func (g *Genesis) isVerkle() bool { // IsVerkle indicates whether the state is already stored in a verkle
// tree at genesis time.
func (g *Genesis) IsVerkle() bool {
return g.Config.IsVerkle(new(big.Int).SetUint64(g.Number), g.Timestamp) return g.Config.IsVerkle(new(big.Int).SetUint64(g.Number), g.Timestamp)
} }
// ToBlock returns the genesis block according to genesis specification. // ToBlock returns the genesis block according to genesis specification.
func (g *Genesis) ToBlock() *types.Block { func (g *Genesis) ToBlock() *types.Block {
root, err := g.Alloc.hash(g.isVerkle()) root, err := g.Alloc.hash(g.IsVerkle())
if err != nil { if err != nil {
panic(err) panic(err)
} }

View file

@ -29,6 +29,7 @@ import (
"github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie"
"github.com/ethereum/go-ethereum/trie/trienode" "github.com/ethereum/go-ethereum/trie/trienode"
"github.com/ethereum/go-ethereum/trie/utils" "github.com/ethereum/go-ethereum/trie/utils"
"github.com/gballet/go-verkle"
) )
const ( const (
@ -172,7 +173,19 @@ type cachingDB struct {
// OpenTrie opens the main account trie at a specific root hash. // OpenTrie opens the main account trie at a specific root hash.
func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) { func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) {
if db.triedb.IsVerkle() { if db.triedb.IsVerkle() {
return trie.NewVerkleTrie(nil, db.triedb, utils.NewPointCache(), true) reader, err := db.triedb.Reader(root)
if err != nil {
return nil, fmt.Errorf("failed to get node reader in OpenTrie: %w", err)
}
verklerootbytes, err := reader.Node(common.Hash{}, nil, common.Hash{})
if err != nil {
return nil, fmt.Errorf("failed to get serialized root node in OpenTrie: %w", err)
}
verkleroot, err := verkle.ParseNode(verklerootbytes, 0)
if err != nil {
return nil, fmt.Errorf("failed to deserialize root node in OpenTrie: %w", err)
}
return trie.NewVerkleTrie(verkleroot, db.triedb, utils.NewPointCache(), true)
} }
tr, err := trie.NewStateTrie(trie.StateTrieID(root), db.triedb) tr, err := trie.NewStateTrie(trie.StateTrieID(root), db.triedb)
if err != nil { if err != nil {

View file

@ -284,6 +284,7 @@ func (trie *VerkleTrie) Copy() *VerkleTrie {
} }
} }
// IsVerkle indicates if the trie is a Verkle trie.
func (trie *VerkleTrie) IsVerkle() bool { func (trie *VerkleTrie) IsVerkle() bool {
return true return true
} }