@lodestar/beacon-node 1.36.0-dev.793f92c091 → 1.36.0-dev.b53af9d0a5
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/config/constants.d.ts +4 -2
- package/lib/api/impl/config/constants.d.ts.map +1 -1
- package/lib/api/impl/config/constants.js +6 -3
- package/lib/api/impl/config/constants.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +2 -2
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +9 -0
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +24 -0
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +7 -0
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +25 -4
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
- package/lib/chain/beaconProposerCache.d.ts +3 -0
- package/lib/chain/beaconProposerCache.d.ts.map +1 -1
- package/lib/chain/beaconProposerCache.js +4 -6
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/chain.js +2 -2
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +7 -0
- package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.js +1 -0
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
- package/lib/chain/errors/voluntaryExitError.d.ts +16 -2
- package/lib/chain/errors/voluntaryExitError.d.ts.map +1 -1
- package/lib/chain/errors/voluntaryExitError.js +22 -1
- package/lib/chain/errors/voluntaryExitError.js.map +1 -1
- package/lib/chain/lightClient/index.d.ts +3 -0
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +24 -13
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.d.ts +3 -1
- package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +4 -3
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts.map +1 -1
- package/lib/chain/validation/attestation.js +6 -7
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/block.d.ts.map +1 -1
- package/lib/chain/validation/block.js +1 -2
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +14 -3
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.d.ts.map +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.js +1 -2
- package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +5 -4
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/constants/constants.d.ts +0 -5
- package/lib/constants/constants.d.ts.map +1 -1
- package/lib/constants/constants.js +0 -5
- package/lib/constants/constants.js.map +1 -1
- package/lib/constants/network.d.ts +0 -14
- package/lib/constants/network.d.ts.map +1 -1
- package/lib/constants/network.js +0 -15
- package/lib/constants/network.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +11 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +18 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/discv5/utils.d.ts.map +1 -1
- package/lib/network/discv5/utils.js +1 -2
- package/lib/network/discv5/utils.js.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.js +1 -7
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +1 -0
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +8 -6
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +5 -5
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +4 -4
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
- package/lib/network/subnets/attnetsService.d.ts +1 -1
- package/lib/network/subnets/attnetsService.js +6 -6
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/util.d.ts +3 -2
- package/lib/network/subnets/util.d.ts.map +1 -1
- package/lib/network/subnets/util.js +6 -6
- package/lib/network/subnets/util.js.map +1 -1
- package/lib/sync/utils/remoteSyncType.js +2 -2
- package/lib/sync/utils/remoteSyncType.js.map +1 -1
- package/lib/util/clock.d.ts.map +1 -1
- package/lib/util/clock.js +3 -4
- package/lib/util/clock.js.map +1 -1
- package/package.json +14 -14
- package/src/api/impl/config/constants.ts +10 -4
- package/src/api/impl/validator/index.ts +5 -2
- package/src/chain/archiveStore/archiveStore.ts +27 -0
- package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +27 -4
- package/src/chain/beaconProposerCache.ts +4 -8
- package/src/chain/chain.ts +2 -2
- package/src/chain/errors/dataColumnSidecarError.ts +8 -0
- package/src/chain/errors/voluntaryExitError.ts +30 -2
- package/src/chain/lightClient/index.ts +26 -12
- package/src/chain/opPools/syncContributionAndProofPool.ts +3 -2
- package/src/chain/validation/attestation.ts +6 -7
- package/src/chain/validation/block.ts +1 -2
- package/src/chain/validation/dataColumnSidecar.ts +21 -4
- package/src/chain/validation/lightClientOptimisticUpdate.ts +3 -2
- package/src/chain/validation/voluntaryExit.ts +14 -4
- package/src/constants/constants.ts +0 -6
- package/src/constants/network.ts +0 -19
- package/src/metrics/metrics/lodestar.ts +21 -0
- package/src/network/discv5/utils.ts +1 -2
- package/src/network/gossip/gossipsub.ts +1 -10
- package/src/network/network.ts +1 -0
- package/src/network/processor/gossipHandlers.ts +10 -6
- package/src/network/reqresp/handlers/blobSidecarsByRange.ts +6 -6
- package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +5 -5
- package/src/network/subnets/attnetsService.ts +6 -6
- package/src/network/subnets/util.ts +12 -12
- package/src/sync/utils/remoteSyncType.ts +2 -2
- package/src/util/clock.ts +3 -4
|
@@ -6,7 +6,6 @@ import {BeaconConfig, ForkBoundary} from "@lodestar/config";
|
|
|
6
6
|
import {ATTESTATION_SUBNET_COUNT, SLOTS_PER_EPOCH, SYNC_COMMITTEE_SUBNET_COUNT} from "@lodestar/params";
|
|
7
7
|
import {SubnetID} from "@lodestar/types";
|
|
8
8
|
import {Logger, Map2d, Map2dArr} from "@lodestar/utils";
|
|
9
|
-
import {GOSSIP_MAX_SIZE, GOSSIP_MAX_SIZE_BELLATRIX} from "../../constants/network.js";
|
|
10
9
|
import {RegistryMetricCreator} from "../../metrics/index.js";
|
|
11
10
|
import {callInNextEventLoop} from "../../util/eventLoop.js";
|
|
12
11
|
import {NetworkEvent, NetworkEventBus, NetworkEventData} from "../events.js";
|
|
@@ -117,15 +116,7 @@ export class Eth2Gossipsub extends GossipSub {
|
|
|
117
116
|
fastMsgIdFn: fastMsgIdFn,
|
|
118
117
|
msgIdFn: msgIdFn.bind(msgIdFn, gossipTopicCache),
|
|
119
118
|
msgIdToStrFn: msgIdToStrFn,
|
|
120
|
-
|
|
121
|
-
// could only be an issue on outgoing payloads, its highly unlikely we will send out
|
|
122
|
-
// a chunk bigger than GOSSIP_MAX_SIZE pre merge even on mainnet network.
|
|
123
|
-
//
|
|
124
|
-
// TODO: figure out a way to dynamically transition to the size
|
|
125
|
-
dataTransform: new DataTransformSnappy(
|
|
126
|
-
gossipTopicCache,
|
|
127
|
-
Number.isFinite(config.BELLATRIX_FORK_EPOCH) ? GOSSIP_MAX_SIZE_BELLATRIX : GOSSIP_MAX_SIZE
|
|
128
|
-
),
|
|
119
|
+
dataTransform: new DataTransformSnappy(gossipTopicCache, config.MAX_PAYLOAD_SIZE),
|
|
129
120
|
metricsRegister: metricsRegister as MetricsRegister | null,
|
|
130
121
|
metricsTopicStrToLabel: metricsRegister
|
|
131
122
|
? getMetricsTopicStrToLabel(networkConfig, {disableLightClientServer: opts.disableLightClientServer ?? false})
|
package/src/network/network.ts
CHANGED
|
@@ -236,6 +236,7 @@ export class Network implements INetwork {
|
|
|
236
236
|
this.chain.emitter.off(routes.events.EventType.lightClientOptimisticUpdate, this.onLightClientOptimisticUpdate);
|
|
237
237
|
this.chain.emitter.off(ChainEvent.updateTargetCustodyGroupCount, this.onTargetGroupCountUpdated);
|
|
238
238
|
this.chain.emitter.off(ChainEvent.publishDataColumns, this.onPublishDataColumns);
|
|
239
|
+
this.chain.emitter.off(ChainEvent.publishBlobSidecars, this.onPublishBlobSidecars);
|
|
239
240
|
this.chain.emitter.off(ChainEvent.updateStatus, this.onUpdateStatus);
|
|
240
241
|
await this.core.close();
|
|
241
242
|
|
|
@@ -556,6 +556,16 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
556
556
|
metrics?.dataColumns.elapsedTimeTillReceived.observe({receivedOrder: receivedColumns}, delaySec);
|
|
557
557
|
break;
|
|
558
558
|
}
|
|
559
|
+
|
|
560
|
+
if (!blockInput.hasAllData()) {
|
|
561
|
+
// immediately attempt fetch of data columns from execution engine
|
|
562
|
+
chain.getBlobsTracker.triggerGetBlobs(blockInput);
|
|
563
|
+
// if we've received at least half of the columns, trigger reconstruction of the rest
|
|
564
|
+
if (blockInput.columnCount >= NUMBER_OF_COLUMNS / 2) {
|
|
565
|
+
chain.columnReconstructionTracker.triggerColumnReconstruction(blockInput);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
559
569
|
if (!blockInput.hasBlockAndAllData()) {
|
|
560
570
|
const cutoffTimeMs = getCutoffTimeMs(chain, dataColumnSlot, BLOCK_AVAILABILITY_CUTOFF_MS);
|
|
561
571
|
chain.logger.debug("Received gossip data column, waiting for full data availability", {
|
|
@@ -578,12 +588,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
|
|
|
578
588
|
source: BlockInputSource.gossip,
|
|
579
589
|
});
|
|
580
590
|
});
|
|
581
|
-
// immediately attempt fetch of data columns from execution engine
|
|
582
|
-
chain.getBlobsTracker.triggerGetBlobs(blockInput);
|
|
583
|
-
// if we've received at least half of the columns, trigger reconstruction of the rest
|
|
584
|
-
if (blockInput.columnCount >= NUMBER_OF_COLUMNS / 2) {
|
|
585
|
-
chain.columnReconstructionTracker.triggerColumnReconstruction(blockInput);
|
|
586
|
-
}
|
|
587
591
|
}
|
|
588
592
|
},
|
|
589
593
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ChainConfig} from "@lodestar/config";
|
|
2
|
-
import {
|
|
2
|
+
import {BLOB_SIDECAR_FIXED_SIZE, GENESIS_SLOT} from "@lodestar/params";
|
|
3
3
|
import {RespStatus, ResponseError, ResponseOutgoing} from "@lodestar/reqresp";
|
|
4
4
|
import {computeEpochAtSlot} from "@lodestar/state-transition";
|
|
5
5
|
import {Slot, deneb} from "@lodestar/types";
|
|
@@ -71,17 +71,17 @@ export function* iterateBlobBytesFromWrapper(
|
|
|
71
71
|
blockSlot: Slot
|
|
72
72
|
): Iterable<ResponseOutgoing> {
|
|
73
73
|
const allBlobSideCarsBytes = blobSideCarsBytesWrapped.slice(BLOB_SIDECARS_IN_WRAPPER_INDEX);
|
|
74
|
-
const blobsLen = allBlobSideCarsBytes.length /
|
|
74
|
+
const blobsLen = allBlobSideCarsBytes.length / BLOB_SIDECAR_FIXED_SIZE;
|
|
75
75
|
|
|
76
76
|
for (let index = 0; index < blobsLen; index++) {
|
|
77
77
|
const blobSideCarBytes = allBlobSideCarsBytes.slice(
|
|
78
|
-
index *
|
|
79
|
-
(index + 1) *
|
|
78
|
+
index * BLOB_SIDECAR_FIXED_SIZE,
|
|
79
|
+
(index + 1) * BLOB_SIDECAR_FIXED_SIZE
|
|
80
80
|
);
|
|
81
|
-
if (blobSideCarBytes.length !==
|
|
81
|
+
if (blobSideCarBytes.length !== BLOB_SIDECAR_FIXED_SIZE) {
|
|
82
82
|
throw new ResponseError(
|
|
83
83
|
RespStatus.SERVER_ERROR,
|
|
84
|
-
`Invalid blobSidecar index=${index} bytes length=${blobSideCarBytes.length} expected=${
|
|
84
|
+
`Invalid blobSidecar index=${index} bytes length=${blobSideCarBytes.length} expected=${BLOB_SIDECAR_FIXED_SIZE} for slot ${blockSlot} blobsLen=${blobsLen}`
|
|
85
85
|
);
|
|
86
86
|
}
|
|
87
87
|
yield {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {BLOB_SIDECAR_FIXED_SIZE} from "@lodestar/params";
|
|
2
2
|
import {RespStatus, ResponseError, ResponseOutgoing} from "@lodestar/reqresp";
|
|
3
3
|
import {computeEpochAtSlot} from "@lodestar/state-transition";
|
|
4
4
|
import {RootHex} from "@lodestar/types";
|
|
@@ -45,12 +45,12 @@ export async function* onBlobSidecarsByRoot(
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
const blobSidecarBytes = lastFetchedSideCars.bytes.slice(
|
|
48
|
-
index *
|
|
49
|
-
(index + 1) *
|
|
48
|
+
index * BLOB_SIDECAR_FIXED_SIZE,
|
|
49
|
+
(index + 1) * BLOB_SIDECAR_FIXED_SIZE
|
|
50
50
|
);
|
|
51
|
-
if (blobSidecarBytes.length !==
|
|
51
|
+
if (blobSidecarBytes.length !== BLOB_SIDECAR_FIXED_SIZE) {
|
|
52
52
|
throw Error(
|
|
53
|
-
`Inconsistent state, blobSidecar blockRoot=${blockRootHex} index=${index} blobSidecarBytes=${blobSidecarBytes.length} expected=${
|
|
53
|
+
`Inconsistent state, blobSidecar blockRoot=${blockRootHex} index=${index} blobSidecarBytes=${blobSidecarBytes.length} expected=${BLOB_SIDECAR_FIXED_SIZE}`
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {BeaconConfig, ForkBoundary} from "@lodestar/config";
|
|
2
|
-
import {ATTESTATION_SUBNET_COUNT,
|
|
2
|
+
import {ATTESTATION_SUBNET_COUNT, SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
3
3
|
import {computeEpochAtSlot} from "@lodestar/state-transition";
|
|
4
4
|
import {Epoch, Slot, SubnetID, ssz} from "@lodestar/types";
|
|
5
5
|
import {Logger, MapDef} from "@lodestar/utils";
|
|
@@ -92,8 +92,8 @@ export class AttnetsService implements IAttnetsService {
|
|
|
92
92
|
const shortLivedSubnets = this.committeeSubnets.getActiveTtl(this.clock.currentSlot);
|
|
93
93
|
|
|
94
94
|
const longLivedSubscriptionsToSlot =
|
|
95
|
-
(Math.floor(this.clock.currentEpoch /
|
|
96
|
-
|
|
95
|
+
(Math.floor(this.clock.currentEpoch / this.config.EPOCHS_PER_SUBNET_SUBSCRIPTION) + 1) *
|
|
96
|
+
this.config.EPOCHS_PER_SUBNET_SUBSCRIPTION *
|
|
97
97
|
SLOTS_PER_EPOCH;
|
|
98
98
|
const longLivedSubnets = Array.from(this.longLivedSubscriptions).map((subnet) => ({
|
|
99
99
|
subnet,
|
|
@@ -234,11 +234,11 @@ export class AttnetsService implements IAttnetsService {
|
|
|
234
234
|
|
|
235
235
|
/**
|
|
236
236
|
* Run per epoch, clean-up operations that are not urgent
|
|
237
|
-
* Subscribe to new random subnets every
|
|
237
|
+
* Subscribe to new random subnets every EPOCHS_PER_SUBNET_SUBSCRIPTION epochs
|
|
238
238
|
*/
|
|
239
239
|
private onEpoch = (epoch: Epoch): void => {
|
|
240
240
|
try {
|
|
241
|
-
if (epoch %
|
|
241
|
+
if (epoch % this.config.EPOCHS_PER_SUBNET_SUBSCRIPTION === 0) {
|
|
242
242
|
this.recomputeLongLivedSubnets();
|
|
243
243
|
}
|
|
244
244
|
} catch (e) {
|
|
@@ -253,7 +253,7 @@ export class AttnetsService implements IAttnetsService {
|
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
const oldSubnets = this.longLivedSubscriptions;
|
|
256
|
-
const newSubnets = computeSubscribedSubnet(this.nodeId, this.clock.currentEpoch);
|
|
256
|
+
const newSubnets = computeSubscribedSubnet(this.config, this.nodeId, this.clock.currentEpoch);
|
|
257
257
|
this.logger.verbose("Recomputing long-lived subscriptions", {
|
|
258
258
|
epoch: this.clock.currentEpoch,
|
|
259
259
|
oldSubnets: Array.from(oldSubnets).join(","),
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import {digest} from "@chainsafe/as-sha256";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
ATTESTATION_SUBNET_PREFIX_BITS,
|
|
5
|
-
EPOCHS_PER_SUBNET_SUBSCRIPTION,
|
|
6
|
-
NODE_ID_BITS,
|
|
7
|
-
SUBNETS_PER_NODE,
|
|
8
|
-
} from "@lodestar/params";
|
|
2
|
+
import {ChainConfig} from "@lodestar/config";
|
|
3
|
+
import {ATTESTATION_SUBNET_COUNT, ATTESTATION_SUBNET_PREFIX_BITS, NODE_ID_BITS} from "@lodestar/params";
|
|
9
4
|
import {computeShuffledIndex} from "@lodestar/state-transition";
|
|
10
5
|
import {Epoch, ssz} from "@lodestar/types";
|
|
11
6
|
import {NodeId} from "./interface.js";
|
|
@@ -13,10 +8,10 @@ import {NodeId} from "./interface.js";
|
|
|
13
8
|
/**
|
|
14
9
|
* Spec https://github.com/ethereum/consensus-specs/blob/v1.4.0-alpha.3/specs/phase0/p2p-interface.md
|
|
15
10
|
*/
|
|
16
|
-
export function computeSubscribedSubnet(nodeId: NodeId, epoch: Epoch): number[] {
|
|
11
|
+
export function computeSubscribedSubnet(config: ChainConfig, nodeId: NodeId, epoch: Epoch): number[] {
|
|
17
12
|
const subnets: number[] = [];
|
|
18
|
-
for (let index = 0; index < SUBNETS_PER_NODE; index++) {
|
|
19
|
-
subnets.push(computeSubscribedSubnetByIndex(nodeId, epoch, index));
|
|
13
|
+
for (let index = 0; index < config.SUBNETS_PER_NODE; index++) {
|
|
14
|
+
subnets.push(computeSubscribedSubnetByIndex(config, nodeId, epoch, index));
|
|
20
15
|
}
|
|
21
16
|
return subnets;
|
|
22
17
|
}
|
|
@@ -24,11 +19,16 @@ export function computeSubscribedSubnet(nodeId: NodeId, epoch: Epoch): number[]
|
|
|
24
19
|
/**
|
|
25
20
|
* Spec https://github.com/ethereum/consensus-specs/blob/v1.4.0-alpha.3/specs/phase0/p2p-interface.md
|
|
26
21
|
*/
|
|
27
|
-
export function computeSubscribedSubnetByIndex(
|
|
22
|
+
export function computeSubscribedSubnetByIndex(
|
|
23
|
+
config: ChainConfig,
|
|
24
|
+
nodeId: NodeId,
|
|
25
|
+
epoch: Epoch,
|
|
26
|
+
index: number
|
|
27
|
+
): number {
|
|
28
28
|
const nodeIdPrefix = getNodeIdPrefix(nodeId);
|
|
29
29
|
const nodeOffset = getNodeOffset(nodeId);
|
|
30
30
|
const permutationSeed = digest(
|
|
31
|
-
ssz.UintNum64.serialize(Math.floor((epoch + nodeOffset) / EPOCHS_PER_SUBNET_SUBSCRIPTION))
|
|
31
|
+
ssz.UintNum64.serialize(Math.floor((epoch + nodeOffset) / config.EPOCHS_PER_SUBNET_SUBSCRIPTION))
|
|
32
32
|
);
|
|
33
33
|
const permutatedPrefix = computeShuffledIndex(nodeIdPrefix, 1 << ATTESTATION_SUBNET_PREFIX_BITS, permutationSeed);
|
|
34
34
|
return (permutatedPrefix + index) % ATTESTATION_SUBNET_COUNT;
|
|
@@ -134,8 +134,8 @@ export function getRangeSyncTarget(
|
|
|
134
134
|
return {
|
|
135
135
|
syncType: RangeSyncType.Head,
|
|
136
136
|
// The new peer has the same finalized (earlier filters should prevent a peer with an
|
|
137
|
-
// earlier finalized chain from reaching here).
|
|
138
|
-
startEpoch:
|
|
137
|
+
// earlier finalized chain from reaching here) and local head will always be >= local finalized.
|
|
138
|
+
startEpoch: computeEpochAtSlot(local.headSlot),
|
|
139
139
|
target: {
|
|
140
140
|
slot: remote.headSlot,
|
|
141
141
|
root: remote.headRoot,
|
package/src/util/clock.ts
CHANGED
|
@@ -4,7 +4,6 @@ import {ChainForkConfig} from "@lodestar/config";
|
|
|
4
4
|
import {computeEpochAtSlot, computeTimeAtSlot, getCurrentSlot} from "@lodestar/state-transition";
|
|
5
5
|
import type {Epoch, Slot} from "@lodestar/types";
|
|
6
6
|
import {ErrorAborted} from "@lodestar/utils";
|
|
7
|
-
import {MAXIMUM_GOSSIP_CLOCK_DISPARITY} from "../constants/constants.js";
|
|
8
7
|
|
|
9
8
|
export enum ClockEvent {
|
|
10
9
|
/**
|
|
@@ -101,7 +100,7 @@ export class Clock extends EventEmitter implements IClock {
|
|
|
101
100
|
get currentSlotWithGossipDisparity(): Slot {
|
|
102
101
|
const currentSlot = this.currentSlot;
|
|
103
102
|
const nextSlotTime = computeTimeAtSlot(this.config, currentSlot + 1, this.genesisTime) * 1000;
|
|
104
|
-
return nextSlotTime - Date.now() < MAXIMUM_GOSSIP_CLOCK_DISPARITY ? currentSlot + 1 : currentSlot;
|
|
103
|
+
return nextSlotTime - Date.now() < this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY ? currentSlot + 1 : currentSlot;
|
|
105
104
|
}
|
|
106
105
|
|
|
107
106
|
get currentEpoch(): Epoch {
|
|
@@ -130,12 +129,12 @@ export class Clock extends EventEmitter implements IClock {
|
|
|
130
129
|
}
|
|
131
130
|
const nextSlotTime = computeTimeAtSlot(this.config, currentSlot + 1, this.genesisTime) * 1000;
|
|
132
131
|
// we're too close to next slot, accept next slot
|
|
133
|
-
if (nextSlotTime - Date.now() < MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
|
|
132
|
+
if (nextSlotTime - Date.now() < this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
|
|
134
133
|
return slot === currentSlot + 1;
|
|
135
134
|
}
|
|
136
135
|
const currentSlotTime = computeTimeAtSlot(this.config, currentSlot, this.genesisTime) * 1000;
|
|
137
136
|
// we've just passed the current slot, accept previous slot
|
|
138
|
-
if (Date.now() - currentSlotTime < MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
|
|
137
|
+
if (Date.now() - currentSlotTime < this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
|
|
139
138
|
return slot === currentSlot - 1;
|
|
140
139
|
}
|
|
141
140
|
return false;
|