2023-08-04 11:10:09 +00:00
|
|
|
# Nimbus
|
Core db and aristo updates for destructor and tx logic (#1894)
* Disable `TransactionID` related functions from `state_db.nim`
why:
Functions `getCommittedStorage()` and `updateOriginalRoot()` from
the `state_db` module are nowhere used. The emulation of a legacy
`TransactionID` type functionality is administratively expensive to
provide by `Aristo` (the legacy DB version is only partially
implemented, anyway).
As there is no other place where `TransactionID`s are used, they will
not be provided by the `Aristo` variant of the `CoreDb`. For the
legacy DB API, nothing will change.
* Fix copyright headers in source code
* Get rid of compiler warning
* Update Aristo code, remove unused `merge()` variant, export `hashify()`
why:
Adapt to upcoming `CoreDb` wrapper
* Remove synced tx feature from `Aristo`
why:
+ This feature allowed to synchronise transaction methods like begin,
commit, and rollback for a group of descriptors.
+ The feature is over engineered and not needed for `CoreDb`, neither
is it complete (some convergence features missing.)
* Add debugging helpers to `Kvt`
also:
Update database iterator, add count variable yield argument similar
to `Aristo`.
* Provide optional destructors for `CoreDb` API
why;
For the upcoming Aristo wrapper, this allows to control when certain
smart destruction and update can take place. The auto destructor works
fine in general when the storage/cache strategy is known and acceptable
when creating descriptors.
* Add update option for `CoreDb` API function `hash()`
why;
The hash function is typically used to get the state root of the MPT.
Due to lazy hashing, this might be not available on the `Aristo` DB.
So the `update` function asks for re-hashing the gurrent state changes
if needed.
* Update API tracking log mode: `info` => `debug
* Use shared `Kvt` descriptor in new Ledger API
why:
No need to create a new descriptor all the time
2023-11-16 19:35:03 +00:00
|
|
|
# Copyright (c) 2023 Status Research & Development GmbH
|
2023-08-04 11:10:09 +00:00
|
|
|
# Licensed under either of
|
|
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
|
|
|
# http://opensource.org/licenses/MIT)
|
|
|
|
# at your option. This file may not be copied, modified, or distributed except
|
|
|
|
# according to those terms.
|
|
|
|
|
|
|
|
{.push raises: [].}
|
|
|
|
|
|
|
|
import
|
2023-09-26 09:21:13 +00:00
|
|
|
std/options,
|
2023-08-04 11:10:09 +00:00
|
|
|
eth/[common, trie/db],
|
2023-11-08 12:18:32 +00:00
|
|
|
../aristo,
|
|
|
|
./backend/legacy_db,
|
|
|
|
./base,
|
|
|
|
#./core_apps_legacy as core_apps
|
|
|
|
./core_apps_newapi as core_apps
|
2023-08-04 11:10:09 +00:00
|
|
|
|
|
|
|
export
|
|
|
|
common,
|
|
|
|
core_apps,
|
|
|
|
|
2023-11-08 12:18:32 +00:00
|
|
|
# Provide a standard interface for calculating merkle hash signatures,
|
|
|
|
# here by quoting `Aristo` functions.
|
|
|
|
MerkleSignRef,
|
|
|
|
merkleSignBegin,
|
|
|
|
merkleSignAdd,
|
|
|
|
merkleSignCommit,
|
|
|
|
to,
|
|
|
|
|
2023-08-04 11:10:09 +00:00
|
|
|
# Not all symbols from the object sources will be exported by default
|
2023-10-11 19:09:11 +00:00
|
|
|
CoreDbAccount,
|
|
|
|
CoreDbApiError,
|
|
|
|
CoreDbErrorCode,
|
2023-10-02 18:05:17 +00:00
|
|
|
CoreDbErrorRef,
|
Core db and aristo updates for destructor and tx logic (#1894)
* Disable `TransactionID` related functions from `state_db.nim`
why:
Functions `getCommittedStorage()` and `updateOriginalRoot()` from
the `state_db` module are nowhere used. The emulation of a legacy
`TransactionID` type functionality is administratively expensive to
provide by `Aristo` (the legacy DB version is only partially
implemented, anyway).
As there is no other place where `TransactionID`s are used, they will
not be provided by the `Aristo` variant of the `CoreDb`. For the
legacy DB API, nothing will change.
* Fix copyright headers in source code
* Get rid of compiler warning
* Update Aristo code, remove unused `merge()` variant, export `hashify()`
why:
Adapt to upcoming `CoreDb` wrapper
* Remove synced tx feature from `Aristo`
why:
+ This feature allowed to synchronise transaction methods like begin,
commit, and rollback for a group of descriptors.
+ The feature is over engineered and not needed for `CoreDb`, neither
is it complete (some convergence features missing.)
* Add debugging helpers to `Kvt`
also:
Update database iterator, add count variable yield argument similar
to `Aristo`.
* Provide optional destructors for `CoreDb` API
why;
For the upcoming Aristo wrapper, this allows to control when certain
smart destruction and update can take place. The auto destructor works
fine in general when the storage/cache strategy is known and acceptable
when creating descriptors.
* Add update option for `CoreDb` API function `hash()`
why;
The hash function is typically used to get the state root of the MPT.
Due to lazy hashing, this might be not available on the `Aristo` DB.
So the `update` function asks for re-hashing the gurrent state changes
if needed.
* Update API tracking log mode: `info` => `debug
* Use shared `Kvt` descriptor in new Ledger API
why:
No need to create a new descriptor all the time
2023-11-16 19:35:03 +00:00
|
|
|
CoreDbPersistentTypes,
|
2023-08-04 11:10:09 +00:00
|
|
|
CoreDbRef,
|
Core db and aristo updates for destructor and tx logic (#1894)
* Disable `TransactionID` related functions from `state_db.nim`
why:
Functions `getCommittedStorage()` and `updateOriginalRoot()` from
the `state_db` module are nowhere used. The emulation of a legacy
`TransactionID` type functionality is administratively expensive to
provide by `Aristo` (the legacy DB version is only partially
implemented, anyway).
As there is no other place where `TransactionID`s are used, they will
not be provided by the `Aristo` variant of the `CoreDb`. For the
legacy DB API, nothing will change.
* Fix copyright headers in source code
* Get rid of compiler warning
* Update Aristo code, remove unused `merge()` variant, export `hashify()`
why:
Adapt to upcoming `CoreDb` wrapper
* Remove synced tx feature from `Aristo`
why:
+ This feature allowed to synchronise transaction methods like begin,
commit, and rollback for a group of descriptors.
+ The feature is over engineered and not needed for `CoreDb`, neither
is it complete (some convergence features missing.)
* Add debugging helpers to `Kvt`
also:
Update database iterator, add count variable yield argument similar
to `Aristo`.
* Provide optional destructors for `CoreDb` API
why;
For the upcoming Aristo wrapper, this allows to control when certain
smart destruction and update can take place. The auto destructor works
fine in general when the storage/cache strategy is known and acceptable
when creating descriptors.
* Add update option for `CoreDb` API function `hash()`
why;
The hash function is typically used to get the state root of the MPT.
Due to lazy hashing, this might be not available on the `Aristo` DB.
So the `update` function asks for re-hashing the gurrent state changes
if needed.
* Update API tracking log mode: `info` => `debug
* Use shared `Kvt` descriptor in new Ledger API
why:
No need to create a new descriptor all the time
2023-11-16 19:35:03 +00:00
|
|
|
CoreDbSaveFlags,
|
|
|
|
CoreDbTxID,
|
2023-08-04 11:10:09 +00:00
|
|
|
CoreDbType,
|
2023-10-11 19:09:11 +00:00
|
|
|
CoreDbVidRef,
|
|
|
|
CoreDxAccRef,
|
2023-09-26 09:21:13 +00:00
|
|
|
CoreDxCaptRef,
|
|
|
|
CoreDxKvtRef,
|
|
|
|
CoreDxMptRef,
|
|
|
|
CoreDxPhkRef,
|
|
|
|
CoreDxTxRef,
|
2023-10-25 14:03:09 +00:00
|
|
|
`$$`,
|
2023-09-26 09:21:13 +00:00
|
|
|
backend,
|
2023-08-04 11:10:09 +00:00
|
|
|
beginTransaction,
|
|
|
|
commit,
|
|
|
|
compensateLegacySetup,
|
|
|
|
del,
|
2023-10-11 19:09:11 +00:00
|
|
|
delete,
|
2023-08-04 11:10:09 +00:00
|
|
|
dispose,
|
2023-10-11 19:09:11 +00:00
|
|
|
fetch,
|
2023-11-08 12:18:32 +00:00
|
|
|
fetchOrEmpty,
|
2023-10-11 19:09:11 +00:00
|
|
|
finish,
|
2023-08-04 11:10:09 +00:00
|
|
|
get,
|
2023-11-08 12:18:32 +00:00
|
|
|
getOrEmpty,
|
2023-10-11 19:09:11 +00:00
|
|
|
getRoot,
|
2023-08-04 11:10:09 +00:00
|
|
|
getTransactionID,
|
2023-10-11 19:09:11 +00:00
|
|
|
hash,
|
2023-11-08 12:18:32 +00:00
|
|
|
hasKey,
|
2023-10-25 14:03:09 +00:00
|
|
|
hashOrEmpty,
|
2023-11-08 12:18:32 +00:00
|
|
|
hasPath,
|
2023-09-26 09:21:13 +00:00
|
|
|
isLegacy,
|
2023-08-04 11:10:09 +00:00
|
|
|
isPruning,
|
2023-10-11 19:09:11 +00:00
|
|
|
logDb,
|
|
|
|
merge,
|
|
|
|
newAccMpt,
|
2023-09-26 09:21:13 +00:00
|
|
|
newCapture,
|
2023-10-25 14:03:09 +00:00
|
|
|
newKvt,
|
2023-09-26 09:21:13 +00:00
|
|
|
newMpt,
|
|
|
|
newTransaction,
|
2023-08-04 11:10:09 +00:00
|
|
|
pairs,
|
|
|
|
parent,
|
|
|
|
put,
|
2023-10-11 19:09:11 +00:00
|
|
|
recast,
|
2023-08-04 11:10:09 +00:00
|
|
|
recorder,
|
|
|
|
replicate,
|
|
|
|
rollback,
|
2023-10-11 19:09:11 +00:00
|
|
|
rootVid,
|
2023-08-04 11:10:09 +00:00
|
|
|
safeDispose,
|
|
|
|
setTransactionID,
|
2023-09-26 09:21:13 +00:00
|
|
|
toLegacy,
|
2023-08-04 11:10:09 +00:00
|
|
|
toMpt,
|
Core db and aristo updates for destructor and tx logic (#1894)
* Disable `TransactionID` related functions from `state_db.nim`
why:
Functions `getCommittedStorage()` and `updateOriginalRoot()` from
the `state_db` module are nowhere used. The emulation of a legacy
`TransactionID` type functionality is administratively expensive to
provide by `Aristo` (the legacy DB version is only partially
implemented, anyway).
As there is no other place where `TransactionID`s are used, they will
not be provided by the `Aristo` variant of the `CoreDb`. For the
legacy DB API, nothing will change.
* Fix copyright headers in source code
* Get rid of compiler warning
* Update Aristo code, remove unused `merge()` variant, export `hashify()`
why:
Adapt to upcoming `CoreDb` wrapper
* Remove synced tx feature from `Aristo`
why:
+ This feature allowed to synchronise transaction methods like begin,
commit, and rollback for a group of descriptors.
+ The feature is over engineered and not needed for `CoreDb`, neither
is it complete (some convergence features missing.)
* Add debugging helpers to `Kvt`
also:
Update database iterator, add count variable yield argument similar
to `Aristo`.
* Provide optional destructors for `CoreDb` API
why;
For the upcoming Aristo wrapper, this allows to control when certain
smart destruction and update can take place. The auto destructor works
fine in general when the storage/cache strategy is known and acceptable
when creating descriptors.
* Add update option for `CoreDb` API function `hash()`
why;
The hash function is typically used to get the state root of the MPT.
Due to lazy hashing, this might be not available on the `Aristo` DB.
So the `update` function asks for re-hashing the gurrent state changes
if needed.
* Update API tracking log mode: `info` => `debug
* Use shared `Kvt` descriptor in new Ledger API
why:
No need to create a new descriptor all the time
2023-11-16 19:35:03 +00:00
|
|
|
toPhk
|
2023-08-04 11:10:09 +00:00
|
|
|
|
2023-11-08 12:18:32 +00:00
|
|
|
when ProvideCoreDbLegacyAPI:
|
|
|
|
export
|
|
|
|
CoreDbCaptFlags,
|
|
|
|
CoreDbCaptRef,
|
|
|
|
CoreDbKvtRef,
|
|
|
|
CoreDbMptRef,
|
|
|
|
CoreDbPhkRef,
|
|
|
|
CoreDbTxID,
|
|
|
|
CoreDbTxRef,
|
|
|
|
capture,
|
|
|
|
contains,
|
|
|
|
kvt,
|
|
|
|
mptPrune,
|
|
|
|
phkPrune,
|
|
|
|
rootHash
|
|
|
|
else:
|
|
|
|
type
|
|
|
|
CoreDyTxID = CoreDxTxID
|
|
|
|
|
2023-08-04 11:10:09 +00:00
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# Public constructor
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
proc newCoreDbRef*(
|
|
|
|
db: TrieDatabaseRef;
|
|
|
|
): CoreDbRef
|
|
|
|
{.gcsafe, deprecated: "use newCoreDbRef(LegacyDbPersistent,<path>)".} =
|
|
|
|
## Legacy constructor.
|
|
|
|
##
|
|
|
|
## Note: Using legacy notation `newCoreDbRef()` rather than
|
|
|
|
## `CoreDbRef.init()` because of compiler coughing.
|
2023-09-26 09:21:13 +00:00
|
|
|
##
|
2023-08-04 11:10:09 +00:00
|
|
|
db.newLegacyPersistentCoreDbRef()
|
|
|
|
|
2023-10-11 19:09:11 +00:00
|
|
|
proc newCoreDbRef*(
|
|
|
|
dbType: static[CoreDbType]; # Database type symbol
|
|
|
|
): CoreDbRef =
|
2023-08-04 11:10:09 +00:00
|
|
|
## Constructor for volatile/memory type DB
|
|
|
|
##
|
|
|
|
## Note: Using legacy notation `newCoreDbRef()` rather than
|
|
|
|
## `CoreDbRef.init()` because of compiler coughing.
|
2023-09-26 09:21:13 +00:00
|
|
|
##
|
2023-08-04 11:10:09 +00:00
|
|
|
when dbType == LegacyDbMemory:
|
|
|
|
newLegacyMemoryCoreDbRef()
|
2023-09-26 09:21:13 +00:00
|
|
|
|
2023-08-04 11:10:09 +00:00
|
|
|
else:
|
Core db and aristo updates for destructor and tx logic (#1894)
* Disable `TransactionID` related functions from `state_db.nim`
why:
Functions `getCommittedStorage()` and `updateOriginalRoot()` from
the `state_db` module are nowhere used. The emulation of a legacy
`TransactionID` type functionality is administratively expensive to
provide by `Aristo` (the legacy DB version is only partially
implemented, anyway).
As there is no other place where `TransactionID`s are used, they will
not be provided by the `Aristo` variant of the `CoreDb`. For the
legacy DB API, nothing will change.
* Fix copyright headers in source code
* Get rid of compiler warning
* Update Aristo code, remove unused `merge()` variant, export `hashify()`
why:
Adapt to upcoming `CoreDb` wrapper
* Remove synced tx feature from `Aristo`
why:
+ This feature allowed to synchronise transaction methods like begin,
commit, and rollback for a group of descriptors.
+ The feature is over engineered and not needed for `CoreDb`, neither
is it complete (some convergence features missing.)
* Add debugging helpers to `Kvt`
also:
Update database iterator, add count variable yield argument similar
to `Aristo`.
* Provide optional destructors for `CoreDb` API
why;
For the upcoming Aristo wrapper, this allows to control when certain
smart destruction and update can take place. The auto destructor works
fine in general when the storage/cache strategy is known and acceptable
when creating descriptors.
* Add update option for `CoreDb` API function `hash()`
why;
The hash function is typically used to get the state root of the MPT.
Due to lazy hashing, this might be not available on the `Aristo` DB.
So the `update` function asks for re-hashing the gurrent state changes
if needed.
* Update API tracking log mode: `info` => `debug
* Use shared `Kvt` descriptor in new Ledger API
why:
No need to create a new descriptor all the time
2023-11-16 19:35:03 +00:00
|
|
|
{.error: "Unsupported constructor " & $dbType & ".newCoreDbRef()".}
|
2023-08-04 11:10:09 +00:00
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# Public template wrappers
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
|
Core db and aristo updates for destructor and tx logic (#1894)
* Disable `TransactionID` related functions from `state_db.nim`
why:
Functions `getCommittedStorage()` and `updateOriginalRoot()` from
the `state_db` module are nowhere used. The emulation of a legacy
`TransactionID` type functionality is administratively expensive to
provide by `Aristo` (the legacy DB version is only partially
implemented, anyway).
As there is no other place where `TransactionID`s are used, they will
not be provided by the `Aristo` variant of the `CoreDb`. For the
legacy DB API, nothing will change.
* Fix copyright headers in source code
* Get rid of compiler warning
* Update Aristo code, remove unused `merge()` variant, export `hashify()`
why:
Adapt to upcoming `CoreDb` wrapper
* Remove synced tx feature from `Aristo`
why:
+ This feature allowed to synchronise transaction methods like begin,
commit, and rollback for a group of descriptors.
+ The feature is over engineered and not needed for `CoreDb`, neither
is it complete (some convergence features missing.)
* Add debugging helpers to `Kvt`
also:
Update database iterator, add count variable yield argument similar
to `Aristo`.
* Provide optional destructors for `CoreDb` API
why;
For the upcoming Aristo wrapper, this allows to control when certain
smart destruction and update can take place. The auto destructor works
fine in general when the storage/cache strategy is known and acceptable
when creating descriptors.
* Add update option for `CoreDb` API function `hash()`
why;
The hash function is typically used to get the state root of the MPT.
Due to lazy hashing, this might be not available on the `Aristo` DB.
So the `update` function asks for re-hashing the gurrent state changes
if needed.
* Update API tracking log mode: `info` => `debug
* Use shared `Kvt` descriptor in new Ledger API
why:
No need to create a new descriptor all the time
2023-11-16 19:35:03 +00:00
|
|
|
template shortTimeReadOnly*(id: CoreDbTxID; body: untyped) =
|
2023-09-26 09:21:13 +00:00
|
|
|
proc action() =
|
2023-08-04 11:10:09 +00:00
|
|
|
body
|
|
|
|
id.shortTimeReadOnly action
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# End
|
|
|
|
# ------------------------------------------------------------------------------
|