@lodestar/beacon-node 1.39.0-dev.b37f2bd1bd → 1.39.0-dev.c151a164f2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/lib/api/impl/beacon/blocks/utils.js +1 -1
  2. package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
  3. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  4. package/lib/chain/blocks/verifyBlock.js +1 -1
  5. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  6. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -1
  7. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  8. package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
  9. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  10. package/lib/chain/chain.d.ts +1 -4
  11. package/lib/chain/chain.d.ts.map +1 -1
  12. package/lib/chain/chain.js +8 -16
  13. package/lib/chain/chain.js.map +1 -1
  14. package/lib/chain/initState.d.ts +1 -14
  15. package/lib/chain/initState.d.ts.map +1 -1
  16. package/lib/chain/initState.js +1 -62
  17. package/lib/chain/initState.js.map +1 -1
  18. package/lib/chain/interface.d.ts +0 -2
  19. package/lib/chain/interface.d.ts.map +1 -1
  20. package/lib/chain/interface.js.map +1 -1
  21. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
  22. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  23. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
  24. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  25. package/lib/chain/opPools/opPool.d.ts +3 -0
  26. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  27. package/lib/chain/opPools/opPool.js +9 -8
  28. package/lib/chain/opPools/opPool.js.map +1 -1
  29. package/lib/chain/prepareNextSlot.d.ts +0 -4
  30. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  31. package/lib/chain/prepareNextSlot.js +1 -21
  32. package/lib/chain/prepareNextSlot.js.map +1 -1
  33. package/lib/chain/produceBlock/produceBlockBody.d.ts +0 -1
  34. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  35. package/lib/chain/produceBlock/produceBlockBody.js +8 -11
  36. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  37. package/lib/chain/rewards/attestationsRewards.d.ts +2 -1
  38. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
  39. package/lib/chain/rewards/attestationsRewards.js +8 -8
  40. package/lib/chain/rewards/attestationsRewards.js.map +1 -1
  41. package/lib/chain/rewards/blockRewards.d.ts +2 -1
  42. package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
  43. package/lib/chain/rewards/blockRewards.js +5 -5
  44. package/lib/chain/rewards/blockRewards.js.map +1 -1
  45. package/lib/chain/rewards/syncCommitteeRewards.d.ts +2 -1
  46. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
  47. package/lib/chain/rewards/syncCommitteeRewards.js +2 -2
  48. package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
  49. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
  50. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  51. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
  52. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  53. package/lib/chain/validation/attesterSlashing.js +1 -1
  54. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  55. package/lib/chain/validation/block.js +1 -1
  56. package/lib/chain/validation/block.js.map +1 -1
  57. package/lib/chain/validation/blsToExecutionChange.js +1 -1
  58. package/lib/chain/validation/proposerSlashing.js +1 -1
  59. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  60. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  61. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  62. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -1
  63. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  64. package/lib/chain/validation/signatureSets/contributionAndProof.js +2 -2
  65. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  66. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -1
  67. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  68. package/lib/chain/validation/signatureSets/syncCommittee.js +2 -2
  69. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  70. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
  71. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  72. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  73. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  74. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -1
  75. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  76. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -2
  77. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  78. package/lib/chain/validation/syncCommittee.js +1 -1
  79. package/lib/chain/validation/syncCommittee.js.map +1 -1
  80. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  81. package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -3
  82. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  83. package/lib/chain/validation/voluntaryExit.js +1 -1
  84. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  85. package/lib/db/beacon.d.ts +3 -7
  86. package/lib/db/beacon.d.ts.map +1 -1
  87. package/lib/db/beacon.js +33 -12
  88. package/lib/db/beacon.js.map +1 -1
  89. package/lib/db/buckets.d.ts +12 -6
  90. package/lib/db/buckets.d.ts.map +1 -1
  91. package/lib/db/buckets.js +6 -1
  92. package/lib/db/buckets.js.map +1 -1
  93. package/lib/db/interface.d.ts +2 -7
  94. package/lib/db/interface.d.ts.map +1 -1
  95. package/lib/db/repositories/index.d.ts +0 -3
  96. package/lib/db/repositories/index.d.ts.map +1 -1
  97. package/lib/db/repositories/index.js +0 -3
  98. package/lib/db/repositories/index.js.map +1 -1
  99. package/lib/execution/engine/http.d.ts +1 -1
  100. package/lib/execution/engine/http.d.ts.map +1 -1
  101. package/lib/execution/engine/http.js +2 -3
  102. package/lib/execution/engine/http.js.map +1 -1
  103. package/lib/execution/engine/index.d.ts.map +1 -1
  104. package/lib/execution/engine/index.js +1 -1
  105. package/lib/execution/engine/index.js.map +1 -1
  106. package/lib/execution/engine/interface.d.ts +1 -1
  107. package/lib/execution/engine/interface.d.ts.map +1 -1
  108. package/lib/execution/engine/interface.js.map +1 -1
  109. package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
  110. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
  111. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
  112. package/lib/execution/engine/jwt.d.ts.map +1 -0
  113. package/lib/execution/engine/jwt.js.map +1 -0
  114. package/lib/execution/engine/mock.d.ts.map +1 -1
  115. package/lib/execution/engine/mock.js +1 -1
  116. package/lib/execution/engine/mock.js.map +1 -1
  117. package/lib/execution/engine/payloadIdCache.d.ts +1 -1
  118. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  119. package/lib/execution/engine/types.d.ts +1 -1
  120. package/lib/execution/engine/types.d.ts.map +1 -1
  121. package/lib/execution/engine/types.js +1 -1
  122. package/lib/execution/engine/types.js.map +1 -1
  123. package/lib/execution/engine/utils.d.ts +64 -2
  124. package/lib/execution/engine/utils.d.ts.map +1 -1
  125. package/lib/execution/engine/utils.js +91 -2
  126. package/lib/execution/engine/utils.js.map +1 -1
  127. package/lib/index.d.ts +1 -2
  128. package/lib/index.d.ts.map +1 -1
  129. package/lib/index.js +1 -2
  130. package/lib/index.js.map +1 -1
  131. package/lib/metrics/metrics/lodestar.d.ts +0 -35
  132. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  133. package/lib/metrics/metrics/lodestar.js +0 -90
  134. package/lib/metrics/metrics/lodestar.js.map +1 -1
  135. package/lib/node/nodejs.d.ts.map +1 -1
  136. package/lib/node/nodejs.js +10 -9
  137. package/lib/node/nodejs.js.map +1 -1
  138. package/lib/node/options.d.ts +0 -2
  139. package/lib/node/options.d.ts.map +1 -1
  140. package/lib/node/options.js +0 -2
  141. package/lib/node/options.js.map +1 -1
  142. package/lib/node/utils/interop/deposits.d.ts +2 -1
  143. package/lib/node/utils/interop/deposits.d.ts.map +1 -1
  144. package/lib/node/utils/interop/deposits.js.map +1 -1
  145. package/lib/node/utils/interop/state.d.ts +1 -1
  146. package/lib/node/utils/interop/state.d.ts.map +1 -1
  147. package/lib/node/utils/state.d.ts +1 -7
  148. package/lib/node/utils/state.d.ts.map +1 -1
  149. package/lib/node/utils/state.js +1 -14
  150. package/lib/node/utils/state.js.map +1 -1
  151. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  152. package/lib/sync/backfill/backfill.js +2 -4
  153. package/lib/sync/backfill/backfill.js.map +1 -1
  154. package/lib/sync/backfill/verify.d.ts +1 -1
  155. package/lib/sync/backfill/verify.d.ts.map +1 -1
  156. package/lib/sync/backfill/verify.js +2 -2
  157. package/lib/sync/backfill/verify.js.map +1 -1
  158. package/package.json +14 -20
  159. package/src/api/impl/beacon/blocks/utils.ts +1 -1
  160. package/src/chain/blocks/verifyBlock.ts +1 -0
  161. package/src/chain/blocks/verifyBlocksSignatures.ts +3 -1
  162. package/src/chain/chain.ts +7 -19
  163. package/src/chain/initState.ts +1 -97
  164. package/src/chain/interface.ts +0 -2
  165. package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
  166. package/src/chain/opPools/opPool.ts +8 -8
  167. package/src/chain/prepareNextSlot.ts +1 -28
  168. package/src/chain/produceBlock/produceBlockBody.ts +8 -12
  169. package/src/chain/rewards/attestationsRewards.ts +13 -4
  170. package/src/chain/rewards/blockRewards.ts +6 -3
  171. package/src/chain/rewards/syncCommitteeRewards.ts +3 -1
  172. package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
  173. package/src/chain/validation/attesterSlashing.ts +1 -1
  174. package/src/chain/validation/block.ts +1 -1
  175. package/src/chain/validation/blsToExecutionChange.ts +1 -1
  176. package/src/chain/validation/proposerSlashing.ts +1 -1
  177. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  178. package/src/chain/validation/signatureSets/contributionAndProof.ts +3 -1
  179. package/src/chain/validation/signatureSets/syncCommittee.ts +3 -1
  180. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
  181. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -1
  182. package/src/chain/validation/syncCommittee.ts +1 -1
  183. package/src/chain/validation/syncCommitteeContributionAndProof.ts +8 -3
  184. package/src/chain/validation/voluntaryExit.ts +1 -1
  185. package/src/db/beacon.ts +38 -16
  186. package/src/db/buckets.ts +12 -7
  187. package/src/db/interface.ts +2 -13
  188. package/src/db/repositories/index.ts +0 -3
  189. package/src/execution/engine/http.ts +8 -9
  190. package/src/execution/engine/index.ts +1 -1
  191. package/src/execution/engine/interface.ts +1 -1
  192. package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
  193. package/src/execution/engine/mock.ts +1 -2
  194. package/src/execution/engine/payloadIdCache.ts +1 -1
  195. package/src/execution/engine/types.ts +9 -9
  196. package/src/execution/engine/utils.ts +111 -5
  197. package/src/index.ts +1 -2
  198. package/src/metrics/metrics/lodestar.ts +0 -92
  199. package/src/node/nodejs.ts +11 -9
  200. package/src/node/options.ts +0 -3
  201. package/src/node/utils/interop/deposits.ts +3 -1
  202. package/src/node/utils/interop/state.ts +1 -1
  203. package/src/node/utils/state.ts +3 -18
  204. package/src/sync/backfill/backfill.ts +8 -3
  205. package/src/sync/backfill/verify.ts +3 -1
  206. package/lib/chain/genesis/genesis.d.ts +0 -51
  207. package/lib/chain/genesis/genesis.d.ts.map +0 -1
  208. package/lib/chain/genesis/genesis.js +0 -123
  209. package/lib/chain/genesis/genesis.js.map +0 -1
  210. package/lib/chain/genesis/interface.d.ts +0 -13
  211. package/lib/chain/genesis/interface.d.ts.map +0 -1
  212. package/lib/chain/genesis/interface.js +0 -2
  213. package/lib/chain/genesis/interface.js.map +0 -1
  214. package/lib/db/repositories/depositDataRoot.d.ts +0 -22
  215. package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
  216. package/lib/db/repositories/depositDataRoot.js +0 -62
  217. package/lib/db/repositories/depositDataRoot.js.map +0 -1
  218. package/lib/db/repositories/depositEvent.d.ts +0 -13
  219. package/lib/db/repositories/depositEvent.d.ts.map +0 -1
  220. package/lib/db/repositories/depositEvent.js +0 -27
  221. package/lib/db/repositories/depositEvent.js.map +0 -1
  222. package/lib/db/repositories/eth1Data.d.ts +0 -13
  223. package/lib/db/repositories/eth1Data.d.ts.map +0 -1
  224. package/lib/db/repositories/eth1Data.js +0 -26
  225. package/lib/db/repositories/eth1Data.js.map +0 -1
  226. package/lib/db/single/index.d.ts +0 -3
  227. package/lib/db/single/index.d.ts.map +0 -1
  228. package/lib/db/single/index.js +0 -3
  229. package/lib/db/single/index.js.map +0 -1
  230. package/lib/db/single/preGenesisState.d.ts +0 -16
  231. package/lib/db/single/preGenesisState.d.ts.map +0 -1
  232. package/lib/db/single/preGenesisState.js +0 -29
  233. package/lib/db/single/preGenesisState.js.map +0 -1
  234. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
  235. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
  236. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
  237. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
  238. package/lib/eth1/errors.d.ts +0 -66
  239. package/lib/eth1/errors.d.ts.map +0 -1
  240. package/lib/eth1/errors.js +0 -27
  241. package/lib/eth1/errors.js.map +0 -1
  242. package/lib/eth1/eth1DataCache.d.ts +0 -19
  243. package/lib/eth1/eth1DataCache.d.ts.map +0 -1
  244. package/lib/eth1/eth1DataCache.js +0 -19
  245. package/lib/eth1/eth1DataCache.js.map +0 -1
  246. package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
  247. package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
  248. package/lib/eth1/eth1DepositDataTracker.js +0 -317
  249. package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
  250. package/lib/eth1/eth1DepositsCache.d.ts +0 -42
  251. package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
  252. package/lib/eth1/eth1DepositsCache.js +0 -119
  253. package/lib/eth1/eth1DepositsCache.js.map +0 -1
  254. package/lib/eth1/index.d.ts +0 -31
  255. package/lib/eth1/index.d.ts.map +0 -1
  256. package/lib/eth1/index.js +0 -71
  257. package/lib/eth1/index.js.map +0 -1
  258. package/lib/eth1/interface.d.ts +0 -74
  259. package/lib/eth1/interface.d.ts.map +0 -1
  260. package/lib/eth1/interface.js +0 -8
  261. package/lib/eth1/interface.js.map +0 -1
  262. package/lib/eth1/options.d.ts +0 -22
  263. package/lib/eth1/options.d.ts.map +0 -1
  264. package/lib/eth1/options.js +0 -8
  265. package/lib/eth1/options.js.map +0 -1
  266. package/lib/eth1/provider/eth1Provider.d.ts +0 -39
  267. package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
  268. package/lib/eth1/provider/eth1Provider.js +0 -147
  269. package/lib/eth1/provider/eth1Provider.js.map +0 -1
  270. package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
  271. package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
  272. package/lib/eth1/provider/jwt.d.ts.map +0 -1
  273. package/lib/eth1/provider/jwt.js.map +0 -1
  274. package/lib/eth1/provider/utils.d.ts +0 -65
  275. package/lib/eth1/provider/utils.d.ts.map +0 -1
  276. package/lib/eth1/provider/utils.js +0 -120
  277. package/lib/eth1/provider/utils.js.map +0 -1
  278. package/lib/eth1/stream.d.ts +0 -15
  279. package/lib/eth1/stream.d.ts.map +0 -1
  280. package/lib/eth1/stream.js +0 -54
  281. package/lib/eth1/stream.js.map +0 -1
  282. package/lib/eth1/utils/depositContract.d.ts +0 -14
  283. package/lib/eth1/utils/depositContract.d.ts.map +0 -1
  284. package/lib/eth1/utils/depositContract.js +0 -33
  285. package/lib/eth1/utils/depositContract.js.map +0 -1
  286. package/lib/eth1/utils/deposits.d.ts +0 -8
  287. package/lib/eth1/utils/deposits.d.ts.map +0 -1
  288. package/lib/eth1/utils/deposits.js +0 -47
  289. package/lib/eth1/utils/deposits.js.map +0 -1
  290. package/lib/eth1/utils/eth1Data.d.ts +0 -22
  291. package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
  292. package/lib/eth1/utils/eth1Data.js +0 -77
  293. package/lib/eth1/utils/eth1Data.js.map +0 -1
  294. package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
  295. package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
  296. package/lib/eth1/utils/eth1DepositEvent.js +0 -13
  297. package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
  298. package/lib/eth1/utils/eth1Vote.d.ts +0 -17
  299. package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
  300. package/lib/eth1/utils/eth1Vote.js +0 -111
  301. package/lib/eth1/utils/eth1Vote.js.map +0 -1
  302. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
  303. package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
  304. package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
  305. package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
  306. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
  307. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
  308. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
  309. package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
  310. package/src/chain/genesis/genesis.ts +0 -190
  311. package/src/chain/genesis/interface.ts +0 -14
  312. package/src/db/repositories/depositDataRoot.ts +0 -80
  313. package/src/db/repositories/depositEvent.ts +0 -32
  314. package/src/db/repositories/eth1Data.ts +0 -33
  315. package/src/db/single/index.ts +0 -2
  316. package/src/db/single/preGenesisState.ts +0 -37
  317. package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
  318. package/src/eth1/errors.ts +0 -40
  319. package/src/eth1/eth1DataCache.ts +0 -26
  320. package/src/eth1/eth1DepositDataTracker.ts +0 -410
  321. package/src/eth1/eth1DepositsCache.ts +0 -141
  322. package/src/eth1/index.ts +0 -94
  323. package/src/eth1/interface.ts +0 -87
  324. package/src/eth1/options.ts +0 -28
  325. package/src/eth1/provider/eth1Provider.ts +0 -229
  326. package/src/eth1/provider/utils.ts +0 -136
  327. package/src/eth1/stream.ts +0 -75
  328. package/src/eth1/utils/depositContract.ts +0 -37
  329. package/src/eth1/utils/deposits.ts +0 -70
  330. package/src/eth1/utils/eth1Data.ts +0 -100
  331. package/src/eth1/utils/eth1DepositEvent.ts +0 -12
  332. package/src/eth1/utils/eth1Vote.ts +0 -142
  333. package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
  334. package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
  335. /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
  336. /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
  337. /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
  338. /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
@@ -1,42 +0,0 @@
1
- import { ChainForkConfig } from "@lodestar/config";
2
- import { FilterOptions } from "@lodestar/db";
3
- import { phase0 } from "@lodestar/types";
4
- import { IBeaconDb } from "../db/index.js";
5
- import { Eth1Block } from "./interface.js";
6
- export declare class Eth1DepositsCache {
7
- unsafeAllowDepositDataOverwrite: boolean;
8
- db: IBeaconDb;
9
- config: ChainForkConfig;
10
- constructor(opts: {
11
- unsafeAllowDepositDataOverwrite?: boolean;
12
- }, config: ChainForkConfig, db: IBeaconDb);
13
- /**
14
- * Returns a list of `Deposit` objects, within the given deposit index `range`.
15
- *
16
- * The `depositCount` is used to generate the proofs for the `Deposits`. For example, if we
17
- * have 100 proofs, but the Ethereum Consensus chain only acknowledges 50 of them, we must produce our
18
- * proofs with respect to a tree size of 50.
19
- */
20
- get(indexRange: FilterOptions<number>, eth1Data: phase0.Eth1Data): Promise<phase0.Deposit[]>;
21
- /**
22
- * Add log to cache
23
- * This function enforces that `logs` are imported one-by-one with consecutive indexes
24
- */
25
- add(depositEvents: phase0.DepositEvent[]): Promise<void>;
26
- /**
27
- * Appends partial eth1 data (depositRoot, depositCount) in a block range (inclusive)
28
- * Returned array is sequential and ascending in blockNumber
29
- * @param fromBlock
30
- * @param toBlock
31
- */
32
- getEth1DataForBlocks(blocks: Eth1Block[], lastProcessedDepositBlockNumber: number | null): Promise<(phase0.Eth1Data & Eth1Block)[]>;
33
- /**
34
- * Returns the highest blockNumber stored in DB if any
35
- */
36
- getHighestDepositEventBlockNumber(): Promise<number | null>;
37
- /**
38
- * Returns the lowest blockNumber stored in DB if any
39
- */
40
- getLowestDepositEventBlockNumber(): Promise<number | null>;
41
- }
42
- //# sourceMappingURL=eth1DepositsCache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1DepositsCache.d.ts","sourceRoot":"","sources":["../../src/eth1/eth1DepositsCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAC,MAAM,EAAM,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAKzC,qBAAa,iBAAiB;IAC5B,+BAA+B,EAAE,OAAO,CAAC;IACzC,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;gBAEZ,IAAI,EAAE;QAAC,+BAA+B,CAAC,EAAE,OAAO,CAAA;KAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS;IAMrG;;;;;;OAMG;IACG,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAMlG;;;OAGG;IACG,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE9D;;;;;OAKG;IACG,oBAAoB,CACxB,MAAM,EAAE,SAAS,EAAE,EACnB,+BAA+B,EAAE,MAAM,GAAG,IAAI,GAC7C,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC;IAU3C;;OAEG;IACG,iCAAiC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKjE;;OAEG;IACG,gCAAgC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAIjE"}
@@ -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":"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"}
@@ -1,31 +0,0 @@
1
- import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
2
- import { Eth1DepositDataTrackerModules } from "./eth1DepositDataTracker.js";
3
- import { Eth1DataAndDeposits, IEth1ForBlockProduction, IEth1Provider } from "./interface.js";
4
- import { Eth1Options } from "./options.js";
5
- import { Eth1Provider } from "./provider/eth1Provider.js";
6
- export { Eth1Provider };
7
- export type { IEth1ForBlockProduction, IEth1Provider };
8
- export declare function initializeEth1ForBlockProduction(opts: Eth1Options, modules: Pick<Eth1DepositDataTrackerModules, "db" | "config" | "metrics" | "logger" | "signal">): IEth1ForBlockProduction;
9
- export declare class Eth1ForBlockProduction implements IEth1ForBlockProduction {
10
- private readonly eth1DepositDataTracker;
11
- constructor(opts: Eth1Options, modules: Eth1DepositDataTrackerModules & {
12
- eth1Provider?: IEth1Provider;
13
- });
14
- getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
15
- isPollingEth1Data(): boolean;
16
- stopPollingEth1Data(): void;
17
- }
18
- /**
19
- * Disabled version of Eth1ForBlockProduction
20
- * May produce invalid blocks by not adding new deposits and voting for the same eth1Data
21
- */
22
- export declare class Eth1ForBlockProductionDisabled implements IEth1ForBlockProduction {
23
- /**
24
- * Returns same eth1Data as in state and no deposits
25
- * May produce invalid blocks if deposits have to be added
26
- */
27
- getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
28
- isPollingEth1Data(): boolean;
29
- stopPollingEth1Data(): void;
30
- }
31
- //# 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,EAAyB,6BAA6B,EAAC,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC3F,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;AAiBrD,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;gBAE3D,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,6BAA6B,GAAG;QAAC,YAAY,CAAC,EAAE,aAAa,CAAA;KAAC;IAehG,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO5F,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,iBAAiB,IAAI,OAAO;IAI5B,mBAAmB,IAAI,IAAI;CAG5B"}
package/lib/eth1/index.js DELETED
@@ -1,71 +0,0 @@
1
- import { Eth1DepositDataTracker } from "./eth1DepositDataTracker.js";
2
- import { Eth1Provider } from "./provider/eth1Provider.js";
3
- export { Eth1Provider };
4
- // This module encapsulates all consumer functionality to the execution node (formerly eth1). The execution client
5
- // has to:
6
- //
7
- // - For genesis, the beacon node must follow the eth1 chain: get all deposit events + blocks within that range.
8
- // Once the genesis conditions are met, start the POS chain with the resulting state. The logic is similar to the
9
- // two points below, but the implementation is specialized for each scenario.
10
- //
11
- // - Follow the eth1 block chain to validate eth1Data votes. It needs all consecutive blocks within a specific range
12
- // and at a distance from the head.
13
- // ETH1_FOLLOW_DISTANCE uint64(2**11) (= 2,048) Eth1 blocks ~8 hours
14
- // EPOCHS_PER_ETH1_VOTING_PERIOD uint64(2**6) (= 64) epochs ~6.8 hours
15
- //
16
- // - Fetch ALL deposit events from the deposit contract to build the deposit tree and validate future merkle proofs.
17
- // Then it must follow deposit events at a distance roughly similar to the `ETH1_FOLLOW_DISTANCE` parameter above.
18
- export function initializeEth1ForBlockProduction(opts, modules) {
19
- if (opts.enabled) {
20
- return new Eth1ForBlockProduction(opts, {
21
- config: modules.config,
22
- db: modules.db,
23
- metrics: modules.metrics,
24
- logger: modules.logger,
25
- signal: modules.signal,
26
- });
27
- }
28
- return new Eth1ForBlockProductionDisabled();
29
- }
30
- export class Eth1ForBlockProduction {
31
- eth1DepositDataTracker;
32
- constructor(opts, modules) {
33
- const eth1Provider = modules.eth1Provider ||
34
- new Eth1Provider(modules.config, { ...opts, logger: modules.logger }, modules.signal, modules.metrics?.eth1HttpClient);
35
- this.eth1DepositDataTracker = opts.disableEth1DepositDataTracker
36
- ? null
37
- : new Eth1DepositDataTracker(opts, modules, eth1Provider);
38
- }
39
- async getEth1DataAndDeposits(state) {
40
- if (this.eth1DepositDataTracker === null) {
41
- return { eth1Data: state.eth1Data, deposits: [] };
42
- }
43
- return this.eth1DepositDataTracker.getEth1DataAndDeposits(state);
44
- }
45
- isPollingEth1Data() {
46
- return this.eth1DepositDataTracker?.isPollingEth1Data() ?? false;
47
- }
48
- stopPollingEth1Data() {
49
- this.eth1DepositDataTracker?.stopPollingEth1Data();
50
- }
51
- }
52
- /**
53
- * Disabled version of Eth1ForBlockProduction
54
- * May produce invalid blocks by not adding new deposits and voting for the same eth1Data
55
- */
56
- export class Eth1ForBlockProductionDisabled {
57
- /**
58
- * Returns same eth1Data as in state and no deposits
59
- * May produce invalid blocks if deposits have to be added
60
- */
61
- async getEth1DataAndDeposits(state) {
62
- return { eth1Data: state.eth1Data, deposits: [] };
63
- }
64
- isPollingEth1Data() {
65
- return false;
66
- }
67
- stopPollingEth1Data() {
68
- // Ignore
69
- }
70
- }
71
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eth1/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAgC,MAAM,6BAA6B,CAAC;AAGlG,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,CAAC;AAGtB,kHAAkH;AAClH,UAAU;AACV,EAAE;AACF,gHAAgH;AAChH,mHAAmH;AACnH,+EAA+E;AAC/E,EAAE;AACF,oHAAoH;AACpH,qCAAqC;AACrC,iFAAiF;AACjF,qFAAqF;AACrF,EAAE;AACF,oHAAoH;AACpH,oHAAoH;AAEpH,MAAM,UAAU,gCAAgC,CAC9C,IAAiB,EACjB,OAA+F;IAE/F,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,sBAAsB,CAAC,IAAI,EAAE;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,8BAA8B,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,OAAO,sBAAsB;IAChB,sBAAsB,CAAgC;IAEvE,YAAY,IAAiB,EAAE,OAAuE;QACpG,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;YACpB,IAAI,YAAY,CACd,OAAO,CAAC,MAAM,EACd,EAAC,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,EACjC,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,EAAE,cAAc,CAChC,CAAC;QAEJ,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,6BAA6B;YAC9D,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAgC;QAC3D,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;YACzC,OAAO,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,IAAI,KAAK,CAAC;IACnE,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,EAAE,CAAC;IACrD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,8BAA8B;IACzC;;;OAGG;IACH,KAAK,CAAC,sBAAsB,CAAC,KAAgC;QAC3D,OAAO,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC;IAClD,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;QACjB,SAAS;IACX,CAAC;CACF"}
@@ -1,74 +0,0 @@
1
- import { BeaconConfig } from "@lodestar/config";
2
- import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
3
- import { phase0 } from "@lodestar/types";
4
- export type EthJsonRpcBlockRaw = {
5
- /** the block number. null when its pending block. `"0x1b4"` */
6
- number: string;
7
- /** 32 Bytes - hash of the block. null when its pending block. `"0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae"` */
8
- hash: string;
9
- /** 32 Bytes - hash of the parent block. `"0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54"` */
10
- parentHash: string;
11
- /**
12
- * integer of the total difficulty of the chain until this block. `"0x78ed983323d"`.
13
- * Current mainnet value is 0x684de10dc5c03f006b6, 75 bits so requires a bigint.
14
- */
15
- totalDifficulty: string;
16
- /** the unix timestamp for when the block was collated. `"0x55ba467c"` */
17
- timestamp: string;
18
- };
19
- export interface IEth1Provider {
20
- deployBlock: number;
21
- getBlockNumber(): Promise<number>;
22
- /** Returns HTTP code 200 + value=null if block is not found */
23
- getBlockByNumber(blockNumber: number | "latest"): Promise<EthJsonRpcBlockRaw | null>;
24
- /** Returns HTTP code 200 + value=null if block is not found */
25
- getBlockByHash(blockHashHex: string): Promise<EthJsonRpcBlockRaw | null>;
26
- /** null returns are ignored, may return a different number of blocks than expected */
27
- getBlocksByNumber(fromBlock: number, toBlock: number): Promise<EthJsonRpcBlockRaw[]>;
28
- getDepositEvents(fromBlock: number, toBlock: number): Promise<phase0.DepositEvent[]>;
29
- validateContract(): Promise<void>;
30
- getState(): Eth1ProviderState;
31
- }
32
- export declare enum Eth1ProviderState {
33
- ONLINE = "ONLINE",
34
- OFFLINE = "OFFLINE",
35
- ERROR = "ERROR",
36
- AUTH_FAILED = "AUTH_FAILED"
37
- }
38
- export type Eth1DataAndDeposits = {
39
- eth1Data: phase0.Eth1Data;
40
- deposits: phase0.Deposit[];
41
- };
42
- export interface IEth1ForBlockProduction {
43
- getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
44
- isPollingEth1Data(): boolean;
45
- /**
46
- * Should stop polling eth1Data after a Electra block is finalized AND deposit_requests_start_index is reached
47
- */
48
- stopPollingEth1Data(): void;
49
- }
50
- /** Different Eth1Block from phase0.Eth1Block with blockHash */
51
- export type Eth1Block = {
52
- blockHash: Uint8Array;
53
- blockNumber: number;
54
- timestamp: number;
55
- };
56
- export type BatchDepositEvents = {
57
- depositEvents: phase0.DepositEvent[];
58
- blockNumber: number;
59
- };
60
- export type Eth1Streamer = {
61
- getDepositsStream(fromBlock: number): AsyncGenerator<BatchDepositEvents>;
62
- getDepositsAndBlockStreamForGenesis(fromBlock: number): AsyncGenerator<[phase0.DepositEvent[], phase0.Eth1Block]>;
63
- };
64
- export type IEth1StreamParams = Pick<BeaconConfig, "ETH1_FOLLOW_DISTANCE" | "MIN_GENESIS_TIME" | "GENESIS_DELAY" | "SECONDS_PER_ETH1_BLOCK"> & {
65
- maxBlocksPerPoll: number;
66
- };
67
- export type IJson = string | number | boolean | undefined | IJson[] | {
68
- [key: string]: IJson;
69
- };
70
- export interface RpcPayload<P = IJson[]> {
71
- method: string;
72
- params: P;
73
- }
74
- //# sourceMappingURL=interface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/eth1/interface.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export var Eth1ProviderState;
2
- (function (Eth1ProviderState) {
3
- Eth1ProviderState["ONLINE"] = "ONLINE";
4
- Eth1ProviderState["OFFLINE"] = "OFFLINE";
5
- Eth1ProviderState["ERROR"] = "ERROR";
6
- Eth1ProviderState["AUTH_FAILED"] = "AUTH_FAILED";
7
- })(Eth1ProviderState || (Eth1ProviderState = {}));
8
- //# sourceMappingURL=interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/eth1/interface.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,sCAAiB,CAAA;IACjB,wCAAmB,CAAA;IACnB,oCAAe,CAAA;IACf,gDAA2B,CAAA;AAC7B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B"}
@@ -1,22 +0,0 @@
1
- export type Eth1Options = {
2
- enabled?: boolean;
3
- disableEth1DepositDataTracker?: boolean;
4
- providerUrls?: string[];
5
- /**
6
- * jwtSecretHex is the jwt secret if the eth1 modules should ping the jwt auth
7
- * protected engine endpoints.
8
- */
9
- jwtSecretHex?: string;
10
- jwtId?: string;
11
- jwtVersion?: string;
12
- depositContractDeployBlock?: number;
13
- unsafeAllowDepositDataOverwrite?: boolean;
14
- /**
15
- * Vote for a specific eth1_data regardless of validity and existing votes.
16
- * hex encoded ssz serialized Eth1Data type.
17
- */
18
- forcedEth1DataVote?: string;
19
- };
20
- export declare const DEFAULT_PROVIDER_URLS: string[];
21
- export declare const defaultEth1Options: Eth1Options;
22
- //# sourceMappingURL=options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/eth1/options.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAA4B,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,WAKhC,CAAC"}
@@ -1,8 +0,0 @@
1
- export const DEFAULT_PROVIDER_URLS = ["http://localhost:8545"];
2
- export const defaultEth1Options = {
3
- enabled: true,
4
- providerUrls: DEFAULT_PROVIDER_URLS,
5
- depositContractDeployBlock: 0,
6
- unsafeAllowDepositDataOverwrite: false,
7
- };
8
- //# sourceMappingURL=options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/eth1/options.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,qBAAqB;IACnC,0BAA0B,EAAE,CAAC;IAC7B,+BAA+B,EAAE,KAAK;CACvC,CAAC"}
@@ -1,39 +0,0 @@
1
- import { ChainConfig } from "@lodestar/config";
2
- import { Logger } from "@lodestar/logger";
3
- import { phase0 } from "@lodestar/types";
4
- import { Eth1Block, Eth1ProviderState, EthJsonRpcBlockRaw, IEth1Provider } from "../interface.js";
5
- import { Eth1Options } from "../options.js";
6
- import { JsonRpcHttpClientMetrics } from "./jsonRpcHttpClient.js";
7
- export declare class Eth1Provider implements IEth1Provider {
8
- readonly deployBlock: number;
9
- private readonly depositContractAddress;
10
- private readonly rpc;
11
- private state;
12
- private logger?;
13
- constructor(config: Pick<ChainConfig, "DEPOSIT_CONTRACT_ADDRESS">, opts: Pick<Eth1Options, "depositContractDeployBlock" | "providerUrls" | "jwtSecretHex" | "jwtId" | "jwtVersion"> & {
14
- logger?: Logger;
15
- }, signal?: AbortSignal, metrics?: JsonRpcHttpClientMetrics | null);
16
- getState(): Eth1ProviderState;
17
- validateContract(): Promise<void>;
18
- getDepositEvents(fromBlock: number, toBlock: number): Promise<phase0.DepositEvent[]>;
19
- /**
20
- * Fetches an arbitrary array of block numbers in batch
21
- */
22
- getBlocksByNumber(fromBlock: number, toBlock: number): Promise<EthJsonRpcBlockRaw[]>;
23
- getBlockByNumber(blockNumber: number | "latest"): Promise<EthJsonRpcBlockRaw | null>;
24
- getBlockByHash(blockHashHex: string): Promise<EthJsonRpcBlockRaw | null>;
25
- getBlockNumber(): Promise<number>;
26
- getCode(address: string): Promise<string>;
27
- getLogs(options: {
28
- fromBlock: number;
29
- toBlock: number;
30
- address: string;
31
- topics: string[];
32
- }): Promise<{
33
- blockNumber: number;
34
- data: string;
35
- topics: string[];
36
- }[]>;
37
- }
38
- export declare function parseEth1Block(blockRaw: EthJsonRpcBlockRaw): Eth1Block;
39
- //# sourceMappingURL=eth1Provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1Provider.d.ts","sourceRoot":"","sources":["../../../src/eth1/provider/eth1Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAavC,OAAO,EAAC,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAAwB,WAAW,EAAC,MAAM,eAAe,CAAC;AAEjE,OAAO,EAKL,wBAAwB,EAEzB,MAAM,wBAAwB,CAAC;AAiChC,qBAAa,YAAa,YAAW,aAAa;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IAExC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,MAAM,CAAC,CAAS;gBAGtB,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,EACrD,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,4BAA4B,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,GAAG,YAAY,CAAC,GAAG;QACjH,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EACD,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAmD3C,QAAQ,IAAI,iBAAiB;IAIvB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IAU1F;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAapF,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAUpF,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IASxE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IASjC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzC,OAAO,CAAC,OAAO,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,GAAG,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAC,EAAE,CAAC;CAiBrE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,CAOtE"}
@@ -1,147 +0,0 @@
1
- import { createElapsedTimeTracker, fromHex, isErrorAborted, isFetchError, toHex, toPrintableUrl, } from "@lodestar/utils";
2
- import { HTTP_CONNECTION_ERROR_CODES, HTTP_FATAL_ERROR_CODES } from "../../execution/engine/utils.js";
3
- import { isValidAddress } from "../../util/address.js";
4
- import { linspace } from "../../util/numpy.js";
5
- import { Eth1ProviderState } from "../interface.js";
6
- import { DEFAULT_PROVIDER_URLS } from "../options.js";
7
- import { depositEventTopics, parseDepositLog } from "../utils/depositContract.js";
8
- import { ErrorJsonRpcResponse, HttpRpcError, JsonRpcHttpClient, JsonRpcHttpClientEvent, } from "./jsonRpcHttpClient.js";
9
- import { dataToBytes, isJsonRpcTruncatedError, numToQuantity, quantityToNum } from "./utils.js";
10
- // Define static options once to prevent extra allocations
11
- const getBlocksByNumberOpts = { routeId: "getBlockByNumber_batched" };
12
- const getBlockByNumberOpts = { routeId: "getBlockByNumber" };
13
- const getBlockByHashOpts = { routeId: "getBlockByHash" };
14
- const getBlockNumberOpts = { routeId: "getBlockNumber" };
15
- const getLogsOpts = { routeId: "getLogs" };
16
- const isOneMinutePassed = createElapsedTimeTracker({ minElapsedTime: 60_000 });
17
- export class Eth1Provider {
18
- deployBlock;
19
- depositContractAddress;
20
- rpc;
21
- // The default state is ONLINE, it will be updated to offline if we receive a http error
22
- state = Eth1ProviderState.ONLINE;
23
- logger;
24
- constructor(config, opts, signal, metrics) {
25
- this.logger = opts.logger;
26
- this.deployBlock = opts.depositContractDeployBlock ?? 0;
27
- this.depositContractAddress = toHex(config.DEPOSIT_CONTRACT_ADDRESS);
28
- const providerUrls = opts.providerUrls ?? DEFAULT_PROVIDER_URLS;
29
- this.rpc = new JsonRpcHttpClient(providerUrls, {
30
- signal,
31
- // Don't fallback with is truncated error. Throw early and let the retry on this class handle it
32
- shouldNotFallback: isJsonRpcTruncatedError,
33
- jwtSecret: opts.jwtSecretHex ? fromHex(opts.jwtSecretHex) : undefined,
34
- jwtId: opts.jwtId,
35
- jwtVersion: opts.jwtVersion,
36
- metrics: metrics,
37
- });
38
- this.logger?.info("Eth1 provider", { urls: providerUrls.map(toPrintableUrl).toString() });
39
- this.rpc.emitter.on(JsonRpcHttpClientEvent.RESPONSE, () => {
40
- const oldState = this.state;
41
- this.state = Eth1ProviderState.ONLINE;
42
- if (oldState !== Eth1ProviderState.ONLINE) {
43
- this.logger?.info("Eth1 provider is back online", { oldState, newState: this.state });
44
- }
45
- });
46
- this.rpc.emitter.on(JsonRpcHttpClientEvent.ERROR, ({ error }) => {
47
- if (isErrorAborted(error)) {
48
- this.state = Eth1ProviderState.ONLINE;
49
- }
50
- else if (error instanceof HttpRpcError || error instanceof ErrorJsonRpcResponse) {
51
- this.state = Eth1ProviderState.ERROR;
52
- }
53
- else if (error && isFetchError(error) && HTTP_FATAL_ERROR_CODES.includes(error.code)) {
54
- this.state = Eth1ProviderState.OFFLINE;
55
- }
56
- else if (error && isFetchError(error) && HTTP_CONNECTION_ERROR_CODES.includes(error.code)) {
57
- this.state = Eth1ProviderState.AUTH_FAILED;
58
- }
59
- if (this.state !== Eth1ProviderState.ONLINE && isOneMinutePassed()) {
60
- this.logger?.error("Eth1 provider error", {
61
- state: this.state,
62
- lastErrorAt: new Date(Date.now() - isOneMinutePassed.msSinceLastCall).toLocaleTimeString(),
63
- }, error);
64
- }
65
- });
66
- }
67
- getState() {
68
- return this.state;
69
- }
70
- async validateContract() {
71
- if (!isValidAddress(this.depositContractAddress)) {
72
- throw Error(`Invalid contract address: ${this.depositContractAddress}`);
73
- }
74
- const code = await this.getCode(this.depositContractAddress);
75
- if (!code || code === "0x") {
76
- throw new Error(`There is no deposit contract at given address: ${this.depositContractAddress}`);
77
- }
78
- }
79
- async getDepositEvents(fromBlock, toBlock) {
80
- const logsRawArr = await this.getLogs({
81
- fromBlock,
82
- toBlock,
83
- address: this.depositContractAddress,
84
- topics: depositEventTopics,
85
- });
86
- return logsRawArr.flat(1).map((log) => parseDepositLog(log));
87
- }
88
- /**
89
- * Fetches an arbitrary array of block numbers in batch
90
- */
91
- async getBlocksByNumber(fromBlock, toBlock) {
92
- const method = "eth_getBlockByNumber";
93
- const blocksArr = await this.rpc.fetchBatch(linspace(fromBlock, toBlock).map((blockNumber) => ({ method, params: [numToQuantity(blockNumber), false] })), getBlocksByNumberOpts);
94
- const blocks = [];
95
- for (const block of blocksArr.flat(1)) {
96
- if (block)
97
- blocks.push(block);
98
- }
99
- return blocks;
100
- }
101
- async getBlockByNumber(blockNumber) {
102
- const method = "eth_getBlockByNumber";
103
- const blockNumberHex = typeof blockNumber === "string" ? blockNumber : numToQuantity(blockNumber);
104
- return this.rpc.fetch(
105
- // false = include only transaction roots, not full objects
106
- { method, params: [blockNumberHex, false] }, getBlockByNumberOpts);
107
- }
108
- async getBlockByHash(blockHashHex) {
109
- const method = "eth_getBlockByHash";
110
- return this.rpc.fetch(
111
- // false = include only transaction roots, not full objects
112
- { method, params: [blockHashHex, false] }, getBlockByHashOpts);
113
- }
114
- async getBlockNumber() {
115
- const method = "eth_blockNumber";
116
- const blockNumberRaw = await this.rpc.fetch({ method, params: [] }, getBlockNumberOpts);
117
- return parseInt(blockNumberRaw, 16);
118
- }
119
- async getCode(address) {
120
- const method = "eth_getCode";
121
- return this.rpc.fetch({ method, params: [address, "latest"] });
122
- }
123
- async getLogs(options) {
124
- const method = "eth_getLogs";
125
- const hexOptions = {
126
- ...options,
127
- fromBlock: numToQuantity(options.fromBlock),
128
- toBlock: numToQuantity(options.toBlock),
129
- };
130
- const logsRaw = await this.rpc.fetch({ method, params: [hexOptions] }, getLogsOpts);
131
- return logsRaw.map((logRaw) => ({
132
- blockNumber: parseInt(logRaw.blockNumber, 16),
133
- data: logRaw.data,
134
- topics: logRaw.topics,
135
- }));
136
- }
137
- }
138
- export function parseEth1Block(blockRaw) {
139
- if (typeof blockRaw !== "object")
140
- throw Error("block is not an object");
141
- return {
142
- blockHash: dataToBytes(blockRaw.hash, 32),
143
- blockNumber: quantityToNum(blockRaw.number, "block.number"),
144
- timestamp: quantityToNum(blockRaw.timestamp, "block.timestamp"),
145
- };
146
- }
147
- //# sourceMappingURL=eth1Provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eth1Provider.js","sourceRoot":"","sources":["../../../src/eth1/provider/eth1Provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,wBAAwB,EACxB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,KAAK,EACL,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,2BAA2B,EAAE,sBAAsB,EAAC,MAAM,iCAAiC,CAAC;AACpG,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAY,iBAAiB,EAAoC,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAAC,qBAAqB,EAAc,MAAM,eAAe,CAAC;AACjE,OAAO,EAAC,kBAAkB,EAAE,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAChF,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,GAGvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,WAAW,EAAE,uBAAuB,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AAuB9F,0DAA0D;AAC1D,MAAM,qBAAqB,GAAY,EAAC,OAAO,EAAE,0BAA0B,EAAC,CAAC;AAC7E,MAAM,oBAAoB,GAAY,EAAC,OAAO,EAAE,kBAAkB,EAAC,CAAC;AACpE,MAAM,kBAAkB,GAAY,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC;AAChE,MAAM,kBAAkB,GAAY,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC;AAChE,MAAM,WAAW,GAAY,EAAC,OAAO,EAAE,SAAS,EAAC,CAAC;AAElD,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,EAAC,cAAc,EAAE,MAAM,EAAC,CAAC,CAAC;AAE7E,MAAM,OAAO,YAAY;IACd,WAAW,CAAS;IACZ,sBAAsB,CAAS;IAC/B,GAAG,CAAoB;IACxC,wFAAwF;IAChF,KAAK,GAAsB,iBAAiB,CAAC,MAAM,CAAC;IACpD,MAAM,CAAU;IAExB,YACE,MAAqD,EACrD,IAEC,EACD,MAAoB,EACpB,OAAyC;QAEzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,0BAA0B,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAErE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC;QAChE,IAAI,CAAC,GAAG,GAAG,IAAI,iBAAiB,CAAC,YAAY,EAAE;YAC7C,MAAM;YACN,gGAAgG;YAChG,iBAAiB,EAAE,uBAAuB;YAC1C,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;YACrE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;QAExF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAEtC,IAAI,QAAQ,KAAK,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,8BAA8B,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;YACtF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;YAC5D,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC;YACxC,CAAC;iBAAM,IAAK,KAAiB,YAAY,YAAY,IAAK,KAAiB,YAAY,oBAAoB,EAAE,CAAC;gBAC5G,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;YACvC,CAAC;iBAAM,IAAI,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,sBAAsB,CAAC,QAAQ,CAAE,KAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvG,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC;YACzC,CAAC;iBAAM,IAAI,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,2BAA2B,CAAC,QAAQ,CAAE,KAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5G,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,WAAW,CAAC;YAC7C,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM,IAAI,iBAAiB,EAAE,EAAE,CAAC;gBACnE,IAAI,CAAC,MAAM,EAAE,KAAK,CAChB,qBAAqB,EACrB;oBACE,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC,kBAAkB,EAAE;iBAC3F,EACD,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,CAAC,6BAA6B,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB,EAAE,OAAe;QACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;YACpC,SAAS;YACT,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,sBAAsB;YACpC,MAAM,EAAE,kBAAkB;SAC3B,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,OAAe;QACxD,MAAM,MAAM,GAAG,sBAAsB,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,EAAC,CAAC,CAAC,EAC1G,qBAAqB,CACtB,CAAC;QACF,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,IAAI,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAA8B;QACnD,MAAM,MAAM,GAAG,sBAAsB,CAAC;QACtC,MAAM,cAAc,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAClG,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK;QACnB,2DAA2D;QAC3D,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,EAAC,EACzC,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,YAAoB;QACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK;QACnB,2DAA2D;QAC3D,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAC,EACvC,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,MAAM,GAAG,iBAAiB,CAAC;QACjC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CACzC,EAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAC,EACpB,kBAAkB,CACnB,CAAC;QACF,OAAO,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAuC,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAC,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAKb;QACC,MAAM,MAAM,GAAG,aAAa,CAAC;QAC7B,MAAM,UAAU,GAAG;YACjB,GAAG,OAAO;YACV,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3C,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;SACxC,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAClC,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAC,EAC9B,WAAW,CACZ,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,QAA4B;IACzD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxE,OAAO;QACL,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAC3D,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;KAChE,CAAC;AACJ,CAAC"}