@lodestar/beacon-node 1.43.0-dev.b05ea98d04 → 1.43.0-dev.b0e1143d06

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.
Files changed (132) hide show
  1. package/lib/chain/blocks/importExecutionPayload.d.ts +4 -0
  2. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  3. package/lib/chain/blocks/importExecutionPayload.js +12 -1
  4. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  5. package/lib/chain/blocks/index.d.ts.map +1 -1
  6. package/lib/chain/blocks/index.js +6 -7
  7. package/lib/chain/blocks/index.js.map +1 -1
  8. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +8 -1
  9. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  10. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +19 -0
  11. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  12. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +16 -0
  13. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  14. package/lib/chain/blocks/utils/chainSegment.d.ts +1 -3
  15. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  16. package/lib/chain/blocks/utils/chainSegment.js +29 -26
  17. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  18. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
  19. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +5 -4
  20. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  21. package/lib/chain/chain.d.ts.map +1 -1
  22. package/lib/chain/chain.js +15 -1
  23. package/lib/chain/chain.js.map +1 -1
  24. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +7 -6
  25. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  26. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +21 -5
  27. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  28. package/lib/metrics/metrics/lodestar.d.ts +4 -0
  29. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  30. package/lib/metrics/metrics/lodestar.js +5 -0
  31. package/lib/metrics/metrics/lodestar.js.map +1 -1
  32. package/lib/network/gossip/topic.d.ts +749 -2
  33. package/lib/network/gossip/topic.d.ts.map +1 -1
  34. package/lib/network/interface.d.ts +1 -0
  35. package/lib/network/interface.d.ts.map +1 -1
  36. package/lib/network/network.d.ts +1 -0
  37. package/lib/network/network.d.ts.map +1 -1
  38. package/lib/network/network.js +3 -0
  39. package/lib/network/network.js.map +1 -1
  40. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  41. package/lib/network/processor/gossipHandlers.js +31 -1
  42. package/lib/network/processor/gossipHandlers.js.map +1 -1
  43. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  44. package/lib/network/reqresp/ReqRespBeaconNode.js +1 -1
  45. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  46. package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts +9 -0
  47. package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts.map +1 -0
  48. package/lib/network/reqresp/handlers/beaconBlocksByHead.js +61 -0
  49. package/lib/network/reqresp/handlers/beaconBlocksByHead.js.map +1 -0
  50. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  51. package/lib/network/reqresp/handlers/index.js +5 -0
  52. package/lib/network/reqresp/handlers/index.js.map +1 -1
  53. package/lib/network/reqresp/interface.d.ts +1 -1
  54. package/lib/network/reqresp/interface.js +1 -1
  55. package/lib/network/reqresp/protocols.d.ts +1 -0
  56. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  57. package/lib/network/reqresp/protocols.js +5 -0
  58. package/lib/network/reqresp/protocols.js.map +1 -1
  59. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  60. package/lib/network/reqresp/rateLimit.js +4 -0
  61. package/lib/network/reqresp/rateLimit.js.map +1 -1
  62. package/lib/network/reqresp/score.d.ts.map +1 -1
  63. package/lib/network/reqresp/score.js +1 -0
  64. package/lib/network/reqresp/score.js.map +1 -1
  65. package/lib/network/reqresp/types.d.ts +3 -0
  66. package/lib/network/reqresp/types.d.ts.map +1 -1
  67. package/lib/network/reqresp/types.js +3 -0
  68. package/lib/network/reqresp/types.js.map +1 -1
  69. package/lib/sync/constants.d.ts +5 -1
  70. package/lib/sync/constants.d.ts.map +1 -1
  71. package/lib/sync/constants.js +5 -1
  72. package/lib/sync/constants.js.map +1 -1
  73. package/lib/sync/range/batch.d.ts +27 -6
  74. package/lib/sync/range/batch.d.ts.map +1 -1
  75. package/lib/sync/range/batch.js +149 -26
  76. package/lib/sync/range/batch.js.map +1 -1
  77. package/lib/sync/range/chain.d.ts +10 -2
  78. package/lib/sync/range/chain.d.ts.map +1 -1
  79. package/lib/sync/range/chain.js +55 -7
  80. package/lib/sync/range/chain.js.map +1 -1
  81. package/lib/sync/range/range.d.ts.map +1 -1
  82. package/lib/sync/range/range.js +54 -5
  83. package/lib/sync/range/range.js.map +1 -1
  84. package/lib/sync/range/utils/peerBalancer.d.ts +2 -1
  85. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -1
  86. package/lib/sync/range/utils/peerBalancer.js +8 -4
  87. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  88. package/lib/sync/sync.d.ts.map +1 -1
  89. package/lib/sync/sync.js +13 -0
  90. package/lib/sync/sync.js.map +1 -1
  91. package/lib/sync/unknownBlock.d.ts +7 -0
  92. package/lib/sync/unknownBlock.d.ts.map +1 -1
  93. package/lib/sync/unknownBlock.js +127 -12
  94. package/lib/sync/unknownBlock.js.map +1 -1
  95. package/lib/sync/utils/downloadByRange.d.ts +36 -9
  96. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  97. package/lib/sync/utils/downloadByRange.js +87 -38
  98. package/lib/sync/utils/downloadByRange.js.map +1 -1
  99. package/lib/sync/utils/rateLimit.d.ts +2 -0
  100. package/lib/sync/utils/rateLimit.d.ts.map +1 -0
  101. package/lib/sync/utils/rateLimit.js +15 -0
  102. package/lib/sync/utils/rateLimit.js.map +1 -0
  103. package/package.json +16 -16
  104. package/src/chain/blocks/importExecutionPayload.ts +18 -6
  105. package/src/chain/blocks/index.ts +5 -7
  106. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +27 -1
  107. package/src/chain/blocks/payloadEnvelopeInput/types.ts +17 -0
  108. package/src/chain/blocks/utils/chainSegment.ts +30 -27
  109. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +7 -4
  110. package/src/chain/chain.ts +17 -0
  111. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +23 -6
  112. package/src/metrics/metrics/lodestar.ts +6 -0
  113. package/src/network/interface.ts +1 -0
  114. package/src/network/network.ts +12 -0
  115. package/src/network/processor/gossipHandlers.ts +35 -1
  116. package/src/network/reqresp/ReqRespBeaconNode.ts +1 -0
  117. package/src/network/reqresp/handlers/beaconBlocksByHead.ts +91 -0
  118. package/src/network/reqresp/handlers/index.ts +5 -0
  119. package/src/network/reqresp/interface.ts +1 -1
  120. package/src/network/reqresp/protocols.ts +6 -0
  121. package/src/network/reqresp/rateLimit.ts +4 -0
  122. package/src/network/reqresp/score.ts +1 -0
  123. package/src/network/reqresp/types.ts +5 -0
  124. package/src/sync/constants.ts +5 -1
  125. package/src/sync/range/batch.ts +188 -30
  126. package/src/sync/range/chain.ts +72 -13
  127. package/src/sync/range/range.ts +68 -5
  128. package/src/sync/range/utils/peerBalancer.ts +9 -3
  129. package/src/sync/sync.ts +13 -1
  130. package/src/sync/unknownBlock.ts +157 -12
  131. package/src/sync/utils/downloadByRange.ts +153 -39
  132. package/src/sync/utils/rateLimit.ts +16 -0
@@ -1,8 +1,9 @@
1
1
  import { isForkPostDeneb, isForkPostFulu, isForkPostGloas } from "@lodestar/params";
2
- import { LodestarError, prettyPrintIndices } from "@lodestar/utils";
2
+ import { LodestarError, byteArrayEquals, prettyPrintIndices, toRootHex } from "@lodestar/utils";
3
3
  import { isBlockInputColumns } from "../../chain/blocks/blockInput/blockInput.js";
4
4
  import { isDaOutOfRange } from "../../chain/blocks/blockInput/utils.js";
5
5
  import { BlockError, BlockErrorCode } from "../../chain/errors/index.js";
6
+ import { ZERO_HASH } from "../../constants/constants.js";
6
7
  import { MAX_BATCH_DOWNLOAD_ATTEMPTS, MAX_BATCH_PROCESSING_ATTEMPTS } from "../constants.js";
7
8
  import { getBatchSlotRange, hashBlocks } from "./utils/index.js";
8
9
  export { BatchStatus };
@@ -34,6 +35,12 @@ function formatRangeReq(req) {
34
35
  function formatColumnsReq(req) {
35
36
  return `startSlot=${req.startSlot},count=${req.count},cols=${prettyPrintIndices(req.columns)}`;
36
37
  }
38
+ function getTrackedRequest({ parentPayloadRequest, columnsRequest }) {
39
+ return {
40
+ parentPayload: parentPayloadRequest != null,
41
+ byRangeColumns: new Set(parentPayloadRequest == null ? (columnsRequest?.columns ?? []) : []),
42
+ };
43
+ }
37
44
  /**
38
45
  * Batches are downloaded at the first block of the epoch.
39
46
  *
@@ -54,8 +61,8 @@ export class Batch {
54
61
  requests;
55
62
  /** State of the batch. */
56
63
  state = { status: BatchStatus.AwaitingDownload, blocks: [], payloadEnvelopes: null };
57
- /** Peers that provided good data */
58
- goodPeers = [];
64
+ /** Peers that provided good data, with column coverage for by_range requests */
65
+ successfulDownloads = new Map();
59
66
  /** The `Attempts` that have been made and failed to send us this batch. */
60
67
  failedProcessingAttempts = [];
61
68
  /** The `Attempts` that have been made and failed because of execution malfunction. */
@@ -65,7 +72,9 @@ export class Batch {
65
72
  config;
66
73
  clock;
67
74
  custodyConfig;
68
- constructor(startEpoch, config, clock, custodyConfig) {
75
+ isFirstBatchInChain;
76
+ latestBid;
77
+ constructor(startEpoch, config, clock, custodyConfig, isFirstBatchInChain, latestBid, targetSlot) {
69
78
  this.config = config;
70
79
  this.clock = clock;
71
80
  this.custodyConfig = custodyConfig;
@@ -73,9 +82,36 @@ export class Batch {
73
82
  this.forkName = this.config.getForkName(startSlot);
74
83
  this.startEpoch = startEpoch;
75
84
  this.startSlot = startSlot;
76
- this.count = count;
85
+ this.count = Math.min(count, targetSlot - startSlot + 1);
86
+ this.isFirstBatchInChain = isFirstBatchInChain;
87
+ this.latestBid = latestBid;
77
88
  this.requests = this.getRequests([]);
78
89
  }
90
+ shouldDownloadParentEnvelope(firstBlock) {
91
+ if (!this.isFirstBatchInChain)
92
+ return false;
93
+ if (this.startSlot === 0 || !isForkPostGloas(this.config.getForkName(this.startSlot - 1))) {
94
+ return false;
95
+ }
96
+ // we only know if we should download parent envelope if firstBlock is downloaded
97
+ if (firstBlock === undefined)
98
+ return false;
99
+ if (this.latestBid === undefined)
100
+ return false;
101
+ const firstBlockBidParentHash = firstBlock.message.body.signedExecutionPayloadBid.message
102
+ .parentBlockHash;
103
+ return byteArrayEquals(firstBlockBidParentHash, this.latestBid.blockHash);
104
+ }
105
+ getParentPayloadCommitments(parentBlockRoot) {
106
+ if (this.latestBid === undefined) {
107
+ throw new Error(`Coding error: getParentPayloadCommitments called without latestBid for parentBlockRoot=${toRootHex(parentBlockRoot)}`);
108
+ }
109
+ return {
110
+ blockRoot: parentBlockRoot,
111
+ blockRootHex: toRootHex(parentBlockRoot),
112
+ kzgCommitments: this.latestBid.blobKzgCommitments,
113
+ };
114
+ }
79
115
  /**
80
116
  * Builds ByRange requests for block, blobs and columns
81
117
  */
@@ -203,6 +239,33 @@ export class Batch {
203
239
  count: endSlot - envelopeStartSlot + 1,
204
240
  };
205
241
  }
242
+ // Only the first batch of a SyncChain may need the dangling-parent payload by-root.
243
+ if (blocks.length > 0 && this.shouldDownloadParentEnvelope(blocks[0].getBlock())) {
244
+ // shouldDownloadParentEnvelope() = true means there are at least 1 block
245
+ const parentRoot = blocks[0].getBlock().message.parentRoot;
246
+ if (!byteArrayEquals(parentRoot, ZERO_HASH)) {
247
+ const parentRootHex = toRootHex(parentRoot);
248
+ let parentPayloadInput;
249
+ if (this.state.payloadEnvelopes) {
250
+ for (const pi of this.state.payloadEnvelopes.values()) {
251
+ if (pi.blockRootHex === parentRootHex) {
252
+ parentPayloadInput = pi;
253
+ break;
254
+ }
255
+ }
256
+ }
257
+ const needsEnvelope = !parentPayloadInput?.hasPayloadEnvelope();
258
+ const missingColumns = parentPayloadInput
259
+ ? parentPayloadInput.getMissingSampledColumnMeta().missing
260
+ : this.custodyConfig.sampledColumns;
261
+ if (needsEnvelope || missingColumns.length > 0) {
262
+ requests.parentPayloadRequest = {
263
+ ...(needsEnvelope ? { envelopeBlockRoot: parentRoot } : {}),
264
+ ...(missingColumns.length > 0 ? { blockRoot: parentRoot, columns: missingColumns } : {}),
265
+ };
266
+ }
267
+ }
268
+ }
206
269
  return requests;
207
270
  }
208
271
  /**
@@ -212,22 +275,22 @@ export class Batch {
212
275
  if (!isForkPostFulu(this.forkName)) {
213
276
  return this.requests;
214
277
  }
215
- // post-fulu we need to ensure that we only request columns that the peer has advertised
216
- const { columnsRequest } = this.requests;
217
- if (columnsRequest == null) {
218
- return this.requests;
219
- }
278
+ // post-fulu we need to ensure that we only request columns that the peer has advertised.
279
+ const { columnsRequest, parentPayloadRequest } = this.requests;
220
280
  const peerColumns = new Set(peer.custodyColumns ?? []);
221
- const requestedColumns = columnsRequest.columns.filter((c) => peerColumns.has(c));
222
- if (requestedColumns.length === columnsRequest.columns.length) {
223
- return this.requests;
224
- }
281
+ const filteredColumnsRequest = columnsRequest != null ? columnsRequest.columns.filter((c) => peerColumns.has(c)) : null;
282
+ const parentColumns = parentPayloadRequest?.columns;
283
+ const filteredParentColumns = parentColumns != null ? parentColumns.filter((c) => peerColumns.has(c)) : null;
284
+ const updatedColumnRequest = columnsRequest != null && filteredColumnsRequest != null
285
+ ? { columnsRequest: { ...columnsRequest, columns: filteredColumnsRequest } }
286
+ : {};
287
+ const updatedParentPayloadRequest = parentPayloadRequest != null && filteredParentColumns != null
288
+ ? { parentPayloadRequest: { ...parentPayloadRequest, columns: filteredParentColumns } }
289
+ : {};
225
290
  return {
226
291
  ...this.requests,
227
- columnsRequest: {
228
- ...columnsRequest,
229
- columns: requestedColumns,
230
- },
292
+ ...updatedColumnRequest,
293
+ ...updatedParentPayloadRequest,
231
294
  };
232
295
  }
233
296
  /**
@@ -236,6 +299,31 @@ export class Batch {
236
299
  getFailedPeers() {
237
300
  return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.flatMap((a) => a.peers)];
238
301
  }
302
+ /**
303
+ * True only if the peer has already returned a successful response for the current request.
304
+ * A by_range success may update `this.requests` to parent_payload, and the same peer is then
305
+ * still eligible for the newly discovered parent payload data.
306
+ * For by_range, a peer that previously succeeded with a superset of requested columns is skipped.
307
+ */
308
+ hasPeerSucceededCurrentRequest(peer) {
309
+ const successfulDownload = this.successfulDownloads.get(peer.peerId);
310
+ if (successfulDownload == null)
311
+ return false;
312
+ const request = getTrackedRequest(this.getRequestsForPeer(peer));
313
+ if (request.parentPayload)
314
+ return successfulDownload.parentPayload;
315
+ const requestByRangeColumns = request.byRangeColumns;
316
+ if (requestByRangeColumns.size === 0) {
317
+ // this means a download blocks/envelops by_range only
318
+ // don't do that again if we already did it
319
+ // see https://github.com/ChainSafe/lodestar/issues/9357
320
+ return true;
321
+ }
322
+ return [...requestByRangeColumns].every((column) => successfulDownload.byRangeColumns.has(column));
323
+ }
324
+ getSuccessfulPeers() {
325
+ return Array.from(this.successfulDownloads.keys());
326
+ }
239
327
  getMetadata() {
240
328
  const { blocksRequest, blobsRequest, columnsRequest, envelopesRequest } = this.requests;
241
329
  const failedProcessingPeerList = this.failedProcessingAttempts.flatMap((a) => a.peers);
@@ -271,9 +359,11 @@ export class Batch {
271
359
  if (this.state.status !== BatchStatus.AwaitingDownload) {
272
360
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.AwaitingDownload));
273
361
  }
362
+ const request = getTrackedRequest(this.getRequestsForPeer(peer));
274
363
  this.state = {
275
364
  status: BatchStatus.Downloading,
276
- peer,
365
+ peer: peer.peerId,
366
+ request,
277
367
  blocks: this.state.blocks,
278
368
  payloadEnvelopes: this.state.payloadEnvelopes,
279
369
  };
@@ -287,7 +377,17 @@ export class Batch {
287
377
  }
288
378
  // ensure that blocks are always sorted before getting stored on the batch.state or being used to getRequests
289
379
  blocks.sort((a, b) => a.slot - b.slot);
290
- this.goodPeers.push(peer);
380
+ const successfulDownload = this.successfulDownloads.get(peer) ?? {
381
+ parentPayload: false,
382
+ byRangeColumns: new Set(),
383
+ };
384
+ successfulDownload.parentPayload ||= this.state.request.parentPayload;
385
+ if (!this.state.request.parentPayload) {
386
+ for (const column of this.state.request.byRangeColumns) {
387
+ successfulDownload.byRangeColumns.add(column);
388
+ }
389
+ }
390
+ this.successfulDownloads.set(peer, successfulDownload);
291
391
  let allComplete = true;
292
392
  const slots = new Set();
293
393
  for (const block of blocks) {
@@ -313,13 +413,36 @@ export class Batch {
313
413
  if (allComplete && isForkPostGloas(this.forkName)) {
314
414
  for (const block of blocks) {
315
415
  const payloadInput = newPayloadEnvelopes?.get(block.slot);
316
- // by_range needs to download all columns
317
- if (!payloadInput?.hasPayloadEnvelope() || !payloadInput.hasComputedAllData()) {
416
+ // only need to make sure envelope has all columns, not all blocks have payload
417
+ // assertLinearChainSegment() was called before reaching this
418
+ if (payloadInput?.hasPayloadEnvelope() && !payloadInput.hasComputedAllData()) {
318
419
  allComplete = false;
319
420
  break;
320
421
  }
321
422
  }
322
423
  }
424
+ // First batch of a sync chain must additionally have the dangling-parent payload fully
425
+ // present, otherwise `processBlocks` will throw PARENT_PAYLOAD_UNKNOWN. The parent's
426
+ // `PayloadEnvelopeInput` is identified by `blockRootHex` matching `blocks[0].parentRoot`.
427
+ if (allComplete && blocks.length > 0 && this.shouldDownloadParentEnvelope(blocks[0].getBlock())) {
428
+ const parentRoot = blocks[0].getBlock().message.parentRoot;
429
+ // Genesis has no parent payload — nothing to wait for.
430
+ if (!byteArrayEquals(parentRoot, ZERO_HASH)) {
431
+ const parentRootHex = toRootHex(parentRoot);
432
+ let parentPayloadComplete = false;
433
+ if (newPayloadEnvelopes) {
434
+ for (const payloadInput of newPayloadEnvelopes.values()) {
435
+ if (payloadInput.blockRootHex === parentRootHex) {
436
+ parentPayloadComplete = payloadInput.hasPayloadEnvelope() && payloadInput.hasComputedAllData();
437
+ break;
438
+ }
439
+ }
440
+ }
441
+ if (!parentPayloadComplete) {
442
+ allComplete = false;
443
+ }
444
+ }
445
+ }
323
446
  if (allComplete) {
324
447
  this.state = { status: BatchStatus.AwaitingProcessing, blocks, payloadEnvelopes: newPayloadEnvelopes };
325
448
  }
@@ -370,10 +493,10 @@ export class Batch {
370
493
  const blocks = this.state.blocks;
371
494
  const payloadEnvelopes = this.state.payloadEnvelopes;
372
495
  const hash = hashBlocks(blocks, this.config); // tracks blocks to report peer on processing error
373
- // Reset goodPeers in case another download attempt needs to be made. When Attempt is successful or not the peers
374
- // that the data came from will be handled by the Attempt that goes for processing
375
- const peers = this.goodPeers;
376
- this.goodPeers = [];
496
+ // Reset successfulDownloads in case another download attempt needs to be made. When Attempt is successful or not
497
+ // the peers that the data came from will be handled by the Attempt that goes for processing.
498
+ const peers = this.getSuccessfulPeers();
499
+ this.successfulDownloads.clear();
377
500
  this.state = { status: BatchStatus.Processing, blocks, payloadEnvelopes, attempt: { peers, hash } };
378
501
  return { blocks, payloadEnvelopes, peers };
379
502
  }
@@ -1 +1 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
- import { Epoch, Root, Slot } from "@lodestar/types";
2
+ import { Epoch, Root, Slot, gloas } from "@lodestar/types";
3
3
  import { Logger } from "@lodestar/utils";
4
4
  import { IBlockInput } from "../../chain/blocks/blockInput/types.js";
5
5
  import { PayloadEnvelopeInput } from "../../chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
@@ -100,6 +100,10 @@ export declare class SyncChain {
100
100
  private readonly batchProcessor;
101
101
  /** Sorted map of batches undergoing some kind of processing. */
102
102
  private readonly batches;
103
+ /**
104
+ * `true` until the first `Batch` is constructed via `includeNextBatch`
105
+ */
106
+ private isFirstBatch;
103
107
  private readonly peerset;
104
108
  /**
105
109
  * Tracks peers that have rate-limited us, mapped to the timestamp (ms) until which we should avoid them.
@@ -107,12 +111,14 @@ export declare class SyncChain {
107
111
  * The reqresp SelfRateLimiter independently enforces backoff at the protocol level as a safety net.
108
112
  */
109
113
  private readonly rateLimitedPeers;
114
+ private rateLimitBackoffTimeout;
110
115
  private readonly logger;
111
116
  private readonly config;
112
117
  private readonly clock;
113
118
  private readonly metrics;
114
119
  private readonly custodyConfig;
115
- constructor(initialBatchEpoch: Epoch, initialTarget: ChainTarget, syncType: RangeSyncType, fns: SyncChainFns, modules: SyncChainModules);
120
+ private readonly latestBid;
121
+ constructor(initialBatchEpoch: Epoch, initialTarget: ChainTarget, syncType: RangeSyncType, fns: SyncChainFns, modules: SyncChainModules, latestBid: gloas.ExecutionPayloadBid | undefined);
116
122
  /**
117
123
  * Start syncing a new chain or an old one with an existing peer list
118
124
  * In the same call, advance the chain if localFinalizedEpoch >
@@ -157,6 +163,8 @@ export declare class SyncChain {
157
163
  * Backlogs requests into a single pending request
158
164
  */
159
165
  private triggerBatchDownloader;
166
+ private scheduleRateLimitBackoffRetry;
167
+ private clearRateLimitBackoffTimer;
160
168
  /**
161
169
  * Attempts to request the next required batches from the peer pool if the chain is syncing.
162
170
  * It will exhaust the peer pool and left over batches until the batch buffer is reached.
@@ -1 +1 @@
1
- {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../../src/sync/range/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAA8B,MAAM,EAAgC,MAAM,iBAAiB,CAAC;AAGnG,OAAO,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,iEAAiE,CAAC;AAGrG,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,UAAU,EAAuB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAC,YAAY,EAAC,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAC,UAAU,EAAY,MAAM,yBAAyB,CAAC;AAO9D,OAAO,EAAC,oBAAoB,EAA2B,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,KAAK,EAAc,cAAc,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAczF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,mBAAmB,EAAE,CACnB,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,QAAQ,EAAE,aAAa,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,qDAAqD;IACrD,eAAe,EAAE,CACf,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,KACpB,OAAO,CACV,UAAU,CAAC;QAAC,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,CAAA;KAAC,EAAE,oBAAoB,CAAC,CACpH,CAAC;IACF,iFAAiF;IACjF,UAAU,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9E,iEAAiE;IACjE,wBAAwB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC;IAC3D,6CAA6C;IAC7C,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/D,+DAA+D;IAC/D,gBAAgB,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAEF,oBAAY,eAAe;IACzB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAMD;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC;;;OAGG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB,yFAAyF;IACzF,eAAe,SAAK;IAEpB,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC;IAChC;;;;OAIG;IACH,OAAO,CAAC,0BAA0B,CAAQ;IAC1C,OAAO,CAAC,MAAM,CAA2B;IAEzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;IAC1E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA2C;IACpF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmC;IAEpE,uFAAuF;IACvF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IAEjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,YACE,iBAAiB,EAAE,KAAK,EACxB,aAAa,EAAE,WAAW,EAC1B,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,gBAAgB,EA4B1B;IAED;;;OAGG;IACH,YAAY,CAAC,mBAAmB,EAAE,KAAK,GAAG,IAAI,CA6B7C;IAED;;OAEG;IACH,WAAW,IAAI,IAAI,CAGlB;IAED;;OAEG;IACH,MAAM,IAAI,IAAI,CAGb;IAED;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAIlD;IAED;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAKrC;IAED;;OAEG;IACH,eAAe,IAAI,aAAa,EAAE,CAEjC;IAED,IAAI,iBAAiB,IAAI,IAAI,CAG5B;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,QAAQ,IAAI,SAAS,EAAE,CAEtB;IAED,wCAAwC;IACxC,aAAa,IAAI,mBAAmB,CAUnC;IAED,OAAO,CAAC,aAAa;YAWP,IAAI;IAkDlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmDtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;YA4CV,SAAS;YAuIT,YAAY;IAqD1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,aAAa;CA6BtB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,cAAc,GACnB;IAAC,MAAM,EAAE,UAAU,CAAC,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAgB/D"}
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../../src/sync/range/chain.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { RequestErrorCode } from "@lodestar/reqresp";
2
1
  import { ErrorAborted, prettyPrintIndices, toRootHex } from "@lodestar/utils";
3
2
  import { isBlockInputBlobs, isBlockInputColumns } from "../../chain/blocks/blockInput/blockInput.js";
4
3
  import { BlockInputErrorCode } from "../../chain/blocks/blockInput/errors.js";
@@ -7,8 +6,9 @@ import { DataColumnSidecarErrorCode } from "../../chain/errors/dataColumnSidecar
7
6
  import { PeerAction, prettyPrintPeerIdStr } from "../../network/index.js";
8
7
  import { ItTrigger } from "../../util/itTrigger.js";
9
8
  import { wrapError } from "../../util/wrapError.js";
10
- import { BATCH_BUFFER_SIZE, EPOCHS_PER_BATCH, MAX_LOOK_AHEAD_EPOCHS, RATE_LIMITED_PEER_BACKOFF_MS, } from "../constants.js";
9
+ import { BATCH_BUFFER_SIZE, EPOCHS_PER_BATCH, MAX_LOOK_AHEAD_EPOCHS } from "../constants.js";
11
10
  import { DownloadByRangeErrorCode } from "../utils/downloadByRange.js";
11
+ import { getRateLimitedUntilMs } from "../utils/rateLimit.js";
12
12
  import { RangeSyncType } from "../utils/remoteSyncType.js";
13
13
  import { Batch, BatchError, BatchErrorCode, BatchStatus } from "./batch.js";
14
14
  import { ChainPeersBalancer, batchStartEpochIsAfterSlot, computeHighestTarget, getBatchSlotRange, getNextBatchToProcess, isSyncChainDone, toArr, toBeDownloadedStartEpoch, validateBatchesStatus, } from "./utils/index.js";
@@ -60,6 +60,10 @@ export class SyncChain {
60
60
  batchProcessor = new ItTrigger();
61
61
  /** Sorted map of batches undergoing some kind of processing. */
62
62
  batches = new Map();
63
+ /**
64
+ * `true` until the first `Batch` is constructed via `includeNextBatch`
65
+ */
66
+ isFirstBatch = true;
63
67
  peerset = new Map();
64
68
  /**
65
69
  * Tracks peers that have rate-limited us, mapped to the timestamp (ms) until which we should avoid them.
@@ -67,12 +71,14 @@ export class SyncChain {
67
71
  * The reqresp SelfRateLimiter independently enforces backoff at the protocol level as a safety net.
68
72
  */
69
73
  rateLimitedPeers = new Map();
74
+ rateLimitBackoffTimeout;
70
75
  logger;
71
76
  config;
72
77
  clock;
73
78
  metrics;
74
79
  custodyConfig;
75
- constructor(initialBatchEpoch, initialTarget, syncType, fns, modules) {
80
+ latestBid;
81
+ constructor(initialBatchEpoch, initialTarget, syncType, fns, modules, latestBid) {
76
82
  const { config, clock, custodyConfig, logger, metrics } = modules;
77
83
  this.firstBatchEpoch = initialBatchEpoch;
78
84
  this.lastEpochWithProcessBlocks = initialBatchEpoch;
@@ -87,6 +93,7 @@ export class SyncChain {
87
93
  this.clock = clock;
88
94
  this.metrics = metrics;
89
95
  this.custodyConfig = custodyConfig;
96
+ this.latestBid = latestBid;
90
97
  this.logger = logger;
91
98
  this.logId = `${syncType}-${nextChainId++}`;
92
99
  if (metrics) {
@@ -129,6 +136,7 @@ export class SyncChain {
129
136
  */
130
137
  stopSyncing() {
131
138
  this.status = SyncChainStatus.Stopped;
139
+ this.clearRateLimitBackoffTimer();
132
140
  this.logger.debug("SyncChain stopSyncing", { id: this.logId });
133
141
  }
134
142
  /**
@@ -136,6 +144,7 @@ export class SyncChain {
136
144
  */
137
145
  remove() {
138
146
  this.logger.debug("SyncChain remove", { id: this.logId });
147
+ this.clearRateLimitBackoffTimer();
139
148
  this.batchProcessor.end(new ErrorAborted("SyncChain"));
140
149
  }
141
150
  /**
@@ -242,6 +251,9 @@ export class SyncChain {
242
251
  }
243
252
  throw e;
244
253
  }
254
+ finally {
255
+ this.clearRateLimitBackoffTimer();
256
+ }
245
257
  }
246
258
  /**
247
259
  * Request to process batches if possible
@@ -262,6 +274,35 @@ export class SyncChain {
262
274
  this.batchProcessor.end(e);
263
275
  }
264
276
  }
277
+ scheduleRateLimitBackoffRetry() {
278
+ this.clearRateLimitBackoffTimer();
279
+ if (this.status !== SyncChainStatus.Syncing || this.rateLimitedPeers.size === 0) {
280
+ return;
281
+ }
282
+ const now = Date.now();
283
+ let retryAt = null;
284
+ for (const [peerId, rateLimitedUntil] of this.rateLimitedPeers.entries()) {
285
+ if (rateLimitedUntil <= now) {
286
+ this.rateLimitedPeers.delete(peerId);
287
+ continue;
288
+ }
289
+ retryAt = Math.min(retryAt ?? rateLimitedUntil, rateLimitedUntil);
290
+ }
291
+ if (retryAt === null) {
292
+ return;
293
+ }
294
+ this.rateLimitBackoffTimeout = setTimeout(() => {
295
+ this.rateLimitBackoffTimeout = undefined;
296
+ this.triggerBatchDownloader();
297
+ this.scheduleRateLimitBackoffRetry();
298
+ }, Math.max(0, retryAt - now));
299
+ }
300
+ clearRateLimitBackoffTimer() {
301
+ if (this.rateLimitBackoffTimeout !== undefined) {
302
+ clearTimeout(this.rateLimitBackoffTimeout);
303
+ this.rateLimitBackoffTimeout = undefined;
304
+ }
305
+ }
265
306
  /**
266
307
  * Attempts to request the next required batches from the peer pool if the chain is syncing.
267
308
  * It will exhaust the peer pool and left over batches until the batch buffer is reached.
@@ -342,7 +383,10 @@ export class SyncChain {
342
383
  this.logger.error("Attempting to add existing Batch to SyncChain", { id: this.logId, startEpoch });
343
384
  return null;
344
385
  }
345
- const batch = new Batch(startEpoch, this.config, this.clock, this.custodyConfig);
386
+ const batch = new Batch(startEpoch, this.config, this.clock, this.custodyConfig, this.isFirstBatch,
387
+ // `latestBid` is only meaningful for the first batch's parent-payload check
388
+ this.isFirstBatch ? this.latestBid : undefined, this.target.slot);
389
+ this.isFirstBatch = false;
346
390
  this.batches.set(startEpoch, batch);
347
391
  return batch;
348
392
  }
@@ -356,7 +400,7 @@ export class SyncChain {
356
400
  peer: prettyPrintPeerIdStr(peer.peerId),
357
401
  });
358
402
  try {
359
- batch.startDownloading(peer.peerId);
403
+ batch.startDownloading(peer);
360
404
  // wrapError ensures to never call both batch success() and batch error()
361
405
  const res = await wrapError(this.downloadByRange(peer, batch, this.syncType));
362
406
  if (res.err) {
@@ -384,6 +428,8 @@ export class SyncChain {
384
428
  case DownloadByRangeErrorCode.OUT_OF_ORDER_BLOCKS:
385
429
  case DownloadByRangeErrorCode.OUT_OF_RANGE_BLOCKS:
386
430
  case DownloadByRangeErrorCode.PARENT_ROOT_MISMATCH:
431
+ case DownloadByRangeErrorCode.INVALID_ENVELOPE_BEACON_BLOCK_ROOT:
432
+ case DownloadByRangeErrorCode.INVALID_CHAIN_SEGMENT:
387
433
  case BlobSidecarErrorCode.INCLUSION_PROOF_INVALID:
388
434
  case BlobSidecarErrorCode.INVALID_KZG_PROOF_BATCH:
389
435
  case DataColumnSidecarErrorCode.INCORRECT_KZG_COMMITMENTS_COUNT:
@@ -393,9 +439,11 @@ export class SyncChain {
393
439
  this.reportPeer(peer.peerId, PeerAction.LowToleranceError, res.err.message);
394
440
  }
395
441
  this.logger.verbose("Batch download error", { id: this.logId, ...batch.getMetadata(), peer: prettyPrintPeerIdStr(peer.peerId) }, res.err);
396
- if (errCode === RequestErrorCode.RESP_RATE_LIMITED || errCode === RequestErrorCode.REQUEST_SELF_RATE_LIMITED) {
442
+ const rateLimitedUntilMs = getRateLimitedUntilMs(res.err);
443
+ if (rateLimitedUntilMs !== null) {
397
444
  // Peer rate-limited us — don't count as a failed download attempt and mark peer for backoff
398
- this.rateLimitedPeers.set(peer.peerId, Date.now() + RATE_LIMITED_PEER_BACKOFF_MS);
445
+ this.rateLimitedPeers.set(peer.peerId, rateLimitedUntilMs);
446
+ this.scheduleRateLimitBackoffRetry();
399
447
  batch.downloadingRateLimited();
400
448
  this.triggerBatchDownloader();
401
449
  }