@lodestar/beacon-node 1.33.0-peerDAS.e03bda542e → 1.33.0-rc.0

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 (233) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +26 -66
  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 +1 -24
  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 +23 -88
  11. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  12. package/lib/chain/beaconProposerCache.d.ts +0 -1
  13. package/lib/chain/beaconProposerCache.js +0 -3
  14. package/lib/chain/beaconProposerCache.js.map +1 -1
  15. package/lib/chain/blocks/importBlock.js +3 -8
  16. package/lib/chain/blocks/importBlock.js.map +1 -1
  17. package/lib/chain/blocks/types.d.ts +24 -67
  18. package/lib/chain/blocks/types.js +6 -40
  19. package/lib/chain/blocks/types.js.map +1 -1
  20. package/lib/chain/blocks/verifyBlocksDataAvailability.js +10 -21
  21. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  22. package/lib/chain/blocks/writeBlockInputToDb.js +15 -89
  23. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  24. package/lib/chain/chain.d.ts +5 -16
  25. package/lib/chain/chain.js +6 -34
  26. package/lib/chain/chain.js.map +1 -1
  27. package/lib/chain/emitter.d.ts +2 -18
  28. package/lib/chain/emitter.js +0 -13
  29. package/lib/chain/emitter.js.map +1 -1
  30. package/lib/chain/errors/index.d.ts +0 -1
  31. package/lib/chain/errors/index.js +0 -1
  32. package/lib/chain/errors/index.js.map +1 -1
  33. package/lib/chain/interface.d.ts +4 -10
  34. package/lib/chain/interface.js.map +1 -1
  35. package/lib/chain/options.d.ts +1 -4
  36. package/lib/chain/options.js +1 -5
  37. package/lib/chain/options.js.map +1 -1
  38. package/lib/chain/prepareNextSlot.js +1 -1
  39. package/lib/chain/prepareNextSlot.js.map +1 -1
  40. package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -4
  41. package/lib/chain/produceBlock/produceBlockBody.js +2 -7
  42. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  43. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +2 -3
  44. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +2 -25
  45. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  46. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +18 -64
  47. package/lib/chain/seenCache/seenGossipBlockInput.js +53 -321
  48. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  49. package/lib/constants/network.d.ts +1 -0
  50. package/lib/constants/network.js +2 -0
  51. package/lib/constants/network.js.map +1 -1
  52. package/lib/db/beacon.d.ts +1 -3
  53. package/lib/db/beacon.js +1 -3
  54. package/lib/db/beacon.js.map +1 -1
  55. package/lib/db/buckets.d.ts +1 -3
  56. package/lib/db/buckets.js +0 -2
  57. package/lib/db/buckets.js.map +1 -1
  58. package/lib/db/interface.d.ts +1 -3
  59. package/lib/db/repositories/index.d.ts +0 -2
  60. package/lib/db/repositories/index.js +0 -2
  61. package/lib/db/repositories/index.js.map +1 -1
  62. package/lib/execution/engine/http.d.ts +3 -5
  63. package/lib/execution/engine/http.js +31 -70
  64. package/lib/execution/engine/http.js.map +1 -1
  65. package/lib/execution/engine/interface.d.ts +2 -4
  66. package/lib/execution/engine/interface.js +1 -1
  67. package/lib/execution/engine/interface.js.map +1 -1
  68. package/lib/execution/engine/mock.d.ts +0 -1
  69. package/lib/execution/engine/mock.js +0 -5
  70. package/lib/execution/engine/mock.js.map +1 -1
  71. package/lib/execution/engine/types.d.ts +0 -10
  72. package/lib/execution/engine/types.js +0 -6
  73. package/lib/execution/engine/types.js.map +1 -1
  74. package/lib/metrics/metrics/beacon.d.ts +1 -15
  75. package/lib/metrics/metrics/beacon.js +1 -58
  76. package/lib/metrics/metrics/beacon.js.map +1 -1
  77. package/lib/metrics/metrics/lodestar.d.ts +1 -23
  78. package/lib/metrics/metrics/lodestar.js +0 -39
  79. package/lib/metrics/metrics/lodestar.js.map +1 -1
  80. package/lib/network/core/metrics.d.ts +3 -10
  81. package/lib/network/core/metrics.js +4 -22
  82. package/lib/network/core/metrics.js.map +1 -1
  83. package/lib/network/core/networkCore.d.ts +3 -8
  84. package/lib/network/core/networkCore.js +10 -24
  85. package/lib/network/core/networkCore.js.map +1 -1
  86. package/lib/network/core/networkCoreWorker.js +0 -1
  87. package/lib/network/core/networkCoreWorker.js.map +1 -1
  88. package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -4
  89. package/lib/network/core/networkCoreWorkerHandler.js +0 -4
  90. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  91. package/lib/network/core/types.d.ts +4 -6
  92. package/lib/network/events.d.ts +2 -4
  93. package/lib/network/events.js.map +1 -1
  94. package/lib/network/gossip/interface.d.ts +1 -8
  95. package/lib/network/gossip/interface.js +0 -1
  96. package/lib/network/gossip/interface.js.map +1 -1
  97. package/lib/network/gossip/topic.d.ts +1497 -1513
  98. package/lib/network/gossip/topic.js +1 -20
  99. package/lib/network/gossip/topic.js.map +1 -1
  100. package/lib/network/interface.d.ts +1 -13
  101. package/lib/network/metadata.d.ts +5 -9
  102. package/lib/network/metadata.js +5 -25
  103. package/lib/network/metadata.js.map +1 -1
  104. package/lib/network/network.d.ts +2 -12
  105. package/lib/network/network.js +8 -59
  106. package/lib/network/network.js.map +1 -1
  107. package/lib/network/options.js +0 -5
  108. package/lib/network/options.js.map +1 -1
  109. package/lib/network/peers/discover.d.ts +5 -9
  110. package/lib/network/peers/discover.js +23 -108
  111. package/lib/network/peers/discover.js.map +1 -1
  112. package/lib/network/peers/peerManager.d.ts +4 -10
  113. package/lib/network/peers/peerManager.js +46 -101
  114. package/lib/network/peers/peerManager.js.map +1 -1
  115. package/lib/network/peers/peersData.d.ts +3 -17
  116. package/lib/network/peers/peersData.js.map +1 -1
  117. package/lib/network/peers/score/constants.d.ts +3 -1
  118. package/lib/network/peers/score/constants.js +3 -1
  119. package/lib/network/peers/score/constants.js.map +1 -1
  120. package/lib/network/peers/score/interface.d.ts +6 -1
  121. package/lib/network/peers/score/interface.js.map +1 -1
  122. package/lib/network/peers/score/score.d.ts +7 -2
  123. package/lib/network/peers/score/score.js +35 -5
  124. package/lib/network/peers/score/score.js.map +1 -1
  125. package/lib/network/peers/score/store.d.ts +10 -3
  126. package/lib/network/peers/score/store.js +15 -6
  127. package/lib/network/peers/score/store.js.map +1 -1
  128. package/lib/network/peers/utils/assertPeerRelevance.d.ts +3 -7
  129. package/lib/network/peers/utils/assertPeerRelevance.js +1 -10
  130. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  131. package/lib/network/peers/utils/prioritizePeers.d.ts +7 -18
  132. package/lib/network/peers/utils/prioritizePeers.js +7 -43
  133. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  134. package/lib/network/processor/extractSlotRootFns.js +1 -8
  135. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  136. package/lib/network/processor/gossipHandlers.js +9 -156
  137. package/lib/network/processor/gossipHandlers.js.map +1 -1
  138. package/lib/network/processor/gossipQueues/index.js +0 -5
  139. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  140. package/lib/network/processor/index.js +0 -1
  141. package/lib/network/processor/index.js.map +1 -1
  142. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
  143. package/lib/network/reqresp/ReqRespBeaconNode.js +10 -33
  144. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  145. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +5 -16
  146. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +14 -204
  147. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  148. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +6 -32
  149. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +28 -283
  150. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  151. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  152. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  153. package/lib/network/reqresp/handlers/index.js +0 -10
  154. package/lib/network/reqresp/handlers/index.js.map +1 -1
  155. package/lib/network/reqresp/handlers/status.js +2 -3
  156. package/lib/network/reqresp/handlers/status.js.map +1 -1
  157. package/lib/network/reqresp/protocols.d.ts +0 -4
  158. package/lib/network/reqresp/protocols.js +0 -20
  159. package/lib/network/reqresp/protocols.js.map +1 -1
  160. package/lib/network/reqresp/rateLimit.js +1 -11
  161. package/lib/network/reqresp/rateLimit.js.map +1 -1
  162. package/lib/network/reqresp/types.d.ts +8 -15
  163. package/lib/network/reqresp/types.js +3 -10
  164. package/lib/network/reqresp/types.js.map +1 -1
  165. package/lib/network/statusCache.d.ts +5 -5
  166. package/lib/network/statusCache.js.map +1 -1
  167. package/lib/network/subnets/interface.d.ts +0 -3
  168. package/lib/network/subnets/interface.js +1 -14
  169. package/lib/network/subnets/interface.js.map +1 -1
  170. package/lib/network/subnets/syncnetsService.js +5 -4
  171. package/lib/network/subnets/syncnetsService.js.map +1 -1
  172. package/lib/node/nodejs.js +0 -1
  173. package/lib/node/nodejs.js.map +1 -1
  174. package/lib/sync/constants.d.ts +1 -1
  175. package/lib/sync/constants.js +1 -4
  176. package/lib/sync/constants.js.map +1 -1
  177. package/lib/sync/interface.d.ts +2 -2
  178. package/lib/sync/interface.js +1 -1
  179. package/lib/sync/interface.js.map +1 -1
  180. package/lib/sync/range/batch.d.ts +2 -16
  181. package/lib/sync/range/batch.js +7 -38
  182. package/lib/sync/range/batch.js.map +1 -1
  183. package/lib/sync/range/chain.d.ts +1 -16
  184. package/lib/sync/range/chain.js +30 -110
  185. package/lib/sync/range/chain.js.map +1 -1
  186. package/lib/sync/range/range.d.ts +2 -3
  187. package/lib/sync/range/range.js +3 -9
  188. package/lib/sync/range/range.js.map +1 -1
  189. package/lib/sync/range/utils/chainTarget.d.ts +1 -5
  190. package/lib/sync/range/utils/chainTarget.js +1 -26
  191. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  192. package/lib/sync/range/utils/peerBalancer.d.ts +5 -12
  193. package/lib/sync/range/utils/peerBalancer.js +10 -69
  194. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  195. package/lib/sync/unknownBlock.d.ts +1 -8
  196. package/lib/sync/unknownBlock.js +69 -226
  197. package/lib/sync/unknownBlock.js.map +1 -1
  198. package/lib/sync/utils/remoteSyncType.d.ts +4 -4
  199. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  200. package/lib/util/blobs.d.ts +1 -18
  201. package/lib/util/blobs.js +1 -104
  202. package/lib/util/blobs.js.map +1 -1
  203. package/lib/util/metadata.d.ts +0 -4
  204. package/lib/util/metadata.js +0 -7
  205. package/lib/util/metadata.js.map +1 -1
  206. package/lib/util/sszBytes.d.ts +0 -1
  207. package/lib/util/sszBytes.js +0 -17
  208. package/lib/util/sszBytes.js.map +1 -1
  209. package/package.json +14 -14
  210. package/lib/chain/errors/dataColumnSidecarError.d.ts +0 -69
  211. package/lib/chain/errors/dataColumnSidecarError.js +0 -21
  212. package/lib/chain/errors/dataColumnSidecarError.js.map +0 -1
  213. package/lib/chain/validation/dataColumnSidecar.d.ts +0 -28
  214. package/lib/chain/validation/dataColumnSidecar.js +0 -248
  215. package/lib/chain/validation/dataColumnSidecar.js.map +0 -1
  216. package/lib/db/repositories/dataColumnSidecars.d.ts +0 -47
  217. package/lib/db/repositories/dataColumnSidecars.js +0 -40
  218. package/lib/db/repositories/dataColumnSidecars.js.map +0 -1
  219. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +0 -15
  220. package/lib/db/repositories/dataColumnSidecarsArchive.js +0 -23
  221. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +0 -1
  222. package/lib/network/networkConfig.d.ts +0 -22
  223. package/lib/network/networkConfig.js +0 -29
  224. package/lib/network/networkConfig.js.map +0 -1
  225. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +0 -8
  226. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +0 -106
  227. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +0 -1
  228. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +0 -6
  229. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +0 -57
  230. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +0 -1
  231. package/lib/util/dataColumns.d.ts +0 -132
  232. package/lib/util/dataColumns.js +0 -353
  233. package/lib/util/dataColumns.js.map +0 -1
@@ -1,248 +0,0 @@
1
- import { DATA_COLUMN_SIDECAR_SUBNET_COUNT, KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH, KZG_COMMITMENTS_SUBTREE_INDEX, NUMBER_OF_COLUMNS, } from "@lodestar/params";
2
- import { ssz } from "@lodestar/types";
3
- import { toHex, toRootHex, verifyMerkleBranch } from "@lodestar/utils";
4
- import { computeStartSlotAtEpoch, getBlockHeaderProposerSignatureSet } from "@lodestar/state-transition";
5
- import { byteArrayEquals } from "../../util/bytes.js";
6
- import { kzg } from "../../util/kzg.js";
7
- import { DataColumnSidecarErrorCode, DataColumnSidecarGossipError } from "../errors/dataColumnSidecarError.js";
8
- import { GossipAction } from "../errors/gossipValidation.js";
9
- import { RegenCaller } from "../regen/interface.js";
10
- // SPEC FUNCTION
11
- // https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/p2p-interface.md#data_column_sidecar_subnet_id
12
- export async function validateGossipDataColumnSidecar(chain, dataColumnSidecar, gossipSubnet, metrics) {
13
- const blockHeader = dataColumnSidecar.signedBlockHeader.message;
14
- // 1) [REJECT] The sidecar is valid as verified by verify_data_column_sidecar
15
- verifyDataColumnSidecar(dataColumnSidecar);
16
- // 2) [REJECT] The sidecar is for the correct subnet -- i.e. compute_subnet_for_data_column_sidecar(sidecar.index) == subnet_id
17
- if (computeSubnetForDataColumnSidecar(dataColumnSidecar) !== gossipSubnet) {
18
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
19
- code: DataColumnSidecarErrorCode.INVALID_SUBNET,
20
- columnIdx: dataColumnSidecar.index,
21
- gossipSubnet: gossipSubnet,
22
- });
23
- }
24
- // 3) [IGNORE] The sidecar is not from a future slot (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance)
25
- // -- i.e. validate that sidecar.slot <= current_slot (a client MAY queue future blocks
26
- // for processing at the appropriate slot).
27
- const currentSlotWithGossipDisparity = chain.clock.currentSlotWithGossipDisparity;
28
- if (currentSlotWithGossipDisparity < blockHeader.slot) {
29
- throw new DataColumnSidecarGossipError(GossipAction.IGNORE, {
30
- code: DataColumnSidecarErrorCode.FUTURE_SLOT,
31
- currentSlot: currentSlotWithGossipDisparity,
32
- blockSlot: blockHeader.slot,
33
- });
34
- }
35
- // 4) [IGNORE] The sidecar is from a slot greater than the latest finalized slot -- i.e. validate that
36
- // sidecar.slot > compute_start_slot_at_epoch(state.finalized_checkpoint.epoch)
37
- const finalizedCheckpoint = chain.forkChoice.getFinalizedCheckpoint();
38
- const finalizedSlot = computeStartSlotAtEpoch(finalizedCheckpoint.epoch);
39
- if (blockHeader.slot <= finalizedSlot) {
40
- throw new DataColumnSidecarGossipError(GossipAction.IGNORE, {
41
- code: DataColumnSidecarErrorCode.WOULD_REVERT_FINALIZED_SLOT,
42
- blockSlot: blockHeader.slot,
43
- finalizedSlot,
44
- });
45
- }
46
- // 6) [IGNORE] The sidecar's block's parent (defined by block_header.parent_root) has been seen (via gossip
47
- // or non-gossip sources)
48
- const parentRoot = toRootHex(blockHeader.parentRoot);
49
- const parentBlock = chain.forkChoice.getBlockHex(parentRoot);
50
- if (parentBlock === null) {
51
- // If fork choice does *not* consider the parent to be a descendant of the finalized block,
52
- // then there are two more cases:
53
- //
54
- // 1. We have the parent stored in our database. Because fork-choice has confirmed the
55
- // parent is *not* in our post-finalization DAG, all other blocks must be either
56
- // pre-finalization or conflicting with finalization.
57
- // 2. The parent is unknown to us, we probably want to download it since it might actually
58
- // descend from the finalized root.
59
- // (Non-Lighthouse): Since we prune all blocks non-descendant from finalized checking the `db.block` database won't be useful to guard
60
- // against known bad fork blocks, so we throw PARENT_UNKNOWN for cases (1) and (2)
61
- throw new DataColumnSidecarGossipError(GossipAction.IGNORE, {
62
- code: DataColumnSidecarErrorCode.PARENT_UNKNOWN,
63
- parentRoot,
64
- });
65
- }
66
- // 8) [REJECT] The sidecar is from a higher slot than the sidecar's block's parent
67
- if (parentBlock.slot >= blockHeader.slot) {
68
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
69
- code: DataColumnSidecarErrorCode.NOT_LATER_THAN_PARENT,
70
- parentSlot: parentBlock.slot,
71
- slot: blockHeader.slot,
72
- });
73
- }
74
- // getBlockSlotState also checks for whether the current finalized checkpoint is an ancestor of the block.
75
- // As a result, we throw an IGNORE (whereas the spec says we should REJECT for this scenario).
76
- // this is something we should change this in the future to make the code airtight to the spec.
77
- // 7) [REJECT] The sidecar's block's parent passes validation.
78
- const blockState = await chain.regen
79
- .getBlockSlotState(parentRoot, blockHeader.slot, { dontTransferCache: true }, RegenCaller.validateGossipBlock)
80
- .catch(() => {
81
- throw new DataColumnSidecarGossipError(GossipAction.IGNORE, {
82
- code: DataColumnSidecarErrorCode.PARENT_UNKNOWN,
83
- parentRoot,
84
- });
85
- });
86
- // 5) [REJECT] The proposer signature of sidecar.signed_block_header, is valid with respect to the block_header.proposer_index pubkey.
87
- const signatureSet = getBlockHeaderProposerSignatureSet(blockState, dataColumnSidecar.signedBlockHeader);
88
- // Don't batch so verification is not delayed
89
- if (!(await chain.bls.verifySignatureSets([signatureSet], {
90
- verifyOnMainThread: blockHeader.slot > chain.forkChoice.getHead().slot,
91
- }))) {
92
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
93
- code: DataColumnSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID,
94
- });
95
- }
96
- // 9) [REJECT] The current finalized_checkpoint is an ancestor of the sidecar's block
97
- // -- i.e. get_checkpoint_block(store, block_header.parent_root, store.finalized_checkpoint.epoch)
98
- // == store.finalized_checkpoint.root
99
- // Handled by 7)
100
- // 10) [REJECT] The sidecar's kzg_commitments field inclusion proof is valid as verified by
101
- // verify_data_column_sidecar_inclusion_proof
102
- // TODO: Can cache result on (commitments, proof, header) in the future
103
- const timer = metrics?.peerDas.dataColumnSidecarInclusionProofVerificationTime.startTimer();
104
- const valid = verifyDataColumnSidecarInclusionProof(dataColumnSidecar);
105
- timer?.();
106
- if (!valid) {
107
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
108
- code: DataColumnSidecarErrorCode.INCLUSION_PROOF_INVALID,
109
- slot: dataColumnSidecar.signedBlockHeader.message.slot,
110
- columnIdx: dataColumnSidecar.index,
111
- });
112
- }
113
- // 11) [REJECT] The sidecar's column data is valid as verified by verify_data_column_sidecar_kzg_proofs
114
- try {
115
- await verifyDataColumnSidecarKzgProofs(dataColumnSidecar.kzgCommitments, Array.from({ length: dataColumnSidecar.column.length }, () => BigInt(dataColumnSidecar.index)), dataColumnSidecar.column, dataColumnSidecar.kzgProofs);
116
- }
117
- catch {
118
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
119
- code: DataColumnSidecarErrorCode.INVALID_KZG_PROOF,
120
- slot: blockHeader.slot,
121
- columnIdx: dataColumnSidecar.index,
122
- });
123
- }
124
- // 12) [IGNORE] The sidecar is the first sidecar for the tuple (block_header.slot, block_header.proposer_index,
125
- // sidecar.index) with valid header signature, sidecar inclusion proof, and kzg proof
126
- // -- Handled in seenGossipBlockInput
127
- // 13) [REJECT] The sidecar is proposed by the expected proposer_index for the block's slot in the context of the current
128
- // shuffling (defined by block_header.parent_root/block_header.slot). If the proposer_index cannot
129
- // immediately be verified against the expected shuffling, the sidecar MAY be queued for later processing
130
- // while proposers for the block's branch are calculated -- in such a case do not REJECT, instead IGNORE
131
- // this message.
132
- const proposerIndex = blockHeader.proposerIndex;
133
- const expectedProposerIndex = blockState.epochCtx.getBeaconProposer(blockHeader.slot);
134
- if (proposerIndex !== expectedProposerIndex) {
135
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
136
- code: DataColumnSidecarErrorCode.INCORRECT_PROPOSER,
137
- actualProposerIndex: proposerIndex,
138
- expectedProposerIndex,
139
- });
140
- }
141
- }
142
- export async function validateDataColumnsSidecars(blockSlot, blockRoot, blockKzgCommitments, dataColumnSidecars, metrics, opts = { skipProofsCheck: false }) {
143
- const commitmentBytes = [];
144
- const cellIndices = [];
145
- const cells = [];
146
- const proofBytes = [];
147
- for (let sidecarsIndex = 0; sidecarsIndex < dataColumnSidecars.length; sidecarsIndex++) {
148
- const columnSidecar = dataColumnSidecars[sidecarsIndex];
149
- const { index: columnIndex, column, kzgCommitments, kzgProofs } = columnSidecar;
150
- const columnBlockHeader = columnSidecar.signedBlockHeader.message;
151
- const columnBlockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(columnBlockHeader);
152
- if (columnBlockHeader.slot !== blockSlot ||
153
- !byteArrayEquals(columnBlockRoot, blockRoot) ||
154
- kzgCommitments.length === 0 ||
155
- blockKzgCommitments.length === 0 ||
156
- blockKzgCommitments.length !== kzgCommitments.length ||
157
- blockKzgCommitments
158
- .map((commitment, i) => byteArrayEquals(commitment, kzgCommitments[i]))
159
- .filter((result) => result === false).length) {
160
- throw new Error(`Invalid data column sidecar slot=${columnBlockHeader.slot} columnBlockRoot=${toHex(columnBlockRoot)} columnIndex=${columnIndex} for the block blockRoot=${toHex(blockRoot)} slot=${blockSlot} sidecarsIndex=${sidecarsIndex}`);
161
- }
162
- if (columnIndex >= NUMBER_OF_COLUMNS) {
163
- throw new Error(`Invalid data sidecar columnIndex=${columnIndex} in slot=${blockSlot} blockRoot=${toHex(blockRoot)} sidecarsIndex=${sidecarsIndex}`);
164
- }
165
- if (column.length !== kzgCommitments.length || column.length !== kzgProofs.length) {
166
- throw new Error(`Invalid data sidecar array lengths for columnIndex=${columnIndex} in slot=${blockSlot} blockRoot=${toHex(blockRoot)}`);
167
- }
168
- commitmentBytes.push(...kzgCommitments);
169
- cellIndices.push(...Array.from({ length: column.length }, () => BigInt(columnIndex)));
170
- cells.push(...column);
171
- proofBytes.push(...kzgProofs);
172
- }
173
- if (opts.skipProofsCheck) {
174
- return;
175
- }
176
- let valid;
177
- try {
178
- const timer = metrics?.peerDas.kzgVerificationDataColumnBatchTime.startTimer();
179
- valid = await kzg.asyncVerifyCellKzgProofBatch(commitmentBytes, cellIndices, cells, proofBytes);
180
- timer?.();
181
- }
182
- catch (err) {
183
- err.message = `Error in verifyCellKzgProofBatch for slot=${blockSlot} blockRoot=${toHex(blockRoot)}`;
184
- throw err;
185
- }
186
- if (!valid) {
187
- throw new Error(`Invalid data column sidecars in slot=${blockSlot} blockRoot=${toHex(blockRoot)}`);
188
- }
189
- }
190
- /**
191
- * SPEC FUNCTION
192
- * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/p2p-interface.md#verify_data_column_sidecar
193
- */
194
- export function verifyDataColumnSidecar(dataColumnSidecar) {
195
- if (dataColumnSidecar.index >= NUMBER_OF_COLUMNS) {
196
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
197
- code: DataColumnSidecarErrorCode.INVALID_INDEX,
198
- columnIdx: dataColumnSidecar.index,
199
- });
200
- }
201
- if (dataColumnSidecar.kzgCommitments.length === 0) {
202
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
203
- code: DataColumnSidecarErrorCode.NO_COMMITMENTS,
204
- columnIdx: dataColumnSidecar.index,
205
- });
206
- }
207
- if (dataColumnSidecar.column.length !== dataColumnSidecar.kzgCommitments.length ||
208
- dataColumnSidecar.column.length !== dataColumnSidecar.kzgProofs.length) {
209
- throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
210
- code: DataColumnSidecarErrorCode.MISMATCHED_LENGTHS,
211
- columnLength: dataColumnSidecar.column.length,
212
- commitmentsLength: dataColumnSidecar.kzgCommitments.length,
213
- proofsLength: dataColumnSidecar.kzgProofs.length,
214
- });
215
- }
216
- }
217
- /**
218
- * SPEC FUNCTION
219
- * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/p2p-interface.md#verify_data_column_sidecar_kzg_proofs
220
- */
221
- export async function verifyDataColumnSidecarKzgProofs(commitments, cellIndices, cells, proofs) {
222
- let valid;
223
- try {
224
- valid = await kzg.verifyCellKzgProofBatch(commitments, cellIndices, cells, proofs);
225
- }
226
- catch (e) {
227
- e.message = `Error on verifyCellKzgProofBatch: ${e.message}`;
228
- throw e;
229
- }
230
- if (!valid) {
231
- throw Error("Invalid verifyCellKzgProofBatch");
232
- }
233
- }
234
- /**
235
- * SPEC FUNCTION
236
- * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/p2p-interface.md#verify_data_column_sidecar_inclusion_proof
237
- */
238
- export function verifyDataColumnSidecarInclusionProof(dataColumnSidecar) {
239
- return verifyMerkleBranch(ssz.deneb.BlobKzgCommitments.hashTreeRoot(dataColumnSidecar.kzgCommitments), dataColumnSidecar.kzgCommitmentsInclusionProof, KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH, KZG_COMMITMENTS_SUBTREE_INDEX, dataColumnSidecar.signedBlockHeader.message.bodyRoot);
240
- }
241
- /**
242
- * SPEC FUNCTION
243
- * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/p2p-interface.md#compute_subnet_for_data_column_sidecar
244
- */
245
- export function computeSubnetForDataColumnSidecar(columnSidecar) {
246
- return columnSidecar.index % DATA_COLUMN_SIDECAR_SUBNET_COUNT;
247
- }
248
- //# sourceMappingURL=dataColumnSidecar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataColumnSidecar.js","sourceRoot":"","sources":["../../../src/chain/validation/dataColumnSidecar.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- import { ByteVectorType, ContainerType, ValueOf } from "@chainsafe/ssz";
2
- import { ChainForkConfig } from "@lodestar/config";
3
- import { Db, Repository } from "@lodestar/db";
4
- export declare const dataColumnSidecarsWrapperSsz: ContainerType<{
5
- blockRoot: ByteVectorType;
6
- slot: import("@chainsafe/ssz").UintNumberType;
7
- dataColumnsLen: import("@chainsafe/ssz").UintNumberType;
8
- dataColumnsSize: import("@chainsafe/ssz").UintNumberType;
9
- dataColumnsIndex: ByteVectorType;
10
- dataColumnSidecars: import("@chainsafe/ssz").ListCompositeType<ContainerType<{
11
- index: import("@chainsafe/ssz").UintNumberType;
12
- column: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
13
- kzgCommitments: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
14
- kzgProofs: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>;
15
- signedBlockHeader: ContainerType<{
16
- message: ContainerType<{
17
- slot: import("@chainsafe/ssz").UintNumberType;
18
- proposerIndex: import("@chainsafe/ssz").UintNumberType;
19
- parentRoot: import("@chainsafe/ssz").ByteVectorType;
20
- stateRoot: import("@chainsafe/ssz").ByteVectorType;
21
- bodyRoot: import("@chainsafe/ssz").ByteVectorType;
22
- }>;
23
- signature: import("@chainsafe/ssz").ByteVectorType;
24
- }>;
25
- kzgCommitmentsInclusionProof: import("@chainsafe/ssz").VectorCompositeType<import("@chainsafe/ssz").ByteVectorType>;
26
- }>>;
27
- }>;
28
- export type DataColumnSidecarsWrapper = ValueOf<typeof dataColumnSidecarsWrapperSsz>;
29
- export declare const BLOCK_ROOT_IN_WRAPPER_INDEX = 0;
30
- export declare const BLOCK_SLOT_IN_WRAPPER_INDEX = 32;
31
- export declare const NUM_COLUMNS_IN_WRAPPER_INDEX = 40;
32
- export declare const COLUMN_SIZE_IN_WRAPPER_INDEX = 41;
33
- export declare const CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX = 49;
34
- export declare const DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX: number;
35
- /**
36
- * dataColumnSidecarsWrapper by block root (= hash_tree_root(SignedBeaconBlock.message))
37
- *
38
- * Used to store unfinalized DataColumnSidecars
39
- */
40
- export declare class DataColumnSidecarsRepository extends Repository<Uint8Array, DataColumnSidecarsWrapper> {
41
- constructor(config: ChainForkConfig, db: Db);
42
- /**
43
- * Id is hashTreeRoot of unsigned BeaconBlock
44
- */
45
- getId(value: DataColumnSidecarsWrapper): Uint8Array;
46
- }
47
- //# sourceMappingURL=dataColumnSidecars.d.ts.map
@@ -1,40 +0,0 @@
1
- import { ByteVectorType, ContainerType } from "@chainsafe/ssz";
2
- import { Repository } from "@lodestar/db";
3
- import { NUMBER_OF_COLUMNS } from "@lodestar/params";
4
- import { ssz } from "@lodestar/types";
5
- import { Bucket, getBucketNameByValue } from "../buckets.js";
6
- export const dataColumnSidecarsWrapperSsz = new ContainerType({
7
- blockRoot: ssz.Root,
8
- slot: ssz.Slot,
9
- dataColumnsLen: ssz.Uint8,
10
- dataColumnsSize: ssz.UintNum64,
11
- // // each byte[i] tells what index (1 based) the column i is stored, 0 means not custodied
12
- // max value to represent will be 128 which can be represented in a byte
13
- dataColumnsIndex: new ByteVectorType(NUMBER_OF_COLUMNS),
14
- dataColumnSidecars: ssz.fulu.DataColumnSidecars,
15
- }, { typeName: "DataColumnSidecarsWrapper", jsonCase: "eth2" });
16
- export const BLOCK_ROOT_IN_WRAPPER_INDEX = 0;
17
- export const BLOCK_SLOT_IN_WRAPPER_INDEX = 32;
18
- export const NUM_COLUMNS_IN_WRAPPER_INDEX = 40;
19
- export const COLUMN_SIZE_IN_WRAPPER_INDEX = 41;
20
- export const CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX = 49;
21
- export const DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX = CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX + NUMBER_OF_COLUMNS + 4;
22
- /**
23
- * dataColumnSidecarsWrapper by block root (= hash_tree_root(SignedBeaconBlock.message))
24
- *
25
- * Used to store unfinalized DataColumnSidecars
26
- */
27
- export class DataColumnSidecarsRepository extends Repository {
28
- constructor(config, db) {
29
- const bucket = Bucket.allForks_dataColumnSidecars;
30
- super(config, db, bucket, dataColumnSidecarsWrapperSsz, getBucketNameByValue(bucket));
31
- }
32
- /**
33
- * Id is hashTreeRoot of unsigned BeaconBlock
34
- */
35
- getId(value) {
36
- const { blockRoot } = value;
37
- return blockRoot;
38
- }
39
- }
40
- //# sourceMappingURL=dataColumnSidecars.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataColumnSidecars.js","sourceRoot":"","sources":["../../../src/db/repositories/dataColumnSidecars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAK,UAAU,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEpC,OAAO,EAAC,MAAM,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAE3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,aAAa,CAC3D;IACE,SAAS,EAAE,GAAG,CAAC,IAAI;IACnB,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,cAAc,EAAE,GAAG,CAAC,KAAK;IACzB,eAAe,EAAE,GAAG,CAAC,SAAS;IAC9B,2FAA2F;IAC3F,wEAAwE;IACxE,gBAAgB,EAAE,IAAI,cAAc,CAAC,iBAAiB,CAAC;IACvD,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB;CAChD,EACD,EAAC,QAAQ,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,EAAC,CAC1D,CAAC;AAGF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAC9C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,mCAAmC,GAAG,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,qCAAqC,GAAG,mCAAmC,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAEjH;;;;GAIG;AACH,MAAM,OAAO,4BAA6B,SAAQ,UAAiD;IACjG,YAAY,MAAuB,EAAE,EAAM;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAClD,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,4BAA4B,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAgC;QACpC,MAAM,EAAC,SAAS,EAAC,GAAG,KAAK,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import { ChainForkConfig } from "@lodestar/config";
2
- import { Db, Repository } from "@lodestar/db";
3
- import { Slot } from "@lodestar/types";
4
- import { DataColumnSidecarsWrapper } from "./dataColumnSidecars.js";
5
- /**
6
- * dataColumnSidecarsWrapper by slot
7
- *
8
- * Used to store finalized DataColumnSidecars
9
- */
10
- export declare class DataColumnSidecarsArchiveRepository extends Repository<Slot, DataColumnSidecarsWrapper> {
11
- constructor(config: ChainForkConfig, db: Db);
12
- getId(value: DataColumnSidecarsWrapper): Slot;
13
- decodeKey(data: Uint8Array): number;
14
- }
15
- //# sourceMappingURL=dataColumnSidecarsArchive.d.ts.map
@@ -1,23 +0,0 @@
1
- import { Repository } from "@lodestar/db";
2
- import { bytesToInt } from "@lodestar/utils";
3
- import { Bucket, getBucketNameByValue } from "../buckets.js";
4
- import { dataColumnSidecarsWrapperSsz } from "./dataColumnSidecars.js";
5
- /**
6
- * dataColumnSidecarsWrapper by slot
7
- *
8
- * Used to store finalized DataColumnSidecars
9
- */
10
- export class DataColumnSidecarsArchiveRepository extends Repository {
11
- constructor(config, db) {
12
- const bucket = Bucket.allForks_dataColumnSidecarsArchive;
13
- super(config, db, bucket, dataColumnSidecarsWrapperSsz, getBucketNameByValue(bucket));
14
- }
15
- // Handle key as slot
16
- getId(value) {
17
- return value.slot;
18
- }
19
- decodeKey(data) {
20
- return bytesToInt(super.decodeKey(data), "be");
21
- }
22
- }
23
- //# sourceMappingURL=dataColumnSidecarsArchive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataColumnSidecarsArchive.js","sourceRoot":"","sources":["../../../src/db/repositories/dataColumnSidecarsArchive.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,UAAU,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,MAAM,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAA4B,4BAA4B,EAAC,MAAM,yBAAyB,CAAC;AAEhG;;;;GAIG;AACH,MAAM,OAAO,mCAAoC,SAAQ,UAA2C;IAClG,YAAY,MAAuB,EAAE,EAAM;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,kCAAkC,CAAC;QACzD,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,4BAA4B,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,qBAAqB;IAErB,KAAK,CAAC,KAAgC;QACpC,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,IAAgB;QACxB,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAA0B,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;CACF"}
@@ -1,22 +0,0 @@
1
- import { PeerId } from "@libp2p/interface";
2
- import { BeaconConfig } from "@lodestar/config";
3
- import { CustodyConfig } from "../util/dataColumns.js";
4
- import { NodeId } from "./subnets/interface.js";
5
- /**
6
- * Store shared data for different modules in the network stack.
7
- * TODO: consider moving similar shared data, for example PeersData, under NetworkConfig.
8
- */
9
- export declare class NetworkConfig {
10
- private readonly nodeId;
11
- private readonly config;
12
- private readonly custodyConfig;
13
- constructor(peerId: PeerId, config: BeaconConfig);
14
- getConfig(): BeaconConfig;
15
- getNodeId(): NodeId;
16
- /**
17
- * Consumer should never mutate returned CustodyConfig
18
- */
19
- getCustodyConfig(): CustodyConfig;
20
- setTargetGroupCount(count: number): void;
21
- }
22
- //# sourceMappingURL=networkConfig.d.ts.map
@@ -1,29 +0,0 @@
1
- import { CustodyConfig } from "../util/dataColumns.js";
2
- import { computeNodeId } from "./subnets/interface.js";
3
- /**
4
- * Store shared data for different modules in the network stack.
5
- * TODO: consider moving similar shared data, for example PeersData, under NetworkConfig.
6
- */
7
- export class NetworkConfig {
8
- constructor(peerId, config) {
9
- this.nodeId = computeNodeId(peerId);
10
- this.config = config;
11
- this.custodyConfig = new CustodyConfig(this.nodeId, config, null);
12
- }
13
- getConfig() {
14
- return this.config;
15
- }
16
- getNodeId() {
17
- return this.nodeId;
18
- }
19
- /**
20
- * Consumer should never mutate returned CustodyConfig
21
- */
22
- getCustodyConfig() {
23
- return this.custodyConfig;
24
- }
25
- setTargetGroupCount(count) {
26
- this.custodyConfig.updateTargetCustodyGroupCount(count);
27
- }
28
- }
29
- //# sourceMappingURL=networkConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"networkConfig.js","sourceRoot":"","sources":["../../src/network/networkConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAS,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAE7D;;;GAGG;AACH,MAAM,OAAO,aAAa;IAKxB,YAAY,MAAc,EAAE,MAAoB;QAC9C,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC/B,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -1,8 +0,0 @@
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
@@ -1,106 +0,0 @@
1
- import { GENESIS_SLOT, MAX_REQUEST_BLOCKS_DENEB, NUMBER_OF_COLUMNS } from "@lodestar/params";
2
- import { RespStatus, ResponseError } from "@lodestar/reqresp";
3
- import { computeEpochAtSlot } from "@lodestar/state-transition";
4
- import { ssz } from "@lodestar/types";
5
- import { fromHex } from "@lodestar/utils";
6
- 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";
7
- export async function* onDataColumnSidecarsByRange(request, chain, db) {
8
- // Non-finalized range of blobs
9
- const { startSlot, count, columns } = validateDataColumnSidecarsByRangeRequest(request);
10
- const endSlot = startSlot + count;
11
- const finalized = db.dataColumnSidecarsArchive;
12
- const unfinalized = db.dataColumnSidecars;
13
- const finalizedSlot = chain.forkChoice.getFinalizedBlock().slot;
14
- // console.log(
15
- // `incoming onDataColumnSidecarsByRange startSlot=${startSlot}, count=${count}, columns=${columns.join(" ")} finalizedSlot=${finalizedSlot} endSlot=${endSlot}`
16
- // );
17
- // Finalized range of blobs
18
- if (startSlot <= finalizedSlot) {
19
- // console.log(`serving onDataColumnSidecarsByRange finalized startSlot=${startSlot} finalizedSlot=${finalizedSlot}`);
20
- // Chain of blobs won't change
21
- for await (const { key, value: dataColumnSideCarsBytesWrapped } of finalized.binaryEntriesStream({
22
- gte: startSlot,
23
- lt: endSlot,
24
- })) {
25
- yield* iterateDataColumnBytesFromWrapper(chain, dataColumnSideCarsBytesWrapped, finalized.decodeKey(key), columns);
26
- }
27
- }
28
- // Non-finalized range of blobs
29
- if (endSlot > finalizedSlot) {
30
- // console.log(`serving onDataColumnSidecarsByRange unfinalized endSlot=${endSlot} finalizedSlot=${finalizedSlot}`);
31
- const headRoot = chain.forkChoice.getHeadRoot();
32
- // TODO DENEB: forkChoice should mantain an array of canonical blocks, and change only on reorg
33
- const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot);
34
- // Iterate head chain with ascending block numbers
35
- for (let i = headChain.length - 1; i >= 0; i--) {
36
- const block = headChain[i];
37
- // Must include only blobs in the range requested
38
- if (block.slot >= startSlot && block.slot < endSlot) {
39
- // Note: Here the forkChoice head may change due to a re-org, so the headChain reflects the canonical chain
40
- // at the time of the start of the request. Spec is clear the chain of blobs must be consistent, but on
41
- // re-org there's no need to abort the request
42
- // Spec: https://github.com/ethereum/consensus-specs/blob/a1e46d1ae47dd9d097725801575b46907c12a1f8/specs/eip4844/p2p-interface.md#blobssidecarsbyrange-v1
43
- const blobSideCarsBytesWrapped = await unfinalized.getBinary(fromHex(block.blockRoot));
44
- if (!blobSideCarsBytesWrapped) {
45
- // console.log(`error onDataColumnSidecarsByRange No item for root ${block.blockRoot} slot ${block.slot}`);
46
- // Handle the same to onBeaconBlocksByRange
47
- throw new ResponseError(RespStatus.SERVER_ERROR, `No item for root ${block.blockRoot} slot ${block.slot}`);
48
- }
49
- yield* iterateDataColumnBytesFromWrapper(chain, blobSideCarsBytesWrapped, block.slot, columns);
50
- }
51
- // If block is after endSlot, stop iterating
52
- else if (block.slot >= endSlot) {
53
- // console.log(`breaking away onDataColumnSidecarsByRange block.slot=${block.slot} endSlot=${endSlot}`);
54
- break;
55
- }
56
- }
57
- }
58
- }
59
- export function* iterateDataColumnBytesFromWrapper(chain, dataColumnSidecarsBytesWrapped, blockSlot, columns) {
60
- const retrivedColumnsLen = ssz.Uint8.deserialize(dataColumnSidecarsBytesWrapped.slice(NUM_COLUMNS_IN_WRAPPER_INDEX, COLUMN_SIZE_IN_WRAPPER_INDEX));
61
- const retrievedColumnsSizeBytes = dataColumnSidecarsBytesWrapped.slice(COLUMN_SIZE_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX);
62
- const columnsSize = ssz.UintNum64.deserialize(retrievedColumnsSizeBytes);
63
- const dataColumnsIndex = dataColumnSidecarsBytesWrapped.slice(CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX, CUSTODY_COLUMNS_IN_IN_WRAPPER_INDEX + NUMBER_OF_COLUMNS);
64
- const allDataColumnSidecarsBytes = dataColumnSidecarsBytesWrapped.slice(DATA_COLUMN_SIDECARS_IN_WRAPPER_INDEX + 4 * retrivedColumnsLen);
65
- const columnsLen = allDataColumnSidecarsBytes.length / columnsSize;
66
- // const storedColumns = Array.from({length: NUMBER_OF_COLUMNS}, (_v, i) => i).filter((i) => dataColumnsIndex[i] > 0);
67
- // console.log(
68
- // `onDataColumnSidecarsByRange: slot=${blockSlot} columnsSize=${columnsSize} columnsLen=${columnsLen} retrivedColumnsLen=${retrivedColumnsLen} toredColumnsNum=${allDataColumnSidecarsBytes.length / columnsSize}, storedColumns=${storedColumns.join(" ")}`
69
- // );
70
- // no columns possibly no blob
71
- if (columnsLen === 0) {
72
- return;
73
- }
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: chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(blockSlot)),
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataColumnSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/dataColumnSidecarsByRange.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { ResponseOutgoing } from "@lodestar/reqresp";
2
- import { fulu } from "@lodestar/types";
3
- import { IBeaconChain } from "../../../chain/index.js";
4
- import { IBeaconDb } from "../../../db/index.js";
5
- export declare function onDataColumnSidecarsByRoot(requestBody: fulu.DataColumnSidecarsByRootRequest, chain: IBeaconChain, db: IBeaconDb): AsyncIterable<ResponseOutgoing>;
6
- //# sourceMappingURL=dataColumnSidecarsByRoot.d.ts.map