@lodestar/beacon-node 1.29.0-dev.f526cb7ab9 → 1.29.0-peerDAS.9d67a7e3a2

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 (232) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +37 -14
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/pool/index.js +1 -1
  4. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  5. package/lib/api/impl/beacon/state/index.js +0 -12
  6. package/lib/api/impl/beacon/state/index.js.map +1 -1
  7. package/lib/api/impl/validator/index.js +4 -14
  8. package/lib/api/impl/validator/index.js.map +1 -1
  9. package/lib/chain/archiveStore/historicalState/worker.js +0 -12
  10. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  11. package/lib/chain/archiveStore/utils/archiveBlocks.js +56 -21
  12. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  13. package/lib/chain/beaconProposerCache.d.ts +1 -0
  14. package/lib/chain/beaconProposerCache.js +3 -0
  15. package/lib/chain/beaconProposerCache.js.map +1 -1
  16. package/lib/chain/blocks/importBlock.js +56 -14
  17. package/lib/chain/blocks/importBlock.js.map +1 -1
  18. package/lib/chain/blocks/types.d.ts +67 -26
  19. package/lib/chain/blocks/types.js +39 -6
  20. package/lib/chain/blocks/types.js.map +1 -1
  21. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  22. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  23. package/lib/chain/blocks/writeBlockInputToDb.js +88 -15
  24. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  25. package/lib/chain/chain.d.ts +28 -1
  26. package/lib/chain/chain.js +22 -7
  27. package/lib/chain/chain.js.map +1 -1
  28. package/lib/chain/emitter.d.ts +18 -2
  29. package/lib/chain/emitter.js +13 -0
  30. package/lib/chain/emitter.js.map +1 -1
  31. package/lib/chain/errors/dataColumnSidecarError.d.ts +27 -0
  32. package/lib/chain/errors/dataColumnSidecarError.js +12 -0
  33. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  34. package/lib/chain/errors/index.d.ts +1 -0
  35. package/lib/chain/errors/index.js +1 -0
  36. package/lib/chain/errors/index.js.map +1 -1
  37. package/lib/chain/interface.d.ts +2 -0
  38. package/lib/chain/interface.js.map +1 -1
  39. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -4
  40. package/lib/chain/opPools/aggregatedAttestationPool.js +48 -78
  41. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  42. package/lib/chain/opPools/attestationPool.d.ts +2 -4
  43. package/lib/chain/opPools/attestationPool.js +3 -4
  44. package/lib/chain/opPools/attestationPool.js.map +1 -1
  45. package/lib/chain/options.d.ts +3 -0
  46. package/lib/chain/options.js +4 -0
  47. package/lib/chain/options.js.map +1 -1
  48. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +55 -18
  49. package/lib/chain/seenCache/seenGossipBlockInput.js +293 -51
  50. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  51. package/lib/chain/validation/dataColumnSidecar.d.ts +8 -0
  52. package/lib/chain/validation/dataColumnSidecar.js +91 -0
  53. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  54. package/lib/db/beacon.d.ts +3 -1
  55. package/lib/db/beacon.js +3 -1
  56. package/lib/db/beacon.js.map +1 -1
  57. package/lib/db/buckets.d.ts +3 -1
  58. package/lib/db/buckets.js +2 -0
  59. package/lib/db/buckets.js.map +1 -1
  60. package/lib/db/interface.d.ts +3 -1
  61. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  62. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  63. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  64. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  65. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  66. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  67. package/lib/db/repositories/index.d.ts +2 -0
  68. package/lib/db/repositories/index.js +2 -0
  69. package/lib/db/repositories/index.js.map +1 -1
  70. package/lib/execution/engine/http.d.ts +5 -3
  71. package/lib/execution/engine/http.js +48 -24
  72. package/lib/execution/engine/http.js.map +1 -1
  73. package/lib/execution/engine/interface.d.ts +4 -2
  74. package/lib/execution/engine/interface.js +1 -1
  75. package/lib/execution/engine/interface.js.map +1 -1
  76. package/lib/execution/engine/mock.d.ts +1 -0
  77. package/lib/execution/engine/mock.js +4 -0
  78. package/lib/execution/engine/mock.js.map +1 -1
  79. package/lib/execution/engine/types.d.ts +8 -0
  80. package/lib/execution/engine/types.js +6 -0
  81. package/lib/execution/engine/types.js.map +1 -1
  82. package/lib/metrics/metrics/beacon.d.ts +7 -0
  83. package/lib/metrics/metrics/beacon.js +23 -0
  84. package/lib/metrics/metrics/beacon.js.map +1 -1
  85. package/lib/metrics/metrics/lodestar.d.ts +10 -21
  86. package/lib/metrics/metrics/lodestar.js +28 -64
  87. package/lib/metrics/metrics/lodestar.js.map +1 -1
  88. package/lib/metrics/validatorMonitor.js +1 -1
  89. package/lib/metrics/validatorMonitor.js.map +1 -1
  90. package/lib/network/core/metrics.d.ts +14 -4
  91. package/lib/network/core/metrics.js +23 -0
  92. package/lib/network/core/metrics.js.map +1 -1
  93. package/lib/network/core/networkCore.d.ts +9 -3
  94. package/lib/network/core/networkCore.js +23 -17
  95. package/lib/network/core/networkCore.js.map +1 -1
  96. package/lib/network/core/networkCoreWorker.js +5 -5
  97. package/lib/network/core/networkCoreWorker.js.map +1 -1
  98. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -2
  99. package/lib/network/core/networkCoreWorkerHandler.js +10 -3
  100. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  101. package/lib/network/core/types.d.ts +5 -1
  102. package/lib/network/discv5/index.d.ts +3 -2
  103. package/lib/network/discv5/index.js +5 -4
  104. package/lib/network/discv5/index.js.map +1 -1
  105. package/lib/network/discv5/types.d.ts +1 -1
  106. package/lib/network/discv5/worker.js +6 -7
  107. package/lib/network/discv5/worker.js.map +1 -1
  108. package/lib/network/events.d.ts +3 -1
  109. package/lib/network/events.js.map +1 -1
  110. package/lib/network/gossip/gossipsub.js +0 -4
  111. package/lib/network/gossip/gossipsub.js.map +1 -1
  112. package/lib/network/gossip/interface.d.ts +8 -1
  113. package/lib/network/gossip/interface.js +1 -0
  114. package/lib/network/gossip/interface.js.map +1 -1
  115. package/lib/network/gossip/topic.d.ts +1189 -1289
  116. package/lib/network/gossip/topic.js +20 -1
  117. package/lib/network/gossip/topic.js.map +1 -1
  118. package/lib/network/interface.d.ts +17 -4
  119. package/lib/network/libp2p/index.d.ts +2 -2
  120. package/lib/network/libp2p/index.js +9 -9
  121. package/lib/network/libp2p/index.js.map +1 -1
  122. package/lib/network/metadata.d.ts +10 -6
  123. package/lib/network/metadata.js +20 -4
  124. package/lib/network/metadata.js.map +1 -1
  125. package/lib/network/network.d.ts +20 -6
  126. package/lib/network/network.js +63 -11
  127. package/lib/network/network.js.map +1 -1
  128. package/lib/network/networkConfig.d.ts +23 -0
  129. package/lib/network/networkConfig.js +32 -0
  130. package/lib/network/networkConfig.js.map +1 -0
  131. package/lib/network/options.js +2 -0
  132. package/lib/network/options.js.map +1 -1
  133. package/lib/network/peers/datastore.d.ts +1 -2
  134. package/lib/network/peers/datastore.js +1 -1
  135. package/lib/network/peers/datastore.js.map +1 -1
  136. package/lib/network/peers/discover.d.ts +19 -7
  137. package/lib/network/peers/discover.js +148 -18
  138. package/lib/network/peers/discover.js.map +1 -1
  139. package/lib/network/peers/peerManager.d.ts +12 -10
  140. package/lib/network/peers/peerManager.js +96 -10
  141. package/lib/network/peers/peerManager.js.map +1 -1
  142. package/lib/network/peers/peersData.d.ts +8 -2
  143. package/lib/network/peers/peersData.js.map +1 -1
  144. package/lib/network/peers/score/interface.d.ts +1 -1
  145. package/lib/network/peers/score/score.d.ts +2 -2
  146. package/lib/network/peers/score/score.js +4 -1
  147. package/lib/network/peers/score/score.js.map +1 -1
  148. package/lib/network/peers/score/store.d.ts +3 -1
  149. package/lib/network/peers/score/store.js +6 -2
  150. package/lib/network/peers/score/store.js.map +1 -1
  151. package/lib/network/peers/utils/getConnectedPeerIds.js +2 -2
  152. package/lib/network/peers/utils/getConnectedPeerIds.js.map +1 -1
  153. package/lib/network/peers/utils/prioritizePeers.d.ts +15 -4
  154. package/lib/network/peers/utils/prioritizePeers.js +28 -5
  155. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  156. package/lib/network/processor/extractSlotRootFns.js +8 -1
  157. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  158. package/lib/network/processor/gossipHandlers.js +154 -16
  159. package/lib/network/processor/gossipHandlers.js.map +1 -1
  160. package/lib/network/processor/gossipQueues/index.js +5 -0
  161. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  162. package/lib/network/processor/index.js +5 -1
  163. package/lib/network/processor/index.js.map +1 -1
  164. package/lib/network/reqresp/ReqRespBeaconNode.js +21 -3
  165. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  166. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +14 -5
  167. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +196 -14
  168. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  169. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +28 -5
  170. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +258 -26
  171. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  172. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  173. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  174. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
  175. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
  176. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  177. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  178. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +58 -0
  179. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  180. package/lib/network/reqresp/handlers/index.js +10 -0
  181. package/lib/network/reqresp/handlers/index.js.map +1 -1
  182. package/lib/network/reqresp/protocols.d.ts +3 -0
  183. package/lib/network/reqresp/protocols.js +15 -0
  184. package/lib/network/reqresp/protocols.js.map +1 -1
  185. package/lib/network/reqresp/rateLimit.js +11 -1
  186. package/lib/network/reqresp/rateLimit.js.map +1 -1
  187. package/lib/network/reqresp/types.d.ts +13 -6
  188. package/lib/network/reqresp/types.js +8 -1
  189. package/lib/network/reqresp/types.js.map +1 -1
  190. package/lib/network/subnets/interface.d.ts +2 -0
  191. package/lib/network/subnets/interface.js +16 -1
  192. package/lib/network/subnets/interface.js.map +1 -1
  193. package/lib/network/subnets/syncnetsService.js +4 -5
  194. package/lib/network/subnets/syncnetsService.js.map +1 -1
  195. package/lib/network/util.d.ts +1 -4
  196. package/lib/network/util.js +2 -2
  197. package/lib/network/util.js.map +1 -1
  198. package/lib/node/nodejs.d.ts +5 -3
  199. package/lib/node/nodejs.js +6 -8
  200. package/lib/node/nodejs.js.map +1 -1
  201. package/lib/sync/interface.d.ts +2 -2
  202. package/lib/sync/interface.js +1 -1
  203. package/lib/sync/interface.js.map +1 -1
  204. package/lib/sync/range/batch.d.ts +8 -2
  205. package/lib/sync/range/batch.js +16 -7
  206. package/lib/sync/range/batch.js.map +1 -1
  207. package/lib/sync/range/chain.d.ts +7 -2
  208. package/lib/sync/range/chain.js +45 -21
  209. package/lib/sync/range/chain.js.map +1 -1
  210. package/lib/sync/range/range.js +3 -3
  211. package/lib/sync/range/range.js.map +1 -1
  212. package/lib/sync/range/utils/peerBalancer.d.ts +4 -1
  213. package/lib/sync/range/utils/peerBalancer.js +20 -2
  214. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  215. package/lib/sync/unknownBlock.d.ts +8 -1
  216. package/lib/sync/unknownBlock.js +223 -63
  217. package/lib/sync/unknownBlock.js.map +1 -1
  218. package/lib/util/blobs.d.ts +12 -1
  219. package/lib/util/blobs.js +40 -1
  220. package/lib/util/blobs.js.map +1 -1
  221. package/lib/util/dataColumns.d.ts +105 -0
  222. package/lib/util/dataColumns.js +189 -0
  223. package/lib/util/dataColumns.js.map +1 -0
  224. package/lib/util/kzg.d.ts +9 -21
  225. package/lib/util/kzg.js +12 -88
  226. package/lib/util/kzg.js.map +1 -1
  227. package/lib/util/peerId.js +1 -1
  228. package/lib/util/peerId.js.map +1 -1
  229. package/lib/util/sszBytes.d.ts +1 -0
  230. package/lib/util/sszBytes.js +17 -0
  231. package/lib/util/sszBytes.js.map +1 -1
  232. package/package.json +35 -34
@@ -0,0 +1,105 @@
1
+ import { ChainForkConfig } from "@lodestar/config";
2
+ import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
3
+ import { ColumnIndex, CustodyIndex, SignedBeaconBlockHeader, ValidatorIndex, deneb, fulu } from "@lodestar/types";
4
+ import { NodeId } from "../network/subnets/index.js";
5
+ export declare class CustodyConfig {
6
+ /**
7
+ * The number of custody groups the node should subscribe to
8
+ */
9
+ targetCustodyGroupCount: number;
10
+ /**
11
+ * The custody columns the node should subscribe to
12
+ */
13
+ custodyColumns: ColumnIndex[];
14
+ /**
15
+ * Custody columns map which column maps to which index in the array of columns custodied
16
+ * with zero representing it is not custodied
17
+ */
18
+ custodyColumnsIndex: Uint8Array;
19
+ /**
20
+ * The number of custody groups the node will advertise to the network
21
+ */
22
+ advertisedCustodyGroupCount: number;
23
+ /**
24
+ * The number of custody groups the node will sample
25
+ */
26
+ sampledGroupCount: number;
27
+ /**
28
+ * Custody groups sampled by the node as part of custody sampling
29
+ */
30
+ sampleGroups: CustodyIndex[];
31
+ /**
32
+ * Data columns sampled by the node as part of custody sampling
33
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/das-core.md#custody-sampling
34
+ *
35
+ * TODO: Consider race conditions if this updates during sync/backfill
36
+ */
37
+ sampledColumns: ColumnIndex[];
38
+ /**
39
+ * Subnets sampled by the node as part of custody sampling
40
+ */
41
+ sampledSubnets: number[];
42
+ private config;
43
+ private nodeId;
44
+ constructor(nodeId: NodeId, config: ChainForkConfig);
45
+ updateTargetCustodyGroupCount(targetCustodyGroupCount: number): void;
46
+ updateAdvertisedCustodyGroupCount(advertisedCustodyGroupCount: number): void;
47
+ private getCustodyColumnsIndex;
48
+ }
49
+ /**
50
+ * Calculate the number of custody groups the node should subscribe to based on the node's effective balance
51
+ *
52
+ * SPEC FUNCTION
53
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#validator-custody
54
+ */
55
+ export declare function getValidatorsCustodyRequirement(state: CachedBeaconStateAllForks, validatorIndices: ValidatorIndex[], config: ChainForkConfig): number;
56
+ /**
57
+ * Converts a custody group to an array of column indices. Should be 1-1 as long there are 128
58
+ * columns and 128 custody groups.
59
+ *
60
+ * SPEC FUNCTION
61
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/das-core.md#compute_columns_for_custody_group
62
+ */
63
+ export declare function computeColumnsForCustodyGroup(custodyIndex: CustodyIndex): ColumnIndex[];
64
+ /**
65
+ * Converts nodeId and a the number of custody groups to an array of custody indices. Indexes must be
66
+ * further converted to column indices
67
+ *
68
+ * SPEC FUNCTION
69
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/das-core.md#get_custody_groups
70
+ */
71
+ export declare function getCustodyGroups(nodeId: NodeId, custodyGroupCount: number): CustodyIndex[];
72
+ export declare function getDataColumns(nodeId: NodeId, custodyGroupCount: number): ColumnIndex[];
73
+ /**
74
+ * Computes the cells for each blob and combines them with cell proofs.
75
+ * Similar to the computeMatrix function described below.
76
+ *
77
+ * SPEC FUNCTION (note: spec currently computes proofs, but we already have them)
78
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/das-core.md#compute_matrix
79
+ */
80
+ export declare function getCellsAndProofs(blobBundles: fulu.BlobAndProofV2[]): [Uint8Array[], Uint8Array[]][];
81
+ /**
82
+ * Given a signed block header and the commitments, inclusion proof, cells/proofs associated with
83
+ * each blob in the block, assemble the sidecars which can be distributed to peers.
84
+ *
85
+ * SPEC FUNCTION
86
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#get_data_column_sidecars
87
+ */
88
+ export declare function getDataColumnSidecars(signedBlockHeader: SignedBeaconBlockHeader, kzgCommitments: deneb.KZGCommitment[], kzgCommitmentsInclusionProof: fulu.KzgCommitmentsInclusionProof, cellsAndKzgProofs: [Uint8Array[], Uint8Array[]][]): fulu.DataColumnSidecars;
89
+ /**
90
+ * Given a signed block and the cells/proofs associated with each blob in the
91
+ * block, assemble the sidecars which can be distributed to peers.
92
+ *
93
+ * SPEC FUNCTION
94
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#get_data_column_sidecars_from_block
95
+ */
96
+ export declare function getDataColumnSidecarsFromBlock(config: ChainForkConfig, signedBlock: fulu.SignedBeaconBlock, cellsAndKzgProofs: [Uint8Array[], Uint8Array[]][]): fulu.DataColumnSidecars;
97
+ /**
98
+ * Given a DataColumnSidecar and the cells/proofs associated with each blob corresponding
99
+ * to the commitments it contains, assemble all sidecars for distribution to peers.
100
+ *
101
+ * SPEC FUNCTION
102
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#get_data_column_sidecars_from_column_sidecar
103
+ */
104
+ export declare function getDataColumnSidecarsFromColumnSidecar(sidecar: fulu.DataColumnSidecar, cellsAndKzgProofs: [Uint8Array[], Uint8Array[]][]): fulu.DataColumnSidecars;
105
+ //# sourceMappingURL=dataColumns.d.ts.map
@@ -0,0 +1,189 @@
1
+ import { digest } from "@chainsafe/as-sha256";
2
+ import { DATA_COLUMN_SIDECAR_SUBNET_COUNT, EFFECTIVE_BALANCE_INCREMENT, NUMBER_OF_COLUMNS, NUMBER_OF_CUSTODY_GROUPS, } from "@lodestar/params";
3
+ import { signedBlockToSignedHeader } from "@lodestar/state-transition";
4
+ import { ssz } from "@lodestar/types";
5
+ import { bytesToBigInt } from "@lodestar/utils";
6
+ import { computeKzgCommitmentsInclusionProof } from "./blobs.js";
7
+ import { ckzg } from "./kzg.js";
8
+ export class CustodyConfig {
9
+ constructor(nodeId, config) {
10
+ this.config = config;
11
+ this.nodeId = nodeId;
12
+ this.targetCustodyGroupCount = Math.max(config.CUSTODY_REQUIREMENT, config.NODE_CUSTODY_REQUIREMENT);
13
+ this.custodyColumns = getDataColumns(this.nodeId, this.targetCustodyGroupCount);
14
+ this.custodyColumnsIndex = this.getCustodyColumnsIndex(this.custodyColumns);
15
+ this.advertisedCustodyGroupCount = this.targetCustodyGroupCount;
16
+ this.sampledGroupCount = Math.max(this.targetCustodyGroupCount, this.config.SAMPLES_PER_SLOT);
17
+ this.sampleGroups = getCustodyGroups(this.nodeId, this.sampledGroupCount);
18
+ this.sampledColumns = getDataColumns(this.nodeId, this.sampledGroupCount);
19
+ this.sampledSubnets = this.sampledColumns.map(computeSubnetForDataColumn);
20
+ }
21
+ updateTargetCustodyGroupCount(targetCustodyGroupCount) {
22
+ this.targetCustodyGroupCount = targetCustodyGroupCount;
23
+ this.custodyColumns = getDataColumns(this.nodeId, this.targetCustodyGroupCount);
24
+ this.custodyColumnsIndex = this.getCustodyColumnsIndex(this.custodyColumns);
25
+ // TODO: Porting this over to match current behavior, but I think this incorrectly mixes units:
26
+ // SAMPLES_PER_SLOT is in columns, and CUSTODY_GROUP_COUNT is in groups
27
+ this.sampledGroupCount = Math.max(this.targetCustodyGroupCount, this.config.SAMPLES_PER_SLOT);
28
+ this.sampleGroups = getCustodyGroups(this.nodeId, this.sampledGroupCount);
29
+ this.sampledColumns = getDataColumns(this.nodeId, this.sampledGroupCount);
30
+ this.sampledSubnets = this.sampledColumns.map(computeSubnetForDataColumn);
31
+ }
32
+ updateAdvertisedCustodyGroupCount(advertisedCustodyGroupCount) {
33
+ this.advertisedCustodyGroupCount = advertisedCustodyGroupCount;
34
+ }
35
+ getCustodyColumnsIndex(custodyColumns) {
36
+ // custody columns map which column maps to which index in the array of columns custodied
37
+ // with zero representing it is not custodied
38
+ const custodyColumnsIndex = new Uint8Array(NUMBER_OF_COLUMNS);
39
+ let custodyAtIndex = 1;
40
+ for (const columnIndex of custodyColumns) {
41
+ custodyColumnsIndex[columnIndex] = custodyAtIndex;
42
+ custodyAtIndex++;
43
+ }
44
+ return custodyColumnsIndex;
45
+ }
46
+ }
47
+ function computeSubnetForDataColumn(columnIndex) {
48
+ return columnIndex % DATA_COLUMN_SIDECAR_SUBNET_COUNT;
49
+ }
50
+ /**
51
+ * Calculate the number of custody groups the node should subscribe to based on the node's effective balance
52
+ *
53
+ * SPEC FUNCTION
54
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#validator-custody
55
+ */
56
+ export function getValidatorsCustodyRequirement(state, validatorIndices, config) {
57
+ if (validatorIndices.length === 0) {
58
+ return config.CUSTODY_REQUIREMENT;
59
+ }
60
+ const totalNodeEffectiveBalance = validatorIndices.reduce((total, validatorIndex) => {
61
+ return total + state.epochCtx.effectiveBalanceIncrements[validatorIndex] * EFFECTIVE_BALANCE_INCREMENT;
62
+ }, 0);
63
+ const count = Math.floor(totalNodeEffectiveBalance / config.BALANCE_PER_ADDITIONAL_CUSTODY_GROUP);
64
+ return Math.min(Math.max(count, config.VALIDATOR_CUSTODY_REQUIREMENT), NUMBER_OF_CUSTODY_GROUPS);
65
+ }
66
+ /**
67
+ * Converts a custody group to an array of column indices. Should be 1-1 as long there are 128
68
+ * columns and 128 custody groups.
69
+ *
70
+ * SPEC FUNCTION
71
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/das-core.md#compute_columns_for_custody_group
72
+ */
73
+ export function computeColumnsForCustodyGroup(custodyIndex) {
74
+ if (custodyIndex > NUMBER_OF_CUSTODY_GROUPS) {
75
+ custodyIndex = NUMBER_OF_CUSTODY_GROUPS;
76
+ }
77
+ const columnsPerCustodyGroup = Number(NUMBER_OF_COLUMNS / NUMBER_OF_CUSTODY_GROUPS);
78
+ const columnIndexes = [];
79
+ for (let i = 0; i < columnsPerCustodyGroup; i++) {
80
+ columnIndexes.push(NUMBER_OF_CUSTODY_GROUPS * i + custodyIndex);
81
+ }
82
+ columnIndexes.sort((a, b) => a - b);
83
+ return columnIndexes;
84
+ }
85
+ /**
86
+ * Converts nodeId and a the number of custody groups to an array of custody indices. Indexes must be
87
+ * further converted to column indices
88
+ *
89
+ * SPEC FUNCTION
90
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/das-core.md#get_custody_groups
91
+ */
92
+ export function getCustodyGroups(nodeId, custodyGroupCount) {
93
+ if (custodyGroupCount > NUMBER_OF_CUSTODY_GROUPS) {
94
+ custodyGroupCount = NUMBER_OF_CUSTODY_GROUPS;
95
+ }
96
+ const custodyGroups = [];
97
+ // nodeId is in bigendian and all computes are in little endian
98
+ let currentId = bytesToBigInt(nodeId, "be");
99
+ while (custodyGroups.length < custodyGroupCount) {
100
+ // could be optimized
101
+ const currentIdBytes = ssz.UintBn256.serialize(currentId);
102
+ const custodyGroup = Number(ssz.UintBn64.deserialize(digest(currentIdBytes).slice(0, 8)) % BigInt(NUMBER_OF_CUSTODY_GROUPS));
103
+ if (!custodyGroups.includes(custodyGroup)) {
104
+ custodyGroups.push(custodyGroup);
105
+ }
106
+ const willOverflow = currentIdBytes.reduce((acc, elem) => acc && elem === 0xff, true);
107
+ if (willOverflow) {
108
+ currentId = BigInt(0);
109
+ }
110
+ else {
111
+ currentId++;
112
+ }
113
+ }
114
+ custodyGroups.sort((a, b) => a - b);
115
+ return custodyGroups;
116
+ }
117
+ export function getDataColumns(nodeId, custodyGroupCount) {
118
+ return getCustodyGroups(nodeId, custodyGroupCount)
119
+ .flatMap(computeColumnsForCustodyGroup)
120
+ .sort((a, b) => a - b);
121
+ }
122
+ /**
123
+ * Computes the cells for each blob and combines them with cell proofs.
124
+ * Similar to the computeMatrix function described below.
125
+ *
126
+ * SPEC FUNCTION (note: spec currently computes proofs, but we already have them)
127
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/das-core.md#compute_matrix
128
+ */
129
+ export function getCellsAndProofs(blobBundles) {
130
+ return blobBundles.map(({ blob, proofs: cellProofs }) => {
131
+ const cells = ckzg.computeCells(blob);
132
+ return [cells, cellProofs];
133
+ });
134
+ }
135
+ /**
136
+ * Given a signed block header and the commitments, inclusion proof, cells/proofs associated with
137
+ * each blob in the block, assemble the sidecars which can be distributed to peers.
138
+ *
139
+ * SPEC FUNCTION
140
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#get_data_column_sidecars
141
+ */
142
+ export function getDataColumnSidecars(signedBlockHeader, kzgCommitments, kzgCommitmentsInclusionProof, cellsAndKzgProofs) {
143
+ if (cellsAndKzgProofs.length !== kzgCommitments.length) {
144
+ throw Error("Invalid cellsAndKzgProofs length for getDataColumnSidecars");
145
+ }
146
+ const sidecars = [];
147
+ for (let columnIndex = 0; columnIndex < NUMBER_OF_COLUMNS; columnIndex++) {
148
+ const columnCells = [];
149
+ const columnProofs = [];
150
+ for (const [cells, proofs] of cellsAndKzgProofs) {
151
+ columnCells.push(cells[columnIndex]);
152
+ columnProofs.push(proofs[columnIndex]);
153
+ }
154
+ sidecars.push({
155
+ index: columnIndex,
156
+ column: columnCells,
157
+ kzgCommitments,
158
+ kzgProofs: columnProofs,
159
+ signedBlockHeader,
160
+ kzgCommitmentsInclusionProof,
161
+ });
162
+ }
163
+ return sidecars;
164
+ }
165
+ /**
166
+ * Given a signed block and the cells/proofs associated with each blob in the
167
+ * block, assemble the sidecars which can be distributed to peers.
168
+ *
169
+ * SPEC FUNCTION
170
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#get_data_column_sidecars_from_block
171
+ */
172
+ export function getDataColumnSidecarsFromBlock(config, signedBlock, cellsAndKzgProofs) {
173
+ const blobKzgCommitments = signedBlock.message.body.blobKzgCommitments;
174
+ const fork = config.getForkName(signedBlock.message.slot);
175
+ const signedBlockHeader = signedBlockToSignedHeader(config, signedBlock);
176
+ const kzgCommitmentsInclusionProof = computeKzgCommitmentsInclusionProof(fork, signedBlock.message.body);
177
+ return getDataColumnSidecars(signedBlockHeader, blobKzgCommitments, kzgCommitmentsInclusionProof, cellsAndKzgProofs);
178
+ }
179
+ /**
180
+ * Given a DataColumnSidecar and the cells/proofs associated with each blob corresponding
181
+ * to the commitments it contains, assemble all sidecars for distribution to peers.
182
+ *
183
+ * SPEC FUNCTION
184
+ * https://github.com/ethereum/consensus-specs/blob/dev/specs/fulu/validator.md#get_data_column_sidecars_from_column_sidecar
185
+ */
186
+ export function getDataColumnSidecarsFromColumnSidecar(sidecar, cellsAndKzgProofs) {
187
+ return getDataColumnSidecars(sidecar.signedBlockHeader, sidecar.kzgCommitments, sidecar.kzgCommitmentsInclusionProof, cellsAndKzgProofs);
188
+ }
189
+ //# sourceMappingURL=dataColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataColumns.js","sourceRoot":"","sources":["../../src/util/dataColumns.ts"],"names":[],"mappings":"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"}
package/lib/util/kzg.d.ts CHANGED
@@ -1,35 +1,23 @@
1
1
  export declare const FIELD_ELEMENTS_PER_BLOB_MAINNET = 4096;
2
2
  export declare let ckzg: {
3
- freeTrustedSetup(): void;
4
- loadTrustedSetup(filePath: string): void;
3
+ loadTrustedSetup(precompute: number, filePath?: string): void;
5
4
  blobToKzgCommitment(blob: Uint8Array): Uint8Array;
5
+ computeKzgProof(blob: Uint8Array, zBytes: Uint8Array): [Uint8Array, Uint8Array];
6
6
  computeBlobKzgProof(blob: Uint8Array, commitment: Uint8Array): Uint8Array;
7
+ verifyKzgProof(commitmentBytes: Uint8Array, zBytes: Uint8Array, yBytes: Uint8Array, proofBytes: Uint8Array): boolean;
7
8
  verifyBlobKzgProof(blob: Uint8Array, commitment: Uint8Array, proof: Uint8Array): boolean;
8
9
  verifyBlobKzgProofBatch(blobs: Uint8Array[], expectedKzgCommitments: Uint8Array[], kzgProofs: Uint8Array[]): boolean;
10
+ computeCells(blob: Uint8Array): Uint8Array[];
11
+ computeCellsAndKzgProofs(blob: Uint8Array): [Uint8Array[], Uint8Array[]];
12
+ recoverCellsAndKzgProofs(cellIndices: number[], cells: Uint8Array[]): [Uint8Array[], Uint8Array[]];
13
+ verifyCellKzgProofBatch(commitmentsBytes: Uint8Array[], cellIndices: number[], cells: Uint8Array[], proofsBytes: Uint8Array[]): boolean;
9
14
  };
10
- export declare const TRUSTED_SETUP_BIN_FILEPATH: string;
11
15
  export declare function initCKZG(): Promise<void>;
12
- export declare enum TrustedFileMode {
13
- Bin = "bin",
14
- Txt = "txt"
15
- }
16
16
  /**
17
17
  * Load our KZG trusted setup into C-KZG for later use.
18
18
  * We persist the trusted setup as serialized bytes to save space over TXT or JSON formats.
19
19
  * However the current c-kzg API **requires** to read from a file with a specific .txt format
20
20
  */
21
- export declare function loadEthereumTrustedSetup(mode?: TrustedFileMode, filePath?: string): void;
22
- export interface TrustedSetupJSON {
23
- setup_G1: string[];
24
- setup_G2: string[];
25
- }
26
- type TrustedSetupBin = Uint8Array;
27
- type TrustedSetupTXT = string;
28
- /**
29
- * Custom format defined in https://github.com/ethereum/c-kzg-4844/issues/3
30
- */
31
- export declare function trustedSetupJsonToBin(data: TrustedSetupJSON): TrustedSetupBin;
32
- export declare function trustedSetupBinToJson(bytes: TrustedSetupBin): TrustedSetupJSON;
33
- export declare function trustedSetupJsonToTxt(data: TrustedSetupJSON): TrustedSetupTXT;
34
- export {};
21
+ export declare function loadEthereumTrustedSetup(precompute?: number, // default to 0 for testing
22
+ filePath?: string): void;
35
23
  //# sourceMappingURL=kzg.d.ts.map
package/lib/util/kzg.js CHANGED
@@ -1,65 +1,38 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { fromHex, strip0xPrefix, toHex } from "@lodestar/utils";
5
1
  // "c-kzg" has hardcoded the mainnet value, do not use params
6
2
  export const FIELD_ELEMENTS_PER_BLOB_MAINNET = 4096;
7
3
  function ckzgNotLoaded() {
8
4
  throw Error("c-kzg library not loaded");
9
5
  }
10
6
  export let ckzg = {
11
- freeTrustedSetup: ckzgNotLoaded,
12
7
  loadTrustedSetup: ckzgNotLoaded,
13
8
  blobToKzgCommitment: ckzgNotLoaded,
9
+ computeKzgProof: ckzgNotLoaded,
14
10
  computeBlobKzgProof: ckzgNotLoaded,
11
+ verifyKzgProof: ckzgNotLoaded,
15
12
  verifyBlobKzgProof: ckzgNotLoaded,
16
13
  verifyBlobKzgProofBatch: ckzgNotLoaded,
14
+ computeCells: ckzgNotLoaded,
15
+ computeCellsAndKzgProofs: ckzgNotLoaded,
16
+ recoverCellsAndKzgProofs: ckzgNotLoaded,
17
+ verifyCellKzgProofBatch: ckzgNotLoaded,
17
18
  };
18
- // Global variable __dirname no longer available in ES6 modules.
19
- // Solutions: https://stackoverflow.com/questions/46745014/alternative-for-dirname-in-node-js-when-using-es6-modules
20
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
21
- export const TRUSTED_SETUP_BIN_FILEPATH = path.join(__dirname, "../../trusted_setup.bin");
22
- const TRUSTED_SETUP_JSON_FILEPATH = path.join(__dirname, "../../trusted_setup.json");
23
- const TRUSTED_SETUP_TXT_FILEPATH = path.join(__dirname, "../../trusted_setup.txt");
24
- const POINT_COUNT_BYTES = 4;
25
- const G1POINT_BYTES = 48;
26
- const G2POINT_BYTES = 96;
27
- const G1POINT_COUNT = FIELD_ELEMENTS_PER_BLOB_MAINNET;
28
- const G2POINT_COUNT = 65;
29
- const TOTAL_SIZE = 2 * POINT_COUNT_BYTES + G1POINT_BYTES * G1POINT_COUNT + G2POINT_BYTES * G2POINT_COUNT;
30
19
  export async function initCKZG() {
31
20
  /* eslint-disable @typescript-eslint/ban-ts-comment */
32
21
  // @ts-ignore
33
22
  ckzg = (await import("c-kzg")).default;
34
23
  /* eslint-enable @typescript-eslint/ban-ts-comment */
35
24
  }
36
- export var TrustedFileMode;
37
- (function (TrustedFileMode) {
38
- TrustedFileMode["Bin"] = "bin";
39
- TrustedFileMode["Txt"] = "txt";
40
- })(TrustedFileMode || (TrustedFileMode = {}));
41
25
  /**
42
26
  * Load our KZG trusted setup into C-KZG for later use.
43
27
  * We persist the trusted setup as serialized bytes to save space over TXT or JSON formats.
44
28
  * However the current c-kzg API **requires** to read from a file with a specific .txt format
45
29
  */
46
- export function loadEthereumTrustedSetup(mode = TrustedFileMode.Txt, filePath) {
30
+ export function loadEthereumTrustedSetup(precompute = 0, // default to 0 for testing
31
+ filePath) {
47
32
  try {
48
- let setupFilePath;
49
- if (mode === TrustedFileMode.Bin) {
50
- const binPath = filePath ?? TRUSTED_SETUP_BIN_FILEPATH;
51
- const bytes = fs.readFileSync(binPath);
52
- const json = trustedSetupBinToJson(bytes);
53
- const txt = trustedSetupJsonToTxt(json);
54
- fs.writeFileSync(TRUSTED_SETUP_TXT_FILEPATH, txt);
55
- setupFilePath = TRUSTED_SETUP_TXT_FILEPATH;
56
- }
57
- else {
58
- setupFilePath = filePath ?? TRUSTED_SETUP_TXT_FILEPATH;
59
- }
60
33
  try {
61
34
  // in unit tests, calling loadTrustedSetup() twice has error so we have to free and retry
62
- ckzg.loadTrustedSetup(setupFilePath);
35
+ ckzg.loadTrustedSetup(precompute, filePath);
63
36
  }
64
37
  catch (e) {
65
38
  if (e.message !== "Error trusted setup is already loaded") {
@@ -68,59 +41,10 @@ export function loadEthereumTrustedSetup(mode = TrustedFileMode.Txt, filePath) {
68
41
  }
69
42
  }
70
43
  catch (e) {
71
- e.message = `Error loading trusted setup ${TRUSTED_SETUP_JSON_FILEPATH}: ${e.message}`;
44
+ e.message = filePath
45
+ ? `Error loading trusted setup ${filePath}: ${e.message}`
46
+ : `Error loading default trusted setup: ${e.message}`;
72
47
  throw e;
73
48
  }
74
49
  }
75
- /**
76
- * Custom format defined in https://github.com/ethereum/c-kzg-4844/issues/3
77
- */
78
- export function trustedSetupJsonToBin(data) {
79
- const out = new Uint8Array(TOTAL_SIZE);
80
- const dv = new DataView(out.buffer, out.byteOffset, out.byteLength);
81
- dv.setUint32(0, G1POINT_COUNT);
82
- dv.setUint32(POINT_COUNT_BYTES, G2POINT_BYTES);
83
- for (let i = 0; i < G1POINT_COUNT; i++) {
84
- const point = fromHex(data.setup_G1[i]);
85
- if (point.length !== G1POINT_BYTES)
86
- throw Error(`g1 point size ${point.length} != ${G1POINT_BYTES}`);
87
- out.set(point, 2 * POINT_COUNT_BYTES + i * G1POINT_BYTES);
88
- }
89
- for (let i = 0; i < G2POINT_COUNT; i++) {
90
- const point = fromHex(data.setup_G2[i]);
91
- if (point.length !== G2POINT_BYTES)
92
- throw Error(`g2 point size ${point.length} != ${G2POINT_BYTES}`);
93
- out.set(point, 2 * POINT_COUNT_BYTES + G1POINT_COUNT * G1POINT_BYTES + i * G2POINT_BYTES);
94
- }
95
- return out;
96
- }
97
- export function trustedSetupBinToJson(bytes) {
98
- const data = {
99
- // biome-ignore lint/style/useNamingConvention: Need to be consistent with KZG pattern
100
- setup_G1: [],
101
- // biome-ignore lint/style/useNamingConvention: Need to be consistent with KZG pattern
102
- setup_G2: [],
103
- };
104
- if (bytes.length < TOTAL_SIZE) {
105
- throw Error(`trusted_setup size ${bytes.length} < ${TOTAL_SIZE}`);
106
- }
107
- for (let i = 0; i < G1POINT_COUNT; i++) {
108
- const start = 2 * POINT_COUNT_BYTES + i * G1POINT_BYTES;
109
- data.setup_G1.push(toHex(bytes.slice(start, start + G1POINT_BYTES)));
110
- }
111
- for (let i = 0; i < G2POINT_COUNT; i++) {
112
- const start = 2 * POINT_COUNT_BYTES + G1POINT_COUNT * G1POINT_BYTES + i * G2POINT_BYTES;
113
- data.setup_G1.push(toHex(bytes.slice(start, start + G2POINT_BYTES)));
114
- }
115
- return data;
116
- }
117
- export function trustedSetupJsonToTxt(data) {
118
- return [
119
- // ↵
120
- G1POINT_COUNT,
121
- G2POINT_COUNT,
122
- ...data.setup_G1.map(strip0xPrefix),
123
- ...data.setup_G2.map(strip0xPrefix),
124
- ].join("\n");
125
- }
126
50
  //# sourceMappingURL=kzg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kzg.js","sourceRoot":"","sources":["../../src/util/kzg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kzg.js","sourceRoot":"","sources":["../../src/util/kzg.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAEpD,SAAS,aAAa;IACpB,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,IAAI,IAAI,GAiBX;IACF,gBAAgB,EAAE,aAAa;IAC/B,mBAAmB,EAAE,aAAa;IAClC,eAAe,EAAE,aAAa;IAC9B,mBAAmB,EAAE,aAAa;IAClC,cAAc,EAAE,aAAa;IAC7B,kBAAkB,EAAE,aAAa;IACjC,uBAAuB,EAAE,aAAa;IACtC,YAAY,EAAE,aAAa;IAC3B,wBAAwB,EAAE,aAAa;IACvC,wBAAwB,EAAE,aAAa;IACvC,uBAAuB,EAAE,aAAa;CACvC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,sDAAsD;IACtD,aAAa;IACb,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAsB,CAAC;IACtD,qDAAqD;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAU,GAAG,CAAC,EAAE,2BAA2B;AAC3C,QAAiB;IAEjB,IAAI,CAAC;QACH,IAAI,CAAC;YACH,yFAAyF;YACzF,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAK,CAAW,CAAC,OAAO,KAAK,uCAAuC,EAAE,CAAC;gBACrE,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACV,CAAW,CAAC,OAAO,GAAG,QAAQ;YAC7B,CAAC,CAAC,+BAA+B,QAAQ,KAAM,CAAW,CAAC,OAAO,EAAE;YACpE,CAAC,CAAC,wCAAyC,CAAW,CAAC,OAAO,EAAE,CAAC;QACnE,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC"}
@@ -2,6 +2,6 @@ import { peerIdFromString } from "@libp2p/peer-id";
2
2
  import { base58btc } from "multiformats/bases/base58";
3
3
  export { peerIdFromString };
4
4
  export function peerIdToString(peerId) {
5
- return base58btc.encode(peerId.toMultihash().bytes).slice(1);
5
+ return base58btc.encode(peerId.multihash.bytes).slice(1);
6
6
  }
7
7
  //# sourceMappingURL=peerId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"peerId.js","sourceRoot":"","sources":["../../src/util/peerId.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAC;AASpD,OAAO,EAAC,gBAAgB,EAAC,CAAC;AAE1B,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"peerId.js","sourceRoot":"","sources":["../../src/util/peerId.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAC;AASpD,OAAO,EAAC,gBAAgB,EAAC,CAAC;AAE1B,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -102,4 +102,5 @@ export declare function getCommitteeBitsFromSignedAggregateAndProofElectra(data:
102
102
  export declare function getAttDataFromSignedAggregateAndProofPhase0(data: Uint8Array): AttDataBase64 | null;
103
103
  export declare function getSlotFromSignedBeaconBlockSerialized(data: Uint8Array): Slot | null;
104
104
  export declare function getSlotFromBlobSidecarSerialized(data: Uint8Array): Slot | null;
105
+ export declare function getSlotFromDataColumnSidecarSerialized(data: Uint8Array): Slot | null;
105
106
  //# sourceMappingURL=sszBytes.d.ts.map
@@ -307,6 +307,23 @@ export function getSlotFromBlobSidecarSerialized(data) {
307
307
  }
308
308
  return getSlotFromOffset(data, SLOT_BYTES_POSITION_IN_SIGNED_BLOB_SIDECAR);
309
309
  }
310
+ /**
311
+ * {
312
+ index: ColumnIndex [ fixed - 8 bytes],
313
+ column: DataColumn BYTES_PER_FIELD_ELEMENT * FIELD_ELEMENTS_PER_CELL * <some non fixed length>,
314
+ kzgCommitments: denebSsz.BlobKzgCommitments,
315
+ kzgProofs: denebSsz.KZGProofs,
316
+ signedBlockHeader: phase0Ssz.SignedBeaconBlockHeader,
317
+ kzgCommitmentsInclusionProof: KzgCommitmentsInclusionProof,
318
+ }
319
+ */
320
+ const SLOT_BYTES_POSITION_IN_SIGNED_DATA_COLUMN_SIDECAR = 20;
321
+ export function getSlotFromDataColumnSidecarSerialized(data) {
322
+ if (data.length < SLOT_BYTES_POSITION_IN_SIGNED_DATA_COLUMN_SIDECAR + SLOT_SIZE) {
323
+ return null;
324
+ }
325
+ return getSlotFromOffset(data, SLOT_BYTES_POSITION_IN_SIGNED_DATA_COLUMN_SIDECAR);
326
+ }
310
327
  /**
311
328
  * Read only the first 4 bytes of Slot, max value is 4,294,967,295 will be reached 1634 years after genesis
312
329
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sszBytes.js","sourceRoot":"","sources":["../../src/util/sszBytes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sszBytes.js","sourceRoot":"","sources":["../../src/util/sszBytes.ts"],"names":[],"mappings":"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"}