From dd40c30a34c2e9fb204748c4b71fd66d104c674c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 14:23:06 +0000 Subject: [PATCH 1/2] Initial plan From ead15391b9f1734c6168c68cd80d11aa8afd6549 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 14:25:52 +0000 Subject: [PATCH 2/2] Add libsodium initialization and increase WebSocket handshake timeout - Add await sodium.ready in libp2pTransport.start() to ensure libsodium is initialized before starting libp2p - Increase WEBSOCKET_HANDSHAKE_TIMEOUT from 2500ms to 10000ms to tolerate slower handshakes Co-authored-by: victorhahncastell <3177019+victorhahncastell@users.noreply.github.com> --- src/core/networking/transport/libp2p/libp2pTransport.ts | 9 +++++++++ .../transport/webSocket/webSocketConnection.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/core/networking/transport/libp2p/libp2pTransport.ts b/src/core/networking/transport/libp2p/libp2pTransport.ts index a49956a5d..96d250306 100644 --- a/src/core/networking/transport/libp2p/libp2pTransport.ts +++ b/src/core/networking/transport/libp2p/libp2pTransport.ts @@ -8,6 +8,7 @@ import { Libp2pServer } from "./libp2pServer"; import { NetworkTransport } from "../networkTransport"; import { AddressAbstraction } from "../../../peering/addressing"; import { logger } from "../../../logger"; +import sodium from 'libsodium-wrappers-sumo'; import { noise } from "@chainsafe/libp2p-noise"; import { yamux } from "@chainsafe/libp2p-yamux"; @@ -84,6 +85,14 @@ export class Libp2pTransport extends NetworkTransport { } async start(): Promise { + // Ensure libsodium is initialized before starting libp2p to prevent + // race conditions in crypto handshakes + try { + await sodium.ready; + } catch (error) { + logger.warn(`libp2pTransport: Failed to initialize libsodium: ${error}, continuing anyway`); + } + // Pre-create libp2p components: let transports = []; // Single WebSockets transport; enable HTTPS if any /wss listener is configured diff --git a/src/core/networking/transport/webSocket/webSocketConnection.ts b/src/core/networking/transport/webSocket/webSocketConnection.ts index e6e7672f3..1b3f1b009 100644 --- a/src/core/networking/transport/webSocket/webSocketConnection.ts +++ b/src/core/networking/transport/webSocket/webSocketConnection.ts @@ -8,7 +8,7 @@ import WebSocket from 'isomorphic-ws'; import { Buffer } from 'buffer'; export class WebSocketConnection extends TransportConnection { - private static WEBSOCKET_HANDSHAKE_TIMEOUT = 2500; + private static WEBSOCKET_HANDSHAKE_TIMEOUT = 10000; private _ws: WebSocket; // The WebSocket connection associated with this peer get ws(): WebSocket { return this._ws }