2026-01-30 01:06:00 +01:00
|
|
|
import chronos, results, confutils, confutils/defs
|
2026-06-08 13:37:53 +02:00
|
|
|
import logos_delivery
|
2026-01-30 01:06:00 +01:00
|
|
|
|
|
|
|
|
type CliArgs = object
|
|
|
|
|
ethRpcEndpoint* {.
|
|
|
|
|
defaultValue: "", desc: "ETH RPC Endpoint, if passed, RLN is enabled"
|
|
|
|
|
.}: string
|
|
|
|
|
|
2026-06-23 01:20:09 +02:00
|
|
|
proc periodicSender(logos: LogosDelivery): Future[void] {.async.} =
|
2026-01-30 01:06:00 +01:00
|
|
|
let sentListener = MessageSentEvent.listen(
|
|
|
|
|
proc(event: MessageSentEvent) {.async: (raises: []).} =
|
|
|
|
|
echo "Message sent with request ID: ",
|
|
|
|
|
event.requestId, " hash: ", event.messageHash
|
|
|
|
|
).valueOr:
|
|
|
|
|
echo "Failed to listen to message sent event: ", error
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
let errorListener = MessageErrorEvent.listen(
|
|
|
|
|
proc(event: MessageErrorEvent) {.async: (raises: []).} =
|
|
|
|
|
echo "Message failed to send with request ID: ",
|
|
|
|
|
event.requestId, " error: ", event.error
|
|
|
|
|
).valueOr:
|
|
|
|
|
echo "Failed to listen to message error event: ", error
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
let propagatedListener = MessagePropagatedEvent.listen(
|
|
|
|
|
proc(event: MessagePropagatedEvent) {.async: (raises: []).} =
|
|
|
|
|
echo "Message propagated with request ID: ",
|
|
|
|
|
event.requestId, " hash: ", event.messageHash
|
|
|
|
|
).valueOr:
|
|
|
|
|
echo "Failed to listen to message propagated event: ", error
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
defer:
|
2026-05-16 00:09:07 +02:00
|
|
|
await MessageSentEvent.dropListener(sentListener)
|
|
|
|
|
await MessageErrorEvent.dropListener(errorListener)
|
|
|
|
|
await MessagePropagatedEvent.dropListener(propagatedListener)
|
2026-01-30 01:06:00 +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,
|
|
|
|
|
)
|
|
|
|
|
|
2026-06-23 01:20:09 +02:00
|
|
|
let sendRequestId = (await logos.messagingClient.send(envelope)).valueOr:
|
2026-01-30 01:06:00 +01:00
|
|
|
echo "Failed to send message: ", error
|
|
|
|
|
quit(QuitFailure)
|
|
|
|
|
|
|
|
|
|
echo "Sending message with request ID: ", sendRequestId, " counter: ", counter
|
|
|
|
|
|
|
|
|
|
counter += 1
|
|
|
|
|
await sleepAsync(30.seconds)
|
|
|
|
|
|
|
|
|
|
when isMainModule:
|
|
|
|
|
let args = CliArgs.load()
|
|
|
|
|
|
|
|
|
|
echo "Starting Waku node..."
|
|
|
|
|
|
2026-08-14 02:12:42 -03:00
|
|
|
var preset: string
|
|
|
|
|
var messagingOverrides = MessagingClientConf()
|
2026-03-03 19:17:54 +01:00
|
|
|
if args.ethRpcEndpoint == "":
|
|
|
|
|
# Create a basic configuration for the Waku node
|
|
|
|
|
# No RLN as we don't have an ETH RPC Endpoint
|
2026-08-14 02:12:42 -03:00
|
|
|
preset = "logos.dev"
|
2026-03-03 19:17:54 +01:00
|
|
|
else:
|
|
|
|
|
# Connect to TWN, use ETH RPC Endpoint for RLN
|
2026-08-14 02:12:42 -03:00
|
|
|
preset = "twn"
|
|
|
|
|
messagingOverrides.ethRpcEndpoints = Opt.some(@[EthRpcUrl(args.ethRpcEndpoint)])
|
2026-01-30 01:06:00 +01:00
|
|
|
|
2026-06-23 01:20:09 +02:00
|
|
|
# Create the full Logos Messaging stack (Waku + messaging + channels)
|
2026-08-14 02:12:42 -03:00
|
|
|
let node = (
|
|
|
|
|
waitFor LogosDelivery.new(
|
|
|
|
|
mode = LogosDeliveryMode.Core,
|
|
|
|
|
preset = preset,
|
|
|
|
|
messagingOverrides = messagingOverrides,
|
|
|
|
|
channelsOverrides = ReliableChannelManagerConf(),
|
|
|
|
|
)
|
|
|
|
|
).valueOr:
|
2026-01-30 01:06:00 +01:00
|
|
|
echo "Failed to create node: ", error
|
|
|
|
|
quit(QuitFailure)
|
|
|
|
|
|
2026-06-23 01:20:09 +02:00
|
|
|
echo("Logos Messaging node created successfully!")
|
2026-06-04 15:53:27 -03:00
|
|
|
|
2026-01-30 01:06:00 +01:00
|
|
|
# Start the node
|
2026-06-04 15:53:27 -03:00
|
|
|
(waitFor node.start()).isOkOr:
|
2026-01-30 01:06:00 +01:00
|
|
|
echo "Failed to start node: ", error
|
|
|
|
|
quit(QuitFailure)
|
|
|
|
|
|
|
|
|
|
echo "Node started successfully!"
|
|
|
|
|
|
|
|
|
|
asyncSpawn periodicSender(node)
|
|
|
|
|
|
|
|
|
|
runForever()
|