mirror of
https://github.com/codex-storage/nim-codex.git
synced 2025-01-19 01:12:34 +00:00
move prover logic from node
This commit is contained in:
parent
79088c2383
commit
9e78970b21
@ -1,46 +1,94 @@
|
||||
# ## 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.
|
||||
# ##
|
||||
## 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 pkg/chronos
|
||||
# import pkg/circomcompat
|
||||
# import pkg/poseidon2
|
||||
# import pkg/questionable/results
|
||||
import pkg/chronos
|
||||
import pkg/chronicles
|
||||
import pkg/circomcompat
|
||||
import pkg/poseidon2
|
||||
import pkg/questionable/results
|
||||
|
||||
# import ../../merkletree
|
||||
import pkg/libp2p/cid
|
||||
|
||||
# import ./backends
|
||||
# import ../types
|
||||
import ../../manifest
|
||||
import ../../merkletree
|
||||
import ../../stores
|
||||
import ../../market
|
||||
|
||||
# type
|
||||
# Prover*[HashT, ProofT, BackendT] = ref object of RootObj
|
||||
# backend: BackendT
|
||||
import ../builder
|
||||
import ../sampler
|
||||
|
||||
# AnyProof* = Proof
|
||||
# AnyHash* = Poseidon2Hash
|
||||
# AnyProverBacked* = CircomCompat
|
||||
# AnyProver* = Prover[AnyHash, AnyProof, AnyProverBacked]
|
||||
import ./backends
|
||||
import ../types
|
||||
|
||||
# proc prove*(
|
||||
# self: AnyProver,
|
||||
# input: ProofInput[AnyHash]): Future[?!AnyProof] {.async.} =
|
||||
# ## Prove a statement using backend.
|
||||
# ## Returns a future that resolves to a proof.
|
||||
export backends
|
||||
|
||||
# ## TODO: implement
|
||||
# # discard self.backend.prove(input)
|
||||
type
|
||||
AnyProof* = CircomProof
|
||||
AnyInputs* = CircomInputs
|
||||
AnyKeys* = CircomKey
|
||||
AnyHash* = Poseidon2Hash
|
||||
AnyBackend* = CircomCompat
|
||||
|
||||
# proc verify*(
|
||||
# self: AnyProver,
|
||||
# proof: AnyProof): Future[?!bool] {.async.} =
|
||||
# ## Prove a statement using backend.
|
||||
# ## Returns a future that resolves to a proof.
|
||||
Prover* = ref object of RootObj
|
||||
backend: AnyBackend
|
||||
store: BlockStore
|
||||
|
||||
# ## TODO: implement
|
||||
# # discard self.backend.verify(proof)
|
||||
proc prove*(
|
||||
self: Prover,
|
||||
slotIdx: int,
|
||||
manifest: Manifest,
|
||||
challenge: ProofChallenge): Future[?!AnyProof] {.async.} =
|
||||
## Prove a statement using backend.
|
||||
## Returns a future that resolves to a proof.
|
||||
|
||||
logScope:
|
||||
cid = manifest.treeCid
|
||||
slot = slotIdx
|
||||
challenge = challenge
|
||||
|
||||
trace "Received proof challenge"
|
||||
|
||||
without builder =? Poseidon2Builder.new(self.store, manifest), err:
|
||||
error "Unable to create slots builder", err = err.msg
|
||||
return failure(err)
|
||||
|
||||
without sampler =? Poseidon2Sampler.new(slotIdx, self.store, builder), err:
|
||||
error "Unable to create data sampler", err = err.msg
|
||||
return failure(err)
|
||||
|
||||
without proofInput =? await sampler.getProofInput(challenge, nSamples = 3), err:
|
||||
error "Unable to get proof input for slot", err = err.msg
|
||||
return failure(err)
|
||||
|
||||
# prove slot
|
||||
without proof =? self.backend.prove(proofInput), err:
|
||||
error "Unable to prove slot", err = err.msg
|
||||
return failure(err)
|
||||
|
||||
success proof
|
||||
|
||||
proc verify*(
|
||||
self: Prover,
|
||||
proof: AnyProof,
|
||||
inputs: AnyInputs,
|
||||
vpk: AnyKeys): Future[?!bool] {.async.} =
|
||||
## Prove a statement using backend.
|
||||
## Returns a future that resolves to a proof.
|
||||
|
||||
discard self.backend.verify(proof, inputs, vpk)
|
||||
|
||||
proc new*(
|
||||
_: type Prover,
|
||||
store: BlockStore,
|
||||
backend: AnyBackend): Prover =
|
||||
|
||||
Prover(
|
||||
backend: backend,
|
||||
store: store)
|
||||
|
Loading…
x
Reference in New Issue
Block a user