@lodestar/beacon-node 1.36.0-dev.9dbc67b579 → 1.36.0-dev.9f2bb12ea7

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 (96) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +41 -22
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/chain/chain.d.ts.map +1 -1
  5. package/lib/chain/chain.js +5 -4
  6. package/lib/chain/chain.js.map +1 -1
  7. package/lib/chain/errors/dataColumnSidecarError.d.ts +17 -14
  8. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  9. package/lib/chain/errors/dataColumnSidecarError.js +4 -0
  10. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  11. package/lib/chain/options.d.ts +0 -2
  12. package/lib/chain/options.d.ts.map +1 -1
  13. package/lib/chain/options.js +2 -2
  14. package/lib/chain/options.js.map +1 -1
  15. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +16 -1
  16. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  17. package/lib/chain/stateCache/persistentCheckpointsCache.js +31 -1
  18. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  19. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  20. package/lib/chain/validation/dataColumnSidecar.js +32 -15
  21. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  22. package/lib/network/core/networkCore.d.ts.map +1 -1
  23. package/lib/network/core/networkCore.js +5 -1
  24. package/lib/network/core/networkCore.js.map +1 -1
  25. package/lib/network/core/networkCoreWorker.js +6 -1
  26. package/lib/network/core/networkCoreWorker.js.map +1 -1
  27. package/lib/network/core/networkCoreWorkerHandler.js +1 -1
  28. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  29. package/lib/network/events.d.ts +1 -0
  30. package/lib/network/events.d.ts.map +1 -1
  31. package/lib/network/gossip/encoding.js +1 -1
  32. package/lib/network/gossip/encoding.js.map +1 -1
  33. package/lib/network/gossip/snappy_bun.d.ts +3 -0
  34. package/lib/network/gossip/snappy_bun.d.ts.map +1 -0
  35. package/lib/network/gossip/snappy_bun.js +3 -0
  36. package/lib/network/gossip/snappy_bun.js.map +1 -0
  37. package/lib/network/metadata.d.ts +1 -1
  38. package/lib/network/metadata.d.ts.map +1 -1
  39. package/lib/network/metadata.js +1 -0
  40. package/lib/network/metadata.js.map +1 -1
  41. package/lib/network/options.d.ts +0 -1
  42. package/lib/network/options.d.ts.map +1 -1
  43. package/lib/network/options.js.map +1 -1
  44. package/lib/network/processor/gossipHandlers.js +1 -1
  45. package/lib/network/processor/gossipHandlers.js.map +1 -1
  46. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  47. package/lib/network/reqresp/ReqRespBeaconNode.js +3 -1
  48. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  49. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -1
  50. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  51. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +11 -2
  52. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  53. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +2 -1
  54. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  55. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +9 -1
  56. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  57. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +2 -1
  58. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -1
  59. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +9 -1
  60. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  61. package/lib/network/reqresp/handlers/index.js +6 -6
  62. package/lib/network/reqresp/handlers/index.js.map +1 -1
  63. package/lib/network/reqresp/types.d.ts +1 -0
  64. package/lib/network/reqresp/types.d.ts.map +1 -1
  65. package/lib/sync/utils/downloadByRange.d.ts +58 -13
  66. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  67. package/lib/sync/utils/downloadByRange.js +201 -82
  68. package/lib/sync/utils/downloadByRange.js.map +1 -1
  69. package/lib/util/blobs.d.ts +1 -1
  70. package/lib/util/blobs.d.ts.map +1 -1
  71. package/lib/util/blobs.js +53 -20
  72. package/lib/util/blobs.js.map +1 -1
  73. package/package.json +19 -14
  74. package/src/api/impl/beacon/blocks/index.ts +47 -25
  75. package/src/chain/chain.ts +5 -5
  76. package/src/chain/errors/dataColumnSidecarError.ts +20 -14
  77. package/src/chain/options.ts +2 -3
  78. package/src/chain/stateCache/persistentCheckpointsCache.ts +45 -2
  79. package/src/chain/validation/dataColumnSidecar.ts +34 -16
  80. package/src/network/core/networkCore.ts +5 -1
  81. package/src/network/core/networkCoreWorker.ts +7 -2
  82. package/src/network/core/networkCoreWorkerHandler.ts +1 -1
  83. package/src/network/events.ts +1 -1
  84. package/src/network/gossip/encoding.ts +1 -1
  85. package/src/network/gossip/snappy_bun.ts +2 -0
  86. package/src/network/metadata.ts +3 -1
  87. package/src/network/options.ts +0 -1
  88. package/src/network/processor/gossipHandlers.ts +1 -1
  89. package/src/network/reqresp/ReqRespBeaconNode.ts +3 -1
  90. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +15 -2
  91. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +13 -1
  92. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +13 -1
  93. package/src/network/reqresp/handlers/index.ts +6 -6
  94. package/src/network/reqresp/types.ts +1 -0
  95. package/src/sync/utils/downloadByRange.ts +259 -103
  96. package/src/util/blobs.ts +64 -20
@@ -1,4 +1,5 @@
1
- import { LodestarError, fromHex, prettyBytes, prettyPrintIndices, toRootHex } from "@lodestar/utils";
1
+ import { isForkPostFulu, isForkPostGloas, } from "@lodestar/params";
2
+ import { LodestarError, fromHex, prettyPrintIndices, toRootHex } from "@lodestar/utils";
2
3
  import { BlockInputSource, DAType, isBlockInputBlobs, isBlockInputColumns, } from "../../chain/blocks/blockInput/index.js";
3
4
  import { validateBlockBlobSidecars } from "../../chain/validation/blobSidecar.js";
4
5
  import { validateBlockDataColumnSidecars } from "../../chain/validation/dataColumnSidecar.js";
@@ -37,7 +38,11 @@ export function cacheByRangeResponses({ cache, peerIdStr, responses, batchBlocks
37
38
  }
38
39
  }
39
40
  for (const { blockRoot, blobSidecars } of responses.validatedBlobSidecars ?? []) {
40
- const existing = updatedBatchBlocks.get(blobSidecars[0].signedBlockHeader.message.slot);
41
+ const dataSlot = blobSidecars.at(0)?.signedBlockHeader.message.slot;
42
+ if (dataSlot === undefined) {
43
+ throw new Error(`Coding Error: empty blobSidecars returned for blockRoot=${toRootHex(blockRoot)} from validation functions`);
44
+ }
45
+ const existing = updatedBatchBlocks.get(dataSlot);
41
46
  const blockRootHex = toRootHex(blockRoot);
42
47
  if (!existing) {
43
48
  throw new Error("Coding error: blockInput must exist when adding blobs");
@@ -46,7 +51,7 @@ export function cacheByRangeResponses({ cache, peerIdStr, responses, batchBlocks
46
51
  throw new DownloadByRangeError({
47
52
  code: DownloadByRangeErrorCode.MISMATCH_BLOCK_INPUT_TYPE,
48
53
  slot: existing.slot,
49
- blockRoot: prettyBytes(existing.blockRootHex),
54
+ blockRoot: existing.blockRootHex,
50
55
  expected: DAType.Blobs,
51
56
  actual: existing.type,
52
57
  });
@@ -63,16 +68,20 @@ export function cacheByRangeResponses({ cache, peerIdStr, responses, batchBlocks
63
68
  }
64
69
  }
65
70
  for (const { blockRoot, columnSidecars } of responses.validatedColumnSidecars ?? []) {
66
- const existing = updatedBatchBlocks.get(columnSidecars[0].signedBlockHeader.message.slot);
71
+ const dataSlot = columnSidecars.at(0)?.signedBlockHeader.message.slot;
72
+ if (dataSlot === undefined) {
73
+ throw new Error(`Coding Error: empty columnSidecars returned for blockRoot=${toRootHex(blockRoot)} from validation functions`);
74
+ }
75
+ const existing = updatedBatchBlocks.get(dataSlot);
67
76
  const blockRootHex = toRootHex(blockRoot);
68
77
  if (!existing) {
69
- throw new Error("Coding error: blockInput must exist when adding blobs");
78
+ throw new Error("Coding error: blockInput must exist when adding columns");
70
79
  }
71
80
  if (!isBlockInputColumns(existing)) {
72
81
  throw new DownloadByRangeError({
73
82
  code: DownloadByRangeErrorCode.MISMATCH_BLOCK_INPUT_TYPE,
74
83
  slot: existing.slot,
75
- blockRoot: prettyBytes(existing.blockRootHex),
84
+ blockRoot: existing.blockRootHex,
76
85
  expected: DAType.Columns,
77
86
  actual: existing.type,
78
87
  });
@@ -157,23 +166,27 @@ export async function validateResponses({ config, batchBlocks, blocksRequest, bl
157
166
  // If no blocksRequest is provided, batchBlocks must have been provided from cache
158
167
  if ((blobsRequest || columnsRequest) && !(blocks || batchBlocks)) {
159
168
  throw new DownloadByRangeError({
160
- code: DownloadByRangeErrorCode.MISSING_BLOCKS,
169
+ code: DownloadByRangeErrorCode.MISSING_BLOCKS_RESPONSE,
161
170
  ...requestsLogMeta({ blobsRequest, columnsRequest }),
162
171
  }, "No blocks to validate data requests against");
163
172
  }
164
173
  const validatedResponses = {};
165
174
  let warnings = null;
166
175
  if (blocksRequest) {
167
- validatedResponses.validatedBlocks = validateBlockByRangeResponse(config, blocksRequest, blocks ?? []);
176
+ const result = validateBlockByRangeResponse(config, blocksRequest, blocks ?? []);
177
+ if (result.warnings?.length) {
178
+ warnings = result.warnings;
179
+ }
180
+ validatedResponses.validatedBlocks = result.result;
168
181
  }
169
182
  const dataRequest = blobsRequest ?? columnsRequest;
170
183
  if (!dataRequest) {
171
- return { result: validatedResponses, warnings: null };
184
+ return { result: validatedResponses, warnings };
172
185
  }
173
- const dataRequestBlocks = getBlocksForDataValidation(dataRequest, batchBlocks, blocksRequest ? validatedResponses.validatedBlocks : undefined);
174
- if (!dataRequestBlocks.length) {
186
+ const blocksForDataValidation = getBlocksForDataValidation(dataRequest, batchBlocks, validatedResponses.validatedBlocks?.length ? validatedResponses.validatedBlocks : undefined);
187
+ if (!blocksForDataValidation.length) {
175
188
  throw new DownloadByRangeError({
176
- code: DownloadByRangeErrorCode.MISSING_BLOCKS,
189
+ code: DownloadByRangeErrorCode.MISSING_BLOCKS_RESPONSE,
177
190
  ...requestsLogMeta({ blobsRequest, columnsRequest }),
178
191
  }, "No blocks in data request slot range to validate data response against");
179
192
  }
@@ -184,7 +197,7 @@ export async function validateResponses({ config, batchBlocks, blocksRequest, bl
184
197
  ...requestsLogMeta({ blobsRequest, columnsRequest }),
185
198
  }, "No blobSidecars to validate against blobsRequest");
186
199
  }
187
- validatedResponses.validatedBlobSidecars = await validateBlobsByRangeResponse(dataRequestBlocks, blobSidecars);
200
+ validatedResponses.validatedBlobSidecars = await validateBlobsByRangeResponse(blocksForDataValidation, blobSidecars);
188
201
  }
189
202
  if (columnsRequest) {
190
203
  if (!columnSidecars) {
@@ -193,7 +206,7 @@ export async function validateResponses({ config, batchBlocks, blocksRequest, bl
193
206
  ...requestsLogMeta({ blobsRequest, columnsRequest }),
194
207
  }, "No columnSidecars to check columnRequest against");
195
208
  }
196
- const validatedColumnSidecarsResult = await validateColumnsByRangeResponse(columnsRequest, dataRequestBlocks, columnSidecars);
209
+ const validatedColumnSidecarsResult = await validateColumnsByRangeResponse(config, columnsRequest, blocksForDataValidation, columnSidecars);
197
210
  validatedResponses.validatedColumnSidecars = validatedColumnSidecarsResult.result;
198
211
  warnings = validatedColumnSidecarsResult.warnings;
199
212
  }
@@ -210,17 +223,27 @@ export async function validateResponses({ config, batchBlocks, blocksRequest, bl
210
223
  */
211
224
  export function validateBlockByRangeResponse(config, blocksRequest, blocks) {
212
225
  const { startSlot, count } = blocksRequest;
213
- // TODO(fulu): This was added by @twoeths in #8150 but it breaks for epochs with 0 blocks during chain
214
- // liveness issues. See comment https://github.com/ChainSafe/lodestar/issues/8147#issuecomment-3246434697
215
- // if (!blocks.length) {
216
- // throw new DownloadByRangeError(
217
- // {
218
- // code: DownloadByRangeErrorCode.MISSING_BLOCKS_RESPONSE,
219
- // expectedCount: blocksRequest.count,
220
- // },
221
- // "Zero blocks in response"
222
- // );
223
- // }
226
+ // An error was thrown here by @twoeths in #8150 but it breaks for epochs with 0 blocks during chain
227
+ // liveness issues. See comment https://github.com/ChainSafe/lodestar/issues/8147#issuecomment-3246434697
228
+ // There are instances where clients return no blocks though. Need to monitor this via the warns to see
229
+ // if what the correct behavior should be
230
+ if (!blocks.length) {
231
+ throw new DownloadByRangeError({
232
+ code: DownloadByRangeErrorCode.MISSING_BLOCKS_RESPONSE,
233
+ ...requestsLogMeta({ blocksRequest }),
234
+ });
235
+ // TODO: this was causing deadlock again. need to come back and fix this so that its possible to process through
236
+ // an empty epoch for periods with poor liveness
237
+ // return {
238
+ // result: [],
239
+ // warnings: [
240
+ // new DownloadByRangeError({
241
+ // code: DownloadByRangeErrorCode.MISSING_BLOCKS_RESPONSE,
242
+ // ...requestsLogMeta({blocksRequest}),
243
+ // }),
244
+ // ],
245
+ // };
246
+ }
224
247
  if (blocks.length > count) {
225
248
  throw new DownloadByRangeError({
226
249
  code: DownloadByRangeErrorCode.EXTRA_BLOCKS,
@@ -260,13 +283,16 @@ export function validateBlockByRangeResponse(config, blocksRequest, blocks) {
260
283
  throw new DownloadByRangeError({
261
284
  code: DownloadByRangeErrorCode.PARENT_ROOT_MISMATCH,
262
285
  slot: blocks[i].message.slot,
263
- expected: prettyBytes(blockRoot),
264
- actual: prettyBytes(parentRoot),
286
+ expected: toRootHex(blockRoot),
287
+ actual: toRootHex(parentRoot),
265
288
  }, `Block parent root does not match the previous block's root in BeaconBlocksByRange response`);
266
289
  }
267
290
  }
268
291
  }
269
- return response;
292
+ return {
293
+ result: response,
294
+ warnings: null,
295
+ };
270
296
  }
271
297
  /**
272
298
  * Should not be called directly. Only exported for unit testing purposes.
@@ -313,82 +339,171 @@ export async function validateBlobsByRangeResponse(dataRequestBlocks, blobSideca
313
339
  }
314
340
  /**
315
341
  * Should not be called directly. Only exported for unit testing purposes
342
+ *
343
+ * Spec states:
344
+ * 1) must be within range [start_slot, start_slot + count]
345
+ * 2) should respond with all columns in the range or and 3:ResourceUnavailable (and potentially get down-scored)
346
+ * 3) must response with at least the sidecars of the first blob-carrying block that exists in the range
347
+ * 4) must include all sidecars from each block from which there are blobs
348
+ * 5) where they exists, sidecars must be sent in (slot, index) order
349
+ * 6) clients may limit the number of sidecars in a response
350
+ * 7) clients may stop responding mid-response if their view of fork-choice changes
351
+ *
352
+ * We will interpret the spec as follows
353
+ * - Errors when validating: 1, 3, 5
354
+ * - Warnings when validating: 2, 4, 6, 7
355
+ *
356
+ * For "warning" cases, where we get a partial response but sidecars are validated and correct with respect to the
357
+ * blocks, then they will be kept. This loosening of the spec is to help ensure sync goes smoothly and we can find
358
+ * the data needed in difficult network situations.
359
+ *
360
+ * Assume for the following two examples we request indices 5, 10, 15 for a range of slots 32-63
361
+ *
362
+ * For slots where we receive no sidecars, example slot 45, but blobs exist we will stop validating subsequent
363
+ * slots, 45-63. The next round of requests will get structured to pull the from the slot that had columns
364
+ * missing to the end of the range for all columns indices that were requested for the current partially failed
365
+ * request (slots 45-63 and indices 5, 10, 15).
366
+ *
367
+ * For slots where only some of the requested sidecars are received we will proceed with validation. For simplicity sake
368
+ * we will assume that if we only get some indices back for a (or several) slot(s) that the indices we get will be
369
+ * consistent. IE if a peer returns only index 5, they will most likely return that same index for subsequent slot
370
+ * (index 5 for slots 34, 35, 36, etc). They will not likely return 5 on slot 34, 10 on slot 35, 15 on slot 36, etc.
371
+ * This assumption makes the code simpler. For both cases the request for the next round will be structured correctly
372
+ * to pull any missing column indices for whatever range remains. The simplification just leads to re-verification
373
+ * of the columns but the number of columns downloaded will be the same regardless of if they are validated twice.
374
+ *
375
+ * validateColumnsByRangeResponse makes some assumptions about the data being passed in
376
+ * blocks are:
377
+ * - slotwise in order
378
+ * - form a chain
379
+ * - non-sparse response (any missing block is a skipped slot not a bad response)
380
+ * - last block is last slot received
316
381
  */
317
- export async function validateColumnsByRangeResponse(request, dataRequestBlocks, columnSidecars) {
318
- // Expected column count considering currently-validated batch blocks
319
- // TODO GLOAS: Post-gloas's blobKzgCommitments is not in beacon block body. Need to source it from somewhere else.
320
- const expectedColumnCount = dataRequestBlocks.reduce((acc, { block }) => {
321
- return block.message.body.blobKzgCommitments.length > 0
322
- ? request.columns.length + acc
323
- : acc;
324
- }, 0);
325
- const nextSlot = dataRequestBlocks.length
326
- ? dataRequestBlocks.at(-1).block.message.slot + 1
327
- : request.startSlot;
328
- const possiblyMissingBlocks = nextSlot - request.startSlot + request.count;
329
- // Allow for extra columns if some blocks are missing from the end of a batch
330
- // Eg: If we requested 10 blocks but only 8 were returned, allow for up to 2 * columns.length extra columns
331
- const maxColumnCount = expectedColumnCount + possiblyMissingBlocks * request.columns.length;
332
- if (columnSidecars.length > maxColumnCount) {
333
- // this never happens on devnet, so throw error for now
334
- throw new DownloadByRangeError({
335
- code: DownloadByRangeErrorCode.OVER_COLUMNS,
336
- max: maxColumnCount,
337
- actual: columnSidecars.length,
338
- }, "Extra data columns received in DataColumnSidecarsByRange response");
339
- }
382
+ export async function validateColumnsByRangeResponse(config, request, blocks, columnSidecars) {
340
383
  const warnings = [];
341
- // no need to check for columnSidecars.length vs expectedColumnCount here, will be checked per-block below
342
- const requestedColumns = new Set(request.columns);
343
- const validateSidecarsPromises = [];
344
- for (let blockIndex = 0, columnSidecarIndex = 0; blockIndex < dataRequestBlocks.length; blockIndex++) {
345
- const { block, blockRoot } = dataRequestBlocks[blockIndex];
346
- const slot = block.message.slot;
347
- const blockRootHex = toRootHex(blockRoot);
348
- // TODO GLOAS: Post-gloas's blobKzgCommitments is not in beacon block body. Need to source it from somewhere else.
349
- const blockKzgCommitments = block.message.body
350
- .blobKzgCommitments;
351
- const expectedColumns = blockKzgCommitments.length ? request.columns.length : 0;
352
- if (expectedColumns === 0) {
384
+ const seenColumns = new Map();
385
+ let currentSlot = -1;
386
+ let currentIndex = -1;
387
+ // Check for duplicates and order
388
+ for (const columnSidecar of columnSidecars) {
389
+ const slot = columnSidecar.signedBlockHeader.message.slot;
390
+ let seenSlotColumns = seenColumns.get(slot);
391
+ if (!seenSlotColumns) {
392
+ seenSlotColumns = new Map();
393
+ seenColumns.set(slot, seenSlotColumns);
394
+ }
395
+ if (seenSlotColumns.has(columnSidecar.index)) {
396
+ warnings.push(new DownloadByRangeError({
397
+ code: DownloadByRangeErrorCode.DUPLICATE_COLUMN,
398
+ slot,
399
+ index: columnSidecar.index,
400
+ }));
353
401
  continue;
354
402
  }
355
- const blockColumnSidecars = [];
356
- while (columnSidecarIndex < columnSidecars.length) {
357
- const columnSidecar = columnSidecars[columnSidecarIndex];
358
- if (columnSidecar.signedBlockHeader.message.slot !== block.message.slot) {
359
- // We've reached columns for the next block
360
- break;
403
+ if (currentSlot > slot) {
404
+ warnings.push(new DownloadByRangeError({
405
+ code: DownloadByRangeErrorCode.OUT_OF_ORDER_COLUMNS,
406
+ slot,
407
+ }, "ColumnSidecars received out of slot order"));
408
+ }
409
+ if (currentSlot === slot && currentIndex > columnSidecar.index) {
410
+ warnings.push(new DownloadByRangeError({
411
+ code: DownloadByRangeErrorCode.OUT_OF_ORDER_COLUMNS,
412
+ slot,
413
+ }, "Column indices out of order within a slot"));
414
+ }
415
+ seenSlotColumns.set(columnSidecar.index, columnSidecar);
416
+ if (currentSlot !== slot) {
417
+ // a new slot has started, reset index
418
+ currentIndex = -1;
419
+ }
420
+ else {
421
+ currentIndex = columnSidecar.index;
422
+ }
423
+ currentSlot = slot;
424
+ }
425
+ const validationPromises = [];
426
+ for (const { blockRoot, block } of blocks) {
427
+ const slot = block.message.slot;
428
+ const rootHex = toRootHex(blockRoot);
429
+ const forkName = config.getForkName(slot);
430
+ const columnSidecarsMap = seenColumns.get(slot) ?? new Map();
431
+ const columnSidecars = Array.from(columnSidecarsMap.values()).sort((a, b) => a.index - b.index);
432
+ let blobCount;
433
+ if (!isForkPostFulu(forkName)) {
434
+ const dataSlot = columnSidecars.at(0)?.signedBlockHeader.message.slot;
435
+ throw new DownloadByRangeError({
436
+ code: DownloadByRangeErrorCode.MISMATCH_BLOCK_FORK,
437
+ slot,
438
+ blockFork: forkName,
439
+ dataFork: dataSlot ? config.getForkName(dataSlot) : "unknown",
440
+ });
441
+ }
442
+ if (isForkPostGloas(forkName)) {
443
+ // TODO GLOAS: Post-gloas's blobKzgCommitments is not in beacon block body. Need to source it from somewhere else.
444
+ // if block without columns is passed default to zero and throw below
445
+ blobCount = 0;
446
+ }
447
+ else {
448
+ blobCount = block.message.body.blobKzgCommitments.length;
449
+ }
450
+ if (columnSidecars.length === 0) {
451
+ if (!blobCount) {
452
+ // no columns in the slot
453
+ continue;
361
454
  }
362
- blockColumnSidecars.push(columnSidecar);
363
- columnSidecarIndex++;
455
+ /**
456
+ * If no columns are found for a block and there are commitments on the block then stop checking and just
457
+ * return early. Even if there were columns returned for subsequent slots that doesn't matter because
458
+ * we will be re-requesting them again anyway. Leftovers just get ignored
459
+ */
460
+ warnings.push(new DownloadByRangeError({
461
+ code: DownloadByRangeErrorCode.MISSING_COLUMNS,
462
+ slot,
463
+ blockRoot: rootHex,
464
+ missingIndices: prettyPrintIndices(request.columns),
465
+ }));
466
+ break;
364
467
  }
365
- const returnedColumns = new Set(blockColumnSidecars.map((c) => c.index));
366
- const missingIndices = request.columns.filter((i) => !returnedColumns.has(i));
468
+ const returnedColumns = Array.from(columnSidecarsMap.keys()).sort();
469
+ if (!blobCount) {
470
+ // columns for a block that does not have blobs
471
+ // TODO(fulu): should this be a hard error with no data retained from peer or just a warning
472
+ throw new DownloadByRangeError({
473
+ code: DownloadByRangeErrorCode.NO_COLUMNS_FOR_BLOCK,
474
+ slot,
475
+ blockRoot: rootHex,
476
+ invalidIndices: prettyPrintIndices(returnedColumns),
477
+ }, "Block has no blob commitments but data column sidecars were provided");
478
+ }
479
+ const missingIndices = request.columns.filter((i) => !columnSidecarsMap.has(i));
367
480
  if (missingIndices.length > 0) {
368
481
  warnings.push(new DownloadByRangeError({
369
482
  code: DownloadByRangeErrorCode.MISSING_COLUMNS,
370
483
  slot,
371
- blockRoot: blockRootHex,
484
+ blockRoot: rootHex,
372
485
  missingIndices: prettyPrintIndices(missingIndices),
373
486
  }, "Missing data columns in DataColumnSidecarsByRange response"));
374
487
  }
375
- const extraIndices = [...returnedColumns].filter((i) => !requestedColumns.has(i));
488
+ const extraIndices = returnedColumns.filter((i) => !request.columns.includes(i));
376
489
  if (extraIndices.length > 0) {
377
490
  warnings.push(new DownloadByRangeError({
378
491
  code: DownloadByRangeErrorCode.EXTRA_COLUMNS,
379
492
  slot,
380
- blockRoot: blockRootHex,
493
+ blockRoot: rootHex,
381
494
  invalidIndices: prettyPrintIndices(extraIndices),
382
495
  }, "Data column in not in requested columns in DataColumnSidecarsByRange response"));
383
496
  }
384
- validateSidecarsPromises.push(validateBlockDataColumnSidecars(slot, blockRoot, blockKzgCommitments.length, blockColumnSidecars).then(() => ({
497
+ validationPromises.push(validateBlockDataColumnSidecars(slot, blockRoot, blobCount, columnSidecars).then(() => ({
385
498
  blockRoot,
386
- columnSidecars: blockColumnSidecars,
499
+ columnSidecars,
387
500
  })));
388
501
  }
389
- // Await all sidecar validations in parallel
390
- const result = await Promise.all(validateSidecarsPromises);
391
- return { result, warnings: warnings.length ? warnings : null };
502
+ const validatedColumns = await Promise.all(validationPromises);
503
+ return {
504
+ result: validatedColumns,
505
+ warnings: warnings.length ? warnings : null,
506
+ };
392
507
  }
393
508
  /**
394
509
  * Given a data request, return only the blocks and roots that correspond to the data request (sorted). Assumes that
@@ -438,7 +553,7 @@ function requestsLogMeta({ blocksRequest, blobsRequest, columnsRequest }) {
438
553
  }
439
554
  export var DownloadByRangeErrorCode;
440
555
  (function (DownloadByRangeErrorCode) {
441
- DownloadByRangeErrorCode["MISSING_BLOCKS"] = "DOWNLOAD_BY_RANGE_ERROR_MISSING_BLOCKS";
556
+ DownloadByRangeErrorCode["MISSING_BLOCKS_RESPONSE"] = "DOWNLOAD_BY_RANGE_ERROR_MISSING_BLOCK_RESPONSE";
442
557
  DownloadByRangeErrorCode["MISSING_BLOBS_RESPONSE"] = "DOWNLOAD_BY_RANGE_ERROR_MISSING_BLOBS_RESPONSE";
443
558
  DownloadByRangeErrorCode["MISSING_COLUMNS_RESPONSE"] = "DOWNLOAD_BY_RANGE_ERROR_MISSING_COLUMNS_RESPONSE";
444
559
  /** Error at the reqresp layer */
@@ -454,7 +569,11 @@ export var DownloadByRangeErrorCode;
454
569
  DownloadByRangeErrorCode["MISSING_COLUMNS"] = "DOWNLOAD_BY_RANGE_ERROR_MISSING_COLUMNS";
455
570
  DownloadByRangeErrorCode["OVER_COLUMNS"] = "DOWNLOAD_BY_RANGE_ERROR_OVER_COLUMNS";
456
571
  DownloadByRangeErrorCode["EXTRA_COLUMNS"] = "DOWNLOAD_BY_RANGE_ERROR_EXTRA_COLUMNS";
572
+ DownloadByRangeErrorCode["NO_COLUMNS_FOR_BLOCK"] = "DOWNLOAD_BY_RANGE_ERROR_NO_COLUMNS_FOR_BLOCK";
573
+ DownloadByRangeErrorCode["DUPLICATE_COLUMN"] = "DOWNLOAD_BY_RANGE_ERROR_DUPLICATE_COLUMN";
574
+ DownloadByRangeErrorCode["OUT_OF_ORDER_COLUMNS"] = "DOWNLOAD_BY_RANGE_OUT_OF_ORDER_COLUMNS";
457
575
  /** Cached block input type mismatches new data */
576
+ DownloadByRangeErrorCode["MISMATCH_BLOCK_FORK"] = "DOWNLOAD_BY_RANGE_ERROR_MISMATCH_BLOCK_FORK";
458
577
  DownloadByRangeErrorCode["MISMATCH_BLOCK_INPUT_TYPE"] = "DOWNLOAD_BY_RANGE_ERROR_MISMATCH_BLOCK_INPUT_TYPE";
459
578
  })(DownloadByRangeErrorCode || (DownloadByRangeErrorCode = {}));
460
579
  export class DownloadByRangeError extends LodestarError {
@@ -1 +1 @@
1
- {"version":3,"file":"downloadByRange.js","sourceRoot":"","sources":["../../../src/sync/utils/downloadByRange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloadByRange.js","sourceRoot":"","sources":["../../../src/sync/utils/downloadByRange.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,6 @@ export declare function dataColumnMatrixRecovery(partialSidecars: Map<number, fu
18
18
  * Reconstruct blobs from a set of data columns, at least 50%+ of all the columns
19
19
  * must be provided to allow to reconstruct the full data matrix
20
20
  */
21
- export declare function reconstructBlobs(sidecars: fulu.DataColumnSidecars): Promise<deneb.Blobs>;
21
+ export declare function reconstructBlobs(sidecars: fulu.DataColumnSidecars, indices?: number[]): Promise<deneb.Blobs>;
22
22
  export {};
23
23
  //# sourceMappingURL=blobs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blobs.d.ts","sourceRoot":"","sources":["../../src/util/blobs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAML,QAAQ,EAIT,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,eAAe,EAAe,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAGlG,KAAK,WAAW,GAAG,UAAU,CAAC;AAE9B,wBAAgB,4BAA4B,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,GAAG,WAAW,CAK5F;AAED,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,2BAA2B,CAInC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,SAAS,GACtB,KAAK,CAAC,YAAY,CAoBpB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAuEzC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAiC9F"}
1
+ {"version":3,"file":"blobs.d.ts","sourceRoot":"","sources":["../../src/util/blobs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAML,QAAQ,EAIT,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,eAAe,EAAe,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAGlG,KAAK,WAAW,GAAG,UAAU,CAAC;AAE9B,wBAAgB,4BAA4B,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,GAAG,WAAW,CAK5F;AAED,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,2BAA2B,CAInC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,SAAS,GACtB,KAAK,CAAC,YAAY,CAoBpB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAuEzC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAiClH"}
package/lib/util/blobs.js CHANGED
@@ -99,34 +99,67 @@ export async function dataColumnMatrixRecovery(partialSidecars) {
99
99
  * Reconstruct blobs from a set of data columns, at least 50%+ of all the columns
100
100
  * must be provided to allow to reconstruct the full data matrix
101
101
  */
102
- export async function reconstructBlobs(sidecars) {
102
+ export async function reconstructBlobs(sidecars, indices) {
103
103
  if (sidecars.length < NUMBER_OF_COLUMNS / 2) {
104
104
  throw Error(`Expected at least ${NUMBER_OF_COLUMNS / 2} data columns to reconstruct blobs, received ${sidecars.length}`);
105
105
  }
106
- let fullSidecars;
107
- if (sidecars.length === NUMBER_OF_COLUMNS) {
108
- // Full columns, no need to recover
109
- fullSidecars = sidecars;
110
- }
111
- else {
112
- const sidecarsByIndex = new Map(sidecars.map((sc) => [sc.index, sc]));
113
- const recoveredSidecars = await dataColumnMatrixRecovery(sidecarsByIndex);
114
- if (recoveredSidecars === null) {
115
- // Should not happen because we check the column count above
116
- throw Error("Failed to reconstruct the full data matrix");
106
+ const blobCount = sidecars[0].column.length;
107
+ for (const index of indices ?? []) {
108
+ if (index < 0 || index >= blobCount) {
109
+ throw Error(`Invalid blob index ${index}, must be between 0 and ${blobCount - 1}`);
117
110
  }
118
- fullSidecars = recoveredSidecars;
119
111
  }
120
- const blobCount = fullSidecars[0].column.length;
121
- const blobs = new Array(blobCount);
122
- const ordered = fullSidecars.slice().sort((a, b) => a.index - b.index);
123
- for (let row = 0; row < blobCount; row++) {
124
- // 128 cells that make up one "extended blob" row
125
- const cells = ordered.map((col) => col.column[row]);
126
- blobs[row] = cellsToBlob(cells);
112
+ const indicesToReconstruct = indices ?? Array.from({ length: blobCount }, (_, i) => i);
113
+ const recoveredCells = await recoverBlobCells(sidecars, indicesToReconstruct);
114
+ if (recoveredCells === null) {
115
+ // Should not happen because we check the column count above
116
+ throw Error("Failed to recover cells to reconstruct blobs");
117
+ }
118
+ const blobs = new Array(indicesToReconstruct.length);
119
+ for (let i = 0; i < indicesToReconstruct.length; i++) {
120
+ const blobIndex = indicesToReconstruct[i];
121
+ const cells = recoveredCells.get(blobIndex);
122
+ if (!cells) {
123
+ throw Error(`Failed to get recovered cells for blob index ${blobIndex}`);
124
+ }
125
+ blobs[i] = cellsToBlob(cells);
127
126
  }
128
127
  return blobs;
129
128
  }
129
+ /**
130
+ * Recover cells for specific blob indices from a set of data columns
131
+ */
132
+ async function recoverBlobCells(partialSidecars, blobIndices) {
133
+ const columnCount = partialSidecars.length;
134
+ if (columnCount < NUMBER_OF_COLUMNS / 2) {
135
+ // We don't have enough columns to recover
136
+ return null;
137
+ }
138
+ const recoveredCells = new Map();
139
+ // Sort data columns by index in ascending order
140
+ const partialSidecarsSorted = partialSidecars.slice().sort((a, b) => a.index - b.index);
141
+ if (columnCount === NUMBER_OF_COLUMNS) {
142
+ // Full columns, no need to recover
143
+ for (const blobIndex of blobIndices) {
144
+ // 128 cells that make up one "extended blob" row
145
+ const cells = partialSidecarsSorted.map((col) => col.column[blobIndex]);
146
+ recoveredCells.set(blobIndex, cells);
147
+ }
148
+ return recoveredCells;
149
+ }
150
+ await Promise.all(blobIndices.map(async (blobIndex) => {
151
+ const cellIndices = [];
152
+ const cells = [];
153
+ for (const dataColumn of partialSidecarsSorted) {
154
+ cellIndices.push(dataColumn.index);
155
+ cells.push(dataColumn.column[blobIndex]);
156
+ }
157
+ // Recover cells for this specific blob row
158
+ const recovered = await kzg.asyncRecoverCellsAndKzgProofs(cellIndices, cells);
159
+ recoveredCells.set(blobIndex, recovered.cells);
160
+ }));
161
+ return recoveredCells;
162
+ }
130
163
  /**
131
164
  * Concatenate the systematic half (columns 0‑63) of a row of cells into
132
165
  * the original 131072 byte blob. The parity half (64‑127) is ignored as
@@ -1 +1 @@
1
- {"version":3,"file":"blobs.js","sourceRoot":"","sources":["../../src/util/blobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blobs.js","sourceRoot":"","sources":["../../src/util/blobs.ts"],"names":[],"mappings":"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"}