@lodestar/beacon-node 1.51.0-dev.83da04fef3 → 1.51.0-dev.8d5cdd33be

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 (636) hide show
  1. package/lib/api/impl/api.js +1 -1
  2. package/lib/api/impl/api.js.map +1 -1
  3. package/lib/api/impl/beacon/blocks/index.d.ts +2 -1
  4. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/blocks/index.js +48 -95
  6. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  7. package/lib/api/impl/beacon/index.d.ts +2 -1
  8. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/index.js +2 -2
  10. package/lib/api/impl/beacon/index.js.map +1 -1
  11. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/pool/index.js +22 -2
  13. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  14. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  15. package/lib/api/impl/beacon/state/index.js +8 -2
  16. package/lib/api/impl/beacon/state/index.js.map +1 -1
  17. package/lib/api/impl/beacon/state/utils.d.ts +3 -2
  18. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  19. package/lib/api/impl/beacon/state/utils.js +17 -9
  20. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  21. package/lib/api/impl/debug/index.d.ts.map +1 -1
  22. package/lib/api/impl/debug/index.js +3 -0
  23. package/lib/api/impl/debug/index.js.map +1 -1
  24. package/lib/api/impl/validator/index.d.ts +6 -0
  25. package/lib/api/impl/validator/index.d.ts.map +1 -1
  26. package/lib/api/impl/validator/index.js +143 -35
  27. package/lib/api/impl/validator/index.js.map +1 -1
  28. package/lib/api/options.d.ts +2 -0
  29. package/lib/api/options.d.ts.map +1 -1
  30. package/lib/api/options.js +1 -0
  31. package/lib/api/options.js.map +1 -1
  32. package/lib/chain/ColumnReconstructionTracker.d.ts +11 -11
  33. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  34. package/lib/chain/ColumnReconstructionTracker.js +46 -40
  35. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  36. package/lib/chain/GetBlobsTracker.d.ts +13 -2
  37. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  38. package/lib/chain/GetBlobsTracker.js +69 -35
  39. package/lib/chain/GetBlobsTracker.js.map +1 -1
  40. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/archiveStore.js +1 -0
  42. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  43. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
  44. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  45. package/lib/chain/archiveStore/utils/archiveBlocks.js +61 -97
  46. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  47. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  48. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  49. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  50. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  51. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  52. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  53. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  54. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  55. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  56. package/lib/chain/blocks/blockInput/types.js +0 -1
  57. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  58. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  59. package/lib/chain/blocks/importBlock.js +42 -57
  60. package/lib/chain/blocks/importBlock.js.map +1 -1
  61. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -11
  62. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  63. package/lib/chain/blocks/importExecutionPayload.js +82 -20
  64. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  65. package/lib/chain/blocks/index.d.ts.map +1 -1
  66. package/lib/chain/blocks/index.js +4 -4
  67. package/lib/chain/blocks/index.js.map +1 -1
  68. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +12 -9
  69. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  70. package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
  71. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  72. package/lib/chain/blocks/types.d.ts +7 -19
  73. package/lib/chain/blocks/types.d.ts.map +1 -1
  74. package/lib/chain/blocks/types.js +5 -24
  75. package/lib/chain/blocks/types.js.map +1 -1
  76. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  77. package/lib/chain/blocks/verifyBlock.js +18 -7
  78. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  79. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  80. package/lib/chain/blocks/verifyBlocksDataAvailability.js +14 -2
  81. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  82. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  83. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  84. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  85. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  86. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  87. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  88. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  89. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  90. package/lib/chain/blocks/verifyBlocksSignatures.js +7 -5
  91. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  92. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
  93. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  94. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +11 -6
  95. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  96. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  97. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  98. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  99. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  100. package/lib/chain/bls/interface.d.ts +2 -0
  101. package/lib/chain/bls/interface.d.ts.map +1 -1
  102. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  103. package/lib/chain/bls/multithread/index.js +13 -11
  104. package/lib/chain/bls/multithread/index.js.map +1 -1
  105. package/lib/chain/bls/multithread/types.d.ts +1 -1
  106. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  107. package/lib/chain/bls/multithread/worker.js +1 -1
  108. package/lib/chain/bls/multithread/worker.js.map +1 -1
  109. package/lib/chain/bls/singleThread.js +1 -1
  110. package/lib/chain/bls/singleThread.js.map +1 -1
  111. package/lib/chain/bls/utils.js +1 -1
  112. package/lib/chain/bls/utils.js.map +1 -1
  113. package/lib/chain/chain.d.ts +26 -4
  114. package/lib/chain/chain.d.ts.map +1 -1
  115. package/lib/chain/chain.js +128 -43
  116. package/lib/chain/chain.js.map +1 -1
  117. package/lib/chain/emitter.d.ts +7 -7
  118. package/lib/chain/emitter.d.ts.map +1 -1
  119. package/lib/chain/emitter.js +5 -5
  120. package/lib/chain/emitter.js.map +1 -1
  121. package/lib/chain/errors/blockError.d.ts +1 -1
  122. package/lib/chain/errors/blockError.d.ts.map +1 -1
  123. package/lib/chain/errors/blockError.js +1 -1
  124. package/lib/chain/errors/blockError.js.map +1 -1
  125. package/lib/chain/errors/executionPayloadBid.d.ts +11 -1
  126. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  127. package/lib/chain/errors/executionPayloadBid.js +2 -0
  128. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  129. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  130. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  131. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  132. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  133. package/lib/chain/errors/inclusionList.d.ts +60 -0
  134. package/lib/chain/errors/inclusionList.d.ts.map +1 -0
  135. package/lib/chain/errors/inclusionList.js +19 -0
  136. package/lib/chain/errors/inclusionList.js.map +1 -0
  137. package/lib/chain/errors/index.d.ts +1 -1
  138. package/lib/chain/errors/index.d.ts.map +1 -1
  139. package/lib/chain/errors/index.js +1 -1
  140. package/lib/chain/errors/index.js.map +1 -1
  141. package/lib/chain/forkChoice/index.d.ts +11 -1
  142. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  143. package/lib/chain/forkChoice/index.js +11 -0
  144. package/lib/chain/forkChoice/index.js.map +1 -1
  145. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  146. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  147. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  148. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  149. package/lib/chain/interface.d.ts +10 -7
  150. package/lib/chain/interface.d.ts.map +1 -1
  151. package/lib/chain/interface.js.map +1 -1
  152. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  153. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  154. package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
  155. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  156. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  157. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  158. package/lib/chain/opPools/attestationPool.js +15 -4
  159. package/lib/chain/opPools/attestationPool.js.map +1 -1
  160. package/lib/chain/opPools/inclusionListStore.d.ts +63 -0
  161. package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
  162. package/lib/chain/opPools/inclusionListStore.js +171 -0
  163. package/lib/chain/opPools/inclusionListStore.js.map +1 -0
  164. package/lib/chain/opPools/index.d.ts +2 -0
  165. package/lib/chain/opPools/index.d.ts.map +1 -1
  166. package/lib/chain/opPools/index.js +2 -0
  167. package/lib/chain/opPools/index.js.map +1 -1
  168. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  169. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  170. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  171. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  172. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  173. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  174. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  175. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  176. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  177. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  178. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  179. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  180. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  181. package/lib/chain/opPools/utils.d.ts +1 -1
  182. package/lib/chain/opPools/utils.d.ts.map +1 -1
  183. package/lib/chain/opPools/utils.js +1 -1
  184. package/lib/chain/opPools/utils.js.map +1 -1
  185. package/lib/chain/options.d.ts +5 -3
  186. package/lib/chain/options.d.ts.map +1 -1
  187. package/lib/chain/options.js +0 -1
  188. package/lib/chain/options.js.map +1 -1
  189. package/lib/chain/produceBlock/produceBlockBody.d.ts +6 -3
  190. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  191. package/lib/chain/produceBlock/produceBlockBody.js +32 -11
  192. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  193. package/lib/chain/proposerTracker.d.ts +31 -0
  194. package/lib/chain/proposerTracker.d.ts.map +1 -0
  195. package/lib/chain/proposerTracker.js +75 -0
  196. package/lib/chain/proposerTracker.js.map +1 -0
  197. package/lib/chain/regen/interface.d.ts +2 -2
  198. package/lib/chain/regen/interface.d.ts.map +1 -1
  199. package/lib/chain/regen/interface.js +1 -1
  200. package/lib/chain/regen/interface.js.map +1 -1
  201. package/lib/chain/regen/queued.d.ts +1 -1
  202. package/lib/chain/regen/queued.d.ts.map +1 -1
  203. package/lib/chain/regen/queued.js +5 -3
  204. package/lib/chain/regen/queued.js.map +1 -1
  205. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  206. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  207. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  208. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  209. package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
  210. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  211. package/lib/chain/validation/executionPayloadBid.js +37 -158
  212. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  213. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  214. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  215. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  216. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  217. package/lib/chain/validation/inclusionList.d.ts +14 -0
  218. package/lib/chain/validation/inclusionList.d.ts.map +1 -0
  219. package/lib/chain/validation/inclusionList.js +150 -0
  220. package/lib/chain/validation/inclusionList.js.map +1 -0
  221. package/lib/chain/validation/index.d.ts +1 -0
  222. package/lib/chain/validation/index.d.ts.map +1 -1
  223. package/lib/chain/validation/index.js +1 -0
  224. package/lib/chain/validation/index.js.map +1 -1
  225. package/lib/chain/validatorMonitor.d.ts +1 -2
  226. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  227. package/lib/chain/validatorMonitor.js +0 -3
  228. package/lib/chain/validatorMonitor.js.map +1 -1
  229. package/lib/db/beacon.d.ts +7 -0
  230. package/lib/db/beacon.d.ts.map +1 -1
  231. package/lib/db/beacon.js +34 -0
  232. package/lib/db/beacon.js.map +1 -1
  233. package/lib/db/dataColumnStore.d.ts +1 -1
  234. package/lib/db/dataColumnStore.d.ts.map +1 -1
  235. package/lib/db/dataColumnStore.js +1 -4
  236. package/lib/db/dataColumnStore.js.map +1 -1
  237. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  238. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  239. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  240. package/lib/db/flatFileStore/slotIndex.js +2 -2
  241. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  242. package/lib/db/interface.d.ts +1 -0
  243. package/lib/db/interface.d.ts.map +1 -1
  244. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  245. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  246. package/lib/db/repositories/blobSidecars.js +0 -1
  247. package/lib/db/repositories/blobSidecars.js.map +1 -1
  248. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
  249. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  250. package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
  251. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  252. package/lib/execution/builder/apiClient.d.ts +14 -8
  253. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  254. package/lib/execution/builder/apiClient.js +12 -10
  255. package/lib/execution/builder/apiClient.js.map +1 -1
  256. package/lib/execution/builder/http.d.ts +2 -0
  257. package/lib/execution/builder/http.d.ts.map +1 -1
  258. package/lib/execution/builder/http.js +2 -0
  259. package/lib/execution/builder/http.js.map +1 -1
  260. package/lib/execution/builder/validateBid.d.ts.map +1 -1
  261. package/lib/execution/builder/validateBid.js +14 -1
  262. package/lib/execution/builder/validateBid.js.map +1 -1
  263. package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
  264. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
  265. package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
  266. package/lib/execution/engine/disabled.d.ts +1 -0
  267. package/lib/execution/engine/disabled.d.ts.map +1 -1
  268. package/lib/execution/engine/disabled.js +3 -0
  269. package/lib/execution/engine/disabled.js.map +1 -1
  270. package/lib/execution/engine/http.d.ts +12 -8
  271. package/lib/execution/engine/http.d.ts.map +1 -1
  272. package/lib/execution/engine/http.js +35 -14
  273. package/lib/execution/engine/http.js.map +1 -1
  274. package/lib/execution/engine/index.d.ts +1 -1
  275. package/lib/execution/engine/index.d.ts.map +1 -1
  276. package/lib/execution/engine/index.js +1 -1
  277. package/lib/execution/engine/index.js.map +1 -1
  278. package/lib/execution/engine/interface.d.ts +29 -8
  279. package/lib/execution/engine/interface.d.ts.map +1 -1
  280. package/lib/execution/engine/interface.js.map +1 -1
  281. package/lib/execution/engine/jsonRpcTransport.d.ts +5 -6
  282. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  283. package/lib/execution/engine/jsonRpcTransport.js +34 -20
  284. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  285. package/lib/execution/engine/mock.d.ts +1 -1
  286. package/lib/execution/engine/mock.d.ts.map +1 -1
  287. package/lib/execution/engine/mock.js +31 -11
  288. package/lib/execution/engine/mock.js.map +1 -1
  289. package/lib/execution/engine/payloadIdCache.d.ts +5 -3
  290. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  291. package/lib/execution/engine/payloadIdCache.js +15 -4
  292. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  293. package/lib/execution/engine/restTransport.d.ts +4 -5
  294. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  295. package/lib/execution/engine/restTransport.js +4 -15
  296. package/lib/execution/engine/restTransport.js.map +1 -1
  297. package/lib/execution/engine/sszTypes.d.ts +38 -47
  298. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  299. package/lib/execution/engine/sszTypes.js +0 -5
  300. package/lib/execution/engine/sszTypes.js.map +1 -1
  301. package/lib/execution/engine/transport.d.ts +4 -14
  302. package/lib/execution/engine/transport.d.ts.map +1 -1
  303. package/lib/execution/engine/types.d.ts +25 -9
  304. package/lib/execution/engine/types.d.ts.map +1 -1
  305. package/lib/execution/engine/types.js +19 -14
  306. package/lib/execution/engine/types.js.map +1 -1
  307. package/lib/execution/engine/utils.d.ts.map +1 -1
  308. package/lib/execution/engine/utils.js +3 -2
  309. package/lib/execution/engine/utils.js.map +1 -1
  310. package/lib/index.d.ts +1 -0
  311. package/lib/index.d.ts.map +1 -1
  312. package/lib/index.js +2 -0
  313. package/lib/index.js.map +1 -1
  314. package/lib/metrics/metrics/beacon.d.ts +16 -9
  315. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  316. package/lib/metrics/metrics/beacon.js +35 -30
  317. package/lib/metrics/metrics/beacon.js.map +1 -1
  318. package/lib/metrics/metrics/lodestar.d.ts +49 -8
  319. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  320. package/lib/metrics/metrics/lodestar.js +128 -18
  321. package/lib/metrics/metrics/lodestar.js.map +1 -1
  322. package/lib/metrics/server/http.js +5 -5
  323. package/lib/metrics/server/http.js.map +1 -1
  324. package/lib/monitoring/service.js +1 -1
  325. package/lib/monitoring/service.js.map +1 -1
  326. package/lib/network/core/networkCore.d.ts +4 -1
  327. package/lib/network/core/networkCore.d.ts.map +1 -1
  328. package/lib/network/core/networkCore.js +7 -0
  329. package/lib/network/core/networkCore.js.map +1 -1
  330. package/lib/network/core/networkCoreWorker.js +2 -0
  331. package/lib/network/core/networkCoreWorker.js.map +1 -1
  332. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  333. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  334. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  335. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  336. package/lib/network/core/types.d.ts +6 -1
  337. package/lib/network/core/types.d.ts.map +1 -1
  338. package/lib/network/gossip/gossipsub.d.ts +1 -0
  339. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  340. package/lib/network/gossip/gossipsub.js +10 -0
  341. package/lib/network/gossip/gossipsub.js.map +1 -1
  342. package/lib/network/gossip/interface.d.ts +8 -9
  343. package/lib/network/gossip/interface.d.ts.map +1 -1
  344. package/lib/network/gossip/interface.js +1 -1
  345. package/lib/network/gossip/interface.js.map +1 -1
  346. package/lib/network/gossip/topic.d.ts +13 -21
  347. package/lib/network/gossip/topic.d.ts.map +1 -1
  348. package/lib/network/gossip/topic.js +13 -24
  349. package/lib/network/gossip/topic.js.map +1 -1
  350. package/lib/network/interface.d.ts +5 -5
  351. package/lib/network/interface.d.ts.map +1 -1
  352. package/lib/network/libp2p/index.d.ts.map +1 -1
  353. package/lib/network/libp2p/index.js +5 -1
  354. package/lib/network/libp2p/index.js.map +1 -1
  355. package/lib/network/network.d.ts +9 -7
  356. package/lib/network/network.d.ts.map +1 -1
  357. package/lib/network/network.js +58 -35
  358. package/lib/network/network.js.map +1 -1
  359. package/lib/network/options.d.ts +2 -0
  360. package/lib/network/options.d.ts.map +1 -1
  361. package/lib/network/options.js +2 -0
  362. package/lib/network/options.js.map +1 -1
  363. package/lib/network/peers/peerManager.d.ts +2 -1
  364. package/lib/network/peers/peerManager.d.ts.map +1 -1
  365. package/lib/network/peers/peerManager.js +28 -1
  366. package/lib/network/peers/peerManager.js.map +1 -1
  367. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  368. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  369. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  370. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  371. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -1
  372. package/lib/network/peers/utils/enrSubnetsDeserialize.js +5 -2
  373. package/lib/network/peers/utils/enrSubnetsDeserialize.js.map +1 -1
  374. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  375. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  376. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  377. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  378. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  379. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  380. package/lib/network/peers/utils/subnetMap.js +6 -3
  381. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  382. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  383. package/lib/network/processor/extractSlotRootFns.js +1 -8
  384. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  385. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  386. package/lib/network/processor/gossipHandlers.js +118 -149
  387. package/lib/network/processor/gossipHandlers.js.map +1 -1
  388. package/lib/network/processor/gossipQueues/index.js +6 -6
  389. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  390. package/lib/network/processor/gossipValidatorFn.js +5 -5
  391. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  392. package/lib/network/processor/index.d.ts +11 -0
  393. package/lib/network/processor/index.d.ts.map +1 -1
  394. package/lib/network/processor/index.js +66 -30
  395. package/lib/network/processor/index.js.map +1 -1
  396. package/lib/network/reqresp/ReqRespBeaconNode.js +6 -3
  397. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  398. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  399. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  400. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts +10 -0
  401. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
  402. package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
  403. package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
  404. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  405. package/lib/network/reqresp/handlers/index.js +6 -12
  406. package/lib/network/reqresp/handlers/index.js.map +1 -1
  407. package/lib/network/reqresp/protocols.d.ts +1 -2
  408. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  409. package/lib/network/reqresp/protocols.js +5 -10
  410. package/lib/network/reqresp/protocols.js.map +1 -1
  411. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  412. package/lib/network/reqresp/rateLimit.js +5 -17
  413. package/lib/network/reqresp/rateLimit.js.map +1 -1
  414. package/lib/network/reqresp/types.d.ts +6 -9
  415. package/lib/network/reqresp/types.d.ts.map +1 -1
  416. package/lib/network/reqresp/types.js +4 -7
  417. package/lib/network/reqresp/types.js.map +1 -1
  418. package/lib/network/subnets/attnetsService.d.ts +35 -5
  419. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  420. package/lib/network/subnets/attnetsService.js +84 -6
  421. package/lib/network/subnets/attnetsService.js.map +1 -1
  422. package/lib/network/subnets/interface.d.ts +7 -0
  423. package/lib/network/subnets/interface.d.ts.map +1 -1
  424. package/lib/network/subnets/interface.js.map +1 -1
  425. package/lib/node/nodejs.d.ts +3 -1
  426. package/lib/node/nodejs.d.ts.map +1 -1
  427. package/lib/node/nodejs.js +47 -21
  428. package/lib/node/nodejs.js.map +1 -1
  429. package/lib/node/options.d.ts +3 -1
  430. package/lib/node/options.d.ts.map +1 -1
  431. package/lib/node/options.js +4 -2
  432. package/lib/node/options.js.map +1 -1
  433. package/lib/sync/interface.d.ts.map +1 -1
  434. package/lib/sync/interface.js.map +1 -1
  435. package/lib/sync/range/batch.d.ts +2 -3
  436. package/lib/sync/range/batch.d.ts.map +1 -1
  437. package/lib/sync/range/batch.js +9 -22
  438. package/lib/sync/range/batch.js.map +1 -1
  439. package/lib/sync/range/chain.d.ts.map +1 -1
  440. package/lib/sync/range/chain.js +2 -15
  441. package/lib/sync/range/chain.js.map +1 -1
  442. package/lib/sync/sync.d.ts +7 -0
  443. package/lib/sync/sync.d.ts.map +1 -1
  444. package/lib/sync/sync.js +61 -3
  445. package/lib/sync/sync.js.map +1 -1
  446. package/lib/sync/unknownBlock.d.ts.map +1 -1
  447. package/lib/sync/unknownBlock.js +43 -25
  448. package/lib/sync/unknownBlock.js.map +1 -1
  449. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  450. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  451. package/lib/sync/utils/downloadByRange.js +24 -128
  452. package/lib/sync/utils/downloadByRange.js.map +1 -1
  453. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  454. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  455. package/lib/sync/utils/downloadByRoot.js +14 -99
  456. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  457. package/lib/util/blobs.d.ts +1 -7
  458. package/lib/util/blobs.d.ts.map +1 -1
  459. package/lib/util/blobs.js +0 -19
  460. package/lib/util/blobs.js.map +1 -1
  461. package/lib/util/execution.d.ts +3 -4
  462. package/lib/util/execution.d.ts.map +1 -1
  463. package/lib/util/execution.js +1 -73
  464. package/lib/util/execution.js.map +1 -1
  465. package/lib/util/file.d.ts.map +1 -1
  466. package/lib/util/file.js +8 -9
  467. package/lib/util/file.js.map +1 -1
  468. package/lib/util/queue/itemQueue.js +1 -1
  469. package/lib/util/queue/itemQueue.js.map +1 -1
  470. package/lib/util/sszBytes.d.ts +5 -1
  471. package/lib/util/sszBytes.d.ts.map +1 -1
  472. package/lib/util/sszBytes.js +36 -19
  473. package/lib/util/sszBytes.js.map +1 -1
  474. package/lib/util/types.d.ts +0 -5
  475. package/lib/util/types.d.ts.map +1 -1
  476. package/lib/util/types.js +1 -2
  477. package/lib/util/types.js.map +1 -1
  478. package/package.json +31 -32
  479. package/src/api/impl/api.ts +1 -1
  480. package/src/api/impl/beacon/blocks/index.ts +81 -126
  481. package/src/api/impl/beacon/index.ts +3 -1
  482. package/src/api/impl/beacon/pool/index.ts +31 -1
  483. package/src/api/impl/beacon/state/index.ts +10 -1
  484. package/src/api/impl/beacon/state/utils.ts +20 -10
  485. package/src/api/impl/debug/index.ts +4 -0
  486. package/src/api/impl/validator/index.ts +178 -39
  487. package/src/api/options.ts +3 -0
  488. package/src/chain/ColumnReconstructionTracker.ts +60 -41
  489. package/src/chain/GetBlobsTracker.ts +82 -52
  490. package/src/chain/archiveStore/archiveStore.ts +1 -0
  491. package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
  492. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  493. package/src/chain/blocks/blockInput/errors.ts +1 -2
  494. package/src/chain/blocks/blockInput/types.ts +2 -20
  495. package/src/chain/blocks/importBlock.ts +58 -77
  496. package/src/chain/blocks/importExecutionPayload.ts +123 -36
  497. package/src/chain/blocks/index.ts +11 -4
  498. package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
  499. package/src/chain/blocks/types.ts +8 -29
  500. package/src/chain/blocks/verifyBlock.ts +31 -16
  501. package/src/chain/blocks/verifyBlocksDataAvailability.ts +16 -2
  502. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  503. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  504. package/src/chain/blocks/verifyBlocksSignatures.ts +7 -5
  505. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
  506. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  507. package/src/chain/bls/interface.ts +2 -0
  508. package/src/chain/bls/multithread/index.ts +14 -10
  509. package/src/chain/bls/multithread/types.ts +1 -1
  510. package/src/chain/bls/multithread/worker.ts +1 -5
  511. package/src/chain/bls/singleThread.ts +1 -1
  512. package/src/chain/bls/utils.ts +1 -1
  513. package/src/chain/chain.ts +145 -42
  514. package/src/chain/emitter.ts +8 -8
  515. package/src/chain/errors/blockError.ts +1 -1
  516. package/src/chain/errors/executionPayloadBid.ts +12 -0
  517. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  518. package/src/chain/errors/inclusionList.ts +38 -0
  519. package/src/chain/errors/index.ts +1 -1
  520. package/src/chain/forkChoice/index.ts +11 -0
  521. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  522. package/src/chain/interface.ts +11 -6
  523. package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
  524. package/src/chain/opPools/attestationPool.ts +16 -4
  525. package/src/chain/opPools/inclusionListStore.ts +208 -0
  526. package/src/chain/opPools/index.ts +2 -0
  527. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  528. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  529. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  530. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  531. package/src/chain/opPools/utils.ts +1 -1
  532. package/src/chain/options.ts +5 -4
  533. package/src/chain/produceBlock/produceBlockBody.ts +67 -22
  534. package/src/chain/proposerTracker.ts +94 -0
  535. package/src/chain/regen/interface.ts +2 -2
  536. package/src/chain/regen/queued.ts +6 -4
  537. package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
  538. package/src/chain/validation/executionPayloadBid.ts +54 -183
  539. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  540. package/src/chain/validation/inclusionList.ts +192 -0
  541. package/src/chain/validation/index.ts +1 -0
  542. package/src/chain/validatorMonitor.ts +0 -6
  543. package/src/db/beacon.ts +44 -0
  544. package/src/db/dataColumnStore.ts +2 -4
  545. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  546. package/src/db/flatFileStore/slotIndex.ts +4 -3
  547. package/src/db/interface.ts +2 -0
  548. package/src/db/repositories/blobSidecars.ts +0 -1
  549. package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
  550. package/src/execution/builder/apiClient.ts +16 -13
  551. package/src/execution/builder/http.ts +4 -0
  552. package/src/execution/builder/validateBid.ts +23 -2
  553. package/src/execution/engine/blobVersionedHashes.ts +1 -1
  554. package/src/execution/engine/disabled.ts +4 -0
  555. package/src/execution/engine/http.ts +59 -47
  556. package/src/execution/engine/index.ts +1 -1
  557. package/src/execution/engine/interface.ts +46 -13
  558. package/src/execution/engine/jsonRpcTransport.ts +56 -31
  559. package/src/execution/engine/mock.ts +32 -14
  560. package/src/execution/engine/payloadIdCache.ts +24 -6
  561. package/src/execution/engine/restTransport.ts +18 -23
  562. package/src/execution/engine/sszTypes.ts +0 -9
  563. package/src/execution/engine/transport.ts +13 -17
  564. package/src/execution/engine/types.ts +44 -24
  565. package/src/execution/engine/utils.ts +4 -2
  566. package/src/index.ts +2 -0
  567. package/src/metrics/metrics/beacon.ts +37 -30
  568. package/src/metrics/metrics/lodestar.ts +131 -18
  569. package/src/metrics/server/http.ts +5 -5
  570. package/src/monitoring/service.ts +1 -1
  571. package/src/network/core/networkCore.ts +11 -1
  572. package/src/network/core/networkCoreWorker.ts +2 -0
  573. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  574. package/src/network/core/types.ts +6 -1
  575. package/src/network/gossip/gossipsub.ts +11 -0
  576. package/src/network/gossip/interface.ts +5 -5
  577. package/src/network/gossip/topic.ts +14 -25
  578. package/src/network/interface.ts +4 -5
  579. package/src/network/libp2p/index.ts +5 -1
  580. package/src/network/network.ts +66 -58
  581. package/src/network/options.ts +4 -0
  582. package/src/network/peers/peerManager.ts +28 -3
  583. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  584. package/src/network/peers/utils/enrSubnetsDeserialize.ts +5 -2
  585. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  586. package/src/network/peers/utils/subnetMap.ts +6 -3
  587. package/src/network/processor/extractSlotRootFns.ts +0 -9
  588. package/src/network/processor/gossipHandlers.ts +150 -183
  589. package/src/network/processor/gossipQueues/index.ts +6 -6
  590. package/src/network/processor/gossipValidatorFn.ts +5 -5
  591. package/src/network/processor/index.ts +58 -28
  592. package/src/network/processor/types.ts +1 -1
  593. package/src/network/reqresp/ReqRespBeaconNode.ts +7 -7
  594. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  595. package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
  596. package/src/network/reqresp/handlers/index.ts +5 -17
  597. package/src/network/reqresp/protocols.ts +6 -12
  598. package/src/network/reqresp/rateLimit.ts +5 -17
  599. package/src/network/reqresp/types.ts +6 -13
  600. package/src/network/subnets/attnetsService.ts +94 -6
  601. package/src/network/subnets/interface.ts +7 -0
  602. package/src/node/nodejs.ts +58 -22
  603. package/src/node/options.ts +9 -6
  604. package/src/sync/interface.ts +1 -0
  605. package/src/sync/range/batch.ts +9 -21
  606. package/src/sync/range/chain.ts +2 -14
  607. package/src/sync/sync.ts +65 -4
  608. package/src/sync/unknownBlock.ts +48 -36
  609. package/src/sync/utils/downloadByRange.ts +31 -230
  610. package/src/sync/utils/downloadByRoot.ts +15 -142
  611. package/src/util/blobs.ts +0 -34
  612. package/src/util/execution.ts +8 -102
  613. package/src/util/file.ts +8 -9
  614. package/src/util/queue/itemQueue.ts +1 -1
  615. package/src/util/sszBytes.ts +42 -24
  616. package/src/util/types.ts +1 -8
  617. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  618. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  619. package/lib/chain/errors/blobSidecarError.js +0 -38
  620. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  621. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  622. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  623. package/lib/chain/validation/blobSidecar.js +0 -276
  624. package/lib/chain/validation/blobSidecar.js.map +0 -1
  625. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  626. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  627. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  628. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  629. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  630. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  631. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  632. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  633. package/src/chain/errors/blobSidecarError.ts +0 -70
  634. package/src/chain/validation/blobSidecar.ts +0 -357
  635. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  636. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
@@ -1,10 +1,10 @@
1
1
  import path from "node:path";
2
2
  import {PrivateKey} from "@libp2p/interface";
3
- import {type PubkeyCache} from "@chainsafe/lodestar-z/pubkeys";
4
3
  import {Type} from "@chainsafe/ssz";
5
4
  import {routes} from "@lodestar/api";
6
5
  import {BeaconConfig} from "@lodestar/config";
7
6
  import {
7
+ AncestorStatus,
8
8
  CheckpointWithHex,
9
9
  EpochDifference,
10
10
  ForkChoiceStateGetter,
@@ -14,12 +14,14 @@ import {
14
14
  UpdateHeadOpt,
15
15
  } from "@lodestar/fork-choice";
16
16
  import {LoggerNode} from "@lodestar/logger/node";
17
+ import {type PubkeyCache} from "@lodestar/native/pubkeys";
17
18
  import {
18
19
  EFFECTIVE_BALANCE_INCREMENT,
19
20
  type ForkPostFulu,
20
21
  type ForkPostGloas,
21
22
  GENESIS_SLOT,
22
23
  SLOTS_PER_EPOCH,
24
+ isForkPostFulu,
23
25
  isForkPostGloas,
24
26
  } from "@lodestar/params";
25
27
  import {
@@ -33,6 +35,7 @@ import {
33
35
  isStatePostAltair,
34
36
  isStatePostElectra,
35
37
  isStatePostGloas,
38
+ proposerShufflingDecisionRoot,
36
39
  } from "@lodestar/state-transition";
37
40
  import {
38
41
  BeaconBlock,
@@ -60,7 +63,6 @@ import {Logger, fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRoot
60
63
  import {ProcessShutdownCallback} from "@lodestar/validator";
61
64
  import {GENESIS_EPOCH, HALF_SLOT_BPS, ZERO_HASH} from "../constants/index.js";
62
65
  import {IBeaconDb} from "../db/index.js";
63
- import {BLOB_SIDECARS_IN_WRAPPER_INDEX} from "../db/repositories/blobSidecars.js";
64
66
  import {decodeArchivedEnvelope} from "../db/repositories/index.js";
65
67
  import {BuilderApiClient, BuilderApiClientOpts} from "../execution/builder/apiClient.js";
66
68
  import {BuilderStatus} from "../execution/builder/http.js";
@@ -80,7 +82,7 @@ import {getSlotFromSignedBeaconBlockSerialized} from "../util/sszBytes.js";
80
82
  import {ArchiveStore} from "./archiveStore/archiveStore.js";
81
83
  import {CheckpointBalancesCache} from "./balancesCache.js";
82
84
  import {BeaconProposerCache} from "./beaconProposerCache.js";
83
- import {IBlockInput, isBlockInputBlobs, isBlockInputColumns} from "./blocks/blockInput/index.js";
85
+ import {IBlockInput, isBlockInputColumns} from "./blocks/blockInput/index.js";
84
86
  import {BlockProcessor, ImportBlockOpts} from "./blocks/index.js";
85
87
  import {PayloadEnvelopeInputSource} from "./blocks/payloadEnvelopeInput/index.js";
86
88
  import {PayloadEnvelopeProcessor} from "./blocks/payloadEnvelopeProcessor.js";
@@ -90,8 +92,9 @@ import {persistPayloadEnvelopeInput} from "./blocks/writePayloadEnvelopeInputToD
90
92
  import {BlsMultiThreadWorkerPool, BlsSingleThreadVerifier, IBlsVerifier} from "./bls/index.js";
91
93
  import {BuilderCircuitBreaker} from "./builderCircuitBreaker.js";
92
94
  import {ColumnReconstructionTracker} from "./ColumnReconstructionTracker.js";
93
- import {ChainEvent, ChainEventEmitter} from "./emitter.js";
95
+ import {ChainEvent, ChainEventEmitter, ReorgEventData} from "./emitter.js";
94
96
  import {ForkchoiceCaller, initializeForkChoice} from "./forkChoice/index.js";
97
+ import {ForkChoiceExecutionEngine} from "./forkChoiceExecutionEngine.js";
95
98
  import {GetBlobsTracker} from "./GetBlobsTracker.js";
96
99
  import {CommonBlockBody, FindHeadFnName, IBeaconChain, ProposerPreparationData, StateGetOpts} from "./interface.js";
97
100
  import {LightClientServer} from "./lightClient/index.js";
@@ -100,9 +103,11 @@ import {
100
103
  AttestationPool,
101
104
  DeferredVoluntaryExitPool,
102
105
  ExecutionPayloadBidPool,
106
+ InclusionListStore,
103
107
  OpPool,
104
108
  PayloadAttestationPool,
105
109
  ProposerPreferencesPool,
110
+ SingleAttestationPool,
106
111
  SyncCommitteeMessagePool,
107
112
  SyncContributionAndProofPool,
108
113
  } from "./opPools/index.js";
@@ -111,6 +116,7 @@ import {PrepareNextSlotScheduler} from "./prepareNextSlot.js";
111
116
  import {computeNewStateRoot} from "./produceBlock/computeNewStateRoot.js";
112
117
  import {AssembledBlockType, BlockType, ProduceResult} from "./produceBlock/index.js";
113
118
  import {BlockAttributes, produceBlockBody, produceCommonBlockBody} from "./produceBlock/produceBlockBody.js";
119
+ import {ProposerTracker} from "./proposerTracker.js";
114
120
  import {QueuedStateRegenerator, RegenCaller} from "./regen/index.js";
115
121
  import {ReprocessController} from "./reprocess.js";
116
122
  import {
@@ -165,7 +171,7 @@ const DEFAULT_MAX_PENDING_UNFINALIZED_PAYLOAD_ENVELOPE_WRITES = 16;
165
171
  export class BeaconChain implements IBeaconChain {
166
172
  readonly genesisTime: UintNum64;
167
173
  readonly genesisValidatorsRoot: Root;
168
- readonly executionEngine: IExecutionEngine;
174
+ readonly executionEngine: ForkChoiceExecutionEngine;
169
175
  readonly executionBuilder?: IExecutionBuilder;
170
176
  readonly builderCircuitBreaker: BuilderCircuitBreaker;
171
177
  readonly builderApiClient: BuilderApiClient;
@@ -193,11 +199,19 @@ export class BeaconChain implements IBeaconChain {
193
199
  // Ops pool
194
200
  readonly attestationPool: AttestationPool;
195
201
  readonly aggregatedAttestationPool: AggregatedAttestationPool;
202
+ readonly singleAttestationPool: SingleAttestationPool;
203
+ readonly proposerTracker: ProposerTracker;
204
+ /**
205
+ * Head state epoch and decision root of its next epoch proposers when local proposals were last refreshed. The root
206
+ * alone is not enough: a reorg onto a branch without blocks in a whole epoch keeps the root but moves the epoch
207
+ */
208
+ private localProposalsKey: string | null = null;
196
209
  readonly syncCommitteeMessagePool: SyncCommitteeMessagePool;
197
210
  readonly syncContributionAndProofPool;
198
211
  readonly executionPayloadBidPool: ExecutionPayloadBidPool;
199
212
  readonly payloadAttestationPool: PayloadAttestationPool;
200
213
  readonly proposerPreferencesPool = new ProposerPreferencesPool();
214
+ readonly inclusionListStore: InclusionListStore;
201
215
  readonly opPool: OpPool;
202
216
  readonly deferredVoluntaryExitPool: DeferredVoluntaryExitPool;
203
217
 
@@ -315,7 +329,6 @@ export class BeaconChain implements IBeaconChain {
315
329
  this.genesisTime = anchorState.genesisTime;
316
330
  this.anchorStateLatestBlockSlot = anchorState.latestBlockHeader.slot;
317
331
  this.genesisValidatorsRoot = anchorState.genesisValidatorsRoot;
318
- this.executionEngine = executionEngine;
319
332
  this.executionBuilder = executionBuilder;
320
333
  const signal = this.abortController.signal;
321
334
  const emitter = new ChainEventEmitter();
@@ -329,12 +342,15 @@ export class BeaconChain implements IBeaconChain {
329
342
  this.blacklistedBlocks = new Map((opts.blacklistedBlocks ?? []).map((hex) => [hex, null]));
330
343
  this.attestationPool = new AttestationPool(config, clock, this.opts?.preaggregateSlotDistance, metrics);
331
344
  this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config, metrics, logger);
345
+ this.singleAttestationPool = new SingleAttestationPool(metrics);
346
+ this.proposerTracker = new ProposerTracker(this.opts.singleAttestationIgnoreProposalDuty ?? false, metrics);
332
347
  this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(config, clock, this.opts?.preaggregateSlotDistance);
333
348
  this.syncContributionAndProofPool = new SyncContributionAndProofPool(config, clock, metrics, logger);
334
349
  this.executionPayloadBidPool = new ExecutionPayloadBidPool();
335
350
  this.payloadAttestationPool = new PayloadAttestationPool(config, clock, metrics);
336
351
  this.opPool = new OpPool(config);
337
352
  this.deferredVoluntaryExitPool = new DeferredVoluntaryExitPool(logger);
353
+ this.inclusionListStore = new InclusionListStore(config);
338
354
 
339
355
  this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
340
356
  this.seenContributionAndProof = new SeenContributionAndProof(metrics);
@@ -454,6 +470,12 @@ export class BeaconChain implements IBeaconChain {
454
470
  this.payloadEnvelopeProcessor = new PayloadEnvelopeProcessor(this, metrics, signal);
455
471
 
456
472
  this.forkChoice = forkChoice;
473
+ this.executionEngine = new ForkChoiceExecutionEngine(executionEngine, {
474
+ forkChoice,
475
+ recomputeHeadAfterELInvalidResponse: () => this.recomputeHeadAfterELInvalidResponse(),
476
+ logger,
477
+ metrics,
478
+ });
457
479
 
458
480
  this.builderCircuitBreaker = new BuilderCircuitBreaker(
459
481
  {faultInspectionWindow: opts.faultInspectionWindow, allowedFaults: opts.allowedFaults},
@@ -509,6 +531,7 @@ export class BeaconChain implements IBeaconChain {
509
531
  emitter,
510
532
  metrics,
511
533
  config,
534
+ signal,
512
535
  });
513
536
 
514
537
  this.archiveStore = new ArchiveStore(
@@ -929,16 +952,6 @@ export class BeaconChain implements IBeaconChain {
929
952
  }
930
953
 
931
954
  async getBlobSidecars(blockSlot: Slot, blockRootHex: string): Promise<deneb.BlobSidecars | null> {
932
- const blockInput = this.seenBlockInputCache.get(blockRootHex);
933
- if (blockInput) {
934
- if (!isBlockInputBlobs(blockInput)) {
935
- throw new Error(`Expected block input to have blobs: slot=${blockSlot} root=${blockRootHex}`);
936
- }
937
- if (!blockInput.hasAllData()) {
938
- return null;
939
- }
940
- return blockInput.getBlobs();
941
- }
942
955
  const unfinalizedBlobSidecars = (await this.db.blobSidecars.get(fromHex(blockRootHex)))?.blobSidecars ?? null;
943
956
  if (unfinalizedBlobSidecars) {
944
957
  return unfinalizedBlobSidecars;
@@ -946,28 +959,6 @@ export class BeaconChain implements IBeaconChain {
946
959
  return (await this.db.blobSidecarsArchive.get(blockSlot))?.blobSidecars ?? null;
947
960
  }
948
961
 
949
- async getSerializedBlobSidecars(blockSlot: Slot, blockRootHex: string): Promise<Uint8Array | null> {
950
- const blockInput = this.seenBlockInputCache.get(blockRootHex);
951
- if (blockInput) {
952
- if (!isBlockInputBlobs(blockInput)) {
953
- throw new Error(`Expected block input to have blobs: slot=${blockSlot} root=${blockRootHex}`);
954
- }
955
- if (!blockInput.hasAllData()) {
956
- return null;
957
- }
958
- return ssz.deneb.BlobSidecars.serialize(blockInput.getBlobs());
959
- }
960
- const unfinalizedBlobSidecarsWrapper = await this.db.blobSidecars.getBinary(fromHex(blockRootHex));
961
- if (unfinalizedBlobSidecarsWrapper) {
962
- return unfinalizedBlobSidecarsWrapper.slice(BLOB_SIDECARS_IN_WRAPPER_INDEX);
963
- }
964
- const finalizedBlobSidecarsWrapper = await this.db.blobSidecarsArchive.getBinary(blockSlot);
965
- if (finalizedBlobSidecarsWrapper) {
966
- return finalizedBlobSidecarsWrapper.slice(BLOB_SIDECARS_IN_WRAPPER_INDEX);
967
- }
968
- return null;
969
- }
970
-
971
962
  async getSerializedExecutionPayloadEnvelope(blockSlot: Slot, blockRootHex: string): Promise<Uint8Array | null> {
972
963
  const [bytes] = await this.getSerializedExecutionPayloadEnvelopes([{blockSlot, blockRootHex}]);
973
964
  return bytes;
@@ -1426,6 +1417,58 @@ export class BeaconChain implements IBeaconChain {
1426
1417
  }
1427
1418
  }
1428
1419
 
1420
+ /**
1421
+ * Apply chain side effects of a fork choice head change: head state, head metrics, and reorg detection
1422
+ */
1423
+ onHeadChanged(oldHead: ProtoBlock, newHead: ProtoBlock, maybeHeadState?: IBeaconStateView): void {
1424
+ // Set head state as strong reference
1425
+ this.regen.updateHeadState(newHead, maybeHeadState);
1426
+
1427
+ const delaySec = this.clock.secFromSlot(newHead.slot);
1428
+ this.logger.verbose("New chain head", {
1429
+ slot: newHead.slot,
1430
+ root: newHead.blockRoot,
1431
+ payloadStatus: newHead.payloadStatus,
1432
+ delaySec,
1433
+ });
1434
+ this.metrics?.headSlot.set(newHead.slot);
1435
+
1436
+ this.onNewHead(newHead);
1437
+ this.metrics?.forkChoice.changedHead.inc();
1438
+
1439
+ const ancestorResult = this.forkChoice.getCommonAncestorDepth(oldHead, newHead);
1440
+ if (ancestorResult.code === AncestorStatus.CommonAncestor) {
1441
+ // CommonAncestor = chain reorg, old head and new head not direct descendants
1442
+
1443
+ const forkChoiceReorgEventData: ReorgEventData = {
1444
+ depth: ancestorResult.depth,
1445
+ epoch: computeEpochAtSlot(newHead.slot),
1446
+ slot: newHead.slot,
1447
+ newHeadBlock: newHead.blockRoot,
1448
+ oldHeadBlock: oldHead.blockRoot,
1449
+ newHeadState: newHead.stateRoot,
1450
+ oldHeadState: oldHead.stateRoot,
1451
+ executionOptimistic: isOptimisticBlock(newHead),
1452
+ };
1453
+
1454
+ this.emitter.emit(routes.events.EventType.chainReorg, forkChoiceReorgEventData);
1455
+ this.logger.verbose("Chain reorg", forkChoiceReorgEventData);
1456
+
1457
+ this.metrics?.forkChoice.reorg.inc();
1458
+ this.metrics?.forkChoice.reorgDistance.observe(ancestorResult.depth);
1459
+ }
1460
+ }
1461
+
1462
+ private recomputeHeadAfterELInvalidResponse(): void {
1463
+ // validateLatestHash only re-scores proto-array, the cached head is still the old one
1464
+ const oldHead = this.forkChoice.getHead();
1465
+ const newHead = this.recomputeForkChoiceHead(ForkchoiceCaller.executionInvalid);
1466
+ if (newHead.blockRoot === oldHead.blockRoot && newHead.payloadStatus === oldHead.payloadStatus) {
1467
+ return;
1468
+ }
1469
+ this.onHeadChanged(oldHead, newHead);
1470
+ }
1471
+
1429
1472
  /**
1430
1473
  * Emit `head` and `head_v2` when the fork choice head differs between two observations. Every caller that
1431
1474
  * can move the head, `updateAndGetHead()` and `updateTime()`, must capture the head before and pass both.
@@ -1482,10 +1525,10 @@ export class BeaconChain implements IBeaconChain {
1482
1525
  this.metrics?.forkChoice.requests.inc();
1483
1526
  const timer = this.metrics?.forkChoice.findHead.startTimer({caller: FindHeadFnName.predictProposerHead});
1484
1527
  const slot = this.clock.currentSlot;
1485
- const secFromSlot = this.clock.secFromSlot(slot);
1528
+ const msFromSlot = this.clock.msFromSlot(slot);
1486
1529
 
1487
1530
  try {
1488
- return this.forkChoice.updateAndGetHead({mode: UpdateHeadOpt.GetPredictedProposerHead, secFromSlot, slot}).head;
1531
+ return this.forkChoice.updateAndGetHead({mode: UpdateHeadOpt.GetPredictedProposerHead, msFromSlot, slot}).head;
1489
1532
  } catch (e) {
1490
1533
  this.metrics?.forkChoice.errors.inc({entrypoint: UpdateHeadOpt.GetPredictedProposerHead});
1491
1534
  throw e;
@@ -1497,13 +1540,13 @@ export class BeaconChain implements IBeaconChain {
1497
1540
  getProposerHead(slot: Slot): ProtoBlock {
1498
1541
  this.metrics?.forkChoice.requests.inc();
1499
1542
  const timer = this.metrics?.forkChoice.findHead.startTimer({caller: FindHeadFnName.getProposerHead});
1500
- const secFromSlot = this.clock.secFromSlot(slot);
1543
+ const msFromSlot = this.clock.msFromSlot(slot);
1501
1544
 
1502
1545
  try {
1503
1546
  // Do not emit head event here, when proposing we rely on the one emitted when importing our own block
1504
1547
  const {head, isHeadTimely, notReorgedReason} = this.forkChoice.updateAndGetHead({
1505
1548
  mode: UpdateHeadOpt.GetProposerHead,
1506
- secFromSlot,
1549
+ msFromSlot,
1507
1550
  slot,
1508
1551
  });
1509
1552
 
@@ -1825,12 +1868,15 @@ export class BeaconChain implements IBeaconChain {
1825
1868
 
1826
1869
  this.attestationPool.prune(slot);
1827
1870
  this.aggregatedAttestationPool.prune(slot);
1871
+ this.proposerTracker.prune(slot);
1872
+ this.singleAttestationPool.prune(this.proposerTracker);
1828
1873
  this.syncCommitteeMessagePool.prune(slot);
1829
1874
  this.seenSyncCommitteeMessages.prune(slot);
1830
1875
  this.payloadAttestationPool.prune(slot);
1831
1876
  this.executionPayloadBidPool.prune(slot);
1832
1877
  this.seenExecutionPayloadBids.prune(slot);
1833
1878
  this.proposerPreferencesPool.prune(slot);
1879
+ this.inclusionListStore.prune(slot);
1834
1880
  this.seenAttestationDatas.onSlot(slot);
1835
1881
  this.reprocessController.onSlot(slot);
1836
1882
 
@@ -1850,6 +1896,55 @@ export class BeaconChain implements IBeaconChain {
1850
1896
  }
1851
1897
  }
1852
1898
 
1899
+ /**
1900
+ * Track upcoming proposals of validators connected to this node, so that SingleAttestationPool only collects and
1901
+ * the network only subscribes to all attestation subnets before them. Proposals only change when the decision block
1902
+ * of next epoch proposers changes (the head enters a new epoch or reorgs that block) or a new validator connects,
1903
+ * set localProposalsKey to null before calling for the latter.
1904
+ * Never throws, it runs during block import.
1905
+ */
1906
+ private refreshLocalProposals(): void {
1907
+ const clockSlot = this.clock.currentSlot;
1908
+ try {
1909
+ const headState = this.getHeadState();
1910
+ const headFork = this.config.getForkName(headState.slot);
1911
+ // post-fulu, the head state knows proposers of its epoch and the next one thanks to the proposer lookahead,
1912
+ // a pre-fulu state only predicts next epoch proposers
1913
+ if (!isForkPostFulu(headFork) || headState.epoch < computeEpochAtSlot(clockSlot) - 1) {
1914
+ return;
1915
+ }
1916
+
1917
+ const decisionRoot = proposerShufflingDecisionRoot(headFork, headState, headState.epoch + 1);
1918
+ if (decisionRoot === null) {
1919
+ return;
1920
+ }
1921
+ const localProposalsKey = `${headState.epoch}_${toRootHex(decisionRoot)}`;
1922
+ if (localProposalsKey === this.localProposalsKey) {
1923
+ return;
1924
+ }
1925
+ this.localProposalsKey = localProposalsKey;
1926
+
1927
+ const startSlot = computeStartSlotAtEpoch(headState.epoch);
1928
+ const newProposalSlots: Slot[] = [];
1929
+ for (const [i, proposerIndex] of [...headState.currentProposers, ...headState.nextProposers].entries()) {
1930
+ const proposalSlot = startSlot + i;
1931
+ if (
1932
+ proposalSlot >= clockSlot &&
1933
+ this.beaconProposerCache.has(proposerIndex) &&
1934
+ this.proposerTracker.addProposal(proposalSlot)
1935
+ ) {
1936
+ newProposalSlots.push(proposalSlot);
1937
+ }
1938
+ }
1939
+
1940
+ if (newProposalSlots.length > 0) {
1941
+ this.emitter.emit(ChainEvent.localProposalSlots, newProposalSlots);
1942
+ }
1943
+ } catch (e) {
1944
+ this.logger.debug("Error refreshing local proposals", {slot: clockSlot}, e as Error);
1945
+ }
1946
+ }
1947
+
1853
1948
  private onClockEpoch(epoch: Epoch): void {
1854
1949
  this.metrics?.clockEpoch.set(epoch);
1855
1950
 
@@ -1864,6 +1959,8 @@ export class BeaconChain implements IBeaconChain {
1864
1959
  protected onNewHead(head: ProtoBlock): void {
1865
1960
  this.syncContributionAndProofPool.prune(head.slot);
1866
1961
  this.seenContributionAndProof.prune(head.slot);
1962
+
1963
+ this.refreshLocalProposals();
1867
1964
  }
1868
1965
 
1869
1966
  private onForkChoiceJustified(this: BeaconChain, cp: CheckpointWithHex): void {
@@ -1932,6 +2029,9 @@ export class BeaconChain implements IBeaconChain {
1932
2029
 
1933
2030
  // Only update validator custody if we discovered new validators
1934
2031
  if (newValidatorCount > previousValidatorCount) {
2032
+ // new validators may propose in the current or next epoch, a failed attempt leaves null so the next head retries
2033
+ this.localProposalsKey = null;
2034
+ this.refreshLocalProposals();
1935
2035
  const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
1936
2036
  await this.updateValidatorsCustodyRequirement(finalizedCheckpoint);
1937
2037
  }
@@ -1947,6 +2047,9 @@ export class BeaconChain implements IBeaconChain {
1947
2047
 
1948
2048
  // Only update validator custody if we discovered new validators
1949
2049
  if (hasNewValidators) {
2050
+ // new validators may propose in the current or next epoch, a failed attempt leaves null so the next head retries
2051
+ this.localProposalsKey = null;
2052
+ this.refreshLocalProposals();
1950
2053
  const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
1951
2054
  await this.updateValidatorsCustodyRequirement(finalizedCheckpoint);
1952
2055
  }
@@ -3,7 +3,7 @@ import {StrictEventEmitter} from "strict-event-emitter-types";
3
3
  import {routes} from "@lodestar/api";
4
4
  import {CheckpointWithHex, PtcQuorumEvent} from "@lodestar/fork-choice";
5
5
  import {IBeaconStateView} from "@lodestar/state-transition";
6
- import {DataColumnSidecar, RootHex, Slot, deneb, phase0} from "@lodestar/types";
6
+ import {DataColumnSidecar, RootHex, Slot, phase0} from "@lodestar/types";
7
7
  import {PeerIdStr} from "../util/peerId.js";
8
8
  import {BlockInputSource, IBlockInput} from "./blocks/blockInput/types.js";
9
9
  import {PayloadEnvelopeInput} from "./blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
@@ -50,16 +50,16 @@ export enum ChainEvent {
50
50
  * and are ready to be published.
51
51
  */
52
52
  publishDataColumns = "publishDataColumns",
53
- /**
54
- * This event signals that blobs have been fetched from the execution engine
55
- * and are ready to be published.
56
- */
57
- publishBlobSidecars = "publishBlobSidecars",
58
53
  /**
59
54
  * This event signals that a proposer slashing has been produced from an observed equivocation
60
55
  * and is ready to be published.
61
56
  */
62
57
  publishProposerSlashing = "publishProposerSlashing",
58
+ /**
59
+ * New block proposal slots of validators connected to this node, the network subscribes to all attestation
60
+ * subnets before them, see `slotsToSubscribeBeforeProposalDuty`
61
+ */
62
+ localProposalSlots = "localProposalSlots",
63
63
  /**
64
64
  * Trigger an update of status so reqresp by peers have current earliestAvailableSlot
65
65
  */
@@ -123,10 +123,10 @@ export type IChainEvents = ApiEvents & {
123
123
 
124
124
  [ChainEvent.publishDataColumns]: (sidecars: DataColumnSidecar[]) => void;
125
125
 
126
- [ChainEvent.publishBlobSidecars]: (sidecars: deneb.BlobSidecar[]) => void;
127
-
128
126
  [ChainEvent.publishProposerSlashing]: (proposerSlashing: phase0.ProposerSlashing) => void;
129
127
 
128
+ [ChainEvent.localProposalSlots]: (proposalSlots: Slot[]) => void;
129
+
130
130
  [ChainEvent.updateStatus]: () => void;
131
131
 
132
132
  // Sync events that are chain->chain. Initiated from network requests but do not cross the network
@@ -72,7 +72,7 @@ export enum BlockErrorCode {
72
72
  * whoever served the block MAY be downscored. Mirrors PayloadErrorCode.EXECUTION_ENGINE_INVALID.
73
73
  */
74
74
  EXECUTION_ENGINE_INVALID = "BLOCK_ERROR_EXECUTION_INVALID",
75
- /** The blobs are unavailable */
75
+ /** The blob or column data did not arrive within the availability wait */
76
76
  DATA_UNAVAILABLE = "BLOCK_ERROR_DATA_UNAVAILABLE",
77
77
  /** Block contains too many kzg commitments */
78
78
  TOO_MANY_KZG_COMMITMENTS = "BLOCK_ERROR_TOO_MANY_KZG_COMMITMENTS",
@@ -21,6 +21,8 @@ export enum ExecutionPayloadBidErrorCode {
21
21
  NO_MATCHING_PROPOSER_PREFERENCES = "EXECUTION_PAYLOAD_BID_ERROR_NO_MATCHING_PROPOSER_PREFERENCES",
22
22
  PROPOSER_PREFERENCES_FEE_RECIPIENT_MISMATCH = "EXECUTION_PAYLOAD_BID_ERROR_PROPOSER_PREFERENCES_FEE_RECIPIENT_MISMATCH",
23
23
  PROPOSER_PREFERENCES_GAS_LIMIT_MISMATCH = "EXECUTION_PAYLOAD_BID_ERROR_PROPOSER_PREFERENCES_GAS_LIMIT_MISMATCH",
24
+ INCLUSION_LIST_BITS_NOT_INCLUSIVE = "EXECUTION_PAYLOAD_BID_ERROR_INCLUSION_LIST_BITS_NOT_INCLUSIVE",
25
+ BEFORE_INCLUSION_LIST_DEADLINE = "EXECUTION_PAYLOAD_BID_ERROR_BEFORE_INCLUSION_LIST_DEADLINE",
24
26
  }
25
27
 
26
28
  export type ExecutionPayloadBidErrorType =
@@ -86,6 +88,16 @@ export type ExecutionPayloadBidErrorType =
86
88
  bidFeeRecipient: string;
87
89
  expectedFeeRecipient: string;
88
90
  }
91
+ | {
92
+ code: ExecutionPayloadBidErrorCode.INCLUSION_LIST_BITS_NOT_INCLUSIVE;
93
+ builderIndex: BuilderIndex;
94
+ slot: Slot;
95
+ }
96
+ | {
97
+ code: ExecutionPayloadBidErrorCode.BEFORE_INCLUSION_LIST_DEADLINE;
98
+ builderIndex: BuilderIndex;
99
+ slot: Slot;
100
+ }
89
101
  | {
90
102
  code: ExecutionPayloadBidErrorCode.PROPOSER_PREFERENCES_GAS_LIMIT_MISMATCH;
91
103
  builderIndex: BuilderIndex;
@@ -12,6 +12,7 @@ export enum ExecutionPayloadEnvelopeErrorCode {
12
12
  BUILDER_INDEX_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BUILDER_INDEX_MISMATCH",
13
13
  BLOCK_HASH_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_BLOCK_HASH_MISMATCH",
14
14
  EXECUTION_REQUESTS_ROOT_MISMATCH = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_EXECUTION_REQUESTS_ROOT_MISMATCH",
15
+ TOO_MANY_TRANSACTIONS = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_TOO_MANY_TRANSACTIONS",
15
16
  INVALID_SIGNATURE = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_INVALID_SIGNATURE",
16
17
  PAYLOAD_ENVELOPE_INPUT_MISSING = "EXECUTION_PAYLOAD_ENVELOPE_ERROR_PAYLOAD_ENVELOPE_INPUT_MISSING",
17
18
  }
@@ -54,6 +55,13 @@ export type ExecutionPayloadEnvelopeErrorType =
54
55
  envelopeRequestsRoot: RootHex;
55
56
  bidRequestsRoot: RootHex;
56
57
  }
58
+ | {
59
+ code: ExecutionPayloadEnvelopeErrorCode.TOO_MANY_TRANSACTIONS;
60
+ slot: Slot;
61
+ root: RootHex;
62
+ transactionCount: number;
63
+ maxTransactionCount: number;
64
+ }
57
65
  | {code: ExecutionPayloadEnvelopeErrorCode.INVALID_SIGNATURE; slot: Slot; root: RootHex}
58
66
  | {code: ExecutionPayloadEnvelopeErrorCode.PAYLOAD_ENVELOPE_INPUT_MISSING; blockRoot: RootHex};
59
67
 
@@ -0,0 +1,38 @@
1
+ import {Epoch, RootHex, Slot, ValidatorIndex} from "@lodestar/types";
2
+ import {GossipActionError} from "./gossipValidation.js";
3
+
4
+ export enum InclusionListErrorCode {
5
+ EMPTY_TRANSACTIONS = "INCLUSION_LIST_ERROR_EMPTY_TRANSACTIONS",
6
+ MAXIMUM_SIZE_EXCEEDED = "INCLUSION_LIST_ERROR_MAXIMUM_SIZE_EXCEEDED",
7
+ EMPTY_TRANSACTION = "INCLUSION_LIST_ERROR_EMPTY_TRANSACTION",
8
+ INVALID_SLOT = "INCLUSION_LIST_ERROR_INVALID_SLOT",
9
+ MORE_THAN_TWO = "INCLUSION_LIST_ERROR_MORE_THAN_TWO",
10
+ VALIDATOR_NOT_IN_COMMITTEE = "INCLUSION_LIST_ERROR_VALIDATOR_NOT_IN_COMMITTEE",
11
+ UNKNOWN_DEPENDENT_ROOT = "INCLUSION_LIST_ERROR_UNKNOWN_DEPENDENT_ROOT",
12
+ INVALID_DEPENDENT_ROOT_SLOT = "INCLUSION_LIST_ERROR_INVALID_DEPENDENT_ROOT_SLOT",
13
+ INVALID_DEPENDENT_ROOT = "INCLUSION_LIST_ERROR_INVALID_DEPENDENT_ROOT",
14
+ MISSING_SHUFFLING = "INCLUSION_LIST_ERROR_MISSING_SHUFFLING",
15
+ INVALID_SIGNATURE = "INCLUSION_LIST_ERROR_INVALID_SIGNATURE",
16
+ PRE_HEZE_SLOT = "INCLUSION_LIST_ERROR_PRE_HEZE_SLOT",
17
+ }
18
+
19
+ export type InclusionListErrorType =
20
+ | {code: InclusionListErrorCode.EMPTY_TRANSACTIONS}
21
+ | {code: InclusionListErrorCode.MAXIMUM_SIZE_EXCEEDED; totalBytes: number; maxBytes: number}
22
+ | {code: InclusionListErrorCode.EMPTY_TRANSACTION; transactionIndex: number}
23
+ | {code: InclusionListErrorCode.INVALID_SLOT; inclusionListSlot: Slot; currentSlot: Slot}
24
+ | {code: InclusionListErrorCode.MORE_THAN_TWO; validatorIndex: ValidatorIndex}
25
+ | {code: InclusionListErrorCode.VALIDATOR_NOT_IN_COMMITTEE; validatorIndex: ValidatorIndex}
26
+ | {code: InclusionListErrorCode.UNKNOWN_DEPENDENT_ROOT; dependentRoot: RootHex}
27
+ | {
28
+ code: InclusionListErrorCode.INVALID_DEPENDENT_ROOT_SLOT;
29
+ dependentRoot: RootHex;
30
+ dependentSlot: Slot;
31
+ maxSlot: Slot;
32
+ }
33
+ | {code: InclusionListErrorCode.INVALID_DEPENDENT_ROOT; dependentRoot: RootHex; epoch: Epoch}
34
+ | {code: InclusionListErrorCode.MISSING_SHUFFLING; dependentRoot: RootHex; epoch: Epoch}
35
+ | {code: InclusionListErrorCode.INVALID_SIGNATURE}
36
+ | {code: InclusionListErrorCode.PRE_HEZE_SLOT; inclusionListSlot: Slot};
37
+
38
+ export class InclusionListError extends GossipActionError<InclusionListErrorType> {}
@@ -1,6 +1,5 @@
1
1
  export * from "./attestationError.js";
2
2
  export * from "./attesterSlashingError.js";
3
- export * from "./blobSidecarError.js";
4
3
  export * from "./blockError.js";
5
4
  export * from "./blsToExecutionChangeError.js";
6
5
  export * from "./dataColumnSidecarError.js";
@@ -8,6 +7,7 @@ export * from "./envelopeReconstructionError.js";
8
7
  export * from "./executionPayloadBid.js";
9
8
  export * from "./executionPayloadEnvelope.js";
10
9
  export * from "./gossipValidation.js";
10
+ export * from "./inclusionList.js";
11
11
  export * from "./payloadAttestation.js";
12
12
  export * from "./proposerPreferences.js";
13
13
  export * from "./proposerSlashingError.js";
@@ -34,6 +34,17 @@ export type ForkChoiceOpts = RawForkChoiceOpts & {
34
34
  export enum ForkchoiceCaller {
35
35
  prepareNextSlot = "prepare_next_slot",
36
36
  importBlock = "import_block",
37
+ executionInvalid = "execution_invalid",
38
+ }
39
+
40
+ /**
41
+ * Where an execution engine INVALID verdict comes from. Only `blockSegment` verdicts are about the payload the engine
42
+ * just processed and keep the consensus failure semantics in fork choice, the others are applied leniently.
43
+ */
44
+ export enum ExecutionInvalidSource {
45
+ forkchoiceUpdated = "forkchoice_updated",
46
+ newPayload = "new_payload",
47
+ blockSegment = "block_segment",
37
48
  }
38
49
 
39
50
  /**