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

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 (243) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +136 -30
  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/api/impl/validator/index.js +11 -5
  7. package/lib/api/impl/validator/index.js.map +1 -1
  8. package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
  9. package/lib/chain/archiveStore/archiveStore.js +2 -2
  10. package/lib/chain/archiveStore/interface.d.ts +1 -1
  11. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
  12. package/lib/chain/archiveStore/utils/archiveBlocks.js +91 -23
  13. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  14. package/lib/chain/beaconProposerCache.d.ts +1 -0
  15. package/lib/chain/beaconProposerCache.js +3 -0
  16. package/lib/chain/beaconProposerCache.js.map +1 -1
  17. package/lib/chain/blocks/importBlock.js +3 -2
  18. package/lib/chain/blocks/importBlock.js.map +1 -1
  19. package/lib/chain/blocks/types.d.ts +66 -23
  20. package/lib/chain/blocks/types.js +39 -5
  21. package/lib/chain/blocks/types.js.map +1 -1
  22. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  23. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  24. package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
  25. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  26. package/lib/chain/chain.d.ts +17 -28
  27. package/lib/chain/chain.js +71 -6
  28. package/lib/chain/chain.js.map +1 -1
  29. package/lib/chain/emitter.d.ts +18 -2
  30. package/lib/chain/emitter.js +13 -0
  31. package/lib/chain/emitter.js.map +1 -1
  32. package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
  33. package/lib/chain/errors/dataColumnSidecarError.js +21 -0
  34. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  35. package/lib/chain/errors/index.d.ts +1 -0
  36. package/lib/chain/errors/index.js +1 -0
  37. package/lib/chain/errors/index.js.map +1 -1
  38. package/lib/chain/interface.d.ts +10 -4
  39. package/lib/chain/interface.js.map +1 -1
  40. package/lib/chain/options.d.ts +4 -1
  41. package/lib/chain/options.js +1 -0
  42. package/lib/chain/options.js.map +1 -1
  43. package/lib/chain/prepareNextSlot.js +2 -1
  44. package/lib/chain/prepareNextSlot.js.map +1 -1
  45. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  46. package/lib/chain/produceBlock/produceBlockBody.js +9 -4
  47. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  48. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
  49. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +28 -2
  50. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  51. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
  52. package/lib/chain/seenCache/seenGossipBlockInput.js +321 -53
  53. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  54. package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
  55. package/lib/chain/validation/dataColumnSidecar.js +248 -0
  56. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  57. package/lib/db/beacon.d.ts +3 -1
  58. package/lib/db/beacon.js +3 -1
  59. package/lib/db/beacon.js.map +1 -1
  60. package/lib/db/buckets.d.ts +3 -1
  61. package/lib/db/buckets.js +2 -0
  62. package/lib/db/buckets.js.map +1 -1
  63. package/lib/db/interface.d.ts +3 -1
  64. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  65. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  66. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  67. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  68. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  69. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  70. package/lib/db/repositories/index.d.ts +2 -0
  71. package/lib/db/repositories/index.js +2 -0
  72. package/lib/db/repositories/index.js.map +1 -1
  73. package/lib/execution/builder/http.d.ts +18 -2
  74. package/lib/execution/builder/http.js +27 -8
  75. package/lib/execution/builder/http.js.map +1 -1
  76. package/lib/execution/builder/interface.d.ts +3 -2
  77. package/lib/execution/engine/http.d.ts +6 -3
  78. package/lib/execution/engine/http.js +56 -42
  79. package/lib/execution/engine/http.js.map +1 -1
  80. package/lib/execution/engine/interface.d.ts +4 -2
  81. package/lib/execution/engine/interface.js +1 -1
  82. package/lib/execution/engine/interface.js.map +1 -1
  83. package/lib/execution/engine/mock.d.ts +1 -0
  84. package/lib/execution/engine/mock.js +5 -0
  85. package/lib/execution/engine/mock.js.map +1 -1
  86. package/lib/execution/engine/types.d.ts +10 -0
  87. package/lib/execution/engine/types.js +6 -0
  88. package/lib/execution/engine/types.js.map +1 -1
  89. package/lib/metrics/metrics/beacon.d.ts +14 -0
  90. package/lib/metrics/metrics/beacon.js +57 -0
  91. package/lib/metrics/metrics/beacon.js.map +1 -1
  92. package/lib/metrics/metrics/lodestar.d.ts +24 -1
  93. package/lib/metrics/metrics/lodestar.js +45 -0
  94. package/lib/metrics/metrics/lodestar.js.map +1 -1
  95. package/lib/network/core/metrics.d.ts +10 -3
  96. package/lib/network/core/metrics.js +22 -4
  97. package/lib/network/core/metrics.js.map +1 -1
  98. package/lib/network/core/networkCore.d.ts +15 -4
  99. package/lib/network/core/networkCore.js +73 -23
  100. package/lib/network/core/networkCore.js.map +1 -1
  101. package/lib/network/core/networkCoreWorker.js +2 -0
  102. package/lib/network/core/networkCoreWorker.js.map +1 -1
  103. package/lib/network/core/networkCoreWorkerHandler.d.ts +5 -3
  104. package/lib/network/core/networkCoreWorkerHandler.js +6 -1
  105. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  106. package/lib/network/core/types.d.ts +7 -4
  107. package/lib/network/events.d.ts +4 -2
  108. package/lib/network/events.js.map +1 -1
  109. package/lib/network/gossip/gossipsub.d.ts +2 -2
  110. package/lib/network/gossip/gossipsub.js +8 -6
  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/scoringParameters.d.ts +6 -2
  116. package/lib/network/gossip/scoringParameters.js.map +1 -1
  117. package/lib/network/gossip/topic.d.ts +1077 -1056
  118. package/lib/network/gossip/topic.js +29 -1
  119. package/lib/network/gossip/topic.js.map +1 -1
  120. package/lib/network/interface.d.ts +9 -1
  121. package/lib/network/metadata.d.ts +9 -5
  122. package/lib/network/metadata.js +26 -5
  123. package/lib/network/metadata.js.map +1 -1
  124. package/lib/network/network.d.ts +12 -2
  125. package/lib/network/network.js +73 -11
  126. package/lib/network/network.js.map +1 -1
  127. package/lib/network/networkConfig.d.ts +12 -0
  128. package/lib/network/networkConfig.js +2 -0
  129. package/lib/network/networkConfig.js.map +1 -0
  130. package/lib/network/options.d.ts +1 -0
  131. package/lib/network/options.js +5 -0
  132. package/lib/network/options.js.map +1 -1
  133. package/lib/network/peers/discover.d.ts +8 -3
  134. package/lib/network/peers/discover.js +99 -14
  135. package/lib/network/peers/discover.js.map +1 -1
  136. package/lib/network/peers/peerManager.d.ts +10 -4
  137. package/lib/network/peers/peerManager.js +105 -19
  138. package/lib/network/peers/peerManager.js.map +1 -1
  139. package/lib/network/peers/peersData.d.ts +17 -3
  140. package/lib/network/peers/peersData.js.map +1 -1
  141. package/lib/network/peers/score/interface.d.ts +1 -1
  142. package/lib/network/peers/score/score.d.ts +2 -2
  143. package/lib/network/peers/score/score.js +4 -1
  144. package/lib/network/peers/score/score.js.map +1 -1
  145. package/lib/network/peers/score/store.d.ts +3 -1
  146. package/lib/network/peers/score/store.js +6 -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 +156 -10
  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 +36 -14
  164. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  165. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +24 -4
  166. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +259 -20
  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 +92 -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 +50 -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/protocols.d.ts +4 -0
  182. package/lib/network/reqresp/protocols.js +20 -0
  183. package/lib/network/reqresp/protocols.js.map +1 -1
  184. package/lib/network/reqresp/rateLimit.js +11 -1
  185. package/lib/network/reqresp/rateLimit.js.map +1 -1
  186. package/lib/network/reqresp/score.js +3 -0
  187. package/lib/network/reqresp/score.js.map +1 -1
  188. package/lib/network/reqresp/types.d.ts +11 -4
  189. package/lib/network/reqresp/types.js +12 -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 +18 -3
  201. package/lib/sync/constants.js +21 -3
  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 +17 -2
  207. package/lib/sync/range/batch.js +39 -7
  208. package/lib/sync/range/batch.js.map +1 -1
  209. package/lib/sync/range/chain.d.ts +15 -1
  210. package/lib/sync/range/chain.js +124 -33
  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 +19 -5
  219. package/lib/sync/range/utils/peerBalancer.js +104 -10
  220. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  221. package/lib/sync/sync.js +1 -1
  222. package/lib/sync/sync.js.map +1 -1
  223. package/lib/sync/unknownBlock.d.ts +8 -1
  224. package/lib/sync/unknownBlock.js +223 -67
  225. package/lib/sync/unknownBlock.js.map +1 -1
  226. package/lib/sync/utils/remoteSyncType.d.ts +4 -4
  227. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  228. package/lib/util/blobs.d.ts +23 -1
  229. package/lib/util/blobs.js +156 -1
  230. package/lib/util/blobs.js.map +1 -1
  231. package/lib/util/dataColumns.d.ts +135 -0
  232. package/lib/util/dataColumns.js +353 -0
  233. package/lib/util/dataColumns.js.map +1 -0
  234. package/lib/util/metadata.d.ts +5 -0
  235. package/lib/util/metadata.js +10 -0
  236. package/lib/util/metadata.js.map +1 -1
  237. package/lib/util/sszBytes.d.ts +1 -0
  238. package/lib/util/sszBytes.js +17 -0
  239. package/lib/util/sszBytes.js.map +1 -1
  240. package/package.json +16 -16
  241. package/lib/network/reqresp/handlers/status.d.ts +0 -4
  242. package/lib/network/reqresp/handlers/status.js +0 -11
  243. package/lib/network/reqresp/handlers/status.js.map +0 -1
@@ -1,8 +1,10 @@
1
+ import { isForkPostDeneb, isForkPostFulu } 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 (isForkPostFulu(blockData.fork)) {
75
+ const { dataColumns } = blockData;
76
+ const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
77
+ await validateDataColumnsSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, dataColumns, chain.metrics, {
78
+ skipProofsCheck,
79
+ });
80
+ }
81
+ else if (isForkPostDeneb(blockData.fork)) {
82
+ const { blobs } = blockData;
83
+ // if the blob sidecars have been individually verified then we can skip kzg proof check
84
+ // but other checks to match blobs with block data still need to be performed
85
+ const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
86
+ await validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
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, isForkPostDeneb, isForkPostFulu } 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 (isForkPostFulu(blockData.fork)) {
40
+ const { custodyConfig } = this;
41
+ const { custodyColumnsIndex, custodyColumns } = custodyConfig;
42
+ const blobsLen = block.message.body.blobKzgCommitments.length;
43
+ let dataColumnsLen;
44
+ let dataColumnsIndex;
45
+ if (blobsLen === 0) {
46
+ dataColumnsLen = 0;
47
+ dataColumnsIndex = new Uint8Array(NUMBER_OF_COLUMNS);
48
+ }
49
+ else {
50
+ dataColumnsLen = custodyColumns.length;
51
+ dataColumnsIndex = custodyColumnsIndex;
52
+ }
53
+ const blockDataColumns = blockData.dataColumns;
54
+ const dataColumnSidecars = blockDataColumns.filter((dataColumnSidecar) => custodyColumns.includes(dataColumnSidecar.index));
55
+ if (dataColumnSidecars.length !== dataColumnsLen) {
56
+ throw Error(`Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`);
57
+ }
58
+ const dataColumnsSize = ssz.fulu.DataColumnSidecar.minSize +
59
+ blobsLen * (ssz.fulu.Cell.fixedSize + ssz.deneb.KZGCommitment.fixedSize + ssz.deneb.KZGProof.fixedSize);
60
+ const slot = block.message.slot;
61
+ const writeData = {
62
+ blockRoot,
63
+ slot,
64
+ dataColumnsLen,
65
+ dataColumnsSize,
66
+ dataColumnsIndex,
67
+ dataColumnSidecars,
68
+ };
69
+ fnPromises.push(this.db.dataColumnSidecars.add(writeData));
70
+ this.logger.debug("Persisted dataColumnSidecars to hot DB", {
71
+ dataColumnsSize,
72
+ dataColumnsLen,
73
+ dataColumnSidecars: dataColumnSidecars.length,
74
+ slot: block.message.slot,
75
+ root: blockRootHex,
76
+ });
77
+ }
78
+ else if (isForkPostDeneb(blockData.fork)) {
79
+ const blobSidecars = blockData.blobs;
80
+ fnPromises.push(this.db.blobSidecars.add({ blockRoot, slot: block.message.slot, blobSidecars }));
81
+ this.logger.debug("Persisted blobSidecars to hot DB", {
82
+ blobsLen: blobSidecars.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;
@@ -141,29 +146,6 @@ export declare class BeaconChain implements IBeaconChain {
141
146
  extraData: import("@chainsafe/ssz").ByteListType;
142
147
  baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
143
148
  blockHash: import("@chainsafe/ssz").ByteVectorType;
144
- }> | import("@chainsafe/ssz").ValueOfFields<{
145
- blobGasUsed: import("@chainsafe/ssz").UintBigintType;
146
- excessBlobGas: import("@chainsafe/ssz").UintBigintType;
147
- withdrawals: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
148
- index: import("@chainsafe/ssz").UintNumberType;
149
- validatorIndex: import("@chainsafe/ssz").UintNumberType;
150
- address: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
151
- amount: import("@chainsafe/ssz").UintBigintType;
152
- }>>;
153
- transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
154
- parentHash: import("@chainsafe/ssz").ByteVectorType;
155
- feeRecipient: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
156
- stateRoot: import("@chainsafe/ssz").ByteVectorType;
157
- receiptsRoot: import("@chainsafe/ssz").ByteVectorType;
158
- logsBloom: import("@chainsafe/ssz").ByteVectorType;
159
- prevRandao: import("@chainsafe/ssz").ByteVectorType;
160
- blockNumber: import("@chainsafe/ssz").UintNumberType;
161
- gasLimit: import("@chainsafe/ssz").UintNumberType;
162
- gasUsed: import("@chainsafe/ssz").UintNumberType;
163
- timestamp: import("@chainsafe/ssz").UintNumberType;
164
- extraData: import("@chainsafe/ssz").ByteListType;
165
- baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
166
- blockHash: import("@chainsafe/ssz").ByteVectorType;
167
149
  }> | null>;
168
150
  readonly producedBlindedBlockRoot: Set<string>;
169
151
  readonly blacklistedBlocks: Map<RootHex, Slot | null>;
@@ -173,7 +155,11 @@ export declare class BeaconChain implements IBeaconChain {
173
155
  protected readonly db: IBeaconDb;
174
156
  private abortController;
175
157
  private processShutdownCallback;
176
- constructor(opts: IChainOptions, { config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }: {
158
+ private _earliestAvailableSlot;
159
+ get earliestAvailableSlot(): Slot;
160
+ set earliestAvailableSlot(slot: Slot);
161
+ constructor(opts: IChainOptions, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }: {
162
+ privateKey: PrivateKey;
177
163
  config: BeaconConfig;
178
164
  db: IBeaconDb;
179
165
  dbName: string;
@@ -271,10 +257,12 @@ export declare class BeaconChain implements IBeaconChain {
271
257
  * kzg_aggregated_proof=compute_proof_from_blobs(blobs),
272
258
  * )
273
259
  */
274
- getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents;
260
+ getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents & {
261
+ cells?: fulu.Cell[][];
262
+ };
275
263
  processBlock(block: BlockInput, opts?: ImportBlockOpts): Promise<void>;
276
264
  processChainSegment(blocks: BlockInput[], opts?: ImportBlockOpts): Promise<void>;
277
- getStatus(): phase0.Status;
265
+ getStatus(): Status;
278
266
  recomputeForkChoiceHead(caller: ForkchoiceCaller): ProtoBlock;
279
267
  predictProposerHead(slot: Slot): ProtoBlock;
280
268
  getProposerHead(slot: Slot): ProtoBlock;
@@ -322,6 +310,7 @@ export declare class BeaconChain implements IBeaconChain {
322
310
  private onForkChoiceJustified;
323
311
  private onForkChoiceFinalized;
324
312
  updateBeaconProposerData(epoch: Epoch, proposers: ProposerPreparationData[]): Promise<void>;
313
+ private updateValidatorsCustodyRequirement;
325
314
  updateBuilderStatus(clockSlot: Slot): void;
326
315
  getBlockRewards(block: BeaconBlock | BlindedBeaconBlock): Promise<BlockRewards>;
327
316
  getAttestationsRewards(epoch: Epoch, validatorIds?: (ValidatorIndex | string)[]): Promise<{
@@ -1,13 +1,17 @@
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, NUMBER_OF_CUSTODY_GROUPS, SLOTS_PER_EPOCH, isForkPostElectra } 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
+ import { getEffectiveBalancesFromStateBytes } from "@lodestar/state-transition";
8
9
  import { GENESIS_EPOCH, ZERO_HASH } from "../constants/index.js";
10
+ import { BuilderStatus } from "../execution/builder/http.js";
11
+ import { computeNodeIdFromPrivateKey } from "../network/subnets/interface.js";
9
12
  import { BufferPool } from "../util/bufferPool.js";
10
13
  import { Clock, ClockEvent } from "../util/clock.js";
14
+ import { CustodyConfig, getValidatorsCustodyRequirement } from "../util/dataColumns.js";
11
15
  import { ensureDir, writeIfNotExist } from "../util/file.js";
12
16
  import { isOptimisticBlock } from "../util/forkChoice.js";
13
17
  import { SerializedCache } from "../util/serializedCache.js";
@@ -50,14 +54,22 @@ import { PersistentCheckpointStateCache } from "./stateCache/persistentCheckpoin
50
54
  */
51
55
  const DEFAULT_MAX_CACHED_PRODUCED_ROOTS = 4;
52
56
  export class BeaconChain {
53
- constructor(opts, { config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }) {
57
+ get earliestAvailableSlot() {
58
+ return this._earliestAvailableSlot;
59
+ }
60
+ set earliestAvailableSlot(slot) {
61
+ if (this._earliestAvailableSlot !== slot) {
62
+ this._earliestAvailableSlot = slot;
63
+ this.emitter.emit(ChainEvent.updateStatus);
64
+ }
65
+ }
66
+ constructor(opts, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }) {
54
67
  this.opPool = new OpPool();
55
68
  // Gossip seen cache
56
69
  this.seenAttesters = new SeenAttesters();
57
70
  this.seenAggregators = new SeenAggregators();
58
71
  this.seenBlockProposers = new SeenBlockProposers();
59
72
  this.seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
60
- this.seenGossipBlockInput = new SeenGossipBlockInput();
61
73
  // Seen cache for liveness checks
62
74
  this.seenBlockAttesters = new SeenBlockAttesters();
63
75
  /** Map keyed by executionPayload.blockHash of the block for those blobs */
@@ -98,6 +110,15 @@ export class BeaconChain {
98
110
  this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
99
111
  this.seenContributionAndProof = new SeenContributionAndProof(metrics);
100
112
  this.seenAttestationDatas = new SeenAttestationDatas(metrics, this.opts?.attDataCacheSlotDistance);
113
+ const nodeId = computeNodeIdFromPrivateKey(privateKey);
114
+ const initialCustodyGroupCount = opts.initialCustodyGroupCount ?? (opts.supernode ? NUMBER_OF_CUSTODY_GROUPS : config.CUSTODY_REQUIREMENT);
115
+ this.metrics?.peerDas.targetCustodyGroupCount.set(initialCustodyGroupCount);
116
+ this.custodyConfig = new CustodyConfig({
117
+ nodeId,
118
+ config,
119
+ initialCustodyGroupCount,
120
+ });
121
+ this.seenGossipBlockInput = new SeenGossipBlockInput(this.custodyConfig, this.executionEngine, emitter, clock, logger);
101
122
  this.beaconProposerCache = new BeaconProposerCache(opts);
102
123
  this.checkpointBalancesCache = new CheckpointBalancesCache();
103
124
  this.seenBlockInputCache = new SeenBlockInputCache({
@@ -120,6 +141,7 @@ export class BeaconChain {
120
141
  pubkey2index: new PubkeyIndexMap(),
121
142
  index2pubkey: [],
122
143
  });
144
+ this._earliestAvailableSlot = cachedState.slot;
123
145
  this.shufflingCache = cachedState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
124
146
  {
125
147
  shuffling: cachedState.epochCtx.previousShuffling,
@@ -514,6 +536,7 @@ export class BeaconChain {
514
536
  // TODO: PERFORMANCE: Memoize to prevent re-computing every time
515
537
  headRoot: fromHex(head.blockRoot),
516
538
  headSlot: head.slot,
539
+ earliestAvailableSlot: this._earliestAvailableSlot,
517
540
  };
518
541
  }
519
542
  recomputeForkChoiceHead(caller) {
@@ -822,6 +845,8 @@ export class BeaconChain {
822
845
  async onForkChoiceFinalized(cp) {
823
846
  this.logger.verbose("Fork choice finalized", { epoch: cp.epoch, root: cp.rootHex });
824
847
  this.seenBlockProposers.prune(computeStartSlotAtEpoch(cp.epoch));
848
+ // Update validator custody to account for effective balance changes
849
+ await this.updateValidatorsCustodyRequirement(cp);
825
850
  // TODO: Improve using regen here
826
851
  const { blockRoot, stateRoot, slot } = this.forkChoice.getHead();
827
852
  const headState = this.regen.getStateSync(stateRoot);
@@ -837,9 +862,49 @@ export class BeaconChain {
837
862
  }
838
863
  }
839
864
  async updateBeaconProposerData(epoch, proposers) {
865
+ const previousValidatorCount = this.beaconProposerCache.getValidatorIndices().length;
840
866
  for (const proposer of proposers) {
841
867
  this.beaconProposerCache.add(epoch, proposer);
842
868
  }
869
+ const newValidatorCount = this.beaconProposerCache.getValidatorIndices().length;
870
+ // Only update validator custody if we discovered new validators
871
+ if (newValidatorCount > previousValidatorCount) {
872
+ const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
873
+ await this.updateValidatorsCustodyRequirement(finalizedCheckpoint);
874
+ }
875
+ }
876
+ async updateValidatorsCustodyRequirement(finalizedCheckpoint) {
877
+ if (this.opts.supernode) {
878
+ // Disable dynamic custody updates for supernodes since they must maintain custody
879
+ // of all custody groups regardless of validator effective balances
880
+ return;
881
+ }
882
+ // Update custody requirement based on finalized state
883
+ const stateOrBytes = (await this.getStateOrBytesByCheckpoint(finalizedCheckpoint))?.state;
884
+ if (!stateOrBytes) {
885
+ throw Error(`No finalized state for epoch ${finalizedCheckpoint.epoch} and root ${finalizedCheckpoint.rootHex} to update target custody group count`);
886
+ }
887
+ // Validators attached to the node
888
+ const validatorIndices = this.beaconProposerCache.getValidatorIndices();
889
+ let effectiveBalances;
890
+ if (stateOrBytes instanceof Uint8Array) {
891
+ effectiveBalances = getEffectiveBalancesFromStateBytes(this.config, stateOrBytes, validatorIndices);
892
+ }
893
+ else {
894
+ effectiveBalances = validatorIndices.map((index) => stateOrBytes.validators.get(index).effectiveBalance);
895
+ }
896
+ const targetCustodyGroupCount = getValidatorsCustodyRequirement(this.config, effectiveBalances);
897
+ // Only update if target is increased
898
+ if (targetCustodyGroupCount > this.custodyConfig.targetCustodyGroupCount) {
899
+ this.custodyConfig.updateTargetCustodyGroupCount(targetCustodyGroupCount);
900
+ this.metrics?.peerDas.targetCustodyGroupCount.set(targetCustodyGroupCount);
901
+ this.logger.verbose("Updated target custody group count", {
902
+ finalizedEpoch: finalizedCheckpoint.epoch,
903
+ validatorCount: validatorIndices.length,
904
+ targetCustodyGroupCount,
905
+ });
906
+ this.emitter.emit(ChainEvent.updateTargetCustodyGroupCount, targetCustodyGroupCount);
907
+ }
843
908
  }
844
909
  updateBuilderStatus(clockSlot) {
845
910
  const executionBuilder = this.executionBuilder;
@@ -848,7 +913,7 @@ export class BeaconChain {
848
913
  const slotsPresent = this.forkChoice.getSlotsPresent(clockSlot - faultInspectionWindow);
849
914
  const previousStatus = executionBuilder.status;
850
915
  const shouldEnable = slotsPresent >= Math.min(faultInspectionWindow - allowedFaults, clockSlot);
851
- executionBuilder.updateStatus(shouldEnable);
916
+ executionBuilder.updateStatus(shouldEnable ? BuilderStatus.enabled : BuilderStatus.circuitBreaker);
852
917
  // The status changed we should log
853
918
  const status = executionBuilder.status;
854
919
  const builderLog = {
@@ -858,10 +923,10 @@ export class BeaconChain {
858
923
  allowedFaults,
859
924
  };
860
925
  if (status !== previousStatus) {
861
- this.logger.info("Execution builder status updated", builderLog);
926
+ this.logger.info("External builder status updated", builderLog);
862
927
  }
863
928
  else {
864
- this.logger.verbose("Execution builder status", builderLog);
929
+ this.logger.verbose("External builder status", builderLog);
865
930
  }
866
931
  }
867
932
  }