@lodestar/beacon-node 1.32.0-peerDAS.45bf844607 → 1.32.0-peerDAS.498123da6e
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/api/impl/beacon/blocks/index.js +34 -4
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.js +13 -1
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +43 -29
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +1 -1
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/metrics.js +8 -0
- package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +29 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +1 -52
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +1 -0
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/chain.d.ts +9 -6
- package/lib/chain/chain.js +36 -9
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +6 -1
- package/lib/chain/emitter.js +4 -0
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/interface.d.ts +4 -4
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/options.d.ts +2 -2
- package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +145 -116
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +4 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +75 -9
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +5 -2
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +3 -0
- package/lib/metrics/metrics/beacon.js +17 -1
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +15 -0
- package/lib/metrics/metrics/lodestar.js +32 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +7 -7
- package/lib/network/core/networkCore.js +47 -45
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -3
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +8 -4
- package/lib/network/discv5/index.d.ts +1 -0
- package/lib/network/discv5/index.js +1 -0
- package/lib/network/discv5/index.js.map +1 -1
- package/lib/network/discv5/types.d.ts +1 -0
- package/lib/network/discv5/utils.d.ts +3 -1
- package/lib/network/discv5/utils.js +12 -2
- package/lib/network/discv5/utils.js.map +1 -1
- package/lib/network/discv5/worker.js +5 -1
- package/lib/network/discv5/worker.js.map +1 -1
- package/lib/network/events.d.ts +2 -2
- package/lib/network/forks.d.ts +2 -0
- package/lib/network/forks.js +4 -0
- package/lib/network/forks.js.map +1 -1
- package/lib/network/gossip/encoding.js +1 -1
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/gossipsub.js +6 -4
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +3 -3
- package/lib/network/gossip/scoringParameters.js +10 -10
- package/lib/network/gossip/scoringParameters.js.map +1 -1
- package/lib/network/gossip/topic.js +14 -13
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -2
- package/lib/network/network.d.ts +4 -4
- package/lib/network/network.js +69 -54
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/discover.d.ts +0 -6
- package/lib/network/peers/discover.js +2 -34
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +2 -4
- package/lib/network/peers/peerManager.js +4 -15
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +9 -2
- package/lib/network/peers/peersData.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
- package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +3 -3
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +41 -30
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +1 -1
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/index.js +2 -2
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +5 -5
- package/lib/network/reqresp/ReqRespBeaconNode.js +20 -15
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +2 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +6 -2
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +1 -0
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +25 -5
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js +2 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/lightClientBootstrap.js +1 -1
- package/lib/network/reqresp/handlers/lightClientBootstrap.js.map +1 -1
- package/lib/network/reqresp/handlers/lightClientFinalityUpdate.js +1 -1
- package/lib/network/reqresp/handlers/lightClientFinalityUpdate.js.map +1 -1
- package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.js +1 -1
- package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.js.map +1 -1
- package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js +1 -1
- package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/status.js +4 -3
- package/lib/network/reqresp/handlers/status.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +1 -0
- package/lib/network/reqresp/protocols.js +5 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +3 -3
- package/lib/network/reqresp/types.js +3 -3
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/statusCache.d.ts +5 -5
- package/lib/network/statusCache.js.map +1 -1
- package/lib/network/subnets/attnetsService.d.ts +3 -3
- package/lib/network/subnets/attnetsService.js +17 -17
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/interface.d.ts +3 -3
- package/lib/network/subnets/syncnetsService.d.ts +3 -3
- package/lib/network/subnets/syncnetsService.js +13 -13
- package/lib/network/subnets/syncnetsService.js.map +1 -1
- package/lib/network/subscribeBoundary.d.ts +5 -0
- package/lib/network/subscribeBoundary.js +4 -0
- package/lib/network/subscribeBoundary.js.map +1 -0
- package/lib/sync/range/batch.d.ts +1 -0
- package/lib/sync/range/batch.js +4 -0
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +13 -3
- package/lib/sync/range/chain.js +72 -20
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts +3 -2
- package/lib/sync/range/range.js +10 -4
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/chainTarget.d.ts +5 -1
- package/lib/sync/range/utils/chainTarget.js +26 -1
- package/lib/sync/range/utils/chainTarget.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.d.ts +12 -8
- package/lib/sync/range/utils/peerBalancer.js +62 -21
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/unknownBlock.js +12 -14
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/remoteSyncType.d.ts +4 -4
- package/lib/sync/utils/remoteSyncType.js.map +1 -1
- package/lib/util/blobs.d.ts +5 -0
- package/lib/util/blobs.js +60 -0
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/dataColumns.d.ts +12 -0
- package/lib/util/dataColumns.js +70 -1
- package/lib/util/dataColumns.js.map +1 -1
- package/package.json +14 -14
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BeaconConfig } from "@lodestar/config";
|
|
2
|
-
import { ForkName } from "@lodestar/params";
|
|
3
2
|
import { Slot, SubnetID } from "@lodestar/types";
|
|
4
3
|
import { Logger } from "@lodestar/utils";
|
|
5
4
|
import { IClock } from "../../util/clock.js";
|
|
6
5
|
import { NetworkCoreMetrics } from "../core/metrics.js";
|
|
6
|
+
import { SubscribeBoundary } from "../core/types.js";
|
|
7
7
|
import { MetadataController } from "../metadata.js";
|
|
8
8
|
import { RequestedSubnet } from "../peers/utils/index.js";
|
|
9
9
|
import { CommitteeSubscription, GossipSubscriber, IAttnetsService, NodeId, SubnetsServiceOpts } from "./interface.js";
|
|
@@ -61,12 +61,12 @@ export declare class AttnetsService implements IAttnetsService {
|
|
|
61
61
|
* TODO-dll: clarify how many epochs before the fork we should subscribe to the new fork
|
|
62
62
|
* Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork
|
|
63
63
|
**/
|
|
64
|
-
|
|
64
|
+
subscribeSubnetsAfterBoundary(boundary: SubscribeBoundary): void;
|
|
65
65
|
/**
|
|
66
66
|
* TODO-dll: clarify how many epochs after the fork we should unsubscribe to the new fork
|
|
67
67
|
* Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork
|
|
68
68
|
**/
|
|
69
|
-
|
|
69
|
+
unsubscribeSubnetsBeforeBoundary(boundary: SubscribeBoundary): void;
|
|
70
70
|
/**
|
|
71
71
|
* Run per slot.
|
|
72
72
|
* - Subscribe to gossip subnets 2 slots in advance
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ATTESTATION_SUBNET_COUNT, EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION, SLOTS_PER_EPOCH
|
|
1
|
+
import { ATTESTATION_SUBNET_COUNT, EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION, SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
2
2
|
import { ssz } from "@lodestar/types";
|
|
3
3
|
import { MapDef } from "@lodestar/utils";
|
|
4
4
|
import { ClockEvent } from "../../util/clock.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getActiveSubscribeBoundaries } from "../forks.js";
|
|
6
6
|
import { GossipType } from "../gossip/index.js";
|
|
7
7
|
import { GOSSIP_D_LOW } from "../gossip/scoringParameters.js";
|
|
8
8
|
import { stringifyGossipTopic } from "../gossip/topic.js";
|
|
@@ -160,24 +160,24 @@ export class AttnetsService {
|
|
|
160
160
|
* TODO-dll: clarify how many epochs before the fork we should subscribe to the new fork
|
|
161
161
|
* Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork
|
|
162
162
|
**/
|
|
163
|
-
|
|
164
|
-
this.logger.info("Subscribing to long lived attnets
|
|
165
|
-
|
|
163
|
+
subscribeSubnetsAfterBoundary(boundary) {
|
|
164
|
+
this.logger.info("Subscribing to long lived attnets after boundary", {
|
|
165
|
+
...boundary,
|
|
166
166
|
subnets: Array.from(this.longLivedSubscriptions).join(","),
|
|
167
167
|
});
|
|
168
168
|
for (const subnet of this.longLivedSubscriptions) {
|
|
169
|
-
this.gossip.subscribeTopic({ type: gossipType,
|
|
169
|
+
this.gossip.subscribeTopic({ type: gossipType, subnet, boundary });
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
173
|
* TODO-dll: clarify how many epochs after the fork we should unsubscribe to the new fork
|
|
174
174
|
* Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork
|
|
175
175
|
**/
|
|
176
|
-
|
|
177
|
-
this.logger.info("Unsubscribing to long lived attnets
|
|
176
|
+
unsubscribeSubnetsBeforeBoundary(boundary) {
|
|
177
|
+
this.logger.info("Unsubscribing to long lived attnets before boundary", { ...boundary });
|
|
178
178
|
for (let subnet = 0; subnet < ATTESTATION_SUBNET_COUNT; subnet++) {
|
|
179
179
|
if (!this.opts.subscribeAllSubnets) {
|
|
180
|
-
this.gossip.unsubscribeTopic({ type: gossipType,
|
|
180
|
+
this.gossip.unsubscribeTopic({ type: gossipType, subnet, boundary });
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
}
|
|
@@ -200,7 +200,7 @@ export class AttnetsService {
|
|
|
200
200
|
if (timeToFormMesh === null) {
|
|
201
201
|
const topicStr = stringifyGossipTopic(this.config, {
|
|
202
202
|
type: gossipType,
|
|
203
|
-
fork: this.config.getForkName(dutiedSlot),
|
|
203
|
+
boundary: { fork: this.config.getForkName(dutiedSlot) },
|
|
204
204
|
subnet,
|
|
205
205
|
});
|
|
206
206
|
const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
|
|
@@ -283,11 +283,11 @@ export class AttnetsService {
|
|
|
283
283
|
* shortLivedSubscriptions or longLivedSubscriptions should be updated right AFTER this called
|
|
284
284
|
**/
|
|
285
285
|
subscribeToSubnets(subnets, src) {
|
|
286
|
-
const
|
|
286
|
+
const boundaries = getActiveSubscribeBoundaries(this.config, this.clock.currentEpoch);
|
|
287
287
|
for (const subnet of subnets) {
|
|
288
288
|
if (!this.shortLivedSubscriptions.has(subnet) && !this.longLivedSubscriptions.has(subnet)) {
|
|
289
|
-
for (const
|
|
290
|
-
this.gossip.subscribeTopic({ type: gossipType,
|
|
289
|
+
for (const boundary of boundaries) {
|
|
290
|
+
this.gossip.subscribeTopic({ type: gossipType, subnet, boundary });
|
|
291
291
|
}
|
|
292
292
|
this.metrics?.attnetsService.subscribeSubnets.inc({ subnet, src });
|
|
293
293
|
}
|
|
@@ -301,11 +301,11 @@ export class AttnetsService {
|
|
|
301
301
|
// No need to unsubscribeTopic(). Return early to prevent repetitive extra work
|
|
302
302
|
if (this.opts.subscribeAllSubnets)
|
|
303
303
|
return;
|
|
304
|
-
const
|
|
304
|
+
const boundaries = getActiveSubscribeBoundaries(this.config, this.clock.currentEpoch);
|
|
305
305
|
for (const subnet of subnets) {
|
|
306
306
|
if (!this.shortLivedSubscriptions.isActiveAtSlot(subnet, slot) && !this.longLivedSubscriptions.has(subnet)) {
|
|
307
|
-
for (const
|
|
308
|
-
this.gossip.unsubscribeTopic({ type: gossipType,
|
|
307
|
+
for (const boundary of boundaries) {
|
|
308
|
+
this.gossip.unsubscribeTopic({ type: gossipType, subnet, boundary });
|
|
309
309
|
}
|
|
310
310
|
this.metrics?.attnetsService.unsubscribeSubnets.inc({ subnet, src });
|
|
311
311
|
}
|
|
@@ -319,7 +319,7 @@ export class AttnetsService {
|
|
|
319
319
|
for (const { subnet } of this.shortLivedSubscriptions.getActiveTtl(currentSlot)) {
|
|
320
320
|
const topicStr = stringifyGossipTopic(this.config, {
|
|
321
321
|
type: gossipType,
|
|
322
|
-
fork: this.config.getForkName(currentSlot),
|
|
322
|
+
boundary: { fork: this.config.getForkName(currentSlot) },
|
|
323
323
|
subnet,
|
|
324
324
|
});
|
|
325
325
|
const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attnetsService.js","sourceRoot":"","sources":["../../../src/network/subnets/attnetsService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attnetsService.js","sourceRoot":"","sources":["../../../src/network/subnets/attnetsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PeerId, PrivateKey } from "@libp2p/interface";
|
|
2
|
-
import { ForkName } from "@lodestar/params";
|
|
3
2
|
import { Bytes32, Slot, SubnetID, ValidatorIndex } from "@lodestar/types";
|
|
3
|
+
import { SubscribeBoundary } from "../core/types.js";
|
|
4
4
|
import { GossipTopic } from "../gossip/interface.js";
|
|
5
5
|
import { RequestedSubnet } from "../peers/utils/index.js";
|
|
6
6
|
/** Generic CommitteeSubscription for both beacon attnets subs and syncnets subs */
|
|
@@ -14,8 +14,8 @@ export type SubnetsService = {
|
|
|
14
14
|
close(): void;
|
|
15
15
|
addCommitteeSubscriptions(subscriptions: CommitteeSubscription[]): void;
|
|
16
16
|
getActiveSubnets(): RequestedSubnet[];
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
subscribeSubnetsAfterBoundary(boundary: SubscribeBoundary): void;
|
|
18
|
+
unsubscribeSubnetsBeforeBoundary(prevFork: SubscribeBoundary): void;
|
|
19
19
|
};
|
|
20
20
|
export interface IAttnetsService extends SubnetsService {
|
|
21
21
|
shouldProcess(subnet: SubnetID, slot: Slot): boolean;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BeaconConfig } from "@lodestar/config";
|
|
2
|
-
import { ForkName } from "@lodestar/params";
|
|
3
2
|
import { Logger } from "@lodestar/utils";
|
|
4
3
|
import { IClock } from "../../util/clock.js";
|
|
5
4
|
import { NetworkCoreMetrics } from "../core/metrics.js";
|
|
5
|
+
import { SubscribeBoundary } from "../core/types.js";
|
|
6
6
|
import { MetadataController } from "../metadata.js";
|
|
7
7
|
import { RequestedSubnet } from "../peers/utils/index.js";
|
|
8
8
|
import { CommitteeSubscription, GossipSubscriber, SubnetsService, SubnetsServiceOpts } from "./interface.js";
|
|
@@ -37,9 +37,9 @@ export declare class SyncnetsService implements SubnetsService {
|
|
|
37
37
|
*/
|
|
38
38
|
addCommitteeSubscriptions(subscriptions: CommitteeSubscription[]): void;
|
|
39
39
|
/** Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork */
|
|
40
|
-
|
|
40
|
+
subscribeSubnetsAfterBoundary(boundary: SubscribeBoundary): void;
|
|
41
41
|
/** Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork */
|
|
42
|
-
|
|
42
|
+
unsubscribeSubnetsBeforeBoundary(boundary: SubscribeBoundary): void;
|
|
43
43
|
/**
|
|
44
44
|
* Run per epoch, clean-up operations that are not urgent
|
|
45
45
|
*/
|
|
@@ -2,7 +2,7 @@ import { SYNC_COMMITTEE_SUBNET_COUNT } from "@lodestar/params";
|
|
|
2
2
|
import { computeStartSlotAtEpoch } from "@lodestar/state-transition";
|
|
3
3
|
import { ssz } from "@lodestar/types";
|
|
4
4
|
import { ClockEvent } from "../../util/clock.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getActiveSubscribeBoundaries } from "../forks.js";
|
|
6
6
|
import { GossipType } from "../gossip/index.js";
|
|
7
7
|
import { SubnetMap } from "../peers/utils/index.js";
|
|
8
8
|
/**
|
|
@@ -69,18 +69,18 @@ export class SyncnetsService {
|
|
|
69
69
|
this.updateMetadata();
|
|
70
70
|
}
|
|
71
71
|
/** Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork */
|
|
72
|
-
|
|
73
|
-
this.logger.info("Subscribing to random attnets
|
|
72
|
+
subscribeSubnetsAfterBoundary(boundary) {
|
|
73
|
+
this.logger.info("Subscribing to random attnets after boundary", boundary);
|
|
74
74
|
for (const subnet of this.subscriptionsCommittee.getAll()) {
|
|
75
|
-
this.gossip.subscribeTopic({ type: GossipType.sync_committee, fork:
|
|
75
|
+
this.gossip.subscribeTopic({ type: GossipType.sync_committee, boundary: { fork: boundary.fork }, subnet });
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
/** Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork */
|
|
79
|
-
|
|
80
|
-
this.logger.info("Unsubscribing to random attnets
|
|
79
|
+
unsubscribeSubnetsBeforeBoundary(boundary) {
|
|
80
|
+
this.logger.info("Unsubscribing to random attnets before boundary", boundary);
|
|
81
81
|
for (let subnet = 0; subnet < SYNC_COMMITTEE_SUBNET_COUNT; subnet++) {
|
|
82
82
|
if (!this.opts?.subscribeAllSubnets) {
|
|
83
|
-
this.gossip.unsubscribeTopic({ type: GossipType.sync_committee, fork:
|
|
83
|
+
this.gossip.unsubscribeTopic({ type: GossipType.sync_committee, boundary: { fork: boundary.fork }, subnet });
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -97,11 +97,11 @@ export class SyncnetsService {
|
|
|
97
97
|
}
|
|
98
98
|
/** Tigger a gossip subcription only if not already subscribed */
|
|
99
99
|
subscribeToSubnets(subnets) {
|
|
100
|
-
const
|
|
100
|
+
const boundaries = getActiveSubscribeBoundaries(this.config, this.clock.currentEpoch);
|
|
101
101
|
for (const subnet of subnets) {
|
|
102
102
|
if (!this.subscriptionsCommittee.has(subnet)) {
|
|
103
|
-
for (const
|
|
104
|
-
this.gossip.subscribeTopic({ type: GossipType.sync_committee,
|
|
103
|
+
for (const boundary of boundaries) {
|
|
104
|
+
this.gossip.subscribeTopic({ type: GossipType.sync_committee, boundary, subnet });
|
|
105
105
|
}
|
|
106
106
|
this.metrics?.syncnetsService.subscribeSubnets.inc({ subnet });
|
|
107
107
|
}
|
|
@@ -109,12 +109,12 @@ export class SyncnetsService {
|
|
|
109
109
|
}
|
|
110
110
|
/** Trigger a gossip un-subscrition only if no-one is still subscribed */
|
|
111
111
|
unsubscribeSubnets(subnets) {
|
|
112
|
-
const
|
|
112
|
+
const boundaries = getActiveSubscribeBoundaries(this.config, this.clock.currentEpoch);
|
|
113
113
|
for (const subnet of subnets) {
|
|
114
114
|
// No need to check if active in subscriptionsCommittee since we only have a single SubnetMap
|
|
115
115
|
if (!this.opts?.subscribeAllSubnets) {
|
|
116
|
-
for (const
|
|
117
|
-
this.gossip.unsubscribeTopic({ type: GossipType.sync_committee,
|
|
116
|
+
for (const boundary of boundaries) {
|
|
117
|
+
this.gossip.unsubscribeTopic({ type: GossipType.sync_committee, boundary, subnet });
|
|
118
118
|
}
|
|
119
119
|
this.metrics?.syncnetsService.unsubscribeSubnets.inc({ subnet });
|
|
120
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncnetsService.js","sourceRoot":"","sources":["../../../src/network/subnets/syncnetsService.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"syncnetsService.js","sourceRoot":"","sources":["../../../src/network/subnets/syncnetsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BeaconConfig } from "@lodestar/config";
|
|
2
|
+
import { Epoch } from "@lodestar/types";
|
|
3
|
+
import { SubscribeBoundary } from "./core/types.js";
|
|
4
|
+
export declare function getSubscribeBoundary(config: BeaconConfig, epoch: Epoch): SubscribeBoundary;
|
|
5
|
+
//# sourceMappingURL=subscribeBoundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribeBoundary.js","sourceRoot":"","sources":["../../src/network/subscribeBoundary.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,oBAAoB,CAAC,MAAoB,EAAE,KAAY;IACrE,OAAO,EAAC,IAAI,EAAE,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAC,CAAC;AACvD,CAAC"}
|
|
@@ -118,6 +118,7 @@ export declare class Batch {
|
|
|
118
118
|
* AwaitingValidation -> Done
|
|
119
119
|
*/
|
|
120
120
|
validationSuccess(): Attempt;
|
|
121
|
+
isFulu(): boolean;
|
|
121
122
|
private onExecutionEngineError;
|
|
122
123
|
private onProcessingError;
|
|
123
124
|
/** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
|
package/lib/sync/range/batch.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ForkSeq } from "@lodestar/params";
|
|
1
2
|
import { LodestarError } from "@lodestar/utils";
|
|
2
3
|
import { BlockError, BlockErrorCode } from "../../chain/errors/index.js";
|
|
3
4
|
import { MAX_BATCH_DOWNLOAD_ATTEMPTS, MAX_BATCH_PROCESSING_ATTEMPTS } from "../constants.js";
|
|
@@ -164,6 +165,9 @@ export class Batch {
|
|
|
164
165
|
}
|
|
165
166
|
return this.state.attempt;
|
|
166
167
|
}
|
|
168
|
+
isFulu() {
|
|
169
|
+
return this.config.getForkSeq(this.request.startSlot) >= ForkSeq.fulu;
|
|
170
|
+
}
|
|
167
171
|
onExecutionEngineError(attempt) {
|
|
168
172
|
this.executionErrorAttempts.push(attempt);
|
|
169
173
|
if (this.executionErrorAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,19 @@ import { ChainForkConfig } from "@lodestar/config";
|
|
|
2
2
|
import { Epoch, Root, Slot, phase0 } from "@lodestar/types";
|
|
3
3
|
import { Logger } from "@lodestar/utils";
|
|
4
4
|
import { BlockInput } from "../../chain/blocks/types.js";
|
|
5
|
+
import { Metrics } from "../../metrics/metrics.js";
|
|
5
6
|
import { PeerAction } from "../../network/index.js";
|
|
7
|
+
import { PeerSyncMeta } from "../../network/peers/peersData.js";
|
|
6
8
|
import { PartialDownload } from "../../network/reqresp/beaconBlocksMaybeBlobsByRange.js";
|
|
9
|
+
import { CustodyConfig } from "../../util/dataColumns.js";
|
|
7
10
|
import { PeerIdStr } from "../../util/peerId.js";
|
|
8
11
|
import { RangeSyncType } from "../utils/remoteSyncType.js";
|
|
9
12
|
import { BatchErrorCode, BatchMetadata } from "./batch.js";
|
|
10
13
|
export type SyncChainModules = {
|
|
11
14
|
config: ChainForkConfig;
|
|
15
|
+
custodyConfig: CustodyConfig;
|
|
12
16
|
logger: Logger;
|
|
17
|
+
metrics: Metrics | null;
|
|
13
18
|
};
|
|
14
19
|
export type SyncChainFns = {
|
|
15
20
|
/**
|
|
@@ -18,12 +23,14 @@ export type SyncChainFns = {
|
|
|
18
23
|
*/
|
|
19
24
|
processChainSegment: (blocks: BlockInput[], syncType: RangeSyncType) => Promise<void>;
|
|
20
25
|
/** Must download blocks, and validate their range */
|
|
21
|
-
downloadBeaconBlocksByRange: (peer:
|
|
26
|
+
downloadBeaconBlocksByRange: (peer: PeerSyncMeta, request: phase0.BeaconBlocksByRangeRequest, partialDownload: PartialDownload) => Promise<{
|
|
22
27
|
blocks: BlockInput[];
|
|
23
28
|
pendingDataColumns: null | number[];
|
|
24
29
|
}>;
|
|
25
30
|
/** Report peer for negative actions. Decouples from the full network instance */
|
|
26
31
|
reportPeer: (peer: PeerIdStr, action: PeerAction, actionName: string) => void;
|
|
32
|
+
/** Gets current peer custodyColumns and earliestAvailableSlot */
|
|
33
|
+
getConnectedPeerSyncMeta: (peerId: string) => PeerSyncMeta;
|
|
27
34
|
/** Hook called when Chain state completes */
|
|
28
35
|
onEnd: (err: Error | null, target: ChainTarget | null) => void;
|
|
29
36
|
};
|
|
@@ -81,14 +88,16 @@ export declare class SyncChain {
|
|
|
81
88
|
private readonly processChainSegment;
|
|
82
89
|
private readonly downloadBeaconBlocksByRange;
|
|
83
90
|
private readonly reportPeer;
|
|
91
|
+
private readonly getConnectedPeerSyncMeta;
|
|
84
92
|
/** AsyncIterable that guarantees processChainSegment is run only at once at anytime */
|
|
85
93
|
private readonly batchProcessor;
|
|
86
94
|
/** Sorted map of batches undergoing some kind of processing. */
|
|
87
95
|
private readonly batches;
|
|
88
96
|
private readonly peerset;
|
|
89
|
-
private readonly peersetCustody;
|
|
90
97
|
private readonly logger;
|
|
91
98
|
private readonly config;
|
|
99
|
+
private readonly custodyConfig;
|
|
100
|
+
private readonly metrics;
|
|
92
101
|
constructor(initialBatchEpoch: Epoch, initialTarget: ChainTarget, syncType: RangeSyncType, fns: SyncChainFns, modules: SyncChainModules);
|
|
93
102
|
/**
|
|
94
103
|
* Start syncing a new chain or an old one with an existing peer list
|
|
@@ -106,7 +115,7 @@ export declare class SyncChain {
|
|
|
106
115
|
/**
|
|
107
116
|
* Add peer to the chain and request batches if active
|
|
108
117
|
*/
|
|
109
|
-
addPeer(peer: PeerIdStr, target: ChainTarget
|
|
118
|
+
addPeer(peer: PeerIdStr, target: ChainTarget): void;
|
|
110
119
|
/**
|
|
111
120
|
* Returns true if the peer existed and has been removed
|
|
112
121
|
* NOTE: The RangeSync will take care of deleting the SyncChain if peers = 0
|
|
@@ -159,6 +168,7 @@ export declare class SyncChain {
|
|
|
159
168
|
* Drops any batches previous to `newLatestValidatedEpoch` and updates the chain boundaries
|
|
160
169
|
*/
|
|
161
170
|
private advanceChain;
|
|
171
|
+
private scrapeMetrics;
|
|
162
172
|
}
|
|
163
173
|
/**
|
|
164
174
|
* Enforces that a report peer action is defined for all BatchErrorCode exhaustively.
|
package/lib/sync/range/chain.js
CHANGED
|
@@ -5,8 +5,9 @@ import { PeerAction, prettyPrintPeerIdStr } from "../../network/index.js";
|
|
|
5
5
|
import { ItTrigger } from "../../util/itTrigger.js";
|
|
6
6
|
import { wrapError } from "../../util/wrapError.js";
|
|
7
7
|
import { BATCH_BUFFER_SIZE, EPOCHS_PER_BATCH } from "../constants.js";
|
|
8
|
+
import { RangeSyncType } from "../utils/remoteSyncType.js";
|
|
8
9
|
import { Batch, BatchError, BatchErrorCode, BatchStatus } from "./batch.js";
|
|
9
|
-
import { ChainPeersBalancer, batchStartEpochIsAfterSlot,
|
|
10
|
+
import { ChainPeersBalancer, batchStartEpochIsAfterSlot, computeHighestTarget, getBatchSlotRange, getNextBatchToProcess, isSyncChainDone, toArr, toBeDownloadedStartEpoch, validateBatchesStatus, } from "./utils/index.js";
|
|
10
11
|
export class SyncChainStartError extends Error {
|
|
11
12
|
}
|
|
12
13
|
export var SyncChainStatus;
|
|
@@ -33,8 +34,6 @@ export class SyncChain {
|
|
|
33
34
|
/** Sorted map of batches undergoing some kind of processing. */
|
|
34
35
|
this.batches = new Map();
|
|
35
36
|
this.peerset = new Map();
|
|
36
|
-
// TODO: @matthewkeil check if this needs to be updated for custody groups
|
|
37
|
-
this.peersetCustody = new Map();
|
|
38
37
|
this.firstBatchEpoch = initialBatchEpoch;
|
|
39
38
|
this.lastEpochWithProcessBlocks = initialBatchEpoch;
|
|
40
39
|
this.target = initialTarget;
|
|
@@ -42,9 +41,15 @@ export class SyncChain {
|
|
|
42
41
|
this.processChainSegment = fns.processChainSegment;
|
|
43
42
|
this.downloadBeaconBlocksByRange = fns.downloadBeaconBlocksByRange;
|
|
44
43
|
this.reportPeer = fns.reportPeer;
|
|
44
|
+
this.getConnectedPeerSyncMeta = fns.getConnectedPeerSyncMeta;
|
|
45
45
|
this.config = modules.config;
|
|
46
|
+
this.custodyConfig = modules.custodyConfig;
|
|
46
47
|
this.logger = modules.logger;
|
|
48
|
+
this.metrics = modules.metrics;
|
|
47
49
|
this.logId = `${syncType}`;
|
|
50
|
+
if (this.metrics != null) {
|
|
51
|
+
this.metrics.syncRange.headSyncPeers.addCollect(() => this.scrapeMetrics(this.metrics));
|
|
52
|
+
}
|
|
48
53
|
// Trigger event on parent class
|
|
49
54
|
this.sync().then(() => fns.onEnd(null, this.target), (e) => fns.onEnd(e, null));
|
|
50
55
|
}
|
|
@@ -92,10 +97,8 @@ export class SyncChain {
|
|
|
92
97
|
/**
|
|
93
98
|
* Add peer to the chain and request batches if active
|
|
94
99
|
*/
|
|
95
|
-
|
|
96
|
-
addPeer(peer, target, custodyColumns, clientAgent) {
|
|
100
|
+
addPeer(peer, target) {
|
|
97
101
|
this.peerset.set(peer, target);
|
|
98
|
-
this.peersetCustody.set(peer, { custodyColumns, clientAgent });
|
|
99
102
|
this.computeTarget();
|
|
100
103
|
this.triggerBatchDownloader();
|
|
101
104
|
}
|
|
@@ -145,7 +148,7 @@ export class SyncChain {
|
|
|
145
148
|
computeTarget() {
|
|
146
149
|
if (this.peerset.size > 0) {
|
|
147
150
|
const targets = Array.from(this.peerset.values());
|
|
148
|
-
this.target =
|
|
151
|
+
this.target = computeHighestTarget(targets);
|
|
149
152
|
}
|
|
150
153
|
}
|
|
151
154
|
/**
|
|
@@ -204,7 +207,7 @@ export class SyncChain {
|
|
|
204
207
|
*/
|
|
205
208
|
triggerBatchDownloader() {
|
|
206
209
|
try {
|
|
207
|
-
this.requestBatches(
|
|
210
|
+
this.requestBatches();
|
|
208
211
|
}
|
|
209
212
|
catch (e) {
|
|
210
213
|
// bubble the error up to the main async iterable loop
|
|
@@ -215,11 +218,20 @@ export class SyncChain {
|
|
|
215
218
|
* Attempts to request the next required batches from the peer pool if the chain is syncing.
|
|
216
219
|
* It will exhaust the peer pool and left over batches until the batch buffer is reached.
|
|
217
220
|
*/
|
|
218
|
-
requestBatches(
|
|
221
|
+
requestBatches() {
|
|
219
222
|
if (this.status !== SyncChainStatus.Syncing) {
|
|
220
223
|
return;
|
|
221
224
|
}
|
|
222
|
-
const
|
|
225
|
+
const peersSyncInfo = [];
|
|
226
|
+
for (const [peerId, target] of this.peerset.entries()) {
|
|
227
|
+
try {
|
|
228
|
+
peersSyncInfo.push({ ...this.getConnectedPeerSyncMeta(peerId), target });
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
this.logger.debug("Failed to get peer sync meta", { peerId }, e);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const peerBalancer = new ChainPeersBalancer(peersSyncInfo, toArr(this.batches), this.custodyConfig);
|
|
223
235
|
// Retry download of existing batches
|
|
224
236
|
for (const batch of this.batches.values()) {
|
|
225
237
|
if (batch.state.status !== BatchStatus.AwaitingDownload) {
|
|
@@ -231,12 +243,15 @@ export class SyncChain {
|
|
|
231
243
|
}
|
|
232
244
|
}
|
|
233
245
|
// find the next pending batch and request it from the peer
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
246
|
+
let batch = this.includeNextBatch();
|
|
247
|
+
while (batch != null) {
|
|
248
|
+
const peer = peerBalancer.idlePeerForBatch(batch);
|
|
249
|
+
if (!peer) {
|
|
250
|
+
// if there is no peer available, we stop requesting batches because next batches will have greater startEpoch with the same sampling groups
|
|
237
251
|
break;
|
|
238
252
|
}
|
|
239
253
|
void this.sendBatch(batch, peer);
|
|
254
|
+
batch = this.includeNextBatch();
|
|
240
255
|
}
|
|
241
256
|
}
|
|
242
257
|
/**
|
|
@@ -271,11 +286,15 @@ export class SyncChain {
|
|
|
271
286
|
* Requests the batch assigned to the given id from a given peer.
|
|
272
287
|
*/
|
|
273
288
|
async sendBatch(batch, peer) {
|
|
289
|
+
this.logger.verbose("Downloading batch", {
|
|
290
|
+
id: this.logId,
|
|
291
|
+
...batch.getMetadata(),
|
|
292
|
+
peer: prettyPrintPeerIdStr(peer.peerId),
|
|
293
|
+
});
|
|
274
294
|
try {
|
|
275
|
-
const partialDownload = batch.startDownloading(peer);
|
|
276
|
-
const peerClient = this.peersetCustody.get(peer)?.clientAgent ?? "unknown";
|
|
295
|
+
const partialDownload = batch.startDownloading(peer.peerId);
|
|
277
296
|
// wrapError ensures to never call both batch success() and batch error()
|
|
278
|
-
const res = await wrapError(this.downloadBeaconBlocksByRange(peer, batch.request, partialDownload
|
|
297
|
+
const res = await wrapError(this.downloadBeaconBlocksByRange(peer, batch.request, partialDownload));
|
|
279
298
|
if (!res.err) {
|
|
280
299
|
const blocks = batch.downloadingSuccess(res.result);
|
|
281
300
|
if (blocks !== null) {
|
|
@@ -307,16 +326,23 @@ export class SyncChain {
|
|
|
307
326
|
id: this.logId,
|
|
308
327
|
...batch.getMetadata(),
|
|
309
328
|
...downloadInfo,
|
|
310
|
-
peer: prettyPrintPeerIdStr(peer),
|
|
329
|
+
peer: prettyPrintPeerIdStr(peer.peerId),
|
|
311
330
|
});
|
|
331
|
+
this.triggerBatchProcessor();
|
|
312
332
|
}
|
|
313
333
|
else {
|
|
314
|
-
|
|
334
|
+
const pendingDataColumns = res.result.pendingDataColumns?.join(",");
|
|
335
|
+
this.logger.debug("Partially downloaded batch", {
|
|
336
|
+
id: this.logId,
|
|
337
|
+
...batch.getMetadata(),
|
|
338
|
+
pendingDataColumns,
|
|
339
|
+
peer: peer.peerId,
|
|
340
|
+
});
|
|
341
|
+
// the flow will continue to call triggerBatchDownloader() below
|
|
315
342
|
}
|
|
316
|
-
this.triggerBatchProcessor();
|
|
317
343
|
}
|
|
318
344
|
else {
|
|
319
|
-
this.logger.verbose("Batch download error", { id: this.logId, ...batch.getMetadata(), peer: prettyPrintPeerIdStr(peer) }, res.err);
|
|
345
|
+
this.logger.verbose("Batch download error", { id: this.logId, ...batch.getMetadata(), peer: prettyPrintPeerIdStr(peer.peerId) }, res.err);
|
|
320
346
|
batch.downloadingError(); // Throws after MAX_DOWNLOAD_ATTEMPTS
|
|
321
347
|
}
|
|
322
348
|
// Preemptively request more blocks from peers whilst we process current blocks
|
|
@@ -397,6 +423,32 @@ export class SyncChain {
|
|
|
397
423
|
}
|
|
398
424
|
this.lastEpochWithProcessBlocks = newLastEpochWithProcessBlocks;
|
|
399
425
|
}
|
|
426
|
+
scrapeMetrics(metrics) {
|
|
427
|
+
const syncPeersMetric = this.syncType === RangeSyncType.Finalized
|
|
428
|
+
? metrics.syncRange.finalizedSyncPeers
|
|
429
|
+
: metrics.syncRange.headSyncPeers;
|
|
430
|
+
const peersSyncMeta = new Map();
|
|
431
|
+
for (const peerId of this.peerset.keys()) {
|
|
432
|
+
try {
|
|
433
|
+
peersSyncMeta.set(peerId, this.getConnectedPeerSyncMeta(peerId));
|
|
434
|
+
}
|
|
435
|
+
catch (_) {
|
|
436
|
+
// ignore for metric as peer could be disconnected
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
const peersByColumnIndex = new Map();
|
|
440
|
+
for (const [columnIndex, column] of this.custodyConfig.sampledColumns.entries()) {
|
|
441
|
+
for (const { custodyGroups } of peersSyncMeta.values()) {
|
|
442
|
+
if (custodyGroups.includes(column)) {
|
|
443
|
+
peersByColumnIndex.set(columnIndex, (peersByColumnIndex.get(columnIndex) ?? 0) + 1);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
for (let columnIndex = 0; columnIndex < this.custodyConfig.sampledColumns.length; columnIndex++) {
|
|
448
|
+
const peerCount = peersByColumnIndex.get(columnIndex) ?? 0;
|
|
449
|
+
syncPeersMetric.set({ columnIndex }, peerCount);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
400
452
|
}
|
|
401
453
|
/**
|
|
402
454
|
* Enforces that a report peer action is defined for all BatchErrorCode exhaustively.
|