@lodestar/beacon-node 1.32.0-dev.ea8c82564a → 1.32.0-peerDAS.223a48c40a

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 (241) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +72 -16
  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/archiveStore.js.map +1 -1
  9. package/lib/chain/archiveStore/historicalState/metrics.js +8 -0
  10. package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
  11. package/lib/chain/archiveStore/interface.d.ts +1 -1
  12. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
  13. package/lib/chain/archiveStore/utils/archiveBlocks.js +116 -23
  14. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  15. package/lib/chain/beaconProposerCache.d.ts +1 -0
  16. package/lib/chain/beaconProposerCache.js +3 -0
  17. package/lib/chain/beaconProposerCache.js.map +1 -1
  18. package/lib/chain/blocks/importBlock.js +9 -19
  19. package/lib/chain/blocks/importBlock.js.map +1 -1
  20. package/lib/chain/blocks/types.d.ts +66 -24
  21. package/lib/chain/blocks/types.js +39 -6
  22. package/lib/chain/blocks/types.js.map +1 -1
  23. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  24. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  25. package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
  26. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  27. package/lib/chain/chain.d.ts +16 -5
  28. package/lib/chain/chain.js +50 -5
  29. package/lib/chain/chain.js.map +1 -1
  30. package/lib/chain/emitter.d.ts +23 -2
  31. package/lib/chain/emitter.js +17 -0
  32. package/lib/chain/emitter.js.map +1 -1
  33. package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
  34. package/lib/chain/errors/dataColumnSidecarError.js +21 -0
  35. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  36. package/lib/chain/errors/index.d.ts +1 -0
  37. package/lib/chain/errors/index.js +1 -0
  38. package/lib/chain/errors/index.js.map +1 -1
  39. package/lib/chain/interface.d.ts +10 -4
  40. package/lib/chain/interface.js.map +1 -1
  41. package/lib/chain/options.d.ts +6 -3
  42. package/lib/chain/options.js +4 -0
  43. package/lib/chain/options.js.map +1 -1
  44. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  45. package/lib/chain/produceBlock/produceBlockBody.js +7 -2
  46. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  47. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
  48. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +25 -2
  49. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  50. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
  51. package/lib/chain/seenCache/seenGossipBlockInput.js +320 -53
  52. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  53. package/lib/chain/validation/blobSidecar.d.ts +1 -1
  54. package/lib/chain/validation/blobSidecar.js +6 -6
  55. package/lib/chain/validation/blobSidecar.js.map +1 -1
  56. package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
  57. package/lib/chain/validation/dataColumnSidecar.js +248 -0
  58. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  59. package/lib/db/beacon.d.ts +3 -1
  60. package/lib/db/beacon.js +3 -1
  61. package/lib/db/beacon.js.map +1 -1
  62. package/lib/db/buckets.d.ts +3 -1
  63. package/lib/db/buckets.js +2 -0
  64. package/lib/db/buckets.js.map +1 -1
  65. package/lib/db/interface.d.ts +3 -1
  66. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  67. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  68. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  69. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  70. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  71. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  72. package/lib/db/repositories/index.d.ts +2 -0
  73. package/lib/db/repositories/index.js +2 -0
  74. package/lib/db/repositories/index.js.map +1 -1
  75. package/lib/execution/engine/http.d.ts +5 -3
  76. package/lib/execution/engine/http.js +70 -31
  77. package/lib/execution/engine/http.js.map +1 -1
  78. package/lib/execution/engine/interface.d.ts +4 -2
  79. package/lib/execution/engine/interface.js +1 -1
  80. package/lib/execution/engine/interface.js.map +1 -1
  81. package/lib/execution/engine/mock.d.ts +1 -0
  82. package/lib/execution/engine/mock.js +8 -3
  83. package/lib/execution/engine/mock.js.map +1 -1
  84. package/lib/execution/engine/types.d.ts +10 -0
  85. package/lib/execution/engine/types.js +6 -0
  86. package/lib/execution/engine/types.js.map +1 -1
  87. package/lib/metrics/metrics/beacon.d.ts +15 -0
  88. package/lib/metrics/metrics/beacon.js +59 -0
  89. package/lib/metrics/metrics/beacon.js.map +1 -1
  90. package/lib/metrics/metrics/lodestar.d.ts +15 -0
  91. package/lib/metrics/metrics/lodestar.js +32 -0
  92. package/lib/metrics/metrics/lodestar.js.map +1 -1
  93. package/lib/network/core/metrics.d.ts +10 -3
  94. package/lib/network/core/metrics.js +22 -4
  95. package/lib/network/core/metrics.js.map +1 -1
  96. package/lib/network/core/networkCore.d.ts +9 -3
  97. package/lib/network/core/networkCore.js +24 -12
  98. package/lib/network/core/networkCore.js.map +1 -1
  99. package/lib/network/core/networkCoreWorker.js +2 -0
  100. package/lib/network/core/networkCoreWorker.js.map +1 -1
  101. package/lib/network/core/networkCoreWorkerHandler.d.ts +5 -3
  102. package/lib/network/core/networkCoreWorkerHandler.js +7 -0
  103. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  104. package/lib/network/core/types.d.ts +8 -4
  105. package/lib/network/events.d.ts +4 -2
  106. package/lib/network/events.js.map +1 -1
  107. package/lib/network/gossip/encoding.js +1 -1
  108. package/lib/network/gossip/encoding.js.map +1 -1
  109. package/lib/network/gossip/gossipsub.js +6 -4
  110. package/lib/network/gossip/gossipsub.js.map +1 -1
  111. package/lib/network/gossip/interface.d.ts +10 -3
  112. package/lib/network/gossip/interface.js +1 -0
  113. package/lib/network/gossip/interface.js.map +1 -1
  114. package/lib/network/gossip/scoringParameters.js +7 -8
  115. package/lib/network/gossip/scoringParameters.js.map +1 -1
  116. package/lib/network/gossip/topic.d.ts +1047 -1031
  117. package/lib/network/gossip/topic.js +33 -13
  118. package/lib/network/gossip/topic.js.map +1 -1
  119. package/lib/network/interface.d.ts +13 -1
  120. package/lib/network/metadata.d.ts +10 -6
  121. package/lib/network/metadata.js +23 -4
  122. package/lib/network/metadata.js.map +1 -1
  123. package/lib/network/network.d.ts +13 -2
  124. package/lib/network/network.js +100 -33
  125. package/lib/network/network.js.map +1 -1
  126. package/lib/network/networkConfig.d.ts +23 -0
  127. package/lib/network/networkConfig.js +32 -0
  128. package/lib/network/networkConfig.js.map +1 -0
  129. package/lib/network/options.js +5 -0
  130. package/lib/network/options.js.map +1 -1
  131. package/lib/network/peers/discover.d.ts +8 -3
  132. package/lib/network/peers/discover.js +106 -13
  133. package/lib/network/peers/discover.js.map +1 -1
  134. package/lib/network/peers/peerManager.d.ts +10 -4
  135. package/lib/network/peers/peerManager.js +93 -11
  136. package/lib/network/peers/peerManager.js.map +1 -1
  137. package/lib/network/peers/peersData.d.ts +17 -3
  138. package/lib/network/peers/peersData.js.map +1 -1
  139. package/lib/network/peers/score/interface.d.ts +1 -1
  140. package/lib/network/peers/score/score.d.ts +2 -2
  141. package/lib/network/peers/score/score.js +4 -1
  142. package/lib/network/peers/score/score.js.map +1 -1
  143. package/lib/network/peers/score/store.d.ts +3 -1
  144. package/lib/network/peers/score/store.js +6 -2
  145. package/lib/network/peers/score/store.js.map +1 -1
  146. package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
  147. package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
  148. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  149. package/lib/network/peers/utils/prioritizePeers.d.ts +18 -7
  150. package/lib/network/peers/utils/prioritizePeers.js +43 -7
  151. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  152. package/lib/network/processor/extractSlotRootFns.js +8 -1
  153. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  154. package/lib/network/processor/gossipHandlers.js +175 -18
  155. package/lib/network/processor/gossipHandlers.js.map +1 -1
  156. package/lib/network/processor/gossipQueues/index.js +6 -1
  157. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  158. package/lib/network/processor/index.js +3 -2
  159. package/lib/network/processor/index.js.map +1 -1
  160. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
  161. package/lib/network/reqresp/ReqRespBeaconNode.js +32 -10
  162. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  163. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +15 -5
  164. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +203 -14
  165. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  166. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +33 -5
  167. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +302 -28
  168. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  169. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  170. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  171. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
  172. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
  173. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  174. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  175. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +57 -0
  176. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  177. package/lib/network/reqresp/handlers/index.js +10 -0
  178. package/lib/network/reqresp/handlers/index.js.map +1 -1
  179. package/lib/network/reqresp/handlers/status.js +3 -2
  180. package/lib/network/reqresp/handlers/status.js.map +1 -1
  181. package/lib/network/reqresp/protocols.d.ts +4 -0
  182. package/lib/network/reqresp/protocols.js +20 -0
  183. package/lib/network/reqresp/protocols.js.map +1 -1
  184. package/lib/network/reqresp/rateLimit.js +11 -1
  185. package/lib/network/reqresp/rateLimit.js.map +1 -1
  186. package/lib/network/reqresp/types.d.ts +15 -8
  187. package/lib/network/reqresp/types.js +10 -3
  188. package/lib/network/reqresp/types.js.map +1 -1
  189. package/lib/network/statusCache.d.ts +5 -5
  190. package/lib/network/statusCache.js.map +1 -1
  191. package/lib/network/subnets/attnetsService.js +6 -6
  192. package/lib/network/subnets/attnetsService.js.map +1 -1
  193. package/lib/network/subnets/interface.d.ts +3 -0
  194. package/lib/network/subnets/interface.js +14 -1
  195. package/lib/network/subnets/interface.js.map +1 -1
  196. package/lib/network/subnets/syncnetsService.js +4 -5
  197. package/lib/network/subnets/syncnetsService.js.map +1 -1
  198. package/lib/network/subscribeBoundary.d.ts +5 -0
  199. package/lib/network/subscribeBoundary.js +4 -0
  200. package/lib/network/subscribeBoundary.js.map +1 -0
  201. package/lib/node/nodejs.js +1 -6
  202. package/lib/node/nodejs.js.map +1 -1
  203. package/lib/sync/interface.d.ts +2 -2
  204. package/lib/sync/interface.js +1 -1
  205. package/lib/sync/interface.js.map +1 -1
  206. package/lib/sync/range/batch.d.ts +9 -2
  207. package/lib/sync/range/batch.js +23 -7
  208. package/lib/sync/range/batch.js.map +1 -1
  209. package/lib/sync/range/chain.d.ts +16 -1
  210. package/lib/sync/range/chain.js +105 -29
  211. package/lib/sync/range/chain.js.map +1 -1
  212. package/lib/sync/range/range.d.ts +3 -2
  213. package/lib/sync/range/range.js +9 -3
  214. package/lib/sync/range/range.js.map +1 -1
  215. package/lib/sync/range/utils/chainTarget.d.ts +5 -1
  216. package/lib/sync/range/utils/chainTarget.js +26 -1
  217. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  218. package/lib/sync/range/utils/peerBalancer.d.ts +12 -5
  219. package/lib/sync/range/utils/peerBalancer.js +69 -10
  220. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  221. package/lib/sync/unknownBlock.d.ts +8 -1
  222. package/lib/sync/unknownBlock.js +226 -68
  223. package/lib/sync/unknownBlock.js.map +1 -1
  224. package/lib/sync/utils/remoteSyncType.d.ts +4 -4
  225. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  226. package/lib/util/blobs.d.ts +18 -1
  227. package/lib/util/blobs.js +104 -1
  228. package/lib/util/blobs.js.map +1 -1
  229. package/lib/util/dataColumns.d.ts +137 -0
  230. package/lib/util/dataColumns.js +353 -0
  231. package/lib/util/dataColumns.js.map +1 -0
  232. package/lib/util/kzg.d.ts +2 -34
  233. package/lib/util/kzg.js +2 -123
  234. package/lib/util/kzg.js.map +1 -1
  235. package/lib/util/metadata.d.ts +4 -0
  236. package/lib/util/metadata.js +7 -0
  237. package/lib/util/metadata.js.map +1 -1
  238. package/lib/util/sszBytes.d.ts +1 -0
  239. package/lib/util/sszBytes.js +17 -0
  240. package/lib/util/sszBytes.js.map +1 -1
  241. package/package.json +15 -15
@@ -1,56 +1,161 @@
1
1
  import { toHexString } from "@chainsafe/ssz";
2
+ import { routes } from "@lodestar/api";
2
3
  import { ForkName, ForkSeq } from "@lodestar/params";
3
4
  import { signedBlockToSignedHeader } from "@lodestar/state-transition";
4
- import { fromHex } from "@lodestar/utils";
5
- import { BlobsSource, BlockInputType, BlockSource, getBlockInput, getBlockInputBlobs, } from "../../chain/blocks/types.js";
5
+ import { fromHex, toHex } from "@lodestar/utils";
6
+ import { BlobsSource, BlockInputType, BlockSource, DataColumnsSource, getBlockInput, getBlockInputBlobs, getBlockInputDataColumns, } from "../../chain/blocks/types.js";
6
7
  import { BlockInputAvailabilitySource } from "../../chain/seenCache/seenGossipBlockInput.js";
7
8
  import { computeInclusionProof, kzgCommitmentToVersionedHash } from "../../util/blobs.js";
8
- import { matchBlockWithBlobs } from "./beaconBlocksMaybeBlobsByRange.js";
9
+ import { getDataColumnsFromExecution } from "../../util/dataColumns.js";
10
+ import { matchBlockWithBlobs, matchBlockWithDataColumns } from "./beaconBlocksMaybeBlobsByRange.js";
9
11
  // keep 1 epoch of stuff, assmume 16 blobs
10
12
  const MAX_ENGINE_GETBLOBS_CACHE = 32 * 16;
11
13
  const MAX_UNAVAILABLE_RETRY_CACHE = 32;
12
- export async function beaconBlocksMaybeBlobsByRoot(config, network, peerId, request) {
13
- const allBlocks = await network.sendBeaconBlocksByRoot(peerId, request);
14
+ export async function beaconBlocksMaybeBlobsByRoot(config, network, peerId, request, partialDownload, peerClient, logger) {
15
+ // console.log("beaconBlocksMaybeBlobsByRoot", request);
16
+ const allBlocks = partialDownload
17
+ ? partialDownload.blocks.map((blockInput) => ({ data: blockInput.block }))
18
+ : await network.sendBeaconBlocksByRoot(peerId, request);
19
+ logger?.debug("beaconBlocksMaybeBlobsByRoot response", { allBlocks: allBlocks.length, peerClient });
20
+ const preDataBlocks = [];
21
+ const blobsDataBlocks = [];
22
+ const dataColumnsDataBlocks = [];
23
+ const sampledColumns = network.custodyConfig.sampledColumns;
24
+ const neededColumns = partialDownload ? partialDownload.pendingDataColumns : sampledColumns;
25
+ const { custodyGroups: peerColumns } = network.getConnectedPeerSyncMeta(peerId);
26
+ // get match
27
+ const columns = peerColumns.reduce((acc, elem) => {
28
+ if (neededColumns.includes(elem)) {
29
+ acc.push(elem);
30
+ }
31
+ return acc;
32
+ }, []);
33
+ let pendingDataColumns = null;
14
34
  const blobIdentifiers = [];
35
+ const dataColumnsByRootIdentifiers = [];
36
+ let prevFork = null;
15
37
  for (const block of allBlocks) {
16
38
  const slot = block.data.message.slot;
17
39
  const blockRoot = config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.data.message);
18
40
  const fork = config.getForkName(slot);
19
- if (ForkSeq[fork] >= ForkSeq.deneb) {
41
+ if (fork !== (prevFork ?? fork)) {
42
+ throw Error("beaconBlocksMaybeBlobsByRoot only accepts requests of same fork");
43
+ }
44
+ prevFork = fork;
45
+ if (ForkSeq[fork] < ForkSeq.deneb) {
46
+ preDataBlocks.push(block);
47
+ }
48
+ else if (fork === ForkName.deneb || fork === ForkName.electra) {
49
+ blobsDataBlocks.push(block);
20
50
  const blobKzgCommitmentsLen = block.data.message.body.blobKzgCommitments.length;
51
+ logger?.debug("beaconBlocksMaybeBlobsByRoot", { blobKzgCommitmentsLen, peerClient });
21
52
  for (let index = 0; index < blobKzgCommitmentsLen; index++) {
22
53
  // try see if the blob is available locally
23
54
  blobIdentifiers.push({ blockRoot, index });
24
55
  }
25
56
  }
57
+ else if (fork === ForkName.fulu) {
58
+ dataColumnsDataBlocks.push(block);
59
+ const blobKzgCommitmentsLen = block.data.message.body.blobKzgCommitments.length;
60
+ const custodyColumnIndexes = blobKzgCommitmentsLen > 0 ? columns : [];
61
+ if (custodyColumnIndexes.length > 0) {
62
+ dataColumnsByRootIdentifiers.push({
63
+ blockRoot,
64
+ columns: custodyColumnIndexes,
65
+ });
66
+ }
67
+ }
68
+ else {
69
+ throw Error(`Invalid fork=${fork} in beaconBlocksMaybeBlobsByRoot`);
70
+ }
26
71
  }
27
- let allBlobSidecars;
28
- if (blobIdentifiers.length > 0) {
29
- allBlobSidecars = await network.sendBlobSidecarsByRoot(peerId, blobIdentifiers);
72
+ let blockInputs = preDataBlocks.map((block) => getBlockInput.preData(config, block.data, BlockSource.byRoot));
73
+ if (blobsDataBlocks.length > 0) {
74
+ let allBlobSidecars;
75
+ if (blobIdentifiers.length > 0) {
76
+ allBlobSidecars = await network.sendBlobSidecarsByRoot(peerId, blobIdentifiers);
77
+ }
78
+ else {
79
+ allBlobSidecars = [];
80
+ }
81
+ // The last arg is to provide slot to which all blobs should be exausted in matching
82
+ // and here it should be infinity since all bobs should match
83
+ const blockInputWithBlobs = matchBlockWithBlobs(config, allBlocks, allBlobSidecars, Infinity, BlockSource.byRoot, BlobsSource.byRoot);
84
+ blockInputs = [...blockInputs, ...blockInputWithBlobs];
30
85
  }
31
- else {
32
- allBlobSidecars = [];
86
+ if (dataColumnsDataBlocks.length > 0) {
87
+ pendingDataColumns = neededColumns.reduce((acc, elem) => {
88
+ if (!columns.includes(elem)) {
89
+ acc.push(elem);
90
+ }
91
+ return acc;
92
+ }, []);
93
+ let allDataColumnsSidecars;
94
+ logger?.debug("allDataColumnsSidecars partialDownload", {
95
+ ...(partialDownload
96
+ ? { blocks: partialDownload.blocks.length, pendingDataColumns: partialDownload.pendingDataColumns.join(" ") }
97
+ : { blocks: null, pendingDataColumns: null }),
98
+ dataColumnIdentifiers: dataColumnsByRootIdentifiers
99
+ .map((id) => `${id.blockRoot}: ${id.columns.join(" ")}`)
100
+ .join(" "),
101
+ peerClient,
102
+ });
103
+ if (dataColumnsByRootIdentifiers.length > 0) {
104
+ allDataColumnsSidecars = await network.sendDataColumnSidecarsByRoot(peerId, dataColumnsByRootIdentifiers);
105
+ }
106
+ else {
107
+ if (partialDownload !== null) {
108
+ return partialDownload;
109
+ }
110
+ allDataColumnsSidecars = [];
111
+ }
112
+ // The last arg is to provide slot to which all blobs should be exausted in matching
113
+ // and here it should be infinity since all bobs should match
114
+ // TODO: should not call matchBlockWithDataColumns() because it's supposed for range sync
115
+ // in that function, peers should return all requested data columns, this function runs at gossip time
116
+ // and it should not expect that
117
+ const blockInputWithBlobs = matchBlockWithDataColumns(network, peerId, config, sampledColumns, columns, allBlocks, allDataColumnsSidecars, Infinity, BlockSource.byRoot, DataColumnsSource.byRoot, partialDownload, peerClient, logger);
118
+ blockInputs = [...blockInputs, ...blockInputWithBlobs];
33
119
  }
34
- // The last arg is to provide slot to which all blobs should be exausted in matching
35
- // and here it should be infinity since all bobs should match
36
- return matchBlockWithBlobs(config, allBlocks, allBlobSidecars, Infinity, BlockSource.byRoot, BlobsSource.byRoot);
120
+ return {
121
+ blocks: blockInputs,
122
+ pendingDataColumns: pendingDataColumns && pendingDataColumns.length > 0 ? pendingDataColumns : null,
123
+ };
37
124
  }
38
- export async function unavailableBeaconBlobsByRoot(config, network, peerId, unavailableBlockInput, opts) {
39
- const { executionEngine, metrics, engineGetBlobsCache, blockInputsRetryTrackerCache } = opts;
125
+ export async function unavailableBeaconBlobsByRoot(config, network, peerId, peerClient, unavailableBlockInput, opts) {
40
126
  if (unavailableBlockInput.block !== null && unavailableBlockInput.type !== BlockInputType.dataPromise) {
41
127
  return unavailableBlockInput;
42
128
  }
43
129
  // resolve the block if thats unavailable
44
- let block, blobsCache, resolveAvailability, cachedData;
130
+ let block, cachedData;
45
131
  if (unavailableBlockInput.block === null) {
46
132
  const allBlocks = await network.sendBeaconBlocksByRoot(peerId, [fromHex(unavailableBlockInput.blockRootHex)]);
47
133
  block = allBlocks[0].data;
48
134
  cachedData = unavailableBlockInput.cachedData;
49
- ({ blobsCache, resolveAvailability } = cachedData);
135
+ unavailableBlockInput = getBlockInput.dataPromise(config, block, BlockSource.byRoot, cachedData);
136
+ // console.log(
137
+ // "downloaded sendBeaconBlocksByRoot",
138
+ // ssz.fulu.SignedBeaconBlock.toJson(block as fulu.SignedBeaconBlock)
139
+ // );
50
140
  }
51
141
  else {
52
142
  ({ block, cachedData } = unavailableBlockInput);
53
- ({ blobsCache, resolveAvailability } = cachedData);
143
+ }
144
+ const forkSeq = config.getForkSeq(block.message.slot);
145
+ if (forkSeq < ForkSeq.fulu) {
146
+ return unavailableBeaconBlobsByRootPreFulu(config, network, peerId, unavailableBlockInput, block, cachedData, opts);
147
+ }
148
+ return unavailableBeaconBlobsByRootPostFulu(config, network, peerId, peerClient, unavailableBlockInput, block, cachedData, {
149
+ metrics: opts.metrics,
150
+ executionEngine: opts.executionEngine,
151
+ emitter: opts.emitter,
152
+ logger: opts.logger,
153
+ });
154
+ }
155
+ export async function unavailableBeaconBlobsByRootPreFulu(config, network, peerId, unavailableBlockInput, block, cachedData, opts) {
156
+ const { executionEngine, metrics, emitter, engineGetBlobsCache, blockInputsRetryTrackerCache } = opts;
157
+ if (unavailableBlockInput.block !== null && unavailableBlockInput.type !== BlockInputType.dataPromise) {
158
+ return unavailableBlockInput;
54
159
  }
55
160
  // resolve missing blobs
56
161
  const slot = block.message.slot;
@@ -71,7 +176,7 @@ export async function unavailableBeaconBlobsByRoot(config, network, peerId, unav
71
176
  const networkReqIdentifiers = [];
72
177
  let getBlobsUseful = false;
73
178
  for (let index = 0; index < blobKzgCommitmentsLen; index++) {
74
- if (blobsCache.has(index) === false) {
179
+ if (cachedData.blobsCache.has(index) === false) {
75
180
  const kzgCommitment = block.message.body.blobKzgCommitments[index];
76
181
  const versionedHash = kzgCommitmentToVersionedHash(kzgCommitment);
77
182
  // check if the getblobs cache has the data if block not been queried before
@@ -87,7 +192,7 @@ export async function unavailableBeaconBlobsByRoot(config, network, peerId, unav
87
192
  const { blob, proof: kzgProof } = catchedBlobAndProof;
88
193
  const kzgCommitmentInclusionProof = computeInclusionProof(fork, block.message.body, index);
89
194
  const blobSidecar = { index, blob, kzgCommitment, kzgProof, signedBlockHeader, kzgCommitmentInclusionProof };
90
- blobsCache.set(blobSidecar.index, blobSidecar);
195
+ cachedData.blobsCache.set(blobSidecar.index, blobSidecar);
91
196
  }
92
197
  }
93
198
  else if (blockTriedBefore) {
@@ -115,12 +220,13 @@ export async function unavailableBeaconBlobsByRoot(config, network, peerId, unav
115
220
  });
116
221
  for (let j = 0; j < versionedHashes.length; j++) {
117
222
  const blobAndProof = blobAndProofs[j] ?? null;
223
+ const versionedHash = versionedHashes[j];
118
224
  // save to cache for future reference
119
- engineGetBlobsCache?.set(toHexString(versionedHashes[j]), blobAndProof);
225
+ engineGetBlobsCache?.set(toHexString(versionedHash), blobAndProof);
120
226
  if (blobAndProof !== null) {
121
227
  metrics?.blockInputFetchStats.dataPromiseBlobsEngineGetBlobsApiNotNull.inc();
122
228
  // if we already got it by now, save the compute
123
- if (blobsCache.has(engineReqIdentifiers[j].index) === false) {
229
+ if (cachedData.blobsCache.has(engineReqIdentifiers[j].index) === false) {
124
230
  metrics?.blockInputFetchStats.dataPromiseBlobsEngineApiGetBlobsUseful.inc();
125
231
  getBlobsUseful = true;
126
232
  const { blob, proof: kzgProof } = blobAndProof;
@@ -130,7 +236,16 @@ export async function unavailableBeaconBlobsByRoot(config, network, peerId, unav
130
236
  // add them in cache so that its reflected in all the blockInputs that carry this
131
237
  // for e.g. a blockInput that might be awaiting blobs promise fullfillment in
132
238
  // verifyBlocksDataAvailability
133
- blobsCache.set(blobSidecar.index, blobSidecar);
239
+ cachedData.blobsCache.set(blobSidecar.index, blobSidecar);
240
+ if (emitter.listenerCount(routes.events.EventType.blobSidecar)) {
241
+ emitter.emit(routes.events.EventType.blobSidecar, {
242
+ blockRoot: blockRootHex,
243
+ slot,
244
+ index,
245
+ kzgCommitment: toHex(kzgCommitment),
246
+ versionedHash: toHex(versionedHash),
247
+ });
248
+ }
134
249
  }
135
250
  else {
136
251
  metrics?.blockInputFetchStats.dataPromiseBlobsDelayedGossipAvailable.inc();
@@ -140,7 +255,7 @@ export async function unavailableBeaconBlobsByRoot(config, network, peerId, unav
140
255
  // may be blobsidecar arrived in the timespan of making the request
141
256
  else {
142
257
  metrics?.blockInputFetchStats.dataPromiseBlobsEngineGetBlobsApiNull.inc();
143
- if (blobsCache.has(engineReqIdentifiers[j].index) === false) {
258
+ if (cachedData.blobsCache.has(engineReqIdentifiers[j].index) === false) {
144
259
  const { blockRoot, index } = engineReqIdentifiers[j];
145
260
  networkReqIdentifiers.push({ blockRoot, index });
146
261
  }
@@ -194,17 +309,26 @@ export async function unavailableBeaconBlobsByRoot(config, network, peerId, unav
194
309
  // for e.g. a blockInput that might be awaiting blobs promise fullfillment in
195
310
  // verifyBlocksDataAvailability
196
311
  for (const blobSidecar of networkResBlobSidecars) {
197
- blobsCache.set(blobSidecar.index, blobSidecar);
312
+ cachedData.blobsCache.set(blobSidecar.index, blobSidecar);
313
+ if (emitter.listenerCount(routes.events.EventType.blobSidecar)) {
314
+ emitter.emit(routes.events.EventType.blobSidecar, {
315
+ blockRoot: blockRootHex,
316
+ slot,
317
+ index: blobSidecar.index,
318
+ kzgCommitment: toHex(blobSidecar.kzgCommitment),
319
+ versionedHash: toHex(kzgCommitmentToVersionedHash(blobSidecar.kzgCommitment)),
320
+ });
321
+ }
198
322
  }
199
323
  // check and see if all blobs are now available and in that case resolve availability
200
324
  // if not this will error and the leftover blobs will be tried from another peer
201
- const allBlobs = getBlockInputBlobs(blobsCache);
325
+ const allBlobs = getBlockInputBlobs(cachedData.blobsCache);
202
326
  const { blobs } = allBlobs;
203
327
  if (blobs.length !== blobKzgCommitmentsLen) {
204
328
  throw Error(`Not all blobs fetched missingBlobs=${blobKzgCommitmentsLen - blobs.length}`);
205
329
  }
206
330
  const blockData = { fork: cachedData.fork, ...allBlobs, blobsSource: BlobsSource.byRoot };
207
- resolveAvailability(blockData);
331
+ cachedData.resolveAvailability(blockData);
208
332
  metrics?.syncUnknownBlock.resolveAvailabilitySource.inc({ source: BlockInputAvailabilitySource.UNKNOWN_SYNC });
209
333
  metrics?.blockInputFetchStats.totalDataPromiseBlockInputsResolvedAvailable.inc();
210
334
  if (getBlobsUseful) {
@@ -221,4 +345,154 @@ export async function unavailableBeaconBlobsByRoot(config, network, peerId, unav
221
345
  }
222
346
  return getBlockInput.availableData(config, block, BlockSource.byRoot, blockData);
223
347
  }
348
+ /**
349
+ * Download more columns for a BlockInput
350
+ * - unavailableBlockInput should have block, but not enough blobs (deneb) or data columns (fulu)
351
+ *
352
+ * This function may return data promise, and consumer should continue with fetching more blobs or columns from other peers
353
+ * see UnknownBlockSync.fetchUnavailableBlockInput()
354
+ */
355
+ export async function unavailableBeaconBlobsByRootPostFulu(config, network, peerId, peerClient, unavailableBlockInput, block, cachedData, opts) {
356
+ if (unavailableBlockInput.block !== null && unavailableBlockInput.type !== BlockInputType.dataPromise) {
357
+ return unavailableBlockInput;
358
+ }
359
+ if (cachedData.fork === ForkName.deneb || cachedData.fork === ForkName.electra) {
360
+ const { blobsCache, resolveAvailability } = cachedData;
361
+ // resolve missing blobs
362
+ const blobIdentifiers = [];
363
+ const slot = block.message.slot;
364
+ const blockRoot = config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message);
365
+ const blobKzgCommitmentsLen = block.message.body.blobKzgCommitments.length;
366
+ for (let index = 0; index < blobKzgCommitmentsLen; index++) {
367
+ if (blobsCache.has(index) === false)
368
+ blobIdentifiers.push({ blockRoot, index });
369
+ }
370
+ let allBlobSidecars;
371
+ if (blobIdentifiers.length > 0) {
372
+ allBlobSidecars = await network.sendBlobSidecarsByRoot(peerId, blobIdentifiers);
373
+ }
374
+ else {
375
+ allBlobSidecars = [];
376
+ }
377
+ // add them in cache so that its reflected in all the blockInputs that carry this
378
+ // for e.g. a blockInput that might be awaiting blobs promise fullfillment in
379
+ // verifyBlocksDataAvailability
380
+ for (const blobSidecar of allBlobSidecars) {
381
+ blobsCache.set(blobSidecar.index, blobSidecar);
382
+ }
383
+ // check and see if all blobs are now available and in that case resolve availability
384
+ // if not this will error and the leftover blobs will be tried from another peer
385
+ const allBlobs = getBlockInputBlobs(blobsCache);
386
+ const { blobs } = allBlobs;
387
+ if (blobs.length !== blobKzgCommitmentsLen) {
388
+ throw Error(`Not all blobs fetched missingBlobs=${blobKzgCommitmentsLen - blobs.length}`);
389
+ }
390
+ const blockData = { fork: cachedData.fork, ...allBlobs, blobsSource: BlobsSource.byRoot };
391
+ resolveAvailability(blockData);
392
+ opts.metrics?.syncUnknownBlock.resolveAvailabilitySource.inc({ source: BlockInputAvailabilitySource.UNKNOWN_SYNC });
393
+ return getBlockInput.availableData(config, block, BlockSource.byRoot, blockData);
394
+ }
395
+ // fulu fork
396
+ const { dataColumnsCache, resolveAvailability } = cachedData;
397
+ // resolve missing blobs
398
+ const slot = block.message.slot;
399
+ const blockRoot = config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message);
400
+ const blobKzgCommitments = block.message.body.blobKzgCommitments;
401
+ if (blobKzgCommitments.length === 0) {
402
+ const blockData = {
403
+ fork: cachedData.fork,
404
+ dataColumns: [],
405
+ dataColumnsBytes: [],
406
+ dataColumnsSource: DataColumnsSource.gossip,
407
+ };
408
+ resolveAvailability(blockData);
409
+ opts.metrics?.syncUnknownBlock.resolveAvailabilitySource.inc({ source: BlockInputAvailabilitySource.UNKNOWN_SYNC });
410
+ return getBlockInput.availableData(config, block, BlockSource.byRoot, blockData);
411
+ }
412
+ const sampledColumns = network.custodyConfig.sampledColumns;
413
+ let neededColumns = sampledColumns.reduce((acc, elem) => {
414
+ if (dataColumnsCache.get(elem) === undefined) {
415
+ acc.push(elem);
416
+ }
417
+ return acc;
418
+ }, []);
419
+ let resolveBlockInput = null;
420
+ const blockInputPromise = new Promise((resolveCB) => {
421
+ resolveBlockInput = resolveCB;
422
+ });
423
+ if (resolveBlockInput === null) {
424
+ throw Error("Promise Constructor was not executed immediately");
425
+ }
426
+ const gotColumnsFromExecution = await getDataColumnsFromExecution(config, network.custodyConfig, opts.executionEngine, opts.emitter, {
427
+ fork: config.getForkName(block.message.slot),
428
+ block: block,
429
+ cachedData: cachedData,
430
+ blockInputPromise,
431
+ resolveBlockInput,
432
+ }, opts.metrics ?? null);
433
+ if (!gotColumnsFromExecution) {
434
+ const { custodyGroups: peerColumns } = network.getConnectedPeerSyncMeta(peerId);
435
+ // get match
436
+ const columns = peerColumns.reduce((acc, elem) => {
437
+ if (neededColumns.includes(elem)) {
438
+ acc.push(elem);
439
+ }
440
+ return acc;
441
+ }, []);
442
+ // this peer can't help fetching columns for this block
443
+ if (unavailableBlockInput.block !== null && columns.length === 0 && neededColumns.length > 0) {
444
+ return unavailableBlockInput;
445
+ }
446
+ let allDataColumnSidecars;
447
+ if (columns.length > 0) {
448
+ allDataColumnSidecars = await network.sendDataColumnSidecarsByRoot(peerId, [{ blockRoot, columns }]);
449
+ }
450
+ else {
451
+ allDataColumnSidecars = [];
452
+ }
453
+ const logCtx = {
454
+ slot: block.message.slot,
455
+ requestedColumns: columns.join(","),
456
+ respondedColumns: allDataColumnSidecars.map((dcs) => dcs.index).join(","),
457
+ peerClient,
458
+ };
459
+ opts.logger?.verbose("unavailableBeaconBlobsByRootPostFulu: Requested data columns from peer", logCtx);
460
+ // the same to matchBlockWithDataColumns() without expecting requested data columns = responded data columns
461
+ // because at gossip time peer may not have enough column to return
462
+ for (const dataColumnSidecar of allDataColumnSidecars) {
463
+ dataColumnsCache.set(dataColumnSidecar.index, {
464
+ dataColumn: dataColumnSidecar,
465
+ // TODO: req/resp should return bytes here
466
+ dataColumnBytes: null,
467
+ });
468
+ }
469
+ }
470
+ // reevaluate needeColumns and resolve availability if possible
471
+ neededColumns = sampledColumns.reduce((acc, elem) => {
472
+ if (dataColumnsCache.get(elem) === undefined) {
473
+ acc.push(elem);
474
+ }
475
+ return acc;
476
+ }, []);
477
+ const logCtx = {
478
+ slot: block.message.slot,
479
+ neededColumns: neededColumns.join(","),
480
+ sampledColumns: sampledColumns.join(","),
481
+ };
482
+ if (neededColumns.length === 0) {
483
+ const { dataColumns, dataColumnsBytes } = getBlockInputDataColumns(cachedData.dataColumnsCache, sampledColumns);
484
+ // don't forget to resolve availability as the block may be stuck in availability wait
485
+ const blockData = {
486
+ fork: config.getForkName(block.message.slot),
487
+ dataColumns,
488
+ dataColumnsBytes,
489
+ dataColumnsSource: DataColumnsSource.byRoot,
490
+ };
491
+ resolveAvailability(blockData);
492
+ opts.logger?.verbose("unavailableBeaconBlobsByRootPostFulu: Resolved availability for block with all data columns", logCtx);
493
+ return getBlockInput.availableData(config, block, BlockSource.byRoot, blockData);
494
+ }
495
+ opts.logger?.verbose("unavailableBeaconBlobsByRootPostFulu: Still missing data columns for block", logCtx);
496
+ return getBlockInput.dataPromise(config, block, BlockSource.byRoot, cachedData);
497
+ }
224
498
  //# sourceMappingURL=beaconBlocksMaybeBlobsByRoot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"beaconBlocksMaybeBlobsByRoot.js","sourceRoot":"","sources":["../../../src/network/reqresp/beaconBlocksMaybeBlobsByRoot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"beaconBlocksMaybeBlobsByRoot.js","sourceRoot":"","sources":["../../../src/network/reqresp/beaconBlocksMaybeBlobsByRoot.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@ import { deneb, phase0 } from "@lodestar/types";
4
4
  import { IBeaconChain } from "../../../chain/index.js";
5
5
  import { IBeaconDb } from "../../../db/index.js";
6
6
  export declare function onBeaconBlocksByRange(request: phase0.BeaconBlocksByRangeRequest, chain: IBeaconChain, db: IBeaconDb): AsyncIterable<ResponseOutgoing>;
7
- export declare function validateBeaconBlocksByRangeRequest(config: BeaconConfig, request: deneb.BlobSidecarsByRangeRequest): deneb.BlobSidecarsByRangeRequest;
7
+ export declare function validateBeaconBlocksByRangeRequest(config: BeaconConfig, request: phase0.BeaconBlocksByRangeRequest): deneb.BlobSidecarsByRangeRequest;
8
8
  //# sourceMappingURL=beaconBlocksByRange.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"beaconBlocksByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRange.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EAAC,UAAU,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAIxC,kBAAkB;AAElB,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,qBAAqB,CAC1C,OAA0C,EAC1C,KAAmB,EACnB,EAAa;IAEb,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,kCAAkC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAElC,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;IAClC,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;IAC7B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;IAEhE,4BAA4B;IAC5B,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/B,8BAA8B;QAC9B,IAAI,KAAK,EAAE,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,IAAI,SAAS,CAAC,mBAAmB,CAAC,EAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAC,CAAC,EAAE,CAAC;YAC9F,MAAM;gBACJ,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAC;aACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,OAAO,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAChD,+FAA+F;QAC/F,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAClE,gFAAgF;QAEhF,kDAAkD;QAClD,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE3B,kDAAkD;YAClD,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;gBACpD,2GAA2G;gBAC3G,uGAAuG;gBACvG,8CAA8C;gBAC9C,yJAAyJ;gBAEzJ,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzE,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,2CAA2C;oBAC3C,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,oBAAoB,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7G,CAAC;gBAED,MAAM;oBACJ,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC;iBACvD,CAAC;YACJ,CAAC;YAED,4CAA4C;iBACvC,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC/B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,MAAoB,EACpB,OAAyC;IAEzC,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAC,KAAK,EAAC,GAAG,OAAO,CAAC;IAEtB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IACD,uDAAuD;IACvD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAED,oFAAoF;IAEpF,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,kBAAkB,CAAC;IAEvB,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAC7B,KAAK,GAAG,gBAAgB,CAAC;IAC3B,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"beaconBlocksByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ResponseOutgoing } from "@lodestar/reqresp";
2
+ import { ColumnIndex, Slot, fulu } from "@lodestar/types";
3
+ import { IBeaconChain } from "../../../chain/index.js";
4
+ import { IBeaconDb } from "../../../db/index.js";
5
+ export declare function onDataColumnSidecarsByRange(request: fulu.DataColumnSidecarsByRangeRequest, chain: IBeaconChain, db: IBeaconDb): AsyncIterable<ResponseOutgoing>;
6
+ export declare function iterateDataColumnBytesFromWrapper(chain: IBeaconChain, dataColumnSidecarsBytesWrapped: Uint8Array, blockSlot: Slot, columns: ColumnIndex[]): Iterable<ResponseOutgoing>;
7
+ export declare function validateDataColumnSidecarsByRangeRequest(request: fulu.DataColumnSidecarsByRangeRequest): fulu.DataColumnSidecarsByRangeRequest;
8
+ //# sourceMappingURL=dataColumnSidecarsByRange.d.ts.map
@@ -0,0 +1,106 @@
1
+ import { GENESIS_SLOT, MAX_REQUEST_BLOCKS_DENEB, NUMBER_OF_COLUMNS } from "@lodestar/params";
2
+ import { RespStatus, ResponseError } from "@lodestar/reqresp";
3
+ import { ssz } from "@lodestar/types";
4
+ import { fromHex } from "@lodestar/utils";
5
+ import { COLUMN_SIZE_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX, DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX, NUM_COLUMNS_IN_WRAPPER_INDEX, } from "../../../db/repositories/dataColumnSidecars.js";
6
+ export async function* onDataColumnSidecarsByRange(request, chain, db) {
7
+ // Non-finalized range of blobs
8
+ const { startSlot, count, columns } = validateDataColumnSidecarsByRangeRequest(request);
9
+ const endSlot = startSlot + count;
10
+ const finalized = db.dataColumnSidecarsArchive;
11
+ const unfinalized = db.dataColumnSidecars;
12
+ const finalizedSlot = chain.forkChoice.getFinalizedBlock().slot;
13
+ // console.log(
14
+ // `incoming onDataColumnSidecarsByRange startSlot=${startSlot}, count=${count}, columns=${columns.join(" ")} finalizedSlot=${finalizedSlot} endSlot=${endSlot}`
15
+ // );
16
+ // Finalized range of blobs
17
+ if (startSlot <= finalizedSlot) {
18
+ // console.log(`serving onDataColumnSidecarsByRange finalized startSlot=${startSlot} finalizedSlot=${finalizedSlot}`);
19
+ // Chain of blobs won't change
20
+ for await (const { key, value: dataColumnSideCarsBytesWrapped } of finalized.binaryEntriesStream({
21
+ gte: startSlot,
22
+ lt: endSlot,
23
+ })) {
24
+ yield* iterateDataColumnBytesFromWrapper(chain, dataColumnSideCarsBytesWrapped, finalized.decodeKey(key), columns);
25
+ }
26
+ }
27
+ // Non-finalized range of blobs
28
+ if (endSlot > finalizedSlot) {
29
+ // console.log(`serving onDataColumnSidecarsByRange unfinalized endSlot=${endSlot} finalizedSlot=${finalizedSlot}`);
30
+ const headRoot = chain.forkChoice.getHeadRoot();
31
+ // TODO DENEB: forkChoice should mantain an array of canonical blocks, and change only on reorg
32
+ const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot);
33
+ // Iterate head chain with ascending block numbers
34
+ for (let i = headChain.length - 1; i >= 0; i--) {
35
+ const block = headChain[i];
36
+ // Must include only blobs in the range requested
37
+ if (block.slot >= startSlot && block.slot < endSlot) {
38
+ // Note: Here the forkChoice head may change due to a re-org, so the headChain reflects the canonical chain
39
+ // at the time of the start of the request. Spec is clear the chain of blobs must be consistent, but on
40
+ // re-org there's no need to abort the request
41
+ // Spec: https://github.com/ethereum/consensus-specs/blob/a1e46d1ae47dd9d097725801575b46907c12a1f8/specs/eip4844/p2p-interface.md#blobssidecarsbyrange-v1
42
+ const blobSideCarsBytesWrapped = await unfinalized.getBinary(fromHex(block.blockRoot));
43
+ if (!blobSideCarsBytesWrapped) {
44
+ // console.log(`error onDataColumnSidecarsByRange No item for root ${block.blockRoot} slot ${block.slot}`);
45
+ // Handle the same to onBeaconBlocksByRange
46
+ throw new ResponseError(RespStatus.SERVER_ERROR, `No item for root ${block.blockRoot} slot ${block.slot}`);
47
+ }
48
+ yield* iterateDataColumnBytesFromWrapper(chain, blobSideCarsBytesWrapped, block.slot, columns);
49
+ }
50
+ // If block is after endSlot, stop iterating
51
+ else if (block.slot >= endSlot) {
52
+ // console.log(`breaking away onDataColumnSidecarsByRange block.slot=${block.slot} endSlot=${endSlot}`);
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ export function* iterateDataColumnBytesFromWrapper(chain, dataColumnSidecarsBytesWrapped, blockSlot, columns) {
59
+ const retrivedColumnsLen = ssz.Uint8.deserialize(dataColumnSidecarsBytesWrapped.slice(NUM_COLUMNS_IN_WRAPPER_INDEX, COLUMN_SIZE_IN_WRAPPER_INDEX));
60
+ const retrievedColumnsSizeBytes = dataColumnSidecarsBytesWrapped.slice(COLUMN_SIZE_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX);
61
+ const columnsSize = ssz.UintNum64.deserialize(retrievedColumnsSizeBytes);
62
+ const dataColumnsIndex = dataColumnSidecarsBytesWrapped.slice(CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX + NUMBER_OF_COLUMNS);
63
+ const allDataColumnSidecarsBytes = dataColumnSidecarsBytesWrapped.slice(DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX + 4 * retrivedColumnsLen);
64
+ const columnsLen = allDataColumnSidecarsBytes.length / columnsSize;
65
+ // const storedColumns = Array.from({length: NUMBER_OF_COLUMNS}, (_v, i) => i).filter((i) => dataColumnsIndex[i] > 0);
66
+ // console.log(
67
+ // `onDataColumnSidecarsByRange: slot=${blockSlot} columnsSize=${columnsSize} columnsLen=${columnsLen} retrivedColumnsLen=${retrivedColumnsLen} toredColumnsNum=${allDataColumnSidecarsBytes.length / columnsSize}, storedColumns=${storedColumns.join(" ")}`
68
+ // );
69
+ // no columns possibly no blob
70
+ if (columnsLen === 0) {
71
+ return;
72
+ }
73
+ const fork = chain.config.getForkName(blockSlot);
74
+ for (const index of columns) {
75
+ // get the index at which the column is
76
+ const dataIndex = (dataColumnsIndex[index] ?? 0) - 1;
77
+ if (dataIndex < 0) {
78
+ throw new ResponseError(RespStatus.SERVER_ERROR, `dataColumnSidecar index=${index} dataIndex=${dataIndex} not custodied`);
79
+ }
80
+ const dataColumnSidecarBytes = allDataColumnSidecarsBytes.slice(dataIndex * columnsSize, (dataIndex + 1) * columnsSize);
81
+ if (dataColumnSidecarBytes.length !== columnsSize) {
82
+ throw new ResponseError(RespStatus.SERVER_ERROR, `Invalid dataColumnSidecar index=${index} dataIndex=${dataIndex} bytes length=${dataColumnSidecarBytes.length} expected=${columnsSize} for slot ${blockSlot} blobsLen=${columnsLen}`);
83
+ }
84
+ // console.log(`iterate onDataColumnSidecarsByRange blockSlot=${blockSlot} index=${index} dataIndex=${dataIndex}`);
85
+ yield {
86
+ data: dataColumnSidecarBytes,
87
+ boundary: { fork },
88
+ };
89
+ }
90
+ }
91
+ export function validateDataColumnSidecarsByRangeRequest(request) {
92
+ const { startSlot, columns } = request;
93
+ let { count } = request;
94
+ if (count < 1) {
95
+ throw new ResponseError(RespStatus.INVALID_REQUEST, "count < 1");
96
+ }
97
+ // TODO: validate against MIN_EPOCHS_FOR_BLOCK_REQUESTS
98
+ if (startSlot < GENESIS_SLOT) {
99
+ throw new ResponseError(RespStatus.INVALID_REQUEST, "startSlot < genesis");
100
+ }
101
+ if (count > MAX_REQUEST_BLOCKS_DENEB) {
102
+ count = MAX_REQUEST_BLOCKS_DENEB;
103
+ }
104
+ return { startSlot, count, columns };
105
+ }
106
+ //# sourceMappingURL=dataColumnSidecarsByRange.js.map