@lombard.finance/sdk 4.6.0 → 4.7.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.
- package/CHANGELOG.md +23 -0
- package/README.md +8 -4
- package/dist/api-functions/getDepositsByAddress/getDepositsByAddress.d.ts +4 -0
- package/dist/api-functions/getDepositsByAddress/getDepositsByAddress.d.ts.map +1 -1
- package/dist/api.cjs +1 -1
- package/dist/api.js +5 -5
- package/dist/bridge.cjs +1 -1
- package/dist/bridge.js +1 -1
- package/dist/btc.cjs +1 -1
- package/dist/btc.js +2 -2
- package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -1
- package/dist/chains/solana/SolanaActions.d.ts +24 -6
- package/dist/chains/solana/SolanaActions.d.ts.map +1 -1
- package/dist/chains/solana/actions/index.d.ts +1 -0
- package/dist/chains/solana/actions/index.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts +5 -9
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/config/solana.d.ts +1 -10
- package/dist/chains/solana/actions/redeem/config/solana.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/config/types.d.ts +0 -14
- package/dist/chains/solana/actions/redeem/config/types.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/factory.d.ts +0 -3
- package/dist/chains/solana/actions/redeem/factory.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/types.d.ts +5 -17
- package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -1
- package/dist/chains/solana/actions/stake/SolanaStake.d.ts +33 -0
- package/dist/chains/solana/actions/stake/SolanaStake.d.ts.map +1 -0
- package/dist/chains/solana/actions/stake/config/index.d.ts +8 -0
- package/dist/chains/solana/actions/stake/config/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/stake/config/solana.d.ts +13 -0
- package/dist/chains/solana/actions/stake/config/solana.d.ts.map +1 -0
- package/dist/chains/solana/actions/stake/config/types.d.ts +20 -0
- package/dist/chains/solana/actions/stake/config/types.d.ts.map +1 -0
- package/dist/chains/solana/actions/stake/factory.d.ts +9 -0
- package/dist/chains/solana/actions/stake/factory.d.ts.map +1 -0
- package/dist/chains/solana/actions/stake/index.d.ts +9 -0
- package/dist/chains/solana/actions/stake/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/stake/types.d.ts +39 -0
- package/dist/chains/solana/actions/stake/types.d.ts.map +1 -0
- package/dist/chains/solana/actions/unstake/SolanaUnstake.d.ts +7 -4
- package/dist/chains/solana/actions/unstake/SolanaUnstake.d.ts.map +1 -1
- package/dist/chains/solana/actions/unstake/config/btc.d.ts +13 -7
- package/dist/chains/solana/actions/unstake/config/btc.d.ts.map +1 -1
- package/dist/chains/solana/actions/unstake/config/index.d.ts +1 -1
- package/dist/chains/solana/actions/unstake/config/index.d.ts.map +1 -1
- package/dist/chains/solana/actions/unstake/config/types.d.ts +6 -2
- package/dist/chains/solana/actions/unstake/config/types.d.ts.map +1 -1
- package/dist/chains/solana/actions/unstake/types.d.ts +4 -4
- package/dist/chains/solana/actions/unstake/types.d.ts.map +1 -1
- package/dist/chains/solana/utils.d.ts +2 -0
- package/dist/chains/solana/utils.d.ts.map +1 -1
- package/dist/chains/starknet/actions/unstake/StarknetUnstake.d.ts +2 -2
- package/dist/chains/starknet/actions/unstake/StarknetUnstake.d.ts.map +1 -1
- package/dist/chains/starknet/actions/unstake/types.d.ts +4 -4
- package/dist/chains/starknet/actions/unstake/types.d.ts.map +1 -1
- package/dist/chains/sui/actions/unstake/SuiUnstake.d.ts +2 -2
- package/dist/chains/sui/actions/unstake/SuiUnstake.d.ts.map +1 -1
- package/dist/chains/sui/actions/unstake/types.d.ts +4 -4
- package/dist/chains/sui/actions/unstake/types.d.ts.map +1 -1
- package/dist/chunks/BtcActions-CWFHlbUP.cjs +2 -0
- package/dist/chunks/BtcActions-CWFHlbUP.cjs.map +1 -0
- package/dist/chunks/{BtcActions-CI5XotUx.js → BtcActions-jvzGFmpz.js} +12 -8
- package/dist/chunks/BtcActions-jvzGFmpz.js.map +1 -0
- package/dist/chunks/{EvmActions-D_sFfTAK.cjs → EvmActions-BTKQAXTE.cjs} +2 -2
- package/dist/chunks/{EvmActions-D_sFfTAK.cjs.map → EvmActions-BTKQAXTE.cjs.map} +1 -1
- package/dist/chunks/{EvmActions-C7EKF3jb.js → EvmActions-hb-FhsLJ.js} +9 -9
- package/dist/chunks/{EvmActions-C7EKF3jb.js.map → EvmActions-hb-FhsLJ.js.map} +1 -1
- package/dist/chunks/ReferralsClient-D8dHEk_X.cjs +2 -0
- package/dist/chunks/ReferralsClient-D8dHEk_X.cjs.map +1 -0
- package/dist/chunks/{ReferralsClient-AxhLoWRT.js → ReferralsClient-W-0-383w.js} +58 -58
- package/dist/chunks/ReferralsClient-W-0-383w.js.map +1 -0
- package/dist/chunks/{approveLBTC-CUXEC3kw.cjs → approveLBTC-BMC4cZEk.cjs} +2 -2
- package/dist/chunks/{approveLBTC-CUXEC3kw.cjs.map → approveLBTC-BMC4cZEk.cjs.map} +1 -1
- package/dist/chunks/{approveLBTC-Du2El1tW.js → approveLBTC-BkdT1N3V.js} +3 -3
- package/dist/chunks/{approveLBTC-Du2El1tW.js.map → approveLBTC-BkdT1N3V.js.map} +1 -1
- package/dist/chunks/{blockchain-identifier-CTVaEPpY.js → blockchain-identifier-BLPnwbIN.js} +2 -2
- package/dist/chunks/{blockchain-identifier-CTVaEPpY.js.map → blockchain-identifier-BLPnwbIN.js.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BTPGxLio.cjs → blockchain-identifier-Bp-LTIdG.cjs} +2 -2
- package/dist/chunks/{blockchain-identifier-BTPGxLio.cjs.map → blockchain-identifier-Bp-LTIdG.cjs.map} +1 -1
- package/dist/chunks/{bridge-dWaKrMKm.cjs → bridge-7Eq_Jmi2.cjs} +2 -2
- package/dist/chunks/{bridge-dWaKrMKm.cjs.map → bridge-7Eq_Jmi2.cjs.map} +1 -1
- package/dist/chunks/{bridge-DqGabhIY.js → bridge-DbB23m2a.js} +4 -4
- package/dist/chunks/{bridge-DqGabhIY.js.map → bridge-DbB23m2a.js.map} +1 -1
- package/dist/chunks/{config-JT3GvwPB.js → config-C8BfN_9P.js} +2 -2
- package/dist/chunks/{config-JT3GvwPB.js.map → config-C8BfN_9P.js.map} +1 -1
- package/dist/chunks/{config-CSo0k7gN.cjs → config-ow9X5H0c.cjs} +2 -2
- package/dist/chunks/{config-CSo0k7gN.cjs.map → config-ow9X5H0c.cjs.map} +1 -1
- package/dist/chunks/{defi-registry-hHpGoh1m.cjs → defi-registry-B8V6dRVB.cjs} +2 -2
- package/dist/chunks/{defi-registry-hHpGoh1m.cjs.map → defi-registry-B8V6dRVB.cjs.map} +1 -1
- package/dist/chunks/{defi-registry-ig-wro_O.js → defi-registry-CD8EUcNu.js} +3 -3
- package/dist/chunks/{defi-registry-ig-wro_O.js.map → defi-registry-CD8EUcNu.js.map} +1 -1
- package/dist/chunks/depositStatus-BJA7tNqc.cjs +2 -0
- package/dist/chunks/{depositStatus-D5t8HN_A.cjs.map → depositStatus-BJA7tNqc.cjs.map} +1 -1
- package/dist/chunks/{depositStatus-BrrE4n4B.js → depositStatus-HosfExLl.js} +38 -37
- package/dist/chunks/{depositStatus-BrrE4n4B.js.map → depositStatus-HosfExLl.js.map} +1 -1
- package/dist/chunks/events-BTPDrUUu.cjs +2 -0
- package/dist/chunks/events-BTPDrUUu.cjs.map +1 -0
- package/dist/chunks/events-DAiXVdGv.js +1274 -0
- package/dist/chunks/events-DAiXVdGv.js.map +1 -0
- package/dist/chunks/{get-exchange-ratio-B-xzYND1.js → get-exchange-ratio-Bl6pt546.js} +2 -2
- package/dist/chunks/{get-exchange-ratio-B-xzYND1.js.map → get-exchange-ratio-Bl6pt546.js.map} +1 -1
- package/dist/chunks/{get-exchange-ratio-BEhD4gLB.cjs → get-exchange-ratio-t1PW8I6_.cjs} +2 -2
- package/dist/chunks/{get-exchange-ratio-BEhD4gLB.cjs.map → get-exchange-ratio-t1PW8I6_.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-iYshN1RQ.js → get-positions-summary-CaX2BCHp.js} +2 -2
- package/dist/chunks/{get-positions-summary-iYshN1RQ.js.map → get-positions-summary-CaX2BCHp.js.map} +1 -1
- package/dist/chunks/{get-positions-summary-Dh1QPLYO.cjs → get-positions-summary-DdZvBmCN.cjs} +2 -2
- package/dist/chunks/{get-positions-summary-Dh1QPLYO.cjs.map → get-positions-summary-DdZvBmCN.cjs.map} +1 -1
- package/dist/chunks/{get-vault-tvl-C3Yr4MI4.js → get-vault-tvl-CihHEkqK.js} +4 -4
- package/dist/chunks/{get-vault-tvl-C3Yr4MI4.js.map → get-vault-tvl-CihHEkqK.js.map} +1 -1
- package/dist/chunks/{get-vault-tvl-CRbxkHmr.cjs → get-vault-tvl-DZ-xzehy.cjs} +2 -2
- package/dist/chunks/{get-vault-tvl-CRbxkHmr.cjs.map → get-vault-tvl-DZ-xzehy.cjs.map} +1 -1
- package/dist/chunks/{get-vault-withdrawals-QqvpZnxA.cjs → get-vault-withdrawals-DLwFMQEB.cjs} +2 -2
- package/dist/chunks/{get-vault-withdrawals-QqvpZnxA.cjs.map → get-vault-withdrawals-DLwFMQEB.cjs.map} +1 -1
- package/dist/chunks/{get-vault-withdrawals-CQwNiILS.js → get-vault-withdrawals-QJOdxB5Z.js} +3 -3
- package/dist/chunks/{get-vault-withdrawals-CQwNiILS.js.map → get-vault-withdrawals-QJOdxB5Z.js.map} +1 -1
- package/dist/chunks/{getUserStakeAndBakeSignature-CSEyzgMc.cjs → getUserStakeAndBakeSignature-BmY5j0OM.cjs} +2 -2
- package/dist/chunks/{getUserStakeAndBakeSignature-CSEyzgMc.cjs.map → getUserStakeAndBakeSignature-BmY5j0OM.cjs.map} +1 -1
- package/dist/chunks/{getUserStakeAndBakeSignature-Su-k10ap.js → getUserStakeAndBakeSignature-CqlrwA0t.js} +4 -4
- package/dist/chunks/{getUserStakeAndBakeSignature-Su-k10ap.js.map → getUserStakeAndBakeSignature-CqlrwA0t.js.map} +1 -1
- package/dist/chunks/{lbtc-addresses-D8MYCdsx.js → lbtc-addresses-BlyGFWnW.js} +2 -2
- package/dist/chunks/{lbtc-addresses-D8MYCdsx.js.map → lbtc-addresses-BlyGFWnW.js.map} +1 -1
- package/dist/chunks/{lbtc-addresses-Kil252DX.cjs → lbtc-addresses-DjsipX5Q.cjs} +2 -2
- package/dist/chunks/{lbtc-addresses-Kil252DX.cjs.map → lbtc-addresses-DjsipX5Q.cjs.map} +1 -1
- package/dist/chunks/statusConstants-BTQAvx1I.cjs +2 -0
- package/dist/chunks/statusConstants-BTQAvx1I.cjs.map +1 -0
- package/dist/chunks/{statusConstants-BU4PglPs.js → statusConstants-D9eSk91U.js} +53 -43
- package/dist/chunks/statusConstants-D9eSk91U.js.map +1 -0
- package/dist/chunks/{storeNetworkFeeSignature-Buk4091C.cjs → storeNetworkFeeSignature-CLm8I2pf.cjs} +2 -2
- package/dist/chunks/{storeNetworkFeeSignature-Buk4091C.cjs.map → storeNetworkFeeSignature-CLm8I2pf.cjs.map} +1 -1
- package/dist/chunks/{storeNetworkFeeSignature-BODIpq3Y.js → storeNetworkFeeSignature-tprCigR1.js} +2 -2
- package/dist/chunks/{storeNetworkFeeSignature-BODIpq3Y.js.map → storeNetworkFeeSignature-tprCigR1.js.map} +1 -1
- package/dist/chunks/{token-addresses-D0v5cR1j.js → token-addresses-Ddar0FyS.js} +130 -124
- package/dist/chunks/token-addresses-Ddar0FyS.js.map +1 -0
- package/dist/chunks/{token-addresses-nzvTOi24.cjs → token-addresses-DvY-Mw7b.cjs} +2 -2
- package/dist/chunks/token-addresses-DvY-Mw7b.cjs.map +1 -0
- package/dist/chunks/{tokens-BkvA0Gp1.cjs → tokens-CBsz6l_2.cjs} +2 -2
- package/dist/chunks/{tokens-BkvA0Gp1.cjs.map → tokens-CBsz6l_2.cjs.map} +1 -1
- package/dist/chunks/{tokens-DgC1hfkm.js → tokens-HhVpKe3K.js} +2 -2
- package/dist/chunks/{tokens-DgC1hfkm.js.map → tokens-HhVpKe3K.js.map} +1 -1
- package/dist/chunks/{unstakeLBTC-BrVLnaac.js → unstakeLBTC-Bg8OsAMV.js} +5 -5
- package/dist/chunks/{unstakeLBTC-BrVLnaac.js.map → unstakeLBTC-Bg8OsAMV.js.map} +1 -1
- package/dist/chunks/{unstakeLBTC-3bwLj1qT.cjs → unstakeLBTC-BmHvDxBN.cjs} +2 -2
- package/dist/chunks/{unstakeLBTC-3bwLj1qT.cjs.map → unstakeLBTC-BmHvDxBN.cjs.map} +1 -1
- package/dist/chunks/{withdraw-BKEovicU.cjs → withdraw-Bkp5-2dG.cjs} +2 -2
- package/dist/chunks/{withdraw-BKEovicU.cjs.map → withdraw-Bkp5-2dG.cjs.map} +1 -1
- package/dist/chunks/{withdraw-rndehhDn.js → withdraw-kf8mYbYH.js} +4 -4
- package/dist/chunks/{withdraw-rndehhDn.js.map → withdraw-kf8mYbYH.js.map} +1 -1
- package/dist/chunks/{wrapToBtce-CML1FYEZ.js → wrapToBtce-By2mh503.js} +5 -5
- package/dist/chunks/{wrapToBtce-CML1FYEZ.js.map → wrapToBtce-By2mh503.js.map} +1 -1
- package/dist/chunks/{wrapToBtce-BVu8ALEo.cjs → wrapToBtce-DDeIlv3d.cjs} +2 -2
- package/dist/chunks/{wrapToBtce-BVu8ALEo.cjs.map → wrapToBtce-DDeIlv3d.cjs.map} +1 -1
- package/dist/contracts.cjs +1 -1
- package/dist/contracts.js +3 -3
- package/dist/core/assets/catalog.d.ts.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +32 -32
- package/dist/defi.cjs +1 -1
- package/dist/defi.js +2 -2
- package/dist/entries/core.d.ts +1 -1
- package/dist/entries/core.d.ts.map +1 -1
- package/dist/evm.cjs +1 -1
- package/dist/evm.js +4 -4
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -36
- package/dist/metrics.cjs +1 -1
- package/dist/metrics.js +1 -1
- package/dist/shared/constants/statusConstants.d.ts +7 -3
- package/dist/shared/constants/statusConstants.d.ts.map +1 -1
- package/dist/shared/deposits/depositStatus.d.ts.map +1 -1
- package/dist/tokens/token-addresses.d.ts.map +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +4 -4
- package/dist/vaults.cjs +1 -1
- package/dist/vaults.js +7 -7
- package/package.json +2 -2
- package/dist/chains/solana/actions/unstake/config/solana.d.ts +0 -21
- package/dist/chains/solana/actions/unstake/config/solana.d.ts.map +0 -1
- package/dist/chunks/BtcActions-Bic_HKkw.cjs +0 -2
- package/dist/chunks/BtcActions-Bic_HKkw.cjs.map +0 -1
- package/dist/chunks/BtcActions-CI5XotUx.js.map +0 -1
- package/dist/chunks/ReferralsClient-AxhLoWRT.js.map +0 -1
- package/dist/chunks/ReferralsClient-bZo9Jpg6.cjs +0 -2
- package/dist/chunks/ReferralsClient-bZo9Jpg6.cjs.map +0 -1
- package/dist/chunks/depositStatus-D5t8HN_A.cjs +0 -2
- package/dist/chunks/events-BfRsYM_-.cjs +0 -2
- package/dist/chunks/events-BfRsYM_-.cjs.map +0 -1
- package/dist/chunks/events-LMs7IA1e.js +0 -1108
- package/dist/chunks/events-LMs7IA1e.js.map +0 -1
- package/dist/chunks/statusConstants-BU4PglPs.js.map +0 -1
- package/dist/chunks/statusConstants-CCKi5qUm.cjs +0 -2
- package/dist/chunks/statusConstants-CCKi5qUm.cjs.map +0 -1
- package/dist/chunks/token-addresses-D0v5cR1j.js.map +0 -1
- package/dist/chunks/token-addresses-nzvTOi24.cjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const f=require("bignumber.js"),n=require("./tokens-
|
|
1
|
+
"use strict";const f=require("bignumber.js"),n=require("./tokens-CBsz6l_2.cjs"),l=require("./token-addresses-DvY-Mw7b.cjs"),q=require("./numbers-3LtmxfD8.cjs"),u=require("./config-ow9X5H0c.cjs"),B=require("./time-I-BeyUkG.cjs");async function D({amount:m,approve:h=!0,token:w=l.Token.LBTC,vaultKey:o=u.Vault.Veda,account:s,chainId:e,provider:p,rpcUrl:i,env:b}){const t=u.VAULTS[o];if(!t)throw new Error(`Unknown vault key: ${o}`);if(!u.isVedaVaultChain(e))throw new Error(`Unsupported chain id: ${e}. Please switch to one of the supported chains: ${t.chains.join(", ")}`);const r=n.makePublicClient({chainId:e,rpcUrl:i}),C=l.makeWalletClient({provider:p,chainId:e}),a=await n.getTokenInfo(w,e,b,i);if(!a)throw new Error(`Unknown deposit token: ${w}`);const c=f(m),d=q.toBigInt(n.toBaseDenomination(c,a.decimals)),x=await r.readContract({address:a.address,abi:a.abi,functionName:"allowance",args:[s,t.vaultContract.address]}),$=n.fromBaseDenomination(String(x),a.decimals),k=await r.readContract({address:a.address,abi:a.abi,functionName:"balanceOf",args:[s]}),g=n.fromBaseDenomination(String(k),a.decimals);if(c.isGreaterThan(g))throw new Error(`The deposit amount exceeds the account's balance.
|
|
2
2
|
Deposit amount: ${c.toFixed()}
|
|
3
3
|
Balance: ${g.toFixed()}`);if(c.isGreaterThan($)){const A=`The deposit amount exceeds allowance.
|
|
4
4
|
Deposit amount: ${c.toFixed()}
|
|
@@ -9,4 +9,4 @@ Balance: ${$.toFixed()}`);if(c.isGreaterThan(g)){const T=`The withdraw amount ex
|
|
|
9
9
|
Withdraw amount: ${c.toFixed()}
|
|
10
10
|
Allowance: ${g.toFixed()}`;if(!h)throw new Error(T);try{console.info(`Trying to approve ${d}`);const{request:E}=await r.simulateContract({account:s,chain:l.CHAIN_ID_TO_VIEM_CHAIN_MAP[e],address:t.vaultContract.address,abi:t.vaultContract.abi,functionName:"approve",args:[t.withdrawQueueContracts[e].address,d]}),N=await C.writeContract(E);console.info(`Approve tx hash: ${N}`),console.info(`Approved ${d} for ${t.vaultContract.address}`)}catch(E){const N=n.getErrorMessage(E);throw new Error(`Could not approve ${d} for ${t.vaultContract.address}.
|
|
11
11
|
Reason: ${N}`)}}const _=f(Date.now()).dividedBy(1e3).plus(f(t.queueWithdrawDaysValid).multipliedBy(B.DAY/1e3)).decimalPlaces(0,f.ROUND_DOWN),V=f(t.queueWithdrawDiscountPercent).multipliedBy(1e4),{request:A}=await r.simulateContract({account:s,chain:l.CHAIN_ID_TO_VIEM_CHAIN_MAP[e],address:t.withdrawQueueContracts[e].address,abi:t.withdrawQueueContracts[e].abi,functionName:"safeUpdateAtomicRequest",args:[t.vaultContract.address,a.address,[_.toFixed(0),0n,d,!1],t.accountantContract.address,V.toFixed(0)]});return await C.writeContract(A)}async function M({token:m=l.Token.LBTC,vaultKey:h=u.Vault.Veda,account:w,chainId:o,provider:s,rpcUrl:e,env:p}){const i=u.VAULTS[h];if(!i)throw new Error(`Unknown vault key: ${h}`);if(!u.isVedaVaultChain(o))throw new Error(`Unsupported chain id: ${o}. Please switch to one of the supported chains: ${i.chains.join(", ")}`);const b=n.makePublicClient({chainId:o,rpcUrl:e}),t=l.makeWalletClient({provider:s,chainId:o}),r=await n.getTokenInfo(m,o,p,e);if(!r)throw new Error(`Unknown withdraw token: ${m}`);const{request:C}=await b.simulateContract({account:w,chain:l.CHAIN_ID_TO_VIEM_CHAIN_MAP[o],address:i.withdrawQueueContracts[o].address,abi:i.withdrawQueueContracts[o].abi,functionName:"updateAtomicRequest",args:[i.vaultContract.address,r.address,[0,0,0,!1]]});return await t.writeContract(C)}exports.cancelWithdraw=M;exports.deposit=D;exports.queueWithdraw=H;
|
|
12
|
-
//# sourceMappingURL=withdraw-
|
|
12
|
+
//# sourceMappingURL=withdraw-Bkp5-2dG.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdraw-BKEovicU.cjs","sources":["../../src/vaults/lib/ops/deposit.ts","../../src/vaults/lib/ops/withdraw.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type DepositParameters = {\n /** The amount to be deposited into the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Deposits specified amount to the chosen DeFi vault.\n * @param {DepositParameters} parameters\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function deposit({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: DepositParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const depositToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!depositToken) {\n throw new Error(`Unknown deposit token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(\n toBaseDenomination(amount, depositToken.decimals),\n );\n\n const allowanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'allowance',\n args: [account, vault.vaultContract.address],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n depositToken.decimals,\n );\n\n const balanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n depositToken.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The deposit amount exceeds the account's balance. \\nDeposit amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The deposit amount exceeds allowance. \\nDeposit amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n console.info(exceededMessage);\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'approve',\n args: [vault.vaultContract.address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // deposit funds via the teller contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.tellerContracts[chainId].address,\n abi: vault.tellerContracts[chainId].abi,\n functionName: 'deposit',\n args: [depositToken.address, amountBase, 0n],\n });\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { DAY } from '../../../utils/time';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type QueueWithdrawParameters = {\n /** The amount to be withdrawn from the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the withdraw amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Queues withdrawal from the DeFi vault.\n * @param {QueueWithdrawParameters} parameters - The parameters.\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function queueWithdraw({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: QueueWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(toBaseDenomination(amount, vault.decimals));\n\n const balanceRaw = await publicClient.readContract({\n address: vault.lensContract.address,\n abi: vault.lensContract.abi,\n functionName: 'balanceOf',\n args: [account, vault.vaultContract.address],\n });\n const balance = fromBaseDenomination(String(balanceRaw), vault.decimals);\n\n const allowanceRaw = await publicClient.readContract({\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'allowance',\n args: [account, vault.withdrawQueueContracts[chainId].address],\n });\n const allowance = fromBaseDenomination(String(allowanceRaw), vault.decimals);\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The withdraw amount exceeds the account's balance. \\nWithdraw amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The withdraw amount exceeds allowance. \\nWithdraw amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'approve',\n args: [vault.withdrawQueueContracts[chainId].address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // queue withdraw vault token to wihdraw token via the withdraw queue contract\n const expiry = BigNumber(Date.now())\n .dividedBy(1000)\n .plus(BigNumber(vault.queueWithdrawDaysValid).multipliedBy(DAY / 1000))\n .decimalPlaces(0, BigNumber.ROUND_DOWN); // expiry = now(seconds) + days(seconds)\n\n const discount = BigNumber(vault.queueWithdrawDiscountPercent).multipliedBy(\n 10000, // 1% = 10000\n );\n\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'safeUpdateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [expiry.toFixed(0), 0n, amountBase, false],\n vault.accountantContract.address,\n discount.toFixed(0),\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n\nexport type CancelWithdrawParameters = Pick<\n QueueWithdrawParameters,\n 'token' | 'vaultKey'\n> &\n CommonWriteParameters;\n\n/**\n * Cancels queued withdrawal.\n * @param {CancelWithdrawParameters} parameters - The parameters.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n * @returns\n */\nexport async function cancelWithdraw({\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: CancelWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n // cancel withdrawal via withdraw queue contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'updateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [0, 0, 0, false],\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n"],"names":["deposit","amountRaw","approve","token","Token","vaultKey","Vault","account","chainId","provider","rpcUrl","env","vault","VAULTS","isVedaVaultChain","publicClient","makePublicClient","walletClient","makeWalletClient","depositToken","getTokenInfo","amount","BigNumber","amountBase","toBigInt","toBaseDenomination","allowanceRaw","allowance","fromBaseDenomination","balanceRaw","balance","exceededMessage","request","CHAIN_ID_TO_VIEM_CHAIN_MAP","txHash","err","msg","getErrorMessage","queueWithdraw","withdrawToken","expiry","DAY","discount","cancelWithdraw"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"withdraw-Bkp5-2dG.cjs","sources":["../../src/vaults/lib/ops/deposit.ts","../../src/vaults/lib/ops/withdraw.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type DepositParameters = {\n /** The amount to be deposited into the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Deposits specified amount to the chosen DeFi vault.\n * @param {DepositParameters} parameters\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function deposit({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: DepositParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const depositToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!depositToken) {\n throw new Error(`Unknown deposit token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(\n toBaseDenomination(amount, depositToken.decimals),\n );\n\n const allowanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'allowance',\n args: [account, vault.vaultContract.address],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n depositToken.decimals,\n );\n\n const balanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n depositToken.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The deposit amount exceeds the account's balance. \\nDeposit amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The deposit amount exceeds allowance. \\nDeposit amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n console.info(exceededMessage);\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'approve',\n args: [vault.vaultContract.address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // deposit funds via the teller contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.tellerContracts[chainId].address,\n abi: vault.tellerContracts[chainId].abi,\n functionName: 'deposit',\n args: [depositToken.address, amountBase, 0n],\n });\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { DAY } from '../../../utils/time';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type QueueWithdrawParameters = {\n /** The amount to be withdrawn from the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the withdraw amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Queues withdrawal from the DeFi vault.\n * @param {QueueWithdrawParameters} parameters - The parameters.\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function queueWithdraw({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: QueueWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(toBaseDenomination(amount, vault.decimals));\n\n const balanceRaw = await publicClient.readContract({\n address: vault.lensContract.address,\n abi: vault.lensContract.abi,\n functionName: 'balanceOf',\n args: [account, vault.vaultContract.address],\n });\n const balance = fromBaseDenomination(String(balanceRaw), vault.decimals);\n\n const allowanceRaw = await publicClient.readContract({\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'allowance',\n args: [account, vault.withdrawQueueContracts[chainId].address],\n });\n const allowance = fromBaseDenomination(String(allowanceRaw), vault.decimals);\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The withdraw amount exceeds the account's balance. \\nWithdraw amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The withdraw amount exceeds allowance. \\nWithdraw amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'approve',\n args: [vault.withdrawQueueContracts[chainId].address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // queue withdraw vault token to wihdraw token via the withdraw queue contract\n const expiry = BigNumber(Date.now())\n .dividedBy(1000)\n .plus(BigNumber(vault.queueWithdrawDaysValid).multipliedBy(DAY / 1000))\n .decimalPlaces(0, BigNumber.ROUND_DOWN); // expiry = now(seconds) + days(seconds)\n\n const discount = BigNumber(vault.queueWithdrawDiscountPercent).multipliedBy(\n 10000, // 1% = 10000\n );\n\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'safeUpdateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [expiry.toFixed(0), 0n, amountBase, false],\n vault.accountantContract.address,\n discount.toFixed(0),\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n\nexport type CancelWithdrawParameters = Pick<\n QueueWithdrawParameters,\n 'token' | 'vaultKey'\n> &\n CommonWriteParameters;\n\n/**\n * Cancels queued withdrawal.\n * @param {CancelWithdrawParameters} parameters - The parameters.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n * @returns\n */\nexport async function cancelWithdraw({\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: CancelWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n // cancel withdrawal via withdraw queue contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'updateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [0, 0, 0, false],\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n"],"names":["deposit","amountRaw","approve","token","Token","vaultKey","Vault","account","chainId","provider","rpcUrl","env","vault","VAULTS","isVedaVaultChain","publicClient","makePublicClient","walletClient","makeWalletClient","depositToken","getTokenInfo","amount","BigNumber","amountBase","toBigInt","toBaseDenomination","allowanceRaw","allowance","fromBaseDenomination","balanceRaw","balance","exceededMessage","request","CHAIN_ID_TO_VIEM_CHAIN_MAP","txHash","err","msg","getErrorMessage","queueWithdraw","withdrawToken","expiry","DAY","discount","cancelWithdraw"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import m from "bignumber.js";
|
|
2
|
-
import { makePublicClient as A, getTokenInfo as q, toBaseDenomination as V, fromBaseDenomination as g, getErrorMessage as W } from "./tokens-
|
|
3
|
-
import { makeWalletClient as y, Token as D, CHAIN_ID_TO_VIEM_CHAIN_MAP as b } from "./token-addresses-
|
|
2
|
+
import { makePublicClient as A, getTokenInfo as q, toBaseDenomination as V, fromBaseDenomination as g, getErrorMessage as W } from "./tokens-HhVpKe3K.js";
|
|
3
|
+
import { makeWalletClient as y, Token as D, CHAIN_ID_TO_VIEM_CHAIN_MAP as b } from "./token-addresses-Ddar0FyS.js";
|
|
4
4
|
import { toBigInt as P } from "./numbers-CclN2Ohk.js";
|
|
5
|
-
import { Vault as F, isVedaVaultChain as H, VAULTS as R } from "./config-
|
|
5
|
+
import { Vault as F, isVedaVaultChain as H, VAULTS as R } from "./config-C8BfN_9P.js";
|
|
6
6
|
import { DAY as Q } from "./time-Sa5gggPG.js";
|
|
7
7
|
async function j({
|
|
8
8
|
amount: l,
|
|
@@ -206,4 +206,4 @@ export {
|
|
|
206
206
|
j as deposit,
|
|
207
207
|
Y as queueWithdraw
|
|
208
208
|
};
|
|
209
|
-
//# sourceMappingURL=withdraw-
|
|
209
|
+
//# sourceMappingURL=withdraw-kf8mYbYH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withdraw-rndehhDn.js","sources":["../../src/vaults/lib/ops/deposit.ts","../../src/vaults/lib/ops/withdraw.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type DepositParameters = {\n /** The amount to be deposited into the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Deposits specified amount to the chosen DeFi vault.\n * @param {DepositParameters} parameters\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function deposit({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: DepositParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const depositToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!depositToken) {\n throw new Error(`Unknown deposit token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(\n toBaseDenomination(amount, depositToken.decimals),\n );\n\n const allowanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'allowance',\n args: [account, vault.vaultContract.address],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n depositToken.decimals,\n );\n\n const balanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n depositToken.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The deposit amount exceeds the account's balance. \\nDeposit amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The deposit amount exceeds allowance. \\nDeposit amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n console.info(exceededMessage);\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'approve',\n args: [vault.vaultContract.address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // deposit funds via the teller contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.tellerContracts[chainId].address,\n abi: vault.tellerContracts[chainId].abi,\n functionName: 'deposit',\n args: [depositToken.address, amountBase, 0n],\n });\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { DAY } from '../../../utils/time';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type QueueWithdrawParameters = {\n /** The amount to be withdrawn from the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the withdraw amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Queues withdrawal from the DeFi vault.\n * @param {QueueWithdrawParameters} parameters - The parameters.\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function queueWithdraw({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: QueueWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(toBaseDenomination(amount, vault.decimals));\n\n const balanceRaw = await publicClient.readContract({\n address: vault.lensContract.address,\n abi: vault.lensContract.abi,\n functionName: 'balanceOf',\n args: [account, vault.vaultContract.address],\n });\n const balance = fromBaseDenomination(String(balanceRaw), vault.decimals);\n\n const allowanceRaw = await publicClient.readContract({\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'allowance',\n args: [account, vault.withdrawQueueContracts[chainId].address],\n });\n const allowance = fromBaseDenomination(String(allowanceRaw), vault.decimals);\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The withdraw amount exceeds the account's balance. \\nWithdraw amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The withdraw amount exceeds allowance. \\nWithdraw amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'approve',\n args: [vault.withdrawQueueContracts[chainId].address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // queue withdraw vault token to wihdraw token via the withdraw queue contract\n const expiry = BigNumber(Date.now())\n .dividedBy(1000)\n .plus(BigNumber(vault.queueWithdrawDaysValid).multipliedBy(DAY / 1000))\n .decimalPlaces(0, BigNumber.ROUND_DOWN); // expiry = now(seconds) + days(seconds)\n\n const discount = BigNumber(vault.queueWithdrawDiscountPercent).multipliedBy(\n 10000, // 1% = 10000\n );\n\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'safeUpdateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [expiry.toFixed(0), 0n, amountBase, false],\n vault.accountantContract.address,\n discount.toFixed(0),\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n\nexport type CancelWithdrawParameters = Pick<\n QueueWithdrawParameters,\n 'token' | 'vaultKey'\n> &\n CommonWriteParameters;\n\n/**\n * Cancels queued withdrawal.\n * @param {CancelWithdrawParameters} parameters - The parameters.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n * @returns\n */\nexport async function cancelWithdraw({\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: CancelWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n // cancel withdrawal via withdraw queue contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'updateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [0, 0, 0, false],\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n"],"names":["deposit","amountRaw","approve","token","Token","vaultKey","Vault","account","chainId","provider","rpcUrl","env","vault","VAULTS","isVedaVaultChain","publicClient","makePublicClient","walletClient","makeWalletClient","depositToken","getTokenInfo","amount","BigNumber","amountBase","toBigInt","toBaseDenomination","allowanceRaw","allowance","fromBaseDenomination","balanceRaw","balance","exceededMessage","request","CHAIN_ID_TO_VIEM_CHAIN_MAP","txHash","err","msg","getErrorMessage","queueWithdraw","withdrawToken","expiry","DAY","discount","cancelWithdraw"],"mappings":";;;;;;AA6CA,eAAsBA,EAAQ;AAAA,EAC5B,QAAQC;AAAA,EACR,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQC,EAAM;AAAA,EACd,UAAAC,IAAWC,EAAM;AAAA,EACjB,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,KAAAC;AACF,GAAsB;AACpB,QAAMC,IAAQC,EAAOR,CAAQ;AAC7B,MAAI,CAACO;AACH,UAAM,IAAI,MAAM,sBAAsBP,CAAQ,EAAE;AAGlD,MAAI,CAACS,EAAiBN,CAAO;AAC3B,UAAM,IAAI;AAAA,MACR,yBAAyBA,CAAO,mDAAmDI,EAAM,OAAO,KAAK,IAAI,CAAC;AAAA,IAAA;AAI9G,QAAMG,IAAeC,EAAiB,EAAE,SAAAR,GAAS,QAAAE,GAAQ,GACnDO,IAAeC,EAAiB,EAAE,UAAAT,GAAU,SAAAD,GAAS,GAErDW,IAAe,MAAMC,EAAajB,GAAOK,GAASG,GAAKD,CAAM;AACnE,MAAI,CAACS;AACH,UAAM,IAAI,MAAM,0BAA0BhB,CAAK,EAAE;AAGnD,QAAMkB,IAASC,EAAUrB,CAAS,GAC5BsB,IAAaC;AAAA,IACjBC,EAAmBJ,GAAQF,EAAa,QAAQ;AAAA,EAAA,GAG5CO,IAAe,MAAMX,EAAa,aAAa;AAAA,IACnD,SAASI,EAAa;AAAA,IACtB,KAAKA,EAAa;AAAA,IAClB,cAAc;AAAA,IACd,MAAM,CAACZ,GAASK,EAAM,cAAc,OAAO;AAAA,EAAA,CAC5C,GACKe,IAAYC;AAAA,IAChB,OAAOF,CAAY;AAAA,IACnBP,EAAa;AAAA,EAAA,GAGTU,IAAa,MAAMd,EAAa,aAAa;AAAA,IACjD,SAASI,EAAa;AAAA,IACtB,KAAKA,EAAa;AAAA,IAClB,cAAc;AAAA,IACd,MAAM,CAACZ,CAAO;AAAA,EAAA,CACf,GACKuB,IAAUF;AAAA,IACd,OAAOC,CAAU;AAAA,IACjBV,EAAa;AAAA,EAAA;AAIf,MAAIE,EAAO,cAAcS,CAAO;AAC9B,UAAM,IAAI;AAAA,MACR;AAAA,kBAAuET,EAAO,SAAS;AAAA,WAAeS,EAAQ,SAAS;AAAA,IAAA;AAK3H,MAAIT,EAAO,cAAcM,CAAS,GAAG;AACnC,UAAMI,IAAkB;AAAA,kBAA2DV,EAAO,SAAS;AAAA,aAAiBM,EAAU,SAAS;AACvI,QAAI,CAACzB;AACH,YAAM,IAAI,MAAM6B,CAAe;AAIjC,YAAQ,KAAKA,CAAe;AAC5B,QAAI;AACF,cAAQ,KAAK,qBAAqBR,CAAU,EAAE;AAC9C,YAAM,EAAE,SAAAS,EAAAA,IAAY,MAAMjB,EAAa,iBAAiB;AAAA,QACtD,SAAAR;AAAA,QACA,OAAO0B,EAA2BzB,CAAO;AAAA,QACzC,SAASW,EAAa;AAAA,QACtB,KAAKA,EAAa;AAAA,QAClB,cAAc;AAAA,QACd,MAAM,CAACP,EAAM,cAAc,SAASW,CAAU;AAAA,MAAA,CAC/C,GAEKW,IAAS,MAAMjB,EAAa,cAAce,CAAO;AACvD,cAAQ,KAAK,oBAAoBE,CAAM,EAAE,GACzC,QAAQ,KAAK,YAAYX,CAAU,QAAQX,EAAM,cAAc,OAAO,EAAE;AAAA,IAC1E,SAASuB,GAAK;AACZ,YAAMC,IAAMC,EAAgBF,CAAG;AAC/B,YAAM,IAAI;AAAA,QACR,qBAAqBZ,CAAU,QAAQX,EAAM,cAAc,OAAO;AAAA,UAAewB,CAAG;AAAA,MAAA;AAAA,IAExF;AAAA,EACF;AAGA,QAAM,EAAE,SAAAJ,EAAA,IAAY,MAAMjB,EAAa,iBAAiB;AAAA,IACtD,SAAAR;AAAA,IACA,OAAO0B,EAA2BzB,CAAO;AAAA,IACzC,SAASI,EAAM,gBAAgBJ,CAAO,EAAE;AAAA,IACxC,KAAKI,EAAM,gBAAgBJ,CAAO,EAAE;AAAA,IACpC,cAAc;AAAA,IACd,MAAM,CAACW,EAAa,SAASI,GAAY,EAAE;AAAA,EAAA,CAC5C;AAED,SADe,MAAMN,EAAa,cAAce,CAAO;AAEzD;ACzGA,eAAsBM,EAAc;AAAA,EAClC,QAAQrC;AAAA,EACR,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQC,EAAM;AAAA,EACd,UAAAC,IAAWC,EAAM;AAAA,EACjB,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,KAAAC;AACF,GAA4B;AAC1B,QAAMC,IAAQC,EAAOR,CAAQ;AAC7B,MAAI,CAACO;AACH,UAAM,IAAI,MAAM,sBAAsBP,CAAQ,EAAE;AAGlD,MAAI,CAACS,EAAiBN,CAAO;AAC3B,UAAM,IAAI;AAAA,MACR,yBAAyBA,CAAO,mDAAmDI,EAAM,OAAO,KAAK,IAAI,CAAC;AAAA,IAAA;AAI9G,QAAMG,IAAeC,EAAiB,EAAE,SAAAR,GAAS,QAAAE,GAAQ,GACnDO,IAAeC,EAAiB,EAAE,UAAAT,GAAU,SAAAD,GAAS,GAErD+B,IAAgB,MAAMnB,EAAajB,GAAOK,GAASG,GAAKD,CAAM;AACpE,MAAI,CAAC6B;AACH,UAAM,IAAI,MAAM,2BAA2BpC,CAAK,EAAE;AAGpD,QAAMkB,IAASC,EAAUrB,CAAS,GAC5BsB,IAAaC,EAASC,EAAmBJ,GAAQT,EAAM,QAAQ,CAAC,GAEhEiB,IAAa,MAAMd,EAAa,aAAa;AAAA,IACjD,SAASH,EAAM,aAAa;AAAA,IAC5B,KAAKA,EAAM,aAAa;AAAA,IACxB,cAAc;AAAA,IACd,MAAM,CAACL,GAASK,EAAM,cAAc,OAAO;AAAA,EAAA,CAC5C,GACKkB,IAAUF,EAAqB,OAAOC,CAAU,GAAGjB,EAAM,QAAQ,GAEjEc,IAAe,MAAMX,EAAa,aAAa;AAAA,IACnD,SAASH,EAAM,cAAc;AAAA,IAC7B,KAAKA,EAAM,cAAc;AAAA,IACzB,cAAc;AAAA,IACd,MAAM,CAACL,GAASK,EAAM,uBAAuBJ,CAAO,EAAE,OAAO;AAAA,EAAA,CAC9D,GACKmB,IAAYC,EAAqB,OAAOF,CAAY,GAAGd,EAAM,QAAQ;AAG3E,MAAIS,EAAO,cAAcS,CAAO;AAC9B,UAAM,IAAI;AAAA,MACR;AAAA,mBAAyET,EAAO,SAAS;AAAA,WAAeS,EAAQ,SAAS;AAAA,IAAA;AAK7H,MAAIT,EAAO,cAAcM,CAAS,GAAG;AACnC,UAAMI,IAAkB;AAAA,mBAA6DV,EAAO,SAAS;AAAA,aAAiBM,EAAU,SAAS;AACzI,QAAI,CAACzB;AACH,YAAM,IAAI,MAAM6B,CAAe;AAIjC,QAAI;AACF,cAAQ,KAAK,qBAAqBR,CAAU,EAAE;AAC9C,YAAM,EAAE,SAAAS,EAAAA,IAAY,MAAMjB,EAAa,iBAAiB;AAAA,QACtD,SAAAR;AAAA,QACA,OAAO0B,EAA2BzB,CAAO;AAAA,QACzC,SAASI,EAAM,cAAc;AAAA,QAC7B,KAAKA,EAAM,cAAc;AAAA,QACzB,cAAc;AAAA,QACd,MAAM,CAACA,EAAM,uBAAuBJ,CAAO,EAAE,SAASe,CAAU;AAAA,MAAA,CACjE,GAEKW,IAAS,MAAMjB,EAAa,cAAce,CAAO;AACvD,cAAQ,KAAK,oBAAoBE,CAAM,EAAE,GACzC,QAAQ,KAAK,YAAYX,CAAU,QAAQX,EAAM,cAAc,OAAO,EAAE;AAAA,IAC1E,SAASuB,GAAK;AACZ,YAAMC,IAAMC,EAAgBF,CAAG;AAC/B,YAAM,IAAI;AAAA,QACR,qBAAqBZ,CAAU,QAAQX,EAAM,cAAc,OAAO;AAAA,UAAewB,CAAG;AAAA,MAAA;AAAA,IAExF;AAAA,EACF;AAGA,QAAMI,IAASlB,EAAU,KAAK,IAAA,CAAK,EAChC,UAAU,GAAI,EACd,KAAKA,EAAUV,EAAM,sBAAsB,EAAE,aAAa6B,IAAM,GAAI,CAAC,EACrE,cAAc,GAAGnB,EAAU,UAAU,GAElCoB,IAAWpB,EAAUV,EAAM,4BAA4B,EAAE;AAAA,IAC7D;AAAA;AAAA,EAAA,GAGI,EAAE,SAAAoB,EAAA,IAAY,MAAMjB,EAAa,iBAAiB;AAAA,IACtD,SAAAR;AAAA,IACA,OAAO0B,EAA2BzB,CAAO;AAAA,IACzC,SAASI,EAAM,uBAAuBJ,CAAO,EAAE;AAAA,IAC/C,KAAKI,EAAM,uBAAuBJ,CAAO,EAAE;AAAA,IAC3C,cAAc;AAAA,IACd,MAAM;AAAA,MACJI,EAAM,cAAc;AAAA,MACpB2B,EAAc;AAAA,MACd,CAACC,EAAO,QAAQ,CAAC,GAAG,IAAIjB,GAAY,EAAK;AAAA,MACzCX,EAAM,mBAAmB;AAAA,MACzB8B,EAAS,QAAQ,CAAC;AAAA,IAAA;AAAA,EACpB,CACD;AAGD,SADe,MAAMzB,EAAa,cAAce,CAAO;AAEzD;AAqBA,eAAsBW,EAAe;AAAA,EACnC,OAAAxC,IAAQC,EAAM;AAAA,EACd,UAAAC,IAAWC,EAAM;AAAA,EACjB,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,KAAAC;AACF,GAA6B;AAC3B,QAAMC,IAAQC,EAAOR,CAAQ;AAC7B,MAAI,CAACO;AACH,UAAM,IAAI,MAAM,sBAAsBP,CAAQ,EAAE;AAGlD,MAAI,CAACS,EAAiBN,CAAO;AAC3B,UAAM,IAAI;AAAA,MACR,yBAAyBA,CAAO,mDAAmDI,EAAM,OAAO,KAAK,IAAI,CAAC;AAAA,IAAA;AAI9G,QAAMG,IAAeC,EAAiB,EAAE,SAAAR,GAAS,QAAAE,GAAQ,GACnDO,IAAeC,EAAiB,EAAE,UAAAT,GAAU,SAAAD,GAAS,GAErD+B,IAAgB,MAAMnB,EAAajB,GAAOK,GAASG,GAAKD,CAAM;AACpE,MAAI,CAAC6B;AACH,UAAM,IAAI,MAAM,2BAA2BpC,CAAK,EAAE;AAIpD,QAAM,EAAE,SAAA6B,EAAA,IAAY,MAAMjB,EAAa,iBAAiB;AAAA,IACtD,SAAAR;AAAA,IACA,OAAO0B,EAA2BzB,CAAO;AAAA,IACzC,SAASI,EAAM,uBAAuBJ,CAAO,EAAE;AAAA,IAC/C,KAAKI,EAAM,uBAAuBJ,CAAO,EAAE;AAAA,IAC3C,cAAc;AAAA,IACd,MAAM;AAAA,MACJI,EAAM,cAAc;AAAA,MACpB2B,EAAc;AAAA,MACd,CAAC,GAAG,GAAG,GAAG,EAAK;AAAA,IAAA;AAAA,EACjB,CACD;AAGD,SADe,MAAMtB,EAAa,cAAce,CAAO;AAEzD;"}
|
|
1
|
+
{"version":3,"file":"withdraw-kf8mYbYH.js","sources":["../../src/vaults/lib/ops/deposit.ts","../../src/vaults/lib/ops/withdraw.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type DepositParameters = {\n /** The amount to be deposited into the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Deposits specified amount to the chosen DeFi vault.\n * @param {DepositParameters} parameters\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function deposit({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: DepositParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const depositToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!depositToken) {\n throw new Error(`Unknown deposit token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(\n toBaseDenomination(amount, depositToken.decimals),\n );\n\n const allowanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'allowance',\n args: [account, vault.vaultContract.address],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n depositToken.decimals,\n );\n\n const balanceRaw = await publicClient.readContract({\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n depositToken.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The deposit amount exceeds the account's balance. \\nDeposit amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The deposit amount exceeds allowance. \\nDeposit amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n console.info(exceededMessage);\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: depositToken.address,\n abi: depositToken.abi,\n functionName: 'approve',\n args: [vault.vaultContract.address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // deposit funds via the teller contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.tellerContracts[chainId].address,\n abi: vault.tellerContracts[chainId].abi,\n functionName: 'deposit',\n args: [depositToken.address, amountBase, 0n],\n });\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\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 { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../../tokens/tokens';\nimport { getErrorMessage } from '../../../utils/err';\nimport toBigInt from '../../../utils/numbers';\nimport { DAY } from '../../../utils/time';\nimport { isVedaVaultChain, Vault, VAULTS } from '../config';\n\nexport type QueueWithdrawParameters = {\n /** The amount to be withdrawn from the DeFi vault. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the withdraw amount exceeds allowance.\n */\n approve?: boolean;\n /** The optional deposit asset. */\n token?: Token;\n /** The vault identifier. */\n vaultKey?: Vault;\n} & CommonWriteParameters;\n\n/**\n * Queues withdrawal from the DeFi vault.\n * @param {QueueWithdrawParameters} parameters - The parameters.\n * @param {BigNumber.Value} parameters.amount - The deposit amount.\n * @param {boolean} parameters.approve - The optional flag determining whether approve actions should be performed.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n */\nexport async function queueWithdraw({\n amount: amountRaw,\n approve = true,\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: QueueWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n const amount = BigNumber(amountRaw);\n const amountBase = toBigInt(toBaseDenomination(amount, vault.decimals));\n\n const balanceRaw = await publicClient.readContract({\n address: vault.lensContract.address,\n abi: vault.lensContract.abi,\n functionName: 'balanceOf',\n args: [account, vault.vaultContract.address],\n });\n const balance = fromBaseDenomination(String(balanceRaw), vault.decimals);\n\n const allowanceRaw = await publicClient.readContract({\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'allowance',\n args: [account, vault.withdrawQueueContracts[chainId].address],\n });\n const allowance = fromBaseDenomination(String(allowanceRaw), vault.decimals);\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The withdraw amount exceeds the account's balance. \\nWithdraw amount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The withdraw amount exceeds allowance. \\nWithdraw amount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n try {\n console.info(`Trying to approve ${amountBase}`);\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.vaultContract.address,\n abi: vault.vaultContract.abi,\n functionName: 'approve',\n args: [vault.withdrawQueueContracts[chainId].address, amountBase],\n });\n\n const txHash = await walletClient.writeContract(request);\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${vault.vaultContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${vault.vaultContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n // queue withdraw vault token to wihdraw token via the withdraw queue contract\n const expiry = BigNumber(Date.now())\n .dividedBy(1000)\n .plus(BigNumber(vault.queueWithdrawDaysValid).multipliedBy(DAY / 1000))\n .decimalPlaces(0, BigNumber.ROUND_DOWN); // expiry = now(seconds) + days(seconds)\n\n const discount = BigNumber(vault.queueWithdrawDiscountPercent).multipliedBy(\n 10000, // 1% = 10000\n );\n\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'safeUpdateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [expiry.toFixed(0), 0n, amountBase, false],\n vault.accountantContract.address,\n discount.toFixed(0),\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n\nexport type CancelWithdrawParameters = Pick<\n QueueWithdrawParameters,\n 'token' | 'vaultKey'\n> &\n CommonWriteParameters;\n\n/**\n * Cancels queued withdrawal.\n * @param {CancelWithdrawParameters} parameters - The parameters.\n * @param {Token} parameters.token - The optional deposit asset.\n * @param {Vault} parameters.vaultKey - The vault identifier.\n * @param {Address} parameters.account - The EVM account address.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {EIP1193Provider} parameters.provider - The EIP1193 provider.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<Hash>}\n * @returns\n */\nexport async function cancelWithdraw({\n token = Token.LBTC,\n vaultKey = Vault.Veda,\n account,\n chainId,\n provider,\n rpcUrl,\n env,\n}: CancelWithdrawParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\n\n const withdrawToken = await getTokenInfo(token, chainId, env, rpcUrl);\n if (!withdrawToken) {\n throw new Error(`Unknown withdraw token: ${token}`);\n }\n\n // cancel withdrawal via withdraw queue contract\n const { request } = await publicClient.simulateContract({\n account,\n chain: CHAIN_ID_TO_VIEM_CHAIN_MAP[chainId],\n address: vault.withdrawQueueContracts[chainId].address,\n abi: vault.withdrawQueueContracts[chainId].abi,\n functionName: 'updateAtomicRequest',\n args: [\n vault.vaultContract.address,\n withdrawToken.address,\n [0, 0, 0, false],\n ],\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n"],"names":["deposit","amountRaw","approve","token","Token","vaultKey","Vault","account","chainId","provider","rpcUrl","env","vault","VAULTS","isVedaVaultChain","publicClient","makePublicClient","walletClient","makeWalletClient","depositToken","getTokenInfo","amount","BigNumber","amountBase","toBigInt","toBaseDenomination","allowanceRaw","allowance","fromBaseDenomination","balanceRaw","balance","exceededMessage","request","CHAIN_ID_TO_VIEM_CHAIN_MAP","txHash","err","msg","getErrorMessage","queueWithdraw","withdrawToken","expiry","DAY","discount","cancelWithdraw"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { determineEnv as M, makePublicClient as d, getTokenContractInfo as V, getErrorMessage as E, toBaseDenomination as T } from "./tokens-
|
|
2
|
-
import { Token as k, makeWalletClient as y, AddressKind as O, CHAIN_ID_TO_VIEM_CHAIN_MAP as R, isKatanaChain as P } from "./token-addresses-
|
|
1
|
+
import { determineEnv as M, makePublicClient as d, getTokenContractInfo as V, getErrorMessage as E, toBaseDenomination as T } from "./tokens-HhVpKe3K.js";
|
|
2
|
+
import { Token as k, makeWalletClient as y, AddressKind as O, CHAIN_ID_TO_VIEM_CHAIN_MAP as R, isKatanaChain as P } from "./token-addresses-Ddar0FyS.js";
|
|
3
3
|
import { fromSatoshi as C } from "./satoshi-CSoJBXc6.js";
|
|
4
4
|
import { p as j } from "./index-CfcQ_g3t.js";
|
|
5
5
|
import { zeroAddress as D, parseGwei as F, isAddress as h, getContract as B } from "viem";
|
|
6
|
-
import { estimateGasFees as H, ASSET_ROUTER_ABI as W } from "./unstakeLBTC-
|
|
6
|
+
import { estimateGasFees as H, ASSET_ROUTER_ABI as W } from "./unstakeLBTC-Bg8OsAMV.js";
|
|
7
7
|
import { ensureHex as A } from "./time-Sa5gggPG.js";
|
|
8
|
-
import { isBtceVaultChain as S, BTCE_VAULT as w, Vault as _, isVedaVaultChain as L, VAULTS as N, BTCE_VAULT_DECIMALS as v } from "./config-
|
|
8
|
+
import { isBtceVaultChain as S, BTCE_VAULT as w, Vault as _, isVedaVaultChain as L, VAULTS as N, BTCE_VAULT_DECIMALS as v } from "./config-C8BfN_9P.js";
|
|
9
9
|
import g from "bignumber.js";
|
|
10
10
|
import { toBigInt as $ } from "./numbers-CclN2Ohk.js";
|
|
11
11
|
async function nt({
|
|
@@ -295,4 +295,4 @@ export {
|
|
|
295
295
|
it as unwrapBtceToLbtcv,
|
|
296
296
|
wt as wrapToBtce
|
|
297
297
|
};
|
|
298
|
-
//# sourceMappingURL=wrapToBtce-
|
|
298
|
+
//# sourceMappingURL=wrapToBtce-By2mh503.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapToBtce-CML1FYEZ.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/unwrapBtceToLbtcv/unwrapBtceToLbtcv.ts","../../src/contract-functions/wrapToBtce/wrapToBtce.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 { isVedaVaultChain, Vault, VAULTS } from '../../vaults/lib/config';\n\nexport interface IGetShareValueParameters extends CommonParameters {\n /**\n * Optional DeFi vault identifier specifying the vault in use\n * @default {string} - \"veda\"\n */\n vaultKey?: Vault;\n}\n\n/**\n * Gets the value of a single share unit (in LBTC) from the specified vault.\n *\n * @param {IGetShareValueParameters} parameters - The parameters.\n * @param {Vault} parameters.vaultKey - The optional DeFi vault identifier.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<BigNumber>}\n */\nexport async function getShareValue({\n chainId,\n rpcUrl,\n vaultKey = Vault.Veda,\n}: IGetShareValueParameters): Promise<BigNumber> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 { isVedaVaultChain, Vault, VAULTS } from '../../vaults/lib/config';\nimport { getShareValue } from '../getShareValue';\n\nexport interface IGetSharesByAddressParameters extends CommonParameters {\n /**\n * The address of the share holder.\n */\n address: string;\n /**\n * Optional vault key specifying the vault in use\n * @default {string} - \"veda\"\n */\n vaultKey?: Vault;\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 * Gets the amount of LBTCv (Veda vault shares) owned by the provided address.\n *\n * NOTE: This returns only the user's direct LBTCv ERC20 balance. It does NOT\n * include shares held inside the BTCe wrapper vault. For the full Bitcoin Earn\n * position (LBTCv + BTCe valued in LBTC), use {@link getEarnPosition}.\n *\n * @param {IGetSharesByAddressParameters} parameters - The parameters.\n * @param {Vault} parameters.vaultKey - The optional DeFi vault identifier.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @return {Promise<IGetSharesByAddressResponse>}\n */\nexport async function getSharesByAddress({\n chainId,\n rpcUrl,\n address,\n vaultKey = Vault.Veda,\n}: IGetSharesByAddressParameters): Promise<IGetSharesByAddressResponse> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 getShareValue({ chainId, rpcUrl, vaultKey });\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 { getSharesByAddress } 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 LBTCv shares held at the address. */\n lbtcvShares: BigNumber;\n /** Raw BTCe wrapper shares held at the address. */\n btceShares: BigNumber;\n /** BTCe shares converted to LBTCv-equivalent via the wrapper's convertToAssets. */\n btceSharesInLbtcv: BigNumber;\n /** lbtcvShares + btceSharesInLbtcv (both in LBTCv units). */\n totalShares: BigNumber;\n /** Current LBTCv 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 (LBTCv + BTCe) on a single chain,\n * valued in LBTC.\n *\n * BTCe is an ERC4626 wrapper around the Veda vault's LBTCv share token. The\n * function reads both balances, converts BTCe shares to LBTCv-equivalent via\n * the wrapper's `convertToAssets`, sums the two LBTCv-denominated values, and\n * applies the Veda accountant's share value to 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 * LBTCv leg alone.\n *\n * Errors from either the LBTCv or BTCe reads propagate to the caller, since\n * silently returning zero would understate the user's balance and is unsafe\n * for an SDK consumed 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 getSharesByAddress({ chainId, rpcUrl, address }),\n btceSupported\n ? readBtceBalance({ chainId, rpcUrl, address })\n : Promise.resolve(0n),\n ]);\n\n let btceShares = ZERO;\n let btceSharesInLbtcv = ZERO;\n\n if (btceSupported && btceBalanceRaw > 0n) {\n btceShares = fromSatoshi(String(btceBalanceRaw));\n const lbtcvEquivalentRaw = await readBtceConvertToAssets({\n chainId,\n rpcUrl,\n shares: btceBalanceRaw,\n });\n btceSharesInLbtcv = fromSatoshi(String(lbtcvEquivalentRaw));\n }\n\n const lbtcvShares = sharesResult.balance;\n const exchangeRate = sharesResult.exchangeRate;\n const totalShares = lbtcvShares.plus(btceSharesInLbtcv);\n const position = totalShares.multipliedBy(exchangeRate);\n\n return {\n lbtcvShares,\n btceShares,\n btceSharesInLbtcv,\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 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 ${\n BigNumber(maxWithdrawRaw.toString())\n .shiftedBy(-BTCE_VAULT_DECIMALS)\n .toFixed()\n } 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","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 WrapToBtceParameters = {\n /** Address of the deposit token (e.g. LBTCv vault address, LBTC, wBTC). */\n tokenAddress: Address;\n /** Amount to wrap, in the deposit token's natural decimal units. */\n amount: BigNumber.Value;\n /** Decimals of the deposit token. */\n tokenDecimals: number;\n /** Receiver of the BTCe shares. Defaults to `account`. */\n receiver?: Address;\n /** Minimum BTCe shares to mint (slippage protection, in BTCe units). Defaults to 0. */\n minimumMint?: BigNumber.Value;\n} & CommonWriteParameters;\n\n/**\n * Wraps a supported deposit asset into BTCe shares via the wrapper's\n * multi-asset `deposit(token, assets, receiver, minShareAmount)` overload.\n *\n * Mirrors the lombard-app's `depositToWrapper` action 1:1: caller is\n * responsible for approving `tokenAddress` to the BTCe contract before\n * calling this. The SDK exposes `approveToken` for that.\n *\n * Returns the deposit transaction hash. Combine with `approveToken` and,\n * for a full BTC→BTCe flow, the existing stake/mint helpers.\n *\n * @returns {Promise<Hash>} The deposit transaction hash.\n */\nexport async function wrapToBtce({\n tokenAddress,\n amount: amountRaw,\n tokenDecimals,\n receiver,\n minimumMint = 0,\n account,\n chainId,\n provider,\n rpcUrl,\n}: WrapToBtceParameters): Promise<Hash> {\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error(`Invalid token address: ${tokenAddress}`);\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 const amount = BigNumber(amountRaw);\n if (!amount.isGreaterThan(0)) {\n throw new Error(\n `Wrap amount must be greater than zero. Received: ${amount.toFixed()}.`,\n );\n }\n\n const amountBase = toBigInt(toBaseDenomination(amount, tokenDecimals));\n const minMintBase = toBigInt(\n toBaseDenomination(BigNumber(minimumMint), BTCE_VAULT_DECIMALS),\n );\n\n const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\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: 'deposit',\n args: [\n tokenAddress,\n amountBase,\n receiver ?? account,\n minMintBase,\n ],\n });\n\n return await walletClient.writeContract(request);\n } catch (err) {\n // Preserve the original message so callers can detect specific revert reasons\n const msg = getErrorMessage(err);\n throw new Error(msg);\n }\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","getShareValue","vaultKey","Vault","vault","VAULTS","isVedaVaultChain","exchangeRate","err","errorMessage","getSharesByAddress","balanceValue","balance","ZERO","BigNumber","getEarnPosition","btceSupported","sharesResult","btceBalanceRaw","readBtceBalance","btceShares","btceSharesInLbtcv","lbtcvEquivalentRaw","readBtceConvertToAssets","lbtcvShares","totalShares","position","shares","unwrapBtceToLbtcv","amountRaw","receiver","owner","amount","resolvedReceiver","resolvedOwner","amountBase","toBigInt","toBaseDenomination","BTCE_VAULT_DECIMALS","maxWithdrawRaw","wrapToBtce","tokenAddress","tokenDecimals","minimumMint","minMintBase","msg"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wrapToBtce-By2mh503.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/unwrapBtceToLbtcv/unwrapBtceToLbtcv.ts","../../src/contract-functions/wrapToBtce/wrapToBtce.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 { isVedaVaultChain, Vault, VAULTS } from '../../vaults/lib/config';\n\nexport interface IGetShareValueParameters extends CommonParameters {\n /**\n * Optional DeFi vault identifier specifying the vault in use\n * @default {string} - \"veda\"\n */\n vaultKey?: Vault;\n}\n\n/**\n * Gets the value of a single share unit (in LBTC) from the specified vault.\n *\n * @param {IGetShareValueParameters} parameters - The parameters.\n * @param {Vault} parameters.vaultKey - The optional DeFi vault identifier.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @returns {Promise<BigNumber>}\n */\nexport async function getShareValue({\n chainId,\n rpcUrl,\n vaultKey = Vault.Veda,\n}: IGetShareValueParameters): Promise<BigNumber> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 { isVedaVaultChain, Vault, VAULTS } from '../../vaults/lib/config';\nimport { getShareValue } from '../getShareValue';\n\nexport interface IGetSharesByAddressParameters extends CommonParameters {\n /**\n * The address of the share holder.\n */\n address: string;\n /**\n * Optional vault key specifying the vault in use\n * @default {string} - \"veda\"\n */\n vaultKey?: Vault;\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 * Gets the amount of LBTCv (Veda vault shares) owned by the provided address.\n *\n * NOTE: This returns only the user's direct LBTCv ERC20 balance. It does NOT\n * include shares held inside the BTCe wrapper vault. For the full Bitcoin Earn\n * position (LBTCv + BTCe valued in LBTC), use {@link getEarnPosition}.\n *\n * @param {IGetSharesByAddressParameters} parameters - The parameters.\n * @param {Vault} parameters.vaultKey - The optional DeFi vault identifier.\n * @param {ChainId} parameters.chainId - The chain id.\n * @param {string} parameters.rpcUrl - The optional rpc url.\n *\n * @return {Promise<IGetSharesByAddressResponse>}\n */\nexport async function getSharesByAddress({\n chainId,\n rpcUrl,\n address,\n vaultKey = Vault.Veda,\n}: IGetSharesByAddressParameters): Promise<IGetSharesByAddressResponse> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(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 getShareValue({ chainId, rpcUrl, vaultKey });\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 { getSharesByAddress } 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 LBTCv shares held at the address. */\n lbtcvShares: BigNumber;\n /** Raw BTCe wrapper shares held at the address. */\n btceShares: BigNumber;\n /** BTCe shares converted to LBTCv-equivalent via the wrapper's convertToAssets. */\n btceSharesInLbtcv: BigNumber;\n /** lbtcvShares + btceSharesInLbtcv (both in LBTCv units). */\n totalShares: BigNumber;\n /** Current LBTCv 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 (LBTCv + BTCe) on a single chain,\n * valued in LBTC.\n *\n * BTCe is an ERC4626 wrapper around the Veda vault's LBTCv share token. The\n * function reads both balances, converts BTCe shares to LBTCv-equivalent via\n * the wrapper's `convertToAssets`, sums the two LBTCv-denominated values, and\n * applies the Veda accountant's share value to 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 * LBTCv leg alone.\n *\n * Errors from either the LBTCv or BTCe reads propagate to the caller, since\n * silently returning zero would understate the user's balance and is unsafe\n * for an SDK consumed 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 getSharesByAddress({ chainId, rpcUrl, address }),\n btceSupported\n ? readBtceBalance({ chainId, rpcUrl, address })\n : Promise.resolve(0n),\n ]);\n\n let btceShares = ZERO;\n let btceSharesInLbtcv = ZERO;\n\n if (btceSupported && btceBalanceRaw > 0n) {\n btceShares = fromSatoshi(String(btceBalanceRaw));\n const lbtcvEquivalentRaw = await readBtceConvertToAssets({\n chainId,\n rpcUrl,\n shares: btceBalanceRaw,\n });\n btceSharesInLbtcv = fromSatoshi(String(lbtcvEquivalentRaw));\n }\n\n const lbtcvShares = sharesResult.balance;\n const exchangeRate = sharesResult.exchangeRate;\n const totalShares = lbtcvShares.plus(btceSharesInLbtcv);\n const position = totalShares.multipliedBy(exchangeRate);\n\n return {\n lbtcvShares,\n btceShares,\n btceSharesInLbtcv,\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 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 ${\n BigNumber(maxWithdrawRaw.toString())\n .shiftedBy(-BTCE_VAULT_DECIMALS)\n .toFixed()\n } 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","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 WrapToBtceParameters = {\n /** Address of the deposit token (e.g. LBTCv vault address, LBTC, wBTC). */\n tokenAddress: Address;\n /** Amount to wrap, in the deposit token's natural decimal units. */\n amount: BigNumber.Value;\n /** Decimals of the deposit token. */\n tokenDecimals: number;\n /** Receiver of the BTCe shares. Defaults to `account`. */\n receiver?: Address;\n /** Minimum BTCe shares to mint (slippage protection, in BTCe units). Defaults to 0. */\n minimumMint?: BigNumber.Value;\n} & CommonWriteParameters;\n\n/**\n * Wraps a supported deposit asset into BTCe shares via the wrapper's\n * multi-asset `deposit(token, assets, receiver, minShareAmount)` overload.\n *\n * Mirrors the lombard-app's `depositToWrapper` action 1:1: caller is\n * responsible for approving `tokenAddress` to the BTCe contract before\n * calling this. The SDK exposes `approveToken` for that.\n *\n * Returns the deposit transaction hash. Combine with `approveToken` and,\n * for a full BTC→BTCe flow, the existing stake/mint helpers.\n *\n * @returns {Promise<Hash>} The deposit transaction hash.\n */\nexport async function wrapToBtce({\n tokenAddress,\n amount: amountRaw,\n tokenDecimals,\n receiver,\n minimumMint = 0,\n account,\n chainId,\n provider,\n rpcUrl,\n}: WrapToBtceParameters): Promise<Hash> {\n if (!isAddress(tokenAddress, { strict: false })) {\n throw new Error(`Invalid token address: ${tokenAddress}`);\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 const amount = BigNumber(amountRaw);\n if (!amount.isGreaterThan(0)) {\n throw new Error(\n `Wrap amount must be greater than zero. Received: ${amount.toFixed()}.`,\n );\n }\n\n const amountBase = toBigInt(toBaseDenomination(amount, tokenDecimals));\n const minMintBase = toBigInt(\n toBaseDenomination(BigNumber(minimumMint), BTCE_VAULT_DECIMALS),\n );\n\n const publicClient = makePublicClient({ chainId, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId });\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: 'deposit',\n args: [\n tokenAddress,\n amountBase,\n receiver ?? account,\n minMintBase,\n ],\n });\n\n return await walletClient.writeContract(request);\n } catch (err) {\n // Preserve the original message so callers can detect specific revert reasons\n const msg = getErrorMessage(err);\n throw new Error(msg);\n }\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","getShareValue","vaultKey","Vault","vault","VAULTS","isVedaVaultChain","exchangeRate","err","errorMessage","getSharesByAddress","balanceValue","balance","ZERO","BigNumber","getEarnPosition","btceSupported","sharesResult","btceBalanceRaw","readBtceBalance","btceShares","btceSharesInLbtcv","lbtcvEquivalentRaw","readBtceConvertToAssets","lbtcvShares","totalShares","position","shares","unwrapBtceToLbtcv","amountRaw","receiver","owner","amount","resolvedReceiver","resolvedOwner","amountBase","toBigInt","toBaseDenomination","BTCE_VAULT_DECIMALS","maxWithdrawRaw","wrapToBtce","tokenAddress","tokenDecimals","minimumMint","minMintBase","msg"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const c=require("./tokens-
|
|
2
|
-
//# sourceMappingURL=wrapToBtce-
|
|
1
|
+
"use strict";const c=require("./tokens-CBsz6l_2.cjs"),b=require("./token-addresses-DvY-Mw7b.cjs"),B=require("./satoshi-CZEsHl5X.cjs"),k=require("./index-BKzxeh1Y.cjs"),C=require("viem"),A=require("./unstakeLBTC-BmHvDxBN.cjs"),p=require("./time-I-BeyUkG.cjs"),r=require("./config-ow9X5H0c.cjs"),g=require("bignumber.js"),f=require("./numbers-3LtmxfD8.cjs");async function U({chainId:t,rpcUrl:o,env:n}){const e=n||c.determineEnv(t),a=c.makePublicClient({chainId:t,rpcUrl:o,env:e}),s=await c.getTokenContractInfo(b.Token.LBTC,t,e),i=await a.readContract({abi:s.abi,address:s.address,functionName:"totalSupply"});return B.fromSatoshi(String(i))}async function v({data:t,proofSignature:o,account:n,chainId:e,provider:a,rpcUrl:s,env:i=k.p}){const l=c.makePublicClient({chainId:e,rpcUrl:s,env:i}),w=b.makeWalletClient({chainId:e,provider:a}),u=await c.getTokenContractInfo(b.Token.BTCb,e,i,b.AddressKind.Adapter),d=await l.readContract({address:u.address,abi:u.abi,functionName:"getAssetRouter"});if(!d||d===C.zeroAddress)throw new Error("AssetRouter address not found in token adapter");const T={address:d,account:n,chain:b.CHAIN_ID_TO_VIEM_CHAIN_MAP[e],abi:A.ASSET_ROUTER_ABI,functionName:"mint",args:[p.ensureHex(t),p.ensureHex(o)]},m=b.isKatanaChain(e)?await A.estimateGasFees(l,T,C.parseGwei("1")):{},{request:E}=await l.simulateContract({...T,...m});return await w.writeContract(E)}async function y({chainId:t,rpcUrl:o,address:n}){if(!C.isAddress(n))throw new Error(`Invalid address: ${n}`);if(!r.isBtceVaultChain(t))throw new Error(`BTCe is not supported on chain ${t}. Supported chains: ${r.BTCE_VAULT.chains.join(", ")}.`);try{const e=c.makePublicClient({chainId:t,rpcUrl:o}),s=await C.getContract({abi:r.BTCE_VAULT.abi,address:r.BTCE_VAULT.contracts[t],client:e}).read.balanceOf([n]);return B.fromSatoshi(String(s))}catch(e){throw new Error(c.getErrorMessage(e))}}async function V({chainId:t,rpcUrl:o,vaultKey:n=r.Vault.Veda}){const e=r.VAULTS[n];if(!e)throw new Error(`Unknown vault key: ${n}`);if(!r.isVedaVaultChain(t))throw new Error(`Unsupported chain id: ${t}. Please switch to one of the supported chains: ${e.chains.join(", ")}`);try{const a=c.makePublicClient({chainId:t,rpcUrl:o}),i=await C.getContract({abi:e.accountantContract.abi,address:e.accountantContract.address,client:a}).read.getRate();return B.fromSatoshi(String(i))}catch(a){const s=c.getErrorMessage(a);throw new Error(s)}}async function _({chainId:t,rpcUrl:o,address:n,vaultKey:e=r.Vault.Veda}){const a=r.VAULTS[e];if(!a)throw new Error(`Unknown vault key: ${e}`);if(!r.isVedaVaultChain(t))throw new Error(`Unsupported chain id: ${t}. Please switch to one of the supported chains: ${a.chains.join(", ")}`);try{const s=c.makePublicClient({chainId:t,rpcUrl:o}),l=await C.getContract({abi:a.lensContract.abi,address:a.lensContract.address,client:s}).read.balanceOf([n,a.vaultContract.address]),w=B.fromSatoshi(String(l)),u=await V({chainId:t,rpcUrl:o,vaultKey:e});return{balance:w,exchangeRate:u,balanceLbtc:w.multipliedBy(u)}}catch(s){const i=c.getErrorMessage(s);throw new Error(i)}}const S=new g(0);async function R({chainId:t,rpcUrl:o,address:n}){if(!C.isAddress(n))throw new Error(`Invalid address: ${n}`);const e=r.isBtceVaultChain(t),[a,s]=await Promise.all([_({chainId:t,rpcUrl:o,address:n}),e?$({chainId:t,rpcUrl:o,address:n}):Promise.resolve(0n)]);let i=S,l=S;if(e&&s>0n){i=B.fromSatoshi(String(s));const m=await P({chainId:t,rpcUrl:o,shares:s});l=B.fromSatoshi(String(m))}const w=a.balance,u=a.exchangeRate,d=w.plus(l),T=d.multipliedBy(u);return{lbtcvShares:w,btceShares:i,btceSharesInLbtcv:l,totalShares:d,exchangeRate:u,position:T}}async function $({chainId:t,rpcUrl:o,address:n}){const e=c.makePublicClient({chainId:t,rpcUrl:o});return await C.getContract({abi:r.BTCE_VAULT.abi,address:r.BTCE_VAULT.contracts[t],client:e}).read.balanceOf([n])}async function P({chainId:t,rpcUrl:o,shares:n}){const e=c.makePublicClient({chainId:t,rpcUrl:o});return await C.getContract({abi:r.BTCE_VAULT.abi,address:r.BTCE_VAULT.contracts[t],client:e}).read.convertToAssets([n])}async function x({amount:t,receiver:o,owner:n,account:e,chainId:a,provider:s,rpcUrl:i}){if(!r.isBtceVaultChain(a))throw new Error(`BTCe is not supported on chain ${a}. Supported chains: ${r.BTCE_VAULT.chains.join(", ")}.`);if(o!==void 0&&!C.isAddress(o,{strict:!1}))throw new Error(`Invalid receiver address: ${o}`);if(n!==void 0&&!C.isAddress(n,{strict:!1}))throw new Error(`Invalid owner address: ${n}`);const l=g(t);if(!l.isGreaterThan(0))throw new Error(`Unwrap amount must be greater than zero. Received: ${l.toFixed()}.`);const w=o??e,u=n??e,d=c.makePublicClient({chainId:a,rpcUrl:i}),T=b.makeWalletClient({provider:s,chainId:a}),m=f.toBigInt(c.toBaseDenomination(l,r.BTCE_VAULT_DECIMALS)),E=await d.readContract({abi:r.BTCE_VAULT.abi,address:r.BTCE_VAULT.contracts[a],functionName:"maxWithdraw",args:[u]});if(m>E)throw new Error(`Unwrap amount ${l.toFixed()} exceeds maxWithdraw ${g(E.toString()).shiftedBy(-r.BTCE_VAULT_DECIMALS).toFixed()} for owner ${u}.`);try{const{request:h}=await d.simulateContract({account:e,chain:b.CHAIN_ID_TO_VIEM_CHAIN_MAP[a],abi:r.BTCE_VAULT.abi,address:r.BTCE_VAULT.contracts[a],functionName:"withdraw",args:[m,w,u]});return await T.writeContract(h)}catch(h){throw new Error(c.getErrorMessage(h))}}async function M({tokenAddress:t,amount:o,tokenDecimals:n,receiver:e,minimumMint:a=0,account:s,chainId:i,provider:l,rpcUrl:w}){if(!C.isAddress(t,{strict:!1}))throw new Error(`Invalid token address: ${t}`);if(!r.isBtceVaultChain(i))throw new Error(`BTCe is not supported on chain ${i}. Supported chains: ${r.BTCE_VAULT.chains.join(", ")}.`);const u=g(o);if(!u.isGreaterThan(0))throw new Error(`Wrap amount must be greater than zero. Received: ${u.toFixed()}.`);const d=f.toBigInt(c.toBaseDenomination(u,n)),T=f.toBigInt(c.toBaseDenomination(g(a),r.BTCE_VAULT_DECIMALS)),m=c.makePublicClient({chainId:i,rpcUrl:w}),E=b.makeWalletClient({provider:l,chainId:i});try{const{request:h}=await m.simulateContract({account:s,chain:b.CHAIN_ID_TO_VIEM_CHAIN_MAP[i],abi:r.BTCE_VAULT.abi,address:r.BTCE_VAULT.contracts[i],functionName:"deposit",args:[t,d,e??s,T]});return await E.writeContract(h)}catch(h){const L=c.getErrorMessage(h);throw new Error(L)}}exports.claimUnstakeRedeem=v;exports.getBtceShares=y;exports.getEarnPosition=R;exports.getLBTCTotalSupply=U;exports.getShareValue=V;exports.getSharesByAddress=_;exports.unwrapBtceToLbtcv=x;exports.wrapToBtce=M;
|
|
2
|
+
//# sourceMappingURL=wrapToBtce-DDeIlv3d.cjs.map
|