@lodestar/beacon-node 1.51.0-dev.4671dbfa39 → 1.51.0-dev.4a8c0994a0

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 (506) 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/beacon/state/utils.d.ts +1 -1
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  9. package/lib/api/impl/validator/index.d.ts +6 -0
  10. package/lib/api/impl/validator/index.d.ts.map +1 -1
  11. package/lib/api/impl/validator/index.js +38 -25
  12. package/lib/api/impl/validator/index.js.map +1 -1
  13. package/lib/chain/GetBlobsTracker.d.ts +2 -2
  14. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  15. package/lib/chain/GetBlobsTracker.js +7 -31
  16. package/lib/chain/GetBlobsTracker.js.map +1 -1
  17. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  18. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  19. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  20. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  21. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  22. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  23. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  24. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  25. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  26. package/lib/chain/blocks/blockInput/types.js +0 -1
  27. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  28. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  29. package/lib/chain/blocks/importBlock.js +36 -53
  30. package/lib/chain/blocks/importBlock.js.map +1 -1
  31. package/lib/chain/blocks/importExecutionPayload.d.ts +6 -10
  32. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  33. package/lib/chain/blocks/importExecutionPayload.js +26 -17
  34. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  35. package/lib/chain/blocks/index.d.ts.map +1 -1
  36. package/lib/chain/blocks/index.js +2 -2
  37. package/lib/chain/blocks/index.js.map +1 -1
  38. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +10 -7
  39. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  40. package/lib/chain/blocks/payloadEnvelopeProcessor.js +21 -16
  41. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  42. package/lib/chain/blocks/types.d.ts +4 -20
  43. package/lib/chain/blocks/types.d.ts.map +1 -1
  44. package/lib/chain/blocks/types.js +0 -24
  45. package/lib/chain/blocks/types.js.map +1 -1
  46. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  47. package/lib/chain/blocks/verifyBlock.js +17 -6
  48. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  49. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  50. package/lib/chain/blocks/verifyBlocksDataAvailability.js +6 -1
  51. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  52. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  53. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  54. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  55. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  56. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  57. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  58. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  59. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  60. package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
  61. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  62. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  63. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +1 -3
  64. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  65. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  66. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  67. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  68. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  69. package/lib/chain/bls/interface.d.ts +2 -0
  70. package/lib/chain/bls/interface.d.ts.map +1 -1
  71. package/lib/chain/bls/multithread/index.d.ts +1 -1
  72. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  73. package/lib/chain/bls/multithread/index.js +45 -17
  74. package/lib/chain/bls/multithread/index.js.map +1 -1
  75. package/lib/chain/bls/multithread/types.d.ts +1 -1
  76. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  77. package/lib/chain/bls/multithread/worker.js +1 -1
  78. package/lib/chain/bls/multithread/worker.js.map +1 -1
  79. package/lib/chain/bls/singleThread.js +1 -1
  80. package/lib/chain/bls/singleThread.js.map +1 -1
  81. package/lib/chain/bls/utils.js +1 -1
  82. package/lib/chain/bls/utils.js.map +1 -1
  83. package/lib/chain/chain.d.ts +25 -4
  84. package/lib/chain/chain.d.ts.map +1 -1
  85. package/lib/chain/chain.js +120 -39
  86. package/lib/chain/chain.js.map +1 -1
  87. package/lib/chain/emitter.d.ts +7 -7
  88. package/lib/chain/emitter.d.ts.map +1 -1
  89. package/lib/chain/emitter.js +5 -5
  90. package/lib/chain/emitter.js.map +1 -1
  91. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  92. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  93. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  94. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  95. package/lib/chain/errors/index.d.ts +0 -1
  96. package/lib/chain/errors/index.d.ts.map +1 -1
  97. package/lib/chain/errors/index.js +0 -1
  98. package/lib/chain/errors/index.js.map +1 -1
  99. package/lib/chain/forkChoice/index.d.ts +11 -1
  100. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  101. package/lib/chain/forkChoice/index.js +11 -0
  102. package/lib/chain/forkChoice/index.js.map +1 -1
  103. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  104. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  105. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  106. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  107. package/lib/chain/interface.d.ts +8 -5
  108. package/lib/chain/interface.d.ts.map +1 -1
  109. package/lib/chain/interface.js.map +1 -1
  110. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  111. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  112. package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
  113. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  114. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  115. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  116. package/lib/chain/opPools/attestationPool.js +15 -4
  117. package/lib/chain/opPools/attestationPool.js.map +1 -1
  118. package/lib/chain/opPools/index.d.ts +1 -0
  119. package/lib/chain/opPools/index.d.ts.map +1 -1
  120. package/lib/chain/opPools/index.js +1 -0
  121. package/lib/chain/opPools/index.js.map +1 -1
  122. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  123. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  124. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  125. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  126. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  127. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  128. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  129. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  130. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  131. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  132. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  133. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  134. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  135. package/lib/chain/opPools/utils.d.ts +1 -1
  136. package/lib/chain/opPools/utils.d.ts.map +1 -1
  137. package/lib/chain/opPools/utils.js +1 -1
  138. package/lib/chain/opPools/utils.js.map +1 -1
  139. package/lib/chain/options.d.ts +5 -2
  140. package/lib/chain/options.d.ts.map +1 -1
  141. package/lib/chain/options.js.map +1 -1
  142. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  143. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  144. package/lib/chain/produceBlock/produceBlockBody.js +3 -2
  145. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  146. package/lib/chain/proposerTracker.d.ts +31 -0
  147. package/lib/chain/proposerTracker.d.ts.map +1 -0
  148. package/lib/chain/proposerTracker.js +75 -0
  149. package/lib/chain/proposerTracker.js.map +1 -0
  150. package/lib/chain/regen/interface.d.ts +1 -1
  151. package/lib/chain/regen/interface.d.ts.map +1 -1
  152. package/lib/chain/regen/queued.d.ts +1 -1
  153. package/lib/chain/regen/queued.d.ts.map +1 -1
  154. package/lib/chain/regen/queued.js +5 -3
  155. package/lib/chain/regen/queued.js.map +1 -1
  156. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  157. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  158. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  159. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  160. package/lib/chain/validation/executionPayloadBid.js +13 -13
  161. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  162. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  163. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  164. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  165. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  166. package/lib/chain/validatorMonitor.d.ts +1 -2
  167. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  168. package/lib/chain/validatorMonitor.js +0 -3
  169. package/lib/chain/validatorMonitor.js.map +1 -1
  170. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  171. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  172. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  173. package/lib/db/flatFileStore/slotIndex.js +2 -2
  174. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  175. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  176. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  177. package/lib/db/repositories/blobSidecars.js +0 -1
  178. package/lib/db/repositories/blobSidecars.js.map +1 -1
  179. package/lib/execution/builder/apiClient.d.ts +14 -8
  180. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  181. package/lib/execution/builder/apiClient.js +12 -10
  182. package/lib/execution/builder/apiClient.js.map +1 -1
  183. package/lib/execution/builder/http.d.ts +2 -0
  184. package/lib/execution/builder/http.d.ts.map +1 -1
  185. package/lib/execution/builder/http.js +2 -0
  186. package/lib/execution/builder/http.js.map +1 -1
  187. package/lib/execution/engine/http.d.ts +4 -6
  188. package/lib/execution/engine/http.d.ts.map +1 -1
  189. package/lib/execution/engine/http.js +8 -10
  190. package/lib/execution/engine/http.js.map +1 -1
  191. package/lib/execution/engine/interface.d.ts +17 -5
  192. package/lib/execution/engine/interface.d.ts.map +1 -1
  193. package/lib/execution/engine/interface.js.map +1 -1
  194. package/lib/execution/engine/jsonRpcTransport.d.ts +2 -4
  195. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  196. package/lib/execution/engine/jsonRpcTransport.js +2 -12
  197. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  198. package/lib/execution/engine/mock.d.ts +0 -1
  199. package/lib/execution/engine/mock.d.ts.map +1 -1
  200. package/lib/execution/engine/mock.js +0 -4
  201. package/lib/execution/engine/mock.js.map +1 -1
  202. package/lib/execution/engine/restTransport.d.ts +2 -4
  203. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  204. package/lib/execution/engine/restTransport.js +1 -15
  205. package/lib/execution/engine/restTransport.js.map +1 -1
  206. package/lib/execution/engine/sszTypes.d.ts +0 -9
  207. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  208. package/lib/execution/engine/sszTypes.js +0 -5
  209. package/lib/execution/engine/sszTypes.js.map +1 -1
  210. package/lib/execution/engine/transport.d.ts +1 -14
  211. package/lib/execution/engine/transport.d.ts.map +1 -1
  212. package/lib/execution/engine/types.d.ts +0 -8
  213. package/lib/execution/engine/types.d.ts.map +1 -1
  214. package/lib/execution/engine/types.js +2 -10
  215. package/lib/execution/engine/types.js.map +1 -1
  216. package/lib/execution/engine/utils.d.ts.map +1 -1
  217. package/lib/execution/engine/utils.js +3 -2
  218. package/lib/execution/engine/utils.js.map +1 -1
  219. package/lib/index.d.ts +1 -1
  220. package/lib/index.d.ts.map +1 -1
  221. package/lib/index.js +1 -1
  222. package/lib/index.js.map +1 -1
  223. package/lib/metrics/metrics/beacon.d.ts +0 -9
  224. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  225. package/lib/metrics/metrics/beacon.js +0 -30
  226. package/lib/metrics/metrics/beacon.js.map +1 -1
  227. package/lib/metrics/metrics/lodestar.d.ts +30 -8
  228. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  229. package/lib/metrics/metrics/lodestar.js +79 -18
  230. package/lib/metrics/metrics/lodestar.js.map +1 -1
  231. package/lib/metrics/server/http.js +5 -5
  232. package/lib/metrics/server/http.js.map +1 -1
  233. package/lib/network/core/networkCore.d.ts +4 -1
  234. package/lib/network/core/networkCore.d.ts.map +1 -1
  235. package/lib/network/core/networkCore.js +7 -0
  236. package/lib/network/core/networkCore.js.map +1 -1
  237. package/lib/network/core/networkCoreWorker.js +2 -0
  238. package/lib/network/core/networkCoreWorker.js.map +1 -1
  239. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  240. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  241. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  242. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  243. package/lib/network/core/types.d.ts +6 -1
  244. package/lib/network/core/types.d.ts.map +1 -1
  245. package/lib/network/gossip/gossipsub.d.ts +1 -0
  246. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  247. package/lib/network/gossip/gossipsub.js +10 -0
  248. package/lib/network/gossip/gossipsub.js.map +1 -1
  249. package/lib/network/gossip/interface.d.ts +1 -8
  250. package/lib/network/gossip/interface.d.ts.map +1 -1
  251. package/lib/network/gossip/interface.js +0 -1
  252. package/lib/network/gossip/interface.js.map +1 -1
  253. package/lib/network/gossip/topic.d.ts +0 -16
  254. package/lib/network/gossip/topic.d.ts.map +1 -1
  255. package/lib/network/gossip/topic.js +0 -23
  256. package/lib/network/gossip/topic.js.map +1 -1
  257. package/lib/network/interface.d.ts +4 -5
  258. package/lib/network/interface.d.ts.map +1 -1
  259. package/lib/network/libp2p/index.d.ts.map +1 -1
  260. package/lib/network/libp2p/index.js +5 -1
  261. package/lib/network/libp2p/index.js.map +1 -1
  262. package/lib/network/network.d.ts +8 -7
  263. package/lib/network/network.d.ts.map +1 -1
  264. package/lib/network/network.js +53 -37
  265. package/lib/network/network.js.map +1 -1
  266. package/lib/network/options.d.ts +2 -0
  267. package/lib/network/options.d.ts.map +1 -1
  268. package/lib/network/options.js +2 -0
  269. package/lib/network/options.js.map +1 -1
  270. package/lib/network/peers/peerManager.d.ts +2 -1
  271. package/lib/network/peers/peerManager.d.ts.map +1 -1
  272. package/lib/network/peers/peerManager.js +28 -1
  273. package/lib/network/peers/peerManager.js.map +1 -1
  274. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  275. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  276. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  277. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  278. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  279. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  280. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  281. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  282. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  283. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  284. package/lib/network/peers/utils/subnetMap.js +6 -3
  285. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  286. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  287. package/lib/network/processor/extractSlotRootFns.js +1 -8
  288. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  289. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  290. package/lib/network/processor/gossipHandlers.js +46 -126
  291. package/lib/network/processor/gossipHandlers.js.map +1 -1
  292. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  293. package/lib/network/processor/gossipQueues/index.js +0 -6
  294. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  295. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  296. package/lib/network/processor/gossipValidatorFn.js +1 -5
  297. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  298. package/lib/network/processor/index.d.ts +6 -0
  299. package/lib/network/processor/index.d.ts.map +1 -1
  300. package/lib/network/processor/index.js +29 -4
  301. package/lib/network/processor/index.js.map +1 -1
  302. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  303. package/lib/network/reqresp/ReqRespBeaconNode.js +0 -3
  304. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  305. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  306. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  307. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  308. package/lib/network/reqresp/handlers/index.js +1 -12
  309. package/lib/network/reqresp/handlers/index.js.map +1 -1
  310. package/lib/network/reqresp/protocols.d.ts +0 -2
  311. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  312. package/lib/network/reqresp/protocols.js +0 -10
  313. package/lib/network/reqresp/protocols.js.map +1 -1
  314. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  315. package/lib/network/reqresp/rateLimit.js +1 -17
  316. package/lib/network/reqresp/rateLimit.js.map +1 -1
  317. package/lib/network/reqresp/types.d.ts +2 -8
  318. package/lib/network/reqresp/types.d.ts.map +1 -1
  319. package/lib/network/reqresp/types.js +1 -7
  320. package/lib/network/reqresp/types.js.map +1 -1
  321. package/lib/network/subnets/attnetsService.d.ts +35 -5
  322. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  323. package/lib/network/subnets/attnetsService.js +84 -6
  324. package/lib/network/subnets/attnetsService.js.map +1 -1
  325. package/lib/network/subnets/interface.d.ts +7 -0
  326. package/lib/network/subnets/interface.d.ts.map +1 -1
  327. package/lib/network/subnets/interface.js.map +1 -1
  328. package/lib/node/nodejs.d.ts +3 -1
  329. package/lib/node/nodejs.d.ts.map +1 -1
  330. package/lib/node/nodejs.js +38 -20
  331. package/lib/node/nodejs.js.map +1 -1
  332. package/lib/node/options.d.ts +3 -1
  333. package/lib/node/options.d.ts.map +1 -1
  334. package/lib/node/options.js +4 -2
  335. package/lib/node/options.js.map +1 -1
  336. package/lib/sync/range/batch.d.ts +2 -3
  337. package/lib/sync/range/batch.d.ts.map +1 -1
  338. package/lib/sync/range/batch.js +9 -22
  339. package/lib/sync/range/batch.js.map +1 -1
  340. package/lib/sync/range/chain.d.ts.map +1 -1
  341. package/lib/sync/range/chain.js +2 -15
  342. package/lib/sync/range/chain.js.map +1 -1
  343. package/lib/sync/sync.d.ts +15 -0
  344. package/lib/sync/sync.d.ts.map +1 -1
  345. package/lib/sync/sync.js +103 -25
  346. package/lib/sync/sync.js.map +1 -1
  347. package/lib/sync/unknownBlock.d.ts.map +1 -1
  348. package/lib/sync/unknownBlock.js +1 -7
  349. package/lib/sync/unknownBlock.js.map +1 -1
  350. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  351. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  352. package/lib/sync/utils/downloadByRange.js +24 -128
  353. package/lib/sync/utils/downloadByRange.js.map +1 -1
  354. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  355. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  356. package/lib/sync/utils/downloadByRoot.js +14 -99
  357. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  358. package/lib/util/blobs.d.ts +1 -7
  359. package/lib/util/blobs.d.ts.map +1 -1
  360. package/lib/util/blobs.js +0 -19
  361. package/lib/util/blobs.js.map +1 -1
  362. package/lib/util/execution.d.ts +3 -4
  363. package/lib/util/execution.d.ts.map +1 -1
  364. package/lib/util/execution.js +1 -73
  365. package/lib/util/execution.js.map +1 -1
  366. package/lib/util/file.d.ts.map +1 -1
  367. package/lib/util/file.js +8 -9
  368. package/lib/util/file.js.map +1 -1
  369. package/lib/util/sszBytes.d.ts +5 -1
  370. package/lib/util/sszBytes.d.ts.map +1 -1
  371. package/lib/util/sszBytes.js +34 -17
  372. package/lib/util/sszBytes.js.map +1 -1
  373. package/lib/util/types.d.ts +0 -5
  374. package/lib/util/types.d.ts.map +1 -1
  375. package/lib/util/types.js +1 -2
  376. package/lib/util/types.js.map +1 -1
  377. package/package.json +16 -17
  378. package/src/api/impl/beacon/blocks/index.ts +24 -64
  379. package/src/api/impl/beacon/pool/index.ts +26 -0
  380. package/src/api/impl/beacon/state/utils.ts +1 -1
  381. package/src/api/impl/validator/index.ts +43 -29
  382. package/src/chain/GetBlobsTracker.ts +10 -39
  383. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  384. package/src/chain/blocks/blockInput/errors.ts +1 -2
  385. package/src/chain/blocks/blockInput/types.ts +2 -20
  386. package/src/chain/blocks/importBlock.ts +56 -72
  387. package/src/chain/blocks/importExecutionPayload.ts +44 -33
  388. package/src/chain/blocks/index.ts +5 -2
  389. package/src/chain/blocks/payloadEnvelopeProcessor.ts +32 -21
  390. package/src/chain/blocks/types.ts +5 -31
  391. package/src/chain/blocks/verifyBlock.ts +30 -16
  392. package/src/chain/blocks/verifyBlocksDataAvailability.ts +6 -1
  393. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  394. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  395. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
  396. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +1 -3
  397. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  398. package/src/chain/bls/interface.ts +2 -0
  399. package/src/chain/bls/multithread/index.ts +43 -19
  400. package/src/chain/bls/multithread/types.ts +1 -1
  401. package/src/chain/bls/multithread/worker.ts +1 -5
  402. package/src/chain/bls/singleThread.ts +1 -1
  403. package/src/chain/bls/utils.ts +1 -1
  404. package/src/chain/chain.ts +136 -38
  405. package/src/chain/emitter.ts +8 -8
  406. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  407. package/src/chain/errors/index.ts +0 -1
  408. package/src/chain/forkChoice/index.ts +11 -0
  409. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  410. package/src/chain/interface.ts +8 -4
  411. package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
  412. package/src/chain/opPools/attestationPool.ts +16 -4
  413. package/src/chain/opPools/index.ts +1 -0
  414. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  415. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  416. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  417. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  418. package/src/chain/opPools/utils.ts +1 -1
  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/executionPayloadBid.ts +14 -13
  426. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  427. package/src/chain/validatorMonitor.ts +0 -6
  428. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  429. package/src/db/flatFileStore/slotIndex.ts +4 -3
  430. package/src/db/repositories/blobSidecars.ts +0 -1
  431. package/src/execution/builder/apiClient.ts +16 -13
  432. package/src/execution/builder/http.ts +4 -0
  433. package/src/execution/engine/http.ts +19 -42
  434. package/src/execution/engine/interface.ts +18 -9
  435. package/src/execution/engine/jsonRpcTransport.ts +10 -22
  436. package/src/execution/engine/mock.ts +0 -7
  437. package/src/execution/engine/restTransport.ts +3 -22
  438. package/src/execution/engine/sszTypes.ts +0 -9
  439. package/src/execution/engine/transport.ts +8 -17
  440. package/src/execution/engine/types.ts +3 -18
  441. package/src/execution/engine/utils.ts +4 -2
  442. package/src/index.ts +1 -1
  443. package/src/metrics/metrics/beacon.ts +0 -30
  444. package/src/metrics/metrics/lodestar.ts +80 -18
  445. package/src/metrics/server/http.ts +5 -5
  446. package/src/network/core/networkCore.ts +11 -1
  447. package/src/network/core/networkCoreWorker.ts +2 -0
  448. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  449. package/src/network/core/types.ts +6 -1
  450. package/src/network/gossip/gossipsub.ts +11 -0
  451. package/src/network/gossip/interface.ts +0 -5
  452. package/src/network/gossip/topic.ts +0 -25
  453. package/src/network/interface.ts +2 -5
  454. package/src/network/libp2p/index.ts +5 -1
  455. package/src/network/network.ts +55 -60
  456. package/src/network/options.ts +4 -0
  457. package/src/network/peers/peerManager.ts +28 -3
  458. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  459. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  460. package/src/network/peers/utils/subnetMap.ts +6 -3
  461. package/src/network/processor/extractSlotRootFns.ts +0 -9
  462. package/src/network/processor/gossipHandlers.ts +59 -159
  463. package/src/network/processor/gossipQueues/index.ts +0 -6
  464. package/src/network/processor/gossipValidatorFn.ts +0 -5
  465. package/src/network/processor/index.ts +25 -4
  466. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -7
  467. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  468. package/src/network/reqresp/handlers/index.ts +0 -17
  469. package/src/network/reqresp/protocols.ts +0 -12
  470. package/src/network/reqresp/rateLimit.ts +1 -17
  471. package/src/network/reqresp/types.ts +0 -13
  472. package/src/network/subnets/attnetsService.ts +94 -6
  473. package/src/network/subnets/interface.ts +7 -0
  474. package/src/node/nodejs.ts +40 -21
  475. package/src/node/options.ts +5 -1
  476. package/src/sync/range/batch.ts +9 -21
  477. package/src/sync/range/chain.ts +2 -14
  478. package/src/sync/sync.ts +108 -26
  479. package/src/sync/unknownBlock.ts +1 -8
  480. package/src/sync/utils/downloadByRange.ts +31 -230
  481. package/src/sync/utils/downloadByRoot.ts +15 -142
  482. package/src/util/blobs.ts +0 -34
  483. package/src/util/execution.ts +8 -102
  484. package/src/util/file.ts +8 -9
  485. package/src/util/sszBytes.ts +40 -22
  486. package/src/util/types.ts +1 -8
  487. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  488. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  489. package/lib/chain/errors/blobSidecarError.js +0 -38
  490. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  491. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  492. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  493. package/lib/chain/validation/blobSidecar.js +0 -276
  494. package/lib/chain/validation/blobSidecar.js.map +0 -1
  495. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  496. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  497. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  498. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  499. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  500. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  501. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  502. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  503. package/src/chain/errors/blobSidecarError.ts +0 -70
  504. package/src/chain/validation/blobSidecar.ts +0 -357
  505. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  506. 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,
@@ -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;