@lodestar/beacon-node 1.29.0-dev.f87bd54721 → 1.29.0-peerDAS.1f339ea5e2

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 (245) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +40 -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/archiveStore.d.ts +1 -1
  10. package/lib/chain/archiveStore/archiveStore.js +2 -2
  11. package/lib/chain/archiveStore/historicalState/worker.js +0 -12
  12. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  13. package/lib/chain/archiveStore/interface.d.ts +1 -1
  14. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
  15. package/lib/chain/archiveStore/utils/archiveBlocks.js +88 -23
  16. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  17. package/lib/chain/beaconProposerCache.d.ts +1 -0
  18. package/lib/chain/beaconProposerCache.js +3 -0
  19. package/lib/chain/beaconProposerCache.js.map +1 -1
  20. package/lib/chain/blocks/importBlock.js +56 -14
  21. package/lib/chain/blocks/importBlock.js.map +1 -1
  22. package/lib/chain/blocks/types.d.ts +67 -26
  23. package/lib/chain/blocks/types.js +39 -6
  24. package/lib/chain/blocks/types.js.map +1 -1
  25. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  26. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  27. package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
  28. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  29. package/lib/chain/chain.d.ts +35 -4
  30. package/lib/chain/chain.js +25 -7
  31. package/lib/chain/chain.js.map +1 -1
  32. package/lib/chain/emitter.d.ts +18 -2
  33. package/lib/chain/emitter.js +13 -0
  34. package/lib/chain/emitter.js.map +1 -1
  35. package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
  36. package/lib/chain/errors/dataColumnSidecarError.js +21 -0
  37. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  38. package/lib/chain/errors/index.d.ts +1 -0
  39. package/lib/chain/errors/index.js +1 -0
  40. package/lib/chain/errors/index.js.map +1 -1
  41. package/lib/chain/interface.d.ts +9 -3
  42. package/lib/chain/interface.js.map +1 -1
  43. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -4
  44. package/lib/chain/opPools/aggregatedAttestationPool.js +48 -76
  45. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  46. package/lib/chain/opPools/attestationPool.d.ts +2 -4
  47. package/lib/chain/opPools/attestationPool.js +3 -4
  48. package/lib/chain/opPools/attestationPool.js.map +1 -1
  49. package/lib/chain/options.d.ts +4 -1
  50. package/lib/chain/options.js +4 -0
  51. package/lib/chain/options.js.map +1 -1
  52. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
  53. package/lib/chain/produceBlock/produceBlockBody.js +11 -2
  54. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  55. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
  56. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +31 -2
  57. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  58. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +61 -18
  59. package/lib/chain/seenCache/seenGossipBlockInput.js +254 -53
  60. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  61. package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
  62. package/lib/chain/validation/dataColumnSidecar.js +245 -0
  63. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  64. package/lib/db/beacon.d.ts +3 -1
  65. package/lib/db/beacon.js +3 -1
  66. package/lib/db/beacon.js.map +1 -1
  67. package/lib/db/buckets.d.ts +3 -1
  68. package/lib/db/buckets.js +2 -0
  69. package/lib/db/buckets.js.map +1 -1
  70. package/lib/db/interface.d.ts +3 -1
  71. package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
  72. package/lib/db/repositories/dataColumnSidecars.js +40 -0
  73. package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
  74. package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
  75. package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
  76. package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
  77. package/lib/db/repositories/index.d.ts +2 -0
  78. package/lib/db/repositories/index.js +2 -0
  79. package/lib/db/repositories/index.js.map +1 -1
  80. package/lib/execution/engine/http.d.ts +5 -3
  81. package/lib/execution/engine/http.js +68 -31
  82. package/lib/execution/engine/http.js.map +1 -1
  83. package/lib/execution/engine/interface.d.ts +4 -2
  84. package/lib/execution/engine/interface.js +1 -1
  85. package/lib/execution/engine/interface.js.map +1 -1
  86. package/lib/execution/engine/mock.d.ts +1 -0
  87. package/lib/execution/engine/mock.js +5 -0
  88. package/lib/execution/engine/mock.js.map +1 -1
  89. package/lib/execution/engine/types.d.ts +10 -0
  90. package/lib/execution/engine/types.js +6 -0
  91. package/lib/execution/engine/types.js.map +1 -1
  92. package/lib/metrics/metrics/beacon.d.ts +8 -0
  93. package/lib/metrics/metrics/beacon.js +27 -0
  94. package/lib/metrics/metrics/beacon.js.map +1 -1
  95. package/lib/metrics/metrics/lodestar.d.ts +10 -21
  96. package/lib/metrics/metrics/lodestar.js +28 -64
  97. package/lib/metrics/metrics/lodestar.js.map +1 -1
  98. package/lib/metrics/validatorMonitor.js +1 -1
  99. package/lib/metrics/validatorMonitor.js.map +1 -1
  100. package/lib/network/core/metrics.d.ts +13 -3
  101. package/lib/network/core/metrics.js +23 -0
  102. package/lib/network/core/metrics.js.map +1 -1
  103. package/lib/network/core/networkCore.d.ts +9 -3
  104. package/lib/network/core/networkCore.js +23 -17
  105. package/lib/network/core/networkCore.js.map +1 -1
  106. package/lib/network/core/networkCoreWorker.js +5 -5
  107. package/lib/network/core/networkCoreWorker.js.map +1 -1
  108. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -2
  109. package/lib/network/core/networkCoreWorkerHandler.js +10 -3
  110. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  111. package/lib/network/core/types.d.ts +5 -1
  112. package/lib/network/discv5/index.d.ts +3 -2
  113. package/lib/network/discv5/index.js +5 -4
  114. package/lib/network/discv5/index.js.map +1 -1
  115. package/lib/network/discv5/types.d.ts +1 -1
  116. package/lib/network/discv5/worker.js +6 -7
  117. package/lib/network/discv5/worker.js.map +1 -1
  118. package/lib/network/events.d.ts +3 -1
  119. package/lib/network/events.js.map +1 -1
  120. package/lib/network/gossip/gossipsub.js +0 -4
  121. package/lib/network/gossip/gossipsub.js.map +1 -1
  122. package/lib/network/gossip/interface.d.ts +8 -1
  123. package/lib/network/gossip/interface.js +1 -0
  124. package/lib/network/gossip/interface.js.map +1 -1
  125. package/lib/network/gossip/topic.d.ts +1191 -1289
  126. package/lib/network/gossip/topic.js +20 -1
  127. package/lib/network/gossip/topic.js.map +1 -1
  128. package/lib/network/interface.d.ts +17 -4
  129. package/lib/network/libp2p/index.d.ts +2 -2
  130. package/lib/network/libp2p/index.js +9 -9
  131. package/lib/network/libp2p/index.js.map +1 -1
  132. package/lib/network/metadata.d.ts +10 -6
  133. package/lib/network/metadata.js +23 -4
  134. package/lib/network/metadata.js.map +1 -1
  135. package/lib/network/network.d.ts +20 -6
  136. package/lib/network/network.js +64 -11
  137. package/lib/network/network.js.map +1 -1
  138. package/lib/network/networkConfig.d.ts +23 -0
  139. package/lib/network/networkConfig.js +32 -0
  140. package/lib/network/networkConfig.js.map +1 -0
  141. package/lib/network/options.js +2 -0
  142. package/lib/network/options.js.map +1 -1
  143. package/lib/network/peers/datastore.d.ts +1 -2
  144. package/lib/network/peers/datastore.js +1 -1
  145. package/lib/network/peers/datastore.js.map +1 -1
  146. package/lib/network/peers/discover.d.ts +19 -7
  147. package/lib/network/peers/discover.js +148 -18
  148. package/lib/network/peers/discover.js.map +1 -1
  149. package/lib/network/peers/peerManager.d.ts +11 -9
  150. package/lib/network/peers/peerManager.js +96 -10
  151. package/lib/network/peers/peerManager.js.map +1 -1
  152. package/lib/network/peers/peersData.d.ts +8 -2
  153. package/lib/network/peers/peersData.js.map +1 -1
  154. package/lib/network/peers/score/interface.d.ts +1 -1
  155. package/lib/network/peers/score/score.d.ts +2 -2
  156. package/lib/network/peers/score/score.js +4 -1
  157. package/lib/network/peers/score/score.js.map +1 -1
  158. package/lib/network/peers/score/store.d.ts +3 -1
  159. package/lib/network/peers/score/store.js +6 -2
  160. package/lib/network/peers/score/store.js.map +1 -1
  161. package/lib/network/peers/utils/getConnectedPeerIds.js +2 -2
  162. package/lib/network/peers/utils/getConnectedPeerIds.js.map +1 -1
  163. package/lib/network/peers/utils/prioritizePeers.d.ts +15 -4
  164. package/lib/network/peers/utils/prioritizePeers.js +30 -5
  165. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  166. package/lib/network/processor/extractSlotRootFns.js +8 -1
  167. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  168. package/lib/network/processor/gossipHandlers.js +154 -16
  169. package/lib/network/processor/gossipHandlers.js.map +1 -1
  170. package/lib/network/processor/gossipQueues/index.js +5 -0
  171. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  172. package/lib/network/processor/index.js +5 -1
  173. package/lib/network/processor/index.js.map +1 -1
  174. package/lib/network/reqresp/ReqRespBeaconNode.js +21 -3
  175. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  176. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +14 -5
  177. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +202 -14
  178. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  179. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +32 -5
  180. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +280 -26
  181. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  182. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  183. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  184. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
  185. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
  186. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  187. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  188. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +57 -0
  189. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  190. package/lib/network/reqresp/handlers/index.js +10 -0
  191. package/lib/network/reqresp/handlers/index.js.map +1 -1
  192. package/lib/network/reqresp/protocols.d.ts +3 -0
  193. package/lib/network/reqresp/protocols.js +15 -0
  194. package/lib/network/reqresp/protocols.js.map +1 -1
  195. package/lib/network/reqresp/rateLimit.js +11 -1
  196. package/lib/network/reqresp/rateLimit.js.map +1 -1
  197. package/lib/network/reqresp/types.d.ts +13 -6
  198. package/lib/network/reqresp/types.js +8 -1
  199. package/lib/network/reqresp/types.js.map +1 -1
  200. package/lib/network/subnets/interface.d.ts +2 -0
  201. package/lib/network/subnets/interface.js +16 -1
  202. package/lib/network/subnets/interface.js.map +1 -1
  203. package/lib/network/subnets/syncnetsService.js +4 -5
  204. package/lib/network/subnets/syncnetsService.js.map +1 -1
  205. package/lib/network/util.d.ts +1 -4
  206. package/lib/network/util.js +2 -2
  207. package/lib/network/util.js.map +1 -1
  208. package/lib/node/nodejs.d.ts +5 -3
  209. package/lib/node/nodejs.js +6 -4
  210. package/lib/node/nodejs.js.map +1 -1
  211. package/lib/sync/interface.d.ts +2 -2
  212. package/lib/sync/interface.js +1 -1
  213. package/lib/sync/interface.js.map +1 -1
  214. package/lib/sync/range/batch.d.ts +8 -2
  215. package/lib/sync/range/batch.js +19 -7
  216. package/lib/sync/range/batch.js.map +1 -1
  217. package/lib/sync/range/chain.d.ts +7 -2
  218. package/lib/sync/range/chain.js +45 -21
  219. package/lib/sync/range/chain.js.map +1 -1
  220. package/lib/sync/range/range.js +3 -3
  221. package/lib/sync/range/range.js.map +1 -1
  222. package/lib/sync/range/utils/peerBalancer.d.ts +4 -1
  223. package/lib/sync/range/utils/peerBalancer.js +20 -2
  224. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  225. package/lib/sync/unknownBlock.d.ts +8 -1
  226. package/lib/sync/unknownBlock.js +222 -62
  227. package/lib/sync/unknownBlock.js.map +1 -1
  228. package/lib/util/blobs.d.ts +13 -1
  229. package/lib/util/blobs.js +44 -1
  230. package/lib/util/blobs.js.map +1 -1
  231. package/lib/util/dataColumns.d.ts +111 -0
  232. package/lib/util/dataColumns.js +277 -0
  233. package/lib/util/dataColumns.js.map +1 -0
  234. package/lib/util/kzg.d.ts +9 -21
  235. package/lib/util/kzg.js +12 -88
  236. package/lib/util/kzg.js.map +1 -1
  237. package/lib/util/metadata.d.ts +4 -0
  238. package/lib/util/metadata.js +7 -0
  239. package/lib/util/metadata.js.map +1 -1
  240. package/lib/util/peerId.js +1 -1
  241. package/lib/util/peerId.js.map +1 -1
  242. package/lib/util/sszBytes.d.ts +1 -0
  243. package/lib/util/sszBytes.js +17 -0
  244. package/lib/util/sszBytes.js.map +1 -1
  245. package/package.json +33 -32
@@ -7,7 +7,7 @@ export var BlockInputType;
7
7
  // data is out of available window, can be used to sync forward and keep adding to forkchoice
8
8
  BlockInputType["outOfRangeData"] = "outOfRangeData";
9
9
  BlockInputType["availableData"] = "availableData";
10
- BlockInputType["dataPromise"] = "dataPromise";
10
+ BlockInputType["dataPromise"] = "data_promise";
11
11
  })(BlockInputType || (BlockInputType = {}));
12
12
  /** Enum to represent where blocks come from */
13
13
  export var BlockSource;
@@ -17,6 +17,17 @@ export var BlockSource;
17
17
  BlockSource["byRange"] = "req_resp_by_range";
18
18
  BlockSource["byRoot"] = "req_resp_by_root";
19
19
  })(BlockSource || (BlockSource = {}));
20
+ export var GossipedInputType;
21
+ (function (GossipedInputType) {
22
+ GossipedInputType["block"] = "block";
23
+ GossipedInputType["blob"] = "blob";
24
+ GossipedInputType["dataColumn"] = "data_column";
25
+ })(GossipedInputType || (GossipedInputType = {}));
26
+ /**
27
+ *
28
+ * Deneb Blob Format Types
29
+ *
30
+ */
20
31
  /** Enum to represent where blobs come from */
21
32
  export var BlobsSource;
22
33
  (function (BlobsSource) {
@@ -25,11 +36,18 @@ export var BlobsSource;
25
36
  BlobsSource["byRange"] = "req_resp_by_range";
26
37
  BlobsSource["byRoot"] = "req_resp_by_root";
27
38
  })(BlobsSource || (BlobsSource = {}));
28
- export var GossipedInputType;
29
- (function (GossipedInputType) {
30
- GossipedInputType["block"] = "block";
31
- GossipedInputType["blob"] = "blob";
32
- })(GossipedInputType || (GossipedInputType = {}));
39
+ /**
40
+ *
41
+ * PeerDAS Column Format Types
42
+ *
43
+ */
44
+ export var DataColumnsSource;
45
+ (function (DataColumnsSource) {
46
+ DataColumnsSource["gossip"] = "gossip";
47
+ DataColumnsSource["api"] = "api";
48
+ DataColumnsSource["byRange"] = "req_resp_by_range";
49
+ DataColumnsSource["byRoot"] = "req_resp_by_root";
50
+ })(DataColumnsSource || (DataColumnsSource = {}));
33
51
  export function blockRequiresBlobs(config, blockSlot, clockSlot) {
34
52
  return (config.getForkSeq(blockSlot) >= ForkSeq.deneb &&
35
53
  // Only request blobs if they are recent enough
@@ -96,6 +114,21 @@ export function getBlockInputBlobs(blobsCache) {
96
114
  }
97
115
  return { blobs };
98
116
  }
117
+ export function getBlockInputDataColumns(dataColumnsCache, columnIndexes) {
118
+ const dataColumns = [];
119
+ const dataColumnsBytes = [];
120
+ for (const index of columnIndexes) {
121
+ const dataColumnCache = dataColumnsCache.get(index);
122
+ if (dataColumnCache === undefined) {
123
+ // check if the index is correct as per the custody columns
124
+ throw Error(`Missing dataColumnCache at index=${index}`);
125
+ }
126
+ const { dataColumn: dataColumnSidecar, dataColumnBytes } = dataColumnCache;
127
+ dataColumns.push(dataColumnSidecar);
128
+ dataColumnsBytes.push(dataColumnBytes);
129
+ }
130
+ return { dataColumns, dataColumnsBytes };
131
+ }
99
132
  export var AttestationImportOpt;
100
133
  (function (AttestationImportOpt) {
101
134
  AttestationImportOpt[AttestationImportOpt["Skip"] = 0] = "Skip";
@@ -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,9 +1,11 @@
1
1
  import { DataAvailabilityStatus } from "@lodestar/fork-choice";
2
+ import { ForkName } from "@lodestar/params";
2
3
  import { computeTimeAtSlot } from "@lodestar/state-transition";
3
4
  import { ErrorAborted } from "@lodestar/utils";
4
5
  import { BlockError, BlockErrorCode } from "../errors/index.js";
5
6
  import { validateBlobSidecars } from "../validation/blobSidecar.js";
6
- import { BlobSidecarValidation, BlockInputType, getBlockInput } from "./types.js";
7
+ import { validateDataColumnsSidecars } from "../validation/dataColumnSidecar.js";
8
+ import { BlobSidecarValidation, BlockInputType, getBlockInput, } from "./types.js";
7
9
  // we can now wait for full 12 seconds because unavailable block sync will try pulling
8
10
  // the blobs from the network anyway after 500ms of seeing the block
9
11
  const BLOB_AVAILABILITY_TIMEOUT = 12_000;
@@ -65,17 +67,26 @@ async function maybeValidateBlobs(chain, blockInput, signal, opts) {
65
67
  // run full validation
66
68
  const { block } = blockInput;
67
69
  const blockSlot = block.message.slot;
68
- const blobsData = blockInput.type === BlockInputType.availableData
69
- ? blockInput.blockData
70
- : await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
71
- const { blobs } = blobsData;
72
70
  const { blobKzgCommitments } = block.message.body;
73
71
  const beaconBlockRoot = chain.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(block.message);
74
- // if the blob siddecars have been individually verified then we can skip kzg proof check
75
- // but other checks to match blobs with block data still need to be performed
76
- const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
77
- validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
78
- const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blobsData);
72
+ const blockData = blockInput.type === BlockInputType.availableData
73
+ ? blockInput.blockData
74
+ : await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
75
+ if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
76
+ const { blobs } = blockData;
77
+ // if the blob siddecars have been individually verified then we can skip kzg proof check
78
+ // but other checks to match blobs with block data still need to be performed
79
+ const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
80
+ validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
81
+ }
82
+ else if (blockData.fork === ForkName.fulu) {
83
+ const { dataColumns } = blockData;
84
+ const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
85
+ validateDataColumnsSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, dataColumns, chain.metrics, {
86
+ skipProofsCheck,
87
+ });
88
+ }
89
+ const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blockData);
79
90
  return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: availableBlockInput };
80
91
  }
81
92
  }
@@ -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":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAa,cAAc,EAAC,MAAM,YAAY,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAoB,WAAyB;IACpF,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,EAAC,KAAK,EAAC,GAAG,UAAU,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvG,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,8CAA8C;YAC9C,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,mCAAmC,CAAC,GAAG,EAAE,CAAC;YACpE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,iCAAiC,CAAC,GAAG,EAAE,CAAC;YAClE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;YAC3C,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YACxB,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;YACvG,MAAM,YAAY,GAChB,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa;gBAC9C,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK;gBAC5B,CAAC,CAAC,wEAAwE;oBACxE,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC;YAE9D,wCAAwC;YACxC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;YAC/F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;gBACpD,QAAQ,EAAE,YAAY,CAAC,MAAM;gBAC7B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;gBACxB,IAAI,EAAE,YAAY;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAoB,WAAyB;IAClG,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,UAAU,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvG,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE1B,IAAI,IAAI,KAAK,cAAc,CAAC,aAAa,EAAE,CAAC;gBAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;gBAChD,aAAa,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,uEAAuE;QACvE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC;KAChD,CAAC,CAAC;AACL,CAAC"}
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, UintNum64, ValidatorIndex, Wei, deneb, fulu, phase0 } from "@lodestar/types";
7
7
  import { Logger } from "@lodestar/utils";
8
8
  import { ProcessShutdownCallback } from "@lodestar/validator";
9
9
  import { IBeaconDb } from "../db/index.js";
10
10
  import { IEth1ForBlockProduction } from "../eth1/index.js";
11
11
  import { IExecutionBuilder, IExecutionEngine } from "../execution/index.js";
12
12
  import { Metrics } from "../metrics/index.js";
13
+ import { NodeId } from "../network/subnets/interface.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";
@@ -45,6 +47,7 @@ export declare class BeaconChain implements IBeaconChain {
45
47
  readonly executionEngine: IExecutionEngine;
46
48
  readonly executionBuilder?: IExecutionBuilder;
47
49
  readonly config: BeaconConfig;
50
+ readonly custodyConfig: CustodyConfig;
48
51
  readonly logger: Logger;
49
52
  readonly metrics: Metrics | null;
50
53
  readonly bufferPool: BufferPool | null;
@@ -77,7 +80,9 @@ export declare class BeaconChain implements IBeaconChain {
77
80
  readonly checkpointBalancesCache: CheckpointBalancesCache;
78
81
  readonly shufflingCache: ShufflingCache;
79
82
  /** Map keyed by executionPayload.blockHash of the block for those blobs */
80
- readonly producedContentsCache: Map<string, deneb.Contents>;
83
+ readonly producedContentsCache: Map<string, deneb.Contents & {
84
+ cells?: fulu.Cell[][];
85
+ }>;
81
86
  readonly producedBlockRoot: Map<string, import("@chainsafe/ssz").ValueOfFields<{
82
87
  transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
83
88
  parentHash: import("@chainsafe/ssz").ByteVectorType;
@@ -137,6 +142,29 @@ export declare class BeaconChain implements IBeaconChain {
137
142
  extraData: import("@chainsafe/ssz").ByteListType;
138
143
  baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
139
144
  blockHash: import("@chainsafe/ssz").ByteVectorType;
145
+ }> | import("@chainsafe/ssz").ValueOfFields<{
146
+ blobGasUsed: import("@chainsafe/ssz").UintBigintType;
147
+ excessBlobGas: import("@chainsafe/ssz").UintBigintType;
148
+ withdrawals: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
149
+ index: import("@chainsafe/ssz").UintNumberType;
150
+ validatorIndex: import("@chainsafe/ssz").UintNumberType;
151
+ address: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
152
+ amount: import("@chainsafe/ssz").UintBigintType;
153
+ }>>;
154
+ transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
155
+ parentHash: import("@chainsafe/ssz").ByteVectorType;
156
+ feeRecipient: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
157
+ stateRoot: import("@chainsafe/ssz").ByteVectorType;
158
+ receiptsRoot: import("@chainsafe/ssz").ByteVectorType;
159
+ logsBloom: import("@chainsafe/ssz").ByteVectorType;
160
+ prevRandao: import("@chainsafe/ssz").ByteVectorType;
161
+ blockNumber: import("@chainsafe/ssz").UintNumberType;
162
+ gasLimit: import("@chainsafe/ssz").UintNumberType;
163
+ gasUsed: import("@chainsafe/ssz").UintNumberType;
164
+ timestamp: import("@chainsafe/ssz").UintNumberType;
165
+ extraData: import("@chainsafe/ssz").ByteListType;
166
+ baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
167
+ blockHash: import("@chainsafe/ssz").ByteVectorType;
140
168
  }> | null>;
141
169
  readonly producedBlindedBlockRoot: Set<string>;
142
170
  readonly blacklistedBlocks: Map<RootHex, Slot | null>;
@@ -146,7 +174,8 @@ export declare class BeaconChain implements IBeaconChain {
146
174
  protected readonly db: IBeaconDb;
147
175
  private abortController;
148
176
  private processShutdownCallback;
149
- constructor(opts: IChainOptions, { config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, anchorState, eth1, executionEngine, executionBuilder, }: {
177
+ constructor(opts: IChainOptions, { nodeId, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, anchorState, eth1, executionEngine, executionBuilder, }: {
178
+ nodeId: NodeId;
150
179
  config: BeaconConfig;
151
180
  db: IBeaconDb;
152
181
  dbName: string;
@@ -243,7 +272,9 @@ export declare class BeaconChain implements IBeaconChain {
243
272
  * kzg_aggregated_proof=compute_proof_from_blobs(blobs),
244
273
  * )
245
274
  */
246
- getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents;
275
+ getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents & {
276
+ cells?: fulu.Cell[][];
277
+ };
247
278
  processBlock(block: BlockInput, opts?: ImportBlockOpts): Promise<void>;
248
279
  processChainSegment(blocks: BlockInput[], opts?: ImportBlockOpts): Promise<void>;
249
280
  getStatus(): phase0.Status;
@@ -8,6 +8,7 @@ import { fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex } f
8
8
  import { GENESIS_EPOCH, ZERO_HASH } from "../constants/index.js";
9
9
  import { BufferPool } from "../util/bufferPool.js";
10
10
  import { Clock, ClockEvent } from "../util/clock.js";
11
+ import { CustodyConfig, getValidatorsCustodyRequirement } from "../util/dataColumns.js";
11
12
  import { ensureDir, writeIfNotExist } from "../util/file.js";
12
13
  import { isOptimisticBlock } from "../util/forkChoice.js";
13
14
  import { SerializedCache } from "../util/serializedCache.js";
@@ -49,7 +50,7 @@ import { PersistentCheckpointStateCache } from "./stateCache/persistentCheckpoin
49
50
  */
50
51
  const DEFAULT_MAX_CACHED_PRODUCED_ROOTS = 4;
51
52
  export class BeaconChain {
52
- constructor(opts, { config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, anchorState, eth1, executionEngine, executionBuilder, }) {
53
+ constructor(opts, { nodeId, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, anchorState, eth1, executionEngine, executionBuilder, }) {
53
54
  this.syncContributionAndProofPool = new SyncContributionAndProofPool();
54
55
  this.opPool = new OpPool();
55
56
  // Gossip seen cache
@@ -57,7 +58,6 @@ export class BeaconChain {
57
58
  this.seenAggregators = new SeenAggregators();
58
59
  this.seenBlockProposers = new SeenBlockProposers();
59
60
  this.seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
60
- this.seenGossipBlockInput = new SeenGossipBlockInput();
61
61
  // Seen cache for liveness checks
62
62
  this.seenBlockAttesters = new SeenBlockAttesters();
63
63
  /** Map keyed by executionPayload.blockHash of the block for those blobs */
@@ -90,12 +90,14 @@ export class BeaconChain {
90
90
  clock = new Clock({ config, genesisTime: this.genesisTime, signal });
91
91
  this.blacklistedBlocks = new Map((opts.blacklistedBlocks ?? []).map((hex) => [hex, null]));
92
92
  const preAggregateCutOffTime = (2 / 3) * this.config.SECONDS_PER_SLOT;
93
- this.attestationPool = new AttestationPool(config, clock, preAggregateCutOffTime, this.opts?.preaggregateSlotDistance, metrics);
94
- this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config, metrics);
93
+ this.attestationPool = new AttestationPool(config, clock, preAggregateCutOffTime, this.opts?.preaggregateSlotDistance);
94
+ this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config);
95
95
  this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(clock, preAggregateCutOffTime, this.opts?.preaggregateSlotDistance);
96
96
  this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
97
97
  this.seenContributionAndProof = new SeenContributionAndProof(metrics);
98
98
  this.seenAttestationDatas = new SeenAttestationDatas(metrics, this.opts?.attDataCacheSlotDistance);
99
+ this.custodyConfig = new CustodyConfig(nodeId, config);
100
+ this.seenGossipBlockInput = new SeenGossipBlockInput(this.custodyConfig, this.executionEngine, emitter, logger);
99
101
  this.beaconProposerCache = new BeaconProposerCache(opts);
100
102
  this.checkpointBalancesCache = new CheckpointBalancesCache();
101
103
  // Restore state caches
@@ -189,7 +191,7 @@ export class BeaconChain {
189
191
  new PrepareNextSlotScheduler(this, this.config, metrics, this.logger, signal);
190
192
  }
191
193
  if (metrics) {
192
- metrics.clockSlot.addCollect(() => this.onScrapeMetrics(metrics));
194
+ metrics.opPool.aggregatedAttestationPoolSize.addCollect(() => this.onScrapeMetrics(metrics));
193
195
  }
194
196
  // Event handlers. emitter is created internally and dropped on close(). Not need to .removeListener()
195
197
  clock.addListener(ClockEvent.slot, this.onClockSlot.bind(this));
@@ -721,8 +723,10 @@ export class BeaconChain {
721
723
  this.logger.debug("Persisted invalid ssz object", { id: logStr, filepath });
722
724
  }
723
725
  onScrapeMetrics(metrics) {
724
- // aggregatedAttestationPool tracks metrics on its own
725
- metrics.opPool.attestationPool.size.set(this.attestationPool.getAttestationCount());
726
+ const { attestationCount, attestationDataCount } = this.aggregatedAttestationPool.getAttestationCount();
727
+ metrics.opPool.aggregatedAttestationPoolSize.set(attestationCount);
728
+ metrics.opPool.aggregatedAttestationPoolUniqueData.set(attestationDataCount);
729
+ metrics.opPool.attestationPoolSize.set(this.attestationPool.getAttestationCount());
726
730
  metrics.opPool.attesterSlashingPoolSize.set(this.opPool.attesterSlashingsSize);
727
731
  metrics.opPool.proposerSlashingPoolSize.set(this.opPool.proposerSlashingsSize);
728
732
  metrics.opPool.voluntaryExitPoolSize.set(this.opPool.voluntaryExitsSize);
@@ -809,6 +813,20 @@ export class BeaconChain {
809
813
  }
810
814
  if (headState) {
811
815
  this.opPool.pruneAll(headBlock, headState);
816
+ if (!this.opts.noValidatorCustody) {
817
+ // Update custody requirement based on finalized state
818
+ const validatorIndices = this.beaconProposerCache.getValidatorIndices();
819
+ const targetCustodyGroupCount = getValidatorsCustodyRequirement(headState, validatorIndices, this.config);
820
+ if (targetCustodyGroupCount !== this.custodyConfig.targetCustodyGroupCount) {
821
+ this.custodyConfig.updateTargetCustodyGroupCount(targetCustodyGroupCount);
822
+ this.logger.verbose(`Updated targetCustodyGroupCount=${this.custodyConfig.targetCustodyGroupCount}`);
823
+ this.emitter.emit(ChainEvent.updateTargetGroupCount, this.custodyConfig.targetCustodyGroupCount);
824
+ // TODO: If target group count increases, we should wait to update the advertised group until we've
825
+ // backfilled the new groups.
826
+ // this.custodyConfig.updateAdvertisedCustodyGroupCount(targetCustodyGroupCount);
827
+ // this.emitter.emit(ChainEvent.updateAdvertisedGroupCount, this.custodyConfig.advertisedCustodyGroupCount);
828
+ }
829
+ }
812
830
  }
813
831
  if (headState === null) {
814
832
  this.logger.verbose("Head state is null");