70 lines
1.9 KiB
Nim
70 lines
1.9 KiB
Nim
## Nim-Codex
|
|
## Copyright (c) 2024 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 std/sequtils
|
|
|
|
import pkg/libp2p
|
|
import pkg/questionable
|
|
import pkg/questionable/results
|
|
import pkg/poseidon2
|
|
import pkg/poseidon2/io
|
|
|
|
import ../codextypes
|
|
import ../merkletree
|
|
import ../errors
|
|
|
|
func toCellCid*(cell: Poseidon2Hash): ?!Cid =
|
|
let
|
|
cellMhash = ? MultiHash.init(Pos2Bn128MrklCodec, cell.toBytes).mapFailure
|
|
cellCid = ? Cid.init(CIDv1, CodexSlotCellCodec, cellMhash).mapFailure
|
|
|
|
success cellCid
|
|
|
|
func toSlotCid*(root: Poseidon2Hash): ?!Cid =
|
|
let
|
|
mhash = ? MultiHash.init($multiCodec("identity"), root.toBytes).mapFailure
|
|
treeCid = ? Cid.init(CIDv1, SlotRootCodec, mhash).mapFailure
|
|
|
|
success treeCid
|
|
|
|
func toSlotCids*(slotRoots: openArray[Poseidon2Hash]): ?!seq[Cid] =
|
|
success slotRoots.mapIt( ? it.toSlotCid )
|
|
|
|
func toSlotsRootsCid*(root: Poseidon2Hash): ?!Cid =
|
|
let
|
|
mhash = ? MultiHash.init($multiCodec("identity"), root.toBytes).mapFailure
|
|
treeCid = ? Cid.init(CIDv1, SlotProvingRootCodec, mhash).mapFailure
|
|
|
|
success treeCid
|
|
|
|
func toEncodableProof*(
|
|
proof: Poseidon2Proof): ?!CodexProof =
|
|
|
|
let
|
|
encodableProof = CodexProof(
|
|
mcodec: multiCodec("identity"), # copy bytes as is
|
|
index: proof.index,
|
|
nleaves: proof.nleaves,
|
|
path: proof.path.mapIt( @( it.toBytes ) ))
|
|
|
|
success encodableProof
|
|
|
|
func toVerifiableProof*(
|
|
proof: CodexProof): ?!Poseidon2Proof =
|
|
|
|
let
|
|
verifiableProof = Poseidon2Proof(
|
|
index: proof.index,
|
|
nleaves: proof.nleaves,
|
|
path: proof.path.mapIt(
|
|
? Poseidon2Hash.fromBytes(it.toArray32).toFailure
|
|
))
|
|
|
|
success verifiableProof
|