@lombard.finance/sdk 4.3.2 → 4.4.1
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 +24 -0
- package/LICENSE +21 -0
- package/README.md +6 -6
- package/dist/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.d.ts.map +1 -1
- package/dist/api-functions/getDepositBtcAddress/getDepositBtcAddress.d.ts.map +1 -1
- package/dist/api-functions/getDepositsByAddress/getDepositsByAddress.d.ts +13 -1
- package/dist/api-functions/getDepositsByAddress/getDepositsByAddress.d.ts.map +1 -1
- package/dist/api.cjs +1 -1
- package/dist/api.js +29 -29
- package/dist/bridge.cjs +1 -1
- package/dist/bridge.js +7 -7
- package/dist/btc.cjs +1 -1
- package/dist/btc.js +10 -10
- package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts +7 -4
- package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/index.d.ts +16 -8
- package/dist/chains/btc/actions/deposit/config/index.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/solana.d.ts +20 -0
- package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -0
- package/dist/chains/btc/actions/deposit/config/types.d.ts +4 -3
- package/dist/chains/btc/actions/deposit/config/types.d.ts.map +1 -1
- package/dist/chains/evm/EvmActions.d.ts +4 -4
- package/dist/chains/evm/actions/deposit/config/evm.d.ts +3 -3
- package/dist/chains/evm/actions/deposit/config/evm.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/config/types.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/config/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/factory.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/types.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/redeem/EvmRedeem.d.ts.map +1 -1
- package/dist/chains/evm/actions/unstake/EvmUnstake.d.ts.map +1 -1
- package/dist/chains/solana/SolanaActions.d.ts +10 -0
- 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 +37 -0
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/index.d.ts +8 -0
- package/dist/chains/solana/actions/redeem/config/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/solana.d.ts +22 -0
- package/dist/chains/solana/actions/redeem/config/solana.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/types.d.ts +35 -0
- package/dist/chains/solana/actions/redeem/config/types.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/factory.d.ts +12 -0
- package/dist/chains/solana/actions/redeem/factory.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/index.d.ts +9 -0
- package/dist/chains/solana/actions/redeem/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/types.d.ts +52 -0
- package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -0
- package/dist/chains/solana/utils.d.ts +15 -0
- package/dist/chains/solana/utils.d.ts.map +1 -0
- package/dist/chunks/BtcActions-BIBsbYIt.cjs +2 -0
- package/dist/chunks/BtcActions-BIBsbYIt.cjs.map +1 -0
- package/dist/chunks/{BtcActions-k-qs1uO0.js → BtcActions-Df41lbsb.js} +457 -414
- package/dist/chunks/BtcActions-Df41lbsb.js.map +1 -0
- package/dist/chunks/{EvmActions-B_dF42So.js → EvmActions-5lPqhRaM.js} +163 -173
- package/dist/chunks/EvmActions-5lPqhRaM.js.map +1 -0
- package/dist/chunks/EvmActions-BY_18gTg.cjs +2 -0
- package/dist/chunks/EvmActions-BY_18gTg.cjs.map +1 -0
- package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs +2 -0
- package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs.map +1 -0
- package/dist/chunks/{ReferralsClient-DbFWWtVi.js → ReferralsClient-DvEsA3II.js} +160 -160
- package/dist/chunks/ReferralsClient-DvEsA3II.js.map +1 -0
- package/dist/chunks/{api-config-CtcP3TVl.js → api-config-Dm6dR85f.js} +6 -6
- package/dist/chunks/{api-config-CtcP3TVl.js.map → api-config-Dm6dR85f.js.map} +1 -1
- package/dist/chunks/{approveLBTC-CZiZmdcX.cjs → approveLBTC-CUXEC3kw.cjs} +2 -2
- package/dist/chunks/{approveLBTC-CZiZmdcX.cjs.map → approveLBTC-CUXEC3kw.cjs.map} +1 -1
- package/dist/chunks/approveLBTC-Du2El1tW.js +26 -0
- package/dist/chunks/{approveLBTC-B5-ZWqct.js.map → approveLBTC-Du2El1tW.js.map} +1 -1
- package/dist/chunks/{array-Cev6kyLJ.js → array-DYttUPf5.js} +7 -7
- package/dist/chunks/{array-Cev6kyLJ.js.map → array-DYttUPf5.js.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs → blockchain-identifier-BTPGxLio.cjs} +2 -2
- package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs.map → blockchain-identifier-BTPGxLio.cjs.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BmadkNtK.js → blockchain-identifier-CTVaEPpY.js} +24 -24
- package/dist/chunks/{blockchain-identifier-BmadkNtK.js.map → blockchain-identifier-CTVaEPpY.js.map} +1 -1
- package/dist/chunks/{bridge-CTsiodO1.js → bridge-DqGabhIY.js} +13 -13
- package/dist/chunks/{bridge-CTsiodO1.js.map → bridge-DqGabhIY.js.map} +1 -1
- package/dist/chunks/{bridge-BzRlY9pP.cjs → bridge-dWaKrMKm.cjs} +2 -2
- package/dist/chunks/{bridge-BzRlY9pP.cjs.map → bridge-dWaKrMKm.cjs.map} +1 -1
- package/dist/chunks/{config-hFKqUyg3.js → config-DghboRx0.js} +10 -10
- package/dist/chunks/{config-hFKqUyg3.js.map → config-DghboRx0.js.map} +1 -1
- package/dist/chunks/{config-l4ZaZw_g.cjs → config-DmCmanM_.cjs} +2 -2
- package/dist/chunks/{config-l4ZaZw_g.cjs.map → config-DmCmanM_.cjs.map} +1 -1
- package/dist/chunks/constants-D1FnS2Z8.js +6 -0
- package/dist/chunks/constants-D1FnS2Z8.js.map +1 -0
- package/dist/chunks/constants-ueShGH9R.cjs +2 -0
- package/dist/chunks/constants-ueShGH9R.cjs.map +1 -0
- package/dist/chunks/{defi-registry-BIRv_zkp.cjs → defi-registry-DDNavtO1.cjs} +2 -2
- package/dist/chunks/{defi-registry-BIRv_zkp.cjs.map → defi-registry-DDNavtO1.cjs.map} +1 -1
- package/dist/chunks/{defi-registry-wNFN3qyB.js → defi-registry-DxjjBQTV.js} +13 -13
- package/dist/chunks/{defi-registry-wNFN3qyB.js.map → defi-registry-DxjjBQTV.js.map} +1 -1
- package/dist/chunks/depositStatus-CFo5jW89.cjs +2 -0
- package/dist/chunks/depositStatus-CFo5jW89.cjs.map +1 -0
- package/dist/chunks/{depositStatus-DM7fRmbN.js → depositStatus-DTc01ZoZ.js} +63 -61
- package/dist/chunks/depositStatus-DTc01ZoZ.js.map +1 -0
- package/dist/chunks/events-6PV6NP-o.cjs +2 -0
- package/dist/chunks/events-6PV6NP-o.cjs.map +1 -0
- package/dist/chunks/{events-DdV_xi-2.js → events-BvRwXePq.js} +414 -303
- package/dist/chunks/events-BvRwXePq.js.map +1 -0
- package/dist/chunks/evm-by-btc-address-CZvE15lx.js +39 -0
- package/dist/chunks/{evm-by-btc-address-CwLiENtM.js.map → evm-by-btc-address-CZvE15lx.js.map} +1 -1
- package/dist/chunks/fee-requirements-CCNsxAvJ.js +14 -0
- package/dist/chunks/{fee-requirements-x8-8mpJ7.js.map → fee-requirements-CCNsxAvJ.js.map} +1 -1
- package/dist/chunks/get-exchange-ratio-B-xzYND1.js +20 -0
- package/dist/chunks/{get-exchange-ratio-NtnkG1kZ.js.map → get-exchange-ratio-B-xzYND1.js.map} +1 -1
- package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs → get-exchange-ratio-BEhD4gLB.cjs} +2 -2
- package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs.map → get-exchange-ratio-BEhD4gLB.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs → get-positions-summary-Dh1QPLYO.cjs} +2 -2
- package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs.map → get-positions-summary-Dh1QPLYO.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-B_MmGHLv.js → get-positions-summary-iYshN1RQ.js} +28 -28
- package/dist/chunks/{get-positions-summary-B_MmGHLv.js.map → get-positions-summary-iYshN1RQ.js.map} +1 -1
- package/dist/chunks/{get-vault-tvl-YAXePAW3.js → get-vault-tvl-Ct_Zkg7C.js} +41 -41
- package/dist/chunks/{get-vault-tvl-YAXePAW3.js.map → get-vault-tvl-Ct_Zkg7C.js.map} +1 -1
- package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs → get-vault-tvl-D_tQIDAs.cjs} +2 -2
- package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs.map → get-vault-tvl-D_tQIDAs.cjs.map} +1 -1
- package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs → get-vault-withdrawals-8ALlEiAC.cjs} +2 -2
- package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs.map → get-vault-withdrawals-8ALlEiAC.cjs.map} +1 -1
- package/dist/chunks/get-vault-withdrawals-jk7Sv4S4.js +161 -0
- package/dist/chunks/{get-vault-withdrawals-BrpZlt6s.js.map → get-vault-withdrawals-jk7Sv4S4.js.map} +1 -1
- package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs → getSharesByAddress-D8hehnP1.cjs} +2 -2
- package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs.map → getSharesByAddress-D8hehnP1.cjs.map} +1 -1
- package/dist/chunks/{getSharesByAddress-BiruCDp6.js → getSharesByAddress-_tBaIBsw.js} +38 -38
- package/dist/chunks/{getSharesByAddress-BiruCDp6.js.map → getSharesByAddress-_tBaIBsw.js.map} +1 -1
- package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs +2 -0
- package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs.map +1 -0
- package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js +125 -0
- package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js.map +1 -0
- package/dist/chunks/lbtc-addresses-D8MYCdsx.js +10 -0
- package/dist/chunks/{lbtc-addresses-BLRmtR3c.js.map → lbtc-addresses-D8MYCdsx.js.map} +1 -1
- package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs → lbtc-addresses-Kil252DX.cjs} +2 -2
- package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs.map → lbtc-addresses-Kil252DX.cjs.map} +1 -1
- package/dist/chunks/numbers-CclN2Ohk.js +15 -0
- package/dist/chunks/{numbers-CM-lcmt4.js.map → numbers-CclN2Ohk.js.map} +1 -1
- package/dist/chunks/parameters-C_16L5ft.js +11 -0
- package/dist/chunks/{parameters-CDV-6Hk5.js.map → parameters-C_16L5ft.js.map} +1 -1
- package/dist/chunks/satoshi-CSoJBXc6.js +19 -0
- package/dist/chunks/{satoshi-Ch6y8aYG.js.map → satoshi-CSoJBXc6.js.map} +1 -1
- package/dist/chunks/{statusConstants-DFxMrVob.js → statusConstants-C4YNx2q0.js} +1134 -1113
- package/dist/chunks/statusConstants-C4YNx2q0.js.map +1 -0
- package/dist/chunks/statusConstants-DlM2oPfW.cjs +2 -0
- package/dist/chunks/statusConstants-DlM2oPfW.cjs.map +1 -0
- package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js → storeNetworkFeeSignature-BODIpq3Y.js} +26 -26
- package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js.map → storeNetworkFeeSignature-BODIpq3Y.js.map} +1 -1
- package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs → storeNetworkFeeSignature-Buk4091C.cjs} +2 -2
- package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs.map → storeNetworkFeeSignature-Buk4091C.cjs.map} +1 -1
- package/dist/chunks/time-Sa5gggPG.js +24 -0
- package/dist/chunks/{time-QPeEEEnQ.js.map → time-Sa5gggPG.js.map} +1 -1
- package/dist/chunks/{token-addresses-FKpA3uc4.js → token-addresses-D0v5cR1j.js} +174 -163
- package/dist/chunks/{token-addresses-FKpA3uc4.js.map → token-addresses-D0v5cR1j.js.map} +1 -1
- package/dist/chunks/{token-addresses-DRBecUa7.cjs → token-addresses-nzvTOi24.cjs} +2 -2
- package/dist/chunks/{token-addresses-DRBecUa7.cjs.map → token-addresses-nzvTOi24.cjs.map} +1 -1
- package/dist/chunks/{tokens-D_HeVB5p.cjs → tokens-BkvA0Gp1.cjs} +2 -2
- package/dist/chunks/{tokens-D_HeVB5p.cjs.map → tokens-BkvA0Gp1.cjs.map} +1 -1
- package/dist/chunks/{tokens-C6qZHzph.js → tokens-DgC1hfkm.js} +18 -18
- package/dist/chunks/{tokens-C6qZHzph.js.map → tokens-DgC1hfkm.js.map} +1 -1
- package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs → unstakeLBTC-CmoCaGX9.cjs} +2 -2
- package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs.map → unstakeLBTC-CmoCaGX9.cjs.map} +1 -1
- package/dist/chunks/{unstakeLBTC-DAIR9NO_.js → unstakeLBTC-DtvVbpbU.js} +50 -50
- package/dist/chunks/{unstakeLBTC-DAIR9NO_.js.map → unstakeLBTC-DtvVbpbU.js.map} +1 -1
- package/dist/chunks/{withdraw-hHueI2p7.js → withdraw-DgjuaUN3.js} +45 -45
- package/dist/chunks/{withdraw-hHueI2p7.js.map → withdraw-DgjuaUN3.js.map} +1 -1
- package/dist/chunks/{withdraw-C1fMFSwy.cjs → withdraw-i0AueZ_C.cjs} +2 -2
- package/dist/chunks/{withdraw-C1fMFSwy.cjs.map → withdraw-i0AueZ_C.cjs.map} +1 -1
- package/dist/common/constants.d.ts +1 -0
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/contracts.cjs +1 -1
- package/dist/contracts.js +16 -16
- package/dist/core/assets/catalog.d.ts.map +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +85 -85
- package/dist/debug.js +4 -4
- package/dist/defi.cjs +1 -1
- package/dist/defi.js +10 -10
- package/dist/evm.cjs +1 -1
- package/dist/evm.js +34 -34
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +287 -283
- package/dist/index.js.map +1 -1
- package/dist/metrics.cjs +1 -1
- package/dist/metrics.js +6 -6
- package/dist/shared/deposits/depositStatus.d.ts +9 -5
- package/dist/shared/deposits/depositStatus.d.ts.map +1 -1
- package/dist/stories/arg-types.d.ts +1 -0
- package/dist/stories/arg-types.d.ts.map +1 -1
- package/dist/tokens/token-addresses.d.ts +2 -2
- package/dist/tokens/token-addresses.d.ts.map +1 -1
- package/dist/utils/chain.d.ts +7 -0
- package/dist/utils/chain.d.ts.map +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +76 -76
- package/dist/vaults.cjs +1 -1
- package/dist/vaults.js +14 -14
- package/package.json +19 -6
- package/dist/chunks/BtcActions-XbVRQEcM.cjs +0 -2
- package/dist/chunks/BtcActions-XbVRQEcM.cjs.map +0 -1
- package/dist/chunks/BtcActions-k-qs1uO0.js.map +0 -1
- package/dist/chunks/EvmActions-BVzQ3fLK.cjs +0 -2
- package/dist/chunks/EvmActions-BVzQ3fLK.cjs.map +0 -1
- package/dist/chunks/EvmActions-B_dF42So.js.map +0 -1
- package/dist/chunks/ReferralsClient-BC-1wT1q.cjs +0 -2
- package/dist/chunks/ReferralsClient-BC-1wT1q.cjs.map +0 -1
- package/dist/chunks/ReferralsClient-DbFWWtVi.js.map +0 -1
- package/dist/chunks/approveLBTC-B5-ZWqct.js +0 -26
- package/dist/chunks/constants-BBK-JNcY.cjs +0 -2
- package/dist/chunks/constants-BBK-JNcY.cjs.map +0 -1
- package/dist/chunks/constants-CuT4axsy.js +0 -5
- package/dist/chunks/constants-CuT4axsy.js.map +0 -1
- package/dist/chunks/depositStatus-C3-EgT2a.cjs +0 -2
- package/dist/chunks/depositStatus-C3-EgT2a.cjs.map +0 -1
- package/dist/chunks/depositStatus-DM7fRmbN.js.map +0 -1
- package/dist/chunks/events-DdV_xi-2.js.map +0 -1
- package/dist/chunks/events-DqIJRzJo.cjs +0 -2
- package/dist/chunks/events-DqIJRzJo.cjs.map +0 -1
- package/dist/chunks/evm-by-btc-address-CwLiENtM.js +0 -39
- package/dist/chunks/fee-requirements-x8-8mpJ7.js +0 -14
- package/dist/chunks/get-exchange-ratio-NtnkG1kZ.js +0 -20
- package/dist/chunks/get-vault-withdrawals-BrpZlt6s.js +0 -161
- package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs +0 -2
- package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs.map +0 -1
- package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js +0 -120
- package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js.map +0 -1
- package/dist/chunks/lbtc-addresses-BLRmtR3c.js +0 -10
- package/dist/chunks/numbers-CM-lcmt4.js +0 -15
- package/dist/chunks/parameters-CDV-6Hk5.js +0 -11
- package/dist/chunks/satoshi-Ch6y8aYG.js +0 -19
- package/dist/chunks/statusConstants-BLiNBT6s.cjs +0 -2
- package/dist/chunks/statusConstants-BLiNBT6s.cjs.map +0 -1
- package/dist/chunks/statusConstants-DFxMrVob.js.map +0 -1
- package/dist/chunks/time-QPeEEEnQ.js +0 -24
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const C=require("./index-BKzxeh1Y.cjs"),r=require("./token-addresses-DRBecUa7.cjs"),d=require("./config-l4ZaZw_g.cjs"),p={BTC:"BTC",BTCb:"BTC.b",LBTC:"LBTC",BTCK:"BTCK",cbBTC:"cbBTC",WBTC:"WBTC",WBTCN:"wBTCN",eBTC:"eBTC",BTCBinance:"BTCB",SOL:"SOL",L_SOL:"L-SOL",SUI:"SUI",L_SUI:"L-SUI",ETH:"ETH",L_ETH:"L-ETH",ZEC:"ZEC",L_ZEC:"L-ZEC",XRP:"XRP",L_XRP:"L-XRP",DOGE:"DOGE",L_DOGE:"L-DOGE",USDC:"USDC",USDT:"USDT",DAI:"DAI"};function E(e){return Object.keys(p).find(t=>p[t]===e)??""}function L(e){return typeof e=="string"&&Object.values(p).includes(e)}const k=JSON.parse('[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"CallerNotSelf","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeGreaterThanMaximum","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"InvalidPermitPayload","type":"error"},{"inputs":[],"name":"NoDepositorSet","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"WrongAmount","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroDepositAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"},{"indexed":false,"internalType":"bytes","name":"customError","type":"bytes"}],"name":"BatchStakeAndBakeReverted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"depositor","type":"address"}],"name":"DepositorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"FeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newGasLimit","type":"uint256"}],"name":"GasLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"CLAIMER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"permitPayload","type":"bytes"},{"internalType":"bytes","name":"depositPayload","type":"bytes"},{"internalType":"bytes","name":"mintPayload","type":"bytes"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct StakeAndBakeNativeToken.StakeAndBakeData[]","name":"data","type":"tuple[]"}],"name":"batchStakeAndBake","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeAndBakeDepositor","outputs":[{"internalType":"contract IDepositor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeAndBakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAndAdapter","outputs":[{"internalType":"contract IERC20","name":"","type":"address"},{"internalType":"contract INativeLBTC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"nativeLbtc_","type":"address"},{"internalType":"contract INativeLBTC","name":"adapter_","type":"address"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"operator_","type":"address"},{"internalType":"uint256","name":"fee_","type":"uint256"},{"internalType":"address","name":"claimer_","type":"address"},{"internalType":"address","name":"pauser_","type":"address"},{"internalType":"uint256","name":"gasLimit_","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"depositor","type":"address"}],"name":"setDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gasLimit","type":"uint256"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"permitPayload","type":"bytes"},{"internalType":"bytes","name":"depositPayload","type":"bytes"},{"internalType":"bytes","name":"mintPayload","type":"bytes"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct StakeAndBakeNativeToken.StakeAndBakeData","name":"data","type":"tuple"}],"name":"stakeAndBake","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"permitPayload","type":"bytes"},{"internalType":"bytes","name":"depositPayload","type":"bytes"},{"internalType":"bytes","name":"mintPayload","type":"bytes"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct StakeAndBakeNativeToken.StakeAndBakeData","name":"data","type":"tuple"}],"name":"stakeAndBakeInternal","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]'),v=Object.freeze(Object.defineProperty({__proto__:null,default:k},Symbol.toStringTag,{value:"Module"})),T=Object.values(C.r),R="0xFe1e76D9e065e879A9D1914482f0F13d85F39877";function u(e,t){return e.reduce((a,n)=>(a[n]=t(n),a),{})}function b(e,t){return e.reduce((a,n)=>(a[n]=t(n),a),{})}function f(e){const t=d.VEDA_VAULT_SPENDER_CONTRACTS[e];if(!t)throw new Error(`Missing Veda spender contract for chain ${e}`);return t}r.Token.LBTC,r.Token.BTCb;const o={Veda:"veda",Silo:"silo"},l={[o.Veda]:{name:"Lombard DeFi Vault",url:"https://lombard.finance"},[o.Silo]:{name:"Silo Finance Vault",url:"https://silo.finance"}},A={mode:"permit",domainName:"Lombard Staked Bitcoin",domainVersion:"1",deadlineStrategy:"expiry",nonceStrategy:"chain"},g={mode:"approve",domainName:"Bitcoin",domainVersion:"1",deadlineStrategy:"zero",nonceStrategy:"skip"},y={[o.Veda]:{[r.Token.LBTC]:b(T,()=>u(d.VEDA_VAULT_STAKE_AND_BAKE_CHAINS,e=>({amountStrategy:"identity",approval:{...A},spenderContract:f(e)}))),BTC:b(T,()=>u(d.VEDA_VAULT_STAKE_AND_BAKE_CHAINS,e=>({amountStrategy:"btcToLbtc",approval:{...A},spenderContract:f(e)})))},[o.Silo]:{[r.Token.BTCb]:{[C.r.testnet]:u([r.ChainId.avalancheFuji],e=>({amountStrategy:"identity",approval:{...g},spenderContract:{abi:v,address:R,chainId:e}}))}}};function I(e,t,a){const n=y[e];if(!n)return[];const s=n[t];if(!s)return[];const i=s[a];return i?Object.keys(i).map(Number):[]}function P(e){return Object.entries(y).filter(([t,a])=>e in a).map(([t])=>t)}function S(e,t){const n={[p.LBTC]:[r.Token.LBTC,"BTC"],[p.BTCb]:[r.Token.BTCb],[p.BTC]:["BTC"]}[e];if(!n)return[];const s=new Set;for(const[i,B]of Object.entries(y))for(const _ of n){const m=B[_];if(!m)continue;const c=m[t];!c||Object.keys(c).length===0||s.add(i)}return Array.from(s)}function D(e,t){return S(e,t).map(n=>{var s,i;return{value:n,label:((s=l[n])==null?void 0:s.name)??n,url:((i=l[n])==null?void 0:i.url)??""}})}exports.AssetId=p;exports.DEFI_REGISTRY=y;exports.DefiProtocol=o;exports.DefiProtocols=l;exports.assetValueToKey=E;exports.getAvailableProtocols=S;exports.getAvailableProtocolsWithMetadata=D;exports.getStakeAndBakeSupportedChains=I;exports.getSupportedProtocols=P;exports.isAssetId=L;
|
|
2
|
-
//# sourceMappingURL=defi-registry-
|
|
1
|
+
"use strict";const C=require("./index-BKzxeh1Y.cjs"),r=require("./token-addresses-nzvTOi24.cjs"),d=require("./config-DmCmanM_.cjs"),p={BTC:"BTC",BTCb:"BTC.b",LBTC:"LBTC",BTCK:"BTCK",cbBTC:"cbBTC",WBTC:"WBTC",WBTCN:"wBTCN",eBTC:"eBTC",BTCBinance:"BTCB",SOL:"SOL",L_SOL:"L-SOL",SUI:"SUI",L_SUI:"L-SUI",ETH:"ETH",L_ETH:"L-ETH",ZEC:"ZEC",L_ZEC:"L-ZEC",XRP:"XRP",L_XRP:"L-XRP",DOGE:"DOGE",L_DOGE:"L-DOGE",USDC:"USDC",USDT:"USDT",DAI:"DAI"};function E(e){return Object.keys(p).find(t=>p[t]===e)??""}function L(e){return typeof e=="string"&&Object.values(p).includes(e)}const k=JSON.parse('[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"CallerNotSelf","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeGreaterThanMaximum","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"InvalidPermitPayload","type":"error"},{"inputs":[],"name":"NoDepositorSet","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"WrongAmount","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroDepositAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"},{"indexed":false,"internalType":"bytes","name":"customError","type":"bytes"}],"name":"BatchStakeAndBakeReverted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"depositor","type":"address"}],"name":"DepositorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"FeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newGasLimit","type":"uint256"}],"name":"GasLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"CLAIMER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"permitPayload","type":"bytes"},{"internalType":"bytes","name":"depositPayload","type":"bytes"},{"internalType":"bytes","name":"mintPayload","type":"bytes"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct StakeAndBakeNativeToken.StakeAndBakeData[]","name":"data","type":"tuple[]"}],"name":"batchStakeAndBake","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeAndBakeDepositor","outputs":[{"internalType":"contract IDepositor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeAndBakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAndAdapter","outputs":[{"internalType":"contract IERC20","name":"","type":"address"},{"internalType":"contract INativeLBTC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"nativeLbtc_","type":"address"},{"internalType":"contract INativeLBTC","name":"adapter_","type":"address"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"operator_","type":"address"},{"internalType":"uint256","name":"fee_","type":"uint256"},{"internalType":"address","name":"claimer_","type":"address"},{"internalType":"address","name":"pauser_","type":"address"},{"internalType":"uint256","name":"gasLimit_","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"depositor","type":"address"}],"name":"setDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gasLimit","type":"uint256"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"permitPayload","type":"bytes"},{"internalType":"bytes","name":"depositPayload","type":"bytes"},{"internalType":"bytes","name":"mintPayload","type":"bytes"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct StakeAndBakeNativeToken.StakeAndBakeData","name":"data","type":"tuple"}],"name":"stakeAndBake","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"permitPayload","type":"bytes"},{"internalType":"bytes","name":"depositPayload","type":"bytes"},{"internalType":"bytes","name":"mintPayload","type":"bytes"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct StakeAndBakeNativeToken.StakeAndBakeData","name":"data","type":"tuple"}],"name":"stakeAndBakeInternal","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]'),v=Object.freeze(Object.defineProperty({__proto__:null,default:k},Symbol.toStringTag,{value:"Module"})),T=Object.values(C.r),R="0xFe1e76D9e065e879A9D1914482f0F13d85F39877";function u(e,t){return e.reduce((a,n)=>(a[n]=t(n),a),{})}function b(e,t){return e.reduce((a,n)=>(a[n]=t(n),a),{})}function f(e){const t=d.VEDA_VAULT_SPENDER_CONTRACTS[e];if(!t)throw new Error(`Missing Veda spender contract for chain ${e}`);return t}r.Token.LBTC,r.Token.BTCb;const o={Veda:"veda",Silo:"silo"},l={[o.Veda]:{name:"Lombard DeFi Vault",url:"https://lombard.finance"},[o.Silo]:{name:"Silo Finance Vault",url:"https://silo.finance"}},A={mode:"permit",domainName:"Lombard Staked Bitcoin",domainVersion:"1",deadlineStrategy:"expiry",nonceStrategy:"chain"},g={mode:"approve",domainName:"Bitcoin",domainVersion:"1",deadlineStrategy:"zero",nonceStrategy:"skip"},y={[o.Veda]:{[r.Token.LBTC]:b(T,()=>u(d.VEDA_VAULT_STAKE_AND_BAKE_CHAINS,e=>({amountStrategy:"identity",approval:{...A},spenderContract:f(e)}))),BTC:b(T,()=>u(d.VEDA_VAULT_STAKE_AND_BAKE_CHAINS,e=>({amountStrategy:"btcToLbtc",approval:{...A},spenderContract:f(e)})))},[o.Silo]:{[r.Token.BTCb]:{[C.r.testnet]:u([r.ChainId.avalancheFuji],e=>({amountStrategy:"identity",approval:{...g},spenderContract:{abi:v,address:R,chainId:e}}))}}};function I(e,t,a){const n=y[e];if(!n)return[];const s=n[t];if(!s)return[];const i=s[a];return i?Object.keys(i).map(Number):[]}function P(e){return Object.entries(y).filter(([t,a])=>e in a).map(([t])=>t)}function S(e,t){const n={[p.LBTC]:[r.Token.LBTC,"BTC"],[p.BTCb]:[r.Token.BTCb],[p.BTC]:["BTC"]}[e];if(!n)return[];const s=new Set;for(const[i,B]of Object.entries(y))for(const _ of n){const m=B[_];if(!m)continue;const c=m[t];!c||Object.keys(c).length===0||s.add(i)}return Array.from(s)}function D(e,t){return S(e,t).map(n=>{var s,i;return{value:n,label:((s=l[n])==null?void 0:s.name)??n,url:((i=l[n])==null?void 0:i.url)??""}})}exports.AssetId=p;exports.DEFI_REGISTRY=y;exports.DefiProtocol=o;exports.DefiProtocols=l;exports.assetValueToKey=E;exports.getAvailableProtocols=S;exports.getAvailableProtocolsWithMetadata=D;exports.getStakeAndBakeSupportedChains=I;exports.getSupportedProtocols=P;exports.isAssetId=L;
|
|
2
|
+
//# sourceMappingURL=defi-registry-DDNavtO1.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defi-registry-BIRv_zkp.cjs","sources":["../../src/core/assets/types.ts","../../src/defi/defi-registry.ts"],"sourcesContent":["/**\n * Asset Types\n *\n * Type definitions for the asset catalog.\n * Designed to be JSON-serializable for S3 hosting.\n *\n * @module core/assets/types\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\n\nimport type { Chain } from '../chains';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Asset Identifiers\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Asset identifiers for all supported assets in the Lombard ecosystem.\n *\n * Naming convention:\n * - Native assets: BTC, ETH, SOL, ZEC, XRP, DOGE\n * - L-Assets (Lombard wrapped): LBTC, L-ETH, L-ZEC, L-XRP, L-DOGE, L-SOL\n * - Wrapped assets: WBTC, BTC.b (Bitcoin on EVM chains)\n */\nexport const AssetId = {\n // Bitcoin assets\n BTC: 'BTC',\n BTCb: 'BTC.b',\n LBTC: 'LBTC',\n BTCK: 'BTCK',\n cbBTC: 'cbBTC',\n WBTC: 'WBTC',\n WBTCN: 'wBTCN',\n eBTC: 'eBTC',\n BTCBinance: 'BTCB',\n\n // Solana assets\n SOL: 'SOL',\n L_SOL: 'L-SOL',\n\n // Sui assets\n SUI: 'SUI',\n L_SUI: 'L-SUI',\n\n // Ethereum assets\n ETH: 'ETH',\n L_ETH: 'L-ETH',\n\n // Zcash assets\n ZEC: 'ZEC',\n L_ZEC: 'L-ZEC',\n\n // XRP assets\n XRP: 'XRP',\n L_XRP: 'L-XRP',\n\n // Dogecoin assets\n DOGE: 'DOGE',\n L_DOGE: 'L-DOGE',\n\n // Stablecoin assets (for BSA)\n USDC: 'USDC',\n USDT: 'USDT',\n DAI: 'DAI',\n} as const;\n\nexport type AssetId = (typeof AssetId)[keyof typeof AssetId];\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Catalog Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Deployment entry for a specific asset on specific chain(s)\n */\nexport interface Deployment {\n /** Environment (prod, testnet, stage, dev) */\n env: Env;\n /** Single chain deployment */\n chain?: Chain;\n /** Multi-chain deployment (same address on multiple chains) */\n chains?: Chain[];\n /** Token contract address */\n address: string;\n /** Asset router contract address */\n assetRouter?: string;\n /** Bridge adapter contract address */\n bridgeAdapter?: string;\n /** Public market maker contract address */\n publicMarketMaker?: string;\n}\n\n/**\n * Asset entry with metadata and deployments\n */\nexport interface AssetEntry {\n /** Token decimals */\n decimals: number;\n /** Token symbol */\n symbol: string;\n /** Token display name */\n name?: string;\n /** All deployments for this asset */\n deployments: Deployment[];\n}\n\n/**\n * Complete asset catalog structure\n */\nexport interface AssetCatalog {\n /** Schema version */\n version: string;\n /** Asset definitions keyed by AssetId */\n assets: Partial<Record<AssetId, AssetEntry>>;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Utility Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** Convert AssetId value to its key name */\nexport function assetValueToKey(value: string): string {\n return (\n Object.keys(AssetId).find(\n key => AssetId[key as keyof typeof AssetId] === value,\n ) ?? ''\n );\n}\n\n/** Type guard to check if a value is a valid AssetId */\nexport function isAssetId(value: unknown): value is AssetId {\n return (\n typeof value === 'string' &&\n Object.values(AssetId).includes(value as AssetId)\n );\n}\n\n/** Get asset display name */\nexport function getAssetDisplayName(assetId: AssetId): string {\n return assetId;\n}\n","/**\n * DeFi Stake & Bake Registry\n *\n * Provides a strongly typed registry of staking integrations so that\n * protocol/token/env/chain support is declarative and composable.\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\nimport { Abi } from 'viem';\n\nimport { ChainId } from '../common/chains';\nimport { ContractInfo } from '../common/contract-info';\nimport { AssetId } from '../core/assets';\nimport { Token } from '../tokens/token-addresses';\nimport { SILO_VAULT_SPENDER_ABI } from '../vaults/abi';\nimport {\n VEDA_VAULT_SPENDER_CONTRACTS,\n VEDA_VAULT_STAKE_AND_BAKE_CHAINS,\n VedaVaultStakeAndBakeChain,\n} from '../vaults/lib/config';\n\n/**\n * Approval mode for stake and bake operations.\n * - `permit`: Off-chain EIP-2612 signature (gasless for user, backend pays gas)\n * - `approve`: On-chain ERC-20 approval transaction (user pays gas)\n */\nexport type ApprovalMode = 'permit' | 'approve';\n\nexport type StakeAndBakeAmountStrategy = 'identity' | 'btcToLbtc';\nexport type StakeAndBakeDeadlineStrategy = 'expiry' | 'zero';\nexport type StakeAndBakeNonceStrategy = 'chain' | 'skip';\n\nexport interface StakeAndBakeStrategyConfig {\n amountStrategy: StakeAndBakeAmountStrategy;\n approval: {\n mode: ApprovalMode;\n domainName: string;\n domainVersion: string;\n deadlineStrategy: StakeAndBakeDeadlineStrategy;\n nonceStrategy: StakeAndBakeNonceStrategy;\n };\n spenderContract: ContractInfo;\n}\n\nexport interface StakeAndBakeStrategy extends StakeAndBakeStrategyConfig {\n protocol: DefiProtocol;\n token: StakeAndBakeToken;\n env: Env;\n chainId: ChainId;\n}\n\ntype ChainStrategyMap = Partial<Record<ChainId, StakeAndBakeStrategyConfig>>;\ntype EnvStrategyMap = Partial<Record<Env, ChainStrategyMap>>;\ntype TokenStrategyMap = Partial<Record<StakeAndBakeToken, EnvStrategyMap>>;\nexport type StakeAndBakeRegistry = Record<DefiProtocol, TokenStrategyMap>;\n\nconst ALL_ENVS = Object.values(Env) as Env[];\n\n// Use single source of truth from vaults/lib/config.ts\n// VEDA_VAULT_STAKE_AND_BAKE_CHAINS is imported and used directly below\n\nexport const SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI: `0x${string}` =\n '0xFe1e76D9e065e879A9D1914482f0F13d85F39877';\n\nfunction mapChains<const C extends readonly ChainId[]>(\n chains: C,\n factory: (chain: C[number]) => StakeAndBakeStrategyConfig,\n): ChainStrategyMap {\n return chains.reduce<ChainStrategyMap>((acc, chain) => {\n acc[chain] = factory(chain);\n return acc;\n }, {} as ChainStrategyMap);\n}\n\nfunction mapEnvs<const E extends readonly Env[]>(\n envs: E,\n factory: (env: E[number]) => ChainStrategyMap,\n): EnvStrategyMap {\n return envs.reduce<EnvStrategyMap>((acc, env) => {\n acc[env] = factory(env);\n return acc;\n }, {} as EnvStrategyMap);\n}\n\nfunction getVedaSpenderContract(\n chainId: VedaVaultStakeAndBakeChain,\n): ContractInfo {\n const contract = VEDA_VAULT_SPENDER_CONTRACTS[chainId];\n if (!contract) {\n throw new Error(`Missing Veda spender contract for chain ${chainId}`);\n }\n return contract;\n}\n\nconst _DefiRegistryTokens = {\n LBTC: Token.LBTC,\n BTCb: Token.BTCb,\n BTC: 'BTC',\n} as const;\n\nexport type DefiRegistryToken =\n (typeof _DefiRegistryTokens)[keyof typeof _DefiRegistryTokens];\n\n/**\n * DeFi Protocol identifiers - SINGLE SOURCE OF TRUTH\n *\n * These are the canonical protocol identifiers used throughout the SDK.\n * All other protocol references should use these values.\n */\nexport const DefiProtocol = {\n Veda: 'veda',\n Silo: 'silo',\n} as const;\n\nexport type DefiProtocol = (typeof DefiProtocol)[keyof typeof DefiProtocol];\n\nexport const DefiProtocols = {\n [DefiProtocol.Veda]: {\n name: 'Lombard DeFi Vault',\n url: 'https://lombard.finance',\n },\n [DefiProtocol.Silo]: {\n name: 'Silo Finance Vault',\n url: 'https://silo.finance',\n },\n} as const;\n\nconst VEDA_LBTC_PERMIT_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'permit',\n domainName: 'Lombard Staked Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'expiry',\n nonceStrategy: 'chain',\n};\n\nconst SILO_BTCB_APPROVE_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'approve',\n domainName: 'Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'zero',\n nonceStrategy: 'skip',\n};\n\n/**\n * DeFi Registry: Token approval configurations by vault, token, env, and chain.\n * \n * TODO: Update the format of this registry to match asset catalog and chain catalog\n */\nexport const DEFI_REGISTRY: StakeAndBakeRegistry = {\n [DefiProtocol.Veda]: {\n [Token.LBTC]: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'identity',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n BTC: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'btcToLbtc',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n },\n [DefiProtocol.Silo]: {\n [Token.BTCb]: {\n // Silo on Avalanche Fuji is only available on testnet (Gastald backend)\n // Stage environment does not support Avalanche Fuji\n [Env.testnet]: mapChains([ChainId.avalancheFuji], chain => ({\n amountStrategy: 'identity',\n approval: { ...SILO_BTCB_APPROVE_APPROVAL },\n spenderContract: {\n abi: SILO_VAULT_SPENDER_ABI as Abi,\n address: SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI,\n chainId: chain,\n },\n })),\n },\n },\n};\n\n/**\n * Type for a token that can be used with stake and bake.\n * Includes both Token enum values and virtual tokens like 'BTC'.\n */\nexport type StakeAndBakeToken = DefiRegistryToken;\n\n/**\n * Get supported chains for a protocol/token/env combination.\n *\n * @example\n * ```typescript\n * // Get chains supporting Veda with BTC token on testnet\n * const chains = getStakeAndBakeSupportedChains(DefiProtocol.Veda, 'BTC', Env.testnet);\n * // Returns: [ChainId.binanceSmartChainTestnet, ChainId.holesky]\n * ```\n */\nexport function getStakeAndBakeSupportedChains(\n protocol: DefiProtocol,\n token: StakeAndBakeToken,\n env: Env,\n): ChainId[] {\n const protocolRegistry = DEFI_REGISTRY[protocol];\n if (!protocolRegistry) return [];\n\n const tokenRegistry =\n protocolRegistry[token as keyof typeof protocolRegistry];\n if (!tokenRegistry) return [];\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry) return [];\n\n return Object.keys(envRegistry).map(Number) as ChainId[];\n}\n\n/**\n * Get all supported protocols for stake and bake (regardless of environment).\n */\nexport function getSupportedProtocols(assetId: AssetId): DefiProtocol[] {\n return Object.entries(DEFI_REGISTRY)\n .filter(([_, tokenMap]) => assetId in tokenMap)\n .map(([protocol]) => protocol as DefiProtocol);\n}\n\n/**\n * Get available protocols for a specific environment and token.\n *\n * This filters protocols based on what is actually configured in the DEFI_REGISTRY\n * for the given environment. Use this to determine which protocol options should\n * be shown in the UI.\n *\n * @example\n * ```typescript\n * // Get protocols available for LBTC in production\n * const prodProtocols = getAvailableProtocols(AssetId.LBTC, Env.prod);\n * // Returns: ['veda'] - Silo is only on Avalanche which has no mainnet prod config\n *\n * // Get protocols available for BTCb in testnet\n * const testnetProtocols = getAvailableProtocols(AssetId.BTCb, Env.testnet);\n * // Returns: ['silo'] - Silo is available on Avalanche Fuji in testnet\n * ```\n */\nexport function getAvailableProtocols(\n assetId: AssetId,\n env: Env,\n): DefiProtocol[] {\n // Map asset IDs to registry tokens\n const tokenMap: Partial<Record<AssetId, StakeAndBakeToken[]>> = {\n [AssetId.LBTC]: [Token.LBTC, 'BTC'],\n [AssetId.BTCb]: [Token.BTCb],\n [AssetId.BTC]: ['BTC'],\n };\n\n const tokens = tokenMap[assetId];\n if (!tokens) return [];\n\n const availableProtocols: Set<DefiProtocol> = new Set();\n\n for (const [protocol, tokenStrategyMap] of Object.entries(DEFI_REGISTRY)) {\n for (const token of tokens) {\n const tokenRegistry = tokenStrategyMap[token as keyof typeof tokenStrategyMap];\n if (!tokenRegistry) continue;\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry || Object.keys(envRegistry).length === 0) continue;\n\n availableProtocols.add(protocol as DefiProtocol);\n }\n }\n\n return Array.from(availableProtocols);\n}\n\n/**\n * Get available protocols with their metadata for UI display.\n *\n * @example\n * ```typescript\n * const protocols = getAvailableProtocolsWithMetadata(AssetId.LBTC, Env.prod);\n * // Returns: [{ value: 'veda', label: 'Lombard DeFi Vault', url: '...' }]\n * ```\n */\nexport function getAvailableProtocolsWithMetadata(\n assetId: AssetId,\n env: Env,\n): Array<{ value: DefiProtocol; label: string; url: string }> {\n const protocols = getAvailableProtocols(assetId, env);\n \n return protocols.map(protocol => ({\n value: protocol,\n label: DefiProtocols[protocol]?.name ?? protocol,\n url: DefiProtocols[protocol]?.url ?? '',\n }));\n}\n"],"names":["AssetId","assetValueToKey","value","key","isAssetId","ALL_ENVS","Env","SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI","mapChains","chains","factory","acc","chain","mapEnvs","envs","env","getVedaSpenderContract","chainId","contract","VEDA_VAULT_SPENDER_CONTRACTS","Token","DefiProtocol","DefiProtocols","VEDA_LBTC_PERMIT_APPROVAL","SILO_BTCB_APPROVE_APPROVAL","DEFI_REGISTRY","VEDA_VAULT_STAKE_AND_BAKE_CHAINS","ChainId","SILO_VAULT_SPENDER_ABI","getStakeAndBakeSupportedChains","protocol","token","protocolRegistry","tokenRegistry","envRegistry","getSupportedProtocols","assetId","_","tokenMap","getAvailableProtocols","tokens","availableProtocols","tokenStrategyMap","getAvailableProtocolsWithMetadata","_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"defi-registry-DDNavtO1.cjs","sources":["../../src/core/assets/types.ts","../../src/defi/defi-registry.ts"],"sourcesContent":["/**\n * Asset Types\n *\n * Type definitions for the asset catalog.\n * Designed to be JSON-serializable for S3 hosting.\n *\n * @module core/assets/types\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\n\nimport type { Chain } from '../chains';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Asset Identifiers\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Asset identifiers for all supported assets in the Lombard ecosystem.\n *\n * Naming convention:\n * - Native assets: BTC, ETH, SOL, ZEC, XRP, DOGE\n * - L-Assets (Lombard wrapped): LBTC, L-ETH, L-ZEC, L-XRP, L-DOGE, L-SOL\n * - Wrapped assets: WBTC, BTC.b (Bitcoin on EVM chains)\n */\nexport const AssetId = {\n // Bitcoin assets\n BTC: 'BTC',\n BTCb: 'BTC.b',\n LBTC: 'LBTC',\n BTCK: 'BTCK',\n cbBTC: 'cbBTC',\n WBTC: 'WBTC',\n WBTCN: 'wBTCN',\n eBTC: 'eBTC',\n BTCBinance: 'BTCB',\n\n // Solana assets\n SOL: 'SOL',\n L_SOL: 'L-SOL',\n\n // Sui assets\n SUI: 'SUI',\n L_SUI: 'L-SUI',\n\n // Ethereum assets\n ETH: 'ETH',\n L_ETH: 'L-ETH',\n\n // Zcash assets\n ZEC: 'ZEC',\n L_ZEC: 'L-ZEC',\n\n // XRP assets\n XRP: 'XRP',\n L_XRP: 'L-XRP',\n\n // Dogecoin assets\n DOGE: 'DOGE',\n L_DOGE: 'L-DOGE',\n\n // Stablecoin assets (for BSA)\n USDC: 'USDC',\n USDT: 'USDT',\n DAI: 'DAI',\n} as const;\n\nexport type AssetId = (typeof AssetId)[keyof typeof AssetId];\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Catalog Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Deployment entry for a specific asset on specific chain(s)\n */\nexport interface Deployment {\n /** Environment (prod, testnet, stage, dev) */\n env: Env;\n /** Single chain deployment */\n chain?: Chain;\n /** Multi-chain deployment (same address on multiple chains) */\n chains?: Chain[];\n /** Token contract address */\n address: string;\n /** Asset router contract address */\n assetRouter?: string;\n /** Bridge adapter contract address */\n bridgeAdapter?: string;\n /** Public market maker contract address */\n publicMarketMaker?: string;\n}\n\n/**\n * Asset entry with metadata and deployments\n */\nexport interface AssetEntry {\n /** Token decimals */\n decimals: number;\n /** Token symbol */\n symbol: string;\n /** Token display name */\n name?: string;\n /** All deployments for this asset */\n deployments: Deployment[];\n}\n\n/**\n * Complete asset catalog structure\n */\nexport interface AssetCatalog {\n /** Schema version */\n version: string;\n /** Asset definitions keyed by AssetId */\n assets: Partial<Record<AssetId, AssetEntry>>;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Utility Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** Convert AssetId value to its key name */\nexport function assetValueToKey(value: string): string {\n return (\n Object.keys(AssetId).find(\n key => AssetId[key as keyof typeof AssetId] === value,\n ) ?? ''\n );\n}\n\n/** Type guard to check if a value is a valid AssetId */\nexport function isAssetId(value: unknown): value is AssetId {\n return (\n typeof value === 'string' &&\n Object.values(AssetId).includes(value as AssetId)\n );\n}\n\n/** Get asset display name */\nexport function getAssetDisplayName(assetId: AssetId): string {\n return assetId;\n}\n","/**\n * DeFi Stake & Bake Registry\n *\n * Provides a strongly typed registry of staking integrations so that\n * protocol/token/env/chain support is declarative and composable.\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\nimport { Abi } from 'viem';\n\nimport { ChainId } from '../common/chains';\nimport { ContractInfo } from '../common/contract-info';\nimport { AssetId } from '../core/assets';\nimport { Token } from '../tokens/token-addresses';\nimport { SILO_VAULT_SPENDER_ABI } from '../vaults/abi';\nimport {\n VEDA_VAULT_SPENDER_CONTRACTS,\n VEDA_VAULT_STAKE_AND_BAKE_CHAINS,\n VedaVaultStakeAndBakeChain,\n} from '../vaults/lib/config';\n\n/**\n * Approval mode for stake and bake operations.\n * - `permit`: Off-chain EIP-2612 signature (gasless for user, backend pays gas)\n * - `approve`: On-chain ERC-20 approval transaction (user pays gas)\n */\nexport type ApprovalMode = 'permit' | 'approve';\n\nexport type StakeAndBakeAmountStrategy = 'identity' | 'btcToLbtc';\nexport type StakeAndBakeDeadlineStrategy = 'expiry' | 'zero';\nexport type StakeAndBakeNonceStrategy = 'chain' | 'skip';\n\nexport interface StakeAndBakeStrategyConfig {\n amountStrategy: StakeAndBakeAmountStrategy;\n approval: {\n mode: ApprovalMode;\n domainName: string;\n domainVersion: string;\n deadlineStrategy: StakeAndBakeDeadlineStrategy;\n nonceStrategy: StakeAndBakeNonceStrategy;\n };\n spenderContract: ContractInfo;\n}\n\nexport interface StakeAndBakeStrategy extends StakeAndBakeStrategyConfig {\n protocol: DefiProtocol;\n token: StakeAndBakeToken;\n env: Env;\n chainId: ChainId;\n}\n\ntype ChainStrategyMap = Partial<Record<ChainId, StakeAndBakeStrategyConfig>>;\ntype EnvStrategyMap = Partial<Record<Env, ChainStrategyMap>>;\ntype TokenStrategyMap = Partial<Record<StakeAndBakeToken, EnvStrategyMap>>;\nexport type StakeAndBakeRegistry = Record<DefiProtocol, TokenStrategyMap>;\n\nconst ALL_ENVS = Object.values(Env) as Env[];\n\n// Use single source of truth from vaults/lib/config.ts\n// VEDA_VAULT_STAKE_AND_BAKE_CHAINS is imported and used directly below\n\nexport const SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI: `0x${string}` =\n '0xFe1e76D9e065e879A9D1914482f0F13d85F39877';\n\nfunction mapChains<const C extends readonly ChainId[]>(\n chains: C,\n factory: (chain: C[number]) => StakeAndBakeStrategyConfig,\n): ChainStrategyMap {\n return chains.reduce<ChainStrategyMap>((acc, chain) => {\n acc[chain] = factory(chain);\n return acc;\n }, {} as ChainStrategyMap);\n}\n\nfunction mapEnvs<const E extends readonly Env[]>(\n envs: E,\n factory: (env: E[number]) => ChainStrategyMap,\n): EnvStrategyMap {\n return envs.reduce<EnvStrategyMap>((acc, env) => {\n acc[env] = factory(env);\n return acc;\n }, {} as EnvStrategyMap);\n}\n\nfunction getVedaSpenderContract(\n chainId: VedaVaultStakeAndBakeChain,\n): ContractInfo {\n const contract = VEDA_VAULT_SPENDER_CONTRACTS[chainId];\n if (!contract) {\n throw new Error(`Missing Veda spender contract for chain ${chainId}`);\n }\n return contract;\n}\n\nconst _DefiRegistryTokens = {\n LBTC: Token.LBTC,\n BTCb: Token.BTCb,\n BTC: 'BTC',\n} as const;\n\nexport type DefiRegistryToken =\n (typeof _DefiRegistryTokens)[keyof typeof _DefiRegistryTokens];\n\n/**\n * DeFi Protocol identifiers - SINGLE SOURCE OF TRUTH\n *\n * These are the canonical protocol identifiers used throughout the SDK.\n * All other protocol references should use these values.\n */\nexport const DefiProtocol = {\n Veda: 'veda',\n Silo: 'silo',\n} as const;\n\nexport type DefiProtocol = (typeof DefiProtocol)[keyof typeof DefiProtocol];\n\nexport const DefiProtocols = {\n [DefiProtocol.Veda]: {\n name: 'Lombard DeFi Vault',\n url: 'https://lombard.finance',\n },\n [DefiProtocol.Silo]: {\n name: 'Silo Finance Vault',\n url: 'https://silo.finance',\n },\n} as const;\n\nconst VEDA_LBTC_PERMIT_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'permit',\n domainName: 'Lombard Staked Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'expiry',\n nonceStrategy: 'chain',\n};\n\nconst SILO_BTCB_APPROVE_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'approve',\n domainName: 'Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'zero',\n nonceStrategy: 'skip',\n};\n\n/**\n * DeFi Registry: Token approval configurations by vault, token, env, and chain.\n * \n * TODO: Update the format of this registry to match asset catalog and chain catalog\n */\nexport const DEFI_REGISTRY: StakeAndBakeRegistry = {\n [DefiProtocol.Veda]: {\n [Token.LBTC]: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'identity',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n BTC: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'btcToLbtc',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n },\n [DefiProtocol.Silo]: {\n [Token.BTCb]: {\n // Silo on Avalanche Fuji is only available on testnet (Gastald backend)\n // Stage environment does not support Avalanche Fuji\n [Env.testnet]: mapChains([ChainId.avalancheFuji], chain => ({\n amountStrategy: 'identity',\n approval: { ...SILO_BTCB_APPROVE_APPROVAL },\n spenderContract: {\n abi: SILO_VAULT_SPENDER_ABI as Abi,\n address: SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI,\n chainId: chain,\n },\n })),\n },\n },\n};\n\n/**\n * Type for a token that can be used with stake and bake.\n * Includes both Token enum values and virtual tokens like 'BTC'.\n */\nexport type StakeAndBakeToken = DefiRegistryToken;\n\n/**\n * Get supported chains for a protocol/token/env combination.\n *\n * @example\n * ```typescript\n * // Get chains supporting Veda with BTC token on testnet\n * const chains = getStakeAndBakeSupportedChains(DefiProtocol.Veda, 'BTC', Env.testnet);\n * // Returns: [ChainId.binanceSmartChainTestnet, ChainId.holesky]\n * ```\n */\nexport function getStakeAndBakeSupportedChains(\n protocol: DefiProtocol,\n token: StakeAndBakeToken,\n env: Env,\n): ChainId[] {\n const protocolRegistry = DEFI_REGISTRY[protocol];\n if (!protocolRegistry) return [];\n\n const tokenRegistry =\n protocolRegistry[token as keyof typeof protocolRegistry];\n if (!tokenRegistry) return [];\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry) return [];\n\n return Object.keys(envRegistry).map(Number) as ChainId[];\n}\n\n/**\n * Get all supported protocols for stake and bake (regardless of environment).\n */\nexport function getSupportedProtocols(assetId: AssetId): DefiProtocol[] {\n return Object.entries(DEFI_REGISTRY)\n .filter(([_, tokenMap]) => assetId in tokenMap)\n .map(([protocol]) => protocol as DefiProtocol);\n}\n\n/**\n * Get available protocols for a specific environment and token.\n *\n * This filters protocols based on what is actually configured in the DEFI_REGISTRY\n * for the given environment. Use this to determine which protocol options should\n * be shown in the UI.\n *\n * @example\n * ```typescript\n * // Get protocols available for LBTC in production\n * const prodProtocols = getAvailableProtocols(AssetId.LBTC, Env.prod);\n * // Returns: ['veda'] - Silo is only on Avalanche which has no mainnet prod config\n *\n * // Get protocols available for BTCb in testnet\n * const testnetProtocols = getAvailableProtocols(AssetId.BTCb, Env.testnet);\n * // Returns: ['silo'] - Silo is available on Avalanche Fuji in testnet\n * ```\n */\nexport function getAvailableProtocols(\n assetId: AssetId,\n env: Env,\n): DefiProtocol[] {\n // Map asset IDs to registry tokens\n const tokenMap: Partial<Record<AssetId, StakeAndBakeToken[]>> = {\n [AssetId.LBTC]: [Token.LBTC, 'BTC'],\n [AssetId.BTCb]: [Token.BTCb],\n [AssetId.BTC]: ['BTC'],\n };\n\n const tokens = tokenMap[assetId];\n if (!tokens) return [];\n\n const availableProtocols: Set<DefiProtocol> = new Set();\n\n for (const [protocol, tokenStrategyMap] of Object.entries(DEFI_REGISTRY)) {\n for (const token of tokens) {\n const tokenRegistry = tokenStrategyMap[token as keyof typeof tokenStrategyMap];\n if (!tokenRegistry) continue;\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry || Object.keys(envRegistry).length === 0) continue;\n\n availableProtocols.add(protocol as DefiProtocol);\n }\n }\n\n return Array.from(availableProtocols);\n}\n\n/**\n * Get available protocols with their metadata for UI display.\n *\n * @example\n * ```typescript\n * const protocols = getAvailableProtocolsWithMetadata(AssetId.LBTC, Env.prod);\n * // Returns: [{ value: 'veda', label: 'Lombard DeFi Vault', url: '...' }]\n * ```\n */\nexport function getAvailableProtocolsWithMetadata(\n assetId: AssetId,\n env: Env,\n): Array<{ value: DefiProtocol; label: string; url: string }> {\n const protocols = getAvailableProtocols(assetId, env);\n \n return protocols.map(protocol => ({\n value: protocol,\n label: DefiProtocols[protocol]?.name ?? protocol,\n url: DefiProtocols[protocol]?.url ?? '',\n }));\n}\n"],"names":["AssetId","assetValueToKey","value","key","isAssetId","ALL_ENVS","Env","SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI","mapChains","chains","factory","acc","chain","mapEnvs","envs","env","getVedaSpenderContract","chainId","contract","VEDA_VAULT_SPENDER_CONTRACTS","Token","DefiProtocol","DefiProtocols","VEDA_LBTC_PERMIT_APPROVAL","SILO_BTCB_APPROVE_APPROVAL","DEFI_REGISTRY","VEDA_VAULT_STAKE_AND_BAKE_CHAINS","ChainId","SILO_VAULT_SPENDER_ABI","getStakeAndBakeSupportedChains","protocol","token","protocolRegistry","tokenRegistry","envRegistry","getSupportedProtocols","assetId","_","tokenMap","getAvailableProtocols","tokens","availableProtocols","tokenStrategyMap","getAvailableProtocolsWithMetadata","_a","_b"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as A } from "./index-CfcQ_g3t.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { Token as p, ChainId as L } from "./token-addresses-D0v5cR1j.js";
|
|
3
|
+
import { VEDA_VAULT_STAKE_AND_BAKE_CHAINS as m, VEDA_VAULT_SPENDER_CONTRACTS as _ } from "./config-DghboRx0.js";
|
|
4
4
|
const r = {
|
|
5
5
|
// Bitcoin assets
|
|
6
6
|
BTC: "BTC",
|
|
@@ -158,15 +158,15 @@ function V(e, t) {
|
|
|
158
158
|
});
|
|
159
159
|
}
|
|
160
160
|
export {
|
|
161
|
-
r as
|
|
162
|
-
u as
|
|
163
|
-
y as
|
|
164
|
-
f as
|
|
165
|
-
D as
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
O as
|
|
161
|
+
r as AssetId,
|
|
162
|
+
u as DEFI_REGISTRY,
|
|
163
|
+
y as DefiProtocol,
|
|
164
|
+
f as DefiProtocols,
|
|
165
|
+
D as assetValueToKey,
|
|
166
|
+
g as getAvailableProtocols,
|
|
167
|
+
V as getAvailableProtocolsWithMetadata,
|
|
168
|
+
x as getStakeAndBakeSupportedChains,
|
|
169
|
+
N as getSupportedProtocols,
|
|
170
|
+
O as isAssetId
|
|
171
171
|
};
|
|
172
|
-
//# sourceMappingURL=defi-registry-
|
|
172
|
+
//# sourceMappingURL=defi-registry-DxjjBQTV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defi-registry-wNFN3qyB.js","sources":["../../src/core/assets/types.ts","../../src/defi/defi-registry.ts"],"sourcesContent":["/**\n * Asset Types\n *\n * Type definitions for the asset catalog.\n * Designed to be JSON-serializable for S3 hosting.\n *\n * @module core/assets/types\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\n\nimport type { Chain } from '../chains';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Asset Identifiers\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Asset identifiers for all supported assets in the Lombard ecosystem.\n *\n * Naming convention:\n * - Native assets: BTC, ETH, SOL, ZEC, XRP, DOGE\n * - L-Assets (Lombard wrapped): LBTC, L-ETH, L-ZEC, L-XRP, L-DOGE, L-SOL\n * - Wrapped assets: WBTC, BTC.b (Bitcoin on EVM chains)\n */\nexport const AssetId = {\n // Bitcoin assets\n BTC: 'BTC',\n BTCb: 'BTC.b',\n LBTC: 'LBTC',\n BTCK: 'BTCK',\n cbBTC: 'cbBTC',\n WBTC: 'WBTC',\n WBTCN: 'wBTCN',\n eBTC: 'eBTC',\n BTCBinance: 'BTCB',\n\n // Solana assets\n SOL: 'SOL',\n L_SOL: 'L-SOL',\n\n // Sui assets\n SUI: 'SUI',\n L_SUI: 'L-SUI',\n\n // Ethereum assets\n ETH: 'ETH',\n L_ETH: 'L-ETH',\n\n // Zcash assets\n ZEC: 'ZEC',\n L_ZEC: 'L-ZEC',\n\n // XRP assets\n XRP: 'XRP',\n L_XRP: 'L-XRP',\n\n // Dogecoin assets\n DOGE: 'DOGE',\n L_DOGE: 'L-DOGE',\n\n // Stablecoin assets (for BSA)\n USDC: 'USDC',\n USDT: 'USDT',\n DAI: 'DAI',\n} as const;\n\nexport type AssetId = (typeof AssetId)[keyof typeof AssetId];\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Catalog Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Deployment entry for a specific asset on specific chain(s)\n */\nexport interface Deployment {\n /** Environment (prod, testnet, stage, dev) */\n env: Env;\n /** Single chain deployment */\n chain?: Chain;\n /** Multi-chain deployment (same address on multiple chains) */\n chains?: Chain[];\n /** Token contract address */\n address: string;\n /** Asset router contract address */\n assetRouter?: string;\n /** Bridge adapter contract address */\n bridgeAdapter?: string;\n /** Public market maker contract address */\n publicMarketMaker?: string;\n}\n\n/**\n * Asset entry with metadata and deployments\n */\nexport interface AssetEntry {\n /** Token decimals */\n decimals: number;\n /** Token symbol */\n symbol: string;\n /** Token display name */\n name?: string;\n /** All deployments for this asset */\n deployments: Deployment[];\n}\n\n/**\n * Complete asset catalog structure\n */\nexport interface AssetCatalog {\n /** Schema version */\n version: string;\n /** Asset definitions keyed by AssetId */\n assets: Partial<Record<AssetId, AssetEntry>>;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Utility Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** Convert AssetId value to its key name */\nexport function assetValueToKey(value: string): string {\n return (\n Object.keys(AssetId).find(\n key => AssetId[key as keyof typeof AssetId] === value,\n ) ?? ''\n );\n}\n\n/** Type guard to check if a value is a valid AssetId */\nexport function isAssetId(value: unknown): value is AssetId {\n return (\n typeof value === 'string' &&\n Object.values(AssetId).includes(value as AssetId)\n );\n}\n\n/** Get asset display name */\nexport function getAssetDisplayName(assetId: AssetId): string {\n return assetId;\n}\n","/**\n * DeFi Stake & Bake Registry\n *\n * Provides a strongly typed registry of staking integrations so that\n * protocol/token/env/chain support is declarative and composable.\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\nimport { Abi } from 'viem';\n\nimport { ChainId } from '../common/chains';\nimport { ContractInfo } from '../common/contract-info';\nimport { AssetId } from '../core/assets';\nimport { Token } from '../tokens/token-addresses';\nimport { SILO_VAULT_SPENDER_ABI } from '../vaults/abi';\nimport {\n VEDA_VAULT_SPENDER_CONTRACTS,\n VEDA_VAULT_STAKE_AND_BAKE_CHAINS,\n VedaVaultStakeAndBakeChain,\n} from '../vaults/lib/config';\n\n/**\n * Approval mode for stake and bake operations.\n * - `permit`: Off-chain EIP-2612 signature (gasless for user, backend pays gas)\n * - `approve`: On-chain ERC-20 approval transaction (user pays gas)\n */\nexport type ApprovalMode = 'permit' | 'approve';\n\nexport type StakeAndBakeAmountStrategy = 'identity' | 'btcToLbtc';\nexport type StakeAndBakeDeadlineStrategy = 'expiry' | 'zero';\nexport type StakeAndBakeNonceStrategy = 'chain' | 'skip';\n\nexport interface StakeAndBakeStrategyConfig {\n amountStrategy: StakeAndBakeAmountStrategy;\n approval: {\n mode: ApprovalMode;\n domainName: string;\n domainVersion: string;\n deadlineStrategy: StakeAndBakeDeadlineStrategy;\n nonceStrategy: StakeAndBakeNonceStrategy;\n };\n spenderContract: ContractInfo;\n}\n\nexport interface StakeAndBakeStrategy extends StakeAndBakeStrategyConfig {\n protocol: DefiProtocol;\n token: StakeAndBakeToken;\n env: Env;\n chainId: ChainId;\n}\n\ntype ChainStrategyMap = Partial<Record<ChainId, StakeAndBakeStrategyConfig>>;\ntype EnvStrategyMap = Partial<Record<Env, ChainStrategyMap>>;\ntype TokenStrategyMap = Partial<Record<StakeAndBakeToken, EnvStrategyMap>>;\nexport type StakeAndBakeRegistry = Record<DefiProtocol, TokenStrategyMap>;\n\nconst ALL_ENVS = Object.values(Env) as Env[];\n\n// Use single source of truth from vaults/lib/config.ts\n// VEDA_VAULT_STAKE_AND_BAKE_CHAINS is imported and used directly below\n\nexport const SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI: `0x${string}` =\n '0xFe1e76D9e065e879A9D1914482f0F13d85F39877';\n\nfunction mapChains<const C extends readonly ChainId[]>(\n chains: C,\n factory: (chain: C[number]) => StakeAndBakeStrategyConfig,\n): ChainStrategyMap {\n return chains.reduce<ChainStrategyMap>((acc, chain) => {\n acc[chain] = factory(chain);\n return acc;\n }, {} as ChainStrategyMap);\n}\n\nfunction mapEnvs<const E extends readonly Env[]>(\n envs: E,\n factory: (env: E[number]) => ChainStrategyMap,\n): EnvStrategyMap {\n return envs.reduce<EnvStrategyMap>((acc, env) => {\n acc[env] = factory(env);\n return acc;\n }, {} as EnvStrategyMap);\n}\n\nfunction getVedaSpenderContract(\n chainId: VedaVaultStakeAndBakeChain,\n): ContractInfo {\n const contract = VEDA_VAULT_SPENDER_CONTRACTS[chainId];\n if (!contract) {\n throw new Error(`Missing Veda spender contract for chain ${chainId}`);\n }\n return contract;\n}\n\nconst _DefiRegistryTokens = {\n LBTC: Token.LBTC,\n BTCb: Token.BTCb,\n BTC: 'BTC',\n} as const;\n\nexport type DefiRegistryToken =\n (typeof _DefiRegistryTokens)[keyof typeof _DefiRegistryTokens];\n\n/**\n * DeFi Protocol identifiers - SINGLE SOURCE OF TRUTH\n *\n * These are the canonical protocol identifiers used throughout the SDK.\n * All other protocol references should use these values.\n */\nexport const DefiProtocol = {\n Veda: 'veda',\n Silo: 'silo',\n} as const;\n\nexport type DefiProtocol = (typeof DefiProtocol)[keyof typeof DefiProtocol];\n\nexport const DefiProtocols = {\n [DefiProtocol.Veda]: {\n name: 'Lombard DeFi Vault',\n url: 'https://lombard.finance',\n },\n [DefiProtocol.Silo]: {\n name: 'Silo Finance Vault',\n url: 'https://silo.finance',\n },\n} as const;\n\nconst VEDA_LBTC_PERMIT_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'permit',\n domainName: 'Lombard Staked Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'expiry',\n nonceStrategy: 'chain',\n};\n\nconst SILO_BTCB_APPROVE_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'approve',\n domainName: 'Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'zero',\n nonceStrategy: 'skip',\n};\n\n/**\n * DeFi Registry: Token approval configurations by vault, token, env, and chain.\n * \n * TODO: Update the format of this registry to match asset catalog and chain catalog\n */\nexport const DEFI_REGISTRY: StakeAndBakeRegistry = {\n [DefiProtocol.Veda]: {\n [Token.LBTC]: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'identity',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n BTC: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'btcToLbtc',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n },\n [DefiProtocol.Silo]: {\n [Token.BTCb]: {\n // Silo on Avalanche Fuji is only available on testnet (Gastald backend)\n // Stage environment does not support Avalanche Fuji\n [Env.testnet]: mapChains([ChainId.avalancheFuji], chain => ({\n amountStrategy: 'identity',\n approval: { ...SILO_BTCB_APPROVE_APPROVAL },\n spenderContract: {\n abi: SILO_VAULT_SPENDER_ABI as Abi,\n address: SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI,\n chainId: chain,\n },\n })),\n },\n },\n};\n\n/**\n * Type for a token that can be used with stake and bake.\n * Includes both Token enum values and virtual tokens like 'BTC'.\n */\nexport type StakeAndBakeToken = DefiRegistryToken;\n\n/**\n * Get supported chains for a protocol/token/env combination.\n *\n * @example\n * ```typescript\n * // Get chains supporting Veda with BTC token on testnet\n * const chains = getStakeAndBakeSupportedChains(DefiProtocol.Veda, 'BTC', Env.testnet);\n * // Returns: [ChainId.binanceSmartChainTestnet, ChainId.holesky]\n * ```\n */\nexport function getStakeAndBakeSupportedChains(\n protocol: DefiProtocol,\n token: StakeAndBakeToken,\n env: Env,\n): ChainId[] {\n const protocolRegistry = DEFI_REGISTRY[protocol];\n if (!protocolRegistry) return [];\n\n const tokenRegistry =\n protocolRegistry[token as keyof typeof protocolRegistry];\n if (!tokenRegistry) return [];\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry) return [];\n\n return Object.keys(envRegistry).map(Number) as ChainId[];\n}\n\n/**\n * Get all supported protocols for stake and bake (regardless of environment).\n */\nexport function getSupportedProtocols(assetId: AssetId): DefiProtocol[] {\n return Object.entries(DEFI_REGISTRY)\n .filter(([_, tokenMap]) => assetId in tokenMap)\n .map(([protocol]) => protocol as DefiProtocol);\n}\n\n/**\n * Get available protocols for a specific environment and token.\n *\n * This filters protocols based on what is actually configured in the DEFI_REGISTRY\n * for the given environment. Use this to determine which protocol options should\n * be shown in the UI.\n *\n * @example\n * ```typescript\n * // Get protocols available for LBTC in production\n * const prodProtocols = getAvailableProtocols(AssetId.LBTC, Env.prod);\n * // Returns: ['veda'] - Silo is only on Avalanche which has no mainnet prod config\n *\n * // Get protocols available for BTCb in testnet\n * const testnetProtocols = getAvailableProtocols(AssetId.BTCb, Env.testnet);\n * // Returns: ['silo'] - Silo is available on Avalanche Fuji in testnet\n * ```\n */\nexport function getAvailableProtocols(\n assetId: AssetId,\n env: Env,\n): DefiProtocol[] {\n // Map asset IDs to registry tokens\n const tokenMap: Partial<Record<AssetId, StakeAndBakeToken[]>> = {\n [AssetId.LBTC]: [Token.LBTC, 'BTC'],\n [AssetId.BTCb]: [Token.BTCb],\n [AssetId.BTC]: ['BTC'],\n };\n\n const tokens = tokenMap[assetId];\n if (!tokens) return [];\n\n const availableProtocols: Set<DefiProtocol> = new Set();\n\n for (const [protocol, tokenStrategyMap] of Object.entries(DEFI_REGISTRY)) {\n for (const token of tokens) {\n const tokenRegistry = tokenStrategyMap[token as keyof typeof tokenStrategyMap];\n if (!tokenRegistry) continue;\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry || Object.keys(envRegistry).length === 0) continue;\n\n availableProtocols.add(protocol as DefiProtocol);\n }\n }\n\n return Array.from(availableProtocols);\n}\n\n/**\n * Get available protocols with their metadata for UI display.\n *\n * @example\n * ```typescript\n * const protocols = getAvailableProtocolsWithMetadata(AssetId.LBTC, Env.prod);\n * // Returns: [{ value: 'veda', label: 'Lombard DeFi Vault', url: '...' }]\n * ```\n */\nexport function getAvailableProtocolsWithMetadata(\n assetId: AssetId,\n env: Env,\n): Array<{ value: DefiProtocol; label: string; url: string }> {\n const protocols = getAvailableProtocols(assetId, env);\n \n return protocols.map(protocol => ({\n value: protocol,\n label: DefiProtocols[protocol]?.name ?? protocol,\n url: DefiProtocols[protocol]?.url ?? '',\n }));\n}\n"],"names":["AssetId","assetValueToKey","value","key","isAssetId","ALL_ENVS","Env","SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI","mapChains","chains","factory","acc","chain","mapEnvs","envs","env","getVedaSpenderContract","chainId","contract","VEDA_VAULT_SPENDER_CONTRACTS","Token","DefiProtocol","DefiProtocols","VEDA_LBTC_PERMIT_APPROVAL","SILO_BTCB_APPROVE_APPROVAL","DEFI_REGISTRY","VEDA_VAULT_STAKE_AND_BAKE_CHAINS","ChainId","SILO_VAULT_SPENDER_ABI","getStakeAndBakeSupportedChains","protocol","token","protocolRegistry","tokenRegistry","envRegistry","getSupportedProtocols","assetId","_","tokenMap","getAvailableProtocols","tokens","availableProtocols","tokenStrategyMap","getAvailableProtocolsWithMetadata","_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"defi-registry-DxjjBQTV.js","sources":["../../src/core/assets/types.ts","../../src/defi/defi-registry.ts"],"sourcesContent":["/**\n * Asset Types\n *\n * Type definitions for the asset catalog.\n * Designed to be JSON-serializable for S3 hosting.\n *\n * @module core/assets/types\n */\n\nimport type { Env } from '@lombard.finance/sdk-common';\n\nimport type { Chain } from '../chains';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Asset Identifiers\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Asset identifiers for all supported assets in the Lombard ecosystem.\n *\n * Naming convention:\n * - Native assets: BTC, ETH, SOL, ZEC, XRP, DOGE\n * - L-Assets (Lombard wrapped): LBTC, L-ETH, L-ZEC, L-XRP, L-DOGE, L-SOL\n * - Wrapped assets: WBTC, BTC.b (Bitcoin on EVM chains)\n */\nexport const AssetId = {\n // Bitcoin assets\n BTC: 'BTC',\n BTCb: 'BTC.b',\n LBTC: 'LBTC',\n BTCK: 'BTCK',\n cbBTC: 'cbBTC',\n WBTC: 'WBTC',\n WBTCN: 'wBTCN',\n eBTC: 'eBTC',\n BTCBinance: 'BTCB',\n\n // Solana assets\n SOL: 'SOL',\n L_SOL: 'L-SOL',\n\n // Sui assets\n SUI: 'SUI',\n L_SUI: 'L-SUI',\n\n // Ethereum assets\n ETH: 'ETH',\n L_ETH: 'L-ETH',\n\n // Zcash assets\n ZEC: 'ZEC',\n L_ZEC: 'L-ZEC',\n\n // XRP assets\n XRP: 'XRP',\n L_XRP: 'L-XRP',\n\n // Dogecoin assets\n DOGE: 'DOGE',\n L_DOGE: 'L-DOGE',\n\n // Stablecoin assets (for BSA)\n USDC: 'USDC',\n USDT: 'USDT',\n DAI: 'DAI',\n} as const;\n\nexport type AssetId = (typeof AssetId)[keyof typeof AssetId];\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Catalog Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Deployment entry for a specific asset on specific chain(s)\n */\nexport interface Deployment {\n /** Environment (prod, testnet, stage, dev) */\n env: Env;\n /** Single chain deployment */\n chain?: Chain;\n /** Multi-chain deployment (same address on multiple chains) */\n chains?: Chain[];\n /** Token contract address */\n address: string;\n /** Asset router contract address */\n assetRouter?: string;\n /** Bridge adapter contract address */\n bridgeAdapter?: string;\n /** Public market maker contract address */\n publicMarketMaker?: string;\n}\n\n/**\n * Asset entry with metadata and deployments\n */\nexport interface AssetEntry {\n /** Token decimals */\n decimals: number;\n /** Token symbol */\n symbol: string;\n /** Token display name */\n name?: string;\n /** All deployments for this asset */\n deployments: Deployment[];\n}\n\n/**\n * Complete asset catalog structure\n */\nexport interface AssetCatalog {\n /** Schema version */\n version: string;\n /** Asset definitions keyed by AssetId */\n assets: Partial<Record<AssetId, AssetEntry>>;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Utility Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/** Convert AssetId value to its key name */\nexport function assetValueToKey(value: string): string {\n return (\n Object.keys(AssetId).find(\n key => AssetId[key as keyof typeof AssetId] === value,\n ) ?? ''\n );\n}\n\n/** Type guard to check if a value is a valid AssetId */\nexport function isAssetId(value: unknown): value is AssetId {\n return (\n typeof value === 'string' &&\n Object.values(AssetId).includes(value as AssetId)\n );\n}\n\n/** Get asset display name */\nexport function getAssetDisplayName(assetId: AssetId): string {\n return assetId;\n}\n","/**\n * DeFi Stake & Bake Registry\n *\n * Provides a strongly typed registry of staking integrations so that\n * protocol/token/env/chain support is declarative and composable.\n */\n\nimport { Env } from '@lombard.finance/sdk-common';\nimport { Abi } from 'viem';\n\nimport { ChainId } from '../common/chains';\nimport { ContractInfo } from '../common/contract-info';\nimport { AssetId } from '../core/assets';\nimport { Token } from '../tokens/token-addresses';\nimport { SILO_VAULT_SPENDER_ABI } from '../vaults/abi';\nimport {\n VEDA_VAULT_SPENDER_CONTRACTS,\n VEDA_VAULT_STAKE_AND_BAKE_CHAINS,\n VedaVaultStakeAndBakeChain,\n} from '../vaults/lib/config';\n\n/**\n * Approval mode for stake and bake operations.\n * - `permit`: Off-chain EIP-2612 signature (gasless for user, backend pays gas)\n * - `approve`: On-chain ERC-20 approval transaction (user pays gas)\n */\nexport type ApprovalMode = 'permit' | 'approve';\n\nexport type StakeAndBakeAmountStrategy = 'identity' | 'btcToLbtc';\nexport type StakeAndBakeDeadlineStrategy = 'expiry' | 'zero';\nexport type StakeAndBakeNonceStrategy = 'chain' | 'skip';\n\nexport interface StakeAndBakeStrategyConfig {\n amountStrategy: StakeAndBakeAmountStrategy;\n approval: {\n mode: ApprovalMode;\n domainName: string;\n domainVersion: string;\n deadlineStrategy: StakeAndBakeDeadlineStrategy;\n nonceStrategy: StakeAndBakeNonceStrategy;\n };\n spenderContract: ContractInfo;\n}\n\nexport interface StakeAndBakeStrategy extends StakeAndBakeStrategyConfig {\n protocol: DefiProtocol;\n token: StakeAndBakeToken;\n env: Env;\n chainId: ChainId;\n}\n\ntype ChainStrategyMap = Partial<Record<ChainId, StakeAndBakeStrategyConfig>>;\ntype EnvStrategyMap = Partial<Record<Env, ChainStrategyMap>>;\ntype TokenStrategyMap = Partial<Record<StakeAndBakeToken, EnvStrategyMap>>;\nexport type StakeAndBakeRegistry = Record<DefiProtocol, TokenStrategyMap>;\n\nconst ALL_ENVS = Object.values(Env) as Env[];\n\n// Use single source of truth from vaults/lib/config.ts\n// VEDA_VAULT_STAKE_AND_BAKE_CHAINS is imported and used directly below\n\nexport const SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI: `0x${string}` =\n '0xFe1e76D9e065e879A9D1914482f0F13d85F39877';\n\nfunction mapChains<const C extends readonly ChainId[]>(\n chains: C,\n factory: (chain: C[number]) => StakeAndBakeStrategyConfig,\n): ChainStrategyMap {\n return chains.reduce<ChainStrategyMap>((acc, chain) => {\n acc[chain] = factory(chain);\n return acc;\n }, {} as ChainStrategyMap);\n}\n\nfunction mapEnvs<const E extends readonly Env[]>(\n envs: E,\n factory: (env: E[number]) => ChainStrategyMap,\n): EnvStrategyMap {\n return envs.reduce<EnvStrategyMap>((acc, env) => {\n acc[env] = factory(env);\n return acc;\n }, {} as EnvStrategyMap);\n}\n\nfunction getVedaSpenderContract(\n chainId: VedaVaultStakeAndBakeChain,\n): ContractInfo {\n const contract = VEDA_VAULT_SPENDER_CONTRACTS[chainId];\n if (!contract) {\n throw new Error(`Missing Veda spender contract for chain ${chainId}`);\n }\n return contract;\n}\n\nconst _DefiRegistryTokens = {\n LBTC: Token.LBTC,\n BTCb: Token.BTCb,\n BTC: 'BTC',\n} as const;\n\nexport type DefiRegistryToken =\n (typeof _DefiRegistryTokens)[keyof typeof _DefiRegistryTokens];\n\n/**\n * DeFi Protocol identifiers - SINGLE SOURCE OF TRUTH\n *\n * These are the canonical protocol identifiers used throughout the SDK.\n * All other protocol references should use these values.\n */\nexport const DefiProtocol = {\n Veda: 'veda',\n Silo: 'silo',\n} as const;\n\nexport type DefiProtocol = (typeof DefiProtocol)[keyof typeof DefiProtocol];\n\nexport const DefiProtocols = {\n [DefiProtocol.Veda]: {\n name: 'Lombard DeFi Vault',\n url: 'https://lombard.finance',\n },\n [DefiProtocol.Silo]: {\n name: 'Silo Finance Vault',\n url: 'https://silo.finance',\n },\n} as const;\n\nconst VEDA_LBTC_PERMIT_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'permit',\n domainName: 'Lombard Staked Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'expiry',\n nonceStrategy: 'chain',\n};\n\nconst SILO_BTCB_APPROVE_APPROVAL: StakeAndBakeStrategyConfig['approval'] = {\n mode: 'approve',\n domainName: 'Bitcoin',\n domainVersion: '1',\n deadlineStrategy: 'zero',\n nonceStrategy: 'skip',\n};\n\n/**\n * DeFi Registry: Token approval configurations by vault, token, env, and chain.\n * \n * TODO: Update the format of this registry to match asset catalog and chain catalog\n */\nexport const DEFI_REGISTRY: StakeAndBakeRegistry = {\n [DefiProtocol.Veda]: {\n [Token.LBTC]: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'identity',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n BTC: mapEnvs(ALL_ENVS, () =>\n mapChains(VEDA_VAULT_STAKE_AND_BAKE_CHAINS, chain => ({\n amountStrategy: 'btcToLbtc',\n approval: { ...VEDA_LBTC_PERMIT_APPROVAL },\n spenderContract: getVedaSpenderContract(chain),\n })),\n ),\n },\n [DefiProtocol.Silo]: {\n [Token.BTCb]: {\n // Silo on Avalanche Fuji is only available on testnet (Gastald backend)\n // Stage environment does not support Avalanche Fuji\n [Env.testnet]: mapChains([ChainId.avalancheFuji], chain => ({\n amountStrategy: 'identity',\n approval: { ...SILO_BTCB_APPROVE_APPROVAL },\n spenderContract: {\n abi: SILO_VAULT_SPENDER_ABI as Abi,\n address: SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI,\n chainId: chain,\n },\n })),\n },\n },\n};\n\n/**\n * Type for a token that can be used with stake and bake.\n * Includes both Token enum values and virtual tokens like 'BTC'.\n */\nexport type StakeAndBakeToken = DefiRegistryToken;\n\n/**\n * Get supported chains for a protocol/token/env combination.\n *\n * @example\n * ```typescript\n * // Get chains supporting Veda with BTC token on testnet\n * const chains = getStakeAndBakeSupportedChains(DefiProtocol.Veda, 'BTC', Env.testnet);\n * // Returns: [ChainId.binanceSmartChainTestnet, ChainId.holesky]\n * ```\n */\nexport function getStakeAndBakeSupportedChains(\n protocol: DefiProtocol,\n token: StakeAndBakeToken,\n env: Env,\n): ChainId[] {\n const protocolRegistry = DEFI_REGISTRY[protocol];\n if (!protocolRegistry) return [];\n\n const tokenRegistry =\n protocolRegistry[token as keyof typeof protocolRegistry];\n if (!tokenRegistry) return [];\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry) return [];\n\n return Object.keys(envRegistry).map(Number) as ChainId[];\n}\n\n/**\n * Get all supported protocols for stake and bake (regardless of environment).\n */\nexport function getSupportedProtocols(assetId: AssetId): DefiProtocol[] {\n return Object.entries(DEFI_REGISTRY)\n .filter(([_, tokenMap]) => assetId in tokenMap)\n .map(([protocol]) => protocol as DefiProtocol);\n}\n\n/**\n * Get available protocols for a specific environment and token.\n *\n * This filters protocols based on what is actually configured in the DEFI_REGISTRY\n * for the given environment. Use this to determine which protocol options should\n * be shown in the UI.\n *\n * @example\n * ```typescript\n * // Get protocols available for LBTC in production\n * const prodProtocols = getAvailableProtocols(AssetId.LBTC, Env.prod);\n * // Returns: ['veda'] - Silo is only on Avalanche which has no mainnet prod config\n *\n * // Get protocols available for BTCb in testnet\n * const testnetProtocols = getAvailableProtocols(AssetId.BTCb, Env.testnet);\n * // Returns: ['silo'] - Silo is available on Avalanche Fuji in testnet\n * ```\n */\nexport function getAvailableProtocols(\n assetId: AssetId,\n env: Env,\n): DefiProtocol[] {\n // Map asset IDs to registry tokens\n const tokenMap: Partial<Record<AssetId, StakeAndBakeToken[]>> = {\n [AssetId.LBTC]: [Token.LBTC, 'BTC'],\n [AssetId.BTCb]: [Token.BTCb],\n [AssetId.BTC]: ['BTC'],\n };\n\n const tokens = tokenMap[assetId];\n if (!tokens) return [];\n\n const availableProtocols: Set<DefiProtocol> = new Set();\n\n for (const [protocol, tokenStrategyMap] of Object.entries(DEFI_REGISTRY)) {\n for (const token of tokens) {\n const tokenRegistry = tokenStrategyMap[token as keyof typeof tokenStrategyMap];\n if (!tokenRegistry) continue;\n\n const envRegistry = tokenRegistry[env];\n if (!envRegistry || Object.keys(envRegistry).length === 0) continue;\n\n availableProtocols.add(protocol as DefiProtocol);\n }\n }\n\n return Array.from(availableProtocols);\n}\n\n/**\n * Get available protocols with their metadata for UI display.\n *\n * @example\n * ```typescript\n * const protocols = getAvailableProtocolsWithMetadata(AssetId.LBTC, Env.prod);\n * // Returns: [{ value: 'veda', label: 'Lombard DeFi Vault', url: '...' }]\n * ```\n */\nexport function getAvailableProtocolsWithMetadata(\n assetId: AssetId,\n env: Env,\n): Array<{ value: DefiProtocol; label: string; url: string }> {\n const protocols = getAvailableProtocols(assetId, env);\n \n return protocols.map(protocol => ({\n value: protocol,\n label: DefiProtocols[protocol]?.name ?? protocol,\n url: DefiProtocols[protocol]?.url ?? '',\n }));\n}\n"],"names":["AssetId","assetValueToKey","value","key","isAssetId","ALL_ENVS","Env","SILO_VAULT_SPENDER_CONTRACT_GASTALD_FUJI","mapChains","chains","factory","acc","chain","mapEnvs","envs","env","getVedaSpenderContract","chainId","contract","VEDA_VAULT_SPENDER_CONTRACTS","Token","DefiProtocol","DefiProtocols","VEDA_LBTC_PERMIT_APPROVAL","SILO_BTCB_APPROVE_APPROVAL","DEFI_REGISTRY","VEDA_VAULT_STAKE_AND_BAKE_CHAINS","ChainId","SILO_VAULT_SPENDER_ABI","getStakeAndBakeSupportedChains","protocol","token","protocolRegistry","tokenRegistry","envRegistry","getSupportedProtocols","assetId","_","tokenMap","getAvailableProtocols","tokens","availableProtocols","tokenStrategyMap","getAvailableProtocolsWithMetadata","_a","_b"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const p=require("axios"),_=require("bignumber.js"),S=require("./api-config-DkXqqfCK.cjs"),g=require("./blockchain-identifier-BTPGxLio.cjs"),I=require("./token-addresses-nzvTOi24.cjs"),f=require("./constants-ueShGH9R.cjs"),N=require("./satoshi-CZEsHl5X.cjs"),C=require("./tokens-BkvA0Gp1.cjs"),s=require("./ReferralsClient-Cmrjo9bN.cjs");async function b({env:e,chainId:t=I.ChainId.ethereum,amount:i=N.toSatoshi(1)}){const{baseApiUrl:r}=S.getApiConfig(e),n=g.getChainNameById(t),{data:o}=await p.get(`api/v1/exchange/rate/${n}`,{baseURL:r,params:{amount:i}}),u=_(o.amount_out).toNumber(),c=_(i).dividedBy(o.amount_out).toNumber(),a=N.toSatoshi(f.MIN_STAKE_AMOUNT_BTC).toNumber();return{amountOut:u,exchangeRate:c,minAmount:a}}const E="api/v1/referral-system/referrer/";async function y({address:e,signature:t,eip712Data:i,referrerCode:r,pubKey:n,env:o}){const{baseApiUrl:u}=S.getApiConfig(o),c={referrer_code:r,signature:t,signature_typed_data:i,...n&&{public_key:n}};try{await p.post(`${E}${e}`,c,{baseURL:u});return}catch(a){const m=C.getErrorMessage(a);throw new Error(m)}}const T=6,R=f.MIN_STAKE_AMOUNT_BTC;function d(e,t){return!t||!e?0:Math.max(0,e-t+1)}function O(e,t,i=T){if(e===void 0||t===void 0)return null;const r=d(e,t),n=Math.min(100,Math.round(r/i*100));return{current:r,required:i,percentage:n,isComplete:r>=i}}function l(e,t,i=T){var a,m;if(e.sanctioned)return"restricted";if(e.isClaimed||e.claimTxHash)return"claimed";if(e.notarizationStatus===s.ENotarizationStatus.NOTARIZATION_STATUS_GMP_HANDLED)return"auto_claimed";const r=((m=(a=e.amount)==null?void 0:a.toNumber)==null?void 0:m.call(a))??Number(e.amount);if(r>0&&r<f.MIN_STAKE_AMOUNT_BTC)return"too_small";if(e.notarizationStatus===s.ENotarizationStatus.NOTARIZATION_STATUS_FAILED)return"failed";if(e.sessionState===s.ESessionState.SESSION_STATE_EXPIRED)return"expired";const n=!!e.proof&&!!e.rawPayload,o=e.notarizationStatus,u=d(t,e.blockHeight),c=t===void 0||u>=i;switch(o){case s.ENotarizationStatus.NOTARIZATION_STATUS_PENDING:case s.ENotarizationStatus.NOTARIZATION_STATUS_SUBMITTED:return t!==void 0&&!c?"pending_confirmations":"pending_notarization";case s.ENotarizationStatus.NOTARIZATION_STATUS_SESSION_APPROVED:return n?"claimable":"pending_notarization";case s.ENotarizationStatus.NOTARIZATION_STATUS_UNSPECIFIED:default:return t!==void 0&&!c?"pending_confirmations":"pending_notarization"}}function A(e){switch(e){case"pending_confirmations":return{label:"Pending Confirmations",severity:"warning",description:`Waiting for Bitcoin block confirmations (${T} required)`,isTerminal:!1,requiresAction:!1};case"pending_notarization":return{label:"Pending Notarization",severity:"info",description:"Confirmations complete, waiting for notarization service to generate proof",isTerminal:!1,requiresAction:!1};case"claimable":return{label:"Claimable",severity:"success",description:"Ready to mint - proof available, claim to receive tokens",isTerminal:!1,requiresAction:!0};case"claiming":return{label:"Claiming",severity:"info",description:"Claim transaction in progress",isTerminal:!1,requiresAction:!1};case"claimed":return{label:"Claimed",severity:"neutral",description:"Tokens have been minted to your address",isTerminal:!0,requiresAction:!1};case"auto_claimed":return{label:"Auto-Claimed",severity:"success",description:"Automatically claimed via cross-chain messaging (GMP)",isTerminal:!0,requiresAction:!1};case"expired":return{label:"Expired",severity:"error",description:"Fee signature expired, requires re-authorization",isTerminal:!1,requiresAction:!0};case"failed":return{label:"Failed",severity:"error",description:"Notarization failed - contact support",isTerminal:!0,requiresAction:!1};case"restricted":return{label:"Restricted",severity:"error",description:"This deposit is restricted or sanctioned",isTerminal:!0,requiresAction:!1};case"too_small":return{label:"Too Small",severity:"neutral",description:`Amount below minimum claimable amount (${f.MIN_STAKE_AMOUNT_BTC} BTC)`,isTerminal:!0,requiresAction:!1}}}function q(e,t){return l(e,t)==="claimable"}function v(e,t){const i=l(e,t);return i==="pending_confirmations"||i==="pending_notarization"}function M(e,t){const i=l(e,t);return A(i).isTerminal}function D(e,t){const i=l(e,t);return A(i).requiresAction}exports.MIN_CLAIM_AMOUNT_BTC=R;exports.REQUIRED_CONFIRMATIONS=T;exports.calcConfirmations=d;exports.depositRequiresAction=D;exports.getConfirmationProgress=O;exports.getDepositStatus=l;exports.getDepositStatusDisplay=A;exports.getLBTCExchangeRate=b;exports.isDepositClaimable=q;exports.isDepositPending=v;exports.isDepositTerminal=M;exports.setReferral=y;
|
|
2
|
+
//# sourceMappingURL=depositStatus-CFo5jW89.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depositStatus-CFo5jW89.cjs","sources":["../../src/api-functions/getLBTCExchangeRate/getLBTCExchangeRate.ts","../../src/api-functions/setReferral/setReferral.ts","../../src/shared/deposits/depositStatus.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\n\nimport { getApiConfig } from '../../common/api-config';\nimport { getChainNameById } from '../../common/blockchain-identifier';\nimport { ChainId } from '../../common/chains';\nimport { MIN_STAKE_AMOUNT_BTC } from '../../common/constants';\nimport { IEnvParam } from '../../common/parameters';\nimport { toSatoshi } from '../../utils/satoshi';\n\ntype ExchangeRateResponse = {\n amount_out: string;\n};\n\nexport interface IgetLBTCExchangeRateParams extends IEnvParam {\n /**\n * The optional chain id of the asset to get the exchange rate for.\n * Note: Exchange rate it the same for all chains.\n *\n * @default OChainId.ethereum\n */\n chainId?: ChainId;\n /**\n * The amount of the LBTC (in satoshis) that a user would like to exchange to BTC.\n */\n amount?: BigNumber.Value;\n}\n\nexport interface IgetLBTCExchangeRateResponse {\n /**\n * The exchanged amount (in satoshis).\n */\n amountOut: number;\n /**\n * The exchange rate for LBTC/BTC.\n */\n exchangeRate: number;\n /**\n * The minimum amount of BTC eligible for staking (in satoshis).\n */\n minAmount: number;\n}\n\n/**\n * Retrieves the exchange rate for LBTC.\n *\n * @deprecated This API endpoint is deprecated and will be removed in a future version.\n * The exchange rate is now always 1:1 as LBTC is a rebasing token.\n *\n * @param {IgetLBTCExchangeRateParams} parameters - The parameters.\n * @param {BigNumber.Value} parameters.amount - The optional amount to be exchanged.\n * @param {ChainId} parameters.chainId - The optional chain id.\n * @param {Env} parameters.env - The optional environment identifier.\n *\n * @returns {Promise<IgetLBTCExchangeRateResponse>} - The exchange rate.\n */\nexport async function getLBTCExchangeRate({\n env,\n chainId = ChainId.ethereum,\n amount = toSatoshi(1),\n}: IgetLBTCExchangeRateParams): Promise<IgetLBTCExchangeRateResponse> {\n const { baseApiUrl } = getApiConfig(env);\n const chainIdName = getChainNameById(chainId);\n\n const { data } = await axios.get<ExchangeRateResponse>(\n `api/v1/exchange/rate/${chainIdName}`,\n { baseURL: baseApiUrl, params: { amount } },\n );\n\n const amountOut = BigNumber(data.amount_out).toNumber();\n const exchangeRate = BigNumber(amount).dividedBy(data.amount_out).toNumber();\n const minAmount = toSatoshi(MIN_STAKE_AMOUNT_BTC).toNumber();\n\n return { amountOut, exchangeRate, minAmount };\n}\n","import axios from 'axios';\n\nimport { getApiConfig } from '../../common/api-config';\nimport { IEnvParam } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\n\nconst URL = 'api/v1/referral-system/referrer/';\n\nexport interface ISetReferralParams extends IEnvParam {\n /**\n * The destination EVM user address where LBTC will be claimed.\n */\n address: string;\n /**\n * The signature of the address. The signature is generated by signing the address using wallet.\n * Use `signTermsOfService` or `signLbtcDestinationAddr` functions.\n */\n signature: string;\n /**\n * The captcha token.\n */\n referrerCode: string;\n /**\n * The typed data object used to generate the signature if using a network fee authorization signature.\n */\n eip712Data?: string;\n /**\n * The public key (required for Starknet).\n */\n pubKey?: string;\n}\n\n/**\n * Set a referral code.\n *\n * @param {ISetReferralParams} The parameters for set referral.\n * @returns {Promise<void>} Nothing.\n * @exception {Error}\n */\nexport async function setReferral({\n address,\n signature,\n eip712Data,\n referrerCode,\n pubKey,\n env,\n}: ISetReferralParams): Promise<void> {\n const { baseApiUrl } = getApiConfig(env);\n\n const requestParams = {\n referrer_code: referrerCode,\n signature,\n signature_typed_data: eip712Data,\n ...(pubKey && { public_key: pubKey }),\n };\n\n try {\n await axios.post(`${URL}${address}`, requestParams, {\n baseURL: baseApiUrl,\n });\n\n return undefined;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n throw new Error(errorMsg);\n }\n}\n","/**\n * Deposit Status Utilities\n *\n * Centralized logic for determining deposit status based on notarization state,\n * confirmations, and other factors. This module provides a single source of truth\n * for deposit status that can be used by the SDK demo, apps/main, and other consumers.\n *\n * Status determination is based on both notarization status and block confirmations.\n * The notarization status from the backend is the primary source of truth for where\n * in the flow a deposit currently is.\n *\n * @module shared/deposits/depositStatus\n */\n\nimport {\n type Deposit,\n ENotarizationStatus,\n ESessionState,\n} from '../../api-functions/getDepositsByAddress/getDepositsByAddress';\nimport { MIN_STAKE_AMOUNT_BTC } from '../../common/constants';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Constants\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Number of confirmations required before a deposit can be claimed.\n * Production/Testnet: 6, Stage/Dev: 3\n */\nexport const REQUIRED_CONFIRMATIONS = 6;\n\n/**\n * Minimum deposit amount that can be claimed (in BTC).\n * Deposits below this amount cannot be minted.\n *\n * @deprecated Use `MIN_STAKE_AMOUNT_BTC` from `@lombard.finance/sdk` instead.\n * This constant is an alias kept for backwards compatibility.\n */\nexport const MIN_CLAIM_AMOUNT_BTC = MIN_STAKE_AMOUNT_BTC;\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Types\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Possible deposit statuses - ordered by lifecycle\n */\nexport type DepositStatus =\n | 'pending_confirmations' // Waiting for BTC block confirmations\n | 'pending_notarization' // Confirmations complete, waiting for notarization service\n | 'claimable' // Notarization approved, ready to be claimed manually\n | 'claiming' // Claim transaction submitted\n | 'claimed' // Successfully claimed (has claimTxHash)\n | 'auto_claimed' // Claimed via GMP (cross-chain messaging)\n | 'expired' // Signature expired, needs re-auth\n | 'failed' // Notarization failed\n | 'restricted' // Sanctioned or restricted\n | 'too_small'; // Amount below minimum\n\n/**\n * Status severity for UI styling\n */\nexport type StatusSeverity = 'info' | 'warning' | 'success' | 'error' | 'neutral';\n\n/**\n * Status display configuration\n */\nexport interface DepositStatusDisplay {\n /** Human-readable label for the status */\n label: string;\n /** Severity level for styling */\n severity: StatusSeverity;\n /** Detailed description of the status */\n description: string;\n /** Whether the deposit is in a terminal state (claimed, failed, restricted) */\n isTerminal: boolean;\n /** Whether user action is required */\n requiresAction: boolean;\n}\n\n/**\n * Confirmation progress information\n */\nexport interface ConfirmationProgress {\n /** Current number of confirmations */\n current: number;\n /** Required number of confirmations */\n required: number;\n /** Percentage complete (0-100) */\n percentage: number;\n /** Whether enough confirmations have been received */\n isComplete: boolean;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Core Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Calculate the number of confirmations for a deposit\n *\n * @param currentBlockHeight - Current Bitcoin block height\n * @param depositBlockHeight - Block height where deposit was confirmed\n * @returns Number of confirmations (0 if either height is missing)\n */\nexport function calcConfirmations(\n currentBlockHeight?: number,\n depositBlockHeight?: number,\n): number {\n if (!depositBlockHeight || !currentBlockHeight) {\n return 0;\n }\n // Deposit block height counts as the first confirmation\n return Math.max(0, currentBlockHeight - depositBlockHeight + 1);\n}\n\n/**\n * Get confirmation progress for a deposit\n *\n * @param currentBlockHeight - Current Bitcoin block height\n * @param depositBlockHeight - Block height where deposit was confirmed\n * @param requiredConfirmations - Number of confirmations required (default: REQUIRED_CONFIRMATIONS)\n * @returns Confirmation progress info, or null if block heights unavailable\n */\nexport function getConfirmationProgress(\n currentBlockHeight?: number,\n depositBlockHeight?: number,\n requiredConfirmations: number = REQUIRED_CONFIRMATIONS,\n): ConfirmationProgress | null {\n if (currentBlockHeight === undefined || depositBlockHeight === undefined) {\n return null;\n }\n\n const current = calcConfirmations(currentBlockHeight, depositBlockHeight);\n const percentage = Math.min(\n 100,\n Math.round((current / requiredConfirmations) * 100),\n );\n\n return {\n current,\n required: requiredConfirmations,\n percentage,\n isComplete: current >= requiredConfirmations,\n };\n}\n\n/**\n * Determine the status of a deposit\n *\n * Logic priority:\n * 1. Sanctioned → restricted\n * 2. Already claimed → claimed\n * 3. GMP handled → auto_claimed (definitive success, overrides expired/failed)\n * 4. Amount too small → too_small (permanent, re-auth won't help)\n * 5. Notarization failed → failed (terminal, overrides expired)\n * 6. Session expired → expired (recoverable via re-auth)\n * 7. Based on notarization status + proof availability:\n * - PENDING/SUBMITTED without enough confirmations → pending_confirmations\n * - PENDING/SUBMITTED with confirmations → pending_notarization\n * - SESSION_APPROVED with proof → claimable\n * - SESSION_APPROVED without proof → pending_notarization (edge case)\n *\n * @param deposit - The deposit object from the SDK\n * @param currentBlockHeight - Current BTC block height (optional, enhances accuracy)\n * @param requiredConfirmations - Confirmations required (default: REQUIRED_CONFIRMATIONS)\n * @returns The deposit status\n */\nexport function getDepositStatus(\n deposit: Deposit,\n currentBlockHeight?: number,\n requiredConfirmations: number = REQUIRED_CONFIRMATIONS,\n): DepositStatus {\n // 1. Check for sanctioned/restricted first\n if (deposit.sanctioned) {\n return 'restricted';\n }\n\n // 2. Check if already claimed\n if (deposit.isClaimed || deposit.claimTxHash) {\n return 'claimed';\n }\n\n // 3. Check for GMP auto-claim (definitive success, overrides expired/failed)\n if (\n deposit.notarizationStatus ===\n ENotarizationStatus.NOTARIZATION_STATUS_GMP_HANDLED\n ) {\n return 'auto_claimed';\n }\n\n // 4. Check if amount is too small (permanent, re-auth won't help)\n const amountBtc = deposit.amount?.toNumber?.() ?? Number(deposit.amount);\n if (amountBtc > 0 && amountBtc < MIN_STAKE_AMOUNT_BTC) {\n return 'too_small';\n }\n\n // 5. Check for notarization failure (terminal, overrides expired)\n if (\n deposit.notarizationStatus ===\n ENotarizationStatus.NOTARIZATION_STATUS_FAILED\n ) {\n return 'failed';\n }\n\n // 6. Check if the notarization session has expired (recoverable via re-auth)\n if (deposit.sessionState === ESessionState.SESSION_STATE_EXPIRED) {\n return 'expired';\n }\n\n // 7. Determine status based on notarization status and proof availability\n const hasProof = !!deposit.proof && !!deposit.rawPayload;\n const notarizationStatus = deposit.notarizationStatus;\n\n // Check confirmations only if we have block height data\n const confirmations = calcConfirmations(\n currentBlockHeight,\n deposit.blockHeight,\n );\n const hasEnoughConfirmations =\n currentBlockHeight === undefined ||\n confirmations >= requiredConfirmations;\n\n switch (notarizationStatus) {\n case ENotarizationStatus.NOTARIZATION_STATUS_PENDING:\n case ENotarizationStatus.NOTARIZATION_STATUS_SUBMITTED:\n // Still in notarization queue\n // If we know block height and not enough confirmations, show that\n if (currentBlockHeight !== undefined && !hasEnoughConfirmations) {\n return 'pending_confirmations';\n }\n // Otherwise, we're waiting for notarization\n return 'pending_notarization';\n\n case ENotarizationStatus.NOTARIZATION_STATUS_SESSION_APPROVED:\n // Notarization approved\n if (hasProof) {\n return 'claimable';\n }\n // Edge case: approved but no proof yet (should be rare)\n return 'pending_notarization';\n\n case ENotarizationStatus.NOTARIZATION_STATUS_UNSPECIFIED:\n default:\n // Unknown status - check confirmations if we can\n if (currentBlockHeight !== undefined && !hasEnoughConfirmations) {\n return 'pending_confirmations';\n }\n return 'pending_notarization';\n }\n}\n\n/**\n * Get display configuration for a deposit status\n *\n * @param status - The deposit status\n * @returns Display configuration with label, severity, and description\n */\nexport function getDepositStatusDisplay(\n status: DepositStatus,\n): DepositStatusDisplay {\n switch (status) {\n case 'pending_confirmations':\n return {\n label: 'Pending Confirmations',\n severity: 'warning',\n description: `Waiting for Bitcoin block confirmations (${REQUIRED_CONFIRMATIONS} required)`,\n isTerminal: false,\n requiresAction: false,\n };\n case 'pending_notarization':\n return {\n label: 'Pending Notarization',\n severity: 'info',\n description:\n 'Confirmations complete, waiting for notarization service to generate proof',\n isTerminal: false,\n requiresAction: false,\n };\n case 'claimable':\n return {\n label: 'Claimable',\n severity: 'success',\n description: 'Ready to mint - proof available, claim to receive tokens',\n isTerminal: false,\n requiresAction: true,\n };\n case 'claiming':\n return {\n label: 'Claiming',\n severity: 'info',\n description: 'Claim transaction in progress',\n isTerminal: false,\n requiresAction: false,\n };\n case 'claimed':\n return {\n label: 'Claimed',\n severity: 'neutral',\n description: 'Tokens have been minted to your address',\n isTerminal: true,\n requiresAction: false,\n };\n case 'auto_claimed':\n return {\n label: 'Auto-Claimed',\n severity: 'success',\n description: 'Automatically claimed via cross-chain messaging (GMP)',\n isTerminal: true,\n requiresAction: false,\n };\n case 'expired':\n return {\n label: 'Expired',\n severity: 'error',\n description: 'Fee signature expired, requires re-authorization',\n isTerminal: false,\n requiresAction: true,\n };\n case 'failed':\n return {\n label: 'Failed',\n severity: 'error',\n description: 'Notarization failed - contact support',\n isTerminal: true,\n requiresAction: false,\n };\n case 'restricted':\n return {\n label: 'Restricted',\n severity: 'error',\n description: 'This deposit is restricted or sanctioned',\n isTerminal: true,\n requiresAction: false,\n };\n case 'too_small':\n return {\n label: 'Too Small',\n severity: 'neutral',\n description: `Amount below minimum claimable amount (${MIN_STAKE_AMOUNT_BTC} BTC)`,\n isTerminal: true,\n requiresAction: false,\n };\n }\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Helper Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Check if a deposit can be claimed manually\n *\n * @param deposit - The deposit object\n * @param currentBlockHeight - Current BTC block height (optional)\n * @returns True if the deposit is in claimable state\n */\nexport function isDepositClaimable(\n deposit: Deposit,\n currentBlockHeight?: number,\n): boolean {\n return getDepositStatus(deposit, currentBlockHeight) === 'claimable';\n}\n\n/**\n * Check if a deposit is in a pending state (confirmations or notarization)\n *\n * @param deposit - The deposit object\n * @param currentBlockHeight - Current BTC block height (optional)\n * @returns True if deposit is pending\n */\nexport function isDepositPending(\n deposit: Deposit,\n currentBlockHeight?: number,\n): boolean {\n const status = getDepositStatus(deposit, currentBlockHeight);\n return (\n status === 'pending_confirmations' || status === 'pending_notarization'\n );\n}\n\n/**\n * Check if a deposit is in a terminal state (no further action possible)\n *\n * @param deposit - The deposit object\n * @param currentBlockHeight - Current BTC block height (optional)\n * @returns True if deposit is in terminal state\n */\nexport function isDepositTerminal(\n deposit: Deposit,\n currentBlockHeight?: number,\n): boolean {\n const status = getDepositStatus(deposit, currentBlockHeight);\n const display = getDepositStatusDisplay(status);\n return display.isTerminal;\n}\n\n/**\n * Check if a deposit requires user action\n *\n * @param deposit - The deposit object\n * @param currentBlockHeight - Current BTC block height (optional)\n * @returns True if user action is required\n */\nexport function depositRequiresAction(\n deposit: Deposit,\n currentBlockHeight?: number,\n): boolean {\n const status = getDepositStatus(deposit, currentBlockHeight);\n const display = getDepositStatusDisplay(status);\n return display.requiresAction;\n}\n\n"],"names":["getLBTCExchangeRate","env","chainId","ChainId","amount","toSatoshi","baseApiUrl","getApiConfig","chainIdName","getChainNameById","data","axios","amountOut","BigNumber","exchangeRate","minAmount","MIN_STAKE_AMOUNT_BTC","URL","setReferral","address","signature","eip712Data","referrerCode","pubKey","requestParams","error","errorMsg","getErrorMessage","REQUIRED_CONFIRMATIONS","MIN_CLAIM_AMOUNT_BTC","calcConfirmations","currentBlockHeight","depositBlockHeight","getConfirmationProgress","requiredConfirmations","current","percentage","getDepositStatus","deposit","ENotarizationStatus","amountBtc","_b","_a","ESessionState","hasProof","notarizationStatus","confirmations","hasEnoughConfirmations","getDepositStatusDisplay","status","isDepositClaimable","isDepositPending","isDepositTerminal","depositRequiresAction"],"mappings":"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"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
async function
|
|
1
|
+
import A from "axios";
|
|
2
|
+
import T from "bignumber.js";
|
|
3
|
+
import { getApiConfig as _ } from "./api-config-Dm6dR85f.js";
|
|
4
|
+
import { getChainNameById as S } from "./blockchain-identifier-CTVaEPpY.js";
|
|
5
|
+
import { ChainId as b } from "./token-addresses-D0v5cR1j.js";
|
|
6
|
+
import { MIN_STAKE_AMOUNT_BTC as m } from "./constants-D1FnS2Z8.js";
|
|
7
|
+
import { toSatoshi as p } from "./satoshi-CSoJBXc6.js";
|
|
8
|
+
import { getErrorMessage as I } from "./tokens-DgC1hfkm.js";
|
|
9
|
+
import { ENotarizationStatus as c, ESessionState as y } from "./ReferralsClient-DvEsA3II.js";
|
|
10
|
+
async function M({
|
|
11
11
|
env: e,
|
|
12
|
-
chainId: i =
|
|
13
|
-
amount: r =
|
|
12
|
+
chainId: i = b.ethereum,
|
|
13
|
+
amount: r = p(1)
|
|
14
14
|
}) {
|
|
15
|
-
const { baseApiUrl: t } =
|
|
16
|
-
`api/v1/exchange/rate/${
|
|
15
|
+
const { baseApiUrl: t } = _(e), n = S(i), { data: o } = await A.get(
|
|
16
|
+
`api/v1/exchange/rate/${n}`,
|
|
17
17
|
{ baseURL: t, params: { amount: r } }
|
|
18
|
-
), u =
|
|
19
|
-
return { amountOut: u, exchangeRate:
|
|
18
|
+
), u = T(o.amount_out).toNumber(), s = T(r).dividedBy(o.amount_out).toNumber(), a = p(m).toNumber();
|
|
19
|
+
return { amountOut: u, exchangeRate: s, minAmount: a };
|
|
20
20
|
}
|
|
21
21
|
const v = "api/v1/referral-system/referrer/";
|
|
22
22
|
async function P({
|
|
@@ -24,69 +24,71 @@ async function P({
|
|
|
24
24
|
signature: i,
|
|
25
25
|
eip712Data: r,
|
|
26
26
|
referrerCode: t,
|
|
27
|
-
pubKey:
|
|
28
|
-
env:
|
|
27
|
+
pubKey: n,
|
|
28
|
+
env: o
|
|
29
29
|
}) {
|
|
30
|
-
const { baseApiUrl: u } =
|
|
30
|
+
const { baseApiUrl: u } = _(o), s = {
|
|
31
31
|
referrer_code: t,
|
|
32
32
|
signature: i,
|
|
33
33
|
signature_typed_data: r,
|
|
34
|
-
...
|
|
34
|
+
...n && { public_key: n }
|
|
35
35
|
};
|
|
36
36
|
try {
|
|
37
|
-
await
|
|
37
|
+
await A.post(`${v}${e}`, s, {
|
|
38
38
|
baseURL: u
|
|
39
39
|
});
|
|
40
40
|
return;
|
|
41
|
-
} catch (
|
|
42
|
-
const l =
|
|
41
|
+
} catch (a) {
|
|
42
|
+
const l = I(a);
|
|
43
43
|
throw new Error(l);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
const
|
|
46
|
+
const d = 6, x = m;
|
|
47
47
|
function g(e, i) {
|
|
48
48
|
return !i || !e ? 0 : Math.max(0, e - i + 1);
|
|
49
49
|
}
|
|
50
|
-
function w(e, i, r =
|
|
50
|
+
function w(e, i, r = d) {
|
|
51
51
|
if (e === void 0 || i === void 0)
|
|
52
52
|
return null;
|
|
53
|
-
const t = g(e, i),
|
|
53
|
+
const t = g(e, i), n = Math.min(
|
|
54
54
|
100,
|
|
55
55
|
Math.round(t / r * 100)
|
|
56
56
|
);
|
|
57
57
|
return {
|
|
58
58
|
current: t,
|
|
59
59
|
required: r,
|
|
60
|
-
percentage:
|
|
60
|
+
percentage: n,
|
|
61
61
|
isComplete: t >= r
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
-
function
|
|
65
|
-
var
|
|
64
|
+
function f(e, i, r = d) {
|
|
65
|
+
var a, l;
|
|
66
66
|
if (e.sanctioned)
|
|
67
67
|
return "restricted";
|
|
68
68
|
if (e.isClaimed || e.claimTxHash)
|
|
69
69
|
return "claimed";
|
|
70
|
-
const t = ((l = (n = e.amount) == null ? void 0 : n.toNumber) == null ? void 0 : l.call(n)) ?? Number(e.amount);
|
|
71
|
-
if (t > 0 && t < _)
|
|
72
|
-
return "too_small";
|
|
73
70
|
if (e.notarizationStatus === c.NOTARIZATION_STATUS_GMP_HANDLED)
|
|
74
71
|
return "auto_claimed";
|
|
72
|
+
const t = ((l = (a = e.amount) == null ? void 0 : a.toNumber) == null ? void 0 : l.call(a)) ?? Number(e.amount);
|
|
73
|
+
if (t > 0 && t < m)
|
|
74
|
+
return "too_small";
|
|
75
75
|
if (e.notarizationStatus === c.NOTARIZATION_STATUS_FAILED)
|
|
76
76
|
return "failed";
|
|
77
|
-
|
|
77
|
+
if (e.sessionState === y.SESSION_STATE_EXPIRED)
|
|
78
|
+
return "expired";
|
|
79
|
+
const n = !!e.proof && !!e.rawPayload, o = e.notarizationStatus, u = g(
|
|
78
80
|
i,
|
|
79
81
|
e.blockHeight
|
|
80
|
-
),
|
|
81
|
-
switch (
|
|
82
|
+
), s = i === void 0 || u >= r;
|
|
83
|
+
switch (o) {
|
|
82
84
|
case c.NOTARIZATION_STATUS_PENDING:
|
|
83
85
|
case c.NOTARIZATION_STATUS_SUBMITTED:
|
|
84
|
-
return i !== void 0 && !
|
|
86
|
+
return i !== void 0 && !s ? "pending_confirmations" : "pending_notarization";
|
|
85
87
|
case c.NOTARIZATION_STATUS_SESSION_APPROVED:
|
|
86
|
-
return
|
|
88
|
+
return n ? "claimable" : "pending_notarization";
|
|
87
89
|
case c.NOTARIZATION_STATUS_UNSPECIFIED:
|
|
88
90
|
default:
|
|
89
|
-
return i !== void 0 && !
|
|
91
|
+
return i !== void 0 && !s ? "pending_confirmations" : "pending_notarization";
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
94
|
function N(e) {
|
|
@@ -95,7 +97,7 @@ function N(e) {
|
|
|
95
97
|
return {
|
|
96
98
|
label: "Pending Confirmations",
|
|
97
99
|
severity: "warning",
|
|
98
|
-
description: `Waiting for Bitcoin block confirmations (${
|
|
100
|
+
description: `Waiting for Bitcoin block confirmations (${d} required)`,
|
|
99
101
|
isTerminal: !1,
|
|
100
102
|
requiresAction: !1
|
|
101
103
|
};
|
|
@@ -167,39 +169,39 @@ function N(e) {
|
|
|
167
169
|
return {
|
|
168
170
|
label: "Too Small",
|
|
169
171
|
severity: "neutral",
|
|
170
|
-
description: `Amount below minimum claimable amount (${
|
|
172
|
+
description: `Amount below minimum claimable amount (${m} BTC)`,
|
|
171
173
|
isTerminal: !0,
|
|
172
174
|
requiresAction: !1
|
|
173
175
|
};
|
|
174
176
|
}
|
|
175
177
|
}
|
|
176
|
-
function x(e, i) {
|
|
177
|
-
return m(e, i) === "claimable";
|
|
178
|
-
}
|
|
179
178
|
function L(e, i) {
|
|
180
|
-
|
|
181
|
-
return r === "pending_confirmations" || r === "pending_notarization";
|
|
179
|
+
return f(e, i) === "claimable";
|
|
182
180
|
}
|
|
183
181
|
function Z(e, i) {
|
|
184
|
-
const r =
|
|
185
|
-
return
|
|
182
|
+
const r = f(e, i);
|
|
183
|
+
return r === "pending_confirmations" || r === "pending_notarization";
|
|
186
184
|
}
|
|
187
185
|
function F(e, i) {
|
|
188
|
-
const r =
|
|
186
|
+
const r = f(e, i);
|
|
187
|
+
return N(r).isTerminal;
|
|
188
|
+
}
|
|
189
|
+
function $(e, i) {
|
|
190
|
+
const r = f(e, i);
|
|
189
191
|
return N(r).requiresAction;
|
|
190
192
|
}
|
|
191
193
|
export {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
Z as
|
|
202
|
-
|
|
203
|
-
P as
|
|
194
|
+
x as MIN_CLAIM_AMOUNT_BTC,
|
|
195
|
+
d as REQUIRED_CONFIRMATIONS,
|
|
196
|
+
g as calcConfirmations,
|
|
197
|
+
$ as depositRequiresAction,
|
|
198
|
+
w as getConfirmationProgress,
|
|
199
|
+
f as getDepositStatus,
|
|
200
|
+
N as getDepositStatusDisplay,
|
|
201
|
+
M as getLBTCExchangeRate,
|
|
202
|
+
L as isDepositClaimable,
|
|
203
|
+
Z as isDepositPending,
|
|
204
|
+
F as isDepositTerminal,
|
|
205
|
+
P as setReferral
|
|
204
206
|
};
|
|
205
|
-
//# sourceMappingURL=depositStatus-
|
|
207
|
+
//# sourceMappingURL=depositStatus-DTc01ZoZ.js.map
|