mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-02 14:03:06 +00:00
add conf for peer-exchange to not filter peers not found via discv5
This commit is contained in:
parent
51b55020ec
commit
51fd75d0c6
@ -9,10 +9,11 @@ import
|
||||
./web_socket_conf_builder,
|
||||
./metrics_server_conf_builder,
|
||||
./rln_relay_conf_builder,
|
||||
./mix_conf_builder
|
||||
./mix_conf_builder,
|
||||
./peer_exchange_conf_builder
|
||||
|
||||
export
|
||||
waku_conf_builder, filter_service_conf_builder, store_sync_conf_builder,
|
||||
store_service_conf_builder, rest_server_conf_builder, dns_discovery_conf_builder,
|
||||
discv5_conf_builder, web_socket_conf_builder, metrics_server_conf_builder,
|
||||
rln_relay_conf_builder, mix_conf_builder
|
||||
rln_relay_conf_builder, mix_conf_builder, peer_exchange_conf_builder
|
||||
|
||||
21
waku/factory/conf_builder/peer_exchange_conf_builder.nim
Normal file
21
waku/factory/conf_builder/peer_exchange_conf_builder.nim
Normal file
@ -0,0 +1,21 @@
|
||||
import chronicles, std/options, results
|
||||
import ../waku_conf
|
||||
|
||||
logScope:
|
||||
topics = "waku conf builder peer exchange"
|
||||
|
||||
##################################
|
||||
## Peer Exchange Config Builder ##
|
||||
##################################
|
||||
type PeerExchangeConfBuilder* = object
|
||||
strictPeerExchangeFiltering*: bool
|
||||
|
||||
proc init*(T: type PeerExchangeConfBuilder): PeerExchangeConfBuilder =
|
||||
PeerExchangeConfBuilder()
|
||||
|
||||
proc withStrictPeerFiltering*(b: var PeerExchangeConfBuilder, enabled: bool) =
|
||||
b.strictPeerExchangeFiltering = enabled
|
||||
|
||||
proc build*(b: PeerExchangeConfBuilder): Result[Option[PeerExchangeConf], string] =
|
||||
return
|
||||
ok(some(PeerExchangeConf(strictPeerExchangeFilter: b.strictPeerExchangeFiltering)))
|
||||
@ -24,7 +24,8 @@ import
|
||||
./web_socket_conf_builder,
|
||||
./metrics_server_conf_builder,
|
||||
./rln_relay_conf_builder,
|
||||
./mix_conf_builder
|
||||
./mix_conf_builder,
|
||||
./peer_exchange_conf_builder
|
||||
|
||||
logScope:
|
||||
topics = "waku conf builder"
|
||||
@ -75,6 +76,7 @@ type WakuConfBuilder* = object
|
||||
storeServiceConf*: StoreServiceConfBuilder
|
||||
mixConf*: MixConfBuilder
|
||||
webSocketConf*: WebSocketConfBuilder
|
||||
peerExchangeConf*: PeerExchangeConfBuilder
|
||||
# End conf builders
|
||||
relay: Option[bool]
|
||||
lightPush: Option[bool]
|
||||
@ -479,6 +481,9 @@ proc build*(
|
||||
let mixConf = builder.mixConf.build().valueOr:
|
||||
return err("Mix Conf building failed: " & $error)
|
||||
|
||||
let peerExchangeConf = builder.peerExchangeConf.build().valueOr:
|
||||
return err("Peer Exchange Conf building failed: " & $error)
|
||||
|
||||
let webSocketConf = builder.webSocketConf.build().valueOr:
|
||||
return err("WebSocket Conf building failed: " & $error)
|
||||
# End - Build sub-configs
|
||||
@ -599,6 +604,7 @@ proc build*(
|
||||
restServerConf: restServerConf,
|
||||
dnsDiscoveryConf: dnsDiscoveryConf,
|
||||
mixConf: mixConf,
|
||||
peerExchangeConf: peerExchangeConf,
|
||||
# end confs
|
||||
nodeKey: nodeKey,
|
||||
clusterId: clusterId,
|
||||
|
||||
@ -611,6 +611,12 @@ with the drawback of consuming some more bandwidth.""",
|
||||
name: "peer-exchange"
|
||||
.}: bool
|
||||
|
||||
strictPeerExchangeFilter* {.
|
||||
desc: "Enable/disable strict filtering of peers to be served via peer-exchange",
|
||||
defaultValue: true,
|
||||
name: "peer-exchange-strict-filter"
|
||||
.}: bool
|
||||
|
||||
peerExchangeNode* {.
|
||||
desc:
|
||||
"Peer multiaddr to send peer exchange requests to. (enables peer exchange protocol requester side)",
|
||||
@ -1023,6 +1029,8 @@ proc toWakuConf*(n: WakuNodeConf): ConfResult[WakuConf] =
|
||||
b.discv5Conf.withBitsPerHop(n.discv5BitsPerHop)
|
||||
|
||||
b.withPeerExchange(n.peerExchange)
|
||||
if n.peerExchange:
|
||||
b.peerExchangeConf.withStrictPeerFiltering(n.strictPeerExchangeFilter)
|
||||
|
||||
b.withRendezvous(n.rendezvous)
|
||||
|
||||
|
||||
@ -40,6 +40,9 @@ type MixConf* = ref object
|
||||
mixKey*: Curve25519Key
|
||||
mixPubKey*: Curve25519Key
|
||||
|
||||
type PeerExchangeConf* = object
|
||||
strictPeerExchangeFilter*: bool
|
||||
|
||||
type StoreServiceConf* {.requiresInit.} = object
|
||||
dbMigration*: bool
|
||||
dbURl*: string
|
||||
@ -98,6 +101,7 @@ type WakuConf* {.requiresInit.} = ref object
|
||||
metricsServerConf*: Option[MetricsServerConf]
|
||||
webSocketConf*: Option[WebSocketConf]
|
||||
mixConf*: Option[MixConf]
|
||||
peerExchangeConf*: Option[PeerExchangeConf]
|
||||
|
||||
portsShift*: uint16
|
||||
dnsAddrsNameServers*: seq[IpAddress]
|
||||
|
||||
@ -58,6 +58,7 @@ type
|
||||
# todo: next step: ring buffer; future: implement cache satisfying https://rfc.vac.dev/spec/34/
|
||||
requestRateLimiter*: RequestRateLimiter
|
||||
pxLoopHandle*: Future[void]
|
||||
strictPeerFilter*: bool
|
||||
|
||||
proc request*(
|
||||
wpx: WakuPeerExchange, numPeers = DefaultPXNumPeersReq, conn: Connection
|
||||
@ -201,8 +202,8 @@ proc getEnrsFromCache(
|
||||
# return numPeers or less if cache is smaller
|
||||
return shuffledCache[0 ..< min(shuffledCache.len.int, numPeers.int)]
|
||||
|
||||
proc poolFilter*(cluster: Option[uint16], peer: RemotePeerInfo): bool =
|
||||
if peer.origin != Discv5:
|
||||
proc poolFilter*(cluster: Option[uint16], strictPeerFilter : bool ,peer: RemotePeerInfo): bool =
|
||||
if peer.origin != Discv5 and strictPeerFilter:
|
||||
debug "peer not from discv5", peer = $peer, origin = $peer.origin
|
||||
return false
|
||||
|
||||
@ -219,7 +220,7 @@ proc poolFilter*(cluster: Option[uint16], peer: RemotePeerInfo): bool =
|
||||
proc populateEnrCache(wpx: WakuPeerExchange) =
|
||||
# share only peers that i) are reachable ii) come from discv5 iii) share cluster
|
||||
let withEnr = wpx.peerManager.switch.peerStore.getReachablePeers().filterIt(
|
||||
poolFilter(wpx.cluster, it)
|
||||
poolFilter(wpx.cluster, wpx.strictPeerFilter, it)
|
||||
)
|
||||
|
||||
# either what we have or max cache size
|
||||
@ -314,11 +315,13 @@ proc new*(
|
||||
peerManager: PeerManager,
|
||||
cluster: Option[uint16] = none(uint16),
|
||||
rateLimitSetting: Option[RateLimitSetting] = none[RateLimitSetting](),
|
||||
strictPeerFilter: bool = false,
|
||||
): T =
|
||||
let wpx = WakuPeerExchange(
|
||||
peerManager: peerManager,
|
||||
cluster: cluster,
|
||||
requestRateLimiter: newRequestRateLimiter(rateLimitSetting),
|
||||
strictPeerFilter: strictPeerFilter
|
||||
)
|
||||
wpx.initProtocolHandler()
|
||||
setServiceLimitMetric(WakuPeerExchangeCodec, rateLimitSetting)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user