2026-06-25 00:40:02 +02:00
|
|
|
import std/strutils
|
|
|
|
|
import chronos, chronicles, results, ffi
|
|
|
|
|
import logos_delivery, library/declare_lib
|
2025-12-19 17:00:43 +01:00
|
|
|
|
|
|
|
|
proc waku_discv5_update_bootnodes(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
2025-12-19 17:00:43 +01:00
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
bootnodes: cstring,
|
|
|
|
|
) {.ffi.} =
|
|
|
|
|
## Updates the bootnode list used for discovering new peers via DiscoveryV5
|
|
|
|
|
## bootnodes - JSON array containing the bootnode ENRs i.e. `["enr:...", "enr:..."]`
|
2026-06-25 00:40:02 +02:00
|
|
|
(await ctx.myLib[].waku.discv5UpdateBootnodes($bootnodes)).isOkOr:
|
2025-12-19 17:00:43 +01:00
|
|
|
error "UPDATE_DISCV5_BOOTSTRAP_NODES failed", error = error
|
2026-06-25 00:40:02 +02:00
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("discovery request processed correctly")
|
|
|
|
|
|
|
|
|
|
proc waku_dns_discovery(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
2025-12-19 17:00:43 +01:00
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
enrTreeUrl: cstring,
|
|
|
|
|
nameDnsServer: cstring,
|
|
|
|
|
timeoutMs: cint,
|
|
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
let nodes = (
|
|
|
|
|
await ctx.myLib[].waku.dnsDiscovery($enrTreeUrl, $nameDnsServer, int(timeoutMs))
|
|
|
|
|
).valueOr:
|
2025-12-19 17:00:43 +01:00
|
|
|
error "GET_BOOTSTRAP_NODES failed", error = error
|
2026-06-25 00:40:02 +02:00
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
## returns a comma-separated string of bootstrap nodes' multiaddresses
|
|
|
|
|
return ok(nodes.join(","))
|
|
|
|
|
|
|
|
|
|
proc waku_start_discv5(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
|
2025-12-19 17:00:43 +01:00
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
(await ctx.myLib[].waku.startDiscv5()).isOkOr:
|
2025-12-19 17:00:43 +01:00
|
|
|
error "START_DISCV5 failed", error = error
|
2026-06-25 00:40:02 +02:00
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("discv5 started correctly")
|
|
|
|
|
|
|
|
|
|
proc waku_stop_discv5(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
|
2025-12-19 17:00:43 +01:00
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
(await ctx.myLib[].waku.stopDiscv5()).isOkOr:
|
|
|
|
|
error "STOP_DISCV5 failed", error = error
|
|
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("discv5 stopped correctly")
|
|
|
|
|
|
|
|
|
|
proc waku_peer_exchange_request(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
2025-12-19 17:00:43 +01:00
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
numPeers: uint64,
|
|
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
let numValidPeers = (await ctx.myLib[].waku.peerExchangeRequest(numPeers)).valueOr:
|
2025-12-19 17:00:43 +01:00
|
|
|
error "waku_peer_exchange_request failed", error = error
|
2026-06-25 00:40:02 +02:00
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok($numValidPeers)
|