2025-10-01 16:31:34 +10:00
|
|
|
import std/options
|
|
|
|
|
import chronos, results, confutils, confutils/defs
|
|
|
|
|
import waku
|
|
|
|
|
|
|
|
|
|
type CliArgs = object
|
|
|
|
|
ethRpcEndpoint* {.
|
|
|
|
|
defaultValue: "", desc: "ETH RPC Endpoint, if passed, RLN is enabled"
|
|
|
|
|
.}: string
|
|
|
|
|
|
2025-11-21 16:11:58 +01:00
|
|
|
proc periodicSender(w: Waku): Future[void] {.async.} =
|
2025-12-14 10:45:54 +01:00
|
|
|
let sentListener = MessageSentEvent.listen(
|
|
|
|
|
proc(event: MessageSentEvent) {.async: (raises: []).} =
|
|
|
|
|
echo "Message sent with request ID: ",
|
|
|
|
|
event.requestId, " hash: ", event.messageHash
|
2025-12-15 14:20:25 +01:00
|
|
|
).valueOr:
|
|
|
|
|
echo "Failed to listen to message sent event: ", error
|
|
|
|
|
return
|
2025-12-14 10:45:54 +01:00
|
|
|
|
|
|
|
|
let errorListener = MessageErrorEvent.listen(
|
|
|
|
|
proc(event: MessageErrorEvent) {.async: (raises: []).} =
|
|
|
|
|
echo "Message failed to send with request ID: ",
|
|
|
|
|
event.requestId, " error: ", event.error
|
2025-12-15 14:20:25 +01:00
|
|
|
).valueOr:
|
|
|
|
|
echo "Failed to listen to message error event: ", error
|
|
|
|
|
return
|
2025-12-14 10:45:54 +01:00
|
|
|
|
|
|
|
|
let propagatedListener = MessagePropagatedEvent.listen(
|
|
|
|
|
proc(event: MessagePropagatedEvent) {.async: (raises: []).} =
|
|
|
|
|
echo "Message propagated with request ID: ",
|
|
|
|
|
event.requestId, " hash: ", event.messageHash
|
2025-12-15 14:20:25 +01:00
|
|
|
).valueOr:
|
|
|
|
|
echo "Failed to listen to message propagated event: ", error
|
|
|
|
|
return
|
2025-12-14 10:45:54 +01:00
|
|
|
|
|
|
|
|
defer:
|
|
|
|
|
MessageSentEvent.dropListener(sentListener)
|
|
|
|
|
MessageErrorEvent.dropListener(errorListener)
|
|
|
|
|
MessagePropagatedEvent.dropListener(propagatedListener)
|
|
|
|
|
|
2025-11-21 16:11:58 +01:00
|
|
|
## Periodically sends a Waku message every 30 seconds
|
|
|
|
|
var counter = 0
|
|
|
|
|
while true:
|
|
|
|
|
let envelope = MessageEnvelope.init(
|
|
|
|
|
contentTopic = "example/content/topic",
|
|
|
|
|
payload = "Hello Waku! Message number: " & $counter,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
let sendRequestId = (await w.send(envelope)).valueOr:
|
|
|
|
|
echo "Failed to send message: ", error
|
|
|
|
|
quit(QuitFailure)
|
|
|
|
|
|
2025-12-14 10:45:54 +01:00
|
|
|
echo "Sending message with request ID: ", sendRequestId, " counter: ", counter
|
|
|
|
|
|
2025-11-21 16:11:58 +01:00
|
|
|
counter += 1
|
|
|
|
|
await sleepAsync(30.seconds)
|
|
|
|
|
|
2025-10-01 16:31:34 +10:00
|
|
|
when isMainModule:
|
|
|
|
|
let args = CliArgs.load()
|
|
|
|
|
|
|
|
|
|
echo "Starting Waku node..."
|
|
|
|
|
|
|
|
|
|
let config =
|
|
|
|
|
if (args.ethRpcEndpoint == ""):
|
|
|
|
|
# Create a basic configuration for the Waku node
|
|
|
|
|
# No RLN as we don't have an ETH RPC Endpoint
|
2025-10-03 18:24:33 +10:00
|
|
|
NodeConfig.init(
|
|
|
|
|
protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 42)
|
|
|
|
|
)
|
2025-10-01 16:31:34 +10:00
|
|
|
else:
|
|
|
|
|
# Connect to TWN, use ETH RPC Endpoint for RLN
|
2025-11-21 16:11:58 +01:00
|
|
|
NodeConfig.init(mode = WakuMode.Core, ethRpcEndpoints = @[args.ethRpcEndpoint])
|
2025-10-01 16:31:34 +10:00
|
|
|
|
|
|
|
|
# Create the node using the library API's createNode function
|
|
|
|
|
let node = (waitFor createNode(config)).valueOr:
|
|
|
|
|
echo "Failed to create node: ", error
|
|
|
|
|
quit(QuitFailure)
|
|
|
|
|
|
|
|
|
|
echo("Waku node created successfully!")
|
|
|
|
|
|
|
|
|
|
# Start the node
|
|
|
|
|
(waitFor startWaku(addr node)).isOkOr:
|
|
|
|
|
echo "Failed to start node: ", error
|
|
|
|
|
quit(QuitFailure)
|
|
|
|
|
|
|
|
|
|
echo "Node started successfully!"
|
|
|
|
|
|
2025-11-21 16:11:58 +01:00
|
|
|
asyncSpawn periodicSender(node)
|
|
|
|
|
|
2025-10-01 16:31:34 +10:00
|
|
|
runForever()
|