@@ -50,6 +50,7 @@ import type {
50
50
PongMessage ,
51
51
PortalNetwork ,
52
52
} from '../index.js'
53
+ import type { INodeAddress } from '@chainsafe/discv5/lib/session/nodeInfo.js'
53
54
54
55
export abstract class BaseNetwork extends EventEmitter {
55
56
public routingTable : PortalNetworkRoutingTable
@@ -120,11 +121,11 @@ export abstract class BaseNetwork extends EventEmitter {
120
121
return this . portal . sendPortalNetworkMessage ( enr , payload , networkId , utpMessage )
121
122
}
122
123
123
- sendResponse ( src : ENR , requestId : bigint , payload : Uint8Array ) : Promise < void > {
124
+ sendResponse ( src : INodeAddress , requestId : bigint , payload : Uint8Array ) : Promise < void > {
124
125
return this . portal . sendPortalNetworkResponse ( src , requestId , payload )
125
126
}
126
127
findEnr ( nodeId : string ) : ENR | undefined {
127
- return this . portal . discv5 . findEnr ( nodeId )
128
+ return this . portal . discv5 . findEnr ( nodeId ) ?? this . routingTable . getWithPending ( nodeId ) ?. value
128
129
}
129
130
130
131
public async put ( contentKey : Uint8Array , content : string ) {
@@ -179,7 +180,7 @@ export abstract class BaseNetwork extends EventEmitter {
179
180
180
181
abstract store ( contentKey : Uint8Array , value : Uint8Array ) : Promise < void >
181
182
182
- public async handle ( message : ITalkReqMessage , src : ENR ) {
183
+ public async handle ( message : ITalkReqMessage , src : INodeAddress ) {
183
184
const id = message . id
184
185
const network = message . protocol
185
186
const request = message . request
@@ -268,7 +269,7 @@ export abstract class BaseNetwork extends EventEmitter {
268
269
}
269
270
}
270
271
271
- handlePing = async ( src : ENR , id : bigint , pingMessage : PingMessage ) => {
272
+ handlePing = async ( src : INodeAddress , id : bigint , pingMessage : PingMessage ) => {
272
273
if ( ! this . routingTable . getWithPending ( src . nodeId ) ?. value ) {
273
274
// Check to see if node is already in corresponding network routing table and add if not
274
275
const enr = this . findEnr ( src . nodeId )
@@ -282,7 +283,7 @@ export abstract class BaseNetwork extends EventEmitter {
282
283
await this . sendPong ( src , id )
283
284
}
284
285
285
- sendPong = async ( src : ENR , requestId : bigint ) => {
286
+ sendPong = async ( src : INodeAddress , requestId : bigint ) => {
286
287
const payload = {
287
288
enrSeq : this . enr . seq ,
288
289
customPayload : PingPongCustomDataType . serialize ( { radius : this . nodeRadius } ) ,
@@ -326,7 +327,7 @@ export abstract class BaseNetwork extends EventEmitter {
326
327
} ) ,
327
328
)
328
329
329
- this . logger . extend ( `NODES` ) ( `Received ${ enrs . length } ENRs from ${ shortId ( enr ) } ` )
330
+ this . logger . extend ( `NODES` ) ( `Received ${ enrs . length } ENRs from ${ shortId ( enr . nodeId ) } ` )
330
331
}
331
332
} catch ( err : any ) {
332
333
this . logger ( `Error processing NODES message: ${ err . toString ( ) } ` )
@@ -337,7 +338,7 @@ export abstract class BaseNetwork extends EventEmitter {
337
338
}
338
339
339
340
private handleFindNodes = async (
340
- src : ENR ,
341
+ src : INodeAddress ,
341
342
requestId : bigint ,
342
343
payload : FindNodesMessage ,
343
344
) => {
@@ -409,10 +410,10 @@ export abstract class BaseNetwork extends EventEmitter {
409
410
value : offerMsg ,
410
411
} )
411
412
this . logger . extend ( `OFFER` ) (
412
- `Sent to ${ shortId ( enr ) } with ${ contentKeys . length } pieces of content` ,
413
+ `Sent to ${ shortId ( enr . nodeId ) } with ${ contentKeys . length } pieces of content` ,
413
414
)
414
415
const res = await this . sendMessage ( enr , payload , this . networkId )
415
- this . logger . extend ( `OFFER` ) ( `Response from ${ shortId ( enr ) } ` )
416
+ this . logger . extend ( `OFFER` ) ( `Response from ${ shortId ( enr . nodeId ) } ` )
416
417
if ( res . length > 0 ) {
417
418
try {
418
419
const decoded = PortalWireMessageType . deserialize ( res )
@@ -426,7 +427,7 @@ export abstract class BaseNetwork extends EventEmitter {
426
427
)
427
428
if ( requestedKeys . length === 0 ) {
428
429
// Don't start uTP stream if no content ACCEPTed
429
- this . logger . extend ( 'ACCEPT' ) ( `No content ACCEPTed by ${ shortId ( enr ) } ` )
430
+ this . logger . extend ( 'ACCEPT' ) ( `No content ACCEPTed by ${ shortId ( enr . nodeId ) } ` )
430
431
return [ ]
431
432
}
432
433
this . logger . extend ( `OFFER` ) ( `ACCEPT message received with uTP id: ${ id } ` )
@@ -463,13 +464,13 @@ export abstract class BaseNetwork extends EventEmitter {
463
464
return msg . contentKeys
464
465
}
465
466
} catch ( err : any ) {
466
- this . logger ( `Error sending to ${ shortId ( enr ) } - ${ err . message } ` )
467
+ this . logger ( `Error sending to ${ shortId ( enr . nodeId ) } - ${ err . message } ` )
467
468
}
468
469
}
469
470
}
470
471
}
471
472
472
- protected handleOffer = async ( src : ENR , requestId : bigint , msg : OfferMessage ) => {
473
+ protected handleOffer = async ( src : INodeAddress , requestId : bigint , msg : OfferMessage ) => {
473
474
this . logger . extend ( 'OFFER' ) (
474
475
`Received from ${ shortId ( src . nodeId , this . routingTable ) } with ${
475
476
msg . contentKeys . length
@@ -535,7 +536,7 @@ export abstract class BaseNetwork extends EventEmitter {
535
536
}
536
537
537
538
protected sendAccept = async (
538
- src : ENR ,
539
+ src : INodeAddress ,
539
540
requestId : bigint ,
540
541
desiredContentAccepts : boolean [ ] ,
541
542
desiredContentKeys : Uint8Array [ ] ,
@@ -557,12 +558,15 @@ export abstract class BaseNetwork extends EventEmitter {
557
558
this . logger . extend ( 'ACCEPT' ) (
558
559
`Accepting: ${ desiredContentKeys . length } pieces of content. connectionId: ${ id } ` ,
559
560
)
560
-
561
+ const enr = this . findEnr ( src . nodeId )
562
+ if ( ! enr ) {
563
+ throw new Error ( 'ENR not found' )
564
+ }
561
565
this . portal . metrics ?. acceptMessagesSent . inc ( )
562
566
await this . handleNewRequest ( {
563
567
networkId : this . networkId ,
564
568
contentKeys : desiredContentKeys ,
565
- enr : src ,
569
+ enr,
566
570
connectionId : id ,
567
571
requestCode : RequestCode . ACCEPT_READ ,
568
572
} )
@@ -586,7 +590,7 @@ export abstract class BaseNetwork extends EventEmitter {
586
590
}
587
591
588
592
protected handleFindContent = async (
589
- src : ENR ,
593
+ src : INodeAddress ,
590
594
requestId : bigint ,
591
595
network : Uint8Array ,
592
596
decodedContentMessage : FindContentMessage ,
@@ -626,10 +630,15 @@ export abstract class BaseNetwork extends EventEmitter {
626
630
'Found value for requested content. Larger than 1 packet. uTP stream needed.' ,
627
631
)
628
632
const _id = randUint16 ( )
633
+ const enr = this . findEnr ( src . nodeId )
634
+ if ( ! enr ) {
635
+ throw new Error ( 'ENR not found' )
636
+ }
637
+
629
638
await this . handleNewRequest ( {
630
639
networkId : this . networkId ,
631
640
contentKeys : [ decodedContentMessage . contentKey ] ,
632
- enr : src ,
641
+ enr,
633
642
connectionId : _id ,
634
643
requestCode : RequestCode . FOUNDCONTENT_WRITE ,
635
644
contents : value ,
@@ -647,7 +656,7 @@ export abstract class BaseNetwork extends EventEmitter {
647
656
}
648
657
}
649
658
650
- protected enrResponse = async ( contentKey : Uint8Array , src : ENR , requestId : bigint ) => {
659
+ protected enrResponse = async ( contentKey : Uint8Array , src : INodeAddress , requestId : bigint ) => {
651
660
const lookupKey = this . contentKeyToId ( contentKey )
652
661
// Discv5 calls for maximum of 16 nodes per NODES message
653
662
const ENRs = this . routingTable . nearest ( lookupKey , 16 )
0 commit comments