@lombard.finance/sdk 4.7.2 → 5.0.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 (292) hide show
  1. package/CHANGELOG.md +83 -2
  2. package/README.md +22 -21
  3. package/dist/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.d.ts.map +1 -1
  4. package/dist/api-functions/getDepositBtcAddress/getDepositBtcAddress.d.ts.map +1 -1
  5. package/dist/api.js +5 -5
  6. package/dist/bridge.js +1 -1
  7. package/dist/btc.cjs +1 -1
  8. package/dist/btc.js +2 -2
  9. package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts.map +1 -1
  10. package/dist/chains/btc/actions/deposit/config/evm.d.ts.map +1 -1
  11. package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -1
  12. package/dist/chains/btc/actions/depositAndDeploy/config/index.d.ts.map +1 -1
  13. package/dist/chains/btc/actions/depositAndDeploy/types.d.ts.map +1 -1
  14. package/dist/chains/btc/actions/stake/BtcStake.d.ts.map +1 -1
  15. package/dist/chains/btc/actions/stake/config/evm.d.ts.map +1 -1
  16. package/dist/chains/btc/actions/stake/config/solana.d.ts.map +1 -1
  17. package/dist/chains/btc/actions/stakeAndDeploy/config/index.d.ts.map +1 -1
  18. package/dist/chains/btc/actions/stakeAndDeploy/types.d.ts.map +1 -1
  19. package/dist/chains/btc/client/getCurrentBlockHeight.d.ts.map +1 -1
  20. package/dist/chains/evm/actions/deploy/EvmDeploy.d.ts +19 -4
  21. package/dist/chains/evm/actions/deploy/EvmDeploy.d.ts.map +1 -1
  22. package/dist/chains/evm/actions/deploy/index.d.ts.map +1 -1
  23. package/dist/chains/evm/actions/deploy/types.d.ts.map +1 -1
  24. package/dist/chains/evm/actions/deposit/config/evm.d.ts.map +1 -1
  25. package/dist/chains/evm/actions/deposit/index.d.ts.map +1 -1
  26. package/dist/chains/evm/actions/redeem/EvmRedeem.d.ts.map +1 -1
  27. package/dist/chains/evm/actions/redeem/config/evm.d.ts.map +1 -1
  28. package/dist/chains/evm/actions/redeem/index.d.ts.map +1 -1
  29. package/dist/chains/evm/actions/redeem/types.d.ts.map +1 -1
  30. package/dist/chains/evm/actions/stake/config/index.d.ts.map +1 -1
  31. package/dist/chains/evm/actions/stake/config/types.d.ts.map +1 -1
  32. package/dist/chains/evm/actions/stake/index.d.ts.map +1 -1
  33. package/dist/chains/evm/actions/stake/types.d.ts.map +1 -1
  34. package/dist/chains/evm/actions/unstake/EvmUnstake.d.ts.map +1 -1
  35. package/dist/chains/evm/actions/unstake/index.d.ts.map +1 -1
  36. package/dist/chains/evm/actions/unstake/types.d.ts.map +1 -1
  37. package/dist/chains/evm/actions/withdraw/EvmCancelWithdraw.d.ts.map +1 -1
  38. package/dist/chains/evm/actions/withdraw/EvmWithdraw.d.ts +6 -0
  39. package/dist/chains/evm/actions/withdraw/EvmWithdraw.d.ts.map +1 -1
  40. package/dist/chains/evm/actions/withdraw/config/types.d.ts.map +1 -1
  41. package/dist/chains/evm/actions/withdraw/types.d.ts.map +1 -1
  42. package/dist/chains/solana/SolanaActions.d.ts.map +1 -1
  43. package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -1
  44. package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -1
  45. package/dist/chains/solana/actions/stake/SolanaStake.d.ts.map +1 -1
  46. package/dist/chains/solana/actions/stake/types.d.ts.map +1 -1
  47. package/dist/chains/solana/actions/unstake/SolanaUnstake.d.ts.map +1 -1
  48. package/dist/chains/solana/actions/unstake/factory.d.ts.map +1 -1
  49. package/dist/chains/solana/actions/unstake/types.d.ts.map +1 -1
  50. package/dist/chains/solana/utils.d.ts.map +1 -1
  51. package/dist/chains/starknet/actions/unstake/config/index.d.ts.map +1 -1
  52. package/dist/chains/starknet/actions/unstake/factory.d.ts.map +1 -1
  53. package/dist/chains/starknet/actions/unstake/types.d.ts.map +1 -1
  54. package/dist/chains/sui/actions/unstake/config/index.d.ts.map +1 -1
  55. package/dist/chains/sui/actions/unstake/factory.d.ts.map +1 -1
  56. package/dist/chains/sui/actions/unstake/types.d.ts.map +1 -1
  57. package/dist/chunks/{BtcActions-Ds6YrAKZ.js → BtcActions-CFGiDxtv.js} +20 -22
  58. package/dist/chunks/BtcActions-CFGiDxtv.js.map +1 -0
  59. package/dist/chunks/BtcActions-DJJmmyzi.cjs +2 -0
  60. package/dist/chunks/BtcActions-DJJmmyzi.cjs.map +1 -0
  61. package/dist/chunks/EvmActions-CUKBeiUw.js +1508 -0
  62. package/dist/chunks/EvmActions-CUKBeiUw.js.map +1 -0
  63. package/dist/chunks/EvmActions-CxipDb7X.cjs +7 -0
  64. package/dist/chunks/EvmActions-CxipDb7X.cjs.map +1 -0
  65. package/dist/chunks/{ReferralsClient-DT3qvRXP.js → ReferralsClient-BRa26dYS.js} +4 -4
  66. package/dist/chunks/ReferralsClient-BRa26dYS.js.map +1 -0
  67. package/dist/chunks/ReferralsClient-o-3AUm7s.cjs.map +1 -1
  68. package/dist/chunks/{approveLBTC-DZQpza0E.js → approveLBTC-DnCt6ZZF.js} +3 -3
  69. package/dist/chunks/{approveLBTC-DZQpza0E.js.map → approveLBTC-DnCt6ZZF.js.map} +1 -1
  70. package/dist/chunks/{blockchain-identifier-C2GkWxmw.js → blockchain-identifier-BkASqCgZ.js} +2 -2
  71. package/dist/chunks/blockchain-identifier-BkASqCgZ.js.map +1 -0
  72. package/dist/chunks/blockchain-identifier-DWfC3Es2.cjs.map +1 -1
  73. package/dist/chunks/{bridge-62Nuzkt6.js → bridge-DV4fOcHe.js} +4 -4
  74. package/dist/chunks/bridge-DV4fOcHe.js.map +1 -0
  75. package/dist/chunks/bridge-DZp5x4Yb.cjs.map +1 -1
  76. package/dist/chunks/{config-8IroHCdP.cjs → config-BfX8lrdO.cjs} +2 -2
  77. package/dist/chunks/config-BfX8lrdO.cjs.map +1 -0
  78. package/dist/chunks/{config-ej-tsP3s.js → config-wnjPtnjd.js} +46 -53
  79. package/dist/chunks/config-wnjPtnjd.js.map +1 -0
  80. package/dist/chunks/{defi-registry-QwFZR4oK.cjs → defi-registry-CyMKVT3z.cjs} +2 -2
  81. package/dist/chunks/defi-registry-CyMKVT3z.cjs.map +1 -0
  82. package/dist/chunks/{defi-registry-DLP7nuRn.js → defi-registry-DULXbu3D.js} +9 -9
  83. package/dist/chunks/defi-registry-DULXbu3D.js.map +1 -0
  84. package/dist/chunks/depositStatus-B9P1YXEU.cjs.map +1 -1
  85. package/dist/chunks/{depositStatus-DMDUj1Zi.js → depositStatus-Cgd_GDUt.js} +5 -5
  86. package/dist/chunks/depositStatus-Cgd_GDUt.js.map +1 -0
  87. package/dist/chunks/events-B9b3YdgM.cjs +2 -0
  88. package/dist/chunks/events-B9b3YdgM.cjs.map +1 -0
  89. package/dist/chunks/{events-DmrU6jV2.js → events-DU2wYlt_.js} +189 -191
  90. package/dist/chunks/events-DU2wYlt_.js.map +1 -0
  91. package/dist/chunks/{get-exchange-ratio-D_5R035-.js → get-exchange-ratio-BvPUfcIQ.js} +2 -2
  92. package/dist/chunks/{get-exchange-ratio-D_5R035-.js.map → get-exchange-ratio-BvPUfcIQ.js.map} +1 -1
  93. package/dist/chunks/get-exchange-ratio-DGztGO7i.cjs.map +1 -1
  94. package/dist/chunks/get-positions-summary-CC7BDtlY.cjs.map +1 -1
  95. package/dist/chunks/{get-positions-summary-CSTG4Ni0.js → get-positions-summary-DxAgmaMl.js} +2 -2
  96. package/dist/chunks/get-positions-summary-DxAgmaMl.js.map +1 -0
  97. package/dist/chunks/get-vault-tvl-B6rSrGi_.js +203 -0
  98. package/dist/chunks/get-vault-tvl-B6rSrGi_.js.map +1 -0
  99. package/dist/chunks/get-vault-tvl-dvEPPxvT.cjs +2 -0
  100. package/dist/chunks/get-vault-tvl-dvEPPxvT.cjs.map +1 -0
  101. package/dist/chunks/get-vault-withdrawals-Cgx7VsM1.cjs +2 -0
  102. package/dist/chunks/get-vault-withdrawals-Cgx7VsM1.cjs.map +1 -0
  103. package/dist/chunks/get-vault-withdrawals-W5CgNbqE.js +154 -0
  104. package/dist/chunks/get-vault-withdrawals-W5CgNbqE.js.map +1 -0
  105. package/dist/chunks/{getUserStakeAndBakeSignature-Bqp_BTOt.js → getUserStakeAndBakeSignature-BRhWFYyY.js} +4 -4
  106. package/dist/chunks/getUserStakeAndBakeSignature-BRhWFYyY.js.map +1 -0
  107. package/dist/chunks/getUserStakeAndBakeSignature-VlC_GHmz.cjs.map +1 -1
  108. package/dist/chunks/hex-BiCL4CPh.js +11 -0
  109. package/dist/chunks/hex-BiCL4CPh.js.map +1 -0
  110. package/dist/chunks/hex-DeJtv8eu.cjs +2 -0
  111. package/dist/chunks/hex-DeJtv8eu.cjs.map +1 -0
  112. package/dist/chunks/{lbtc-addresses-BzalXq8D.js → lbtc-addresses-ClXt-tuB.js} +2 -2
  113. package/dist/chunks/{lbtc-addresses-BzalXq8D.js.map → lbtc-addresses-ClXt-tuB.js.map} +1 -1
  114. package/dist/chunks/parameters-CcpaKGU2.js +24 -0
  115. package/dist/chunks/parameters-CcpaKGU2.js.map +1 -0
  116. package/dist/chunks/parameters-YNWmaAho.cjs +2 -0
  117. package/dist/chunks/parameters-YNWmaAho.cjs.map +1 -0
  118. package/dist/chunks/{statusConstants-C4MCQQX7.cjs → statusConstants-B-7VEYgO.cjs} +2 -2
  119. package/dist/chunks/statusConstants-B-7VEYgO.cjs.map +1 -0
  120. package/dist/chunks/{statusConstants-DAn1Atsp.js → statusConstants-C3JHNUTC.js} +15 -17
  121. package/dist/chunks/statusConstants-C3JHNUTC.js.map +1 -0
  122. package/dist/chunks/{storeNetworkFeeSignature-B4xx2WLI.js → storeNetworkFeeSignature-CY_Z-Wtn.js} +2 -2
  123. package/dist/chunks/{storeNetworkFeeSignature-B4xx2WLI.js.map → storeNetworkFeeSignature-CY_Z-Wtn.js.map} +1 -1
  124. package/dist/chunks/token-addresses-C7H9E4qz.cjs.map +1 -1
  125. package/dist/chunks/{token-addresses-J-EuQVP6.js → token-addresses-DVnRPyu4.js} +4 -2
  126. package/dist/chunks/token-addresses-DVnRPyu4.js.map +1 -0
  127. package/dist/chunks/{tokens-CwbSzyK9.js → tokens-Btl3GXbc.js} +3 -3
  128. package/dist/chunks/tokens-Btl3GXbc.js.map +1 -0
  129. package/dist/chunks/tokens-DEYY7W7O.cjs.map +1 -1
  130. package/dist/chunks/unwrapBtceToLbtcv-C4OxoVVU.js +321 -0
  131. package/dist/chunks/unwrapBtceToLbtcv-C4OxoVVU.js.map +1 -0
  132. package/dist/chunks/unwrapBtceToLbtcv-Dg-yUGpg.cjs +2 -0
  133. package/dist/chunks/unwrapBtceToLbtcv-Dg-yUGpg.cjs.map +1 -0
  134. package/dist/chunks/withdrawEarn-CTtVruit.cjs +7 -0
  135. package/dist/chunks/withdrawEarn-CTtVruit.cjs.map +1 -0
  136. package/dist/chunks/{unstakeLBTC-CEqb4N-_.js → withdrawEarn-QFaMhs0t.js} +965 -612
  137. package/dist/chunks/withdrawEarn-QFaMhs0t.js.map +1 -0
  138. package/dist/client/ApiNamespace.d.ts +3 -6
  139. package/dist/client/ApiNamespace.d.ts.map +1 -1
  140. package/dist/common/blockchain-identifier.d.ts.map +1 -1
  141. package/dist/common/chains.d.ts.map +1 -1
  142. package/dist/common/feature-config.d.ts.map +1 -1
  143. package/dist/contract-functions/cancelEarnWithdrawal/cancelEarnWithdrawal.d.ts +19 -0
  144. package/dist/contract-functions/cancelEarnWithdrawal/cancelEarnWithdrawal.d.ts.map +1 -0
  145. package/dist/contract-functions/cancelEarnWithdrawal/index.d.ts +2 -0
  146. package/dist/contract-functions/cancelEarnWithdrawal/index.d.ts.map +1 -0
  147. package/dist/contract-functions/depositEarn/depositEarn.d.ts +36 -0
  148. package/dist/contract-functions/depositEarn/depositEarn.d.ts.map +1 -0
  149. package/dist/contract-functions/depositEarn/index.d.ts +2 -0
  150. package/dist/contract-functions/depositEarn/index.d.ts.map +1 -0
  151. package/dist/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.d.ts.map +1 -1
  152. package/dist/contract-functions/getEarnPosition/getEarnPosition.d.ts +17 -16
  153. package/dist/contract-functions/getEarnPosition/getEarnPosition.d.ts.map +1 -1
  154. package/dist/contract-functions/getShareValue/getShareValue.d.ts +5 -15
  155. package/dist/contract-functions/getShareValue/getShareValue.d.ts.map +1 -1
  156. package/dist/contract-functions/getSharesByAddress/getSharesByAddress.d.ts +5 -20
  157. package/dist/contract-functions/getSharesByAddress/getSharesByAddress.d.ts.map +1 -1
  158. package/dist/contract-functions/index.d.ts +4 -2
  159. package/dist/contract-functions/index.d.ts.map +1 -1
  160. package/dist/contract-functions/previewWithdrawEarn/index.d.ts +2 -0
  161. package/dist/contract-functions/previewWithdrawEarn/index.d.ts.map +1 -0
  162. package/dist/contract-functions/previewWithdrawEarn/previewWithdrawEarn.d.ts +38 -0
  163. package/dist/contract-functions/previewWithdrawEarn/previewWithdrawEarn.d.ts.map +1 -0
  164. package/dist/contract-functions/signStakeAndBake/validation.d.ts.map +1 -1
  165. package/dist/contract-functions/withdrawEarn/index.d.ts +2 -0
  166. package/dist/contract-functions/withdrawEarn/index.d.ts.map +1 -0
  167. package/dist/contract-functions/withdrawEarn/withdrawEarn.d.ts +46 -0
  168. package/dist/contract-functions/withdrawEarn/withdrawEarn.d.ts.map +1 -0
  169. package/dist/contract-functions/wrapToBtce/wrapToBtce.d.ts.map +1 -1
  170. package/dist/contracts.cjs +1 -1
  171. package/dist/contracts.js +32 -30
  172. package/dist/core/assets/catalog.d.ts.map +1 -1
  173. package/dist/core/assets/utils.d.ts.map +1 -1
  174. package/dist/core/chains/utils.d.ts.map +1 -1
  175. package/dist/core.cjs +1 -1
  176. package/dist/core.js +19 -19
  177. package/dist/defi/defi-registry.d.ts.map +1 -1
  178. package/dist/defi/index.d.ts +1 -1
  179. package/dist/defi/index.d.ts.map +1 -1
  180. package/dist/defi.cjs +1 -1
  181. package/dist/defi.js +4 -4
  182. package/dist/entries/api.d.ts +14 -14
  183. package/dist/entries/api.d.ts.map +1 -1
  184. package/dist/entries/contracts.d.ts +4 -2
  185. package/dist/entries/contracts.d.ts.map +1 -1
  186. package/dist/entries/defi.d.ts +1 -1
  187. package/dist/entries/defi.d.ts.map +1 -1
  188. package/dist/entries/evm.d.ts +7 -7
  189. package/dist/entries/evm.d.ts.map +1 -1
  190. package/dist/entries/utils.d.ts +9 -9
  191. package/dist/entries/utils.d.ts.map +1 -1
  192. package/dist/entries/vaults.d.ts +1 -1
  193. package/dist/entries/vaults.d.ts.map +1 -1
  194. package/dist/evm.cjs +1 -1
  195. package/dist/evm.js +4 -4
  196. package/dist/index.cjs +1 -1
  197. package/dist/index.d.ts +67 -65
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +171 -174
  200. package/dist/index.js.map +1 -1
  201. package/dist/metrics.js +1 -1
  202. package/dist/services/EvmService.d.ts.map +1 -1
  203. package/dist/shared/actions/BaseAction.d.ts.map +1 -1
  204. package/dist/shared/deposits/depositStatus.d.ts.map +1 -1
  205. package/dist/shared/validation/index.d.ts.map +1 -1
  206. package/dist/tokens/tokens.d.ts.map +1 -1
  207. package/dist/utils/chain.d.ts.map +1 -1
  208. package/dist/utils/consoleLogger.d.ts.map +1 -1
  209. package/dist/utils.cjs +1 -1
  210. package/dist/utils.js +16 -16
  211. package/dist/vaults/index.d.ts +8 -10
  212. package/dist/vaults/index.d.ts.map +1 -1
  213. package/dist/vaults/lib/config.d.ts +148 -150
  214. package/dist/vaults/lib/config.d.ts.map +1 -1
  215. package/dist/vaults/lib/metrics/get-vault-apy.d.ts +2 -4
  216. package/dist/vaults/lib/metrics/get-vault-apy.d.ts.map +1 -1
  217. package/dist/vaults/lib/metrics/get-vault-points.d.ts +2 -5
  218. package/dist/vaults/lib/metrics/get-vault-points.d.ts.map +1 -1
  219. package/dist/vaults/lib/metrics/get-vault-tvl.d.ts +5 -8
  220. package/dist/vaults/lib/metrics/get-vault-tvl.d.ts.map +1 -1
  221. package/dist/vaults/lib/ops/deposit.d.ts +5 -14
  222. package/dist/vaults/lib/ops/deposit.d.ts.map +1 -1
  223. package/dist/vaults/lib/ops/get-vault-deposits.d.ts +9 -13
  224. package/dist/vaults/lib/ops/get-vault-deposits.d.ts.map +1 -1
  225. package/dist/vaults/lib/ops/get-vault-minimum-deposit.d.ts +4 -7
  226. package/dist/vaults/lib/ops/get-vault-minimum-deposit.d.ts.map +1 -1
  227. package/dist/vaults/lib/ops/get-vault-withdrawals.d.ts +14 -18
  228. package/dist/vaults/lib/ops/get-vault-withdrawals.d.ts.map +1 -1
  229. package/dist/vaults/lib/ops/preview-vault-deposit.d.ts +4 -8
  230. package/dist/vaults/lib/ops/preview-vault-deposit.d.ts.map +1 -1
  231. package/dist/vaults/lib/ops/withdraw.d.ts +11 -27
  232. package/dist/vaults/lib/ops/withdraw.d.ts.map +1 -1
  233. package/dist/vaults.cjs +1 -1
  234. package/dist/vaults.cjs.map +1 -1
  235. package/dist/vaults.js +91 -103
  236. package/dist/vaults.js.map +1 -1
  237. package/package.json +1 -1
  238. package/dist/chunks/BtcActions-Ds6YrAKZ.js.map +0 -1
  239. package/dist/chunks/BtcActions-DywyNv3O.cjs +0 -2
  240. package/dist/chunks/BtcActions-DywyNv3O.cjs.map +0 -1
  241. package/dist/chunks/EvmActions-BDk1vvRY.js +0 -1341
  242. package/dist/chunks/EvmActions-BDk1vvRY.js.map +0 -1
  243. package/dist/chunks/EvmActions-BzlEACJk.cjs +0 -2
  244. package/dist/chunks/EvmActions-BzlEACJk.cjs.map +0 -1
  245. package/dist/chunks/ReferralsClient-DT3qvRXP.js.map +0 -1
  246. package/dist/chunks/blockchain-identifier-C2GkWxmw.js.map +0 -1
  247. package/dist/chunks/bridge-62Nuzkt6.js.map +0 -1
  248. package/dist/chunks/config-8IroHCdP.cjs.map +0 -1
  249. package/dist/chunks/config-ej-tsP3s.js.map +0 -1
  250. package/dist/chunks/defi-registry-DLP7nuRn.js.map +0 -1
  251. package/dist/chunks/defi-registry-QwFZR4oK.cjs.map +0 -1
  252. package/dist/chunks/depositStatus-DMDUj1Zi.js.map +0 -1
  253. package/dist/chunks/events-DADaEsss.cjs +0 -2
  254. package/dist/chunks/events-DADaEsss.cjs.map +0 -1
  255. package/dist/chunks/events-DmrU6jV2.js.map +0 -1
  256. package/dist/chunks/get-positions-summary-CSTG4Ni0.js.map +0 -1
  257. package/dist/chunks/get-vault-tvl-D6XcYucx.cjs +0 -2
  258. package/dist/chunks/get-vault-tvl-D6XcYucx.cjs.map +0 -1
  259. package/dist/chunks/get-vault-tvl-DwdB1FA1.js +0 -226
  260. package/dist/chunks/get-vault-tvl-DwdB1FA1.js.map +0 -1
  261. package/dist/chunks/get-vault-withdrawals-BLwcsT0Q.js +0 -161
  262. package/dist/chunks/get-vault-withdrawals-BLwcsT0Q.js.map +0 -1
  263. package/dist/chunks/get-vault-withdrawals-CuSwGy0M.cjs +0 -2
  264. package/dist/chunks/get-vault-withdrawals-CuSwGy0M.cjs.map +0 -1
  265. package/dist/chunks/getUserStakeAndBakeSignature-Bqp_BTOt.js.map +0 -1
  266. package/dist/chunks/parameters-C_16L5ft.js +0 -11
  267. package/dist/chunks/parameters-C_16L5ft.js.map +0 -1
  268. package/dist/chunks/parameters-DK9cYCAH.cjs +0 -2
  269. package/dist/chunks/parameters-DK9cYCAH.cjs.map +0 -1
  270. package/dist/chunks/statusConstants-C4MCQQX7.cjs.map +0 -1
  271. package/dist/chunks/statusConstants-DAn1Atsp.js.map +0 -1
  272. package/dist/chunks/time-I-BeyUkG.cjs +0 -2
  273. package/dist/chunks/time-I-BeyUkG.cjs.map +0 -1
  274. package/dist/chunks/time-Sa5gggPG.js +0 -24
  275. package/dist/chunks/time-Sa5gggPG.js.map +0 -1
  276. package/dist/chunks/token-addresses-J-EuQVP6.js.map +0 -1
  277. package/dist/chunks/tokens-CwbSzyK9.js.map +0 -1
  278. package/dist/chunks/unstakeLBTC-CEqb4N-_.js.map +0 -1
  279. package/dist/chunks/unstakeLBTC-DMI79XHm.cjs +0 -2
  280. package/dist/chunks/unstakeLBTC-DMI79XHm.cjs.map +0 -1
  281. package/dist/chunks/withdraw-CYUXQ9HY.js +0 -209
  282. package/dist/chunks/withdraw-CYUXQ9HY.js.map +0 -1
  283. package/dist/chunks/withdraw-D-FlPc10.cjs +0 -12
  284. package/dist/chunks/withdraw-D-FlPc10.cjs.map +0 -1
  285. package/dist/chunks/wrapToBtce-D-TaAhqb.cjs +0 -2
  286. package/dist/chunks/wrapToBtce-D-TaAhqb.cjs.map +0 -1
  287. package/dist/chunks/wrapToBtce-yEQfbDAw.js +0 -298
  288. package/dist/chunks/wrapToBtce-yEQfbDAw.js.map +0 -1
  289. package/dist/contract-functions/getShareValue/index.d.ts +0 -2
  290. package/dist/contract-functions/getShareValue/index.d.ts.map +0 -1
  291. package/dist/contract-functions/getSharesByAddress/index.d.ts +0 -2
  292. package/dist/contract-functions/getSharesByAddress/index.d.ts.map +0 -1
@@ -0,0 +1,321 @@
1
+ import { determineEnv as M, makePublicClient as b, getTokenContractInfo as P, getErrorMessage as B, toBaseDenomination as L } from "./tokens-Btl3GXbc.js";
2
+ import { Token as A, makeWalletClient as O, AddressKind as j, CHAIN_ID_TO_VIEM_CHAIN_MAP as U, isKatanaChain as q } from "./token-addresses-DVnRPyu4.js";
3
+ import { fromSatoshi as p } from "./satoshi-CSoJBXc6.js";
4
+ import { p as D } from "./index-CfcQ_g3t.js";
5
+ import { zeroAddress as F, parseGwei as H, isAddress as S, getContract as g, erc20Abi as G } from "viem";
6
+ import { estimateGasFees as z, ASSET_ROUTER_ABI as K, cancelWithdrawInternal as Q } from "./withdrawEarn-QFaMhs0t.js";
7
+ import { ensureHex as N } from "./hex-BiCL4CPh.js";
8
+ import { isBtceVaultChain as R, BTCE_VAULT as c, isEarnChain as T, EARN_VAULT as v, BTCE_VAULT_DECIMALS as W } from "./config-wnjPtnjd.js";
9
+ import y from "bignumber.js";
10
+ import { toBigInt as k } from "./numbers-CclN2Ohk.js";
11
+ async function ut({
12
+ chainId: a,
13
+ rpcUrl: n,
14
+ env: t
15
+ }) {
16
+ const e = t || M(a), r = b({ chainId: a, rpcUrl: n, env: e }), o = await P(
17
+ A.LBTC,
18
+ a,
19
+ e
20
+ ), i = await r.readContract({
21
+ abi: o.abi,
22
+ address: o.address,
23
+ functionName: "totalSupply"
24
+ });
25
+ return p(String(i));
26
+ }
27
+ async function dt({
28
+ data: a,
29
+ proofSignature: n,
30
+ account: t,
31
+ chainId: e,
32
+ provider: r,
33
+ rpcUrl: o,
34
+ env: i = D
35
+ }) {
36
+ const s = b({ chainId: e, rpcUrl: o, env: i }), d = O({ chainId: e, provider: r }), l = await P(
37
+ A.BTCb,
38
+ e,
39
+ i,
40
+ j.Adapter
41
+ ), u = await s.readContract({
42
+ address: l.address,
43
+ abi: l.abi,
44
+ functionName: "getAssetRouter"
45
+ });
46
+ if (!u || u === F)
47
+ throw new Error("AssetRouter address not found in token adapter");
48
+ const m = {
49
+ address: u,
50
+ account: t,
51
+ chain: U[e],
52
+ abi: K,
53
+ functionName: "mint",
54
+ args: [N(a), N(n)]
55
+ }, w = q(e) ? await z(s, m, H("1")) : {}, { request: f } = await s.simulateContract({
56
+ ...m,
57
+ ...w
58
+ });
59
+ return await d.writeContract(f);
60
+ }
61
+ async function wt({
62
+ chainId: a,
63
+ rpcUrl: n,
64
+ address: t
65
+ }) {
66
+ if (!S(t))
67
+ throw new Error(`Invalid address: ${t}`);
68
+ if (!R(a))
69
+ throw new Error(
70
+ `BTCe is not supported on chain ${a}. Supported chains: ${c.chains.join(", ")}.`
71
+ );
72
+ try {
73
+ const e = b({ chainId: a, rpcUrl: n }), o = await g({
74
+ abi: c.abi,
75
+ address: c.contracts[a],
76
+ client: e
77
+ }).read.balanceOf([
78
+ t
79
+ ]);
80
+ return p(String(o));
81
+ } catch (e) {
82
+ throw new Error(B(e));
83
+ }
84
+ }
85
+ async function Z({
86
+ chainId: a,
87
+ rpcUrl: n
88
+ }) {
89
+ const t = v;
90
+ if (!T(a))
91
+ throw new Error(
92
+ `Unsupported chain id: ${a}. Please switch to one of the supported chains: ${t.chains.join(", ")}`
93
+ );
94
+ try {
95
+ const e = b({ chainId: a, rpcUrl: n }), o = await g({
96
+ abi: t.accountantContract.abi,
97
+ address: t.accountantContract.address,
98
+ client: e
99
+ }).read.getRate();
100
+ return p(String(o));
101
+ } catch (e) {
102
+ const r = B(e);
103
+ throw new Error(r);
104
+ }
105
+ }
106
+ async function J({
107
+ chainId: a,
108
+ rpcUrl: n,
109
+ address: t
110
+ }) {
111
+ const e = v;
112
+ if (!T(a))
113
+ throw new Error(
114
+ `Unsupported chain id: ${a}. Please switch to one of the supported chains: ${e.chains.join(", ")}`
115
+ );
116
+ try {
117
+ const r = b({ chainId: a, rpcUrl: n }), i = await g({
118
+ abi: e.lensContract.abi,
119
+ address: e.lensContract.address,
120
+ client: r
121
+ }).read.balanceOf([
122
+ t,
123
+ e.vaultContract.address
124
+ ]), s = p(String(i)), d = await Z({
125
+ chainId: a,
126
+ rpcUrl: n
127
+ });
128
+ return {
129
+ balance: s,
130
+ exchangeRate: d,
131
+ balanceLbtc: s.multipliedBy(d)
132
+ };
133
+ } catch (r) {
134
+ const o = B(r);
135
+ throw new Error(o);
136
+ }
137
+ }
138
+ const _ = new y(0);
139
+ async function mt({
140
+ chainId: a,
141
+ rpcUrl: n,
142
+ address: t
143
+ }) {
144
+ if (!S(t))
145
+ throw new Error(`Invalid address: ${t}`);
146
+ const e = R(a), [r, o] = await Promise.all([
147
+ J({ chainId: a, rpcUrl: n, address: t }),
148
+ e ? X({ chainId: a, rpcUrl: n, address: t }) : Promise.resolve(0n)
149
+ ]);
150
+ let i = _, s = _;
151
+ if (e && o > 0n) {
152
+ i = p(String(o));
153
+ const w = await Y({
154
+ chainId: a,
155
+ rpcUrl: n,
156
+ shares: o
157
+ });
158
+ s = p(String(w));
159
+ }
160
+ const d = r.balance, l = r.exchangeRate, u = d.plus(s), m = u.multipliedBy(l);
161
+ return {
162
+ underlyingShares: d,
163
+ btceShares: i,
164
+ btceSharesInUnderlying: s,
165
+ totalShares: u,
166
+ exchangeRate: l,
167
+ position: m
168
+ };
169
+ }
170
+ async function X({
171
+ chainId: a,
172
+ rpcUrl: n,
173
+ address: t
174
+ }) {
175
+ const e = b({ chainId: a, rpcUrl: n });
176
+ return await g({
177
+ abi: c.abi,
178
+ address: c.contracts[a],
179
+ client: e
180
+ }).read.balanceOf([t]);
181
+ }
182
+ async function Y({
183
+ chainId: a,
184
+ rpcUrl: n,
185
+ shares: t
186
+ }) {
187
+ const e = b({ chainId: a, rpcUrl: n });
188
+ return await g({
189
+ abi: c.abi,
190
+ address: c.contracts[a],
191
+ client: e
192
+ }).read.convertToAssets([t]);
193
+ }
194
+ async function pt({
195
+ withdrawalAsset: a = A.LBTC,
196
+ account: n,
197
+ chainId: t,
198
+ provider: e,
199
+ rpcUrl: r,
200
+ env: o
201
+ }) {
202
+ return Q({
203
+ token: a,
204
+ account: n,
205
+ chainId: t,
206
+ provider: e,
207
+ rpcUrl: r,
208
+ env: o
209
+ });
210
+ }
211
+ async function bt({
212
+ amount: a,
213
+ account: n,
214
+ chainId: t,
215
+ rpcUrl: e
216
+ }) {
217
+ if (!T(t))
218
+ throw new Error(
219
+ `Unsupported chain ${t}. Earn withdrawals are supported on: ${v.chains.join(", ")}.`
220
+ );
221
+ const r = y(a);
222
+ if (!r.isGreaterThan(0))
223
+ throw new Error(
224
+ `Withdraw amount must be greater than zero. Received: ${r.toFixed()}.`
225
+ );
226
+ const o = v, i = o.vaultContract.address, s = o.lensContract.address, d = o.withdrawQueueContracts[t].address, l = k(L(r, o.decimals)), u = b({ chainId: t, rpcUrl: e }), m = R(t), [w, f, C] = await Promise.all([
227
+ u.readContract({
228
+ address: s,
229
+ abi: o.lensContract.abi,
230
+ functionName: "balanceOf",
231
+ args: [n, i]
232
+ }),
233
+ m ? u.readContract({
234
+ address: c.contracts[t],
235
+ abi: c.abi,
236
+ functionName: "balanceOf",
237
+ args: [n]
238
+ }) : Promise.resolve(0n),
239
+ u.readContract({
240
+ address: i,
241
+ abi: G,
242
+ functionName: "allowance",
243
+ args: [n, d]
244
+ })
245
+ ]), V = l <= w + f, x = l > w ? l - w : 0n, E = m && x > 0n ? x : 0n;
246
+ let $ = !0;
247
+ E > 0n && ($ = await u.readContract({
248
+ address: c.contracts[t],
249
+ abi: c.abi,
250
+ functionName: "maxWithdraw",
251
+ args: [n]
252
+ }) >= E);
253
+ const h = [];
254
+ return C < l && h.push("approve"), E > 0n && h.push("unwrap"), h.push("queue"), {
255
+ steps: h,
256
+ expectedPopups: h.length,
257
+ underlyingBalance: p(String(w)),
258
+ btceBalance: p(String(f)),
259
+ unwrapAmount: p(String(E)),
260
+ isCovered: V,
261
+ isUnwrappable: $
262
+ };
263
+ }
264
+ async function ft({
265
+ amount: a,
266
+ receiver: n,
267
+ owner: t,
268
+ account: e,
269
+ chainId: r,
270
+ provider: o,
271
+ rpcUrl: i
272
+ }) {
273
+ if (!R(r))
274
+ throw new Error(
275
+ `BTCe is not supported on chain ${r}. Supported chains: ${c.chains.join(", ")}.`
276
+ );
277
+ if (n !== void 0 && !S(n, { strict: !1 }))
278
+ throw new Error(`Invalid receiver address: ${n}`);
279
+ if (t !== void 0 && !S(t, { strict: !1 }))
280
+ throw new Error(`Invalid owner address: ${t}`);
281
+ const s = y(a);
282
+ if (!s.isGreaterThan(0))
283
+ throw new Error(
284
+ `Unwrap amount must be greater than zero. Received: ${s.toFixed()}.`
285
+ );
286
+ const d = n ?? e, l = t ?? e, u = b({ chainId: r, rpcUrl: i }), m = O({ provider: o, chainId: r }), w = k(L(s, W)), f = await u.readContract({
287
+ abi: c.abi,
288
+ address: c.contracts[r],
289
+ functionName: "maxWithdraw",
290
+ args: [l]
291
+ });
292
+ if (w > f)
293
+ throw new Error(
294
+ `Unwrap amount ${s.toFixed()} exceeds maxWithdraw ${y(
295
+ f.toString()
296
+ ).shiftedBy(-W).toFixed()} for owner ${l}.`
297
+ );
298
+ try {
299
+ const { request: C } = await u.simulateContract({
300
+ account: e,
301
+ chain: U[r],
302
+ abi: c.abi,
303
+ address: c.contracts[r],
304
+ functionName: "withdraw",
305
+ args: [w, d, l]
306
+ });
307
+ return await m.writeContract(C);
308
+ } catch (C) {
309
+ throw new Error(B(C));
310
+ }
311
+ }
312
+ export {
313
+ pt as cancelEarnWithdrawal,
314
+ dt as claimUnstakeRedeem,
315
+ wt as getBtceShares,
316
+ mt as getEarnPosition,
317
+ ut as getLBTCTotalSupply,
318
+ bt as previewWithdrawEarn,
319
+ ft as unwrapBtceToLbtcv
320
+ };
321
+ //# sourceMappingURL=unwrapBtceToLbtcv-C4OxoVVU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwrapBtceToLbtcv-C4OxoVVU.js","sources":["../../src/contract-functions/getLBTCTotalSupply/getLBTCTotalSupply.ts","../../src/contract-functions/claimUnstakeRedeem/claimUnstakeRedeem.ts","../../src/contract-functions/getBtceShares/getBtceShares.ts","../../src/contract-functions/getShareValue/getShareValue.ts","../../src/contract-functions/getSharesByAddress/getSharesByAddress.ts","../../src/contract-functions/getEarnPosition/getEarnPosition.ts","../../src/contract-functions/cancelEarnWithdrawal/cancelEarnWithdrawal.ts","../../src/contract-functions/previewWithdrawEarn/previewWithdrawEarn.ts","../../src/contract-functions/unwrapBtceToLbtcv/unwrapBtceToLbtcv.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { Token } from '../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../tokens/tokens';\nimport { determineEnv } from '../../utils/env';\nimport { fromSatoshi } from '../../utils/satoshi';\n\n/**\n * Get the total supply of LBTC tokens.\n *\n * @param {CommonParameters} parameters - The parameters.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n * @param {Env} parameters.env - The optional environment identifier.\n *\n * @return {Promise<BigNumber>}\n */\nexport async function getLBTCTotalSupply({\n chainId,\n rpcUrl,\n env,\n}: CommonParameters): Promise<BigNumber> {\n const environment = env || determineEnv(chainId);\n const publicClient = makePublicClient({ chainId, rpcUrl, env: environment });\n const lbtcContract = await getTokenContractInfo(\n Token.LBTC,\n chainId,\n environment,\n );\n\n const totalSupplyRaw = await publicClient.readContract({\n abi: lbtcContract.abi,\n address: lbtcContract.address,\n functionName: 'totalSupply',\n });\n\n return fromSatoshi(String(totalSupplyRaw));\n}\n","import { DEFAULT_ENV } from '@lombard.finance/sdk-common';\nimport { Hash, parseGwei, zeroAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { CHAIN_ID_TO_VIEM_CHAIN_MAP, isKatanaChain } from '../../common/chains';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport ASSET_ROUTER_ABI from '../../tokens/abi/ASSET_ROUTER_ABI';\nimport { AddressKind, Token } from '../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../tokens/tokens';\nimport { estimateGasFees } from '../../utils/gas';\nimport { ensureHex } from '../../utils/hex';\n\n/**\n * Parameters for claiming BTC.b from unstake redemptions\n */\nexport interface IClaimUnstakeRedeemParams extends CommonWriteParameters {\n /** Raw payload from the unstake redemption (`Unstake.rawPayload`) */\n data: string;\n\n /** Signature/proof from the unstake redemption (`Unstake.proof`) */\n proofSignature: string;\n}\n\n/**\n * Claims BTC.b tokens from an unstake redemption (LBTC → BTC.b)\n *\n * This function is specifically for claiming native chain redemptions after the 7-day unstaking period.\n * Unlike deposits which use `adapter.mintV1`, unstake redemptions use `assetRouter.mint`.\n *\n * Business Rules:\n * - Only works for native chain redemptions (LBTC → BTC.b)\n * - Requires notarization status = SESSION_APPROVED\n * - Requires session state = COMPLETED\n * - Must be called after 7 days from unstake\n *\n * @param params - Parameters for claiming\n * @returns Transaction hash of the claim operation\n *\n * @throws Error if claiming fails or if action selector doesn't match\n */\nexport async function claimUnstakeRedeem({\n data,\n proofSignature,\n account,\n chainId,\n provider,\n rpcUrl,\n env = DEFAULT_ENV,\n}: IClaimUnstakeRedeemParams): Promise<Hash> {\n const publicClient = makePublicClient({ chainId, rpcUrl, env });\n const walletClient = makeWalletClient({ chainId, provider });\n\n // Get AssetRouter address from BTCb token adapter\n const btcbTokenContract = await getTokenContractInfo(\n Token.BTCb,\n chainId,\n env,\n AddressKind.Adapter,\n );\n\n // Read AssetRouter address from token adapter\n const assetRouterAddress = await publicClient.readContract({\n address: btcbTokenContract.address,\n abi: btcbTokenContract.abi,\n functionName: 'getAssetRouter',\n });\n\n if (!assetRouterAddress || assetRouterAddress === zeroAddress) {\n throw new Error('AssetRouter address not found in token adapter');\n }\n\n // Call AssetRouter.mint function\n const callData = {\n address: assetRouterAddress,\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n abi: ASSET_ROUTER_ABI,\n functionName: 'mint',\n args: [ensureHex(data), ensureHex(proofSignature)],\n } as const;\n\n const gasEstimationData = isKatanaChain(chainId)\n ? await estimateGasFees(publicClient, callData, parseGwei('1'))\n : {};\n\n const { request } = await publicClient.simulateContract({\n ...callData,\n ...gasEstimationData,\n });\n\n const txHash = await walletClient.writeContract(request);\n\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, getContract, isAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport { BTCE_VAULT, isBtceVaultChain } from '../../vaults/lib/config';\n\nexport interface IGetBtceSharesParameters extends CommonParameters {\n /**\n * The address of the BTCe holder.\n */\n address: string;\n}\n\n/**\n * Gets the amount of BTCe shares owned by the provided address on the\n * specified chain.\n *\n * BTCe is an ERC4626 wrapper around the Veda vault's LBTCv share token. Use\n * {@link getEarnPosition} when you want the user's full Bitcoin Earn position\n * (LBTCv + BTCe valued in LBTC) in a single call.\n *\n * @param {IGetBtceSharesParameters} parameters - The parameters.\n * @param {string} parameters.address - The address of the BTCe holder.\n * @param {ChainId} parameters.chainId - The chain id (must be a BTCe-supported chain).\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @return {Promise<BigNumber>} BTCe balance as an 8-decimal BigNumber.\n */\nexport async function getBtceShares({\n chainId,\n rpcUrl,\n address,\n}: IGetBtceSharesParameters): Promise<BigNumber> {\n if (!isAddress(address)) {\n throw new Error(`Invalid address: ${address}`);\n }\n\n if (!isBtceVaultChain(chainId)) {\n throw new Error(\n `BTCe is not supported on chain ${chainId}. Supported chains: ${BTCE_VAULT.chains.join(', ')}.`,\n );\n }\n\n try {\n const client = makePublicClient({ chainId, rpcUrl });\n\n const btceContract = getContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n client,\n });\n\n const balanceRaw = (await btceContract.read.balanceOf([\n address as Address,\n ])) as bigint;\n\n return fromSatoshi(String(balanceRaw));\n } catch (error) {\n throw new Error(getErrorMessage(error));\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { getContract } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport { EARN_VAULT, isEarnChain } from '../../vaults/lib/config';\n\nexport type IGetShareValueParameters = CommonParameters;\n\n/**\n * @internal Internal helper used by `getEarnPosition` and `getSharesByAddressInternal`.\n * The public `getShareValue` function was removed in 5.0.0; the exchange rate\n * is included in the response from `getEarnPosition`.\n *\n * @returns {Promise<BigNumber>}\n */\nexport async function getShareValueInternal({\n chainId,\n rpcUrl,\n}: IGetShareValueParameters): Promise<BigNumber> {\n const vault = EARN_VAULT;\n if (!isEarnChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n try {\n const client = makePublicClient({ chainId, rpcUrl });\n\n const accountantContract = getContract({\n abi: vault.accountantContract.abi,\n address: vault.accountantContract.address,\n client,\n });\n\n const exchangeRate = await accountantContract.read.getRate();\n return fromSatoshi(String(exchangeRate));\n } catch (err) {\n const errorMessage = getErrorMessage(err);\n throw new Error(errorMessage);\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { getContract } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport { EARN_VAULT, isEarnChain } from '../../vaults/lib/config';\nimport { getShareValueInternal } from '../getShareValue/getShareValue';\n\nexport interface IGetSharesByAddressParameters extends CommonParameters {\n /** The address of the share holder. */\n address: string;\n}\n\ninterface IGetSharesByAddressResponse {\n /** The amount of share owned. */\n balance: BigNumber;\n /** The value of a single share unit */\n exchangeRate: BigNumber;\n /** The balance represented in BTC. */\n balanceLbtc: BigNumber;\n}\n\n/**\n * @internal Internal helper used by `getEarnPosition` and other internal\n * vault-reading paths. The public `getSharesByAddress` function was removed\n * in 5.0.0; consumers use `getEarnPosition` instead.\n *\n * @return {Promise<IGetSharesByAddressResponse>}\n */\nexport async function getSharesByAddressInternal({\n chainId,\n rpcUrl,\n address,\n}: IGetSharesByAddressParameters): Promise<IGetSharesByAddressResponse> {\n const vault = EARN_VAULT;\n if (!isEarnChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n try {\n const client = makePublicClient({ chainId, rpcUrl });\n\n const lensContract = getContract({\n abi: vault.lensContract.abi,\n address: vault.lensContract.address,\n client,\n });\n\n const balanceValue = await lensContract.read.balanceOf([\n address,\n vault.vaultContract.address,\n ]);\n\n const balance = fromSatoshi(String(balanceValue));\n\n const exchangeRate = await getShareValueInternal({\n chainId,\n rpcUrl,\n });\n\n return {\n balance,\n exchangeRate,\n balanceLbtc: balance.multipliedBy(exchangeRate),\n };\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n throw new Error(errorMessage);\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, getContract, isAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport {\n BTCE_VAULT,\n BtceVaultChain,\n isBtceVaultChain,\n} from '../../vaults/lib/config';\nimport { getSharesByAddressInternal } from '../getSharesByAddress/getSharesByAddress';\n\nexport interface IGetEarnPositionParameters extends CommonParameters {\n /**\n * The address of the position holder.\n */\n address: string;\n}\n\nexport interface IGetEarnPositionResponse {\n /** Direct underlying-share balance held at the address. */\n underlyingShares: BigNumber;\n /** Raw BTCe wrapper shares held at the address. */\n btceShares: BigNumber;\n /** BTCe shares converted to underlying-share equivalent via the wrapper's convertToAssets. */\n btceSharesInUnderlying: BigNumber;\n /** underlyingShares + btceSharesInUnderlying (both in underlying-share units). */\n totalShares: BigNumber;\n /** Current underlying-share value, in LBTC, from the Veda accountant. */\n exchangeRate: BigNumber;\n /** totalShares * exchangeRate, expressed in LBTC. */\n position: BigNumber;\n}\n\nconst ZERO = new BigNumber(0);\n\n/**\n * Gets the user's full Bitcoin Earn position (direct underlying shares + BTCe)\n * on a single chain, valued in LBTC.\n *\n * BTCe is an ERC4626 wrapper around the Veda vault's underlying share token.\n * The function reads both balances, converts BTCe shares to underlying-share\n * equivalent via the wrapper's `convertToAssets`, sums the two values in\n * underlying-share units, and applies the Veda accountant's share value to\n * express the total in LBTC.\n *\n * Conversion through `convertToAssets` is mandatory rather than naive 1:1\n * summation: the wrapper is a 1:1 pass-through today, but ERC4626 vaults can\n * accrue fees or rebases that move the share-to-asset ratio over time.\n *\n * On chains where BTCe is not deployed (e.g. Corn) the BTCe leg is skipped\n * and the result reports zero BTCe shares with a position equal to the\n * underlying-share leg alone.\n *\n * Errors from either leg propagate to the caller, since silently returning\n * zero would understate the user's balance and is unsafe for an SDK consumed\n * by partner integrators quoting balances to end users.\n *\n * @param {IGetEarnPositionParameters} parameters - The parameters.\n * @param {string} parameters.address - The address of the position holder.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @return {Promise<IGetEarnPositionResponse>}\n */\nexport async function getEarnPosition({\n chainId,\n rpcUrl,\n address,\n}: IGetEarnPositionParameters): Promise<IGetEarnPositionResponse> {\n if (!isAddress(address)) {\n throw new Error(`Invalid address: ${address}`);\n }\n\n const btceSupported = isBtceVaultChain(chainId);\n\n const [sharesResult, btceBalanceRaw] = await Promise.all([\n getSharesByAddressInternal({ chainId, rpcUrl, address }),\n btceSupported\n ? readBtceBalance({ chainId, rpcUrl, address })\n : Promise.resolve(0n),\n ]);\n\n let btceShares = ZERO;\n let btceSharesInUnderlying = ZERO;\n\n if (btceSupported && btceBalanceRaw > 0n) {\n btceShares = fromSatoshi(String(btceBalanceRaw));\n const underlyingEquivalentRaw = await readBtceConvertToAssets({\n chainId,\n rpcUrl,\n shares: btceBalanceRaw,\n });\n btceSharesInUnderlying = fromSatoshi(String(underlyingEquivalentRaw));\n }\n\n const underlyingShares = sharesResult.balance;\n const exchangeRate = sharesResult.exchangeRate;\n const totalShares = underlyingShares.plus(btceSharesInUnderlying);\n const position = totalShares.multipliedBy(exchangeRate);\n\n return {\n underlyingShares,\n btceShares,\n btceSharesInUnderlying,\n totalShares,\n exchangeRate,\n position,\n };\n}\n\nasync function readBtceBalance({\n chainId,\n rpcUrl,\n address,\n}: {\n chainId: BtceVaultChain;\n rpcUrl?: string;\n address: Address;\n}): Promise<bigint> {\n const client = makePublicClient({ chainId, rpcUrl });\n const btceContract = getContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n client,\n });\n return (await btceContract.read.balanceOf([address])) as bigint;\n}\n\nasync function readBtceConvertToAssets({\n chainId,\n rpcUrl,\n shares,\n}: {\n chainId: BtceVaultChain;\n rpcUrl?: string;\n shares: bigint;\n}): Promise<bigint> {\n const client = makePublicClient({ chainId, rpcUrl });\n const btceContract = getContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n client,\n });\n return (await btceContract.read.convertToAssets([shares])) as bigint;\n}\n","import { Hash } from 'viem';\n\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { Token } from '../../tokens/token-addresses';\nimport { cancelWithdrawInternal } from '../../vaults/lib/ops/withdraw';\n\nexport type CancelEarnWithdrawalParameters = {\n /** The withdrawal asset originally queued. Defaults to Token.LBTC. */\n withdrawalAsset?: Token;\n} & CommonWriteParameters;\n\n/**\n * Cancels a pending Earn withdrawal request filed via `withdrawEarn` (or the\n * legacy `queueWithdraw`).\n *\n * Atomic-request cancellation operates on the withdraw queue contract and is\n * indexed per (user, vault, withdrawalAsset) tuple, so the asset must match\n * what was originally queued. Defaults to Token.LBTC.\n *\n * @returns {Promise<Hash>} The cancel transaction hash.\n */\nexport async function cancelEarnWithdrawal({\n withdrawalAsset = Token.LBTC,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: CancelEarnWithdrawalParameters): Promise<Hash> {\n return cancelWithdrawInternal({\n token: withdrawalAsset,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n });\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, erc20Abi } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { toBaseDenomination } from '../../tokens/tokens';\nimport toBigInt from '../../utils/numbers';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport {\n BTCE_VAULT,\n EARN_VAULT,\n isBtceVaultChain,\n isEarnChain,\n} from '../../vaults/lib/config';\n\nexport type PreviewWithdrawEarnParameters = {\n amount: BigNumber.Value;\n account: Address;\n} & CommonParameters;\n\nexport interface PreviewWithdrawEarnResult {\n /** The steps the orchestrator will execute, in order. */\n steps: Array<'approve' | 'unwrap' | 'queue'>;\n /** Number of wallet popups the user will see. */\n expectedPopups: number;\n /** Underlying-share balance the user holds directly. */\n underlyingBalance: BigNumber;\n /** Raw BTCe shares the user holds. */\n btceBalance: BigNumber;\n /** Underlying-share amount that needs to come from BTCe unwrap (zero if not needed). */\n unwrapAmount: BigNumber;\n /** Whether the requested amount is covered by the user's total position. */\n isCovered: boolean;\n /**\n * Whether the BTCe wrapper currently has enough redeemable assets to cover\n * the required unwrap. When false, `withdrawEarn` will throw before sending\n * any transaction. Always true when no unwrap is needed.\n */\n isUnwrappable: boolean;\n}\n\n/**\n * Predicts the steps `withdrawEarn` would execute for a given amount, without\n * sending any transactions. Useful for rendering a step indicator before the\n * user signs.\n *\n * Reads the user's underlying-share balance, BTCe balance, and current\n * allowance to the withdraw queue. Returns the ordered list of steps and the\n * predicted wallet-popup count.\n */\nexport async function previewWithdrawEarn({\n amount: amountRaw,\n account,\n chainId,\n rpcUrl,\n}: PreviewWithdrawEarnParameters): Promise<PreviewWithdrawEarnResult> {\n if (!isEarnChain(chainId)) {\n throw new Error(\n `Unsupported chain ${chainId}. Earn withdrawals are supported on: ${EARN_VAULT.chains.join(', ')}.`,\n );\n }\n\n const amount = BigNumber(amountRaw);\n if (!amount.isGreaterThan(0)) {\n throw new Error(\n `Withdraw amount must be greater than zero. Received: ${amount.toFixed()}.`,\n );\n }\n\n const vault = EARN_VAULT;\n const vaultAddress = vault.vaultContract.address as Address;\n const lensAddress = vault.lensContract.address as Address;\n const queueAddress = vault.withdrawQueueContracts[chainId].address as Address;\n const amountBase = toBigInt(toBaseDenomination(amount, vault.decimals));\n\n const publicClient = makePublicClient({ chainId, rpcUrl });\n const btceSupported = isBtceVaultChain(chainId);\n\n const [underlyingRaw, btceRaw, allowanceRaw] = await Promise.all([\n publicClient.readContract({\n address: lensAddress,\n abi: vault.lensContract.abi,\n functionName: 'balanceOf',\n args: [account, vaultAddress],\n }) as Promise<bigint>,\n btceSupported\n ? (publicClient.readContract({\n address: BTCE_VAULT.contracts[chainId],\n abi: BTCE_VAULT.abi,\n functionName: 'balanceOf',\n args: [account],\n }) as Promise<bigint>)\n : Promise.resolve(0n),\n publicClient.readContract({\n address: vaultAddress,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [account, queueAddress],\n }) as Promise<bigint>,\n ]);\n\n const isCovered = amountBase <= underlyingRaw + btceRaw;\n const lbtcvNeeded =\n amountBase > underlyingRaw ? amountBase - underlyingRaw : 0n;\n const unwrapAmount = btceSupported && lbtcvNeeded > 0n ? lbtcvNeeded : 0n;\n\n // Read maxWithdraw to predict whether withdrawEarn would fail its\n // pre-flight unwrappable check. Only relevant when an unwrap step is\n // needed; otherwise unwrappability does not apply.\n let isUnwrappable = true;\n if (unwrapAmount > 0n) {\n const maxWithdrawRaw = (await publicClient.readContract({\n address:\n BTCE_VAULT.contracts[chainId as (typeof BTCE_VAULT.chains)[number]],\n abi: BTCE_VAULT.abi,\n functionName: 'maxWithdraw',\n args: [account],\n })) as bigint;\n isUnwrappable = maxWithdrawRaw >= unwrapAmount;\n }\n\n const steps: Array<'approve' | 'unwrap' | 'queue'> = [];\n if (allowanceRaw < amountBase) steps.push('approve');\n if (unwrapAmount > 0n) steps.push('unwrap');\n steps.push('queue');\n\n return {\n steps,\n expectedPopups: steps.length,\n underlyingBalance: fromSatoshi(String(underlyingRaw)),\n btceBalance: fromSatoshi(String(btceRaw)),\n unwrapAmount: fromSatoshi(String(unwrapAmount)),\n isCovered,\n isUnwrappable,\n };\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, Hash, isAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { CHAIN_ID_TO_VIEM_CHAIN_MAP } from '../../common/chains';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { toBaseDenomination } from '../../tokens/tokens';\nimport { getErrorMessage } from '../../utils/err';\nimport toBigInt from '../../utils/numbers';\nimport {\n BTCE_VAULT,\n BTCE_VAULT_DECIMALS,\n isBtceVaultChain,\n} from '../../vaults/lib/config';\n\nexport type UnwrapBtceToLbtcvParameters = {\n /** Amount of LBTCv to receive (in BTC natural units, 8 decimals). */\n amount: BigNumber.Value;\n /** Receiver of the unwrapped LBTCv. Defaults to `account`. */\n receiver?: Address;\n /** Owner of the BTCe shares being burned. Defaults to `account`. */\n owner?: Address;\n} & CommonWriteParameters;\n\n/**\n * Unwraps BTCe back into LBTCv via the wrapper's\n * `withdraw(assets, receiver, owner)` ERC4626 entry point.\n *\n * Mirrors lombard-app's `withdrawFromWrapper` 1:1: amount is denominated in\n * LBTCv (the asset, not the share), and the call is gated by the wrapper's\n * `maxWithdraw(owner)`. We throw if the requested amount exceeds maxWithdraw\n * rather than silently capping, so callers see a clear failure they can\n * react to. To get LBTC out of LBTCv afterwards, follow up with\n * `queueWithdraw` from the SDK.\n *\n * @returns {Promise<Hash>} The withdraw transaction hash.\n */\nexport async function unwrapBtceToLbtcv({\n amount: amountRaw,\n receiver,\n owner,\n account,\n chainId,\n provider,\n rpcUrl,\n}: UnwrapBtceToLbtcvParameters): Promise<Hash> {\n if (!isBtceVaultChain(chainId)) {\n throw new Error(\n `BTCe is not supported on chain ${chainId}. Supported chains: ${BTCE_VAULT.chains.join(', ')}.`,\n );\n }\n\n if (receiver !== undefined && !isAddress(receiver, { strict: false })) {\n throw new Error(`Invalid receiver address: ${receiver}`);\n }\n\n if (owner !== undefined && !isAddress(owner, { strict: false })) {\n throw new Error(`Invalid owner address: ${owner}`);\n }\n\n const amount = BigNumber(amountRaw);\n if (!amount.isGreaterThan(0)) {\n throw new Error(\n `Unwrap amount must be greater than zero. Received: ${amount.toFixed()}.`,\n );\n }\n\n const resolvedReceiver = receiver ?? account;\n const resolvedOwner = owner ?? account;\n\n const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const amountBase = toBigInt(toBaseDenomination(amount, BTCE_VAULT_DECIMALS));\n\n const maxWithdrawRaw = (await publicClient.readContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n functionName: 'maxWithdraw',\n args: [resolvedOwner],\n })) as bigint;\n\n if (amountBase > maxWithdrawRaw) {\n throw new Error(\n `Unwrap amount ${amount.toFixed()} exceeds maxWithdraw ${BigNumber(\n maxWithdrawRaw.toString(),\n )\n .shiftedBy(-BTCE_VAULT_DECIMALS)\n .toFixed()} for owner ${resolvedOwner}.`,\n );\n }\n\n try {\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n functionName: 'withdraw',\n args: [amountBase, resolvedReceiver, resolvedOwner],\n });\n\n return await walletClient.writeContract(request);\n } catch (err) {\n throw new Error(getErrorMessage(err));\n }\n}\n"],"names":["getLBTCTotalSupply","chainId","rpcUrl","env","environment","determineEnv","publicClient","makePublicClient","lbtcContract","getTokenContractInfo","Token","totalSupplyRaw","fromSatoshi","claimUnstakeRedeem","data","proofSignature","account","provider","DEFAULT_ENV","walletClient","makeWalletClient","btcbTokenContract","AddressKind","assetRouterAddress","zeroAddress","callData","CHAIN_ID_TO_VIEM_CHAIN_MAP","ASSET_ROUTER_ABI","ensureHex","gasEstimationData","isKatanaChain","estimateGasFees","parseGwei","request","getBtceShares","address","isAddress","isBtceVaultChain","BTCE_VAULT","client","balanceRaw","getContract","error","getErrorMessage","getShareValueInternal","vault","EARN_VAULT","isEarnChain","exchangeRate","err","errorMessage","getSharesByAddressInternal","balanceValue","balance","ZERO","BigNumber","getEarnPosition","btceSupported","sharesResult","btceBalanceRaw","readBtceBalance","btceShares","btceSharesInUnderlying","underlyingEquivalentRaw","readBtceConvertToAssets","underlyingShares","totalShares","position","shares","cancelEarnWithdrawal","withdrawalAsset","cancelWithdrawInternal","previewWithdrawEarn","amountRaw","amount","vaultAddress","lensAddress","queueAddress","amountBase","toBigInt","toBaseDenomination","underlyingRaw","btceRaw","allowanceRaw","erc20Abi","isCovered","lbtcvNeeded","unwrapAmount","isUnwrappable","steps","unwrapBtceToLbtcv","receiver","owner","resolvedReceiver","resolvedOwner","BTCE_VAULT_DECIMALS","maxWithdrawRaw"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const i=require("./tokens-DEYY7W7O.cjs"),h=require("./token-addresses-C7H9E4qz.cjs"),T=require("./satoshi-CZEsHl5X.cjs"),U=require("./index-BKzxeh1Y.cjs"),w=require("viem"),B=require("./withdrawEarn-CTtVruit.cjs"),L=require("./hex-DeJtv8eu.cjs"),s=require("./config-BfX8lrdO.cjs"),A=require("bignumber.js"),v=require("./numbers-3LtmxfD8.cjs");async function y({chainId:e,rpcUrl:n,env:t}){const a=t||i.determineEnv(e),r=i.makePublicClient({chainId:e,rpcUrl:n,env:a}),o=await i.getTokenContractInfo(h.Token.LBTC,e,a),l=await r.readContract({abi:o.abi,address:o.address,functionName:"totalSupply"});return T.fromSatoshi(String(l))}async function k({data:e,proofSignature:n,account:t,chainId:a,provider:r,rpcUrl:o,env:l=U.p}){const c=i.makePublicClient({chainId:a,rpcUrl:o,env:l}),C=h.makeWalletClient({chainId:a,provider:r}),u=await i.getTokenContractInfo(h.Token.BTCb,a,l,h.AddressKind.Adapter),d=await c.readContract({address:u.address,abi:u.abi,functionName:"getAssetRouter"});if(!d||d===w.zeroAddress)throw new Error("AssetRouter address not found in token adapter");const m={address:d,account:t,chain:h.CHAIN_ID_TO_VIEM_CHAIN_MAP[a],abi:B.ASSET_ROUTER_ABI,functionName:"mint",args:[L.ensureHex(e),L.ensureHex(n)]},b=h.isKatanaChain(a)?await B.estimateGasFees(c,m,w.parseGwei("1")):{},{request:E}=await c.simulateContract({...m,...b});return await C.writeContract(E)}async function x({chainId:e,rpcUrl:n,address:t}){if(!w.isAddress(t))throw new Error(`Invalid address: ${t}`);if(!s.isBtceVaultChain(e))throw new Error(`BTCe is not supported on chain ${e}. Supported chains: ${s.BTCE_VAULT.chains.join(", ")}.`);try{const a=i.makePublicClient({chainId:e,rpcUrl:n}),o=await w.getContract({abi:s.BTCE_VAULT.abi,address:s.BTCE_VAULT.contracts[e],client:a}).read.balanceOf([t]);return T.fromSatoshi(String(o))}catch(a){throw new Error(i.getErrorMessage(a))}}async function P({chainId:e,rpcUrl:n}){const t=s.EARN_VAULT;if(!s.isEarnChain(e))throw new Error(`Unsupported chain id: ${e}. Please switch to one of the supported chains: ${t.chains.join(", ")}`);try{const a=i.makePublicClient({chainId:e,rpcUrl:n}),o=await w.getContract({abi:t.accountantContract.abi,address:t.accountantContract.address,client:a}).read.getRate();return T.fromSatoshi(String(o))}catch(a){const r=i.getErrorMessage(a);throw new Error(r)}}async function N({chainId:e,rpcUrl:n,address:t}){const a=s.EARN_VAULT;if(!s.isEarnChain(e))throw new Error(`Unsupported chain id: ${e}. Please switch to one of the supported chains: ${a.chains.join(", ")}`);try{const r=i.makePublicClient({chainId:e,rpcUrl:n}),l=await w.getContract({abi:a.lensContract.abi,address:a.lensContract.address,client:r}).read.balanceOf([t,a.vaultContract.address]),c=T.fromSatoshi(String(l)),C=await P({chainId:e,rpcUrl:n});return{balance:c,exchangeRate:C,balanceLbtc:c.multipliedBy(C)}}catch(r){const o=i.getErrorMessage(r);throw new Error(o)}}const R=new A(0);async function $({chainId:e,rpcUrl:n,address:t}){if(!w.isAddress(t))throw new Error(`Invalid address: ${t}`);const a=s.isBtceVaultChain(e),[r,o]=await Promise.all([N({chainId:e,rpcUrl:n,address:t}),a?q({chainId:e,rpcUrl:n,address:t}):Promise.resolve(0n)]);let l=R,c=R;if(a&&o>0n){l=T.fromSatoshi(String(o));const b=await W({chainId:e,rpcUrl:n,shares:o});c=T.fromSatoshi(String(b))}const C=r.balance,u=r.exchangeRate,d=C.plus(c),m=d.multipliedBy(u);return{underlyingShares:C,btceShares:l,btceSharesInUnderlying:c,totalShares:d,exchangeRate:u,position:m}}async function q({chainId:e,rpcUrl:n,address:t}){const a=i.makePublicClient({chainId:e,rpcUrl:n});return await w.getContract({abi:s.BTCE_VAULT.abi,address:s.BTCE_VAULT.contracts[e],client:a}).read.balanceOf([t])}async function W({chainId:e,rpcUrl:n,shares:t}){const a=i.makePublicClient({chainId:e,rpcUrl:n});return await w.getContract({abi:s.BTCE_VAULT.abi,address:s.BTCE_VAULT.contracts[e],client:a}).read.convertToAssets([t])}async function M({withdrawalAsset:e=h.Token.LBTC,account:n,chainId:t,provider:a,rpcUrl:r,env:o}){return B.cancelWithdrawInternal({token:e,account:n,chainId:t,provider:a,rpcUrl:r,env:o})}async function O({amount:e,account:n,chainId:t,rpcUrl:a}){if(!s.isEarnChain(t))throw new Error(`Unsupported chain ${t}. Earn withdrawals are supported on: ${s.EARN_VAULT.chains.join(", ")}.`);const r=A(e);if(!r.isGreaterThan(0))throw new Error(`Withdraw amount must be greater than zero. Received: ${r.toFixed()}.`);const o=s.EARN_VAULT,l=o.vaultContract.address,c=o.lensContract.address,C=o.withdrawQueueContracts[t].address,u=v.toBigInt(i.toBaseDenomination(r,o.decimals)),d=i.makePublicClient({chainId:t,rpcUrl:a}),m=s.isBtceVaultChain(t),[b,E,f]=await Promise.all([d.readContract({address:c,abi:o.lensContract.abi,functionName:"balanceOf",args:[n,l]}),m?d.readContract({address:s.BTCE_VAULT.contracts[t],abi:s.BTCE_VAULT.abi,functionName:"balanceOf",args:[n]}):Promise.resolve(0n),d.readContract({address:l,abi:w.erc20Abi,functionName:"allowance",args:[n,C]})]),V=u<=b+E,S=u>b?u-b:0n,p=m&&S>0n?S:0n;let _=!0;p>0n&&(_=await d.readContract({address:s.BTCE_VAULT.contracts[t],abi:s.BTCE_VAULT.abi,functionName:"maxWithdraw",args:[n]})>=p);const g=[];return f<u&&g.push("approve"),p>0n&&g.push("unwrap"),g.push("queue"),{steps:g,expectedPopups:g.length,underlyingBalance:T.fromSatoshi(String(b)),btceBalance:T.fromSatoshi(String(E)),unwrapAmount:T.fromSatoshi(String(p)),isCovered:V,isUnwrappable:_}}async function D({amount:e,receiver:n,owner:t,account:a,chainId:r,provider:o,rpcUrl:l}){if(!s.isBtceVaultChain(r))throw new Error(`BTCe is not supported on chain ${r}. Supported chains: ${s.BTCE_VAULT.chains.join(", ")}.`);if(n!==void 0&&!w.isAddress(n,{strict:!1}))throw new Error(`Invalid receiver address: ${n}`);if(t!==void 0&&!w.isAddress(t,{strict:!1}))throw new Error(`Invalid owner address: ${t}`);const c=A(e);if(!c.isGreaterThan(0))throw new Error(`Unwrap amount must be greater than zero. Received: ${c.toFixed()}.`);const C=n??a,u=t??a,d=i.makePublicClient({chainId:r,rpcUrl:l}),m=h.makeWalletClient({provider:o,chainId:r}),b=v.toBigInt(i.toBaseDenomination(c,s.BTCE_VAULT_DECIMALS)),E=await d.readContract({abi:s.BTCE_VAULT.abi,address:s.BTCE_VAULT.contracts[r],functionName:"maxWithdraw",args:[u]});if(b>E)throw new Error(`Unwrap amount ${c.toFixed()} exceeds maxWithdraw ${A(E.toString()).shiftedBy(-s.BTCE_VAULT_DECIMALS).toFixed()} for owner ${u}.`);try{const{request:f}=await d.simulateContract({account:a,chain:h.CHAIN_ID_TO_VIEM_CHAIN_MAP[r],abi:s.BTCE_VAULT.abi,address:s.BTCE_VAULT.contracts[r],functionName:"withdraw",args:[b,C,u]});return await m.writeContract(f)}catch(f){throw new Error(i.getErrorMessage(f))}}exports.cancelEarnWithdrawal=M;exports.claimUnstakeRedeem=k;exports.getBtceShares=x;exports.getEarnPosition=$;exports.getLBTCTotalSupply=y;exports.previewWithdrawEarn=O;exports.unwrapBtceToLbtcv=D;
2
+ //# sourceMappingURL=unwrapBtceToLbtcv-Dg-yUGpg.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwrapBtceToLbtcv-Dg-yUGpg.cjs","sources":["../../src/contract-functions/getLBTCTotalSupply/getLBTCTotalSupply.ts","../../src/contract-functions/claimUnstakeRedeem/claimUnstakeRedeem.ts","../../src/contract-functions/getBtceShares/getBtceShares.ts","../../src/contract-functions/getShareValue/getShareValue.ts","../../src/contract-functions/getSharesByAddress/getSharesByAddress.ts","../../src/contract-functions/getEarnPosition/getEarnPosition.ts","../../src/contract-functions/cancelEarnWithdrawal/cancelEarnWithdrawal.ts","../../src/contract-functions/previewWithdrawEarn/previewWithdrawEarn.ts","../../src/contract-functions/unwrapBtceToLbtcv/unwrapBtceToLbtcv.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { Token } from '../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../tokens/tokens';\nimport { determineEnv } from '../../utils/env';\nimport { fromSatoshi } from '../../utils/satoshi';\n\n/**\n * Get the total supply of LBTC tokens.\n *\n * @param {CommonParameters} parameters - The parameters.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n * @param {Env} parameters.env - The optional environment identifier.\n *\n * @return {Promise<BigNumber>}\n */\nexport async function getLBTCTotalSupply({\n chainId,\n rpcUrl,\n env,\n}: CommonParameters): Promise<BigNumber> {\n const environment = env || determineEnv(chainId);\n const publicClient = makePublicClient({ chainId, rpcUrl, env: environment });\n const lbtcContract = await getTokenContractInfo(\n Token.LBTC,\n chainId,\n environment,\n );\n\n const totalSupplyRaw = await publicClient.readContract({\n abi: lbtcContract.abi,\n address: lbtcContract.address,\n functionName: 'totalSupply',\n });\n\n return fromSatoshi(String(totalSupplyRaw));\n}\n","import { DEFAULT_ENV } from '@lombard.finance/sdk-common';\nimport { Hash, parseGwei, zeroAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { CHAIN_ID_TO_VIEM_CHAIN_MAP, isKatanaChain } from '../../common/chains';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport ASSET_ROUTER_ABI from '../../tokens/abi/ASSET_ROUTER_ABI';\nimport { AddressKind, Token } from '../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../tokens/tokens';\nimport { estimateGasFees } from '../../utils/gas';\nimport { ensureHex } from '../../utils/hex';\n\n/**\n * Parameters for claiming BTC.b from unstake redemptions\n */\nexport interface IClaimUnstakeRedeemParams extends CommonWriteParameters {\n /** Raw payload from the unstake redemption (`Unstake.rawPayload`) */\n data: string;\n\n /** Signature/proof from the unstake redemption (`Unstake.proof`) */\n proofSignature: string;\n}\n\n/**\n * Claims BTC.b tokens from an unstake redemption (LBTC → BTC.b)\n *\n * This function is specifically for claiming native chain redemptions after the 7-day unstaking period.\n * Unlike deposits which use `adapter.mintV1`, unstake redemptions use `assetRouter.mint`.\n *\n * Business Rules:\n * - Only works for native chain redemptions (LBTC → BTC.b)\n * - Requires notarization status = SESSION_APPROVED\n * - Requires session state = COMPLETED\n * - Must be called after 7 days from unstake\n *\n * @param params - Parameters for claiming\n * @returns Transaction hash of the claim operation\n *\n * @throws Error if claiming fails or if action selector doesn't match\n */\nexport async function claimUnstakeRedeem({\n data,\n proofSignature,\n account,\n chainId,\n provider,\n rpcUrl,\n env = DEFAULT_ENV,\n}: IClaimUnstakeRedeemParams): Promise<Hash> {\n const publicClient = makePublicClient({ chainId, rpcUrl, env });\n const walletClient = makeWalletClient({ chainId, provider });\n\n // Get AssetRouter address from BTCb token adapter\n const btcbTokenContract = await getTokenContractInfo(\n Token.BTCb,\n chainId,\n env,\n AddressKind.Adapter,\n );\n\n // Read AssetRouter address from token adapter\n const assetRouterAddress = await publicClient.readContract({\n address: btcbTokenContract.address,\n abi: btcbTokenContract.abi,\n functionName: 'getAssetRouter',\n });\n\n if (!assetRouterAddress || assetRouterAddress === zeroAddress) {\n throw new Error('AssetRouter address not found in token adapter');\n }\n\n // Call AssetRouter.mint function\n const callData = {\n address: assetRouterAddress,\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n abi: ASSET_ROUTER_ABI,\n functionName: 'mint',\n args: [ensureHex(data), ensureHex(proofSignature)],\n } as const;\n\n const gasEstimationData = isKatanaChain(chainId)\n ? await estimateGasFees(publicClient, callData, parseGwei('1'))\n : {};\n\n const { request } = await publicClient.simulateContract({\n ...callData,\n ...gasEstimationData,\n });\n\n const txHash = await walletClient.writeContract(request);\n\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, getContract, isAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport { BTCE_VAULT, isBtceVaultChain } from '../../vaults/lib/config';\n\nexport interface IGetBtceSharesParameters extends CommonParameters {\n /**\n * The address of the BTCe holder.\n */\n address: string;\n}\n\n/**\n * Gets the amount of BTCe shares owned by the provided address on the\n * specified chain.\n *\n * BTCe is an ERC4626 wrapper around the Veda vault's LBTCv share token. Use\n * {@link getEarnPosition} when you want the user's full Bitcoin Earn position\n * (LBTCv + BTCe valued in LBTC) in a single call.\n *\n * @param {IGetBtceSharesParameters} parameters - The parameters.\n * @param {string} parameters.address - The address of the BTCe holder.\n * @param {ChainId} parameters.chainId - The chain id (must be a BTCe-supported chain).\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @return {Promise<BigNumber>} BTCe balance as an 8-decimal BigNumber.\n */\nexport async function getBtceShares({\n chainId,\n rpcUrl,\n address,\n}: IGetBtceSharesParameters): Promise<BigNumber> {\n if (!isAddress(address)) {\n throw new Error(`Invalid address: ${address}`);\n }\n\n if (!isBtceVaultChain(chainId)) {\n throw new Error(\n `BTCe is not supported on chain ${chainId}. Supported chains: ${BTCE_VAULT.chains.join(', ')}.`,\n );\n }\n\n try {\n const client = makePublicClient({ chainId, rpcUrl });\n\n const btceContract = getContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n client,\n });\n\n const balanceRaw = (await btceContract.read.balanceOf([\n address as Address,\n ])) as bigint;\n\n return fromSatoshi(String(balanceRaw));\n } catch (error) {\n throw new Error(getErrorMessage(error));\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { getContract } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport { EARN_VAULT, isEarnChain } from '../../vaults/lib/config';\n\nexport type IGetShareValueParameters = CommonParameters;\n\n/**\n * @internal Internal helper used by `getEarnPosition` and `getSharesByAddressInternal`.\n * The public `getShareValue` function was removed in 5.0.0; the exchange rate\n * is included in the response from `getEarnPosition`.\n *\n * @returns {Promise<BigNumber>}\n */\nexport async function getShareValueInternal({\n chainId,\n rpcUrl,\n}: IGetShareValueParameters): Promise<BigNumber> {\n const vault = EARN_VAULT;\n if (!isEarnChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n try {\n const client = makePublicClient({ chainId, rpcUrl });\n\n const accountantContract = getContract({\n abi: vault.accountantContract.abi,\n address: vault.accountantContract.address,\n client,\n });\n\n const exchangeRate = await accountantContract.read.getRate();\n return fromSatoshi(String(exchangeRate));\n } catch (err) {\n const errorMessage = getErrorMessage(err);\n throw new Error(errorMessage);\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { getContract } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport { EARN_VAULT, isEarnChain } from '../../vaults/lib/config';\nimport { getShareValueInternal } from '../getShareValue/getShareValue';\n\nexport interface IGetSharesByAddressParameters extends CommonParameters {\n /** The address of the share holder. */\n address: string;\n}\n\ninterface IGetSharesByAddressResponse {\n /** The amount of share owned. */\n balance: BigNumber;\n /** The value of a single share unit */\n exchangeRate: BigNumber;\n /** The balance represented in BTC. */\n balanceLbtc: BigNumber;\n}\n\n/**\n * @internal Internal helper used by `getEarnPosition` and other internal\n * vault-reading paths. The public `getSharesByAddress` function was removed\n * in 5.0.0; consumers use `getEarnPosition` instead.\n *\n * @return {Promise<IGetSharesByAddressResponse>}\n */\nexport async function getSharesByAddressInternal({\n chainId,\n rpcUrl,\n address,\n}: IGetSharesByAddressParameters): Promise<IGetSharesByAddressResponse> {\n const vault = EARN_VAULT;\n if (!isEarnChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n try {\n const client = makePublicClient({ chainId, rpcUrl });\n\n const lensContract = getContract({\n abi: vault.lensContract.abi,\n address: vault.lensContract.address,\n client,\n });\n\n const balanceValue = await lensContract.read.balanceOf([\n address,\n vault.vaultContract.address,\n ]);\n\n const balance = fromSatoshi(String(balanceValue));\n\n const exchangeRate = await getShareValueInternal({\n chainId,\n rpcUrl,\n });\n\n return {\n balance,\n exchangeRate,\n balanceLbtc: balance.multipliedBy(exchangeRate),\n };\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n throw new Error(errorMessage);\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, getContract, isAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport {\n BTCE_VAULT,\n BtceVaultChain,\n isBtceVaultChain,\n} from '../../vaults/lib/config';\nimport { getSharesByAddressInternal } from '../getSharesByAddress/getSharesByAddress';\n\nexport interface IGetEarnPositionParameters extends CommonParameters {\n /**\n * The address of the position holder.\n */\n address: string;\n}\n\nexport interface IGetEarnPositionResponse {\n /** Direct underlying-share balance held at the address. */\n underlyingShares: BigNumber;\n /** Raw BTCe wrapper shares held at the address. */\n btceShares: BigNumber;\n /** BTCe shares converted to underlying-share equivalent via the wrapper's convertToAssets. */\n btceSharesInUnderlying: BigNumber;\n /** underlyingShares + btceSharesInUnderlying (both in underlying-share units). */\n totalShares: BigNumber;\n /** Current underlying-share value, in LBTC, from the Veda accountant. */\n exchangeRate: BigNumber;\n /** totalShares * exchangeRate, expressed in LBTC. */\n position: BigNumber;\n}\n\nconst ZERO = new BigNumber(0);\n\n/**\n * Gets the user's full Bitcoin Earn position (direct underlying shares + BTCe)\n * on a single chain, valued in LBTC.\n *\n * BTCe is an ERC4626 wrapper around the Veda vault's underlying share token.\n * The function reads both balances, converts BTCe shares to underlying-share\n * equivalent via the wrapper's `convertToAssets`, sums the two values in\n * underlying-share units, and applies the Veda accountant's share value to\n * express the total in LBTC.\n *\n * Conversion through `convertToAssets` is mandatory rather than naive 1:1\n * summation: the wrapper is a 1:1 pass-through today, but ERC4626 vaults can\n * accrue fees or rebases that move the share-to-asset ratio over time.\n *\n * On chains where BTCe is not deployed (e.g. Corn) the BTCe leg is skipped\n * and the result reports zero BTCe shares with a position equal to the\n * underlying-share leg alone.\n *\n * Errors from either leg propagate to the caller, since silently returning\n * zero would understate the user's balance and is unsafe for an SDK consumed\n * by partner integrators quoting balances to end users.\n *\n * @param {IGetEarnPositionParameters} parameters - The parameters.\n * @param {string} parameters.address - The address of the position holder.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @return {Promise<IGetEarnPositionResponse>}\n */\nexport async function getEarnPosition({\n chainId,\n rpcUrl,\n address,\n}: IGetEarnPositionParameters): Promise<IGetEarnPositionResponse> {\n if (!isAddress(address)) {\n throw new Error(`Invalid address: ${address}`);\n }\n\n const btceSupported = isBtceVaultChain(chainId);\n\n const [sharesResult, btceBalanceRaw] = await Promise.all([\n getSharesByAddressInternal({ chainId, rpcUrl, address }),\n btceSupported\n ? readBtceBalance({ chainId, rpcUrl, address })\n : Promise.resolve(0n),\n ]);\n\n let btceShares = ZERO;\n let btceSharesInUnderlying = ZERO;\n\n if (btceSupported && btceBalanceRaw > 0n) {\n btceShares = fromSatoshi(String(btceBalanceRaw));\n const underlyingEquivalentRaw = await readBtceConvertToAssets({\n chainId,\n rpcUrl,\n shares: btceBalanceRaw,\n });\n btceSharesInUnderlying = fromSatoshi(String(underlyingEquivalentRaw));\n }\n\n const underlyingShares = sharesResult.balance;\n const exchangeRate = sharesResult.exchangeRate;\n const totalShares = underlyingShares.plus(btceSharesInUnderlying);\n const position = totalShares.multipliedBy(exchangeRate);\n\n return {\n underlyingShares,\n btceShares,\n btceSharesInUnderlying,\n totalShares,\n exchangeRate,\n position,\n };\n}\n\nasync function readBtceBalance({\n chainId,\n rpcUrl,\n address,\n}: {\n chainId: BtceVaultChain;\n rpcUrl?: string;\n address: Address;\n}): Promise<bigint> {\n const client = makePublicClient({ chainId, rpcUrl });\n const btceContract = getContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n client,\n });\n return (await btceContract.read.balanceOf([address])) as bigint;\n}\n\nasync function readBtceConvertToAssets({\n chainId,\n rpcUrl,\n shares,\n}: {\n chainId: BtceVaultChain;\n rpcUrl?: string;\n shares: bigint;\n}): Promise<bigint> {\n const client = makePublicClient({ chainId, rpcUrl });\n const btceContract = getContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n client,\n });\n return (await btceContract.read.convertToAssets([shares])) as bigint;\n}\n","import { Hash } from 'viem';\n\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { Token } from '../../tokens/token-addresses';\nimport { cancelWithdrawInternal } from '../../vaults/lib/ops/withdraw';\n\nexport type CancelEarnWithdrawalParameters = {\n /** The withdrawal asset originally queued. Defaults to Token.LBTC. */\n withdrawalAsset?: Token;\n} & CommonWriteParameters;\n\n/**\n * Cancels a pending Earn withdrawal request filed via `withdrawEarn` (or the\n * legacy `queueWithdraw`).\n *\n * Atomic-request cancellation operates on the withdraw queue contract and is\n * indexed per (user, vault, withdrawalAsset) tuple, so the asset must match\n * what was originally queued. Defaults to Token.LBTC.\n *\n * @returns {Promise<Hash>} The cancel transaction hash.\n */\nexport async function cancelEarnWithdrawal({\n withdrawalAsset = Token.LBTC,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: CancelEarnWithdrawalParameters): Promise<Hash> {\n return cancelWithdrawInternal({\n token: withdrawalAsset,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n });\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, erc20Abi } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { CommonParameters } from '../../common/parameters';\nimport { toBaseDenomination } from '../../tokens/tokens';\nimport toBigInt from '../../utils/numbers';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport {\n BTCE_VAULT,\n EARN_VAULT,\n isBtceVaultChain,\n isEarnChain,\n} from '../../vaults/lib/config';\n\nexport type PreviewWithdrawEarnParameters = {\n amount: BigNumber.Value;\n account: Address;\n} & CommonParameters;\n\nexport interface PreviewWithdrawEarnResult {\n /** The steps the orchestrator will execute, in order. */\n steps: Array<'approve' | 'unwrap' | 'queue'>;\n /** Number of wallet popups the user will see. */\n expectedPopups: number;\n /** Underlying-share balance the user holds directly. */\n underlyingBalance: BigNumber;\n /** Raw BTCe shares the user holds. */\n btceBalance: BigNumber;\n /** Underlying-share amount that needs to come from BTCe unwrap (zero if not needed). */\n unwrapAmount: BigNumber;\n /** Whether the requested amount is covered by the user's total position. */\n isCovered: boolean;\n /**\n * Whether the BTCe wrapper currently has enough redeemable assets to cover\n * the required unwrap. When false, `withdrawEarn` will throw before sending\n * any transaction. Always true when no unwrap is needed.\n */\n isUnwrappable: boolean;\n}\n\n/**\n * Predicts the steps `withdrawEarn` would execute for a given amount, without\n * sending any transactions. Useful for rendering a step indicator before the\n * user signs.\n *\n * Reads the user's underlying-share balance, BTCe balance, and current\n * allowance to the withdraw queue. Returns the ordered list of steps and the\n * predicted wallet-popup count.\n */\nexport async function previewWithdrawEarn({\n amount: amountRaw,\n account,\n chainId,\n rpcUrl,\n}: PreviewWithdrawEarnParameters): Promise<PreviewWithdrawEarnResult> {\n if (!isEarnChain(chainId)) {\n throw new Error(\n `Unsupported chain ${chainId}. Earn withdrawals are supported on: ${EARN_VAULT.chains.join(', ')}.`,\n );\n }\n\n const amount = BigNumber(amountRaw);\n if (!amount.isGreaterThan(0)) {\n throw new Error(\n `Withdraw amount must be greater than zero. Received: ${amount.toFixed()}.`,\n );\n }\n\n const vault = EARN_VAULT;\n const vaultAddress = vault.vaultContract.address as Address;\n const lensAddress = vault.lensContract.address as Address;\n const queueAddress = vault.withdrawQueueContracts[chainId].address as Address;\n const amountBase = toBigInt(toBaseDenomination(amount, vault.decimals));\n\n const publicClient = makePublicClient({ chainId, rpcUrl });\n const btceSupported = isBtceVaultChain(chainId);\n\n const [underlyingRaw, btceRaw, allowanceRaw] = await Promise.all([\n publicClient.readContract({\n address: lensAddress,\n abi: vault.lensContract.abi,\n functionName: 'balanceOf',\n args: [account, vaultAddress],\n }) as Promise<bigint>,\n btceSupported\n ? (publicClient.readContract({\n address: BTCE_VAULT.contracts[chainId],\n abi: BTCE_VAULT.abi,\n functionName: 'balanceOf',\n args: [account],\n }) as Promise<bigint>)\n : Promise.resolve(0n),\n publicClient.readContract({\n address: vaultAddress,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [account, queueAddress],\n }) as Promise<bigint>,\n ]);\n\n const isCovered = amountBase <= underlyingRaw + btceRaw;\n const lbtcvNeeded =\n amountBase > underlyingRaw ? amountBase - underlyingRaw : 0n;\n const unwrapAmount = btceSupported && lbtcvNeeded > 0n ? lbtcvNeeded : 0n;\n\n // Read maxWithdraw to predict whether withdrawEarn would fail its\n // pre-flight unwrappable check. Only relevant when an unwrap step is\n // needed; otherwise unwrappability does not apply.\n let isUnwrappable = true;\n if (unwrapAmount > 0n) {\n const maxWithdrawRaw = (await publicClient.readContract({\n address:\n BTCE_VAULT.contracts[chainId as (typeof BTCE_VAULT.chains)[number]],\n abi: BTCE_VAULT.abi,\n functionName: 'maxWithdraw',\n args: [account],\n })) as bigint;\n isUnwrappable = maxWithdrawRaw >= unwrapAmount;\n }\n\n const steps: Array<'approve' | 'unwrap' | 'queue'> = [];\n if (allowanceRaw < amountBase) steps.push('approve');\n if (unwrapAmount > 0n) steps.push('unwrap');\n steps.push('queue');\n\n return {\n steps,\n expectedPopups: steps.length,\n underlyingBalance: fromSatoshi(String(underlyingRaw)),\n btceBalance: fromSatoshi(String(btceRaw)),\n unwrapAmount: fromSatoshi(String(unwrapAmount)),\n isCovered,\n isUnwrappable,\n };\n}\n","import BigNumber from 'bignumber.js';\nimport { Address, Hash, isAddress } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { CHAIN_ID_TO_VIEM_CHAIN_MAP } from '../../common/chains';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { toBaseDenomination } from '../../tokens/tokens';\nimport { getErrorMessage } from '../../utils/err';\nimport toBigInt from '../../utils/numbers';\nimport {\n BTCE_VAULT,\n BTCE_VAULT_DECIMALS,\n isBtceVaultChain,\n} from '../../vaults/lib/config';\n\nexport type UnwrapBtceToLbtcvParameters = {\n /** Amount of LBTCv to receive (in BTC natural units, 8 decimals). */\n amount: BigNumber.Value;\n /** Receiver of the unwrapped LBTCv. Defaults to `account`. */\n receiver?: Address;\n /** Owner of the BTCe shares being burned. Defaults to `account`. */\n owner?: Address;\n} & CommonWriteParameters;\n\n/**\n * Unwraps BTCe back into LBTCv via the wrapper's\n * `withdraw(assets, receiver, owner)` ERC4626 entry point.\n *\n * Mirrors lombard-app's `withdrawFromWrapper` 1:1: amount is denominated in\n * LBTCv (the asset, not the share), and the call is gated by the wrapper's\n * `maxWithdraw(owner)`. We throw if the requested amount exceeds maxWithdraw\n * rather than silently capping, so callers see a clear failure they can\n * react to. To get LBTC out of LBTCv afterwards, follow up with\n * `queueWithdraw` from the SDK.\n *\n * @returns {Promise<Hash>} The withdraw transaction hash.\n */\nexport async function unwrapBtceToLbtcv({\n amount: amountRaw,\n receiver,\n owner,\n account,\n chainId,\n provider,\n rpcUrl,\n}: UnwrapBtceToLbtcvParameters): Promise<Hash> {\n if (!isBtceVaultChain(chainId)) {\n throw new Error(\n `BTCe is not supported on chain ${chainId}. Supported chains: ${BTCE_VAULT.chains.join(', ')}.`,\n );\n }\n\n if (receiver !== undefined && !isAddress(receiver, { strict: false })) {\n throw new Error(`Invalid receiver address: ${receiver}`);\n }\n\n if (owner !== undefined && !isAddress(owner, { strict: false })) {\n throw new Error(`Invalid owner address: ${owner}`);\n }\n\n const amount = BigNumber(amountRaw);\n if (!amount.isGreaterThan(0)) {\n throw new Error(\n `Unwrap amount must be greater than zero. Received: ${amount.toFixed()}.`,\n );\n }\n\n const resolvedReceiver = receiver ?? account;\n const resolvedOwner = owner ?? account;\n\n const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const amountBase = toBigInt(toBaseDenomination(amount, BTCE_VAULT_DECIMALS));\n\n const maxWithdrawRaw = (await publicClient.readContract({\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n functionName: 'maxWithdraw',\n args: [resolvedOwner],\n })) as bigint;\n\n if (amountBase > maxWithdrawRaw) {\n throw new Error(\n `Unwrap amount ${amount.toFixed()} exceeds maxWithdraw ${BigNumber(\n maxWithdrawRaw.toString(),\n )\n .shiftedBy(-BTCE_VAULT_DECIMALS)\n .toFixed()} for owner ${resolvedOwner}.`,\n );\n }\n\n try {\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n abi: BTCE_VAULT.abi,\n address: BTCE_VAULT.contracts[chainId],\n functionName: 'withdraw',\n args: [amountBase, resolvedReceiver, resolvedOwner],\n });\n\n return await walletClient.writeContract(request);\n } catch (err) {\n throw new Error(getErrorMessage(err));\n }\n}\n"],"names":["getLBTCTotalSupply","chainId","rpcUrl","env","environment","determineEnv","publicClient","makePublicClient","lbtcContract","getTokenContractInfo","Token","totalSupplyRaw","fromSatoshi","claimUnstakeRedeem","data","proofSignature","account","provider","DEFAULT_ENV","walletClient","makeWalletClient","btcbTokenContract","AddressKind","assetRouterAddress","zeroAddress","callData","CHAIN_ID_TO_VIEM_CHAIN_MAP","ASSET_ROUTER_ABI","ensureHex","gasEstimationData","isKatanaChain","estimateGasFees","parseGwei","request","getBtceShares","address","isAddress","isBtceVaultChain","BTCE_VAULT","client","balanceRaw","getContract","error","getErrorMessage","getShareValueInternal","vault","EARN_VAULT","isEarnChain","exchangeRate","err","errorMessage","getSharesByAddressInternal","balanceValue","balance","ZERO","BigNumber","getEarnPosition","btceSupported","sharesResult","btceBalanceRaw","readBtceBalance","btceShares","btceSharesInUnderlying","underlyingEquivalentRaw","readBtceConvertToAssets","underlyingShares","totalShares","position","shares","cancelEarnWithdrawal","withdrawalAsset","cancelWithdrawInternal","previewWithdrawEarn","amountRaw","amount","vaultAddress","lensAddress","queueAddress","amountBase","toBigInt","toBaseDenomination","underlyingRaw","btceRaw","allowanceRaw","erc20Abi","isCovered","lbtcvNeeded","unwrapAmount","isUnwrappable","steps","unwrapBtceToLbtcv","receiver","owner","resolvedReceiver","resolvedOwner","BTCE_VAULT_DECIMALS","maxWithdrawRaw"],"mappings":"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"}