Documentation ¶
Index ¶
- Constants
- Variables
- type Config
- type Database
- func (db *Database) Close() error
- func (db *Database) Commit(root common.Hash, report bool) error
- func (db *Database) Initialized(genesisRoot common.Hash) bool
- func (db *Database) Journal(root common.Hash) error
- func (db *Database) Reader(root common.Hash) (layer, error)
- func (db *Database) Recover(root common.Hash, loader triestate.TrieLoader) error
- func (db *Database) Recoverable(root common.Hash) bool
- func (db *Database) Reset(root common.Hash) error
- func (db *Database) Scheme() string
- func (db *Database) SetBufferSize(size int) error
- func (db *Database) Size() (diffs common.StorageSize, nodes common.StorageSize)
- func (db *Database) Update(root common.Hash, parentRoot common.Hash, block uint64, ...) error
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) 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) 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) Reset ¶
Reset rebuilds the database with the specified state as the base.
- if target state is empty, clear the stored state and all layers on top
- if target state is non-empty, ensure the stored state matches with it and clear all other layers on top.
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) 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.