@lodestar/beacon-node 1.43.0-dev.87cbe69c66 → 1.43.0-dev.8ad5d8be4c

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 (153) hide show
  1. package/lib/chain/blocks/blockInput/blockInput.d.ts +3 -0
  2. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  3. package/lib/chain/blocks/blockInput/blockInput.js +4 -1
  4. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  5. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  6. package/lib/chain/blocks/importBlock.js +0 -16
  7. package/lib/chain/blocks/importBlock.js.map +1 -1
  8. package/lib/chain/blocks/importExecutionPayload.d.ts +4 -0
  9. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  10. package/lib/chain/blocks/importExecutionPayload.js +12 -1
  11. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  12. package/lib/chain/blocks/index.d.ts.map +1 -1
  13. package/lib/chain/blocks/index.js +6 -7
  14. package/lib/chain/blocks/index.js.map +1 -1
  15. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +11 -1
  16. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  17. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +23 -1
  18. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  19. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +16 -0
  20. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  21. package/lib/chain/blocks/utils/chainSegment.d.ts +1 -3
  22. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  23. package/lib/chain/blocks/utils/chainSegment.js +29 -26
  24. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  25. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
  26. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +5 -4
  27. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  28. package/lib/chain/chain.d.ts.map +1 -1
  29. package/lib/chain/chain.js +25 -10
  30. package/lib/chain/chain.js.map +1 -1
  31. package/lib/chain/initState.d.ts.map +1 -1
  32. package/lib/chain/initState.js +6 -1
  33. package/lib/chain/initState.js.map +1 -1
  34. package/lib/chain/prepareNextSlot.js +1 -1
  35. package/lib/chain/prepareNextSlot.js.map +1 -1
  36. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +14 -10
  37. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  38. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +51 -17
  39. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  40. package/lib/chain/seenCache/seenProposerPreferences.d.ts +1 -1
  41. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -1
  42. package/lib/chain/seenCache/seenProposerPreferences.js +6 -11
  43. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -1
  44. package/lib/metrics/metrics/lodestar.d.ts +4 -0
  45. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  46. package/lib/metrics/metrics/lodestar.js +5 -0
  47. package/lib/metrics/metrics/lodestar.js.map +1 -1
  48. package/lib/network/gossip/topic.d.ts +749 -2
  49. package/lib/network/gossip/topic.d.ts.map +1 -1
  50. package/lib/network/interface.d.ts +1 -0
  51. package/lib/network/interface.d.ts.map +1 -1
  52. package/lib/network/network.d.ts +1 -0
  53. package/lib/network/network.d.ts.map +1 -1
  54. package/lib/network/network.js +3 -0
  55. package/lib/network/network.js.map +1 -1
  56. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  57. package/lib/network/processor/gossipHandlers.js +45 -1
  58. package/lib/network/processor/gossipHandlers.js.map +1 -1
  59. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  60. package/lib/network/reqresp/ReqRespBeaconNode.js +1 -1
  61. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  62. package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts +9 -0
  63. package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts.map +1 -0
  64. package/lib/network/reqresp/handlers/beaconBlocksByHead.js +61 -0
  65. package/lib/network/reqresp/handlers/beaconBlocksByHead.js.map +1 -0
  66. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  67. package/lib/network/reqresp/handlers/index.js +5 -0
  68. package/lib/network/reqresp/handlers/index.js.map +1 -1
  69. package/lib/network/reqresp/interface.d.ts +1 -1
  70. package/lib/network/reqresp/interface.js +1 -1
  71. package/lib/network/reqresp/protocols.d.ts +1 -0
  72. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  73. package/lib/network/reqresp/protocols.js +5 -0
  74. package/lib/network/reqresp/protocols.js.map +1 -1
  75. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  76. package/lib/network/reqresp/rateLimit.js +4 -0
  77. package/lib/network/reqresp/rateLimit.js.map +1 -1
  78. package/lib/network/reqresp/score.d.ts.map +1 -1
  79. package/lib/network/reqresp/score.js +1 -0
  80. package/lib/network/reqresp/score.js.map +1 -1
  81. package/lib/network/reqresp/types.d.ts +3 -0
  82. package/lib/network/reqresp/types.d.ts.map +1 -1
  83. package/lib/network/reqresp/types.js +3 -0
  84. package/lib/network/reqresp/types.js.map +1 -1
  85. package/lib/sync/constants.d.ts +7 -1
  86. package/lib/sync/constants.d.ts.map +1 -1
  87. package/lib/sync/constants.js +7 -4
  88. package/lib/sync/constants.js.map +1 -1
  89. package/lib/sync/range/batch.d.ts +32 -6
  90. package/lib/sync/range/batch.d.ts.map +1 -1
  91. package/lib/sync/range/batch.js +215 -41
  92. package/lib/sync/range/batch.js.map +1 -1
  93. package/lib/sync/range/chain.d.ts +16 -2
  94. package/lib/sync/range/chain.d.ts.map +1 -1
  95. package/lib/sync/range/chain.js +77 -4
  96. package/lib/sync/range/chain.js.map +1 -1
  97. package/lib/sync/range/range.d.ts.map +1 -1
  98. package/lib/sync/range/range.js +54 -5
  99. package/lib/sync/range/range.js.map +1 -1
  100. package/lib/sync/range/utils/peerBalancer.d.ts +2 -1
  101. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -1
  102. package/lib/sync/range/utils/peerBalancer.js +8 -4
  103. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  104. package/lib/sync/sync.d.ts.map +1 -1
  105. package/lib/sync/sync.js +13 -0
  106. package/lib/sync/sync.js.map +1 -1
  107. package/lib/sync/unknownBlock.d.ts +7 -0
  108. package/lib/sync/unknownBlock.d.ts.map +1 -1
  109. package/lib/sync/unknownBlock.js +127 -10
  110. package/lib/sync/unknownBlock.js.map +1 -1
  111. package/lib/sync/utils/downloadByRange.d.ts +36 -9
  112. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  113. package/lib/sync/utils/downloadByRange.js +89 -42
  114. package/lib/sync/utils/downloadByRange.js.map +1 -1
  115. package/lib/sync/utils/rateLimit.d.ts +2 -0
  116. package/lib/sync/utils/rateLimit.d.ts.map +1 -0
  117. package/lib/sync/utils/rateLimit.js +15 -0
  118. package/lib/sync/utils/rateLimit.js.map +1 -0
  119. package/package.json +16 -16
  120. package/src/chain/blocks/blockInput/blockInput.ts +4 -1
  121. package/src/chain/blocks/importBlock.ts +0 -18
  122. package/src/chain/blocks/importExecutionPayload.ts +18 -6
  123. package/src/chain/blocks/index.ts +5 -7
  124. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +31 -2
  125. package/src/chain/blocks/payloadEnvelopeInput/types.ts +17 -0
  126. package/src/chain/blocks/utils/chainSegment.ts +30 -27
  127. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +7 -4
  128. package/src/chain/chain.ts +29 -9
  129. package/src/chain/initState.ts +9 -1
  130. package/src/chain/prepareNextSlot.ts +1 -1
  131. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +66 -20
  132. package/src/chain/seenCache/seenProposerPreferences.ts +7 -12
  133. package/src/metrics/metrics/lodestar.ts +6 -0
  134. package/src/network/interface.ts +1 -0
  135. package/src/network/network.ts +12 -0
  136. package/src/network/processor/gossipHandlers.ts +53 -1
  137. package/src/network/reqresp/ReqRespBeaconNode.ts +1 -0
  138. package/src/network/reqresp/handlers/beaconBlocksByHead.ts +91 -0
  139. package/src/network/reqresp/handlers/index.ts +5 -0
  140. package/src/network/reqresp/interface.ts +1 -1
  141. package/src/network/reqresp/protocols.ts +6 -0
  142. package/src/network/reqresp/rateLimit.ts +4 -0
  143. package/src/network/reqresp/score.ts +1 -0
  144. package/src/network/reqresp/types.ts +5 -0
  145. package/src/sync/constants.ts +8 -4
  146. package/src/sync/range/batch.ts +256 -47
  147. package/src/sync/range/chain.ts +94 -5
  148. package/src/sync/range/range.ts +68 -5
  149. package/src/sync/range/utils/peerBalancer.ts +9 -3
  150. package/src/sync/sync.ts +13 -1
  151. package/src/sync/unknownBlock.ts +157 -10
  152. package/src/sync/utils/downloadByRange.ts +156 -44
  153. 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
  */
@@ -113,6 +149,7 @@ export class Batch {
113
149
  const neededColumns = new Set();
114
150
  const envelopesBySlot = this.state.payloadEnvelopes ?? new Map();
115
151
  // ensure blocks are in slot-wise order
152
+ const isPostGloas = isForkPostGloas(this.forkName);
116
153
  for (const blockInput of blocks) {
117
154
  const blockSlot = blockInput.slot;
118
155
  // check if block/data is present (hasBlock/hasAllData). If present then check if startSlot is the same as
@@ -128,20 +165,38 @@ export class Batch {
128
165
  if (blockInput.hasBlock() && blockStartSlot === blockSlot) {
129
166
  blockStartSlot = blockSlot + 1;
130
167
  }
131
- if (blockInput.hasBlock() &&
132
- envelopeStartSlot === blockSlot &&
133
- envelopesBySlot.get(blockSlot)?.hasPayloadEnvelope()) {
134
- envelopeStartSlot = blockSlot + 1;
135
- }
136
- if (!blockInput.hasAllData()) {
137
- if (isBlockInputColumns(blockInput)) {
138
- for (const index of blockInput.getMissingSampledColumnMeta().missing) {
168
+ // Range sync uses hasComputedAllData (all sampled columns physically present), not hasAllData
169
+ // which flips at the reconstruction threshold. Sync never triggers reconstruction, so accepting
170
+ // a half-downloaded block here makes writeBlockInputToDb later block on waitForComputedAllData.
171
+ if (isPostGloas) {
172
+ // Post-Gloas: column data lives on PayloadEnvelopeInput, not on BlockInputNoData.
173
+ const payloadInput = envelopesBySlot.get(blockSlot);
174
+ if (blockInput.hasBlock() && envelopeStartSlot === blockSlot && payloadInput?.hasPayloadEnvelope()) {
175
+ envelopeStartSlot = blockSlot + 1;
176
+ }
177
+ if (payloadInput && !payloadInput.hasComputedAllData()) {
178
+ for (const index of payloadInput.getMissingSampledColumnMeta().missing) {
139
179
  neededColumns.add(index);
140
180
  }
141
181
  }
182
+ else if (payloadInput?.hasComputedAllData() && dataStartSlot === blockSlot) {
183
+ // Only advance dataStartSlot when we know columns for this slot are complete. If
184
+ // payloadInput is missing entirely we cannot tell, so stop here so the next round
185
+ // re-requests columns (and envelopes) starting at this slot.
186
+ dataStartSlot = blockSlot + 1;
187
+ }
142
188
  }
143
- else if (dataStartSlot === blockSlot) {
144
- dataStartSlot = blockSlot + 1;
189
+ else {
190
+ if (isBlockInputColumns(blockInput) ? !blockInput.hasComputedAllData() : !blockInput.hasAllData()) {
191
+ if (isBlockInputColumns(blockInput)) {
192
+ for (const index of blockInput.getMissingSampledColumnMeta().missing) {
193
+ neededColumns.add(index);
194
+ }
195
+ }
196
+ }
197
+ else if (dataStartSlot === blockSlot) {
198
+ dataStartSlot = blockSlot + 1;
199
+ }
145
200
  }
146
201
  }
147
202
  // if the blockStartSlot or dataStartSlot is after the desired endSlot then no request will be made for the batch
@@ -160,11 +215,15 @@ export class Batch {
160
215
  // range of 40 - 63, startSlot will be inclusive but subtraction will exclusive so need to + 1
161
216
  const count = endSlot - dataStartSlot + 1;
162
217
  if (isForkPostFulu(this.forkName) && withinValidRequestWindow) {
163
- requests.columnsRequest = {
164
- count,
165
- startSlot: dataStartSlot,
166
- columns: Array.from(neededColumns),
167
- };
218
+ // Skip the column re-request when we have no specific column indices outstanding.
219
+ // Peer rejects an empty `columns` list
220
+ if (neededColumns.size > 0) {
221
+ requests.columnsRequest = {
222
+ count,
223
+ startSlot: dataStartSlot,
224
+ columns: Array.from(neededColumns),
225
+ };
226
+ }
168
227
  }
169
228
  else if (isForkPostDeneb(this.forkName) && withinValidRequestWindow) {
170
229
  requests.blobsRequest = {
@@ -180,6 +239,33 @@ export class Batch {
180
239
  count: endSlot - envelopeStartSlot + 1,
181
240
  };
182
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
+ }
183
269
  return requests;
184
270
  }
185
271
  /**
@@ -189,22 +275,22 @@ export class Batch {
189
275
  if (!isForkPostFulu(this.forkName)) {
190
276
  return this.requests;
191
277
  }
192
- // post-fulu we need to ensure that we only request columns that the peer has advertised
193
- const { columnsRequest } = this.requests;
194
- if (columnsRequest == null) {
195
- return this.requests;
196
- }
278
+ // post-fulu we need to ensure that we only request columns that the peer has advertised.
279
+ const { columnsRequest, parentPayloadRequest } = this.requests;
197
280
  const peerColumns = new Set(peer.custodyColumns ?? []);
198
- const requestedColumns = columnsRequest.columns.filter((c) => peerColumns.has(c));
199
- if (requestedColumns.length === columnsRequest.columns.length) {
200
- return this.requests;
201
- }
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
+ : {};
202
290
  return {
203
291
  ...this.requests,
204
- columnsRequest: {
205
- ...columnsRequest,
206
- columns: requestedColumns,
207
- },
292
+ ...updatedColumnRequest,
293
+ ...updatedParentPayloadRequest,
208
294
  };
209
295
  }
210
296
  /**
@@ -213,6 +299,31 @@ export class Batch {
213
299
  getFailedPeers() {
214
300
  return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.flatMap((a) => a.peers)];
215
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
+ }
216
327
  getMetadata() {
217
328
  const { blocksRequest, blobsRequest, columnsRequest, envelopesRequest } = this.requests;
218
329
  const failedProcessingPeerList = this.failedProcessingAttempts.flatMap((a) => a.peers);
@@ -248,9 +359,11 @@ export class Batch {
248
359
  if (this.state.status !== BatchStatus.AwaitingDownload) {
249
360
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.AwaitingDownload));
250
361
  }
362
+ const request = getTrackedRequest(this.getRequestsForPeer(peer));
251
363
  this.state = {
252
364
  status: BatchStatus.Downloading,
253
- peer,
365
+ peer: peer.peerId,
366
+ request,
254
367
  blocks: this.state.blocks,
255
368
  payloadEnvelopes: this.state.payloadEnvelopes,
256
369
  };
@@ -264,12 +377,26 @@ export class Batch {
264
377
  }
265
378
  // ensure that blocks are always sorted before getting stored on the batch.state or being used to getRequests
266
379
  blocks.sort((a, b) => a.slot - b.slot);
267
- 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);
268
391
  let allComplete = true;
269
392
  const slots = new Set();
270
393
  for (const block of blocks) {
271
394
  slots.add(block.slot);
272
- if (!block.hasBlockAndAllData()) {
395
+ const dataComplete = isBlockInputColumns(block)
396
+ ? // by_range needs to download all columns
397
+ block.hasBlock() && block.hasComputedAllData()
398
+ : block.hasBlockAndAllData();
399
+ if (!dataComplete) {
273
400
  allComplete = false;
274
401
  }
275
402
  }
@@ -283,12 +410,45 @@ export class Batch {
283
410
  });
284
411
  }
285
412
  const newPayloadEnvelopes = payloadEnvelopes ?? this.state.payloadEnvelopes;
413
+ if (allComplete && isForkPostGloas(this.forkName)) {
414
+ for (const block of blocks) {
415
+ const payloadInput = newPayloadEnvelopes?.get(block.slot);
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()) {
419
+ allComplete = false;
420
+ break;
421
+ }
422
+ }
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
+ }
286
446
  if (allComplete) {
287
447
  this.state = { status: BatchStatus.AwaitingProcessing, blocks, payloadEnvelopes: newPayloadEnvelopes };
288
448
  }
289
449
  else {
290
- this.requests = this.getRequests(blocks);
291
450
  this.state = { status: BatchStatus.AwaitingDownload, blocks, payloadEnvelopes: newPayloadEnvelopes };
451
+ this.requests = this.getRequests(blocks);
292
452
  }
293
453
  return this.state;
294
454
  }
@@ -309,6 +469,20 @@ export class Batch {
309
469
  payloadEnvelopes: this.state.payloadEnvelopes,
310
470
  };
311
471
  }
472
+ /**
473
+ * Downloading -> AwaitingDownload (without counting as a failed attempt).
474
+ * Used when the peer rate-limited us — the request was never actually served.
475
+ */
476
+ downloadingRateLimited() {
477
+ if (this.state.status !== BatchStatus.Downloading) {
478
+ throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
479
+ }
480
+ this.state = {
481
+ status: BatchStatus.AwaitingDownload,
482
+ blocks: this.state.blocks,
483
+ payloadEnvelopes: this.state.payloadEnvelopes,
484
+ };
485
+ }
312
486
  /**
313
487
  * AwaitingProcessing -> Processing
314
488
  */
@@ -319,10 +493,10 @@ export class Batch {
319
493
  const blocks = this.state.blocks;
320
494
  const payloadEnvelopes = this.state.payloadEnvelopes;
321
495
  const hash = hashBlocks(blocks, this.config); // tracks blocks to report peer on processing error
322
- // Reset goodPeers in case another download attempt needs to be made. When Attempt is successful or not the peers
323
- // that the data came from will be handled by the Attempt that goes for processing
324
- const peers = this.goodPeers;
325
- 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();
326
500
  this.state = { status: BatchStatus.Processing, blocks, payloadEnvelopes, attempt: { peers, hash } };
327
501
  return { blocks, payloadEnvelopes, peers };
328
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,13 +100,25 @@ 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;
108
+ /**
109
+ * Tracks peers that have rate-limited us, mapped to the timestamp (ms) until which we should avoid them.
110
+ * This is a sync-layer optimization to avoid assigning batches to backed-off peers.
111
+ * The reqresp SelfRateLimiter independently enforces backoff at the protocol level as a safety net.
112
+ */
113
+ private readonly rateLimitedPeers;
114
+ private rateLimitBackoffTimeout;
104
115
  private readonly logger;
105
116
  private readonly config;
106
117
  private readonly clock;
107
118
  private readonly metrics;
108
119
  private readonly custodyConfig;
109
- 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);
110
122
  /**
111
123
  * Start syncing a new chain or an old one with an existing peer list
112
124
  * In the same call, advance the chain if localFinalizedEpoch >
@@ -151,6 +163,8 @@ export declare class SyncChain {
151
163
  * Backlogs requests into a single pending request
152
164
  */
153
165
  private triggerBatchDownloader;
166
+ private scheduleRateLimitBackoffRetry;
167
+ private clearRateLimitBackoffTimer;
154
168
  /**
155
169
  * Attempts to request the next required batches from the peer pool if the chain is syncing.
156
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":"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"}
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../../src/sync/range/chain.ts"],"names":[],"mappings":"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"}