diff --git a/codex/node.nim b/codex/node.nim index 90c46669..a182377c 100644 --- a/codex/node.nim +++ b/codex/node.nim @@ -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) diff --git a/tests/codex/node/helpers.nim b/tests/codex/node/helpers.nim index a9a3ea76..dd0af70b 100644 --- a/tests/codex/node/helpers.nim +++ b/tests/codex/node/helpers.nim @@ -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()