@lodestar/beacon-node 1.38.0 → 1.39.0-dev.39dac0f03d

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 (388) 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 +2 -2
  18. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  19. package/lib/chain/chain.d.ts +1 -4
  20. package/lib/chain/chain.d.ts.map +1 -1
  21. package/lib/chain/chain.js +10 -28
  22. package/lib/chain/chain.js.map +1 -1
  23. package/lib/chain/initState.d.ts +1 -14
  24. package/lib/chain/initState.d.ts.map +1 -1
  25. package/lib/chain/initState.js +1 -62
  26. package/lib/chain/initState.js.map +1 -1
  27. package/lib/chain/interface.d.ts +0 -2
  28. package/lib/chain/interface.d.ts.map +1 -1
  29. package/lib/chain/interface.js.map +1 -1
  30. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
  31. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  32. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
  33. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  34. package/lib/chain/opPools/opPool.d.ts +3 -0
  35. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  36. package/lib/chain/opPools/opPool.js +9 -8
  37. package/lib/chain/opPools/opPool.js.map +1 -1
  38. package/lib/chain/options.d.ts +0 -4
  39. package/lib/chain/options.d.ts.map +1 -1
  40. package/lib/chain/options.js +0 -2
  41. package/lib/chain/options.js.map +1 -1
  42. package/lib/chain/prepareNextSlot.d.ts +0 -4
  43. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  44. package/lib/chain/prepareNextSlot.js +2 -22
  45. package/lib/chain/prepareNextSlot.js.map +1 -1
  46. package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -22
  47. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  48. package/lib/chain/produceBlock/produceBlockBody.js +32 -98
  49. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  50. package/lib/chain/rewards/attestationsRewards.d.ts +3 -2
  51. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
  52. package/lib/chain/rewards/attestationsRewards.js +9 -9
  53. package/lib/chain/rewards/attestationsRewards.js.map +1 -1
  54. package/lib/chain/rewards/blockRewards.d.ts +2 -1
  55. package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
  56. package/lib/chain/rewards/blockRewards.js +5 -5
  57. package/lib/chain/rewards/blockRewards.js.map +1 -1
  58. package/lib/chain/rewards/syncCommitteeRewards.d.ts +3 -2
  59. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
  60. package/lib/chain/rewards/syncCommitteeRewards.js +2 -3
  61. package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
  62. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
  63. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  64. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
  65. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  66. package/lib/chain/validation/attesterSlashing.js +2 -2
  67. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  68. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  69. package/lib/chain/validation/blobSidecar.js +2 -2
  70. package/lib/chain/validation/blobSidecar.js.map +1 -1
  71. package/lib/chain/validation/block.js +1 -1
  72. package/lib/chain/validation/block.js.map +1 -1
  73. package/lib/chain/validation/blsToExecutionChange.js +1 -1
  74. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  75. package/lib/chain/validation/dataColumnSidecar.js +2 -2
  76. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  77. package/lib/chain/validation/proposerSlashing.js +1 -1
  78. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  79. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  80. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  81. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +3 -2
  82. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  83. package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -4
  84. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  85. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +3 -2
  86. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  87. package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
  88. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  89. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
  90. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  91. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  92. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  93. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +3 -2
  94. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  95. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -3
  96. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  97. package/lib/chain/validation/syncCommittee.js +1 -1
  98. package/lib/chain/validation/syncCommittee.js.map +1 -1
  99. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  100. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -4
  101. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  102. package/lib/chain/validation/voluntaryExit.js +1 -1
  103. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  104. package/lib/db/beacon.d.ts +3 -7
  105. package/lib/db/beacon.d.ts.map +1 -1
  106. package/lib/db/beacon.js +33 -12
  107. package/lib/db/beacon.js.map +1 -1
  108. package/lib/db/buckets.d.ts +12 -6
  109. package/lib/db/buckets.d.ts.map +1 -1
  110. package/lib/db/buckets.js +6 -1
  111. package/lib/db/buckets.js.map +1 -1
  112. package/lib/db/interface.d.ts +2 -7
  113. package/lib/db/interface.d.ts.map +1 -1
  114. package/lib/db/repositories/index.d.ts +0 -3
  115. package/lib/db/repositories/index.d.ts.map +1 -1
  116. package/lib/db/repositories/index.js +0 -3
  117. package/lib/db/repositories/index.js.map +1 -1
  118. package/lib/execution/engine/http.d.ts +5 -13
  119. package/lib/execution/engine/http.d.ts.map +1 -1
  120. package/lib/execution/engine/http.js +6 -15
  121. package/lib/execution/engine/http.js.map +1 -1
  122. package/lib/execution/engine/index.d.ts.map +1 -1
  123. package/lib/execution/engine/index.js +1 -1
  124. package/lib/execution/engine/index.js.map +1 -1
  125. package/lib/execution/engine/interface.d.ts +1 -1
  126. package/lib/execution/engine/interface.d.ts.map +1 -1
  127. package/lib/execution/engine/interface.js.map +1 -1
  128. package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
  129. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
  130. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
  131. package/lib/execution/engine/jwt.d.ts.map +1 -0
  132. package/lib/execution/engine/jwt.js.map +1 -0
  133. package/lib/execution/engine/mock.d.ts +2 -6
  134. package/lib/execution/engine/mock.d.ts.map +1 -1
  135. package/lib/execution/engine/mock.js +4 -15
  136. package/lib/execution/engine/mock.js.map +1 -1
  137. package/lib/execution/engine/payloadIdCache.d.ts +1 -1
  138. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  139. package/lib/execution/engine/types.d.ts +1 -1
  140. package/lib/execution/engine/types.d.ts.map +1 -1
  141. package/lib/execution/engine/types.js +1 -1
  142. package/lib/execution/engine/types.js.map +1 -1
  143. package/lib/execution/engine/utils.d.ts +64 -2
  144. package/lib/execution/engine/utils.d.ts.map +1 -1
  145. package/lib/execution/engine/utils.js +91 -2
  146. package/lib/execution/engine/utils.js.map +1 -1
  147. package/lib/index.d.ts +1 -2
  148. package/lib/index.d.ts.map +1 -1
  149. package/lib/index.js +1 -2
  150. package/lib/index.js.map +1 -1
  151. package/lib/metrics/metrics/lodestar.d.ts +0 -49
  152. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  153. package/lib/metrics/metrics/lodestar.js +0 -134
  154. package/lib/metrics/metrics/lodestar.js.map +1 -1
  155. package/lib/network/core/events.d.ts +1 -1
  156. package/lib/network/core/events.d.ts.map +1 -1
  157. package/lib/network/core/events.js +1 -1
  158. package/lib/network/core/events.js.map +1 -1
  159. package/lib/network/events.d.ts +6 -1
  160. package/lib/network/events.d.ts.map +1 -1
  161. package/lib/network/events.js +7 -1
  162. package/lib/network/events.js.map +1 -1
  163. package/lib/node/nodejs.d.ts.map +1 -1
  164. package/lib/node/nodejs.js +10 -9
  165. package/lib/node/nodejs.js.map +1 -1
  166. package/lib/node/notifier.d.ts.map +1 -1
  167. package/lib/node/notifier.js +0 -13
  168. package/lib/node/notifier.js.map +1 -1
  169. package/lib/node/options.d.ts +0 -2
  170. package/lib/node/options.d.ts.map +1 -1
  171. package/lib/node/options.js +0 -2
  172. package/lib/node/options.js.map +1 -1
  173. package/lib/node/utils/interop/deposits.d.ts +2 -1
  174. package/lib/node/utils/interop/deposits.d.ts.map +1 -1
  175. package/lib/node/utils/interop/deposits.js.map +1 -1
  176. package/lib/node/utils/interop/state.d.ts +1 -1
  177. package/lib/node/utils/interop/state.d.ts.map +1 -1
  178. package/lib/node/utils/state.d.ts +1 -7
  179. package/lib/node/utils/state.d.ts.map +1 -1
  180. package/lib/node/utils/state.js +1 -14
  181. package/lib/node/utils/state.js.map +1 -1
  182. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  183. package/lib/sync/backfill/backfill.js +2 -2
  184. package/lib/sync/backfill/backfill.js.map +1 -1
  185. package/lib/sync/backfill/verify.d.ts +2 -2
  186. package/lib/sync/backfill/verify.d.ts.map +1 -1
  187. package/lib/sync/backfill/verify.js +3 -3
  188. package/lib/sync/backfill/verify.js.map +1 -1
  189. package/lib/util/workerEvents.d.ts +1 -6
  190. package/lib/util/workerEvents.d.ts.map +1 -1
  191. package/lib/util/workerEvents.js +8 -8
  192. package/lib/util/workerEvents.js.map +1 -1
  193. package/package.json +14 -21
  194. package/src/api/impl/beacon/blocks/utils.ts +1 -1
  195. package/src/api/impl/beacon/state/index.ts +4 -5
  196. package/src/api/impl/validator/index.ts +1 -1
  197. package/src/chain/blocks/verifyBlock.ts +3 -24
  198. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -161
  199. package/src/chain/blocks/verifyBlocksSignatures.ts +5 -2
  200. package/src/chain/chain.ts +9 -32
  201. package/src/chain/initState.ts +1 -97
  202. package/src/chain/interface.ts +0 -2
  203. package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
  204. package/src/chain/opPools/opPool.ts +8 -8
  205. package/src/chain/options.ts +0 -6
  206. package/src/chain/prepareNextSlot.ts +2 -29
  207. package/src/chain/produceBlock/produceBlockBody.ts +33 -132
  208. package/src/chain/rewards/attestationsRewards.ts +18 -8
  209. package/src/chain/rewards/blockRewards.ts +6 -3
  210. package/src/chain/rewards/syncCommitteeRewards.ts +5 -3
  211. package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
  212. package/src/chain/validation/attesterSlashing.ts +2 -2
  213. package/src/chain/validation/blobSidecar.ts +10 -2
  214. package/src/chain/validation/block.ts +1 -1
  215. package/src/chain/validation/blsToExecutionChange.ts +1 -1
  216. package/src/chain/validation/dataColumnSidecar.ts +6 -1
  217. package/src/chain/validation/proposerSlashing.ts +1 -1
  218. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  219. package/src/chain/validation/signatureSets/contributionAndProof.ts +6 -3
  220. package/src/chain/validation/signatureSets/syncCommittee.ts +6 -2
  221. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
  222. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +5 -2
  223. package/src/chain/validation/syncCommittee.ts +1 -1
  224. package/src/chain/validation/syncCommitteeContributionAndProof.ts +10 -6
  225. package/src/chain/validation/voluntaryExit.ts +1 -1
  226. package/src/db/beacon.ts +38 -16
  227. package/src/db/buckets.ts +12 -7
  228. package/src/db/interface.ts +2 -13
  229. package/src/db/repositories/index.ts +0 -3
  230. package/src/execution/engine/http.ts +12 -21
  231. package/src/execution/engine/index.ts +1 -1
  232. package/src/execution/engine/interface.ts +1 -1
  233. package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
  234. package/src/execution/engine/mock.ts +4 -17
  235. package/src/execution/engine/payloadIdCache.ts +1 -1
  236. package/src/execution/engine/types.ts +9 -9
  237. package/src/execution/engine/utils.ts +111 -5
  238. package/src/index.ts +1 -2
  239. package/src/metrics/metrics/lodestar.ts +0 -144
  240. package/src/network/core/events.ts +1 -1
  241. package/src/network/events.ts +7 -1
  242. package/src/node/nodejs.ts +11 -9
  243. package/src/node/notifier.ts +0 -16
  244. package/src/node/options.ts +0 -3
  245. package/src/node/utils/interop/deposits.ts +3 -1
  246. package/src/node/utils/interop/state.ts +1 -1
  247. package/src/node/utils/state.ts +3 -18
  248. package/src/sync/backfill/backfill.ts +14 -2
  249. package/src/sync/backfill/verify.ts +10 -2
  250. package/src/util/workerEvents.ts +9 -8
  251. package/lib/chain/genesis/genesis.d.ts +0 -51
  252. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  253. package/lib/chain/genesis/genesis.js +0 -123
  254. package/lib/chain/genesis/genesis.js.map +0 -1
  255. package/lib/chain/genesis/interface.d.ts +0 -13
  256. package/lib/chain/genesis/interface.d.ts.map +0 -1
  257. package/lib/chain/genesis/interface.js +0 -2
  258. package/lib/chain/genesis/interface.js.map +0 -1
  259. package/lib/db/repositories/depositDataRoot.d.ts +0 -22
  260. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  261. package/lib/db/repositories/depositDataRoot.js +0 -62
  262. package/lib/db/repositories/depositDataRoot.js.map +0 -1
  263. package/lib/db/repositories/depositEvent.d.ts +0 -13
  264. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  265. package/lib/db/repositories/depositEvent.js +0 -27
  266. package/lib/db/repositories/depositEvent.js.map +0 -1
  267. package/lib/db/repositories/eth1Data.d.ts +0 -13
  268. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  269. package/lib/db/repositories/eth1Data.js +0 -26
  270. package/lib/db/repositories/eth1Data.js.map +0 -1
  271. package/lib/db/single/index.d.ts +0 -3
  272. package/lib/db/single/index.d.ts.map +0 -1
  273. package/lib/db/single/index.js +0 -3
  274. package/lib/db/single/index.js.map +0 -1
  275. package/lib/db/single/preGenesisState.d.ts +0 -16
  276. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  277. package/lib/db/single/preGenesisState.js +0 -29
  278. package/lib/db/single/preGenesisState.js.map +0 -1
  279. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
  280. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  281. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
  282. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
  283. package/lib/eth1/errors.d.ts +0 -66
  284. package/lib/eth1/errors.d.ts.map +0 -1
  285. package/lib/eth1/errors.js +0 -27
  286. package/lib/eth1/errors.js.map +0 -1
  287. package/lib/eth1/eth1DataCache.d.ts +0 -19
  288. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  289. package/lib/eth1/eth1DataCache.js +0 -19
  290. package/lib/eth1/eth1DataCache.js.map +0 -1
  291. package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
  292. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  293. package/lib/eth1/eth1DepositDataTracker.js +0 -317
  294. package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
  295. package/lib/eth1/eth1DepositsCache.d.ts +0 -42
  296. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  297. package/lib/eth1/eth1DepositsCache.js +0 -119
  298. package/lib/eth1/eth1DepositsCache.js.map +0 -1
  299. package/lib/eth1/eth1MergeBlockTracker.d.ts +0 -65
  300. package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
  301. package/lib/eth1/eth1MergeBlockTracker.js +0 -262
  302. package/lib/eth1/eth1MergeBlockTracker.js.map +0 -1
  303. package/lib/eth1/index.d.ts +0 -46
  304. package/lib/eth1/index.d.ts.map +0 -1
  305. package/lib/eth1/index.js +0 -121
  306. package/lib/eth1/index.js.map +0 -1
  307. package/lib/eth1/interface.d.ts +0 -112
  308. package/lib/eth1/interface.d.ts.map +0 -1
  309. package/lib/eth1/interface.js +0 -8
  310. package/lib/eth1/interface.js.map +0 -1
  311. package/lib/eth1/options.d.ts +0 -22
  312. package/lib/eth1/options.d.ts.map +0 -1
  313. package/lib/eth1/options.js +0 -8
  314. package/lib/eth1/options.js.map +0 -1
  315. package/lib/eth1/provider/eth1Provider.d.ts +0 -39
  316. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  317. package/lib/eth1/provider/eth1Provider.js +0 -147
  318. package/lib/eth1/provider/eth1Provider.js.map +0 -1
  319. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  320. package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
  321. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  322. package/lib/eth1/provider/jwt.js.map +0 -1
  323. package/lib/eth1/provider/utils.d.ts +0 -65
  324. package/lib/eth1/provider/utils.d.ts.map +0 -1
  325. package/lib/eth1/provider/utils.js +0 -120
  326. package/lib/eth1/provider/utils.js.map +0 -1
  327. package/lib/eth1/stream.d.ts +0 -15
  328. package/lib/eth1/stream.d.ts.map +0 -1
  329. package/lib/eth1/stream.js +0 -54
  330. package/lib/eth1/stream.js.map +0 -1
  331. package/lib/eth1/utils/depositContract.d.ts +0 -14
  332. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  333. package/lib/eth1/utils/depositContract.js +0 -33
  334. package/lib/eth1/utils/depositContract.js.map +0 -1
  335. package/lib/eth1/utils/deposits.d.ts +0 -8
  336. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  337. package/lib/eth1/utils/deposits.js +0 -47
  338. package/lib/eth1/utils/deposits.js.map +0 -1
  339. package/lib/eth1/utils/eth1Data.d.ts +0 -22
  340. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  341. package/lib/eth1/utils/eth1Data.js +0 -77
  342. package/lib/eth1/utils/eth1Data.js.map +0 -1
  343. package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
  344. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  345. package/lib/eth1/utils/eth1DepositEvent.js +0 -13
  346. package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
  347. package/lib/eth1/utils/eth1Vote.d.ts +0 -17
  348. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  349. package/lib/eth1/utils/eth1Vote.js +0 -111
  350. package/lib/eth1/utils/eth1Vote.js.map +0 -1
  351. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
  352. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  353. package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
  354. package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
  355. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
  356. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  357. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
  358. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
  359. package/src/chain/genesis/genesis.ts +0 -190
  360. package/src/chain/genesis/interface.ts +0 -14
  361. package/src/db/repositories/depositDataRoot.ts +0 -80
  362. package/src/db/repositories/depositEvent.ts +0 -32
  363. package/src/db/repositories/eth1Data.ts +0 -33
  364. package/src/db/single/index.ts +0 -2
  365. package/src/db/single/preGenesisState.ts +0 -37
  366. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  367. package/src/eth1/errors.ts +0 -40
  368. package/src/eth1/eth1DataCache.ts +0 -26
  369. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  370. package/src/eth1/eth1DepositsCache.ts +0 -141
  371. package/src/eth1/eth1MergeBlockTracker.ts +0 -328
  372. package/src/eth1/index.ts +0 -157
  373. package/src/eth1/interface.ts +0 -131
  374. package/src/eth1/options.ts +0 -28
  375. package/src/eth1/provider/eth1Provider.ts +0 -229
  376. package/src/eth1/provider/utils.ts +0 -136
  377. package/src/eth1/stream.ts +0 -75
  378. package/src/eth1/utils/depositContract.ts +0 -37
  379. package/src/eth1/utils/deposits.ts +0 -70
  380. package/src/eth1/utils/eth1Data.ts +0 -100
  381. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  382. package/src/eth1/utils/eth1Vote.ts +0 -142
  383. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  384. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  385. /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
  386. /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
  387. /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
  388. /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
@@ -1,119 +0,0 @@
1
- import { byteArrayEquals } from "@chainsafe/ssz";
2
- import { ssz } from "@lodestar/types";
3
- import { Eth1Error, Eth1ErrorCode } from "./errors.js";
4
- import { getDepositsWithProofs } from "./utils/deposits.js";
5
- import { getEth1DataForBlocks } from "./utils/eth1Data.js";
6
- import { assertConsecutiveDeposits } from "./utils/eth1DepositEvent.js";
7
- export class Eth1DepositsCache {
8
- unsafeAllowDepositDataOverwrite;
9
- db;
10
- config;
11
- constructor(opts, config, db) {
12
- this.config = config;
13
- this.db = db;
14
- this.unsafeAllowDepositDataOverwrite = opts.unsafeAllowDepositDataOverwrite ?? false;
15
- }
16
- /**
17
- * Returns a list of `Deposit` objects, within the given deposit index `range`.
18
- *
19
- * The `depositCount` is used to generate the proofs for the `Deposits`. For example, if we
20
- * have 100 proofs, but the Ethereum Consensus chain only acknowledges 50 of them, we must produce our
21
- * proofs with respect to a tree size of 50.
22
- */
23
- async get(indexRange, eth1Data) {
24
- const depositEvents = await this.db.depositEvent.values(indexRange);
25
- const depositRootTree = await this.db.depositDataRoot.getDepositRootTree();
26
- return getDepositsWithProofs(depositEvents, depositRootTree, eth1Data);
27
- }
28
- /**
29
- * Add log to cache
30
- * This function enforces that `logs` are imported one-by-one with consecutive indexes
31
- */
32
- async add(depositEvents) {
33
- assertConsecutiveDeposits(depositEvents);
34
- const lastLog = await this.db.depositEvent.lastValue();
35
- const firstEvent = depositEvents[0];
36
- // Check, validate and skip if we got any deposit events already present in DB
37
- // This can happen if the remote eth1/EL resets its head in these four scenarios:
38
- // 1. Remote eth1/EL resynced/restarted from head behind its previous head pre-merge
39
- // 2. In a post merge scenario, Lodestar restarted from finalized state from DB which
40
- // generally is a few epochs behind the last synced head. This causes eth1 tracker to reset
41
- // and refetch the deposits as the lodestar syncs further along (Post merge there is 1-1
42
- // correspondence between EL and CL blocks)
43
- // 3. The EL reorged beyond the eth1 follow distance.
44
- //
45
- // While 1. & 2. are benign and we handle them below by checking if the duplicate log fetched
46
- // is same as one written in DB. Refer to this issue for some data dump of how this happens
47
- // https://github.com/ChainSafe/lodestar/issues/3674
48
- //
49
- // If the duplicate log fetched is not same as written in DB then its probablu scenario 3.
50
- // which would be a catastrophic event for the network (or we messed up real bad!!!).
51
- //
52
- // So we provide for a way to overwrite this log without deleting full db via
53
- // --unsafeAllowDepositDataOverwrite cli flag which will just overwrite the previous tracker data
54
- // if any. This option as indicated by its name is unsafe and to be only used if you know what
55
- // you are doing.
56
- if (lastLog !== null && firstEvent !== undefined) {
57
- const newIndex = firstEvent.index;
58
- const lastLogIndex = lastLog.index;
59
- if (!this.unsafeAllowDepositDataOverwrite && firstEvent.index <= lastLog.index) {
60
- // lastLogIndex - newIndex + 1 events are duplicate since this is a consecutive log
61
- // as asserted by assertConsecutiveDeposits. Splice those events out from depositEvents.
62
- const skipEvents = depositEvents.splice(0, lastLogIndex - newIndex + 1);
63
- // After splicing skipEvents will contain duplicate events to be checked and validated
64
- // and rest of the remaining events in depositEvents could be safely written to DB and
65
- // move the tracker along.
66
- for (const depositEvent of skipEvents) {
67
- const prevDBSerializedEvent = await this.db.depositEvent.getBinary(depositEvent.index);
68
- if (!prevDBSerializedEvent) {
69
- throw new Eth1Error({ code: Eth1ErrorCode.MISSING_DEPOSIT_LOG, newIndex, lastLogIndex });
70
- }
71
- const serializedEvent = ssz.phase0.DepositEvent.serialize(depositEvent);
72
- if (!byteArrayEquals(prevDBSerializedEvent, serializedEvent)) {
73
- throw new Eth1Error({ code: Eth1ErrorCode.DUPLICATE_DISTINCT_LOG, newIndex, lastLogIndex });
74
- }
75
- }
76
- }
77
- else if (newIndex > lastLogIndex + 1) {
78
- // deposit events need to be consective, the way we fetch our tracker. If the deposit event
79
- // is not consecutive it means either our tracker, or the corresponding eth1/EL
80
- // node or the database has messed up. All these failures are critical and the tracker
81
- // shouldn't proceed without the resolution of this error.
82
- throw new Eth1Error({ code: Eth1ErrorCode.NON_CONSECUTIVE_LOGS, newIndex, lastLogIndex });
83
- }
84
- }
85
- const depositRoots = depositEvents.map((depositEvent) => ({
86
- index: depositEvent.index,
87
- root: ssz.phase0.DepositData.hashTreeRoot(depositEvent.depositData),
88
- }));
89
- // Store events after verifying that data is consecutive
90
- // depositDataRoot will throw if adding non consecutive roots
91
- await this.db.depositDataRoot.batchPutValues(depositRoots);
92
- await this.db.depositEvent.batchPutValues(depositEvents);
93
- }
94
- /**
95
- * Appends partial eth1 data (depositRoot, depositCount) in a block range (inclusive)
96
- * Returned array is sequential and ascending in blockNumber
97
- * @param fromBlock
98
- * @param toBlock
99
- */
100
- async getEth1DataForBlocks(blocks, lastProcessedDepositBlockNumber) {
101
- const highestBlock = blocks.at(-1)?.blockNumber;
102
- return getEth1DataForBlocks(blocks, this.db.depositEvent.valuesStream({ lte: highestBlock, reverse: true }), await this.db.depositDataRoot.getDepositRootTree(), lastProcessedDepositBlockNumber);
103
- }
104
- /**
105
- * Returns the highest blockNumber stored in DB if any
106
- */
107
- async getHighestDepositEventBlockNumber() {
108
- const latestEvent = await this.db.depositEvent.lastValue();
109
- return latestEvent?.blockNumber || null;
110
- }
111
- /**
112
- * Returns the lowest blockNumber stored in DB if any
113
- */
114
- async getLowestDepositEventBlockNumber() {
115
- const firstEvent = await this.db.depositEvent.firstValue();
116
- return firstEvent?.blockNumber || null;
117
- }
118
- }
119
- //# sourceMappingURL=eth1DepositsCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1DepositsCache.js","sourceRoot":"","sources":["../../src/eth1/eth1DepositsCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAS,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,SAAS,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAErD,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAC,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAC,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AAEtE,MAAM,OAAO,iBAAiB;IAC5B,+BAA+B,CAAU;IACzC,EAAE,CAAY;IACd,MAAM,CAAkB;IAExB,YAAY,IAAiD,EAAE,MAAuB,EAAE,EAAa;QACnG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,+BAA+B,IAAI,KAAK,CAAC;IACvF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,CAAC,UAAiC,EAAE,QAAyB;QACpE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;QAC3E,OAAO,qBAAqB,CAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,aAAoC;QAC5C,yBAAyB,CAAC,aAAa,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAEpC,8EAA8E;QAC9E,iFAAiF;QACjF,sFAAsF;QACtF,uFAAuF;QACvF,gGAAgG;QAChG,6FAA6F;QAC7F,gDAAgD;QAChD,uDAAuD;QACvD,EAAE;QACF,6FAA6F;QAC7F,2FAA2F;QAC3F,oDAAoD;QACpD,EAAE;QACF,0FAA0F;QAC1F,qFAAqF;QACrF,EAAE;QACF,6EAA6E;QAC7E,iGAAiG;QACjG,8FAA8F;QAC9F,iBAAiB;QACjB,IAAI,OAAO,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;YAClC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;YAEnC,IAAI,CAAC,IAAI,CAAC,+BAA+B,IAAI,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC/E,mFAAmF;gBACnF,wFAAwF;gBACxF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACxE,sFAAsF;gBACtF,sFAAsF;gBACtF,0BAA0B;gBAC1B,KAAK,MAAM,YAAY,IAAI,UAAU,EAAE,CAAC;oBACtC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBACvF,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC3B,MAAM,IAAI,SAAS,CAAC,EAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAC,CAAC,CAAC;oBACzF,CAAC;oBACD,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBACxE,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,eAAe,CAAC,EAAE,CAAC;wBAC7D,MAAM,IAAI,SAAS,CAAC,EAAC,IAAI,EAAE,aAAa,CAAC,sBAAsB,EAAE,QAAQ,EAAE,YAAY,EAAC,CAAC,CAAC;oBAC5F,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC;gBACvC,2FAA2F;gBAC3F,+EAA+E;gBAC/E,sFAAsF;gBACtF,0DAA0D;gBAC1D,MAAM,IAAI,SAAS,CAAC,EAAC,IAAI,EAAE,aAAa,CAAC,oBAAoB,EAAE,QAAQ,EAAE,YAAY,EAAC,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACxD,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;SACpE,CAAC,CAAC,CAAC;QAEJ,wDAAwD;QACxD,6DAA6D;QAC7D,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CACxB,MAAmB,EACnB,+BAA8C;QAE9C,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAChD,OAAO,oBAAoB,CACzB,MAAM,EACN,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,EACrE,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,kBAAkB,EAAE,EAClD,+BAA+B,CAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iCAAiC;QACrC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC3D,OAAO,WAAW,EAAE,WAAW,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gCAAgC;QACpC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC3D,OAAO,UAAU,EAAE,WAAW,IAAI,IAAI,CAAC;IACzC,CAAC;CACF"}
@@ -1,65 +0,0 @@
1
- import { ChainConfig } from "@lodestar/config";
2
- import { Logger } from "@lodestar/utils";
3
- import { Metrics } from "../metrics/index.js";
4
- import { EthJsonRpcBlockRaw, IEth1Provider, PowMergeBlock, TDProgress } from "./interface.js";
5
- export declare enum StatusCode {
6
- STOPPED = "STOPPED",
7
- SEARCHING = "SEARCHING",
8
- FOUND = "FOUND"
9
- }
10
- export type Eth1MergeBlockTrackerModules = {
11
- config: ChainConfig;
12
- logger: Logger;
13
- signal: AbortSignal;
14
- metrics: Metrics | null;
15
- };
16
- /**
17
- * Follows the eth1 chain to find a (or multiple?) merge blocks that cross the threshold of total terminal difficulty
18
- *
19
- * Finding the mergeBlock could be done in demand when proposing pre-merge blocks. However, that would slow block
20
- * production during the weeks between BELLATRIX_EPOCH and TTD.
21
- */
22
- export declare class Eth1MergeBlockTracker {
23
- private readonly eth1Provider;
24
- private readonly config;
25
- private readonly logger;
26
- private readonly metrics;
27
- private readonly blocksByHashCache;
28
- private readonly intervals;
29
- private status;
30
- private latestEth1Block;
31
- private getTerminalPowBlockFromEth1Promise;
32
- private readonly safeTDFactor;
33
- constructor({ config, logger, signal, metrics }: Eth1MergeBlockTrackerModules, eth1Provider: IEth1Provider);
34
- /**
35
- * Returns the most recent POW block that satisfies the merge block condition
36
- */
37
- getTerminalPowBlock(): Promise<PowMergeBlock | null>;
38
- getTDProgress(): TDProgress | null;
39
- /**
40
- * Get a POW block by hash checking the local cache first
41
- */
42
- getPowBlock(powBlockHash: string): Promise<PowMergeBlock | null>;
43
- /**
44
- * Should only start polling for mergeBlock if:
45
- * - after BELLATRIX_FORK_EPOCH
46
- * - Beacon node synced
47
- * - head state not isMergeTransitionComplete
48
- */
49
- startPollingMergeBlock(): void;
50
- private close;
51
- private getTerminalPowBlockFromEth1;
52
- /**
53
- * **internal** + **unsafe** since it can create multiple backward searches that overload the eth1 client.
54
- * Must be called in a wrapper to ensure that there's only once concurrent call to this fn.
55
- */
56
- private internalGetTerminalPowBlockFromEth1;
57
- private cacheBlock;
58
- }
59
- export declare function toPowBlock(block: EthJsonRpcBlockRaw): PowMergeBlock;
60
- /**
61
- * TTD values can be very large, for xDAI > 1e45. So scale down.
62
- * To be good, TTD should be rendered as a number < Number.MAX_TD_RENDER_VALUE ~= 9e15
63
- */
64
- export declare function getSafeTDFactor(ttd: bigint): bigint;
65
- //# sourceMappingURL=eth1MergeBlockTracker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1MergeBlockTracker.d.ts","sourceRoot":"","sources":["../../src/eth1/eth1MergeBlockTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAC,MAAM,EAA2B,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAA0B,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAGpH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,KAAK,UAAU;CAChB;AAkBD,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAIF;;;;;GAKG;AACH,qBAAa,qBAAqB;IAe9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAd/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAEzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,kCAAkC,CAA8C;IACxF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpC,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAC,EAAE,4BAA4B,EAC9C,YAAY,EAAE,aAAa;IAiC9C;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAe1D,aAAa,IAAI,UAAU,GAAG,IAAI;IAsBlC;;OAEG;IACG,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAkBtE;;;;;OAKG;IACH,sBAAsB,IAAI,IAAI;IAsB9B,OAAO,CAAC,KAAK;YAIC,2BAA2B;IA4CzC;;;OAGG;YACW,mCAAmC;IA6DjD,OAAO,CAAC,UAAU;CAInB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAQnE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWnD"}
@@ -1,262 +0,0 @@
1
- import { pruneSetToMax, toRootHex } from "@lodestar/utils";
2
- import { ZERO_HASH_HEX } from "../constants/index.js";
3
- import { enumToIndexMap } from "../util/enum.js";
4
- import { dataToRootHex, quantityToBigint, quantityToNum } from "./provider/utils.js";
5
- export var StatusCode;
6
- (function (StatusCode) {
7
- StatusCode["STOPPED"] = "STOPPED";
8
- StatusCode["SEARCHING"] = "SEARCHING";
9
- StatusCode["FOUND"] = "FOUND";
10
- })(StatusCode || (StatusCode = {}));
11
- /** For metrics, index order = declaration order of StatusCode */
12
- const statusCodeIdx = enumToIndexMap(StatusCode);
13
- /**
14
- * Bounds `blocksByHashCache` cache, imposing a max distance between highest and lowest block numbers.
15
- * In case of extreme forking the cache might grow unbounded.
16
- */
17
- const MAX_CACHE_POW_BLOCKS = 1024;
18
- const MAX_TD_RENDER_VALUE = Number.MAX_SAFE_INTEGER;
19
- // get_pow_block_at_total_difficulty
20
- /**
21
- * Follows the eth1 chain to find a (or multiple?) merge blocks that cross the threshold of total terminal difficulty
22
- *
23
- * Finding the mergeBlock could be done in demand when proposing pre-merge blocks. However, that would slow block
24
- * production during the weeks between BELLATRIX_EPOCH and TTD.
25
- */
26
- export class Eth1MergeBlockTracker {
27
- eth1Provider;
28
- config;
29
- logger;
30
- metrics;
31
- blocksByHashCache = new Map();
32
- intervals = [];
33
- status;
34
- latestEth1Block = null;
35
- getTerminalPowBlockFromEth1Promise = null;
36
- safeTDFactor;
37
- constructor({ config, logger, signal, metrics }, eth1Provider) {
38
- this.eth1Provider = eth1Provider;
39
- this.config = config;
40
- this.logger = logger;
41
- this.metrics = metrics;
42
- this.status = { code: StatusCode.STOPPED };
43
- signal.addEventListener("abort", () => this.close(), { once: true });
44
- this.safeTDFactor = getSafeTDFactor(this.config.TERMINAL_TOTAL_DIFFICULTY);
45
- const scaledTTD = this.config.TERMINAL_TOTAL_DIFFICULTY / this.safeTDFactor;
46
- // Only run metrics if necessary
47
- if (metrics) {
48
- // TTD can't be dynamically changed during execution, register metric once
49
- metrics.eth1.eth1MergeTTD.set(Number(scaledTTD));
50
- metrics.eth1.eth1MergeTDFactor.set(Number(this.safeTDFactor));
51
- metrics.eth1.eth1MergeStatus.addCollect(() => {
52
- // Set merge ttd, merge status and merge block status
53
- metrics.eth1.eth1MergeStatus.set(statusCodeIdx[this.status.code]);
54
- if (this.latestEth1Block !== null) {
55
- // Set latestBlock stats
56
- metrics.eth1.eth1LatestBlockNumber.set(this.latestEth1Block.number);
57
- metrics.eth1.eth1LatestBlockTD.set(Number(this.latestEth1Block.totalDifficulty / this.safeTDFactor));
58
- metrics.eth1.eth1LatestBlockTimestamp.set(this.latestEth1Block.timestamp);
59
- }
60
- });
61
- }
62
- }
63
- /**
64
- * Returns the most recent POW block that satisfies the merge block condition
65
- */
66
- async getTerminalPowBlock() {
67
- switch (this.status.code) {
68
- case StatusCode.STOPPED:
69
- // If not module is not polling fetch the mergeBlock explicitly
70
- return this.getTerminalPowBlockFromEth1();
71
- case StatusCode.SEARCHING:
72
- // Assume that polling would have found the block
73
- return null;
74
- case StatusCode.FOUND:
75
- return this.status.mergeBlock;
76
- }
77
- }
78
- getTDProgress() {
79
- if (this.latestEth1Block === null) {
80
- return this.latestEth1Block;
81
- }
82
- const tdDiff = this.config.TERMINAL_TOTAL_DIFFICULTY - this.latestEth1Block.totalDifficulty;
83
- if (tdDiff > BigInt(0)) {
84
- return {
85
- ttdHit: false,
86
- tdFactor: this.safeTDFactor,
87
- tdDiffScaled: Number((tdDiff / this.safeTDFactor)),
88
- ttd: this.config.TERMINAL_TOTAL_DIFFICULTY,
89
- td: this.latestEth1Block.totalDifficulty,
90
- timestamp: this.latestEth1Block.timestamp,
91
- };
92
- }
93
- return {
94
- ttdHit: true,
95
- };
96
- }
97
- /**
98
- * Get a POW block by hash checking the local cache first
99
- */
100
- async getPowBlock(powBlockHash) {
101
- // Check cache first
102
- const cachedBlock = this.blocksByHashCache.get(powBlockHash);
103
- if (cachedBlock) {
104
- return cachedBlock;
105
- }
106
- // Fetch from node
107
- const blockRaw = await this.eth1Provider.getBlockByHash(powBlockHash);
108
- if (blockRaw) {
109
- const block = toPowBlock(blockRaw);
110
- this.cacheBlock(block);
111
- return block;
112
- }
113
- return null;
114
- }
115
- /**
116
- * Should only start polling for mergeBlock if:
117
- * - after BELLATRIX_FORK_EPOCH
118
- * - Beacon node synced
119
- * - head state not isMergeTransitionComplete
120
- */
121
- startPollingMergeBlock() {
122
- if (this.status.code !== StatusCode.STOPPED) {
123
- return;
124
- }
125
- this.status = { code: StatusCode.SEARCHING };
126
- this.logger.info("Starting search for terminal POW block", {
127
- TERMINAL_TOTAL_DIFFICULTY: this.config.TERMINAL_TOTAL_DIFFICULTY,
128
- });
129
- const interval = setInterval(() => {
130
- // Preemptively try to find merge block and cache it if found.
131
- // Future callers of getTerminalPowBlock() will re-use the cached found mergeBlock.
132
- this.getTerminalPowBlockFromEth1().catch((e) => {
133
- this.logger.error("Error on findMergeBlock", {}, e);
134
- this.metrics?.eth1.eth1PollMergeBlockErrors.inc();
135
- });
136
- }, this.config.SECONDS_PER_ETH1_BLOCK * 1000);
137
- this.intervals.push(interval);
138
- }
139
- close() {
140
- this.intervals.forEach(clearInterval);
141
- }
142
- async getTerminalPowBlockFromEth1() {
143
- if (!this.getTerminalPowBlockFromEth1Promise) {
144
- this.getTerminalPowBlockFromEth1Promise = this.internalGetTerminalPowBlockFromEth1()
145
- .then((mergeBlock) => {
146
- // Persist found merge block here to affect both caller paths:
147
- // - internal searcher
148
- // - external caller if STOPPED
149
- if (mergeBlock && this.status.code !== StatusCode.FOUND) {
150
- if (this.status.code === StatusCode.SEARCHING) {
151
- this.close();
152
- }
153
- this.logger.info("Terminal POW block found!", {
154
- hash: mergeBlock.blockHash,
155
- number: mergeBlock.number,
156
- totalDifficulty: mergeBlock.totalDifficulty,
157
- });
158
- this.status = { code: StatusCode.FOUND, mergeBlock };
159
- this.metrics?.eth1.eth1MergeBlockDetails.set({
160
- terminalBlockHash: mergeBlock.blockHash,
161
- // Convert all number/bigints to string labels
162
- terminalBlockNumber: mergeBlock.number.toString(10),
163
- terminalBlockTD: mergeBlock.totalDifficulty.toString(10),
164
- }, 1);
165
- }
166
- return mergeBlock;
167
- })
168
- .finally(() => {
169
- this.getTerminalPowBlockFromEth1Promise = null;
170
- });
171
- }
172
- else {
173
- // This should no happen, since getTerminalPowBlockFromEth1() should resolve faster than SECONDS_PER_ETH1_BLOCK.
174
- // else something is wrong: the el-cl comms are two slow, or the backsearch got stuck in a deep search.
175
- this.metrics?.eth1.getTerminalPowBlockPromiseCacheHit.inc();
176
- }
177
- return this.getTerminalPowBlockFromEth1Promise;
178
- }
179
- /**
180
- * **internal** + **unsafe** since it can create multiple backward searches that overload the eth1 client.
181
- * Must be called in a wrapper to ensure that there's only once concurrent call to this fn.
182
- */
183
- async internalGetTerminalPowBlockFromEth1() {
184
- // Search merge block by hash
185
- // Terminal block hash override takes precedence over terminal total difficulty
186
- const terminalBlockHash = toRootHex(this.config.TERMINAL_BLOCK_HASH);
187
- if (terminalBlockHash !== ZERO_HASH_HEX) {
188
- const block = await this.getPowBlock(terminalBlockHash);
189
- if (block) {
190
- return block;
191
- }
192
- // if a TERMINAL_BLOCK_HASH other than ZERO_HASH is configured and we can't find it, return NONE
193
- return null;
194
- }
195
- // Search merge block by TTD
196
- const latestBlockRaw = await this.eth1Provider.getBlockByNumber("latest");
197
- if (!latestBlockRaw) {
198
- throw Error("getBlockByNumber('latest') returned null");
199
- }
200
- let block = toPowBlock(latestBlockRaw);
201
- this.latestEth1Block = { ...block, timestamp: quantityToNum(latestBlockRaw.timestamp) };
202
- this.cacheBlock(block);
203
- // This code path to look backwards for the merge block is only necessary if:
204
- // - The network has not yet found the merge block
205
- // - There are descendants of the merge block in the eth1 chain
206
- // For the search below to require more than a few hops, multiple block proposers in a row must fail to detect
207
- // an existing merge block. Such situation is extremely unlikely, so this search is left un-optimized. Since
208
- // this class can start eagerly looking for the merge block when not necessary, startPollingMergeBlock() should
209
- // only be called when there is certainty that a mergeBlock search is necessary.
210
- while (true) {
211
- if (block.totalDifficulty < this.config.TERMINAL_TOTAL_DIFFICULTY) {
212
- // TTD not reached yet
213
- return null;
214
- }
215
- // else block.totalDifficulty >= this.config.TERMINAL_TOTAL_DIFFICULTY
216
- // Potential mergeBlock! Must find the first block that passes TTD
217
- // Allow genesis block to reach TTD https://github.com/ethereum/consensus-specs/pull/2719
218
- if (block.parentHash === ZERO_HASH_HEX) {
219
- return block;
220
- }
221
- const parent = await this.getPowBlock(block.parentHash);
222
- if (!parent) {
223
- throw Error(`Unknown parent of block with TD>TTD ${block.parentHash}`);
224
- }
225
- this.metrics?.eth1.eth1ParentBlocksFetched.inc();
226
- // block.td > TTD && parent.td < TTD => block is mergeBlock
227
- if (parent.totalDifficulty < this.config.TERMINAL_TOTAL_DIFFICULTY) {
228
- // Is terminal total difficulty block AND has verified block -> parent relationship
229
- return block;
230
- }
231
- block = parent;
232
- }
233
- }
234
- cacheBlock(block) {
235
- this.blocksByHashCache.set(block.blockHash, block);
236
- pruneSetToMax(this.blocksByHashCache, MAX_CACHE_POW_BLOCKS);
237
- }
238
- }
239
- export function toPowBlock(block) {
240
- // Validate untrusted data from API
241
- return {
242
- number: quantityToNum(block.number),
243
- blockHash: dataToRootHex(block.hash),
244
- parentHash: dataToRootHex(block.parentHash),
245
- totalDifficulty: quantityToBigint(block.totalDifficulty),
246
- };
247
- }
248
- /**
249
- * TTD values can be very large, for xDAI > 1e45. So scale down.
250
- * To be good, TTD should be rendered as a number < Number.MAX_TD_RENDER_VALUE ~= 9e15
251
- */
252
- export function getSafeTDFactor(ttd) {
253
- const safeIntegerMult = ttd / BigInt(MAX_TD_RENDER_VALUE);
254
- // TTD < MAX_TD_RENDER_VALUE, no need to scale down
255
- if (safeIntegerMult === BigInt(0)) {
256
- return BigInt(1);
257
- }
258
- // Return closest power of 10 to ensure TD < max
259
- const safeIntegerMultDigits = safeIntegerMult.toString(10).length;
260
- return BigInt(10) ** BigInt(safeIntegerMultDigits);
261
- }
262
- //# sourceMappingURL=eth1MergeBlockTracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1MergeBlockTracker.js","sourceRoot":"","sources":["../../src/eth1/eth1MergeBlockTracker.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
2
- import { Root } from "@lodestar/types";
3
- import { Eth1DepositDataTrackerModules } from "./eth1DepositDataTracker.js";
4
- import { Eth1MergeBlockTrackerModules } from "./eth1MergeBlockTracker.js";
5
- import { Eth1DataAndDeposits, IEth1ForBlockProduction, IEth1Provider, PowMergeBlock, TDProgress } from "./interface.js";
6
- import { Eth1Options } from "./options.js";
7
- import { Eth1Provider } from "./provider/eth1Provider.js";
8
- export { Eth1Provider };
9
- export type { IEth1ForBlockProduction, IEth1Provider };
10
- export declare function initializeEth1ForBlockProduction(opts: Eth1Options, modules: Pick<Eth1DepositDataTrackerModules, "db" | "config" | "metrics" | "logger" | "signal">): IEth1ForBlockProduction;
11
- export declare class Eth1ForBlockProduction implements IEth1ForBlockProduction {
12
- private readonly eth1DepositDataTracker;
13
- private readonly eth1MergeBlockTracker;
14
- constructor(opts: Eth1Options, modules: Eth1DepositDataTrackerModules & Eth1MergeBlockTrackerModules & {
15
- eth1Provider?: IEth1Provider;
16
- });
17
- getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
18
- getTerminalPowBlock(): Promise<Root | null>;
19
- getPowBlock(powBlockHash: string): Promise<PowMergeBlock | null>;
20
- getTDProgress(): TDProgress | null;
21
- startPollingMergeBlock(): void;
22
- isPollingEth1Data(): boolean;
23
- stopPollingEth1Data(): void;
24
- }
25
- /**
26
- * Disabled version of Eth1ForBlockProduction
27
- * May produce invalid blocks by not adding new deposits and voting for the same eth1Data
28
- */
29
- export declare class Eth1ForBlockProductionDisabled implements IEth1ForBlockProduction {
30
- /**
31
- * Returns same eth1Data as in state and no deposits
32
- * May produce invalid blocks if deposits have to be added
33
- */
34
- getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
35
- /**
36
- * Will miss the oportunity to propose the merge block but will still produce valid blocks
37
- */
38
- getTerminalPowBlock(): Promise<Root | null>;
39
- /** Will not be able to validate the merge block */
40
- getPowBlock(_powBlockHash: string): Promise<PowMergeBlock | null>;
41
- getTDProgress(): TDProgress | null;
42
- isPollingEth1Data(): boolean;
43
- startPollingMergeBlock(): void;
44
- stopPollingEth1Data(): void;
45
- }
46
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eth1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAErC,OAAO,EAAyB,6BAA6B,EAAC,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAwB,4BAA4B,EAAC,MAAM,4BAA4B,CAAC;AAC/F,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AACtH,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,CAAC;AACtB,YAAY,EAAC,uBAAuB,EAAE,aAAa,EAAC,CAAC;AAkCrD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAC9F,uBAAuB,CAWzB;AAED,qBAAa,sBAAuB,YAAW,uBAAuB;IACpE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAwB;gBAG5D,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,6BAA6B,GAAG,4BAA4B,GAAG;QAAC,YAAY,CAAC,EAAE,aAAa,CAAA;KAAC;IAkBlG,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOtF,mBAAmB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAKjD,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIhE,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,sBAAsB,IAAI,IAAI;IAI9B,iBAAiB,IAAI,OAAO;IAI5B,mBAAmB,IAAI,IAAI;CAG5B;AAED;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E;;;OAGG;IACG,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI5F;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIjD,mDAAmD;IAC7C,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIvE,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,iBAAiB,IAAI,OAAO;IAI5B,sBAAsB,IAAI,IAAI;IAI9B,mBAAmB,IAAI,IAAI;CAG5B"}
package/lib/eth1/index.js DELETED
@@ -1,121 +0,0 @@
1
- import { fromHex } from "@lodestar/utils";
2
- import { Eth1DepositDataTracker } from "./eth1DepositDataTracker.js";
3
- import { Eth1MergeBlockTracker } from "./eth1MergeBlockTracker.js";
4
- import { Eth1Provider } from "./provider/eth1Provider.js";
5
- export { Eth1Provider };
6
- // This module encapsulates all consumer functionality to the execution node (formerly eth1). The execution client
7
- // has to:
8
- //
9
- // - For genesis, the beacon node must follow the eth1 chain: get all deposit events + blocks within that range.
10
- // Once the genesis conditions are met, start the POS chain with the resulting state. The logic is similar to the
11
- // two points below, but the implementation is specialized for each scenario.
12
- //
13
- // - Follow the eth1 block chain to validate eth1Data votes. It needs all consecutive blocks within a specific range
14
- // and at a distance from the head.
15
- // ETH1_FOLLOW_DISTANCE uint64(2**11) (= 2,048) Eth1 blocks ~8 hours
16
- // EPOCHS_PER_ETH1_VOTING_PERIOD uint64(2**6) (= 64) epochs ~6.8 hours
17
- //
18
- // - Fetch ALL deposit events from the deposit contract to build the deposit tree and validate future merkle proofs.
19
- // Then it must follow deposit events at a distance roughly similar to the `ETH1_FOLLOW_DISTANCE` parameter above.
20
- //
21
- // - [New bellatrix]: After BELLATRIX_FORK_EPOCH, it must fetch the block with hash
22
- // `state.eth1_data.block_hash` to compute `terminal_total_difficulty`. Note this may change with
23
- // https://github.com/ethereum/consensus-specs/issues/2603.
24
- //
25
- // - [New bellatrix]: On block production post BELLATRIX_FORK_EPOCH, pre merge, the beacon node must find the merge block
26
- // crossing the `terminal_total_difficulty` boundary and include it in the block. After the merge block production
27
- // will just use `execution_engine.assemble_block` without fetching individual blocks.
28
- //
29
- // - [New bellatrix]: Fork-choice must validate the merge block ensuring it crossed the `terminal_total_difficulty`
30
- // boundary, so it must fetch the POW block referenced in the merge block + its POW parent block.
31
- //
32
- // With the merge the beacon node has to follow the eth1 chain at two distances:
33
- // 1. At `ETH1_FOLLOW_DISTANCE` for eth1Data to be re-org safe
34
- // 2. At the head to get the first merge block, tolerating possible re-orgs
35
- //
36
- // Then both streams of blocks should not be merged since it's harder to guard against re-orgs from (2) to (1).
37
- export function initializeEth1ForBlockProduction(opts, modules) {
38
- if (opts.enabled) {
39
- return new Eth1ForBlockProduction(opts, {
40
- config: modules.config,
41
- db: modules.db,
42
- metrics: modules.metrics,
43
- logger: modules.logger,
44
- signal: modules.signal,
45
- });
46
- }
47
- return new Eth1ForBlockProductionDisabled();
48
- }
49
- export class Eth1ForBlockProduction {
50
- eth1DepositDataTracker;
51
- eth1MergeBlockTracker;
52
- constructor(opts, modules) {
53
- const eth1Provider = modules.eth1Provider ||
54
- new Eth1Provider(modules.config, { ...opts, logger: modules.logger }, modules.signal, modules.metrics?.eth1HttpClient);
55
- this.eth1DepositDataTracker = opts.disableEth1DepositDataTracker
56
- ? null
57
- : new Eth1DepositDataTracker(opts, modules, eth1Provider);
58
- this.eth1MergeBlockTracker = new Eth1MergeBlockTracker(modules, eth1Provider);
59
- }
60
- async getEth1DataAndDeposits(state) {
61
- if (this.eth1DepositDataTracker === null) {
62
- return { eth1Data: state.eth1Data, deposits: [] };
63
- }
64
- return this.eth1DepositDataTracker.getEth1DataAndDeposits(state);
65
- }
66
- async getTerminalPowBlock() {
67
- const block = await this.eth1MergeBlockTracker.getTerminalPowBlock();
68
- return block && fromHex(block.blockHash);
69
- }
70
- getPowBlock(powBlockHash) {
71
- return this.eth1MergeBlockTracker.getPowBlock(powBlockHash);
72
- }
73
- getTDProgress() {
74
- return this.eth1MergeBlockTracker.getTDProgress();
75
- }
76
- startPollingMergeBlock() {
77
- this.eth1MergeBlockTracker.startPollingMergeBlock();
78
- }
79
- isPollingEth1Data() {
80
- return this.eth1DepositDataTracker?.isPollingEth1Data() ?? false;
81
- }
82
- stopPollingEth1Data() {
83
- this.eth1DepositDataTracker?.stopPollingEth1Data();
84
- }
85
- }
86
- /**
87
- * Disabled version of Eth1ForBlockProduction
88
- * May produce invalid blocks by not adding new deposits and voting for the same eth1Data
89
- */
90
- export class Eth1ForBlockProductionDisabled {
91
- /**
92
- * Returns same eth1Data as in state and no deposits
93
- * May produce invalid blocks if deposits have to be added
94
- */
95
- async getEth1DataAndDeposits(state) {
96
- return { eth1Data: state.eth1Data, deposits: [] };
97
- }
98
- /**
99
- * Will miss the oportunity to propose the merge block but will still produce valid blocks
100
- */
101
- async getTerminalPowBlock() {
102
- return null;
103
- }
104
- /** Will not be able to validate the merge block */
105
- async getPowBlock(_powBlockHash) {
106
- throw Error("eth1 must be enabled to verify merge block");
107
- }
108
- getTDProgress() {
109
- return null;
110
- }
111
- isPollingEth1Data() {
112
- return false;
113
- }
114
- startPollingMergeBlock() {
115
- // Ignore
116
- }
117
- stopPollingEth1Data() {
118
- // Ignore
119
- }
120
- }
121
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eth1/index.ts"],"names":[],"mappings":"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"}