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 }