From d94cb7c73631ffd4b934839ba58bc622d331a135 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 1 Oct 2025 22:03:05 +0200 Subject: [PATCH 1/5] fix log libwaku (#3608) * libwaku properly set a default log config * waku_example.c set numShardsInNetwork to 257 --- examples/cbindings/waku_example.c | 1 + library/waku_context.nim | 3 +++ 2 files changed, 4 insertions(+) diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index 1f6f0256a..35ac8a2e2 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -298,6 +298,7 @@ int main(int argc, char** argv) { snprintf(jsonConfig, 5000, "{ \ \"clusterId\": 16, \ \"shards\": [ 1, 32, 64, 128, 256 ], \ + \"numShardsInNetwork\": 257, \ \"listenAddress\": \"%s\", \ \"tcpPort\": %d, \ \"relay\": %s, \ diff --git a/library/waku_context.nim b/library/waku_context.nim index 6716013c9..c227551be 100644 --- a/library/waku_context.nim +++ b/library/waku_context.nim @@ -5,6 +5,7 @@ import std/[options, atomics, os, net, locks] import chronicles, chronos, chronos/threadsync, taskpools/channels_spsc_single, results import + waku/common/logging, waku/factory/waku, waku/node/peer_manager, waku/waku_relay/[protocol, topic_health], @@ -155,6 +156,8 @@ proc watchdogThreadBody(ctx: ptr WakuContext) {.thread.} = proc wakuThreadBody(ctx: ptr WakuContext) {.thread.} = ## Waku thread that attends library user requests (stop, connect_to, etc.) + logging.setupLog(logging.LogLevel.DEBUG, logging.LogFormat.TEXT) + let wakuRun = proc(ctx: ptr WakuContext) {.async.} = var waku: Waku while true: From 6958eac6f112bfeb99156ae2d27189f82072c5f0 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:13:07 +0200 Subject: [PATCH 2/5] peer exchange avoid spammy log (#3609) --- waku/waku_peer_exchange/protocol.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/waku/waku_peer_exchange/protocol.nim b/waku/waku_peer_exchange/protocol.nim index f3f8629c8..9d5a02ddc 100644 --- a/waku/waku_peer_exchange/protocol.nim +++ b/waku/waku_peer_exchange/protocol.nim @@ -176,8 +176,8 @@ proc initProtocolHandler(wpx: WakuPeerExchange) = return let enrs = wpx.getEnrsFromCache(decBuf.get().request.numPeers) - debug "peer exchange request received", enrs = $enrs - + debug "peer exchange request received" + trace "px enrs to respond", enrs = $enrs try: (await wpx.respond(enrs, conn)).isErrOr: waku_px_peers_sent.inc(enrs.len().int64()) From 5b5ff4cbe74c93fe0e65f3e1f1ded17d89394d70 Mon Sep 17 00:00:00 2001 From: fryorcraken <110212804+fryorcraken@users.noreply.github.com> Date: Fri, 3 Oct 2025 18:24:33 +1000 Subject: [PATCH 3/5] chore: rename Waku API's "Waku Config" to "Protocols" Config (#3603) * chore: rename Waku API's "Waku Config" to "Protocols" Config Make it clearer that with this config, we are configuring the Waku protocols, in contrast to other parameters which are more executable related. * ensure var name matches type * format --- examples/waku_example.nim | 4 +++- tests/api/test_node_conf.nim | 24 +++++++++++++----------- tests/test_waku.nim | 9 +++++---- waku/api/api_conf.nim | 28 ++++++++++++++-------------- 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/examples/waku_example.nim b/examples/waku_example.nim index 03964ca7c..ebac0b466 100644 --- a/examples/waku_example.nim +++ b/examples/waku_example.nim @@ -16,7 +16,9 @@ when isMainModule: if (args.ethRpcEndpoint == ""): # Create a basic configuration for the Waku node # No RLN as we don't have an ETH RPC Endpoint - NodeConfig.init(wakuConfig = WakuConfig.init(entryNodes = @[], clusterId = 42)) + NodeConfig.init( + protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 42) + ) else: # Connect to TWN, use ETH RPC Endpoint for RLN NodeConfig.init(ethRpcEndpoints = @[args.ethRpcEndpoint]) diff --git a/tests/api/test_node_conf.nim b/tests/api/test_node_conf.nim index c9b256d42..232ffc7d2 100644 --- a/tests/api/test_node_conf.nim +++ b/tests/api/test_node_conf.nim @@ -23,9 +23,9 @@ suite "LibWaku Conf - toWakuConf": test "Core mode configuration": ## Given - let wakuConfig = WakuConfig.init(entryNodes = @[], clusterId = 1) + let protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1) - let nodeConfig = NodeConfig.init(mode = Core, wakuConfig = wakuConfig) + let nodeConfig = NodeConfig.init(mode = Core, protocolsConfig = protocolsConfig) ## When let wakuConfRes = toWakuConf(nodeConfig) @@ -44,7 +44,7 @@ suite "LibWaku Conf - toWakuConf": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], staticStoreNodes = @[], clusterId = 42, @@ -72,8 +72,9 @@ suite "LibWaku Conf - toWakuConf": ] let libConf = NodeConfig.init( mode = Core, - wakuConfig = - WakuConfig.init(entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1), + protocolsConfig = ProtocolsConfig.init( + entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1 + ), ) ## When @@ -95,7 +96,7 @@ suite "LibWaku Conf - toWakuConf": "/ip4/192.168.1.1/tcp/60001/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYd", ] let nodeConf = NodeConfig.init( - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], staticStoreNodes = staticStoreNodes, clusterId = 1 ) ) @@ -113,7 +114,7 @@ suite "LibWaku Conf - toWakuConf": test "Message validation with max message size": ## Given let nodeConfig = NodeConfig.init( - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], staticStoreNodes = @[], clusterId = 1, @@ -135,7 +136,7 @@ suite "LibWaku Conf - toWakuConf": test "Message validation with RLN config": ## Given let nodeConfig = NodeConfig.init( - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], clusterId = 1, messageValidation = MessageValidation( @@ -174,7 +175,7 @@ suite "LibWaku Conf - toWakuConf": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[ "enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Vn7gmfkTTnAe8Ys2cgGBN8ufJnvzKQFZqFMBgmlkgnY0iXNlY3AyNTZrMaEDS8-D878DrdbNwcuY-3p1qdDp5MOoCurhdsNPJTXZ3c5g3RjcIJ2X4N1ZHCCd2g" @@ -254,8 +255,9 @@ suite "LibWaku Conf - toWakuConf": let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = - WakuConfig.init(entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1), + protocolsConfig = ProtocolsConfig.init( + entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1 + ), ) ## When diff --git a/tests/test_waku.nim b/tests/test_waku.nim index defec1222..b8e2b26b1 100644 --- a/tests/test_waku.nim +++ b/tests/test_waku.nim @@ -7,8 +7,9 @@ import waku suite "Waku API - Create node": asyncTest "Create node with minimal configuration": ## Given - let nodeConfig = - NodeConfig.init(wakuConfig = WakuConfig.init(entryNodes = @[], clusterId = 1)) + let nodeConfig = NodeConfig.init( + protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1) + ) # This is the actual minimal config but as the node auto-start, it is not suitable for tests # NodeConfig.init(ethRpcEndpoints = @["http://someaddress"]) @@ -27,7 +28,7 @@ suite "Waku API - Create node": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[ "enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Vn7gmfkTTnAe8Ys2cgGBN8ufJnvzKQFZqFMBgmlkgnY0iXNlY3AyNTZrMaEDS8-D878DrdbNwcuY-3p1qdDp5MOoCurhdsNPJTXZ3c5g3RjcIJ2X4N1ZHCCd2g" @@ -63,7 +64,7 @@ suite "Waku API - Create node": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[ "enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im", diff --git a/waku/api/api_conf.nim b/waku/api/api_conf.nim index 360c397af..155554dfd 100644 --- a/waku/api/api_conf.nim +++ b/waku/api/api_conf.nim @@ -26,7 +26,7 @@ type MessageValidation* {.requiresInit.} = object maxMessageSize*: string # Accepts formats like "150 KiB", "1500 B" rlnConfig*: Option[RlnConfig] -type WakuConfig* {.requiresInit.} = object +type ProtocolsConfig* {.requiresInit.} = object entryNodes: seq[string] staticStoreNodes: seq[string] clusterId: uint16 @@ -42,7 +42,7 @@ const DefaultMessageValidation* = MessageValidation(maxMessageSize: "150 KiB", rlnConfig: none(RlnConfig)) proc init*( - T: typedesc[WakuConfig], + T: typedesc[ProtocolsConfig], entryNodes: seq[string], staticStoreNodes: seq[string] = @[], clusterId: uint16, @@ -57,7 +57,7 @@ proc init*( messageValidation: messageValidation, ) -const TheWakuNetworkPreset* = WakuConfig( +const TheWakuNetworkPreset* = ProtocolsConfig( entryNodes: @[ "enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im" @@ -83,20 +83,20 @@ type WakuMode* {.pure.} = enum type NodeConfig* {.requiresInit.} = object mode: WakuMode - wakuConfig: WakuConfig + protocolsConfig: ProtocolsConfig networkingConfig: NetworkingConfig ethRpcEndpoints: seq[string] proc init*( T: typedesc[NodeConfig], mode: WakuMode = WakuMode.Core, - wakuConfig: WakuConfig = TheWakuNetworkPreset, + protocolsConfig: ProtocolsConfig = TheWakuNetworkPreset, networkingConfig: NetworkingConfig = DefaultNetworkingConfig, ethRpcEndpoints: seq[string] = @[], ): T = return T( mode: mode, - wakuConfig: wakuConfig, + protocolsConfig: protocolsConfig, networkingConfig: networkingConfig, ethRpcEndpoints: ethRpcEndpoints, ) @@ -134,20 +134,20 @@ proc toWakuConf*(nodeConfig: NodeConfig): Result[WakuConf, string] = return err("Edge mode is not implemented") ## Network Conf - let wakuConfig = nodeConfig.wakuConfig + let protocolsConfig = nodeConfig.protocolsConfig # Set cluster ID - b.withClusterId(wakuConfig.clusterId) + b.withClusterId(protocolsConfig.clusterId) # Set sharding configuration b.withShardingConf(ShardingConfKind.AutoSharding) - let autoShardingConfig = wakuConfig.autoShardingConfig + let autoShardingConfig = protocolsConfig.autoShardingConfig b.withNumShardsInCluster(autoShardingConfig.numShardsInCluster) # Process entry nodes - supports enrtree:, enr:, and multiaddress formats - if wakuConfig.entryNodes.len > 0: + if protocolsConfig.entryNodes.len > 0: let (enrTreeUrls, bootstrapEnrs, staticNodesFromEntry) = processEntryNodes( - wakuConfig.entryNodes + protocolsConfig.entryNodes ).valueOr: return err("Failed to process entry nodes: " & error) @@ -169,11 +169,11 @@ proc toWakuConf*(nodeConfig: NodeConfig): Result[WakuConf, string] = # TODO: verify behaviour # Set static store nodes - if wakuConfig.staticStoreNodes.len > 0: - b.withStaticNodes(wakuConfig.staticStoreNodes) + if protocolsConfig.staticStoreNodes.len > 0: + b.withStaticNodes(protocolsConfig.staticStoreNodes) # Set message validation - let msgValidation = wakuConfig.messageValidation + let msgValidation = protocolsConfig.messageValidation let maxSizeBytes = parseMsgSize(msgValidation.maxMessageSize).valueOr: return err("Failed to parse max message size: " & error) b.withMaxMessageSize(maxSizeBytes) From 74b3770f6cb7f3a70c4ab946a4281d464496f456 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 3 Oct 2025 14:42:46 +0200 Subject: [PATCH 4/5] Fix protocol connection close (#3588) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added connection closeWithEof for protocol handler and clients of lightpush/legacy lightpush and filter (except filer push case) * Store/Legacy store close connections note: this enhancement is fully made by Zoltán. Me I just resubmitted it after nwaku history cleanup. --------- Co-authored-by: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> --- waku/waku_filter_v2/client.nim | 3 +++ waku/waku_filter_v2/protocol.nim | 3 +++ waku/waku_lightpush/client.nim | 3 +++ waku/waku_lightpush/protocol.nim | 3 +++ waku/waku_lightpush_legacy/client.nim | 3 +++ waku/waku_lightpush_legacy/protocol.nim | 3 +++ waku/waku_store/client.nim | 3 +++ waku/waku_store/protocol.nim | 4 ++++ waku/waku_store_legacy/client.nim | 3 +++ waku/waku_store_legacy/protocol.nim | 4 ++++ 10 files changed, 32 insertions(+) diff --git a/waku/waku_filter_v2/client.nim b/waku/waku_filter_v2/client.nim index 2ad275a94..a1899764c 100644 --- a/waku/waku_filter_v2/client.nim +++ b/waku/waku_filter_v2/client.nim @@ -58,6 +58,9 @@ proc sendSubscribeRequest( let connection = connOpt.get() + defer: + await connection.closeWithEOF() + try: await connection.writeLP(filterSubscribeRequest.encode().buffer) except CatchableError: diff --git a/waku/waku_filter_v2/protocol.nim b/waku/waku_filter_v2/protocol.nim index 8b419c300..9b4fe812e 100644 --- a/waku/waku_filter_v2/protocol.nim +++ b/waku/waku_filter_v2/protocol.nim @@ -293,6 +293,9 @@ proc initProtocolHandler(wf: WakuFilter) = var response: FilterSubscribeResponse + defer: + await conn.closeWithEOF() + wf.peerRequestRateLimiter.checkUsageLimit(WakuFilterSubscribeCodec, conn): var buf: seq[byte] try: diff --git a/waku/waku_lightpush/client.nim b/waku/waku_lightpush/client.nim index 2d5ba4899..4d0c49a84 100644 --- a/waku/waku_lightpush/client.nim +++ b/waku/waku_lightpush/client.nim @@ -43,6 +43,9 @@ proc sendPushRequest( dialFailure & ": " & $peer & " is not accessible", ) + defer: + await connection.closeWithEOF() + await connection.writeLP(req.encode().buffer) var buffer: seq[byte] diff --git a/waku/waku_lightpush/protocol.nim b/waku/waku_lightpush/protocol.nim index 955b1ade5..e7e66d618 100644 --- a/waku/waku_lightpush/protocol.nim +++ b/waku/waku_lightpush/protocol.nim @@ -107,6 +107,9 @@ proc handleRequest*( proc initProtocolHandler(wl: WakuLightPush) = proc handler(conn: Connection, proto: string) {.async: (raises: [CancelledError]).} = var rpc: LightPushResponse + defer: + await conn.closeWithEOF() + wl.requestRateLimiter.checkUsageLimit(WakuLightPushCodec, conn): var buffer: seq[byte] try: diff --git a/waku/waku_lightpush_legacy/client.nim b/waku/waku_lightpush_legacy/client.nim index 503cbe1eb..ee234c996 100644 --- a/waku/waku_lightpush_legacy/client.nim +++ b/waku/waku_lightpush_legacy/client.nim @@ -40,6 +40,9 @@ proc sendPushRequest( return err(dialFailure) let connection = connOpt.get() + defer: + await connection.closeWithEOF() + let rpc = PushRPC(requestId: generateRequestId(wl.rng), request: some(req)) await connection.writeLP(rpc.encode().buffer) diff --git a/waku/waku_lightpush_legacy/protocol.nim b/waku/waku_lightpush_legacy/protocol.nim index 75bededaf..e60913f0f 100644 --- a/waku/waku_lightpush_legacy/protocol.nim +++ b/waku/waku_lightpush_legacy/protocol.nim @@ -67,6 +67,9 @@ proc handleRequest*( proc initProtocolHandler(wl: WakuLegacyLightPush) = proc handler(conn: Connection, proto: string) {.async: (raises: [CancelledError]).} = var rpc: PushRPC + defer: + await conn.closeWithEOF() + wl.requestRateLimiter.checkUsageLimit(WakuLegacyLightPushCodec, conn): var buffer: seq[byte] try: diff --git a/waku/waku_store/client.nim b/waku/waku_store/client.nim index 27e92ab86..308d7f98e 100644 --- a/waku/waku_store/client.nim +++ b/waku/waku_store/client.nim @@ -25,6 +25,9 @@ proc sendStoreRequest( ): Future[StoreQueryResult] {.async, gcsafe.} = var req = request + defer: + await connection.closeWithEof() + if req.requestId == "": req.requestId = generateRequestId(self.rng) diff --git a/waku/waku_store/protocol.nim b/waku/waku_store/protocol.nim index 5e13c9a77..5ec9d507b 100644 --- a/waku/waku_store/protocol.nim +++ b/waku/waku_store/protocol.nim @@ -92,6 +92,10 @@ proc initProtocolHandler(self: WakuStore) = var successfulQuery = false ## only consider the correct queries in metrics var resBuf: StoreResp var queryDuration: float + + defer: + await conn.closeWithEof() + self.requestRateLimiter.checkUsageLimit(WakuStoreCodec, conn): let readRes = catch: await conn.readLp(DefaultMaxRpcSize.int) diff --git a/waku/waku_store_legacy/client.nim b/waku/waku_store_legacy/client.nim index f26906e9e..7d7fbb601 100644 --- a/waku/waku_store_legacy/client.nim +++ b/waku/waku_store_legacy/client.nim @@ -43,6 +43,9 @@ proc sendHistoryQueryRPC( let connection = connOpt.get() + defer: + await connection.closeWithEof() + let requestId = if req.requestId != "": req.requestId diff --git a/waku/waku_store_legacy/protocol.nim b/waku/waku_store_legacy/protocol.nim index 79d0f03a1..9b1e328b7 100644 --- a/waku/waku_store_legacy/protocol.nim +++ b/waku/waku_store_legacy/protocol.nim @@ -114,6 +114,10 @@ proc initProtocolHandler(ws: WakuStore) = var successfulQuery = false ## only consider the correct queries in metrics var resBuf: StoreResp var queryDuration: float + + defer: + await conn.closeWithEof() + ws.requestRateLimiter.checkUsageLimit(WakuLegacyStoreCodec, conn): let readRes = catch: await conn.readLp(DefaultMaxRpcSize.int) From 682c76c71437636affff975b57b9afb8a622d210 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Sun, 5 Oct 2025 22:07:46 +0200 Subject: [PATCH 5/5] Test/waku canary (#3597) * Adding waku canary test scripts * Update README file note: The real author of this commit is Aya. I just resubmitted her PR after a deep nwaku history cleanup --------- Co-authored-by: aya --- apps/wakucanary/README.md | 16 ++++-- apps/wakucanary/scripts/run_waku_canary.sh | 50 ++++++++++++++++++ apps/wakucanary/scripts/test_protocols.sh | 46 +++++++++++++++++ apps/wakucanary/scripts/web_socket.sh | 51 +++++++++++++++++++ .../scripts/web_socket_certitficate.sh | 43 ++++++++++++++++ 5 files changed, 203 insertions(+), 3 deletions(-) create mode 100755 apps/wakucanary/scripts/run_waku_canary.sh create mode 100755 apps/wakucanary/scripts/test_protocols.sh create mode 100755 apps/wakucanary/scripts/web_socket.sh create mode 100644 apps/wakucanary/scripts/web_socket_certitficate.sh diff --git a/apps/wakucanary/README.md b/apps/wakucanary/README.md index 11408234b..30e1c2504 100644 --- a/apps/wakucanary/README.md +++ b/apps/wakucanary/README.md @@ -32,21 +32,31 @@ $ make wakucanary And used as follows. A reachable node that supports both `store` and `filter` protocols. ```console -$ ./build/wakucanary --address=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV --protocol=store --protocol=filter +$ ./build/wakucanary \ + --address=/dns4/store-01.do-ams3.status.staging.status.im/tcp/30303/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F \ + --protocol=store \ + --protocol=filter \ + --cluster-id=16 \ + --shard=64 $ echo $? 0 ``` A node that can't be reached. ```console -$ ./build/wakucanary --address=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/1000/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV --protocol=store --protocol=filter +$ ./build/wakucanary \ + --address=/dns4/store-01.do-ams3.status.staging.status.im/tcp/1000/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F \ + --protocol=store \ + --protocol=filter \ + --cluster-id=16 \ + --shard=64 $ echo $? 1 ``` Note that a domain name can also be used. ```console -$ ./build/wakucanary --address=/dns4/node-01.do-ams3.status.test.status.im/tcp/30303/p2p/16Uiu2HAkukebeXjTQ9QDBeNDWuGfbaSg79wkkhK4vPocLgR6QFDf --protocol=store --protocol=filter +--- not defined yet $ echo $? 0 ``` diff --git a/apps/wakucanary/scripts/run_waku_canary.sh b/apps/wakucanary/scripts/run_waku_canary.sh new file mode 100755 index 000000000..ad74b0192 --- /dev/null +++ b/apps/wakucanary/scripts/run_waku_canary.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +#this script build the canary app and make basic run to connect to well-known peer via TCP . +set -e + +PEER_ADDRESS="/dns4/store-01.do-ams3.status.staging.status.im/tcp/30303/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F" +PROTOCOL="relay" +LOG_DIR="logs" +CLUSTER="16" +SHARD="64" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/canary_run_$TIMESTAMP.log" + +mkdir -p "$LOG_DIR" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + +echo "Running Waku Canary against:" +echo " Peer : $PEER_ADDRESS" +echo " Protocol: $PROTOCOL" +echo "Log file : $LOG_FILE" +echo "-----------------------------------" + +{ + echo "=== Canary Run: $TIMESTAMP ===" + echo "Peer : $PEER_ADDRESS" + echo "Protocol : $PROTOCOL" + echo "LogLevel : DEBUG" + echo "-----------------------------------" + ../../../build/wakucanary \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --cluster-id="$CLUSTER"\ + --shard="$SHARD"\ + --log-level=DEBUG + echo "-----------------------------------" + echo "Exit code: $?" +} 2>&1 | tee "$LOG_FILE" + +EXIT_CODE=${PIPESTATUS[0]} + + +if [ $EXIT_CODE -eq 0 ]; then + echo "SUCCESS: Connected to peer and protocol '$PROTOCOL' is supported." +else + echo "FAILURE: Could not connect or protocol '$PROTOCOL' is unsupported." +fi + +exit $EXIT_CODE diff --git a/apps/wakucanary/scripts/test_protocols.sh b/apps/wakucanary/scripts/test_protocols.sh new file mode 100755 index 000000000..599ea729e --- /dev/null +++ b/apps/wakucanary/scripts/test_protocols.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# === Configuration === +WAKUCANARY_BINARY="../../../build/wakucanary" +PEER_ADDRESS="/dns4/store-01.do-ams3.status.staging.status.im/tcp/30303/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F" +TIMEOUT=5 +LOG_LEVEL="info" +PROTOCOLS=("store" "relay" "lightpush" "filter") + +# === Logging Setup === +LOG_DIR="logs" +mkdir -p "$LOG_DIR" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/ping_test_$TIMESTAMP.log" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + +echo "Protocol Support Test - $TIMESTAMP" | tee -a "$LOG_FILE" +echo "Peer: $PEER_ADDRESS" | tee -a "$LOG_FILE" +echo "---------------------------------------" | tee -a "$LOG_FILE" + +# === Protocol Testing Loop === +for PROTOCOL in "${PROTOCOLS[@]}"; do + TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") + LOG_FILE="$LOG_DIR/ping_test_${PROTOCOL}_$TIMESTAMP.log" + + { + echo "=== Canary Run: $TIMESTAMP ===" + echo "Peer : $PEER_ADDRESS" + echo "Protocol : $PROTOCOL" + echo "LogLevel : DEBUG" + echo "-----------------------------------" + $WAKUCANARY_BINARY \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --log-level=DEBUG + echo "-----------------------------------" + echo "Exit code: $?" + } 2>&1 | tee "$LOG_FILE" + + echo "✅ Log saved to: $LOG_FILE" + echo "" +done + +echo "All protocol checks completed. Log saved to: $LOG_FILE" diff --git a/apps/wakucanary/scripts/web_socket.sh b/apps/wakucanary/scripts/web_socket.sh new file mode 100755 index 000000000..59b609da5 --- /dev/null +++ b/apps/wakucanary/scripts/web_socket.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +#this script build the canary app and make basic run to connect to well-known peer via TCP . +set -e + +PEER_ADDRESS="/ip4/127.0.0.1/tcp/7777/ws/p2p/16Uiu2HAm4ng2DaLPniRoZtMQbLdjYYWnXjrrJkGoXWCoBWAdn1tu" +PROTOCOL="relay" +LOG_DIR="logs" +CLUSTER="16" +SHARD="64" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/canary_run_$TIMESTAMP.log" + +mkdir -p "$LOG_DIR" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + + +echo "Running Waku Canary against:" +echo " Peer : $PEER_ADDRESS" +echo " Protocol: $PROTOCOL" +echo "Log file : $LOG_FILE" +echo "-----------------------------------" + +{ + echo "=== Canary Run: $TIMESTAMP ===" + echo "Peer : $PEER_ADDRESS" + echo "Protocol : $PROTOCOL" + echo "LogLevel : DEBUG" + echo "-----------------------------------" + ../../../build/wakucanary \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --cluster-id="$CLUSTER"\ + --shard="$SHARD"\ + --log-level=DEBUG + echo "-----------------------------------" + echo "Exit code: $?" +} 2>&1 | tee "$LOG_FILE" + +EXIT_CODE=${PIPESTATUS[0]} + + +if [ $EXIT_CODE -eq 0 ]; then + echo "SUCCESS: Connected to peer and protocol '$PROTOCOL' is supported." +else + echo "FAILURE: Could not connect or protocol '$PROTOCOL' is unsupported." +fi + +exit $EXIT_CODE diff --git a/apps/wakucanary/scripts/web_socket_certitficate.sh b/apps/wakucanary/scripts/web_socket_certitficate.sh new file mode 100644 index 000000000..4a26cfd09 --- /dev/null +++ b/apps/wakucanary/scripts/web_socket_certitficate.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +WAKUCANARY_BINARY="../../../build/wakucanary" +NODE_PORT=60000 +WSS_PORT=$((NODE_PORT + 1000)) +PEER_ID="16Uiu2HAmB6JQpewXScGoQ2syqmimbe4GviLxRwfsR8dCpwaGBPSE" +PROTOCOL="relay" +KEY_PATH="./certs/client.key" +CERT_PATH="./certs/client.crt" +LOG_DIR="logs" +mkdir -p "$LOG_DIR" + +PEER_ADDRESS="/ip4/127.0.0.1/tcp/$WSS_PORT/wss/p2p/$PEER_ID" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/wss_cert_test_$TIMESTAMP.log" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + +{ + echo "=== Canary WSS + Cert Test ===" + echo "Timestamp : $TIMESTAMP" + echo "Node Port : $NODE_PORT" + echo "WSS Port : $WSS_PORT" + echo "Peer ID : $PEER_ID" + echo "Protocol : $PROTOCOL" + echo "Key Path : $KEY_PATH" + echo "Cert Path : $CERT_PATH" + echo "Address : $PEER_ADDRESS" + echo "------------------------------------------" + + $WAKUCANARY_BINARY \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --log-level=DEBUG \ + --websocket-secure-key-path="$KEY_PATH" \ + --websocket-secure-cert-path="$CERT_PATH" + + echo "------------------------------------------" + echo "Exit code: $?" +} 2>&1 | tee "$LOG_FILE" + +echo "✅ Log saved to: $LOG_FILE"