From adc9906d9e5f9d6ce41b3efe0d3dd9cf41268138 Mon Sep 17 00:00:00 2001 From: tuyennhv Date: Fri, 3 Jun 2022 22:05:12 +0700 Subject: [PATCH] Use async version of crypto.randomBytes() (#4075) * Use async version of crypto.randomBytes() * Use promisify node util * Compute randomBytesAsync once Co-authored-by: dapplion <35266934+dapplion@users.noreply.github.com> --- packages/lodestar/src/network/peers/discover.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/lodestar/src/network/peers/discover.ts b/packages/lodestar/src/network/peers/discover.ts index 8a1f9dfc4f1d..02d08d5f39ac 100644 --- a/packages/lodestar/src/network/peers/discover.ts +++ b/packages/lodestar/src/network/peers/discover.ts @@ -1,4 +1,5 @@ import crypto from "node:crypto"; +import {promisify} from "node:util"; import LibP2p from "libp2p"; import PeerId from "peer-id"; import {Multiaddr} from "multiaddr"; @@ -18,6 +19,8 @@ const MAX_CACHED_ENRS = 100; /** Max age a cached ENR will be considered for dial */ const MAX_CACHED_ENR_AGE_MS = 5 * 60 * 1000; +const randomBytesAsync = promisify(crypto.randomBytes); + export type PeerDiscoveryOpts = { maxPeers: number; discv5FirstQueryDelayMs: number; @@ -226,13 +229,14 @@ export class PeerDiscovery { this.metrics?.discovery.findNodeQueryRequests.inc({action: "start"}); } - const randomNodeId = crypto.randomBytes(64).toString("hex"); - + // Use async version to prevent blocking the event loop + // Time to completion of this function is not critical, in case this async call add extra lag + const randomNodeId = await randomBytesAsync(64); this.randomNodeQuery = {code: QueryStatusCode.Active, count: 0}; const timer = this.metrics?.discovery.findNodeQueryTime.startTimer(); try { - const enrs = await this.discv5.findNode(randomNodeId); + const enrs = await this.discv5.findNode(randomNodeId.toString("hex")); this.metrics?.discovery.findNodeQueryEnrCount.inc(enrs.length); } catch (e) { this.logger.error("Error on discv5.findNode()", {}, e as Error);