@lodestar/beacon-node 1.38.0 → 1.39.0-dev.0321dbcf04

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 (398) 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/api/impl/beacon/state/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/state/index.js +4 -5
  6. package/lib/api/impl/beacon/state/index.js.map +1 -1
  7. package/lib/api/impl/validator/index.js +1 -1
  8. package/lib/api/impl/validator/index.js.map +1 -1
  9. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  10. package/lib/chain/blocks/verifyBlock.js +1 -21
  11. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  12. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -6
  13. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  14. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +9 -128
  15. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  16. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +3 -2
  17. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  18. package/lib/chain/blocks/verifyBlocksSignatures.js +3 -2
  19. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  20. package/lib/chain/chain.d.ts +8 -12
  21. package/lib/chain/chain.d.ts.map +1 -1
  22. package/lib/chain/chain.js +25 -59
  23. package/lib/chain/chain.js.map +1 -1
  24. package/lib/chain/initState.d.ts +1 -14
  25. package/lib/chain/initState.d.ts.map +1 -1
  26. package/lib/chain/initState.js +1 -62
  27. package/lib/chain/initState.js.map +1 -1
  28. package/lib/chain/interface.d.ts +4 -9
  29. package/lib/chain/interface.d.ts.map +1 -1
  30. package/lib/chain/interface.js.map +1 -1
  31. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +5 -6
  32. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  33. package/lib/chain/opPools/aggregatedAttestationPool.js +7 -132
  34. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  35. package/lib/chain/opPools/opPool.d.ts +3 -0
  36. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  37. package/lib/chain/opPools/opPool.js +9 -8
  38. package/lib/chain/opPools/opPool.js.map +1 -1
  39. package/lib/chain/options.d.ts +0 -4
  40. package/lib/chain/options.d.ts.map +1 -1
  41. package/lib/chain/options.js +0 -2
  42. package/lib/chain/options.js.map +1 -1
  43. package/lib/chain/prepareNextSlot.d.ts +0 -4
  44. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  45. package/lib/chain/prepareNextSlot.js +2 -22
  46. package/lib/chain/prepareNextSlot.js.map +1 -1
  47. package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -22
  48. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  49. package/lib/chain/produceBlock/produceBlockBody.js +33 -99
  50. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  51. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
  52. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  53. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
  54. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  55. package/lib/chain/validation/aggregateAndProof.js +9 -0
  56. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  57. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  58. package/lib/chain/validation/attesterSlashing.js +2 -2
  59. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  60. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  61. package/lib/chain/validation/blobSidecar.js +2 -3
  62. package/lib/chain/validation/blobSidecar.js.map +1 -1
  63. package/lib/chain/validation/block.js +1 -1
  64. package/lib/chain/validation/block.js.map +1 -1
  65. package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -1
  66. package/lib/chain/validation/blsToExecutionChange.js +10 -3
  67. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  68. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  69. package/lib/chain/validation/dataColumnSidecar.js +2 -3
  70. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  71. package/lib/chain/validation/proposerSlashing.js +3 -2
  72. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  73. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  74. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  75. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +3 -2
  76. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  77. package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -4
  78. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  79. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +3 -2
  80. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  81. package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
  82. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  83. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
  84. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  85. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  86. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  87. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +3 -2
  88. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  89. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -3
  90. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  91. package/lib/chain/validation/syncCommittee.js +1 -1
  92. package/lib/chain/validation/syncCommittee.js.map +1 -1
  93. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  94. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -4
  95. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  96. package/lib/chain/validation/voluntaryExit.js +1 -1
  97. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  98. package/lib/db/beacon.d.ts +3 -7
  99. package/lib/db/beacon.d.ts.map +1 -1
  100. package/lib/db/beacon.js +33 -12
  101. package/lib/db/beacon.js.map +1 -1
  102. package/lib/db/buckets.d.ts +12 -6
  103. package/lib/db/buckets.d.ts.map +1 -1
  104. package/lib/db/buckets.js +6 -1
  105. package/lib/db/buckets.js.map +1 -1
  106. package/lib/db/interface.d.ts +2 -7
  107. package/lib/db/interface.d.ts.map +1 -1
  108. package/lib/db/repositories/index.d.ts +0 -3
  109. package/lib/db/repositories/index.d.ts.map +1 -1
  110. package/lib/db/repositories/index.js +0 -3
  111. package/lib/db/repositories/index.js.map +1 -1
  112. package/lib/execution/engine/http.d.ts +5 -13
  113. package/lib/execution/engine/http.d.ts.map +1 -1
  114. package/lib/execution/engine/http.js +6 -15
  115. package/lib/execution/engine/http.js.map +1 -1
  116. package/lib/execution/engine/index.d.ts.map +1 -1
  117. package/lib/execution/engine/index.js +1 -1
  118. package/lib/execution/engine/index.js.map +1 -1
  119. package/lib/execution/engine/interface.d.ts +1 -1
  120. package/lib/execution/engine/interface.d.ts.map +1 -1
  121. package/lib/execution/engine/interface.js.map +1 -1
  122. package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
  123. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
  124. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
  125. package/lib/execution/engine/jwt.d.ts.map +1 -0
  126. package/lib/execution/engine/jwt.js.map +1 -0
  127. package/lib/execution/engine/mock.d.ts +11 -12
  128. package/lib/execution/engine/mock.d.ts.map +1 -1
  129. package/lib/execution/engine/mock.js +38 -22
  130. package/lib/execution/engine/mock.js.map +1 -1
  131. package/lib/execution/engine/payloadIdCache.d.ts +1 -1
  132. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  133. package/lib/execution/engine/types.d.ts +1 -1
  134. package/lib/execution/engine/types.d.ts.map +1 -1
  135. package/lib/execution/engine/types.js +1 -1
  136. package/lib/execution/engine/types.js.map +1 -1
  137. package/lib/execution/engine/utils.d.ts +64 -2
  138. package/lib/execution/engine/utils.d.ts.map +1 -1
  139. package/lib/execution/engine/utils.js +91 -2
  140. package/lib/execution/engine/utils.js.map +1 -1
  141. package/lib/index.d.ts +1 -2
  142. package/lib/index.d.ts.map +1 -1
  143. package/lib/index.js +1 -2
  144. package/lib/index.js.map +1 -1
  145. package/lib/metrics/metrics/lodestar.d.ts +0 -49
  146. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  147. package/lib/metrics/metrics/lodestar.js +0 -134
  148. package/lib/metrics/metrics/lodestar.js.map +1 -1
  149. package/lib/network/core/events.d.ts +1 -1
  150. package/lib/network/core/events.d.ts.map +1 -1
  151. package/lib/network/core/events.js +1 -1
  152. package/lib/network/core/events.js.map +1 -1
  153. package/lib/network/events.d.ts +6 -1
  154. package/lib/network/events.d.ts.map +1 -1
  155. package/lib/network/events.js +7 -1
  156. package/lib/network/events.js.map +1 -1
  157. package/lib/network/peers/discover.d.ts.map +1 -1
  158. package/lib/network/peers/discover.js.map +1 -1
  159. package/lib/node/nodejs.d.ts +6 -3
  160. package/lib/node/nodejs.d.ts.map +1 -1
  161. package/lib/node/nodejs.js +30 -12
  162. package/lib/node/nodejs.js.map +1 -1
  163. package/lib/node/notifier.d.ts.map +1 -1
  164. package/lib/node/notifier.js +0 -13
  165. package/lib/node/notifier.js.map +1 -1
  166. package/lib/node/options.d.ts +0 -2
  167. package/lib/node/options.d.ts.map +1 -1
  168. package/lib/node/options.js +0 -2
  169. package/lib/node/options.js.map +1 -1
  170. package/lib/node/utils/interop/deposits.d.ts +2 -1
  171. package/lib/node/utils/interop/deposits.d.ts.map +1 -1
  172. package/lib/node/utils/interop/deposits.js.map +1 -1
  173. package/lib/node/utils/interop/state.d.ts +1 -1
  174. package/lib/node/utils/interop/state.d.ts.map +1 -1
  175. package/lib/node/utils/state.d.ts +1 -7
  176. package/lib/node/utils/state.d.ts.map +1 -1
  177. package/lib/node/utils/state.js +1 -14
  178. package/lib/node/utils/state.js.map +1 -1
  179. package/lib/sync/backfill/backfill.js +2 -2
  180. package/lib/sync/backfill/backfill.js.map +1 -1
  181. package/lib/sync/backfill/verify.d.ts +2 -2
  182. package/lib/sync/backfill/verify.d.ts.map +1 -1
  183. package/lib/sync/backfill/verify.js +2 -2
  184. package/lib/sync/backfill/verify.js.map +1 -1
  185. package/lib/util/workerEvents.d.ts +1 -6
  186. package/lib/util/workerEvents.d.ts.map +1 -1
  187. package/lib/util/workerEvents.js +8 -8
  188. package/lib/util/workerEvents.js.map +1 -1
  189. package/package.json +28 -27
  190. package/src/api/impl/beacon/blocks/utils.ts +1 -1
  191. package/src/api/impl/beacon/state/index.ts +4 -5
  192. package/src/api/impl/validator/index.ts +1 -1
  193. package/src/chain/blocks/verifyBlock.ts +3 -24
  194. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -161
  195. package/src/chain/blocks/verifyBlocksSignatures.ts +15 -4
  196. package/src/chain/chain.ts +35 -69
  197. package/src/chain/initState.ts +1 -97
  198. package/src/chain/interface.ts +4 -8
  199. package/src/chain/opPools/aggregatedAttestationPool.ts +9 -184
  200. package/src/chain/opPools/opPool.ts +8 -8
  201. package/src/chain/options.ts +0 -6
  202. package/src/chain/prepareNextSlot.ts +2 -29
  203. package/src/chain/produceBlock/produceBlockBody.ts +34 -133
  204. package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
  205. package/src/chain/validation/aggregateAndProof.ts +12 -0
  206. package/src/chain/validation/attesterSlashing.ts +14 -2
  207. package/src/chain/validation/blobSidecar.ts +11 -3
  208. package/src/chain/validation/block.ts +1 -1
  209. package/src/chain/validation/blsToExecutionChange.ts +10 -8
  210. package/src/chain/validation/dataColumnSidecar.ts +8 -3
  211. package/src/chain/validation/proposerSlashing.ts +8 -2
  212. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  213. package/src/chain/validation/signatureSets/contributionAndProof.ts +6 -3
  214. package/src/chain/validation/signatureSets/syncCommittee.ts +6 -2
  215. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
  216. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +5 -2
  217. package/src/chain/validation/syncCommittee.ts +1 -1
  218. package/src/chain/validation/syncCommitteeContributionAndProof.ts +10 -6
  219. package/src/chain/validation/voluntaryExit.ts +1 -1
  220. package/src/db/beacon.ts +38 -16
  221. package/src/db/buckets.ts +12 -7
  222. package/src/db/interface.ts +2 -13
  223. package/src/db/repositories/index.ts +0 -3
  224. package/src/execution/engine/http.ts +12 -21
  225. package/src/execution/engine/index.ts +1 -1
  226. package/src/execution/engine/interface.ts +1 -1
  227. package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
  228. package/src/execution/engine/mock.ts +44 -30
  229. package/src/execution/engine/payloadIdCache.ts +1 -1
  230. package/src/execution/engine/types.ts +9 -9
  231. package/src/execution/engine/utils.ts +111 -5
  232. package/src/index.ts +1 -2
  233. package/src/metrics/metrics/lodestar.ts +0 -144
  234. package/src/network/core/events.ts +1 -1
  235. package/src/network/events.ts +7 -1
  236. package/src/network/peers/discover.ts +3 -3
  237. package/src/node/nodejs.ts +37 -13
  238. package/src/node/notifier.ts +0 -16
  239. package/src/node/options.ts +0 -3
  240. package/src/node/utils/interop/deposits.ts +3 -1
  241. package/src/node/utils/interop/state.ts +1 -1
  242. package/src/node/utils/state.ts +3 -18
  243. package/src/sync/backfill/backfill.ts +2 -2
  244. package/src/sync/backfill/verify.ts +4 -3
  245. package/src/util/workerEvents.ts +9 -8
  246. package/lib/chain/genesis/genesis.d.ts +0 -51
  247. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  248. package/lib/chain/genesis/genesis.js +0 -123
  249. package/lib/chain/genesis/genesis.js.map +0 -1
  250. package/lib/chain/genesis/interface.d.ts +0 -13
  251. package/lib/chain/genesis/interface.d.ts.map +0 -1
  252. package/lib/chain/genesis/interface.js +0 -2
  253. package/lib/chain/genesis/interface.js.map +0 -1
  254. package/lib/chain/rewards/attestationsRewards.d.ts +0 -7
  255. package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
  256. package/lib/chain/rewards/attestationsRewards.js +0 -112
  257. package/lib/chain/rewards/attestationsRewards.js.map +0 -1
  258. package/lib/chain/rewards/blockRewards.d.ts +0 -14
  259. package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
  260. package/lib/chain/rewards/blockRewards.js +0 -94
  261. package/lib/chain/rewards/blockRewards.js.map +0 -1
  262. package/lib/chain/rewards/syncCommitteeRewards.d.ts +0 -6
  263. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
  264. package/lib/chain/rewards/syncCommitteeRewards.js +0 -37
  265. package/lib/chain/rewards/syncCommitteeRewards.js.map +0 -1
  266. package/lib/db/repositories/depositDataRoot.d.ts +0 -22
  267. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  268. package/lib/db/repositories/depositDataRoot.js +0 -62
  269. package/lib/db/repositories/depositDataRoot.js.map +0 -1
  270. package/lib/db/repositories/depositEvent.d.ts +0 -13
  271. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  272. package/lib/db/repositories/depositEvent.js +0 -27
  273. package/lib/db/repositories/depositEvent.js.map +0 -1
  274. package/lib/db/repositories/eth1Data.d.ts +0 -13
  275. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  276. package/lib/db/repositories/eth1Data.js +0 -26
  277. package/lib/db/repositories/eth1Data.js.map +0 -1
  278. package/lib/db/single/index.d.ts +0 -3
  279. package/lib/db/single/index.d.ts.map +0 -1
  280. package/lib/db/single/index.js +0 -3
  281. package/lib/db/single/index.js.map +0 -1
  282. package/lib/db/single/preGenesisState.d.ts +0 -16
  283. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  284. package/lib/db/single/preGenesisState.js +0 -29
  285. package/lib/db/single/preGenesisState.js.map +0 -1
  286. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
  287. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  288. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
  289. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
  290. package/lib/eth1/errors.d.ts +0 -66
  291. package/lib/eth1/errors.d.ts.map +0 -1
  292. package/lib/eth1/errors.js +0 -27
  293. package/lib/eth1/errors.js.map +0 -1
  294. package/lib/eth1/eth1DataCache.d.ts +0 -19
  295. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  296. package/lib/eth1/eth1DataCache.js +0 -19
  297. package/lib/eth1/eth1DataCache.js.map +0 -1
  298. package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
  299. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  300. package/lib/eth1/eth1DepositDataTracker.js +0 -317
  301. package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
  302. package/lib/eth1/eth1DepositsCache.d.ts +0 -42
  303. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  304. package/lib/eth1/eth1DepositsCache.js +0 -119
  305. package/lib/eth1/eth1DepositsCache.js.map +0 -1
  306. package/lib/eth1/eth1MergeBlockTracker.d.ts +0 -65
  307. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  308. package/lib/eth1/eth1MergeBlockTracker.js +0 -262
  309. package/lib/eth1/eth1MergeBlockTracker.js.map +0 -1
  310. package/lib/eth1/index.d.ts +0 -46
  311. package/lib/eth1/index.d.ts.map +0 -1
  312. package/lib/eth1/index.js +0 -121
  313. package/lib/eth1/index.js.map +0 -1
  314. package/lib/eth1/interface.d.ts +0 -112
  315. package/lib/eth1/interface.d.ts.map +0 -1
  316. package/lib/eth1/interface.js +0 -8
  317. package/lib/eth1/interface.js.map +0 -1
  318. package/lib/eth1/options.d.ts +0 -22
  319. package/lib/eth1/options.d.ts.map +0 -1
  320. package/lib/eth1/options.js +0 -8
  321. package/lib/eth1/options.js.map +0 -1
  322. package/lib/eth1/provider/eth1Provider.d.ts +0 -39
  323. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  324. package/lib/eth1/provider/eth1Provider.js +0 -147
  325. package/lib/eth1/provider/eth1Provider.js.map +0 -1
  326. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  327. package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
  328. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  329. package/lib/eth1/provider/jwt.js.map +0 -1
  330. package/lib/eth1/provider/utils.d.ts +0 -65
  331. package/lib/eth1/provider/utils.d.ts.map +0 -1
  332. package/lib/eth1/provider/utils.js +0 -120
  333. package/lib/eth1/provider/utils.js.map +0 -1
  334. package/lib/eth1/stream.d.ts +0 -15
  335. package/lib/eth1/stream.d.ts.map +0 -1
  336. package/lib/eth1/stream.js +0 -54
  337. package/lib/eth1/stream.js.map +0 -1
  338. package/lib/eth1/utils/depositContract.d.ts +0 -14
  339. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  340. package/lib/eth1/utils/depositContract.js +0 -33
  341. package/lib/eth1/utils/depositContract.js.map +0 -1
  342. package/lib/eth1/utils/deposits.d.ts +0 -8
  343. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  344. package/lib/eth1/utils/deposits.js +0 -47
  345. package/lib/eth1/utils/deposits.js.map +0 -1
  346. package/lib/eth1/utils/eth1Data.d.ts +0 -22
  347. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  348. package/lib/eth1/utils/eth1Data.js +0 -77
  349. package/lib/eth1/utils/eth1Data.js.map +0 -1
  350. package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
  351. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  352. package/lib/eth1/utils/eth1DepositEvent.js +0 -13
  353. package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
  354. package/lib/eth1/utils/eth1Vote.d.ts +0 -17
  355. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  356. package/lib/eth1/utils/eth1Vote.js +0 -111
  357. package/lib/eth1/utils/eth1Vote.js.map +0 -1
  358. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
  359. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  360. package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
  361. package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
  362. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
  363. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  364. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
  365. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
  366. package/src/chain/genesis/genesis.ts +0 -190
  367. package/src/chain/genesis/interface.ts +0 -14
  368. package/src/chain/rewards/attestationsRewards.ts +0 -196
  369. package/src/chain/rewards/blockRewards.ts +0 -150
  370. package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
  371. package/src/db/repositories/depositDataRoot.ts +0 -80
  372. package/src/db/repositories/depositEvent.ts +0 -32
  373. package/src/db/repositories/eth1Data.ts +0 -33
  374. package/src/db/single/index.ts +0 -2
  375. package/src/db/single/preGenesisState.ts +0 -37
  376. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  377. package/src/eth1/errors.ts +0 -40
  378. package/src/eth1/eth1DataCache.ts +0 -26
  379. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  380. package/src/eth1/eth1DepositsCache.ts +0 -141
  381. package/src/eth1/eth1MergeBlockTracker.ts +0 -328
  382. package/src/eth1/index.ts +0 -157
  383. package/src/eth1/interface.ts +0 -131
  384. package/src/eth1/options.ts +0 -28
  385. package/src/eth1/provider/eth1Provider.ts +0 -229
  386. package/src/eth1/provider/utils.ts +0 -136
  387. package/src/eth1/stream.ts +0 -75
  388. package/src/eth1/utils/depositContract.ts +0 -37
  389. package/src/eth1/utils/deposits.ts +0 -70
  390. package/src/eth1/utils/eth1Data.ts +0 -100
  391. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  392. package/src/eth1/utils/eth1Vote.ts +0 -142
  393. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  394. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  395. /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
  396. /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
  397. /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
  398. /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
@@ -17,10 +17,8 @@ import {
17
17
  CachedBeaconStateCapella,
18
18
  CachedBeaconStateExecutions,
19
19
  computeTimeAtSlot,
20
- getCurrentEpoch,
21
20
  getExpectedWithdrawals,
22
21
  getRandaoMix,
23
- isMergeTransitionComplete,
24
22
  } from "@lodestar/state-transition";
25
23
  import {
26
24
  BLSPubkey,
@@ -44,13 +42,10 @@ import {
44
42
  deneb,
45
43
  electra,
46
44
  fulu,
47
- ssz,
48
- sszTypesFor,
49
45
  } from "@lodestar/types";
50
46
  import {Logger, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
51
- import {ZERO_HASH, ZERO_HASH_HEX} from "../../constants/index.js";
52
- import {IEth1ForBlockProduction} from "../../eth1/index.js";
53
- import {numToQuantity} from "../../eth1/provider/utils.js";
47
+ import {ZERO_HASH_HEX} from "../../constants/index.js";
48
+ import {numToQuantity} from "../../execution/engine/utils.js";
54
49
  import {
55
50
  IExecutionBuilder,
56
51
  IExecutionEngine,
@@ -83,7 +78,6 @@ export enum BlockProductionStep {
83
78
  voluntaryExits = "voluntaryExits",
84
79
  blsToExecutionChanges = "blsToExecutionChanges",
85
80
  attestations = "attestations",
86
- eth1DataAndDeposits = "eth1DataAndDeposits",
87
81
  syncAggregate = "syncAggregate",
88
82
  executionPayload = "executionPayload",
89
83
  }
@@ -171,7 +165,7 @@ export async function produceBlockBody<T extends BlockType>(
171
165
  // even though shouldOverrideBuilder is relevant for the engine response, for simplicity of typing
172
166
  // we just return it undefined for the builder which anyway doesn't get consumed downstream
173
167
  let shouldOverrideBuilder: boolean | undefined;
174
- const fork = currentState.config.getForkName(blockSlot);
168
+ const fork = this.config.getForkName(blockSlot);
175
169
  const produceResult = {
176
170
  type: blockType,
177
171
  fork,
@@ -337,14 +331,6 @@ export async function produceBlockBody<T extends BlockType>(
337
331
  feeRecipient
338
332
  );
339
333
 
340
- if (prepareRes.isPremerge) {
341
- return {
342
- ...prepareRes,
343
- executionPayload: sszTypesFor(fork).ExecutionPayload.defaultValue(),
344
- executionPayloadValue: BigInt(0),
345
- };
346
- }
347
-
348
334
  const {prepType, payloadId} = prepareRes;
349
335
  Object.assign(logMeta, {executionPayloadPrepType: prepType});
350
336
 
@@ -366,37 +352,14 @@ export async function produceBlockBody<T extends BlockType>(
366
352
 
367
353
  return {...prepareRes, ...payloadRes};
368
354
  })().catch((e) => {
369
- // catch payload fetch here, because there is still a recovery path possible if we
370
- // are pre-merge. We don't care the same for builder segment as the execution block
371
- // will takeover if the builder flow was activated and errors
372
355
  this.metrics?.blockPayload.payloadFetchErrors.inc();
373
-
374
- if (!isMergeTransitionComplete(currentState as CachedBeaconStateBellatrix)) {
375
- this.logger?.warn(
376
- "Fetch payload from the execution failed, however since we are still pre-merge proceeding with an empty one.",
377
- {},
378
- e as Error
379
- );
380
- // ok we don't have an execution payload here, so we can assign an empty one
381
- // if pre-merge
382
- return {
383
- isPremerge: true as const,
384
- executionPayload: sszTypesFor(fork).ExecutionPayload.defaultValue(),
385
- executionPayloadValue: BigInt(0),
386
- };
387
- }
388
- // since merge transition is complete, we need a valid payload even if with an
389
- // empty (transactions) one. defaultValue isn't gonna cut it!
390
356
  throw e;
391
357
  });
392
358
 
393
359
  const [engineRes, commonBlockBody] = await Promise.all([enginePromise, commonBlockBodyPromise]);
394
360
  blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<BlockType.Blinded>;
395
361
 
396
- if (engineRes.isPremerge) {
397
- (blockBody as BeaconBlockBody<ForkPostBellatrix & ForkPreGloas>).executionPayload = engineRes.executionPayload;
398
- executionPayloadValue = engineRes.executionPayloadValue;
399
- } else {
362
+ {
400
363
  const {prepType, payloadId, executionPayload, blobsBundle, executionRequests} = engineRes;
401
364
  shouldOverrideBuilder = engineRes.shouldOverrideBuilder;
402
365
 
@@ -504,15 +467,10 @@ export async function produceBlockBody<T extends BlockType>(
504
467
  }
505
468
 
506
469
  /**
507
- * Produce ExecutionPayload for pre-merge, merge, and post-merge.
508
- *
509
- * Expects `eth1MergeBlockFinder` to be actively searching for blocks well in advance to being called.
510
- *
511
- * @returns PayloadId = pow block found, null = pow NOT found
470
+ * Produce ExecutionPayload for post-merge.
512
471
  */
513
472
  export async function prepareExecutionPayload(
514
473
  chain: {
515
- eth1: IEth1ForBlockProduction;
516
474
  executionEngine: IExecutionEngine;
517
475
  config: ChainForkConfig;
518
476
  },
@@ -523,14 +481,8 @@ export async function prepareExecutionPayload(
523
481
  finalizedBlockHash: RootHex,
524
482
  state: CachedBeaconStateExecutions,
525
483
  suggestedFeeRecipient: string
526
- ): Promise<{isPremerge: true} | {isPremerge: false; prepType: PayloadPreparationType; payloadId: PayloadId}> {
527
- const parentHashRes = await getExecutionPayloadParentHash(chain, state);
528
- if (parentHashRes.isPremerge) {
529
- // Return null only if the execution is pre-merge
530
- return {isPremerge: true};
531
- }
532
-
533
- const {parentHash} = parentHashRes;
484
+ ): Promise<{prepType: PayloadPreparationType; payloadId: PayloadId}> {
485
+ const parentHash = state.latestExecutionPayloadHeader.blockHash;
534
486
  const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
535
487
  const prevRandao = getRandaoMix(state, state.epochCtx.epoch);
536
488
 
@@ -586,12 +538,11 @@ export async function prepareExecutionPayload(
586
538
  // We are only returning payloadId here because prepareExecutionPayload is also called from
587
539
  // prepareNextSlot, which is an advance call to execution engine to start building payload
588
540
  // Actual payload isn't produced till getPayload is called.
589
- return {isPremerge: false, payloadId, prepType};
541
+ return {payloadId, prepType};
590
542
  }
591
543
 
592
544
  async function prepareExecutionPayloadHeader(
593
545
  chain: {
594
- eth1: IEth1ForBlockProduction;
595
546
  executionBuilder?: IExecutionBuilder;
596
547
  config: ChainForkConfig;
597
548
  },
@@ -608,53 +559,13 @@ async function prepareExecutionPayloadHeader(
608
559
  throw Error("executionBuilder required");
609
560
  }
610
561
 
611
- const parentHashRes = await getExecutionPayloadParentHash(chain, state);
612
- if (parentHashRes.isPremerge) {
613
- throw Error("External builder disabled pre-merge");
614
- }
615
-
616
- const {parentHash} = parentHashRes;
562
+ const parentHash = state.latestExecutionPayloadHeader.blockHash;
617
563
  return chain.executionBuilder.getHeader(fork, state.slot, parentHash, proposerPubKey);
618
564
  }
619
565
 
620
- export async function getExecutionPayloadParentHash(
621
- chain: {
622
- eth1: IEth1ForBlockProduction;
623
- config: ChainForkConfig;
624
- },
625
- state: CachedBeaconStateExecutions
626
- ): Promise<{isPremerge: true} | {isPremerge: false; parentHash: Root}> {
627
- // Use different POW block hash parent for block production based on merge status.
628
- // Returned value of null == using an empty ExecutionPayload value
629
- if (isMergeTransitionComplete(state)) {
630
- // Post-merge, normal payload
631
- return {isPremerge: false, parentHash: state.latestExecutionPayloadHeader.blockHash};
632
- }
633
-
634
- if (
635
- !ssz.Root.equals(chain.config.TERMINAL_BLOCK_HASH, ZERO_HASH) &&
636
- getCurrentEpoch(state) < chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
637
- ) {
638
- throw new Error(
639
- `InvalidMergeTBH epoch: expected >= ${
640
- chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
641
- }, actual: ${getCurrentEpoch(state)}`
642
- );
643
- }
644
-
645
- const terminalPowBlockHash = await chain.eth1.getTerminalPowBlock();
646
- if (terminalPowBlockHash === null) {
647
- // Pre-merge, no prepare payload call is needed
648
- return {isPremerge: true};
649
- }
650
- // Signify merge via producing on top of the last PoW block
651
- return {isPremerge: false, parentHash: terminalPowBlockHash};
652
- }
653
-
654
- export async function getPayloadAttributesForSSE(
566
+ export function getPayloadAttributesForSSE(
655
567
  fork: ForkPostBellatrix,
656
568
  chain: {
657
- eth1: IEth1ForBlockProduction;
658
569
  config: ChainForkConfig;
659
570
  },
660
571
  {
@@ -663,30 +574,23 @@ export async function getPayloadAttributesForSSE(
663
574
  parentBlockRoot,
664
575
  feeRecipient,
665
576
  }: {prepareState: CachedBeaconStateExecutions; prepareSlot: Slot; parentBlockRoot: Root; feeRecipient: string}
666
- ): Promise<SSEPayloadAttributes> {
667
- const parentHashRes = await getExecutionPayloadParentHash(chain, prepareState);
668
-
669
- if (!parentHashRes.isPremerge) {
670
- const {parentHash} = parentHashRes;
671
- const payloadAttributes = preparePayloadAttributes(fork, chain, {
672
- prepareState,
673
- prepareSlot,
674
- parentBlockRoot,
675
- feeRecipient,
676
- });
677
-
678
- const ssePayloadAttributes: SSEPayloadAttributes = {
679
- proposerIndex: prepareState.epochCtx.getBeaconProposer(prepareSlot),
680
- proposalSlot: prepareSlot,
681
- parentBlockNumber: prepareState.latestExecutionPayloadHeader.blockNumber,
682
- parentBlockRoot,
683
- parentBlockHash: parentHash,
684
- payloadAttributes,
685
- };
686
- return ssePayloadAttributes;
687
- }
688
-
689
- throw Error("The execution is still pre-merge");
577
+ ): SSEPayloadAttributes {
578
+ const parentHash = prepareState.latestExecutionPayloadHeader.blockHash;
579
+ const payloadAttributes = preparePayloadAttributes(fork, chain, {
580
+ prepareState,
581
+ prepareSlot,
582
+ parentBlockRoot,
583
+ feeRecipient,
584
+ });
585
+ const ssePayloadAttributes: SSEPayloadAttributes = {
586
+ proposerIndex: prepareState.epochCtx.getBeaconProposer(prepareSlot),
587
+ proposalSlot: prepareSlot,
588
+ parentBlockNumber: prepareState.latestExecutionPayloadHeader.blockNumber,
589
+ parentBlockRoot,
590
+ parentBlockHash: parentHash,
591
+ payloadAttributes,
592
+ };
593
+ return ssePayloadAttributes;
690
594
  }
691
595
 
692
596
  function preparePayloadAttributes(
@@ -719,7 +623,7 @@ function preparePayloadAttributes(
719
623
  (payloadAttributes as capella.SSEPayloadAttributes["payloadAttributes"]).withdrawals = getExpectedWithdrawals(
720
624
  ForkSeq[fork],
721
625
  prepareState as CachedBeaconStateCapella
722
- ).withdrawals;
626
+ ).expectedWithdrawals;
723
627
  }
724
628
 
725
629
  if (ForkSeq[fork] >= ForkSeq.deneb) {
@@ -740,7 +644,7 @@ export async function produceCommonBlockBody<T extends BlockType>(
740
644
  ? this.metrics?.executionBlockProductionTimeSteps
741
645
  : this.metrics?.builderBlockProductionTimeSteps;
742
646
 
743
- const fork = currentState.config.getForkName(slot);
647
+ const fork = this.config.getForkName(slot);
744
648
 
745
649
  // TODO:
746
650
  // Iterate through the naive aggregation pool and ensure all the attestations from there
@@ -762,20 +666,17 @@ export async function produceCommonBlockBody<T extends BlockType>(
762
666
  step: BlockProductionStep.attestations,
763
667
  });
764
668
 
765
- const endEth1DataAndDeposits = stepsMetrics?.startTimer();
766
- const {eth1Data, deposits} = await this.eth1.getEth1DataAndDeposits(currentState);
767
- endEth1DataAndDeposits?.({
768
- step: BlockProductionStep.eth1DataAndDeposits,
769
- });
770
-
771
669
  const blockBody: Omit<CommonBlockBody, "blsToExecutionChanges" | "syncAggregate"> = {
772
670
  randaoReveal,
773
671
  graffiti,
774
- eth1Data,
672
+ // Eth1 data voting is no longer required since electra
673
+ eth1Data: currentState.eth1Data,
775
674
  proposerSlashings,
776
675
  attesterSlashings,
777
676
  attestations,
778
- deposits,
677
+ // Since electra, deposits are processed by the execution layer,
678
+ // we no longer support handling deposits from earlier forks.
679
+ deposits: [],
779
680
  voluntaryExits,
780
681
  };
781
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,
@@ -43,7 +43,14 @@ export async function validateAttesterSlashing(
43
43
  // [REJECT] All of the conditions within process_attester_slashing pass validation.
44
44
  try {
45
45
  // verifySignature = false, verified in batch below
46
- assertValidAttesterSlashing(state, attesterSlashing, false);
46
+ assertValidAttesterSlashing(
47
+ chain.config,
48
+ chain.index2pubkey,
49
+ state.slot,
50
+ state.validators.length,
51
+ attesterSlashing,
52
+ false
53
+ );
47
54
  } catch (e) {
48
55
  throw new AttesterSlashingError(GossipAction.REJECT, {
49
56
  code: AttesterSlashingErrorCode.INVALID,
@@ -51,7 +58,12 @@ export async function validateAttesterSlashing(
51
58
  });
52
59
  }
53
60
 
54
- const signatureSets = getAttesterSlashingSignatureSets(state, attesterSlashing);
61
+ const signatureSets = getAttesterSlashingSignatureSets(
62
+ chain.config,
63
+ chain.index2pubkey,
64
+ state.slot,
65
+ attesterSlashing
66
+ );
55
67
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
56
68
  throw new AttesterSlashingError(GossipAction.REJECT, {
57
69
  code: AttesterSlashingErrorCode.INVALID,
@@ -137,7 +137,12 @@ export async function validateGossipBlobSidecar(
137
137
  // [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
138
138
  const signature = blobSidecar.signedBlockHeader.signature;
139
139
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blobSlot, blockHex, signature)) {
140
- const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(blockState, blobSidecar.signedBlockHeader);
140
+ const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
141
+ chain.config,
142
+ chain.index2pubkey,
143
+ blockState.slot,
144
+ blobSidecar.signedBlockHeader
145
+ );
141
146
  // Don't batch so verification is not delayed
142
147
  if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
143
148
  throw new BlobSidecarGossipError(GossipAction.REJECT, {
@@ -239,8 +244,11 @@ export async function validateBlockBlobSidecars(
239
244
  const blockRootHex = toRootHex(blockRoot);
240
245
  const signature = firstSidecarSignedBlockHeader.signature;
241
246
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRootHex, signature)) {
242
- const headState = await chain.getHeadState();
243
- const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(headState, firstSidecarSignedBlockHeader);
247
+ const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
248
+ chain.config,
249
+ chain.index2pubkey,
250
+ firstSidecarSignedBlockHeader
251
+ );
244
252
 
245
253
  if (
246
254
  !(await chain.bls.verifySignatureSets([signatureSet], {
@@ -154,7 +154,7 @@ export async function validateGossipBlock(
154
154
 
155
155
  // [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
156
156
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
157
- const signatureSet = getBlockProposerSignatureSet(blockState, signedBlock);
157
+ const signatureSet = getBlockProposerSignatureSet(chain.config, chain.index2pubkey, signedBlock);
158
158
  // Don't batch so verification is not delayed
159
159
  if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
160
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,7 +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
- blockState,
138
+ chain.config,
139
+ chain.index2pubkey,
140
+ blockState.slot,
139
141
  dataColumnSidecar.signedBlockHeader
140
142
  );
141
143
 
@@ -335,8 +337,11 @@ export async function validateBlockDataColumnSidecars(
335
337
  const slot = firstSidecarSignedBlockHeader.message.slot;
336
338
  const signature = firstSidecarSignedBlockHeader.signature;
337
339
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(slot, rootHex, signature)) {
338
- const headState = await chain.getHeadState();
339
- const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(headState, firstSidecarSignedBlockHeader);
340
+ const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
341
+ chain.config,
342
+ chain.index2pubkey,
343
+ firstSidecarSignedBlockHeader
344
+ );
340
345
 
341
346
  if (
342
347
  !(await chain.bls.verifySignatureSets([signatureSet], {
@@ -35,8 +35,9 @@ async function validateProposerSlashing(
35
35
 
36
36
  // [REJECT] All of the conditions within process_proposer_slashing pass validation.
37
37
  try {
38
+ const proposer = state.validators.getReadonly(proposerSlashing.signedHeader1.message.proposerIndex);
38
39
  // verifySignature = false, verified in batch below
39
- assertValidProposerSlashing(state, proposerSlashing, false);
40
+ assertValidProposerSlashing(chain.config, chain.index2pubkey, state.slot, proposerSlashing, proposer, false);
40
41
  } catch (e) {
41
42
  throw new ProposerSlashingError(GossipAction.REJECT, {
42
43
  code: ProposerSlashingErrorCode.INVALID,
@@ -44,7 +45,12 @@ async function validateProposerSlashing(
44
45
  });
45
46
  }
46
47
 
47
- const signatureSets = getProposerSlashingSignatureSets(state, proposerSlashing);
48
+ const signatureSets = getProposerSlashingSignatureSets(
49
+ chain.config,
50
+ chain.index2pubkey,
51
+ state.slot,
52
+ proposerSlashing
53
+ );
48
54
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
49
55
  throw new ProposerSlashingError(GossipAction.REJECT, {
50
56
  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,18 +1,21 @@
1
+ import {BeaconConfig} from "@lodestar/config";
1
2
  import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
2
3
  import {
3
4
  CachedBeaconStateAllForks,
4
5
  ISignatureSet,
6
+ Index2PubkeyCache,
5
7
  SignatureSetType,
6
8
  computeSigningRoot,
7
9
  } from "@lodestar/state-transition";
8
10
  import {altair, ssz} from "@lodestar/types";
9
11
 
10
12
  export function getContributionAndProofSignatureSet(
13
+ config: BeaconConfig,
14
+ index2pubkey: Index2PubkeyCache,
11
15
  state: CachedBeaconStateAllForks,
12
16
  signedContributionAndProof: altair.SignedContributionAndProof
13
17
  ): ISignatureSet {
14
- const {epochCtx} = state;
15
- const domain = state.config.getDomain(
18
+ const domain = config.getDomain(
16
19
  state.slot,
17
20
  DOMAIN_CONTRIBUTION_AND_PROOF,
18
21
  signedContributionAndProof.message.contribution.slot
@@ -20,7 +23,7 @@ export function getContributionAndProofSignatureSet(
20
23
  const signingData = signedContributionAndProof.message;
21
24
  return {
22
25
  type: SignatureSetType.single,
23
- pubkey: epochCtx.index2pubkey[signedContributionAndProof.message.aggregatorIndex],
26
+ pubkey: index2pubkey[signedContributionAndProof.message.aggregatorIndex],
24
27
  signingRoot: computeSigningRoot(ssz.altair.ContributionAndProof, signingData, domain),
25
28
  signature: signedContributionAndProof.signature,
26
29
  };
@@ -1,21 +1,25 @@
1
+ import {BeaconConfig} from "@lodestar/config";
1
2
  import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
2
3
  import {
3
4
  CachedBeaconStateAllForks,
4
5
  ISignatureSet,
6
+ Index2PubkeyCache,
5
7
  SignatureSetType,
6
8
  computeSigningRoot,
7
9
  } from "@lodestar/state-transition";
8
10
  import {altair, ssz} from "@lodestar/types";
9
11
 
10
12
  export function getSyncCommitteeSignatureSet(
13
+ config: BeaconConfig,
14
+ index2pubkey: Index2PubkeyCache,
11
15
  state: CachedBeaconStateAllForks,
12
16
  syncCommittee: altair.SyncCommitteeMessage
13
17
  ): ISignatureSet {
14
- const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
18
+ const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
15
19
 
16
20
  return {
17
21
  type: SignatureSetType.single,
18
- pubkey: state.epochCtx.index2pubkey[syncCommittee.validatorIndex],
22
+ pubkey: index2pubkey[syncCommittee.validatorIndex],
19
23
  signingRoot: computeSigningRoot(ssz.Root, syncCommittee.beaconBlockRoot, domain),
20
24
  signature: syncCommittee.signature,
21
25
  };
@@ -1,14 +1,16 @@
1
1
  import {PublicKey} from "@chainsafe/blst";
2
+ import {BeaconConfig} from "@lodestar/config";
2
3
  import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
3
4
  import {CachedBeaconStateAltair, ISignatureSet, SignatureSetType, computeSigningRoot} from "@lodestar/state-transition";
4
5
  import {altair, ssz} from "@lodestar/types";
5
6
 
6
7
  export function getSyncCommitteeContributionSignatureSet(
8
+ config: BeaconConfig,
7
9
  state: CachedBeaconStateAltair,
8
10
  contribution: altair.SyncCommitteeContribution,
9
11
  pubkeys: PublicKey[]
10
12
  ): ISignatureSet {
11
- const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
13
+ const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
12
14
  return {
13
15
  type: SignatureSetType.aggregate,
14
16
  pubkeys,
@@ -1,17 +1,20 @@
1
+ import {BeaconConfig} from "@lodestar/config";
1
2
  import {DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF} from "@lodestar/params";
2
3
  import {
3
4
  CachedBeaconStateAllForks,
4
5
  ISignatureSet,
6
+ Index2PubkeyCache,
5
7
  SignatureSetType,
6
8
  computeSigningRoot,
7
9
  } from "@lodestar/state-transition";
8
10
  import {altair, ssz} from "@lodestar/types";
9
11
 
10
12
  export function getSyncCommitteeSelectionProofSignatureSet(
13
+ config: BeaconConfig,
14
+ index2pubkey: Index2PubkeyCache,
11
15
  state: CachedBeaconStateAllForks,
12
16
  contributionAndProof: altair.ContributionAndProof
13
17
  ): ISignatureSet {
14
- const {epochCtx, config} = state;
15
18
  const slot = contributionAndProof.contribution.slot;
16
19
  const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF, slot);
17
20
  const signingData: altair.SyncAggregatorSelectionData = {
@@ -20,7 +23,7 @@ export function getSyncCommitteeSelectionProofSignatureSet(
20
23
  };
21
24
  return {
22
25
  type: SignatureSetType.single,
23
- pubkey: epochCtx.index2pubkey[contributionAndProof.aggregatorIndex],
26
+ pubkey: index2pubkey[contributionAndProof.aggregatorIndex],
24
27
  signingRoot: computeSigningRoot(ssz.altair.SyncAggregatorSelectionData, signingData, domain),
25
28
  signature: contributionAndProof.selectionProof,
26
29
  };
@@ -89,7 +89,7 @@ async function validateSyncCommitteeSigOnly(
89
89
  syncCommittee: altair.SyncCommitteeMessage,
90
90
  prioritizeBls = false
91
91
  ): Promise<void> {
92
- const signatureSet = getSyncCommitteeSignatureSet(headState, syncCommittee);
92
+ const signatureSet = getSyncCommitteeSignatureSet(chain.config, chain.index2pubkey, headState, syncCommittee);
93
93
  if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
94
94
  throw new SyncCommitteeError(GossipAction.REJECT, {
95
95
  code: SyncCommitteeErrorCode.INVALID_SIGNATURE,