@lodestar/beacon-node 1.43.0-dev.6641fd750e → 1.43.0-dev.66d2c102e3

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 (368) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +4 -6
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/state/utils.d.ts +2 -2
  4. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  6. package/lib/api/impl/lodestar/attesterSlashing.d.ts +8 -0
  7. package/lib/api/impl/lodestar/attesterSlashing.d.ts.map +1 -0
  8. package/lib/api/impl/lodestar/attesterSlashing.js +29 -0
  9. package/lib/api/impl/lodestar/attesterSlashing.js.map +1 -0
  10. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  11. package/lib/api/impl/lodestar/index.js +37 -2
  12. package/lib/api/impl/lodestar/index.js.map +1 -1
  13. package/lib/api/impl/validator/index.d.ts.map +1 -1
  14. package/lib/api/impl/validator/index.js +1 -4
  15. package/lib/api/impl/validator/index.js.map +1 -1
  16. package/lib/chain/GetBlobsTracker.d.ts +1 -1
  17. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  18. package/lib/chain/GetBlobsTracker.js +1 -2
  19. package/lib/chain/GetBlobsTracker.js.map +1 -1
  20. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  21. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  22. package/lib/chain/archiveStore/interface.d.ts +4 -4
  23. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  24. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  25. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  26. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -4
  27. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  28. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +2 -2
  29. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  30. package/lib/chain/archiveStore/utils/archiveBlocks.js +110 -58
  31. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  32. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  33. package/lib/chain/blocks/importBlock.js +32 -37
  34. package/lib/chain/blocks/importBlock.js.map +1 -1
  35. package/lib/chain/blocks/importExecutionPayload.d.ts +25 -13
  36. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  37. package/lib/chain/blocks/importExecutionPayload.js +73 -84
  38. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  39. package/lib/chain/blocks/index.d.ts +5 -3
  40. package/lib/chain/blocks/index.d.ts.map +1 -1
  41. package/lib/chain/blocks/index.js +29 -11
  42. package/lib/chain/blocks/index.js.map +1 -1
  43. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +3 -0
  44. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  45. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +20 -0
  46. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  47. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
  48. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  49. package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -5
  50. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  51. package/lib/chain/blocks/types.d.ts +15 -21
  52. package/lib/chain/blocks/types.d.ts.map +1 -1
  53. package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
  54. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  55. package/lib/chain/blocks/utils/chainSegment.js +81 -12
  56. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  57. package/lib/chain/blocks/verifyBlock.d.ts +3 -2
  58. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  59. package/lib/chain/blocks/verifyBlock.js +30 -5
  60. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  61. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  62. package/lib/chain/blocks/verifyBlocksSanityChecks.js +15 -4
  63. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  64. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  65. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  66. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +76 -0
  67. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  68. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
  69. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
  70. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +25 -0
  71. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
  72. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  73. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
  74. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
  75. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
  76. package/lib/chain/chain.d.ts +8 -6
  77. package/lib/chain/chain.d.ts.map +1 -1
  78. package/lib/chain/chain.js +36 -43
  79. package/lib/chain/chain.js.map +1 -1
  80. package/lib/chain/emitter.d.ts +16 -4
  81. package/lib/chain/emitter.d.ts.map +1 -1
  82. package/lib/chain/emitter.js +5 -0
  83. package/lib/chain/emitter.js.map +1 -1
  84. package/lib/chain/errors/attestationError.d.ts +8 -1
  85. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  86. package/lib/chain/errors/attestationError.js +4 -0
  87. package/lib/chain/errors/attestationError.js.map +1 -1
  88. package/lib/chain/errors/blockError.d.ts +8 -1
  89. package/lib/chain/errors/blockError.d.ts.map +1 -1
  90. package/lib/chain/errors/blockError.js +2 -0
  91. package/lib/chain/errors/blockError.js.map +1 -1
  92. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  93. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  94. package/lib/chain/errors/executionPayloadBid.js +1 -0
  95. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  96. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  97. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  98. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  99. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  100. package/lib/chain/errors/index.d.ts +1 -0
  101. package/lib/chain/errors/index.d.ts.map +1 -1
  102. package/lib/chain/errors/index.js +1 -0
  103. package/lib/chain/errors/index.js.map +1 -1
  104. package/lib/chain/errors/proposerPreferences.d.ts +33 -0
  105. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  106. package/lib/chain/errors/proposerPreferences.js +13 -0
  107. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  108. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  109. package/lib/chain/forkChoice/index.js +11 -15
  110. package/lib/chain/forkChoice/index.js.map +1 -1
  111. package/lib/chain/interface.d.ts +7 -5
  112. package/lib/chain/interface.d.ts.map +1 -1
  113. package/lib/chain/interface.js.map +1 -1
  114. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  115. package/lib/chain/prepareNextSlot.js +48 -22
  116. package/lib/chain/prepareNextSlot.js.map +1 -1
  117. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +3 -9
  118. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  119. package/lib/chain/produceBlock/computeNewStateRoot.js +5 -32
  120. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  121. package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -8
  122. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  123. package/lib/chain/produceBlock/produceBlockBody.js +55 -24
  124. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  125. package/lib/chain/regen/errors.d.ts +1 -11
  126. package/lib/chain/regen/errors.d.ts.map +1 -1
  127. package/lib/chain/regen/errors.js +0 -2
  128. package/lib/chain/regen/errors.js.map +1 -1
  129. package/lib/chain/regen/interface.d.ts +7 -12
  130. package/lib/chain/regen/interface.d.ts.map +1 -1
  131. package/lib/chain/regen/interface.js +1 -0
  132. package/lib/chain/regen/interface.js.map +1 -1
  133. package/lib/chain/regen/queued.d.ts +6 -11
  134. package/lib/chain/regen/queued.d.ts.map +1 -1
  135. package/lib/chain/regen/queued.js +8 -40
  136. package/lib/chain/regen/queued.js.map +1 -1
  137. package/lib/chain/regen/regen.d.ts +0 -5
  138. package/lib/chain/regen/regen.d.ts.map +1 -1
  139. package/lib/chain/regen/regen.js +7 -34
  140. package/lib/chain/regen/regen.js.map +1 -1
  141. package/lib/chain/seenCache/index.d.ts +1 -0
  142. package/lib/chain/seenCache/index.d.ts.map +1 -1
  143. package/lib/chain/seenCache/index.js +1 -0
  144. package/lib/chain/seenCache/index.js.map +1 -1
  145. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +11 -4
  146. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  147. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +20 -18
  148. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  149. package/lib/chain/seenCache/seenProposerPreferences.d.ts +15 -0
  150. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  151. package/lib/chain/seenCache/seenProposerPreferences.js +25 -0
  152. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  153. package/lib/chain/stateCache/datastore/db.d.ts +5 -4
  154. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  155. package/lib/chain/stateCache/datastore/db.js +10 -32
  156. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  157. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  158. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  159. package/lib/chain/stateCache/datastore/file.js +5 -5
  160. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  161. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  162. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  163. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
  164. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  165. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
  166. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  167. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
  168. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  169. package/lib/chain/stateCache/persistentCheckpointsCache.js +120 -216
  170. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  171. package/lib/chain/stateCache/types.d.ts +8 -15
  172. package/lib/chain/stateCache/types.d.ts.map +1 -1
  173. package/lib/chain/stateCache/types.js.map +1 -1
  174. package/lib/chain/validation/aggregateAndProof.js +12 -0
  175. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  176. package/lib/chain/validation/attestation.d.ts.map +1 -1
  177. package/lib/chain/validation/attestation.js +12 -0
  178. package/lib/chain/validation/attestation.js.map +1 -1
  179. package/lib/chain/validation/block.d.ts.map +1 -1
  180. package/lib/chain/validation/block.js +1 -0
  181. package/lib/chain/validation/block.js.map +1 -1
  182. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  183. package/lib/chain/validation/executionPayloadBid.js +13 -1
  184. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  185. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  186. package/lib/chain/validation/executionPayloadEnvelope.js +21 -11
  187. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  188. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  189. package/lib/chain/validation/payloadAttestationMessage.js +4 -3
  190. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  191. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  192. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  193. package/lib/chain/validation/proposerPreferences.js +69 -0
  194. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  195. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
  196. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  197. package/lib/execution/engine/http.d.ts.map +1 -1
  198. package/lib/execution/engine/http.js +21 -14
  199. package/lib/execution/engine/http.js.map +1 -1
  200. package/lib/execution/engine/interface.d.ts +1 -0
  201. package/lib/execution/engine/interface.d.ts.map +1 -1
  202. package/lib/execution/engine/mock.d.ts.map +1 -1
  203. package/lib/execution/engine/mock.js +6 -0
  204. package/lib/execution/engine/mock.js.map +1 -1
  205. package/lib/execution/engine/types.d.ts +20 -0
  206. package/lib/execution/engine/types.d.ts.map +1 -1
  207. package/lib/execution/engine/types.js +18 -0
  208. package/lib/execution/engine/types.js.map +1 -1
  209. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  210. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  211. package/lib/metrics/metrics/lodestar.js +4 -0
  212. package/lib/metrics/metrics/lodestar.js.map +1 -1
  213. package/lib/network/gossip/interface.d.ts +7 -1
  214. package/lib/network/gossip/interface.d.ts.map +1 -1
  215. package/lib/network/gossip/interface.js +1 -0
  216. package/lib/network/gossip/interface.js.map +1 -1
  217. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  218. package/lib/network/gossip/scoringParameters.js +12 -1
  219. package/lib/network/gossip/scoringParameters.js.map +1 -1
  220. package/lib/network/gossip/topic.d.ts +30 -748
  221. package/lib/network/gossip/topic.d.ts.map +1 -1
  222. package/lib/network/gossip/topic.js +6 -0
  223. package/lib/network/gossip/topic.js.map +1 -1
  224. package/lib/network/network.js +1 -1
  225. package/lib/network/network.js.map +1 -1
  226. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  227. package/lib/network/processor/gossipHandlers.js +32 -12
  228. package/lib/network/processor/gossipHandlers.js.map +1 -1
  229. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  230. package/lib/network/processor/gossipQueues/index.js +5 -0
  231. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  232. package/lib/network/processor/index.d.ts.map +1 -1
  233. package/lib/network/processor/index.js +1 -0
  234. package/lib/network/processor/index.js.map +1 -1
  235. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  236. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +14 -6
  237. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  238. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  239. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +11 -5
  240. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  241. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  242. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +17 -5
  243. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  244. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  245. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +7 -4
  246. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  247. package/lib/node/nodejs.d.ts.map +1 -1
  248. package/lib/node/nodejs.js +4 -2
  249. package/lib/node/nodejs.js.map +1 -1
  250. package/lib/node/notifier.js +7 -1
  251. package/lib/node/notifier.js.map +1 -1
  252. package/lib/sync/range/batch.d.ts +12 -2
  253. package/lib/sync/range/batch.d.ts.map +1 -1
  254. package/lib/sync/range/batch.js +56 -30
  255. package/lib/sync/range/batch.js.map +1 -1
  256. package/lib/sync/range/chain.d.ts +6 -2
  257. package/lib/sync/range/chain.d.ts.map +1 -1
  258. package/lib/sync/range/chain.js +4 -3
  259. package/lib/sync/range/chain.js.map +1 -1
  260. package/lib/sync/range/range.d.ts.map +1 -1
  261. package/lib/sync/range/range.js +17 -6
  262. package/lib/sync/range/range.js.map +1 -1
  263. package/lib/sync/types.d.ts +34 -0
  264. package/lib/sync/types.d.ts.map +1 -1
  265. package/lib/sync/types.js +34 -0
  266. package/lib/sync/types.js.map +1 -1
  267. package/lib/sync/unknownBlock.d.ts +24 -1
  268. package/lib/sync/unknownBlock.d.ts.map +1 -1
  269. package/lib/sync/unknownBlock.js +649 -53
  270. package/lib/sync/unknownBlock.js.map +1 -1
  271. package/lib/sync/utils/downloadByRange.d.ts +46 -10
  272. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  273. package/lib/sync/utils/downloadByRange.js +147 -24
  274. package/lib/sync/utils/downloadByRange.js.map +1 -1
  275. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  276. package/lib/sync/utils/downloadByRoot.js +6 -2
  277. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  278. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  279. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  280. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  281. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  282. package/lib/util/sszBytes.d.ts.map +1 -1
  283. package/lib/util/sszBytes.js +16 -3
  284. package/lib/util/sszBytes.js.map +1 -1
  285. package/package.json +17 -16
  286. package/src/api/impl/beacon/blocks/index.ts +6 -6
  287. package/src/api/impl/beacon/state/utils.ts +2 -2
  288. package/src/api/impl/lodestar/attesterSlashing.ts +43 -0
  289. package/src/api/impl/lodestar/index.ts +49 -3
  290. package/src/api/impl/validator/index.ts +3 -6
  291. package/src/chain/GetBlobsTracker.ts +1 -2
  292. package/src/chain/archiveStore/archiveStore.ts +5 -5
  293. package/src/chain/archiveStore/interface.ts +4 -4
  294. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +6 -8
  295. package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
  296. package/src/chain/blocks/importBlock.ts +31 -42
  297. package/src/chain/blocks/importExecutionPayload.ts +93 -104
  298. package/src/chain/blocks/index.ts +45 -14
  299. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +27 -0
  300. package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -6
  301. package/src/chain/blocks/types.ts +15 -26
  302. package/src/chain/blocks/utils/chainSegment.ts +106 -17
  303. package/src/chain/blocks/verifyBlock.ts +35 -6
  304. package/src/chain/blocks/verifyBlocksSanityChecks.ts +16 -7
  305. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +129 -0
  306. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +38 -0
  307. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
  308. package/src/chain/chain.ts +51 -65
  309. package/src/chain/emitter.ts +15 -3
  310. package/src/chain/errors/attestationError.ts +6 -1
  311. package/src/chain/errors/blockError.ts +4 -1
  312. package/src/chain/errors/executionPayloadBid.ts +6 -0
  313. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  314. package/src/chain/errors/index.ts +1 -0
  315. package/src/chain/errors/proposerPreferences.ts +39 -0
  316. package/src/chain/forkChoice/index.ts +8 -20
  317. package/src/chain/interface.ts +11 -3
  318. package/src/chain/prepareNextSlot.ts +62 -23
  319. package/src/chain/produceBlock/computeNewStateRoot.ts +6 -43
  320. package/src/chain/produceBlock/produceBlockBody.ts +73 -27
  321. package/src/chain/regen/errors.ts +1 -6
  322. package/src/chain/regen/interface.ts +7 -12
  323. package/src/chain/regen/queued.ts +12 -48
  324. package/src/chain/regen/regen.ts +8 -36
  325. package/src/chain/seenCache/index.ts +1 -0
  326. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +22 -20
  327. package/src/chain/seenCache/seenProposerPreferences.ts +29 -0
  328. package/src/chain/stateCache/datastore/db.ts +10 -33
  329. package/src/chain/stateCache/datastore/file.ts +5 -6
  330. package/src/chain/stateCache/datastore/types.ts +2 -3
  331. package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
  332. package/src/chain/stateCache/persistentCheckpointsCache.ts +139 -247
  333. package/src/chain/stateCache/types.ts +8 -14
  334. package/src/chain/validation/aggregateAndProof.ts +13 -0
  335. package/src/chain/validation/attestation.ts +13 -0
  336. package/src/chain/validation/block.ts +1 -0
  337. package/src/chain/validation/executionPayloadBid.ts +14 -0
  338. package/src/chain/validation/executionPayloadEnvelope.ts +22 -12
  339. package/src/chain/validation/payloadAttestationMessage.ts +5 -3
  340. package/src/chain/validation/proposerPreferences.ts +91 -0
  341. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
  342. package/src/execution/engine/http.ts +21 -14
  343. package/src/execution/engine/interface.ts +1 -0
  344. package/src/execution/engine/mock.ts +8 -1
  345. package/src/execution/engine/types.ts +41 -0
  346. package/src/metrics/metrics/lodestar.ts +4 -0
  347. package/src/network/gossip/interface.ts +6 -0
  348. package/src/network/gossip/scoringParameters.ts +14 -1
  349. package/src/network/gossip/topic.ts +6 -0
  350. package/src/network/network.ts +1 -1
  351. package/src/network/processor/gossipHandlers.ts +41 -16
  352. package/src/network/processor/gossipQueues/index.ts +5 -0
  353. package/src/network/processor/index.ts +1 -0
  354. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +14 -6
  355. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +11 -5
  356. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +17 -5
  357. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +7 -4
  358. package/src/node/nodejs.ts +4 -2
  359. package/src/node/notifier.ts +8 -1
  360. package/src/sync/range/batch.ts +90 -35
  361. package/src/sync/range/chain.ts +13 -5
  362. package/src/sync/range/range.ts +18 -6
  363. package/src/sync/types.ts +72 -0
  364. package/src/sync/unknownBlock.ts +810 -57
  365. package/src/sync/utils/downloadByRange.ts +256 -39
  366. package/src/sync/utils/downloadByRoot.ts +12 -2
  367. package/src/sync/utils/pendingBlocksTree.ts +0 -15
  368. package/src/util/sszBytes.ts +21 -3
@@ -4,6 +4,7 @@ import {ErrorAborted, LodestarError, Logger, toRootHex} from "@lodestar/utils";
4
4
  import {isBlockInputBlobs, isBlockInputColumns} from "../../chain/blocks/blockInput/blockInput.js";
5
5
  import {BlockInputErrorCode} from "../../chain/blocks/blockInput/errors.js";
6
6
  import {IBlockInput} from "../../chain/blocks/blockInput/types.js";
7
+ import {PayloadEnvelopeInput} from "../../chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
7
8
  import {BlobSidecarErrorCode} from "../../chain/errors/blobSidecarError.js";
8
9
  import {DataColumnSidecarErrorCode} from "../../chain/errors/dataColumnSidecarError.js";
9
10
  import {Metrics} from "../../metrics/metrics.js";
@@ -44,13 +45,19 @@ export type SyncChainFns = {
44
45
  * Must return if ALL blocks are processed successfully
45
46
  * If SOME blocks are processed must throw BlockProcessorError()
46
47
  */
47
- processChainSegment: (blocks: IBlockInput[], syncType: RangeSyncType) => Promise<void>;
48
+ processChainSegment: (
49
+ blocks: IBlockInput[],
50
+ payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null,
51
+ syncType: RangeSyncType
52
+ ) => Promise<void>;
48
53
  /** Must download blocks, and validate their range */
49
54
  downloadByRange: (
50
55
  peer: PeerSyncMeta,
51
56
  batch: Batch,
52
57
  syncType: RangeSyncType
53
- ) => Promise<WarnResult<IBlockInput[], DownloadByRangeError>>;
58
+ ) => Promise<
59
+ WarnResult<{blocks: IBlockInput[]; payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null}, DownloadByRangeError>
60
+ >;
54
61
  /** Report peer for negative actions. Decouples from the full network instance */
55
62
  reportPeer: (peer: PeerIdStr, action: PeerAction, actionName: string) => void;
56
63
  /** Gets current peer custodyColumns and earliestAvailableSlot */
@@ -516,7 +523,8 @@ export class SyncChain {
516
523
  });
517
524
  this.metrics?.syncRange.downloadByRange.success.inc();
518
525
  const {warnings, result} = res.result;
519
- const downloadSuccessOutput = batch.downloadingSuccess(peer.peerId, result);
526
+ const {blocks: downloadedBlocks, payloadEnvelopes} = result;
527
+ const downloadSuccessOutput = batch.downloadingSuccess(peer.peerId, downloadedBlocks, payloadEnvelopes);
520
528
  const logMeta: Record<string, number> = {
521
529
  blockCount: downloadSuccessOutput.blocks.length,
522
530
  };
@@ -578,10 +586,10 @@ export class SyncChain {
578
586
  * Sends `batch` to the processor. Note: batch may be empty
579
587
  */
580
588
  private async processBatch(batch: Batch): Promise<void> {
581
- const blocks = batch.startProcessing();
589
+ const {blocks, payloadEnvelopes} = batch.startProcessing();
582
590
 
583
591
  // wrapError ensures to never call both batch success() and batch error()
584
- const res = await wrapError(this.processChainSegment(blocks, this.syncType));
592
+ const res = await wrapError(this.processChainSegment(blocks, payloadEnvelopes, this.syncType));
585
593
 
586
594
  if (!res.err) {
587
595
  batch.processingSuccess();
@@ -172,7 +172,7 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
172
172
  }
173
173
 
174
174
  /** Convenience method for `SyncChain` */
175
- private processChainSegment: SyncChainFns["processChainSegment"] = async (blocks, syncType) => {
175
+ private processChainSegment: SyncChainFns["processChainSegment"] = async (blocks, payloadEnvelopes, syncType) => {
176
176
  // Not trusted, verify signatures
177
177
  const flags: ImportBlockOpts = {
178
178
  // Only skip importing attestations for finalized sync. For head sync attestation are valuable.
@@ -192,9 +192,15 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
192
192
 
193
193
  if (this.opts?.disableProcessAsChainSegment) {
194
194
  // Should only be used for debugging or testing
195
- for (const block of blocks) await this.chain.processBlock(block, flags);
195
+ for (const block of blocks) {
196
+ await this.chain.processBlock(block, flags);
197
+ const payloadEnvelope = payloadEnvelopes?.get(block.slot);
198
+ if (payloadEnvelope) {
199
+ await this.chain.processExecutionPayload(payloadEnvelope);
200
+ }
201
+ }
196
202
  } else {
197
- await this.chain.processChainSegment(blocks, flags);
203
+ await this.chain.processChainSegment(blocks, payloadEnvelopes, flags);
198
204
  }
199
205
  };
200
206
 
@@ -209,13 +215,19 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
209
215
  peerDasMetrics: this.chain.metrics?.peerDas,
210
216
  ...batch.getRequestsForPeer(peer),
211
217
  });
212
- const cached = cacheByRangeResponses({
218
+ const {responses, payloadEnvelopes: downloadedPayloadEnvelopes} = result;
219
+ const {blocks, payloadEnvelopes} = cacheByRangeResponses({
213
220
  cache: this.chain.seenBlockInputCache,
221
+ seenPayloadEnvelopeInputCache: this.chain.seenPayloadEnvelopeInputCache,
214
222
  peerIdStr: peer.peerId,
215
- responses: result,
223
+ responses,
216
224
  batchBlocks,
225
+ downloadedPayloadEnvelopes,
226
+ existingPayloadEnvelopes: batch.getPayloadEnvelopes(),
227
+ custodyConfig: this.chain.custodyConfig,
228
+ seenTimestampSec: Date.now() / 1000,
217
229
  });
218
- return {result: cached, warnings};
230
+ return {result: {blocks, payloadEnvelopes}, warnings};
219
231
  };
220
232
 
221
233
  private pruneBlockInputs: SyncChainFns["pruneBlockInputs"] = (blocks: IBlockInput[]) => {
package/src/sync/types.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import {RootHex, Slot} from "@lodestar/types";
2
+ import {SignedExecutionPayloadEnvelope} from "@lodestar/types/gloas";
3
+ import {toRootHex} from "@lodestar/utils";
2
4
  import {IBlockInput} from "../chain/blocks/blockInput/index.js";
5
+ import {PayloadEnvelopeInput} from "../chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
3
6
 
4
7
  export enum PendingBlockType {
5
8
  /**
@@ -26,6 +29,14 @@ export enum PendingBlockInputStatus {
26
29
  processing = "processing",
27
30
  }
28
31
 
32
+ export enum PendingPayloadInputStatus {
33
+ pending = "pending",
34
+ fetching = "fetching",
35
+ waitingForBlock = "waiting_for_block",
36
+ downloaded = "downloaded",
37
+ processing = "processing",
38
+ }
39
+
29
40
  export type PendingBlockInput = {
30
41
  status: PendingBlockInputStatus;
31
42
  blockInput: IBlockInput;
@@ -44,10 +55,47 @@ export type PendingRootHex = {
44
55
 
45
56
  export type BlockInputSyncCacheItem = PendingBlockInput | PendingRootHex;
46
57
 
58
+ export type PendingPayloadInput = {
59
+ status:
60
+ | PendingPayloadInputStatus.pending
61
+ | PendingPayloadInputStatus.fetching
62
+ | PendingPayloadInputStatus.downloaded
63
+ | PendingPayloadInputStatus.processing;
64
+ payloadInput: PayloadEnvelopeInput;
65
+ timeAddedSec: number;
66
+ timeSyncedSec?: number;
67
+ peerIdStrings: Set<string>;
68
+ };
69
+
70
+ export type PendingPayloadRootHex = {
71
+ status: PendingPayloadInputStatus.pending | PendingPayloadInputStatus.fetching;
72
+ rootHex: RootHex;
73
+ timeAddedSec: number;
74
+ timeSyncedSec?: number;
75
+ peerIdStrings: Set<string>;
76
+ };
77
+
78
+ export type PendingPayloadEnvelope = {
79
+ status: PendingPayloadInputStatus.waitingForBlock;
80
+ envelope: SignedExecutionPayloadEnvelope;
81
+ timeAddedSec: number;
82
+ peerIdStrings: Set<string>;
83
+ };
84
+
85
+ export type PayloadSyncCacheItem = PendingPayloadInput | PendingPayloadRootHex | PendingPayloadEnvelope;
86
+
47
87
  export function isPendingBlockInput(pending: BlockInputSyncCacheItem): pending is PendingBlockInput {
48
88
  return "blockInput" in pending;
49
89
  }
50
90
 
91
+ export function isPendingPayloadInput(pending: PayloadSyncCacheItem): pending is PendingPayloadInput {
92
+ return "payloadInput" in pending;
93
+ }
94
+
95
+ export function isPendingPayloadEnvelope(pending: PayloadSyncCacheItem): pending is PendingPayloadEnvelope {
96
+ return "envelope" in pending;
97
+ }
98
+
51
99
  export function getBlockInputSyncCacheItemRootHex(block: BlockInputSyncCacheItem): RootHex {
52
100
  return isPendingBlockInput(block) ? block.blockInput.blockRootHex : block.rootHex;
53
101
  }
@@ -55,3 +103,27 @@ export function getBlockInputSyncCacheItemRootHex(block: BlockInputSyncCacheItem
55
103
  export function getBlockInputSyncCacheItemSlot(block: BlockInputSyncCacheItem): Slot | string {
56
104
  return isPendingBlockInput(block) ? block.blockInput.slot : "unknown";
57
105
  }
106
+
107
+ export function getPayloadSyncCacheItemRootHex(payload: PayloadSyncCacheItem): RootHex {
108
+ if (isPendingPayloadInput(payload)) {
109
+ return payload.payloadInput.blockRootHex;
110
+ }
111
+
112
+ if (isPendingPayloadEnvelope(payload)) {
113
+ return toRootHex(payload.envelope.message.beaconBlockRoot);
114
+ }
115
+
116
+ return payload.rootHex;
117
+ }
118
+
119
+ export function getPayloadSyncCacheItemSlot(payload: PayloadSyncCacheItem): Slot | string {
120
+ if (isPendingPayloadInput(payload)) {
121
+ return payload.payloadInput.slot;
122
+ }
123
+
124
+ if (isPendingPayloadEnvelope(payload)) {
125
+ return payload.envelope.message.payload.slotNumber;
126
+ }
127
+
128
+ return "unknown";
129
+ }