@lodestar/beacon-node 1.38.0 → 1.39.0-dev.100ab480bb

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 +8 -12
  20. package/lib/chain/chain.d.ts.map +1 -1
  21. package/lib/chain/chain.js +25 -59
  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 +4 -9
  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/stateCache/persistentCheckpointsCache.d.ts +4 -1
  51. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  52. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
  53. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  54. package/lib/chain/validation/aggregateAndProof.js +9 -0
  55. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  56. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  57. package/lib/chain/validation/attesterSlashing.js +2 -2
  58. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  59. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  60. package/lib/chain/validation/blobSidecar.js +2 -2
  61. package/lib/chain/validation/blobSidecar.js.map +1 -1
  62. package/lib/chain/validation/block.js +1 -1
  63. package/lib/chain/validation/block.js.map +1 -1
  64. package/lib/chain/validation/blsToExecutionChange.js +1 -1
  65. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  66. package/lib/chain/validation/dataColumnSidecar.js +2 -2
  67. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  68. package/lib/chain/validation/proposerSlashing.js +1 -1
  69. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  70. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  71. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  72. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +3 -2
  73. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  74. package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -4
  75. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  76. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +3 -2
  77. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  78. package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
  79. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  80. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
  81. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  82. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  83. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  84. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +3 -2
  85. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  86. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -3
  87. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  88. package/lib/chain/validation/syncCommittee.js +1 -1
  89. package/lib/chain/validation/syncCommittee.js.map +1 -1
  90. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  91. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -4
  92. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  93. package/lib/chain/validation/voluntaryExit.js +1 -1
  94. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  95. package/lib/db/beacon.d.ts +3 -7
  96. package/lib/db/beacon.d.ts.map +1 -1
  97. package/lib/db/beacon.js +33 -12
  98. package/lib/db/beacon.js.map +1 -1
  99. package/lib/db/buckets.d.ts +12 -6
  100. package/lib/db/buckets.d.ts.map +1 -1
  101. package/lib/db/buckets.js +6 -1
  102. package/lib/db/buckets.js.map +1 -1
  103. package/lib/db/interface.d.ts +2 -7
  104. package/lib/db/interface.d.ts.map +1 -1
  105. package/lib/db/repositories/index.d.ts +0 -3
  106. package/lib/db/repositories/index.d.ts.map +1 -1
  107. package/lib/db/repositories/index.js +0 -3
  108. package/lib/db/repositories/index.js.map +1 -1
  109. package/lib/execution/engine/http.d.ts +5 -13
  110. package/lib/execution/engine/http.d.ts.map +1 -1
  111. package/lib/execution/engine/http.js +6 -15
  112. package/lib/execution/engine/http.js.map +1 -1
  113. package/lib/execution/engine/index.d.ts.map +1 -1
  114. package/lib/execution/engine/index.js +1 -1
  115. package/lib/execution/engine/index.js.map +1 -1
  116. package/lib/execution/engine/interface.d.ts +1 -1
  117. package/lib/execution/engine/interface.d.ts.map +1 -1
  118. package/lib/execution/engine/interface.js.map +1 -1
  119. package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
  120. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
  121. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
  122. package/lib/execution/engine/jwt.d.ts.map +1 -0
  123. package/lib/execution/engine/jwt.js.map +1 -0
  124. package/lib/execution/engine/mock.d.ts +2 -6
  125. package/lib/execution/engine/mock.d.ts.map +1 -1
  126. package/lib/execution/engine/mock.js +4 -15
  127. package/lib/execution/engine/mock.js.map +1 -1
  128. package/lib/execution/engine/payloadIdCache.d.ts +1 -1
  129. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  130. package/lib/execution/engine/types.d.ts +1 -1
  131. package/lib/execution/engine/types.d.ts.map +1 -1
  132. package/lib/execution/engine/types.js +1 -1
  133. package/lib/execution/engine/types.js.map +1 -1
  134. package/lib/execution/engine/utils.d.ts +64 -2
  135. package/lib/execution/engine/utils.d.ts.map +1 -1
  136. package/lib/execution/engine/utils.js +91 -2
  137. package/lib/execution/engine/utils.js.map +1 -1
  138. package/lib/index.d.ts +1 -2
  139. package/lib/index.d.ts.map +1 -1
  140. package/lib/index.js +1 -2
  141. package/lib/index.js.map +1 -1
  142. package/lib/metrics/metrics/lodestar.d.ts +0 -49
  143. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  144. package/lib/metrics/metrics/lodestar.js +0 -134
  145. package/lib/metrics/metrics/lodestar.js.map +1 -1
  146. package/lib/network/core/events.d.ts +1 -1
  147. package/lib/network/core/events.d.ts.map +1 -1
  148. package/lib/network/core/events.js +1 -1
  149. package/lib/network/core/events.js.map +1 -1
  150. package/lib/network/events.d.ts +6 -1
  151. package/lib/network/events.d.ts.map +1 -1
  152. package/lib/network/events.js +7 -1
  153. package/lib/network/events.js.map +1 -1
  154. package/lib/node/nodejs.d.ts +6 -3
  155. package/lib/node/nodejs.d.ts.map +1 -1
  156. package/lib/node/nodejs.js +13 -10
  157. package/lib/node/nodejs.js.map +1 -1
  158. package/lib/node/notifier.d.ts.map +1 -1
  159. package/lib/node/notifier.js +0 -13
  160. package/lib/node/notifier.js.map +1 -1
  161. package/lib/node/options.d.ts +0 -2
  162. package/lib/node/options.d.ts.map +1 -1
  163. package/lib/node/options.js +0 -2
  164. package/lib/node/options.js.map +1 -1
  165. package/lib/node/utils/interop/deposits.d.ts +2 -1
  166. package/lib/node/utils/interop/deposits.d.ts.map +1 -1
  167. package/lib/node/utils/interop/deposits.js.map +1 -1
  168. package/lib/node/utils/interop/state.d.ts +1 -1
  169. package/lib/node/utils/interop/state.d.ts.map +1 -1
  170. package/lib/node/utils/state.d.ts +1 -7
  171. package/lib/node/utils/state.d.ts.map +1 -1
  172. package/lib/node/utils/state.js +1 -14
  173. package/lib/node/utils/state.js.map +1 -1
  174. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  175. package/lib/sync/backfill/backfill.js +2 -2
  176. package/lib/sync/backfill/backfill.js.map +1 -1
  177. package/lib/sync/backfill/verify.d.ts +2 -2
  178. package/lib/sync/backfill/verify.d.ts.map +1 -1
  179. package/lib/sync/backfill/verify.js +3 -3
  180. package/lib/sync/backfill/verify.js.map +1 -1
  181. package/lib/util/workerEvents.d.ts +1 -6
  182. package/lib/util/workerEvents.d.ts.map +1 -1
  183. package/lib/util/workerEvents.js +8 -8
  184. package/lib/util/workerEvents.js.map +1 -1
  185. package/package.json +14 -21
  186. package/src/api/impl/beacon/blocks/utils.ts +1 -1
  187. package/src/api/impl/beacon/state/index.ts +4 -5
  188. package/src/api/impl/validator/index.ts +1 -1
  189. package/src/chain/blocks/verifyBlock.ts +3 -24
  190. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -161
  191. package/src/chain/blocks/verifyBlocksSignatures.ts +15 -4
  192. package/src/chain/chain.ts +35 -69
  193. package/src/chain/initState.ts +1 -97
  194. package/src/chain/interface.ts +4 -8
  195. package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
  196. package/src/chain/opPools/opPool.ts +8 -8
  197. package/src/chain/options.ts +0 -6
  198. package/src/chain/prepareNextSlot.ts +2 -29
  199. package/src/chain/produceBlock/produceBlockBody.ts +33 -132
  200. package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
  201. package/src/chain/validation/aggregateAndProof.ts +12 -0
  202. package/src/chain/validation/attesterSlashing.ts +7 -2
  203. package/src/chain/validation/blobSidecar.ts +10 -2
  204. package/src/chain/validation/block.ts +1 -1
  205. package/src/chain/validation/blsToExecutionChange.ts +1 -1
  206. package/src/chain/validation/dataColumnSidecar.ts +6 -1
  207. package/src/chain/validation/proposerSlashing.ts +6 -1
  208. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  209. package/src/chain/validation/signatureSets/contributionAndProof.ts +6 -3
  210. package/src/chain/validation/signatureSets/syncCommittee.ts +6 -2
  211. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
  212. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +5 -2
  213. package/src/chain/validation/syncCommittee.ts +1 -1
  214. package/src/chain/validation/syncCommitteeContributionAndProof.ts +10 -6
  215. package/src/chain/validation/voluntaryExit.ts +1 -1
  216. package/src/db/beacon.ts +38 -16
  217. package/src/db/buckets.ts +12 -7
  218. package/src/db/interface.ts +2 -13
  219. package/src/db/repositories/index.ts +0 -3
  220. package/src/execution/engine/http.ts +12 -21
  221. package/src/execution/engine/index.ts +1 -1
  222. package/src/execution/engine/interface.ts +1 -1
  223. package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
  224. package/src/execution/engine/mock.ts +4 -17
  225. package/src/execution/engine/payloadIdCache.ts +1 -1
  226. package/src/execution/engine/types.ts +9 -9
  227. package/src/execution/engine/utils.ts +111 -5
  228. package/src/index.ts +1 -2
  229. package/src/metrics/metrics/lodestar.ts +0 -144
  230. package/src/network/core/events.ts +1 -1
  231. package/src/network/events.ts +7 -1
  232. package/src/node/nodejs.ts +20 -11
  233. package/src/node/notifier.ts +0 -16
  234. package/src/node/options.ts +0 -3
  235. package/src/node/utils/interop/deposits.ts +3 -1
  236. package/src/node/utils/interop/state.ts +1 -1
  237. package/src/node/utils/state.ts +3 -18
  238. package/src/sync/backfill/backfill.ts +14 -2
  239. package/src/sync/backfill/verify.ts +9 -2
  240. package/src/util/workerEvents.ts +9 -8
  241. package/lib/chain/genesis/genesis.d.ts +0 -51
  242. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  243. package/lib/chain/genesis/genesis.js +0 -123
  244. package/lib/chain/genesis/genesis.js.map +0 -1
  245. package/lib/chain/genesis/interface.d.ts +0 -13
  246. package/lib/chain/genesis/interface.d.ts.map +0 -1
  247. package/lib/chain/genesis/interface.js +0 -2
  248. package/lib/chain/genesis/interface.js.map +0 -1
  249. package/lib/chain/rewards/attestationsRewards.d.ts +0 -7
  250. package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
  251. package/lib/chain/rewards/attestationsRewards.js +0 -112
  252. package/lib/chain/rewards/attestationsRewards.js.map +0 -1
  253. package/lib/chain/rewards/blockRewards.d.ts +0 -14
  254. package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
  255. package/lib/chain/rewards/blockRewards.js +0 -94
  256. package/lib/chain/rewards/blockRewards.js.map +0 -1
  257. package/lib/chain/rewards/syncCommitteeRewards.d.ts +0 -6
  258. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
  259. package/lib/chain/rewards/syncCommitteeRewards.js +0 -37
  260. package/lib/chain/rewards/syncCommitteeRewards.js.map +0 -1
  261. package/lib/db/repositories/depositDataRoot.d.ts +0 -22
  262. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  263. package/lib/db/repositories/depositDataRoot.js +0 -62
  264. package/lib/db/repositories/depositDataRoot.js.map +0 -1
  265. package/lib/db/repositories/depositEvent.d.ts +0 -13
  266. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  267. package/lib/db/repositories/depositEvent.js +0 -27
  268. package/lib/db/repositories/depositEvent.js.map +0 -1
  269. package/lib/db/repositories/eth1Data.d.ts +0 -13
  270. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  271. package/lib/db/repositories/eth1Data.js +0 -26
  272. package/lib/db/repositories/eth1Data.js.map +0 -1
  273. package/lib/db/single/index.d.ts +0 -3
  274. package/lib/db/single/index.d.ts.map +0 -1
  275. package/lib/db/single/index.js +0 -3
  276. package/lib/db/single/index.js.map +0 -1
  277. package/lib/db/single/preGenesisState.d.ts +0 -16
  278. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  279. package/lib/db/single/preGenesisState.js +0 -29
  280. package/lib/db/single/preGenesisState.js.map +0 -1
  281. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
  282. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  283. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
  284. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
  285. package/lib/eth1/errors.d.ts +0 -66
  286. package/lib/eth1/errors.d.ts.map +0 -1
  287. package/lib/eth1/errors.js +0 -27
  288. package/lib/eth1/errors.js.map +0 -1
  289. package/lib/eth1/eth1DataCache.d.ts +0 -19
  290. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  291. package/lib/eth1/eth1DataCache.js +0 -19
  292. package/lib/eth1/eth1DataCache.js.map +0 -1
  293. package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
  294. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  295. package/lib/eth1/eth1DepositDataTracker.js +0 -317
  296. package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
  297. package/lib/eth1/eth1DepositsCache.d.ts +0 -42
  298. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  299. package/lib/eth1/eth1DepositsCache.js +0 -119
  300. package/lib/eth1/eth1DepositsCache.js.map +0 -1
  301. package/lib/eth1/eth1MergeBlockTracker.d.ts +0 -65
  302. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  303. package/lib/eth1/eth1MergeBlockTracker.js +0 -262
  304. package/lib/eth1/eth1MergeBlockTracker.js.map +0 -1
  305. package/lib/eth1/index.d.ts +0 -46
  306. package/lib/eth1/index.d.ts.map +0 -1
  307. package/lib/eth1/index.js +0 -121
  308. package/lib/eth1/index.js.map +0 -1
  309. package/lib/eth1/interface.d.ts +0 -112
  310. package/lib/eth1/interface.d.ts.map +0 -1
  311. package/lib/eth1/interface.js +0 -8
  312. package/lib/eth1/interface.js.map +0 -1
  313. package/lib/eth1/options.d.ts +0 -22
  314. package/lib/eth1/options.d.ts.map +0 -1
  315. package/lib/eth1/options.js +0 -8
  316. package/lib/eth1/options.js.map +0 -1
  317. package/lib/eth1/provider/eth1Provider.d.ts +0 -39
  318. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  319. package/lib/eth1/provider/eth1Provider.js +0 -147
  320. package/lib/eth1/provider/eth1Provider.js.map +0 -1
  321. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  322. package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
  323. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  324. package/lib/eth1/provider/jwt.js.map +0 -1
  325. package/lib/eth1/provider/utils.d.ts +0 -65
  326. package/lib/eth1/provider/utils.d.ts.map +0 -1
  327. package/lib/eth1/provider/utils.js +0 -120
  328. package/lib/eth1/provider/utils.js.map +0 -1
  329. package/lib/eth1/stream.d.ts +0 -15
  330. package/lib/eth1/stream.d.ts.map +0 -1
  331. package/lib/eth1/stream.js +0 -54
  332. package/lib/eth1/stream.js.map +0 -1
  333. package/lib/eth1/utils/depositContract.d.ts +0 -14
  334. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  335. package/lib/eth1/utils/depositContract.js +0 -33
  336. package/lib/eth1/utils/depositContract.js.map +0 -1
  337. package/lib/eth1/utils/deposits.d.ts +0 -8
  338. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  339. package/lib/eth1/utils/deposits.js +0 -47
  340. package/lib/eth1/utils/deposits.js.map +0 -1
  341. package/lib/eth1/utils/eth1Data.d.ts +0 -22
  342. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  343. package/lib/eth1/utils/eth1Data.js +0 -77
  344. package/lib/eth1/utils/eth1Data.js.map +0 -1
  345. package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
  346. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  347. package/lib/eth1/utils/eth1DepositEvent.js +0 -13
  348. package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
  349. package/lib/eth1/utils/eth1Vote.d.ts +0 -17
  350. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  351. package/lib/eth1/utils/eth1Vote.js +0 -111
  352. package/lib/eth1/utils/eth1Vote.js.map +0 -1
  353. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
  354. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  355. package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
  356. package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
  357. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
  358. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  359. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
  360. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
  361. package/src/chain/genesis/genesis.ts +0 -190
  362. package/src/chain/genesis/interface.ts +0 -14
  363. package/src/chain/rewards/attestationsRewards.ts +0 -196
  364. package/src/chain/rewards/blockRewards.ts +0 -150
  365. package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
  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,47 +0,0 @@
1
- import { Tree, toGindex } from "@chainsafe/persistent-merkle-tree";
2
- import { getEth1DepositCount } from "@lodestar/state-transition";
3
- import { ssz } from "@lodestar/types";
4
- import { toRootHex } from "@lodestar/utils";
5
- import { Eth1Error, Eth1ErrorCode } from "../errors.js";
6
- export async function getDeposits(
7
- // eth1_deposit_index represents the next deposit index to be added
8
- state, eth1Data, depositsGetter) {
9
- const depositIndex = state.eth1DepositIndex;
10
- const depositCount = eth1Data.depositCount;
11
- if (depositIndex > depositCount) {
12
- throw new Eth1Error({ code: Eth1ErrorCode.DEPOSIT_INDEX_TOO_HIGH, depositIndex, depositCount });
13
- }
14
- const depositsLen = getEth1DepositCount(state, eth1Data);
15
- if (depositsLen === 0) {
16
- return []; // If depositsLen === 0, we can return early since no deposit with be returned from depositsGetter
17
- }
18
- const indexRange = { gte: depositIndex, lt: depositIndex + depositsLen };
19
- const deposits = await depositsGetter(indexRange, eth1Data);
20
- if (deposits.length < depositsLen) {
21
- throw new Eth1Error({ code: Eth1ErrorCode.NOT_ENOUGH_DEPOSITS, len: deposits.length, expectedLen: depositsLen });
22
- }
23
- if (deposits.length > depositsLen) {
24
- throw new Eth1Error({ code: Eth1ErrorCode.TOO_MANY_DEPOSITS, len: deposits.length, expectedLen: depositsLen });
25
- }
26
- return deposits;
27
- }
28
- export function getDepositsWithProofs(depositEvents, depositRootTree, eth1Data) {
29
- // Get tree at this particular depositCount to compute correct proofs
30
- const viewAtDepositCount = depositRootTree.sliceTo(eth1Data.depositCount - 1);
31
- const depositRoot = viewAtDepositCount.hashTreeRoot();
32
- if (!ssz.Root.equals(depositRoot, eth1Data.depositRoot)) {
33
- throw new Eth1Error({
34
- code: Eth1ErrorCode.WRONG_DEPOSIT_ROOT,
35
- root: toRootHex(depositRoot),
36
- expectedRoot: toRootHex(eth1Data.depositRoot),
37
- });
38
- }
39
- // Already commited for .hashTreeRoot()
40
- const treeAtDepositCount = new Tree(viewAtDepositCount.node);
41
- const depositTreeDepth = viewAtDepositCount.type.depth;
42
- return depositEvents.map((log) => ({
43
- proof: treeAtDepositCount.getSingleProof(toGindex(depositTreeDepth, BigInt(log.index))),
44
- data: log.depositData,
45
- }));
46
- }
47
- //# sourceMappingURL=deposits.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deposits.js","sourceRoot":"","sources":["../../../src/eth1/utils/deposits.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { Root, phase0 } from "@lodestar/types";
2
- import { DepositTree } from "../../db/repositories/depositDataRoot.js";
3
- import { Eth1Block } from "../interface.js";
4
- type BlockNumber = number;
5
- /**
6
- * Appends partial eth1 data (depositRoot, depositCount) in a sequence of blocks
7
- * eth1 data deposit is inferred from sparse eth1 data obtained from the deposit logs
8
- */
9
- export declare function getEth1DataForBlocks(blocks: Eth1Block[], depositDescendingStream: AsyncIterable<phase0.DepositEvent>, depositRootTree: DepositTree, lastProcessedDepositBlockNumber: BlockNumber | null): Promise<(phase0.Eth1Data & Eth1Block)[]>;
10
- /**
11
- * Collect depositCount by blockNumber from a stream matching a block number range
12
- * For a given blockNumber it's depositCount is equal to the index + 1 of the
13
- * closest deposit event whose deposit.blockNumber <= blockNumber
14
- * @returns array ascending by blockNumber
15
- */
16
- export declare function getDepositsByBlockNumber(fromBlock: BlockNumber, toBlock: BlockNumber, depositEventDescendingStream: AsyncIterable<phase0.DepositEvent>): Promise<phase0.DepositEvent[]>;
17
- /**
18
- * Precompute a map of depositCount => depositRoot from a depositRootTree filled beforehand
19
- */
20
- export declare function getDepositRootByDepositCount(depositCounts: number[], depositRootTree: DepositTree): Map<number, Root>;
21
- export {};
22
- //# sourceMappingURL=eth1Data.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1Data.d.ts","sourceRoot":"","sources":["../../../src/eth1/utils/eth1Data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,0CAA0C,CAAC;AAGrE,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,KAAK,WAAW,GAAG,MAAM,CAAC;AAE1B;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,EAAE,EACnB,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,EAC3D,eAAe,EAAE,WAAW,EAC5B,+BAA+B,EAAE,WAAW,GAAG,IAAI,GAClD,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,CAkC1C;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,WAAW,EACpB,4BAA4B,EAAE,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,GAC/D,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAahC;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAkBrH"}
@@ -1,77 +0,0 @@
1
- import { binarySearchLte } from "../../util/binarySearch.js";
2
- import { Eth1Error, Eth1ErrorCode } from "../errors.js";
3
- /**
4
- * Appends partial eth1 data (depositRoot, depositCount) in a sequence of blocks
5
- * eth1 data deposit is inferred from sparse eth1 data obtained from the deposit logs
6
- */
7
- export async function getEth1DataForBlocks(blocks, depositDescendingStream, depositRootTree, lastProcessedDepositBlockNumber) {
8
- // Exclude blocks for which there is no valid eth1 data deposit
9
- if (lastProcessedDepositBlockNumber !== null) {
10
- blocks = blocks.filter((block) => block.blockNumber <= lastProcessedDepositBlockNumber);
11
- }
12
- // A valid block can be constructed using previous `state.eth1Data`, don't throw
13
- if (blocks.length === 0) {
14
- return [];
15
- }
16
- // Collect the latest deposit of each blockNumber in a block number range
17
- const fromBlock = blocks[0].blockNumber;
18
- const toBlock = blocks.at(-1)?.blockNumber;
19
- const depositsByBlockNumber = await getDepositsByBlockNumber(fromBlock, toBlock, depositDescendingStream);
20
- if (depositsByBlockNumber.length === 0) {
21
- throw new Eth1Error({ code: Eth1ErrorCode.NO_DEPOSITS_FOR_BLOCK_RANGE, fromBlock, toBlock });
22
- }
23
- // Precompute a map of depositCount => depositRoot (from depositRootTree)
24
- const depositCounts = depositsByBlockNumber.map((event) => event.index + 1);
25
- const depositRootByDepositCount = getDepositRootByDepositCount(depositCounts, depositRootTree);
26
- const eth1Datas = [];
27
- for (const block of blocks) {
28
- const deposit = binarySearchLte(depositsByBlockNumber, block.blockNumber, (event) => event.blockNumber);
29
- const depositCount = deposit.index + 1;
30
- const depositRoot = depositRootByDepositCount.get(depositCount);
31
- if (depositRoot === undefined) {
32
- throw new Eth1Error({ code: Eth1ErrorCode.NO_DEPOSIT_ROOT, depositCount });
33
- }
34
- eth1Datas.push({ ...block, depositCount, depositRoot });
35
- }
36
- return eth1Datas;
37
- }
38
- /**
39
- * Collect depositCount by blockNumber from a stream matching a block number range
40
- * For a given blockNumber it's depositCount is equal to the index + 1 of the
41
- * closest deposit event whose deposit.blockNumber <= blockNumber
42
- * @returns array ascending by blockNumber
43
- */
44
- export async function getDepositsByBlockNumber(fromBlock, toBlock, depositEventDescendingStream) {
45
- const depositCountMap = new Map();
46
- // Take blocks until the block under the range lower bound (included)
47
- for await (const deposit of depositEventDescendingStream) {
48
- if (deposit.blockNumber <= toBlock && !depositCountMap.has(deposit.blockNumber)) {
49
- depositCountMap.set(deposit.blockNumber, deposit);
50
- }
51
- if (deposit.blockNumber < fromBlock) {
52
- break;
53
- }
54
- }
55
- return Array.from(depositCountMap.values()).sort((a, b) => a.blockNumber - b.blockNumber);
56
- }
57
- /**
58
- * Precompute a map of depositCount => depositRoot from a depositRootTree filled beforehand
59
- */
60
- export function getDepositRootByDepositCount(depositCounts, depositRootTree) {
61
- // Unique + sort numerically in descending order
62
- depositCounts = [...new Set(depositCounts)].sort((a, b) => b - a);
63
- if (depositCounts.length > 0) {
64
- const maxIndex = depositCounts[0] - 1;
65
- const treeLength = depositRootTree.length - 1;
66
- if (maxIndex > treeLength) {
67
- throw new Eth1Error({ code: Eth1ErrorCode.NOT_ENOUGH_DEPOSIT_ROOTS, index: maxIndex, treeLength });
68
- }
69
- }
70
- const depositRootByDepositCount = new Map();
71
- for (const depositCount of depositCounts) {
72
- depositRootTree = depositRootTree.sliceTo(depositCount - 1);
73
- depositRootByDepositCount.set(depositCount, depositRootTree.hashTreeRoot());
74
- }
75
- return depositRootByDepositCount;
76
- }
77
- //# sourceMappingURL=eth1Data.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1Data.js","sourceRoot":"","sources":["../../../src/eth1/utils/eth1Data.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Assert that an array of deposits are consecutive and ascending
3
- */
4
- export declare function assertConsecutiveDeposits(depositEvents: {
5
- index: number;
6
- }[]): void;
7
- //# sourceMappingURL=eth1DepositEvent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1DepositEvent.d.ts","sourceRoot":"","sources":["../../../src/eth1/utils/eth1DepositEvent.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,EAAE,GAAG,IAAI,CAQhF"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Assert that an array of deposits are consecutive and ascending
3
- */
4
- export function assertConsecutiveDeposits(depositEvents) {
5
- for (let i = 0; i < depositEvents.length - 1; i++) {
6
- const indexLeft = depositEvents[i].index;
7
- const indexRight = depositEvents[i + 1].index;
8
- if (indexLeft !== indexRight - 1) {
9
- throw Error(`Non consecutive deposits. deposit[${i}] = ${indexLeft}, deposit[${i + 1}] ${indexRight}`);
10
- }
11
- }
12
- }
13
- //# sourceMappingURL=eth1DepositEvent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1DepositEvent.js","sourceRoot":"","sources":["../../../src/eth1/utils/eth1DepositEvent.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,aAAgC;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACzC,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9C,IAAI,SAAS,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC,qCAAqC,CAAC,OAAO,SAAS,aAAa,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,17 +0,0 @@
1
- import { ChainForkConfig } from "@lodestar/config";
2
- import { BeaconStateAllForks } from "@lodestar/state-transition";
3
- import { phase0 } from "@lodestar/types";
4
- export type Eth1DataGetter = ({ timestampRange, }: {
5
- timestampRange: {
6
- gte: number;
7
- lte: number;
8
- };
9
- }) => Promise<phase0.Eth1Data[]>;
10
- export declare function getEth1VotesToConsider(config: ChainForkConfig, state: BeaconStateAllForks, eth1DataGetter: Eth1DataGetter): Promise<phase0.Eth1Data[]>;
11
- export declare function pickEth1Vote(state: BeaconStateAllForks, votesToConsider: phase0.Eth1Data[]): phase0.Eth1Data;
12
- /**
13
- * Serialize eth1Data types to a unique string ID. It is only used for comparison.
14
- */
15
- export declare function fastSerializeEth1Data(eth1Data: phase0.Eth1Data): string;
16
- export declare function votingPeriodStartTime(config: ChainForkConfig, state: BeaconStateAllForks): number;
17
- //# sourceMappingURL=eth1Vote.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1Vote.d.ts","sourceRoot":"","sources":["../../../src/eth1/utils/eth1Vote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,mBAAmB,EAAwC,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAU,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAGhD,MAAM,MAAM,cAAc,GAAG,CAAC,EAC5B,cAAc,GACf,EAAE;IACD,cAAc,EAAE;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,CAAC;CAC5C,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEjC,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAyB5B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,CA+C5G;AAyCD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAEvE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAGjG"}
@@ -1,111 +0,0 @@
1
- import { EPOCHS_PER_ETH1_VOTING_PERIOD, SLOTS_PER_EPOCH, isForkPostElectra } from "@lodestar/params";
2
- import { computeTimeAtSlot } from "@lodestar/state-transition";
3
- import { toRootHex } from "@lodestar/utils";
4
- export async function getEth1VotesToConsider(config, state, eth1DataGetter) {
5
- const fork = config.getForkName(state.slot);
6
- if (isForkPostElectra(fork)) {
7
- const { eth1DepositIndex, depositRequestsStartIndex } = state;
8
- if (eth1DepositIndex === Number(depositRequestsStartIndex)) {
9
- return state.eth1DataVotes.getAllReadonly();
10
- }
11
- }
12
- const periodStart = votingPeriodStartTime(config, state);
13
- const { SECONDS_PER_ETH1_BLOCK, ETH1_FOLLOW_DISTANCE } = config;
14
- // Modified version of the spec function to fetch the required range directly from the DB
15
- return (await eth1DataGetter({
16
- timestampRange: {
17
- // Spec v0.12.2
18
- // is_candidate_block =
19
- // block.timestamp + SECONDS_PER_ETH1_BLOCK * ETH1_FOLLOW_DISTANCE <= period_start &&
20
- // block.timestamp + SECONDS_PER_ETH1_BLOCK * ETH1_FOLLOW_DISTANCE * 2 >= period_start
21
- lte: periodStart - SECONDS_PER_ETH1_BLOCK * ETH1_FOLLOW_DISTANCE,
22
- gte: periodStart - SECONDS_PER_ETH1_BLOCK * ETH1_FOLLOW_DISTANCE * 2,
23
- },
24
- })).filter((eth1Data) => eth1Data.depositCount >= state.eth1Data.depositCount);
25
- }
26
- export function pickEth1Vote(state, votesToConsider) {
27
- const votesToConsiderKeys = new Set();
28
- for (const eth1Data of votesToConsider) {
29
- votesToConsiderKeys.add(getEth1DataKey(eth1Data));
30
- }
31
- const eth1DataHashToEth1Data = new Map();
32
- const eth1DataVoteCountByRoot = new Map();
33
- const eth1DataVotesOrder = [];
34
- // BeaconStateAllForks is always represented as a tree with a hashing cache.
35
- // To check equality its cheaper to use hashTreeRoot as keys.
36
- // However `votesToConsider` is an array of values since those are read from DB.
37
- // TODO: Optimize cache of known votes, to prevent re-hashing stored values.
38
- // Note: for low validator counts it's not very important, since this runs once per proposal
39
- const eth1DataVotes = state.eth1DataVotes.getAllReadonly();
40
- for (const eth1DataVote of eth1DataVotes) {
41
- const rootHex = getEth1DataKey(eth1DataVote);
42
- if (votesToConsiderKeys.has(rootHex)) {
43
- const prevVoteCount = eth1DataVoteCountByRoot.get(rootHex);
44
- eth1DataVoteCountByRoot.set(rootHex, 1 + (prevVoteCount ?? 0));
45
- // Cache eth1DataVote to root Map only once per root
46
- if (prevVoteCount === undefined) {
47
- eth1DataHashToEth1Data.set(rootHex, eth1DataVote);
48
- eth1DataVotesOrder.push(rootHex);
49
- }
50
- }
51
- }
52
- const eth1DataRootsMaxVotes = getKeysWithMaxValue(eth1DataVoteCountByRoot);
53
- // No votes, vote for the last valid vote
54
- if (eth1DataRootsMaxVotes.length === 0) {
55
- return votesToConsider.at(-1) ?? state.eth1Data;
56
- }
57
- // If there's a single winning vote with a majority vote that one
58
- if (eth1DataRootsMaxVotes.length === 1) {
59
- return eth1DataHashToEth1Data.get(eth1DataRootsMaxVotes[0]) ?? state.eth1Data;
60
- }
61
- // If there are multiple winning votes, vote for the latest one
62
- const latestMostVotedRoot = eth1DataVotesOrder[Math.max(...eth1DataRootsMaxVotes.map((root) => eth1DataVotesOrder.indexOf(root)))];
63
- return eth1DataHashToEth1Data.get(latestMostVotedRoot) ?? state.eth1Data;
64
- }
65
- /**
66
- * Returns the array of keys with max value. May return 0, 1 or more keys
67
- */
68
- function getKeysWithMaxValue(map) {
69
- const entries = Array.from(map.entries());
70
- let keysMax = [];
71
- let valueMax = -Infinity;
72
- for (const [key, value] of entries) {
73
- if (value > valueMax) {
74
- keysMax = [key];
75
- valueMax = value;
76
- }
77
- else if (value === valueMax) {
78
- keysMax.push(key);
79
- }
80
- }
81
- return keysMax;
82
- }
83
- /**
84
- * Key-ed by fastSerializeEth1Data(). votesToConsider is read from DB as struct and always has a length of 2048.
85
- * `state.eth1DataVotes` has a length between 0 and ETH1_FOLLOW_DISTANCE with an equal probability of each value.
86
- * So to get the average faster time to key both votesToConsider and state.eth1DataVotes it's better to use
87
- * fastSerializeEth1Data(). However, a long term solution is to cache valid votes in memory and prevent having
88
- * to recompute their key on every proposal.
89
- *
90
- * With `fastSerializeEth1Data()`: avg time 20 ms/op
91
- * ✓ pickEth1Vote - no votes 233.0587 ops/s 4.290764 ms/op - 121 runs 1.02 s
92
- * ✓ pickEth1Vote - max votes 29.21546 ops/s 34.22845 ms/op - 25 runs 1.38 s
93
- *
94
- * With `toHexString(ssz.phase0.Eth1Data.hashTreeRoot(eth1Data))`: avg time 23 ms/op
95
- * ✓ pickEth1Vote - no votes 46.12341 ops/s 21.68096 ms/op - 133 runs 3.40 s
96
- * ✓ pickEth1Vote - max votes 37.89912 ops/s 26.38583 ms/op - 29 runs 1.27 s
97
- */
98
- function getEth1DataKey(eth1Data) {
99
- return fastSerializeEth1Data(eth1Data);
100
- }
101
- /**
102
- * Serialize eth1Data types to a unique string ID. It is only used for comparison.
103
- */
104
- export function fastSerializeEth1Data(eth1Data) {
105
- return toRootHex(eth1Data.blockHash) + eth1Data.depositCount.toString(16) + toRootHex(eth1Data.depositRoot);
106
- }
107
- export function votingPeriodStartTime(config, state) {
108
- const eth1VotingPeriodStartSlot = state.slot - (state.slot % (EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH));
109
- return computeTimeAtSlot(config, eth1VotingPeriodStartSlot, state.genesisTime);
110
- }
111
- //# sourceMappingURL=eth1Vote.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1Vote.js","sourceRoot":"","sources":["../../../src/eth1/utils/eth1Vote.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { phase0 } from "@lodestar/types";
2
- import { BatchDepositEvents } from "../interface.js";
3
- /**
4
- * Return deposit events of blocks grouped/sorted by block number and deposit index
5
- * Blocks without events are omitted
6
- * @param depositEvents range deposit events
7
- */
8
- export declare function groupDepositEventsByBlock(depositEvents: phase0.DepositEvent[]): BatchDepositEvents[];
9
- //# sourceMappingURL=groupDepositEventsByBlock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groupDepositEventsByBlock.d.ts","sourceRoot":"","sources":["../../../src/eth1/utils/groupDepositEventsByBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,kBAAkB,EAAE,CAUpG"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Return deposit events of blocks grouped/sorted by block number and deposit index
3
- * Blocks without events are omitted
4
- * @param depositEvents range deposit events
5
- */
6
- export function groupDepositEventsByBlock(depositEvents) {
7
- depositEvents.sort((event1, event2) => event1.index - event2.index);
8
- const depositsByBlockMap = new Map();
9
- for (const deposit of depositEvents) {
10
- depositsByBlockMap.set(deposit.blockNumber, [...(depositsByBlockMap.get(deposit.blockNumber) || []), deposit]);
11
- }
12
- return Array.from(depositsByBlockMap.entries()).map(([blockNumber, depositEvents]) => ({
13
- blockNumber,
14
- depositEvents,
15
- }));
16
- }
17
- //# sourceMappingURL=groupDepositEventsByBlock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groupDepositEventsByBlock.js","sourceRoot":"","sources":["../../../src/eth1/utils/groupDepositEventsByBlock.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,aAAoC;IAC5E,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAiC,CAAC;IACpE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,WAAW;QACX,aAAa;KACd,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1,10 +0,0 @@
1
- import { ChainConfig } from "@lodestar/config";
2
- /**
3
- * Utility for fetching genesis min genesis time block
4
- * Returns an approximation of the next block diff to fetch to progressively
5
- * get closer to the block that satisfies min genesis time condition
6
- */
7
- export declare function optimizeNextBlockDiffForGenesis(lastFetchedBlock: {
8
- timestamp: number;
9
- }, params: Pick<ChainConfig, "MIN_GENESIS_TIME" | "GENESIS_DELAY" | "SECONDS_PER_ETH1_BLOCK">): number;
10
- //# sourceMappingURL=optimizeNextBlockDiffForGenesis.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimizeNextBlockDiffForGenesis.d.ts","sourceRoot":"","sources":["../../../src/eth1/utils/optimizeNextBlockDiffForGenesis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,gBAAgB,EAAE;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,EACrC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,kBAAkB,GAAG,eAAe,GAAG,wBAAwB,CAAC,GACzF,MAAM,CAOR"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Utility for fetching genesis min genesis time block
3
- * Returns an approximation of the next block diff to fetch to progressively
4
- * get closer to the block that satisfies min genesis time condition
5
- */
6
- export function optimizeNextBlockDiffForGenesis(lastFetchedBlock, params) {
7
- const timeToGenesis = params.MIN_GENESIS_TIME - params.GENESIS_DELAY - lastFetchedBlock.timestamp;
8
- const numBlocksToGenesis = Math.floor(timeToGenesis / params.SECONDS_PER_ETH1_BLOCK);
9
- if (numBlocksToGenesis <= 2) {
10
- return 1;
11
- }
12
- return Math.max(1, Math.floor(numBlocksToGenesis / 2));
13
- }
14
- //# sourceMappingURL=optimizeNextBlockDiffForGenesis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimizeNextBlockDiffForGenesis.js","sourceRoot":"","sources":["../../../src/eth1/utils/optimizeNextBlockDiffForGenesis.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC7C,gBAAqC,EACrC,MAA0F;IAE1F,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC;IAClG,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACrF,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -1,190 +0,0 @@
1
- import {Tree, toGindex} from "@chainsafe/persistent-merkle-tree";
2
- import {BeaconConfig, ChainForkConfig} from "@lodestar/config";
3
- import {GENESIS_EPOCH, GENESIS_SLOT} from "@lodestar/params";
4
- import {
5
- BeaconStateAllForks,
6
- CachedBeaconStateAllForks,
7
- applyDeposits,
8
- applyEth1BlockHash,
9
- applyTimestamp,
10
- createCachedBeaconState,
11
- createEmptyEpochCacheImmutableData,
12
- getActiveValidatorIndices,
13
- getGenesisBeaconState,
14
- getTemporaryBlockHeader,
15
- } from "@lodestar/state-transition";
16
- import {phase0, ssz} from "@lodestar/types";
17
- import {Logger} from "@lodestar/utils";
18
- import {DepositTree} from "../../db/repositories/depositDataRoot.js";
19
- import {IEth1Provider} from "../../eth1/index.js";
20
- import {IEth1StreamParams} from "../../eth1/interface.js";
21
- import {getDepositsAndBlockStreamForGenesis, getDepositsStream} from "../../eth1/stream.js";
22
- import {GenesisResult, IGenesisBuilder} from "./interface.js";
23
-
24
- export type GenesisBuilderKwargs = {
25
- config: ChainForkConfig;
26
- eth1Provider: IEth1Provider;
27
- logger: Logger;
28
-
29
- /** Use to restore pending progress */
30
- pendingStatus?: {
31
- state: BeaconStateAllForks;
32
- depositTree: DepositTree;
33
- lastProcessedBlockNumber: number;
34
- };
35
-
36
- signal?: AbortSignal;
37
- maxBlocksPerPoll?: number;
38
- };
39
-
40
- export class GenesisBuilder implements IGenesisBuilder {
41
- // Expose state to persist on error
42
- readonly state: CachedBeaconStateAllForks;
43
- readonly depositTree: DepositTree;
44
- /** Is null if no block has been processed yet */
45
- lastProcessedBlockNumber: number | null = null;
46
-
47
- private readonly config: BeaconConfig;
48
- private readonly eth1Provider: IEth1Provider;
49
- private readonly logger: Logger;
50
- private readonly signal?: AbortSignal;
51
- private readonly eth1Params: IEth1StreamParams;
52
- private readonly depositCache = new Set<number>();
53
- private readonly fromBlock: number;
54
- private readonly logEvery = 30 * 1000;
55
- private lastLog = 0;
56
- /** Current count of active validators in the state */
57
- private activatedValidatorCount: number;
58
-
59
- constructor({config, eth1Provider, logger, signal, pendingStatus, maxBlocksPerPoll}: GenesisBuilderKwargs) {
60
- // at genesis builder, there is no genesis validator so we don't have a real BeaconConfig
61
- // but we need BeaconConfig to temporarily create CachedBeaconState, the cast here is safe since we don't use any getDomain here
62
- // the use of state as CachedBeaconState is just for convenient, GenesisResult returns TreeView anyway
63
- this.eth1Provider = eth1Provider;
64
- this.logger = logger;
65
- this.signal = signal;
66
- this.eth1Params = {
67
- ...config,
68
- maxBlocksPerPoll: maxBlocksPerPoll ?? 10000,
69
- };
70
-
71
- let stateView: BeaconStateAllForks;
72
-
73
- if (pendingStatus) {
74
- this.logger.info("Restoring pending genesis state", {block: pendingStatus.lastProcessedBlockNumber});
75
- stateView = pendingStatus.state;
76
- this.depositTree = pendingStatus.depositTree;
77
- this.fromBlock = Math.max(pendingStatus.lastProcessedBlockNumber + 1, this.eth1Provider.deployBlock);
78
- } else {
79
- stateView = getGenesisBeaconState(
80
- config,
81
- ssz.phase0.Eth1Data.defaultValue(),
82
- getTemporaryBlockHeader(config, config.getForkTypes(GENESIS_SLOT).BeaconBlock.defaultValue())
83
- );
84
- this.depositTree = ssz.phase0.DepositDataRootList.defaultViewDU();
85
- this.fromBlock = this.eth1Provider.deployBlock;
86
- }
87
-
88
- // TODO - PENDING: Ensure EpochCacheImmutableData is created only once
89
- this.state = createCachedBeaconState(stateView, createEmptyEpochCacheImmutableData(config, stateView));
90
- this.config = this.state.config;
91
- this.activatedValidatorCount = getActiveValidatorIndices(stateView, GENESIS_EPOCH).length;
92
- }
93
-
94
- /**
95
- * Get eth1 deposit events and blocks and apply to this.state until we found genesis.
96
- */
97
- async waitForGenesis(): Promise<GenesisResult> {
98
- await this.eth1Provider.validateContract();
99
-
100
- // Load data from data from this.db.depositData, this.db.depositDataRoot
101
- // And start from a more recent fromBlock
102
- const blockNumberValidatorGenesis = await this.waitForGenesisValidators();
103
-
104
- const depositsAndBlocksStream = getDepositsAndBlockStreamForGenesis(
105
- blockNumberValidatorGenesis,
106
- this.eth1Provider,
107
- this.eth1Params,
108
- this.signal
109
- );
110
-
111
- for await (const [depositEvents, block] of depositsAndBlocksStream) {
112
- this.applyDeposits(depositEvents);
113
- applyTimestamp(this.config, this.state, block.timestamp);
114
- applyEth1BlockHash(this.state, block.blockHash);
115
- this.lastProcessedBlockNumber = block.blockNumber;
116
-
117
- if (
118
- this.state.genesisTime >= this.config.MIN_GENESIS_TIME &&
119
- this.activatedValidatorCount >= this.config.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT
120
- ) {
121
- this.logger.info("Found genesis state", {blockNumber: block.blockNumber});
122
- return {
123
- state: this.state,
124
- depositTree: this.depositTree,
125
- block,
126
- };
127
- }
128
-
129
- this.throttledLog(`Waiting for min genesis time ${block.timestamp} / ${this.config.MIN_GENESIS_TIME}`);
130
- }
131
-
132
- throw Error("depositsStream stopped without a valid genesis state");
133
- }
134
-
135
- /**
136
- * First phase of waiting for genesis.
137
- * Stream deposits events in batches as big as possible without querying block data
138
- * @returns Block number at which there are enough active validators is state for genesis
139
- */
140
- private async waitForGenesisValidators(): Promise<number> {
141
- const depositsStream = getDepositsStream(this.fromBlock, this.eth1Provider, this.eth1Params, this.signal);
142
-
143
- for await (const {depositEvents, blockNumber} of depositsStream) {
144
- this.applyDeposits(depositEvents);
145
- this.lastProcessedBlockNumber = blockNumber;
146
-
147
- if (this.activatedValidatorCount >= this.config.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT) {
148
- this.logger.info("Found enough genesis validators", {blockNumber});
149
- return blockNumber;
150
- }
151
-
152
- this.throttledLog(
153
- `Found ${this.state.validators.length} / ${this.config.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT} validators to genesis`
154
- );
155
- }
156
-
157
- throw Error("depositsStream stopped without a valid genesis state");
158
- }
159
-
160
- private applyDeposits(depositEvents: phase0.DepositEvent[]): void {
161
- const newDeposits = depositEvents
162
- .filter((depositEvent) => !this.depositCache.has(depositEvent.index))
163
- .map((depositEvent) => {
164
- this.depositCache.add(depositEvent.index);
165
- this.depositTree.push(ssz.phase0.DepositData.hashTreeRoot(depositEvent.depositData));
166
- const gindex = toGindex(this.depositTree.type.depth, BigInt(depositEvent.index));
167
-
168
- // Apply changes from the push above
169
- this.depositTree.commit();
170
- const depositTreeNode = this.depositTree.node;
171
- return {
172
- proof: new Tree(depositTreeNode).getSingleProof(gindex),
173
- data: depositEvent.depositData,
174
- };
175
- });
176
-
177
- const {activatedValidatorCount} = applyDeposits(this.config, this.state, newDeposits, this.depositTree);
178
- this.activatedValidatorCount += activatedValidatorCount;
179
-
180
- // TODO: If necessary persist deposits here to this.db.depositData, this.db.depositDataRoot
181
- }
182
-
183
- /** Throttle genesis generation status log to prevent spamming */
184
- private throttledLog(message: string): void {
185
- if (Date.now() - this.lastLog > this.logEvery) {
186
- this.lastLog = Date.now();
187
- this.logger.info(message);
188
- }
189
- }
190
- }
@@ -1,14 +0,0 @@
1
- import {CompositeViewDU, VectorCompositeType} from "@chainsafe/ssz";
2
- import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
3
- import {ssz} from "@lodestar/types";
4
- import {Eth1Block} from "../../eth1/interface.js";
5
-
6
- export type GenesisResult = {
7
- state: CachedBeaconStateAllForks;
8
- depositTree: CompositeViewDU<VectorCompositeType<typeof ssz.Root>>;
9
- block: Eth1Block;
10
- };
11
-
12
- export interface IGenesisBuilder {
13
- waitForGenesis: () => Promise<GenesisResult>;
14
- }