allow zero state root
This commit is contained in:
parent
4b525d80db
commit
a95948bcd6
@ -19,7 +19,6 @@ package trie
|
|||||||
import (
|
import (
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
|
||||||
|
|
||||||
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/trie/triestate"
|
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/trie/triestate"
|
||||||
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/triedb/database"
|
"github.com/cerc-io/ipld-eth-statedb/trie_by_cid/triedb/database"
|
||||||
@ -35,12 +34,12 @@ type trieReader struct {
|
|||||||
|
|
||||||
// newTrieReader initializes the trie reader with the given node reader.
|
// newTrieReader initializes the trie reader with the given node reader.
|
||||||
func newTrieReader(stateRoot, owner common.Hash, db database.Database) (*trieReader, error) {
|
func newTrieReader(stateRoot, owner common.Hash, db database.Database) (*trieReader, error) {
|
||||||
if stateRoot == (common.Hash{}) || stateRoot == types.EmptyRootHash {
|
if stateRoot == types.EmptyRootHash {
|
||||||
if stateRoot == (common.Hash{}) {
|
|
||||||
log.Error("Zero state root hash!")
|
|
||||||
}
|
|
||||||
return &trieReader{owner: owner}, nil
|
return &trieReader{owner: owner}, nil
|
||||||
}
|
}
|
||||||
|
// Originally, passing a zero state root also caused the reader to not be set
|
||||||
|
// We allow it for storage tries for simplicity (ipld-eth-statedb change)
|
||||||
|
|
||||||
reader, err := db.Reader(stateRoot)
|
reader, err := db.Reader(stateRoot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &MissingNodeError{Owner: owner, NodeHash: stateRoot, err: err}
|
return nil, &MissingNodeError{Owner: owner, NodeHash: stateRoot, err: err}
|
||||||
|
@ -641,9 +641,12 @@ func (db *Database) Scheme() string {
|
|||||||
// 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) (*reader, error) {
|
||||||
|
// (ipld-eth-statedb change) Allow zero state roots for storage tries
|
||||||
|
if root != (common.Hash{}) {
|
||||||
if _, err := db.node(root, internal.StateTrieCodec); err != nil {
|
if _, err := db.node(root, internal.StateTrieCodec); 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)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return &reader{db: db}, nil
|
return &reader{db: db}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user