mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-16 15:25:24 +00:00
6e0397e276
* Fix debug noise in `hashify()` for perfectly normal situation why: Was previously considered a fixable error * Fix test sample file names why: The larger test file `goerli68161.txt.gz` is already in the local archive. So there is no need to use the smaller one from the external repo. * Activate `accounts_cache` module from `db/ledger` why: A copy of the original `accounts_cache.nim` source to be integrated into the `Ledger` module wrapper which allows to switch between different `accounts_cache` implementations unser tha same API. details: At a later state, the `db/accounts_cache.nim` wrapper will be removed so that there is only one access to that module via `db/ledger/accounts_cache.nim`. * Fix copyright headers in source code
68 lines
2.0 KiB
Nim
68 lines
2.0 KiB
Nim
# nimbus-eth1
|
|
# Copyright (c) 2023 Status Research & Development GmbH
|
|
# 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.
|
|
|
|
## Aristo DB -- Sign Helper
|
|
## ========================
|
|
##
|
|
{.push raises: [].}
|
|
|
|
import
|
|
eth/common,
|
|
results,
|
|
"."/[aristo_constants, aristo_desc, aristo_get, aristo_hashify, aristo_init,
|
|
aristo_merge, aristo_vid]
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Public functions, signature generator
|
|
# ------------------------------------------------------------------------------
|
|
|
|
proc merkleSignBegin*(): MerkleSignRef =
|
|
## Start signature calculator for a list of key-value items.
|
|
let
|
|
db = AristoDbRef.init VoidBackendRef
|
|
vid = db.vidFetch # => 2
|
|
MerkleSignRef(
|
|
root: vid,
|
|
db: db)
|
|
|
|
proc merkleSignAdd*(
|
|
sdb: MerkleSignRef;
|
|
key: openArray[byte];
|
|
val: openArray[byte];
|
|
) =
|
|
## Add key-value item to the signature list. The order of the items to add
|
|
## is irrelevant.
|
|
if sdb.error == AristoError(0):
|
|
sdb.count.inc
|
|
discard sdb.db.merge(sdb.root, key, val).valueOr:
|
|
sdb.`error` = error
|
|
sdb.errKey = @key
|
|
return
|
|
|
|
proc merkleSignCommit*(
|
|
sdb: MerkleSignRef;
|
|
): Result[HashKey,(Blob,AristoError)] =
|
|
## Finish with the list, calculate signature and return it.
|
|
if sdb.count == 0:
|
|
return ok VOID_HASH_KEY
|
|
if sdb.error != AristoError(0):
|
|
return err((sdb.errKey, sdb.error))
|
|
discard sdb.db.hashify().valueOr:
|
|
let w = (EmptyBlob, error[1])
|
|
return err(w)
|
|
let hash = sdb.db.getKeyRc(sdb.root).valueOr:
|
|
let w = (EmptyBlob, error)
|
|
return err(w)
|
|
ok hash
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# End
|
|
# ------------------------------------------------------------------------------
|