-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpoc_verifier.nim
More file actions
57 lines (49 loc) · 1.96 KB
/
Copy pathpoc_verifier.nim
File metadata and controls
57 lines (49 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# nimbos
# Copyright (c) 2026 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option, this file may not be copied, modified, or distributed except according to those terms.
## PoC ledger seam: `ProofOfClaimPublic` + `verifyProofOfClaim` bridging mantle
## types to `poc.verify` (which holds the singleton VK).
{.push raises: [], gcsafe.}
import
results,
./[operations, proofs],
../crypto/types,
../../zk/poc,
../../zk/poseidon2/hasher
export poc, results
func proofOfClaimPublic*(
op: LeaderClaimPayload,
rewardsRoot: RewardsRoot,
txHash: ZkHash,
): ProofOfClaimPublic =
## Assemble mantle `ProofOfClaimPublic` for Groth16 verify. `rewardsRoot`
## is the ledger snapshot (must match `op.rewardsRoot` before calling).
ProofOfClaimPublic(
voucherNullifier: encodeFieldElement(op.voucherNullifier),
voucherRoot: encodeFieldElement(rewardsRoot),
mantleTxHash: encodeFieldElement(frFromBytesLEModOrder(txHash)),
)
type
ProofOfClaimVerifier* = proc(
proof: ProofOfClaimProof, public: ProofOfClaimPublic
): Result[bool, PocLoadError] {.gcsafe, raises: [].}
proc verifyProofOfClaim*(
proof: ProofOfClaimProof, public: ProofOfClaimPublic
): Result[bool, PocLoadError] =
## Out-of-modulus public hashes return `ok(false)`. `err(VkNotLoaded)` only
## on missing startup init.
let voucherNullifier = frFromBytesLE(public.voucherNullifier).valueOr:
return ok(false)
let mantleTxHashFr = frFromBytesLE(public.mantleTxHash).valueOr:
return ok(false)
let voucherRoot = frFromBytesLE(public.voucherRoot).valueOr:
return ok(false)
poc.verify(proof, PocVerifierInput(
voucherNullifier: voucherNullifier,
mantleTxHashFr: mantleTxHashFr,
voucherRoot: voucherRoot,
))
{.pop.}