mirror of
https://github.com/status-im/nim-dagger.git
synced 2025-01-09 14:15:41 +00:00
b3e57a37e2
* wire prover into node * stricter case object checks * return correct proof * misc renames * adding usefull traces * fix nodes and tolerance to match expected params * format challenges in logs * add circom compat to solidity groth16 convertion * update * bump time to give nodes time to load with all circom artifacts * misc * misc * use correct dataset geometry in erasure * make errors more searchable * use parens around `=? (await...)` calls * styling * styling * use push raises * fix to match constructor arguments * merge master * merge master * integration: fix proof parameters for a test Increased times due to ZK proof generation. Increased storage requirement because we're now hosting 5 slots instead of 1. * sales: calculate initial proof at start of period reason: this ensures that the period (and therefore the challenge) doesn't change while we're calculating the proof * integration: fix proof parameters for tests Increased times due to waiting on next period. Fixed data to be of right size. Updated expected payout due to hosting 5 slots. * sales: wait for stable proof challenge When the block pointer is nearing the wrap-around point, we wait another period before calculating a proof. * fix merge conflict --------- Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com> Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
80 lines
2.1 KiB
Nim
80 lines
2.1 KiB
Nim
## Nim-Codex
|
|
## Copyright (c) 2023 Status Research & Development GmbH
|
|
## Licensed under either of
|
|
## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
|
## * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
|
## at your option.
|
|
## This file may not be copied, modified, or distributed except according to
|
|
## those terms.
|
|
|
|
import pkg/poseidon2
|
|
import pkg/questionable/results
|
|
import pkg/libp2p/multihash
|
|
import pkg/stew/byteutils
|
|
|
|
import ../merkletree
|
|
|
|
func spongeDigest*(
|
|
_: type Poseidon2Hash,
|
|
bytes: openArray[byte],
|
|
rate: static int = 2): ?!Poseidon2Hash =
|
|
## Hashes chunks of data with a sponge of rate 1 or 2.
|
|
##
|
|
|
|
success Sponge.digest(bytes, rate)
|
|
|
|
func spongeDigest*(
|
|
_: type Poseidon2Hash,
|
|
bytes: openArray[Bn254Fr],
|
|
rate: static int = 2): ?!Poseidon2Hash =
|
|
## Hashes chunks of elements with a sponge of rate 1 or 2.
|
|
##
|
|
|
|
success Sponge.digest(bytes, rate)
|
|
|
|
func digestTree*(
|
|
_: type Poseidon2Tree,
|
|
bytes: openArray[byte],
|
|
chunkSize: int): ?!Poseidon2Tree =
|
|
## Hashes chunks of data with a sponge of rate 2, and combines the
|
|
## resulting chunk hashes in a merkle root.
|
|
##
|
|
|
|
# doAssert not(rate == 1 or rate == 2), "rate can only be 1 or 2"
|
|
|
|
if not chunkSize > 0:
|
|
return failure("chunkSize must be greater than 0")
|
|
|
|
var index = 0
|
|
var leaves: seq[Poseidon2Hash]
|
|
while index < bytes.len:
|
|
let start = index
|
|
let finish = min(index + chunkSize, bytes.len)
|
|
let digest = ? Poseidon2Hash.spongeDigest(bytes.toOpenArray(start, finish - 1), 2)
|
|
leaves.add(digest)
|
|
index += chunkSize
|
|
return Poseidon2Tree.init(leaves)
|
|
|
|
func digest*(
|
|
_: type Poseidon2Tree,
|
|
bytes: openArray[byte],
|
|
chunkSize: int): ?!Poseidon2Hash =
|
|
## Hashes chunks of data with a sponge of rate 2, and combines the
|
|
## resulting chunk hashes in a merkle root.
|
|
##
|
|
|
|
(? Poseidon2Tree.digestTree(bytes, chunkSize)).root
|
|
|
|
func digestMhash*(
|
|
_: type Poseidon2Tree,
|
|
bytes: openArray[byte],
|
|
chunkSize: int): ?!MultiHash =
|
|
## Hashes chunks of data with a sponge of rate 2 and
|
|
## returns the multihash of the root
|
|
##
|
|
|
|
let
|
|
hash = ? Poseidon2Tree.digest(bytes, chunkSize)
|
|
|
|
? MultiHash.init(Pos2Bn128MrklCodec, hash).mapFailure
|