Documentation ¶
Index ¶
- Constants
- Variables
- type Config
- type Database
- func (db *Database) AccountHistory(address common.Address, start, end uint64) (*HistoryStats, error)
- func (db *Database) Close() error
- func (db *Database) Commit(root common.Hash, report bool) error
- func (db *Database) Disable() error
- func (db *Database) Enable(root common.Hash) error
- func (db *Database) HistoryRange() (uint64, uint64, error)
- func (db *Database) Initialized(genesisRoot common.Hash) bool
- func (db *Database) Journal(root common.Hash) error
- func (db *Database) Reader(root common.Hash) (database.Reader, error)
- func (db *Database) Recover(root common.Hash) error
- func (db *Database) Recoverable(root common.Hash) bool
- func (db *Database) SetBufferSize(size int) error
- func (db *Database) Size() (diffs common.StorageSize, nodes common.StorageSize)
- func (db *Database) StorageHistory(address common.Address, slot common.Hash, start uint64, end uint64) (*HistoryStats, error)
- func (db *Database) Update(root common.Hash, parentRoot common.Hash, block uint64, ...) error
- type HistoryStats
Constants ¶
const ( // DefaultBufferSize is the default memory allowance of node buffer // that aggregates the writes from above until it's flushed into the // disk. It's meant to be used once the initial sync is finished. // Do not increase the buffer size arbitrarily, otherwise the system // pause time will increase when the database writes happen. DefaultBufferSize = 64 * 1024 * 1024 )
Variables ¶
var Defaults = &Config{ StateHistory: params.FullImmutabilityThreshold, CleanCacheSize: defaultCleanSize, DirtyCacheSize: DefaultBufferSize, }
Defaults contains default settings for Ethereum mainnet.
var ReadOnly = &Config{ReadOnly: true}
ReadOnly is the config in order to open database in read only mode.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { StateHistory uint64 // Number of recent blocks to maintain state history for CleanCacheSize int // Maximum memory allowance (in bytes) for caching clean nodes DirtyCacheSize int // Maximum memory allowance (in bytes) for caching dirty nodes ReadOnly bool // Flag whether the database is opened in read only mode. }
Config contains the settings for database.
type Database ¶
type Database struct {
// contains filtered or unexported fields
}
Database is a multiple-layered structure for maintaining in-memory trie nodes. It consists of one persistent base layer backed by a key-value store, on top of which arbitrarily many in-memory diff layers are stacked. The memory diffs can form a tree with branching, but the disk layer is singleton and common to all. If a reorg goes deeper than the disk layer, a batch of reverse diffs can be applied to rollback. The deepest reorg that can be handled depends on the amount of state histories tracked in the disk.
At most one readable and writable database can be opened at the same time in the whole system which ensures that only one database writer can operate disk state. Unexpected open operations can cause the system to panic.
func New ¶
New attempts to load an already existing layer from a persistent key-value store (with a number of memory layers from a journal). If the journal is not matched with the base persistent layer, all the recorded diff layers are discarded.
func (*Database) AccountHistory ¶
func (db *Database) AccountHistory(address common.Address, start, end uint64) (*HistoryStats, error)
AccountHistory inspects the account history within the specified range.
Start: State ID of the first history object for the query. 0 implies the first available object is selected as the starting point.
End: State ID of the last history for the query. 0 implies the last available object is selected as the ending point. Note end is included in the query.
func (*Database) Commit ¶
Commit traverses downwards the layer tree from a specified layer with the provided state root and all the layers below are flattened downwards. It can be used alone and mostly for test purposes.
func (*Database) Disable ¶
Disable deactivates the database and invalidates all available state layers as stale to prevent access to the persistent state, which is in the syncing stage.
func (*Database) Enable ¶
Enable activates database and resets the state tree with the provided persistent state root once the state sync is finished.
func (*Database) HistoryRange ¶
HistoryRange returns the block numbers associated with earliest and latest state history in the local store.
func (*Database) Initialized ¶
Initialized returns an indicator if the state data is already initialized in path-based scheme.
func (*Database) Journal ¶
Journal commits an entire diff hierarchy to disk into a single journal entry. This is meant to be used during shutdown to persist the layer without flattening everything down (bad for reorgs). And this function will mark the database as read-only to prevent all following mutation to disk.
func (*Database) Recover ¶
Recover rollbacks the database to a specified historical point. The state is supported as the rollback destination only if it's canonical state and the corresponding trie histories are existent.
func (*Database) Recoverable ¶
Recoverable returns the indicator if the specified state is recoverable.
func (*Database) SetBufferSize ¶
SetBufferSize sets the node buffer size to the provided value(in bytes).
func (*Database) Size ¶
func (db *Database) Size() (diffs common.StorageSize, nodes common.StorageSize)
Size returns the current storage size of the memory cache in front of the persistent database layer.
func (*Database) StorageHistory ¶
func (db *Database) StorageHistory(address common.Address, slot common.Hash, start uint64, end uint64) (*HistoryStats, error)
StorageHistory inspects the storage history within the specified range.
Start: State ID of the first history object for the query. 0 implies the first available object is selected as the starting point.
End: State ID of the last history for the query. 0 implies the last available object is selected as the ending point. Note end is included in the query.
Note, slot refers to the hash of the raw slot key.
func (*Database) Update ¶
func (db *Database) Update(root common.Hash, parentRoot common.Hash, block uint64, nodes *trienode.MergedNodeSet, states *triestate.Set) error
Update adds a new layer into the tree, if that can be linked to an existing old parent. It is disallowed to insert a disk layer (the origin of all). Apart from that this function will flatten the extra diff layers at bottom into disk to only keep 128 diff layers in memory by default.
The passed in maps(nodes, states) will be retained to avoid copying everything. Therefore, these maps must not be changed afterwards.
type HistoryStats ¶
type HistoryStats struct { Start uint64 // Block number of the first queried history End uint64 // Block number of the last queried history Blocks []uint64 // Blocks refers to the list of block numbers in which the state is mutated Origins [][]byte // Origins refers to the original value of the state before its mutation }
HistoryStats wraps the history inspection statistics.