@lodestar/beacon-node 1.41.0 → 1.42.0-dev.4118b5b440
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.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +35 -16
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +2 -2
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +6 -2
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +0 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +0 -9
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/interface.d.ts +4 -4
- package/lib/chain/archiveStore/interface.d.ts.map +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +4 -1
- package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +38 -0
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/blockInput/types.d.ts +4 -3
- package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/types.js +1 -0
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +29 -9
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +48 -0
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
- package/lib/chain/blocks/importExecutionPayload.js +159 -0
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts +3 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
- package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +80 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +248 -0
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +29 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
- package/lib/chain/blocks/types.d.ts +7 -0
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
- package/lib/chain/chain.d.ts +10 -5
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +44 -10
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +0 -10
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/interface.d.ts +8 -5
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/opPools/utils.js +1 -1
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +6 -2
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js +6 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/errors.d.ts +11 -1
- package/lib/chain/regen/errors.d.ts.map +1 -1
- package/lib/chain/regen/errors.js +2 -0
- package/lib/chain/regen/errors.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +14 -6
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +2 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +11 -6
- package/lib/chain/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js +40 -8
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +5 -0
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +33 -6
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +1 -1
- package/lib/chain/seenCache/index.d.ts.map +1 -1
- package/lib/chain/seenCache/index.js +1 -1
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
- package/lib/chain/stateCache/datastore/db.d.ts +4 -5
- package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
- package/lib/chain/stateCache/datastore/db.js +32 -10
- package/lib/chain/stateCache/datastore/db.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.d.ts +1 -1
- package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +5 -5
- package/lib/chain/stateCache/datastore/file.js.map +1 -1
- package/lib/chain/stateCache/datastore/types.d.ts +1 -1
- package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +7 -4
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.js +8 -3
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +33 -14
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +217 -119
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +15 -8
- package/lib/chain/stateCache/types.d.ts.map +1 -1
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +30 -19
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.js +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.js +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
- package/lib/chain/validation/syncCommittee.d.ts +2 -2
- package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/syncCommittee.js +12 -11
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +2 -2
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +2 -1
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +4 -1
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +2 -2
- package/lib/metrics/metrics/lodestar.d.ts +40 -4
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +93 -15
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts.map +1 -1
- package/lib/network/gossip/encoding.js +15 -0
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/interface.d.ts +1 -1
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +1 -1
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +4 -4
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +15 -5
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +39 -9
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/index.d.ts +12 -7
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +99 -78
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +1 -1
- package/lib/sync/backfill/backfill.d.ts +1 -1
- package/lib/sync/backfill/backfill.js +1 -1
- package/lib/sync/constants.d.ts +1 -1
- package/lib/sync/constants.js +1 -1
- package/lib/sync/unknownBlock.d.ts +3 -9
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +8 -41
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/sszBytes.d.ts +4 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +69 -12
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -15
- package/src/api/impl/beacon/blocks/index.ts +36 -17
- package/src/api/impl/beacon/state/utils.ts +2 -2
- package/src/api/impl/validator/index.ts +8 -4
- package/src/chain/archiveStore/archiveStore.ts +0 -10
- package/src/chain/archiveStore/interface.ts +4 -4
- package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +8 -5
- package/src/chain/archiveStore/utils/archiveBlocks.ts +59 -1
- package/src/chain/blocks/blockInput/types.ts +4 -3
- package/src/chain/blocks/importBlock.ts +47 -8
- package/src/chain/blocks/importExecutionPayload.ts +241 -0
- package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
- package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +336 -0
- package/src/chain/blocks/payloadEnvelopeInput/types.ts +33 -0
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
- package/src/chain/blocks/types.ts +8 -0
- package/src/chain/blocks/verifyBlocksSignatures.ts +1 -1
- package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
- package/src/chain/chain.ts +60 -15
- package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
- package/src/chain/forkChoice/index.ts +0 -10
- package/src/chain/interface.ts +8 -5
- package/src/chain/opPools/utils.ts +1 -1
- package/src/chain/prepareNextSlot.ts +6 -2
- package/src/chain/produceBlock/computeNewStateRoot.ts +6 -1
- package/src/chain/produceBlock/produceBlockBody.ts +1 -1
- package/src/chain/regen/errors.ts +6 -1
- package/src/chain/regen/interface.ts +14 -6
- package/src/chain/regen/queued.ts +48 -12
- package/src/chain/regen/regen.ts +37 -7
- package/src/chain/seenCache/index.ts +1 -1
- package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
- package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
- package/src/chain/stateCache/datastore/db.ts +33 -10
- package/src/chain/stateCache/datastore/file.ts +6 -5
- package/src/chain/stateCache/datastore/types.ts +3 -2
- package/src/chain/stateCache/fifoBlockStateCache.ts +10 -4
- package/src/chain/stateCache/persistentCheckpointsCache.ts +248 -139
- package/src/chain/stateCache/types.ts +18 -8
- package/src/chain/validation/executionPayloadEnvelope.ts +38 -25
- package/src/chain/validation/lightClientFinalityUpdate.ts +1 -1
- package/src/chain/validation/lightClientOptimisticUpdate.ts +1 -1
- package/src/chain/validation/syncCommittee.ts +15 -14
- package/src/chain/validation/voluntaryExit.ts +2 -1
- package/src/chain/validatorMonitor.ts +11 -1
- package/src/execution/engine/interface.ts +2 -2
- package/src/metrics/metrics/lodestar.ts +100 -19
- package/src/network/gossip/encoding.ts +16 -0
- package/src/network/interface.ts +1 -1
- package/src/network/network.ts +4 -4
- package/src/network/processor/extractSlotRootFns.ts +19 -6
- package/src/network/processor/gossipHandlers.ts +45 -8
- package/src/network/processor/index.ts +110 -89
- package/src/network/reqresp/ReqRespBeaconNode.ts +1 -1
- package/src/sync/backfill/backfill.ts +1 -1
- package/src/sync/constants.ts +1 -1
- package/src/sync/unknownBlock.ts +10 -50
- package/src/util/sszBytes.ts +90 -10
- package/lib/chain/archiveStore/utils/archivePayloads.d.ts +0 -7
- package/lib/chain/archiveStore/utils/archivePayloads.d.ts.map +0 -1
- package/lib/chain/archiveStore/utils/archivePayloads.js +0 -10
- package/lib/chain/archiveStore/utils/archivePayloads.js.map +0 -1
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
- package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
- package/src/chain/archiveStore/utils/archivePayloads.ts +0 -15
- package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { routes } from "@lodestar/api";
|
|
2
2
|
import { ForkSeq } from "@lodestar/params";
|
|
3
3
|
import { computeStartSlotAtEpoch } from "@lodestar/state-transition";
|
|
4
|
-
import { MapDef, mapValues,
|
|
4
|
+
import { MapDef, mapValues, sleep } from "@lodestar/utils";
|
|
5
5
|
import { BlockInputSource } from "../../chain/blocks/blockInput/types.js";
|
|
6
6
|
import { ChainEvent } from "../../chain/emitter.js";
|
|
7
7
|
import { GossipErrorCode } from "../../chain/errors/gossipValidation.js";
|
|
@@ -50,14 +50,14 @@ const executeGossipWorkOrderObj = {
|
|
|
50
50
|
const executeGossipWorkOrder = Object.keys(executeGossipWorkOrderObj);
|
|
51
51
|
// TODO: Arbitrary constant, check metrics
|
|
52
52
|
const MAX_JOBS_SUBMITTED_PER_TICK = 128;
|
|
53
|
-
// How many
|
|
53
|
+
// How many gossip messages we keep before new ones get dropped.
|
|
54
54
|
const MAX_QUEUED_UNKNOWN_BLOCK_GOSSIP_OBJECTS = 16_384;
|
|
55
|
-
// We don't want to process too many
|
|
56
|
-
// As seen on mainnet,
|
|
55
|
+
// We don't want to process too many gossip messages in a single tick
|
|
56
|
+
// As seen on mainnet, gossip messages concurrency metric ranges from 1000 to 2000
|
|
57
57
|
// so make this constant a little bit conservative
|
|
58
|
-
const
|
|
58
|
+
const MAX_AWAITING_GOSSIP_OBJECTS_PER_TICK = 1024;
|
|
59
59
|
// Same motivation to JobItemQueue, we don't want to block the event loop
|
|
60
|
-
const
|
|
60
|
+
const AWAITING_GOSSIP_OBJECTS_YIELD_EVERY_MS = 50;
|
|
61
61
|
export { ReprocessRejectReason };
|
|
62
62
|
/**
|
|
63
63
|
* Reprocess reject reason for metrics
|
|
@@ -65,11 +65,11 @@ export { ReprocessRejectReason };
|
|
|
65
65
|
var ReprocessRejectReason;
|
|
66
66
|
(function (ReprocessRejectReason) {
|
|
67
67
|
/**
|
|
68
|
-
* There are too many
|
|
68
|
+
* There are too many gossip messages that have unknown block root.
|
|
69
69
|
*/
|
|
70
70
|
ReprocessRejectReason["reached_limit"] = "reached_limit";
|
|
71
71
|
/**
|
|
72
|
-
* The awaiting
|
|
72
|
+
* The awaiting gossip message is pruned per clock slot.
|
|
73
73
|
*/
|
|
74
74
|
ReprocessRejectReason["expired"] = "expired";
|
|
75
75
|
})(ReprocessRejectReason || (ReprocessRejectReason = {}));
|
|
@@ -99,7 +99,7 @@ var CannotAcceptWorkReason;
|
|
|
99
99
|
*
|
|
100
100
|
* ### PendingGossipsubMessage beacon_attestation example
|
|
101
101
|
*
|
|
102
|
-
* For
|
|
102
|
+
* For gossip messages, processing the message includes the steps:
|
|
103
103
|
* 1. Pre shuffling sync validation
|
|
104
104
|
* 2. Retrieve shuffling: async + goes into the regen queue and can be expensive
|
|
105
105
|
* 3. Pre sig validation sync validation
|
|
@@ -119,11 +119,10 @@ export class NetworkProcessor {
|
|
|
119
119
|
gossipQueues;
|
|
120
120
|
gossipTopicConcurrency;
|
|
121
121
|
extractBlockSlotRootFns = createExtractBlockSlotRootFns();
|
|
122
|
-
// we may not receive the block for Attestation and SignedAggregateAndProof messages, in that case PendingGossipsubMessage needs
|
|
122
|
+
// we may not receive the block for messages like Attestation and SignedAggregateAndProof messages, in that case PendingGossipsubMessage needs
|
|
123
123
|
// to be stored in this Map and reprocessed once the block comes
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
unknownRootsBySlot = new MapDef(() => new Set());
|
|
124
|
+
awaitingMessagesByBlockRoot;
|
|
125
|
+
unknownBlocksBySlot = new MapDef(() => new Set());
|
|
127
126
|
constructor(modules, opts) {
|
|
128
127
|
this.opts = opts;
|
|
129
128
|
const { chain, events, logger, metrics } = modules;
|
|
@@ -139,7 +138,7 @@ export class NetworkProcessor {
|
|
|
139
138
|
events.on(NetworkEvent.pendingGossipsubMessage, this.onPendingGossipsubMessage.bind(this));
|
|
140
139
|
this.chain.emitter.on(routes.events.EventType.block, this.onBlockProcessed.bind(this));
|
|
141
140
|
this.chain.clock.on(ClockEvent.slot, this.onClockSlot.bind(this));
|
|
142
|
-
this.
|
|
141
|
+
this.awaitingMessagesByBlockRoot = new MapDef(() => new Set());
|
|
143
142
|
// TODO: Implement queues and priorization for ReqResp incoming requests
|
|
144
143
|
// Listens to NetworkEvent.reqRespIncomingRequest event
|
|
145
144
|
if (metrics) {
|
|
@@ -149,7 +148,7 @@ export class NetworkProcessor {
|
|
|
149
148
|
metrics.gossipValidationQueue.keySize.set({ topic }, this.gossipQueues[topic].keySize);
|
|
150
149
|
metrics.gossipValidationQueue.concurrency.set({ topic }, this.gossipTopicConcurrency[topic]);
|
|
151
150
|
}
|
|
152
|
-
metrics.
|
|
151
|
+
metrics.awaitingBlockGossipMessages.countPerSlot.set(this.unknownBlockGossipsubMessagesCount);
|
|
153
152
|
// specific metric for beacon_attestation topic
|
|
154
153
|
metrics.gossipValidationQueue.keyAge.reset();
|
|
155
154
|
for (const ageMs of this.gossipQueues.beacon_attestation.getDataAgeMs()) {
|
|
@@ -178,111 +177,126 @@ export class NetworkProcessor {
|
|
|
178
177
|
}
|
|
179
178
|
return queue.getAll();
|
|
180
179
|
}
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
/**
|
|
181
|
+
* Search block via `ChainEvent.unknownBlockRoot` event
|
|
182
|
+
* Note that slot is not necessarily the same to the block's slot but it can be used for a good prune strategy.
|
|
183
|
+
* In the rare case, if 2 messages on 2 slots search for the same root (for example beacon_attestation) we may emit the same root twice but BlockInputSync should handle it well.
|
|
184
|
+
*/
|
|
185
|
+
searchUnknownBlock({ slot, root }, source, peer) {
|
|
186
|
+
if (this.chain.seenBlock(root) ||
|
|
187
|
+
this.awaitingMessagesByBlockRoot.has(root) ||
|
|
188
|
+
this.unknownBlocksBySlot.getOrDefault(slot).has(root)) {
|
|
183
189
|
return;
|
|
184
190
|
}
|
|
185
191
|
// Search for the unknown block
|
|
186
|
-
this.
|
|
192
|
+
this.unknownBlocksBySlot.getOrDefault(slot).add(root);
|
|
187
193
|
this.chain.emitter.emit(ChainEvent.unknownBlockRoot, { rootHex: root, peer, source });
|
|
188
194
|
}
|
|
189
195
|
onPendingGossipsubMessage(message) {
|
|
190
196
|
const topicType = message.topic.type;
|
|
191
197
|
const extractBlockSlotRootFn = this.extractBlockSlotRootFns[topicType];
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
//
|
|
197
|
-
if (
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
198
|
+
const slotRoot = extractBlockSlotRootFn
|
|
199
|
+
? extractBlockSlotRootFn(message.msg.data, message.topic.boundary.fork)
|
|
200
|
+
: null;
|
|
201
|
+
if (slotRoot === null) {
|
|
202
|
+
// some messages don't have slot and root
|
|
203
|
+
// if the msg.data is invalid, message will be rejected when deserializing data in later phase (gossipValidatorFn)
|
|
204
|
+
this.pushPendingGossipsubMessageToQueue(message);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// common check for all topics
|
|
208
|
+
// DOS protection: avoid processing messages that are too old
|
|
209
|
+
const { slot, root } = slotRoot;
|
|
210
|
+
const clockSlot = this.chain.clock.currentSlot;
|
|
211
|
+
const { fork } = message.topic.boundary;
|
|
212
|
+
let earliestPermissableSlot = clockSlot - DEFAULT_EARLIEST_PERMISSIBLE_SLOT_DISTANCE;
|
|
213
|
+
if (ForkSeq[fork] >= ForkSeq.deneb && topicType === GossipType.beacon_attestation) {
|
|
214
|
+
// post deneb, the attestations could be in current or previous epoch
|
|
215
|
+
earliestPermissableSlot = computeStartSlotAtEpoch(this.chain.clock.currentEpoch - 1);
|
|
216
|
+
}
|
|
217
|
+
if (slot < earliestPermissableSlot) {
|
|
218
|
+
// No need to report the dropped job to gossip. It will be eventually pruned from the mcache
|
|
219
|
+
this.metrics?.networkProcessor.gossipValidationError.inc({
|
|
220
|
+
topic: topicType,
|
|
221
|
+
error: GossipErrorCode.PAST_SLOT,
|
|
222
|
+
});
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
message.msgSlot = slot;
|
|
226
|
+
// no need to check if root is a descendant of the current finalized block, it will be checked once we validate the message if needed
|
|
227
|
+
if (root && !this.chain.forkChoice.hasBlockHexUnsafe(root)) {
|
|
228
|
+
this.searchUnknownBlock({ slot, root }, BlockInputSource.network_processor, message.propagationSource.toString());
|
|
229
|
+
if (this.unknownBlockGossipsubMessagesCount > MAX_QUEUED_UNKNOWN_BLOCK_GOSSIP_OBJECTS) {
|
|
230
|
+
// No need to report the dropped job to gossip. It will be eventually pruned from the mcache
|
|
231
|
+
this.metrics?.awaitingBlockGossipMessages.reject.inc({
|
|
232
|
+
reason: ReprocessRejectReason.reached_limit,
|
|
233
|
+
topic: topicType,
|
|
234
|
+
});
|
|
235
|
+
return;
|
|
232
236
|
}
|
|
237
|
+
this.metrics?.awaitingBlockGossipMessages.queue.inc({ topic: topicType });
|
|
238
|
+
const awaitingGossipsubMessages = this.awaitingMessagesByBlockRoot.getOrDefault(root);
|
|
239
|
+
awaitingGossipsubMessages.add(message);
|
|
240
|
+
return;
|
|
233
241
|
}
|
|
234
|
-
// bypass the check for other messages
|
|
235
242
|
this.pushPendingGossipsubMessageToQueue(message);
|
|
236
243
|
}
|
|
237
244
|
pushPendingGossipsubMessageToQueue(message) {
|
|
238
245
|
const topicType = message.topic.type;
|
|
239
246
|
const droppedCount = this.gossipQueues[topicType].add(message);
|
|
240
247
|
if (droppedCount) {
|
|
241
|
-
//
|
|
248
|
+
// No need to report the dropped job to gossip. It will be eventually pruned from the mcache
|
|
242
249
|
this.metrics?.gossipValidationQueue.droppedJobs.inc({ topic: message.topic.type }, droppedCount);
|
|
243
250
|
}
|
|
244
251
|
// Tentatively perform work
|
|
245
252
|
this.executeWork();
|
|
246
253
|
}
|
|
247
|
-
async onBlockProcessed({
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
if (waitingGossipsubMessages.size === 0) {
|
|
254
|
+
async onBlockProcessed({ block: rootHex }) {
|
|
255
|
+
const waitingGossipsubMessages = this.awaitingMessagesByBlockRoot.get(rootHex);
|
|
256
|
+
if (!waitingGossipsubMessages || waitingGossipsubMessages.size === 0) {
|
|
251
257
|
return;
|
|
252
258
|
}
|
|
253
|
-
this.metrics?.reprocessGossipAttestations.resolve.inc(waitingGossipsubMessages.size);
|
|
254
259
|
const nowSec = Date.now() / 1000;
|
|
255
260
|
let count = 0;
|
|
256
261
|
// TODO: we can group attestations to process in batches but since we have the SeenAttestationDatas
|
|
257
262
|
// cache, it may not be necessary at this time
|
|
258
263
|
for (const message of waitingGossipsubMessages) {
|
|
259
|
-
|
|
264
|
+
const topicType = message.topic.type;
|
|
265
|
+
this.metrics?.awaitingBlockGossipMessages.waitSecBeforeResolve.set({ topic: topicType }, nowSec - message.seenTimestampSec);
|
|
266
|
+
this.metrics?.awaitingBlockGossipMessages.resolve.inc({ topic: topicType });
|
|
260
267
|
this.pushPendingGossipsubMessageToQueue(message);
|
|
261
268
|
count++;
|
|
262
269
|
// don't want to block the event loop, worse case it'd wait for 16_084 / 1024 * 50ms = 800ms which is not a big deal
|
|
263
|
-
if (count ===
|
|
270
|
+
if (count === MAX_AWAITING_GOSSIP_OBJECTS_PER_TICK) {
|
|
264
271
|
count = 0;
|
|
265
|
-
await sleep(
|
|
272
|
+
await sleep(AWAITING_GOSSIP_OBJECTS_YIELD_EVERY_MS);
|
|
266
273
|
}
|
|
267
274
|
}
|
|
268
|
-
|
|
275
|
+
this.awaitingMessagesByBlockRoot.delete(rootHex);
|
|
269
276
|
}
|
|
270
277
|
onClockSlot(clockSlot) {
|
|
271
278
|
const nowSec = Date.now() / 1000;
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
279
|
+
const minSlot = clockSlot - MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE;
|
|
280
|
+
for (const [slot, roots] of this.unknownBlocksBySlot) {
|
|
281
|
+
if (slot > minSlot)
|
|
282
|
+
continue;
|
|
283
|
+
for (const rootHex of roots) {
|
|
284
|
+
const gossipMessages = this.awaitingMessagesByBlockRoot.get(rootHex);
|
|
285
|
+
if (gossipMessages !== undefined) {
|
|
275
286
|
for (const message of gossipMessages) {
|
|
276
|
-
|
|
277
|
-
this.metrics?.
|
|
278
|
-
|
|
287
|
+
const topicType = message.topic.type;
|
|
288
|
+
this.metrics?.awaitingBlockGossipMessages.reject.inc({
|
|
289
|
+
topic: topicType,
|
|
290
|
+
reason: ReprocessRejectReason.expired,
|
|
291
|
+
});
|
|
292
|
+
this.metrics?.awaitingBlockGossipMessages.waitSecBeforeReject.set({ topic: topicType, reason: ReprocessRejectReason.expired }, nowSec - message.seenTimestampSec);
|
|
293
|
+
// No need to report the dropped job to gossip. It will be eventually pruned from the mcache
|
|
279
294
|
}
|
|
295
|
+
this.awaitingMessagesByBlockRoot.delete(rootHex);
|
|
280
296
|
}
|
|
281
|
-
this.awaitingGossipsubMessagesByRootBySlot.delete(slot);
|
|
282
297
|
}
|
|
298
|
+
this.unknownBlocksBySlot.delete(slot);
|
|
283
299
|
}
|
|
284
|
-
pruneSetToMax(this.unknownRootsBySlot, MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE);
|
|
285
|
-
this.unknownBlockGossipsubMessagesCount = 0;
|
|
286
300
|
}
|
|
287
301
|
executeWork() {
|
|
288
302
|
// TODO: Maybe de-bounce by timing the last time executeWork was run
|
|
@@ -397,5 +411,12 @@ export class NetworkProcessor {
|
|
|
397
411
|
}
|
|
398
412
|
return null;
|
|
399
413
|
}
|
|
414
|
+
get unknownBlockGossipsubMessagesCount() {
|
|
415
|
+
let count = 0;
|
|
416
|
+
for (const messages of this.awaitingMessagesByBlockRoot.values()) {
|
|
417
|
+
count += messages.size;
|
|
418
|
+
}
|
|
419
|
+
return count;
|
|
420
|
+
}
|
|
400
421
|
}
|
|
401
422
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/processor/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/processor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ export type ReqRespBeaconNodeOpts = ReqRespOpts & {
|
|
|
32
32
|
* Implementation of Ethereum Consensus p2p Req/Resp domain.
|
|
33
33
|
* For the spec that this code is based on, see:
|
|
34
34
|
* https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#the-reqresp-domain
|
|
35
|
-
* https://github.com/ethereum/consensus-specs/blob/
|
|
35
|
+
* https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/altair/light-client/p2p-interface.md#the-reqresp-domain
|
|
36
36
|
*/
|
|
37
37
|
export declare class ReqRespBeaconNode extends ReqResp {
|
|
38
38
|
private readonly metadataController;
|
|
@@ -15,7 +15,7 @@ export { ReqRespMethod } from "./types.js";
|
|
|
15
15
|
* Implementation of Ethereum Consensus p2p Req/Resp domain.
|
|
16
16
|
* For the spec that this code is based on, see:
|
|
17
17
|
* https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#the-reqresp-domain
|
|
18
|
-
* https://github.com/ethereum/consensus-specs/blob/
|
|
18
|
+
* https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/altair/light-client/p2p-interface.md#the-reqresp-domain
|
|
19
19
|
*/
|
|
20
20
|
export class ReqRespBeaconNode extends ReqResp {
|
|
21
21
|
metadataController;
|
|
@@ -101,7 +101,7 @@ export declare class BackfillSync extends BackfillSync_base {
|
|
|
101
101
|
private wsCheckpointHeader;
|
|
102
102
|
private wsValidated;
|
|
103
103
|
/**
|
|
104
|
-
* From https://github.com/ethereum/consensus-specs/blob/
|
|
104
|
+
* From https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/weak-subjectivity.md
|
|
105
105
|
*
|
|
106
106
|
*
|
|
107
107
|
* If
|
|
@@ -67,7 +67,7 @@ export class BackfillSync extends EventEmitter {
|
|
|
67
67
|
wsCheckpointHeader;
|
|
68
68
|
wsValidated = false;
|
|
69
69
|
/**
|
|
70
|
-
* From https://github.com/ethereum/consensus-specs/blob/
|
|
70
|
+
* From https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/weak-subjectivity.md
|
|
71
71
|
*
|
|
72
72
|
*
|
|
73
73
|
* If
|
package/lib/sync/constants.d.ts
CHANGED
|
@@ -48,7 +48,7 @@ export declare const EPOCHS_PER_BATCH = 1;
|
|
|
48
48
|
export declare const BATCH_BUFFER_SIZE: number;
|
|
49
49
|
/**
|
|
50
50
|
* Maximum number of concurrent requests to perform with a SyncChain.
|
|
51
|
-
* This is according to the spec https://github.com/ethereum/consensus-specs/blob/
|
|
51
|
+
* This is according to the spec https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/p2p-interface.md
|
|
52
52
|
*/
|
|
53
53
|
export declare const MAX_CONCURRENT_REQUESTS = 2;
|
|
54
54
|
/**
|
package/lib/sync/constants.js
CHANGED
|
@@ -51,7 +51,7 @@ export const EPOCHS_PER_BATCH = 1;
|
|
|
51
51
|
export const BATCH_BUFFER_SIZE = Math.ceil(10 / EPOCHS_PER_BATCH);
|
|
52
52
|
/**
|
|
53
53
|
* Maximum number of concurrent requests to perform with a SyncChain.
|
|
54
|
-
* This is according to the spec https://github.com/ethereum/consensus-specs/blob/
|
|
54
|
+
* This is according to the spec https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/p2p-interface.md
|
|
55
55
|
*/
|
|
56
56
|
export const MAX_CONCURRENT_REQUESTS = 2;
|
|
57
57
|
/**
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
2
|
import { Logger } from "@lodestar/utils";
|
|
3
|
-
import { IBlockInput } from "../chain/blocks/blockInput/types.js";
|
|
4
3
|
import { IBeaconChain } from "../chain/index.js";
|
|
5
4
|
import { Metrics } from "../metrics/index.js";
|
|
6
5
|
import { INetwork } from "../network/index.js";
|
|
@@ -30,7 +29,7 @@ import { SyncOptions } from "./options.js";
|
|
|
30
29
|
*
|
|
31
30
|
* - publishBlock
|
|
32
31
|
* - gossipHandlers
|
|
33
|
-
* -
|
|
32
|
+
* - searchUnknownBlock
|
|
34
33
|
* = produceSyncCommitteeContribution
|
|
35
34
|
* = validateGossipFnRetryUnknownRoot
|
|
36
35
|
* * submitPoolAttestationsV2
|
|
@@ -103,16 +102,11 @@ export declare class UnknownBlockPeerBalancer {
|
|
|
103
102
|
onPeerConnected(peerId: PeerIdStr, syncMeta: PeerSyncMeta): void;
|
|
104
103
|
onPeerDisconnected(peerId: PeerIdStr): void;
|
|
105
104
|
/**
|
|
106
|
-
* called from
|
|
105
|
+
* called from fetchBlockInput() where we only have block root and nothing else
|
|
107
106
|
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
108
107
|
* pendingColumns is empty for prefulu, or the 1st time we we download a block by root
|
|
109
108
|
*/
|
|
110
|
-
bestPeerForPendingColumns(pendingColumns: Set<number
|
|
111
|
-
/**
|
|
112
|
-
* called from fetchUnavailableBlockInput() where we have either BlockInput or NullBlockInput
|
|
113
|
-
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
114
|
-
*/
|
|
115
|
-
bestPeerForBlockInput(blockInput: IBlockInput, excludedPeers: Set<PeerIdStr>): PeerSyncMeta | null;
|
|
109
|
+
bestPeerForPendingColumns(pendingColumns: Set<number>, excludedPeers: Set<PeerIdStr>): PeerSyncMeta | null;
|
|
116
110
|
/**
|
|
117
111
|
* Consumers don't need to call this method directly, it is called internally by bestPeer*() methods
|
|
118
112
|
* make this public for testing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unknownBlock.d.ts","sourceRoot":"","sources":["../../src/sync/unknownBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAKjD,OAAO,EAAC,MAAM,EAA2C,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"unknownBlock.d.ts","sourceRoot":"","sources":["../../src/sync/unknownBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAKjD,OAAO,EAAC,MAAM,EAA2C,MAAM,iBAAiB,CAAC;AAIjF,OAAO,EAA6B,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAuD,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAK5C,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAyBzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,cAAc;IAWvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAfxB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+C;IAC7E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAClC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,YAAY,CAA2B;IAE/C,YACmB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,IAAI,CAAC,yBAAa,EAapC;IAED,kBAAkB,IAAI,IAAI,CAgBzB;IAED,sBAAsB,IAAI,IAAI,CAQ7B;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,qBAAqB,IAAI,OAAO,CAE/B;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB,CASxB;IAEF;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAS5B;IAEF;;OAEG;IACH,OAAO,CAAC,eAAe,CAUrB;IAEF,OAAO,CAAC,YAAY,CA2BlB;IAEF,OAAO,CAAC,eAAe,CA4BrB;IAEF,OAAO,CAAC,eAAe,CASrB;IAEF,OAAO,CAAC,kBAAkB,CAGxB;IAEF;;OAEG;IACH,OAAO,CAAC,yBAAyB,CA2C/B;YAEY,aAAa;YAkEb,YAAY;YAkHZ,eAAe;IA4I7B;;;;;OAKG;IACH,OAAO,CAAC,gCAAgC;IA4BxC,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,sBAAsB;CAY/B;AAED;;GAEG;AACH,qBAAa,wBAAwB;IACnC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEhD,cAGC;IAED,qCAAqC;IACrC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAM/D;IAED,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAG1C;IAED;;;;OAIG;IACH,yBAAyB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,YAAY,GAAG,IAAI,CAezG;IAED;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEjC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE1C;IAED,sBAAsB,IAAI,MAAM,CAM/B;IAED,OAAO,CAAC,WAAW;CAgDpB"}
|
package/lib/sync/unknownBlock.js
CHANGED
|
@@ -48,7 +48,7 @@ var FetchResult;
|
|
|
48
48
|
*
|
|
49
49
|
* - publishBlock
|
|
50
50
|
* - gossipHandlers
|
|
51
|
-
* -
|
|
51
|
+
* - searchUnknownBlock
|
|
52
52
|
* = produceSyncCommitteeContribution
|
|
53
53
|
* = validateGossipFnRetryUnknownRoot
|
|
54
54
|
* * submitPoolAttestationsV2
|
|
@@ -428,7 +428,7 @@ export class BlockInputSync {
|
|
|
428
428
|
* From a set of shuffled peers:
|
|
429
429
|
* - fetch the block
|
|
430
430
|
* - from deneb, fetch all missing blobs
|
|
431
|
-
* - from peerDAS, fetch sampled
|
|
431
|
+
* - from peerDAS, fetch sampled columns
|
|
432
432
|
* TODO: this means we only have block root, and nothing else. Consider to reflect this in the function name
|
|
433
433
|
* prefulu, will attempt a max of `MAX_ATTEMPTS_PER_BLOCK` on different peers, postfulu we may attempt more as defined in `getMaxDownloadAttempts()` function
|
|
434
434
|
* Also verifies the received block root + returns the peer that provided the block for future downscoring.
|
|
@@ -436,9 +436,7 @@ export class BlockInputSync {
|
|
|
436
436
|
async fetchBlockInput(cacheItem) {
|
|
437
437
|
const rootHex = getBlockInputSyncCacheItemRootHex(cacheItem);
|
|
438
438
|
const excludedPeers = new Set();
|
|
439
|
-
const defaultPendingColumns =
|
|
440
|
-
? new Set(this.network.custodyConfig.sampledColumns)
|
|
441
|
-
: null;
|
|
439
|
+
const defaultPendingColumns = new Set(this.network.custodyConfig.sampledColumns);
|
|
442
440
|
const fetchStartSec = Date.now() / 1000;
|
|
443
441
|
let slot = isPendingBlockInput(cacheItem) ? cacheItem.blockInput.slot : undefined;
|
|
444
442
|
if (slot !== undefined) {
|
|
@@ -449,14 +447,10 @@ export class BlockInputSync {
|
|
|
449
447
|
const pendingColumns = isPendingBlockInput(cacheItem) && isBlockInputColumns(cacheItem.blockInput)
|
|
450
448
|
? new Set(cacheItem.blockInput.getMissingSampledColumnMeta().missing)
|
|
451
449
|
: defaultPendingColumns;
|
|
452
|
-
// pendingDataColumns is null pre-fulu
|
|
453
450
|
const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers);
|
|
454
451
|
if (peerMeta === null) {
|
|
455
452
|
// no more peer with needed columns to try, throw error
|
|
456
|
-
|
|
457
|
-
if (pendingColumns) {
|
|
458
|
-
message += ` with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`;
|
|
459
|
-
}
|
|
453
|
+
const message = `Error fetching UnknownBlockRoot slot=${slot} root=${rootHex} after ${i}: cannot find peer with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`;
|
|
460
454
|
this.metrics?.blockInputSync.fetchTimeSec.observe({ result: FetchResult.FailureTriedAllPeers }, Date.now() / 1000 - fetchStartSec);
|
|
461
455
|
this.metrics?.blockInputSync.fetchPeers.set({ result: FetchResult.FailureTriedAllPeers }, i);
|
|
462
456
|
throw Error(message);
|
|
@@ -573,7 +567,7 @@ export class BlockInputSync {
|
|
|
573
567
|
// TODO(fulu): why is this commented out here?
|
|
574
568
|
//
|
|
575
569
|
// this.knownBadBlocks.add(block.blockRootHex);
|
|
576
|
-
// for (const peerIdStr of block.
|
|
570
|
+
// for (const peerIdStr of block.peerIdStrings) {
|
|
577
571
|
// // TODO: Refactor peerRpcScores to work with peerIdStr only
|
|
578
572
|
// this.network.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadBlockByRoot");
|
|
579
573
|
// }
|
|
@@ -636,7 +630,7 @@ export class UnknownBlockPeerBalancer {
|
|
|
636
630
|
this.activeRequests.delete(peerId);
|
|
637
631
|
}
|
|
638
632
|
/**
|
|
639
|
-
* called from
|
|
633
|
+
* called from fetchBlockInput() where we only have block root and nothing else
|
|
640
634
|
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
641
635
|
* pendingColumns is empty for prefulu, or the 1st time we we download a block by root
|
|
642
636
|
*/
|
|
@@ -652,31 +646,6 @@ export class UnknownBlockPeerBalancer {
|
|
|
652
646
|
this.onRequest(bestPeerId);
|
|
653
647
|
return this.peersMeta.get(bestPeerId) ?? null;
|
|
654
648
|
}
|
|
655
|
-
/**
|
|
656
|
-
* called from fetchUnavailableBlockInput() where we have either BlockInput or NullBlockInput
|
|
657
|
-
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
658
|
-
*/
|
|
659
|
-
bestPeerForBlockInput(blockInput, excludedPeers) {
|
|
660
|
-
const eligiblePeers = [];
|
|
661
|
-
if (isBlockInputColumns(blockInput)) {
|
|
662
|
-
const pendingDataColumns = new Set(blockInput.getMissingSampledColumnMeta().missing);
|
|
663
|
-
// there could be no pending column in case when block is still missing
|
|
664
|
-
eligiblePeers.push(...this.filterPeers(pendingDataColumns, excludedPeers));
|
|
665
|
-
}
|
|
666
|
-
else {
|
|
667
|
-
// prefulu
|
|
668
|
-
eligiblePeers.push(...this.filterPeers(null, excludedPeers));
|
|
669
|
-
}
|
|
670
|
-
if (eligiblePeers.length === 0) {
|
|
671
|
-
return null;
|
|
672
|
-
}
|
|
673
|
-
const sortedEligiblePeers = sortBy(shuffle(eligiblePeers),
|
|
674
|
-
// prefer peers with least active req
|
|
675
|
-
(peerId) => this.activeRequests.get(peerId) ?? 0);
|
|
676
|
-
const bestPeerId = sortedEligiblePeers[0];
|
|
677
|
-
this.onRequest(bestPeerId);
|
|
678
|
-
return this.peersMeta.get(bestPeerId) ?? null;
|
|
679
|
-
}
|
|
680
649
|
/**
|
|
681
650
|
* Consumers don't need to call this method directly, it is called internally by bestPeer*() methods
|
|
682
651
|
* make this public for testing
|
|
@@ -697,7 +666,6 @@ export class UnknownBlockPeerBalancer {
|
|
|
697
666
|
}
|
|
698
667
|
return totalActiveRequests;
|
|
699
668
|
}
|
|
700
|
-
// pendingDataColumns could be null for prefulu
|
|
701
669
|
filterPeers(pendingDataColumns, excludedPeers) {
|
|
702
670
|
let maxColumnCount = 0;
|
|
703
671
|
const considerPeers = [];
|
|
@@ -711,12 +679,11 @@ export class UnknownBlockPeerBalancer {
|
|
|
711
679
|
// should return peer with no more than MAX_CONCURRENT_REQUESTS active requests
|
|
712
680
|
continue;
|
|
713
681
|
}
|
|
714
|
-
if (pendingDataColumns
|
|
715
|
-
// prefulu, no pending columns
|
|
682
|
+
if (pendingDataColumns.size === 0) {
|
|
716
683
|
considerPeers.push({ peerId, columnCount: 0 });
|
|
717
684
|
continue;
|
|
718
685
|
}
|
|
719
|
-
//
|
|
686
|
+
// find peers that have custody columns that we need
|
|
720
687
|
const { custodyColumns: peerColumns } = syncMeta;
|
|
721
688
|
// check if the peer has all needed columns
|
|
722
689
|
// get match
|