@lodestar/beacon-node 1.39.0-dev.3bf4734ba9 → 1.39.0-dev.46c9c672fd

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 (385) hide show
  1. package/README.md +1 -1
  2. package/lib/api/impl/beacon/blocks/utils.js +1 -1
  3. package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
  4. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  5. package/lib/chain/blocks/verifyBlock.js +1 -1
  6. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  7. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  8. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +4 -2
  9. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  10. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -1
  11. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  12. package/lib/chain/blocks/verifyBlocksSignatures.js +3 -2
  13. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  14. package/lib/chain/chain.d.ts +8 -12
  15. package/lib/chain/chain.d.ts.map +1 -1
  16. package/lib/chain/chain.js +23 -47
  17. package/lib/chain/chain.js.map +1 -1
  18. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  19. package/lib/chain/forkChoice/index.js +3 -3
  20. package/lib/chain/forkChoice/index.js.map +1 -1
  21. package/lib/chain/initState.d.ts +1 -14
  22. package/lib/chain/initState.d.ts.map +1 -1
  23. package/lib/chain/initState.js +1 -62
  24. package/lib/chain/initState.js.map +1 -1
  25. package/lib/chain/interface.d.ts +4 -9
  26. package/lib/chain/interface.d.ts.map +1 -1
  27. package/lib/chain/interface.js.map +1 -1
  28. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
  29. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  30. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
  31. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  32. package/lib/chain/opPools/opPool.d.ts +3 -0
  33. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  34. package/lib/chain/opPools/opPool.js +9 -8
  35. package/lib/chain/opPools/opPool.js.map +1 -1
  36. package/lib/chain/prepareNextSlot.d.ts +0 -4
  37. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  38. package/lib/chain/prepareNextSlot.js +1 -21
  39. package/lib/chain/prepareNextSlot.js.map +1 -1
  40. package/lib/chain/produceBlock/produceBlockBody.d.ts +0 -1
  41. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  42. package/lib/chain/produceBlock/produceBlockBody.js +9 -12
  43. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  44. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
  45. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  46. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
  47. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  48. package/lib/chain/validation/aggregateAndProof.js +9 -0
  49. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  50. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  51. package/lib/chain/validation/attesterSlashing.js +1 -1
  52. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  53. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  54. package/lib/chain/validation/blobSidecar.js +2 -3
  55. package/lib/chain/validation/blobSidecar.js.map +1 -1
  56. package/lib/chain/validation/block.d.ts.map +1 -1
  57. package/lib/chain/validation/block.js +3 -3
  58. package/lib/chain/validation/block.js.map +1 -1
  59. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -1
  60. package/lib/chain/validation/blsToExecutionChange.js +10 -3
  61. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  62. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  63. package/lib/chain/validation/dataColumnSidecar.js +2 -3
  64. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  65. package/lib/chain/validation/proposerSlashing.js +1 -1
  66. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  67. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  68. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  69. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -1
  70. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  71. package/lib/chain/validation/signatureSets/contributionAndProof.js +2 -2
  72. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  73. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -1
  74. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  75. package/lib/chain/validation/signatureSets/syncCommittee.js +2 -2
  76. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  77. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
  78. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  79. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  80. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  81. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -1
  82. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  83. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -2
  84. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  85. package/lib/chain/validation/syncCommittee.js +1 -1
  86. package/lib/chain/validation/syncCommittee.js.map +1 -1
  87. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  88. package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -3
  89. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  90. package/lib/chain/validation/voluntaryExit.js +1 -1
  91. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  92. package/lib/db/beacon.d.ts +3 -7
  93. package/lib/db/beacon.d.ts.map +1 -1
  94. package/lib/db/beacon.js +33 -12
  95. package/lib/db/beacon.js.map +1 -1
  96. package/lib/db/buckets.d.ts +12 -6
  97. package/lib/db/buckets.d.ts.map +1 -1
  98. package/lib/db/buckets.js +6 -1
  99. package/lib/db/buckets.js.map +1 -1
  100. package/lib/db/interface.d.ts +2 -7
  101. package/lib/db/interface.d.ts.map +1 -1
  102. package/lib/db/repositories/index.d.ts +0 -3
  103. package/lib/db/repositories/index.d.ts.map +1 -1
  104. package/lib/db/repositories/index.js +0 -3
  105. package/lib/db/repositories/index.js.map +1 -1
  106. package/lib/execution/engine/http.d.ts +1 -1
  107. package/lib/execution/engine/http.d.ts.map +1 -1
  108. package/lib/execution/engine/http.js +2 -3
  109. package/lib/execution/engine/http.js.map +1 -1
  110. package/lib/execution/engine/index.d.ts.map +1 -1
  111. package/lib/execution/engine/index.js +1 -1
  112. package/lib/execution/engine/index.js.map +1 -1
  113. package/lib/execution/engine/interface.d.ts +1 -1
  114. package/lib/execution/engine/interface.d.ts.map +1 -1
  115. package/lib/execution/engine/interface.js.map +1 -1
  116. package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
  117. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
  118. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
  119. package/lib/execution/engine/jwt.d.ts.map +1 -0
  120. package/lib/execution/engine/jwt.js.map +1 -0
  121. package/lib/execution/engine/mock.d.ts.map +1 -1
  122. package/lib/execution/engine/mock.js +1 -1
  123. package/lib/execution/engine/mock.js.map +1 -1
  124. package/lib/execution/engine/payloadIdCache.d.ts +1 -1
  125. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  126. package/lib/execution/engine/types.d.ts +1 -1
  127. package/lib/execution/engine/types.d.ts.map +1 -1
  128. package/lib/execution/engine/types.js +1 -1
  129. package/lib/execution/engine/types.js.map +1 -1
  130. package/lib/execution/engine/utils.d.ts +64 -2
  131. package/lib/execution/engine/utils.d.ts.map +1 -1
  132. package/lib/execution/engine/utils.js +91 -2
  133. package/lib/execution/engine/utils.js.map +1 -1
  134. package/lib/index.d.ts +1 -2
  135. package/lib/index.d.ts.map +1 -1
  136. package/lib/index.js +1 -2
  137. package/lib/index.js.map +1 -1
  138. package/lib/metrics/metrics/lodestar.d.ts +0 -35
  139. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  140. package/lib/metrics/metrics/lodestar.js +0 -90
  141. package/lib/metrics/metrics/lodestar.js.map +1 -1
  142. package/lib/network/core/events.d.ts +1 -1
  143. package/lib/network/core/events.d.ts.map +1 -1
  144. package/lib/network/core/events.js +1 -1
  145. package/lib/network/core/events.js.map +1 -1
  146. package/lib/network/events.d.ts +6 -1
  147. package/lib/network/events.d.ts.map +1 -1
  148. package/lib/network/events.js +7 -1
  149. package/lib/network/events.js.map +1 -1
  150. package/lib/network/peers/discover.d.ts.map +1 -1
  151. package/lib/network/peers/discover.js.map +1 -1
  152. package/lib/node/nodejs.d.ts +6 -3
  153. package/lib/node/nodejs.d.ts.map +1 -1
  154. package/lib/node/nodejs.js +13 -10
  155. package/lib/node/nodejs.js.map +1 -1
  156. package/lib/node/notifier.d.ts.map +1 -1
  157. package/lib/node/notifier.js +9 -6
  158. package/lib/node/notifier.js.map +1 -1
  159. package/lib/node/options.d.ts +0 -2
  160. package/lib/node/options.d.ts.map +1 -1
  161. package/lib/node/options.js +0 -2
  162. package/lib/node/options.js.map +1 -1
  163. package/lib/node/utils/interop/deposits.d.ts +2 -1
  164. package/lib/node/utils/interop/deposits.d.ts.map +1 -1
  165. package/lib/node/utils/interop/deposits.js.map +1 -1
  166. package/lib/node/utils/interop/state.d.ts +1 -1
  167. package/lib/node/utils/interop/state.d.ts.map +1 -1
  168. package/lib/node/utils/state.d.ts +1 -7
  169. package/lib/node/utils/state.d.ts.map +1 -1
  170. package/lib/node/utils/state.js +1 -14
  171. package/lib/node/utils/state.js.map +1 -1
  172. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  173. package/lib/sync/backfill/backfill.js +2 -4
  174. package/lib/sync/backfill/backfill.js.map +1 -1
  175. package/lib/sync/backfill/verify.d.ts +2 -2
  176. package/lib/sync/backfill/verify.d.ts.map +1 -1
  177. package/lib/sync/backfill/verify.js +3 -3
  178. package/lib/sync/backfill/verify.js.map +1 -1
  179. package/lib/util/workerEvents.d.ts +1 -6
  180. package/lib/util/workerEvents.d.ts.map +1 -1
  181. package/lib/util/workerEvents.js +8 -8
  182. package/lib/util/workerEvents.js.map +1 -1
  183. package/package.json +28 -26
  184. package/src/api/impl/beacon/blocks/utils.ts +1 -1
  185. package/src/chain/blocks/verifyBlock.ts +1 -0
  186. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -2
  187. package/src/chain/blocks/verifyBlocksSignatures.ts +13 -3
  188. package/src/chain/chain.ts +33 -56
  189. package/src/chain/forkChoice/index.ts +3 -2
  190. package/src/chain/initState.ts +1 -97
  191. package/src/chain/interface.ts +4 -8
  192. package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
  193. package/src/chain/opPools/opPool.ts +8 -8
  194. package/src/chain/prepareNextSlot.ts +1 -28
  195. package/src/chain/produceBlock/produceBlockBody.ts +9 -13
  196. package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
  197. package/src/chain/validation/aggregateAndProof.ts +12 -0
  198. package/src/chain/validation/attesterSlashing.ts +6 -1
  199. package/src/chain/validation/blobSidecar.ts +3 -3
  200. package/src/chain/validation/block.ts +3 -2
  201. package/src/chain/validation/blsToExecutionChange.ts +10 -8
  202. package/src/chain/validation/dataColumnSidecar.ts +3 -3
  203. package/src/chain/validation/proposerSlashing.ts +6 -1
  204. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  205. package/src/chain/validation/signatureSets/contributionAndProof.ts +3 -1
  206. package/src/chain/validation/signatureSets/syncCommittee.ts +3 -1
  207. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
  208. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -1
  209. package/src/chain/validation/syncCommittee.ts +1 -1
  210. package/src/chain/validation/syncCommitteeContributionAndProof.ts +8 -3
  211. package/src/chain/validation/voluntaryExit.ts +1 -1
  212. package/src/db/beacon.ts +38 -16
  213. package/src/db/buckets.ts +12 -7
  214. package/src/db/interface.ts +2 -13
  215. package/src/db/repositories/index.ts +0 -3
  216. package/src/execution/engine/http.ts +8 -9
  217. package/src/execution/engine/index.ts +1 -1
  218. package/src/execution/engine/interface.ts +1 -1
  219. package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
  220. package/src/execution/engine/mock.ts +1 -2
  221. package/src/execution/engine/payloadIdCache.ts +1 -1
  222. package/src/execution/engine/types.ts +9 -9
  223. package/src/execution/engine/utils.ts +111 -5
  224. package/src/index.ts +1 -2
  225. package/src/metrics/metrics/lodestar.ts +0 -92
  226. package/src/network/core/events.ts +1 -1
  227. package/src/network/events.ts +7 -1
  228. package/src/network/peers/discover.ts +3 -3
  229. package/src/node/nodejs.ts +20 -11
  230. package/src/node/notifier.ts +13 -7
  231. package/src/node/options.ts +0 -3
  232. package/src/node/utils/interop/deposits.ts +3 -1
  233. package/src/node/utils/interop/state.ts +1 -1
  234. package/src/node/utils/state.ts +3 -18
  235. package/src/sync/backfill/backfill.ts +2 -9
  236. package/src/sync/backfill/verify.ts +3 -8
  237. package/src/util/workerEvents.ts +9 -8
  238. package/lib/chain/genesis/genesis.d.ts +0 -51
  239. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  240. package/lib/chain/genesis/genesis.js +0 -123
  241. package/lib/chain/genesis/genesis.js.map +0 -1
  242. package/lib/chain/genesis/interface.d.ts +0 -13
  243. package/lib/chain/genesis/interface.d.ts.map +0 -1
  244. package/lib/chain/genesis/interface.js +0 -2
  245. package/lib/chain/genesis/interface.js.map +0 -1
  246. package/lib/chain/rewards/attestationsRewards.d.ts +0 -7
  247. package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
  248. package/lib/chain/rewards/attestationsRewards.js +0 -112
  249. package/lib/chain/rewards/attestationsRewards.js.map +0 -1
  250. package/lib/chain/rewards/blockRewards.d.ts +0 -14
  251. package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
  252. package/lib/chain/rewards/blockRewards.js +0 -94
  253. package/lib/chain/rewards/blockRewards.js.map +0 -1
  254. package/lib/chain/rewards/syncCommitteeRewards.d.ts +0 -6
  255. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
  256. package/lib/chain/rewards/syncCommitteeRewards.js +0 -36
  257. package/lib/chain/rewards/syncCommitteeRewards.js.map +0 -1
  258. package/lib/db/repositories/depositDataRoot.d.ts +0 -22
  259. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  260. package/lib/db/repositories/depositDataRoot.js +0 -62
  261. package/lib/db/repositories/depositDataRoot.js.map +0 -1
  262. package/lib/db/repositories/depositEvent.d.ts +0 -13
  263. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  264. package/lib/db/repositories/depositEvent.js +0 -27
  265. package/lib/db/repositories/depositEvent.js.map +0 -1
  266. package/lib/db/repositories/eth1Data.d.ts +0 -13
  267. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  268. package/lib/db/repositories/eth1Data.js +0 -26
  269. package/lib/db/repositories/eth1Data.js.map +0 -1
  270. package/lib/db/single/index.d.ts +0 -3
  271. package/lib/db/single/index.d.ts.map +0 -1
  272. package/lib/db/single/index.js +0 -3
  273. package/lib/db/single/index.js.map +0 -1
  274. package/lib/db/single/preGenesisState.d.ts +0 -16
  275. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  276. package/lib/db/single/preGenesisState.js +0 -29
  277. package/lib/db/single/preGenesisState.js.map +0 -1
  278. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
  279. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  280. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
  281. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
  282. package/lib/eth1/errors.d.ts +0 -66
  283. package/lib/eth1/errors.d.ts.map +0 -1
  284. package/lib/eth1/errors.js +0 -27
  285. package/lib/eth1/errors.js.map +0 -1
  286. package/lib/eth1/eth1DataCache.d.ts +0 -19
  287. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  288. package/lib/eth1/eth1DataCache.js +0 -19
  289. package/lib/eth1/eth1DataCache.js.map +0 -1
  290. package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
  291. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  292. package/lib/eth1/eth1DepositDataTracker.js +0 -317
  293. package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
  294. package/lib/eth1/eth1DepositsCache.d.ts +0 -42
  295. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  296. package/lib/eth1/eth1DepositsCache.js +0 -119
  297. package/lib/eth1/eth1DepositsCache.js.map +0 -1
  298. package/lib/eth1/index.d.ts +0 -31
  299. package/lib/eth1/index.d.ts.map +0 -1
  300. package/lib/eth1/index.js +0 -71
  301. package/lib/eth1/index.js.map +0 -1
  302. package/lib/eth1/interface.d.ts +0 -74
  303. package/lib/eth1/interface.d.ts.map +0 -1
  304. package/lib/eth1/interface.js +0 -8
  305. package/lib/eth1/interface.js.map +0 -1
  306. package/lib/eth1/options.d.ts +0 -22
  307. package/lib/eth1/options.d.ts.map +0 -1
  308. package/lib/eth1/options.js +0 -8
  309. package/lib/eth1/options.js.map +0 -1
  310. package/lib/eth1/provider/eth1Provider.d.ts +0 -39
  311. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  312. package/lib/eth1/provider/eth1Provider.js +0 -147
  313. package/lib/eth1/provider/eth1Provider.js.map +0 -1
  314. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  315. package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
  316. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  317. package/lib/eth1/provider/jwt.js.map +0 -1
  318. package/lib/eth1/provider/utils.d.ts +0 -65
  319. package/lib/eth1/provider/utils.d.ts.map +0 -1
  320. package/lib/eth1/provider/utils.js +0 -120
  321. package/lib/eth1/provider/utils.js.map +0 -1
  322. package/lib/eth1/stream.d.ts +0 -15
  323. package/lib/eth1/stream.d.ts.map +0 -1
  324. package/lib/eth1/stream.js +0 -54
  325. package/lib/eth1/stream.js.map +0 -1
  326. package/lib/eth1/utils/depositContract.d.ts +0 -14
  327. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  328. package/lib/eth1/utils/depositContract.js +0 -33
  329. package/lib/eth1/utils/depositContract.js.map +0 -1
  330. package/lib/eth1/utils/deposits.d.ts +0 -8
  331. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  332. package/lib/eth1/utils/deposits.js +0 -47
  333. package/lib/eth1/utils/deposits.js.map +0 -1
  334. package/lib/eth1/utils/eth1Data.d.ts +0 -22
  335. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  336. package/lib/eth1/utils/eth1Data.js +0 -77
  337. package/lib/eth1/utils/eth1Data.js.map +0 -1
  338. package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
  339. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  340. package/lib/eth1/utils/eth1DepositEvent.js +0 -13
  341. package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
  342. package/lib/eth1/utils/eth1Vote.d.ts +0 -17
  343. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  344. package/lib/eth1/utils/eth1Vote.js +0 -111
  345. package/lib/eth1/utils/eth1Vote.js.map +0 -1
  346. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
  347. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  348. package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
  349. package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
  350. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
  351. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  352. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
  353. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
  354. package/src/chain/genesis/genesis.ts +0 -190
  355. package/src/chain/genesis/interface.ts +0 -14
  356. package/src/chain/rewards/attestationsRewards.ts +0 -197
  357. package/src/chain/rewards/blockRewards.ts +0 -150
  358. package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
  359. package/src/db/repositories/depositDataRoot.ts +0 -80
  360. package/src/db/repositories/depositEvent.ts +0 -32
  361. package/src/db/repositories/eth1Data.ts +0 -33
  362. package/src/db/single/index.ts +0 -2
  363. package/src/db/single/preGenesisState.ts +0 -37
  364. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  365. package/src/eth1/errors.ts +0 -40
  366. package/src/eth1/eth1DataCache.ts +0 -26
  367. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  368. package/src/eth1/eth1DepositsCache.ts +0 -141
  369. package/src/eth1/index.ts +0 -94
  370. package/src/eth1/interface.ts +0 -87
  371. package/src/eth1/options.ts +0 -28
  372. package/src/eth1/provider/eth1Provider.ts +0 -229
  373. package/src/eth1/provider/utils.ts +0 -136
  374. package/src/eth1/stream.ts +0 -75
  375. package/src/eth1/utils/depositContract.ts +0 -37
  376. package/src/eth1/utils/deposits.ts +0 -70
  377. package/src/eth1/utils/eth1Data.ts +0 -100
  378. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  379. package/src/eth1/utils/eth1Vote.ts +0 -142
  380. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  381. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  382. /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
  383. /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
  384. /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
  385. /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
@@ -1,37 +1,11 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {ZERO_HASH} from "@lodestar/params";
3
- import {
4
- BeaconStateAllForks,
5
- CachedBeaconStateAllForks,
6
- computeEpochAtSlot,
7
- computeStartSlotAtEpoch,
8
- } from "@lodestar/state-transition";
3
+ import {BeaconStateAllForks, computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition";
9
4
  import {SignedBeaconBlock, ssz} from "@lodestar/types";
10
5
  import {Logger, toHex, toRootHex} from "@lodestar/utils";
11
6
  import {GENESIS_SLOT} from "../constants/index.js";
12
7
  import {IBeaconDb} from "../db/index.js";
13
- import {Eth1Provider} from "../eth1/index.js";
14
- import {Eth1Options} from "../eth1/options.js";
15
8
  import {Metrics} from "../metrics/index.js";
16
- import {GenesisBuilder} from "./genesis/genesis.js";
17
- import {GenesisResult} from "./genesis/interface.js";
18
-
19
- export async function persistGenesisResult(
20
- db: IBeaconDb,
21
- genesisResult: GenesisResult,
22
- genesisBlock: SignedBeaconBlock
23
- ): Promise<void> {
24
- await Promise.all([
25
- db.stateArchive.add(genesisResult.state),
26
- db.blockArchive.add(genesisBlock),
27
- db.depositDataRoot.putList(genesisResult.depositTree.getAllReadonlyValues()),
28
- db.eth1Data.put(genesisResult.block.timestamp, {
29
- ...genesisResult.block,
30
- depositCount: genesisResult.depositTree.length,
31
- depositRoot: genesisResult.depositTree.hashTreeRoot(),
32
- }),
33
- ]);
34
- }
35
9
 
36
10
  export async function persistAnchorState(
37
11
  config: ChainForkConfig,
@@ -75,76 +49,6 @@ export function createGenesisBlock(config: ChainForkConfig, genesisState: Beacon
75
49
  return genesisBlock;
76
50
  }
77
51
 
78
- /**
79
- * Initialize and persist a genesis state and related data
80
- */
81
- export async function initStateFromEth1({
82
- config,
83
- db,
84
- logger,
85
- opts,
86
- signal,
87
- }: {
88
- config: ChainForkConfig;
89
- db: IBeaconDb;
90
- logger: Logger;
91
- opts: Eth1Options;
92
- signal: AbortSignal;
93
- }): Promise<CachedBeaconStateAllForks> {
94
- logger.info("Listening to eth1 for genesis state");
95
-
96
- const statePreGenesis = await db.preGenesisState.get();
97
- const depositTree = await db.depositDataRoot.getDepositRootTree();
98
- const lastProcessedBlockNumber = await db.preGenesisStateLastProcessedBlock.get();
99
-
100
- const builder = new GenesisBuilder({
101
- config,
102
- eth1Provider: new Eth1Provider(config, {...opts, logger}, signal),
103
- logger,
104
- signal,
105
- pendingStatus:
106
- statePreGenesis && depositTree !== undefined && lastProcessedBlockNumber != null
107
- ? {state: statePreGenesis, depositTree, lastProcessedBlockNumber}
108
- : undefined,
109
- });
110
-
111
- try {
112
- const genesisResult = await builder.waitForGenesis();
113
-
114
- // Note: .hashTreeRoot() automatically commits()
115
- const genesisBlock = createGenesisBlock(config, genesisResult.state);
116
- const types = config.getForkTypes(GENESIS_SLOT);
117
- const stateRoot = genesisResult.state.hashTreeRoot();
118
- const blockRoot = types.BeaconBlock.hashTreeRoot(genesisBlock.message);
119
-
120
- logger.info("Initializing genesis state", {
121
- stateRoot: toRootHex(stateRoot),
122
- blockRoot: toRootHex(blockRoot),
123
- validatorCount: genesisResult.state.validators.length,
124
- });
125
-
126
- await persistGenesisResult(db, genesisResult, genesisBlock);
127
-
128
- logger.verbose("Clearing pending genesis state if any");
129
- await db.preGenesisState.delete();
130
- await db.preGenesisStateLastProcessedBlock.delete();
131
-
132
- return genesisResult.state;
133
- } catch (e) {
134
- if (builder.lastProcessedBlockNumber != null) {
135
- logger.info("Persisting genesis state", {block: builder.lastProcessedBlockNumber});
136
-
137
- // Commit changed before serializing
138
- builder.state.commit();
139
-
140
- await db.preGenesisState.put(builder.state);
141
- await db.depositDataRoot.putList(builder.depositTree.getAllReadonlyValues());
142
- await db.preGenesisStateLastProcessedBlock.put(builder.lastProcessedBlockNumber);
143
- }
144
- throw e;
145
- }
146
- }
147
-
148
52
  /**
149
53
  * Restore the latest beacon state from db
150
54
  */
@@ -23,9 +23,9 @@ import {
23
23
  altair,
24
24
  capella,
25
25
  phase0,
26
+ rewards,
26
27
  } from "@lodestar/types";
27
28
  import {Logger} from "@lodestar/utils";
28
- import {IEth1ForBlockProduction} from "../eth1/index.js";
29
29
  import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
30
30
  import {Metrics} from "../metrics/metrics.js";
31
31
  import {BufferPool} from "../util/bufferPool.js";
@@ -49,9 +49,6 @@ import {IChainOptions} from "./options.js";
49
49
  import {AssembledBlockType, BlockAttributes, BlockType, ProduceResult} from "./produceBlock/produceBlockBody.js";
50
50
  import {IStateRegenerator, RegenCaller} from "./regen/index.js";
51
51
  import {ReprocessController} from "./reprocess.js";
52
- import {AttestationsRewards} from "./rewards/attestationsRewards.js";
53
- import {BlockRewards} from "./rewards/blockRewards.js";
54
- import {SyncCommitteeRewards} from "./rewards/syncCommitteeRewards.js";
55
52
  import {
56
53
  SeenAggregators,
57
54
  SeenAttesters,
@@ -88,7 +85,6 @@ export interface IBeaconChain {
88
85
  readonly genesisTime: UintNum64;
89
86
  readonly genesisValidatorsRoot: Root;
90
87
  readonly earliestAvailableSlot: Slot;
91
- readonly eth1: IEth1ForBlockProduction;
92
88
  readonly executionEngine: IExecutionEngine;
93
89
  readonly executionBuilder?: IExecutionBuilder;
94
90
  // Expose config for convenience in modularized functions
@@ -257,15 +253,15 @@ export interface IBeaconChain {
257
253
  regenCanAcceptWork(): boolean;
258
254
  blsThreadPoolCanAcceptWork(): boolean;
259
255
 
260
- getBlockRewards(blockRef: BeaconBlock | BlindedBeaconBlock): Promise<BlockRewards>;
256
+ getBlockRewards(blockRef: BeaconBlock | BlindedBeaconBlock): Promise<rewards.BlockRewards>;
261
257
  getAttestationsRewards(
262
258
  epoch: Epoch,
263
259
  validatorIds?: (ValidatorIndex | string)[]
264
- ): Promise<{rewards: AttestationsRewards; executionOptimistic: boolean; finalized: boolean}>;
260
+ ): Promise<{rewards: rewards.AttestationsRewards; executionOptimistic: boolean; finalized: boolean}>;
265
261
  getSyncCommitteeRewards(
266
262
  blockRef: BeaconBlock | BlindedBeaconBlock,
267
263
  validatorIds?: (ValidatorIndex | string)[]
268
- ): Promise<SyncCommitteeRewards>;
264
+ ): Promise<rewards.SyncCommitteeRewards>;
269
265
  }
270
266
 
271
267
  export type SSZObjectType =
@@ -1,6 +1,6 @@
1
1
  import {Signature, aggregateSignatures} from "@chainsafe/blst";
2
2
  import {BitArray} from "@chainsafe/ssz";
3
- import {ChainForkConfig} from "@lodestar/config";
3
+ import {BeaconConfig} from "@lodestar/config";
4
4
  import {IForkChoice} from "@lodestar/fork-choice";
5
5
  import {
6
6
  ForkName,
@@ -162,7 +162,7 @@ export class AggregatedAttestationPool {
162
162
  private lowestPermissibleSlot = 0;
163
163
 
164
164
  constructor(
165
- private readonly config: ChainForkConfig,
165
+ private readonly config: BeaconConfig,
166
166
  private readonly metrics: Metrics | null = null
167
167
  ) {
168
168
  metrics?.opPool.aggregatedAttestationPool.attDataPerSlot.addCollect(() => this.onScrapeMetrics(metrics));
@@ -249,7 +249,7 @@ export class AggregatedAttestationPool {
249
249
  const stateEpoch = state.epochCtx.epoch;
250
250
  const statePrevEpoch = stateEpoch - 1;
251
251
 
252
- const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
252
+ const notSeenValidatorsFn = getNotSeenValidatorsFn(this.config, state);
253
253
  const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
254
254
 
255
255
  const attestationsByScore: AttestationWithScore[] = [];
@@ -362,7 +362,7 @@ export class AggregatedAttestationPool {
362
362
  const statePrevEpoch = stateEpoch - 1;
363
363
  const rootCache = new RootCache(state);
364
364
 
365
- const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
365
+ const notSeenValidatorsFn = getNotSeenValidatorsFn(this.config, state);
366
366
  const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
367
367
 
368
368
  const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
@@ -656,7 +656,7 @@ export class MatchingDataAttestationGroup {
656
656
  private readonly attestations: AttestationWithIndex[] = [];
657
657
 
658
658
  constructor(
659
- private readonly config: ChainForkConfig,
659
+ private readonly config: BeaconConfig,
660
660
  readonly committee: Uint32Array,
661
661
  readonly data: phase0.AttestationData
662
662
  ) {}
@@ -864,9 +864,9 @@ export function aggregateConsolidation({byCommittee, attData}: AttestationsConso
864
864
  * Pre-compute participation from a CachedBeaconStateAllForks, for use to check if an attestation's committee
865
865
  * has already attested or not.
866
866
  */
867
- export function getNotSeenValidatorsFn(state: CachedBeaconStateAllForks): GetNotSeenValidatorsFn {
867
+ export function getNotSeenValidatorsFn(config: BeaconConfig, state: CachedBeaconStateAllForks): GetNotSeenValidatorsFn {
868
868
  const stateSlot = state.slot;
869
- if (state.config.getForkName(stateSlot) === ForkName.phase0) {
869
+ if (config.getForkName(stateSlot) === ForkName.phase0) {
870
870
  // Get attestations to be included in a phase0 block.
871
871
  // As we are close to altair, this is not really important, it's mainly for e2e.
872
872
  // The performance is not great due to the different BeaconState data structure to altair.
@@ -1,3 +1,4 @@
1
+ import {BeaconConfig} from "@lodestar/config";
1
2
  import {Id, Repository} from "@lodestar/db";
2
3
  import {
3
4
  BLS_WITHDRAWAL_PREFIX,
@@ -51,6 +52,8 @@ export class OpPool {
51
52
  /** Map of validator index -> SignedBLSToExecutionChange */
52
53
  private readonly blsToExecutionChanges = new Map<ValidatorIndex, SignedBLSToExecutionChangeVersioned>();
53
54
 
55
+ constructor(private readonly config: BeaconConfig) {}
56
+
54
57
  // Getters for metrics
55
58
 
56
59
  get attesterSlashingsSize(): number {
@@ -191,9 +194,8 @@ export class OpPool {
191
194
  phase0.SignedVoluntaryExit[],
192
195
  capella.SignedBLSToExecutionChange[],
193
196
  ] {
194
- const {config} = state;
195
197
  const stateEpoch = computeEpochAtSlot(state.slot);
196
- const stateFork = config.getForkSeq(state.slot);
198
+ const stateFork = this.config.getForkSeq(state.slot);
197
199
  const toBeSlashedIndices = new Set<ValidatorIndex>();
198
200
  const proposerSlashings: phase0.ProposerSlashing[] = [];
199
201
 
@@ -265,7 +267,7 @@ export class OpPool {
265
267
  // a future fork.
266
268
  isVoluntaryExitSignatureIncludable(
267
269
  stateFork,
268
- config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch))
270
+ this.config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch))
269
271
  )
270
272
  ) {
271
273
  voluntaryExits.push(voluntaryExit);
@@ -368,14 +370,13 @@ export class OpPool {
368
370
  * Prune if validator has already exited at or before the finalized checkpoint of the head.
369
371
  */
370
372
  private pruneVoluntaryExits(headState: CachedBeaconStateAllForks): void {
371
- const {config} = headState;
372
- const headStateFork = config.getForkSeq(headState.slot);
373
+ const headStateFork = this.config.getForkSeq(headState.slot);
373
374
  const finalizedEpoch = headState.finalizedCheckpoint.epoch;
374
375
 
375
376
  for (const [key, voluntaryExit] of this.voluntaryExits.entries()) {
376
377
  // VoluntaryExit messages signed in the previous fork become invalid and can never be included in any future
377
378
  // block, so just drop as the head state advances into the next fork.
378
- if (config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch)) < headStateFork) {
379
+ if (this.config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch)) < headStateFork) {
379
380
  this.voluntaryExits.delete(key);
380
381
  }
381
382
 
@@ -392,9 +393,8 @@ export class OpPool {
392
393
  * to opPool once gossipsub seen cache TTL passes.
393
394
  */
394
395
  private pruneBlsToExecutionChanges(headBlock: SignedBeaconBlock, headState: CachedBeaconStateAllForks): void {
395
- const {config} = headState;
396
396
  const recentBlsToExecutionChanges =
397
- config.getForkSeq(headBlock.message.slot) >= ForkSeq.capella
397
+ this.config.getForkSeq(headBlock.message.slot) >= ForkSeq.capella
398
398
  ? (headBlock as capella.SignedBeaconBlock).message.body.blsToExecutionChanges
399
399
  : [];
400
400
 
@@ -1,9 +1,8 @@
1
1
  import {routes} from "@lodestar/api";
2
2
  import {ChainForkConfig} from "@lodestar/config";
3
3
  import {getSafeExecutionBlockHash} from "@lodestar/fork-choice";
4
- import {ForkPostBellatrix, ForkSeq, SLOTS_PER_EPOCH, isForkPostElectra} from "@lodestar/params";
4
+ import {ForkPostBellatrix, ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
5
5
  import {
6
- BeaconStateElectra,
7
6
  CachedBeaconStateAllForks,
8
7
  CachedBeaconStateExecutions,
9
8
  StateHashTreeRootSource,
@@ -222,9 +221,6 @@ export class PrepareNextSlotScheduler {
222
221
  }
223
222
  this.metrics?.precomputeNextEpochTransition.hits.set(previousHits ?? 0);
224
223
 
225
- // Check if we can stop polling eth1 data
226
- this.stopEth1Polling();
227
-
228
224
  this.logger.verbose("Completed PrepareNextSlotScheduler epoch transition", {
229
225
  nextEpoch,
230
226
  headSlot,
@@ -252,27 +248,4 @@ export class PrepareNextSlotScheduler {
252
248
  state.hashTreeRoot();
253
249
  hashTreeRootTimer?.();
254
250
  }
255
-
256
- /**
257
- * Stop eth1 data polling after eth1_deposit_index has reached deposit_requests_start_index in Electra as described in EIP-6110
258
- */
259
- stopEth1Polling(): void {
260
- // Only continue if eth1 is still polling and finalized checkpoint is in Electra. State regen is expensive
261
- if (this.chain.eth1.isPollingEth1Data()) {
262
- const finalizedCheckpoint = this.chain.forkChoice.getFinalizedCheckpoint();
263
- const checkpointFork = this.config.getForkInfoAtEpoch(finalizedCheckpoint.epoch).name;
264
-
265
- if (isForkPostElectra(checkpointFork)) {
266
- const finalizedState = this.chain.getStateByCheckpoint(finalizedCheckpoint)?.state;
267
-
268
- if (
269
- finalizedState !== undefined &&
270
- finalizedState.eth1DepositIndex === Number((finalizedState as BeaconStateElectra).depositRequestsStartIndex)
271
- ) {
272
- // Signal eth1 to stop polling eth1Data
273
- this.chain.eth1.stopPollingEth1Data();
274
- }
275
- }
276
- }
277
- }
278
251
  }
@@ -45,7 +45,7 @@ import {
45
45
  } from "@lodestar/types";
46
46
  import {Logger, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
47
47
  import {ZERO_HASH_HEX} from "../../constants/index.js";
48
- import {numToQuantity} from "../../eth1/provider/utils.js";
48
+ import {numToQuantity} from "../../execution/engine/utils.js";
49
49
  import {
50
50
  IExecutionBuilder,
51
51
  IExecutionEngine,
@@ -78,7 +78,6 @@ export enum BlockProductionStep {
78
78
  voluntaryExits = "voluntaryExits",
79
79
  blsToExecutionChanges = "blsToExecutionChanges",
80
80
  attestations = "attestations",
81
- eth1DataAndDeposits = "eth1DataAndDeposits",
82
81
  syncAggregate = "syncAggregate",
83
82
  executionPayload = "executionPayload",
84
83
  }
@@ -166,7 +165,7 @@ export async function produceBlockBody<T extends BlockType>(
166
165
  // even though shouldOverrideBuilder is relevant for the engine response, for simplicity of typing
167
166
  // we just return it undefined for the builder which anyway doesn't get consumed downstream
168
167
  let shouldOverrideBuilder: boolean | undefined;
169
- const fork = currentState.config.getForkName(blockSlot);
168
+ const fork = this.config.getForkName(blockSlot);
170
169
  const produceResult = {
171
170
  type: blockType,
172
171
  fork,
@@ -624,7 +623,7 @@ function preparePayloadAttributes(
624
623
  (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals = getExpectedWithdrawals(
625
624
  ForkSeq[fork],
626
625
  prepareState as CachedBeaconStateCapella
627
- ).withdrawals;
626
+ ).expectedWithdrawals;
628
627
  }
629
628
 
630
629
  if (ForkSeq[fork] >= ForkSeq.deneb) {
@@ -645,7 +644,7 @@ export async function produceCommonBlockBody<T extends BlockType>(
645
644
  ? this.metrics?.executionBlockProductionTimeSteps
646
645
  : this.metrics?.builderBlockProductionTimeSteps;
647
646
 
648
- const fork = currentState.config.getForkName(slot);
647
+ const fork = this.config.getForkName(slot);
649
648
 
650
649
  // TODO:
651
650
  // Iterate through the naive aggregation pool and ensure all the attestations from there
@@ -667,20 +666,17 @@ export async function produceCommonBlockBody<T extends BlockType>(
667
666
  step: BlockProductionStep.attestations,
668
667
  });
669
668
 
670
- const endEth1DataAndDeposits = stepsMetrics?.startTimer();
671
- const {eth1Data, deposits} = await this.eth1.getEth1DataAndDeposits(currentState);
672
- endEth1DataAndDeposits?.({
673
- step: BlockProductionStep.eth1DataAndDeposits,
674
- });
675
-
676
669
  const blockBody: Omit<CommonBlockBody, "blsToExecutionChanges" | "syncAggregate"> = {
677
670
  randaoReveal,
678
671
  graffiti,
679
- eth1Data,
672
+ // Eth1 data voting is no longer required since electra
673
+ eth1Data: currentState.eth1Data,
680
674
  proposerSlashings,
681
675
  attesterSlashings,
682
676
  attestations,
683
- deposits,
677
+ // Since electra, deposits are processed by the execution layer,
678
+ // we no longer support handling deposits from earlier forks.
679
+ deposits: [],
684
680
  voluntaryExits,
685
681
  };
686
682
 
@@ -1,4 +1,5 @@
1
1
  import {routes} from "@lodestar/api";
2
+ import {BeaconConfig} from "@lodestar/config";
2
3
  import {
3
4
  CachedBeaconStateAllForks,
4
5
  computeStartSlotAtEpoch,
@@ -24,6 +25,7 @@ export type PersistentCheckpointStateCacheOpts = {
24
25
  };
25
26
 
26
27
  type PersistentCheckpointStateCacheModules = {
28
+ config: BeaconConfig;
27
29
  metrics?: Metrics | null;
28
30
  logger: Logger;
29
31
  clock?: IClock | null;
@@ -107,6 +109,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
107
109
  private readonly cache: MapTracker<CacheKey, CacheItem>;
108
110
  /** Epoch -> Set<blockRoot> */
109
111
  private readonly epochIndex = new MapDef<Epoch, Set<RootHex>>(() => new Set<string>());
112
+ private readonly config: BeaconConfig;
110
113
  private readonly metrics: Metrics | null | undefined;
111
114
  private readonly logger: Logger;
112
115
  private readonly clock: IClock | null | undefined;
@@ -120,10 +123,20 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
120
123
  private readonly bufferPool?: BufferPool | null;
121
124
 
122
125
  constructor(
123
- {metrics, logger, clock, signal, datastore, blockStateCache, bufferPool}: PersistentCheckpointStateCacheModules,
126
+ {
127
+ config,
128
+ metrics,
129
+ logger,
130
+ clock,
131
+ signal,
132
+ datastore,
133
+ blockStateCache,
134
+ bufferPool,
135
+ }: PersistentCheckpointStateCacheModules,
124
136
  opts: PersistentCheckpointStateCacheOpts
125
137
  ) {
126
138
  this.cache = new MapTracker(metrics?.cpStateCache);
139
+ this.config = config;
127
140
  if (metrics) {
128
141
  this.metrics = metrics;
129
142
  metrics.cpStateCache.size.addCollect(() => {
@@ -484,7 +497,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
484
497
  }
485
498
 
486
499
  const blockSlot = state.slot;
487
- const processCPStatesTimeMs = state.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
500
+ const processCPStatesTimeMs = this.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
488
501
  // we always have clock in production, fallback value is only for test
489
502
  const msFromSlot = this.clock?.msFromSlot(blockSlot) ?? processCPStatesTimeMs;
490
503
  const msToProcessCPStates = processCPStatesTimeMs - msFromSlot;
@@ -245,6 +245,18 @@ async function validateAggregateAndProof(
245
245
  });
246
246
  }
247
247
 
248
+ // Same race-condition check as above for seen aggregators
249
+ if (
250
+ !skipValidationKnownAttesters &&
251
+ chain.seenAggregatedAttestations.isKnown(targetEpoch, attIndex, attDataRootHex, aggregationBits)
252
+ ) {
253
+ throw new AttestationError(GossipAction.IGNORE, {
254
+ code: AttestationErrorCode.ATTESTERS_ALREADY_KNOWN,
255
+ targetEpoch,
256
+ aggregateRoot: attDataRootHex,
257
+ });
258
+ }
259
+
248
260
  chain.seenAggregators.add(targetEpoch, aggregatorIndex);
249
261
  chain.seenAggregatedAttestations.add(
250
262
  targetEpoch,
@@ -51,7 +51,12 @@ export async function validateAttesterSlashing(
51
51
  });
52
52
  }
53
53
 
54
- const signatureSets = getAttesterSlashingSignatureSets(chain.index2pubkey, state, attesterSlashing);
54
+ const signatureSets = getAttesterSlashingSignatureSets(
55
+ chain.config,
56
+ chain.index2pubkey,
57
+ state.slot,
58
+ attesterSlashing
59
+ );
55
60
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
56
61
  throw new AttesterSlashingError(GossipAction.REJECT, {
57
62
  code: AttesterSlashingErrorCode.INVALID,
@@ -138,8 +138,9 @@ export async function validateGossipBlobSidecar(
138
138
  const signature = blobSidecar.signedBlockHeader.signature;
139
139
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blobSlot, blockHex, signature)) {
140
140
  const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
141
+ chain.config,
141
142
  chain.index2pubkey,
142
- blockState,
143
+ blockState.slot,
143
144
  blobSidecar.signedBlockHeader
144
145
  );
145
146
  // Don't batch so verification is not delayed
@@ -243,10 +244,9 @@ export async function validateBlockBlobSidecars(
243
244
  const blockRootHex = toRootHex(blockRoot);
244
245
  const signature = firstSidecarSignedBlockHeader.signature;
245
246
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRootHex, signature)) {
246
- const headState = await chain.getHeadState();
247
247
  const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
248
+ chain.config,
248
249
  chain.index2pubkey,
249
- headState,
250
250
  firstSidecarSignedBlockHeader
251
251
  );
252
252
 
@@ -6,6 +6,7 @@ import {
6
6
  computeTimeAtSlot,
7
7
  getBlockProposerSignatureSet,
8
8
  isExecutionBlockBodyType,
9
+ isExecutionEnabled,
9
10
  isExecutionStateType,
10
11
  } from "@lodestar/state-transition";
11
12
  import {SignedBeaconBlock, deneb} from "@lodestar/types";
@@ -139,7 +140,7 @@ export async function validateGossipBlock(
139
140
  if (fork === ForkName.bellatrix) {
140
141
  if (!isExecutionBlockBodyType(block.body)) throw Error("Not merge block type");
141
142
  const executionPayload = block.body.executionPayload;
142
- if (isExecutionStateType(blockState)) {
143
+ if (isExecutionStateType(blockState) && isExecutionEnabled(blockState, block)) {
143
144
  const expectedTimestamp = computeTimeAtSlot(config, blockSlot, chain.genesisTime);
144
145
  if (executionPayload.timestamp !== computeTimeAtSlot(config, blockSlot, chain.genesisTime)) {
145
146
  throw new BlockGossipError(GossipAction.REJECT, {
@@ -153,7 +154,7 @@ export async function validateGossipBlock(
153
154
 
154
155
  // [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
155
156
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
156
- const signatureSet = getBlockProposerSignatureSet(chain.index2pubkey, blockState, signedBlock);
157
+ const signatureSet = getBlockProposerSignatureSet(chain.config, chain.index2pubkey, signedBlock);
157
158
  // Don't batch so verification is not delayed
158
159
  if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
159
160
  throw new BlockGossipError(GossipAction.REJECT, {
@@ -1,8 +1,4 @@
1
- import {
2
- CachedBeaconStateCapella,
3
- getBlsToExecutionChangeSignatureSet,
4
- isValidBlsToExecutionChange,
5
- } from "@lodestar/state-transition";
1
+ import {getBlsToExecutionChangeSignatureSet, isValidBlsToExecutionChange} from "@lodestar/state-transition";
6
2
  import {capella} from "@lodestar/types";
7
3
  import {BlsToExecutionChangeError, BlsToExecutionChangeErrorCode, GossipAction} from "../errors/index.js";
8
4
  import {IBeaconChain} from "../index.js";
@@ -41,11 +37,17 @@ async function validateBlsToExecutionChange(
41
37
  // NOTE: No need to advance head state since the signature's fork is handled with `broadcastedOnFork`,
42
38
  // and chanes relevant to `isValidBlsToExecutionChange()` happen only on processBlock(), not processEpoch()
43
39
  const state = chain.getHeadState();
44
- const {config} = state;
45
-
40
+ const {config} = chain;
41
+ const addressChange = blsToExecutionChange.message;
42
+ if (addressChange.validatorIndex >= state.validators.length) {
43
+ throw new BlsToExecutionChangeError(GossipAction.REJECT, {
44
+ code: BlsToExecutionChangeErrorCode.INVALID,
45
+ });
46
+ }
47
+ const validator = state.validators.getReadonly(addressChange.validatorIndex);
46
48
  // [REJECT] All of the conditions within process_bls_to_execution_change pass validation.
47
49
  // verifySignature = false, verified in batch below
48
- const {valid} = isValidBlsToExecutionChange(state as CachedBeaconStateCapella, blsToExecutionChange, false);
50
+ const {valid} = isValidBlsToExecutionChange(config, validator, blsToExecutionChange, false);
49
51
  if (!valid) {
50
52
  throw new BlsToExecutionChangeError(GossipAction.REJECT, {
51
53
  code: BlsToExecutionChangeErrorCode.INVALID,
@@ -135,8 +135,9 @@ export async function validateGossipDataColumnSidecar(
135
135
  const signature = dataColumnSidecar.signedBlockHeader.signature;
136
136
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockHeader.slot, blockRootHex, signature)) {
137
137
  const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
138
+ chain.config,
138
139
  chain.index2pubkey,
139
- blockState,
140
+ blockState.slot,
140
141
  dataColumnSidecar.signedBlockHeader
141
142
  );
142
143
 
@@ -336,10 +337,9 @@ export async function validateBlockDataColumnSidecars(
336
337
  const slot = firstSidecarSignedBlockHeader.message.slot;
337
338
  const signature = firstSidecarSignedBlockHeader.signature;
338
339
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(slot, rootHex, signature)) {
339
- const headState = await chain.getHeadState();
340
340
  const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
341
+ chain.config,
341
342
  chain.index2pubkey,
342
- headState,
343
343
  firstSidecarSignedBlockHeader
344
344
  );
345
345
 
@@ -44,7 +44,12 @@ async function validateProposerSlashing(
44
44
  });
45
45
  }
46
46
 
47
- const signatureSets = getProposerSlashingSignatureSets(chain.index2pubkey, state, proposerSlashing);
47
+ const signatureSets = getProposerSlashingSignatureSets(
48
+ chain.config,
49
+ chain.index2pubkey,
50
+ state.slot,
51
+ proposerSlashing
52
+ );
48
53
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
49
54
  throw new ProposerSlashingError(GossipAction.REJECT, {
50
55
  code: ProposerSlashingErrorCode.INVALID,
@@ -14,7 +14,7 @@ export function getAggregateAndProofSigningRoot(
14
14
  epoch: Epoch,
15
15
  aggregateAndProof: SignedAggregateAndProof
16
16
  ): Uint8Array {
17
- // previously, we call `const aggregatorDomain = state.config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
17
+ // previously, we call `const aggregatorDomain = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
18
18
  // at fork boundary, it's required to dial to target epoch https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L573
19
19
  // instead of that, just use the fork of slot in the attestation data
20
20
  const slot = computeStartSlotAtEpoch(epoch);
@@ -1,3 +1,4 @@
1
+ import {BeaconConfig} from "@lodestar/config";
1
2
  import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
2
3
  import {
3
4
  CachedBeaconStateAllForks,
@@ -9,11 +10,12 @@ import {
9
10
  import {altair, ssz} from "@lodestar/types";
10
11
 
11
12
  export function getContributionAndProofSignatureSet(
13
+ config: BeaconConfig,
12
14
  index2pubkey: Index2PubkeyCache,
13
15
  state: CachedBeaconStateAllForks,
14
16
  signedContributionAndProof: altair.SignedContributionAndProof
15
17
  ): ISignatureSet {
16
- const domain = state.config.getDomain(
18
+ const domain = config.getDomain(
17
19
  state.slot,
18
20
  DOMAIN_CONTRIBUTION_AND_PROOF,
19
21
  signedContributionAndProof.message.contribution.slot
@@ -1,3 +1,4 @@
1
+ import {BeaconConfig} from "@lodestar/config";
1
2
  import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
2
3
  import {
3
4
  CachedBeaconStateAllForks,
@@ -9,11 +10,12 @@ import {
9
10
  import {altair, ssz} from "@lodestar/types";
10
11
 
11
12
  export function getSyncCommitteeSignatureSet(
13
+ config: BeaconConfig,
12
14
  index2pubkey: Index2PubkeyCache,
13
15
  state: CachedBeaconStateAllForks,
14
16
  syncCommittee: altair.SyncCommitteeMessage
15
17
  ): ISignatureSet {
16
- const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
18
+ const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
17
19
 
18
20
  return {
19
21
  type: SignatureSetType.single,