@lodestar/beacon-node 1.43.0-dev.4fb05c546d → 1.43.0-dev.4fe6b362c9

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 (412) 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 +86 -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 +86 -17
  17. package/lib/api/impl/validator/index.js.map +1 -1
  18. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  19. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  20. package/lib/chain/archiveStore/interface.d.ts +4 -4
  21. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  22. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  23. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  24. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  25. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +2 -2
  26. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  27. package/lib/chain/archiveStore/utils/archiveBlocks.js +110 -58
  28. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  29. package/lib/chain/blocks/blockInput/blockInput.d.ts +3 -0
  30. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  31. package/lib/chain/blocks/blockInput/blockInput.js +4 -1
  32. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  33. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  34. package/lib/chain/blocks/importBlock.js +16 -28
  35. package/lib/chain/blocks/importBlock.js.map +1 -1
  36. package/lib/chain/blocks/importExecutionPayload.d.ts +32 -14
  37. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  38. package/lib/chain/blocks/importExecutionPayload.js +100 -91
  39. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  40. package/lib/chain/blocks/index.d.ts +5 -3
  41. package/lib/chain/blocks/index.d.ts.map +1 -1
  42. package/lib/chain/blocks/index.js +58 -26
  43. package/lib/chain/blocks/index.js.map +1 -1
  44. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +12 -1
  45. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  46. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +28 -2
  47. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  48. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +17 -0
  49. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  50. package/lib/chain/blocks/payloadEnvelopeProcessor.js +2 -2
  51. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  52. package/lib/chain/blocks/types.d.ts +15 -20
  53. package/lib/chain/blocks/types.d.ts.map +1 -1
  54. package/lib/chain/blocks/utils/chainSegment.d.ts +21 -2
  55. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  56. package/lib/chain/blocks/utils/chainSegment.js +92 -12
  57. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  58. package/lib/chain/blocks/verifyBlock.d.ts +5 -3
  59. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  60. package/lib/chain/blocks/verifyBlock.js +50 -7
  61. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  62. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
  63. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  64. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -2
  65. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  66. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
  67. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  68. package/lib/chain/blocks/verifyBlocksSanityChecks.js +25 -5
  69. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  70. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  71. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  72. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +80 -0
  73. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  74. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  75. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +8 -3
  76. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  77. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  78. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
  79. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
  80. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
  81. package/lib/chain/chain.d.ts +10 -7
  82. package/lib/chain/chain.d.ts.map +1 -1
  83. package/lib/chain/chain.js +47 -15
  84. package/lib/chain/chain.js.map +1 -1
  85. package/lib/chain/emitter.d.ts +3 -14
  86. package/lib/chain/emitter.d.ts.map +1 -1
  87. package/lib/chain/emitter.js +0 -4
  88. package/lib/chain/emitter.js.map +1 -1
  89. package/lib/chain/errors/blockError.d.ts +8 -1
  90. package/lib/chain/errors/blockError.d.ts.map +1 -1
  91. package/lib/chain/errors/blockError.js +2 -0
  92. package/lib/chain/errors/blockError.js.map +1 -1
  93. package/lib/chain/errors/executionPayloadBid.d.ts +24 -1
  94. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  95. package/lib/chain/errors/executionPayloadBid.js +4 -0
  96. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  97. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  98. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  99. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  100. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  101. package/lib/chain/errors/index.d.ts +1 -0
  102. package/lib/chain/errors/index.d.ts.map +1 -1
  103. package/lib/chain/errors/index.js +1 -0
  104. package/lib/chain/errors/index.js.map +1 -1
  105. package/lib/chain/errors/proposerPreferences.d.ts +40 -0
  106. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  107. package/lib/chain/errors/proposerPreferences.js +14 -0
  108. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  109. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  110. package/lib/chain/forkChoice/index.js +5 -17
  111. package/lib/chain/forkChoice/index.js.map +1 -1
  112. package/lib/chain/initState.d.ts.map +1 -1
  113. package/lib/chain/initState.js +6 -1
  114. package/lib/chain/initState.js.map +1 -1
  115. package/lib/chain/interface.d.ts +9 -6
  116. package/lib/chain/interface.d.ts.map +1 -1
  117. package/lib/chain/interface.js.map +1 -1
  118. package/lib/chain/lightClient/index.d.ts.map +1 -1
  119. package/lib/chain/lightClient/index.js +1 -1
  120. package/lib/chain/lightClient/index.js.map +1 -1
  121. package/lib/chain/opPools/index.d.ts +1 -0
  122. package/lib/chain/opPools/index.d.ts.map +1 -1
  123. package/lib/chain/opPools/index.js +1 -0
  124. package/lib/chain/opPools/index.js.map +1 -1
  125. package/lib/chain/opPools/payloadAttestationPool.d.ts +4 -3
  126. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  127. package/lib/chain/opPools/payloadAttestationPool.js +56 -14
  128. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  129. package/lib/chain/opPools/proposerPreferencesPool.d.ts +29 -0
  130. package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -0
  131. package/lib/chain/opPools/proposerPreferencesPool.js +56 -0
  132. package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -0
  133. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  134. package/lib/chain/prepareNextSlot.js +31 -13
  135. package/lib/chain/prepareNextSlot.js.map +1 -1
  136. package/lib/chain/produceBlock/produceBlockBody.d.ts +11 -1
  137. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  138. package/lib/chain/produceBlock/produceBlockBody.js +52 -14
  139. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  140. package/lib/chain/regen/interface.d.ts +1 -0
  141. package/lib/chain/regen/interface.d.ts.map +1 -1
  142. package/lib/chain/regen/interface.js +1 -0
  143. package/lib/chain/regen/interface.js.map +1 -1
  144. package/lib/chain/regen/queued.d.ts.map +1 -1
  145. package/lib/chain/regen/queued.js +1 -4
  146. package/lib/chain/regen/queued.js.map +1 -1
  147. package/lib/chain/regen/regen.d.ts.map +1 -1
  148. package/lib/chain/regen/regen.js +1 -4
  149. package/lib/chain/regen/regen.js.map +1 -1
  150. package/lib/chain/seenCache/index.d.ts +1 -0
  151. package/lib/chain/seenCache/index.d.ts.map +1 -1
  152. package/lib/chain/seenCache/index.js +1 -0
  153. package/lib/chain/seenCache/index.js.map +1 -1
  154. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +24 -7
  155. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  156. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +69 -17
  157. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  158. package/lib/chain/seenCache/seenProposerPreferences.d.ts +16 -0
  159. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  160. package/lib/chain/seenCache/seenProposerPreferences.js +26 -0
  161. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  162. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  163. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -1
  164. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  165. package/lib/chain/validation/block.d.ts.map +1 -1
  166. package/lib/chain/validation/block.js +1 -0
  167. package/lib/chain/validation/block.js.map +1 -1
  168. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  169. package/lib/chain/validation/executionPayloadBid.js +81 -18
  170. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  171. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  172. package/lib/chain/validation/executionPayloadEnvelope.js +19 -9
  173. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  174. package/lib/chain/validation/payloadAttestationMessage.d.ts +1 -1
  175. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  176. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  177. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  178. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  179. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  180. package/lib/chain/validation/proposerPreferences.js +91 -0
  181. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  182. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
  183. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  184. package/lib/execution/engine/http.d.ts.map +1 -1
  185. package/lib/execution/engine/http.js +21 -14
  186. package/lib/execution/engine/http.js.map +1 -1
  187. package/lib/execution/engine/interface.d.ts +1 -0
  188. package/lib/execution/engine/interface.d.ts.map +1 -1
  189. package/lib/execution/engine/mock.d.ts.map +1 -1
  190. package/lib/execution/engine/mock.js +6 -0
  191. package/lib/execution/engine/mock.js.map +1 -1
  192. package/lib/execution/engine/types.d.ts +20 -0
  193. package/lib/execution/engine/types.d.ts.map +1 -1
  194. package/lib/execution/engine/types.js +18 -0
  195. package/lib/execution/engine/types.js.map +1 -1
  196. package/lib/metrics/metrics/lodestar.d.ts +5 -0
  197. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  198. package/lib/metrics/metrics/lodestar.js +9 -0
  199. package/lib/metrics/metrics/lodestar.js.map +1 -1
  200. package/lib/network/gossip/interface.d.ts +7 -1
  201. package/lib/network/gossip/interface.d.ts.map +1 -1
  202. package/lib/network/gossip/interface.js +1 -0
  203. package/lib/network/gossip/interface.js.map +1 -1
  204. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  205. package/lib/network/gossip/scoringParameters.js +12 -1
  206. package/lib/network/gossip/scoringParameters.js.map +1 -1
  207. package/lib/network/gossip/topic.d.ts +13 -2
  208. package/lib/network/gossip/topic.d.ts.map +1 -1
  209. package/lib/network/gossip/topic.js +6 -0
  210. package/lib/network/gossip/topic.js.map +1 -1
  211. package/lib/network/interface.d.ts +3 -0
  212. package/lib/network/interface.d.ts.map +1 -1
  213. package/lib/network/network.d.ts +3 -0
  214. package/lib/network/network.d.ts.map +1 -1
  215. package/lib/network/network.js +14 -1
  216. package/lib/network/network.js.map +1 -1
  217. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  218. package/lib/network/processor/gossipHandlers.js +80 -23
  219. package/lib/network/processor/gossipHandlers.js.map +1 -1
  220. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  221. package/lib/network/processor/gossipQueues/index.js +5 -0
  222. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  223. package/lib/network/processor/index.d.ts.map +1 -1
  224. package/lib/network/processor/index.js +6 -5
  225. package/lib/network/processor/index.js.map +1 -1
  226. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  227. package/lib/network/reqresp/ReqRespBeaconNode.js +1 -1
  228. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  229. package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts +9 -0
  230. package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts.map +1 -0
  231. package/lib/network/reqresp/handlers/beaconBlocksByHead.js +61 -0
  232. package/lib/network/reqresp/handlers/beaconBlocksByHead.js.map +1 -0
  233. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  234. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +14 -6
  235. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  236. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  237. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +11 -5
  238. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  239. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  240. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +17 -5
  241. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  242. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  243. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +7 -4
  244. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  245. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  246. package/lib/network/reqresp/handlers/index.js +5 -0
  247. package/lib/network/reqresp/handlers/index.js.map +1 -1
  248. package/lib/network/reqresp/interface.d.ts +1 -1
  249. package/lib/network/reqresp/interface.js +1 -1
  250. package/lib/network/reqresp/protocols.d.ts +1 -0
  251. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  252. package/lib/network/reqresp/protocols.js +5 -0
  253. package/lib/network/reqresp/protocols.js.map +1 -1
  254. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  255. package/lib/network/reqresp/rateLimit.js +4 -0
  256. package/lib/network/reqresp/rateLimit.js.map +1 -1
  257. package/lib/network/reqresp/score.d.ts.map +1 -1
  258. package/lib/network/reqresp/score.js +1 -0
  259. package/lib/network/reqresp/score.js.map +1 -1
  260. package/lib/network/reqresp/types.d.ts +3 -0
  261. package/lib/network/reqresp/types.d.ts.map +1 -1
  262. package/lib/network/reqresp/types.js +3 -0
  263. package/lib/network/reqresp/types.js.map +1 -1
  264. package/lib/node/nodejs.js +2 -2
  265. package/lib/node/nodejs.js.map +1 -1
  266. package/lib/sync/constants.d.ts +7 -1
  267. package/lib/sync/constants.d.ts.map +1 -1
  268. package/lib/sync/constants.js +7 -4
  269. package/lib/sync/constants.js.map +1 -1
  270. package/lib/sync/range/batch.d.ts +55 -8
  271. package/lib/sync/range/batch.d.ts.map +1 -1
  272. package/lib/sync/range/batch.js +291 -66
  273. package/lib/sync/range/batch.js.map +1 -1
  274. package/lib/sync/range/chain.d.ts +22 -4
  275. package/lib/sync/range/chain.d.ts.map +1 -1
  276. package/lib/sync/range/chain.js +103 -11
  277. package/lib/sync/range/chain.js.map +1 -1
  278. package/lib/sync/range/range.d.ts.map +1 -1
  279. package/lib/sync/range/range.js +71 -11
  280. package/lib/sync/range/range.js.map +1 -1
  281. package/lib/sync/range/utils/peerBalancer.d.ts +2 -1
  282. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -1
  283. package/lib/sync/range/utils/peerBalancer.js +8 -4
  284. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  285. package/lib/sync/sync.d.ts.map +1 -1
  286. package/lib/sync/sync.js +13 -0
  287. package/lib/sync/sync.js.map +1 -1
  288. package/lib/sync/types.d.ts +34 -0
  289. package/lib/sync/types.d.ts.map +1 -1
  290. package/lib/sync/types.js +34 -0
  291. package/lib/sync/types.js.map +1 -1
  292. package/lib/sync/unknownBlock.d.ts +29 -1
  293. package/lib/sync/unknownBlock.d.ts.map +1 -1
  294. package/lib/sync/unknownBlock.js +727 -61
  295. package/lib/sync/unknownBlock.js.map +1 -1
  296. package/lib/sync/utils/downloadByRange.d.ts +73 -10
  297. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  298. package/lib/sync/utils/downloadByRange.js +213 -26
  299. package/lib/sync/utils/downloadByRange.js.map +1 -1
  300. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  301. package/lib/sync/utils/downloadByRoot.js +16 -2
  302. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  303. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  304. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  305. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  306. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  307. package/lib/sync/utils/rateLimit.d.ts +2 -0
  308. package/lib/sync/utils/rateLimit.d.ts.map +1 -0
  309. package/lib/sync/utils/rateLimit.js +15 -0
  310. package/lib/sync/utils/rateLimit.js.map +1 -0
  311. package/lib/util/dependentRoot.d.ts +6 -2
  312. package/lib/util/dependentRoot.d.ts.map +1 -1
  313. package/lib/util/dependentRoot.js +20 -16
  314. package/lib/util/dependentRoot.js.map +1 -1
  315. package/lib/util/sszBytes.d.ts.map +1 -1
  316. package/lib/util/sszBytes.js +20 -5
  317. package/lib/util/sszBytes.js.map +1 -1
  318. package/package.json +16 -16
  319. package/src/api/impl/beacon/blocks/index.ts +22 -9
  320. package/src/api/impl/beacon/pool/index.ts +136 -1
  321. package/src/api/impl/beacon/state/utils.ts +2 -2
  322. package/src/api/impl/debug/index.ts +0 -1
  323. package/src/api/impl/lodestar/index.ts +1 -1
  324. package/src/api/impl/validator/index.ts +101 -16
  325. package/src/chain/archiveStore/archiveStore.ts +5 -5
  326. package/src/chain/archiveStore/interface.ts +4 -4
  327. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +4 -4
  328. package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
  329. package/src/chain/blocks/blockInput/blockInput.ts +4 -1
  330. package/src/chain/blocks/importBlock.ts +16 -48
  331. package/src/chain/blocks/importExecutionPayload.ts +126 -110
  332. package/src/chain/blocks/index.ts +71 -23
  333. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +37 -3
  334. package/src/chain/blocks/payloadEnvelopeInput/types.ts +18 -0
  335. package/src/chain/blocks/payloadEnvelopeProcessor.ts +2 -2
  336. package/src/chain/blocks/types.ts +15 -25
  337. package/src/chain/blocks/utils/chainSegment.ts +117 -17
  338. package/src/chain/blocks/verifyBlock.ts +70 -9
  339. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +6 -4
  340. package/src/chain/blocks/verifyBlocksSanityChecks.ts +26 -7
  341. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +137 -0
  342. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +7 -4
  343. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
  344. package/src/chain/chain.ts +68 -26
  345. package/src/chain/emitter.ts +3 -14
  346. package/src/chain/errors/blockError.ts +4 -1
  347. package/src/chain/errors/executionPayloadBid.ts +28 -1
  348. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  349. package/src/chain/errors/index.ts +1 -0
  350. package/src/chain/errors/proposerPreferences.ts +47 -0
  351. package/src/chain/forkChoice/index.ts +2 -22
  352. package/src/chain/initState.ts +9 -1
  353. package/src/chain/interface.ts +13 -3
  354. package/src/chain/lightClient/index.ts +6 -6
  355. package/src/chain/opPools/index.ts +1 -0
  356. package/src/chain/opPools/payloadAttestationPool.ts +63 -18
  357. package/src/chain/opPools/proposerPreferencesPool.ts +59 -0
  358. package/src/chain/prepareNextSlot.ts +36 -14
  359. package/src/chain/produceBlock/produceBlockBody.ts +63 -13
  360. package/src/chain/regen/interface.ts +1 -0
  361. package/src/chain/regen/queued.ts +2 -7
  362. package/src/chain/regen/regen.ts +2 -7
  363. package/src/chain/seenCache/index.ts +1 -0
  364. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +89 -21
  365. package/src/chain/seenCache/seenProposerPreferences.ts +32 -0
  366. package/src/chain/stateCache/persistentCheckpointsCache.ts +4 -1
  367. package/src/chain/validation/block.ts +1 -0
  368. package/src/chain/validation/executionPayloadBid.ts +85 -18
  369. package/src/chain/validation/executionPayloadEnvelope.ts +20 -10
  370. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  371. package/src/chain/validation/proposerPreferences.ts +110 -0
  372. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
  373. package/src/execution/engine/http.ts +21 -14
  374. package/src/execution/engine/interface.ts +1 -0
  375. package/src/execution/engine/mock.ts +8 -1
  376. package/src/execution/engine/types.ts +41 -0
  377. package/src/metrics/metrics/lodestar.ts +10 -0
  378. package/src/network/gossip/interface.ts +6 -0
  379. package/src/network/gossip/scoringParameters.ts +14 -1
  380. package/src/network/gossip/topic.ts +6 -0
  381. package/src/network/interface.ts +3 -0
  382. package/src/network/network.ts +35 -1
  383. package/src/network/processor/gossipHandlers.ts +99 -23
  384. package/src/network/processor/gossipQueues/index.ts +5 -0
  385. package/src/network/processor/index.ts +6 -5
  386. package/src/network/reqresp/ReqRespBeaconNode.ts +1 -0
  387. package/src/network/reqresp/handlers/beaconBlocksByHead.ts +91 -0
  388. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +14 -6
  389. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +11 -5
  390. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +17 -5
  391. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +7 -4
  392. package/src/network/reqresp/handlers/index.ts +5 -0
  393. package/src/network/reqresp/interface.ts +1 -1
  394. package/src/network/reqresp/protocols.ts +6 -0
  395. package/src/network/reqresp/rateLimit.ts +4 -0
  396. package/src/network/reqresp/score.ts +1 -0
  397. package/src/network/reqresp/types.ts +5 -0
  398. package/src/node/nodejs.ts +2 -2
  399. package/src/sync/constants.ts +8 -4
  400. package/src/sync/range/batch.ts +388 -75
  401. package/src/sync/range/chain.ts +131 -14
  402. package/src/sync/range/range.ts +86 -11
  403. package/src/sync/range/utils/peerBalancer.ts +9 -3
  404. package/src/sync/sync.ts +13 -1
  405. package/src/sync/types.ts +72 -0
  406. package/src/sync/unknownBlock.ts +915 -65
  407. package/src/sync/utils/downloadByRange.ts +386 -39
  408. package/src/sync/utils/downloadByRoot.ts +24 -2
  409. package/src/sync/utils/pendingBlocksTree.ts +0 -15
  410. package/src/sync/utils/rateLimit.ts +16 -0
  411. package/src/util/dependentRoot.ts +22 -18
  412. package/src/util/sszBytes.ts +25 -5
@@ -118,7 +118,7 @@ export function getLodestarApi({
118
118
  return {
119
119
  // biome-ignore lint/complexity/useLiteralKeys: The `blockProcessor` is a protected attribute
120
120
  data: (chain as BeaconChain)["blockProcessor"].jobQueue.getItems().map((item) => {
121
- const [blockInputs, opts] = item.args;
121
+ const [blockInputs, _payloadEnvelopes, opts] = item.args;
122
122
  return {
123
123
  blockSlots: blockInputs.map((blockInput) => blockInput.slot),
124
124
  jobOpts: opts,
@@ -14,6 +14,7 @@ import {
14
14
  isForkPostBellatrix,
15
15
  isForkPostDeneb,
16
16
  isForkPostElectra,
17
+ isForkPostFulu,
17
18
  isForkPostGloas,
18
19
  } from "@lodestar/params";
19
20
  import {
@@ -26,6 +27,7 @@ import {
26
27
  computeTimeAtSlot,
27
28
  getCurrentSlot,
28
29
  isStatePostAltair,
30
+ isStatePostGloas,
29
31
  proposerShufflingDecisionRoot,
30
32
  } from "@lodestar/state-transition";
31
33
  import {
@@ -924,7 +926,7 @@ export function getValidatorApi(
924
926
  metrics?.blockProductionRequests.inc({source});
925
927
 
926
928
  const graffitiBytes = toGraffitiBytes(
927
- graffiti ?? getDefaultGraffiti(getLodestarClientVersion(), chain.executionEngine.clientVersion, {})
929
+ graffiti ?? getDefaultGraffiti(getLodestarClientVersion(opts), chain.executionEngine.clientVersion, opts)
928
930
  );
929
931
  const commonBlockBodyPromise = chain.produceCommonBlockBody({
930
932
  slot,
@@ -1049,6 +1051,36 @@ export function getValidatorApi(
1049
1051
  };
1050
1052
  },
1051
1053
 
1054
+ async producePayloadAttestationData({slot}) {
1055
+ const fork = config.getForkName(slot);
1056
+ if (!isForkPostGloas(fork)) {
1057
+ throw new ApiError(400, `producePayloadAttestationData is not supported before Gloas fork=${fork}`);
1058
+ }
1059
+
1060
+ notWhileSyncing();
1061
+ await waitForSlot(slot);
1062
+
1063
+ const block = chain.forkChoice.getCanonicalBlockClosestLteSlot(slot);
1064
+ if (!block) {
1065
+ throw new ApiError(404, `No canonical block found at or before slot=${slot}`);
1066
+ }
1067
+
1068
+ const blockIsForSlot = block.slot === slot;
1069
+ const payloadInput = chain.seenPayloadEnvelopeInputCache.get(block.blockRoot);
1070
+ const payloadPresent = blockIsForSlot && (payloadInput?.hasPayloadEnvelope() ?? false);
1071
+ const blobDataAvailable = blockIsForSlot && (payloadInput?.hasAllData() ?? false);
1072
+
1073
+ return {
1074
+ data: {
1075
+ beaconBlockRoot: fromHex(block.blockRoot),
1076
+ slot,
1077
+ payloadPresent,
1078
+ blobDataAvailable,
1079
+ },
1080
+ meta: {version: fork},
1081
+ };
1082
+ },
1083
+
1052
1084
  /**
1053
1085
  * GET `/eth/v1/validator/sync_committee_contribution`
1054
1086
  *
@@ -1093,26 +1125,33 @@ export function getValidatorApi(
1093
1125
  async getProposerDuties({epoch}, _context, opts?: {v2?: boolean}) {
1094
1126
  notWhileSyncing();
1095
1127
 
1096
- // Early check that epoch is no more than current_epoch + 1, or allow for pre-genesis
1097
1128
  const currentEpoch = currentEpochWithDisparity();
1098
1129
  const nextEpoch = currentEpoch + 1;
1099
- if (currentEpoch >= 0 && epoch > nextEpoch) {
1130
+ const startSlot = computeStartSlotAtEpoch(epoch);
1131
+ const prepareNextSlotLookAheadMs =
1132
+ config.SLOT_DURATION_MS - config.getSlotComponentDurationMs(PREPARE_NEXT_SLOT_BPS);
1133
+ const toNextEpochMs = msToNextEpoch();
1134
+ const nearNextEpoch = toNextEpochMs < prepareNextSlotLookAheadMs;
1135
+ // Post-Fulu the proposer lookahead is deterministic and known a full epoch ahead, so
1136
+ // close to the boundary `currentEpoch + 2` is serveable from the upcoming-epoch
1137
+ // checkpoint state (its `nextProposers`). Pre-Fulu / mid-epoch: `currentEpoch + 1` max.
1138
+ const isPostFulu = isForkPostFulu(config.getForkName(startSlot));
1139
+ const maxFutureEpoch = isPostFulu && nearNextEpoch && opts?.v2 ? nextEpoch + 1 : nextEpoch;
1140
+ if (currentEpoch >= 0 && epoch > maxFutureEpoch) {
1100
1141
  throw new ApiError(400, `Requested epoch ${epoch} must not be more than one epoch in the future`);
1101
1142
  }
1102
1143
 
1103
1144
  const head = chain.forkChoice.getHead();
1104
1145
  let state: IBeaconStateView | undefined = undefined;
1105
- const startSlot = computeStartSlotAtEpoch(epoch);
1106
- const prepareNextSlotLookAheadMs =
1107
- config.SLOT_DURATION_MS - config.getSlotComponentDurationMs(PREPARE_NEXT_SLOT_BPS);
1108
- const toNextEpochMs = msToNextEpoch();
1109
1146
  // validators may request next epoch's duties when it's close to next epoch
1110
- // this is to avoid missed block proposal due to 0 epoch look ahead
1111
- if (epoch === nextEpoch && toNextEpochMs < prepareNextSlotLookAheadMs) {
1147
+ // this is to avoid missed block proposal due to 0 epoch look ahead.
1148
+ // Post-Fulu, `nextEpoch + 1` is served from the same upcoming-epoch (`nextEpoch`)
1149
+ // checkpoint state via its `nextProposers` (deterministic proposer lookahead).
1150
+ if (nearNextEpoch && (epoch === nextEpoch || (isPostFulu && epoch === nextEpoch + 1))) {
1112
1151
  // wait for maximum 1 slot for cp state which is the timeout of validator api
1113
1152
  const cpState = await waitForCheckpointState({
1114
1153
  rootHex: head.blockRoot,
1115
- epoch,
1154
+ epoch: nextEpoch,
1116
1155
  });
1117
1156
  if (cpState) {
1118
1157
  state = cpState;
@@ -1187,7 +1226,7 @@ export function getValidatorApi(
1187
1226
  // It should be set to the latest block applied to `self` or the genesis block root.
1188
1227
  const dependentRoot =
1189
1228
  // In v2 the dependent root is different after fulu due to deterministic proposer lookahead
1190
- proposerShufflingDecisionRoot(opts?.v2 ? config.getForkName(startSlot) : ForkName.phase0, state) ||
1229
+ proposerShufflingDecisionRoot(opts?.v2 ? config.getForkName(startSlot) : ForkName.phase0, state, epoch) ||
1191
1230
  (await getGenesisBlockRoot(state));
1192
1231
 
1193
1232
  return {
@@ -1263,6 +1302,55 @@ export function getValidatorApi(
1263
1302
  };
1264
1303
  },
1265
1304
 
1305
+ async getPtcDuties({epoch, indices}) {
1306
+ notWhileSyncing();
1307
+
1308
+ if (indices.length === 0) {
1309
+ throw new ApiError(400, "No validator to get PTC duties");
1310
+ }
1311
+
1312
+ const startSlot = computeStartSlotAtEpoch(epoch);
1313
+ const fork = config.getForkName(startSlot);
1314
+ if (!isForkPostGloas(fork)) {
1315
+ throw new ApiError(400, `PTC duties are not supported before Gloas fork=${fork}`);
1316
+ }
1317
+
1318
+ await waitForNextClosestEpoch();
1319
+
1320
+ if (epoch > chain.clock.currentEpoch + 1) {
1321
+ throw new ApiError(400, "Cannot get PTC duties for epoch more than one ahead");
1322
+ }
1323
+
1324
+ const head = chain.forkChoice.getHead();
1325
+ const state = await chain.getHeadStateAtCurrentEpoch(RegenCaller.getDuties);
1326
+ if (!isStatePostGloas(state)) {
1327
+ throw new ApiError(400, `PTC duties are not available before Gloas fork=${state.forkName}`);
1328
+ }
1329
+
1330
+ const pubkeys = getPubkeysForIndices(state, indices);
1331
+ const ptcs = state.getEpochPTCs(epoch);
1332
+ const duties: routes.validator.PtcDuty[] = [];
1333
+ for (let i = 0, len = indices.length; i < len; i++) {
1334
+ const validatorIndex = indices[i];
1335
+ for (let j = 0; j < SLOTS_PER_EPOCH; j++) {
1336
+ if (ptcs[j].indexOf(validatorIndex) !== -1) {
1337
+ duties.push({pubkey: pubkeys[i], validatorIndex, slot: j + startSlot});
1338
+ break;
1339
+ }
1340
+ }
1341
+ }
1342
+
1343
+ const dependentRoot = fromHex(state.getShufflingDecisionRoot(epoch)) || (await getGenesisBlockRoot(state));
1344
+
1345
+ return {
1346
+ data: duties,
1347
+ meta: {
1348
+ dependentRoot: toRootHex(dependentRoot),
1349
+ executionOptimistic: isOptimisticBlock(head),
1350
+ },
1351
+ };
1352
+ },
1353
+
1266
1354
  /**
1267
1355
  * `POST /eth/v1/validator/duties/sync/{epoch}`
1268
1356
  *
@@ -1641,17 +1729,14 @@ export function getValidatorApi(
1641
1729
  throw Error("Cached block production result is not full block");
1642
1730
  }
1643
1731
 
1644
- const {executionPayload, executionRequests} = produceResult as ProduceFullGloas;
1732
+ const {executionPayload, executionRequests, parentBlockRoot} = produceResult as ProduceFullGloas;
1645
1733
 
1646
1734
  const envelope: gloas.ExecutionPayloadEnvelope = {
1647
1735
  payload: executionPayload,
1648
1736
  executionRequests: executionRequests,
1649
1737
  builderIndex: BUILDER_INDEX_SELF_BUILD,
1650
1738
  beaconBlockRoot,
1651
- slot,
1652
- // TODO GLOAS: stateRoot is no longer computed during block production.
1653
- // This field will be removed when we implement defer payload processing
1654
- stateRoot: ZERO_HASH,
1739
+ parentBeaconBlockRoot: parentBlockRoot,
1655
1740
  };
1656
1741
 
1657
1742
  logger.info("Produced execution payload envelope", {
@@ -1,4 +1,4 @@
1
- import {CheckpointWithPayloadStatus} from "@lodestar/fork-choice";
1
+ import {CheckpointWithHex} from "@lodestar/fork-choice";
2
2
  import {LoggerNode} from "@lodestar/logger/node";
3
3
  import {Checkpoint} from "@lodestar/types/phase0";
4
4
  import {callFnWhenAwait} from "@lodestar/utils";
@@ -41,7 +41,7 @@ export enum ArchiveStoreTask {
41
41
  */
42
42
  export class ArchiveStore {
43
43
  private archiveMode: ArchiveMode;
44
- private jobQueue: JobItemQueue<[CheckpointWithPayloadStatus], void>;
44
+ private jobQueue: JobItemQueue<[CheckpointWithHex], void>;
45
45
 
46
46
  private archiveDataEpochs?: number;
47
47
  private readonly statesArchiverStrategy: StateArchiveStrategy;
@@ -64,7 +64,7 @@ export class ArchiveStore {
64
64
  this.archiveMode = opts.archiveMode;
65
65
  this.archiveDataEpochs = opts.archiveDataEpochs;
66
66
 
67
- this.jobQueue = new JobItemQueue<[CheckpointWithPayloadStatus], void>(this.processFinalizedCheckpoint, {
67
+ this.jobQueue = new JobItemQueue<[CheckpointWithHex], void>(this.processFinalizedCheckpoint, {
68
68
  maxLength: PROCESS_FINALIZED_CHECKPOINT_QUEUE_LENGTH,
69
69
  signal,
70
70
  });
@@ -166,7 +166,7 @@ export class ArchiveStore {
166
166
  //-------------------------------------------------------------------------
167
167
  // Event handlers
168
168
  //-------------------------------------------------------------------------
169
- private onFinalizedCheckpoint = (finalized: CheckpointWithPayloadStatus): void => {
169
+ private onFinalizedCheckpoint = (finalized: CheckpointWithHex): void => {
170
170
  this.jobQueue.push(finalized).catch((e) => {
171
171
  if (!isQueueErrorAborted(e)) {
172
172
  this.logger.error("Error queuing finalized checkpoint", {epoch: finalized.epoch}, e as Error);
@@ -187,7 +187,7 @@ export class ArchiveStore {
187
187
  });
188
188
  };
189
189
 
190
- private processFinalizedCheckpoint = async (finalized: CheckpointWithPayloadStatus): Promise<void> => {
190
+ private processFinalizedCheckpoint = async (finalized: CheckpointWithHex): Promise<void> => {
191
191
  try {
192
192
  const finalizedEpoch = finalized.epoch;
193
193
  this.logger.verbose("Start processing finalized checkpoint", {epoch: finalizedEpoch, rootHex: finalized.rootHex});
@@ -1,4 +1,4 @@
1
- import {CheckpointWithPayloadStatus} from "@lodestar/fork-choice";
1
+ import {CheckpointWithHex} from "@lodestar/fork-choice";
2
2
  import {RootHex} from "@lodestar/types";
3
3
  import {Metrics} from "../../metrics/metrics.js";
4
4
 
@@ -45,9 +45,9 @@ export type FinalizedStats = {
45
45
 
46
46
  export interface StateArchiveStrategy {
47
47
  onCheckpoint(stateRoot: RootHex, metrics?: Metrics | null): Promise<void>;
48
- onFinalizedCheckpoint(finalized: CheckpointWithPayloadStatus, metrics?: Metrics | null): Promise<void>;
49
- maybeArchiveState(finalized: CheckpointWithPayloadStatus, metrics?: Metrics | null): Promise<void>;
50
- archiveState(finalized: CheckpointWithPayloadStatus, metrics?: Metrics | null): Promise<void>;
48
+ onFinalizedCheckpoint(finalized: CheckpointWithHex, metrics?: Metrics | null): Promise<void>;
49
+ maybeArchiveState(finalized: CheckpointWithHex, metrics?: Metrics | null): Promise<void>;
50
+ archiveState(finalized: CheckpointWithHex, metrics?: Metrics | null): Promise<void>;
51
51
  }
52
52
 
53
53
  export interface IArchiveStore {
@@ -1,4 +1,4 @@
1
- import {CheckpointWithPayloadStatus} from "@lodestar/fork-choice";
1
+ import {CheckpointWithHex} from "@lodestar/fork-choice";
2
2
  import {SLOTS_PER_EPOCH} from "@lodestar/params";
3
3
  import {computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition";
4
4
  import {Epoch, RootHex, Slot} from "@lodestar/types";
@@ -40,7 +40,7 @@ export class FrequencyStateArchiveStrategy implements StateArchiveStrategy {
40
40
  private readonly bufferPool?: BufferPool | null
41
41
  ) {}
42
42
 
43
- async onFinalizedCheckpoint(_finalized: CheckpointWithPayloadStatus, _metrics?: Metrics | null): Promise<void> {}
43
+ async onFinalizedCheckpoint(_finalized: CheckpointWithHex, _metrics?: Metrics | null): Promise<void> {}
44
44
  async onCheckpoint(_stateRoot: RootHex, _metrics?: Metrics | null): Promise<void> {}
45
45
 
46
46
  /**
@@ -55,7 +55,7 @@ export class FrequencyStateArchiveStrategy implements StateArchiveStrategy {
55
55
  * epoch - 1024*2 epoch - 1024 epoch - 32 epoch
56
56
  * ```
57
57
  */
58
- async maybeArchiveState(finalized: CheckpointWithPayloadStatus, metrics?: Metrics | null): Promise<void> {
58
+ async maybeArchiveState(finalized: CheckpointWithHex, metrics?: Metrics | null): Promise<void> {
59
59
  let timer = metrics?.processFinalizedCheckpoint.frequencyStateArchive.startTimer();
60
60
  const lastStoredSlot = await this.db.stateArchive.lastKey();
61
61
  timer?.({step: FrequencyStateArchiveStep.LoadLastStoredSlot});
@@ -104,7 +104,7 @@ export class FrequencyStateArchiveStrategy implements StateArchiveStrategy {
104
104
  * Archives finalized states from active bucket to archive bucket.
105
105
  * Only the new finalized state is stored to disk
106
106
  */
107
- async archiveState(finalized: CheckpointWithPayloadStatus, metrics?: Metrics | null): Promise<void> {
107
+ async archiveState(finalized: CheckpointWithHex, metrics?: Metrics | null): Promise<void> {
108
108
  // starting from Mar 2024, the finalized state could be from disk or in memory
109
109
  let timer = metrics?.processFinalizedCheckpoint.frequencyStateArchive.startTimer();
110
110
  const finalizedHex = {epoch: finalized.epoch, rootHex: finalized.rootHex};