@lodestar/beacon-node 1.34.0-dev.d5a4e7a09c → 1.34.0-dev.ee99d3fa20

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 (230) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +113 -29
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/debug/index.d.ts +1 -1
  4. package/lib/api/impl/debug/index.js +24 -1
  5. package/lib/api/impl/debug/index.js.map +1 -1
  6. package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
  7. package/lib/chain/archiveStore/archiveStore.js +2 -2
  8. package/lib/chain/archiveStore/interface.d.ts +1 -1
  9. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
  10. package/lib/chain/archiveStore/utils/archiveBlocks.js +91 -23
  11. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  12. package/lib/chain/beaconProposerCache.d.ts +1 -0
  13. package/lib/chain/beaconProposerCache.js +3 -0
  14. package/lib/chain/beaconProposerCache.js.map +1 -1
  15. package/lib/chain/blocks/importBlock.js +3 -2
  16. package/lib/chain/blocks/importBlock.js.map +1 -1
  17. package/lib/chain/blocks/types.d.ts +66 -23
  18. package/lib/chain/blocks/types.js +39 -5
  19. package/lib/chain/blocks/types.js.map +1 -1
  20. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  21. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  22. package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
  23. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  24. package/lib/chain/chain.d.ts +17 -28
  25. package/lib/chain/chain.js +67 -3
  26. package/lib/chain/chain.js.map +1 -1
  27. package/lib/chain/emitter.d.ts +18 -2
  28. package/lib/chain/emitter.js +13 -0
  29. package/lib/chain/emitter.js.map +1 -1
  30. package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
  31. package/lib/chain/errors/dataColumnSidecarError.js +21 -0
  32. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  33. package/lib/chain/errors/index.d.ts +1 -0
  34. package/lib/chain/errors/index.js +1 -0
  35. package/lib/chain/errors/index.js.map +1 -1
  36. package/lib/chain/interface.d.ts +10 -4
  37. package/lib/chain/interface.js.map +1 -1
  38. package/lib/chain/options.d.ts +4 -1
  39. package/lib/chain/options.js +1 -0
  40. package/lib/chain/options.js.map +1 -1
  41. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  42. package/lib/chain/produceBlock/produceBlockBody.js +7 -2
  43. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  44. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
  45. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +28 -2
  46. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  47. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
  48. package/lib/chain/seenCache/seenGossipBlockInput.js +321 -53
  49. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  50. package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
  51. package/lib/chain/validation/dataColumnSidecar.js +248 -0
  52. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  53. package/lib/db/beacon.d.ts +3 -1
  54. package/lib/db/beacon.js +3 -1
  55. package/lib/db/beacon.js.map +1 -1
  56. package/lib/db/buckets.d.ts +3 -1
  57. package/lib/db/buckets.js +2 -0
  58. package/lib/db/buckets.js.map +1 -1
  59. package/lib/db/interface.d.ts +3 -1
  60. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  61. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  62. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  63. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  64. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  65. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  66. package/lib/db/repositories/index.d.ts +2 -0
  67. package/lib/db/repositories/index.js +2 -0
  68. package/lib/db/repositories/index.js.map +1 -1
  69. package/lib/execution/engine/http.d.ts +6 -3
  70. package/lib/execution/engine/http.js +56 -42
  71. package/lib/execution/engine/http.js.map +1 -1
  72. package/lib/execution/engine/interface.d.ts +4 -2
  73. package/lib/execution/engine/interface.js +1 -1
  74. package/lib/execution/engine/interface.js.map +1 -1
  75. package/lib/execution/engine/mock.d.ts +1 -0
  76. package/lib/execution/engine/mock.js +5 -0
  77. package/lib/execution/engine/mock.js.map +1 -1
  78. package/lib/execution/engine/types.d.ts +10 -0
  79. package/lib/execution/engine/types.js +6 -0
  80. package/lib/execution/engine/types.js.map +1 -1
  81. package/lib/metrics/metrics/beacon.d.ts +14 -0
  82. package/lib/metrics/metrics/beacon.js +57 -0
  83. package/lib/metrics/metrics/beacon.js.map +1 -1
  84. package/lib/metrics/metrics/lodestar.d.ts +23 -1
  85. package/lib/metrics/metrics/lodestar.js +39 -0
  86. package/lib/metrics/metrics/lodestar.js.map +1 -1
  87. package/lib/network/core/metrics.d.ts +10 -3
  88. package/lib/network/core/metrics.js +22 -4
  89. package/lib/network/core/metrics.js.map +1 -1
  90. package/lib/network/core/networkCore.d.ts +10 -4
  91. package/lib/network/core/networkCore.js +31 -11
  92. package/lib/network/core/networkCore.js.map +1 -1
  93. package/lib/network/core/networkCoreWorker.js +2 -0
  94. package/lib/network/core/networkCoreWorker.js.map +1 -1
  95. package/lib/network/core/networkCoreWorkerHandler.d.ts +5 -3
  96. package/lib/network/core/networkCoreWorkerHandler.js +6 -1
  97. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  98. package/lib/network/core/types.d.ts +7 -4
  99. package/lib/network/events.d.ts +4 -2
  100. package/lib/network/events.js.map +1 -1
  101. package/lib/network/gossip/interface.d.ts +8 -1
  102. package/lib/network/gossip/interface.js +1 -0
  103. package/lib/network/gossip/interface.js.map +1 -1
  104. package/lib/network/gossip/topic.d.ts +1047 -1031
  105. package/lib/network/gossip/topic.js +20 -1
  106. package/lib/network/gossip/topic.js.map +1 -1
  107. package/lib/network/interface.d.ts +9 -1
  108. package/lib/network/metadata.d.ts +9 -5
  109. package/lib/network/metadata.js +26 -5
  110. package/lib/network/metadata.js.map +1 -1
  111. package/lib/network/network.d.ts +12 -2
  112. package/lib/network/network.js +68 -11
  113. package/lib/network/network.js.map +1 -1
  114. package/lib/network/networkConfig.d.ts +12 -0
  115. package/lib/network/networkConfig.js +2 -0
  116. package/lib/network/networkConfig.js.map +1 -0
  117. package/lib/network/options.d.ts +1 -0
  118. package/lib/network/options.js +5 -0
  119. package/lib/network/options.js.map +1 -1
  120. package/lib/network/peers/discover.d.ts +8 -3
  121. package/lib/network/peers/discover.js +99 -14
  122. package/lib/network/peers/discover.js.map +1 -1
  123. package/lib/network/peers/peerManager.d.ts +10 -4
  124. package/lib/network/peers/peerManager.js +105 -19
  125. package/lib/network/peers/peerManager.js.map +1 -1
  126. package/lib/network/peers/peersData.d.ts +17 -3
  127. package/lib/network/peers/peersData.js.map +1 -1
  128. package/lib/network/peers/score/interface.d.ts +1 -1
  129. package/lib/network/peers/score/score.d.ts +2 -2
  130. package/lib/network/peers/score/score.js +4 -1
  131. package/lib/network/peers/score/score.js.map +1 -1
  132. package/lib/network/peers/score/store.d.ts +3 -1
  133. package/lib/network/peers/score/store.js +6 -2
  134. package/lib/network/peers/score/store.js.map +1 -1
  135. package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
  136. package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
  137. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  138. package/lib/network/peers/utils/prioritizePeers.d.ts +18 -7
  139. package/lib/network/peers/utils/prioritizePeers.js +43 -7
  140. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  141. package/lib/network/processor/extractSlotRootFns.js +8 -1
  142. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  143. package/lib/network/processor/gossipHandlers.js +156 -10
  144. package/lib/network/processor/gossipHandlers.js.map +1 -1
  145. package/lib/network/processor/gossipQueues/index.js +5 -0
  146. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  147. package/lib/network/processor/index.js +1 -0
  148. package/lib/network/processor/index.js.map +1 -1
  149. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
  150. package/lib/network/reqresp/ReqRespBeaconNode.js +36 -14
  151. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  152. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +21 -4
  153. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +225 -14
  154. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  155. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +32 -6
  156. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +283 -28
  157. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  158. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  159. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  160. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
  161. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +92 -0
  162. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  163. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  164. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +50 -0
  165. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  166. package/lib/network/reqresp/handlers/index.js +10 -0
  167. package/lib/network/reqresp/handlers/index.js.map +1 -1
  168. package/lib/network/reqresp/protocols.d.ts +4 -0
  169. package/lib/network/reqresp/protocols.js +20 -0
  170. package/lib/network/reqresp/protocols.js.map +1 -1
  171. package/lib/network/reqresp/rateLimit.js +11 -1
  172. package/lib/network/reqresp/rateLimit.js.map +1 -1
  173. package/lib/network/reqresp/score.js +3 -0
  174. package/lib/network/reqresp/score.js.map +1 -1
  175. package/lib/network/reqresp/types.d.ts +11 -4
  176. package/lib/network/reqresp/types.js +12 -3
  177. package/lib/network/reqresp/types.js.map +1 -1
  178. package/lib/network/statusCache.d.ts +5 -5
  179. package/lib/network/statusCache.js.map +1 -1
  180. package/lib/network/subnets/interface.d.ts +3 -0
  181. package/lib/network/subnets/interface.js +14 -1
  182. package/lib/network/subnets/interface.js.map +1 -1
  183. package/lib/network/subnets/syncnetsService.js +4 -5
  184. package/lib/network/subnets/syncnetsService.js.map +1 -1
  185. package/lib/node/nodejs.js +1 -0
  186. package/lib/node/nodejs.js.map +1 -1
  187. package/lib/sync/constants.d.ts +18 -3
  188. package/lib/sync/constants.js +21 -3
  189. package/lib/sync/constants.js.map +1 -1
  190. package/lib/sync/interface.d.ts +2 -2
  191. package/lib/sync/interface.js +1 -1
  192. package/lib/sync/interface.js.map +1 -1
  193. package/lib/sync/range/batch.d.ts +17 -2
  194. package/lib/sync/range/batch.js +39 -7
  195. package/lib/sync/range/batch.js.map +1 -1
  196. package/lib/sync/range/chain.d.ts +15 -1
  197. package/lib/sync/range/chain.js +124 -33
  198. package/lib/sync/range/chain.js.map +1 -1
  199. package/lib/sync/range/range.d.ts +3 -2
  200. package/lib/sync/range/range.js +9 -3
  201. package/lib/sync/range/range.js.map +1 -1
  202. package/lib/sync/range/utils/chainTarget.d.ts +5 -1
  203. package/lib/sync/range/utils/chainTarget.js +26 -1
  204. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  205. package/lib/sync/range/utils/peerBalancer.d.ts +17 -5
  206. package/lib/sync/range/utils/peerBalancer.js +85 -10
  207. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  208. package/lib/sync/sync.js +1 -1
  209. package/lib/sync/sync.js.map +1 -1
  210. package/lib/sync/unknownBlock.d.ts +8 -1
  211. package/lib/sync/unknownBlock.js +223 -67
  212. package/lib/sync/unknownBlock.js.map +1 -1
  213. package/lib/sync/utils/remoteSyncType.d.ts +4 -4
  214. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  215. package/lib/util/blobs.d.ts +23 -1
  216. package/lib/util/blobs.js +156 -1
  217. package/lib/util/blobs.js.map +1 -1
  218. package/lib/util/dataColumns.d.ts +135 -0
  219. package/lib/util/dataColumns.js +353 -0
  220. package/lib/util/dataColumns.js.map +1 -0
  221. package/lib/util/metadata.d.ts +5 -0
  222. package/lib/util/metadata.js +10 -0
  223. package/lib/util/metadata.js.map +1 -1
  224. package/lib/util/sszBytes.d.ts +1 -0
  225. package/lib/util/sszBytes.js +17 -0
  226. package/lib/util/sszBytes.js.map +1 -1
  227. package/package.json +14 -14
  228. package/lib/network/reqresp/handlers/status.d.ts +0 -4
  229. package/lib/network/reqresp/handlers/status.js +0 -11
  230. package/lib/network/reqresp/handlers/status.js.map +0 -1
@@ -1,12 +1,22 @@
1
- import { ForkSeq } from "@lodestar/params";
1
+ import { ForkName, ForkSeq } from "@lodestar/params";
2
2
  import { computeEpochAtSlot } from "@lodestar/state-transition";
3
- import { BlobsSource, BlockSource, getBlockInput } from "../../chain/blocks/types.js";
4
- export async function beaconBlocksMaybeBlobsByRange(config, network, peerId, request, currentEpoch) {
3
+ import { ssz, } from "@lodestar/types";
4
+ import { BlobsSource, BlockInputType, BlockSource, DataColumnsSource, getBlockInput, getBlockInputDataColumns, } from "../../chain/blocks/types.js";
5
+ import { getEmptyBlockInputCacheEntry } from "../../chain/seenCache/seenGossipBlockInput.js";
6
+ import { PeerAction } from "../peers/score/interface.js";
7
+ /**
8
+ * Download blocks and blobs (prefulu) or data columns (fulu) by range.
9
+ * returns:
10
+ * - array of blocks with blobs or data columns
11
+ * - pendingDataColumns: null if all data columns are present, or array of column indexes that are missing. Also null for prefulu
12
+ */
13
+ export async function beaconBlocksMaybeBlobsByRange(config, network, peer, request, currentEpoch, partialDownload, metrics, logger) {
14
+ const { peerId, client: peerClient, custodyGroups: peerColumns, earliestAvailableSlot } = peer;
5
15
  // Code below assumes the request is in the same epoch
6
16
  // Range sync satisfies this condition, but double check here for sanity
7
17
  const { startSlot, count } = request;
8
18
  if (count < 1) {
9
- return [];
19
+ throw Error(`Invalid count=${count} in BeaconBlocksByRangeRequest`);
10
20
  }
11
21
  const endSlot = startSlot + count - 1;
12
22
  const startEpoch = computeEpochAtSlot(startSlot);
@@ -14,23 +24,97 @@ export async function beaconBlocksMaybeBlobsByRange(config, network, peerId, req
14
24
  if (startEpoch !== endEpoch) {
15
25
  throw Error(`BeaconBlocksByRangeRequest must be in the same epoch startEpoch=${startEpoch} != endEpoch=${endEpoch}`);
16
26
  }
27
+ const forkSeq = config.getForkSeq(startSlot);
17
28
  // Note: Assumes all blocks in the same epoch
18
- if (config.getForkSeq(startSlot) < ForkSeq.deneb) {
19
- const blocks = await network.sendBeaconBlocksByRange(peerId, request);
20
- return blocks.map((block) => getBlockInput.preData(config, block.data, BlockSource.byRange));
29
+ if (forkSeq < ForkSeq.deneb) {
30
+ const beaconBlocks = await network.sendBeaconBlocksByRange(peerId, request);
31
+ if (beaconBlocks.length === 0) {
32
+ throw Error(`peerId=${peerId} peerClient=${peerClient} returned no blocks for BeaconBlocksByRangeRequest ${JSON.stringify(request)}`);
33
+ }
34
+ const blocks = beaconBlocks.map((block) => getBlockInput.preData(config, block.data, BlockSource.byRange));
35
+ return { blocks, pendingDataColumns: null };
21
36
  }
22
37
  // From Deneb
23
38
  // Only request blobs if they are recent enough
24
39
  if (startEpoch >= currentEpoch - config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS) {
25
- const [allBlocks, allBlobSidecars] = await Promise.all([
26
- network.sendBeaconBlocksByRange(peerId, request),
27
- network.sendBlobSidecarsByRange(peerId, request),
40
+ if (forkSeq < ForkSeq.fulu) {
41
+ const [allBlocks, allBlobSidecars] = await Promise.all([
42
+ network.sendBeaconBlocksByRange(peerId, request),
43
+ network.sendBlobSidecarsByRange(peerId, request),
44
+ ]);
45
+ if (allBlocks.length === 0) {
46
+ throw Error(`peerId=${peerId} peerClient=${peerClient} returns no blocks allBlobSidecars=${allBlobSidecars.length} for BeaconBlocksByRangeRequest ${JSON.stringify(request)}`);
47
+ }
48
+ const blocks = matchBlockWithBlobs(config, allBlocks, allBlobSidecars, endSlot, BlockSource.byRange, BlobsSource.byRange);
49
+ return { blocks, pendingDataColumns: null };
50
+ }
51
+ // From fulu, get columns
52
+ const sampledColumns = network.custodyConfig.sampledColumns;
53
+ const neededColumns = partialDownload ? partialDownload.pendingDataColumns : sampledColumns;
54
+ // This should never throw. Already checking for this in ChainPeerBalancer when selecting the peer
55
+ if ((earliestAvailableSlot ?? 0) > startSlot) {
56
+ throw new Error(`earliestAvailableSlot=${earliestAvailableSlot} not respected for ByRange startSlot=${startSlot}`);
57
+ }
58
+ // get match
59
+ const columns = peerColumns.reduce((acc, elem) => {
60
+ if (neededColumns.includes(elem)) {
61
+ acc.push(elem);
62
+ }
63
+ return acc;
64
+ }, []);
65
+ if (columns.length === 0 && partialDownload !== null) {
66
+ // this peer has nothing to offer and should not have been selected for batch download
67
+ // throw error?
68
+ return partialDownload;
69
+ }
70
+ const pendingDataColumns = neededColumns.reduce((acc, elem) => {
71
+ if (!columns.includes(elem)) {
72
+ acc.push(elem);
73
+ }
74
+ return acc;
75
+ }, []);
76
+ const dataColumnRequest = { ...request, columns };
77
+ const [allBlocks, allDataColumnSidecars] = await Promise.all([
78
+ // TODO-das: investigate why partialDownload blocks is empty here
79
+ partialDownload && partialDownload.blocks.length > 0
80
+ ? partialDownload.blocks.map((blockInput) => ({ data: blockInput.block }))
81
+ : network.sendBeaconBlocksByRange(peerId, request),
82
+ columns.length === 0 ? [] : network.sendDataColumnSidecarsByRange(peerId, dataColumnRequest),
28
83
  ]);
29
- return matchBlockWithBlobs(config, allBlocks, allBlobSidecars, endSlot, BlockSource.byRange, BlobsSource.byRange);
84
+ logger?.debug("ByRange requests", {
85
+ beaconBlocksRequest: JSON.stringify(ssz.phase0.BeaconBlocksByRangeRequest.toJson(request)),
86
+ dataColumnRequest: JSON.stringify(ssz.fulu.DataColumnSidecarsByRangeRequest.toJson(dataColumnRequest)),
87
+ [`allBlocks(${allBlocks.length})`]: allBlocks.map((blk) => blk.data.message.slot).join(" "),
88
+ [`allDataColumnSidecars(${allDataColumnSidecars.length})`]: allDataColumnSidecars
89
+ .map((dCol) => `${dCol.signedBlockHeader.message.slot}:${dCol.index}`)
90
+ .join(" "),
91
+ peerColumns: peerColumns.join(" "),
92
+ peerId,
93
+ peerClient,
94
+ prevPartialDownload: !!partialDownload,
95
+ });
96
+ if (allBlocks.length === 0) {
97
+ throw Error(`peerId=${peerId} peerClient=${peerClient} returns no blocks dataColumnSidecars=${allDataColumnSidecars.length} for BeaconBlocksByRangeRequest ${JSON.stringify(request)}`);
98
+ }
99
+ const blocks = matchBlockWithDataColumns(network, peerId, config, sampledColumns, columns, allBlocks, allDataColumnSidecars, endSlot, BlockSource.byRange, DataColumnsSource.byRange, partialDownload, peerClient, metrics, logger);
100
+ return { blocks, pendingDataColumns: pendingDataColumns.length > 0 ? pendingDataColumns : null };
30
101
  }
102
+ logger?.verbose(`Download range is out of ${config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS} epochs, skip Blobs and DataColumnSidecars download`, {
103
+ startEpoch,
104
+ startSlot,
105
+ endSlot,
106
+ currentEpoch,
107
+ });
31
108
  // Data is out of range, only request blocks
32
109
  const blocks = await network.sendBeaconBlocksByRange(peerId, request);
33
- return blocks.map((block) => getBlockInput.outOfRangeData(config, block.data, BlockSource.byRange));
110
+ if (blocks.length === 0) {
111
+ throw Error(`peerId=${peerId} peerClient=${peerClient} returned no blocks for BeaconBlocksByRangeRequest ${JSON.stringify(request)}`);
112
+ }
113
+ return {
114
+ blocks: blocks.map((block) => getBlockInput.outOfRangeData(config, block.data, BlockSource.byRange)),
115
+ // null means all data columns are present
116
+ pendingDataColumns: null,
117
+ };
34
118
  }
35
119
  // Assumes that the blobs are in the same sequence as blocks, doesn't require block to be sorted
36
120
  export function matchBlockWithBlobs(config, allBlocks, allBlobSidecars, endSlot, blockSource, blobsSource) {
@@ -68,7 +152,6 @@ export function matchBlockWithBlobs(config, allBlocks, allBlobSidecars, endSlot,
68
152
  blobs: blobSidecars,
69
153
  blobsSource,
70
154
  };
71
- // TODO DENEB: instead of null, pass payload in bytes
72
155
  blockInputs.push(getBlockInput.availableData(config, block.data, blockSource, blockData));
73
156
  }
74
157
  }
@@ -80,8 +163,136 @@ export function matchBlockWithBlobs(config, allBlocks, allBlobSidecars, endSlot,
80
163
  throw Error(`Unmatched blobSidecars, blocks=${allBlocks.length}, blobs=${allBlobSidecars.length} lastMatchedSlot=${lastMatchedSlot}, pending blobSidecars slots=${allBlobSidecars
81
164
  .slice(blobSideCarIndex)
82
165
  .map((blb) => blb.signedBlockHeader.message.slot)
83
- .join(",")}`);
166
+ .join(" ")}`);
167
+ }
168
+ return blockInputs;
169
+ }
170
+ export function matchBlockWithDataColumns(network, peerId, config, sampledColumns, requestedColumns, allBlocks, allDataColumnSidecars, endSlot, blockSource, dataColumnsSource, prevPartialDownload, peerClient, metrics, logger) {
171
+ const blockInputs = [];
172
+ let dataColumnSideCarIndex = 0;
173
+ let lastMatchedSlot = -1;
174
+ const neededColumns = prevPartialDownload?.pendingDataColumns ?? sampledColumns;
175
+ const shouldHaveAllData = neededColumns.reduce((acc, elem) => acc && requestedColumns.includes(elem), true);
176
+ // Match dataColumnSideCar with the block as some blocks would have no dataColumns and hence
177
+ // would be omitted from the response. If there are any inconsitencies in the
178
+ // response, the validations during import will reject the block and hence this
179
+ // entire segment.
180
+ //
181
+ // Assuming that the blocks and blobs will come in same sorted order
182
+ for (let i = 0; i < allBlocks.length; i++) {
183
+ const block = allBlocks[i];
184
+ const forkSeq = config.getForkSeq(block.data.message.slot);
185
+ if (forkSeq < ForkSeq.fulu) {
186
+ throw Error(`Invalid block forkSeq=${forkSeq} < ForSeq.fulu for matchBlockWithDataColumns`);
187
+ }
188
+ const dataColumnSidecars = [];
189
+ while (allDataColumnSidecars[dataColumnSideCarIndex]?.signedBlockHeader.message.slot === block.data.message.slot) {
190
+ dataColumnSidecars.push(allDataColumnSidecars[dataColumnSideCarIndex]);
191
+ lastMatchedSlot = block.data.message.slot;
192
+ dataColumnSideCarIndex++;
193
+ }
194
+ metrics?.dataColumns.bySource.inc({ source: DataColumnsSource.byRange }, dataColumnSidecars.length);
195
+ const blobKzgCommitmentsLen = block.data.message.body.blobKzgCommitments.length;
196
+ logger?.debug("processing matchBlockWithDataColumns", {
197
+ blobKzgCommitmentsLen,
198
+ dataColumnSidecars: dataColumnSidecars.length,
199
+ shouldHaveAllData,
200
+ neededColumns: neededColumns.join(" "),
201
+ requestedColumns: requestedColumns.join(" "),
202
+ slot: block.data.message.slot,
203
+ dataColumnsSlots: dataColumnSidecars.map((dcm) => dcm.signedBlockHeader.message.slot).join(" "),
204
+ peerClient,
205
+ });
206
+ if (blobKzgCommitmentsLen === 0) {
207
+ if (dataColumnSidecars.length > 0) {
208
+ network.reportPeer(peerId, PeerAction.LowToleranceError, "Missing or mismatching dataColumnSidecars");
209
+ throw Error(`Missing or mismatching dataColumnSidecars from peerId=${peerId} for blockSlot=${block.data.message.slot} with blobKzgCommitmentsLen=0 dataColumnSidecars=${dataColumnSidecars.length}>0`);
210
+ }
211
+ const blockData = {
212
+ fork: config.getForkName(block.data.message.slot),
213
+ dataColumns: [],
214
+ dataColumnsBytes: [],
215
+ dataColumnsSource,
216
+ };
217
+ blockInputs.push(getBlockInput.availableData(config, block.data, blockSource, blockData));
218
+ }
219
+ else {
220
+ // Quick inspect how many blobSidecars was expected
221
+ const dataColumnIndexes = dataColumnSidecars.map((dataColumnSidecar) => dataColumnSidecar.index);
222
+ const requestedColumnsPresent = requestedColumns.reduce((acc, columnIndex) => acc && dataColumnIndexes.includes(columnIndex), true);
223
+ logger?.debug("matchBlockWithDataColumns2", {
224
+ dataColumnIndexes: dataColumnIndexes.join(" "),
225
+ requestedColumnsPresent,
226
+ slot: block.data.message.slot,
227
+ peerClient,
228
+ });
229
+ if (dataColumnSidecars.length !== requestedColumns.length || !requestedColumnsPresent) {
230
+ logger?.debug(`Missing or mismatching dataColumnSidecars from peerId=${peerId} for blockSlot=${block.data.message.slot} with numColumns=${sampledColumns.length} dataColumnSidecars=${dataColumnSidecars.length} requestedColumnsPresent=${requestedColumnsPresent} received dataColumnIndexes=${dataColumnIndexes.join(" ")} requested=${requestedColumns.join(" ")}`, {
231
+ allBlocks: allBlocks.length,
232
+ allDataColumnSidecars: allDataColumnSidecars.length,
233
+ peerId,
234
+ blobKzgCommitmentsLen,
235
+ peerClient,
236
+ });
237
+ network.reportPeer(peerId, PeerAction.LowToleranceError, "Missing or mismatching dataColumnSidecars");
238
+ throw Error(`Missing or mismatching dataColumnSidecars from peerId=${peerId} for blockSlot=${block.data.message.slot} blobKzgCommitmentsLen=${blobKzgCommitmentsLen} with numColumns=${sampledColumns.length} dataColumnSidecars=${dataColumnSidecars.length} requestedColumnsPresent=${requestedColumnsPresent} received dataColumnIndexes=${dataColumnIndexes.join(" ")} requested=${requestedColumns.join(" ")}`);
239
+ }
240
+ let cachedData;
241
+ // TODO-das: investigate why partialDownload blocks is empty here
242
+ if (prevPartialDownload !== null && prevPartialDownload.blocks.length > 0) {
243
+ const prevBlockInput = prevPartialDownload.blocks[i];
244
+ if (prevBlockInput.type !== BlockInputType.dataPromise) {
245
+ throw Error(`prevBlockInput.type=${prevBlockInput.type} in prevPartialDownload`);
246
+ }
247
+ cachedData = prevBlockInput.cachedData;
248
+ }
249
+ else {
250
+ // biome-ignore lint/style/noNonNullAssertion: checked below for validity
251
+ cachedData = getEmptyBlockInputCacheEntry(config.getForkName(block.data.message.slot), -1).cachedData;
252
+ if (cachedData === undefined) {
253
+ throw Error("Invalid cachedData=undefined from getEmptyBlockInputCacheEntry");
254
+ }
255
+ }
256
+ if (cachedData.fork !== ForkName.fulu) {
257
+ throw Error("Invalid fork for cachedData on dataColumns");
258
+ }
259
+ for (const dataColumnSidecar of dataColumnSidecars) {
260
+ cachedData.dataColumnsCache.set(dataColumnSidecar.index, {
261
+ dataColumn: dataColumnSidecar,
262
+ dataColumnBytes: null,
263
+ });
264
+ }
265
+ if (shouldHaveAllData) {
266
+ const { dataColumns, dataColumnsBytes } = getBlockInputDataColumns(cachedData.dataColumnsCache, sampledColumns);
267
+ const blockData = {
268
+ fork: config.getForkName(block.data.message.slot),
269
+ dataColumns,
270
+ dataColumnsBytes,
271
+ dataColumnsSource,
272
+ };
273
+ // TODO DENEB: instead of null, pass payload in bytes
274
+ blockInputs.push(getBlockInput.availableData(config, block.data, blockSource, blockData));
275
+ }
276
+ else {
277
+ blockInputs.push(getBlockInput.dataPromise(config, block.data, blockSource, cachedData));
278
+ }
279
+ }
280
+ }
281
+ // If there are still unconsumed blobs this means that the response was inconsistent
282
+ // and matching was wrong and hence we should throw error
283
+ if (allDataColumnSidecars[dataColumnSideCarIndex] !== undefined &&
284
+ // If there are no data columns, the data columns request can give 1 block outside the requested range
285
+ allDataColumnSidecars[dataColumnSideCarIndex].signedBlockHeader.message.slot <= endSlot) {
286
+ network.reportPeer(peerId, PeerAction.LowToleranceError, "Unmatched dataColumnSidecars");
287
+ throw Error(`Unmatched dataColumnSidecars, blocks=${allBlocks.length}, blobs=${allDataColumnSidecars.length} lastMatchedSlot=${lastMatchedSlot}, pending dataColumnSidecars slots=${allDataColumnSidecars
288
+ .slice(dataColumnSideCarIndex)
289
+ .map((blb) => blb.signedBlockHeader.message.slot)
290
+ .join(" ")}`);
84
291
  }
292
+ logger?.debug("matched BlockWithDataColumns", {
293
+ peerClient,
294
+ blockInputs: blockInputs.map((bInpt) => `${bInpt.block.message.slot}=${bInpt.type}`).join(" "),
295
+ });
85
296
  return blockInputs;
86
297
  }
87
298
  //# sourceMappingURL=beaconBlocksMaybeBlobsByRange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"beaconBlocksMaybeBlobsByRange.js","sourceRoot":"","sources":["../../../src/network/reqresp/beaconBlocksMaybeBlobsByRange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"beaconBlocksMaybeBlobsByRange.js","sourceRoot":"","sources":["../../../src/network/reqresp/beaconBlocksMaybeBlobsByRange.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,44 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
- import { RootHex, phase0 } from "@lodestar/types";
2
+ import { RootHex, SignedBeaconBlock, phase0 } from "@lodestar/types";
3
3
  import { BlobAndProof } from "@lodestar/types/deneb";
4
- import { BlockInput, NullBlockInput } from "../../chain/blocks/types.js";
4
+ import { Logger } from "@lodestar/utils";
5
+ import { BlockInput, CachedBlobs, NullBlockInput } from "../../chain/blocks/types.js";
5
6
  import { ChainEventEmitter } from "../../chain/emitter.js";
6
7
  import { IExecutionEngine } from "../../execution/index.js";
7
8
  import { Metrics } from "../../metrics/index.js";
8
9
  import { PeerIdStr } from "../../util/peerId.js";
9
10
  import { INetwork } from "../interface.js";
10
- export declare function beaconBlocksMaybeBlobsByRoot(config: ChainForkConfig, network: INetwork, peerId: PeerIdStr, request: phase0.BeaconBlocksByRootRequest): Promise<BlockInput[]>;
11
- export declare function unavailableBeaconBlobsByRoot(config: ChainForkConfig, network: INetwork, peerId: PeerIdStr, unavailableBlockInput: BlockInput | NullBlockInput, opts: {
12
- metrics: Metrics | null;
13
- emitter: ChainEventEmitter | null;
11
+ import { PartialDownload } from "./beaconBlocksMaybeBlobsByRange.js";
12
+ export declare function beaconBlocksMaybeBlobsByRoot(config: ChainForkConfig, network: INetwork, peerId: PeerIdStr, request: phase0.BeaconBlocksByRootRequest, partialDownload: null | PartialDownload, peerClient: string, metrics: Metrics | null, logger?: Logger): Promise<{
13
+ blocks: BlockInput[];
14
+ pendingDataColumns: null | number[];
15
+ }>;
16
+ export declare function unavailableBeaconBlobsByRoot(config: ChainForkConfig, network: INetwork, peerId: PeerIdStr, peerClient: string, unavailableBlockInput: BlockInput | NullBlockInput, opts: {
17
+ logger?: Logger;
18
+ metrics?: Metrics | null;
14
19
  executionEngine: IExecutionEngine;
20
+ emitter: ChainEventEmitter;
15
21
  engineGetBlobsCache?: Map<RootHex, BlobAndProof | null>;
16
22
  blockInputsRetryTrackerCache?: Set<RootHex>;
17
23
  }): Promise<BlockInput>;
24
+ export declare function unavailableBeaconBlobsByRootPreFulu(config: ChainForkConfig, network: INetwork, peerId: PeerIdStr, unavailableBlockInput: BlockInput | NullBlockInput, block: SignedBeaconBlock, cachedData: CachedBlobs, opts: {
25
+ metrics?: Metrics | null;
26
+ emitter: ChainEventEmitter;
27
+ executionEngine: IExecutionEngine;
28
+ engineGetBlobsCache?: Map<RootHex, BlobAndProof | null>;
29
+ blockInputsRetryTrackerCache?: Set<RootHex>;
30
+ }): Promise<BlockInput>;
31
+ /**
32
+ * Download more columns for a BlockInput
33
+ * - unavailableBlockInput should have block, but not enough blobs (deneb) or data columns (fulu)
34
+ *
35
+ * This function may return data promise, and consumer should continue with fetching more blobs or columns from other peers
36
+ * see UnknownBlockSync.fetchUnavailableBlockInput()
37
+ */
38
+ export declare function unavailableBeaconBlobsByRootPostFulu(config: ChainForkConfig, network: INetwork, peerId: PeerIdStr, peerClient: string, unavailableBlockInput: BlockInput, block: SignedBeaconBlock, cachedData: NullBlockInput["cachedData"], opts: {
39
+ metrics?: Metrics | null;
40
+ executionEngine: IExecutionEngine;
41
+ emitter: ChainEventEmitter;
42
+ logger?: Logger;
43
+ }): Promise<BlockInput>;
18
44
  //# sourceMappingURL=beaconBlocksMaybeBlobsByRoot.d.ts.map