Skip to content

Commit fda7f40

Browse files
committed
networks: update network TalkReq handlers to use NodeAddress
1 parent d7ad1bd commit fda7f40

File tree

4 files changed

+51
-37
lines changed

4 files changed

+51
-37
lines changed

packages/portalnetwork/src/networks/beacon/beacon.ts

+18-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ENR, NodeId } from '@chainsafe/enr';
1+
import type { ENR, NodeId } from '@chainsafe/enr';
22
import { ProofType } from '@chainsafe/persistent-merkle-tree'
33
import {
44
bytesToHex,
@@ -51,6 +51,7 @@ import type { Debugger } from 'debug'
5151
import type { AcceptMessage, FindContentMessage, OfferMessage } from '../../wire/types.js'
5252
import type { ContentLookupResponse } from '../types.js'
5353
import type { BeaconChainNetworkConfig, HistoricalSummaries, LightClientForkName } from './types.js'
54+
import type { INodeAddress } from '@chainsafe/discv5/lib/session/nodeInfo.js';
5455

5556
export class BeaconLightClientNetwork extends BaseNetwork {
5657
networkId: NetworkId.BeaconChainNetwork
@@ -450,7 +451,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
450451
let response: ContentLookupResponse
451452
if (bytesToInt(res.subarray(0, 1)) === MessageCodes.CONTENT) {
452453
this.portal.metrics?.contentMessagesReceived.inc()
453-
this.logger.extend('FOUNDCONTENT')(`Received from ${shortId(enr)}`)
454+
this.logger.extend('FOUNDCONTENT')(`Received from ${shortId(enr.nodeId)}`)
454455
const decoded = ContentMessageType.deserialize(res.subarray(1))
455456
switch (decoded.selector) {
456457
case FoundContent.UTP: {
@@ -488,7 +489,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
488489
(decoded.value as Uint8Array).slice(4),
489490
)
490491
} catch (err) {
491-
this.logger(`received invalid content from ${shortId(enr)}`)
492+
this.logger(`received invalid content from ${shortId(enr.nodeId)}`)
492493
break
493494
}
494495
this.logger(
@@ -502,7 +503,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
502503
(decoded.value as Uint8Array).slice(4),
503504
)
504505
} catch (err) {
505-
this.logger(`received invalid content from ${shortId(enr)}`)
506+
this.logger(`received invalid content from ${shortId(enr.nodeId)}`)
506507
break
507508
}
508509
this.logger(
@@ -516,7 +517,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
516517
(decoded.value as Uint8Array).slice(4),
517518
)
518519
} catch (err) {
519-
this.logger(`received invalid content from ${shortId(enr)}`)
520+
this.logger(`received invalid content from ${shortId(enr.nodeId)}`)
520521
break
521522
}
522523
this.logger(
@@ -528,7 +529,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
528529
try {
529530
LightClientUpdatesByRange.deserialize((decoded.value as Uint8Array).slice(4))
530531
} catch (err) {
531-
this.logger(`received invalid content from ${shortId(enr)}`)
532+
this.logger(`received invalid content from ${shortId(enr.nodeId)}`)
532533
break
533534
}
534535
this.logger(
@@ -555,12 +556,12 @@ export class BeaconLightClientNetwork extends BaseNetwork {
555556
}
556557
// TODO Should we do anything other than ignore responses to FINDCONTENT messages that isn't a CONTENT response?
557558
} catch (err: any) {
558-
this.logger(`Error sending FINDCONTENT to ${shortId(enr)} - ${err.message}`)
559+
this.logger(`Error sending FINDCONTENT to ${shortId(enr.nodeId)} - ${err.message}`)
559560
}
560561
}
561562

562563
protected override handleFindContent = async (
563-
src: ENR,
564+
src: INodeAddress,
564565
requestId: bigint,
565566
network: Uint8Array,
566567
decodedContentMessage: FindContentMessage,
@@ -598,10 +599,14 @@ export class BeaconLightClientNetwork extends BaseNetwork {
598599
'Found value for requested content. Larger than 1 packet. uTP stream needed.',
599600
)
600601
const _id = randUint16()
602+
const enr = this.findEnr(src.nodeId)
603+
if (!enr) {
604+
throw new Error('ENR not found')
605+
}
601606
await this.handleNewRequest({
602607
networkId: this.networkId,
603608
contentKeys: [decodedContentMessage.contentKey],
604-
enr: src,
609+
enr,
605610
connectionId: _id,
606611
requestCode: RequestCode.FOUNDCONTENT_WRITE,
607612
contents: value,
@@ -797,7 +802,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
797802
value: offerMsg,
798803
})
799804
this.logger.extend(`OFFER`)(
800-
`Sent to ${shortId(enr)} with ${contentKeys.length} pieces of content`,
805+
`Sent to ${shortId(enr.nodeId)} with ${contentKeys.length} pieces of content`,
801806
)
802807
const res = await this.sendMessage(enr, payload, this.networkId)
803808
if (res.length > 0) {
@@ -813,7 +818,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
813818
)
814819
if (requestedKeys.length === 0) {
815820
// Don't start uTP stream if no content ACCEPTed
816-
this.logger.extend('ACCEPT')(`No content ACCEPTed by ${shortId(enr)}`)
821+
this.logger.extend('ACCEPT')(`No content ACCEPTed by ${shortId(enr.nodeId)}`)
817822
return []
818823
}
819824
this.logger.extend(`ACCEPT`)(`ACCEPT message received with uTP id: ${id}`)
@@ -853,7 +858,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
853858
return msg.contentKeys
854859
}
855860
} catch (err: any) {
856-
this.logger(`Error sending to ${shortId(enr)} - ${err.message}`)
861+
this.logger(`Error sending to ${shortId(enr.nodeId)} - ${err.message}`)
857862
}
858863
}
859864
}
@@ -866,7 +871,7 @@ export class BeaconLightClientNetwork extends BaseNetwork {
866871
* @param requestId request ID passed in OFFER message
867872
* @param msg OFFER message containing a list of offered content keys
868873
*/
869-
override handleOffer = async (src: ENR, requestId: bigint, msg: OfferMessage) => {
874+
override handleOffer = async (src: INodeAddress, requestId: bigint, msg: OfferMessage) => {
870875
this.logger.extend('OFFER')(
871876
`Received from ${shortId(src.nodeId, this.routingTable)} with ${
872877
msg.contentKeys.length

packages/portalnetwork/src/networks/history/history.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -202,13 +202,13 @@ export class HistoryNetwork extends BaseNetwork {
202202
selector: MessageCodes.FINDCONTENT,
203203
value: findContentMsg,
204204
})
205-
this.logger.extend('FINDCONTENT')(`Sending to ${shortId(enr)}`)
205+
this.logger.extend('FINDCONTENT')(`Sending to ${shortId(enr.nodeId)}`)
206206
const res = await this.sendMessage(enr, payload, this.networkId)
207207

208208
try {
209209
if (bytesToInt(res.slice(0, 1)) === MessageCodes.CONTENT) {
210210
this.portal.metrics?.contentMessagesReceived.inc()
211-
this.logger.extend('FOUNDCONTENT')(`Received from ${shortId(enr)}`)
211+
this.logger.extend('FOUNDCONTENT')(`Received from ${shortId(enr.nodeId)}`)
212212
const decoded = ContentMessageType.deserialize(res.subarray(1))
213213
const contentKey = decodeHistoryNetworkContentKey(key)
214214
const contentType = contentKey.contentType
@@ -256,7 +256,7 @@ export class HistoryNetwork extends BaseNetwork {
256256
return response
257257
}
258258
} catch (err: any) {
259-
this.logger(`Error sending FINDCONTENT to ${shortId(enr)} - ${err.message}`)
259+
this.logger(`Error sending FINDCONTENT to ${shortId(enr.nodeId)} - ${err.message}`)
260260
}
261261
}
262262

packages/portalnetwork/src/networks/network.ts

+27-18
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import type {
5050
PongMessage,
5151
PortalNetwork,
5252
} from '../index.js'
53+
import type { INodeAddress } from '@chainsafe/discv5/lib/session/nodeInfo.js'
5354

5455
export abstract class BaseNetwork extends EventEmitter {
5556
public routingTable: PortalNetworkRoutingTable
@@ -120,11 +121,11 @@ export abstract class BaseNetwork extends EventEmitter {
120121
return this.portal.sendPortalNetworkMessage(enr, payload, networkId, utpMessage)
121122
}
122123

123-
sendResponse(src: ENR, requestId: bigint, payload: Uint8Array): Promise<void> {
124+
sendResponse(src: INodeAddress, requestId: bigint, payload: Uint8Array): Promise<void> {
124125
return this.portal.sendPortalNetworkResponse(src, requestId, payload)
125126
}
126127
findEnr(nodeId: string): ENR | undefined {
127-
return this.portal.discv5.findEnr(nodeId)
128+
return this.portal.discv5.findEnr(nodeId) ?? this.routingTable.getWithPending(nodeId)?.value
128129
}
129130

130131
public async put(contentKey: Uint8Array, content: string) {
@@ -179,7 +180,7 @@ export abstract class BaseNetwork extends EventEmitter {
179180

180181
abstract store(contentKey: Uint8Array, value: Uint8Array): Promise<void>
181182

182-
public async handle(message: ITalkReqMessage, src: ENR) {
183+
public async handle(message: ITalkReqMessage, src: INodeAddress) {
183184
const id = message.id
184185
const network = message.protocol
185186
const request = message.request
@@ -268,7 +269,7 @@ export abstract class BaseNetwork extends EventEmitter {
268269
}
269270
}
270271

271-
handlePing = async (src: ENR, id: bigint, pingMessage: PingMessage) => {
272+
handlePing = async (src: INodeAddress, id: bigint, pingMessage: PingMessage) => {
272273
if (!this.routingTable.getWithPending(src.nodeId)?.value) {
273274
// Check to see if node is already in corresponding network routing table and add if not
274275
const enr = this.findEnr(src.nodeId)
@@ -282,7 +283,7 @@ export abstract class BaseNetwork extends EventEmitter {
282283
await this.sendPong(src, id)
283284
}
284285

285-
sendPong = async (src: ENR, requestId: bigint) => {
286+
sendPong = async (src: INodeAddress, requestId: bigint) => {
286287
const payload = {
287288
enrSeq: this.enr.seq,
288289
customPayload: PingPongCustomDataType.serialize({ radius: this.nodeRadius }),
@@ -326,7 +327,7 @@ export abstract class BaseNetwork extends EventEmitter {
326327
}),
327328
)
328329

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)}`)
330331
}
331332
} catch (err: any) {
332333
this.logger(`Error processing NODES message: ${err.toString()}`)
@@ -337,7 +338,7 @@ export abstract class BaseNetwork extends EventEmitter {
337338
}
338339

339340
private handleFindNodes = async (
340-
src: ENR,
341+
src: INodeAddress,
341342
requestId: bigint,
342343
payload: FindNodesMessage,
343344
) => {
@@ -409,10 +410,10 @@ export abstract class BaseNetwork extends EventEmitter {
409410
value: offerMsg,
410411
})
411412
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`,
413414
)
414415
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)}`)
416417
if (res.length > 0) {
417418
try {
418419
const decoded = PortalWireMessageType.deserialize(res)
@@ -426,7 +427,7 @@ export abstract class BaseNetwork extends EventEmitter {
426427
)
427428
if (requestedKeys.length === 0) {
428429
// 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)}`)
430431
return []
431432
}
432433
this.logger.extend(`OFFER`)(`ACCEPT message received with uTP id: ${id}`)
@@ -463,13 +464,13 @@ export abstract class BaseNetwork extends EventEmitter {
463464
return msg.contentKeys
464465
}
465466
} catch (err: any) {
466-
this.logger(`Error sending to ${shortId(enr)} - ${err.message}`)
467+
this.logger(`Error sending to ${shortId(enr.nodeId)} - ${err.message}`)
467468
}
468469
}
469470
}
470471
}
471472

472-
protected handleOffer = async (src: ENR, requestId: bigint, msg: OfferMessage) => {
473+
protected handleOffer = async (src: INodeAddress, requestId: bigint, msg: OfferMessage) => {
473474
this.logger.extend('OFFER')(
474475
`Received from ${shortId(src.nodeId, this.routingTable)} with ${
475476
msg.contentKeys.length
@@ -535,7 +536,7 @@ export abstract class BaseNetwork extends EventEmitter {
535536
}
536537

537538
protected sendAccept = async (
538-
src: ENR,
539+
src: INodeAddress,
539540
requestId: bigint,
540541
desiredContentAccepts: boolean[],
541542
desiredContentKeys: Uint8Array[],
@@ -557,12 +558,15 @@ export abstract class BaseNetwork extends EventEmitter {
557558
this.logger.extend('ACCEPT')(
558559
`Accepting: ${desiredContentKeys.length} pieces of content. connectionId: ${id}`,
559560
)
560-
561+
const enr = this.findEnr(src.nodeId)
562+
if (!enr) {
563+
throw new Error('ENR not found')
564+
}
561565
this.portal.metrics?.acceptMessagesSent.inc()
562566
await this.handleNewRequest({
563567
networkId: this.networkId,
564568
contentKeys: desiredContentKeys,
565-
enr: src,
569+
enr,
566570
connectionId: id,
567571
requestCode: RequestCode.ACCEPT_READ,
568572
})
@@ -586,7 +590,7 @@ export abstract class BaseNetwork extends EventEmitter {
586590
}
587591

588592
protected handleFindContent = async (
589-
src: ENR,
593+
src: INodeAddress,
590594
requestId: bigint,
591595
network: Uint8Array,
592596
decodedContentMessage: FindContentMessage,
@@ -626,10 +630,15 @@ export abstract class BaseNetwork extends EventEmitter {
626630
'Found value for requested content. Larger than 1 packet. uTP stream needed.',
627631
)
628632
const _id = randUint16()
633+
const enr = this.findEnr(src.nodeId)
634+
if (!enr) {
635+
throw new Error('ENR not found')
636+
}
637+
629638
await this.handleNewRequest({
630639
networkId: this.networkId,
631640
contentKeys: [decodedContentMessage.contentKey],
632-
enr: src,
641+
enr,
633642
connectionId: _id,
634643
requestCode: RequestCode.FOUNDCONTENT_WRITE,
635644
contents: value,
@@ -647,7 +656,7 @@ export abstract class BaseNetwork extends EventEmitter {
647656
}
648657
}
649658

650-
protected enrResponse = async (contentKey: Uint8Array, src: ENR, requestId: bigint) => {
659+
protected enrResponse = async (contentKey: Uint8Array, src: INodeAddress, requestId: bigint) => {
651660
const lookupKey = this.contentKeyToId(contentKey)
652661
// Discv5 calls for maximum of 16 nodes per NODES message
653662
const ENRs = this.routingTable.nearest(lookupKey, 16)

packages/portalnetwork/src/networks/state/state.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export class StateNetwork extends BaseNetwork {
7777
selector: MessageCodes.FINDCONTENT,
7878
value: findContentMsg,
7979
})
80-
this.logger.extend('FINDCONTENT')(`Sending to ${shortId(enr)}`)
80+
this.logger.extend('FINDCONTENT')(`Sending to ${shortId(enr.nodeId)}`)
8181
const res = await this.sendMessage(enr, payload, this.networkId)
8282
if (res.length === 0) {
8383
return undefined
@@ -86,7 +86,7 @@ export class StateNetwork extends BaseNetwork {
8686
try {
8787
if (bytesToInt(res.slice(0, 1)) === MessageCodes.CONTENT) {
8888
this.portal.metrics?.contentMessagesReceived.inc()
89-
this.logger.extend('FOUNDCONTENT')(`Received from ${shortId(enr)}`)
89+
this.logger.extend('FOUNDCONTENT')(`Received from ${shortId(enr.nodeId)}`)
9090
const decoded = ContentMessageType.deserialize(res.subarray(1))
9191
const contentType = key[0]
9292
let response: ContentLookupResponse
@@ -132,7 +132,7 @@ export class StateNetwork extends BaseNetwork {
132132
return response
133133
}
134134
} catch (err: any) {
135-
this.logger(`Error sending FINDCONTENT to ${shortId(enr)} - ${err.message}`)
135+
this.logger(`Error sending FINDCONTENT to ${shortId(enr.nodeId)} - ${err.message}`)
136136
}
137137
}
138138

0 commit comments

Comments
 (0)