mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-04 06:23:06 +00:00
rework discovery with methods
This commit is contained in:
parent
29d829d51c
commit
a9cd7982fd
@ -260,8 +260,6 @@ proc requestBlock*(
|
||||
it != blockPeer
|
||||
)
|
||||
|
||||
debug "Requesting block from peer", providerCount = discovery.provides.len,
|
||||
peer = discovery.provides[0], cid
|
||||
# request block
|
||||
b.network.request.sendWantList(
|
||||
blockPeer.id,
|
||||
|
||||
@ -8,18 +8,20 @@
|
||||
## those terms.
|
||||
|
||||
import pkg/chronos
|
||||
import pkg/chronicles
|
||||
import pkg/libp2p
|
||||
import pkg/questionable
|
||||
import pkg/questionable/results
|
||||
import pkg/stew/shims/net
|
||||
import pkg/libp2pdht/discv5/protocol as discv5
|
||||
|
||||
import rng
|
||||
import ./rng
|
||||
import ./errors
|
||||
|
||||
export discv5
|
||||
|
||||
type
|
||||
Discovery* = ref object
|
||||
Discovery* = ref object of RootObj
|
||||
protocol: discv5.Protocol
|
||||
localInfo: PeerInfo
|
||||
|
||||
@ -55,15 +57,33 @@ proc toDiscoveryId*(cid: Cid): NodeId =
|
||||
## To discovery id
|
||||
readUintBE[256](keccak256.digest(cid.data.buffer).data)
|
||||
|
||||
proc findBlockProviders*(
|
||||
method findBlockProviders*(
|
||||
d: Discovery,
|
||||
cid: Cid): Future[seq[SignedPeerRecord]] {.async.} =
|
||||
return (await d.protocol.getProviders(cid.toDiscoveryId())).get()
|
||||
cid: Cid): Future[seq[SignedPeerRecord]] {.async, base.} =
|
||||
## Find block providers
|
||||
##
|
||||
|
||||
proc publishProvide*(d: Discovery, cid: Cid) {.async.} =
|
||||
let bid = cid.toDiscoveryId()
|
||||
discard await d.protocol.addProvider(bid, d.localInfo.signedPeerRecord)
|
||||
trace "Finding providers for block", cid = $cid
|
||||
without providers =?
|
||||
(await d.protocol.getProviders(cid.toDiscoveryId())).mapFailure, error:
|
||||
trace "Error finding providers for block", cid = $cid, error = error.msg
|
||||
|
||||
return providers
|
||||
|
||||
method provideBlock*(d: Discovery, cid: Cid) {.async, base.} =
|
||||
## Provide a bock Cid
|
||||
##
|
||||
|
||||
trace "Providing block", cid = $cid
|
||||
let
|
||||
nodes = await d.protocol.addProvider(
|
||||
cid.toDiscoveryId(),
|
||||
d.localInfo.signedPeerRecord)
|
||||
|
||||
if nodes.len <= 0:
|
||||
trace "Couldn't provide to any nodes!"
|
||||
|
||||
trace "Provided to nodes", nodes = nodes.len
|
||||
|
||||
proc start*(d: Discovery) {.async.} =
|
||||
d.protocol.updateRecord(d.localInfo.signedPeerRecord).expect("updating SPR")
|
||||
|
||||
@ -12,9 +12,7 @@ import pkg/libp2p
|
||||
import pkg/questionable
|
||||
import pkg/questionable/results
|
||||
import pkg/stew/shims/net
|
||||
import pkg/libp2pdht/discv5/protocol as discv5
|
||||
|
||||
export discv5
|
||||
import pkg/dagger/discovery
|
||||
|
||||
type
|
||||
MockDiscovery* = ref object of Discovery
|
||||
@ -22,7 +20,7 @@ type
|
||||
publishProvideHandler*: proc(d: MockDiscovery, cid: Cid) {.gcsafe.}
|
||||
|
||||
proc new*(
|
||||
T: type Discovery,
|
||||
T: type MockDiscovery,
|
||||
localInfo: PeerInfo,
|
||||
discoveryPort: Port,
|
||||
bootstrapNodes = newSeq[SignedPeerRecord](),
|
||||
@ -35,8 +33,8 @@ proc findPeer*(
|
||||
peerId: PeerID): Future[?PeerRecord] {.async.} =
|
||||
return none(PeerRecord)
|
||||
|
||||
proc findBlockProviders*(
|
||||
d: Discovery,
|
||||
method findBlockProviders*(
|
||||
d: MockDiscovery,
|
||||
cid: Cid): Future[seq[SignedPeerRecord]] {.async.} =
|
||||
if isNil(d.findBlockProvidersHandler): return
|
||||
|
||||
@ -46,7 +44,6 @@ method provideBlock*(d: MockDiscovery, cid: Cid) {.async.} =
|
||||
if isNil(d.publishProvideHandler): return
|
||||
d.publishProvideHandler(d, cid)
|
||||
|
||||
|
||||
proc start*(d: Discovery) {.async.} =
|
||||
discard
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user