Skip to content

Commit

Permalink
feat(discv5): filter out peers without any listed capability (#2186)
Browse files Browse the repository at this point in the history
  • Loading branch information
SionoiS authored Nov 6, 2023
1 parent b9563ae commit 200a11d
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 15 deletions.
3 changes: 3 additions & 0 deletions tests/test_waku_discv5.nim
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ procSuite "Waku Discovery v5":

var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum)
require builder.withWakuRelaySharding(shardsTopics).isOk()
builder.withWakuCapabilities(Relay)

let recordRes = builder.build()
require recordRes.isOk()
Expand All @@ -338,6 +339,7 @@ procSuite "Waku Discovery v5":

var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum)
require builder.withWakuRelaySharding(shardsTopics).isOk()
builder.withWakuCapabilities(Relay)

let recordRes = builder.build()
require recordRes.isOk()
Expand All @@ -356,6 +358,7 @@ procSuite "Waku Discovery v5":

var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum)
require builder.withWakuRelaySharding(shardsTopics).isOk()
builder.withWakuCapabilities(Relay)

let recordRes = builder.build()
require recordRes.isOk()
Expand Down
24 changes: 9 additions & 15 deletions waku/waku_discv5.nim
Original file line number Diff line number Diff line change
Expand Up @@ -52,25 +52,19 @@ type WakuDiscoveryV5* = ref object

proc shardingPredicate*(record: Record): Option[WakuDiscv5Predicate] =
## Filter peers based on relay sharding information
let typedRecord = record.toTyped().valueOr:
debug "peer filtering failed", reason=error
return none(WakuDiscv5Predicate)

let typeRecordRes = record.toTyped()
let typedRecord =
if typeRecordRes.isErr():
debug "peer filtering failed", reason= $typeRecordRes.error
return none(WakuDiscv5Predicate)
else: typeRecordRes.get()

let nodeShardOp = typedRecord.relaySharding()
let nodeShard =
if nodeShardOp.isNone():
debug "no relay sharding information, peer filtering disabled"
return none(WakuDiscv5Predicate)
else: nodeShardOp.get()

let nodeShard = typedRecord.relaySharding().valueOr:
debug "no relay sharding information, peer filtering disabled"
return none(WakuDiscv5Predicate)

debug "peer filtering updated"

let predicate = proc(record: waku_enr.Record): bool =
nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it))
record.getCapabilities().len > 0 and #RFC 31 requirement
nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it)) #RFC 64 guideline

return some(predicate)

Expand Down

0 comments on commit 200a11d

Please sign in to comment.