wire prover into node

This commit is contained in:
Dmitriy Ryajov 2024-02-09 19:33:03 -06:00 committed by Eric
parent 2be8c353bf
commit 19ca13f6cd
No known key found for this signature in database
2 changed files with 20 additions and 17 deletions

View File

@ -64,6 +64,7 @@ type
blockStore: BlockStore
engine: BlockExcEngine
erasure: Erasure
prover: ?Prover
discovery: Discovery
contracts*: Contracts
clock*: Clock
@ -547,10 +548,14 @@ proc onStore(
trace "Unable to build slot", err = err.msg
return failure(err)
trace "Slot successfully retrieved and reconstructed"
if cid =? slotRoot.toSlotCid() and cid != manifest.slotRoots[slotIdx.int]:
trace "Slot root mismatch", manifest = manifest.slotRoots[slotIdx.int], recovered = slotRoot.toSlotCid()
return failure(newException(CodexError, "Slot root mismatch"))
trace "Storage request processed"
return success()
proc onProve(
@ -571,25 +576,20 @@ proc onProve(
trace "Received proof challenge"
without cid =? Cid.init(cidStr).mapFailure, err:
error "Unable to parse Cid", cid, err = err.msg
return failure(err)
if prover =? self.prover:
trace "Prover enabled"
without manifest =? await self.fetchManifest(cid), err:
error "Unable to fetch manifest for cid", err = err.msg
return failure(err)
without cid =? Cid.init(cidStr).mapFailure, err:
error "Unable to parse Cid", cid, err = err.msg
return failure(err)
without builder =? Poseidon2Builder.new(self.blockStore, manifest), err:
error "Unable to create slots builder", err = err.msg
return failure(err)
without manifest =? await self.fetchManifest(cid), err:
error "Unable to fetch manifest for cid", err = err.msg
return failure(err)
without sampler =? DataSampler.new(slotIdx, self.blockStore, 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)
without proof =? await prover.prove(slotIdx, manifest, challenge), err:
error "Unable to generate proof", err = err.msg
return failure(err)
# Todo: send proofInput to circuit. Get proof. (Profit, repeat.)
@ -707,6 +707,7 @@ proc new*(
store: BlockStore,
engine: BlockExcEngine,
erasure: Erasure,
prover = Prover.none,
discovery: Discovery,
contracts = Contracts.default): CodexNodeRef =
## Create new instance of a Codex self, call `start` to run it
@ -717,5 +718,6 @@ proc new*(
blockStore: store,
engine: engine,
erasure: erasure,
prover: prover,
discovery: discovery,
contracts: contracts)

View File

@ -6,6 +6,7 @@ import pkg/chronos
import pkg/codex/codextypes
import pkg/codex/chunker
import pkg/codex/slots
import ../../asynctest
@ -93,7 +94,7 @@ template setupAndTearDown*() {.dirty.} =
engine = BlockExcEngine.new(localStore, wallet, network, discovery, peerStore, pendingBlocks)
store = NetworkStore.new(engine, localStore)
erasure = Erasure.new(store, leoEncoderProvider, leoDecoderProvider)
node = CodexNodeRef.new(switch, store, engine, erasure, blockDiscovery)
node = CodexNodeRef.new(switch, store, engine, erasure, Prover.none, blockDiscovery)
await node.start()