erigon-pulse/turbo/trie/sub_trie_loader.go
2021-06-30 10:31:36 +07:00

52 lines
1.4 KiB
Go

package trie
import (
"github.com/ledgerwatch/erigon/common"
)
var emptyHash [32]byte
// SubTrie is a result of loading sub-trie from either flat db
// or witness db. It encapsulates sub-trie root (which is of the un-exported type `node`)
// If the loading is done for verification and testing purposes, then usually only
// sub-tree root hash would be queried
type SubTries struct {
Hashes []common.Hash // Root hashes of the sub-tries
roots []node // Sub-tries
}
type LoadFunc func(*SubTrieLoader, *RetainList, [][]byte, []int) (SubTries, error)
// Resolver looks up (resolves) some keys and corresponding values from a database.
// One resolver per trie (prefix).
// See also ResolveRequest in trie.go
type SubTrieLoader struct {
codeRequests []*LoadRequestForCode
}
func NewSubTrieLoader() *SubTrieLoader {
tr := SubTrieLoader{
codeRequests: []*LoadRequestForCode{},
}
return &tr
}
func (stl *SubTrieLoader) Reset() {
stl.codeRequests = stl.codeRequests[:0]
}
// AddCodeRequest add a request for code loading
func (stl *SubTrieLoader) AddCodeRequest(req *LoadRequestForCode) {
stl.codeRequests = append(stl.codeRequests, req)
}
// Various values of the account field set
const (
AccountFieldNonceOnly uint32 = 0x01
AccountFieldBalanceOnly uint32 = 0x02
AccountFieldStorageOnly uint32 = 0x04
AccountFieldCodeOnly uint32 = 0x08
AccountFieldSSizeOnly uint32 = 0x10
AccountFieldSetNotAccount uint32 = 0x00
)