From 4a4588e2a0b266018a4159afede4e885bd3e7735 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Wed, 6 Jul 2022 15:37:27 +0200 Subject: [PATCH] [node] Set callbacks for Sales to retrieve and prove posession of data --- codex/node.nim | 81 +++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/codex/node.nim b/codex/node.nim index 8f23bf47..93f503b1 100644 --- a/codex/node.nim +++ b/codex/node.nim @@ -49,43 +49,6 @@ type discovery*: Discovery contracts*: ?ContractInteractions -proc start*(node: CodexNodeRef) {.async.} = - if not node.switch.isNil: - await node.switch.start() - - if not node.engine.isNil: - await node.engine.start() - - if not node.erasure.isNil: - await node.erasure.start() - - if not node.discovery.isNil: - await node.discovery.start() - - if contracts =? node.contracts: - await contracts.start() - - node.networkId = node.switch.peerInfo.peerId - notice "Started codex node", id = $node.networkId, addrs = node.switch.peerInfo.addrs - -proc stop*(node: CodexNodeRef) {.async.} = - trace "Stopping node" - - if not node.engine.isNil: - await node.engine.stop() - - if not node.switch.isNil: - await node.switch.stop() - - if not node.erasure.isNil: - await node.erasure.stop() - - if not node.discovery.isNil: - await node.discovery.stop() - - if contracts =? node.contracts: - await contracts.stop() - proc findPeer*( node: CodexNodeRef, peerId: PeerID): Future[?PeerRecord] {.async.} = @@ -310,3 +273,47 @@ proc new*( erasure: erasure, discovery: discovery, contracts: contracts) + +proc start*(node: CodexNodeRef) {.async.} = + if not node.switch.isNil: + await node.switch.start() + + if not node.engine.isNil: + await node.engine.start() + + if not node.erasure.isNil: + await node.erasure.start() + + if not node.discovery.isNil: + await node.discovery.start() + + if contracts =? node.contracts: + contracts.sales.retrieve = proc(cid: string) {.async.} = + let stream = (await node.retrieve(Cid.init(cid).tryGet())).tryGet() + while not stream.atEof(): + var buffer: array[4096, byte] + discard await readOnce(stream, addr buffer[0], buffer.len) + contracts.sales.prove = proc(cid: string): Future[seq[byte]] {.async.} = + return @[42'u8] # TODO: generate actual proof + await contracts.start() + + node.networkId = node.switch.peerInfo.peerId + notice "Started codex node", id = $node.networkId, addrs = node.switch.peerInfo.addrs + +proc stop*(node: CodexNodeRef) {.async.} = + trace "Stopping node" + + if not node.engine.isNil: + await node.engine.stop() + + if not node.switch.isNil: + await node.switch.stop() + + if not node.erasure.isNil: + await node.erasure.stop() + + if not node.discovery.isNil: + await node.discovery.stop() + + if contracts =? node.contracts: + await contracts.stop()