trie/triedb: add Reader to backend interface (#29988)

This commit is contained in:
Darioush Jalali 2024-06-13 23:52:46 -07:00 committed by GitHub
parent 86150af2e5
commit fd5078c779
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 8 deletions

@ -74,6 +74,10 @@ type backend interface {
// Close closes the trie database backend and releases all held resources. // Close closes the trie database backend and releases all held resources.
Close() error Close() error
// Reader returns a reader for accessing all trie nodes with provided state
// root. An error will be returned if the requested state is not available.
Reader(root common.Hash) (database.Reader, error)
} }
// Database is the wrapper of the underlying backend which is shared by different // Database is the wrapper of the underlying backend which is shared by different
@ -123,13 +127,7 @@ func NewDatabase(diskdb ethdb.Database, config *Config) *Database {
// Reader returns a reader for accessing all trie nodes with provided state root. // Reader returns a reader for accessing all trie nodes with provided state root.
// An error will be returned if the requested state is not available. // An error will be returned if the requested state is not available.
func (db *Database) Reader(blockRoot common.Hash) (database.Reader, error) { func (db *Database) Reader(blockRoot common.Hash) (database.Reader, error) {
switch b := db.backend.(type) { return db.backend.Reader(blockRoot)
case *hashdb.Database:
return b.Reader(blockRoot)
case *pathdb.Database:
return b.Reader(blockRoot)
}
return nil, errors.New("unknown backend")
} }
// Update performs a state transition by committing dirty nodes contained in the // Update performs a state transition by committing dirty nodes contained in the

@ -33,6 +33,7 @@ import (
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/trie/trienode" "github.com/ethereum/go-ethereum/trie/trienode"
"github.com/ethereum/go-ethereum/trie/triestate" "github.com/ethereum/go-ethereum/trie/triestate"
"github.com/ethereum/go-ethereum/triedb/database"
) )
var ( var (
@ -625,7 +626,7 @@ func (db *Database) Close() error {
// Reader retrieves a node reader belonging to the given state root. // Reader retrieves a node reader belonging to the given state root.
// An error will be returned if the requested state is not available. // An error will be returned if the requested state is not available.
func (db *Database) Reader(root common.Hash) (*reader, error) { func (db *Database) Reader(root common.Hash) (database.Reader, error) {
if _, err := db.node(root); err != nil { if _, err := db.node(root); err != nil {
return nil, fmt.Errorf("state %#x is not available, %v", root, err) return nil, fmt.Errorf("state %#x is not available, %v", root, err)
} }