@@ -3,7 +3,15 @@ import debug from "debug";
33import { randomBytes } from "@noble/hashes/utils" ;
44import { Multiaddr } from "@multiformats/multiaddr" ;
55import { PeerId , PrivateKey } from "@libp2p/interface" ;
6- import { createPeerIdFromPublicKey , ENR , NodeId , MAX_RECORD_SIZE , createNodeId , SignableENR } from "@chainsafe/enr" ;
6+ import {
7+ createPeerIdFromPublicKey ,
8+ ENR ,
9+ NodeId ,
10+ MAX_RECORD_SIZE ,
11+ createNodeId ,
12+ SignableENR ,
13+ bytesToBigint ,
14+ } from "@chainsafe/enr" ;
715
816import { BindAddrs , IPMode , ITransportService , UDPTransportService } from "../transport/index.js" ;
917import { MAX_PACKET_SIZE } from "../packet/index.js" ;
@@ -496,7 +504,7 @@ export class Discv5 extends (EventEmitter as { new (): Discv5EventEmitter }) {
496504 */
497505 private sendRpcRequest < T extends RequestMessage , U extends ResponseType > ( activeRequest : IActiveRequest < T , U > ) : void {
498506 this . activeRequests . set (
499- activeRequest . request . id ,
507+ bytesToBigint ( activeRequest . request . id ) ,
500508 activeRequest as unknown as IActiveRequest < RequestMessage , ResponseType >
501509 ) ;
502510
@@ -506,7 +514,7 @@ export class Discv5 extends (EventEmitter as { new (): Discv5EventEmitter }) {
506514 this . sessionService . sendRequest ( activeRequest . contact , activeRequest . request ) ;
507515 this . metrics ?. sentMessageCount . inc ( { type : MessageType [ activeRequest . request . type ] } ) ;
508516 } catch ( e ) {
509- this . activeRequests . delete ( activeRequest . request . id ) ;
517+ this . activeRequests . delete ( bytesToBigint ( activeRequest . request . id ) ) ;
510518 log ( "Error sending RPC to node: %o, :Error: %s" , nodeAddr , ( e as Error ) . message ) ;
511519 }
512520 }
@@ -843,12 +851,12 @@ export class Discv5 extends (EventEmitter as { new (): Discv5EventEmitter }) {
843851
844852 // verify we know of the rpc id
845853
846- const activeRequest = this . activeRequests . get ( response . id ) ;
854+ const activeRequest = this . activeRequests . get ( bytesToBigint ( response . id ) ) ;
847855 if ( ! activeRequest ) {
848856 log ( "Received an RPC response which doesn't match a request. Id: &s" , response . id ) ;
849857 return ;
850858 }
851- this . activeRequests . delete ( response . id ) ;
859+ this . activeRequests . delete ( bytesToBigint ( response . id ) ) ;
852860
853861 // Check that the responder matches the expected request
854862 const requestNodeAddr = getNodeAddress ( activeRequest . contact ) ;
@@ -962,15 +970,15 @@ export class Discv5 extends (EventEmitter as { new (): Discv5EventEmitter }) {
962970
963971 // handle the case that there is more than one response
964972 if ( message . total > 1 ) {
965- const currentResponse = this . activeNodesResponses . get ( message . id ) || { count : 1 , enrs : [ ] } ;
966- this . activeNodesResponses . delete ( message . id ) ;
973+ const currentResponse = this . activeNodesResponses . get ( bytesToBigint ( message . id ) ) || { count : 1 , enrs : [ ] } ;
974+ this . activeNodesResponses . delete ( bytesToBigint ( message . id ) ) ;
967975 log ( "NODES response: %d of %d received, length: %d" , currentResponse . count , message . total , message . enrs . length ) ;
968976 // If there are more requests coming, store the nodes and wait for another response
969977 if ( currentResponse . count < 5 && currentResponse . count < message . total ) {
970978 currentResponse . count += 1 ;
971979 currentResponse . enrs . push ( ...message . enrs ) ;
972- this . activeRequests . set ( message . id , activeRequest as IActiveRequest < RequestMessage > ) ;
973- this . activeNodesResponses . set ( message . id , currentResponse ) ;
980+ this . activeRequests . set ( bytesToBigint ( message . id ) , activeRequest as IActiveRequest < RequestMessage > ) ;
981+ this . activeNodesResponses . set ( bytesToBigint ( message . id ) , currentResponse ) ;
974982 return false ;
975983 }
976984
@@ -984,7 +992,7 @@ export class Discv5 extends (EventEmitter as { new (): Discv5EventEmitter }) {
984992 nodeAddr
985993 ) ;
986994
987- this . activeNodesResponses . delete ( message . id ) ;
995+ this . activeNodesResponses . delete ( bytesToBigint ( message . id ) ) ;
988996
989997 this . discovered ( nodeAddr . nodeId , message . enrs , lookupId ) ;
990998
@@ -1003,22 +1011,22 @@ export class Discv5 extends (EventEmitter as { new (): Discv5EventEmitter }) {
10031011 /**
10041012 * A session could not be established or an RPC request timed out
10051013 */
1006- private rpcFailure = ( rpcId : bigint , error : RequestErrorType ) : void => {
1014+ private rpcFailure = ( rpcId : RequestId , error : RequestErrorType ) : void => {
10071015 log ( "RPC error, removing request. Reason: %s, id %s" , RequestErrorType [ error ] , rpcId ) ;
1008- const req = this . activeRequests . get ( rpcId ) ;
1016+ const req = this . activeRequests . get ( bytesToBigint ( rpcId ) ) ;
10091017 if ( ! req ) {
10101018 return ;
10111019 }
10121020 const { request, contact, lookupId, callbackPromise } = req ;
1013- this . activeRequests . delete ( request . id ) ;
1021+ this . activeRequests . delete ( bytesToBigint ( request . id ) ) ;
10141022
10151023 const nodeId = getNodeId ( contact ) ;
10161024 // If a failed FindNodes Request, ensure we haven't partially received responses.
10171025 // If so, process the partially found nodes
10181026 if ( request . type === MessageType . FINDNODE ) {
1019- const nodesResponse = this . activeNodesResponses . get ( request . id ) ;
1027+ const nodesResponse = this . activeNodesResponses . get ( bytesToBigint ( request . id ) ) ;
10201028 if ( nodesResponse ) {
1021- this . activeNodesResponses . delete ( request . id ) ;
1029+ this . activeNodesResponses . delete ( bytesToBigint ( request . id ) ) ;
10221030
10231031 if ( nodesResponse . enrs . length ) {
10241032 log ( "NODES response failed, but was partially processed from Node: %s" , nodeId ) ;
0 commit comments