2023-11-08 12:18:32 +00:00
|
|
|
# nimbus-eth1
|
2024-02-01 21:27:48 +00:00
|
|
|
# Copyright (c) 2023-2024 Status Research & Development GmbH
|
2023-11-08 12:18:32 +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.
|
|
|
|
|
|
|
|
## Aristo DB -- Sign Helper
|
|
|
|
## ========================
|
|
|
|
##
|
|
|
|
{.push raises: [].}
|
|
|
|
|
|
|
|
import
|
|
|
|
eth/common,
|
|
|
|
results,
|
2024-06-28 18:43:04 +00:00
|
|
|
"."/[aristo_compute, aristo_constants, aristo_desc, aristo_init, aristo_merge]
|
2023-11-08 12:18:32 +00:00
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# Public functions, signature generator
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
proc merkleSignBegin*(): MerkleSignRef =
|
|
|
|
## Start signature calculator for a list of key-value items.
|
|
|
|
let
|
|
|
|
db = AristoDbRef.init VoidBackendRef
|
2024-02-01 21:27:48 +00:00
|
|
|
vid = VertexID(2)
|
2023-11-08 12:18:32 +00:00
|
|
|
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
|
2024-06-18 11:14:02 +00:00
|
|
|
discard sdb.db.mergeGenericData(sdb.root, key, val).valueOr:
|
2023-11-08 12:18:32 +00:00
|
|
|
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))
|
2024-06-28 15:03:12 +00:00
|
|
|
|
|
|
|
ok sdb.db.computeKey(sdb.root).expect("ok")
|
2023-11-08 12:18:32 +00:00
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# End
|
|
|
|
# ------------------------------------------------------------------------------
|