@lodestar/beacon-node 1.39.1 → 1.40.0-dev.059f489b0f

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 (509) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +23 -27
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/state/utils.d.ts +2 -7
  5. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  6. package/lib/api/impl/beacon/state/utils.js +0 -12
  7. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  8. package/lib/api/impl/config/constants.d.ts +3 -0
  9. package/lib/api/impl/config/constants.d.ts.map +1 -1
  10. package/lib/api/impl/config/constants.js +5 -1
  11. package/lib/api/impl/config/constants.js.map +1 -1
  12. package/lib/api/impl/debug/index.d.ts +1 -1
  13. package/lib/api/impl/debug/index.d.ts.map +1 -1
  14. package/lib/api/impl/debug/index.js +3 -6
  15. package/lib/api/impl/debug/index.js.map +1 -1
  16. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  17. package/lib/api/impl/lodestar/index.js +30 -3
  18. package/lib/api/impl/lodestar/index.js.map +1 -1
  19. package/lib/api/impl/proof/index.d.ts.map +1 -1
  20. package/lib/api/impl/proof/index.js +1 -2
  21. package/lib/api/impl/proof/index.js.map +1 -1
  22. package/lib/api/impl/validator/index.d.ts.map +1 -1
  23. package/lib/api/impl/validator/index.js +10 -11
  24. package/lib/api/impl/validator/index.js.map +1 -1
  25. package/lib/api/rest/base.d.ts.map +1 -1
  26. package/lib/api/rest/base.js +2 -2
  27. package/lib/api/rest/base.js.map +1 -1
  28. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -0
  29. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  30. package/lib/chain/ColumnReconstructionTracker.js +7 -3
  31. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  32. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  33. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +7 -4
  34. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  35. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  36. package/lib/chain/archiveStore/utils/archiveBlocks.js +23 -14
  37. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  38. package/lib/chain/blocks/blockInput/blockInput.d.ts +30 -0
  39. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  40. package/lib/chain/blocks/blockInput/blockInput.js +44 -3
  41. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  42. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  43. package/lib/chain/blocks/importBlock.js +15 -10
  44. package/lib/chain/blocks/importBlock.js.map +1 -1
  45. package/lib/chain/blocks/index.d.ts.map +1 -1
  46. package/lib/chain/blocks/index.js +0 -14
  47. package/lib/chain/blocks/index.js.map +1 -1
  48. package/lib/chain/blocks/types.d.ts +0 -2
  49. package/lib/chain/blocks/types.d.ts.map +1 -1
  50. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  51. package/lib/chain/blocks/verifyBlock.js +9 -9
  52. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  54. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  55. package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
  56. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  57. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  58. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +2 -2
  59. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  60. package/lib/chain/blocks/writeBlockInputToDb.d.ts +1 -4
  61. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  62. package/lib/chain/blocks/writeBlockInputToDb.js +28 -28
  63. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  64. package/lib/chain/bls/multithread/index.d.ts +3 -1
  65. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  66. package/lib/chain/bls/multithread/index.js +5 -3
  67. package/lib/chain/bls/multithread/index.js.map +1 -1
  68. package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
  69. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  70. package/lib/chain/bls/multithread/jobItem.js +2 -2
  71. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  72. package/lib/chain/bls/singleThread.d.ts +4 -2
  73. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  74. package/lib/chain/bls/singleThread.js +4 -2
  75. package/lib/chain/bls/singleThread.js.map +1 -1
  76. package/lib/chain/bls/utils.d.ts +2 -2
  77. package/lib/chain/bls/utils.d.ts.map +1 -1
  78. package/lib/chain/bls/utils.js +9 -6
  79. package/lib/chain/bls/utils.js.map +1 -1
  80. package/lib/chain/chain.d.ts +25 -7
  81. package/lib/chain/chain.d.ts.map +1 -1
  82. package/lib/chain/chain.js +213 -50
  83. package/lib/chain/chain.js.map +1 -1
  84. package/lib/chain/errors/attestationError.d.ts +14 -1
  85. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  86. package/lib/chain/errors/attestationError.js +8 -0
  87. package/lib/chain/errors/attestationError.js.map +1 -1
  88. package/lib/chain/errors/executionPayloadBid.d.ts +48 -0
  89. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -0
  90. package/lib/chain/errors/executionPayloadBid.js +15 -0
  91. package/lib/chain/errors/executionPayloadBid.js.map +1 -0
  92. package/lib/chain/errors/executionPayloadEnvelope.d.ts +48 -0
  93. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -0
  94. package/lib/chain/errors/executionPayloadEnvelope.js +16 -0
  95. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -0
  96. package/lib/chain/errors/index.d.ts +3 -0
  97. package/lib/chain/errors/index.d.ts.map +1 -1
  98. package/lib/chain/errors/index.js +3 -0
  99. package/lib/chain/errors/index.js.map +1 -1
  100. package/lib/chain/errors/payloadAttestation.d.ts +34 -0
  101. package/lib/chain/errors/payloadAttestation.d.ts.map +1 -0
  102. package/lib/chain/errors/payloadAttestation.js +13 -0
  103. package/lib/chain/errors/payloadAttestation.js.map +1 -0
  104. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  105. package/lib/chain/forkChoice/index.js +18 -0
  106. package/lib/chain/forkChoice/index.js.map +1 -1
  107. package/lib/chain/initState.d.ts +1 -1
  108. package/lib/chain/initState.d.ts.map +1 -1
  109. package/lib/chain/initState.js +7 -5
  110. package/lib/chain/initState.js.map +1 -1
  111. package/lib/chain/interface.d.ts +23 -5
  112. package/lib/chain/interface.d.ts.map +1 -1
  113. package/lib/chain/interface.js.map +1 -1
  114. package/lib/chain/lightClient/index.d.ts.map +1 -1
  115. package/lib/chain/lightClient/index.js +1 -2
  116. package/lib/chain/lightClient/index.js.map +1 -1
  117. package/lib/chain/lightClient/proofs.d.ts.map +1 -1
  118. package/lib/chain/lightClient/proofs.js +0 -2
  119. package/lib/chain/lightClient/proofs.js.map +1 -1
  120. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +5 -9
  121. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  122. package/lib/chain/opPools/aggregatedAttestationPool.js +12 -141
  123. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  124. package/lib/chain/opPools/executionPayloadBidPool.d.ts +21 -0
  125. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -0
  126. package/lib/chain/opPools/executionPayloadBidPool.js +57 -0
  127. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -0
  128. package/lib/chain/opPools/index.d.ts +2 -0
  129. package/lib/chain/opPools/index.d.ts.map +1 -1
  130. package/lib/chain/opPools/index.js +2 -0
  131. package/lib/chain/opPools/index.js.map +1 -1
  132. package/lib/chain/opPools/opPool.js +5 -8
  133. package/lib/chain/opPools/opPool.js.map +1 -1
  134. package/lib/chain/opPools/payloadAttestationPool.d.ts +24 -0
  135. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -0
  136. package/lib/chain/opPools/payloadAttestationPool.js +109 -0
  137. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -0
  138. package/lib/chain/options.d.ts +0 -1
  139. package/lib/chain/options.d.ts.map +1 -1
  140. package/lib/chain/options.js +0 -1
  141. package/lib/chain/options.js.map +1 -1
  142. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  143. package/lib/chain/prepareNextSlot.js +9 -10
  144. package/lib/chain/prepareNextSlot.js.map +1 -1
  145. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  146. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  147. package/lib/chain/produceBlock/produceBlockBody.js +6 -4
  148. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  149. package/lib/chain/regen/interface.d.ts +5 -14
  150. package/lib/chain/regen/interface.d.ts.map +1 -1
  151. package/lib/chain/regen/interface.js +1 -1
  152. package/lib/chain/regen/interface.js.map +1 -1
  153. package/lib/chain/regen/queued.d.ts +6 -10
  154. package/lib/chain/regen/queued.d.ts.map +1 -1
  155. package/lib/chain/regen/queued.js +16 -40
  156. package/lib/chain/regen/queued.js.map +1 -1
  157. package/lib/chain/regen/regen.d.ts +6 -8
  158. package/lib/chain/regen/regen.d.ts.map +1 -1
  159. package/lib/chain/regen/regen.js +20 -34
  160. package/lib/chain/regen/regen.js.map +1 -1
  161. package/lib/chain/seenCache/index.d.ts +3 -1
  162. package/lib/chain/seenCache/index.d.ts.map +1 -1
  163. package/lib/chain/seenCache/index.js +3 -1
  164. package/lib/chain/seenCache/index.js.map +1 -1
  165. package/lib/chain/seenCache/seenAttesters.d.ts +5 -0
  166. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  167. package/lib/chain/seenCache/seenAttesters.js +5 -0
  168. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  169. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts +12 -0
  170. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts.map +1 -0
  171. package/lib/chain/seenCache/seenExecutionPayloadBids.js +30 -0
  172. package/lib/chain/seenCache/seenExecutionPayloadBids.js.map +1 -0
  173. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +15 -0
  174. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +1 -0
  175. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +28 -0
  176. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +1 -0
  177. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  178. package/lib/chain/seenCache/seenGossipBlockInput.js +3 -3
  179. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  180. package/lib/chain/shufflingCache.d.ts +16 -11
  181. package/lib/chain/shufflingCache.d.ts.map +1 -1
  182. package/lib/chain/shufflingCache.js +47 -41
  183. package/lib/chain/shufflingCache.js.map +1 -1
  184. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -2
  185. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  186. package/lib/chain/stateCache/fifoBlockStateCache.js +4 -4
  187. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  188. package/lib/chain/stateCache/index.d.ts +0 -2
  189. package/lib/chain/stateCache/index.d.ts.map +1 -1
  190. package/lib/chain/stateCache/index.js +0 -2
  191. package/lib/chain/stateCache/index.js.map +1 -1
  192. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +7 -7
  193. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  194. package/lib/chain/stateCache/persistentCheckpointsCache.js +20 -17
  195. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  196. package/lib/chain/stateCache/types.d.ts +5 -6
  197. package/lib/chain/stateCache/types.d.ts.map +1 -1
  198. package/lib/chain/stateCache/types.js.map +1 -1
  199. package/lib/chain/validation/aggregateAndProof.js +35 -14
  200. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  201. package/lib/chain/validation/attestation.d.ts +2 -2
  202. package/lib/chain/validation/attestation.d.ts.map +1 -1
  203. package/lib/chain/validation/attestation.js +28 -9
  204. package/lib/chain/validation/attestation.js.map +1 -1
  205. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  206. package/lib/chain/validation/attesterSlashing.js +2 -2
  207. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  208. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  209. package/lib/chain/validation/blobSidecar.js +5 -5
  210. package/lib/chain/validation/blobSidecar.js.map +1 -1
  211. package/lib/chain/validation/block.d.ts.map +1 -1
  212. package/lib/chain/validation/block.js +8 -6
  213. package/lib/chain/validation/block.js.map +1 -1
  214. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -1
  215. package/lib/chain/validation/blsToExecutionChange.js +9 -2
  216. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  217. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  218. package/lib/chain/validation/dataColumnSidecar.js +5 -5
  219. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  220. package/lib/chain/validation/executionPayloadBid.d.ts +5 -0
  221. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -0
  222. package/lib/chain/validation/executionPayloadBid.js +104 -0
  223. package/lib/chain/validation/executionPayloadBid.js.map +1 -0
  224. package/lib/chain/validation/executionPayloadEnvelope.d.ts +5 -0
  225. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -0
  226. package/lib/chain/validation/executionPayloadEnvelope.js +89 -0
  227. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -0
  228. package/lib/chain/validation/payloadAttestationMessage.d.ts +9 -0
  229. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -0
  230. package/lib/chain/validation/payloadAttestationMessage.js +72 -0
  231. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -0
  232. package/lib/chain/validation/proposerSlashing.js +3 -2
  233. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  234. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +2 -3
  235. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -1
  236. package/lib/chain/validation/signatureSets/aggregateAndProof.js +8 -3
  237. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  238. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  239. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  240. package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -3
  241. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  242. package/lib/chain/validation/signatureSets/selectionProof.d.ts +2 -3
  243. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -1
  244. package/lib/chain/validation/signatureSets/selectionProof.js +8 -3
  245. package/lib/chain/validation/signatureSets/selectionProof.js.map +1 -1
  246. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  247. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  248. package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
  249. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  250. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -2
  251. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  252. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  253. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  254. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  255. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  256. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +3 -3
  257. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  258. package/lib/chain/validation/syncCommittee.js +1 -1
  259. package/lib/chain/validation/syncCommittee.js.map +1 -1
  260. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  261. package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -5
  262. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  263. package/lib/chain/validation/voluntaryExit.js +1 -1
  264. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  265. package/lib/chain/validatorMonitor.d.ts +2 -0
  266. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  267. package/lib/chain/validatorMonitor.js +49 -7
  268. package/lib/chain/validatorMonitor.js.map +1 -1
  269. package/lib/db/repositories/checkpointState.d.ts +2 -6
  270. package/lib/db/repositories/checkpointState.d.ts.map +1 -1
  271. package/lib/db/repositories/checkpointState.js +3 -16
  272. package/lib/db/repositories/checkpointState.js.map +1 -1
  273. package/lib/db/repositories/stateArchive.d.ts +9 -9
  274. package/lib/db/repositories/stateArchive.d.ts.map +1 -1
  275. package/lib/db/repositories/stateArchive.js +6 -21
  276. package/lib/db/repositories/stateArchive.js.map +1 -1
  277. package/lib/execution/engine/mock.d.ts +9 -6
  278. package/lib/execution/engine/mock.d.ts.map +1 -1
  279. package/lib/execution/engine/mock.js +34 -7
  280. package/lib/execution/engine/mock.js.map +1 -1
  281. package/lib/index.d.ts +1 -1
  282. package/lib/index.d.ts.map +1 -1
  283. package/lib/index.js +1 -1
  284. package/lib/index.js.map +1 -1
  285. package/lib/metrics/metrics/lodestar.d.ts +28 -6
  286. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  287. package/lib/metrics/metrics/lodestar.js +67 -17
  288. package/lib/metrics/metrics/lodestar.js.map +1 -1
  289. package/lib/network/core/networkCore.d.ts +3 -0
  290. package/lib/network/core/networkCore.d.ts.map +1 -1
  291. package/lib/network/core/networkCore.js +9 -0
  292. package/lib/network/core/networkCore.js.map +1 -1
  293. package/lib/network/core/networkCoreWorker.js +3 -0
  294. package/lib/network/core/networkCoreWorker.js.map +1 -1
  295. package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -0
  296. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  297. package/lib/network/core/networkCoreWorkerHandler.js +9 -0
  298. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  299. package/lib/network/core/types.d.ts +3 -0
  300. package/lib/network/core/types.d.ts.map +1 -1
  301. package/lib/network/gossip/gossipsub.d.ts +34 -0
  302. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  303. package/lib/network/gossip/gossipsub.js +123 -0
  304. package/lib/network/gossip/gossipsub.js.map +1 -1
  305. package/lib/network/gossip/interface.d.ts +20 -2
  306. package/lib/network/gossip/interface.d.ts.map +1 -1
  307. package/lib/network/gossip/interface.js +3 -0
  308. package/lib/network/gossip/interface.js.map +1 -1
  309. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  310. package/lib/network/gossip/scoringParameters.js +38 -2
  311. package/lib/network/gossip/scoringParameters.js.map +1 -1
  312. package/lib/network/gossip/topic.d.ts +77 -1
  313. package/lib/network/gossip/topic.d.ts.map +1 -1
  314. package/lib/network/gossip/topic.js +20 -0
  315. package/lib/network/gossip/topic.js.map +1 -1
  316. package/lib/network/network.d.ts +3 -0
  317. package/lib/network/network.d.ts.map +1 -1
  318. package/lib/network/network.js +9 -0
  319. package/lib/network/network.js.map +1 -1
  320. package/lib/network/options.d.ts +6 -0
  321. package/lib/network/options.d.ts.map +1 -1
  322. package/lib/network/options.js.map +1 -1
  323. package/lib/network/peers/peerManager.d.ts.map +1 -1
  324. package/lib/network/peers/peerManager.js +9 -0
  325. package/lib/network/peers/peerManager.js.map +1 -1
  326. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  327. package/lib/network/processor/gossipHandlers.js +35 -4
  328. package/lib/network/processor/gossipHandlers.js.map +1 -1
  329. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  330. package/lib/network/processor/gossipQueues/index.js +16 -0
  331. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  332. package/lib/network/processor/index.d.ts.map +1 -1
  333. package/lib/network/processor/index.js +3 -0
  334. package/lib/network/processor/index.js.map +1 -1
  335. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  336. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +2 -4
  337. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  338. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts +1 -2
  339. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
  340. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +5 -26
  341. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  342. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +1 -2
  343. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
  344. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +5 -7
  345. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  346. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  347. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +1 -2
  348. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  349. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -1
  350. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +1 -5
  351. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  352. package/lib/network/reqresp/handlers/index.js +2 -2
  353. package/lib/network/reqresp/handlers/index.js.map +1 -1
  354. package/lib/network/reqresp/utils/dataColumnResponseValidation.js +1 -1
  355. package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
  356. package/lib/node/nodejs.d.ts.map +1 -1
  357. package/lib/node/nodejs.js +17 -2
  358. package/lib/node/nodejs.js.map +1 -1
  359. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  360. package/lib/sync/backfill/backfill.js +3 -4
  361. package/lib/sync/backfill/backfill.js.map +1 -1
  362. package/lib/sync/backfill/verify.d.ts +1 -2
  363. package/lib/sync/backfill/verify.d.ts.map +1 -1
  364. package/lib/sync/backfill/verify.js +2 -2
  365. package/lib/sync/backfill/verify.js.map +1 -1
  366. package/lib/sync/range/chain.d.ts.map +1 -1
  367. package/lib/sync/range/chain.js +0 -1
  368. package/lib/sync/range/chain.js.map +1 -1
  369. package/lib/sync/range/range.d.ts.map +1 -1
  370. package/lib/sync/range/range.js +0 -3
  371. package/lib/sync/range/range.js.map +1 -1
  372. package/lib/sync/unknownBlock.d.ts.map +1 -1
  373. package/lib/sync/unknownBlock.js +0 -3
  374. package/lib/sync/unknownBlock.js.map +1 -1
  375. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  376. package/lib/sync/utils/downloadByRange.js +2 -2
  377. package/lib/sync/utils/downloadByRange.js.map +1 -1
  378. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  379. package/lib/sync/utils/downloadByRoot.js +1 -2
  380. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  381. package/lib/util/sszBytes.js +1 -1
  382. package/lib/util/sszBytes.js.map +1 -1
  383. package/package.json +16 -16
  384. package/src/api/impl/beacon/blocks/index.ts +39 -37
  385. package/src/api/impl/beacon/state/utils.ts +2 -22
  386. package/src/api/impl/config/constants.ts +8 -0
  387. package/src/api/impl/debug/index.ts +2 -6
  388. package/src/api/impl/lodestar/index.ts +36 -4
  389. package/src/api/impl/proof/index.ts +1 -2
  390. package/src/api/impl/validator/index.ts +15 -15
  391. package/src/api/rest/base.ts +4 -4
  392. package/src/chain/ColumnReconstructionTracker.ts +8 -4
  393. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +7 -4
  394. package/src/chain/archiveStore/utils/archiveBlocks.ts +25 -14
  395. package/src/chain/blocks/blockInput/blockInput.ts +55 -4
  396. package/src/chain/blocks/importBlock.ts +16 -10
  397. package/src/chain/blocks/index.ts +0 -19
  398. package/src/chain/blocks/types.ts +0 -2
  399. package/src/chain/blocks/verifyBlock.ts +9 -12
  400. package/src/chain/blocks/verifyBlocksSignatures.ts +4 -12
  401. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +2 -2
  402. package/src/chain/blocks/writeBlockInputToDb.ts +33 -30
  403. package/src/chain/bls/multithread/index.ts +7 -4
  404. package/src/chain/bls/multithread/jobItem.ts +7 -3
  405. package/src/chain/bls/singleThread.ts +5 -3
  406. package/src/chain/bls/utils.ts +15 -7
  407. package/src/chain/chain.ts +247 -65
  408. package/src/chain/errors/attestationError.ts +11 -1
  409. package/src/chain/errors/executionPayloadBid.ts +35 -0
  410. package/src/chain/errors/executionPayloadEnvelope.ts +34 -0
  411. package/src/chain/errors/index.ts +3 -0
  412. package/src/chain/errors/payloadAttestation.ts +25 -0
  413. package/src/chain/forkChoice/index.ts +19 -0
  414. package/src/chain/initState.ts +7 -5
  415. package/src/chain/interface.ts +34 -3
  416. package/src/chain/lightClient/index.ts +1 -2
  417. package/src/chain/lightClient/proofs.ts +0 -2
  418. package/src/chain/opPools/aggregatedAttestationPool.ts +19 -191
  419. package/src/chain/opPools/executionPayloadBidPool.ts +77 -0
  420. package/src/chain/opPools/index.ts +2 -0
  421. package/src/chain/opPools/opPool.ts +5 -7
  422. package/src/chain/opPools/payloadAttestationPool.ts +157 -0
  423. package/src/chain/options.ts +0 -2
  424. package/src/chain/prepareNextSlot.ts +8 -12
  425. package/src/chain/produceBlock/produceBlockBody.ts +13 -6
  426. package/src/chain/regen/interface.ts +4 -18
  427. package/src/chain/regen/queued.ts +17 -57
  428. package/src/chain/regen/regen.ts +22 -43
  429. package/src/chain/seenCache/index.ts +3 -1
  430. package/src/chain/seenCache/seenAttesters.ts +5 -0
  431. package/src/chain/seenCache/seenExecutionPayloadBids.ts +35 -0
  432. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +34 -0
  433. package/src/chain/seenCache/seenGossipBlockInput.ts +3 -3
  434. package/src/chain/shufflingCache.ts +67 -50
  435. package/src/chain/stateCache/fifoBlockStateCache.ts +4 -5
  436. package/src/chain/stateCache/index.ts +0 -2
  437. package/src/chain/stateCache/persistentCheckpointsCache.ts +23 -27
  438. package/src/chain/stateCache/types.ts +5 -10
  439. package/src/chain/validation/aggregateAndProof.ts +36 -14
  440. package/src/chain/validation/attestation.ts +36 -19
  441. package/src/chain/validation/attesterSlashing.ts +9 -7
  442. package/src/chain/validation/blobSidecar.ts +4 -9
  443. package/src/chain/validation/block.ts +9 -6
  444. package/src/chain/validation/blsToExecutionChange.ts +9 -7
  445. package/src/chain/validation/dataColumnSidecar.ts +4 -9
  446. package/src/chain/validation/executionPayloadBid.ts +141 -0
  447. package/src/chain/validation/executionPayloadEnvelope.ts +122 -0
  448. package/src/chain/validation/payloadAttestationMessage.ts +109 -0
  449. package/src/chain/validation/proposerSlashing.ts +3 -7
  450. package/src/chain/validation/signatureSets/aggregateAndProof.ts +9 -14
  451. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -4
  452. package/src/chain/validation/signatureSets/selectionProof.ts +9 -9
  453. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -4
  454. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -3
  455. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -4
  456. package/src/chain/validation/syncCommittee.ts +1 -1
  457. package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -5
  458. package/src/chain/validation/voluntaryExit.ts +1 -1
  459. package/src/chain/validatorMonitor.ts +62 -8
  460. package/src/db/repositories/checkpointState.ts +3 -19
  461. package/src/db/repositories/stateArchive.ts +13 -27
  462. package/src/execution/engine/mock.ts +40 -13
  463. package/src/index.ts +1 -1
  464. package/src/metrics/metrics/lodestar.ts +68 -17
  465. package/src/network/core/networkCore.ts +12 -0
  466. package/src/network/core/networkCoreWorker.ts +3 -0
  467. package/src/network/core/networkCoreWorkerHandler.ts +9 -0
  468. package/src/network/core/types.ts +6 -0
  469. package/src/network/gossip/gossipsub.ts +147 -1
  470. package/src/network/gossip/interface.ts +17 -0
  471. package/src/network/gossip/scoringParameters.ts +44 -2
  472. package/src/network/gossip/topic.ts +21 -0
  473. package/src/network/network.ts +12 -0
  474. package/src/network/options.ts +6 -0
  475. package/src/network/peers/peerManager.ts +11 -0
  476. package/src/network/processor/gossipHandlers.ts +49 -4
  477. package/src/network/processor/gossipQueues/index.ts +16 -0
  478. package/src/network/processor/index.ts +3 -0
  479. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -4
  480. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +5 -32
  481. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +5 -9
  482. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +5 -2
  483. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +1 -5
  484. package/src/network/reqresp/handlers/index.ts +2 -2
  485. package/src/network/reqresp/utils/dataColumnResponseValidation.ts +1 -1
  486. package/src/node/nodejs.ts +18 -3
  487. package/src/sync/backfill/backfill.ts +3 -4
  488. package/src/sync/backfill/verify.ts +2 -3
  489. package/src/sync/range/chain.ts +0 -1
  490. package/src/sync/range/range.ts +0 -3
  491. package/src/sync/unknownBlock.ts +0 -3
  492. package/src/sync/utils/downloadByRange.ts +2 -2
  493. package/src/sync/utils/downloadByRoot.ts +1 -2
  494. package/src/util/sszBytes.ts +1 -1
  495. package/lib/chain/stateCache/blockStateCacheImpl.d.ts +0 -55
  496. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
  497. package/lib/chain/stateCache/blockStateCacheImpl.js +0 -130
  498. package/lib/chain/stateCache/blockStateCacheImpl.js.map +0 -1
  499. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +0 -61
  500. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
  501. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +0 -157
  502. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +0 -1
  503. package/lib/util/bytes.d.ts +0 -3
  504. package/lib/util/bytes.d.ts.map +0 -1
  505. package/lib/util/bytes.js +0 -11
  506. package/lib/util/bytes.js.map +0 -1
  507. package/src/chain/stateCache/blockStateCacheImpl.ts +0 -150
  508. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -198
  509. package/src/util/bytes.ts +0 -11
@@ -37,14 +37,19 @@ import {
37
37
  UintNum64,
38
38
  ValidatorIndex,
39
39
  Wei,
40
+ deneb,
41
+ fulu,
40
42
  isBlindedBeaconBlock,
41
43
  phase0,
42
44
  rewards,
45
+ ssz,
46
+ sszTypesFor,
43
47
  } from "@lodestar/types";
44
48
  import {Logger, fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex} from "@lodestar/utils";
45
49
  import {ProcessShutdownCallback} from "@lodestar/validator";
46
50
  import {GENESIS_EPOCH, ZERO_HASH} from "../constants/index.js";
47
51
  import {IBeaconDb} from "../db/index.js";
52
+ import {BLOB_SIDECARS_IN_WRAPPER_INDEX} from "../db/repositories/blobSidecars.ts";
48
53
  import {BuilderStatus} from "../execution/builder/http.js";
49
54
  import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
50
55
  import {Metrics} from "../metrics/index.js";
@@ -52,14 +57,18 @@ import {computeNodeIdFromPrivateKey} from "../network/subnets/interface.js";
52
57
  import {BufferPool} from "../util/bufferPool.js";
53
58
  import {Clock, ClockEvent, IClock} from "../util/clock.js";
54
59
  import {CustodyConfig, getValidatorsCustodyRequirement} from "../util/dataColumns.js";
60
+ import {callInNextEventLoop} from "../util/eventLoop.js";
55
61
  import {ensureDir, writeIfNotExist} from "../util/file.js";
56
62
  import {isOptimisticBlock} from "../util/forkChoice.js";
63
+ import {JobItemQueue} from "../util/queue/itemQueue.ts";
57
64
  import {SerializedCache} from "../util/serializedCache.js";
65
+ import {getSlotFromSignedBeaconBlockSerialized} from "../util/sszBytes.ts";
58
66
  import {ArchiveStore} from "./archiveStore/archiveStore.js";
59
67
  import {CheckpointBalancesCache} from "./balancesCache.js";
60
68
  import {BeaconProposerCache} from "./beaconProposerCache.js";
61
- import {IBlockInput} from "./blocks/blockInput/index.js";
69
+ import {IBlockInput, isBlockInputBlobs, isBlockInputColumns} from "./blocks/blockInput/index.js";
62
70
  import {BlockProcessor, ImportBlockOpts} from "./blocks/index.js";
71
+ import {persistBlockInputs} from "./blocks/writeBlockInputToDb.ts";
63
72
  import {BlsMultiThreadWorkerPool, BlsSingleThreadVerifier, IBlsVerifier} from "./bls/index.js";
64
73
  import {ColumnReconstructionTracker} from "./ColumnReconstructionTracker.js";
65
74
  import {ChainEvent, ChainEventEmitter} from "./emitter.js";
@@ -70,7 +79,9 @@ import {LightClientServer} from "./lightClient/index.js";
70
79
  import {
71
80
  AggregatedAttestationPool,
72
81
  AttestationPool,
82
+ ExecutionPayloadBidPool,
73
83
  OpPool,
84
+ PayloadAttestationPool,
74
85
  SyncCommitteeMessagePool,
75
86
  SyncContributionAndProofPool,
76
87
  } from "./opPools/index.js";
@@ -86,6 +97,9 @@ import {
86
97
  SeenAttesters,
87
98
  SeenBlockProposers,
88
99
  SeenContributionAndProof,
100
+ SeenExecutionPayloadBids,
101
+ SeenExecutionPayloadEnvelopes,
102
+ SeenPayloadAttesters,
89
103
  SeenSyncCommitteeMessages,
90
104
  } from "./seenCache/index.js";
91
105
  import {SeenAggregatedAttestations} from "./seenCache/seenAggregateAndProof.js";
@@ -93,12 +107,10 @@ import {SeenAttestationDatas} from "./seenCache/seenAttestationData.js";
93
107
  import {SeenBlockAttesters} from "./seenCache/seenBlockAttesters.js";
94
108
  import {SeenBlockInput} from "./seenCache/seenGossipBlockInput.js";
95
109
  import {ShufflingCache} from "./shufflingCache.js";
96
- import {BlockStateCacheImpl} from "./stateCache/blockStateCacheImpl.js";
97
110
  import {DbCPStateDatastore, checkpointToDatastoreKey} from "./stateCache/datastore/db.js";
98
111
  import {FileCPStateDatastore} from "./stateCache/datastore/file.js";
99
112
  import {CPStateDatastore} from "./stateCache/datastore/types.js";
100
113
  import {FIFOBlockStateCache} from "./stateCache/fifoBlockStateCache.js";
101
- import {InMemoryCheckpointStateCache} from "./stateCache/inMemoryCheckpointsCache.js";
102
114
  import {PersistentCheckpointStateCache} from "./stateCache/persistentCheckpointsCache.js";
103
115
  import {CheckpointStateCache} from "./stateCache/types.js";
104
116
  import {ValidatorMonitor} from "./validatorMonitor.js";
@@ -112,6 +124,11 @@ import {ValidatorMonitor} from "./validatorMonitor.js";
112
124
  */
113
125
  const DEFAULT_MAX_CACHED_PRODUCED_RESULTS = 4;
114
126
 
127
+ /**
128
+ * The maximum number of pending unfinalized block writes to the database before backpressure is applied.
129
+ */
130
+ const DEFAULT_MAX_PENDING_UNFINALIZED_BLOCK_WRITES = 32;
131
+
115
132
  export class BeaconChain implements IBeaconChain {
116
133
  readonly genesisTime: UintNum64;
117
134
  readonly genesisValidatorsRoot: Root;
@@ -123,7 +140,7 @@ export class BeaconChain implements IBeaconChain {
123
140
  readonly logger: Logger;
124
141
  readonly metrics: Metrics | null;
125
142
  readonly validatorMonitor: ValidatorMonitor | null;
126
- readonly bufferPool: BufferPool | null;
143
+ readonly bufferPool: BufferPool;
127
144
 
128
145
  readonly anchorStateLatestBlockSlot: Slot;
129
146
 
@@ -135,18 +152,24 @@ export class BeaconChain implements IBeaconChain {
135
152
  readonly lightClientServer?: LightClientServer;
136
153
  readonly reprocessController: ReprocessController;
137
154
  readonly archiveStore: ArchiveStore;
155
+ readonly unfinalizedBlockWrites: JobItemQueue<[IBlockInput[]], void>;
138
156
 
139
157
  // Ops pool
140
158
  readonly attestationPool: AttestationPool;
141
159
  readonly aggregatedAttestationPool: AggregatedAttestationPool;
142
160
  readonly syncCommitteeMessagePool: SyncCommitteeMessagePool;
143
161
  readonly syncContributionAndProofPool;
162
+ readonly executionPayloadBidPool: ExecutionPayloadBidPool;
163
+ readonly payloadAttestationPool: PayloadAttestationPool;
144
164
  readonly opPool: OpPool;
145
165
 
146
166
  // Gossip seen cache
147
167
  readonly seenAttesters = new SeenAttesters();
148
168
  readonly seenAggregators = new SeenAggregators();
169
+ readonly seenPayloadAttesters = new SeenPayloadAttesters();
149
170
  readonly seenAggregatedAttestations: SeenAggregatedAttestations;
171
+ readonly seenExecutionPayloadEnvelopes = new SeenExecutionPayloadEnvelopes();
172
+ readonly seenExecutionPayloadBids = new SeenExecutionPayloadBids();
150
173
  readonly seenBlockProposers = new SeenBlockProposers();
151
174
  readonly seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
152
175
  readonly seenContributionAndProof: SeenContributionAndProof;
@@ -253,8 +276,8 @@ export class BeaconChain implements IBeaconChain {
253
276
  const emitter = new ChainEventEmitter();
254
277
  // by default, verify signatures on both main threads and worker threads
255
278
  const bls = opts.blsVerifyAllMainThread
256
- ? new BlsSingleThreadVerifier({metrics})
257
- : new BlsMultiThreadWorkerPool(opts, {logger, metrics});
279
+ ? new BlsSingleThreadVerifier({metrics, index2pubkey})
280
+ : new BlsMultiThreadWorkerPool(opts, {logger, metrics, index2pubkey});
258
281
 
259
282
  if (!clock) clock = new Clock({config, genesisTime: this.genesisTime, signal});
260
283
 
@@ -263,6 +286,8 @@ export class BeaconChain implements IBeaconChain {
263
286
  this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config, metrics);
264
287
  this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(config, clock, this.opts?.preaggregateSlotDistance);
265
288
  this.syncContributionAndProofPool = new SyncContributionAndProofPool(config, clock, metrics, logger);
289
+ this.executionPayloadBidPool = new ExecutionPayloadBidPool();
290
+ this.payloadAttestationPool = new PayloadAttestationPool(config, clock, metrics);
266
291
  this.opPool = new OpPool(config);
267
292
 
268
293
  this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
@@ -291,7 +316,8 @@ export class BeaconChain implements IBeaconChain {
291
316
  });
292
317
 
293
318
  this._earliestAvailableSlot = anchorState.slot;
294
- this.shufflingCache = anchorState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
319
+
320
+ this.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
295
321
  {
296
322
  shuffling: anchorState.epochCtx.previousShuffling,
297
323
  decisionRoot: anchorState.epochCtx.previousDecisionRoot,
@@ -311,32 +337,22 @@ export class BeaconChain implements IBeaconChain {
311
337
  this.index2pubkey = index2pubkey;
312
338
 
313
339
  const fileDataStore = opts.nHistoricalStatesFileDataStore ?? true;
314
- const blockStateCache = this.opts.nHistoricalStates
315
- ? new FIFOBlockStateCache(this.opts, {metrics})
316
- : new BlockStateCacheImpl({metrics});
317
- this.bufferPool = this.opts.nHistoricalStates
318
- ? new BufferPool(anchorState.type.tree_serializedSize(anchorState.node), metrics)
319
- : null;
320
-
321
- let checkpointStateCache: CheckpointStateCache;
322
- this.cpStateDatastore = undefined;
323
- if (this.opts.nHistoricalStates) {
324
- this.cpStateDatastore = fileDataStore ? new FileCPStateDatastore(dataDir) : new DbCPStateDatastore(this.db);
325
- checkpointStateCache = new PersistentCheckpointStateCache(
326
- {
327
- config,
328
- metrics,
329
- logger,
330
- clock,
331
- blockStateCache,
332
- bufferPool: this.bufferPool,
333
- datastore: this.cpStateDatastore,
334
- },
335
- this.opts
336
- );
337
- } else {
338
- checkpointStateCache = new InMemoryCheckpointStateCache({metrics});
339
- }
340
+ const blockStateCache = new FIFOBlockStateCache(this.opts, {metrics});
341
+ this.bufferPool = new BufferPool(anchorState.type.tree_serializedSize(anchorState.node), metrics);
342
+
343
+ this.cpStateDatastore = fileDataStore ? new FileCPStateDatastore(dataDir) : new DbCPStateDatastore(this.db);
344
+ const checkpointStateCache: CheckpointStateCache = new PersistentCheckpointStateCache(
345
+ {
346
+ config,
347
+ metrics,
348
+ logger,
349
+ clock,
350
+ blockStateCache,
351
+ bufferPool: this.bufferPool,
352
+ datastore: this.cpStateDatastore,
353
+ },
354
+ this.opts
355
+ );
340
356
 
341
357
  const {checkpoint} = computeAnchorCheckpoint(config, anchorState);
342
358
  blockStateCache.add(anchorState);
@@ -359,6 +375,7 @@ export class BeaconChain implements IBeaconChain {
359
375
  forkChoice,
360
376
  blockStateCache,
361
377
  checkpointStateCache,
378
+ seenBlockInputCache: this.seenBlockInputCache,
362
379
  db,
363
380
  metrics,
364
381
  validatorMonitor,
@@ -403,6 +420,15 @@ export class BeaconChain implements IBeaconChain {
403
420
  signal
404
421
  );
405
422
 
423
+ this.unfinalizedBlockWrites = new JobItemQueue(
424
+ persistBlockInputs.bind(this),
425
+ {
426
+ maxLength: DEFAULT_MAX_PENDING_UNFINALIZED_BLOCK_WRITES,
427
+ signal,
428
+ },
429
+ metrics?.unfinalizedBlockWritesQueue
430
+ );
431
+
406
432
  // always run PrepareNextSlotScheduler except for fork_choice spec tests
407
433
  if (!opts?.disablePrepareNextSlot) {
408
434
  new PrepareNextSlotScheduler(this, this.config, metrics, this.logger, signal);
@@ -417,6 +443,7 @@ export class BeaconChain implements IBeaconChain {
417
443
  clock.addListener(ClockEvent.epoch, this.onClockEpoch.bind(this));
418
444
  emitter.addListener(ChainEvent.forkChoiceFinalized, this.onForkChoiceFinalized.bind(this));
419
445
  emitter.addListener(ChainEvent.forkChoiceJustified, this.onForkChoiceJustified.bind(this));
446
+ emitter.addListener(ChainEvent.checkpoint, this.onCheckpoint.bind(this));
420
447
  }
421
448
 
422
449
  async init(): Promise<void> {
@@ -427,6 +454,12 @@ export class BeaconChain implements IBeaconChain {
427
454
  async close(): Promise<void> {
428
455
  await this.archiveStore.close();
429
456
  await this.bls.close();
457
+
458
+ // Since we don't persist unfinalized fork-choice,
459
+ // we can abort any ongoing unfinalized block writes.
460
+ // TODO: persist fork choice to disk and allow unfinalized block writes to complete.
461
+ this.unfinalizedBlockWrites.dropAllJobs();
462
+
430
463
  this.abortController.abort();
431
464
  }
432
465
 
@@ -456,6 +489,8 @@ export class BeaconChain implements IBeaconChain {
456
489
  this.seenAttesters.isKnown(epoch, index) ||
457
490
  // seenAggregators = single aggregator index, not participants of the aggregate
458
491
  this.seenAggregators.isKnown(epoch, index) ||
492
+ // seenPayloadAttesters = single signer of payload attestation message
493
+ this.seenPayloadAttesters.isKnown(epoch, index) ||
459
494
  // seenBlockProposers = single block proposer
460
495
  this.seenBlockProposers.seenAtEpoch(epoch, index)
461
496
  );
@@ -498,13 +533,13 @@ export class BeaconChain implements IBeaconChain {
498
533
  // only use regen queue if necessary, it'll cache in checkpointStateCache if regen gets through epoch transition
499
534
  const head = this.forkChoice.getHead();
500
535
  const startSlot = computeStartSlotAtEpoch(epoch);
501
- return this.regen.getBlockSlotState(head.blockRoot, startSlot, {dontTransferCache: true}, regenCaller);
536
+ return this.regen.getBlockSlotState(head, startSlot, {dontTransferCache: true}, regenCaller);
502
537
  }
503
538
 
504
539
  async getStateBySlot(
505
540
  slot: Slot,
506
541
  opts?: StateGetOpts
507
- ): Promise<{state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null> {
542
+ ): Promise<{state: CachedBeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null> {
508
543
  const finalizedBlock = this.forkChoice.getFinalizedBlock();
509
544
 
510
545
  if (slot < finalizedBlock.slot) {
@@ -516,12 +551,7 @@ export class BeaconChain implements IBeaconChain {
516
551
  if (opts?.allowRegen) {
517
552
  // Find closest canonical block to slot, then trigger regen
518
553
  const block = this.forkChoice.getCanonicalBlockClosestLteSlot(slot) ?? finalizedBlock;
519
- const state = await this.regen.getBlockSlotState(
520
- block.blockRoot,
521
- slot,
522
- {dontTransferCache: true},
523
- RegenCaller.restApi
524
- );
554
+ const state = await this.regen.getBlockSlotState(block, slot, {dontTransferCache: true}, RegenCaller.restApi);
525
555
  return {
526
556
  state,
527
557
  executionOptimistic: isOptimisticBlock(block),
@@ -559,7 +589,7 @@ export class BeaconChain implements IBeaconChain {
559
589
  async getStateByStateRoot(
560
590
  stateRoot: RootHex,
561
591
  opts?: StateGetOpts
562
- ): Promise<{state: BeaconStateAllForks; executionOptimistic: boolean; finalized: boolean} | null> {
592
+ ): Promise<{state: CachedBeaconStateAllForks | Uint8Array; executionOptimistic: boolean; finalized: boolean} | null> {
563
593
  if (opts?.allowRegen) {
564
594
  const state = await this.regen.getState(stateRoot, RegenCaller.restApi);
565
595
  const block = this.forkChoice.getBlock(state.latestBlockHeader.hashTreeRoot());
@@ -587,7 +617,8 @@ export class BeaconChain implements IBeaconChain {
587
617
  };
588
618
  }
589
619
 
590
- const data = await this.db.stateArchive.getByRoot(fromHex(stateRoot));
620
+ // this is mostly useful for a node with `--chain.archiveStateEpochFrequency 1`
621
+ const data = await this.db.stateArchive.getBinaryByRoot(fromHex(stateRoot));
591
622
  return data && {state: data, executionOptimistic: false, finalized: true};
592
623
  }
593
624
 
@@ -648,6 +679,13 @@ export class BeaconChain implements IBeaconChain {
648
679
  // Unfinalized slot, attempt to find in fork-choice
649
680
  const block = this.forkChoice.getCanonicalBlockAtSlot(slot);
650
681
  if (block) {
682
+ // Block found in fork-choice.
683
+ // It may be in the block input cache, awaiting full DA reconstruction, check there first
684
+ // Otherwise (most likely), check the hot db
685
+ const blockInput = this.seenBlockInputCache.get(block.blockRoot);
686
+ if (blockInput?.hasBlock()) {
687
+ return {block: blockInput.getBlock(), executionOptimistic: isOptimisticBlock(block), finalized: false};
688
+ }
651
689
  const data = await this.db.block.get(fromHex(block.blockRoot));
652
690
  if (data) {
653
691
  return {block: data, executionOptimistic: isOptimisticBlock(block), finalized: false};
@@ -667,6 +705,13 @@ export class BeaconChain implements IBeaconChain {
667
705
  ): Promise<{block: SignedBeaconBlock; executionOptimistic: boolean; finalized: boolean} | null> {
668
706
  const block = this.forkChoice.getBlockHex(root);
669
707
  if (block) {
708
+ // Block found in fork-choice.
709
+ // It may be in the block input cache, awaiting full DA reconstruction, check there first
710
+ // Otherwise (most likely), check the hot db
711
+ const blockInput = this.seenBlockInputCache.get(block.blockRoot);
712
+ if (blockInput?.hasBlock()) {
713
+ return {block: blockInput.getBlock(), executionOptimistic: isOptimisticBlock(block), finalized: false};
714
+ }
670
715
  const data = await this.db.block.get(fromHex(root));
671
716
  if (data) {
672
717
  return {block: data, executionOptimistic: isOptimisticBlock(block), finalized: false};
@@ -679,10 +724,137 @@ export class BeaconChain implements IBeaconChain {
679
724
  return data && {block: data, executionOptimistic: false, finalized: true};
680
725
  }
681
726
 
727
+ async getSerializedBlockByRoot(
728
+ root: string
729
+ ): Promise<{block: Uint8Array; executionOptimistic: boolean; finalized: boolean; slot: Slot} | null> {
730
+ const block = this.forkChoice.getBlockHex(root);
731
+ if (block) {
732
+ // Block found in fork-choice.
733
+ // It may be in the block input cache, awaiting full DA reconstruction, check there first
734
+ // Otherwise (most likely), check the hot db
735
+ const blockInput = this.seenBlockInputCache.get(block.blockRoot);
736
+ if (blockInput?.hasBlock()) {
737
+ const signedBlock = blockInput.getBlock();
738
+ const serialized = this.serializedCache.get(signedBlock);
739
+ if (serialized) {
740
+ return {
741
+ block: serialized,
742
+ executionOptimistic: isOptimisticBlock(block),
743
+ finalized: false,
744
+ slot: blockInput.slot,
745
+ };
746
+ }
747
+ return {
748
+ block: sszTypesFor(blockInput.forkName).SignedBeaconBlock.serialize(signedBlock),
749
+ executionOptimistic: isOptimisticBlock(block),
750
+ finalized: false,
751
+ slot: blockInput.slot,
752
+ };
753
+ }
754
+ const data = await this.db.block.getBinary(fromHex(root));
755
+ if (data) {
756
+ const slot = getSlotFromSignedBeaconBlockSerialized(data);
757
+ if (slot === null) throw new Error(`Invalid block data stored in DB for root: ${root}`);
758
+ return {block: data, executionOptimistic: isOptimisticBlock(block), finalized: false, slot};
759
+ }
760
+ // If block is not found in hot db, try cold db since there could be an archive cycle happening
761
+ // TODO: Add a lock to the archiver to have deterministic behavior on where are blocks
762
+ }
763
+
764
+ const data = await this.db.blockArchive.getBinaryEntryByRoot(fromHex(root));
765
+ return data && {block: data.value, executionOptimistic: false, finalized: true, slot: data.key};
766
+ }
767
+
768
+ async getBlobSidecars(blockSlot: Slot, blockRootHex: string): Promise<deneb.BlobSidecars | null> {
769
+ const blockInput = this.seenBlockInputCache.get(blockRootHex);
770
+ if (blockInput) {
771
+ if (!isBlockInputBlobs(blockInput)) {
772
+ throw new Error(`Expected block input to have blobs: slot=${blockSlot} root=${blockRootHex}`);
773
+ }
774
+ if (!blockInput.hasAllData()) {
775
+ return null;
776
+ }
777
+ return blockInput.getBlobs();
778
+ }
779
+ const unfinalizedBlobSidecars = (await this.db.blobSidecars.get(fromHex(blockRootHex)))?.blobSidecars ?? null;
780
+ if (unfinalizedBlobSidecars) {
781
+ return unfinalizedBlobSidecars;
782
+ }
783
+ return (await this.db.blobSidecarsArchive.get(blockSlot))?.blobSidecars ?? null;
784
+ }
785
+
786
+ async getSerializedBlobSidecars(blockSlot: Slot, blockRootHex: string): Promise<Uint8Array | null> {
787
+ const blockInput = this.seenBlockInputCache.get(blockRootHex);
788
+ if (blockInput) {
789
+ if (!isBlockInputBlobs(blockInput)) {
790
+ throw new Error(`Expected block input to have blobs: slot=${blockSlot} root=${blockRootHex}`);
791
+ }
792
+ if (!blockInput.hasAllData()) {
793
+ return null;
794
+ }
795
+ return ssz.deneb.BlobSidecars.serialize(blockInput.getBlobs());
796
+ }
797
+ const unfinalizedBlobSidecarsWrapper = await this.db.blobSidecars.getBinary(fromHex(blockRootHex));
798
+ if (unfinalizedBlobSidecarsWrapper) {
799
+ return unfinalizedBlobSidecarsWrapper.slice(BLOB_SIDECARS_IN_WRAPPER_INDEX);
800
+ }
801
+ const finalizedBlobSidecarsWrapper = await this.db.blobSidecarsArchive.getBinary(blockSlot);
802
+ if (finalizedBlobSidecarsWrapper) {
803
+ return finalizedBlobSidecarsWrapper.slice(BLOB_SIDECARS_IN_WRAPPER_INDEX);
804
+ }
805
+ return null;
806
+ }
807
+
808
+ async getDataColumnSidecars(blockSlot: Slot, blockRootHex: string): Promise<fulu.DataColumnSidecars> {
809
+ const blockInput = this.seenBlockInputCache.get(blockRootHex);
810
+ if (blockInput) {
811
+ if (!isBlockInputColumns(blockInput)) {
812
+ throw new Error(`Expected block input to have columns: slot=${blockSlot} root=${blockRootHex}`);
813
+ }
814
+ return blockInput.getAllColumns();
815
+ }
816
+ const sidecarsUnfinalized = await this.db.dataColumnSidecar.values(fromHex(blockRootHex));
817
+ if (sidecarsUnfinalized.length > 0) {
818
+ return sidecarsUnfinalized;
819
+ }
820
+ const sidecarsFinalized = await this.db.dataColumnSidecarArchive.values(blockSlot);
821
+ return sidecarsFinalized;
822
+ }
823
+
824
+ async getSerializedDataColumnSidecars(
825
+ blockSlot: Slot,
826
+ blockRootHex: string,
827
+ indices: number[]
828
+ ): Promise<(Uint8Array | undefined)[]> {
829
+ const blockInput = this.seenBlockInputCache.get(blockRootHex);
830
+ if (blockInput) {
831
+ if (!isBlockInputColumns(blockInput)) {
832
+ throw new Error(`Expected block input to have columns: slot=${blockSlot} root=${blockRootHex}`);
833
+ }
834
+ return indices.map((index) => {
835
+ const sidecar = blockInput.getColumn(index);
836
+ if (!sidecar) {
837
+ return undefined;
838
+ }
839
+ const serialized = this.serializedCache.get(sidecar);
840
+ if (serialized) {
841
+ return serialized;
842
+ }
843
+ return ssz.fulu.DataColumnSidecar.serialize(sidecar);
844
+ });
845
+ }
846
+ const sidecarsUnfinalized = await this.db.dataColumnSidecar.getManyBinary(fromHex(blockRootHex), indices);
847
+ if (sidecarsUnfinalized.some((sidecar) => sidecar != null)) {
848
+ return sidecarsUnfinalized;
849
+ }
850
+ const sidecarsFinalized = await this.db.dataColumnSidecarArchive.getManyBinary(blockSlot, indices);
851
+ return sidecarsFinalized;
852
+ }
853
+
682
854
  async produceCommonBlockBody(blockAttributes: BlockAttributes): Promise<CommonBlockBody> {
683
- const {slot, parentBlockRoot} = blockAttributes;
855
+ const {slot, parentBlock} = blockAttributes;
684
856
  const state = await this.regen.getBlockSlotState(
685
- toRootHex(parentBlockRoot),
857
+ parentBlock,
686
858
  slot,
687
859
  {dontTransferCache: true},
688
860
  RegenCaller.produceBlock
@@ -719,7 +891,7 @@ export class BeaconChain implements IBeaconChain {
719
891
  slot,
720
892
  feeRecipient,
721
893
  commonBlockBodyPromise,
722
- parentBlockRoot,
894
+ parentBlock,
723
895
  }: BlockAttributes & {commonBlockBodyPromise: Promise<CommonBlockBody>}
724
896
  ): Promise<{
725
897
  block: AssembledBlockType<T>;
@@ -728,7 +900,7 @@ export class BeaconChain implements IBeaconChain {
728
900
  shouldOverrideBuilder?: boolean;
729
901
  }> {
730
902
  const state = await this.regen.getBlockSlotState(
731
- toRootHex(parentBlockRoot),
903
+ parentBlock,
732
904
  slot,
733
905
  {dontTransferCache: true},
734
906
  RegenCaller.produceBlock
@@ -745,7 +917,7 @@ export class BeaconChain implements IBeaconChain {
745
917
  graffiti,
746
918
  slot,
747
919
  feeRecipient,
748
- parentBlockRoot,
920
+ parentBlock,
749
921
  proposerIndex,
750
922
  proposerPubKey,
751
923
  commonBlockBodyPromise,
@@ -768,7 +940,7 @@ export class BeaconChain implements IBeaconChain {
768
940
  const block = {
769
941
  slot,
770
942
  proposerIndex,
771
- parentRoot: parentBlockRoot,
943
+ parentRoot: fromHex(parentBlock.blockRoot),
772
944
  stateRoot: ZERO_HASH,
773
945
  body,
774
946
  } as AssembledBlockType<T>;
@@ -964,12 +1136,7 @@ export class BeaconChain implements IBeaconChain {
964
1136
  // thanks to one epoch look ahead, we don't need to dial up to attEpoch
965
1137
  const targetSlot = computeStartSlotAtEpoch(attEpoch - 1);
966
1138
  this.metrics?.gossipAttestation.useHeadBlockStateDialedToTargetEpoch.inc({caller: regenCaller});
967
- state = await this.regen.getBlockSlotState(
968
- attHeadBlock.blockRoot,
969
- targetSlot,
970
- {dontTransferCache: true},
971
- regenCaller
972
- );
1139
+ state = await this.regen.getBlockSlotState(attHeadBlock, targetSlot, {dontTransferCache: true}, regenCaller);
973
1140
  } else if (blockEpoch > attEpoch) {
974
1141
  // should not happen, handled inside attestation verification code
975
1142
  throw Error(`Block epoch ${blockEpoch} is after attestation epoch ${attEpoch}`);
@@ -980,8 +1147,8 @@ export class BeaconChain implements IBeaconChain {
980
1147
  this.metrics?.gossipAttestation.useHeadBlockState.inc({caller: regenCaller});
981
1148
  state = await this.regen.getState(attHeadBlock.stateRoot, regenCaller);
982
1149
  }
983
-
984
- // should always be the current epoch of the active context so no need to await a result from the ShufflingCache
1150
+ // resolve the promise to unblock other calls of the same epoch and dependent root
1151
+ this.shufflingCache.processState(state);
985
1152
  return state.epochCtx.getShufflingAtEpoch(attEpoch);
986
1153
  }
987
1154
 
@@ -1098,6 +1265,8 @@ export class BeaconChain implements IBeaconChain {
1098
1265
  metrics.opPool.proposerSlashingPoolSize.set(this.opPool.proposerSlashingsSize);
1099
1266
  metrics.opPool.voluntaryExitPoolSize.set(this.opPool.voluntaryExitsSize);
1100
1267
  metrics.opPool.syncCommitteeMessagePoolSize.set(this.syncCommitteeMessagePool.size);
1268
+ metrics.opPool.payloadAttestationPool.size.set(this.payloadAttestationPool.size);
1269
+ metrics.opPool.executionPayloadBidPool.size.set(this.executionPayloadBidPool.size);
1101
1270
  // syncContributionAndProofPool tracks metrics on its own
1102
1271
  metrics.opPool.blsToExecutionChangePoolSize.set(this.opPool.blsToExecutionChangeSize);
1103
1272
  metrics.chain.blacklistedBlocks.set(this.blacklistedBlocks.size);
@@ -1128,6 +1297,9 @@ export class BeaconChain implements IBeaconChain {
1128
1297
  this.aggregatedAttestationPool.prune(slot);
1129
1298
  this.syncCommitteeMessagePool.prune(slot);
1130
1299
  this.seenSyncCommitteeMessages.prune(slot);
1300
+ this.payloadAttestationPool.prune(slot);
1301
+ this.executionPayloadBidPool.prune(slot);
1302
+ this.seenExecutionPayloadBids.prune(slot);
1131
1303
  this.seenAttestationDatas.onSlot(slot);
1132
1304
  this.reprocessController.onSlot(slot);
1133
1305
 
@@ -1151,6 +1323,7 @@ export class BeaconChain implements IBeaconChain {
1151
1323
 
1152
1324
  this.seenAttesters.prune(epoch);
1153
1325
  this.seenAggregators.prune(epoch);
1326
+ this.seenPayloadAttesters.prune(epoch);
1154
1327
  this.seenAggregatedAttestations.prune(epoch);
1155
1328
  this.seenBlockAttesters.prune(epoch);
1156
1329
  this.beaconProposerCache.prune(epoch);
@@ -1165,9 +1338,18 @@ export class BeaconChain implements IBeaconChain {
1165
1338
  this.logger.verbose("Fork choice justified", {epoch: cp.epoch, root: cp.rootHex});
1166
1339
  }
1167
1340
 
1341
+ private onCheckpoint(this: BeaconChain, _checkpoint: phase0.Checkpoint, state: CachedBeaconStateAllForks): void {
1342
+ // Defer to not block other checkpoint event handlers, which can cause lightclient update delays
1343
+ callInNextEventLoop(() => {
1344
+ this.shufflingCache.processState(state);
1345
+ });
1346
+ }
1347
+
1168
1348
  private async onForkChoiceFinalized(this: BeaconChain, cp: CheckpointWithHex): Promise<void> {
1169
1349
  this.logger.verbose("Fork choice finalized", {epoch: cp.epoch, root: cp.rootHex});
1170
- this.seenBlockProposers.prune(computeStartSlotAtEpoch(cp.epoch));
1350
+ const finalizedSlot = computeStartSlotAtEpoch(cp.epoch);
1351
+ this.seenBlockProposers.prune(finalizedSlot);
1352
+ this.seenExecutionPayloadEnvelopes.prune(finalizedSlot);
1171
1353
 
1172
1354
  // Update validator custody to account for effective balance changes
1173
1355
  await this.updateValidatorsCustodyRequirement(cp);
@@ -1175,13 +1357,13 @@ export class BeaconChain implements IBeaconChain {
1175
1357
  // TODO: Improve using regen here
1176
1358
  const {blockRoot, stateRoot, slot} = this.forkChoice.getHead();
1177
1359
  const headState = this.regen.getStateSync(stateRoot);
1178
- const headBlock = await this.db.block.get(fromHex(blockRoot));
1179
- if (headBlock == null) {
1180
- throw Error(`Head block ${slot} ${headBlock} is not available in database`);
1360
+ const blockResult = await this.getBlockByRoot(blockRoot);
1361
+ if (blockResult == null) {
1362
+ throw Error(`Head block for ${slot} is not available in cache or database`);
1181
1363
  }
1182
1364
 
1183
1365
  if (headState) {
1184
- this.opPool.pruneAll(headBlock, headState);
1366
+ this.opPool.pruneAll(blockResult.block, headState);
1185
1367
  }
1186
1368
 
1187
1369
  if (headState === null) {
@@ -1295,9 +1477,9 @@ export class BeaconChain implements IBeaconChain {
1295
1477
 
1296
1478
  preState = processSlots(preState, block.slot); // Dial preState's slot to block.slot
1297
1479
 
1298
- const postState = this.regen.getStateSync(toRootHex(block.stateRoot)) ?? undefined;
1480
+ const proposerRewards = this.regen.getStateSync(toRootHex(block.stateRoot))?.proposerRewards ?? undefined;
1299
1481
 
1300
- return computeBlockRewards(this.config, block, preState.clone(), postState?.clone());
1482
+ return computeBlockRewards(this.config, block, preState, proposerRewards);
1301
1483
  }
1302
1484
 
1303
1485
  async getAttestationsRewards(
@@ -1338,6 +1520,6 @@ export class BeaconChain implements IBeaconChain {
1338
1520
 
1339
1521
  preState = processSlots(preState, block.slot); // Dial preState's slot to block.slot
1340
1522
 
1341
- return computeSyncCommitteeRewards(this.config, this.index2pubkey, block, preState.clone(), validatorIds);
1523
+ return computeSyncCommitteeRewards(this.config, this.index2pubkey, block, preState, validatorIds);
1342
1524
  }
1343
1525
  }
@@ -139,6 +139,14 @@ export enum AttestationErrorCode {
139
139
  * Electra: Attester not in committee
140
140
  */
141
141
  ATTESTER_NOT_IN_COMMITTEE = "ATTESTATION_ERROR_ATTESTER_NOT_IN_COMMITTEE",
142
+ /**
143
+ * Gloas: Invalid attestationData index: is non-zero and non-one
144
+ */
145
+ INVALID_PAYLOAD_STATUS_VALUE = "ATTESTATION_ERROR_INVALID_PAYLOAD_STATUS_VALUE",
146
+ /**
147
+ * Gloas: Current slot attestation is marking payload as present
148
+ */
149
+ PREMATURELY_INDICATED_PAYLOAD_PRESENT = "ATTESTATION_ERROR_PREMATURELY_INDICATED_PAYLOAD_PRESENT",
142
150
  }
143
151
 
144
152
  export type AttestationErrorType =
@@ -175,7 +183,9 @@ export type AttestationErrorType =
175
183
  | {code: AttestationErrorCode.TOO_MANY_SKIPPED_SLOTS; headBlockSlot: Slot; attestationSlot: Slot}
176
184
  | {code: AttestationErrorCode.NOT_EXACTLY_ONE_COMMITTEE_BIT_SET}
177
185
  | {code: AttestationErrorCode.NON_ZERO_ATTESTATION_DATA_INDEX}
178
- | {code: AttestationErrorCode.ATTESTER_NOT_IN_COMMITTEE};
186
+ | {code: AttestationErrorCode.ATTESTER_NOT_IN_COMMITTEE}
187
+ | {code: AttestationErrorCode.INVALID_PAYLOAD_STATUS_VALUE; attDataIndex: number}
188
+ | {code: AttestationErrorCode.PREMATURELY_INDICATED_PAYLOAD_PRESENT};
179
189
 
180
190
  export class AttestationError extends GossipActionError<AttestationErrorType> {
181
191
  getMetadata(): Record<string, string | number | null> {
@@ -0,0 +1,35 @@
1
+ import {BuilderIndex, RootHex, Slot} from "@lodestar/types";
2
+ import {GossipActionError} from "./gossipValidation.ts";
3
+
4
+ export enum ExecutionPayloadBidErrorCode {
5
+ BUILDER_NOT_ELIGIBLE = "EXECUTION_PAYLOAD_BID_ERROR_BUILDER_NOT_ELIGIBLE",
6
+ NON_ZERO_EXECUTION_PAYMENT = "EXECUTION_PAYLOAD_BID_ERROR_NON_ZERO_EXECUTION_PAYMENT",
7
+ BID_ALREADY_KNOWN = "EXECUTION_PAYLOAD_BID_ERROR_BID_ALREADY_KNOWN",
8
+ BID_TOO_LOW = "EXECUTION_PAYLOAD_BID_ERROR_BID_TOO_LOW",
9
+ BID_TOO_HIGH = "EXECUTION_PAYLOAD_BID_ERROR_BID_TOO_HIGH",
10
+ UNKNOWN_BLOCK_ROOT = "EXECUTION_PAYLOAD_BID_ERROR_UNKNOWN_BLOCK_ROOT",
11
+ INVALID_SLOT = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SLOT",
12
+ INVALID_SIGNATURE = "EXECUTION_PAYLOAD_BID_ERROR_INVALID_SIGNATURE",
13
+ }
14
+
15
+ export type ExecutionPayloadBidErrorType =
16
+ | {code: ExecutionPayloadBidErrorCode.BUILDER_NOT_ELIGIBLE; builderIndex: BuilderIndex}
17
+ | {
18
+ code: ExecutionPayloadBidErrorCode.NON_ZERO_EXECUTION_PAYMENT;
19
+ builderIndex: BuilderIndex;
20
+ executionPayment: number;
21
+ }
22
+ | {
23
+ code: ExecutionPayloadBidErrorCode.BID_ALREADY_KNOWN;
24
+ builderIndex: BuilderIndex;
25
+ slot: Slot;
26
+ parentBlockRoot: RootHex;
27
+ parentBlockHash: RootHex;
28
+ }
29
+ | {code: ExecutionPayloadBidErrorCode.BID_TOO_LOW; bidValue: number; currentHighestBid: number}
30
+ | {code: ExecutionPayloadBidErrorCode.BID_TOO_HIGH; bidValue: number; builderBalance: number}
31
+ | {code: ExecutionPayloadBidErrorCode.UNKNOWN_BLOCK_ROOT; parentBlockRoot: RootHex}
32
+ | {code: ExecutionPayloadBidErrorCode.INVALID_SLOT; builderIndex: BuilderIndex; slot: Slot}
33
+ | {code: ExecutionPayloadBidErrorCode.INVALID_SIGNATURE; builderIndex: BuilderIndex; slot: Slot};
34
+
35
+ export class ExecutionPayloadBidError extends GossipActionError<ExecutionPayloadBidErrorType> {}