@lodestar/beacon-node 1.33.0-dev.f3e21c7679 → 1.33.0-peerDAS.00a7126d44

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 (238) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +144 -40
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/debug/index.d.ts +1 -1
  4. package/lib/api/impl/debug/index.js +24 -1
  5. package/lib/api/impl/debug/index.js.map +1 -1
  6. package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
  7. package/lib/chain/archiveStore/archiveStore.js +2 -2
  8. package/lib/chain/archiveStore/interface.d.ts +1 -1
  9. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
  10. package/lib/chain/archiveStore/utils/archiveBlocks.js +88 -23
  11. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  12. package/lib/chain/beaconProposerCache.d.ts +1 -0
  13. package/lib/chain/beaconProposerCache.js +3 -0
  14. package/lib/chain/beaconProposerCache.js.map +1 -1
  15. package/lib/chain/blocks/importBlock.js +61 -6
  16. package/lib/chain/blocks/importBlock.js.map +1 -1
  17. package/lib/chain/blocks/types.d.ts +69 -24
  18. package/lib/chain/blocks/types.js +40 -6
  19. package/lib/chain/blocks/types.js.map +1 -1
  20. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  21. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  22. package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
  23. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  24. package/lib/chain/chain.d.ts +16 -5
  25. package/lib/chain/chain.js +42 -9
  26. package/lib/chain/chain.js.map +1 -1
  27. package/lib/chain/emitter.d.ts +18 -2
  28. package/lib/chain/emitter.js +13 -0
  29. package/lib/chain/emitter.js.map +1 -1
  30. package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
  31. package/lib/chain/errors/dataColumnSidecarError.js +21 -0
  32. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  33. package/lib/chain/errors/index.d.ts +1 -0
  34. package/lib/chain/errors/index.js +1 -0
  35. package/lib/chain/errors/index.js.map +1 -1
  36. package/lib/chain/interface.d.ts +10 -4
  37. package/lib/chain/interface.js.map +1 -1
  38. package/lib/chain/options.d.ts +4 -1
  39. package/lib/chain/options.js +5 -1
  40. package/lib/chain/options.js.map +1 -1
  41. package/lib/chain/prepareNextSlot.js +1 -1
  42. package/lib/chain/prepareNextSlot.js.map +1 -1
  43. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  44. package/lib/chain/produceBlock/produceBlockBody.js +7 -2
  45. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  46. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
  47. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +25 -2
  48. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  49. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
  50. package/lib/chain/seenCache/seenGossipBlockInput.js +321 -53
  51. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  52. package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
  53. package/lib/chain/validation/dataColumnSidecar.js +248 -0
  54. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  55. package/lib/constants/network.d.ts +1 -0
  56. package/lib/constants/network.js +2 -0
  57. package/lib/constants/network.js.map +1 -1
  58. package/lib/db/beacon.d.ts +3 -1
  59. package/lib/db/beacon.js +3 -1
  60. package/lib/db/beacon.js.map +1 -1
  61. package/lib/db/buckets.d.ts +3 -1
  62. package/lib/db/buckets.js +2 -0
  63. package/lib/db/buckets.js.map +1 -1
  64. package/lib/db/interface.d.ts +3 -1
  65. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  66. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  67. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  68. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  69. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  70. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  71. package/lib/db/repositories/index.d.ts +2 -0
  72. package/lib/db/repositories/index.js +2 -0
  73. package/lib/db/repositories/index.js.map +1 -1
  74. package/lib/execution/builder/http.d.ts +1 -0
  75. package/lib/execution/builder/http.js +3 -0
  76. package/lib/execution/builder/http.js.map +1 -1
  77. package/lib/execution/builder/interface.d.ts +1 -0
  78. package/lib/execution/engine/http.d.ts +5 -3
  79. package/lib/execution/engine/http.js +70 -31
  80. package/lib/execution/engine/http.js.map +1 -1
  81. package/lib/execution/engine/interface.d.ts +4 -2
  82. package/lib/execution/engine/interface.js +1 -1
  83. package/lib/execution/engine/interface.js.map +1 -1
  84. package/lib/execution/engine/mock.d.ts +1 -0
  85. package/lib/execution/engine/mock.js +5 -0
  86. package/lib/execution/engine/mock.js.map +1 -1
  87. package/lib/execution/engine/types.d.ts +10 -0
  88. package/lib/execution/engine/types.js +6 -0
  89. package/lib/execution/engine/types.js.map +1 -1
  90. package/lib/metrics/metrics/beacon.d.ts +15 -1
  91. package/lib/metrics/metrics/beacon.js +58 -1
  92. package/lib/metrics/metrics/beacon.js.map +1 -1
  93. package/lib/metrics/metrics/lodestar.d.ts +27 -1
  94. package/lib/metrics/metrics/lodestar.js +44 -0
  95. package/lib/metrics/metrics/lodestar.js.map +1 -1
  96. package/lib/network/core/metrics.d.ts +10 -3
  97. package/lib/network/core/metrics.js +22 -4
  98. package/lib/network/core/metrics.js.map +1 -1
  99. package/lib/network/core/networkCore.d.ts +8 -3
  100. package/lib/network/core/networkCore.js +24 -10
  101. package/lib/network/core/networkCore.js.map +1 -1
  102. package/lib/network/core/networkCoreWorker.js +1 -0
  103. package/lib/network/core/networkCoreWorker.js.map +1 -1
  104. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -3
  105. package/lib/network/core/networkCoreWorkerHandler.js +4 -0
  106. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  107. package/lib/network/core/types.d.ts +6 -4
  108. package/lib/network/events.d.ts +4 -2
  109. package/lib/network/events.js.map +1 -1
  110. package/lib/network/gossip/interface.d.ts +8 -1
  111. package/lib/network/gossip/interface.js +1 -0
  112. package/lib/network/gossip/interface.js.map +1 -1
  113. package/lib/network/gossip/topic.d.ts +1047 -1031
  114. package/lib/network/gossip/topic.js +20 -1
  115. package/lib/network/gossip/topic.js.map +1 -1
  116. package/lib/network/interface.d.ts +13 -1
  117. package/lib/network/metadata.d.ts +9 -5
  118. package/lib/network/metadata.js +25 -5
  119. package/lib/network/metadata.js.map +1 -1
  120. package/lib/network/network.d.ts +12 -2
  121. package/lib/network/network.js +59 -8
  122. package/lib/network/network.js.map +1 -1
  123. package/lib/network/networkConfig.d.ts +25 -0
  124. package/lib/network/networkConfig.js +29 -0
  125. package/lib/network/networkConfig.js.map +1 -0
  126. package/lib/network/options.d.ts +1 -0
  127. package/lib/network/options.js +5 -0
  128. package/lib/network/options.js.map +1 -1
  129. package/lib/network/peers/discover.d.ts +10 -4
  130. package/lib/network/peers/discover.js +116 -15
  131. package/lib/network/peers/discover.js.map +1 -1
  132. package/lib/network/peers/peerManager.d.ts +10 -4
  133. package/lib/network/peers/peerManager.js +135 -21
  134. package/lib/network/peers/peerManager.js.map +1 -1
  135. package/lib/network/peers/peersData.d.ts +17 -3
  136. package/lib/network/peers/peersData.js.map +1 -1
  137. package/lib/network/peers/score/constants.d.ts +3 -1
  138. package/lib/network/peers/score/constants.js +3 -1
  139. package/lib/network/peers/score/constants.js.map +1 -1
  140. package/lib/network/peers/score/interface.d.ts +6 -1
  141. package/lib/network/peers/score/interface.js.map +1 -1
  142. package/lib/network/peers/score/score.d.ts +7 -2
  143. package/lib/network/peers/score/score.js +39 -3
  144. package/lib/network/peers/score/score.js.map +1 -1
  145. package/lib/network/peers/score/store.d.ts +12 -1
  146. package/lib/network/peers/score/store.js +19 -2
  147. package/lib/network/peers/score/store.js.map +1 -1
  148. package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
  149. package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
  150. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  151. package/lib/network/peers/utils/prioritizePeers.d.ts +18 -7
  152. package/lib/network/peers/utils/prioritizePeers.js +43 -7
  153. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  154. package/lib/network/processor/extractSlotRootFns.js +8 -1
  155. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  156. package/lib/network/processor/gossipHandlers.js +157 -9
  157. package/lib/network/processor/gossipHandlers.js.map +1 -1
  158. package/lib/network/processor/gossipQueues/index.js +5 -0
  159. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  160. package/lib/network/processor/index.js +1 -0
  161. package/lib/network/processor/index.js.map +1 -1
  162. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
  163. package/lib/network/reqresp/ReqRespBeaconNode.js +32 -9
  164. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  165. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +16 -5
  166. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +204 -14
  167. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  168. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +32 -6
  169. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +283 -28
  170. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  171. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  172. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  173. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
  174. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
  175. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  176. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  177. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +57 -0
  178. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  179. package/lib/network/reqresp/handlers/index.js +10 -0
  180. package/lib/network/reqresp/handlers/index.js.map +1 -1
  181. package/lib/network/reqresp/handlers/status.js +3 -2
  182. package/lib/network/reqresp/handlers/status.js.map +1 -1
  183. package/lib/network/reqresp/protocols.d.ts +4 -0
  184. package/lib/network/reqresp/protocols.js +20 -0
  185. package/lib/network/reqresp/protocols.js.map +1 -1
  186. package/lib/network/reqresp/rateLimit.js +11 -1
  187. package/lib/network/reqresp/rateLimit.js.map +1 -1
  188. package/lib/network/reqresp/types.d.ts +15 -8
  189. package/lib/network/reqresp/types.js +10 -3
  190. package/lib/network/reqresp/types.js.map +1 -1
  191. package/lib/network/statusCache.d.ts +5 -5
  192. package/lib/network/statusCache.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/node/nodejs.js +1 -0
  199. package/lib/node/nodejs.js.map +1 -1
  200. package/lib/sync/constants.d.ts +1 -1
  201. package/lib/sync/constants.js +4 -1
  202. package/lib/sync/constants.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 +16 -2
  207. package/lib/sync/range/batch.js +38 -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 +110 -30
  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 -69
  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 +23 -1
  227. package/lib/util/blobs.js +156 -1
  228. package/lib/util/blobs.js.map +1 -1
  229. package/lib/util/dataColumns.d.ts +135 -0
  230. package/lib/util/dataColumns.js +352 -0
  231. package/lib/util/dataColumns.js.map +1 -0
  232. package/lib/util/metadata.d.ts +4 -0
  233. package/lib/util/metadata.js +7 -0
  234. package/lib/util/metadata.js.map +1 -1
  235. package/lib/util/sszBytes.d.ts +1 -0
  236. package/lib/util/sszBytes.js +17 -0
  237. package/lib/util/sszBytes.js.map +1 -1
  238. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
+ import { ForkName } from "@lodestar/params";
1
2
  import { DataAvailabilityStatus, computeTimeAtSlot } from "@lodestar/state-transition";
2
3
  import { ErrorAborted } from "@lodestar/utils";
3
4
  import { BlockError, BlockErrorCode } from "../errors/index.js";
4
5
  import { validateBlobSidecars } from "../validation/blobSidecar.js";
5
- import { BlobSidecarValidation, BlockInputType, getBlockInput } from "./types.js";
6
+ import { validateDataColumnsSidecars } from "../validation/dataColumnSidecar.js";
7
+ import { BlobSidecarValidation, BlockInputType, getBlockInput, } from "./types.js";
6
8
  // we can now wait for full 12 seconds because unavailable block sync will try pulling
7
9
  // the blobs from the network anyway after 500ms of seeing the block
8
10
  const BLOB_AVAILABILITY_TIMEOUT = 12_000;
@@ -64,17 +66,26 @@ async function maybeValidateBlobs(chain, blockInput, signal, opts) {
64
66
  // run full validation
65
67
  const { block } = blockInput;
66
68
  const blockSlot = block.message.slot;
67
- const blobsData = blockInput.type === BlockInputType.availableData
68
- ? blockInput.blockData
69
- : await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
70
- const { blobs } = blobsData;
71
69
  const { blobKzgCommitments } = block.message.body;
72
70
  const beaconBlockRoot = chain.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(block.message);
73
- // if the blob siddecars have been individually verified then we can skip kzg proof check
74
- // but other checks to match blobs with block data still need to be performed
75
- const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
76
- await validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
77
- const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blobsData);
71
+ const blockData = blockInput.type === BlockInputType.availableData
72
+ ? blockInput.blockData
73
+ : await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
74
+ if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
75
+ const { blobs } = blockData;
76
+ // if the blob sidecars have been individually verified then we can skip kzg proof check
77
+ // but other checks to match blobs with block data still need to be performed
78
+ const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
79
+ await validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
80
+ }
81
+ else if (blockData.fork === ForkName.fulu) {
82
+ const { dataColumns } = blockData;
83
+ const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
84
+ await validateDataColumnsSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, dataColumns, chain.metrics, {
85
+ skipProofsCheck,
86
+ });
87
+ }
88
+ const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blockData);
78
89
  return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: availableBlockInput };
79
90
  }
80
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
+ import { ForkName, NUMBER_OF_COLUMNS } from "@lodestar/params";
2
+ import { ssz } from "@lodestar/types";
1
3
  import { toRootHex } from "@lodestar/utils";
4
+ import { toHex } from "@lodestar/utils";
2
5
  import { BlockInputType } from "./types.js";
3
6
  /**
4
7
  * Persists block input data to DB. This operation must be eventually completed if a block is imported to the fork-choice.
@@ -26,22 +29,68 @@ export async function writeBlockInputToDb(blocksInput) {
26
29
  this.logger.debug("Persist block to hot DB", {
27
30
  slot: block.message.slot,
28
31
  root: blockRootHex,
32
+ inputType: blockInput.type,
29
33
  });
30
34
  if (blockInput.type === BlockInputType.availableData || blockInput.type === BlockInputType.dataPromise) {
31
- const blobSidecars = blockInput.type === BlockInputType.availableData
32
- ? blockInput.blockData.blobs
33
- : // At this point of import blobs are available and can be safely awaited
34
- (await blockInput.cachedData.availabilityPromise).blobs;
35
- // NOTE: Old blobs are pruned on archive
36
- fnPromises.push(this.db.blobSidecars.add({ blockRoot, slot: block.message.slot, blobSidecars }));
37
- this.logger.debug("Persisted blobSidecars to hot DB", {
38
- blobsLen: blobSidecars.length,
39
- slot: block.message.slot,
40
- root: blockRootHex,
41
- });
35
+ const blockData = blockInput.type === BlockInputType.availableData
36
+ ? blockInput.blockData
37
+ : await blockInput.cachedData.availabilityPromise;
38
+ // NOTE: Old data is pruned on archive
39
+ if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
40
+ const blobSidecars = blockData.blobs;
41
+ fnPromises.push(this.db.blobSidecars.add({ blockRoot, slot: block.message.slot, blobSidecars }));
42
+ this.logger.debug("Persisted blobSidecars to hot DB", {
43
+ blobsLen: blobSidecars.length,
44
+ slot: block.message.slot,
45
+ root: blockRootHex,
46
+ });
47
+ }
48
+ else {
49
+ const { custodyConfig } = this;
50
+ const { custodyColumnsIndex, custodyColumns } = custodyConfig;
51
+ const blobsLen = block.message.body.blobKzgCommitments.length;
52
+ let dataColumnsLen;
53
+ let dataColumnsIndex;
54
+ if (blobsLen === 0) {
55
+ dataColumnsLen = 0;
56
+ dataColumnsIndex = new Uint8Array(NUMBER_OF_COLUMNS);
57
+ }
58
+ else {
59
+ dataColumnsLen = custodyColumns.length;
60
+ dataColumnsIndex = custodyColumnsIndex;
61
+ }
62
+ const blockDataColumns = blockData.dataColumns;
63
+ const dataColumnSidecars = blockDataColumns.filter((dataColumnSidecar) => custodyColumns.includes(dataColumnSidecar.index));
64
+ if (dataColumnSidecars.length !== dataColumnsLen) {
65
+ throw Error(`Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`);
66
+ }
67
+ const dataColumnsSize = ssz.fulu.DataColumnSidecar.minSize +
68
+ blobsLen * (ssz.fulu.Cell.fixedSize + ssz.deneb.KZGCommitment.fixedSize + ssz.deneb.KZGProof.fixedSize);
69
+ const slot = block.message.slot;
70
+ const writeData = {
71
+ blockRoot,
72
+ slot,
73
+ dataColumnsLen,
74
+ dataColumnsSize,
75
+ dataColumnsIndex,
76
+ dataColumnSidecars,
77
+ };
78
+ fnPromises.push(this.db.dataColumnSidecars.add(writeData));
79
+ this.logger.debug("Persisted dataColumnSidecars to hot DB", {
80
+ dataColumnsSize,
81
+ dataColumnsLen,
82
+ dataColumnSidecars: dataColumnSidecars.length,
83
+ slot: block.message.slot,
84
+ root: blockRootHex,
85
+ });
86
+ }
42
87
  }
43
88
  }
44
89
  await Promise.all(fnPromises);
90
+ this.logger.debug("Persisted blocksInput to db", {
91
+ blocksInput: blocksInput.length,
92
+ slots: blocksInput.map((blockInput) => blockInput.block.message.slot).join(" "),
93
+ });
45
94
  }
46
95
  /**
47
96
  * Prunes eagerly persisted block inputs only if not known to the fork-choice
@@ -49,15 +98,39 @@ export async function writeBlockInputToDb(blocksInput) {
49
98
  export async function removeEagerlyPersistedBlockInputs(blockInputs) {
50
99
  const blockToRemove = [];
51
100
  const blobsToRemove = [];
101
+ const dataColumnsToRemove = [];
52
102
  for (const blockInput of blockInputs) {
53
103
  const { block, type } = blockInput;
54
- const blockRoot = this.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message);
55
- const blockRootHex = toRootHex(blockRoot);
104
+ const slot = block.message.slot;
105
+ const blockRoot = this.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message);
106
+ const blockRootHex = toHex(blockRoot);
56
107
  if (!this.forkChoice.hasBlockHex(blockRootHex)) {
57
108
  blockToRemove.push(block);
58
109
  if (type === BlockInputType.availableData) {
59
- const blobSidecars = blockInput.blockData.blobs;
60
- blobsToRemove.push({ blockRoot, slot: block.message.slot, blobSidecars });
110
+ const { blockData } = blockInput;
111
+ if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
112
+ const blobSidecars = blockData.blobs;
113
+ blobsToRemove.push({ blockRoot, slot, blobSidecars });
114
+ }
115
+ else {
116
+ const { custodyConfig } = this;
117
+ const { custodyColumnsIndex: dataColumnsIndex, custodyColumns } = custodyConfig;
118
+ const dataColumnsLen = custodyColumns.length;
119
+ const dataColumnSidecars = blockData.dataColumns.filter((dataColumnSidecar) => custodyColumns.includes(dataColumnSidecar.index));
120
+ if (dataColumnSidecars.length !== dataColumnsLen) {
121
+ throw Error(`Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`);
122
+ }
123
+ const blobsLen = block.message.body.blobKzgCommitments.length;
124
+ const dataColumnsSize = ssz.fulu.Cell.fixedSize * blobsLen;
125
+ dataColumnsToRemove.push({
126
+ blockRoot,
127
+ slot,
128
+ dataColumnsLen,
129
+ dataColumnsSize,
130
+ dataColumnsIndex,
131
+ dataColumnSidecars,
132
+ });
133
+ }
61
134
  }
62
135
  }
63
136
  }
@@ -65,6 +138,7 @@ export async function removeEagerlyPersistedBlockInputs(blockInputs) {
65
138
  // TODO: Batch DB operations not with Promise.all but with level db ops
66
139
  this.db.block.batchRemove(blockToRemove),
67
140
  this.db.blobSidecars.batchRemove(blobsToRemove),
141
+ this.db.dataColumnSidecars.batchRemove(dataColumnsToRemove),
68
142
  ]);
69
143
  }
70
144
  //# sourceMappingURL=writeBlockInputToDb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,17 @@ import { CompositeTypeAny, TreeView, Type } from "@chainsafe/ssz";
3
3
  import { BeaconConfig } from "@lodestar/config";
4
4
  import { CheckpointWithHex, IForkChoice, ProtoBlock } from "@lodestar/fork-choice";
5
5
  import { BeaconStateAllForks, CachedBeaconStateAllForks, EpochShuffling, Index2PubkeyCache } from "@lodestar/state-transition";
6
- import { BeaconBlock, BlindedBeaconBlock, Epoch, Root, RootHex, SignedBeaconBlock, Slot, UintNum64, ValidatorIndex, Wei, deneb, phase0 } from "@lodestar/types";
6
+ import { BeaconBlock, BlindedBeaconBlock, Epoch, Root, RootHex, SignedBeaconBlock, Slot, Status, UintNum64, ValidatorIndex, Wei, deneb, fulu } from "@lodestar/types";
7
7
  import { Logger } from "@lodestar/utils";
8
8
  import { ProcessShutdownCallback } from "@lodestar/validator";
9
+ import { PrivateKey } from "@libp2p/interface";
9
10
  import { IBeaconDb } from "../db/index.js";
10
11
  import { IEth1ForBlockProduction } from "../eth1/index.js";
11
12
  import { IExecutionBuilder, IExecutionEngine } from "../execution/index.js";
12
13
  import { Metrics } from "../metrics/index.js";
13
14
  import { BufferPool } from "../util/bufferPool.js";
14
15
  import { IClock } from "../util/clock.js";
16
+ import { CustodyConfig } from "../util/dataColumns.js";
15
17
  import { SerializedCache } from "../util/serializedCache.js";
16
18
  import { ArchiveStore } from "./archiveStore/archiveStore.js";
17
19
  import { CheckpointBalancesCache } from "./balancesCache.js";
@@ -47,6 +49,7 @@ export declare class BeaconChain implements IBeaconChain {
47
49
  readonly executionEngine: IExecutionEngine;
48
50
  readonly executionBuilder?: IExecutionBuilder;
49
51
  readonly config: BeaconConfig;
52
+ readonly custodyConfig: CustodyConfig;
50
53
  readonly logger: Logger;
51
54
  readonly metrics: Metrics | null;
52
55
  readonly validatorMonitor: ValidatorMonitor | null;
@@ -81,7 +84,9 @@ export declare class BeaconChain implements IBeaconChain {
81
84
  readonly checkpointBalancesCache: CheckpointBalancesCache;
82
85
  readonly shufflingCache: ShufflingCache;
83
86
  /** Map keyed by executionPayload.blockHash of the block for those blobs */
84
- readonly producedContentsCache: Map<string, deneb.Contents>;
87
+ readonly producedContentsCache: Map<string, deneb.Contents & {
88
+ cells?: fulu.Cell[][];
89
+ }>;
85
90
  readonly producedBlockRoot: Map<string, import("@chainsafe/ssz").ValueOfFields<{
86
91
  transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
87
92
  parentHash: import("@chainsafe/ssz").ByteVectorType;
@@ -173,7 +178,11 @@ export declare class BeaconChain implements IBeaconChain {
173
178
  protected readonly db: IBeaconDb;
174
179
  private abortController;
175
180
  private processShutdownCallback;
176
- constructor(opts: IChainOptions, { config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }: {
181
+ private _earliestAvailableSlot;
182
+ get earliestAvailableSlot(): Slot;
183
+ set earliestAvailableSlot(slot: Slot);
184
+ constructor(opts: IChainOptions, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }: {
185
+ privateKey: PrivateKey;
177
186
  config: BeaconConfig;
178
187
  db: IBeaconDb;
179
188
  dbName: string;
@@ -271,10 +280,12 @@ export declare class BeaconChain implements IBeaconChain {
271
280
  * kzg_aggregated_proof=compute_proof_from_blobs(blobs),
272
281
  * )
273
282
  */
274
- getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents;
283
+ getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents & {
284
+ cells?: fulu.Cell[][];
285
+ };
275
286
  processBlock(block: BlockInput, opts?: ImportBlockOpts): Promise<void>;
276
287
  processChainSegment(blocks: BlockInput[], opts?: ImportBlockOpts): Promise<void>;
277
- getStatus(): phase0.Status;
288
+ getStatus(): Status;
278
289
  recomputeForkChoiceHead(caller: ForkchoiceCaller): ProtoBlock;
279
290
  predictProposerHead(slot: Slot): ProtoBlock;
280
291
  getProposerHead(slot: Slot): ProtoBlock;
@@ -1,13 +1,15 @@
1
1
  import path from "node:path";
2
2
  import { PubkeyIndexMap } from "@chainsafe/pubkey-index-map";
3
3
  import { ExecutionStatus, UpdateHeadOpt } from "@lodestar/fork-choice";
4
- import { ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra } from "@lodestar/params";
4
+ import { ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra, isForkPostFulu } from "@lodestar/params";
5
5
  import { computeAnchorCheckpoint, computeEndSlotAtEpoch, computeEpochAtSlot, computeStartSlotAtEpoch, createCachedBeaconState, getEffectiveBalanceIncrementsZeroInactive, isCachedBeaconState, processSlots, } from "@lodestar/state-transition";
6
6
  import { isBlindedBeaconBlock, } from "@lodestar/types";
7
7
  import { fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex } from "@lodestar/utils";
8
8
  import { GENESIS_EPOCH, ZERO_HASH } from "../constants/index.js";
9
+ import { computeNodeIdFromPrivateKey } from "../network/subnets/interface.js";
9
10
  import { BufferPool } from "../util/bufferPool.js";
10
11
  import { Clock, ClockEvent } from "../util/clock.js";
12
+ import { CustodyConfig, getValidatorsCustodyRequirement } from "../util/dataColumns.js";
11
13
  import { ensureDir, writeIfNotExist } from "../util/file.js";
12
14
  import { isOptimisticBlock } from "../util/forkChoice.js";
13
15
  import { SerializedCache } from "../util/serializedCache.js";
@@ -50,14 +52,22 @@ import { PersistentCheckpointStateCache } from "./stateCache/persistentCheckpoin
50
52
  */
51
53
  const DEFAULT_MAX_CACHED_PRODUCED_ROOTS = 4;
52
54
  export class BeaconChain {
53
- constructor(opts, { config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }) {
55
+ get earliestAvailableSlot() {
56
+ return this._earliestAvailableSlot;
57
+ }
58
+ set earliestAvailableSlot(slot) {
59
+ if (this._earliestAvailableSlot !== slot) {
60
+ this._earliestAvailableSlot = slot;
61
+ this.emitter.emit(ChainEvent.updateStatus);
62
+ }
63
+ }
64
+ constructor(opts, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }) {
54
65
  this.opPool = new OpPool();
55
66
  // Gossip seen cache
56
67
  this.seenAttesters = new SeenAttesters();
57
68
  this.seenAggregators = new SeenAggregators();
58
69
  this.seenBlockProposers = new SeenBlockProposers();
59
70
  this.seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
60
- this.seenGossipBlockInput = new SeenGossipBlockInput();
61
71
  // Seen cache for liveness checks
62
72
  this.seenBlockAttesters = new SeenBlockAttesters();
63
73
  /** Map keyed by executionPayload.blockHash of the block for those blobs */
@@ -98,6 +108,9 @@ export class BeaconChain {
98
108
  this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
99
109
  this.seenContributionAndProof = new SeenContributionAndProof(metrics);
100
110
  this.seenAttestationDatas = new SeenAttestationDatas(metrics, this.opts?.attDataCacheSlotDistance);
111
+ const nodeId = computeNodeIdFromPrivateKey(privateKey);
112
+ this.custodyConfig = new CustodyConfig(nodeId, config, metrics, this.opts);
113
+ this.seenGossipBlockInput = new SeenGossipBlockInput(this.custodyConfig, this.executionEngine, emitter, clock, logger);
101
114
  this.beaconProposerCache = new BeaconProposerCache(opts);
102
115
  this.checkpointBalancesCache = new CheckpointBalancesCache();
103
116
  this.seenBlockInputCache = new SeenBlockInputCache({
@@ -120,6 +133,7 @@ export class BeaconChain {
120
133
  pubkey2index: new PubkeyIndexMap(),
121
134
  index2pubkey: [],
122
135
  });
136
+ this._earliestAvailableSlot = cachedState.slot;
123
137
  this.shufflingCache = cachedState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
124
138
  {
125
139
  shuffling: cachedState.epochCtx.previousShuffling,
@@ -502,7 +516,7 @@ export class BeaconChain {
502
516
  const head = this.forkChoice.getHead();
503
517
  const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
504
518
  const boundary = this.config.getForkBoundaryAtEpoch(this.clock.currentEpoch);
505
- return {
519
+ const status = {
506
520
  // fork_digest: The node's ForkDigest (compute_fork_digest(current_fork_version, genesis_validators_root)) where
507
521
  // - current_fork_version is the fork version at the node's current epoch defined by the wall-clock time (not necessarily the epoch to which the node is sync)
508
522
  // - genesis_validators_root is the static Root found in state.genesis_validators_root
@@ -515,15 +529,19 @@ export class BeaconChain {
515
529
  headRoot: fromHex(head.blockRoot),
516
530
  headSlot: head.slot,
517
531
  };
532
+ if (isForkPostFulu(boundary.fork)) {
533
+ status.earliestAvailableSlot = this._earliestAvailableSlot;
534
+ }
535
+ return status;
518
536
  }
519
537
  recomputeForkChoiceHead(caller) {
520
538
  this.metrics?.forkChoice.requests.inc();
521
539
  const timer = this.metrics?.forkChoice.findHead.startTimer({ caller });
522
540
  try {
523
- return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetCanonicialHead }).head;
541
+ return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetCanonicalHead }).head;
524
542
  }
525
543
  catch (e) {
526
- this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetCanonicialHead });
544
+ this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetCanonicalHead });
527
545
  throw e;
528
546
  }
529
547
  finally {
@@ -533,8 +551,9 @@ export class BeaconChain {
533
551
  predictProposerHead(slot) {
534
552
  this.metrics?.forkChoice.requests.inc();
535
553
  const timer = this.metrics?.forkChoice.findHead.startTimer({ caller: FindHeadFnName.predictProposerHead });
554
+ const secFromSlot = this.clock.secFromSlot(slot);
536
555
  try {
537
- return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetPredictedProposerHead, slot }).head;
556
+ return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetPredictedProposerHead, secFromSlot, slot }).head;
538
557
  }
539
558
  catch (e) {
540
559
  this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetPredictedProposerHead });
@@ -750,9 +769,10 @@ export class BeaconChain {
750
769
  metrics.forkChoice.balancesLength.set(forkChoiceMetrics.balancesLength);
751
770
  metrics.forkChoice.nodes.set(forkChoiceMetrics.nodes);
752
771
  metrics.forkChoice.indices.set(forkChoiceMetrics.indices);
753
- const fork = this.config.getForkName(this.clock.currentSlot);
772
+ const headState = this.getHeadState();
773
+ const fork = this.config.getForkName(headState.slot);
754
774
  if (isForkPostElectra(fork)) {
755
- const headStateElectra = this.getHeadState();
775
+ const headStateElectra = headState;
756
776
  metrics.pendingDeposits.set(headStateElectra.pendingDeposits.length);
757
777
  metrics.pendingPartialWithdrawals.set(headStateElectra.pendingPartialWithdrawals.length);
758
778
  metrics.pendingConsolidations.set(headStateElectra.pendingConsolidations.length);
@@ -829,6 +849,19 @@ export class BeaconChain {
829
849
  }
830
850
  if (headState) {
831
851
  this.opPool.pruneAll(headBlock, headState);
852
+ // Disable dynamic custody updates for supernodes since they must maintain custody
853
+ // of all custody groups regardless of validator effective balances
854
+ if (!this.opts.supernode) {
855
+ // Update custody requirement based on finalized state
856
+ const validatorIndices = this.beaconProposerCache.getValidatorIndices();
857
+ const targetCustodyGroupCount = getValidatorsCustodyRequirement(headState, validatorIndices, this.config);
858
+ // only update if target is increased
859
+ if (targetCustodyGroupCount > this.custodyConfig.targetCustodyGroupCount) {
860
+ this.custodyConfig.updateTargetCustodyGroupCount(targetCustodyGroupCount);
861
+ this.logger.verbose(`Updated targetCustodyGroupCount=${this.custodyConfig.targetCustodyGroupCount}`);
862
+ this.emitter.emit(ChainEvent.updateTargetGroupCount, this.custodyConfig.targetCustodyGroupCount);
863
+ }
864
+ }
832
865
  }
833
866
  if (headState === null) {
834
867
  this.logger.verbose("Head state is null");