mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-09 20:06:52 +00:00
961f63358e
* Aristo: Allow to define/set `FilterID` for journal filter records why: After some changes, the `FilterID` is isomorphic to the `BlockNumber` scalar (well, the first 2^64 entries of a `BlockNumber`.) The needed change for `FilterID` is that the `FilterID(0)` value is valid part of the `FilterID` scalar. A non-valid `FilterID` entry is represented by `none(FilterID)`. * Aristo: Split off function `persist()` as persistent version of `stow()` why: In production, `stow(persistent=false,..)` is currently unused. So, using `persist()` rather than `stow(persistent=true,..)` improves readability and is better to maintain. * CoreDb+Aristo: Store block numbers in journal records why: This makes journal records searchable by block numbers * Aristo: Rename some journal related functions why: The name *journal* is more appropriate to api functions than something with *fifo* or *filter*. * CoreDb+Aristo: Update last/oldest journal state retrieval * CoreDb+Aristo: Register block number with state root in journal why: No need anymore for extra lookup table `stRootToBlockNum` which maps a storage root -> block number. * Aristo: Remove unused function `getFilUbe()` from api * CoreDb: Remove now unused virtual table `stRootToBlockNum` why: Was used to map a state root to a block number. This functionality is now embedded into the recovery journal backend. * Turn of API tracking (will fail on `fluffy`)
Core database replacement wrapper object
This wrapper replaces the TrieDatabaseRef and its derivatives by the new object CoreDbRef.
Relations to current TrieDatabaseRef implementation
Here are some incomplete translations for objects and constructors.
Object types:
Legacy notation | CoreDbRef based replacement |
---|---|
ChainDB | (don't use/avoid) |
ChainDbRef | CoreDbRef |
TrieDatabaseRef | CoreDbKvtRef |
HexaryTrie | CoreDbMptRef |
SecureHexaryTrie | CoreDbPhkRef |
DbTransaction | CoreDbTxRef |
TransactionID | CoreDbTxID |
Constructors:
Legacy notation | CoreDbRef based replacement |
---|---|
trieDB newChainDB("..") | newCoreDbRef(LegacyDbPersistent,"..") |
newMemoryDB() | newCoreDbRef(LegacyDbMemory) |
-- | |
initHexaryTrie(db,..) | db.mpt(..) (no pruning) |
db.mptPrune(..) (w/pruning true/false) | |
-- | |
initSecureHexaryTrie(db,..) | db.phk(..) (no pruning) |
db.phkPrune(..) (w/pruning true/false) | |
-- | |
newCaptureDB(db,memDB) | db.capture() (see below) |
Usage of the replacement wrapper
Objects pedigree:
CoreDbRef -- base descriptor
| | |
| | +--- CoreDbCtxRef -- MPT context descriptor
| | | |
| | | +-- CoreDbMptRef -- hexary trie instance
| | | | : :
| | | +-- CoreDbMptRef -- hexary trie instance
| | |
| | |
| | +---- CoreDbPhkRef -- pre-hashed key hexary trie instance
| | | : :
| | +---- CoreDbPhkRef -- pre-hashed key hexary trie instance
| |
| |
| +------ CoreDbKvtRef -- single static key-value table
|
|
+-------- CoreDbCaptRef -- tracer support descriptor
Instantiating legacy standard database object descriptors works as follows:
let
db = newCoreDbRef(..) # new base descriptor
mpt = db.mpt(..) # hexary trie/Merkle Patricia Tree
phk = db.phk(..) # pre-hashed key hexary trie/MPT
kvt = db.kvt # key-value table
Tracer support setup by hiding the current CoreDbRef behind a replacement:
let
capture = db.capture()
db = capture.recorder # use the recorder in place of db
...
for key,value in capture.recorder.kvt:
... # process recorded data