@lidofinance/lsv-cli 1.4.0 → 1.5.0

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 (309) hide show
  1. package/dist/abi/Dashboard.d.ts +24 -0
  2. package/dist/abi/PredepositGuarantee.d.ts +48 -0
  3. package/dist/abi/PredepositGuarantee.js +32 -0
  4. package/dist/abi/PredepositGuarantee.js.map +1 -1
  5. package/dist/abi/StEth.d.ts +1175 -59
  6. package/dist/abi/StEth.js +885 -320
  7. package/dist/abi/StEth.js.map +1 -1
  8. package/dist/abi/defi-wrapper/Factory.d.ts +532 -657
  9. package/dist/abi/defi-wrapper/Factory.js +1083 -647
  10. package/dist/abi/defi-wrapper/Factory.js.map +1 -1
  11. package/dist/abi/defi-wrapper/OssifiableProxy.d.ts +71 -0
  12. package/dist/abi/defi-wrapper/OssifiableProxy.js +93 -0
  13. package/dist/abi/defi-wrapper/OssifiableProxy.js.map +1 -0
  14. package/dist/abi/defi-wrapper/StvStETHPool.d.ts +38 -32
  15. package/dist/abi/defi-wrapper/StvStETHPool.js +50 -42
  16. package/dist/abi/defi-wrapper/StvStETHPool.js.map +1 -1
  17. package/dist/abi/defi-wrapper/TimeLock.d.ts +770 -0
  18. package/dist/abi/defi-wrapper/TimeLock.js +999 -0
  19. package/dist/abi/defi-wrapper/TimeLock.js.map +1 -0
  20. package/dist/abi/defi-wrapper/index.d.ts +2 -0
  21. package/dist/abi/defi-wrapper/index.js +2 -0
  22. package/dist/abi/defi-wrapper/index.js.map +1 -1
  23. package/dist/contracts/defi-wrapper/index.d.ts +2 -0
  24. package/dist/contracts/defi-wrapper/index.js +2 -0
  25. package/dist/contracts/defi-wrapper/index.js.map +1 -1
  26. package/dist/contracts/defi-wrapper/ossifiable-proxy.d.ts +4 -0
  27. package/dist/contracts/defi-wrapper/ossifiable-proxy.js +12 -0
  28. package/dist/contracts/defi-wrapper/ossifiable-proxy.js.map +1 -0
  29. package/dist/contracts/defi-wrapper/timelock.d.ts +4 -0
  30. package/dist/contracts/defi-wrapper/timelock.js +12 -0
  31. package/dist/contracts/defi-wrapper/timelock.js.map +1 -0
  32. package/dist/contracts/steth.d.ts +4 -27706
  33. package/dist/contracts/steth.js +2 -2
  34. package/dist/contracts/steth.js.map +1 -1
  35. package/dist/features/consolidation.js +19 -3
  36. package/dist/features/consolidation.js.map +1 -1
  37. package/dist/features/defi-wrapper/create-vault.js +16 -13
  38. package/dist/features/defi-wrapper/create-vault.js.map +1 -1
  39. package/dist/features/defi-wrapper/defi-wrapper-factory.d.ts +10 -27
  40. package/dist/features/defi-wrapper/defi-wrapper-factory.js +105 -15
  41. package/dist/features/defi-wrapper/defi-wrapper-factory.js.map +1 -1
  42. package/dist/features/defi-wrapper/distributor.d.ts +24 -0
  43. package/dist/features/defi-wrapper/distributor.js +300 -0
  44. package/dist/features/defi-wrapper/distributor.js.map +1 -0
  45. package/dist/features/defi-wrapper/index.d.ts +1 -0
  46. package/dist/features/defi-wrapper/index.js +1 -0
  47. package/dist/features/defi-wrapper/index.js.map +1 -1
  48. package/dist/features/defi-wrapper/pool-info.d.ts +17 -2
  49. package/dist/features/defi-wrapper/pool-info.js +63 -13
  50. package/dist/features/defi-wrapper/pool-info.js.map +1 -1
  51. package/dist/features/defi-wrapper/timelock.d.ts +19 -0
  52. package/dist/features/defi-wrapper/timelock.js +198 -0
  53. package/dist/features/defi-wrapper/timelock.js.map +1 -0
  54. package/dist/features/deposits/check-bls-deposits.js +15 -3
  55. package/dist/features/deposits/check-bls-deposits.js.map +1 -1
  56. package/dist/features/deposits/make-pdg-proof.js +15 -3
  57. package/dist/features/deposits/make-pdg-proof.js.map +1 -1
  58. package/dist/features/deposits/no-pdg.js +50 -14
  59. package/dist/features/deposits/no-pdg.js.map +1 -1
  60. package/dist/features/deposits/pdg.js +5 -1
  61. package/dist/features/deposits/pdg.js.map +1 -1
  62. package/dist/features/dev-tools/impersonate.js +5 -1
  63. package/dist/features/dev-tools/impersonate.js.map +1 -1
  64. package/dist/features/metrics.js +24 -6
  65. package/dist/features/metrics.js.map +1 -1
  66. package/dist/features/mint-burn/allowance.js +15 -6
  67. package/dist/features/mint-burn/allowance.js.map +1 -1
  68. package/dist/features/mint-burn/burn-steth.js +5 -1
  69. package/dist/features/mint-burn/burn-steth.js.map +1 -1
  70. package/dist/features/mint-burn/index.d.ts +1 -0
  71. package/dist/features/mint-burn/index.js +1 -0
  72. package/dist/features/mint-burn/index.js.map +1 -1
  73. package/dist/features/mint-burn/mint-limit.d.ts +9 -0
  74. package/dist/features/mint-burn/mint-limit.js +31 -0
  75. package/dist/features/mint-burn/mint-limit.js.map +1 -0
  76. package/dist/features/mint-burn/mint-steth.js +5 -1
  77. package/dist/features/mint-burn/mint-steth.js.map +1 -1
  78. package/dist/features/pdg.js +5 -1
  79. package/dist/features/pdg.js.map +1 -1
  80. package/dist/features/utils/connection.js +5 -1
  81. package/dist/features/utils/connection.js.map +1 -1
  82. package/dist/features/utils/index.d.ts +1 -0
  83. package/dist/features/utils/index.js +1 -0
  84. package/dist/features/utils/index.js.map +1 -1
  85. package/dist/features/utils/liability-shares.js +5 -1
  86. package/dist/features/utils/liability-shares.js.map +1 -1
  87. package/dist/features/utils/minting-capacity.js +4 -3
  88. package/dist/features/utils/minting-capacity.js.map +1 -1
  89. package/dist/features/utils/quarantine.js +5 -1
  90. package/dist/features/utils/quarantine.js.map +1 -1
  91. package/dist/features/utils/report-fresh.js +15 -3
  92. package/dist/features/utils/report-fresh.js.map +1 -1
  93. package/dist/features/utils/try-fetch.d.ts +5 -0
  94. package/dist/features/utils/try-fetch.js +26 -0
  95. package/dist/features/utils/try-fetch.js.map +1 -0
  96. package/dist/features/vault-factory.js +15 -3
  97. package/dist/features/vault-factory.js.map +1 -1
  98. package/dist/features/vault-operations/connect-vault.js +10 -2
  99. package/dist/features/vault-operations/connect-vault.js.map +1 -1
  100. package/dist/features/vault-operations/dashboard-by-vault.js +10 -2
  101. package/dist/features/vault-operations/dashboard-by-vault.js.map +1 -1
  102. package/dist/features/vault-operations/roles.js +10 -2
  103. package/dist/features/vault-operations/roles.js.map +1 -1
  104. package/dist/features/vault-operations/vault-health.js +5 -1
  105. package/dist/features/vault-operations/vault-health.js.map +1 -1
  106. package/dist/features/vault-operations/vault-info.js +10 -2
  107. package/dist/features/vault-operations/vault-info.js.map +1 -1
  108. package/dist/features/vault-operations/vault-overview.js +25 -5
  109. package/dist/features/vault-operations/vault-overview.js.map +1 -1
  110. package/dist/features/vault-operations/vault-roles.js +10 -2
  111. package/dist/features/vault-operations/vault-roles.js.map +1 -1
  112. package/dist/features/vault-operations/vaults-by-role.d.ts +24 -0
  113. package/dist/features/vault-operations/vaults-by-role.js +78 -27
  114. package/dist/features/vault-operations/vaults-by-role.js.map +1 -1
  115. package/dist/index.js +9 -5
  116. package/dist/index.js.map +1 -1
  117. package/dist/programs/account/read.js +10 -5
  118. package/dist/programs/account/read.js.map +1 -1
  119. package/dist/programs/contracts/dashboard/read.js +15 -3
  120. package/dist/programs/contracts/dashboard/read.js.map +1 -1
  121. package/dist/programs/contracts/dashboard/write.js +212 -38
  122. package/dist/programs/contracts/dashboard/write.js.map +1 -1
  123. package/dist/programs/contracts/hub/read.js +15 -5
  124. package/dist/programs/contracts/hub/read.js.map +1 -1
  125. package/dist/programs/contracts/hub/write.js +10 -2
  126. package/dist/programs/contracts/hub/write.js.map +1 -1
  127. package/dist/programs/contracts/operator-grid/read.js +5 -1
  128. package/dist/programs/contracts/operator-grid/read.js.map +1 -1
  129. package/dist/programs/contracts/operator-grid/write.js +5 -1
  130. package/dist/programs/contracts/operator-grid/write.js.map +1 -1
  131. package/dist/programs/contracts/pdg/read.js +5 -1
  132. package/dist/programs/contracts/pdg/read.js.map +1 -1
  133. package/dist/programs/contracts/pdg/write.js +33 -3
  134. package/dist/programs/contracts/pdg/write.js.map +1 -1
  135. package/dist/programs/contracts/vault/write.js +5 -1
  136. package/dist/programs/contracts/vault/write.js.map +1 -1
  137. package/dist/programs/defi-wrapper/contracts/distributor/read.js +17 -5
  138. package/dist/programs/defi-wrapper/contracts/distributor/read.js.map +1 -1
  139. package/dist/programs/defi-wrapper/contracts/factory/read.js +73 -13
  140. package/dist/programs/defi-wrapper/contracts/factory/read.js.map +1 -1
  141. package/dist/programs/defi-wrapper/contracts/factory/write.js +171 -65
  142. package/dist/programs/defi-wrapper/contracts/factory/write.js.map +1 -1
  143. package/dist/programs/defi-wrapper/contracts/stv-pool/read.js +62 -18
  144. package/dist/programs/defi-wrapper/contracts/stv-pool/read.js.map +1 -1
  145. package/dist/programs/defi-wrapper/contracts/stv-steth-pool/read.js +62 -18
  146. package/dist/programs/defi-wrapper/contracts/stv-steth-pool/read.js.map +1 -1
  147. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/read.js +64 -16
  148. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/read.js.map +1 -1
  149. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/write.js +33 -6
  150. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/write.js.map +1 -1
  151. package/dist/programs/defi-wrapper/use-cases/distributor/index.d.ts +3 -0
  152. package/dist/programs/defi-wrapper/use-cases/distributor/index.js +4 -0
  153. package/dist/programs/defi-wrapper/use-cases/distributor/index.js.map +1 -0
  154. package/dist/programs/defi-wrapper/use-cases/distributor/main.d.ts +1 -0
  155. package/dist/programs/defi-wrapper/use-cases/distributor/main.js +6 -0
  156. package/dist/programs/defi-wrapper/use-cases/distributor/main.js.map +1 -0
  157. package/dist/programs/defi-wrapper/use-cases/distributor/read.js +86 -0
  158. package/dist/programs/defi-wrapper/use-cases/distributor/read.js.map +1 -0
  159. package/dist/programs/defi-wrapper/use-cases/distributor/write.d.ts +1 -0
  160. package/dist/programs/defi-wrapper/use-cases/distributor/write.js +191 -0
  161. package/dist/programs/defi-wrapper/use-cases/distributor/write.js.map +1 -0
  162. package/dist/programs/defi-wrapper/use-cases/health/read.js +71 -21
  163. package/dist/programs/defi-wrapper/use-cases/health/read.js.map +1 -1
  164. package/dist/programs/defi-wrapper/use-cases/health/utils.js +10 -2
  165. package/dist/programs/defi-wrapper/use-cases/health/utils.js.map +1 -1
  166. package/dist/programs/defi-wrapper/use-cases/health/write.js +65 -22
  167. package/dist/programs/defi-wrapper/use-cases/health/write.js.map +1 -1
  168. package/dist/programs/defi-wrapper/use-cases/index.d.ts +2 -0
  169. package/dist/programs/defi-wrapper/use-cases/index.js +2 -0
  170. package/dist/programs/defi-wrapper/use-cases/index.js.map +1 -1
  171. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/index.d.ts +3 -0
  172. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/index.js +4 -0
  173. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/index.js.map +1 -0
  174. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/main.d.ts +1 -0
  175. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/main.js +6 -0
  176. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/main.js.map +1 -0
  177. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/read.d.ts +1 -0
  178. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/read.js +362 -0
  179. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/read.js.map +1 -0
  180. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/write.d.ts +1 -0
  181. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/write.js +86 -0
  182. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/write.js.map +1 -0
  183. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/index.d.ts +2 -0
  184. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/index.js +3 -0
  185. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/index.js.map +1 -0
  186. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/main.d.ts +1 -0
  187. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/main.js +6 -0
  188. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/main.js.map +1 -0
  189. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/write.d.ts +1 -0
  190. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/write.js +369 -0
  191. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/write.js.map +1 -0
  192. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.d.ts +6 -0
  193. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.js +7 -0
  194. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.js.map +1 -0
  195. package/dist/programs/defi-wrapper/use-cases/timelock-governance/main.d.ts +1 -0
  196. package/dist/programs/defi-wrapper/use-cases/timelock-governance/main.js +6 -0
  197. package/dist/programs/defi-wrapper/use-cases/timelock-governance/main.js.map +1 -0
  198. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/index.d.ts +2 -0
  199. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/index.js +3 -0
  200. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/index.js.map +1 -0
  201. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/main.d.ts +1 -0
  202. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/main.js +6 -0
  203. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/main.js.map +1 -0
  204. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/write.d.ts +1 -0
  205. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/write.js +184 -0
  206. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/write.js.map +1 -0
  207. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/index.d.ts +3 -0
  208. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/index.js +4 -0
  209. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/index.js.map +1 -0
  210. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/main.d.ts +1 -0
  211. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/main.js +6 -0
  212. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/main.js.map +1 -0
  213. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/read.d.ts +1 -0
  214. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/read.js +80 -0
  215. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/read.js.map +1 -0
  216. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/write.d.ts +1 -0
  217. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/write.js +139 -0
  218. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/write.js.map +1 -0
  219. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/index.d.ts +2 -0
  220. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/index.js +3 -0
  221. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/index.js.map +1 -0
  222. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/main.d.ts +1 -0
  223. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/main.js +6 -0
  224. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/main.js.map +1 -0
  225. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/write.d.ts +1 -0
  226. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/write.js +118 -0
  227. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/write.js.map +1 -0
  228. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/index.d.ts +1 -1
  229. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/index.js +1 -2
  230. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/index.js.map +1 -1
  231. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/read.js +333 -11
  232. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/read.js.map +1 -1
  233. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/write.js +463 -2
  234. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/write.js.map +1 -1
  235. package/dist/programs/dev-tools/defi-wrapper/write.js +41 -11
  236. package/dist/programs/dev-tools/defi-wrapper/write.js.map +1 -1
  237. package/dist/programs/pdg-helpers.js +55 -19
  238. package/dist/programs/pdg-helpers.js.map +1 -1
  239. package/dist/programs/use-cases/consolidation/write.js +5 -1
  240. package/dist/programs/use-cases/consolidation/write.js.map +1 -1
  241. package/dist/programs/use-cases/deposits/read.js +40 -8
  242. package/dist/programs/use-cases/deposits/read.js.map +1 -1
  243. package/dist/programs/use-cases/deposits/write.js +15 -3
  244. package/dist/programs/use-cases/deposits/write.js.map +1 -1
  245. package/dist/programs/use-cases/metrics/read.js +25 -5
  246. package/dist/programs/use-cases/metrics/read.js.map +1 -1
  247. package/dist/programs/use-cases/report/read.js +25 -5
  248. package/dist/programs/use-cases/report/read.js.map +1 -1
  249. package/dist/programs/use-cases/report/write.js +10 -2
  250. package/dist/programs/use-cases/report/write.js.map +1 -1
  251. package/dist/programs/use-cases/vault-operations/write.js +30 -6
  252. package/dist/programs/use-cases/vault-operations/write.js.map +1 -1
  253. package/dist/providers/index.d.ts +1 -1
  254. package/dist/providers/index.js +1 -1
  255. package/dist/tests/utils/rate-limit.test.d.ts +1 -0
  256. package/dist/tests/utils/rate-limit.test.js +246 -0
  257. package/dist/tests/utils/rate-limit.test.js.map +1 -0
  258. package/dist/types/index.d.ts +2 -2
  259. package/dist/types/index.js +2 -2
  260. package/dist/utils/arguments.d.ts +14 -0
  261. package/dist/utils/arguments.js +28 -0
  262. package/dist/utils/arguments.js.map +1 -1
  263. package/dist/utils/cache.d.ts +6 -4
  264. package/dist/utils/cache.js +14 -11
  265. package/dist/utils/cache.js.map +1 -1
  266. package/dist/utils/charts/blessed/charts-apr.js +5 -1
  267. package/dist/utils/charts/blessed/charts-apr.js.map +1 -1
  268. package/dist/utils/charts/blessed/charts-rewards.js +5 -1
  269. package/dist/utils/charts/blessed/charts-rewards.js.map +1 -1
  270. package/dist/utils/charts/simple/simple-charts.js +5 -1
  271. package/dist/utils/charts/simple/simple-charts.js.map +1 -1
  272. package/dist/utils/commands/report.d.ts +5 -2
  273. package/dist/utils/commands/report.js +21 -7
  274. package/dist/utils/commands/report.js.map +1 -1
  275. package/dist/utils/consts.d.ts +1 -0
  276. package/dist/utils/consts.js +5 -0
  277. package/dist/utils/consts.js.map +1 -1
  278. package/dist/utils/fetchCL.d.ts +10 -0
  279. package/dist/utils/fetchCL.js +19 -0
  280. package/dist/utils/fetchCL.js.map +1 -1
  281. package/dist/utils/health/health-utils.d.ts +2 -27707
  282. package/dist/utils/health/health-utils.js +26 -8
  283. package/dist/utils/health/health-utils.js.map +1 -1
  284. package/dist/utils/index.d.ts +1 -0
  285. package/dist/utils/index.js +1 -0
  286. package/dist/utils/index.js.map +1 -1
  287. package/dist/utils/prompts/operations.js +1 -3
  288. package/dist/utils/prompts/operations.js.map +1 -1
  289. package/dist/utils/rate-limit.d.ts +10 -0
  290. package/dist/utils/rate-limit.js +30 -0
  291. package/dist/utils/rate-limit.js.map +1 -0
  292. package/dist/utils/read-programs-by-abi.js +22 -4
  293. package/dist/utils/read-programs-by-abi.js.map +1 -1
  294. package/dist/utils/report/statistic-data.js +8 -2
  295. package/dist/utils/report/statistic-data.js.map +1 -1
  296. package/dist/utils/share-rate.js +16 -4
  297. package/dist/utils/share-rate.js.map +1 -1
  298. package/dist/utils/sleep.js.map +1 -1
  299. package/dist/utils/transactions/tx-private-key.d.ts +3 -5
  300. package/dist/utils/transactions/tx-private-key.js +13 -10
  301. package/dist/utils/transactions/tx-private-key.js.map +1 -1
  302. package/dist/utils/transactions/types.d.ts +7 -0
  303. package/dist/utils/transactions/utils.js +2 -2
  304. package/dist/utils/transactions/utils.js.map +1 -1
  305. package/dist/version/index.js +1 -1
  306. package/package.json +3 -12
  307. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/create-pool.js +0 -180
  308. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/create-pool.js.map +0 -1
  309. /package/dist/programs/defi-wrapper/use-cases/{wrapper-operations/create-pool.d.ts → distributor/read.d.ts} +0 -0
@@ -1,6 +1,13 @@
1
- import { Option } from 'commander';
2
- import { logInfo, getCommandsJson } from '../../../../utils/index.js';
1
+ import { Option, program } from 'commander';
2
+ import { logInfo, getCommandsJson, stringToAddress, stringToBigInt, callReadMethod, confirmOperation, submitReport, callWriteMethodWithReceipt, logError, logTable, callWriteMethodWithReceiptBatchCalls, stringArrayToAddressArray, callReadMethodSilent, stringToNumber, } from '../../../../utils/index.js';
3
3
  import { wrapperOperations } from './main.js';
4
+ import { getWithdrawalQueueContract } from '../../../../contracts/defi-wrapper/withdrawal-queue.js';
5
+ import { encodeFunctionData, formatEther, parseEventLogs, zeroAddress, } from 'viem';
6
+ import { getDashboardContract, getLazyOracleContract, getVaultHubContract, } from '../../../../contracts/index.js';
7
+ import { getStvPoolContract } from '../../../../contracts/defi-wrapper/stv-pool.js';
8
+ import { bigIntMin } from '../../../../utils/bigInt.js';
9
+ import { getStvStethPoolContract } from '../../../../contracts/defi-wrapper/stv-steth-pool.js';
10
+ import { areVaultParamsInSync, tryFetchPost } from '../../../../features/index.js';
4
11
  export const wrapperOperationsWrite = wrapperOperations
5
12
  .command('write')
6
13
  .aliases(['w'])
@@ -10,4 +17,458 @@ wrapperOperationsWrite.on('option:-cmd2json', function () {
10
17
  logInfo(getCommandsJson(wrapperOperationsWrite));
11
18
  process.exit();
12
19
  });
20
+ //
21
+ // Finalization Operations
22
+ //
23
+ wrapperOperationsWrite
24
+ .command('set-finalization-gas-cost-coverage')
25
+ .description('set finalization gas cost coverage')
26
+ .argument('<address>', 'withdrawal queue address', stringToAddress)
27
+ .argument('<gasCostCoverage>', 'gas cost coverage per withdrawal finalization in wei (max 0.0005 ETH)', stringToBigInt)
28
+ .action(async (address, gasCostCoverage) => {
29
+ const withdrawalQueue = await getWithdrawalQueueContract(address);
30
+ const currentGasCostCoverage = await callReadMethod({
31
+ contract: withdrawalQueue,
32
+ methodName: 'getFinalizationGasCostCoverage',
33
+ payload: [],
34
+ });
35
+ const maxGasCostCoverage = await callReadMethod({
36
+ contract: withdrawalQueue,
37
+ methodName: 'MAX_GAS_COST_COVERAGE',
38
+ payload: [],
39
+ });
40
+ if (gasCostCoverage > maxGasCostCoverage) {
41
+ logError(`Provided gas cost coverage of ${formatEther(gasCostCoverage)} ETH (${gasCostCoverage} wei) exceeds the maximum allowed value of ${formatEther(maxGasCostCoverage)} ETH (${maxGasCostCoverage} wei) for the withdrawal queue at address: ${address}. Please provide a valid value.`);
42
+ return;
43
+ }
44
+ if (currentGasCostCoverage === gasCostCoverage) {
45
+ logError(`Finalization gas cost coverage is already set to ${formatEther(gasCostCoverage)} ETH (${gasCostCoverage} wei) for the withdrawal queue at address: ${address}. No changes needed.`);
46
+ return;
47
+ }
48
+ const confirmationMessage = `Are you sure you want to update finalization gas cost coverage from ${formatEther(currentGasCostCoverage)} ETH (${currentGasCostCoverage} wei) to ${formatEther(gasCostCoverage)} ETH (${gasCostCoverage} wei) for the withdrawal queue at address: ${address}?`;
49
+ const confirm = await confirmOperation(confirmationMessage);
50
+ if (!confirm)
51
+ return;
52
+ await callWriteMethodWithReceipt({
53
+ contract: withdrawalQueue,
54
+ methodName: 'setFinalizationGasCostCoverage',
55
+ payload: [gasCostCoverage],
56
+ });
57
+ });
58
+ wrapperOperationsWrite
59
+ .command('finalize-withdrawals')
60
+ .description('finalize pending withdrawals in the wrapper')
61
+ .argument('<poolAddress>', 'pool address', stringToAddress)
62
+ .option('-mxr, --max-requests <maxRequestCount>', 'maximum number of requests to finalize, default: 1000', stringToBigInt, 1000n)
63
+ .option('-gcr, --gas-coverage-recipient <gasCoverageRecipient>', 'address to receive gas coverage(if any), defaults to tx sender', stringToAddress, zeroAddress)
64
+ .action(async (address, { maxRequestCount = 1000n, gasCoverageRecipient = zeroAddress, }) => {
65
+ const pool = await getStvPoolContract(address);
66
+ const withdrawalQueueAddress = await callReadMethod({
67
+ contract: pool,
68
+ methodName: 'WITHDRAWAL_QUEUE',
69
+ payload: [],
70
+ });
71
+ const withdrawalQueue = await getWithdrawalQueueContract(withdrawalQueueAddress);
72
+ logInfo(`Checking for pending withdrawals to finalize in WithdrawalQueue at address: ${address}...`);
73
+ const requestsToFinalize = await callReadMethod({
74
+ contract: withdrawalQueue,
75
+ methodName: 'unfinalizedRequestsNumber',
76
+ payload: [],
77
+ withSpinner: true,
78
+ });
79
+ if (requestsToFinalize === 0n) {
80
+ logInfo('No pending withdrawals to finalize.');
81
+ return;
82
+ }
83
+ logInfo(`Found ${requestsToFinalize} pending withdrawals to finalize. Proceeding with finalization...`);
84
+ if (requestsToFinalize > maxRequestCount) {
85
+ logInfo(`Only ${maxRequestCount}/${requestsToFinalize} requests will be finalized in this operation.`);
86
+ }
87
+ const dashboardAddress = await callReadMethod({
88
+ contract: withdrawalQueue,
89
+ methodName: 'DASHBOARD',
90
+ payload: [],
91
+ withSpinner: true,
92
+ });
93
+ const dashboard = await getDashboardContract(dashboardAddress);
94
+ const vaultHub = await getVaultHubContract();
95
+ const lazyOracle = await getLazyOracleContract();
96
+ const vaultAddress = await callReadMethod({
97
+ contract: dashboard,
98
+ methodName: 'stakingVault',
99
+ payload: [],
100
+ withSpinner: true,
101
+ });
102
+ const isReportFreshnessCheck = await callReadMethod({
103
+ contract: vaultHub,
104
+ methodName: 'isReportFresh',
105
+ payload: [[vaultAddress]],
106
+ withSpinner: true,
107
+ });
108
+ const { timestamp: latestVaultAppliedReportTimestamp } = await callReadMethod({
109
+ contract: vaultHub,
110
+ methodName: 'latestReport',
111
+ payload: [[vaultAddress]],
112
+ withSpinner: true,
113
+ });
114
+ const latestReportTimestamp = await callReadMethod({
115
+ contract: lazyOracle,
116
+ methodName: 'latestReportTimestamp',
117
+ payload: [],
118
+ withSpinner: true,
119
+ });
120
+ const isReportFresh = isReportFreshnessCheck &&
121
+ // this accounts for freshness > oracle reporting interval
122
+ latestReportTimestamp <= latestVaultAppliedReportTimestamp;
123
+ if (!isReportFresh) {
124
+ logInfo('The latest report for the staking vault is not fresh. The last report should be submitted before finalizing withdrawals.');
125
+ const { isFresh } = await submitReport({
126
+ vault: vaultAddress,
127
+ populateTx: program.opts().populateTx,
128
+ });
129
+ if (!isFresh)
130
+ // submitReport prompts user for report submission confirmation
131
+ // we can exit if user denies report submission
132
+ return;
133
+ }
134
+ const requestToBeFinalized = bigIntMin(requestsToFinalize, maxRequestCount);
135
+ const confirm = await confirmOperation(`Are you sure you want to finalize up to ${requestToBeFinalized}/${requestsToFinalize} withdrawal requests for the WithdrawalQueue at address: ${address}?`);
136
+ if (!confirm)
137
+ return;
138
+ await callWriteMethodWithReceipt({
139
+ contract: withdrawalQueue,
140
+ methodName: 'finalize',
141
+ payload: [maxRequestCount, gasCoverageRecipient],
142
+ });
143
+ });
144
+ ///
145
+ /// Allow List Operations
146
+ ///
147
+ wrapperOperationsWrite
148
+ .command('sync-vault-params')
149
+ .description('sync vault params between vault & pool')
150
+ .argument('<poolAddress>', 'pool address', stringToAddress)
151
+ .action(async (address) => {
152
+ const isInSync = await areVaultParamsInSync(address);
153
+ if (isInSync) {
154
+ logError('⚠️⚠️⚠️ Vault parameters are already in sync. No changes needed. ⚠️⚠️⚠️');
155
+ return;
156
+ }
157
+ const pool = await getStvStethPoolContract(address);
158
+ const { receipt } = await callWriteMethodWithReceipt({
159
+ contract: pool,
160
+ methodName: 'syncVaultParameters',
161
+ payload: [],
162
+ });
163
+ if (receipt?.logs) {
164
+ const logs = parseEventLogs({
165
+ abi: pool.abi,
166
+ logs: receipt.logs,
167
+ strict: true,
168
+ });
169
+ const hadEffect = logs.find((log) => log.eventName === 'VaultParametersUpdated');
170
+ if (!hadEffect) {
171
+ logInfo('⚠️⚠️⚠️ Vault parameters are already in sync. No changes were made during your tx. ⚠️⚠️⚠️');
172
+ return;
173
+ }
174
+ }
175
+ });
176
+ wrapperOperationsWrite
177
+ .command('allow-list-add')
178
+ .description('add addresses(divided by spaces) to allow list ')
179
+ .argument('<poolAddress>', 'pool address', stringToAddress)
180
+ .argument('<addressToAdd...>', '1 or more addresses to add to allow list divided by spaces', stringArrayToAddressArray, [])
181
+ .action(async (address, addressToAdd) => {
182
+ const pool = await getStvPoolContract(address);
183
+ const isAllowListEnabled = await callReadMethod({
184
+ contract: pool,
185
+ methodName: 'ALLOW_LIST_ENABLED',
186
+ payload: [],
187
+ });
188
+ if (!isAllowListEnabled) {
189
+ logError('Pool is not configured for using allow list.');
190
+ return;
191
+ }
192
+ logTable({
193
+ data: addressToAdd.map((addr) => [addr]),
194
+ params: { head: ['Addresses to be added to allow list:'] },
195
+ });
196
+ const confirm = await confirmOperation(`Are you sure you want to add ${addressToAdd.length} addresses to the allow list of the pool at address: ${address}?`);
197
+ if (!confirm)
198
+ return;
199
+ await callWriteMethodWithReceiptBatchCalls({
200
+ calls: addressToAdd.map((addr) => ({
201
+ to: pool.address,
202
+ data: encodeFunctionData({
203
+ abi: pool.abi,
204
+ functionName: 'addToAllowList',
205
+ args: [addr],
206
+ }),
207
+ value: 0n,
208
+ })),
209
+ });
210
+ });
211
+ wrapperOperationsWrite
212
+ .command('allow-list-remove')
213
+ .description('remove addresses(divided by spaces) from allow list ')
214
+ .argument('<poolAddress>', 'pool address', stringToAddress)
215
+ .argument('<addressesToRemove...>', '1 or more addresses to remove divided by spaces', stringArrayToAddressArray, [])
216
+ .action(async (address, addressesToRemove) => {
217
+ const pool = await getStvPoolContract(address);
218
+ const isAllowListEnabled = await callReadMethod({
219
+ contract: pool,
220
+ methodName: 'ALLOW_LIST_ENABLED',
221
+ payload: [],
222
+ });
223
+ if (!isAllowListEnabled) {
224
+ logError('Pool is not configured for using allow list.');
225
+ return;
226
+ }
227
+ logTable({
228
+ data: addressesToRemove.map((addr) => [addr]),
229
+ params: { head: ['Addresses to be removed from allow list:'] },
230
+ });
231
+ const confirm = await confirmOperation(`Are you sure you want to remove ${addressesToRemove.length} addresses from the allow list of the pool at address: ${address}?`);
232
+ if (!confirm)
233
+ return;
234
+ await callWriteMethodWithReceiptBatchCalls({
235
+ calls: addressesToRemove.map((addr) => ({
236
+ to: pool.address,
237
+ data: encodeFunctionData({
238
+ abi: pool.abi,
239
+ functionName: 'removeFromAllowList',
240
+ args: [addr],
241
+ }),
242
+ value: 0n,
243
+ })),
244
+ });
245
+ });
246
+ wrapperOperationsWrite
247
+ .command('auto-report')
248
+ .description(`watches for new reports, automatically submits report and finalizes withdrawals. Will run indefinitely.
249
+ For finalization make sure private key has FINALIZE_ROLE in the withdrawal queue.
250
+ ⚠️⚠️⚠️ For production use consider running with a process manager ⚠️⚠️⚠️`)
251
+ .argument('<poolAddress>', 'pool address', stringToAddress)
252
+ .option('--skip-report', 'skip report submission step', false)
253
+ .option('--skip-finalize', 'skip finalize withdrawals step', false)
254
+ .option('--callback-url <callbackUrl>', 'callback url to notify when report is submitted and withdrawals are finalized via POST request')
255
+ .option('--gas-coverage-recipient <gasCoverageRecipient>', 'address to receive gas coverage(if any), defaults to tx sender', stringToAddress, zeroAddress)
256
+ .option('--max-requests <maxRequestCount>', 'maximum number of requests to finalize', stringToBigInt, 1000n)
257
+ .option('--polling-interval <pollingInterval>', 'polling interval in ms for checking new reports, default: 60_000 (1 minute)', stringToNumber, 60_000)
258
+ .action(async (address, { skipReport, skipFinalize, maxRequests, gasCoverageRecipient, pollingInterval, callbackUrl, }) => {
259
+ if (skipReport && !skipFinalize) {
260
+ logError('Cannot skip report submission when finalizing withdrawals. Report must be fresh before finalization.');
261
+ return;
262
+ }
263
+ if (pollingInterval >= 5 * 60_000) {
264
+ logInfo('Polling interval is greater than or equal to 5 minutes. Due to limits in eth_newFilter filters may be dropped by the node. Consider using shorter polling interval.');
265
+ }
266
+ const pool = await getStvPoolContract(address);
267
+ const vaultAddress = await callReadMethod({
268
+ contract: pool,
269
+ methodName: 'VAULT',
270
+ payload: [],
271
+ });
272
+ const withdrawalQueueAddress = await callReadMethod({
273
+ contract: pool,
274
+ methodName: 'WITHDRAWAL_QUEUE',
275
+ payload: [],
276
+ });
277
+ const lazyOracle = await getLazyOracleContract();
278
+ const vaultHub = await getVaultHubContract();
279
+ const withdrawalQueue = await getWithdrawalQueueContract(withdrawalQueueAddress);
280
+ const FINALIZER_ROLE = await callReadMethod({
281
+ contract: withdrawalQueue,
282
+ methodName: 'FINALIZE_ROLE',
283
+ payload: [],
284
+ });
285
+ const finalizers = await callReadMethod({
286
+ contract: withdrawalQueue,
287
+ methodName: 'getRoleMembers',
288
+ payload: [[FINALIZER_ROLE]],
289
+ });
290
+ const finalizer = finalizers[0];
291
+ if (!finalizer) {
292
+ logError('No FINALIZE_ROLE holders found for the withdrawal queue. Cannot proceed with auto-reporting.');
293
+ return;
294
+ }
295
+ const onNewReport = async (events) => {
296
+ const event = events[0];
297
+ if (event) {
298
+ logTable({
299
+ params: { head: ['New report is available'] },
300
+ data: [
301
+ ['Data CID', event.args.cid],
302
+ ['Merkle Root', event.args.root],
303
+ ['Ref slot', event.args.refSlot],
304
+ ['Timestamp', event.args.timestamp],
305
+ ['Block Number', event.blockNumber],
306
+ ['Transaction Hash', event.transactionHash],
307
+ ],
308
+ });
309
+ }
310
+ const isConnected = await callReadMethod({
311
+ contract: vaultHub,
312
+ methodName: 'isVaultConnected',
313
+ payload: [[vaultAddress]],
314
+ });
315
+ const isReportFresh = await callReadMethodSilent({
316
+ contract: vaultHub,
317
+ methodName: 'isReportFresh',
318
+ payload: [[vaultAddress]],
319
+ });
320
+ if (!isConnected) {
321
+ logError(`Vault ${vaultAddress} is not connected to VaultHub. Cannot proceed with report submission.`);
322
+ }
323
+ if (isReportFresh) {
324
+ logInfo('Report is already fresh. No submission needed.');
325
+ }
326
+ let reportTxHash = null;
327
+ if (!skipReport && isConnected && !isReportFresh) {
328
+ const { isFresh, tx } = await submitReport({
329
+ vault: vaultAddress,
330
+ skipConfirmation: true,
331
+ });
332
+ reportTxHash = tx ?? null;
333
+ logInfo(`Report submission completed. isFresh: ${isFresh}`);
334
+ }
335
+ else {
336
+ logInfo('Report submission step skipped.');
337
+ }
338
+ let canFinalize = false;
339
+ let requestsFinalized = 0n;
340
+ let assetsFinalized = 0n;
341
+ let finalizationTxHash = null;
342
+ const unfinalizedRequestsNumber = await callReadMethod({
343
+ contract: withdrawalQueue,
344
+ methodName: 'unfinalizedRequestsNumber',
345
+ payload: [],
346
+ });
347
+ const unfinalizedAssets = await callReadMethod({
348
+ contract: withdrawalQueue,
349
+ methodName: 'unfinalizedAssets',
350
+ payload: [],
351
+ });
352
+ const lastFinalizedRequestId = await callReadMethod({
353
+ contract: withdrawalQueue,
354
+ methodName: 'getLastFinalizedRequestId',
355
+ payload: [],
356
+ });
357
+ if (unfinalizedRequestsNumber > 0n) {
358
+ try {
359
+ const { result: requestFinalized } = await withdrawalQueue.simulate.finalize([maxRequests, zeroAddress], {
360
+ account: finalizers[0],
361
+ });
362
+ logInfo(`Finalization Simulation:
363
+ requests finalized ${requestFinalized}/${unfinalizedRequestsNumber}`);
364
+ // this is a sanity check, should not happen in contract
365
+ if (requestFinalized <= 0n)
366
+ throw new Error('No requests finalized in simulation');
367
+ canFinalize = true;
368
+ }
369
+ catch (error) {
370
+ canFinalize = false;
371
+ logInfo('Finalization simulation failed', error);
372
+ }
373
+ }
374
+ else {
375
+ logInfo('No pending withdrawals to finalize.');
376
+ }
377
+ if (!skipFinalize) {
378
+ if (canFinalize) {
379
+ logInfo('Proceeding to finalize withdrawals...');
380
+ const txResult = await callWriteMethodWithReceipt({
381
+ contract: withdrawalQueue,
382
+ methodName: 'finalize',
383
+ payload: [maxRequests, gasCoverageRecipient],
384
+ });
385
+ finalizationTxHash = txResult.tx ?? null;
386
+ requestsFinalized = await callReadMethod({
387
+ contract: withdrawalQueue,
388
+ methodName: 'getLastFinalizedRequestId',
389
+ payload: [],
390
+ });
391
+ assetsFinalized = await callReadMethod({
392
+ contract: withdrawalQueue,
393
+ methodName: 'unfinalizedAssets',
394
+ payload: [],
395
+ });
396
+ assetsFinalized = unfinalizedAssets - assetsFinalized;
397
+ requestsFinalized -= lastFinalizedRequestId;
398
+ }
399
+ else {
400
+ logInfo('Finalization step skipped due to lack of pending withdrawals or simulation failure.');
401
+ }
402
+ }
403
+ else {
404
+ logInfo('Finalization step skipped.');
405
+ }
406
+ logTable({
407
+ data: [
408
+ ['Pool Address', address],
409
+ ['Vault Address', vaultAddress],
410
+ ['Is Connected', isConnected],
411
+ ['Was Report Fresh', isReportFresh],
412
+ ['Report Submitted', !skipReport && isConnected && !isReportFresh],
413
+ ['Report Tx Hash', reportTxHash ?? 'N/A'],
414
+ ['Can Finalize', canFinalize],
415
+ ['Finalization Requested', !skipFinalize && canFinalize],
416
+ ['Total Unfinalized Requests', unfinalizedRequestsNumber],
417
+ [
418
+ 'Total Unfinalized Assets',
419
+ formatEther(unfinalizedAssets) + ' ETH',
420
+ ],
421
+ ['Finalization Tx Hash', finalizationTxHash ?? 'N/A'],
422
+ ['Requests Finalized', requestsFinalized],
423
+ ['Assets Finalized', formatEther(assetsFinalized) + ' ETH'],
424
+ ],
425
+ });
426
+ if (callbackUrl) {
427
+ const { error } = await tryFetchPost(callbackUrl, {
428
+ poolAddress: address,
429
+ vaultAddress: vaultAddress,
430
+ isConnected: isConnected,
431
+ wasReportFresh: isReportFresh,
432
+ reportSubmitted: !skipReport && isConnected && !isReportFresh,
433
+ reportTxHash,
434
+ canFinalize,
435
+ finalizationRequested: !skipFinalize && canFinalize,
436
+ finalizationTxHash,
437
+ totalUnfinalizedRequests: unfinalizedRequestsNumber,
438
+ totalUnfinalizedAssets: unfinalizedAssets,
439
+ requestsFinalized,
440
+ assetsFinalized,
441
+ });
442
+ if (error) {
443
+ logError(`Failed to send callback to ${callbackUrl}: ${error}`);
444
+ }
445
+ }
446
+ };
447
+ // dry run to submit report & finalize withdrawals immediately if possible
448
+ logInfo('Performing initial dry-run in case report is already available...');
449
+ await onNewReport([]);
450
+ logInfo('Starting watching for reports...');
451
+ lazyOracle.watchEvent.VaultsReportDataUpdated({}, {
452
+ onLogs: () => void onNewReport,
453
+ batch: false,
454
+ poll: true,
455
+ strict: true,
456
+ pollingInterval,
457
+ onError: (error) => {
458
+ logError(`Error while watching VaultsReportDataUpdated events: ${error}`);
459
+ if (callbackUrl) {
460
+ void tryFetchPost(callbackUrl, {
461
+ error: `Error while watching VaultsReportDataUpdated events: ${error}`,
462
+ }).then(({ error }) => {
463
+ if (error) {
464
+ logError(`Failed to send error callback to ${callbackUrl}: ${error}`);
465
+ }
466
+ });
467
+ }
468
+ process.exit(1);
469
+ },
470
+ });
471
+ // empty await to keep the process alive
472
+ await new Promise(() => { });
473
+ });
13
474
  //# sourceMappingURL=write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../../../programs/defi-wrapper/use-cases/wrapper-operations/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB;KACpD,OAAO,CAAC,OAAO,CAAC;KAChB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;KACd,WAAW,CAAC,mCAAmC,CAAC,CAAC;AAEpD,sBAAsB,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1D,sBAAsB,CAAC,EAAE,CAAC,kBAAkB,EAAE;IAC5C,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../../../programs/defi-wrapper/use-cases/wrapper-operations/write.ts"],"names":[],"mappings":"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"}
@@ -15,18 +15,38 @@ defiWrapperTools
15
15
  const { storageLocation, value } = options;
16
16
  const publicClient = await getTestClient();
17
17
  const contract = await getStvStethPoolContract(address);
18
- const forcedRebalanceThresholdBP = await callReadMethodSilent(contract, 'forcedRebalanceThresholdBP');
18
+ const poolForcedRebalanceThresholdBP = await callReadMethodSilent({
19
+ contract,
20
+ methodName: 'poolForcedRebalanceThresholdBP',
21
+ payload: [],
22
+ });
19
23
  logInfo('\n=== Wrapper Configuration ===');
20
- logInfo(`Force rebalance threshold: ${forcedRebalanceThresholdBP} BP (${Number(forcedRebalanceThresholdBP) / 100}%)`);
24
+ logInfo(`Pool forced rebalance threshold: ${poolForcedRebalanceThresholdBP} BP (${Number(poolForcedRebalanceThresholdBP) / 100}%)`);
21
25
  const [vault, vaultHub] = await Promise.all([
22
- callReadMethodSilent(contract, 'VAULT'),
23
- callReadMethodSilent(contract, 'VAULT_HUB'),
26
+ callReadMethodSilent({
27
+ contract,
28
+ methodName: 'VAULT',
29
+ payload: [],
30
+ }),
31
+ callReadMethodSilent({
32
+ contract,
33
+ methodName: 'VAULT_HUB',
34
+ payload: [],
35
+ }),
24
36
  ]);
25
37
  const vaultSlot = keccak256(encodeAbiParameters([{ type: 'address' }, { type: 'uint256' }], [vault, stringToBigInt(storageLocation)]));
26
38
  logInfo('\n=== User Position BEFORE ===');
27
39
  const [totalAssetsBefore, userForceRebalanceBefore] = await Promise.all([
28
- callReadMethodSilent(contract, 'totalAssets'),
29
- callReadMethodSilent(contract, 'previewForceRebalance', [user]),
40
+ callReadMethodSilent({
41
+ contract,
42
+ methodName: 'totalAssets',
43
+ payload: [],
44
+ }),
45
+ callReadMethodSilent({
46
+ contract,
47
+ methodName: 'previewForceRebalance',
48
+ payload: [[user]],
49
+ }),
30
50
  ]);
31
51
  const [_stethSharesBefore, _stvAmountBefore, isUndercollateralizedBefore,] = userForceRebalanceBefore;
32
52
  logInfo(`Total wrapper assets: ${formatEther(totalAssetsBefore)}`);
@@ -58,11 +78,21 @@ defiWrapperTools
58
78
  });
59
79
  logInfo('\n=== User Position AFTER ===');
60
80
  const [totalAssetsAfter, userForceRebalanceAfter, previewRedeemResult] = await Promise.all([
61
- callReadMethodSilent(contract, 'totalAssets'),
62
- callReadMethodSilent(contract, 'previewForceRebalance', [user]),
63
- callReadMethodSilent(contract, 'previewRedeem', [
64
- parseUnits('1', 27),
65
- ]),
81
+ callReadMethodSilent({
82
+ contract,
83
+ methodName: 'totalAssets',
84
+ payload: [],
85
+ }),
86
+ callReadMethodSilent({
87
+ contract,
88
+ methodName: 'previewForceRebalance',
89
+ payload: [[user]],
90
+ }),
91
+ callReadMethodSilent({
92
+ contract,
93
+ methodName: 'previewRedeem',
94
+ payload: [[parseUnits('1', 27)]],
95
+ }),
66
96
  ]);
67
97
  const [stethShares, stvAmount, isUndercollateralizedAfter] = userForceRebalanceAfter;
68
98
  logInfo(`Total wrapper assets: ${formatEther(totalAssetsAfter)} (was ${formatEther(totalAssetsBefore)})`);
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../../programs/dev-tools/defi-wrapper/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../../programs/dev-tools/defi-wrapper/write.ts"],"names":[],"mappings":"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"}