@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
@@ -1,3 +1,4 @@
1
+ import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
1
2
  import {routes} from "@lodestar/api";
2
3
  import {BeaconConfig} from "@lodestar/config";
3
4
  import {
@@ -25,7 +26,7 @@ import {
25
26
  hasMarkers,
26
27
  isInInactivityLeak,
27
28
  } from "@lodestar/state-transition";
28
- import {Epoch, ValidatorIndex} from "@lodestar/types";
29
+ import {ValidatorIndex} from "@lodestar/types";
29
30
  import {fromHex} from "@lodestar/utils";
30
31
 
31
32
  export type AttestationsRewards = routes.beacon.AttestationsRewards;
@@ -38,12 +39,12 @@ const defaultAttestationsReward = {head: 0, target: 0, source: 0, inclusionDelay
38
39
  const defaultAttestationsPenalty = {target: 0, source: 0};
39
40
 
40
41
  export async function computeAttestationsRewards(
41
- _epoch: Epoch,
42
+ config: BeaconConfig,
43
+ pubkey2index: PubkeyIndexMap,
42
44
  state: CachedBeaconStateAllForks,
43
- _config: BeaconConfig,
44
45
  validatorIds?: (ValidatorIndex | string)[]
45
46
  ): Promise<AttestationsRewards> {
46
- const fork = state.config.getForkName(state.slot);
47
+ const fork = config.getForkName(state.slot);
47
48
  if (fork === ForkName.phase0) {
48
49
  throw Error("Unsupported fork. Attestations rewards calculation is not available in phase0");
49
50
  }
@@ -51,8 +52,14 @@ export async function computeAttestationsRewards(
51
52
  const stateAltair = state as CachedBeaconStateAltair;
52
53
  const transitionCache = beforeProcessEpoch(stateAltair);
53
54
 
54
- const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(stateAltair, transitionCache);
55
+ const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
56
+ config,
57
+ stateAltair,
58
+ transitionCache
59
+ );
55
60
  const totalRewards = computeTotalAttestationsRewardsAltair(
61
+ config,
62
+ pubkey2index,
56
63
  stateAltair,
57
64
  transitionCache,
58
65
  idealRewards,
@@ -64,12 +71,13 @@ export async function computeAttestationsRewards(
64
71
  }
65
72
 
66
73
  function computeIdealAttestationsRewardsAndPenaltiesAltair(
74
+ config: BeaconConfig,
67
75
  state: CachedBeaconStateAllForks,
68
76
  transitionCache: EpochTransitionCache
69
77
  ): [IdealAttestationsReward[], AttestationsPenalty[]] {
70
78
  const baseRewardPerIncrement = transitionCache.baseRewardPerIncrement;
71
79
  const activeBalanceByIncrement = transitionCache.totalActiveStakeByIncrement;
72
- const fork = state.config.getForkName(state.slot);
80
+ const fork = config.getForkName(state.slot);
73
81
  const maxEffectiveBalance = isForkPostElectra(fork) ? MAX_EFFECTIVE_BALANCE_ELECTRA : MAX_EFFECTIVE_BALANCE;
74
82
  const maxEffectiveBalanceByIncrement = Math.floor(maxEffectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
75
83
 
@@ -139,6 +147,8 @@ function computeIdealAttestationsRewardsAndPenaltiesAltair(
139
147
 
140
148
  // Same calculation as `getRewardsAndPenaltiesAltair` but returns the breakdown of rewards instead of aggregated
141
149
  function computeTotalAttestationsRewardsAltair(
150
+ config: BeaconConfig,
151
+ pubkey2index: PubkeyIndexMap,
142
152
  state: CachedBeaconStateAltair,
143
153
  transitionCache: EpochTransitionCache,
144
154
  idealRewards: IdealAttestationsReward[],
@@ -147,9 +157,9 @@ function computeTotalAttestationsRewardsAltair(
147
157
  ): TotalAttestationsReward[] {
148
158
  const rewards = [];
149
159
  const {flags} = transitionCache;
150
- const {epochCtx, config} = state;
160
+ const {epochCtx} = state;
151
161
  const validatorIndices = validatorIds
152
- .map((id) => (typeof id === "number" ? id : epochCtx.pubkey2index.get(fromHex(id))))
162
+ .map((id) => (typeof id === "number" ? id : pubkey2index.get(fromHex(id))))
153
163
  .filter((index) => index !== undefined); // Validator indices to include in the result
154
164
 
155
165
  const inactivityPenaltyDenominator = config.INACTIVITY_SCORE_BIAS * INACTIVITY_PENALTY_QUOTIENT_ALTAIR;
@@ -1,4 +1,5 @@
1
1
  import {routes} from "@lodestar/api";
2
+ import {BeaconConfig} from "@lodestar/config";
2
3
  import {
3
4
  ForkName,
4
5
  WHISTLEBLOWER_REWARD_QUOTIENT,
@@ -26,11 +27,12 @@ type SubRewardValue = number; // All reward values should be integer
26
27
  * 3) Reporting slashable behaviours from proposer and attester
27
28
  */
28
29
  export async function computeBlockRewards(
30
+ config: BeaconConfig,
29
31
  block: BeaconBlock,
30
32
  preState: CachedBeaconStateAllForks,
31
33
  postState?: CachedBeaconStateAllForks
32
34
  ): Promise<BlockRewards> {
33
- const fork = preState.config.getForkName(block.slot);
35
+ const fork = config.getForkName(block.slot);
34
36
  const {attestations: cachedAttestationsReward = 0, syncAggregate: cachedSyncAggregateReward = 0} =
35
37
  postState?.proposerRewards ?? {};
36
38
  let blockAttestationReward = cachedAttestationsReward;
@@ -40,7 +42,7 @@ export async function computeBlockRewards(
40
42
  blockAttestationReward =
41
43
  fork === ForkName.phase0
42
44
  ? computeBlockAttestationRewardPhase0(block as phase0.BeaconBlock, preState as CachedBeaconStatePhase0)
43
- : computeBlockAttestationRewardAltair(block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
45
+ : computeBlockAttestationRewardAltair(config, block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
44
46
  }
45
47
 
46
48
  if (syncAggregateReward === 0) {
@@ -78,10 +80,11 @@ function computeBlockAttestationRewardPhase0(
78
80
  * Reuses `processAttestationsAltair()`. Has dependency on RewardCache
79
81
  */
80
82
  function computeBlockAttestationRewardAltair(
83
+ config: BeaconConfig,
81
84
  block: altair.BeaconBlock,
82
85
  preState: CachedBeaconStateAltair
83
86
  ): SubRewardValue {
84
- const fork = preState.config.getForkSeq(block.slot);
87
+ const fork = config.getForkSeq(block.slot);
85
88
  const {attestations} = block.body;
86
89
 
87
90
  processAttestationsAltair(fork, preState, attestations, false);
@@ -1,24 +1,26 @@
1
1
  import {routes} from "@lodestar/api";
2
+ import {BeaconConfig} from "@lodestar/config";
2
3
  import {ForkName, SYNC_COMMITTEE_SIZE} from "@lodestar/params";
3
- import {CachedBeaconStateAllForks, CachedBeaconStateAltair} from "@lodestar/state-transition";
4
+ import {CachedBeaconStateAllForks, CachedBeaconStateAltair, Index2PubkeyCache} from "@lodestar/state-transition";
4
5
  import {BeaconBlock, ValidatorIndex, altair} from "@lodestar/types";
5
6
 
6
7
  export type SyncCommitteeRewards = routes.beacon.SyncCommitteeRewards;
7
8
  type BalanceRecord = {val: number}; // Use val for convenient way to increment/decrement balance
8
9
 
9
10
  export async function computeSyncCommitteeRewards(
11
+ config: BeaconConfig,
12
+ index2pubkey: Index2PubkeyCache,
10
13
  block: BeaconBlock,
11
14
  preState: CachedBeaconStateAllForks,
12
15
  validatorIds: (ValidatorIndex | string)[] = []
13
16
  ): Promise<SyncCommitteeRewards> {
14
- const fork = preState.config.getForkName(block.slot);
17
+ const fork = config.getForkName(block.slot);
15
18
  if (fork === ForkName.phase0) {
16
19
  throw Error("Cannot get sync rewards as phase0 block does not have sync committee");
17
20
  }
18
21
 
19
22
  const altairBlock = block as altair.BeaconBlock;
20
23
  const preStateAltair = preState as CachedBeaconStateAltair;
21
- const {index2pubkey} = preStateAltair.epochCtx;
22
24
 
23
25
  // Bound syncCommitteeValidatorIndices in case it goes beyond SYNC_COMMITTEE_SIZE just to be safe
24
26
  const syncCommitteeValidatorIndices = preStateAltair.epochCtx.currentSyncCommitteeIndexed.validatorIndices.slice(
@@ -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,7 @@ 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(chain.index2pubkey, state, attesterSlashing, false);
47
47
  } catch (e) {
48
48
  throw new AttesterSlashingError(GossipAction.REJECT, {
49
49
  code: AttesterSlashingErrorCode.INVALID,
@@ -51,7 +51,12 @@ export async function validateAttesterSlashing(
51
51
  });
52
52
  }
53
53
 
54
- const signatureSets = getAttesterSlashingSignatureSets(state, attesterSlashing);
54
+ const signatureSets = getAttesterSlashingSignatureSets(
55
+ chain.config,
56
+ chain.index2pubkey,
57
+ state.slot,
58
+ attesterSlashing
59
+ );
55
60
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
56
61
  throw new AttesterSlashingError(GossipAction.REJECT, {
57
62
  code: AttesterSlashingErrorCode.INVALID,
@@ -137,7 +137,11 @@ 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.index2pubkey,
142
+ blockState,
143
+ blobSidecar.signedBlockHeader
144
+ );
141
145
  // Don't batch so verification is not delayed
142
146
  if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
143
147
  throw new BlobSidecarGossipError(GossipAction.REJECT, {
@@ -240,7 +244,11 @@ export async function validateBlockBlobSidecars(
240
244
  const signature = firstSidecarSignedBlockHeader.signature;
241
245
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRootHex, signature)) {
242
246
  const headState = await chain.getHeadState();
243
- const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(headState, firstSidecarSignedBlockHeader);
247
+ const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
248
+ chain.index2pubkey,
249
+ headState,
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, {
@@ -41,7 +41,7 @@ async function validateBlsToExecutionChange(
41
41
  // NOTE: No need to advance head state since the signature's fork is handled with `broadcastedOnFork`,
42
42
  // and chanes relevant to `isValidBlsToExecutionChange()` happen only on processBlock(), not processEpoch()
43
43
  const state = chain.getHeadState();
44
- const {config} = state;
44
+ const {config} = chain;
45
45
 
46
46
  // [REJECT] All of the conditions within process_bls_to_execution_change pass validation.
47
47
  // verifySignature = false, verified in batch below
@@ -135,6 +135,7 @@ export async function validateGossipDataColumnSidecar(
135
135
  const signature = dataColumnSidecar.signedBlockHeader.signature;
136
136
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockHeader.slot, blockRootHex, signature)) {
137
137
  const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
138
+ chain.index2pubkey,
138
139
  blockState,
139
140
  dataColumnSidecar.signedBlockHeader
140
141
  );
@@ -336,7 +337,11 @@ export async function validateBlockDataColumnSidecars(
336
337
  const signature = firstSidecarSignedBlockHeader.signature;
337
338
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(slot, rootHex, signature)) {
338
339
  const headState = await chain.getHeadState();
339
- const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(headState, firstSidecarSignedBlockHeader);
340
+ const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
341
+ chain.index2pubkey,
342
+ headState,
343
+ firstSidecarSignedBlockHeader
344
+ );
340
345
 
341
346
  if (
342
347
  !(await chain.bls.verifySignatureSets([signatureSet], {
@@ -44,7 +44,12 @@ async function validateProposerSlashing(
44
44
  });
45
45
  }
46
46
 
47
- const signatureSets = getProposerSlashingSignatureSets(state, proposerSlashing);
47
+ const signatureSets = getProposerSlashingSignatureSets(
48
+ chain.config,
49
+ chain.index2pubkey,
50
+ state.slot,
51
+ proposerSlashing
52
+ );
48
53
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
49
54
  throw new ProposerSlashingError(GossipAction.REJECT, {
50
55
  code: ProposerSlashingErrorCode.INVALID,
@@ -14,7 +14,7 @@ export function getAggregateAndProofSigningRoot(
14
14
  epoch: Epoch,
15
15
  aggregateAndProof: SignedAggregateAndProof
16
16
  ): Uint8Array {
17
- // previously, we call `const aggregatorDomain = state.config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
17
+ // previously, we call `const aggregatorDomain = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
18
18
  // at fork boundary, it's required to dial to target epoch https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L573
19
19
  // instead of that, just use the fork of slot in the attestation data
20
20
  const slot = computeStartSlotAtEpoch(epoch);
@@ -1,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,
@@ -21,6 +21,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
21
21
  const contributionAndProof = signedContributionAndProof.message;
22
22
  const {contribution, aggregatorIndex} = contributionAndProof;
23
23
  const {subcommitteeIndex, slot} = contribution;
24
+ const {index2pubkey} = chain;
24
25
 
25
26
  const headState = chain.getHeadState();
26
27
  validateGossipSyncCommitteeExceptSig(chain, headState, subcommitteeIndex, {
@@ -73,20 +74,23 @@ export async function validateSyncCommitteeGossipContributionAndProof(
73
74
  // i.e. state.validators[contribution_and_proof.aggregator_index].pubkey in get_sync_subcommittee_pubkeys(state, contribution.subcommittee_index).
74
75
  // > Checked in validateGossipSyncCommitteeExceptSig()
75
76
 
76
- const participantPubkeys = syncCommitteeParticipantIndices.map(
77
- (validatorIndex) => headState.epochCtx.index2pubkey[validatorIndex]
78
- );
77
+ const participantPubkeys = syncCommitteeParticipantIndices.map((validatorIndex) => index2pubkey[validatorIndex]);
79
78
  const signatureSets = [
80
79
  // [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData
81
80
  // derived from the contribution by the validator with index contribution_and_proof.aggregator_index.
82
- getSyncCommitteeSelectionProofSignatureSet(headState, contributionAndProof),
81
+ getSyncCommitteeSelectionProofSignatureSet(chain.config, index2pubkey, headState, contributionAndProof),
83
82
 
84
83
  // [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
85
- getContributionAndProofSignatureSet(headState, signedContributionAndProof),
84
+ getContributionAndProofSignatureSet(chain.config, index2pubkey, headState, signedContributionAndProof),
86
85
 
87
86
  // [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
88
87
  // the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
89
- getSyncCommitteeContributionSignatureSet(headState as CachedBeaconStateAltair, contribution, participantPubkeys),
88
+ getSyncCommitteeContributionSignatureSet(
89
+ chain.config,
90
+ headState as CachedBeaconStateAltair,
91
+ contribution,
92
+ participantPubkeys
93
+ ),
90
94
  ];
91
95
 
92
96
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
@@ -59,7 +59,7 @@ async function validateVoluntaryExit(
59
59
  });
60
60
  }
61
61
 
62
- const signatureSet = getVoluntaryExitSignatureSet(state, voluntaryExit);
62
+ const signatureSet = getVoluntaryExitSignatureSet(chain.config, chain.index2pubkey, state.slot, voluntaryExit);
63
63
  if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
64
64
  throw new VoluntaryExitError(GossipAction.REJECT, {
65
65
  code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
package/src/db/beacon.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
- import {Db, LevelDbControllerMetrics} from "@lodestar/db";
2
+ import {Db, LevelDbControllerMetrics, encodeKey} from "@lodestar/db";
3
+ import {Bucket} from "./buckets.js";
3
4
  import {IBeaconDb} from "./interface.js";
4
5
  import {CheckpointStateRepository} from "./repositories/checkpointState.js";
5
6
  import {
@@ -14,16 +15,12 @@ import {
14
15
  CheckpointHeaderRepository,
15
16
  DataColumnSidecarArchiveRepository,
16
17
  DataColumnSidecarRepository,
17
- DepositDataRootRepository,
18
- DepositEventRepository,
19
- Eth1DataRepository,
20
18
  ProposerSlashingRepository,
21
19
  StateArchiveRepository,
22
20
  SyncCommitteeRepository,
23
21
  SyncCommitteeWitnessRepository,
24
22
  VoluntaryExitRepository,
25
23
  } from "./repositories/index.js";
26
- import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
27
24
 
28
25
  export type BeaconDbModules = {
29
26
  config: ChainForkConfig;
@@ -45,14 +42,8 @@ export class BeaconDb implements IBeaconDb {
45
42
  voluntaryExit: VoluntaryExitRepository;
46
43
  proposerSlashing: ProposerSlashingRepository;
47
44
  attesterSlashing: AttesterSlashingRepository;
48
- depositEvent: DepositEventRepository;
49
45
  blsToExecutionChange: BLSToExecutionChangeRepository;
50
46
 
51
- depositDataRoot: DepositDataRootRepository;
52
- eth1Data: Eth1DataRepository;
53
- preGenesisState: PreGenesisState;
54
- preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
55
-
56
47
  // lightclient
57
48
  bestLightClientUpdate: BestLightClientUpdateRepository;
58
49
  checkpointHeader: CheckpointHeaderRepository;
@@ -80,11 +71,6 @@ export class BeaconDb implements IBeaconDb {
80
71
  this.blsToExecutionChange = new BLSToExecutionChangeRepository(config, db);
81
72
  this.proposerSlashing = new ProposerSlashingRepository(config, db);
82
73
  this.attesterSlashing = new AttesterSlashingRepository(config, db);
83
- this.depositEvent = new DepositEventRepository(config, db);
84
- this.depositDataRoot = new DepositDataRootRepository(config, db);
85
- this.eth1Data = new Eth1DataRepository(config, db);
86
- this.preGenesisState = new PreGenesisState(config, db);
87
- this.preGenesisStateLastProcessedBlock = new PreGenesisStateLastProcessedBlock(config, db);
88
74
 
89
75
  // lightclient
90
76
  this.bestLightClientUpdate = new BestLightClientUpdateRepository(config, db);
@@ -110,4 +96,40 @@ export class BeaconDb implements IBeaconDb {
110
96
  // TODO: Enable once it's deemed safe
111
97
  // await this.block.batchDelete(await this.block.keys());
112
98
  }
99
+
100
+ async deleteDeprecatedEth1Data(): Promise<void> {
101
+ const deprecatedBuckets = [
102
+ Bucket.phase0_eth1Data,
103
+ Bucket.index_depositDataRoot,
104
+ Bucket.phase0_depositData,
105
+ Bucket.phase0_depositEvent,
106
+ Bucket.phase0_preGenesisState,
107
+ Bucket.phase0_preGenesisStateLastProcessedBlock,
108
+ ];
109
+
110
+ for (const bucket of deprecatedBuckets) {
111
+ await this.deleteBucketData(bucket);
112
+ }
113
+ }
114
+
115
+ private async deleteBucketData(bucket: Bucket): Promise<void> {
116
+ const minKey = encodeKey(bucket, Buffer.alloc(0));
117
+ const maxKey = encodeKey(bucket + 1, Buffer.alloc(0));
118
+
119
+ // Batch delete to avoid loading all keys into memory at once
120
+ const BATCH_DELETE_SIZE = 1000;
121
+ let keysBatch: Uint8Array[] = [];
122
+
123
+ for await (const key of this.db.keysStream({gte: minKey, lt: maxKey})) {
124
+ keysBatch.push(key);
125
+ if (keysBatch.length >= BATCH_DELETE_SIZE) {
126
+ await this.db.batchDelete(keysBatch);
127
+ keysBatch = [];
128
+ }
129
+ }
130
+
131
+ if (keysBatch.length > 0) {
132
+ await this.db.batchDelete(keysBatch);
133
+ }
134
+ }
113
135
  }
package/src/db/buckets.ts CHANGED
@@ -16,14 +16,16 @@ export enum Bucket {
16
16
  index_mainChain = 6, // Slot -> Root<BeaconBlock>
17
17
  // justified, finalized state and block hashes
18
18
  index_chainInfo = 7, // Key -> Number64 | stateHash | blockHash
19
- // eth1 processing
20
- phase0_eth1Data = 8, // timestamp -> Eth1Data
21
- index_depositDataRoot = 9, // depositIndex -> Root<DepositData>
19
+ /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
20
+ phase0_eth1Data = 8,
21
+ /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
22
+ index_depositDataRoot = 9,
22
23
 
23
24
  // op pool
24
25
  // phase0_attestation = 10, // DEPRECATED on v0.25.0
25
26
  // phase0_aggregateAndProof = 11, // Root -> AggregateAndProof, DEPRECATED on v.27.0
26
- phase0_depositData = 12, // [DEPRECATED] index -> DepositData
27
+ /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
28
+ phase0_depositData = 12,
27
29
  phase0_exit = 13, // ValidatorIndex -> VoluntaryExit
28
30
  phase0_proposerSlashing = 14, // ValidatorIndex -> ProposerSlashing
29
31
  allForks_attesterSlashing = 15, // Root -> AttesterSlashing
@@ -32,15 +34,18 @@ export enum Bucket {
32
34
  allForks_checkpointState = 17, // Root -> BeaconState
33
35
 
34
36
  // allForks_pendingBlock = 25, // Root -> SignedBeaconBlock // DEPRECATED on v0.30.0
35
- phase0_depositEvent = 19, // depositIndex -> DepositEvent
37
+ /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
38
+ phase0_depositEvent = 19,
36
39
 
37
40
  index_stateArchiveRootIndex = 26, // State Root -> slot
38
41
 
39
42
  deneb_blobSidecars = 27, // DENEB BeaconBlockRoot -> BlobSidecars
40
43
  deneb_blobSidecarsArchive = 28, // DENEB BeaconBlockSlot -> BlobSidecars
41
44
 
42
- phase0_preGenesisState = 30, // Single = phase0.BeaconState
43
- phase0_preGenesisStateLastProcessedBlock = 31, // Single = Uint8
45
+ /** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
46
+ phase0_preGenesisState = 30,
47
+ /** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
48
+ phase0_preGenesisStateLastProcessedBlock = 31,
44
49
 
45
50
  // Lightclient server
46
51
  // altair_bestUpdatePerCommitteePeriod = 30, // DEPRECATED on v0.32.0