@lodestar/beacon-node 1.39.0-dev.882891d89c → 1.39.0-dev.b37f2bd1bd

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 (338) 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/chain/blocks/verifyBlock.d.ts.map +1 -1
  4. package/lib/chain/blocks/verifyBlock.js +1 -1
  5. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  6. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +1 -2
  7. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  8. package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
  9. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  10. package/lib/chain/chain.d.ts +4 -1
  11. package/lib/chain/chain.d.ts.map +1 -1
  12. package/lib/chain/chain.js +16 -8
  13. package/lib/chain/chain.js.map +1 -1
  14. package/lib/chain/genesis/genesis.d.ts +51 -0
  15. package/lib/chain/genesis/genesis.d.ts.map +1 -0
  16. package/lib/chain/genesis/genesis.js +123 -0
  17. package/lib/chain/genesis/genesis.js.map +1 -0
  18. package/lib/chain/genesis/interface.d.ts +13 -0
  19. package/lib/chain/genesis/interface.d.ts.map +1 -0
  20. package/lib/chain/genesis/interface.js +2 -0
  21. package/lib/chain/genesis/interface.js.map +1 -0
  22. package/lib/chain/initState.d.ts +14 -1
  23. package/lib/chain/initState.d.ts.map +1 -1
  24. package/lib/chain/initState.js +62 -1
  25. package/lib/chain/initState.js.map +1 -1
  26. package/lib/chain/interface.d.ts +2 -0
  27. package/lib/chain/interface.d.ts.map +1 -1
  28. package/lib/chain/interface.js.map +1 -1
  29. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
  30. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  31. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
  32. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  33. package/lib/chain/opPools/opPool.d.ts +0 -3
  34. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  35. package/lib/chain/opPools/opPool.js +8 -9
  36. package/lib/chain/opPools/opPool.js.map +1 -1
  37. package/lib/chain/prepareNextSlot.d.ts +4 -0
  38. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  39. package/lib/chain/prepareNextSlot.js +21 -1
  40. package/lib/chain/prepareNextSlot.js.map +1 -1
  41. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -0
  42. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  43. package/lib/chain/produceBlock/produceBlockBody.js +11 -8
  44. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  45. package/lib/chain/rewards/attestationsRewards.d.ts +1 -2
  46. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
  47. package/lib/chain/rewards/attestationsRewards.js +8 -8
  48. package/lib/chain/rewards/attestationsRewards.js.map +1 -1
  49. package/lib/chain/rewards/blockRewards.d.ts +1 -2
  50. package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
  51. package/lib/chain/rewards/blockRewards.js +5 -5
  52. package/lib/chain/rewards/blockRewards.js.map +1 -1
  53. package/lib/chain/rewards/syncCommitteeRewards.d.ts +1 -2
  54. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
  55. package/lib/chain/rewards/syncCommitteeRewards.js +2 -2
  56. package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
  57. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -4
  58. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  59. package/lib/chain/stateCache/persistentCheckpointsCache.js +2 -4
  60. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  61. package/lib/chain/validation/attesterSlashing.js +1 -1
  62. package/lib/chain/validation/attesterSlashing.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.js +1 -1
  66. package/lib/chain/validation/proposerSlashing.js +1 -1
  67. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  68. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  69. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  70. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +1 -2
  71. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  72. package/lib/chain/validation/signatureSets/contributionAndProof.js +2 -2
  73. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  74. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +1 -2
  75. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  76. package/lib/chain/validation/signatureSets/syncCommittee.js +2 -2
  77. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  78. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -2
  79. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  80. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  81. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  82. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +1 -2
  83. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  84. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -1
  85. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  86. package/lib/chain/validation/syncCommittee.js +1 -1
  87. package/lib/chain/validation/syncCommittee.js.map +1 -1
  88. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  89. package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -3
  90. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  91. package/lib/chain/validation/voluntaryExit.js +1 -1
  92. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  93. package/lib/db/beacon.d.ts +7 -3
  94. package/lib/db/beacon.d.ts.map +1 -1
  95. package/lib/db/beacon.js +12 -33
  96. package/lib/db/beacon.js.map +1 -1
  97. package/lib/db/buckets.d.ts +6 -12
  98. package/lib/db/buckets.d.ts.map +1 -1
  99. package/lib/db/buckets.js +1 -6
  100. package/lib/db/buckets.js.map +1 -1
  101. package/lib/db/interface.d.ts +7 -2
  102. package/lib/db/interface.d.ts.map +1 -1
  103. package/lib/db/repositories/depositDataRoot.d.ts +22 -0
  104. package/lib/db/repositories/depositDataRoot.d.ts.map +1 -0
  105. package/lib/db/repositories/depositDataRoot.js +62 -0
  106. package/lib/db/repositories/depositDataRoot.js.map +1 -0
  107. package/lib/db/repositories/depositEvent.d.ts +13 -0
  108. package/lib/db/repositories/depositEvent.d.ts.map +1 -0
  109. package/lib/db/repositories/depositEvent.js +27 -0
  110. package/lib/db/repositories/depositEvent.js.map +1 -0
  111. package/lib/db/repositories/eth1Data.d.ts +13 -0
  112. package/lib/db/repositories/eth1Data.d.ts.map +1 -0
  113. package/lib/db/repositories/eth1Data.js +26 -0
  114. package/lib/db/repositories/eth1Data.js.map +1 -0
  115. package/lib/db/repositories/index.d.ts +3 -0
  116. package/lib/db/repositories/index.d.ts.map +1 -1
  117. package/lib/db/repositories/index.js +3 -0
  118. package/lib/db/repositories/index.js.map +1 -1
  119. package/lib/db/single/index.d.ts +3 -0
  120. package/lib/db/single/index.d.ts.map +1 -0
  121. package/lib/db/single/index.js +3 -0
  122. package/lib/db/single/index.js.map +1 -0
  123. package/lib/db/single/preGenesisState.d.ts +16 -0
  124. package/lib/db/single/preGenesisState.d.ts.map +1 -0
  125. package/lib/db/single/preGenesisState.js +29 -0
  126. package/lib/db/single/preGenesisState.js.map +1 -0
  127. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +14 -0
  128. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +1 -0
  129. package/lib/db/single/preGenesisStateLastProcessedBlock.js +27 -0
  130. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -0
  131. package/lib/eth1/errors.d.ts +66 -0
  132. package/lib/eth1/errors.d.ts.map +1 -0
  133. package/lib/eth1/errors.js +27 -0
  134. package/lib/eth1/errors.js.map +1 -0
  135. package/lib/eth1/eth1DataCache.d.ts +19 -0
  136. package/lib/eth1/eth1DataCache.d.ts.map +1 -0
  137. package/lib/eth1/eth1DataCache.js +19 -0
  138. package/lib/eth1/eth1DataCache.js.map +1 -0
  139. package/lib/eth1/eth1DepositDataTracker.d.ts +80 -0
  140. package/lib/eth1/eth1DepositDataTracker.d.ts.map +1 -0
  141. package/lib/eth1/eth1DepositDataTracker.js +317 -0
  142. package/lib/eth1/eth1DepositDataTracker.js.map +1 -0
  143. package/lib/eth1/eth1DepositsCache.d.ts +42 -0
  144. package/lib/eth1/eth1DepositsCache.d.ts.map +1 -0
  145. package/lib/eth1/eth1DepositsCache.js +119 -0
  146. package/lib/eth1/eth1DepositsCache.js.map +1 -0
  147. package/lib/eth1/index.d.ts +31 -0
  148. package/lib/eth1/index.d.ts.map +1 -0
  149. package/lib/eth1/index.js +71 -0
  150. package/lib/eth1/index.js.map +1 -0
  151. package/lib/eth1/interface.d.ts +74 -0
  152. package/lib/eth1/interface.d.ts.map +1 -0
  153. package/lib/eth1/interface.js +8 -0
  154. package/lib/eth1/interface.js.map +1 -0
  155. package/lib/eth1/options.d.ts +22 -0
  156. package/lib/eth1/options.d.ts.map +1 -0
  157. package/lib/eth1/options.js +8 -0
  158. package/lib/eth1/options.js.map +1 -0
  159. package/lib/eth1/provider/eth1Provider.d.ts +39 -0
  160. package/lib/eth1/provider/eth1Provider.d.ts.map +1 -0
  161. package/lib/eth1/provider/eth1Provider.js +147 -0
  162. package/lib/eth1/provider/eth1Provider.js.map +1 -0
  163. package/lib/{execution/engine → eth1/provider}/jsonRpcHttpClient.d.ts +1 -1
  164. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +1 -0
  165. package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -0
  166. package/lib/eth1/provider/jwt.d.ts.map +1 -0
  167. package/lib/eth1/provider/jwt.js.map +1 -0
  168. package/lib/eth1/provider/utils.d.ts +65 -0
  169. package/lib/eth1/provider/utils.d.ts.map +1 -0
  170. package/lib/eth1/provider/utils.js +120 -0
  171. package/lib/eth1/provider/utils.js.map +1 -0
  172. package/lib/eth1/stream.d.ts +15 -0
  173. package/lib/eth1/stream.d.ts.map +1 -0
  174. package/lib/eth1/stream.js +54 -0
  175. package/lib/eth1/stream.js.map +1 -0
  176. package/lib/eth1/utils/depositContract.d.ts +14 -0
  177. package/lib/eth1/utils/depositContract.d.ts.map +1 -0
  178. package/lib/eth1/utils/depositContract.js +33 -0
  179. package/lib/eth1/utils/depositContract.js.map +1 -0
  180. package/lib/eth1/utils/deposits.d.ts +8 -0
  181. package/lib/eth1/utils/deposits.d.ts.map +1 -0
  182. package/lib/eth1/utils/deposits.js +47 -0
  183. package/lib/eth1/utils/deposits.js.map +1 -0
  184. package/lib/eth1/utils/eth1Data.d.ts +22 -0
  185. package/lib/eth1/utils/eth1Data.d.ts.map +1 -0
  186. package/lib/eth1/utils/eth1Data.js +77 -0
  187. package/lib/eth1/utils/eth1Data.js.map +1 -0
  188. package/lib/eth1/utils/eth1DepositEvent.d.ts +7 -0
  189. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +1 -0
  190. package/lib/eth1/utils/eth1DepositEvent.js +13 -0
  191. package/lib/eth1/utils/eth1DepositEvent.js.map +1 -0
  192. package/lib/eth1/utils/eth1Vote.d.ts +17 -0
  193. package/lib/eth1/utils/eth1Vote.d.ts.map +1 -0
  194. package/lib/eth1/utils/eth1Vote.js +111 -0
  195. package/lib/eth1/utils/eth1Vote.js.map +1 -0
  196. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +9 -0
  197. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +1 -0
  198. package/lib/eth1/utils/groupDepositEventsByBlock.js +17 -0
  199. package/lib/eth1/utils/groupDepositEventsByBlock.js.map +1 -0
  200. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +10 -0
  201. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +1 -0
  202. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +14 -0
  203. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +1 -0
  204. package/lib/execution/engine/http.d.ts +1 -1
  205. package/lib/execution/engine/http.d.ts.map +1 -1
  206. package/lib/execution/engine/http.js +3 -2
  207. package/lib/execution/engine/http.js.map +1 -1
  208. package/lib/execution/engine/index.d.ts.map +1 -1
  209. package/lib/execution/engine/index.js +1 -1
  210. package/lib/execution/engine/index.js.map +1 -1
  211. package/lib/execution/engine/interface.d.ts +1 -1
  212. package/lib/execution/engine/interface.d.ts.map +1 -1
  213. package/lib/execution/engine/interface.js.map +1 -1
  214. package/lib/execution/engine/mock.d.ts.map +1 -1
  215. package/lib/execution/engine/mock.js +1 -1
  216. package/lib/execution/engine/mock.js.map +1 -1
  217. package/lib/execution/engine/payloadIdCache.d.ts +1 -1
  218. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  219. package/lib/execution/engine/types.d.ts +1 -1
  220. package/lib/execution/engine/types.d.ts.map +1 -1
  221. package/lib/execution/engine/types.js +1 -1
  222. package/lib/execution/engine/types.js.map +1 -1
  223. package/lib/execution/engine/utils.d.ts +2 -64
  224. package/lib/execution/engine/utils.d.ts.map +1 -1
  225. package/lib/execution/engine/utils.js +2 -91
  226. package/lib/execution/engine/utils.js.map +1 -1
  227. package/lib/index.d.ts +2 -1
  228. package/lib/index.d.ts.map +1 -1
  229. package/lib/index.js +2 -1
  230. package/lib/index.js.map +1 -1
  231. package/lib/metrics/metrics/lodestar.d.ts +35 -0
  232. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  233. package/lib/metrics/metrics/lodestar.js +90 -0
  234. package/lib/metrics/metrics/lodestar.js.map +1 -1
  235. package/lib/node/nodejs.d.ts.map +1 -1
  236. package/lib/node/nodejs.js +9 -10
  237. package/lib/node/nodejs.js.map +1 -1
  238. package/lib/node/options.d.ts +2 -0
  239. package/lib/node/options.d.ts.map +1 -1
  240. package/lib/node/options.js +2 -0
  241. package/lib/node/options.js.map +1 -1
  242. package/lib/node/utils/interop/deposits.d.ts +1 -2
  243. package/lib/node/utils/interop/deposits.d.ts.map +1 -1
  244. package/lib/node/utils/interop/deposits.js.map +1 -1
  245. package/lib/node/utils/interop/state.d.ts +1 -1
  246. package/lib/node/utils/interop/state.d.ts.map +1 -1
  247. package/lib/node/utils/state.d.ts +7 -1
  248. package/lib/node/utils/state.d.ts.map +1 -1
  249. package/lib/node/utils/state.js +14 -1
  250. package/lib/node/utils/state.js.map +1 -1
  251. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  252. package/lib/sync/backfill/backfill.js +4 -2
  253. package/lib/sync/backfill/backfill.js.map +1 -1
  254. package/lib/sync/backfill/verify.d.ts +1 -1
  255. package/lib/sync/backfill/verify.d.ts.map +1 -1
  256. package/lib/sync/backfill/verify.js +2 -2
  257. package/lib/sync/backfill/verify.js.map +1 -1
  258. package/package.json +20 -14
  259. package/src/api/impl/beacon/blocks/utils.ts +1 -1
  260. package/src/chain/blocks/verifyBlock.ts +0 -1
  261. package/src/chain/blocks/verifyBlocksSignatures.ts +1 -3
  262. package/src/chain/chain.ts +19 -7
  263. package/src/chain/genesis/genesis.ts +190 -0
  264. package/src/chain/genesis/interface.ts +14 -0
  265. package/src/chain/initState.ts +97 -1
  266. package/src/chain/interface.ts +2 -0
  267. package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
  268. package/src/chain/opPools/opPool.ts +8 -8
  269. package/src/chain/prepareNextSlot.ts +28 -1
  270. package/src/chain/produceBlock/produceBlockBody.ts +12 -8
  271. package/src/chain/rewards/attestationsRewards.ts +4 -13
  272. package/src/chain/rewards/blockRewards.ts +3 -6
  273. package/src/chain/rewards/syncCommitteeRewards.ts +1 -3
  274. package/src/chain/stateCache/persistentCheckpointsCache.ts +2 -15
  275. package/src/chain/validation/attesterSlashing.ts +1 -1
  276. package/src/chain/validation/block.ts +1 -1
  277. package/src/chain/validation/blsToExecutionChange.ts +1 -1
  278. package/src/chain/validation/proposerSlashing.ts +1 -1
  279. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  280. package/src/chain/validation/signatureSets/contributionAndProof.ts +1 -3
  281. package/src/chain/validation/signatureSets/syncCommittee.ts +1 -3
  282. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +1 -3
  283. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +1 -2
  284. package/src/chain/validation/syncCommittee.ts +1 -1
  285. package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -8
  286. package/src/chain/validation/voluntaryExit.ts +1 -1
  287. package/src/db/beacon.ts +16 -38
  288. package/src/db/buckets.ts +7 -12
  289. package/src/db/interface.ts +13 -2
  290. package/src/db/repositories/depositDataRoot.ts +80 -0
  291. package/src/db/repositories/depositEvent.ts +32 -0
  292. package/src/db/repositories/eth1Data.ts +33 -0
  293. package/src/db/repositories/index.ts +3 -0
  294. package/src/db/single/index.ts +2 -0
  295. package/src/db/single/preGenesisState.ts +37 -0
  296. package/src/db/single/preGenesisStateLastProcessedBlock.ts +34 -0
  297. package/src/eth1/errors.ts +40 -0
  298. package/src/eth1/eth1DataCache.ts +26 -0
  299. package/src/eth1/eth1DepositDataTracker.ts +410 -0
  300. package/src/eth1/eth1DepositsCache.ts +141 -0
  301. package/src/eth1/index.ts +94 -0
  302. package/src/eth1/interface.ts +87 -0
  303. package/src/eth1/options.ts +28 -0
  304. package/src/eth1/provider/eth1Provider.ts +229 -0
  305. package/src/{execution/engine → eth1/provider}/jsonRpcHttpClient.ts +1 -1
  306. package/src/eth1/provider/utils.ts +136 -0
  307. package/src/eth1/stream.ts +75 -0
  308. package/src/eth1/utils/depositContract.ts +37 -0
  309. package/src/eth1/utils/deposits.ts +70 -0
  310. package/src/eth1/utils/eth1Data.ts +100 -0
  311. package/src/eth1/utils/eth1DepositEvent.ts +12 -0
  312. package/src/eth1/utils/eth1Vote.ts +142 -0
  313. package/src/eth1/utils/groupDepositEventsByBlock.ts +19 -0
  314. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +18 -0
  315. package/src/execution/engine/http.ts +9 -8
  316. package/src/execution/engine/index.ts +1 -1
  317. package/src/execution/engine/interface.ts +1 -1
  318. package/src/execution/engine/mock.ts +2 -1
  319. package/src/execution/engine/payloadIdCache.ts +1 -1
  320. package/src/execution/engine/types.ts +9 -9
  321. package/src/execution/engine/utils.ts +5 -111
  322. package/src/index.ts +2 -1
  323. package/src/metrics/metrics/lodestar.ts +92 -0
  324. package/src/node/nodejs.ts +9 -11
  325. package/src/node/options.ts +3 -0
  326. package/src/node/utils/interop/deposits.ts +1 -3
  327. package/src/node/utils/interop/state.ts +1 -1
  328. package/src/node/utils/state.ts +18 -3
  329. package/src/sync/backfill/backfill.ts +3 -8
  330. package/src/sync/backfill/verify.ts +1 -3
  331. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +0 -1
  332. package/lib/execution/engine/jsonRpcHttpClient.js.map +0 -1
  333. package/lib/execution/engine/jwt.d.ts.map +0 -1
  334. package/lib/execution/engine/jwt.js.map +0 -1
  335. /package/lib/{execution/engine → eth1/provider}/jsonRpcHttpClient.js +0 -0
  336. /package/lib/{execution/engine → eth1/provider}/jwt.d.ts +0 -0
  337. /package/lib/{execution/engine → eth1/provider}/jwt.js +0 -0
  338. /package/src/{execution/engine → eth1/provider}/jwt.ts +0 -0
@@ -1,6 +1,5 @@
1
1
  import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
2
2
  import {routes} from "@lodestar/api";
3
- import {BeaconConfig} from "@lodestar/config";
4
3
  import {
5
4
  EFFECTIVE_BALANCE_INCREMENT,
6
5
  ForkName,
@@ -39,12 +38,11 @@ const defaultAttestationsReward = {head: 0, target: 0, source: 0, inclusionDelay
39
38
  const defaultAttestationsPenalty = {target: 0, source: 0};
40
39
 
41
40
  export async function computeAttestationsRewards(
42
- config: BeaconConfig,
43
41
  pubkey2index: PubkeyIndexMap,
44
42
  state: CachedBeaconStateAllForks,
45
43
  validatorIds?: (ValidatorIndex | string)[]
46
44
  ): Promise<AttestationsRewards> {
47
- const fork = config.getForkName(state.slot);
45
+ const fork = state.config.getForkName(state.slot);
48
46
  if (fork === ForkName.phase0) {
49
47
  throw Error("Unsupported fork. Attestations rewards calculation is not available in phase0");
50
48
  }
@@ -52,13 +50,8 @@ export async function computeAttestationsRewards(
52
50
  const stateAltair = state as CachedBeaconStateAltair;
53
51
  const transitionCache = beforeProcessEpoch(stateAltair);
54
52
 
55
- const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
56
- config,
57
- stateAltair,
58
- transitionCache
59
- );
53
+ const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(stateAltair, transitionCache);
60
54
  const totalRewards = computeTotalAttestationsRewardsAltair(
61
- config,
62
55
  pubkey2index,
63
56
  stateAltair,
64
57
  transitionCache,
@@ -71,13 +64,12 @@ export async function computeAttestationsRewards(
71
64
  }
72
65
 
73
66
  function computeIdealAttestationsRewardsAndPenaltiesAltair(
74
- config: BeaconConfig,
75
67
  state: CachedBeaconStateAllForks,
76
68
  transitionCache: EpochTransitionCache
77
69
  ): [IdealAttestationsReward[], AttestationsPenalty[]] {
78
70
  const baseRewardPerIncrement = transitionCache.baseRewardPerIncrement;
79
71
  const activeBalanceByIncrement = transitionCache.totalActiveStakeByIncrement;
80
- const fork = config.getForkName(state.slot);
72
+ const fork = state.config.getForkName(state.slot);
81
73
  const maxEffectiveBalance = isForkPostElectra(fork) ? MAX_EFFECTIVE_BALANCE_ELECTRA : MAX_EFFECTIVE_BALANCE;
82
74
  const maxEffectiveBalanceByIncrement = Math.floor(maxEffectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
83
75
 
@@ -147,7 +139,6 @@ function computeIdealAttestationsRewardsAndPenaltiesAltair(
147
139
 
148
140
  // Same calculation as `getRewardsAndPenaltiesAltair` but returns the breakdown of rewards instead of aggregated
149
141
  function computeTotalAttestationsRewardsAltair(
150
- config: BeaconConfig,
151
142
  pubkey2index: PubkeyIndexMap,
152
143
  state: CachedBeaconStateAltair,
153
144
  transitionCache: EpochTransitionCache,
@@ -157,7 +148,7 @@ function computeTotalAttestationsRewardsAltair(
157
148
  ): TotalAttestationsReward[] {
158
149
  const rewards = [];
159
150
  const {flags} = transitionCache;
160
- const {epochCtx} = state;
151
+ const {epochCtx, config} = state;
161
152
  const validatorIndices = validatorIds
162
153
  .map((id) => (typeof id === "number" ? id : pubkey2index.get(fromHex(id))))
163
154
  .filter((index) => index !== undefined); // Validator indices to include in the result
@@ -1,5 +1,4 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {
4
3
  ForkName,
5
4
  WHISTLEBLOWER_REWARD_QUOTIENT,
@@ -27,12 +26,11 @@ type SubRewardValue = number; // All reward values should be integer
27
26
  * 3) Reporting slashable behaviours from proposer and attester
28
27
  */
29
28
  export async function computeBlockRewards(
30
- config: BeaconConfig,
31
29
  block: BeaconBlock,
32
30
  preState: CachedBeaconStateAllForks,
33
31
  postState?: CachedBeaconStateAllForks
34
32
  ): Promise<BlockRewards> {
35
- const fork = config.getForkName(block.slot);
33
+ const fork = preState.config.getForkName(block.slot);
36
34
  const {attestations: cachedAttestationsReward = 0, syncAggregate: cachedSyncAggregateReward = 0} =
37
35
  postState?.proposerRewards ?? {};
38
36
  let blockAttestationReward = cachedAttestationsReward;
@@ -42,7 +40,7 @@ export async function computeBlockRewards(
42
40
  blockAttestationReward =
43
41
  fork === ForkName.phase0
44
42
  ? computeBlockAttestationRewardPhase0(block as phase0.BeaconBlock, preState as CachedBeaconStatePhase0)
45
- : computeBlockAttestationRewardAltair(config, block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
43
+ : computeBlockAttestationRewardAltair(block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
46
44
  }
47
45
 
48
46
  if (syncAggregateReward === 0) {
@@ -80,11 +78,10 @@ function computeBlockAttestationRewardPhase0(
80
78
  * Reuses `processAttestationsAltair()`. Has dependency on RewardCache
81
79
  */
82
80
  function computeBlockAttestationRewardAltair(
83
- config: BeaconConfig,
84
81
  block: altair.BeaconBlock,
85
82
  preState: CachedBeaconStateAltair
86
83
  ): SubRewardValue {
87
- const fork = config.getForkSeq(block.slot);
84
+ const fork = preState.config.getForkSeq(block.slot);
88
85
  const {attestations} = block.body;
89
86
 
90
87
  processAttestationsAltair(fork, preState, attestations, false);
@@ -1,5 +1,4 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {ForkName, SYNC_COMMITTEE_SIZE} from "@lodestar/params";
4
3
  import {CachedBeaconStateAllForks, CachedBeaconStateAltair, Index2PubkeyCache} from "@lodestar/state-transition";
5
4
  import {BeaconBlock, ValidatorIndex, altair} from "@lodestar/types";
@@ -8,13 +7,12 @@ export type SyncCommitteeRewards = routes.beacon.SyncCommitteeRewards;
8
7
  type BalanceRecord = {val: number}; // Use val for convenient way to increment/decrement balance
9
8
 
10
9
  export async function computeSyncCommitteeRewards(
11
- config: BeaconConfig,
12
10
  index2pubkey: Index2PubkeyCache,
13
11
  block: BeaconBlock,
14
12
  preState: CachedBeaconStateAllForks,
15
13
  validatorIds: (ValidatorIndex | string)[] = []
16
14
  ): Promise<SyncCommitteeRewards> {
17
- const fork = config.getForkName(block.slot);
15
+ const fork = preState.config.getForkName(block.slot);
18
16
  if (fork === ForkName.phase0) {
19
17
  throw Error("Cannot get sync rewards as phase0 block does not have sync committee");
20
18
  }
@@ -1,5 +1,4 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
5
4
  computeStartSlotAtEpoch,
@@ -25,7 +24,6 @@ export type PersistentCheckpointStateCacheOpts = {
25
24
  };
26
25
 
27
26
  type PersistentCheckpointStateCacheModules = {
28
- config: BeaconConfig;
29
27
  metrics?: Metrics | null;
30
28
  logger: Logger;
31
29
  clock?: IClock | null;
@@ -109,7 +107,6 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
109
107
  private readonly cache: MapTracker<CacheKey, CacheItem>;
110
108
  /** Epoch -> Set<blockRoot> */
111
109
  private readonly epochIndex = new MapDef<Epoch, Set<RootHex>>(() => new Set<string>());
112
- private readonly config: BeaconConfig;
113
110
  private readonly metrics: Metrics | null | undefined;
114
111
  private readonly logger: Logger;
115
112
  private readonly clock: IClock | null | undefined;
@@ -123,20 +120,10 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
123
120
  private readonly bufferPool?: BufferPool | null;
124
121
 
125
122
  constructor(
126
- {
127
- config,
128
- metrics,
129
- logger,
130
- clock,
131
- signal,
132
- datastore,
133
- blockStateCache,
134
- bufferPool,
135
- }: PersistentCheckpointStateCacheModules,
123
+ {metrics, logger, clock, signal, datastore, blockStateCache, bufferPool}: PersistentCheckpointStateCacheModules,
136
124
  opts: PersistentCheckpointStateCacheOpts
137
125
  ) {
138
126
  this.cache = new MapTracker(metrics?.cpStateCache);
139
- this.config = config;
140
127
  if (metrics) {
141
128
  this.metrics = metrics;
142
129
  metrics.cpStateCache.size.addCollect(() => {
@@ -497,7 +484,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
497
484
  }
498
485
 
499
486
  const blockSlot = state.slot;
500
- const processCPStatesTimeMs = this.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
487
+ const processCPStatesTimeMs = state.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
501
488
  // we always have clock in production, fallback value is only for test
502
489
  const msFromSlot = this.clock?.msFromSlot(blockSlot) ?? processCPStatesTimeMs;
503
490
  const msToProcessCPStates = processCPStatesTimeMs - msFromSlot;
@@ -51,7 +51,7 @@ export async function validateAttesterSlashing(
51
51
  });
52
52
  }
53
53
 
54
- const signatureSets = getAttesterSlashingSignatureSets(chain.config, chain.index2pubkey, state, attesterSlashing);
54
+ const signatureSets = getAttesterSlashingSignatureSets(chain.index2pubkey, state, attesterSlashing);
55
55
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
56
56
  throw new AttesterSlashingError(GossipAction.REJECT, {
57
57
  code: AttesterSlashingErrorCode.INVALID,
@@ -153,7 +153,7 @@ export async function validateGossipBlock(
153
153
 
154
154
  // [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
155
155
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
156
- const signatureSet = getBlockProposerSignatureSet(chain.config, chain.index2pubkey, blockState, signedBlock);
156
+ const signatureSet = getBlockProposerSignatureSet(chain.index2pubkey, blockState, signedBlock);
157
157
  // Don't batch so verification is not delayed
158
158
  if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
159
159
  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} = chain;
44
+ const {config} = state;
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
@@ -44,7 +44,7 @@ async function validateProposerSlashing(
44
44
  });
45
45
  }
46
46
 
47
- const signatureSets = getProposerSlashingSignatureSets(chain.config, chain.index2pubkey, state, proposerSlashing);
47
+ const signatureSets = getProposerSlashingSignatureSets(chain.index2pubkey, state, proposerSlashing);
48
48
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
49
49
  throw new ProposerSlashingError(GossipAction.REJECT, {
50
50
  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 = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
17
+ // previously, we call `const aggregatorDomain = state.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,4 +1,3 @@
1
- import {BeaconConfig} from "@lodestar/config";
2
1
  import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
@@ -10,12 +9,11 @@ import {
10
9
  import {altair, ssz} from "@lodestar/types";
11
10
 
12
11
  export function getContributionAndProofSignatureSet(
13
- config: BeaconConfig,
14
12
  index2pubkey: Index2PubkeyCache,
15
13
  state: CachedBeaconStateAllForks,
16
14
  signedContributionAndProof: altair.SignedContributionAndProof
17
15
  ): ISignatureSet {
18
- const domain = config.getDomain(
16
+ const domain = state.config.getDomain(
19
17
  state.slot,
20
18
  DOMAIN_CONTRIBUTION_AND_PROOF,
21
19
  signedContributionAndProof.message.contribution.slot
@@ -1,4 +1,3 @@
1
- import {BeaconConfig} from "@lodestar/config";
2
1
  import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
@@ -10,12 +9,11 @@ import {
10
9
  import {altair, ssz} from "@lodestar/types";
11
10
 
12
11
  export function getSyncCommitteeSignatureSet(
13
- config: BeaconConfig,
14
12
  index2pubkey: Index2PubkeyCache,
15
13
  state: CachedBeaconStateAllForks,
16
14
  syncCommittee: altair.SyncCommitteeMessage
17
15
  ): ISignatureSet {
18
- const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
16
+ const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
19
17
 
20
18
  return {
21
19
  type: SignatureSetType.single,
@@ -1,16 +1,14 @@
1
1
  import {PublicKey} from "@chainsafe/blst";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
4
3
  import {CachedBeaconStateAltair, ISignatureSet, SignatureSetType, computeSigningRoot} from "@lodestar/state-transition";
5
4
  import {altair, ssz} from "@lodestar/types";
6
5
 
7
6
  export function getSyncCommitteeContributionSignatureSet(
8
- config: BeaconConfig,
9
7
  state: CachedBeaconStateAltair,
10
8
  contribution: altair.SyncCommitteeContribution,
11
9
  pubkeys: PublicKey[]
12
10
  ): ISignatureSet {
13
- const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
11
+ const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
14
12
  return {
15
13
  type: SignatureSetType.aggregate,
16
14
  pubkeys,
@@ -1,4 +1,3 @@
1
- import {BeaconConfig} from "@lodestar/config";
2
1
  import {DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF} from "@lodestar/params";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
@@ -10,11 +9,11 @@ import {
10
9
  import {altair, ssz} from "@lodestar/types";
11
10
 
12
11
  export function getSyncCommitteeSelectionProofSignatureSet(
13
- config: BeaconConfig,
14
12
  index2pubkey: Index2PubkeyCache,
15
13
  state: CachedBeaconStateAllForks,
16
14
  contributionAndProof: altair.ContributionAndProof
17
15
  ): ISignatureSet {
16
+ const {config} = state;
18
17
  const slot = contributionAndProof.contribution.slot;
19
18
  const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF, slot);
20
19
  const signingData: altair.SyncAggregatorSelectionData = {
@@ -89,7 +89,7 @@ async function validateSyncCommitteeSigOnly(
89
89
  syncCommittee: altair.SyncCommitteeMessage,
90
90
  prioritizeBls = false
91
91
  ): Promise<void> {
92
- const signatureSet = getSyncCommitteeSignatureSet(chain.config, chain.index2pubkey, headState, syncCommittee);
92
+ const signatureSet = getSyncCommitteeSignatureSet(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,
@@ -78,19 +78,14 @@ export async function validateSyncCommitteeGossipContributionAndProof(
78
78
  const signatureSets = [
79
79
  // [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData
80
80
  // derived from the contribution by the validator with index contribution_and_proof.aggregator_index.
81
- getSyncCommitteeSelectionProofSignatureSet(chain.config, index2pubkey, headState, contributionAndProof),
81
+ getSyncCommitteeSelectionProofSignatureSet(index2pubkey, headState, contributionAndProof),
82
82
 
83
83
  // [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
84
- getContributionAndProofSignatureSet(chain.config, index2pubkey, headState, signedContributionAndProof),
84
+ getContributionAndProofSignatureSet(index2pubkey, headState, signedContributionAndProof),
85
85
 
86
86
  // [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
87
87
  // the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
88
- getSyncCommitteeContributionSignatureSet(
89
- chain.config,
90
- headState as CachedBeaconStateAltair,
91
- contribution,
92
- participantPubkeys
93
- ),
88
+ getSyncCommitteeContributionSignatureSet(headState as CachedBeaconStateAltair, contribution, participantPubkeys),
94
89
  ];
95
90
 
96
91
  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(chain.config, chain.index2pubkey, state, voluntaryExit);
62
+ const signatureSet = getVoluntaryExitSignatureSet(chain.index2pubkey, state, 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,6 +1,5 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
- import {Db, LevelDbControllerMetrics, encodeKey} from "@lodestar/db";
3
- import {Bucket} from "./buckets.js";
2
+ import {Db, LevelDbControllerMetrics} from "@lodestar/db";
4
3
  import {IBeaconDb} from "./interface.js";
5
4
  import {CheckpointStateRepository} from "./repositories/checkpointState.js";
6
5
  import {
@@ -15,12 +14,16 @@ import {
15
14
  CheckpointHeaderRepository,
16
15
  DataColumnSidecarArchiveRepository,
17
16
  DataColumnSidecarRepository,
17
+ DepositDataRootRepository,
18
+ DepositEventRepository,
19
+ Eth1DataRepository,
18
20
  ProposerSlashingRepository,
19
21
  StateArchiveRepository,
20
22
  SyncCommitteeRepository,
21
23
  SyncCommitteeWitnessRepository,
22
24
  VoluntaryExitRepository,
23
25
  } from "./repositories/index.js";
26
+ import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
24
27
 
25
28
  export type BeaconDbModules = {
26
29
  config: ChainForkConfig;
@@ -42,8 +45,14 @@ export class BeaconDb implements IBeaconDb {
42
45
  voluntaryExit: VoluntaryExitRepository;
43
46
  proposerSlashing: ProposerSlashingRepository;
44
47
  attesterSlashing: AttesterSlashingRepository;
48
+ depositEvent: DepositEventRepository;
45
49
  blsToExecutionChange: BLSToExecutionChangeRepository;
46
50
 
51
+ depositDataRoot: DepositDataRootRepository;
52
+ eth1Data: Eth1DataRepository;
53
+ preGenesisState: PreGenesisState;
54
+ preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
55
+
47
56
  // lightclient
48
57
  bestLightClientUpdate: BestLightClientUpdateRepository;
49
58
  checkpointHeader: CheckpointHeaderRepository;
@@ -71,6 +80,11 @@ export class BeaconDb implements IBeaconDb {
71
80
  this.blsToExecutionChange = new BLSToExecutionChangeRepository(config, db);
72
81
  this.proposerSlashing = new ProposerSlashingRepository(config, db);
73
82
  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);
74
88
 
75
89
  // lightclient
76
90
  this.bestLightClientUpdate = new BestLightClientUpdateRepository(config, db);
@@ -96,40 +110,4 @@ export class BeaconDb implements IBeaconDb {
96
110
  // TODO: Enable once it's deemed safe
97
111
  // await this.block.batchDelete(await this.block.keys());
98
112
  }
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
- }
135
113
  }
package/src/db/buckets.ts CHANGED
@@ -16,16 +16,14 @@ 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
- /** @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,
19
+ // eth1 processing
20
+ phase0_eth1Data = 8, // timestamp -> Eth1Data
21
+ index_depositDataRoot = 9, // depositIndex -> Root<DepositData>
23
22
 
24
23
  // op pool
25
24
  // phase0_attestation = 10, // DEPRECATED on v0.25.0
26
25
  // phase0_aggregateAndProof = 11, // Root -> AggregateAndProof, DEPRECATED on v.27.0
27
- /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
28
- phase0_depositData = 12,
26
+ phase0_depositData = 12, // [DEPRECATED] index -> DepositData
29
27
  phase0_exit = 13, // ValidatorIndex -> VoluntaryExit
30
28
  phase0_proposerSlashing = 14, // ValidatorIndex -> ProposerSlashing
31
29
  allForks_attesterSlashing = 15, // Root -> AttesterSlashing
@@ -34,18 +32,15 @@ export enum Bucket {
34
32
  allForks_checkpointState = 17, // Root -> BeaconState
35
33
 
36
34
  // allForks_pendingBlock = 25, // Root -> SignedBeaconBlock // DEPRECATED on v0.30.0
37
- /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
38
- phase0_depositEvent = 19,
35
+ phase0_depositEvent = 19, // depositIndex -> DepositEvent
39
36
 
40
37
  index_stateArchiveRootIndex = 26, // State Root -> slot
41
38
 
42
39
  deneb_blobSidecars = 27, // DENEB BeaconBlockRoot -> BlobSidecars
43
40
  deneb_blobSidecarsArchive = 28, // DENEB BeaconBlockSlot -> BlobSidecars
44
41
 
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,
42
+ phase0_preGenesisState = 30, // Single = phase0.BeaconState
43
+ phase0_preGenesisStateLastProcessedBlock = 31, // Single = Uint8
49
44
 
50
45
  // Lightclient server
51
46
  // altair_bestUpdatePerCommitteePeriod = 30, // DEPRECATED on v0.32.0
@@ -12,12 +12,16 @@ import {
12
12
  CheckpointHeaderRepository,
13
13
  DataColumnSidecarArchiveRepository,
14
14
  DataColumnSidecarRepository,
15
+ DepositDataRootRepository,
16
+ DepositEventRepository,
17
+ Eth1DataRepository,
15
18
  ProposerSlashingRepository,
16
19
  StateArchiveRepository,
17
20
  SyncCommitteeRepository,
18
21
  SyncCommitteeWitnessRepository,
19
22
  VoluntaryExitRepository,
20
23
  } from "./repositories/index.js";
24
+ import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
21
25
 
22
26
  /**
23
27
  * The DB service manages the data layer of the beacon chain
@@ -44,8 +48,17 @@ export interface IBeaconDb {
44
48
  voluntaryExit: VoluntaryExitRepository;
45
49
  proposerSlashing: ProposerSlashingRepository;
46
50
  attesterSlashing: AttesterSlashingRepository;
51
+ depositEvent: DepositEventRepository;
47
52
  blsToExecutionChange: BLSToExecutionChangeRepository;
48
53
 
54
+ // eth1 processing
55
+ preGenesisState: PreGenesisState;
56
+ preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
57
+
58
+ // all deposit data roots and merkle tree
59
+ depositDataRoot: DepositDataRootRepository;
60
+ eth1Data: Eth1DataRepository;
61
+
49
62
  // lightclient
50
63
  bestLightClientUpdate: BestLightClientUpdateRepository;
51
64
  checkpointHeader: CheckpointHeaderRepository;
@@ -56,8 +69,6 @@ export interface IBeaconDb {
56
69
 
57
70
  pruneHotDb(): Promise<void>;
58
71
 
59
- deleteDeprecatedEth1Data(): Promise<void>;
60
-
61
72
  /** Close the connection to the db instance and close the db store. */
62
73
  close(): Promise<void>;
63
74
  /** To inject metrics after CLI initialization */
@@ -0,0 +1,80 @@
1
+ import {ByteVectorType, CompositeViewDU, ListCompositeType} from "@chainsafe/ssz";
2
+ import {ChainForkConfig} from "@lodestar/config";
3
+ import {Db, KeyValue, Repository} from "@lodestar/db";
4
+ import {Root, ssz} from "@lodestar/types";
5
+ import {bytesToInt} from "@lodestar/utils";
6
+ import {Bucket, getBucketNameByValue} from "../buckets.js";
7
+
8
+ // TODO: Review where is best to put this type
9
+ export type DepositTree = CompositeViewDU<ListCompositeType<ByteVectorType>>;
10
+
11
+ export class DepositDataRootRepository extends Repository<number, Root> {
12
+ private depositRootTree?: DepositTree;
13
+
14
+ constructor(config: ChainForkConfig, db: Db) {
15
+ const bucket = Bucket.index_depositDataRoot;
16
+ super(config, db, bucket, ssz.Root, getBucketNameByValue(bucket));
17
+ }
18
+
19
+ decodeKey(data: Buffer): number {
20
+ return bytesToInt(super.decodeKey(data) as unknown as Uint8Array, "be");
21
+ }
22
+
23
+ // depositDataRoots stored by depositData index
24
+ getId(_value: Root): number {
25
+ throw new Error("Unable to create depositIndex from root");
26
+ }
27
+
28
+ async put(index: number, value: Root): Promise<void> {
29
+ await super.put(index, value);
30
+ await this.depositRootTreeSet(index, value);
31
+ }
32
+
33
+ async batchPut(items: KeyValue<number, Root>[]): Promise<void> {
34
+ await super.batchPut(items);
35
+ for (const {key, value} of items) {
36
+ await this.depositRootTreeSet(key, value);
37
+ }
38
+ }
39
+
40
+ async putList(roots: Root[]): Promise<void> {
41
+ await this.batchPut(roots.map((root, index) => ({key: index, value: root})));
42
+ }
43
+
44
+ async batchPutValues(values: {index: number; root: Root}[]): Promise<void> {
45
+ await this.batchPut(
46
+ values.map(({index, root}) => ({
47
+ key: index,
48
+ value: root,
49
+ }))
50
+ );
51
+ }
52
+
53
+ async getDepositRootTree(): Promise<DepositTree> {
54
+ if (!this.depositRootTree) {
55
+ const values = await this.values();
56
+ this.depositRootTree = ssz.phase0.DepositDataRootList.toViewDU(values);
57
+ }
58
+ return this.depositRootTree;
59
+ }
60
+
61
+ async getDepositRootTreeAtIndex(depositIndex: number): Promise<DepositTree> {
62
+ const depositRootTree = await this.getDepositRootTree();
63
+ return depositRootTree.sliceTo(depositIndex);
64
+ }
65
+
66
+ private async depositRootTreeSet(index: number, value: Uint8Array): Promise<void> {
67
+ const depositRootTree = await this.getDepositRootTree();
68
+
69
+ // TODO: Review and fix properly
70
+ if (index > depositRootTree.length) {
71
+ throw Error(`Error setting depositRootTree index ${index} > length ${depositRootTree.length}`);
72
+ }
73
+
74
+ if (index === depositRootTree.length) {
75
+ depositRootTree.push(value);
76
+ } else {
77
+ depositRootTree.set(index, value);
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,32 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {Db, Repository} from "@lodestar/db";
3
+ import {phase0, ssz} from "@lodestar/types";
4
+ import {Bucket, getBucketNameByValue} from "../buckets.js";
5
+
6
+ /**
7
+ * DepositData indexed by deposit index
8
+ * Removed when included on chain or old
9
+ */
10
+ export class DepositEventRepository extends Repository<number, phase0.DepositEvent> {
11
+ constructor(config: ChainForkConfig, db: Db) {
12
+ const bucket = Bucket.phase0_depositEvent;
13
+ super(config, db, bucket, ssz.phase0.DepositEvent, getBucketNameByValue(bucket));
14
+ }
15
+
16
+ async deleteOld(depositCount: number): Promise<void> {
17
+ const firstDepositIndex = await this.firstKey();
18
+ if (firstDepositIndex === null) {
19
+ return;
20
+ }
21
+ await this.batchDelete(Array.from({length: depositCount - firstDepositIndex}, (_, i) => i + firstDepositIndex));
22
+ }
23
+
24
+ async batchPutValues(depositEvents: phase0.DepositEvent[]): Promise<void> {
25
+ await this.batchPut(
26
+ depositEvents.map((depositEvent) => ({
27
+ key: depositEvent.index,
28
+ value: depositEvent,
29
+ }))
30
+ );
31
+ }
32
+ }