@lodestar/beacon-node 1.45.0-dev.9ed373bf56 → 1.45.0-dev.b620872107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/chain/validation/executionPayloadBid.js +10 -11
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/proposerPreferences.d.ts.map +1 -1
- package/lib/chain/validation/proposerPreferences.js +2 -3
- package/lib/chain/validation/proposerPreferences.js.map +1 -1
- package/lib/network/core/metrics.d.ts +0 -65
- package/lib/network/core/metrics.d.ts.map +1 -1
- package/lib/network/core/metrics.js +0 -94
- package/lib/network/core/metrics.js.map +1 -1
- package/lib/network/discv5/utils.d.ts.map +1 -1
- package/lib/network/discv5/utils.js +3 -12
- package/lib/network/discv5/utils.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts.map +1 -1
- package/lib/network/gossip/encoding.js +0 -7
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts.map +1 -1
- package/lib/network/peers/peerManager.js +0 -10
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/score/score.d.ts +1 -3
- package/lib/network/peers/score/score.d.ts.map +1 -1
- package/lib/network/peers/score/score.js +1 -6
- package/lib/network/peers/score/score.js.map +1 -1
- package/lib/network/peers/score/store.d.ts.map +1 -1
- package/lib/network/peers/score/store.js +1 -6
- package/lib/network/peers/score/store.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.js +0 -14
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/package.json +14 -14
- package/src/chain/validation/executionPayloadBid.ts +9 -14
- package/src/chain/validation/proposerPreferences.ts +2 -3
- package/src/network/core/metrics.ts +0 -94
- package/src/network/discv5/utils.ts +3 -11
- package/src/network/gossip/encoding.ts +0 -7
- package/src/network/peers/peerManager.ts +0 -11
- package/src/network/peers/score/score.ts +1 -8
- package/src/network/peers/score/store.ts +1 -8
- package/src/network/peers/utils/prioritizePeers.ts +0 -15
|
@@ -13,17 +13,9 @@ export enum ENRRelevance {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export function enrRelevance(enr: ENR, config: BeaconConfig, clock: IClock): ENRRelevance {
|
|
16
|
-
// We are not interested in peers that don't advertise at least one transport (tcp or quic)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// Malformed ENR endpoint fields can make multiaddr conversion throw.
|
|
20
|
-
// Treat endpoints that cannot be converted as unusable.
|
|
21
|
-
try {
|
|
22
|
-
multiaddrTCP = enr.getLocationMultiaddr(ENRKey.tcp);
|
|
23
|
-
multiaddrQUIC = enr.getLocationMultiaddr(ENRKey.quic);
|
|
24
|
-
} catch {
|
|
25
|
-
return ENRRelevance.no_transport;
|
|
26
|
-
}
|
|
16
|
+
// We are not interested in peers that don't advertise at least one transport (tcp or quic)
|
|
17
|
+
const multiaddrTCP = enr.getLocationMultiaddr(ENRKey.tcp);
|
|
18
|
+
const multiaddrQUIC = enr.getLocationMultiaddr(ENRKey.quic);
|
|
27
19
|
if (!multiaddrTCP && !multiaddrQUIC) {
|
|
28
20
|
return ENRRelevance.no_transport;
|
|
29
21
|
}
|
|
@@ -52,13 +52,6 @@ export function fastMsgIdFn(rpcMsg: RPC.Message): string {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
export function msgIdToStrFn(msgId: Uint8Array): string {
|
|
55
|
-
// Spec mandates a 20-byte gossipsub message-id, but control-message IDs from peers
|
|
56
|
-
// can be any length. Reject non-20-byte IDs to avoid a Buffer.set() RangeError on
|
|
57
|
-
// longer IDs and stale shared-buffer bytes on shorter ones.
|
|
58
|
-
// Ref: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.10/specs/phase0/p2p-interface.md?plain=1#L486
|
|
59
|
-
if (msgId.length !== 20) {
|
|
60
|
-
throw Error(`Expect msgId to be 20 bytes, got ${msgId.length}`);
|
|
61
|
-
}
|
|
62
55
|
// this is the same logic to `toHex(msgId)` with better performance
|
|
63
56
|
sharedMsgIdBuf.set(msgId);
|
|
64
57
|
return `0x${sharedMsgIdBuf.toString("hex")}`;
|
|
@@ -415,10 +415,8 @@ export class PeerManager {
|
|
|
415
415
|
);
|
|
416
416
|
if (irrelevantReasonType === null) {
|
|
417
417
|
isIrrelevant = false;
|
|
418
|
-
this.metrics?.peerManager.relevanceCheck.inc({result: "relevant"});
|
|
419
418
|
} else {
|
|
420
419
|
isIrrelevant = true;
|
|
421
|
-
this.metrics?.peerManager.relevanceCheck.inc({result: irrelevantReasonType.code});
|
|
422
420
|
this.logger.debug("Irrelevant peer", {
|
|
423
421
|
peer: prettyPrintPeerId(peer),
|
|
424
422
|
reason: renderIrrelevantPeerType(irrelevantReasonType),
|
|
@@ -426,7 +424,6 @@ export class PeerManager {
|
|
|
426
424
|
}
|
|
427
425
|
} catch (e) {
|
|
428
426
|
this.logger.error("Irrelevant peer - unexpected error", {peer: prettyPrintPeerId(peer)}, e as Error);
|
|
429
|
-
this.metrics?.peerManager.relevanceCheck.inc({result: "error"});
|
|
430
427
|
isIrrelevant = true;
|
|
431
428
|
}
|
|
432
429
|
|
|
@@ -555,18 +552,15 @@ export class PeerManager {
|
|
|
555
552
|
for (const peer of connectedPeers) {
|
|
556
553
|
switch (this.peerRpcScores.getScoreState(peer)) {
|
|
557
554
|
case ScoreState.Banned:
|
|
558
|
-
this.metrics?.peerManager.peersPruned.inc({reason: "banned"});
|
|
559
555
|
void this.goodbyeAndDisconnect(peer, GoodByeReasonCode.BANNED);
|
|
560
556
|
break;
|
|
561
557
|
case ScoreState.Disconnected:
|
|
562
|
-
this.metrics?.peerManager.peersPruned.inc({reason: "score_too_low"});
|
|
563
558
|
void this.goodbyeAndDisconnect(peer, GoodByeReasonCode.SCORE_TOO_LOW);
|
|
564
559
|
break;
|
|
565
560
|
case ScoreState.Healthy:
|
|
566
561
|
connectedHealthyPeers.push(peer);
|
|
567
562
|
}
|
|
568
563
|
}
|
|
569
|
-
this.metrics?.peerManager.peersEvaluated.observe(connectedHealthyPeers.length);
|
|
570
564
|
|
|
571
565
|
const status = this.statusCache.get();
|
|
572
566
|
const starved =
|
|
@@ -578,7 +572,6 @@ export class PeerManager {
|
|
|
578
572
|
this.metrics?.peerManager.starved.set(starved ? 1 : 0);
|
|
579
573
|
const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
|
|
580
574
|
|
|
581
|
-
const prioritizeTimer = this.metrics?.peerManager.prioritizePeersDuration.startTimer();
|
|
582
575
|
const {peersToDisconnect, peersToConnect, attnetQueries, syncnetQueries, custodyGroupQueries} = prioritizePeers(
|
|
583
576
|
connectedHealthyPeers.map((peer) => {
|
|
584
577
|
const peerData = this.connectedPeers.get(peer.toString());
|
|
@@ -608,7 +601,6 @@ export class PeerManager {
|
|
|
608
601
|
this.config,
|
|
609
602
|
this.metrics
|
|
610
603
|
);
|
|
611
|
-
prioritizeTimer?.();
|
|
612
604
|
|
|
613
605
|
const queriesMerged: SubnetDiscvQueryMs[] = [];
|
|
614
606
|
for (const {type, queries} of [
|
|
@@ -640,7 +632,6 @@ export class PeerManager {
|
|
|
640
632
|
// disconnect first to have more slots before we dial new peers
|
|
641
633
|
for (const [reason, peers] of peersToDisconnect) {
|
|
642
634
|
this.metrics?.peersRequestedToDisconnect.inc({reason}, peers.length);
|
|
643
|
-
this.metrics?.peerManager.peersPruned.inc({reason}, peers.length);
|
|
644
635
|
for (const peer of peers) {
|
|
645
636
|
void this.goodbyeAndDisconnect(peer, GoodByeReasonCode.TOO_MANY_PEERS);
|
|
646
637
|
}
|
|
@@ -668,8 +659,6 @@ export class PeerManager {
|
|
|
668
659
|
}
|
|
669
660
|
}
|
|
670
661
|
|
|
671
|
-
this.metrics?.peerManager.connectedPeersMapSize.set(this.connectedPeers.size);
|
|
672
|
-
|
|
673
662
|
timer?.();
|
|
674
663
|
|
|
675
664
|
this.logger.debug("peerManager heartbeat result", {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {GoodByeReasonCode} from "../../../constants/network.js";
|
|
2
|
-
import {NetworkCoreMetrics} from "../../core/metrics.js";
|
|
3
2
|
import {
|
|
4
3
|
COOL_DOWN_BEFORE_DECAY_MS,
|
|
5
4
|
DEFAULT_SCORE,
|
|
@@ -24,15 +23,13 @@ export class RealScore implements IPeerScore {
|
|
|
24
23
|
/** The final score, computed from the above */
|
|
25
24
|
private score: number;
|
|
26
25
|
private lastUpdate: number;
|
|
27
|
-
private readonly metrics: NetworkCoreMetrics | null;
|
|
28
26
|
|
|
29
|
-
constructor(
|
|
27
|
+
constructor() {
|
|
30
28
|
this.lodestarScore = DEFAULT_SCORE;
|
|
31
29
|
this.gossipScore = DEFAULT_SCORE;
|
|
32
30
|
this.score = DEFAULT_SCORE;
|
|
33
31
|
this.ignoreNegativeGossipScore = false;
|
|
34
32
|
this.lastUpdate = Date.now();
|
|
35
|
-
this.metrics = metrics;
|
|
36
33
|
}
|
|
37
34
|
|
|
38
35
|
isCoolingDown(): boolean {
|
|
@@ -139,10 +136,6 @@ export class RealScore implements IPeerScore {
|
|
|
139
136
|
this.recomputeScore();
|
|
140
137
|
const newState = scoreToState(this.score);
|
|
141
138
|
|
|
142
|
-
if (prevState !== newState) {
|
|
143
|
-
this.metrics?.peerManager.scoreStateTransitions.inc({from: prevState, to: newState});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
139
|
if (prevState !== ScoreState.Banned && newState === ScoreState.Banned) {
|
|
147
140
|
// ban this peer for at least BANNED_BEFORE_DECAY_MS seconds
|
|
148
141
|
this.lastUpdate = Date.now() + COOL_DOWN_BEFORE_DECAY_MS;
|
|
@@ -32,9 +32,7 @@ export class PeerRpcScoreStore implements IPeerRpcScoreStore {
|
|
|
32
32
|
constructor(opts: PeerRpcScoreOpts = {}, metrics: NetworkCoreMetrics | null = null, logger: Logger | null = null) {
|
|
33
33
|
this.metrics = metrics;
|
|
34
34
|
this.logger = logger;
|
|
35
|
-
this.scores = opts.disablePeerScoring
|
|
36
|
-
? new MapDef(() => new MaxScore())
|
|
37
|
-
: new MapDef(() => new RealScore(this.metrics));
|
|
35
|
+
this.scores = opts.disablePeerScoring ? new MapDef(() => new MaxScore()) : new MapDef(() => new RealScore());
|
|
38
36
|
}
|
|
39
37
|
|
|
40
38
|
getScore(peer: PeerId): number {
|
|
@@ -77,8 +75,6 @@ export class PeerRpcScoreStore implements IPeerRpcScoreStore {
|
|
|
77
75
|
}
|
|
78
76
|
|
|
79
77
|
update(): void {
|
|
80
|
-
const timer = this.metrics?.peerManager.scoreUpdateDuration.startTimer();
|
|
81
|
-
|
|
82
78
|
// Bound size of data structures
|
|
83
79
|
pruneSetToMax(this.scores, MAX_ENTRIES);
|
|
84
80
|
|
|
@@ -90,9 +86,6 @@ export class PeerRpcScoreStore implements IPeerRpcScoreStore {
|
|
|
90
86
|
this.scores.delete(peerIdStr);
|
|
91
87
|
}
|
|
92
88
|
}
|
|
93
|
-
|
|
94
|
-
this.metrics?.peerManager.scoreMapSize.set(this.scores.size);
|
|
95
|
-
timer?.();
|
|
96
89
|
}
|
|
97
90
|
|
|
98
91
|
updateGossipsubScore(peerId: PeerIdStr, newScore: number, ignore: boolean): void {
|
|
@@ -7,7 +7,6 @@ import {MapDef} from "@lodestar/utils";
|
|
|
7
7
|
import {shuffle} from "../../../util/shuffle.js";
|
|
8
8
|
import {sortBy} from "../../../util/sortBy.js";
|
|
9
9
|
import {NetworkCoreMetrics} from "../../core/metrics.js";
|
|
10
|
-
import {SubnetType} from "../../metadata.js";
|
|
11
10
|
import {RequestedSubnet} from "./subnetMap.js";
|
|
12
11
|
|
|
13
12
|
/** Target number of peers we'd like to have connected to a given long-lived subnet */
|
|
@@ -190,18 +189,6 @@ export function prioritizePeers(
|
|
|
190
189
|
|
|
191
190
|
const connectedPeerCount = connectedPeers.length;
|
|
192
191
|
|
|
193
|
-
// Track the outbound peers invariant (we keep at least OUTBOUND_PEERS_RATIO outbound peers).
|
|
194
|
-
// Report 0 when there are no peers so the gauge doesn't go stale at its last value.
|
|
195
|
-
if (metrics) {
|
|
196
|
-
let outboundPeerCount = 0;
|
|
197
|
-
for (const peer of connectedPeers) {
|
|
198
|
-
if (peer.direction === "outbound") {
|
|
199
|
-
outboundPeerCount++;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
metrics.peerManager.outboundPeersRatio.set(connectedPeerCount > 0 ? outboundPeerCount / connectedPeerCount : 0);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
192
|
if (connectedPeerCount < targetPeers) {
|
|
206
193
|
// Need more peers.
|
|
207
194
|
// Instead of attempting to connect the exact amount necessary this will overshoot a little since the success
|
|
@@ -269,7 +256,6 @@ function requestSubnetPeers(
|
|
|
269
256
|
|
|
270
257
|
for (const {subnet, toSlot} of activeAttnets) {
|
|
271
258
|
const peersInSubnet = peersPerSubnet.get(subnet) ?? 0;
|
|
272
|
-
metrics?.peerManager.peersPerActiveSubnet.observe({type: SubnetType.attnets}, peersInSubnet);
|
|
273
259
|
if (peersInSubnet < targetSubnetPeers) {
|
|
274
260
|
// We need more peers
|
|
275
261
|
attnetQueries.push({subnet, toSlot, maxPeersToDiscover: targetSubnetPeers - peersInSubnet});
|
|
@@ -296,7 +282,6 @@ function requestSubnetPeers(
|
|
|
296
282
|
|
|
297
283
|
for (const {subnet, toSlot} of activeSyncnets) {
|
|
298
284
|
const peersInSubnet = peersPerSubnet.get(subnet) ?? 0;
|
|
299
|
-
metrics?.peerManager.peersPerActiveSubnet.observe({type: SubnetType.syncnets}, peersInSubnet);
|
|
300
285
|
if (peersInSubnet < targetSubnetPeers) {
|
|
301
286
|
// We need more peers
|
|
302
287
|
syncnetQueries.push({subnet, toSlot, maxPeersToDiscover: targetSubnetPeers - peersInSubnet});
|