@lodestar/beacon-node 1.43.0-dev.2740f92909 → 1.43.0-dev.2fba242f5d

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 (387) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +17 -9
  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 +45 -2
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/utils.d.ts +2 -2
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  10. package/lib/api/impl/debug/index.d.ts.map +1 -1
  11. package/lib/api/impl/debug/index.js +0 -1
  12. package/lib/api/impl/debug/index.js.map +1 -1
  13. package/lib/api/impl/lodestar/index.js +1 -1
  14. package/lib/api/impl/lodestar/index.js.map +1 -1
  15. package/lib/api/impl/validator/index.d.ts.map +1 -1
  16. package/lib/api/impl/validator/index.js +67 -5
  17. package/lib/api/impl/validator/index.js.map +1 -1
  18. package/lib/chain/GetBlobsTracker.d.ts +1 -1
  19. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  20. package/lib/chain/GetBlobsTracker.js +1 -2
  21. package/lib/chain/GetBlobsTracker.js.map +1 -1
  22. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  23. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  24. package/lib/chain/archiveStore/interface.d.ts +4 -4
  25. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  26. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  27. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  28. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -4
  29. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  30. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +2 -2
  31. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  32. package/lib/chain/archiveStore/utils/archiveBlocks.js +110 -58
  33. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  34. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  35. package/lib/chain/blocks/importBlock.js +49 -53
  36. package/lib/chain/blocks/importBlock.js.map +1 -1
  37. package/lib/chain/blocks/importExecutionPayload.d.ts +28 -14
  38. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  39. package/lib/chain/blocks/importExecutionPayload.js +88 -88
  40. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  41. package/lib/chain/blocks/index.d.ts +5 -3
  42. package/lib/chain/blocks/index.d.ts.map +1 -1
  43. package/lib/chain/blocks/index.js +59 -26
  44. package/lib/chain/blocks/index.js.map +1 -1
  45. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +4 -0
  46. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  47. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +25 -1
  48. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  49. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +1 -0
  50. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  51. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
  52. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  53. package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -5
  54. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  55. package/lib/chain/blocks/types.d.ts +16 -21
  56. package/lib/chain/blocks/types.d.ts.map +1 -1
  57. package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
  58. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  59. package/lib/chain/blocks/utils/chainSegment.js +89 -12
  60. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  61. package/lib/chain/blocks/verifyBlock.d.ts +5 -3
  62. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  63. package/lib/chain/blocks/verifyBlock.js +50 -7
  64. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  65. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
  66. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  67. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -2
  68. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  69. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
  70. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  71. package/lib/chain/blocks/verifyBlocksSanityChecks.js +25 -5
  72. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  73. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  74. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  75. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +76 -0
  76. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  77. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
  78. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
  79. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +30 -0
  80. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
  81. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  82. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
  83. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
  84. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
  85. package/lib/chain/chain.d.ts +8 -6
  86. package/lib/chain/chain.d.ts.map +1 -1
  87. package/lib/chain/chain.js +38 -43
  88. package/lib/chain/chain.js.map +1 -1
  89. package/lib/chain/emitter.d.ts +16 -15
  90. package/lib/chain/emitter.d.ts.map +1 -1
  91. package/lib/chain/emitter.js +5 -4
  92. package/lib/chain/emitter.js.map +1 -1
  93. package/lib/chain/errors/attestationError.d.ts +8 -1
  94. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  95. package/lib/chain/errors/attestationError.js +4 -0
  96. package/lib/chain/errors/attestationError.js.map +1 -1
  97. package/lib/chain/errors/blockError.d.ts +8 -1
  98. package/lib/chain/errors/blockError.d.ts.map +1 -1
  99. package/lib/chain/errors/blockError.js +2 -0
  100. package/lib/chain/errors/blockError.js.map +1 -1
  101. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  102. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  103. package/lib/chain/errors/executionPayloadBid.js +1 -0
  104. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  105. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  106. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  107. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  108. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  109. package/lib/chain/errors/index.d.ts +1 -0
  110. package/lib/chain/errors/index.d.ts.map +1 -1
  111. package/lib/chain/errors/index.js +1 -0
  112. package/lib/chain/errors/index.js.map +1 -1
  113. package/lib/chain/errors/proposerPreferences.d.ts +33 -0
  114. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  115. package/lib/chain/errors/proposerPreferences.js +13 -0
  116. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  117. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  118. package/lib/chain/forkChoice/index.js +11 -15
  119. package/lib/chain/forkChoice/index.js.map +1 -1
  120. package/lib/chain/interface.d.ts +7 -5
  121. package/lib/chain/interface.d.ts.map +1 -1
  122. package/lib/chain/interface.js.map +1 -1
  123. package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
  124. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  125. package/lib/chain/opPools/payloadAttestationPool.js +26 -4
  126. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  127. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  128. package/lib/chain/prepareNextSlot.js +47 -23
  129. package/lib/chain/prepareNextSlot.js.map +1 -1
  130. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +3 -9
  131. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  132. package/lib/chain/produceBlock/computeNewStateRoot.js +5 -32
  133. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  134. package/lib/chain/produceBlock/produceBlockBody.d.ts +12 -8
  135. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  136. package/lib/chain/produceBlock/produceBlockBody.js +67 -25
  137. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  138. package/lib/chain/regen/errors.d.ts +1 -11
  139. package/lib/chain/regen/errors.d.ts.map +1 -1
  140. package/lib/chain/regen/errors.js +0 -2
  141. package/lib/chain/regen/errors.js.map +1 -1
  142. package/lib/chain/regen/interface.d.ts +7 -12
  143. package/lib/chain/regen/interface.d.ts.map +1 -1
  144. package/lib/chain/regen/interface.js +1 -0
  145. package/lib/chain/regen/interface.js.map +1 -1
  146. package/lib/chain/regen/queued.d.ts +6 -11
  147. package/lib/chain/regen/queued.d.ts.map +1 -1
  148. package/lib/chain/regen/queued.js +9 -44
  149. package/lib/chain/regen/queued.js.map +1 -1
  150. package/lib/chain/regen/regen.d.ts +0 -5
  151. package/lib/chain/regen/regen.d.ts.map +1 -1
  152. package/lib/chain/regen/regen.js +8 -38
  153. package/lib/chain/regen/regen.js.map +1 -1
  154. package/lib/chain/seenCache/index.d.ts +1 -0
  155. package/lib/chain/seenCache/index.d.ts.map +1 -1
  156. package/lib/chain/seenCache/index.js +1 -0
  157. package/lib/chain/seenCache/index.js.map +1 -1
  158. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +19 -6
  159. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  160. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +40 -22
  161. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  162. package/lib/chain/seenCache/seenProposerPreferences.d.ts +15 -0
  163. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  164. package/lib/chain/seenCache/seenProposerPreferences.js +25 -0
  165. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  166. package/lib/chain/stateCache/datastore/db.d.ts +5 -4
  167. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  168. package/lib/chain/stateCache/datastore/db.js +10 -32
  169. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  170. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  171. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  172. package/lib/chain/stateCache/datastore/file.js +5 -5
  173. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  174. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  175. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  176. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
  177. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  178. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
  179. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  180. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
  181. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  182. package/lib/chain/stateCache/persistentCheckpointsCache.js +120 -216
  183. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  184. package/lib/chain/stateCache/types.d.ts +8 -15
  185. package/lib/chain/stateCache/types.d.ts.map +1 -1
  186. package/lib/chain/stateCache/types.js.map +1 -1
  187. package/lib/chain/validation/aggregateAndProof.js +12 -0
  188. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  189. package/lib/chain/validation/attestation.d.ts.map +1 -1
  190. package/lib/chain/validation/attestation.js +12 -0
  191. package/lib/chain/validation/attestation.js.map +1 -1
  192. package/lib/chain/validation/block.d.ts.map +1 -1
  193. package/lib/chain/validation/block.js +1 -0
  194. package/lib/chain/validation/block.js.map +1 -1
  195. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  196. package/lib/chain/validation/executionPayloadBid.js +13 -1
  197. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  198. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  199. package/lib/chain/validation/executionPayloadEnvelope.js +21 -11
  200. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  201. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  202. package/lib/chain/validation/payloadAttestationMessage.js +4 -3
  203. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  204. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  205. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  206. package/lib/chain/validation/proposerPreferences.js +69 -0
  207. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  208. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
  209. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  210. package/lib/execution/engine/http.d.ts.map +1 -1
  211. package/lib/execution/engine/http.js +21 -14
  212. package/lib/execution/engine/http.js.map +1 -1
  213. package/lib/execution/engine/interface.d.ts +1 -0
  214. package/lib/execution/engine/interface.d.ts.map +1 -1
  215. package/lib/execution/engine/mock.d.ts.map +1 -1
  216. package/lib/execution/engine/mock.js +6 -0
  217. package/lib/execution/engine/mock.js.map +1 -1
  218. package/lib/execution/engine/types.d.ts +20 -0
  219. package/lib/execution/engine/types.d.ts.map +1 -1
  220. package/lib/execution/engine/types.js +18 -0
  221. package/lib/execution/engine/types.js.map +1 -1
  222. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  223. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  224. package/lib/metrics/metrics/lodestar.js +4 -0
  225. package/lib/metrics/metrics/lodestar.js.map +1 -1
  226. package/lib/network/gossip/interface.d.ts +7 -1
  227. package/lib/network/gossip/interface.d.ts.map +1 -1
  228. package/lib/network/gossip/interface.js +1 -0
  229. package/lib/network/gossip/interface.js.map +1 -1
  230. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  231. package/lib/network/gossip/scoringParameters.js +12 -1
  232. package/lib/network/gossip/scoringParameters.js.map +1 -1
  233. package/lib/network/gossip/topic.d.ts +30 -748
  234. package/lib/network/gossip/topic.d.ts.map +1 -1
  235. package/lib/network/gossip/topic.js +6 -0
  236. package/lib/network/gossip/topic.js.map +1 -1
  237. package/lib/network/interface.d.ts +1 -0
  238. package/lib/network/interface.d.ts.map +1 -1
  239. package/lib/network/network.d.ts +1 -0
  240. package/lib/network/network.d.ts.map +1 -1
  241. package/lib/network/network.js +6 -1
  242. package/lib/network/network.js.map +1 -1
  243. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  244. package/lib/network/processor/gossipHandlers.js +46 -22
  245. package/lib/network/processor/gossipHandlers.js.map +1 -1
  246. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  247. package/lib/network/processor/gossipQueues/index.js +5 -0
  248. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  249. package/lib/network/processor/index.d.ts.map +1 -1
  250. package/lib/network/processor/index.js +6 -5
  251. package/lib/network/processor/index.js.map +1 -1
  252. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  253. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +14 -6
  254. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  255. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  256. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +11 -5
  257. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  258. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  259. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +17 -5
  260. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  261. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  262. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +7 -4
  263. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  264. package/lib/node/nodejs.d.ts.map +1 -1
  265. package/lib/node/nodejs.js +6 -4
  266. package/lib/node/nodejs.js.map +1 -1
  267. package/lib/sync/range/batch.d.ts +23 -2
  268. package/lib/sync/range/batch.d.ts.map +1 -1
  269. package/lib/sync/range/batch.js +84 -33
  270. package/lib/sync/range/batch.js.map +1 -1
  271. package/lib/sync/range/chain.d.ts +6 -2
  272. package/lib/sync/range/chain.d.ts.map +1 -1
  273. package/lib/sync/range/chain.js +26 -7
  274. package/lib/sync/range/chain.js.map +1 -1
  275. package/lib/sync/range/range.d.ts.map +1 -1
  276. package/lib/sync/range/range.js +17 -6
  277. package/lib/sync/range/range.js.map +1 -1
  278. package/lib/sync/types.d.ts +34 -0
  279. package/lib/sync/types.d.ts.map +1 -1
  280. package/lib/sync/types.js +34 -0
  281. package/lib/sync/types.js.map +1 -1
  282. package/lib/sync/unknownBlock.d.ts +22 -1
  283. package/lib/sync/unknownBlock.d.ts.map +1 -1
  284. package/lib/sync/unknownBlock.js +602 -53
  285. package/lib/sync/unknownBlock.js.map +1 -1
  286. package/lib/sync/utils/downloadByRange.d.ts +46 -10
  287. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  288. package/lib/sync/utils/downloadByRange.js +164 -24
  289. package/lib/sync/utils/downloadByRange.js.map +1 -1
  290. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  291. package/lib/sync/utils/downloadByRoot.js +16 -2
  292. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  293. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  294. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  295. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  296. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  297. package/lib/util/sszBytes.d.ts.map +1 -1
  298. package/lib/util/sszBytes.js +16 -3
  299. package/lib/util/sszBytes.js.map +1 -1
  300. package/package.json +17 -16
  301. package/src/api/impl/beacon/blocks/index.ts +22 -9
  302. package/src/api/impl/beacon/pool/index.ts +83 -1
  303. package/src/api/impl/beacon/state/utils.ts +2 -2
  304. package/src/api/impl/debug/index.ts +0 -1
  305. package/src/api/impl/lodestar/index.ts +1 -1
  306. package/src/api/impl/validator/index.ts +83 -6
  307. package/src/chain/GetBlobsTracker.ts +1 -2
  308. package/src/chain/archiveStore/archiveStore.ts +5 -5
  309. package/src/chain/archiveStore/interface.ts +4 -4
  310. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +6 -8
  311. package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
  312. package/src/chain/blocks/importBlock.ts +50 -77
  313. package/src/chain/blocks/importExecutionPayload.ts +109 -101
  314. package/src/chain/blocks/index.ts +74 -24
  315. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +33 -1
  316. package/src/chain/blocks/payloadEnvelopeInput/types.ts +1 -0
  317. package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -6
  318. package/src/chain/blocks/types.ts +16 -26
  319. package/src/chain/blocks/utils/chainSegment.ts +114 -17
  320. package/src/chain/blocks/verifyBlock.ts +70 -9
  321. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +6 -4
  322. package/src/chain/blocks/verifyBlocksSanityChecks.ts +26 -7
  323. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +129 -0
  324. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +41 -0
  325. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
  326. package/src/chain/chain.ts +53 -65
  327. package/src/chain/emitter.ts +15 -14
  328. package/src/chain/errors/attestationError.ts +6 -1
  329. package/src/chain/errors/blockError.ts +4 -1
  330. package/src/chain/errors/executionPayloadBid.ts +6 -0
  331. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  332. package/src/chain/errors/index.ts +1 -0
  333. package/src/chain/errors/proposerPreferences.ts +39 -0
  334. package/src/chain/forkChoice/index.ts +8 -20
  335. package/src/chain/interface.ts +11 -3
  336. package/src/chain/opPools/payloadAttestationPool.ts +29 -8
  337. package/src/chain/prepareNextSlot.ts +55 -24
  338. package/src/chain/produceBlock/computeNewStateRoot.ts +6 -43
  339. package/src/chain/produceBlock/produceBlockBody.ts +89 -27
  340. package/src/chain/regen/errors.ts +1 -6
  341. package/src/chain/regen/interface.ts +7 -12
  342. package/src/chain/regen/queued.ts +14 -55
  343. package/src/chain/regen/regen.ts +10 -43
  344. package/src/chain/seenCache/index.ts +1 -0
  345. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +47 -25
  346. package/src/chain/seenCache/seenProposerPreferences.ts +29 -0
  347. package/src/chain/stateCache/datastore/db.ts +10 -33
  348. package/src/chain/stateCache/datastore/file.ts +5 -6
  349. package/src/chain/stateCache/datastore/types.ts +2 -3
  350. package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
  351. package/src/chain/stateCache/persistentCheckpointsCache.ts +139 -247
  352. package/src/chain/stateCache/types.ts +8 -14
  353. package/src/chain/validation/aggregateAndProof.ts +13 -0
  354. package/src/chain/validation/attestation.ts +13 -0
  355. package/src/chain/validation/block.ts +1 -0
  356. package/src/chain/validation/executionPayloadBid.ts +14 -0
  357. package/src/chain/validation/executionPayloadEnvelope.ts +22 -12
  358. package/src/chain/validation/payloadAttestationMessage.ts +5 -3
  359. package/src/chain/validation/proposerPreferences.ts +91 -0
  360. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
  361. package/src/execution/engine/http.ts +21 -14
  362. package/src/execution/engine/interface.ts +1 -0
  363. package/src/execution/engine/mock.ts +8 -1
  364. package/src/execution/engine/types.ts +41 -0
  365. package/src/metrics/metrics/lodestar.ts +4 -0
  366. package/src/network/gossip/interface.ts +6 -0
  367. package/src/network/gossip/scoringParameters.ts +14 -1
  368. package/src/network/gossip/topic.ts +6 -0
  369. package/src/network/interface.ts +1 -0
  370. package/src/network/network.ts +12 -1
  371. package/src/network/processor/gossipHandlers.ts +61 -27
  372. package/src/network/processor/gossipQueues/index.ts +5 -0
  373. package/src/network/processor/index.ts +6 -5
  374. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +14 -6
  375. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +11 -5
  376. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +17 -5
  377. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +7 -4
  378. package/src/node/nodejs.ts +6 -4
  379. package/src/sync/range/batch.ts +142 -38
  380. package/src/sync/range/chain.ts +37 -9
  381. package/src/sync/range/range.ts +18 -6
  382. package/src/sync/types.ts +72 -0
  383. package/src/sync/unknownBlock.ts +760 -57
  384. package/src/sync/utils/downloadByRange.ts +274 -39
  385. package/src/sync/utils/downloadByRoot.ts +24 -2
  386. package/src/sync/utils/pendingBlocksTree.ts +0 -15
  387. package/src/util/sszBytes.ts +21 -3
@@ -1,9 +1,12 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
1
2
  import {CheckpointWithHex} from "@lodestar/fork-choice";
2
3
  import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
3
- import {RootHex} from "@lodestar/types";
4
+ import {RootHex, Slot} from "@lodestar/types";
4
5
  import {Logger} from "@lodestar/utils";
5
6
  import {Metrics} from "../../metrics/metrics.js";
7
+ import {IClock} from "../../util/clock.js";
6
8
  import {SerializedCache} from "../../util/serializedCache.js";
9
+ import {isDaOutOfRange} from "../blocks/blockInput/index.js";
7
10
  import {CreateFromBlockProps, PayloadEnvelopeInput} from "../blocks/payloadEnvelopeInput/index.js";
8
11
  import {ChainEvent, ChainEventEmitter} from "../emitter.js";
9
12
 
@@ -11,6 +14,8 @@ export type {PayloadEnvelopeInputState} from "../blocks/payloadEnvelopeInput/ind
11
14
  export {PayloadEnvelopeInput} from "../blocks/payloadEnvelopeInput/index.js";
12
15
 
13
16
  export type SeenPayloadEnvelopeInputModules = {
17
+ config: ChainForkConfig;
18
+ clock: IClock;
14
19
  chainEvents: ChainEventEmitter;
15
20
  signal: AbortSignal;
16
21
  serializedCache: SerializedCache;
@@ -21,10 +26,19 @@ export type SeenPayloadEnvelopeInputModules = {
21
26
  /**
22
27
  * Cache for tracking PayloadEnvelopeInput instances, keyed by beacon block root.
23
28
  *
24
- * Created during block import when a block is processed.
25
- * Pruned on finalization and after payload is written to DB.
29
+ * Created during block import when a block is processed. Two pruning paths:
30
+ * - `prepareNextSlot` calls `pruneBelow(headParentSlot)` every slot once the head we'll build
31
+ * on is known.
32
+ * - `onFinalized` calls `pruneBelow(finalizedSlot)` on every finalization for bulk cleanup.
33
+ *
34
+ * Steady state (linear chain, healthy progression): the cache holds ~2 entries — the head
35
+ * (parent for next-slot production) and its parent (proposer-boost-reorg fallback). It can
36
+ * transiently hold more during forks, range-sync bursts, or when `prepareNextSlot` skips
37
+ * ticks; subsequent ticks settle it back.
26
38
  */
27
39
  export class SeenPayloadEnvelopeInput {
40
+ private readonly config: ChainForkConfig;
41
+ private readonly clock: IClock;
28
42
  private readonly chainEvents: ChainEventEmitter;
29
43
  private readonly signal: AbortSignal;
30
44
  private readonly serializedCache: SerializedCache;
@@ -32,7 +46,9 @@ export class SeenPayloadEnvelopeInput {
32
46
  private readonly logger?: Logger;
33
47
  private payloadInputs = new Map<RootHex, PayloadEnvelopeInput>();
34
48
 
35
- constructor({chainEvents, signal, serializedCache, metrics, logger}: SeenPayloadEnvelopeInputModules) {
49
+ constructor({config, clock, chainEvents, signal, serializedCache, metrics, logger}: SeenPayloadEnvelopeInputModules) {
50
+ this.config = config;
51
+ this.clock = clock;
36
52
  this.chainEvents = chainEvents;
37
53
  this.signal = signal;
38
54
  this.serializedCache = serializedCache;
@@ -58,25 +74,27 @@ export class SeenPayloadEnvelopeInput {
58
74
  }
59
75
 
60
76
  private onFinalized = (checkpoint: CheckpointWithHex): void => {
61
- // Prune all entries with slot < finalized slot
62
- const finalizedSlot = computeStartSlotAtEpoch(checkpoint.epoch);
63
- let deletedCount = 0;
64
- for (const [, input] of this.payloadInputs) {
65
- if (input.slot < finalizedSlot) {
66
- this.evictPayloadInput(input);
67
- deletedCount++;
68
- }
69
- }
70
- this.logger?.debug("SeenPayloadEnvelopeInput.onFinalized deleted cached entries", {deletedCount});
77
+ this.pruneBelow(computeStartSlotAtEpoch(checkpoint.epoch));
71
78
  };
72
79
 
73
- add(props: CreateFromBlockProps): PayloadEnvelopeInput {
74
- if (this.payloadInputs.has(props.blockRootHex)) {
75
- throw new Error(`PayloadEnvelopeInput already exists for block ${props.blockRootHex}`);
80
+ add(props: Omit<CreateFromBlockProps, "daOutOfRange">): PayloadEnvelopeInput {
81
+ const existing = this.payloadInputs.get(props.blockRootHex);
82
+ if (existing !== undefined) {
83
+ this.logger?.verbose("SeenPayloadEnvelopeInput.add reused existing entry", {
84
+ slot: existing.slot,
85
+ root: props.blockRootHex,
86
+ });
87
+ return existing;
76
88
  }
77
- const input = PayloadEnvelopeInput.createFromBlock(props);
89
+ const daOutOfRange = isDaOutOfRange(this.config, props.forkName, props.block.message.slot, this.clock.currentEpoch);
90
+ const input = PayloadEnvelopeInput.createFromBlock({...props, daOutOfRange});
78
91
  this.payloadInputs.set(props.blockRootHex, input);
79
92
  this.metrics?.seenCache.payloadEnvelopeInput.created.inc();
93
+ this.logger?.verbose("SeenPayloadEnvelopeInput.add created new entry", {
94
+ slot: input.slot,
95
+ root: props.blockRootHex,
96
+ daOutOfRange,
97
+ });
80
98
  return input;
81
99
  }
82
100
 
@@ -88,17 +106,21 @@ export class SeenPayloadEnvelopeInput {
88
106
  return this.payloadInputs.get(blockRootHex)?.hasPayloadEnvelope() ?? false;
89
107
  }
90
108
 
91
- prune(blockRootHex: RootHex): void {
92
- const payloadInput = this.payloadInputs.get(blockRootHex);
93
- if (payloadInput) {
94
- this.evictPayloadInput(payloadInput);
95
- }
96
- }
97
-
98
109
  size(): number {
99
110
  return this.payloadInputs.size;
100
111
  }
101
112
 
113
+ pruneBelow(slot: Slot): void {
114
+ let deletedCount = 0;
115
+ for (const [, input] of this.payloadInputs) {
116
+ if (input.slot < slot) {
117
+ this.evictPayloadInput(input);
118
+ deletedCount++;
119
+ }
120
+ }
121
+ this.logger?.debug("SeenPayloadEnvelopeInput.pruneBelow deleted entries", {slot, deletedCount});
122
+ }
123
+
102
124
  private evictPayloadInput(payloadInput: PayloadEnvelopeInput): void {
103
125
  this.serializedCache.delete(payloadInput.getSerializedCacheKeys());
104
126
  this.payloadInputs.delete(payloadInput.blockRootHex);
@@ -0,0 +1,29 @@
1
+ import {Slot, ValidatorIndex} from "@lodestar/types";
2
+ import {MapDef} from "@lodestar/utils";
3
+
4
+ /**
5
+ * Tracks signed proposer preferences we've already seen per (proposal_slot, validator_index).
6
+ */
7
+ export class SeenProposerPreferences {
8
+ private readonly validatorIndexesBySlot = new MapDef<Slot, Set<ValidatorIndex>>(() => new Set<ValidatorIndex>());
9
+
10
+ isKnown(proposalSlot: Slot, validatorIndex: ValidatorIndex): boolean {
11
+ return this.validatorIndexesBySlot.get(proposalSlot)?.has(validatorIndex) === true;
12
+ }
13
+
14
+ add(proposalSlot: Slot, validatorIndex: ValidatorIndex): void {
15
+ this.validatorIndexesBySlot.getOrDefault(proposalSlot).add(validatorIndex);
16
+ }
17
+
18
+ /**
19
+ * Entries are only load-bearing while `proposal_slot > state.slot`. Once the slot has passed the
20
+ * `[IGNORE] proposal_slot > state.slot` gossip rule takes over, so drop them on each slot tick.
21
+ */
22
+ prune(currentSlot: Slot): void {
23
+ for (const slot of this.validatorIndexesBySlot.keys()) {
24
+ if (slot < currentSlot) {
25
+ this.validatorIndexesBySlot.delete(slot);
26
+ }
27
+ }
28
+ }
29
+ }
@@ -1,6 +1,6 @@
1
1
  import {SLOTS_PER_EPOCH} from "@lodestar/params";
2
2
  import {Epoch, phase0, ssz} from "@lodestar/types";
3
- import {MapDef, byteArrayEquals} from "@lodestar/utils";
3
+ import {MapDef} from "@lodestar/utils";
4
4
  import {IBeaconDb} from "../../../db/interface.js";
5
5
  import {
6
6
  getLastProcessedSlotFromBeaconStateSerialized,
@@ -14,8 +14,8 @@ import {CPStateDatastore, DatastoreKey} from "./types.js";
14
14
  export class DbCPStateDatastore implements CPStateDatastore {
15
15
  constructor(private readonly db: IBeaconDb) {}
16
16
 
17
- async write(cpKey: phase0.Checkpoint, stateBytes: Uint8Array, payloadPresent: boolean): Promise<DatastoreKey> {
18
- const serializedCheckpoint = checkpointToDatastoreKey(cpKey, payloadPresent);
17
+ async write(cpKey: phase0.Checkpoint, stateBytes: Uint8Array): Promise<DatastoreKey> {
18
+ const serializedCheckpoint = checkpointToDatastoreKey(cpKey);
19
19
  await this.db.checkpointState.putBinary(serializedCheckpoint, stateBytes);
20
20
  return serializedCheckpoint;
21
21
  }
@@ -40,30 +40,18 @@ export class DbCPStateDatastore implements CPStateDatastore {
40
40
  }
41
41
  }
42
42
 
43
- function extractCheckpointBytes(key: DatastoreKey): Uint8Array {
44
- const fixedSize = ssz.phase0.Checkpoint.minSize;
45
- return key.subarray(0, fixedSize);
46
- }
47
-
48
43
  export function datastoreKeyToCheckpoint(key: DatastoreKey): phase0.Checkpoint {
49
- return ssz.phase0.Checkpoint.deserialize(extractCheckpointBytes(key));
50
- }
51
-
52
- export function checkpointToDatastoreKey(cp: phase0.Checkpoint, payloadPresent: boolean): DatastoreKey {
53
- const cpBytes = ssz.phase0.Checkpoint.serialize(cp);
54
- const key = new Uint8Array(cpBytes.length + 1);
55
- key.set(cpBytes);
56
- key[cpBytes.length] = payloadPresent ? 1 : 0;
57
- return key;
44
+ return ssz.phase0.Checkpoint.deserialize(key);
58
45
  }
59
46
 
60
- function isPayloadCheckpointState(key: DatastoreKey): boolean {
61
- return key.at(-1) === 1;
47
+ export function checkpointToDatastoreKey(cp: phase0.Checkpoint): DatastoreKey {
48
+ return ssz.phase0.Checkpoint.serialize(cp);
62
49
  }
63
50
 
64
51
  /**
65
- * Get the latest "safe" checkpoint state the node can use to boot from
66
- * - its last processed block slot should be at epoch boundary (CRCS) or last slot of previous epoch (PRCS)
52
+ * Get the latest safe checkpoint state the node can use to boot from
53
+ * - it should be the checkpoint state that's unique in its epoch
54
+ * - its last processed block slot should be at epoch boundary or last slot of previous epoch
67
55
  * - state slot should be at epoch boundary
68
56
  * - state slot should be equal to epoch * SLOTS_PER_EPOCH
69
57
  *
@@ -82,20 +70,9 @@ export async function getLatestSafeDatastoreKey(
82
70
 
83
71
  const dataStoreKeyByEpoch: Map<Epoch, DatastoreKey> = new Map();
84
72
  for (const [epoch, keys] of checkpointsByEpoch.entries()) {
73
+ // only consider epochs with a single checkpoint to avoid ambiguity from forks
85
74
  if (keys.length === 1) {
86
- // PRCS (skipped slot) or CRCS and no payloadPresent
87
- // Pre-gloas always fall into this case
88
75
  dataStoreKeyByEpoch.set(epoch, keys[0]);
89
- } else if (keys.length === 2) {
90
- // CRCS without payload and CRCS with payload
91
- // ie Two keys for the same checkpoint with different payloadPresent suffix (FULL/EMPTY)
92
- // TODO GLOAS: Here we pick FULL key, there is a chance that payload is orphaned hence we not be able to sync
93
- const cp0 = extractCheckpointBytes(keys[0]);
94
- const cp1 = extractCheckpointBytes(keys[1]);
95
- if (byteArrayEquals(cp0, cp1)) {
96
- const fullKey = isPayloadCheckpointState(keys[0]) ? keys[0] : keys[1];
97
- dataStoreKeyByEpoch.set(epoch, fullKey);
98
- }
99
76
  }
100
77
  }
101
78
 
@@ -1,13 +1,12 @@
1
1
  import path from "node:path";
2
- import {phase0} from "@lodestar/types";
2
+ import {phase0, ssz} from "@lodestar/types";
3
3
  import {fromHex, toHex} from "@lodestar/utils";
4
4
  import {ensureDir, readFile, readFileNames, removeFile, writeIfNotExist} from "../../../util/file.js";
5
- import {checkpointToDatastoreKey, getLatestSafeDatastoreKey} from "./db.js";
5
+ import {getLatestSafeDatastoreKey} from "./db.js";
6
6
  import {CPStateDatastore, DatastoreKey} from "./types.js";
7
7
 
8
8
  const CHECKPOINT_STATES_FOLDER = "checkpoint_states";
9
- /** 41 bytes (40 checkpoint + 1 payloadPresent) = 82 hex chars + "0x" prefix = 84 */
10
- const CHECKPOINT_FILE_NAME_LENGTH = 84;
9
+ const CHECKPOINT_FILE_NAME_LENGTH = 82;
11
10
 
12
11
  /**
13
12
  * Implementation of CPStateDatastore using file system, this is beneficial for debugging.
@@ -29,8 +28,8 @@ export class FileCPStateDatastore implements CPStateDatastore {
29
28
  }
30
29
  }
31
30
 
32
- async write(cpKey: phase0.Checkpoint, stateBytes: Uint8Array, payloadPresent: boolean): Promise<DatastoreKey> {
33
- const serializedCheckpoint = checkpointToDatastoreKey(cpKey, payloadPresent);
31
+ async write(cpKey: phase0.Checkpoint, stateBytes: Uint8Array): Promise<DatastoreKey> {
32
+ const serializedCheckpoint = ssz.phase0.Checkpoint.serialize(cpKey);
34
33
  const filePath = path.join(this.folderPath, toHex(serializedCheckpoint));
35
34
  await writeIfNotExist(filePath, stateBytes);
36
35
  return serializedCheckpoint;
@@ -1,12 +1,11 @@
1
1
  import {phase0} from "@lodestar/types";
2
2
 
3
- // With db implementation, persistedKey is serialized data of a checkpoint + 1
4
- // ie a fixed size of `ssz.phase0.Checkpoint.minSize + 1`
3
+ // With db implementation, persistedKey is serialized data of a checkpoint
5
4
  export type DatastoreKey = Uint8Array;
6
5
 
7
6
  // Make this generic to support testing
8
7
  export interface CPStateDatastore {
9
- write: (cpKey: phase0.Checkpoint, stateBytes: Uint8Array, payloadPresent: boolean) => Promise<DatastoreKey>;
8
+ write: (cpKey: phase0.Checkpoint, stateBytes: Uint8Array) => Promise<DatastoreKey>;
10
9
  remove: (key: DatastoreKey) => Promise<void>;
11
10
  read: (key: DatastoreKey) => Promise<Uint8Array | null>;
12
11
  readLatestSafe: () => Promise<Uint8Array | null>;
@@ -20,11 +20,6 @@ export type FIFOBlockStateCacheOpts = {
20
20
  * clock slot
21
21
  */
22
22
  export const DEFAULT_MAX_BLOCK_STATES = 64;
23
- /**
24
- * For Gloas (ePBS), each block can have two states: block state and payload state.
25
- * Double the cache size to maintain the same effective block depth.
26
- */
27
- export const DEFAULT_MAX_BLOCK_STATES_GLOAS = 128;
28
23
 
29
24
  /**
30
25
  * New implementation of BlockStateCache that keeps the most recent n states consistently
@@ -46,7 +41,7 @@ export const DEFAULT_MAX_BLOCK_STATES_GLOAS = 128;
46
41
  * The maintained key order would be: 11 -> 13 -> 12 -> 10, and state 10 will be pruned first.
47
42
  */
48
43
  export class FIFOBlockStateCache implements BlockStateCache {
49
- private maxStates: number;
44
+ readonly maxStates: number;
50
45
 
51
46
  private readonly cache: MapTracker<string, IBeaconStateView>;
52
47
  /**
@@ -172,10 +167,6 @@ export class FIFOBlockStateCache implements BlockStateCache {
172
167
  }
173
168
  }
174
169
 
175
- upgradeToGloas(): void {
176
- this.maxStates = DEFAULT_MAX_BLOCK_STATES_GLOAS;
177
- }
178
-
179
170
  /**
180
171
  * No need for this implementation
181
172
  * This is only to conform to the old api