@lodestar/beacon-node 1.51.0-dev.8d8efcbf5f → 1.51.0-dev.8fdbd61e7e

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 (511) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +19 -61
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +17 -0
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/validator/index.d.ts +6 -0
  8. package/lib/api/impl/validator/index.d.ts.map +1 -1
  9. package/lib/api/impl/validator/index.js +38 -25
  10. package/lib/api/impl/validator/index.js.map +1 -1
  11. package/lib/chain/GetBlobsTracker.d.ts +2 -2
  12. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  13. package/lib/chain/GetBlobsTracker.js +7 -31
  14. package/lib/chain/GetBlobsTracker.js.map +1 -1
  15. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  16. package/lib/chain/archiveStore/archiveStore.js +3 -4
  17. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  18. package/lib/chain/archiveStore/utils/pruneHistory.d.ts +9 -2
  19. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
  20. package/lib/chain/archiveStore/utils/pruneHistory.js +12 -4
  21. package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
  22. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  23. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  24. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  25. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  26. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  27. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  28. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  29. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  30. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  31. package/lib/chain/blocks/blockInput/types.js +0 -1
  32. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  33. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  34. package/lib/chain/blocks/importBlock.js +36 -53
  35. package/lib/chain/blocks/importBlock.js.map +1 -1
  36. package/lib/chain/blocks/importExecutionPayload.d.ts +6 -10
  37. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  38. package/lib/chain/blocks/importExecutionPayload.js +26 -17
  39. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  40. package/lib/chain/blocks/index.d.ts.map +1 -1
  41. package/lib/chain/blocks/index.js +2 -2
  42. package/lib/chain/blocks/index.js.map +1 -1
  43. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +10 -7
  44. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  45. package/lib/chain/blocks/payloadEnvelopeProcessor.js +21 -16
  46. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  47. package/lib/chain/blocks/types.d.ts +4 -20
  48. package/lib/chain/blocks/types.d.ts.map +1 -1
  49. package/lib/chain/blocks/types.js +0 -24
  50. package/lib/chain/blocks/types.js.map +1 -1
  51. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  52. package/lib/chain/blocks/verifyBlock.js +17 -6
  53. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  54. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  55. package/lib/chain/blocks/verifyBlocksDataAvailability.js +6 -1
  56. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  57. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  58. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  59. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  60. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  61. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  62. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  63. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  64. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  65. package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
  66. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  67. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  68. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +1 -3
  69. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  70. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  71. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  72. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  73. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  74. package/lib/chain/bls/interface.d.ts +2 -0
  75. package/lib/chain/bls/interface.d.ts.map +1 -1
  76. package/lib/chain/bls/multithread/index.d.ts +1 -1
  77. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  78. package/lib/chain/bls/multithread/index.js +45 -17
  79. package/lib/chain/bls/multithread/index.js.map +1 -1
  80. package/lib/chain/chain.d.ts +24 -3
  81. package/lib/chain/chain.d.ts.map +1 -1
  82. package/lib/chain/chain.js +120 -39
  83. package/lib/chain/chain.js.map +1 -1
  84. package/lib/chain/emitter.d.ts +7 -7
  85. package/lib/chain/emitter.d.ts.map +1 -1
  86. package/lib/chain/emitter.js +5 -5
  87. package/lib/chain/emitter.js.map +1 -1
  88. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  89. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  90. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  91. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  92. package/lib/chain/errors/index.d.ts +0 -1
  93. package/lib/chain/errors/index.d.ts.map +1 -1
  94. package/lib/chain/errors/index.js +0 -1
  95. package/lib/chain/errors/index.js.map +1 -1
  96. package/lib/chain/forkChoice/index.d.ts +11 -1
  97. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  98. package/lib/chain/forkChoice/index.js +11 -0
  99. package/lib/chain/forkChoice/index.js.map +1 -1
  100. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  101. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  102. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  103. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  104. package/lib/chain/interface.d.ts +7 -4
  105. package/lib/chain/interface.d.ts.map +1 -1
  106. package/lib/chain/interface.js.map +1 -1
  107. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  108. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  109. package/lib/chain/opPools/aggregatedAttestationPool.js +198 -45
  110. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  111. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  112. package/lib/chain/opPools/attestationPool.js +14 -3
  113. package/lib/chain/opPools/attestationPool.js.map +1 -1
  114. package/lib/chain/opPools/index.d.ts +1 -0
  115. package/lib/chain/opPools/index.d.ts.map +1 -1
  116. package/lib/chain/opPools/index.js +1 -0
  117. package/lib/chain/opPools/index.js.map +1 -1
  118. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  119. package/lib/chain/opPools/payloadAttestationPool.js +16 -6
  120. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  121. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  122. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  123. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  124. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  125. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  126. package/lib/chain/opPools/syncCommitteeMessagePool.js +8 -2
  127. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  128. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  129. package/lib/chain/opPools/syncContributionAndProofPool.js +10 -2
  130. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  131. package/lib/chain/options.d.ts +5 -2
  132. package/lib/chain/options.d.ts.map +1 -1
  133. package/lib/chain/options.js.map +1 -1
  134. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  135. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  136. package/lib/chain/produceBlock/produceBlockBody.js +3 -2
  137. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  138. package/lib/chain/proposerTracker.d.ts +31 -0
  139. package/lib/chain/proposerTracker.d.ts.map +1 -0
  140. package/lib/chain/proposerTracker.js +75 -0
  141. package/lib/chain/proposerTracker.js.map +1 -0
  142. package/lib/chain/regen/interface.d.ts +1 -1
  143. package/lib/chain/regen/interface.d.ts.map +1 -1
  144. package/lib/chain/regen/queued.d.ts +1 -1
  145. package/lib/chain/regen/queued.d.ts.map +1 -1
  146. package/lib/chain/regen/queued.js +5 -3
  147. package/lib/chain/regen/queued.js.map +1 -1
  148. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  149. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  150. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  151. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  152. package/lib/chain/validation/aggregateAndProof.js +1 -1
  153. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  154. package/lib/chain/validation/attestation.js +1 -1
  155. package/lib/chain/validation/attestation.js.map +1 -1
  156. package/lib/chain/validation/executionPayloadBid.js +13 -13
  157. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  158. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  159. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  160. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  161. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  162. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  163. package/lib/chain/validation/syncCommittee.js +16 -10
  164. package/lib/chain/validation/syncCommittee.js.map +1 -1
  165. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  166. package/lib/chain/validation/syncCommitteeContributionAndProof.js +11 -0
  167. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  168. package/lib/chain/validatorMonitor.d.ts +1 -2
  169. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  170. package/lib/chain/validatorMonitor.js +0 -3
  171. package/lib/chain/validatorMonitor.js.map +1 -1
  172. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  173. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  174. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  175. package/lib/db/flatFileStore/slotIndex.js +2 -2
  176. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  177. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  178. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  179. package/lib/db/repositories/blobSidecars.js +0 -1
  180. package/lib/db/repositories/blobSidecars.js.map +1 -1
  181. package/lib/execution/builder/apiClient.d.ts +14 -8
  182. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  183. package/lib/execution/builder/apiClient.js +12 -10
  184. package/lib/execution/builder/apiClient.js.map +1 -1
  185. package/lib/execution/builder/http.d.ts +2 -0
  186. package/lib/execution/builder/http.d.ts.map +1 -1
  187. package/lib/execution/builder/http.js +2 -0
  188. package/lib/execution/builder/http.js.map +1 -1
  189. package/lib/execution/engine/http.d.ts +4 -6
  190. package/lib/execution/engine/http.d.ts.map +1 -1
  191. package/lib/execution/engine/http.js +8 -10
  192. package/lib/execution/engine/http.js.map +1 -1
  193. package/lib/execution/engine/interface.d.ts +17 -5
  194. package/lib/execution/engine/interface.d.ts.map +1 -1
  195. package/lib/execution/engine/interface.js.map +1 -1
  196. package/lib/execution/engine/jsonRpcTransport.d.ts +2 -4
  197. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  198. package/lib/execution/engine/jsonRpcTransport.js +2 -12
  199. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  200. package/lib/execution/engine/mock.d.ts +0 -1
  201. package/lib/execution/engine/mock.d.ts.map +1 -1
  202. package/lib/execution/engine/mock.js +0 -4
  203. package/lib/execution/engine/mock.js.map +1 -1
  204. package/lib/execution/engine/restTransport.d.ts +2 -4
  205. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  206. package/lib/execution/engine/restTransport.js +1 -15
  207. package/lib/execution/engine/restTransport.js.map +1 -1
  208. package/lib/execution/engine/sszTypes.d.ts +0 -9
  209. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  210. package/lib/execution/engine/sszTypes.js +0 -5
  211. package/lib/execution/engine/sszTypes.js.map +1 -1
  212. package/lib/execution/engine/transport.d.ts +1 -14
  213. package/lib/execution/engine/transport.d.ts.map +1 -1
  214. package/lib/execution/engine/types.d.ts +0 -8
  215. package/lib/execution/engine/types.d.ts.map +1 -1
  216. package/lib/execution/engine/types.js +0 -8
  217. package/lib/execution/engine/types.js.map +1 -1
  218. package/lib/execution/engine/utils.d.ts.map +1 -1
  219. package/lib/execution/engine/utils.js +3 -2
  220. package/lib/execution/engine/utils.js.map +1 -1
  221. package/lib/index.d.ts +1 -1
  222. package/lib/index.d.ts.map +1 -1
  223. package/lib/index.js +1 -1
  224. package/lib/index.js.map +1 -1
  225. package/lib/metrics/metrics/beacon.d.ts +0 -9
  226. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  227. package/lib/metrics/metrics/beacon.js +0 -30
  228. package/lib/metrics/metrics/beacon.js.map +1 -1
  229. package/lib/metrics/metrics/lodestar.d.ts +30 -8
  230. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  231. package/lib/metrics/metrics/lodestar.js +79 -18
  232. package/lib/metrics/metrics/lodestar.js.map +1 -1
  233. package/lib/metrics/server/http.js +5 -5
  234. package/lib/metrics/server/http.js.map +1 -1
  235. package/lib/network/core/networkCore.d.ts +4 -1
  236. package/lib/network/core/networkCore.d.ts.map +1 -1
  237. package/lib/network/core/networkCore.js +7 -0
  238. package/lib/network/core/networkCore.js.map +1 -1
  239. package/lib/network/core/networkCoreWorker.js +2 -0
  240. package/lib/network/core/networkCoreWorker.js.map +1 -1
  241. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  242. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  243. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  244. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  245. package/lib/network/core/types.d.ts +6 -1
  246. package/lib/network/core/types.d.ts.map +1 -1
  247. package/lib/network/gossip/gossipsub.d.ts +1 -0
  248. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  249. package/lib/network/gossip/gossipsub.js +10 -0
  250. package/lib/network/gossip/gossipsub.js.map +1 -1
  251. package/lib/network/gossip/interface.d.ts +1 -8
  252. package/lib/network/gossip/interface.d.ts.map +1 -1
  253. package/lib/network/gossip/interface.js +0 -1
  254. package/lib/network/gossip/interface.js.map +1 -1
  255. package/lib/network/gossip/topic.d.ts +0 -16
  256. package/lib/network/gossip/topic.d.ts.map +1 -1
  257. package/lib/network/gossip/topic.js +0 -23
  258. package/lib/network/gossip/topic.js.map +1 -1
  259. package/lib/network/interface.d.ts +4 -5
  260. package/lib/network/interface.d.ts.map +1 -1
  261. package/lib/network/libp2p/index.d.ts.map +1 -1
  262. package/lib/network/libp2p/index.js +5 -1
  263. package/lib/network/libp2p/index.js.map +1 -1
  264. package/lib/network/network.d.ts +8 -7
  265. package/lib/network/network.d.ts.map +1 -1
  266. package/lib/network/network.js +53 -37
  267. package/lib/network/network.js.map +1 -1
  268. package/lib/network/options.d.ts +2 -0
  269. package/lib/network/options.d.ts.map +1 -1
  270. package/lib/network/options.js +2 -0
  271. package/lib/network/options.js.map +1 -1
  272. package/lib/network/peers/peerManager.d.ts +2 -1
  273. package/lib/network/peers/peerManager.d.ts.map +1 -1
  274. package/lib/network/peers/peerManager.js +28 -1
  275. package/lib/network/peers/peerManager.js.map +1 -1
  276. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  277. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  278. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  279. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  280. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  281. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  282. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  283. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  284. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  285. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  286. package/lib/network/peers/utils/subnetMap.js +6 -3
  287. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  288. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  289. package/lib/network/processor/extractSlotRootFns.js +1 -8
  290. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  291. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  292. package/lib/network/processor/gossipHandlers.js +46 -126
  293. package/lib/network/processor/gossipHandlers.js.map +1 -1
  294. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  295. package/lib/network/processor/gossipQueues/index.js +0 -6
  296. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  297. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  298. package/lib/network/processor/gossipValidatorFn.js +1 -5
  299. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  300. package/lib/network/processor/index.d.ts +6 -0
  301. package/lib/network/processor/index.d.ts.map +1 -1
  302. package/lib/network/processor/index.js +29 -4
  303. package/lib/network/processor/index.js.map +1 -1
  304. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  305. package/lib/network/reqresp/ReqRespBeaconNode.js +0 -3
  306. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  307. package/lib/network/reqresp/handlers/beaconBlocksByHead.js +1 -1
  308. package/lib/network/reqresp/handlers/beaconBlocksByHead.js.map +1 -1
  309. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  310. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  311. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  312. package/lib/network/reqresp/handlers/index.js +1 -12
  313. package/lib/network/reqresp/handlers/index.js.map +1 -1
  314. package/lib/network/reqresp/protocols.d.ts +0 -2
  315. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  316. package/lib/network/reqresp/protocols.js +0 -10
  317. package/lib/network/reqresp/protocols.js.map +1 -1
  318. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  319. package/lib/network/reqresp/rateLimit.js +1 -17
  320. package/lib/network/reqresp/rateLimit.js.map +1 -1
  321. package/lib/network/reqresp/types.d.ts +2 -8
  322. package/lib/network/reqresp/types.d.ts.map +1 -1
  323. package/lib/network/reqresp/types.js +1 -7
  324. package/lib/network/reqresp/types.js.map +1 -1
  325. package/lib/network/subnets/attnetsService.d.ts +35 -5
  326. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  327. package/lib/network/subnets/attnetsService.js +84 -6
  328. package/lib/network/subnets/attnetsService.js.map +1 -1
  329. package/lib/network/subnets/interface.d.ts +7 -0
  330. package/lib/network/subnets/interface.d.ts.map +1 -1
  331. package/lib/network/subnets/interface.js.map +1 -1
  332. package/lib/node/nodejs.d.ts +2 -0
  333. package/lib/node/nodejs.d.ts.map +1 -1
  334. package/lib/node/nodejs.js +37 -19
  335. package/lib/node/nodejs.js.map +1 -1
  336. package/lib/node/options.d.ts +3 -1
  337. package/lib/node/options.d.ts.map +1 -1
  338. package/lib/node/options.js +4 -2
  339. package/lib/node/options.js.map +1 -1
  340. package/lib/sync/range/batch.d.ts +2 -3
  341. package/lib/sync/range/batch.d.ts.map +1 -1
  342. package/lib/sync/range/batch.js +9 -22
  343. package/lib/sync/range/batch.js.map +1 -1
  344. package/lib/sync/range/chain.d.ts.map +1 -1
  345. package/lib/sync/range/chain.js +2 -15
  346. package/lib/sync/range/chain.js.map +1 -1
  347. package/lib/sync/sync.d.ts +15 -0
  348. package/lib/sync/sync.d.ts.map +1 -1
  349. package/lib/sync/sync.js +103 -25
  350. package/lib/sync/sync.js.map +1 -1
  351. package/lib/sync/unknownBlock.d.ts.map +1 -1
  352. package/lib/sync/unknownBlock.js +1 -7
  353. package/lib/sync/unknownBlock.js.map +1 -1
  354. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  355. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  356. package/lib/sync/utils/downloadByRange.js +24 -128
  357. package/lib/sync/utils/downloadByRange.js.map +1 -1
  358. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  359. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  360. package/lib/sync/utils/downloadByRoot.js +14 -99
  361. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  362. package/lib/util/blobs.d.ts +1 -7
  363. package/lib/util/blobs.d.ts.map +1 -1
  364. package/lib/util/blobs.js +0 -19
  365. package/lib/util/blobs.js.map +1 -1
  366. package/lib/util/execution.d.ts +3 -4
  367. package/lib/util/execution.d.ts.map +1 -1
  368. package/lib/util/execution.js +1 -73
  369. package/lib/util/execution.js.map +1 -1
  370. package/lib/util/file.d.ts.map +1 -1
  371. package/lib/util/file.js +8 -9
  372. package/lib/util/file.js.map +1 -1
  373. package/lib/util/sszBytes.d.ts +5 -1
  374. package/lib/util/sszBytes.d.ts.map +1 -1
  375. package/lib/util/sszBytes.js +34 -17
  376. package/lib/util/sszBytes.js.map +1 -1
  377. package/lib/util/types.d.ts +0 -5
  378. package/lib/util/types.d.ts.map +1 -1
  379. package/lib/util/types.js +1 -2
  380. package/lib/util/types.js.map +1 -1
  381. package/package.json +16 -17
  382. package/src/api/impl/beacon/blocks/index.ts +24 -64
  383. package/src/api/impl/beacon/pool/index.ts +26 -0
  384. package/src/api/impl/validator/index.ts +43 -29
  385. package/src/chain/GetBlobsTracker.ts +10 -39
  386. package/src/chain/archiveStore/archiveStore.ts +5 -4
  387. package/src/chain/archiveStore/utils/pruneHistory.ts +16 -6
  388. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  389. package/src/chain/blocks/blockInput/errors.ts +1 -2
  390. package/src/chain/blocks/blockInput/types.ts +2 -20
  391. package/src/chain/blocks/importBlock.ts +56 -72
  392. package/src/chain/blocks/importExecutionPayload.ts +44 -33
  393. package/src/chain/blocks/index.ts +5 -2
  394. package/src/chain/blocks/payloadEnvelopeProcessor.ts +32 -21
  395. package/src/chain/blocks/types.ts +5 -31
  396. package/src/chain/blocks/verifyBlock.ts +30 -16
  397. package/src/chain/blocks/verifyBlocksDataAvailability.ts +6 -1
  398. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  399. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  400. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
  401. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +1 -3
  402. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  403. package/src/chain/bls/interface.ts +2 -0
  404. package/src/chain/bls/multithread/index.ts +43 -19
  405. package/src/chain/chain.ts +135 -37
  406. package/src/chain/emitter.ts +8 -8
  407. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  408. package/src/chain/errors/index.ts +0 -1
  409. package/src/chain/forkChoice/index.ts +11 -0
  410. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  411. package/src/chain/interface.ts +7 -3
  412. package/src/chain/opPools/aggregatedAttestationPool.ts +245 -42
  413. package/src/chain/opPools/attestationPool.ts +15 -3
  414. package/src/chain/opPools/index.ts +1 -0
  415. package/src/chain/opPools/payloadAttestationPool.ts +17 -6
  416. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  417. package/src/chain/opPools/syncCommitteeMessagePool.ts +9 -2
  418. package/src/chain/opPools/syncContributionAndProofPool.ts +12 -2
  419. package/src/chain/options.ts +5 -2
  420. package/src/chain/produceBlock/produceBlockBody.ts +7 -3
  421. package/src/chain/proposerTracker.ts +94 -0
  422. package/src/chain/regen/interface.ts +1 -1
  423. package/src/chain/regen/queued.ts +6 -4
  424. package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
  425. package/src/chain/validation/aggregateAndProof.ts +1 -1
  426. package/src/chain/validation/attestation.ts +1 -1
  427. package/src/chain/validation/executionPayloadBid.ts +14 -13
  428. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  429. package/src/chain/validation/syncCommittee.ts +31 -15
  430. package/src/chain/validation/syncCommitteeContributionAndProof.ts +13 -0
  431. package/src/chain/validatorMonitor.ts +0 -6
  432. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  433. package/src/db/flatFileStore/slotIndex.ts +4 -3
  434. package/src/db/repositories/blobSidecars.ts +0 -1
  435. package/src/execution/builder/apiClient.ts +16 -13
  436. package/src/execution/builder/http.ts +4 -0
  437. package/src/execution/engine/http.ts +19 -42
  438. package/src/execution/engine/interface.ts +18 -9
  439. package/src/execution/engine/jsonRpcTransport.ts +10 -22
  440. package/src/execution/engine/mock.ts +0 -7
  441. package/src/execution/engine/restTransport.ts +3 -22
  442. package/src/execution/engine/sszTypes.ts +0 -9
  443. package/src/execution/engine/transport.ts +8 -17
  444. package/src/execution/engine/types.ts +0 -17
  445. package/src/execution/engine/utils.ts +4 -2
  446. package/src/index.ts +1 -1
  447. package/src/metrics/metrics/beacon.ts +0 -30
  448. package/src/metrics/metrics/lodestar.ts +80 -18
  449. package/src/metrics/server/http.ts +5 -5
  450. package/src/network/core/networkCore.ts +11 -1
  451. package/src/network/core/networkCoreWorker.ts +2 -0
  452. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  453. package/src/network/core/types.ts +6 -1
  454. package/src/network/gossip/gossipsub.ts +11 -0
  455. package/src/network/gossip/interface.ts +0 -5
  456. package/src/network/gossip/topic.ts +0 -25
  457. package/src/network/interface.ts +2 -5
  458. package/src/network/libp2p/index.ts +5 -1
  459. package/src/network/network.ts +55 -60
  460. package/src/network/options.ts +4 -0
  461. package/src/network/peers/peerManager.ts +28 -3
  462. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  463. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  464. package/src/network/peers/utils/subnetMap.ts +6 -3
  465. package/src/network/processor/extractSlotRootFns.ts +0 -9
  466. package/src/network/processor/gossipHandlers.ts +59 -159
  467. package/src/network/processor/gossipQueues/index.ts +0 -6
  468. package/src/network/processor/gossipValidatorFn.ts +0 -5
  469. package/src/network/processor/index.ts +25 -4
  470. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -7
  471. package/src/network/reqresp/handlers/beaconBlocksByHead.ts +1 -1
  472. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  473. package/src/network/reqresp/handlers/index.ts +0 -17
  474. package/src/network/reqresp/protocols.ts +0 -12
  475. package/src/network/reqresp/rateLimit.ts +1 -17
  476. package/src/network/reqresp/types.ts +0 -13
  477. package/src/network/subnets/attnetsService.ts +94 -6
  478. package/src/network/subnets/interface.ts +7 -0
  479. package/src/node/nodejs.ts +34 -15
  480. package/src/node/options.ts +5 -1
  481. package/src/sync/range/batch.ts +9 -21
  482. package/src/sync/range/chain.ts +2 -14
  483. package/src/sync/sync.ts +108 -26
  484. package/src/sync/unknownBlock.ts +1 -8
  485. package/src/sync/utils/downloadByRange.ts +31 -230
  486. package/src/sync/utils/downloadByRoot.ts +15 -142
  487. package/src/util/blobs.ts +0 -34
  488. package/src/util/execution.ts +8 -102
  489. package/src/util/file.ts +8 -9
  490. package/src/util/sszBytes.ts +40 -22
  491. package/src/util/types.ts +1 -8
  492. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  493. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  494. package/lib/chain/errors/blobSidecarError.js +0 -38
  495. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  496. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  497. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  498. package/lib/chain/validation/blobSidecar.js +0 -276
  499. package/lib/chain/validation/blobSidecar.js.map +0 -1
  500. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  501. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  502. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  503. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  504. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  505. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  506. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  507. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  508. package/src/chain/errors/blobSidecarError.ts +0 -70
  509. package/src/chain/validation/blobSidecar.ts +0 -357
  510. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  511. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
@@ -4,12 +4,8 @@ import {Logger, pruneSetToMax} from "@lodestar/utils";
4
4
  import {BLOB_AND_PROOF_V2_RPC_BYTES} from "../execution/engine/types.js";
5
5
  import {IExecutionEngine} from "../execution/index.js";
6
6
  import {Metrics} from "../metrics/metrics.js";
7
- import {
8
- DataColumnEngineResult,
9
- getBlobSidecarsFromExecution,
10
- getDataColumnSidecarsFromExecution,
11
- } from "../util/execution.js";
12
- import {IBlockInput, isBlockInputBlobs} from "./blocks/blockInput/index.js";
7
+ import {DataColumnEngineResult, getDataColumnSidecarsFromExecution} from "../util/execution.js";
8
+ import {IBlockInput, isBlockInputColumns} from "./blocks/blockInput/index.js";
13
9
  import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/index.js";
14
10
  import {ChainEventEmitter} from "./emitter.js";
15
11
 
@@ -20,7 +16,7 @@ const MAX_TRACKED_BLOCK_ROOTS = 64;
20
16
 
21
17
  export type GetBlobsTrackerInit = {
22
18
  logger: Logger;
23
- executionEngine: IExecutionEngine;
19
+ executionEngine: Pick<IExecutionEngine, "getBlobs">;
24
20
  emitter: ChainEventEmitter;
25
21
  metrics: Metrics | null;
26
22
  config: ChainForkConfig;
@@ -31,7 +27,7 @@ export type GetBlobsTrackerInit = {
31
27
  */
32
28
  export class GetBlobsTracker {
33
29
  logger: Logger;
34
- executionEngine: IExecutionEngine;
30
+ executionEngine: Pick<IExecutionEngine, "getBlobs">;
35
31
  emitter: ChainEventEmitter;
36
32
  metrics: Metrics | null;
37
33
  config: ChainForkConfig;
@@ -51,6 +47,10 @@ export class GetBlobsTracker {
51
47
  }
52
48
 
53
49
  triggerGetBlobs(input: IBlockInput | PayloadEnvelopeInput): void {
50
+ if (!(input instanceof PayloadEnvelopeInput) && !isBlockInputColumns(input)) {
51
+ return;
52
+ }
53
+
54
54
  if (this.activeReconstructions.has(input.blockRootHex)) {
55
55
  this.pendingTriggers.add(input.blockRootHex);
56
56
  return;
@@ -74,37 +74,6 @@ export class GetBlobsTracker {
74
74
  }
75
75
  }
76
76
 
77
- // The request is sent right away, before block processing issues newPayload: ELs that drop a
78
- // transaction's blobs once the payload is validated can only answer a request that gets there first
79
- if (!(input instanceof PayloadEnvelopeInput) && isBlockInputBlobs(input)) {
80
- // there is not preallocation for blob sidecars like there is for columns sidecars so no need to
81
- // store the index for the preallocated buffers
82
- this.activeReconstructions.add(input.blockRootHex);
83
- const logCtx = {slot: input.slot, root: input.blockRootHex};
84
- this.logger.verbose("Trigger getBlobsV1 for block", logCtx);
85
- let requestFailed = false;
86
- getBlobSidecarsFromExecution(this.config, this.executionEngine, this.metrics, this.emitter, input)
87
- .then(() => {
88
- // EL errors and misses are handled inside the helper, blobs still missing means the attempt failed
89
- if (!input.hasAllData()) {
90
- requestFailed = true;
91
- this.recordFailedAttempt(input.blockRootHex);
92
- }
93
- })
94
- .catch((error) => {
95
- this.logger.debug("Error during getBlobsV1 for block", logCtx, error as Error);
96
- requestFailed = true;
97
- this.recordFailedAttempt(input.blockRootHex);
98
- })
99
- .finally(() => {
100
- this.logger.verbose("Completed getBlobsV1 for block", logCtx);
101
- this.activeReconstructions.delete(input.blockRootHex);
102
- this.retryPendingTrigger(input, requestFailed);
103
- });
104
-
105
- return;
106
- }
107
-
108
77
  let freeIndex = this.blobsAndProofsBuffers.findIndex(({inUse}) => !inUse);
109
78
  if (freeIndex === -1) {
110
79
  freeIndex = this.blobsAndProofsBuffers.length;
@@ -126,6 +95,8 @@ export class GetBlobsTracker {
126
95
  const logCtx = {slot: input.slot, root: input.blockRootHex};
127
96
  this.logger.verbose("Trigger getBlobsV2 for block", logCtx);
128
97
  let requestFailed = false;
98
+ // The request is sent right away, before block processing issues newPayload: ELs that drop a
99
+ // transaction's blobs once the payload is validated can only answer a request that gets there first
129
100
  getDataColumnSidecarsFromExecution(
130
101
  this.config,
131
102
  this.executionEngine,
@@ -16,7 +16,7 @@ import {HistoricalStateRegen} from "./historicalState/historicalStateRegen.js";
16
16
  import {ArchiveMode, ArchiveStoreOpts, StateArchiveStrategy} from "./interface.js";
17
17
  import {FrequencyStateArchiveStrategy} from "./strategies/frequencyStateArchiveStrategy.js";
18
18
  import {archiveBlocks} from "./utils/archiveBlocks.js";
19
- import {pruneHistory} from "./utils/pruneHistory.js";
19
+ import {MAX_PRUNE_BLOCK_SLOTS_PER_RUN, pruneHistory} from "./utils/pruneHistory.js";
20
20
 
21
21
  type ArchiveStoreModules = {
22
22
  chain: IBeaconChain;
@@ -104,7 +104,6 @@ export class ArchiveStore {
104
104
 
105
105
  async init(): Promise<void> {
106
106
  if (this.opts.pruneHistory) {
107
- // prune ALL stale data before starting
108
107
  this.logger.info("Pruning historical data");
109
108
  const {stateCutoffSlot} = await callFnWhenAwait(
110
109
  pruneHistory(
@@ -115,7 +114,8 @@ export class ArchiveStore {
115
114
  this.opts.anchorState.finalizedCheckpoint.epoch,
116
115
  this.chain.clock.currentEpoch,
117
116
  this.statePruneFromSlot,
118
- this.advanceEarliestAvailableSlot
117
+ this.advanceEarliestAvailableSlot,
118
+ MAX_PRUNE_BLOCK_SLOTS_PER_RUN
119
119
  ),
120
120
  () => this.logger.info("Still pruning historical data, please wait..."),
121
121
  30_000,
@@ -262,7 +262,8 @@ export class ArchiveStore {
262
262
  finalizedEpoch,
263
263
  this.chain.clock.currentEpoch,
264
264
  this.statePruneFromSlot,
265
- this.advanceEarliestAvailableSlot
265
+ this.advanceEarliestAvailableSlot,
266
+ MAX_PRUNE_BLOCK_SLOTS_PER_RUN
266
267
  );
267
268
  this.statePruneFromSlot = stateCutoffSlot;
268
269
  timer?.({source: ArchiveStoreTask.PruneHistory});
@@ -1,27 +1,37 @@
1
- import {ChainConfig} from "@lodestar/config";
1
+ import {ChainForkConfig} from "@lodestar/config";
2
2
  import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
3
3
  import {Epoch, Slot} from "@lodestar/types";
4
4
  import {Logger, prettyPrintIndices} from "@lodestar/utils";
5
5
  import {IBeaconDb} from "../../../db/interface.js";
6
6
  import {Metrics} from "../../../metrics/index.js";
7
7
 
8
+ /**
9
+ * Bounds the blocks pruned per run, on startup and on every finalized checkpoint, so a large backlog is
10
+ * drained over many runs instead of stalling one. The cutoff can be far ahead when pruning is first enabled
11
+ * on an existing database, when the retention window shrinks at a fork or when finality resumes after a
12
+ * long period of non-finality.
13
+ */
14
+ export const MAX_PRUNE_BLOCK_SLOTS_PER_RUN = 4096;
15
+
8
16
  export async function pruneHistory(
9
- config: ChainConfig,
17
+ config: ChainForkConfig,
10
18
  db: IBeaconDb,
11
19
  logger: Logger,
12
20
  metrics: Metrics | null | undefined,
13
21
  finalizedEpoch: Epoch,
14
22
  currentEpoch: Epoch,
15
23
  statePruneFromSlot: Slot,
16
- beforePrune: (blockCutoffSlot: Slot) => Promise<void>
24
+ beforePrune: (blockCutoffSlot: Slot) => Promise<void>,
25
+ maxBlockSlots = Infinity
17
26
  ): Promise<{blockCutoffSlot: Slot; stateCutoffSlot: Slot}> {
18
27
  const blockCutoffEpoch = Math.min(
19
28
  // set by config, with underflow protection
20
- Math.max(currentEpoch - config.MIN_EPOCHS_FOR_BLOCK_REQUESTS, 0),
29
+ Math.max(currentEpoch - config.getMinEpochsForBlockRequests(currentEpoch), 0),
21
30
  // ensure that during (extremely lol) long periods of non-finality we don't delete unfinalized epoch data
22
31
  finalizedEpoch
23
32
  );
24
- const blockCutoffSlot = computeStartSlotAtEpoch(blockCutoffEpoch);
33
+ const firstBlockSlot = (await db.blockArchive.firstKey()) ?? 0;
34
+ const blockCutoffSlot = Math.min(computeStartSlotAtEpoch(blockCutoffEpoch), firstBlockSlot + maxBlockSlots);
25
35
  // The latest archived state is the anchor on restart and can trail finalization by a few epochs
26
36
  const lastArchivedStateSlot = (await db.stateArchive.lastKey()) ?? 0;
27
37
  const stateCutoffSlot = Math.min(computeStartSlotAtEpoch(finalizedEpoch), lastArchivedStateSlot);
@@ -29,7 +39,7 @@ export async function pruneHistory(
29
39
  logger.debug("Preparing to prune history", {
30
40
  currentEpoch,
31
41
  finalizedEpoch,
32
- blockCutoffEpoch,
42
+ blockCutoffSlot,
33
43
  statePruneFromSlot,
34
44
  stateCutoffSlot,
35
45
  });
@@ -1,15 +1,12 @@
1
- import {ForkName, ForkPostFulu, ForkPostGloas, ForkPreDeneb, ForkPreGloas, NUMBER_OF_COLUMNS} from "@lodestar/params";
2
- import {BeaconBlockBody, BlobIndex, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu, gloas} from "@lodestar/types";
3
- import {byteArrayEquals, fromHex, prettyBytes, toRootHex, withTimeout} from "@lodestar/utils";
1
+ import {ForkName, ForkPostFulu, ForkPostGloas, ForkPreFulu, ForkPreGloas, NUMBER_OF_COLUMNS} from "@lodestar/params";
2
+ import {BeaconBlockBody, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu, gloas} from "@lodestar/types";
3
+ import {prettyBytes, toRootHex, withTimeout} from "@lodestar/utils";
4
4
  import {VersionedHashes} from "../../../execution/index.js";
5
5
  import {kzgCommitmentToVersionedHash} from "../../../util/blobs.js";
6
6
  import {BlockInputError, BlockInputErrorCode} from "./errors.js";
7
7
  import {
8
- AddBlob,
9
8
  AddBlock,
10
9
  AddColumn,
11
- BlobMeta,
12
- BlobWithSource,
13
10
  BlockInputInit,
14
11
  ColumnWithSource,
15
12
  CreateBlockInputMeta,
@@ -17,22 +14,17 @@ import {
17
14
  DAType,
18
15
  IBlockInput,
19
16
  LogMetaBasic,
20
- LogMetaBlobs,
21
17
  LogMetaColumns,
22
18
  MissingColumnMeta,
23
19
  PromiseParts,
24
20
  SourceMeta,
25
21
  } from "./types.js";
26
22
 
27
- export type BlockInput = BlockInputPreData | BlockInputBlobs | BlockInputColumns | BlockInputNoData;
23
+ export type BlockInput = BlockInputPreData | BlockInputColumns | BlockInputNoData;
28
24
 
29
- export function isBlockInputPreDeneb(blockInput: IBlockInput): blockInput is BlockInputPreData {
25
+ export function isBlockInputPreData(blockInput: IBlockInput): blockInput is BlockInputPreData {
30
26
  return blockInput.type === DAType.PreData;
31
27
  }
32
- export function isBlockInputBlobs(blockInput: IBlockInput): blockInput is BlockInputBlobs {
33
- return blockInput.type === DAType.Blobs;
34
- }
35
-
36
28
  export function isBlockInputColumns(blockInput: IBlockInput): blockInput is BlockInputColumns {
37
29
  return blockInput.type === DAType.Columns;
38
30
  }
@@ -189,16 +181,18 @@ abstract class AbstractBlockInput<F extends ForkName = ForkName, TData extends D
189
181
  type BlockInputPreDataState = {
190
182
  hasBlock: true;
191
183
  hasAllData: true;
192
- block: SignedBeaconBlock<ForkPreDeneb>;
184
+ block: SignedBeaconBlock<ForkPreFulu>;
193
185
  source: SourceMeta;
194
186
  timeCompleteSec: number;
195
187
  };
196
188
 
197
189
  /**
198
- * Pre-DA, BlockInput only has a single state.
190
+ * Pre-fulu BlockInput, it only has a single state.
199
191
  * - the block simply exists
192
+ *
193
+ * Legacy deneb..electra blob sidecars are not tracked.
200
194
  */
201
- export class BlockInputPreData extends AbstractBlockInput<ForkPreDeneb, null> {
195
+ export class BlockInputPreData extends AbstractBlockInput<ForkPreFulu, null> {
202
196
  type = DAType.PreData as const;
203
197
 
204
198
  state: BlockInputPreDataState;
@@ -210,7 +204,7 @@ export class BlockInputPreData extends AbstractBlockInput<ForkPreDeneb, null> {
210
204
  this.blockPromise.resolve(state.block);
211
205
  }
212
206
 
213
- static createFromBlock(props: AddBlock<ForkPreDeneb> & CreateBlockInputMeta): BlockInputPreData {
207
+ static createFromBlock(props: AddBlock<ForkPreFulu> & CreateBlockInputMeta): BlockInputPreData {
214
208
  const init: BlockInputInit = {
215
209
  daOutOfRange: props.daOutOfRange,
216
210
  timeCreated: props.seenTimestampSec,
@@ -250,332 +244,6 @@ export class BlockInputPreData extends AbstractBlockInput<ForkPreDeneb, null> {
250
244
  }
251
245
  }
252
246
 
253
- // Blobs DA
254
-
255
- export type ForkBlobsDA = ForkName.deneb | ForkName.electra;
256
-
257
- type BlockInputBlobsState =
258
- | {
259
- hasBlock: true;
260
- hasAllData: true;
261
- versionedHashes: VersionedHashes;
262
- block: SignedBeaconBlock<ForkBlobsDA>;
263
- source: SourceMeta;
264
- timeCompleteSec: number;
265
- }
266
- | {
267
- hasBlock: true;
268
- hasAllData: false;
269
- versionedHashes: VersionedHashes;
270
- block: SignedBeaconBlock<ForkBlobsDA>;
271
- source: SourceMeta;
272
- }
273
- | {
274
- hasBlock: false;
275
- hasAllData: false;
276
- };
277
-
278
- /**
279
- * With blobs, BlockInput has several states:
280
- * - The block is seen and all blobs are seen
281
- * - The block is seen and all blobs are not yet seen
282
- * - The block is yet not seen and its unknown if all blobs are seen
283
- */
284
- export class BlockInputBlobs extends AbstractBlockInput<ForkBlobsDA, deneb.BlobSidecars> {
285
- type = DAType.Blobs as const;
286
-
287
- state: BlockInputBlobsState;
288
- private blobsCache = new Map<BlobIndex, BlobWithSource>();
289
-
290
- private constructor(init: BlockInputInit, state: BlockInputBlobsState) {
291
- super(init);
292
- this.state = state;
293
- }
294
-
295
- static createFromBlock(props: AddBlock<ForkBlobsDA> & CreateBlockInputMeta): BlockInputBlobs {
296
- const hasAllData = props.daOutOfRange || props.block.message.body.blobKzgCommitments.length === 0;
297
-
298
- const state = {
299
- hasBlock: true,
300
- hasAllData,
301
- versionedHashes: props.block.message.body.blobKzgCommitments.map(kzgCommitmentToVersionedHash),
302
- block: props.block,
303
- source: {
304
- source: props.source,
305
- seenTimestampSec: props.seenTimestampSec,
306
- peerIdStr: props.peerIdStr,
307
- },
308
- timeCompleteSec: hasAllData ? props.seenTimestampSec : undefined,
309
- } as BlockInputBlobsState;
310
- const init: BlockInputInit = {
311
- daOutOfRange: props.daOutOfRange,
312
- timeCreated: props.seenTimestampSec,
313
- forkName: props.forkName,
314
- slot: props.block.message.slot,
315
- blockRootHex: props.blockRootHex,
316
- parentRootHex: toRootHex(props.block.message.parentRoot),
317
- };
318
- const blockInput = new BlockInputBlobs(init, state);
319
- blockInput.blockPromise.resolve(props.block);
320
- if (hasAllData) {
321
- blockInput.dataPromise.resolve([]);
322
- }
323
- return blockInput;
324
- }
325
-
326
- static createFromBlob(props: AddBlob & CreateBlockInputMeta): BlockInputBlobs {
327
- const state: BlockInputBlobsState = {
328
- hasBlock: false,
329
- hasAllData: false,
330
- };
331
- const init: BlockInputInit = {
332
- daOutOfRange: props.daOutOfRange,
333
- timeCreated: props.seenTimestampSec,
334
- forkName: props.forkName,
335
- blockRootHex: props.blockRootHex,
336
- parentRootHex: toRootHex(props.blobSidecar.signedBlockHeader.message.parentRoot),
337
- slot: props.blobSidecar.signedBlockHeader.message.slot,
338
- };
339
- const blockInput = new BlockInputBlobs(init, state);
340
- blockInput.blobsCache.set(props.blobSidecar.index, {
341
- blobSidecar: props.blobSidecar,
342
- source: props.source,
343
- seenTimestampSec: props.seenTimestampSec,
344
- peerIdStr: props.peerIdStr,
345
- });
346
- return blockInput;
347
- }
348
-
349
- getLogMeta(): LogMetaBlobs {
350
- return {
351
- slot: this.slot,
352
- blockRoot: prettyBytes(this.blockRootHex),
353
- timeCreatedSec: this.timeCreatedSec,
354
- expectedBlobs: this.state.hasBlock ? this.state.block.message.body.blobKzgCommitments.length : "unknown",
355
- receivedBlobs: this.blobsCache.size,
356
- };
357
- }
358
-
359
- addBlock(
360
- {blockRootHex, block, source, seenTimestampSec, peerIdStr}: AddBlock<ForkBlobsDA>,
361
- opts = {throwOnDuplicateAdd: true}
362
- ): void {
363
- // this check suffices for checking slot, parentRoot, and forkName
364
- if (blockRootHex !== this.blockRootHex) {
365
- throw new BlockInputError(
366
- {
367
- code: BlockInputErrorCode.MISMATCHED_ROOT_HEX,
368
- blockInputRoot: this.blockRootHex,
369
- mismatchedRoot: blockRootHex,
370
- source,
371
- peerId: `${peerIdStr}`,
372
- },
373
- "addBlock blockRootHex does not match BlockInput.blockRootHex"
374
- );
375
- }
376
-
377
- if (!opts.throwOnDuplicateAdd) {
378
- return;
379
- }
380
-
381
- if (this.state.hasBlock) {
382
- throw new BlockInputError(
383
- {
384
- code: BlockInputErrorCode.INVALID_CONSTRUCTION,
385
- blockRoot: this.blockRootHex,
386
- },
387
- "Cannot addBlock to BlockInputBlobs after it already has a block"
388
- );
389
- }
390
-
391
- for (const {blobSidecar} of this.blobsCache.values()) {
392
- if (!blockAndBlobArePaired(block, blobSidecar)) {
393
- this.blobsCache.delete(blobSidecar.index);
394
- // TODO: (@matthewkeil) spec says to ignore invalid blobs but should we downscore the peer maybe?
395
- // this.logger?.error(`Removing blobIndex=${blobSidecar.index} from BlockInput`, {}, err);
396
- }
397
- }
398
-
399
- const hasAllData = this.blobsCache.size === block.message.body.blobKzgCommitments.length;
400
-
401
- this.state = {
402
- ...this.state,
403
- hasBlock: true,
404
- hasAllData,
405
- block,
406
- versionedHashes: block.message.body.blobKzgCommitments.map(kzgCommitmentToVersionedHash),
407
- source: {
408
- source,
409
- seenTimestampSec,
410
- peerIdStr,
411
- },
412
- timeCompleteSec: hasAllData ? seenTimestampSec : undefined,
413
- } as BlockInputBlobsState;
414
- this.blockPromise.resolve(block);
415
- if (hasAllData) {
416
- this.dataPromise.resolve(this.getBlobs());
417
- }
418
- }
419
-
420
- hasBlob(blobIndex: BlobIndex): boolean {
421
- return this.blobsCache.has(blobIndex);
422
- }
423
-
424
- getBlob(blobIndex: BlobIndex): deneb.BlobSidecar | undefined {
425
- return this.blobsCache.get(blobIndex)?.blobSidecar;
426
- }
427
-
428
- addBlob(
429
- {blockRootHex, blobSidecar, source, peerIdStr, seenTimestampSec}: AddBlob,
430
- opts = {throwOnDuplicateAdd: true}
431
- ): void {
432
- // this check suffices for checking slot, parentRoot, and forkName
433
- if (blockRootHex !== this.blockRootHex) {
434
- throw new BlockInputError(
435
- {
436
- code: BlockInputErrorCode.MISMATCHED_ROOT_HEX,
437
- blockInputRoot: this.blockRootHex,
438
- mismatchedRoot: blockRootHex,
439
- source: source,
440
- peerId: `${peerIdStr}`,
441
- },
442
- "Blob BeaconBlockHeader blockRootHex does not match BlockInput.blockRootHex"
443
- );
444
- }
445
-
446
- const isDuplicate = this.blobsCache.has(blobSidecar.index);
447
- if (isDuplicate && opts.throwOnDuplicateAdd) {
448
- throw new BlockInputError(
449
- {
450
- code: BlockInputErrorCode.INVALID_CONSTRUCTION,
451
- blockRoot: this.blockRootHex,
452
- },
453
- "Cannot addBlob to BlockInputBlobs with duplicate blobIndex"
454
- );
455
- }
456
-
457
- if (this.state.hasBlock) {
458
- assertBlockAndBlobArePaired(this.blockRootHex, this.state.block, blobSidecar);
459
- }
460
-
461
- if (isDuplicate) {
462
- return;
463
- }
464
-
465
- this.blobsCache.set(blobSidecar.index, {blobSidecar, source, seenTimestampSec, peerIdStr});
466
-
467
- if (this.state.hasBlock && this.blobsCache.size === this.state.block.message.body.blobKzgCommitments.length) {
468
- this.state = {
469
- ...this.state,
470
- hasAllData: true,
471
- timeCompleteSec: seenTimestampSec,
472
- };
473
- this.dataPromise.resolve([...this.blobsCache.values()].map(({blobSidecar}) => blobSidecar));
474
- }
475
- }
476
-
477
- getVersionedHashes(): VersionedHashes {
478
- if (!this.state.hasBlock) {
479
- throw new BlockInputError(
480
- {
481
- code: BlockInputErrorCode.INCOMPLETE_DATA,
482
- ...this.getLogMeta(),
483
- },
484
- "Cannot get versioned hashes. Block is unknown"
485
- );
486
- }
487
- return this.state.versionedHashes;
488
- }
489
-
490
- getMissingBlobMeta(): BlobMeta[] {
491
- if (!this.state.hasBlock) {
492
- throw new BlockInputError(
493
- {
494
- code: BlockInputErrorCode.INCOMPLETE_DATA,
495
- ...this.getLogMeta(),
496
- },
497
- "Cannot get missing blobs. Block is unknown"
498
- );
499
- }
500
- if (this.state.hasAllData) {
501
- return [];
502
- }
503
-
504
- const blobMeta: BlobMeta[] = [];
505
- const versionedHashes = this.state.versionedHashes;
506
- for (let index = 0; index < versionedHashes.length; index++) {
507
- if (!this.blobsCache.has(index)) {
508
- blobMeta.push({
509
- index,
510
- blockRoot: fromHex(this.blockRootHex),
511
- versionedHash: versionedHashes[index],
512
- });
513
- }
514
- }
515
- return blobMeta;
516
- }
517
-
518
- getAllBlobsWithSource(): BlobWithSource[] {
519
- if (!this.state.hasAllData) {
520
- throw new BlockInputError(
521
- {
522
- code: BlockInputErrorCode.INCOMPLETE_DATA,
523
- ...this.getLogMeta(),
524
- },
525
- "Cannot get all blobs. DA status is not complete"
526
- );
527
- }
528
- return [...this.blobsCache.values()];
529
- }
530
-
531
- getBlobs(): deneb.BlobSidecars {
532
- return this.getAllBlobsWithSource().map(({blobSidecar}) => blobSidecar);
533
- }
534
-
535
- getSerializedCacheKeys(): object[] {
536
- const objects: object[] = [];
537
-
538
- if (this.state.hasBlock) {
539
- objects.push(this.state.block);
540
- }
541
-
542
- for (const {blobSidecar} of this.blobsCache.values()) {
543
- objects.push(blobSidecar);
544
- }
545
-
546
- return objects;
547
- }
548
- }
549
-
550
- function blockAndBlobArePaired(block: SignedBeaconBlock<ForkBlobsDA>, blobSidecar: deneb.BlobSidecar): boolean {
551
- const blockCommitment = block.message.body.blobKzgCommitments[blobSidecar.index];
552
- if (!blockCommitment || !blobSidecar.kzgCommitment) {
553
- return false;
554
- }
555
- return byteArrayEquals(blockCommitment, blobSidecar.kzgCommitment);
556
- }
557
-
558
- function assertBlockAndBlobArePaired(
559
- blockRootHex: string,
560
- block: SignedBeaconBlock<ForkBlobsDA>,
561
- blobSidecar: deneb.BlobSidecar
562
- ): void {
563
- if (!blockAndBlobArePaired(block, blobSidecar)) {
564
- // TODO: (@matthewkeil) should this eject the bad blob instead? No way to tell if the blob or the block
565
- // has the invalid commitment. Guessing it would be the blob though because we match via block
566
- // hashTreeRoot and we do not take a hashTreeRoot of the BlobSidecar
567
- throw new BlockInputError(
568
- {
569
- code: BlockInputErrorCode.MISMATCHED_KZG_COMMITMENT,
570
- blockRoot: blockRootHex,
571
- slot: block.message.slot,
572
- sidecarIndex: blobSidecar.index,
573
- },
574
- "BlobSidecar commitment does not match block commitment"
575
- );
576
- }
577
- }
578
-
579
247
  // Columns DA
580
248
 
581
249
  export type ForkColumnsDA = ForkName.fulu;
@@ -1,7 +1,7 @@
1
1
  import {Slot} from "@lodestar/types";
2
2
  import {LodestarError} from "@lodestar/utils";
3
3
  import {PeerIdStr} from "../../../util/peerId.js";
4
- import {BlockInputSource, LogMetaBlobs, LogMetaColumns} from "./types.js";
4
+ import {BlockInputSource, LogMetaColumns} from "./types.js";
5
5
 
6
6
  export enum BlockInputErrorCode {
7
7
  // Bad Arguments
@@ -42,7 +42,6 @@ export type BlockInputErrorType =
42
42
  sidecarIndex: number;
43
43
  commitmentIndex?: number;
44
44
  }
45
- | (LogMetaBlobs & {code: BlockInputErrorCode.INCOMPLETE_DATA})
46
45
  | (LogMetaColumns & {code: BlockInputErrorCode.INCOMPLETE_DATA});
47
46
 
48
47
  export class BlockInputError extends LodestarError<BlockInputErrorType> {}
@@ -1,15 +1,14 @@
1
1
  import {ForkName} from "@lodestar/params";
2
- import {ColumnIndex, DataColumnSidecar, RootHex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
2
+ import {ColumnIndex, DataColumnSidecar, RootHex, SignedBeaconBlock, Slot, fulu} from "@lodestar/types";
3
3
  import {VersionedHashes} from "../../../execution/index.js";
4
4
 
5
5
  export enum DAType {
6
6
  PreData = "pre-data",
7
- Blobs = "blobs",
8
7
  Columns = "columns",
9
8
  NoData = "no-data",
10
9
  }
11
10
 
12
- export type DAData = null | deneb.BlobSidecars | fulu.DataColumnSidecar[];
11
+ export type DAData = null | fulu.DataColumnSidecar[];
13
12
 
14
13
  /**
15
14
  * Represents were input originated. Blocks and Data can come from different
@@ -37,11 +36,6 @@ export type LogMetaBasic = {
37
36
  timeCreatedSec: number;
38
37
  };
39
38
 
40
- export type LogMetaBlobs = LogMetaBasic & {
41
- expectedBlobs: number | string;
42
- receivedBlobs: number;
43
- };
44
-
45
39
  export type LogMetaColumns = LogMetaBasic & {
46
40
  expectedColumns: number;
47
41
  receivedColumns: number;
@@ -55,8 +49,6 @@ export type SourceMeta = {
55
49
 
56
50
  export type BlockWithSource = SourceMeta & {block: SignedBeaconBlock; blockRootHex: RootHex};
57
51
 
58
- export type BlobWithSource = SourceMeta & {blobSidecar: deneb.BlobSidecar};
59
-
60
52
  export type ColumnWithSource = SourceMeta & {columnSidecar: fulu.DataColumnSidecar};
61
53
 
62
54
  export type BlockHeaderMeta = {
@@ -82,20 +74,10 @@ export type AddBlock<F extends ForkName = ForkName> = SourceMeta & {
82
74
  blockRootHex: string;
83
75
  };
84
76
 
85
- export type AddBlob = BlobWithSource & {
86
- blockRootHex: RootHex;
87
- };
88
-
89
77
  export type AddColumn = ColumnWithSource & {
90
78
  blockRootHex: RootHex;
91
79
  };
92
80
 
93
- export type BlobMeta = {
94
- index: number;
95
- blockRoot: Uint8Array;
96
- versionedHash: Uint8Array;
97
- };
98
-
99
81
  export type MissingColumnMeta = {
100
82
  missing: ColumnIndex[];
101
83
  versionedHashes: VersionedHashes;