Skip to content

Commit 5fbbdb2

Browse files
committed
fixes for metadata, working locally
1 parent 78e50c6 commit 5fbbdb2

File tree

4 files changed

+26
-2
lines changed

4 files changed

+26
-2
lines changed

packages/beacon-node/src/network/network.ts

+1
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,7 @@ export class Network implements INetwork {
684684
};
685685

686686
private onPeerConnected = (data: NetworkEventData[NetworkEvent.peerConnected]): void => {
687+
this.logger.warn("onPeerConnected", {peer: data.peer, dataColumns: data.dataColumns.join(",")});
687688
this.connectedPeers.set(data.peer, data.dataColumns);
688689
};
689690

packages/beacon-node/src/network/peers/peerManager.ts

+18-2
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,11 @@ export class PeerManager {
308308
private onPing(peer: PeerId, seqNumber: phase0.Ping): void {
309309
// if the sequence number is unknown update the peer's metadata
310310
const metadata = this.connectedPeers.get(peer.toString())?.metadata;
311+
this.logger.warn("onPing", {
312+
seqNumber,
313+
metaSeqNumber: metadata?.seqNumber,
314+
cond: !metadata || metadata.seqNumber < seqNumber,
315+
});
311316
if (!metadata || metadata.seqNumber < seqNumber) {
312317
void this.requestMetadata(peer);
313318
}
@@ -320,7 +325,10 @@ export class PeerManager {
320325
// Store metadata always in case the peer updates attnets but not the sequence number
321326
// Trust that the peer always sends the latest metadata (From Lighthouse)
322327
const peerData = this.connectedPeers.get(peer.toString());
328+
this.logger.warn("onMetadata", {peer: peer.toString(), peerData: peerData !== undefined});
329+
console.log("onMetadata", metadata);
323330
if (peerData) {
331+
const oldMetadata = peerData.metadata;
324332
peerData.metadata = {
325333
seqNumber: metadata.seqNumber,
326334
attnets: metadata.attnets,
@@ -330,6 +338,9 @@ export class PeerManager {
330338
this.discovery?.["peerIdToCustodySubnetCount"].get(peer.toString()) ??
331339
this.config.CUSTODY_REQUIREMENT,
332340
};
341+
if (oldMetadata === null || oldMetadata.csc < peerData.metadata.csc) {
342+
void this.requestStatus(peer, this.statusCache.get());
343+
}
333344
}
334345
}
335346

@@ -396,9 +407,10 @@ export class PeerManager {
396407
}
397408
if (getConnection(this.libp2p, peer.toString())) {
398409
const nodeId = peerData?.nodeId ?? computeNodeId(peer);
410+
console.log("onStatus", peerData?.metadata);
399411
const custodySubnetCount = peerData?.metadata?.csc;
400412

401-
const peerCustodySubnetCount = custodySubnetCount ?? this.config.CUSTODY_REQUIREMENT;
413+
const peerCustodySubnetCount = custodySubnetCount ?? 4;
402414
const peerCustodySubnets = getCustodyColumnSubnets(nodeId, peerCustodySubnetCount);
403415

404416
const matchingSubnetsNum = this.custodySubnets.reduce(
@@ -410,6 +422,7 @@ export class PeerManager {
410422

411423
this.logger.warn(`onStatus ${custodySubnetCount == undefined ? "undefined custody count assuming 4" : ""}`, {
412424
nodeId: toHexString(nodeId),
425+
myNodeId: toHexString(this.nodeId),
413426
peerId: peer.toString(),
414427
custodySubnetCount,
415428
hasAllColumns,
@@ -441,14 +454,17 @@ export class PeerManager {
441454

442455
private async requestMetadata(peer: PeerId): Promise<void> {
443456
try {
457+
this.logger.warn("requestMetadata", {peer: peer.toString()});
444458
this.onMetadata(peer, await this.reqResp.sendMetadata(peer));
445459
} catch (e) {
460+
console.log("requestMetadata", e);
446461
// TODO: Downvote peer here or in the reqResp layer
447462
}
448463
}
449464

450465
private async requestPing(peer: PeerId): Promise<void> {
451466
try {
467+
this.logger.warn("requestPing", {peer: peer.toString()});
452468
this.onPing(peer, await this.reqResp.sendPing(peer));
453469

454470
// If peer replies a PING request also update lastReceivedMsg
@@ -663,7 +679,7 @@ export class PeerManager {
663679
this.connectedPeers.set(remotePeer.toString(), peerData);
664680

665681
if (direction === "outbound") {
666-
//this.pingAndStatusTimeouts();
682+
// this.pingAndStatusTimeouts();
667683
void this.requestPing(remotePeer);
668684
void this.requestStatus(remotePeer, this.statusCache.get());
669685
}

packages/beacon-node/src/network/reqresp/ReqRespBeaconNode.ts

+1
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ export class ReqRespBeaconNode extends ReqResp {
261261

262262
if (ForkSeq[fork] >= ForkSeq.electra) {
263263
protocolsAtFork.push(
264+
[protocols.MetadataV3(this.config), this.onMetadata.bind(this)],
264265
[protocols.DataColumnSidecarsByRoot(this.config), this.getHandler(ReqRespMethod.DataColumnSidecarsByRoot)],
265266
[protocols.DataColumnSidecarsByRange(this.config), this.getHandler(ReqRespMethod.DataColumnSidecarsByRange)]
266267
);

packages/beacon-node/src/network/reqresp/protocols.ts

+6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ export const MetadataV2 = toProtocol({
2323
contextBytesType: ContextBytesType.Empty,
2424
});
2525

26+
export const MetadataV3 = toProtocol({
27+
method: ReqRespMethod.Metadata,
28+
version: Version.V3,
29+
contextBytesType: ContextBytesType.Empty,
30+
});
31+
2632
export const Ping = toProtocol({
2733
method: ReqRespMethod.Ping,
2834
version: Version.V1,

0 commit comments

Comments
 (0)