@lodestar/beacon-node 1.38.0 → 1.39.0-dev.075956b855

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 (393) hide show
  1. package/lib/api/impl/beacon/blocks/utils.js +1 -1
  2. package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
  3. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  4. package/lib/api/impl/beacon/state/index.js +4 -5
  5. package/lib/api/impl/beacon/state/index.js.map +1 -1
  6. package/lib/api/impl/validator/index.js +1 -1
  7. package/lib/api/impl/validator/index.js.map +1 -1
  8. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  9. package/lib/chain/blocks/verifyBlock.js +1 -21
  10. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  11. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -6
  12. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  13. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +9 -128
  14. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  15. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +3 -2
  16. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  17. package/lib/chain/blocks/verifyBlocksSignatures.js +3 -2
  18. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  19. package/lib/chain/chain.d.ts +4 -5
  20. package/lib/chain/chain.d.ts.map +1 -1
  21. package/lib/chain/chain.js +25 -56
  22. package/lib/chain/chain.js.map +1 -1
  23. package/lib/chain/initState.d.ts +1 -14
  24. package/lib/chain/initState.d.ts.map +1 -1
  25. package/lib/chain/initState.js +1 -62
  26. package/lib/chain/initState.js.map +1 -1
  27. package/lib/chain/interface.d.ts +0 -2
  28. package/lib/chain/interface.d.ts.map +1 -1
  29. package/lib/chain/interface.js.map +1 -1
  30. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
  31. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  32. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
  33. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  34. package/lib/chain/opPools/opPool.d.ts +3 -0
  35. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  36. package/lib/chain/opPools/opPool.js +9 -8
  37. package/lib/chain/opPools/opPool.js.map +1 -1
  38. package/lib/chain/options.d.ts +0 -4
  39. package/lib/chain/options.d.ts.map +1 -1
  40. package/lib/chain/options.js +0 -2
  41. package/lib/chain/options.js.map +1 -1
  42. package/lib/chain/prepareNextSlot.d.ts +0 -4
  43. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  44. package/lib/chain/prepareNextSlot.js +2 -22
  45. package/lib/chain/prepareNextSlot.js.map +1 -1
  46. package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -22
  47. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  48. package/lib/chain/produceBlock/produceBlockBody.js +32 -98
  49. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  50. package/lib/chain/rewards/attestationsRewards.d.ts +3 -2
  51. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
  52. package/lib/chain/rewards/attestationsRewards.js +9 -9
  53. package/lib/chain/rewards/attestationsRewards.js.map +1 -1
  54. package/lib/chain/rewards/blockRewards.d.ts +2 -1
  55. package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
  56. package/lib/chain/rewards/blockRewards.js +5 -5
  57. package/lib/chain/rewards/blockRewards.js.map +1 -1
  58. package/lib/chain/rewards/syncCommitteeRewards.d.ts +3 -2
  59. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
  60. package/lib/chain/rewards/syncCommitteeRewards.js +2 -3
  61. package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
  62. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
  63. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  64. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
  65. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  66. package/lib/chain/validation/aggregateAndProof.js +9 -0
  67. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  68. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  69. package/lib/chain/validation/attesterSlashing.js +2 -2
  70. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  71. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  72. package/lib/chain/validation/blobSidecar.js +2 -2
  73. package/lib/chain/validation/blobSidecar.js.map +1 -1
  74. package/lib/chain/validation/block.js +1 -1
  75. package/lib/chain/validation/block.js.map +1 -1
  76. package/lib/chain/validation/blsToExecutionChange.js +1 -1
  77. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  78. package/lib/chain/validation/dataColumnSidecar.js +2 -2
  79. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  80. package/lib/chain/validation/proposerSlashing.js +1 -1
  81. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  82. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  83. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  84. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +3 -2
  85. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  86. package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -4
  87. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  88. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +3 -2
  89. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  90. package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
  91. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  92. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
  93. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  94. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  95. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  96. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +3 -2
  97. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  98. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -3
  99. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  100. package/lib/chain/validation/syncCommittee.js +1 -1
  101. package/lib/chain/validation/syncCommittee.js.map +1 -1
  102. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  103. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -4
  104. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  105. package/lib/chain/validation/voluntaryExit.js +1 -1
  106. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  107. package/lib/db/beacon.d.ts +3 -7
  108. package/lib/db/beacon.d.ts.map +1 -1
  109. package/lib/db/beacon.js +33 -12
  110. package/lib/db/beacon.js.map +1 -1
  111. package/lib/db/buckets.d.ts +12 -6
  112. package/lib/db/buckets.d.ts.map +1 -1
  113. package/lib/db/buckets.js +6 -1
  114. package/lib/db/buckets.js.map +1 -1
  115. package/lib/db/interface.d.ts +2 -7
  116. package/lib/db/interface.d.ts.map +1 -1
  117. package/lib/db/repositories/index.d.ts +0 -3
  118. package/lib/db/repositories/index.d.ts.map +1 -1
  119. package/lib/db/repositories/index.js +0 -3
  120. package/lib/db/repositories/index.js.map +1 -1
  121. package/lib/execution/engine/http.d.ts +5 -13
  122. package/lib/execution/engine/http.d.ts.map +1 -1
  123. package/lib/execution/engine/http.js +6 -15
  124. package/lib/execution/engine/http.js.map +1 -1
  125. package/lib/execution/engine/index.d.ts.map +1 -1
  126. package/lib/execution/engine/index.js +1 -1
  127. package/lib/execution/engine/index.js.map +1 -1
  128. package/lib/execution/engine/interface.d.ts +1 -1
  129. package/lib/execution/engine/interface.d.ts.map +1 -1
  130. package/lib/execution/engine/interface.js.map +1 -1
  131. package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
  132. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
  133. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
  134. package/lib/execution/engine/jwt.d.ts.map +1 -0
  135. package/lib/execution/engine/jwt.js.map +1 -0
  136. package/lib/execution/engine/mock.d.ts +2 -6
  137. package/lib/execution/engine/mock.d.ts.map +1 -1
  138. package/lib/execution/engine/mock.js +4 -15
  139. package/lib/execution/engine/mock.js.map +1 -1
  140. package/lib/execution/engine/payloadIdCache.d.ts +1 -1
  141. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  142. package/lib/execution/engine/types.d.ts +1 -1
  143. package/lib/execution/engine/types.d.ts.map +1 -1
  144. package/lib/execution/engine/types.js +1 -1
  145. package/lib/execution/engine/types.js.map +1 -1
  146. package/lib/execution/engine/utils.d.ts +64 -2
  147. package/lib/execution/engine/utils.d.ts.map +1 -1
  148. package/lib/execution/engine/utils.js +91 -2
  149. package/lib/execution/engine/utils.js.map +1 -1
  150. package/lib/index.d.ts +1 -2
  151. package/lib/index.d.ts.map +1 -1
  152. package/lib/index.js +1 -2
  153. package/lib/index.js.map +1 -1
  154. package/lib/metrics/metrics/lodestar.d.ts +0 -49
  155. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  156. package/lib/metrics/metrics/lodestar.js +0 -134
  157. package/lib/metrics/metrics/lodestar.js.map +1 -1
  158. package/lib/network/core/events.d.ts +1 -1
  159. package/lib/network/core/events.d.ts.map +1 -1
  160. package/lib/network/core/events.js +1 -1
  161. package/lib/network/core/events.js.map +1 -1
  162. package/lib/network/events.d.ts +6 -1
  163. package/lib/network/events.d.ts.map +1 -1
  164. package/lib/network/events.js +7 -1
  165. package/lib/network/events.js.map +1 -1
  166. package/lib/node/nodejs.d.ts +6 -3
  167. package/lib/node/nodejs.d.ts.map +1 -1
  168. package/lib/node/nodejs.js +13 -10
  169. package/lib/node/nodejs.js.map +1 -1
  170. package/lib/node/notifier.d.ts.map +1 -1
  171. package/lib/node/notifier.js +0 -13
  172. package/lib/node/notifier.js.map +1 -1
  173. package/lib/node/options.d.ts +0 -2
  174. package/lib/node/options.d.ts.map +1 -1
  175. package/lib/node/options.js +0 -2
  176. package/lib/node/options.js.map +1 -1
  177. package/lib/node/utils/interop/deposits.d.ts +2 -1
  178. package/lib/node/utils/interop/deposits.d.ts.map +1 -1
  179. package/lib/node/utils/interop/deposits.js.map +1 -1
  180. package/lib/node/utils/interop/state.d.ts +1 -1
  181. package/lib/node/utils/interop/state.d.ts.map +1 -1
  182. package/lib/node/utils/state.d.ts +1 -7
  183. package/lib/node/utils/state.d.ts.map +1 -1
  184. package/lib/node/utils/state.js +1 -14
  185. package/lib/node/utils/state.js.map +1 -1
  186. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  187. package/lib/sync/backfill/backfill.js +2 -2
  188. package/lib/sync/backfill/backfill.js.map +1 -1
  189. package/lib/sync/backfill/verify.d.ts +2 -2
  190. package/lib/sync/backfill/verify.d.ts.map +1 -1
  191. package/lib/sync/backfill/verify.js +3 -3
  192. package/lib/sync/backfill/verify.js.map +1 -1
  193. package/lib/util/workerEvents.d.ts +1 -6
  194. package/lib/util/workerEvents.d.ts.map +1 -1
  195. package/lib/util/workerEvents.js +8 -8
  196. package/lib/util/workerEvents.js.map +1 -1
  197. package/package.json +14 -21
  198. package/src/api/impl/beacon/blocks/utils.ts +1 -1
  199. package/src/api/impl/beacon/state/index.ts +4 -5
  200. package/src/api/impl/validator/index.ts +1 -1
  201. package/src/chain/blocks/verifyBlock.ts +3 -24
  202. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -161
  203. package/src/chain/blocks/verifyBlocksSignatures.ts +15 -4
  204. package/src/chain/chain.ts +28 -63
  205. package/src/chain/initState.ts +1 -97
  206. package/src/chain/interface.ts +0 -2
  207. package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
  208. package/src/chain/opPools/opPool.ts +8 -8
  209. package/src/chain/options.ts +0 -6
  210. package/src/chain/prepareNextSlot.ts +2 -29
  211. package/src/chain/produceBlock/produceBlockBody.ts +33 -132
  212. package/src/chain/rewards/attestationsRewards.ts +18 -8
  213. package/src/chain/rewards/blockRewards.ts +6 -3
  214. package/src/chain/rewards/syncCommitteeRewards.ts +5 -3
  215. package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
  216. package/src/chain/validation/aggregateAndProof.ts +12 -0
  217. package/src/chain/validation/attesterSlashing.ts +7 -2
  218. package/src/chain/validation/blobSidecar.ts +10 -2
  219. package/src/chain/validation/block.ts +1 -1
  220. package/src/chain/validation/blsToExecutionChange.ts +1 -1
  221. package/src/chain/validation/dataColumnSidecar.ts +6 -1
  222. package/src/chain/validation/proposerSlashing.ts +6 -1
  223. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  224. package/src/chain/validation/signatureSets/contributionAndProof.ts +6 -3
  225. package/src/chain/validation/signatureSets/syncCommittee.ts +6 -2
  226. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
  227. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +5 -2
  228. package/src/chain/validation/syncCommittee.ts +1 -1
  229. package/src/chain/validation/syncCommitteeContributionAndProof.ts +10 -6
  230. package/src/chain/validation/voluntaryExit.ts +1 -1
  231. package/src/db/beacon.ts +38 -16
  232. package/src/db/buckets.ts +12 -7
  233. package/src/db/interface.ts +2 -13
  234. package/src/db/repositories/index.ts +0 -3
  235. package/src/execution/engine/http.ts +12 -21
  236. package/src/execution/engine/index.ts +1 -1
  237. package/src/execution/engine/interface.ts +1 -1
  238. package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
  239. package/src/execution/engine/mock.ts +4 -17
  240. package/src/execution/engine/payloadIdCache.ts +1 -1
  241. package/src/execution/engine/types.ts +9 -9
  242. package/src/execution/engine/utils.ts +111 -5
  243. package/src/index.ts +1 -2
  244. package/src/metrics/metrics/lodestar.ts +0 -144
  245. package/src/network/core/events.ts +1 -1
  246. package/src/network/events.ts +7 -1
  247. package/src/node/nodejs.ts +20 -11
  248. package/src/node/notifier.ts +0 -16
  249. package/src/node/options.ts +0 -3
  250. package/src/node/utils/interop/deposits.ts +3 -1
  251. package/src/node/utils/interop/state.ts +1 -1
  252. package/src/node/utils/state.ts +3 -18
  253. package/src/sync/backfill/backfill.ts +14 -2
  254. package/src/sync/backfill/verify.ts +9 -2
  255. package/src/util/workerEvents.ts +9 -8
  256. package/lib/chain/genesis/genesis.d.ts +0 -51
  257. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  258. package/lib/chain/genesis/genesis.js +0 -123
  259. package/lib/chain/genesis/genesis.js.map +0 -1
  260. package/lib/chain/genesis/interface.d.ts +0 -13
  261. package/lib/chain/genesis/interface.d.ts.map +0 -1
  262. package/lib/chain/genesis/interface.js +0 -2
  263. package/lib/chain/genesis/interface.js.map +0 -1
  264. package/lib/db/repositories/depositDataRoot.d.ts +0 -22
  265. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  266. package/lib/db/repositories/depositDataRoot.js +0 -62
  267. package/lib/db/repositories/depositDataRoot.js.map +0 -1
  268. package/lib/db/repositories/depositEvent.d.ts +0 -13
  269. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  270. package/lib/db/repositories/depositEvent.js +0 -27
  271. package/lib/db/repositories/depositEvent.js.map +0 -1
  272. package/lib/db/repositories/eth1Data.d.ts +0 -13
  273. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  274. package/lib/db/repositories/eth1Data.js +0 -26
  275. package/lib/db/repositories/eth1Data.js.map +0 -1
  276. package/lib/db/single/index.d.ts +0 -3
  277. package/lib/db/single/index.d.ts.map +0 -1
  278. package/lib/db/single/index.js +0 -3
  279. package/lib/db/single/index.js.map +0 -1
  280. package/lib/db/single/preGenesisState.d.ts +0 -16
  281. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  282. package/lib/db/single/preGenesisState.js +0 -29
  283. package/lib/db/single/preGenesisState.js.map +0 -1
  284. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
  285. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  286. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
  287. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
  288. package/lib/eth1/errors.d.ts +0 -66
  289. package/lib/eth1/errors.d.ts.map +0 -1
  290. package/lib/eth1/errors.js +0 -27
  291. package/lib/eth1/errors.js.map +0 -1
  292. package/lib/eth1/eth1DataCache.d.ts +0 -19
  293. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  294. package/lib/eth1/eth1DataCache.js +0 -19
  295. package/lib/eth1/eth1DataCache.js.map +0 -1
  296. package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
  297. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  298. package/lib/eth1/eth1DepositDataTracker.js +0 -317
  299. package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
  300. package/lib/eth1/eth1DepositsCache.d.ts +0 -42
  301. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  302. package/lib/eth1/eth1DepositsCache.js +0 -119
  303. package/lib/eth1/eth1DepositsCache.js.map +0 -1
  304. package/lib/eth1/eth1MergeBlockTracker.d.ts +0 -65
  305. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  306. package/lib/eth1/eth1MergeBlockTracker.js +0 -262
  307. package/lib/eth1/eth1MergeBlockTracker.js.map +0 -1
  308. package/lib/eth1/index.d.ts +0 -46
  309. package/lib/eth1/index.d.ts.map +0 -1
  310. package/lib/eth1/index.js +0 -121
  311. package/lib/eth1/index.js.map +0 -1
  312. package/lib/eth1/interface.d.ts +0 -112
  313. package/lib/eth1/interface.d.ts.map +0 -1
  314. package/lib/eth1/interface.js +0 -8
  315. package/lib/eth1/interface.js.map +0 -1
  316. package/lib/eth1/options.d.ts +0 -22
  317. package/lib/eth1/options.d.ts.map +0 -1
  318. package/lib/eth1/options.js +0 -8
  319. package/lib/eth1/options.js.map +0 -1
  320. package/lib/eth1/provider/eth1Provider.d.ts +0 -39
  321. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  322. package/lib/eth1/provider/eth1Provider.js +0 -147
  323. package/lib/eth1/provider/eth1Provider.js.map +0 -1
  324. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  325. package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
  326. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  327. package/lib/eth1/provider/jwt.js.map +0 -1
  328. package/lib/eth1/provider/utils.d.ts +0 -65
  329. package/lib/eth1/provider/utils.d.ts.map +0 -1
  330. package/lib/eth1/provider/utils.js +0 -120
  331. package/lib/eth1/provider/utils.js.map +0 -1
  332. package/lib/eth1/stream.d.ts +0 -15
  333. package/lib/eth1/stream.d.ts.map +0 -1
  334. package/lib/eth1/stream.js +0 -54
  335. package/lib/eth1/stream.js.map +0 -1
  336. package/lib/eth1/utils/depositContract.d.ts +0 -14
  337. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  338. package/lib/eth1/utils/depositContract.js +0 -33
  339. package/lib/eth1/utils/depositContract.js.map +0 -1
  340. package/lib/eth1/utils/deposits.d.ts +0 -8
  341. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  342. package/lib/eth1/utils/deposits.js +0 -47
  343. package/lib/eth1/utils/deposits.js.map +0 -1
  344. package/lib/eth1/utils/eth1Data.d.ts +0 -22
  345. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  346. package/lib/eth1/utils/eth1Data.js +0 -77
  347. package/lib/eth1/utils/eth1Data.js.map +0 -1
  348. package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
  349. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  350. package/lib/eth1/utils/eth1DepositEvent.js +0 -13
  351. package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
  352. package/lib/eth1/utils/eth1Vote.d.ts +0 -17
  353. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  354. package/lib/eth1/utils/eth1Vote.js +0 -111
  355. package/lib/eth1/utils/eth1Vote.js.map +0 -1
  356. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
  357. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  358. package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
  359. package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
  360. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
  361. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  362. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
  363. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
  364. package/src/chain/genesis/genesis.ts +0 -190
  365. package/src/chain/genesis/interface.ts +0 -14
  366. package/src/db/repositories/depositDataRoot.ts +0 -80
  367. package/src/db/repositories/depositEvent.ts +0 -32
  368. package/src/db/repositories/eth1Data.ts +0 -33
  369. package/src/db/single/index.ts +0 -2
  370. package/src/db/single/preGenesisState.ts +0 -37
  371. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  372. package/src/eth1/errors.ts +0 -40
  373. package/src/eth1/eth1DataCache.ts +0 -26
  374. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  375. package/src/eth1/eth1DepositsCache.ts +0 -141
  376. package/src/eth1/eth1MergeBlockTracker.ts +0 -328
  377. package/src/eth1/index.ts +0 -157
  378. package/src/eth1/interface.ts +0 -131
  379. package/src/eth1/options.ts +0 -28
  380. package/src/eth1/provider/eth1Provider.ts +0 -229
  381. package/src/eth1/provider/utils.ts +0 -136
  382. package/src/eth1/stream.ts +0 -75
  383. package/src/eth1/utils/depositContract.ts +0 -37
  384. package/src/eth1/utils/deposits.ts +0 -70
  385. package/src/eth1/utils/eth1Data.ts +0 -100
  386. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  387. package/src/eth1/utils/eth1Vote.ts +0 -142
  388. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  389. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  390. /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
  391. /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
  392. /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
  393. /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
@@ -95,7 +95,7 @@ export function getBeaconStateApi({
95
95
  const {state, executionOptimistic, finalized} = await getState(stateId);
96
96
  const currentEpoch = getCurrentEpoch(state);
97
97
  const {validators, balances} = state; // Get the validators sub tree once for all the loop
98
- const {pubkey2index} = chain.getHeadState().epochCtx;
98
+ const {pubkey2index} = chain;
99
99
 
100
100
  const validatorResponses: routes.beacon.ValidatorResponse[] = [];
101
101
  if (validatorIds.length) {
@@ -154,7 +154,7 @@ export function getBeaconStateApi({
154
154
 
155
155
  async postStateValidatorIdentities({stateId, validatorIds = []}) {
156
156
  const {state, executionOptimistic, finalized} = await getState(stateId);
157
- const {pubkey2index} = chain.getHeadState().epochCtx;
157
+ const {pubkey2index} = chain;
158
158
 
159
159
  let validatorIdentities: routes.beacon.ValidatorIdentities;
160
160
 
@@ -187,7 +187,7 @@ export function getBeaconStateApi({
187
187
 
188
188
  async getStateValidator({stateId, validatorId}) {
189
189
  const {state, executionOptimistic, finalized} = await getState(stateId);
190
- const {pubkey2index} = chain.getHeadState().epochCtx;
190
+ const {pubkey2index} = chain;
191
191
 
192
192
  const resp = getStateValidatorIndex(validatorId, state, pubkey2index);
193
193
  if (!resp.valid) {
@@ -212,10 +212,9 @@ export function getBeaconStateApi({
212
212
  if (validatorIds.length) {
213
213
  assertUniqueItems(validatorIds, "Duplicate validator IDs provided");
214
214
 
215
- const headState = chain.getHeadState();
216
215
  const balances: routes.beacon.ValidatorBalance[] = [];
217
216
  for (const id of validatorIds) {
218
- const resp = getStateValidatorIndex(id, state, headState.epochCtx.pubkey2index);
217
+ const resp = getStateValidatorIndex(id, state, chain.pubkey2index);
219
218
 
220
219
  if (resp.valid) {
221
220
  balances.push({
@@ -1511,7 +1511,7 @@ export function getValidatorApi(
1511
1511
 
1512
1512
  const filteredRegistrations = registrations.filter((registration) => {
1513
1513
  const {pubkey} = registration.message;
1514
- const validatorIndex = headState.epochCtx.pubkey2index.get(pubkey);
1514
+ const validatorIndex = chain.pubkey2index.get(pubkey);
1515
1515
  if (validatorIndex === null) return false;
1516
1516
 
1517
1517
  const validator = headState.validators.getReadonly(validatorIndex);
@@ -1,4 +1,3 @@
1
- import {ChainForkConfig} from "@lodestar/config";
2
1
  import {ExecutionStatus, ProtoBlock} from "@lodestar/fork-choice";
3
2
  import {ForkName, isForkPostFulu} from "@lodestar/params";
4
3
  import {
@@ -7,8 +6,7 @@ import {
7
6
  computeEpochAtSlot,
8
7
  isStateValidatorsNodesPopulated,
9
8
  } from "@lodestar/state-transition";
10
- import {IndexedAttestation, bellatrix, deneb} from "@lodestar/types";
11
- import {Logger, toRootHex} from "@lodestar/utils";
9
+ import {IndexedAttestation, deneb} from "@lodestar/types";
12
10
  import type {BeaconChain} from "../chain.js";
13
11
  import {BlockError, BlockErrorCode} from "../errors/index.js";
14
12
  import {BlockProcessOpts} from "../options.js";
@@ -18,7 +16,6 @@ import {ImportBlockOpts} from "./types.js";
18
16
  import {DENEB_BLOWFISH_BANNER} from "./utils/blowfishBanner.js";
19
17
  import {ELECTRA_GIRAFFE_BANNER} from "./utils/giraffeBanner.js";
20
18
  import {CAPELLA_OWL_BANNER} from "./utils/ownBanner.js";
21
- import {POS_PANDA_MERGE_TRANSITION_BANNER} from "./utils/pandaMergeTransitionBanner.js";
22
19
  import {FULU_ZEBRA_BANNER} from "./utils/zebraBanner.js";
23
20
  import {verifyBlocksDataAvailability} from "./verifyBlocksDataAvailability.js";
24
21
  import {SegmentExecStatus, verifyBlocksExecutionPayload} from "./verifyBlocksExecutionPayloads.js";
@@ -103,7 +100,6 @@ export async function verifyBlocksInEpoch(
103
100
  : Promise.resolve({
104
101
  execAborted: null,
105
102
  executionStatuses: blocks.map((_blk) => ExecutionStatus.Syncing),
106
- mergeBlockFound: null,
107
103
  } as SegmentExecStatus);
108
104
 
109
105
  // Store indexed attestations for each block to avoid recomputing them during import
@@ -143,6 +139,8 @@ export async function verifyBlocksInEpoch(
143
139
  // All signatures at once
144
140
  opts.skipVerifyBlockSignatures !== true
145
141
  ? verifyBlocksSignatures(
142
+ this.config,
143
+ this.index2pubkey,
146
144
  this.bls,
147
145
  this.logger,
148
146
  this.metrics,
@@ -162,12 +160,6 @@ export async function verifyBlocksInEpoch(
162
160
  ]);
163
161
 
164
162
  if (opts.verifyOnly !== true) {
165
- if (segmentExecStatus.execAborted === null && segmentExecStatus.mergeBlockFound !== null) {
166
- // merge block found and is fully valid = state transition + signatures + execution payload.
167
- // TODO: Will this banner be logged during syncing?
168
- logOnPowBlock(this.logger, this.config, segmentExecStatus.mergeBlockFound);
169
- }
170
-
171
163
  const fromForkBoundary = this.config.getForkBoundaryAtEpoch(computeEpochAtSlot(parentBlock.slot));
172
164
  const toForkBoundary = this.config.getForkBoundaryAtEpoch(computeEpochAtSlot(lastBlock.message.slot));
173
165
 
@@ -250,16 +242,3 @@ export async function verifyBlocksInEpoch(
250
242
  abortController.abort();
251
243
  }
252
244
  }
253
-
254
- function logOnPowBlock(logger: Logger, config: ChainForkConfig, mergeBlock: bellatrix.BeaconBlock): void {
255
- const mergeBlockHash = toRootHex(config.getForkTypes(mergeBlock.slot).BeaconBlock.hashTreeRoot(mergeBlock));
256
- const mergeExecutionHash = toRootHex(mergeBlock.body.executionPayload.blockHash);
257
- const mergePowHash = toRootHex(mergeBlock.body.executionPayload.parentHash);
258
- logger.info(POS_PANDA_MERGE_TRANSITION_BANNER);
259
- logger.info("Execution transitioning from PoW to PoS!!!");
260
- logger.info("Importing block referencing terminal PoW block", {
261
- blockHash: mergeBlockHash,
262
- executionHash: mergeExecutionHash,
263
- powHash: mergePowHash,
264
- });
265
- }
@@ -6,19 +6,16 @@ import {
6
6
  LVHValidResponse,
7
7
  MaybeValidExecutionStatus,
8
8
  ProtoBlock,
9
- assertValidTerminalPowBlock,
10
9
  } from "@lodestar/fork-choice";
11
- import {ForkSeq, SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY} from "@lodestar/params";
10
+ import {ForkSeq} from "@lodestar/params";
12
11
  import {
13
12
  CachedBeaconStateAllForks,
14
13
  isExecutionBlockBodyType,
15
14
  isExecutionEnabled,
16
15
  isExecutionStateType,
17
- isMergeTransitionBlock as isMergeTransitionBlockFn,
18
16
  } from "@lodestar/state-transition";
19
- import {Slot, bellatrix, electra} from "@lodestar/types";
17
+ import {bellatrix, electra} from "@lodestar/types";
20
18
  import {ErrorAborted, Logger, toRootHex} from "@lodestar/utils";
21
- import {IEth1ForBlockProduction} from "../../eth1/index.js";
22
19
  import {ExecutionPayloadStatus, IExecutionEngine} from "../../execution/engine/interface.js";
23
20
  import {Metrics} from "../../metrics/metrics.js";
24
21
  import {IClock} from "../../util/clock.js";
@@ -29,7 +26,6 @@ import {IBlockInput} from "./blockInput/types.js";
29
26
  import {ImportBlockOpts} from "./types.js";
30
27
 
31
28
  export type VerifyBlockExecutionPayloadModules = {
32
- eth1: IEth1ForBlockProduction;
33
29
  executionEngine: IExecutionEngine;
34
30
  clock: IClock;
35
31
  logger: Logger;
@@ -44,9 +40,8 @@ export type SegmentExecStatus =
44
40
  execAborted: null;
45
41
  executionStatuses: MaybeValidExecutionStatus[];
46
42
  executionTime: number;
47
- mergeBlockFound: bellatrix.BeaconBlock | null;
48
43
  }
49
- | {execAborted: ExecAbortType; invalidSegmentLVH?: LVHInvalidResponse; mergeBlockFound: null};
44
+ | {execAborted: ExecAbortType; invalidSegmentLVH?: LVHInvalidResponse};
50
45
 
51
46
  type VerifyExecutionErrorResponse =
52
47
  | {executionStatus: ExecutionStatus.Invalid; lvhResponse: LVHInvalidResponse; execError: BlockError}
@@ -72,7 +67,6 @@ export async function verifyBlocksExecutionPayload(
72
67
  opts: BlockProcessOpts & ImportBlockOpts
73
68
  ): Promise<SegmentExecStatus> {
74
69
  const executionStatuses: MaybeValidExecutionStatus[] = [];
75
- let mergeBlockFound: bellatrix.BeaconBlock | null = null;
76
70
  const recvToValLatency = Date.now() / 1000 - (opts.seenTimestampSec ?? Date.now() / 1000);
77
71
  const lastBlock = blockInputs.at(-1);
78
72
 
@@ -96,57 +90,9 @@ export async function verifyBlocksExecutionPayload(
96
90
  // will either validate or prune invalid blocks
97
91
  //
98
92
  // We need to track and keep updating if its safe to optimistically import these blocks.
99
- // The following is how we determine for a block if its safe:
100
- //
101
- // (but we need to modify this check for this segment of blocks because it checks if the
102
- // parent of any block imported in forkchoice is post-merge and currently we could only
103
- // have blocks[0]'s parent imported in the chain as this is no longer one by one verify +
104
- // import.)
105
- //
106
93
  //
107
94
  // When to import such blocks:
108
95
  // From: https://github.com/ethereum/consensus-specs/pull/2844
109
- // A block MUST NOT be optimistically imported, unless either of the following
110
- // conditions are met:
111
- //
112
- // 1. Parent of the block has execution
113
- //
114
- // Since with the sync optimizations, the previous block might not have been in the
115
- // forkChoice yet, so the below check could fail for safeSlotsToImportOptimistically
116
- //
117
- // Luckily, we can depend on the preState0 to see if we are already post merge w.r.t
118
- // the blocks we are importing.
119
- //
120
- // Or in other words if
121
- // - block status is syncing
122
- // - and we are not in a post merge world and is parent is not optimistically safe
123
- // - and we are syncing close to the chain head i.e. clock slot
124
- // - and parent is optimistically safe
125
- //
126
- // then throw error
127
- //
128
- //
129
- // - if we haven't yet imported a post merge ancestor in forkchoice i.e.
130
- // - and we are syncing close to the clockSlot, i.e. merge Transition could be underway
131
- //
132
- //
133
- // 2. The current slot (as per the system clock) is at least
134
- // SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY ahead of the slot of the block being
135
- // imported.
136
- // This means that the merge transition could be underway and we can't afford to import
137
- // a block which is not fully validated as it could affect liveliness of the network.
138
- //
139
- //
140
- // For this segment of blocks:
141
- // We are optimistically safe with respect to this entire block segment if:
142
- // - all the blocks are way behind the current slot
143
- // - or we have already imported a post-merge parent of first block of this chain in forkchoice
144
- const currentSlot = chain.clock.currentSlot;
145
- const safeSlotsToImportOptimistically = opts.safeSlotsToImportOptimistically ?? SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY;
146
- let isOptimisticallySafe =
147
- parentBlock.executionStatus !== ExecutionStatus.PreMerge ||
148
- lastBlock.slot + safeSlotsToImportOptimistically < currentSlot;
149
-
150
96
  for (let blockIndex = 0; blockIndex < blockInputs.length; blockIndex++) {
151
97
  const blockInput = blockInputs[blockIndex];
152
98
  // If blocks are invalid in consensus the main promise could resolve before this loop ends.
@@ -154,14 +100,7 @@ export async function verifyBlocksExecutionPayload(
154
100
  if (signal.aborted) {
155
101
  throw new ErrorAborted("verifyBlockExecutionPayloads");
156
102
  }
157
- const verifyResponse = await verifyBlockExecutionPayload(
158
- chain,
159
- blockInput,
160
- preState0,
161
- opts,
162
- isOptimisticallySafe,
163
- currentSlot
164
- );
103
+ const verifyResponse = await verifyBlockExecutionPayload(chain, blockInput, preState0);
165
104
 
166
105
  // If execError has happened, then we need to extract the segmentExecStatus and return
167
106
  if (verifyResponse.execError !== null) {
@@ -170,75 +109,7 @@ export async function verifyBlocksExecutionPayload(
170
109
 
171
110
  // If we are here then its because executionStatus is one of MaybeValidExecutionStatus
172
111
  const {executionStatus} = verifyResponse;
173
- // It becomes optimistically safe for following blocks if a post-merge block is deemed fit
174
- // for import. If it would not have been safe verifyBlockExecutionPayload would have
175
- // returned execError and loop would have been aborted
176
- if (executionStatus !== ExecutionStatus.PreMerge) {
177
- isOptimisticallySafe = true;
178
- }
179
112
  executionStatuses.push(executionStatus);
180
-
181
- const blockBody = blockInput.getBlock().message.body;
182
- const isMergeTransitionBlock =
183
- // If the merge block is found, stop the search as the isMergeTransitionBlockFn condition
184
- // will still evaluate to true for the following blocks leading to errors (while syncing)
185
- // as the preState0 still belongs to the pre state of the first block on segment
186
- mergeBlockFound === null &&
187
- isExecutionStateType(preState0) &&
188
- isExecutionBlockBodyType(blockBody) &&
189
- isMergeTransitionBlockFn(preState0, blockBody);
190
-
191
- // If this is a merge transition block, check to ensure if it references
192
- // a valid terminal PoW block.
193
- //
194
- // However specs define this check to be run inside forkChoice's onBlock
195
- // (https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/fork-choice.md#on_block)
196
- // but we perform the check here (as inspired from the lighthouse impl)
197
- //
198
- // Reasons:
199
- // 1. If the block is not valid, we should fail early and not wait till
200
- // forkChoice import.
201
- // 2. It makes logical sense to pair it with the block validations and
202
- // deal it with the external services like eth1 tracker here than
203
- // in import block
204
- if (isMergeTransitionBlock) {
205
- const mergeBlock = blockInput.getBlock().message as bellatrix.BeaconBlock;
206
- const mergeBlockHash = toRootHex(chain.config.getForkTypes(mergeBlock.slot).BeaconBlock.hashTreeRoot(mergeBlock));
207
- const powBlockRootHex = toRootHex(mergeBlock.body.executionPayload.parentHash);
208
- const powBlock = await chain.eth1.getPowBlock(powBlockRootHex).catch((error) => {
209
- // Lets just warn the user here, errors if any will be reported on
210
- // `assertValidTerminalPowBlock` checks
211
- chain.logger.warn(
212
- "Error fetching terminal PoW block referred in the merge transition block",
213
- {powBlockHash: powBlockRootHex, mergeBlockHash},
214
- error
215
- );
216
- return null;
217
- });
218
-
219
- const powBlockParent =
220
- powBlock &&
221
- (await chain.eth1.getPowBlock(powBlock.parentHash).catch((error) => {
222
- // Lets just warn the user here, errors if any will be reported on
223
- // `assertValidTerminalPowBlock` checks
224
- chain.logger.warn(
225
- "Error fetching parent of the terminal PoW block referred in the merge transition block",
226
- {powBlockParentHash: powBlock.parentHash, powBlock: powBlockRootHex, mergeBlockHash},
227
- error
228
- );
229
- return null;
230
- }));
231
-
232
- // executionStatus will never == ExecutionStatus.PreMerge if it's the mergeBlock. But gotta make TS happy =D
233
- if (executionStatus === ExecutionStatus.PreMerge) {
234
- throw Error("Merge block must not have executionStatus == PreMerge");
235
- }
236
-
237
- assertValidTerminalPowBlock(chain.config, mergeBlock, {executionStatus, powBlock, powBlockParent});
238
- // Valid execution payload, but may not be in a valid beacon chain block. Delay printing the POS ACTIVATED banner
239
- // to the end of the verify block routine, which confirms that this block is fully valid.
240
- mergeBlockFound = mergeBlock;
241
- }
242
113
  }
243
114
 
244
115
  const executionTime = Date.now();
@@ -265,7 +136,6 @@ export async function verifyBlocksExecutionPayload(
265
136
  execAborted: null,
266
137
  executionStatuses,
267
138
  executionTime,
268
- mergeBlockFound,
269
139
  };
270
140
  }
271
141
 
@@ -275,28 +145,20 @@ export async function verifyBlocksExecutionPayload(
275
145
  export async function verifyBlockExecutionPayload(
276
146
  chain: VerifyBlockExecutionPayloadModules,
277
147
  blockInput: IBlockInput,
278
- preState0: CachedBeaconStateAllForks,
279
- opts: BlockProcessOpts,
280
- isOptimisticallySafe: boolean,
281
- currentSlot: Slot
148
+ preState0: CachedBeaconStateAllForks
282
149
  ): Promise<VerifyBlockExecutionResponse> {
283
150
  const block = blockInput.getBlock();
284
151
  /** Not null if execution is enabled */
285
152
  const executionPayloadEnabled =
286
153
  isExecutionStateType(preState0) &&
287
154
  isExecutionBlockBodyType(block.message.body) &&
288
- // Safe to use with a state previous to block's preState. isMergeComplete can only transition from false to true.
289
- // - If preState0 is after merge block: condition is true, and will always be true
290
- // - If preState0 is before merge block: the block could lie but then state transition function will throw above
291
- // It is kinda safe to send non-trusted payloads to the execution client because at most it can trigger sync.
292
- // TODO: If this becomes a problem, do some basic verification beforehand, like checking the proposer signature.
293
155
  isExecutionEnabled(preState0, block.message)
294
156
  ? block.message.body.executionPayload
295
157
  : null;
296
158
 
297
159
  if (!executionPayloadEnabled) {
298
- // isExecutionEnabled() -> false
299
- return {executionStatus: ExecutionStatus.PreMerge, execError: null} as VerifyBlockExecutionResponse;
160
+ // Pre-merge block, no execution payload to verify
161
+ return {executionStatus: ExecutionStatus.PreMerge, lvhResponse: undefined, execError: null};
300
162
  }
301
163
 
302
164
  // TODO: Handle better notifyNewPayload() returning error is syncing
@@ -343,24 +205,10 @@ export async function verifyBlockExecutionPayload(
343
205
  }
344
206
 
345
207
  // Accepted and Syncing have the same treatment, as final validation of block is pending
208
+ // Post-merge, we're always safe to optimistically import
346
209
  case ExecutionPayloadStatus.ACCEPTED:
347
- case ExecutionPayloadStatus.SYNCING: {
348
- // Check if the entire segment was deemed safe or, this block specifically itself if not in
349
- // the safeSlotsToImportOptimistically window of current slot, then we can import else
350
- // we need to throw and not import his block
351
- const safeSlotsToImportOptimistically =
352
- opts.safeSlotsToImportOptimistically ?? SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY;
353
- if (!isOptimisticallySafe && blockInput.slot + safeSlotsToImportOptimistically >= currentSlot) {
354
- const execError = new BlockError(block, {
355
- code: BlockErrorCode.EXECUTION_ENGINE_ERROR,
356
- execStatus: ExecutionPayloadStatus.UNSAFE_OPTIMISTIC_STATUS,
357
- errorMessage: `not safe to import ${execResult.status} payload within ${opts.safeSlotsToImportOptimistically} of currentSlot`,
358
- });
359
- return {executionStatus: null, execError} as VerifyBlockExecutionResponse;
360
- }
361
-
210
+ case ExecutionPayloadStatus.SYNCING:
362
211
  return {executionStatus: ExecutionStatus.Syncing, execError: null};
363
- }
364
212
 
365
213
  // If the block has is not valid, or it referenced an invalid terminal block then the
366
214
  // block is invalid, however it has no bearing on any forkChoice cleanup
@@ -1,4 +1,5 @@
1
- import {CachedBeaconStateAllForks, getBlockSignatureSets} from "@lodestar/state-transition";
1
+ import {BeaconConfig} from "@lodestar/config";
2
+ import {CachedBeaconStateAllForks, Index2PubkeyCache, getBlockSignatureSets} from "@lodestar/state-transition";
2
3
  import {IndexedAttestation, SignedBeaconBlock} from "@lodestar/types";
3
4
  import {Logger} from "@lodestar/utils";
4
5
  import {Metrics} from "../../metrics/metrics.js";
@@ -15,6 +16,8 @@ import {ImportBlockOpts} from "./types.js";
15
16
  * Since all data is known in advance all signatures are verified at once in parallel.
16
17
  */
17
18
  export async function verifyBlocksSignatures(
19
+ config: BeaconConfig,
20
+ index2pubkey: Index2PubkeyCache,
18
21
  bls: IBlsVerifier,
19
22
  logger: Logger,
20
23
  metrics: Metrics | null,
@@ -25,6 +28,7 @@ export async function verifyBlocksSignatures(
25
28
  ): Promise<{verifySignaturesTime: number}> {
26
29
  const isValidPromises: Promise<boolean>[] = [];
27
30
  const recvToValLatency = Date.now() / 1000 - (opts.seenTimestampSec ?? Date.now() / 1000);
31
+ const currentSyncCommitteeIndexed = preState0.epochCtx.currentSyncCommitteeIndexed;
28
32
 
29
33
  // Verifies signatures after running state transition, so all SyncCommittee signed roots are known at this point.
30
34
  // We must ensure block.slot <= state.slot before running getAllBlockSignatureSets().
@@ -38,9 +42,16 @@ export async function verifyBlocksSignatures(
38
42
  : //
39
43
  // Verify signatures per block to track which block is invalid
40
44
  bls.verifySignatureSets(
41
- getBlockSignatureSets(preState0, block, indexedAttestationsByBlock[i], {
42
- skipProposerSignature: opts.validProposerSignature,
43
- })
45
+ getBlockSignatureSets(
46
+ config,
47
+ index2pubkey,
48
+ currentSyncCommitteeIndexed,
49
+ block,
50
+ indexedAttestationsByBlock[i],
51
+ {
52
+ skipProposerSignature: opts.validProposerSignature,
53
+ }
54
+ )
44
55
  );
45
56
 
46
57
  // getBlockSignatureSets() takes 45ms in benchmarks for 2022Q2 mainnet blocks (100 sigs). When syncing a 32 blocks
@@ -3,7 +3,7 @@ import {PrivateKey} from "@libp2p/interface";
3
3
  import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
4
4
  import {CompositeTypeAny, TreeView, Type} from "@chainsafe/ssz";
5
5
  import {BeaconConfig} from "@lodestar/config";
6
- import {CheckpointWithHex, ExecutionStatus, IForkChoice, ProtoBlock, UpdateHeadOpt} from "@lodestar/fork-choice";
6
+ import {CheckpointWithHex, IForkChoice, ProtoBlock, UpdateHeadOpt} from "@lodestar/fork-choice";
7
7
  import {LoggerNode} from "@lodestar/logger/node";
8
8
  import {EFFECTIVE_BALANCE_INCREMENT, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra} from "@lodestar/params";
9
9
  import {
@@ -17,10 +17,8 @@ import {
17
17
  computeEndSlotAtEpoch,
18
18
  computeEpochAtSlot,
19
19
  computeStartSlotAtEpoch,
20
- createCachedBeaconState,
21
20
  getEffectiveBalanceIncrementsZeroInactive,
22
21
  getEffectiveBalancesFromStateBytes,
23
- isCachedBeaconState,
24
22
  processSlots,
25
23
  } from "@lodestar/state-transition";
26
24
  import {
@@ -43,7 +41,6 @@ import {Logger, fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRoot
43
41
  import {ProcessShutdownCallback} from "@lodestar/validator";
44
42
  import {GENESIS_EPOCH, ZERO_HASH} from "../constants/index.js";
45
43
  import {IBeaconDb} from "../db/index.js";
46
- import {IEth1ForBlockProduction} from "../eth1/index.js";
47
44
  import {BuilderStatus} from "../execution/builder/http.js";
48
45
  import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
49
46
  import {Metrics} from "../metrics/index.js";
@@ -117,7 +114,6 @@ const DEFAULT_MAX_CACHED_PRODUCED_RESULTS = 4;
117
114
  export class BeaconChain implements IBeaconChain {
118
115
  readonly genesisTime: UintNum64;
119
116
  readonly genesisValidatorsRoot: Root;
120
- readonly eth1: IEth1ForBlockProduction;
121
117
  readonly executionEngine: IExecutionEngine;
122
118
  readonly executionBuilder?: IExecutionBuilder;
123
119
  // Expose config for convenience in modularized functions
@@ -144,7 +140,7 @@ export class BeaconChain implements IBeaconChain {
144
140
  readonly aggregatedAttestationPool: AggregatedAttestationPool;
145
141
  readonly syncCommitteeMessagePool: SyncCommitteeMessagePool;
146
142
  readonly syncContributionAndProofPool;
147
- readonly opPool = new OpPool();
143
+ readonly opPool: OpPool;
148
144
 
149
145
  // Gossip seen cache
150
146
  readonly seenAttesters = new SeenAttesters();
@@ -206,6 +202,8 @@ export class BeaconChain implements IBeaconChain {
206
202
  {
207
203
  privateKey,
208
204
  config,
205
+ pubkey2index,
206
+ index2pubkey,
209
207
  db,
210
208
  dbName,
211
209
  dataDir,
@@ -216,12 +214,13 @@ export class BeaconChain implements IBeaconChain {
216
214
  validatorMonitor,
217
215
  anchorState,
218
216
  isAnchorStateFinalized,
219
- eth1,
220
217
  executionEngine,
221
218
  executionBuilder,
222
219
  }: {
223
220
  privateKey: PrivateKey;
224
221
  config: BeaconConfig;
222
+ pubkey2index: PubkeyIndexMap;
223
+ index2pubkey: Index2PubkeyCache;
225
224
  db: IBeaconDb;
226
225
  dbName: string;
227
226
  dataDir: string;
@@ -231,9 +230,8 @@ export class BeaconChain implements IBeaconChain {
231
230
  clock?: IClock;
232
231
  metrics: Metrics | null;
233
232
  validatorMonitor: ValidatorMonitor | null;
234
- anchorState: BeaconStateAllForks;
233
+ anchorState: CachedBeaconStateAllForks;
235
234
  isAnchorStateFinalized: boolean;
236
- eth1: IEth1ForBlockProduction;
237
235
  executionEngine: IExecutionEngine;
238
236
  executionBuilder?: IExecutionBuilder;
239
237
  }
@@ -248,7 +246,6 @@ export class BeaconChain implements IBeaconChain {
248
246
  this.genesisTime = anchorState.genesisTime;
249
247
  this.anchorStateLatestBlockSlot = anchorState.latestBlockHeader.slot;
250
248
  this.genesisValidatorsRoot = anchorState.genesisValidatorsRoot;
251
- this.eth1 = eth1;
252
249
  this.executionEngine = executionEngine;
253
250
  this.executionBuilder = executionBuilder;
254
251
  const signal = this.abortController.signal;
@@ -265,6 +262,7 @@ export class BeaconChain implements IBeaconChain {
265
262
  this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config, metrics);
266
263
  this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(config, clock, this.opts?.preaggregateSlotDistance);
267
264
  this.syncContributionAndProofPool = new SyncContributionAndProofPool(config, clock, metrics, logger);
265
+ this.opPool = new OpPool(config);
268
266
 
269
267
  this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
270
268
  this.seenContributionAndProof = new SeenContributionAndProof(metrics);
@@ -291,39 +289,25 @@ export class BeaconChain implements IBeaconChain {
291
289
  logger,
292
290
  });
293
291
 
294
- // Restore state caches
295
- // anchorState may already by a CachedBeaconState. If so, don't create the cache again, since deserializing all
296
- // pubkeys takes ~30 seconds for 350k keys (mainnet 2022Q2).
297
- // When the BeaconStateCache is created in eth1 genesis builder it may be incorrect. Until we can ensure that
298
- // it's safe to re-use _ANY_ BeaconStateCache, this option is disabled by default and only used in tests.
299
- const cachedState =
300
- isCachedBeaconState(anchorState) && opts.skipCreateStateCacheIfAvailable
301
- ? anchorState
302
- : createCachedBeaconState(anchorState, {
303
- config,
304
- pubkey2index: new PubkeyIndexMap(),
305
- index2pubkey: [],
306
- });
307
- this._earliestAvailableSlot = cachedState.slot;
308
-
309
- this.shufflingCache = cachedState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
292
+ this._earliestAvailableSlot = anchorState.slot;
293
+ this.shufflingCache = anchorState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
310
294
  {
311
- shuffling: cachedState.epochCtx.previousShuffling,
312
- decisionRoot: cachedState.epochCtx.previousDecisionRoot,
295
+ shuffling: anchorState.epochCtx.previousShuffling,
296
+ decisionRoot: anchorState.epochCtx.previousDecisionRoot,
313
297
  },
314
298
  {
315
- shuffling: cachedState.epochCtx.currentShuffling,
316
- decisionRoot: cachedState.epochCtx.currentDecisionRoot,
299
+ shuffling: anchorState.epochCtx.currentShuffling,
300
+ decisionRoot: anchorState.epochCtx.currentDecisionRoot,
317
301
  },
318
302
  {
319
- shuffling: cachedState.epochCtx.nextShuffling,
320
- decisionRoot: cachedState.epochCtx.nextDecisionRoot,
303
+ shuffling: anchorState.epochCtx.nextShuffling,
304
+ decisionRoot: anchorState.epochCtx.nextDecisionRoot,
321
305
  },
322
306
  ]);
323
307
 
324
- // Persist single global instance of state caches
325
- this.pubkey2index = cachedState.epochCtx.pubkey2index;
326
- this.index2pubkey = cachedState.epochCtx.index2pubkey;
308
+ // Global cache of validators pubkey/index mapping
309
+ this.pubkey2index = pubkey2index;
310
+ this.index2pubkey = index2pubkey;
327
311
 
328
312
  const fileDataStore = opts.nHistoricalStatesFileDataStore ?? true;
329
313
  const blockStateCache = this.opts.nHistoricalStates
@@ -339,6 +323,7 @@ export class BeaconChain implements IBeaconChain {
339
323
  this.cpStateDatastore = fileDataStore ? new FileCPStateDatastore(dataDir) : new DbCPStateDatastore(this.db);
340
324
  checkpointStateCache = new PersistentCheckpointStateCache(
341
325
  {
326
+ config,
342
327
  metrics,
343
328
  logger,
344
329
  clock,
@@ -353,15 +338,15 @@ export class BeaconChain implements IBeaconChain {
353
338
  }
354
339
 
355
340
  const {checkpoint} = computeAnchorCheckpoint(config, anchorState);
356
- blockStateCache.add(cachedState);
357
- blockStateCache.setHeadState(cachedState);
358
- checkpointStateCache.add(checkpoint, cachedState);
341
+ blockStateCache.add(anchorState);
342
+ blockStateCache.setHeadState(anchorState);
343
+ checkpointStateCache.add(checkpoint, anchorState);
359
344
 
360
345
  const forkChoice = initializeForkChoice(
361
346
  config,
362
347
  emitter,
363
348
  clock.currentSlot,
364
- cachedState,
349
+ anchorState,
365
350
  isAnchorStateFinalized,
366
351
  opts,
367
352
  this.justifiedBalancesGetter.bind(this),
@@ -417,15 +402,6 @@ export class BeaconChain implements IBeaconChain {
417
402
  signal
418
403
  );
419
404
 
420
- // Stop polling eth1 data if anchor state is in Electra AND deposit_requests_start_index is reached
421
- const anchorStateFork = this.config.getForkName(anchorState.slot);
422
- if (isForkPostElectra(anchorStateFork)) {
423
- const {eth1DepositIndex, depositRequestsStartIndex} = anchorState as BeaconStateElectra;
424
- if (eth1DepositIndex === Number(depositRequestsStartIndex)) {
425
- this.eth1.stopPollingEth1Data();
426
- }
427
- }
428
-
429
405
  // always run PrepareNextSlotScheduler except for fork_choice spec tests
430
406
  if (!opts?.disablePrepareNextSlot) {
431
407
  new PrepareNextSlotScheduler(this, this.config, metrics, this.logger, signal);
@@ -757,7 +733,7 @@ export class BeaconChain implements IBeaconChain {
757
733
  RegenCaller.produceBlock
758
734
  );
759
735
  const proposerIndex = state.epochCtx.getBeaconProposer(slot);
760
- const proposerPubKey = state.epochCtx.index2pubkey[proposerIndex].toBytes();
736
+ const proposerPubKey = this.index2pubkey[proposerIndex].toBytes();
761
737
 
762
738
  const {body, produceResult, executionPayloadValue, shouldOverrideBuilder} = await produceBlockBody.call(
763
739
  this,
@@ -1177,17 +1153,6 @@ export class BeaconChain implements IBeaconChain {
1177
1153
  this.seenAggregatedAttestations.prune(epoch);
1178
1154
  this.seenBlockAttesters.prune(epoch);
1179
1155
  this.beaconProposerCache.prune(epoch);
1180
-
1181
- // Poll for merge block in the background to speed-up block production. Only if:
1182
- // - after BELLATRIX_FORK_EPOCH
1183
- // - Beacon node synced
1184
- // - head state not isMergeTransitionComplete
1185
- if (this.config.BELLATRIX_FORK_EPOCH - epoch < 1) {
1186
- const head = this.forkChoice.getHead();
1187
- if (epoch - computeEpochAtSlot(head.slot) < 5 && head.executionStatus === ExecutionStatus.PreMerge) {
1188
- this.eth1.startPollingMergeBlock();
1189
- }
1190
- }
1191
1156
  }
1192
1157
 
1193
1158
  protected onNewHead(head: ProtoBlock): void {
@@ -1331,7 +1296,7 @@ export class BeaconChain implements IBeaconChain {
1331
1296
 
1332
1297
  const postState = this.regen.getStateSync(toRootHex(block.stateRoot)) ?? undefined;
1333
1298
 
1334
- return computeBlockRewards(block, preState.clone(), postState?.clone());
1299
+ return computeBlockRewards(this.config, block, preState.clone(), postState?.clone());
1335
1300
  }
1336
1301
 
1337
1302
  async getAttestationsRewards(
@@ -1355,7 +1320,7 @@ export class BeaconChain implements IBeaconChain {
1355
1320
  throw Error(`State is not in cache for slot ${slot}`);
1356
1321
  }
1357
1322
 
1358
- const rewards = await computeAttestationsRewards(epoch, cachedState, this.config, validatorIds);
1323
+ const rewards = await computeAttestationsRewards(this.config, this.pubkey2index, cachedState, validatorIds);
1359
1324
 
1360
1325
  return {rewards, executionOptimistic, finalized};
1361
1326
  }
@@ -1372,6 +1337,6 @@ export class BeaconChain implements IBeaconChain {
1372
1337
 
1373
1338
  preState = processSlots(preState, block.slot); // Dial preState's slot to block.slot
1374
1339
 
1375
- return computeSyncCommitteeRewards(block, preState.clone(), validatorIds);
1340
+ return computeSyncCommitteeRewards(this.config, this.index2pubkey, block, preState.clone(), validatorIds);
1376
1341
  }
1377
1342
  }