@lombard.finance/sdk 4.7.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +91 -2
- package/README.md +22 -21
- 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.cjs +1 -1
- package/dist/api.js +5 -5
- package/dist/bridge.cjs +1 -1
- package/dist/bridge.js +1 -1
- package/dist/btc.cjs +1 -1
- package/dist/btc.js +2 -2
- package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/evm.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -1
- package/dist/chains/btc/actions/depositAndDeploy/config/index.d.ts.map +1 -1
- package/dist/chains/btc/actions/depositAndDeploy/types.d.ts.map +1 -1
- package/dist/chains/btc/actions/stake/BtcStake.d.ts.map +1 -1
- package/dist/chains/btc/actions/stake/config/evm.d.ts.map +1 -1
- package/dist/chains/btc/actions/stake/config/solana.d.ts.map +1 -1
- package/dist/chains/btc/actions/stakeAndDeploy/config/index.d.ts.map +1 -1
- package/dist/chains/btc/actions/stakeAndDeploy/types.d.ts.map +1 -1
- package/dist/chains/btc/client/getCurrentBlockHeight.d.ts.map +1 -1
- package/dist/chains/evm/actions/deploy/EvmDeploy.d.ts +19 -4
- package/dist/chains/evm/actions/deploy/EvmDeploy.d.ts.map +1 -1
- package/dist/chains/evm/actions/deploy/index.d.ts.map +1 -1
- package/dist/chains/evm/actions/deploy/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/config/evm.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/index.d.ts.map +1 -1
- package/dist/chains/evm/actions/redeem/EvmRedeem.d.ts.map +1 -1
- package/dist/chains/evm/actions/redeem/config/evm.d.ts.map +1 -1
- package/dist/chains/evm/actions/redeem/index.d.ts.map +1 -1
- package/dist/chains/evm/actions/redeem/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/stake/config/index.d.ts.map +1 -1
- package/dist/chains/evm/actions/stake/config/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/stake/index.d.ts.map +1 -1
- package/dist/chains/evm/actions/stake/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/unstake/EvmUnstake.d.ts.map +1 -1
- package/dist/chains/evm/actions/unstake/index.d.ts.map +1 -1
- package/dist/chains/evm/actions/unstake/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/withdraw/EvmCancelWithdraw.d.ts.map +1 -1
- package/dist/chains/evm/actions/withdraw/EvmWithdraw.d.ts +6 -0
- package/dist/chains/evm/actions/withdraw/EvmWithdraw.d.ts.map +1 -1
- package/dist/chains/evm/actions/withdraw/config/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/withdraw/types.d.ts.map +1 -1
- package/dist/chains/solana/SolanaActions.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -1
- package/dist/chains/solana/actions/stake/SolanaStake.d.ts.map +1 -1
- package/dist/chains/solana/actions/stake/types.d.ts.map +1 -1
- package/dist/chains/solana/actions/unstake/SolanaUnstake.d.ts.map +1 -1
- package/dist/chains/solana/actions/unstake/factory.d.ts.map +1 -1
- package/dist/chains/solana/actions/unstake/types.d.ts.map +1 -1
- package/dist/chains/solana/utils.d.ts.map +1 -1
- package/dist/chains/starknet/actions/unstake/config/index.d.ts.map +1 -1
- package/dist/chains/starknet/actions/unstake/factory.d.ts.map +1 -1
- package/dist/chains/starknet/actions/unstake/types.d.ts.map +1 -1
- package/dist/chains/sui/actions/unstake/config/index.d.ts.map +1 -1
- package/dist/chains/sui/actions/unstake/factory.d.ts.map +1 -1
- package/dist/chains/sui/actions/unstake/types.d.ts.map +1 -1
- package/dist/chunks/{BtcActions-BczTnzRn.js → BtcActions-CFGiDxtv.js} +20 -22
- package/dist/chunks/BtcActions-CFGiDxtv.js.map +1 -0
- package/dist/chunks/BtcActions-DJJmmyzi.cjs +2 -0
- package/dist/chunks/BtcActions-DJJmmyzi.cjs.map +1 -0
- package/dist/chunks/EvmActions-CUKBeiUw.js +1508 -0
- package/dist/chunks/EvmActions-CUKBeiUw.js.map +1 -0
- package/dist/chunks/EvmActions-CxipDb7X.cjs +7 -0
- package/dist/chunks/EvmActions-CxipDb7X.cjs.map +1 -0
- package/dist/chunks/{ReferralsClient-W-0-383w.js → ReferralsClient-BRa26dYS.js} +4 -4
- package/dist/chunks/ReferralsClient-BRa26dYS.js.map +1 -0
- package/dist/chunks/{ReferralsClient-D8dHEk_X.cjs → ReferralsClient-o-3AUm7s.cjs} +2 -2
- package/dist/chunks/ReferralsClient-o-3AUm7s.cjs.map +1 -0
- package/dist/chunks/{approveLBTC-BMC4cZEk.cjs → approveLBTC-BBl3KcT2.cjs} +2 -2
- package/dist/chunks/{approveLBTC-BMC4cZEk.cjs.map → approveLBTC-BBl3KcT2.cjs.map} +1 -1
- package/dist/chunks/{approveLBTC-BkdT1N3V.js → approveLBTC-DnCt6ZZF.js} +3 -3
- package/dist/chunks/{approveLBTC-BkdT1N3V.js.map → approveLBTC-DnCt6ZZF.js.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BLPnwbIN.js → blockchain-identifier-BkASqCgZ.js} +2 -2
- package/dist/chunks/blockchain-identifier-BkASqCgZ.js.map +1 -0
- package/dist/chunks/{blockchain-identifier-Bp-LTIdG.cjs → blockchain-identifier-DWfC3Es2.cjs} +2 -2
- package/dist/chunks/blockchain-identifier-DWfC3Es2.cjs.map +1 -0
- package/dist/chunks/{bridge-DbB23m2a.js → bridge-DV4fOcHe.js} +4 -4
- package/dist/chunks/bridge-DV4fOcHe.js.map +1 -0
- package/dist/chunks/{bridge-7Eq_Jmi2.cjs → bridge-DZp5x4Yb.cjs} +2 -2
- package/dist/chunks/bridge-DZp5x4Yb.cjs.map +1 -0
- package/dist/chunks/{config-ow9X5H0c.cjs → config-BfX8lrdO.cjs} +2 -2
- package/dist/chunks/config-BfX8lrdO.cjs.map +1 -0
- package/dist/chunks/{config-C8BfN_9P.js → config-wnjPtnjd.js} +46 -53
- package/dist/chunks/config-wnjPtnjd.js.map +1 -0
- package/dist/chunks/{defi-registry-B8V6dRVB.cjs → defi-registry-CyMKVT3z.cjs} +2 -2
- package/dist/chunks/defi-registry-CyMKVT3z.cjs.map +1 -0
- package/dist/chunks/{defi-registry-CD8EUcNu.js → defi-registry-DULXbu3D.js} +9 -9
- package/dist/chunks/defi-registry-DULXbu3D.js.map +1 -0
- package/dist/chunks/{depositStatus-BJA7tNqc.cjs → depositStatus-B9P1YXEU.cjs} +2 -2
- package/dist/chunks/depositStatus-B9P1YXEU.cjs.map +1 -0
- package/dist/chunks/{depositStatus-HosfExLl.js → depositStatus-Cgd_GDUt.js} +5 -5
- package/dist/chunks/depositStatus-Cgd_GDUt.js.map +1 -0
- package/dist/chunks/events-B9b3YdgM.cjs +2 -0
- package/dist/chunks/events-B9b3YdgM.cjs.map +1 -0
- package/dist/chunks/{events-BlzP_SCT.js → events-DU2wYlt_.js} +189 -191
- package/dist/chunks/events-DU2wYlt_.js.map +1 -0
- package/dist/chunks/{get-exchange-ratio-Bl6pt546.js → get-exchange-ratio-BvPUfcIQ.js} +2 -2
- package/dist/chunks/{get-exchange-ratio-Bl6pt546.js.map → get-exchange-ratio-BvPUfcIQ.js.map} +1 -1
- package/dist/chunks/{get-exchange-ratio-t1PW8I6_.cjs → get-exchange-ratio-DGztGO7i.cjs} +2 -2
- package/dist/chunks/{get-exchange-ratio-t1PW8I6_.cjs.map → get-exchange-ratio-DGztGO7i.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-DdZvBmCN.cjs → get-positions-summary-CC7BDtlY.cjs} +2 -2
- package/dist/chunks/get-positions-summary-CC7BDtlY.cjs.map +1 -0
- package/dist/chunks/{get-positions-summary-CaX2BCHp.js → get-positions-summary-DxAgmaMl.js} +2 -2
- package/dist/chunks/get-positions-summary-DxAgmaMl.js.map +1 -0
- package/dist/chunks/get-vault-tvl-B6rSrGi_.js +203 -0
- package/dist/chunks/get-vault-tvl-B6rSrGi_.js.map +1 -0
- package/dist/chunks/get-vault-tvl-dvEPPxvT.cjs +2 -0
- package/dist/chunks/get-vault-tvl-dvEPPxvT.cjs.map +1 -0
- package/dist/chunks/get-vault-withdrawals-Cgx7VsM1.cjs +2 -0
- package/dist/chunks/get-vault-withdrawals-Cgx7VsM1.cjs.map +1 -0
- package/dist/chunks/get-vault-withdrawals-W5CgNbqE.js +154 -0
- package/dist/chunks/get-vault-withdrawals-W5CgNbqE.js.map +1 -0
- package/dist/chunks/{getUserStakeAndBakeSignature-CqlrwA0t.js → getUserStakeAndBakeSignature-BRhWFYyY.js} +4 -4
- package/dist/chunks/getUserStakeAndBakeSignature-BRhWFYyY.js.map +1 -0
- package/dist/chunks/{getUserStakeAndBakeSignature-BmY5j0OM.cjs → getUserStakeAndBakeSignature-VlC_GHmz.cjs} +2 -2
- package/dist/chunks/getUserStakeAndBakeSignature-VlC_GHmz.cjs.map +1 -0
- package/dist/chunks/hex-BiCL4CPh.js +11 -0
- package/dist/chunks/hex-BiCL4CPh.js.map +1 -0
- package/dist/chunks/hex-DeJtv8eu.cjs +2 -0
- package/dist/chunks/hex-DeJtv8eu.cjs.map +1 -0
- package/dist/chunks/{lbtc-addresses-BlyGFWnW.js → lbtc-addresses-ClXt-tuB.js} +2 -2
- package/dist/chunks/{lbtc-addresses-BlyGFWnW.js.map → lbtc-addresses-ClXt-tuB.js.map} +1 -1
- package/dist/chunks/{lbtc-addresses-DjsipX5Q.cjs → lbtc-addresses-D3jG1VUC.cjs} +2 -2
- package/dist/chunks/{lbtc-addresses-DjsipX5Q.cjs.map → lbtc-addresses-D3jG1VUC.cjs.map} +1 -1
- package/dist/chunks/parameters-CcpaKGU2.js +24 -0
- package/dist/chunks/parameters-CcpaKGU2.js.map +1 -0
- package/dist/chunks/parameters-YNWmaAho.cjs +2 -0
- package/dist/chunks/parameters-YNWmaAho.cjs.map +1 -0
- package/dist/chunks/{statusConstants-BJIXJNIC.cjs → statusConstants-B-7VEYgO.cjs} +2 -2
- package/dist/chunks/statusConstants-B-7VEYgO.cjs.map +1 -0
- package/dist/chunks/{statusConstants-BQna5LGH.js → statusConstants-C3JHNUTC.js} +15 -17
- package/dist/chunks/statusConstants-C3JHNUTC.js.map +1 -0
- package/dist/chunks/{storeNetworkFeeSignature-tprCigR1.js → storeNetworkFeeSignature-CY_Z-Wtn.js} +2 -2
- package/dist/chunks/{storeNetworkFeeSignature-tprCigR1.js.map → storeNetworkFeeSignature-CY_Z-Wtn.js.map} +1 -1
- package/dist/chunks/{storeNetworkFeeSignature-CLm8I2pf.cjs → storeNetworkFeeSignature-DJgBfZp7.cjs} +2 -2
- package/dist/chunks/{storeNetworkFeeSignature-CLm8I2pf.cjs.map → storeNetworkFeeSignature-DJgBfZp7.cjs.map} +1 -1
- package/dist/chunks/token-addresses-C7H9E4qz.cjs +2 -0
- package/dist/chunks/token-addresses-C7H9E4qz.cjs.map +1 -0
- package/dist/chunks/{token-addresses-Ddar0FyS.js → token-addresses-DVnRPyu4.js} +16 -14
- package/dist/chunks/token-addresses-DVnRPyu4.js.map +1 -0
- package/dist/chunks/{tokens-HhVpKe3K.js → tokens-Btl3GXbc.js} +3 -3
- package/dist/chunks/tokens-Btl3GXbc.js.map +1 -0
- package/dist/chunks/{tokens-CBsz6l_2.cjs → tokens-DEYY7W7O.cjs} +2 -2
- package/dist/chunks/tokens-DEYY7W7O.cjs.map +1 -0
- package/dist/chunks/unwrapBtceToLbtcv-C4OxoVVU.js +321 -0
- package/dist/chunks/unwrapBtceToLbtcv-C4OxoVVU.js.map +1 -0
- package/dist/chunks/unwrapBtceToLbtcv-Dg-yUGpg.cjs +2 -0
- package/dist/chunks/unwrapBtceToLbtcv-Dg-yUGpg.cjs.map +1 -0
- package/dist/chunks/withdrawEarn-CTtVruit.cjs +7 -0
- package/dist/chunks/withdrawEarn-CTtVruit.cjs.map +1 -0
- package/dist/chunks/{unstakeLBTC-Bg8OsAMV.js → withdrawEarn-QFaMhs0t.js} +965 -612
- package/dist/chunks/withdrawEarn-QFaMhs0t.js.map +1 -0
- package/dist/client/ApiNamespace.d.ts +3 -6
- package/dist/client/ApiNamespace.d.ts.map +1 -1
- package/dist/common/blockchain-identifier.d.ts.map +1 -1
- package/dist/common/chains.d.ts +1 -1
- package/dist/common/chains.d.ts.map +1 -1
- package/dist/common/feature-config.d.ts.map +1 -1
- package/dist/contract-functions/cancelEarnWithdrawal/cancelEarnWithdrawal.d.ts +19 -0
- package/dist/contract-functions/cancelEarnWithdrawal/cancelEarnWithdrawal.d.ts.map +1 -0
- package/dist/contract-functions/cancelEarnWithdrawal/index.d.ts +2 -0
- package/dist/contract-functions/cancelEarnWithdrawal/index.d.ts.map +1 -0
- package/dist/contract-functions/depositEarn/depositEarn.d.ts +36 -0
- package/dist/contract-functions/depositEarn/depositEarn.d.ts.map +1 -0
- package/dist/contract-functions/depositEarn/index.d.ts +2 -0
- package/dist/contract-functions/depositEarn/index.d.ts.map +1 -0
- package/dist/contract-functions/getBasculeDepositStatus/getBasculeDepositStatus.d.ts.map +1 -1
- package/dist/contract-functions/getEarnPosition/getEarnPosition.d.ts +17 -16
- package/dist/contract-functions/getEarnPosition/getEarnPosition.d.ts.map +1 -1
- package/dist/contract-functions/getShareValue/getShareValue.d.ts +5 -15
- package/dist/contract-functions/getShareValue/getShareValue.d.ts.map +1 -1
- package/dist/contract-functions/getSharesByAddress/getSharesByAddress.d.ts +5 -20
- package/dist/contract-functions/getSharesByAddress/getSharesByAddress.d.ts.map +1 -1
- package/dist/contract-functions/index.d.ts +4 -2
- package/dist/contract-functions/index.d.ts.map +1 -1
- package/dist/contract-functions/previewWithdrawEarn/index.d.ts +2 -0
- package/dist/contract-functions/previewWithdrawEarn/index.d.ts.map +1 -0
- package/dist/contract-functions/previewWithdrawEarn/previewWithdrawEarn.d.ts +38 -0
- package/dist/contract-functions/previewWithdrawEarn/previewWithdrawEarn.d.ts.map +1 -0
- package/dist/contract-functions/signStakeAndBake/validation.d.ts.map +1 -1
- package/dist/contract-functions/withdrawEarn/index.d.ts +2 -0
- package/dist/contract-functions/withdrawEarn/index.d.ts.map +1 -0
- package/dist/contract-functions/withdrawEarn/withdrawEarn.d.ts +46 -0
- package/dist/contract-functions/withdrawEarn/withdrawEarn.d.ts.map +1 -0
- package/dist/contract-functions/wrapToBtce/wrapToBtce.d.ts.map +1 -1
- package/dist/contracts.cjs +1 -1
- package/dist/contracts.js +32 -30
- package/dist/core/assets/catalog.d.ts.map +1 -1
- package/dist/core/assets/utils.d.ts.map +1 -1
- package/dist/core/chains/utils.d.ts.map +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +19 -19
- package/dist/defi/defi-registry.d.ts.map +1 -1
- package/dist/defi/index.d.ts +1 -1
- package/dist/defi/index.d.ts.map +1 -1
- package/dist/defi.cjs +1 -1
- package/dist/defi.js +4 -4
- package/dist/entries/api.d.ts +14 -14
- package/dist/entries/api.d.ts.map +1 -1
- package/dist/entries/contracts.d.ts +4 -2
- package/dist/entries/contracts.d.ts.map +1 -1
- package/dist/entries/defi.d.ts +1 -1
- package/dist/entries/defi.d.ts.map +1 -1
- package/dist/entries/evm.d.ts +7 -7
- package/dist/entries/evm.d.ts.map +1 -1
- package/dist/entries/utils.d.ts +9 -9
- package/dist/entries/utils.d.ts.map +1 -1
- package/dist/entries/vaults.d.ts +1 -1
- package/dist/entries/vaults.d.ts.map +1 -1
- package/dist/evm.cjs +1 -1
- package/dist/evm.js +4 -4
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +67 -65
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +171 -174
- package/dist/index.js.map +1 -1
- package/dist/metrics.cjs +1 -1
- package/dist/metrics.js +1 -1
- package/dist/services/EvmService.d.ts.map +1 -1
- package/dist/shared/actions/BaseAction.d.ts.map +1 -1
- package/dist/shared/deposits/depositStatus.d.ts.map +1 -1
- package/dist/shared/validation/index.d.ts.map +1 -1
- package/dist/tokens/tokens.d.ts.map +1 -1
- package/dist/utils/chain.d.ts.map +1 -1
- package/dist/utils/consoleLogger.d.ts.map +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +16 -16
- package/dist/vaults/index.d.ts +8 -10
- package/dist/vaults/index.d.ts.map +1 -1
- package/dist/vaults/lib/config.d.ts +148 -150
- package/dist/vaults/lib/config.d.ts.map +1 -1
- package/dist/vaults/lib/metrics/get-vault-apy.d.ts +2 -4
- package/dist/vaults/lib/metrics/get-vault-apy.d.ts.map +1 -1
- package/dist/vaults/lib/metrics/get-vault-points.d.ts +2 -5
- package/dist/vaults/lib/metrics/get-vault-points.d.ts.map +1 -1
- package/dist/vaults/lib/metrics/get-vault-tvl.d.ts +5 -8
- package/dist/vaults/lib/metrics/get-vault-tvl.d.ts.map +1 -1
- package/dist/vaults/lib/ops/deposit.d.ts +5 -14
- package/dist/vaults/lib/ops/deposit.d.ts.map +1 -1
- package/dist/vaults/lib/ops/get-vault-deposits.d.ts +9 -13
- package/dist/vaults/lib/ops/get-vault-deposits.d.ts.map +1 -1
- package/dist/vaults/lib/ops/get-vault-minimum-deposit.d.ts +4 -7
- package/dist/vaults/lib/ops/get-vault-minimum-deposit.d.ts.map +1 -1
- package/dist/vaults/lib/ops/get-vault-withdrawals.d.ts +14 -18
- package/dist/vaults/lib/ops/get-vault-withdrawals.d.ts.map +1 -1
- package/dist/vaults/lib/ops/preview-vault-deposit.d.ts +4 -8
- package/dist/vaults/lib/ops/preview-vault-deposit.d.ts.map +1 -1
- package/dist/vaults/lib/ops/withdraw.d.ts +11 -27
- package/dist/vaults/lib/ops/withdraw.d.ts.map +1 -1
- package/dist/vaults.cjs +1 -1
- package/dist/vaults.cjs.map +1 -1
- package/dist/vaults.js +91 -103
- package/dist/vaults.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/BtcActions-BczTnzRn.js.map +0 -1
- package/dist/chunks/BtcActions-PyJhuiZN.cjs +0 -2
- package/dist/chunks/BtcActions-PyJhuiZN.cjs.map +0 -1
- package/dist/chunks/EvmActions-D3RAK9_Z.cjs +0 -2
- package/dist/chunks/EvmActions-D3RAK9_Z.cjs.map +0 -1
- package/dist/chunks/EvmActions-DSKThOAy.js +0 -1341
- package/dist/chunks/EvmActions-DSKThOAy.js.map +0 -1
- package/dist/chunks/ReferralsClient-D8dHEk_X.cjs.map +0 -1
- package/dist/chunks/ReferralsClient-W-0-383w.js.map +0 -1
- package/dist/chunks/blockchain-identifier-BLPnwbIN.js.map +0 -1
- package/dist/chunks/blockchain-identifier-Bp-LTIdG.cjs.map +0 -1
- package/dist/chunks/bridge-7Eq_Jmi2.cjs.map +0 -1
- package/dist/chunks/bridge-DbB23m2a.js.map +0 -1
- package/dist/chunks/config-C8BfN_9P.js.map +0 -1
- package/dist/chunks/config-ow9X5H0c.cjs.map +0 -1
- package/dist/chunks/defi-registry-B8V6dRVB.cjs.map +0 -1
- package/dist/chunks/defi-registry-CD8EUcNu.js.map +0 -1
- package/dist/chunks/depositStatus-BJA7tNqc.cjs.map +0 -1
- package/dist/chunks/depositStatus-HosfExLl.js.map +0 -1
- package/dist/chunks/events-BlzP_SCT.js.map +0 -1
- package/dist/chunks/events-DNehj45M.cjs +0 -2
- package/dist/chunks/events-DNehj45M.cjs.map +0 -1
- package/dist/chunks/get-positions-summary-CaX2BCHp.js.map +0 -1
- package/dist/chunks/get-positions-summary-DdZvBmCN.cjs.map +0 -1
- package/dist/chunks/get-vault-tvl-CihHEkqK.js +0 -226
- package/dist/chunks/get-vault-tvl-CihHEkqK.js.map +0 -1
- package/dist/chunks/get-vault-tvl-DZ-xzehy.cjs +0 -2
- package/dist/chunks/get-vault-tvl-DZ-xzehy.cjs.map +0 -1
- package/dist/chunks/get-vault-withdrawals-DLwFMQEB.cjs +0 -2
- package/dist/chunks/get-vault-withdrawals-DLwFMQEB.cjs.map +0 -1
- package/dist/chunks/get-vault-withdrawals-QJOdxB5Z.js +0 -161
- package/dist/chunks/get-vault-withdrawals-QJOdxB5Z.js.map +0 -1
- package/dist/chunks/getUserStakeAndBakeSignature-BmY5j0OM.cjs.map +0 -1
- package/dist/chunks/getUserStakeAndBakeSignature-CqlrwA0t.js.map +0 -1
- package/dist/chunks/parameters-C_16L5ft.js +0 -11
- package/dist/chunks/parameters-C_16L5ft.js.map +0 -1
- package/dist/chunks/parameters-DK9cYCAH.cjs +0 -2
- package/dist/chunks/parameters-DK9cYCAH.cjs.map +0 -1
- package/dist/chunks/statusConstants-BJIXJNIC.cjs.map +0 -1
- package/dist/chunks/statusConstants-BQna5LGH.js.map +0 -1
- package/dist/chunks/time-I-BeyUkG.cjs +0 -2
- package/dist/chunks/time-I-BeyUkG.cjs.map +0 -1
- package/dist/chunks/time-Sa5gggPG.js +0 -24
- package/dist/chunks/time-Sa5gggPG.js.map +0 -1
- package/dist/chunks/token-addresses-Ddar0FyS.js.map +0 -1
- package/dist/chunks/token-addresses-DvY-Mw7b.cjs +0 -2
- package/dist/chunks/token-addresses-DvY-Mw7b.cjs.map +0 -1
- package/dist/chunks/tokens-CBsz6l_2.cjs.map +0 -1
- package/dist/chunks/tokens-HhVpKe3K.js.map +0 -1
- package/dist/chunks/unstakeLBTC-Bg8OsAMV.js.map +0 -1
- package/dist/chunks/unstakeLBTC-BmHvDxBN.cjs +0 -2
- package/dist/chunks/unstakeLBTC-BmHvDxBN.cjs.map +0 -1
- package/dist/chunks/withdraw-Bkp5-2dG.cjs +0 -12
- package/dist/chunks/withdraw-Bkp5-2dG.cjs.map +0 -1
- package/dist/chunks/withdraw-kf8mYbYH.js +0 -209
- package/dist/chunks/withdraw-kf8mYbYH.js.map +0 -1
- package/dist/chunks/wrapToBtce-By2mh503.js +0 -298
- package/dist/chunks/wrapToBtce-By2mh503.js.map +0 -1
- package/dist/chunks/wrapToBtce-DDeIlv3d.cjs +0 -2
- package/dist/chunks/wrapToBtce-DDeIlv3d.cjs.map +0 -1
- package/dist/contract-functions/getShareValue/index.d.ts +0 -2
- package/dist/contract-functions/getShareValue/index.d.ts.map +0 -1
- package/dist/contract-functions/getSharesByAddress/index.d.ts +0 -2
- package/dist/contract-functions/getSharesByAddress/index.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ReferralsClient-W-0-383w.js","sources":["../../src/api-functions/getDepositBtcAddress/make-request.ts","../../src/api-functions/getDepositBtcAddress/getDepositBtcAddress.ts","../../src/utils/pagination.ts","../../src/api-functions/getDepositsByAddress/getDepositsByAddress.ts","../../src/api-functions/getPointsByAddress/getPointsByAddress.ts","../../src/api-functions/getUnstakesByAddress/getUnstakesByAddress.ts","../../src/api-functions/storeStakeAndBakeSignature/storeStakeAndBakeSignature.ts","../../src/api-functions/getDepositAddressReferrer/getDepositAddressReferrer.ts","../../src/referrals/ReferralsClient.ts"],"sourcesContent":["import axios from 'axios';\nimport { Address, pad } from 'viem';\n\nimport { getApiConfig } from '../../common/api-config';\nimport {\n BlockchainIdentifier,\n getChainNameById,\n} from '../../common/blockchain-identifier';\nimport {\n IApiError,\n IDepositAddressesResponse,\n IGetDepositBtcAddressesParameters,\n} from './types';\n\nexport async function makeRequest({\n address,\n chainId,\n env,\n limit,\n offset,\n partnerId,\n}: IGetDepositBtcAddressesParameters) {\n const { baseApiUrl } = getApiConfig(env);\n\n // throws an error if `chainId` is unknown\n const destinationBlockchain = getChainNameById(chainId);\n if (destinationBlockchain === BlockchainIdentifier.starknet) {\n address = pad(address as Address, { size: 32 });\n }\n\n const params = {\n asc: false,\n limit,\n offset,\n referralId: partnerId || 'lombard',\n };\n\n // remove undefined fields, undefined limit and offset params cause error\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined) {\n delete params[k as keyof typeof params];\n }\n }\n\n const url = `api/v1/address/destination/${destinationBlockchain}/${address}`;\n try {\n const { data } = await axios.get<IDepositAddressesResponse>(url, {\n baseURL: baseApiUrl,\n params,\n });\n\n return data.addresses || [];\n } catch (err) {\n if (axios.isAxiosError<IApiError>(err)) {\n const message = err.response?.data.message;\n throw new Error(message);\n }\n }\n}\n","import { Address, pad } from 'viem';\n\nimport { getChainNameById } from '../../common/blockchain-identifier';\nimport {\n isSolanaChain,\n isStarknetChainId,\n isSuiChain,\n isValidChain,\n} from '../../common/chains';\nimport {\n AddressKind,\n getSolanaTokenAddress,\n getStarknetTokenAddress,\n getSuiTokenAddress,\n Token,\n} from '../../tokens/token-addresses';\nimport { getTokenContractInfo } from '../../tokens/tokens';\nimport { makeRequest } from './make-request';\nimport type {\n IGetDepositBtcAddressesParameters,\n IGetDepositBtcAddressParameters,\n} from './types';\n\n/**\n * Returns the current address for depositing BTC by given parameters.\n *\n * @throws {Error} - Throws an error if no address found or the provided chain id is not supported.\n */\nexport async function getDepositBtcAddress({\n address,\n chainId,\n env,\n partnerId,\n token: tokenParam = Token.LBTC,\n}: IGetDepositBtcAddressParameters) {\n const _addresses = await makeRequest({\n address,\n chainId,\n env,\n partnerId,\n });\n\n let depositAddress: string | undefined = undefined;\n\n if (![Token.LBTC, Token.BTCK, Token.BTCb].includes(tokenParam)) {\n throw new Error('Unsupported token');\n }\n\n // Filter deposit addresses by the destination token\n let tokenAddressFilter:\n | { token_address: string; aux_version?: number }\n | undefined = undefined;\n try {\n if (isValidChain(chainId)) {\n const tokenContractInfo = await getTokenContractInfo(\n tokenParam,\n chainId,\n env,\n AddressKind.Adapter,\n );\n tokenAddressFilter = {\n token_address: tokenContractInfo.address.toLowerCase(),\n };\n }\n\n if (isSuiChain(chainId)) {\n const tokenAddress = getSuiTokenAddress(chainId, env);\n if (tokenAddress) {\n tokenAddressFilter = {\n token_address: tokenAddress.toLowerCase(),\n };\n }\n }\n\n if (isSolanaChain(chainId)) {\n const solanaToken =\n tokenParam === Token.BTCb ? Token.BTCb : Token.LBTC;\n const tokenAddress = getSolanaTokenAddress(chainId, env, solanaToken);\n if (tokenAddress) {\n tokenAddressFilter = {\n token_address: tokenAddress.toLowerCase(),\n };\n }\n }\n\n if (isStarknetChainId(chainId)) {\n // api returns the address of the asset router contract\n const tokenAddress = getStarknetTokenAddress(chainId, env, 'assetRouter');\n if (tokenAddress) {\n tokenAddressFilter = {\n token_address: tokenAddress.toLowerCase(),\n };\n }\n }\n } catch {\n // NOOP\n }\n\n if (isStarknetChainId(chainId)) {\n address = pad(address as Address, { size: 32 }).toLowerCase();\n }\n\n const addresses = (_addresses || [])\n .filter(\n a =>\n // filter by chain id\n a.deposit_metadata.to_blockchain.toLowerCase() ===\n getChainNameById(chainId).toLowerCase() &&\n // filter by address\n a.deposit_metadata.to_address.toLowerCase() === address.toLowerCase(),\n )\n .filter(a => {\n if (!tokenAddressFilter) {\n return false;\n }\n\n // check if token addresses are matched\n let isForToken =\n a.deposit_metadata.token_address?.toLowerCase() ===\n tokenAddressFilter.token_address;\n // check if aux version is matched (if provided)\n if (tokenAddressFilter.aux_version != null) {\n isForToken =\n isForToken &&\n a.deposit_metadata.aux_version === tokenAddressFilter.aux_version;\n }\n\n // token_address can also be empty (null) when the address is for LBTC.\n // nosemgrep: codacy.tools-configs.rules_lgpl_javascript_crypto_rule-node-timing-attack -- comparing Token enum values, not secrets\n if (tokenParam === Token.LBTC) {\n isForToken = isForToken || !a.deposit_metadata.token_address;\n }\n\n // Solana backend may omit token_address and use aux_version instead.\n if (\n isSolanaChain(chainId) &&\n !isForToken &&\n !a.deposit_metadata.token_address\n ) {\n if (tokenParam === Token.BTCb || tokenParam === Token.BTCK) {\n isForToken = a.deposit_metadata.aux_version != null;\n } else if (tokenParam === Token.LBTC) {\n isForToken = a.deposit_metadata.aux_version == null;\n }\n }\n\n // Get only the addresses for the specified token.\n return isForToken;\n });\n\n if (addresses && addresses.length > 0) {\n const mostRecentAddress = addresses.reduce((mostRecent, cur) => {\n if (cur.created_at > mostRecent.created_at) {\n return cur;\n }\n return mostRecent;\n }, addresses[0]);\n\n if (!mostRecentAddress.deprecated) {\n depositAddress = mostRecentAddress.btc_address;\n }\n }\n\n if (!depositAddress) {\n throw new Error(\n `No deposit address found for ${address} on chain ${chainId}`,\n );\n }\n\n return depositAddress;\n}\n\n/**\n * Returns the addresses for depositing BTC by given parameters.\n * @throws {Error} - Throws an error if chain id is not supported.\n */\nexport async function getDepositBtcAddresses(\n parameters: IGetDepositBtcAddressesParameters,\n) {\n const addresses = await makeRequest(parameters);\n return addresses;\n}\n","import axios from 'axios';\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\ntype FetchAllPaginatedParameters<T> = {\n /** The API endpoint. */\n endpoint: string | URL;\n /** Function to extract items array from API response. */\n extractItems: (data: unknown) => T[];\n /** The additional query parameters. */\n query?: Record<string, string | undefined>;\n /** The page size, default: 1000 */\n pageSize?: number;\n /** The maximum amount of expected records. */\n maxRecords?: number;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Generic helper to fetch all paginated items from an API endpoint.\n * Automatically handles `limit`, `offset` and the `has_more` flag.\n * If `has_more` is missing, pagination stops.\n *\n * @template T - Type of individual item\n * @param {FetchAllPaginatedParameters<T>} params - Parameters for fetching all items\n\n *\n * @returns {Promise<T[]>} - All items fetched across pages\n */\nexport async function fetchAllPaginated<T>({\n endpoint,\n extractItems,\n query = {},\n pageSize = 1_000,\n maxRecords,\n}: FetchAllPaginatedParameters<T>): Promise<T[]> {\n let allItems: T[] = [];\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n const url = new URL(endpoint);\n\n url.searchParams.set('limit', pageSize.toString());\n url.searchParams.set('offset', offset.toString());\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) url.searchParams.set(key, String(value));\n }\n\n const { data } = await axios.get(url.toString());\n const items = extractItems(data);\n\n allItems = allItems.concat(items);\n offset += items.length;\n\n if (maxRecords && allItems.length >= maxRecords) {\n allItems = allItems.slice(0, maxRecords);\n break;\n }\n\n hasMore = items.length > 0 && (data.has_more ?? false);\n }\n\n return allItems;\n}\n","import { Env } from '@lombard.finance/sdk-common';\nimport BigNumber from 'bignumber.js';\n\nimport { getApiConfig } from '../../common/api-config';\nimport { getChainIdByName } from '../../common/blockchain-identifier';\nimport {\n ChainId,\n SolanaChain,\n StarknetChainId,\n SuiChain,\n} from '../../common/chains';\nimport { IEnvParam } from '../../common/parameters';\nimport {\n AddressKind,\n getTokenByAddress,\n Token,\n} from '../../tokens/token-addresses';\nimport { fromBaseDenomination } from '../../tokens/tokens';\nimport { fetchAllPaginated } from '../../utils/pagination';\nimport { BTC_DECIMALS, fromSatoshi } from '../../utils/satoshi';\n\n/** The default number of decimals for the deposit amount (value). */\nconst DECIMALS = BTC_DECIMALS;\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\ntype Address = string;\n\n/**\n * Enum representing the notarization status of a deposit transaction.\n */\nexport enum ENotarizationStatus {\n /** Status is unspecified or unknown */\n NOTARIZATION_STATUS_UNSPECIFIED = 'NOTARIZATION_STATUS_UNSPECIFIED',\n\n /** Initial status when a deposit transaction is created but not yet processed */\n NOTARIZATION_STATUS_PENDING = 'NOTARIZATION_STATUS_PENDING',\n\n /** Status when a deposit transaction is pending GMP processing */\n NOTARIZATION_STATUS_GMP_PENDING = 'NOTARIZATION_STATUS_GMP_PENDING',\n\n /** The deposit has been submitted for notarization */\n NOTARIZATION_STATUS_SUBMITTED = 'NOTARIZATION_STATUS_SUBMITTED',\n\n /** The notarization session was approved successfully */\n NOTARIZATION_STATUS_SESSION_APPROVED = 'NOTARIZATION_STATUS_SESSION_APPROVED',\n\n /** The notarization session failed */\n NOTARIZATION_STATUS_FAILED = 'NOTARIZATION_STATUS_FAILED',\n\n /** The notarization session was handled by GMP */\n NOTARIZATION_STATUS_GMP_HANDLED = 'NOTARIZATION_STATUS_GMP_HANDLED',\n}\n\n/**\n * Enum representing the state of a notarization session.\n */\nexport enum ESessionState {\n /** Session state is unspecified or unknown */\n SESSION_STATE_UNSPECIFIED = 'SESSION_STATE_UNSPECIFIED',\n\n /** Session is currently pending */\n SESSION_STATE_PENDING = 'SESSION_STATE_PENDING',\n\n /** Session has completed successfully */\n SESSION_STATE_COMPLETED = 'SESSION_STATE_COMPLETED',\n\n /** Session has expired without completion */\n SESSION_STATE_EXPIRED = 'SESSION_STATE_EXPIRED',\n}\n\nexport interface NativeDeposit {\n /** Transaction hash on the source blockchain */\n tx_hash: string;\n\n /** Event index inside the transaction (for multi-event transactions) */\n event_index: number;\n\n /** Source blockchain identifier (e.g., BLOCKCHAIN_KATANA) */\n from_blockchain: string;\n\n /** Destination blockchain identifier */\n to_blockchain: string;\n\n /** Sender address on the source chain */\n from_address: string;\n\n /** Receiver address on the destination chain */\n to_address: string;\n\n /** Destination token contract address (if applicable) */\n to_token_address: string;\n\n /** Block height of the source chain confirmation */\n block_height: string;\n\n /** Block time of the source chain confirmation (ISO 8601) */\n block_time: string;\n\n /** Amount deposited (string to preserve precision) */\n amount: string;\n\n /** Hash of the payload that proves the deposit details */\n payload_hash: string;\n\n /** Raw payload bytes (hex-encoded) */\n raw_payload: string;\n\n /** Cryptographic proof (hex-encoded) */\n proof: string;\n\n /** ID of the notarization session linked to this deposit */\n session_id: string;\n\n /** Current notarization status of this deposit */\n notarization_status: ENotarizationStatus;\n\n /** Current session state of this deposit */\n session_state: ESessionState;\n\n /** Claim transaction hash on the destination chain, if claimed */\n claim_tx?: string;\n\n /** True if the deposit is sanctioned */\n sanctioned?: boolean;\n}\n\n/** Top-level response from the Native Deposits API */\nexport interface NativeDepositsResponse {\n /** List of native deposit records */\n deposits: NativeDeposit[];\n\n /** True if there are more deposits available */\n has_more: boolean;\n}\n\nexport interface DirectDeposit {\n /** Transaction ID on the source chain */\n txid: string;\n\n /** Event index inside the transaction (useful for multi-event transactions) */\n index: string;\n\n /** Block height of the source chain confirmation */\n block_height: string;\n\n /** Amount deposited (string to preserve precision) */\n value: string;\n\n /** Destination address (EVM or BTC) */\n address: string;\n\n /** Hash of the payload proving the deposit */\n payload_hash: string;\n\n /** Raw payload bytes (hex-encoded) */\n raw_payload: string;\n\n /** Cryptographic proof (hex-encoded) */\n proof: string;\n\n /** Notarization session ID */\n session_id: string;\n\n /** Current notarization status */\n notarization_status: ENotarizationStatus;\n\n /** Current session state */\n session_state: ESessionState;\n\n /** Destination blockchain identifier */\n to_chain: string;\n\n /** Claim transaction hash on the destination chain, if claimed */\n claim_tx?: string;\n\n /** True if the deposit is sanctioned */\n sanctioned?: boolean;\n\n /** Block time of the source chain confirmation (timestamp as string) */\n block_time: string;\n\n /** Notarization wait duration (optional) */\n notarization_wait_dur?: string;\n\n /** Token address for the deposit */\n token_address?: string;\n\n /** Auxiliary version (if applicable) */\n aux_version?: number;\n\n /** Amount minted */\n token_amount?: string;\n\n /** GMP mint ID for solana LBTC GMP flow */\n mint_id?: string;\n}\n\n/** Top-level response from the Direct BTC Deposits API */\nexport interface DirectDepositsResponse {\n /** List of direct deposit records */\n outputs: DirectDeposit[];\n\n /** True if there are more deposits available */\n has_more: boolean;\n}\n\n/**\n * A unified deposit record returned from either\n * Direct BTC Deposits or Native Deposits APIs.\n */\nexport interface Deposit {\n /**\n * Whether this deposit originates from the Native Deposits API (EVM/alt-chain source).\n *\n * - `false` — Bitcoin mainnet direct deposit: the user sent BTC directly to a\n * Lombard deposit address. This is the most common case for BTC stakers.\n * - `true` — Native deposit: the deposit originated on an EVM or alt-chain\n * (e.g. a chain using Lombard's native deposits flow).\n *\n * When polling for standard BTC deposit status, filter on `isNative === false`.\n *\n * @remarks A rename to a more descriptive field (e.g. `depositSource`) is\n * planned in a future major version to avoid confusion with \"native BTC\".\n */\n isNative: boolean;\n\n /** Transaction hash on the source blockchain. */\n txHash: string;\n\n /** Event index inside the transaction (Direct BTC uses output index). */\n eventIndex: number;\n\n /** Amount deposited (always normalized to satoshis/smallest unit). */\n amount: BigNumber;\n\n /** Amount minted (if applicable). */\n tokenAmount?: BigNumber;\n\n /** BTC address where the user deposited (direct BTC only). */\n depositAddress?: string;\n\n /** Sender address on the source chain (native only). */\n fromAddress?: string;\n\n /** Receiver address on the destination chain (if applicable). */\n toAddress?: string;\n\n /** Destination token contract (if applicable). */\n toTokenAddress?: string;\n\n /** Destination token (if applicable). */\n toToken?: Token;\n\n /** Destination chain identifier. */\n toChainId: ChainId | SuiChain | SolanaChain | StarknetChainId;\n\n /** Source chain identifier (native only). */\n fromChainId?: ChainId | SuiChain | SolanaChain | StarknetChainId;\n\n /** Block height where the deposit was confirmed (as a number). */\n blockHeight?: number;\n\n /**\n * Unix timestamp (seconds) of confirmation.\n * Converted from ISO8601 (native) or string epoch (direct BTC).\n */\n blockTime?: number;\n\n /** Hash of the payload proving the deposit details. */\n payloadHash?: string;\n\n /** Raw payload bytes (hex-encoded). */\n rawPayload?: string;\n\n /** Merkle/cryptographic proof (hex-encoded). */\n proof?: string;\n\n /** ID of the notarization session (string to preserve both APIs). */\n sessionId: string;\n\n /** Current notarization status. */\n notarizationStatus: ENotarizationStatus;\n\n /** Current session state. */\n sessionState: ESessionState;\n\n /** Claim transaction hash on the destination chain, if claimed. */\n claimTxHash?: string;\n\n /** True if the deposit was claimed (derived). */\n isClaimed: boolean;\n\n /** True if deposit is sanctioned (present in both APIs). */\n sanctioned?: boolean;\n\n /** Optional auxiliary version (direct BTC only). */\n auxVersion?: number;\n\n /** Optional wait duration for notarization (direct BTC only, in seconds). */\n notarizationWaitDur?: number;\n}\n\nexport interface IGetDepositsByAddressParams extends IEnvParam {\n /**\n * The EVM address to get deposits for\n */\n address: Address;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Fetchers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Fetches deposits from the Direct BTC Deposits API for a given address.\n *\n * Converts the API response into a unified `Deposit` format.\n *\n * @param {IGetDepositsByAddressParams} params - Parameters including address and environment\n * @param {string} params.address - The EVM/BTC address to fetch deposits for\n * @param {Env} params.env - The environment (e.g., 'mainnet', 'testnet')\n *\n * @returns {Promise<Deposit[]>} A list of direct BTC deposits in unified format\n *\n * @example\n * const directDeposits = await fetchDirectDeposits({ address: 'tb1q...', env: 'testnet' });\n */\nexport async function fetchDirectDeposits({\n address,\n env,\n}: IGetDepositsByAddressParams): Promise<Deposit[]> {\n const { baseApiUrl } = getApiConfig(env);\n\n // pad address to 64 characters if needed\n if (address.startsWith('0x') && address.slice(2).length === 63) {\n address = `0x0${address.slice(2)}`;\n }\n\n const endpoint = new URL(`/api/v1/address/outputs-v2/${address}`, baseApiUrl);\n\n const outputs = await fetchAllPaginated({\n endpoint,\n extractItems: data => (data as DirectDepositsResponse)?.outputs ?? [],\n });\n\n return outputs.map(d => mapDirectBtcDeposit(d, env, address));\n}\n\n/**\n * Fetches deposits from the Native Deposits API for a given address.\n *\n * Converts the API response into a unified `Deposit` format.\n *\n * @param {IGetDepositsByAddressParams} params - Parameters including address and environment\n * @param {string} params.address - The EVM/BTC address to fetch deposits for\n * @param {Env} params.env - The environment (e.g., 'mainnet', 'testnet')\n *\n * @returns {Promise<Deposit[]>} A list of native deposits in unified format\n *\n * @example\n * const nativeDeposits = await fetchNativeDeposits({ address: 'tb1q...', env: 'testnet' });\n */\nexport async function fetchBTCbDeposits({\n address,\n env,\n}: IGetDepositsByAddressParams): Promise<Deposit[]> {\n const { baseApiUrl } = getApiConfig(env);\n\n const endpoint = new URL(\n `/api/v1/address/native-deposits/${address}`,\n baseApiUrl,\n );\n\n const deposits = await fetchAllPaginated({\n endpoint,\n extractItems: data => (data as NativeDepositsResponse)?.deposits ?? [],\n });\n\n return deposits.map(d => mapBTCbDeposits(d, env));\n}\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\nfunction mapDirectBtcDeposit(\n d: DirectDeposit,\n env?: Env,\n accountAddress?: string,\n): Deposit {\n return {\n isNative: false,\n txHash: d.txid,\n eventIndex: d.index ? Number(d.index) : 0,\n amount: fromSatoshi(d.value),\n tokenAmount: d.token_amount\n ? fromBaseDenomination(d.token_amount, DECIMALS)\n : undefined,\n depositAddress: d.address,\n toAddress: accountAddress,\n toChainId: getChainIdByName(d.to_chain, env),\n blockHeight: d.block_height ? Number(d.block_height) : undefined,\n blockTime: d.block_time ? Number(d.block_time) : undefined, // epoch seconds\n payloadHash: d.payload_hash,\n rawPayload: d.raw_payload,\n proof: d.proof,\n sessionId: d.session_id,\n notarizationStatus: d.notarization_status,\n sessionState: d.session_state,\n claimTxHash: d.claim_tx,\n isClaimed: !!d.claim_tx,\n sanctioned: d.sanctioned,\n toTokenAddress: d.token_address,\n toToken: getTokenByAddress(\n d.token_address,\n getChainIdByName(d.to_chain, env),\n env,\n AddressKind.Adapter,\n ),\n auxVersion: d.aux_version,\n notarizationWaitDur: d.notarization_wait_dur\n ? Number(d.notarization_wait_dur)\n : undefined,\n };\n}\n\nfunction mapBTCbDeposits(d: NativeDeposit, env?: Env): Deposit {\n return {\n isNative: true,\n txHash: d.tx_hash,\n eventIndex: d.event_index,\n amount: fromBaseDenomination(d.amount, DECIMALS),\n tokenAmount: undefined,\n fromAddress: d.from_address,\n toAddress: d.to_address,\n toTokenAddress: d.to_token_address,\n toToken: getTokenByAddress(\n d.to_token_address,\n getChainIdByName(d.to_blockchain, env),\n env,\n AddressKind.Adapter,\n ),\n toChainId: getChainIdByName(d.to_blockchain, env),\n fromChainId: getChainIdByName(d.from_blockchain, env),\n blockHeight: d.block_height ? Number(d.block_height) : undefined,\n blockTime: d.block_time\n ? Math.floor(new Date(d.block_time).getTime() / 1000) // seconds\n : undefined,\n payloadHash: d.payload_hash,\n rawPayload: d.raw_payload,\n proof: d.proof,\n sessionId: d.session_id,\n notarizationStatus: d.notarization_status,\n sessionState: d.session_state,\n claimTxHash: d.claim_tx,\n isClaimed: !!d.claim_tx,\n sanctioned: d.sanctioned,\n };\n}\n\n/* -------------------------------------------------------------------------- */\n/* Public API */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Fetches all deposits for a given address from both Direct BTC Deposits\n * and Native Deposits APIs, unifying them into a single list.\n *\n * Both APIs are called concurrently. If one API fails, the other still returns results.\n *\n * Deposits are returned sorted by `blockTime` descending (newest first).\n *\n * @param {IGetDepositsByAddressParams} params - Parameters including the address and environment\n * @param {string} params.address - The EVM/BTC address to fetch deposits for\n * @param {Env} params.env - The environment (e.g., 'mainnet', 'testnet')\n *\n * @returns {Promise<Deposit[]>} A unified list of deposits from both APIs\n *\n * @example\n * const deposits = await getDepositsByAddress({ address: 'tb1q...', env: 'testnet' });\n * console.log(deposits);\n */\nexport async function getDepositsByAddress({\n address,\n env,\n}: IGetDepositsByAddressParams): Promise<Deposit[]> {\n const results = await Promise.allSettled([\n fetchDirectDeposits({ address, env }),\n fetchBTCbDeposits({ address, env }),\n ]);\n\n let directDeposits: Deposit[] = [];\n let nativeDeposits: Deposit[] = [];\n\n results.forEach((result, idx) => {\n if (result.status === 'fulfilled') {\n if (idx === 0)\n directDeposits = result.value; // Direct BTC deposits\n else nativeDeposits = result.value; // Native deposits\n } else {\n console.error(\n idx === 0\n ? 'Failed to fetch direct BTC deposits:'\n : 'Failed to fetch native deposits:',\n result.reason,\n );\n }\n });\n\n const allDeposits = [...directDeposits, ...nativeDeposits].sort((a, b) => {\n const aTime = a.blockTime ?? 0;\n const bTime = b.blockTime ?? 0;\n return bTime - aTime;\n });\n\n return allDeposits;\n}\n","import { DEFAULT_ENV, Env } from '@lombard.finance/sdk-common';\nimport axios from 'axios';\nimport BigNumber from 'bignumber.js';\n\nimport { getApiConfig } from '../../common/api-config';\nimport { IEnvParam } from '../../common/parameters';\n\nconst CURRENT_SEASON = 2;\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Parameters for fetching points by address.\n */\nexport interface IGetPointsByAddressParameters extends IEnvParam {\n /** The address of the points earner. */\n address: string;\n /** The season to fetch (defaults to CURRENT_SEASON). */\n season?: number;\n}\n\n/**\n * Breakdown of points earned from each supported DeFi protocol.\n */\nexport interface IProtocolPointsBreakdown {\n [protocolName: string]: number;\n}\n\n/**\n * Core points shared across all seasons.\n */\nexport interface IPointsBase {\n /** Points earned by holding LBTC. */\n holdingPoints: number;\n /** Points earned by taking positions in DeFi vaults. */\n protocolPoints: number;\n /** Points earned from referrals. */\n referralPoints: number;\n /** Total points earned. */\n totalPoints: number;\n /** Detailed breakdown of protocol-specific points. */\n protocolPointsBreakdown: IProtocolPointsBreakdown;\n /** Lux points earned from badges. */\n badgesPoints: number;\n /** Total Lux points excluding badges (only required in some seasons). */\n totalWithoutBadgesPoints?: number;\n}\n\n/**\n * Points specific to Season 1.\n */\nexport interface IPointsByAddressSeason1 extends IPointsBase {\n /** Points earned in the OKX campaign. */\n okxPoints: number;\n /** Points earned in the first flash event. */\n flashEvent1Points: number;\n /** Points earned in the second flash event. */\n flashEvent2Points: number;\n}\n\n/**\n * Points specific to Season 2.\n */\nexport interface IPointsByAddressSeason2 extends IPointsBase {\n /** Points earned from referees. */\n refereePoints: number;\n /** Points earned by checking in. */\n checkinPoints: number;\n}\n\n/**\n * Raw API response format for Season 1.\n */\ninterface IPointsResponseSeason1 {\n holding_points: number;\n protocol_points: number;\n referee_points: number;\n referrals_points: number;\n total: number;\n flash_event: number;\n badges: number;\n total_without_badges: number;\n okx_campaign: number;\n flash_event2: number;\n protocol_points_map?: IProtocolPointsBreakdown;\n}\n\n/**\n * Raw API response format for Season 2.\n */\ninterface IPointsResponseSeason2 {\n holding_points: number;\n protocol_points: number;\n referee_points: number;\n referrals_points: number;\n total: number;\n protocol_points_map?: IProtocolPointsBreakdown;\n badge_points: number;\n checkin_points: number;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Parses a number-like input into a BigNumber.\n *\n * @param input - The value to parse.\n * @param defaultValue - Value to use if input is invalid or undefined.\n * @returns A BigNumber representing the parsed value.\n */\nfunction parse(\n input: string | number | null | undefined,\n defaultValue = 0,\n): BigNumber {\n return BigNumber(Number(input) || defaultValue);\n}\n\n/**\n * Converts a protocol points map to a strongly typed breakdown object.\n *\n * @param map - Optional protocol points map from the API.\n * @returns A normalized breakdown object with numeric values.\n */\nfunction toProtocolBreakdown(\n map: IProtocolPointsBreakdown | undefined,\n): IProtocolPointsBreakdown {\n return Object.entries(map || {}).reduce((acc, [k, v]) => {\n acc[k] = parse(v).toNumber();\n return acc;\n }, {} as IProtocolPointsBreakdown);\n}\n\n/**\n * Constructs the Lombard points API endpoint for the given season and address.\n *\n * @param season - The Lux points season (e.g., 1 or 2).\n * @param address - Wallet address to query.\n * @param env - Target environment (defaults to DEFAULT_ENV).\n * @throws If the API endpoint cannot be determined or the season is invalid.\n */\nfunction getLombardPointsUrl(\n season: number,\n address: string,\n env: Env = DEFAULT_ENV,\n): string {\n const { baseApiUrl } = getApiConfig(env);\n if (!baseApiUrl) {\n throw new Error(\n `Could not determine the API endpoint for the provided environment: ${\n env || DEFAULT_ENV\n }`,\n );\n }\n\n switch (season) {\n case 1:\n return `${baseApiUrl}/api/v1/referral-system/season-1/points/${address}`;\n case 2:\n return `${baseApiUrl}/api/v1/referral-system/season-2/points/${address}`;\n default:\n throw new Error(`Invalid Lux season: ${season}`);\n }\n}\n\n/* -------------------------------------------------------------------------- */\n/* Fetchers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Fetches and parses Season 1 points for a given address.\n *\n * @param params - Address and environment parameters.\n * @returns A typed object containing all Season 1 point metrics.\n */\nasync function fetchPointsSeason1({\n address,\n env,\n}: Omit<\n IGetPointsByAddressParameters,\n 'season'\n>): Promise<IPointsByAddressSeason1> {\n const { data } = await axios.get<IPointsResponseSeason1>(\n getLombardPointsUrl(1, address, env),\n );\n\n const referralPoints = parse(data.referee_points).plus(\n parse(data.referrals_points),\n );\n\n return {\n holdingPoints: parse(data.holding_points).toNumber(),\n protocolPoints: parse(data.protocol_points).toNumber(),\n referralPoints: referralPoints.toNumber(),\n okxPoints: parse(data.okx_campaign).toNumber(),\n flashEvent1Points: parse(data.flash_event).toNumber(),\n flashEvent2Points: parse(data.flash_event2).toNumber(),\n totalPoints: parse(data.total).toNumber(),\n protocolPointsBreakdown: toProtocolBreakdown(data.protocol_points_map),\n badgesPoints: parse(data.badges).toNumber(),\n totalWithoutBadgesPoints: parse(data.total_without_badges).toNumber(),\n };\n}\n\n/**\n * Fetches and parses Season 2 points for a given address.\n *\n * @param params - Address and environment parameters.\n * @returns A typed object containing all Season 2 point metrics.\n */\nasync function fetchPointsSeason2({\n address,\n env,\n}: Omit<\n IGetPointsByAddressParameters,\n 'season'\n>): Promise<IPointsByAddressSeason2> {\n const { data } = await axios.get<IPointsResponseSeason2>(\n getLombardPointsUrl(2, address, env),\n );\n\n return {\n holdingPoints: parse(data.holding_points).toNumber(),\n protocolPoints: parse(data.protocol_points).toNumber(),\n referralPoints: parse(data.referrals_points).toNumber(),\n refereePoints: parse(data.referee_points).toNumber(),\n badgesPoints: parse(data.badge_points).toNumber(),\n checkinPoints: parse(data.checkin_points).toNumber(),\n totalPoints: parse(data.total).toNumber(),\n protocolPointsBreakdown: toProtocolBreakdown(data.protocol_points_map),\n totalWithoutBadgesPoints: parse(data.total).toNumber(),\n };\n}\n\n/* -------------------------------------------------------------------------- */\n/* Public API */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Retrieves Season 1 points for a given address.\n *\n * @param parameters - Address and environment parameters.\n * @returns A Season 1 points object.\n */\nexport async function getPointsByAddress(\n parameters: IGetPointsByAddressParameters & { season: 1 },\n): Promise<IPointsByAddressSeason1>;\n\n/**\n * Retrieves Season 2 points for a given address.\n *\n * @param parameters - Address and environment parameters.\n * @returns A Season 2 points object.\n */\nexport async function getPointsByAddress(\n parameters: IGetPointsByAddressParameters & { season: 2 },\n): Promise<IPointsByAddressSeason2>;\n\n/**\n * Retrieves points for the given address.\n * Defaults to the current season if none is specified.\n *\n * @param parameters - Address and optional environment/season parameters.\n * @returns A points object matching the requested or current season.\n */\nexport async function getPointsByAddress(\n parameters: IGetPointsByAddressParameters,\n): Promise<IPointsByAddressSeason1 | IPointsByAddressSeason2>;\n\n/**\n * Implementation of getPointsByAddress with overloads.\n */\nexport async function getPointsByAddress({\n address,\n env,\n season = CURRENT_SEASON,\n}: IGetPointsByAddressParameters): Promise<\n IPointsByAddressSeason1 | IPointsByAddressSeason2\n> {\n return season === 2\n ? fetchPointsSeason2({ address, env })\n : fetchPointsSeason1({ address, env });\n}\n\n/**\n * Convenience wrapper for fetching Season 1 points.\n *\n * @param params - Address and environment parameters.\n */\nexport const getLuxSeason1Points = (\n params: Omit<IGetPointsByAddressParameters, 'season'>,\n) => getPointsByAddress({ ...params, season: 1 });\n\n/**\n * Convenience wrapper for fetching Season 2 points.\n *\n * @param params - Address and environment parameters.\n */\nexport const getLuxSeason2Points = (\n params: Omit<IGetPointsByAddressParameters, 'season'>,\n) => getPointsByAddress({ ...params, season: 2 });\n","import { DEFAULT_ENV } from '@lombard.finance/sdk-common';\nimport BigNumber from 'bignumber.js';\nimport * as bitcoin from 'bitcoinjs-lib';\nimport { Hex, trim } from 'viem';\n\nimport { getApiConfig } from '../../common/api-config';\nimport {\n BlockchainIdentifier,\n getChainIdByName,\n} from '../../common/blockchain-identifier';\nimport {\n ChainId,\n isSolanaChain,\n isStarknetChainId,\n isSuiChain,\n isValidChain,\n SolanaChain,\n StarknetChainId,\n SuiChain,\n} from '../../common/chains';\nimport { IEnvParam } from '../../common/parameters';\nimport {\n AddressKind,\n getSolanaTokenAddress,\n getStarknetTokenAddress,\n getSuiTokenAddress,\n Token,\n TOKEN_ADDRESSES,\n} from '../../tokens/token-addresses';\nimport { fetchAllPaginated } from '../../utils/pagination';\nimport { fromSatoshi } from '../../utils/satoshi';\nimport {\n ENotarizationStatus,\n ESessionState,\n} from '../getDepositsByAddress/getDepositsByAddress';\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Status of a payout transaction corresponding to an unstake.\n */\nexport enum PayoutTxStatus {\n /** The payout transaction has been sent; unstake completed */\n Completed = 'Completed',\n\n /** The payout transaction has not been sent; unstake pending */\n Pending = 'Pending',\n}\n\n/**\n * Response object for a single unstake record from the API.\n */\ninterface UnstakeEntry {\n /** Transaction hash of the unstake on the source blockchain. */\n tx_hash: string;\n\n /** Source blockchain identifier (e.g., BLOCKCHAIN_BSC, BLOCKCHAIN_ETHEREUM). */\n blockchain: BlockchainIdentifier;\n\n /** Block height where the unstake was confirmed. */\n block_height: string;\n\n /** Block time of the unstake transaction (as a string timestamp). */\n block_time: string;\n\n /** Address of the initiator of the unstake. */\n from_address: string;\n\n /** Destination address for the payout. */\n to_address?: string;\n\n /** Destination blockchain identifier for the payout. */\n to_chain?: string;\n\n /** Output script used to derive BTC address, present for BTC unstakes. */\n output_script?: string;\n\n /** Amount unstaked (string to preserve precision). */\n amount: string;\n\n /** Payout transaction hash on the destination chain, if already completed. */\n payout_txid?: string;\n\n /** Index of the payout transaction, if applicable. */\n payout_index?: string;\n\n /** True if the unstake transaction has been sanctioned or flagged as suspicious. */\n sanctioned?: boolean;\n\n /** Cryptographic proof (hex-encoded) */\n proof?: string;\n\n /** Raw payload bytes (hex-encoded) */\n payload?: string;\n\n /** Current notarization status (for native chain redemptions) */\n notarization_status?: ENotarizationStatus;\n\n /** Current session state (for native chain redemptions) */\n session_state?: ESessionState;\n\n /** Claim transaction hash on the destination chain, if claimed (for native chain redemptions) */\n claim_tx?: string;\n\n /** Token address on the source chain */\n from_token_address?: string;\n}\n\n/**\n * Top-level API response for unstakes.\n */\ninterface UnstakesResponse {\n unstakes?: UnstakeEntry[];\n\n /** True if there are more unstakes available */\n has_more: boolean;\n}\n\n/**\n * Parameters for fetching unstakes by address.\n */\nexport interface IGetUnstakesByAddressParameters extends IEnvParam {\n /** Address of the unstake initiator */\n address: string;\n\n /** Optional filtering */\n options?: {\n /** Show only direct BTC unstakes */\n show_unstakes?: boolean;\n /** Show only native chain redemptions */\n show_redeems?: boolean;\n /** Show only redeems to native chain (LBTC -> BTC.b) */\n to_native?: boolean;\n };\n}\n\n/**\n * A unified unstake record returned from either\n * direct BTC unstakes or native blockchain redemptions.\n */\nexport interface Unstake {\n /** True if the record originates from the native blockchain redemption. */\n isNative: boolean;\n\n /** Transaction hash of the unstake. */\n txHash: string;\n\n /** Source chain identifier (where the unstake originated). */\n fromChainId: ChainId | SuiChain | SolanaChain | StarknetChainId;\n\n /** Destination chain identifier (undefined for BTC unstakes). */\n toChainId?: ChainId | SuiChain | SolanaChain | StarknetChainId | 'bitcoin';\n\n /** Block height where the unstake was confirmed. */\n blockHeight: number;\n\n /** Block time (as epoch seconds) of the unstake. */\n blockTime: number;\n\n /** Initiator of the unstake transaction. */\n fromAddress: string;\n\n /** Destination address (BTC, EVM, or Solana). */\n toAddress?: string;\n\n /** Amount unstaked (normalized to satoshis / smallest unit). */\n amount: BigNumber;\n\n /** Payout transaction hash on the destination chain, if claimed. */\n payoutTxHash?: string;\n\n /** Payout transaction index, if applicable. */\n payoutTxIndex?: number;\n\n /** Status of the payout transaction. */\n payoutTxStatus: PayoutTxStatus;\n\n /** True if the unstake transaction has been sanctioned. */\n sanctioned?: boolean;\n\n /** Raw payload bytes (hex-encoded). */\n rawPayload?: string;\n\n /** Merkle/cryptographic proof (hex-encoded). */\n proof?: string;\n\n /** The output token. */\n toToken?: Token;\n\n /** The output token address. */\n toTokenAddress?: string;\n\n /** Current notarization status (for native chain redemptions). */\n notarizationStatus?: ENotarizationStatus;\n\n /** Current session state (for native chain redemptions). */\n sessionState?: ESessionState;\n\n /** Claim transaction hash on the destination chain, if claimed (for native chain redemptions). */\n claimTxHash?: string;\n\n /** Token address on the source chain */\n fromTokenAddress?: string;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Fetchers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Fetches all unstakes initiated by a given address.\n *\n * @param {IGetUnstakesByAddressParameters} params - Parameters for fetching unstakes.\n * @param {string} params.address - Address of the unstake initiator.\n * @param {Env} [params.env='prod'] - Environment to use (prod/testnet).\n * @param {object} [params.options] - Optional pagination and filter options.\n *\n * @returns {Promise<Unstake[]>} - List of mapped unstakes.\n *\n * @throws {Error} - Throws if no address is specified.\n */\nexport async function fetchUnstakesByAddress({\n address,\n env = DEFAULT_ENV,\n options,\n}: IGetUnstakesByAddressParameters): Promise<Unstake[]> {\n if (!address) throw new Error('No address specified.');\n\n const { baseApiUrl } = getApiConfig(env);\n\n // pad address to 64 characters if needed\n if (address.startsWith('0x') && address.slice(2).length === 63) {\n address = `0x0${address.slice(2)}`;\n }\n\n const endpoint = new URL(`/api/v1/address/unstakes/${address}`, baseApiUrl);\n\n const unstakes = await fetchAllPaginated({\n endpoint,\n extractItems: data => (data as UnstakesResponse)?.unstakes ?? [],\n query: {\n show_redeems: options?.show_redeems ? 'true' : undefined,\n show_unstakes: options?.show_unstakes ? 'true' : undefined,\n to_native: options?.to_native ? 'true' : undefined,\n },\n });\n\n return unstakes.map(d => mapUnstakeEntry(d, env));\n}\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Maps a raw API unstake response to the unified `Unstake` object.\n *\n * @param {UnstakeEntry} d - Raw unstake data from API\n * @param {Env} env - Environment to use for chain/network resolution\n *\n * @returns {Unstake} - Unified unstake object\n */\nfunction mapUnstakeEntry(\n d: UnstakeEntry,\n env: IEnvParam['env'] = DEFAULT_ENV,\n): Unstake {\n const isNative = Boolean(d.to_chain && d.to_address);\n\n let toAddress: string | undefined = d.to_address;\n if (!isNative && d.output_script && !toAddress) {\n try {\n toAddress = bitcoin.address.fromOutputScript(\n Buffer.from(d.output_script.replace(/^0x/, ''), 'hex'),\n env === 'prod' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet,\n );\n } catch {\n toAddress = undefined;\n }\n } else if (toAddress?.startsWith('0x')) {\n toAddress = trim(toAddress as Hex);\n }\n\n const payoutTxStatus = d.payout_txid\n ? PayoutTxStatus.Completed\n : PayoutTxStatus.Pending;\n\n const toToken = isNative ? Token.BTCb : undefined;\n const toChainId = d.to_chain\n ? d.to_chain === BlockchainIdentifier.bitcoin ||\n d.to_chain === BlockchainIdentifier.bitcoinOld\n ? 'bitcoin'\n : getChainIdByName(d.to_chain, env)\n : undefined;\n\n let toTokenAddress: string | undefined = undefined;\n if (toToken) {\n if (isValidChain(toChainId)) {\n let address = TOKEN_ADDRESSES?.[toToken]?.[env]?.[toChainId];\n if (address) {\n address =\n typeof address === 'string' ? address : address[AddressKind.Adapter];\n }\n toTokenAddress = address;\n }\n\n if (isSolanaChain(toChainId)) {\n toTokenAddress = getSolanaTokenAddress(toChainId, env);\n }\n\n if (isSuiChain(toChainId)) {\n toTokenAddress = getSuiTokenAddress(toChainId, env);\n }\n\n if (isStarknetChainId(toChainId)) {\n toTokenAddress = getStarknetTokenAddress(toChainId, env);\n }\n }\n\n return {\n isNative,\n txHash: d.tx_hash,\n fromChainId: getChainIdByName(d.blockchain, env),\n toChainId,\n blockHeight: Number(d.block_height),\n blockTime: Number(d.block_time),\n fromAddress: d.from_address,\n toAddress,\n amount: fromSatoshi(d.amount),\n payoutTxHash: d.payout_txid,\n payoutTxIndex: d.payout_index ? Number(d.payout_index) : undefined,\n payoutTxStatus,\n sanctioned: d.sanctioned,\n proof: d.proof,\n rawPayload: d.payload,\n toToken,\n toTokenAddress,\n notarizationStatus: d.notarization_status,\n sessionState: d.session_state,\n claimTxHash: d.claim_tx,\n fromTokenAddress: d.from_token_address,\n };\n}\n\n/* -------------------------------------------------------------------------- */\n/* Public API */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Returns all unstakes (direct BTC or native chain redemptions) for a given address.\n *\n * @param {IGetUnstakesByAddressParameters} params - Parameters for fetching unstakes.\n * @param {string} params.address - Address of the unstake initiator.\n * @param {Env} [params.env=DEFAULT_ENV] - Environment to use.\n * @param {object} [params.options] - Optional pagination and filter options.\n *\n * @returns {Promise<Unstake[]>} - Array of unified unstake records.\n *\n * @throws {Error} - Throws if no address is specified.\n */\nexport async function getUnstakesByAddress({\n address,\n env = DEFAULT_ENV,\n options,\n}: IGetUnstakesByAddressParameters): Promise<Unstake[]> {\n return fetchUnstakesByAddress({ address, env, options });\n}\n","import axios from 'axios';\n\nimport { getApiConfig } from '../../common/api-config';\nimport { IEnvParam } from '../../common/parameters';\nimport { getErrorMessage } from '../../utils/err';\n\nexport type IStoreStakeAndBakeSignatureStatus = 'success';\n\ninterface IStoreStakeAndBakeSignatureResponse {\n status: IStoreStakeAndBakeSignatureStatus;\n}\n\nconst EMPTY_SIGNATURE = '0x00';\n\nexport interface IStoreStakeAndBakeSignatureParams extends IEnvParam {\n /**\n * signature\n */\n signature: string;\n /**\n * JSON typed data used for the signature\n */\n typedData: string;\n}\n\n/**\n * Store stake and bake signature\n *\n * @param {IStoreStakeAndBakeSignatureParams} parameters - The parameters for storing stake and bake signature\n * @param {string} parameters.signature - The signature.\n * @param {string} parameters.typedData - The serialized typed data.\n * @param {Env} parameters.env - The optional environment identifier.\n *\n * @returns {Promise<IStoreStakeAndBakeSignatureStatus>}\n */\nexport async function storeStakeAndBakeSignature({\n signature,\n typedData,\n env,\n}: IStoreStakeAndBakeSignatureParams): Promise<IStoreStakeAndBakeSignatureStatus> {\n const { baseApiUrl } = getApiConfig(env);\n\n try {\n const { data } = await axios.post<IStoreStakeAndBakeSignatureResponse>(\n `${baseApiUrl}/api/v1/claimer/save-stake-and-bake-signature`,\n null,\n {\n params: {\n typed_data: typedData,\n signature: signature || EMPTY_SIGNATURE,\n },\n },\n );\n\n return data.status;\n } catch (error) {\n const errorMsg = getErrorMessage(error);\n\n throw new Error(errorMsg);\n }\n}\n","import axios from 'axios';\n\nimport { getApiConfig } from '../../common/api-config';\nimport type { IEnvParam } from '../../common/parameters';\n\ninterface ApiResponse {\n exists?: boolean;\n referrer?: string;\n}\n\nexport interface GetDepositAddressReferrerParams extends IEnvParam {\n address: string;\n}\n\nexport interface DepositAddressReferrerResult {\n hasDepositAddress: boolean;\n referrer?: string;\n}\n\n/**\n * Fetch the referrer associated with a previously generated BTC deposit address.\n *\n * @param params - Address lookup parameters\n */\nexport async function getDepositAddressReferrer({\n address,\n env,\n}: GetDepositAddressReferrerParams): Promise<DepositAddressReferrerResult> {\n const { baseApiUrl } = getApiConfig(env);\n const { data } = await axios.get<ApiResponse>(\n `${baseApiUrl}/api/v1/address/exists/${address}`,\n );\n\n return {\n hasDepositAddress: Boolean(data.exists),\n referrer: data.referrer,\n };\n}\n","import { getDepositAddressReferrer } from '../api-functions/getDepositAddressReferrer';\nimport type { LombardSDK } from '../client/LombardSDK';\n\nexport interface ReferralLookupParams {\n /** Destination account that previously generated a BTC deposit address */\n address: string;\n}\n\nexport interface ReferralLookupResult {\n hasDepositAddress: boolean;\n referrer?: string;\n}\n\n/**\n * Referral helper namespace.\n *\n * Provides read APIs for referral metadata so partners do not need to query\n * Lombard REST endpoints directly.\n */\nexport class ReferralsClient {\n constructor(private readonly sdk: LombardSDK) {}\n\n /**\n * Fetch the referrer bound to a previously generated BTC deposit address.\n */\n async lookupReferrer({\n address,\n }: ReferralLookupParams): Promise<ReferralLookupResult> {\n return getDepositAddressReferrer({\n address,\n env: this.sdk.config.env,\n });\n }\n}\n"],"names":["makeRequest","address","chainId","env","limit","offset","partnerId","baseApiUrl","getApiConfig","destinationBlockchain","getChainNameById","BlockchainIdentifier","pad","params","k","v","url","data","axios","err","message","_a","getDepositBtcAddress","tokenParam","Token","_addresses","depositAddress","tokenAddressFilter","isValidChain","getTokenContractInfo","AddressKind","isSuiChain","tokenAddress","getSuiTokenAddress","isSolanaChain","solanaToken","getSolanaTokenAddress","isStarknetChainId","getStarknetTokenAddress","addresses","a","isForToken","mostRecentAddress","mostRecent","cur","getDepositBtcAddresses","parameters","fetchAllPaginated","endpoint","extractItems","query","pageSize","maxRecords","allItems","hasMore","key","value","items","DECIMALS","BTC_DECIMALS","ENotarizationStatus","ESessionState","fetchDirectDeposits","d","mapDirectBtcDeposit","fetchBTCbDeposits","mapBTCbDeposits","accountAddress","fromSatoshi","fromBaseDenomination","getChainIdByName","getTokenByAddress","getDepositsByAddress","results","directDeposits","nativeDeposits","result","idx","b","aTime","CURRENT_SEASON","parse","input","defaultValue","BigNumber","toProtocolBreakdown","map","acc","getLombardPointsUrl","season","DEFAULT_ENV","fetchPointsSeason1","referralPoints","fetchPointsSeason2","getPointsByAddress","getLuxSeason1Points","getLuxSeason2Points","PayoutTxStatus","fetchUnstakesByAddress","options","mapUnstakeEntry","isNative","toAddress","bitcoin","trim","payoutTxStatus","toToken","toChainId","toTokenAddress","_c","_b","TOKEN_ADDRESSES","getUnstakesByAddress","EMPTY_SIGNATURE","storeStakeAndBakeSignature","signature","typedData","error","errorMsg","getErrorMessage","getDepositAddressReferrer","ReferralsClient","sdk"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blockchain-identifier-BLPnwbIN.js","sources":["../../src/common/blockchain-identifier.ts"],"sourcesContent":["import { DEFAULT_ENV, Env } from '@lombard.finance/sdk-common';\n\nimport {\n ChainId,\n SOLANA_DEVNET_CHAIN,\n SOLANA_MAINNET_CHAIN,\n SOLANA_TESTNET_CHAIN,\n SolanaChain,\n STARKNET_MAINNET_CHAIN,\n STARKNET_SEPOLIA_CHAIN,\n StarknetChainId,\n SUI_MAINNET_CHAIN,\n SUI_TESTNET_CHAIN,\n SuiChain,\n} from './chains';\nimport { featureConfig } from './feature-config';\n\nexport const BlockchainIdentifier = {\n eth: 'DESTINATION_BLOCKCHAIN_ETHEREUM',\n ethOld: 'BLOCKCHAIN_ETHEREUM',\n\n avalanche: 'DESTINATION_BLOCKCHAIN_AVALANCHE',\n avalancheOld: 'BLOCKCHAIN_AVALANCHE',\n\n base: 'DESTINATION_BLOCKCHAIN_BASE',\n baseOld: 'BLOCKCHAIN_BASE',\n\n bsc: 'DESTINATION_BLOCKCHAIN_BSC',\n bscOld: 'BLOCKCHAIN_BSC',\n\n katana: 'DESTINATION_BLOCKCHAIN_KATANA',\n katanaOld: 'BLOCKCHAIN_KATANA',\n\n sui: 'DESTINATION_BLOCKCHAIN_SUI',\n suiOld: 'BLOCKCHAIN_SUI',\n\n sonic: 'DESTINATION_BLOCKCHAIN_SONIC',\n sonicOld: 'BLOCKCHAIN_SONIC',\n\n solana: 'DESTINATION_BLOCKCHAIN_SOLANA',\n solanaOld: 'BLOCKCHAIN_SOLANA',\n\n starknet: 'DESTINATION_BLOCKCHAIN_STARKNET',\n starknetOld: 'BLOCKCHAIN_STARKNET',\n\n monad: 'DESTINATION_BLOCKCHAIN_MONAD',\n monadOld: 'BLOCKCHAIN_MONAD',\n\n stable: 'DESTINATION_BLOCKCHAIN_STABLE',\n stableOld: 'BLOCKCHAIN_STABLE',\n\n megaeth: 'DESTINATION_BLOCKCHAIN_MEGAETH',\n megaethOld: 'BLOCKCHAIN_MEGAETH',\n\n bitcoin: 'DESTINATION_BLOCKCHAIN_BITCOIN',\n bitcoinOld: 'BLOCKCHAIN_BITCOIN',\n} as const;\n\nexport type BlockchainIdentifier =\n (typeof BlockchainIdentifier)[keyof typeof BlockchainIdentifier];\n\nexport function getChainNameById(\n chainId: ChainId | SuiChain | SolanaChain | StarknetChainId,\n): BlockchainIdentifier {\n if (\n chainId === ChainId.ethereum ||\n chainId === ChainId.holesky ||\n chainId === ChainId.sepolia\n ) {\n return BlockchainIdentifier.eth;\n }\n\n if (\n (featureConfig.isAvalancheMainnetEnabled && chainId === ChainId.avalanche) ||\n (featureConfig.isAvalancheFujiEnabled && chainId === ChainId.avalancheFuji)\n ) {\n return BlockchainIdentifier.avalanche;\n }\n\n if (chainId === ChainId.base || chainId === ChainId.baseSepoliaTestnet) {\n return BlockchainIdentifier.base;\n }\n\n if (\n chainId === ChainId.binanceSmartChain ||\n chainId === ChainId.binanceSmartChainTestnet\n ) {\n return BlockchainIdentifier.bsc;\n }\n\n if (chainId === ChainId.katana) {\n return BlockchainIdentifier.katana;\n }\n\n if (chainId === ChainId.sonic || chainId === ChainId.sonicBlazeTestnet) {\n return BlockchainIdentifier.sonic;\n }\n\n if (featureConfig.isMonadEnabled && chainId === ChainId.monad) {\n return BlockchainIdentifier.monad;\n }\n\n if (chainId === ChainId.megaeth) {\n return BlockchainIdentifier.megaeth;\n }\n\n if (chainId === ChainId.stable) {\n return BlockchainIdentifier.stable;\n }\n\n if (chainId === SUI_TESTNET_CHAIN || chainId === SUI_MAINNET_CHAIN) {\n return BlockchainIdentifier.sui;\n }\n\n if (\n chainId === SOLANA_DEVNET_CHAIN ||\n chainId === SOLANA_TESTNET_CHAIN ||\n chainId === SOLANA_MAINNET_CHAIN\n ) {\n return BlockchainIdentifier.solana;\n }\n\n if (\n chainId === STARKNET_MAINNET_CHAIN ||\n chainId === STARKNET_SEPOLIA_CHAIN\n ) {\n return BlockchainIdentifier.starknet;\n }\n\n throw new Error(`Unknown chain ID: ${chainId}`);\n}\n\nexport const getEthNetworkByEnv = (env: Env) =>\n env === Env.prod ? ChainId.ethereum : ChainId.sepolia;\n\nexport const getBscNetworkByEnv = (env: Env) =>\n env === Env.prod\n ? ChainId.binanceSmartChain\n : ChainId.binanceSmartChainTestnet;\n\nexport const getBaseNetworkByEnv = (env: Env) =>\n env === Env.prod ? ChainId.base : ChainId.baseSepoliaTestnet;\n\nexport const getSuiNetworkByEnv = (env: Env) =>\n env === Env.prod ? SUI_MAINNET_CHAIN : SUI_TESTNET_CHAIN;\n\nexport const getSonicNetworkByEnv = (env: Env) =>\n env === Env.prod ? ChainId.sonic : ChainId.sonicBlazeTestnet;\n\nexport const getSolanaNetworkByEnv = (env: Env) =>\n env === Env.prod ? SOLANA_MAINNET_CHAIN : SOLANA_DEVNET_CHAIN;\n\nexport const getStarknetNetworkByEnv = (env: Env) =>\n env === Env.prod ? STARKNET_MAINNET_CHAIN : STARKNET_SEPOLIA_CHAIN;\n\n/**\n * @param chain the chain ID\n * @param env\n * @returns the chain name\n */\nexport function getChainIdByName(\n chain: string,\n env: Env = DEFAULT_ENV,\n): ChainId | SuiChain | SolanaChain | StarknetChainId {\n switch (chain as BlockchainIdentifier) {\n case BlockchainIdentifier.eth:\n case BlockchainIdentifier.ethOld:\n return getEthNetworkByEnv(env);\n\n case BlockchainIdentifier.avalanche:\n case BlockchainIdentifier.avalancheOld:\n return env === Env.prod ? ChainId.avalanche : ChainId.avalancheFuji;\n\n case BlockchainIdentifier.base:\n case BlockchainIdentifier.baseOld:\n return getBaseNetworkByEnv(env);\n\n case BlockchainIdentifier.bsc:\n case BlockchainIdentifier.bscOld:\n return getBscNetworkByEnv(env);\n\n case BlockchainIdentifier.katana:\n case BlockchainIdentifier.katanaOld:\n return ChainId.katana;\n\n case BlockchainIdentifier.sui:\n case BlockchainIdentifier.suiOld:\n return getSuiNetworkByEnv(env);\n\n case BlockchainIdentifier.sonic:\n case BlockchainIdentifier.sonicOld:\n return getSonicNetworkByEnv(env);\n\n case BlockchainIdentifier.solana:\n case BlockchainIdentifier.solanaOld:\n return getSolanaNetworkByEnv(env);\n\n case BlockchainIdentifier.starknet:\n case BlockchainIdentifier.starknetOld:\n return getStarknetNetworkByEnv(env);\n\n case BlockchainIdentifier.monad:\n case BlockchainIdentifier.monadOld:\n return ChainId.monad;\n\n case BlockchainIdentifier.stable:\n case BlockchainIdentifier.stableOld:\n return ChainId.stable;\n\n case BlockchainIdentifier.megaeth:\n case BlockchainIdentifier.megaethOld:\n return ChainId.megaeth;\n\n default:\n return ChainId.ethereum;\n }\n}\n"],"names":["BlockchainIdentifier","getChainNameById","chainId","ChainId","SUI_TESTNET_CHAIN","SUI_MAINNET_CHAIN","SOLANA_DEVNET_CHAIN","SOLANA_TESTNET_CHAIN","SOLANA_MAINNET_CHAIN","STARKNET_MAINNET_CHAIN","STARKNET_SEPOLIA_CHAIN","getEthNetworkByEnv","env","Env","getBscNetworkByEnv","getBaseNetworkByEnv","getSuiNetworkByEnv","getSonicNetworkByEnv","getSolanaNetworkByEnv","getStarknetNetworkByEnv","getChainIdByName","chain","DEFAULT_ENV"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blockchain-identifier-Bp-LTIdG.cjs","sources":["../../src/common/blockchain-identifier.ts"],"sourcesContent":["import { DEFAULT_ENV, Env } from '@lombard.finance/sdk-common';\n\nimport {\n ChainId,\n SOLANA_DEVNET_CHAIN,\n SOLANA_MAINNET_CHAIN,\n SOLANA_TESTNET_CHAIN,\n SolanaChain,\n STARKNET_MAINNET_CHAIN,\n STARKNET_SEPOLIA_CHAIN,\n StarknetChainId,\n SUI_MAINNET_CHAIN,\n SUI_TESTNET_CHAIN,\n SuiChain,\n} from './chains';\nimport { featureConfig } from './feature-config';\n\nexport const BlockchainIdentifier = {\n eth: 'DESTINATION_BLOCKCHAIN_ETHEREUM',\n ethOld: 'BLOCKCHAIN_ETHEREUM',\n\n avalanche: 'DESTINATION_BLOCKCHAIN_AVALANCHE',\n avalancheOld: 'BLOCKCHAIN_AVALANCHE',\n\n base: 'DESTINATION_BLOCKCHAIN_BASE',\n baseOld: 'BLOCKCHAIN_BASE',\n\n bsc: 'DESTINATION_BLOCKCHAIN_BSC',\n bscOld: 'BLOCKCHAIN_BSC',\n\n katana: 'DESTINATION_BLOCKCHAIN_KATANA',\n katanaOld: 'BLOCKCHAIN_KATANA',\n\n sui: 'DESTINATION_BLOCKCHAIN_SUI',\n suiOld: 'BLOCKCHAIN_SUI',\n\n sonic: 'DESTINATION_BLOCKCHAIN_SONIC',\n sonicOld: 'BLOCKCHAIN_SONIC',\n\n solana: 'DESTINATION_BLOCKCHAIN_SOLANA',\n solanaOld: 'BLOCKCHAIN_SOLANA',\n\n starknet: 'DESTINATION_BLOCKCHAIN_STARKNET',\n starknetOld: 'BLOCKCHAIN_STARKNET',\n\n monad: 'DESTINATION_BLOCKCHAIN_MONAD',\n monadOld: 'BLOCKCHAIN_MONAD',\n\n stable: 'DESTINATION_BLOCKCHAIN_STABLE',\n stableOld: 'BLOCKCHAIN_STABLE',\n\n megaeth: 'DESTINATION_BLOCKCHAIN_MEGAETH',\n megaethOld: 'BLOCKCHAIN_MEGAETH',\n\n bitcoin: 'DESTINATION_BLOCKCHAIN_BITCOIN',\n bitcoinOld: 'BLOCKCHAIN_BITCOIN',\n} as const;\n\nexport type BlockchainIdentifier =\n (typeof BlockchainIdentifier)[keyof typeof BlockchainIdentifier];\n\nexport function getChainNameById(\n chainId: ChainId | SuiChain | SolanaChain | StarknetChainId,\n): BlockchainIdentifier {\n if (\n chainId === ChainId.ethereum ||\n chainId === ChainId.holesky ||\n chainId === ChainId.sepolia\n ) {\n return BlockchainIdentifier.eth;\n }\n\n if (\n (featureConfig.isAvalancheMainnetEnabled && chainId === ChainId.avalanche) ||\n (featureConfig.isAvalancheFujiEnabled && chainId === ChainId.avalancheFuji)\n ) {\n return BlockchainIdentifier.avalanche;\n }\n\n if (chainId === ChainId.base || chainId === ChainId.baseSepoliaTestnet) {\n return BlockchainIdentifier.base;\n }\n\n if (\n chainId === ChainId.binanceSmartChain ||\n chainId === ChainId.binanceSmartChainTestnet\n ) {\n return BlockchainIdentifier.bsc;\n }\n\n if (chainId === ChainId.katana) {\n return BlockchainIdentifier.katana;\n }\n\n if (chainId === ChainId.sonic || chainId === ChainId.sonicBlazeTestnet) {\n return BlockchainIdentifier.sonic;\n }\n\n if (featureConfig.isMonadEnabled && chainId === ChainId.monad) {\n return BlockchainIdentifier.monad;\n }\n\n if (chainId === ChainId.megaeth) {\n return BlockchainIdentifier.megaeth;\n }\n\n if (chainId === ChainId.stable) {\n return BlockchainIdentifier.stable;\n }\n\n if (chainId === SUI_TESTNET_CHAIN || chainId === SUI_MAINNET_CHAIN) {\n return BlockchainIdentifier.sui;\n }\n\n if (\n chainId === SOLANA_DEVNET_CHAIN ||\n chainId === SOLANA_TESTNET_CHAIN ||\n chainId === SOLANA_MAINNET_CHAIN\n ) {\n return BlockchainIdentifier.solana;\n }\n\n if (\n chainId === STARKNET_MAINNET_CHAIN ||\n chainId === STARKNET_SEPOLIA_CHAIN\n ) {\n return BlockchainIdentifier.starknet;\n }\n\n throw new Error(`Unknown chain ID: ${chainId}`);\n}\n\nexport const getEthNetworkByEnv = (env: Env) =>\n env === Env.prod ? ChainId.ethereum : ChainId.sepolia;\n\nexport const getBscNetworkByEnv = (env: Env) =>\n env === Env.prod\n ? ChainId.binanceSmartChain\n : ChainId.binanceSmartChainTestnet;\n\nexport const getBaseNetworkByEnv = (env: Env) =>\n env === Env.prod ? ChainId.base : ChainId.baseSepoliaTestnet;\n\nexport const getSuiNetworkByEnv = (env: Env) =>\n env === Env.prod ? SUI_MAINNET_CHAIN : SUI_TESTNET_CHAIN;\n\nexport const getSonicNetworkByEnv = (env: Env) =>\n env === Env.prod ? ChainId.sonic : ChainId.sonicBlazeTestnet;\n\nexport const getSolanaNetworkByEnv = (env: Env) =>\n env === Env.prod ? SOLANA_MAINNET_CHAIN : SOLANA_DEVNET_CHAIN;\n\nexport const getStarknetNetworkByEnv = (env: Env) =>\n env === Env.prod ? STARKNET_MAINNET_CHAIN : STARKNET_SEPOLIA_CHAIN;\n\n/**\n * @param chain the chain ID\n * @param env\n * @returns the chain name\n */\nexport function getChainIdByName(\n chain: string,\n env: Env = DEFAULT_ENV,\n): ChainId | SuiChain | SolanaChain | StarknetChainId {\n switch (chain as BlockchainIdentifier) {\n case BlockchainIdentifier.eth:\n case BlockchainIdentifier.ethOld:\n return getEthNetworkByEnv(env);\n\n case BlockchainIdentifier.avalanche:\n case BlockchainIdentifier.avalancheOld:\n return env === Env.prod ? ChainId.avalanche : ChainId.avalancheFuji;\n\n case BlockchainIdentifier.base:\n case BlockchainIdentifier.baseOld:\n return getBaseNetworkByEnv(env);\n\n case BlockchainIdentifier.bsc:\n case BlockchainIdentifier.bscOld:\n return getBscNetworkByEnv(env);\n\n case BlockchainIdentifier.katana:\n case BlockchainIdentifier.katanaOld:\n return ChainId.katana;\n\n case BlockchainIdentifier.sui:\n case BlockchainIdentifier.suiOld:\n return getSuiNetworkByEnv(env);\n\n case BlockchainIdentifier.sonic:\n case BlockchainIdentifier.sonicOld:\n return getSonicNetworkByEnv(env);\n\n case BlockchainIdentifier.solana:\n case BlockchainIdentifier.solanaOld:\n return getSolanaNetworkByEnv(env);\n\n case BlockchainIdentifier.starknet:\n case BlockchainIdentifier.starknetOld:\n return getStarknetNetworkByEnv(env);\n\n case BlockchainIdentifier.monad:\n case BlockchainIdentifier.monadOld:\n return ChainId.monad;\n\n case BlockchainIdentifier.stable:\n case BlockchainIdentifier.stableOld:\n return ChainId.stable;\n\n case BlockchainIdentifier.megaeth:\n case BlockchainIdentifier.megaethOld:\n return ChainId.megaeth;\n\n default:\n return ChainId.ethereum;\n }\n}\n"],"names":["BlockchainIdentifier","getChainNameById","chainId","ChainId","SUI_TESTNET_CHAIN","SUI_MAINNET_CHAIN","SOLANA_DEVNET_CHAIN","SOLANA_TESTNET_CHAIN","SOLANA_MAINNET_CHAIN","STARKNET_MAINNET_CHAIN","STARKNET_SEPOLIA_CHAIN","getEthNetworkByEnv","env","Env","getBscNetworkByEnv","getBaseNetworkByEnv","getSuiNetworkByEnv","getSonicNetworkByEnv","getSolanaNetworkByEnv","getStarknetNetworkByEnv","getChainIdByName","chain","DEFAULT_ENV"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-7Eq_Jmi2.cjs","sources":["../../src/bridge/lib/ccip-config.ts","../../src/bridge/lib/config.ts","../../src/bridge/lib/ccip-bridge.ts","../../src/bridge/lib/oft-bridge.ts","../../src/bridge/lib/bridge.ts"],"sourcesContent":["import { Address } from 'viem';\n\nimport { ChainId } from '../../common/chains';\n\nexport type CCIPChainConfig = {\n routerAddress: Address;\n chainSelector: string;\n};\n\ntype CCIPConfig = Record<number, CCIPChainConfig>;\n\nexport const CCIP_CONFIG: CCIPConfig = {\n [ChainId.ethereum]: {\n routerAddress: '0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D',\n chainSelector: '5009297550715157269',\n },\n [ChainId.base]: {\n routerAddress: '0x881e3A65B4d4a04dD529061dd0071cf975F58bCD',\n chainSelector: '15971525489660198786',\n },\n [ChainId.binanceSmartChain]: {\n routerAddress: '0x34B03Cb9086d7D758AC55af71584F81A598759FE',\n chainSelector: '11344663589394136015',\n },\n [ChainId.sonic]: {\n routerAddress: '0xB4e1Ff7882474BB93042be9AD5E1fA387949B860',\n chainSelector: '1673871237479749969',\n },\n [ChainId.katana]: {\n routerAddress: '0x7c19b79D2a054114Ab36ad758A36e92376e267DA',\n chainSelector: '2459028469735686113',\n },\n [ChainId.megaeth]: {\n routerAddress: '0xfa546248C54939AA6C48279CdC1EAf9A1125c411',\n chainSelector: '6093540873831549674',\n },\n [ChainId.avalanche]: {\n routerAddress: '0xF4c7E640EdA248ef95972845a62bdC74237805dB',\n chainSelector: '6433500567565415381',\n },\n [ChainId.monad]: {\n routerAddress: '0x33566fE5976AAa420F3d5C64996641Fc3858CaDB',\n chainSelector: '8481857512324358265',\n },\n [ChainId.stable]: {\n routerAddress: '0xECFF67559c0583027A5fbd85136E33bC4D66eeA0',\n chainSelector: '16978377838628290997',\n },\n // Testnets\n [ChainId.holesky]: {\n routerAddress: '0xb9531b46fE8808fB3659e39704953c2B1112DD43',\n chainSelector: '7717148896336251131',\n },\n [ChainId.baseSepoliaTestnet]: {\n routerAddress: '0xD3b06cEbF099CE7DA4AcCf578aaebFDBd6e88a93',\n chainSelector: '10344971235874465080',\n },\n [ChainId.binanceSmartChainTestnet]: {\n routerAddress: '0xE1053aE1857476f36A3C62580FF9b016E8EE8F6f',\n chainSelector: '13264668187771770619',\n },\n [ChainId.avalancheFuji]: {\n routerAddress: '0xF694E193200268f9a4868e4Aa017A0118C9a8177',\n chainSelector: '14767482510784806043',\n },\n};\n\nexport function getCCIPConfig(chainId: ChainId): CCIPChainConfig | undefined {\n return CCIP_CONFIG[chainId];\n}\n","import BigNumber from 'bignumber.js';\nimport { Abi, Address } from 'viem';\n\nimport { ChainId } from '../../common/chains';\nimport { ContractInfo } from '../../common/contract-info';\nimport { featureConfig } from '../../common/feature-config';\nimport { unique } from '../../utils/array';\nimport CCIP_BRIDGE_ADAPTER_ABI from '../abi/CCIP_BRIDGE_ADAPTER_ABI.json';\nimport OFT_BRIDGE_ADAPTER_ABI from '../abi/OFT_BRIDGE_ADAPTER_ABI.json';\n\nexport const MIN_BRIDGE_AMOUNT = BigNumber(0.000001);\n\nexport enum BridgeType {\n /** CCIP - (Chainlink) Cross-Chain Interoperability Protocol */\n CCIP = 'CCIP',\n\n /** OFT - (LayerZero) Omnichain Fungible Token */\n OFT = 'OFT',\n}\n\nexport const BRIDGE_EXPLORER_URL_MAP = {\n [BridgeType.CCIP]: 'https://ccip.chain.link/tx/{txHash}',\n [BridgeType.OFT]: 'https://layerzeroscan.com/tx/{txHash}',\n};\n\nexport const CCIP_BRIDGE_CHAINS = [\n // Mainnets:\n ChainId.ethereum,\n ChainId.base,\n ChainId.binanceSmartChain,\n ChainId.katana,\n ChainId.sonic,\n ...(featureConfig.isAvalancheMainnetEnabled ? [ChainId.avalanche] : []),\n ...(featureConfig.isMonadEnabled ? [ChainId.monad] : []),\n ChainId.stable,\n // Testnets:\n ...(featureConfig.isAvalancheFujiEnabled ? [ChainId.avalancheFuji] : []),\n ChainId.baseSepoliaTestnet,\n ChainId.holesky,\n ChainId.sepolia,\n];\nexport type CCIPBridgeChain = (typeof CCIP_BRIDGE_CHAINS)[number];\n\nexport const OFT_BRIDGE_CHAINS = [\n // Mainnets:\n ChainId.ethereum,\n ChainId.berachain,\n ChainId.corn,\n ChainId.etherlink,\n ChainId.swell,\n ChainId.tac,\n // Testnets:\n ChainId.berachainBartioTestnet,\n ChainId.sepolia,\n];\n\nexport const BRIDGE_CHAINS = unique([\n ...CCIP_BRIDGE_CHAINS,\n ...OFT_BRIDGE_CHAINS,\n]);\nexport type BridgeChain = CCIPBridgeChain | OFTBridgeChain;\n\nexport const OFT_GAS_LIMIT = 90_000;\nexport const OFT_HI_GAS_LIMIT = 200_000;\nexport const OFT_HI_GAS_LIMIT_CHAINS = [\n // Mainnets:\n ChainId.berachain,\n ChainId.etherlink,\n ChainId.morph,\n ChainId.sonic,\n ChainId.corn,\n ChainId.tac,\n // Testnets:\n ChainId.berachainBartioTestnet,\n ChainId.morphHolesky,\n];\n\nexport type OFTBridgeChain = (typeof OFT_BRIDGE_CHAINS)[number];\n\ntype BridgeIdentifier<Ch extends CCIPBridgeChain | OFTBridgeChain> =\n `[from:${Ch}, to: ${Ch}]`;\n\nconst bridgeIdentifier = <Ch extends CCIPBridgeChain | OFTBridgeChain>([\n from,\n to,\n]: [from: Ch, to: Ch]): BridgeIdentifier<Ch> => `[from:${from}, to: ${to}]`;\n\ntype BridgeInfo = { type: BridgeType; contract: ContractInfo };\n\ntype CCIPBridgesConfig = [\n BridgeIdentifier<CCIPBridgeChain>,\n { type: BridgeType.CCIP; contract: ContractInfo },\n];\n\nconst CCIP_FROM_ETH = {\n routes: [\n bridgeIdentifier([ChainId.ethereum, ChainId.base]),\n bridgeIdentifier([ChainId.ethereum, ChainId.binanceSmartChain]),\n bridgeIdentifier([ChainId.ethereum, ChainId.sonic]),\n bridgeIdentifier([ChainId.ethereum, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n};\n\nconst CCIP_FROM_BASE = {\n routes: [\n bridgeIdentifier([ChainId.base, ChainId.ethereum]),\n bridgeIdentifier([ChainId.base, ChainId.binanceSmartChain]),\n bridgeIdentifier([ChainId.base, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.base,\n },\n};\n\nconst CCIP_FROM_BSC = {\n routes: [\n bridgeIdentifier([ChainId.binanceSmartChain, ChainId.ethereum]),\n bridgeIdentifier([ChainId.binanceSmartChain, ChainId.base]),\n bridgeIdentifier([ChainId.binanceSmartChain, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.binanceSmartChain,\n },\n};\n\nconst CCIP_FROM_KATANA = {\n routes: [\n bridgeIdentifier([ChainId.katana, ChainId.ethereum]),\n bridgeIdentifier([ChainId.katana, ChainId.base]),\n bridgeIdentifier([ChainId.katana, ChainId.binanceSmartChain]),\n bridgeIdentifier([ChainId.katana, ChainId.sonic]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xA869817b48b25EeE986bdF4bE04062e6fd2C418B' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.katana,\n },\n};\n\nconst CCIP_FROM_SONIC = {\n routes: [\n bridgeIdentifier([ChainId.sonic, ChainId.ethereum]),\n bridgeIdentifier([ChainId.sonic, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.sonic,\n },\n};\n\nconst CCIP_FROM_BASE_SEPOLIA = {\n routes: [bridgeIdentifier([ChainId.baseSepoliaTestnet, ChainId.holesky])],\n type: BridgeType.CCIP,\n contract: {\n address: '0x38247C4c846D549CAAd2C6c0b6fec0c402b77a0F' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.baseSepoliaTestnet,\n },\n};\n\nconst CCIP_FROM_HOLESKY = {\n routes: [bridgeIdentifier([ChainId.holesky, ChainId.baseSepoliaTestnet])],\n type: BridgeType.CCIP,\n contract: {\n address: '0x38247C4c846D549CAAd2C6c0b6fec0c402b77a0F' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.holesky,\n },\n};\n\nconst CCIP_BRIDGES: CCIPBridgesConfig[] = [\n // Mainnets:\n CCIP_FROM_ETH,\n CCIP_FROM_BASE,\n CCIP_FROM_BSC,\n CCIP_FROM_KATANA,\n CCIP_FROM_SONIC,\n // Testnets:\n CCIP_FROM_BASE_SEPOLIA,\n CCIP_FROM_HOLESKY,\n].reduce((acc, cur) => {\n if (cur.type !== BridgeType.CCIP) return acc;\n\n const c: CCIPBridgesConfig[] = cur.routes.map(route => [\n route,\n { type: BridgeType.CCIP, contract: cur.contract },\n ]);\n\n return acc.concat(c);\n}, [] as CCIPBridgesConfig[]);\n\ntype OFTBridgeConfig = [\n BridgeIdentifier<OFTBridgeChain>,\n { type: BridgeType.OFT; contract: ContractInfo },\n];\nconst OFT_BRIDGES: OFTBridgeConfig[] = [\n // Mainnets:\n\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.berachain]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x1290A6b480f7eF14925229fdB66f5680aD8F44AD',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.corn]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x6bc15d7930839ec18a57f6f7df72ae1b439d077f',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.etherlink]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x3a7647c1323144a16e7D0D71A581E3FE5BD95299',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.swell]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x37E92d760a15231e652a2C502182a6b44c7510c0',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.tac]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xA7c4d94F98b6e94C139c4645e4E9a94CD7C0Abf7',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.berachain, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x630e12D53D4E041b8C5451aD035Ea841E08391d7',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.berachain,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.corn, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xfc7B20D9B59A8A466f4fC3d34aA69a7D98e71d7A',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.corn,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.etherlink, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xC832183d4d5fc5831daaC892a93dBBfd798034E3',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.etherlink,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.swell, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x7B3784AD646C10A8Ddf42b47a4f4bd9aFD351E54',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.swell,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.tac, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x1298131cDa718bBcA7ACB1f2411e71c05E16f269',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.tac,\n },\n },\n ],\n\n // Testnets:\n\n [\n bridgeIdentifier([ChainId.berachainBartioTestnet, ChainId.sepolia]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x1977013acaf27856ac8048C42EE2ed0134d53895',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.berachainBartioTestnet,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.sepolia, ChainId.berachainBartioTestnet]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xe3748bF0Ec0A76767539eE28610B3367e35fe2C2',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.sepolia,\n },\n },\n ],\n];\n\nexport const BRIDGES = new Map<BridgeIdentifier<BridgeChain>, BridgeInfo>([\n ...CCIP_BRIDGES,\n ...OFT_BRIDGES,\n]);\n\n/** Gets the bridge information */\nexport const getBridgeInfo = (from: BridgeChain, to: BridgeChain) => {\n return BRIDGES.get(bridgeIdentifier([from, to]));\n};\n","import BigNumber from 'bignumber.js';\nimport {\n Address,\n encodeAbiParameters,\n encodePacked,\n parseAbiParameters,\n} from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { approveLBTC } from '../../contract-functions';\nimport { Token } from '../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../tokens/tokens';\nimport { getErrorMessage } from '../../utils/err';\nimport toBigInt from '../../utils/numbers';\nimport CCIP_ROUTER_ABI from '../abi/CCIP_ROUTER_ABI.json';\nimport { getCCIPConfig } from './ccip-config';\nimport {\n BridgeType,\n CCIP_BRIDGE_CHAINS,\n CCIPBridgeChain,\n getBridgeInfo,\n MIN_BRIDGE_AMOUNT,\n} from './config';\n\nexport type BridgeCCIPParameters = {\n /** The destination chain id. */\n to: CCIPBridgeChain;\n /** The LBTC amount. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The destination address. If omitted the same as the account address. */\n recipient?: Address;\n} & CommonWriteParameters;\n\n/**\n * Encodes extraArgs for CCIP according to version 1\n * Format: EVMExtraArgsV1 { gasLimit: uint256 }\n *\n * @see https://github.com/smartcontractkit/smart-contract-examples/blob/main/ccip/offchain/javascript/src/transfer-tokens.js\n */\nfunction encodeExtraArgs(gasLimit: bigint): `0x${string}` {\n // Tag for EVMExtraArgsV1\n const tag = '0x97a657c9';\n\n // Encode gasLimit as uint256\n const encodedGasLimit = encodePacked(['uint256'], [gasLimit]);\n\n return `${tag}${encodedGasLimit.slice(2)}` as `0x${string}`;\n}\n\n/**\n * Transfers tokens via CCIP using direct Router contract calls\n * Based on Chainlink example:\n * @see https://github.com/smartcontractkit/smart-contract-examples/blob/main/ccip/offchain/javascript/src/transfer-tokens.js\n */\nexport async function bridgeCCIP({\n to,\n amount: amountRaw,\n approve,\n recipient: optionalRecipient,\n account,\n chainId: from,\n provider,\n env,\n rpcUrl,\n}: BridgeCCIPParameters) {\n const amount = BigNumber(amountRaw);\n const recipient = optionalRecipient || account;\n\n const bridgeInfo = getBridgeInfo(from as CCIPBridgeChain, to);\n if (!bridgeInfo || bridgeInfo.type !== BridgeType.CCIP) {\n throw new Error(\n `Unsupported bridge from ${from} to ${to}. Please switch to the supported chains: ${CCIP_BRIDGE_CHAINS.join(', ')}`,\n );\n }\n\n // Get CCIP Router configuration\n const sourceChainConfig = getCCIPConfig(from);\n const destinationChainConfig = getCCIPConfig(to);\n\n if (!sourceChainConfig || !destinationChainConfig) {\n throw new Error(`CCIP configuration not found for chains ${from} -> ${to}`);\n }\n\n const routerAddress = sourceChainConfig.routerAddress;\n\n const lbtcContract = await getTokenInfo(Token.LBTC, from, env, rpcUrl);\n if (!lbtcContract) {\n throw new Error('Could not retrieve LBTC contract info.');\n }\n\n const publicClient = makePublicClient({ chainId: from, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId: from });\n\n const amountBase = toBigInt(\n toBaseDenomination(amount, lbtcContract.decimals),\n );\n\n if (amount.isLessThan(MIN_BRIDGE_AMOUNT)) {\n throw new Error(\n `The amount is smaller than the minimum amount allowed: ${MIN_BRIDGE_AMOUNT.toFixed()}`,\n );\n }\n\n const balanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The amount exceeds the account's balance. \\nAmount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n const allowanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'allowance',\n args: [account, routerAddress],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The amount exceeds allowance. \\nAmount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount for Router\n console.info(exceededMessage);\n try {\n const txHash = await approveLBTC({\n account,\n spender: routerAddress,\n amount,\n chainId: from,\n provider,\n rpcUrl,\n env,\n });\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${routerAddress}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${routerAddress}. \\nReason: ${msg}`,\n );\n }\n }\n\n // Build CCIP message (EVM2AnyMessage)\n // IMPORTANT: receiver must be abi.encode(address) for EVM chains, not encodePacked\n const receiverBytes = encodeAbiParameters(parseAbiParameters('address'), [\n recipient,\n ]);\n const extraArgs = encodeExtraArgs(0n);\n\n const message = {\n receiver: receiverBytes,\n data: '0x' as `0x${string}`,\n tokenAmounts: [\n {\n token: lbtcContract.address,\n amount: amountBase,\n },\n ],\n feeToken: '0x0000000000000000000000000000000000000000' as Address, // address(0) means payment in native currency\n extraArgs, // 0 = automatic gas limit calculation\n };\n\n // Get fee for sending the message\n const fee = (await publicClient.readContract({\n address: routerAddress,\n abi: CCIP_ROUTER_ABI,\n functionName: 'getFee',\n args: [BigInt(destinationChainConfig.chainSelector), message],\n })) as bigint;\n\n // Send CCIP message\n const { request } = await publicClient.simulateContract({\n address: routerAddress,\n abi: CCIP_ROUTER_ABI,\n account,\n functionName: 'ccipSend',\n args: [BigInt(destinationChainConfig.chainSelector), message],\n value: fee,\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import { Options } from '@layerzerolabs/lz-v2-utilities';\nimport BigNumber from 'bignumber.js';\nimport { Address, pad } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { ChainId } from '../../common/chains';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { approveLBTC } from '../../contract-functions';\nimport { Token } from '../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../tokens/tokens';\nimport { getErrorMessage } from '../../utils/err';\nimport toBigInt from '../../utils/numbers';\nimport {\n BridgeType,\n getBridgeInfo,\n MIN_BRIDGE_AMOUNT,\n OFT_BRIDGE_CHAINS,\n OFT_GAS_LIMIT,\n OFT_HI_GAS_LIMIT,\n OFT_HI_GAS_LIMIT_CHAINS,\n OFTBridgeChain,\n} from './config';\n\nconst DESTINATION_ENDPOINT_ID_MAP: Record<OFTBridgeChain, number> = {\n // Mainnets:\n [ChainId.ethereum]: 30101,\n [ChainId.berachain]: 30362,\n [ChainId.corn]: 30331,\n [ChainId.etherlink]: 30292,\n [ChainId.swell]: 30335,\n [ChainId.tac]: 30377,\n // Testnets:\n [ChainId.sepolia]: 40161,\n [ChainId.berachainBartioTestnet]: 40291,\n};\n\nexport type BridgeOFTParameters = {\n /** The destination chain id. */\n to: OFTBridgeChain;\n /** The LBTC amount. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The destination address. If omitted the same as the account address. */\n recipient?: Address;\n} & CommonWriteParameters;\nexport async function bridgeOFT({\n to,\n amount: amountRaw,\n approve,\n recipient: optionalRecipient,\n account,\n chainId: from,\n provider,\n env,\n rpcUrl,\n}: BridgeOFTParameters) {\n console.warn(\n 'The \"bridgeOFT\" function is provided as is and it is not the recommended way of bridging tokens between chains. Please, use \"bridgeCCIP\" or the generic \"bridge\" function.',\n );\n\n const amount = BigNumber(amountRaw);\n const recipient = optionalRecipient || account;\n\n const bridgeInfo = getBridgeInfo(from as OFTBridgeChain, to);\n if (!bridgeInfo || bridgeInfo.type !== BridgeType.OFT) {\n throw new Error(\n `Unsupported bridge from ${from} to ${to}. Please switch to the supported chains: ${OFT_BRIDGE_CHAINS.join(', ')}`,\n );\n }\n\n const bridgeContract = bridgeInfo.contract;\n\n const lbtcContract = await getTokenInfo(Token.LBTC, from, env, rpcUrl);\n if (!lbtcContract) {\n throw new Error('Could not retrieve LBTC contract info.');\n }\n\n const publicClient = makePublicClient({ chainId: from, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId: from });\n\n const amountBase = toBigInt(\n toBaseDenomination(amount, lbtcContract.decimals),\n );\n\n if (amount.isLessThan(MIN_BRIDGE_AMOUNT)) {\n throw new Error(\n `The amount is smaller than the minimum amount allowed: ${MIN_BRIDGE_AMOUNT.toFixed()}`,\n );\n }\n\n const balanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The amount exceeds the account's balance. \\nAmount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n const allowanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'allowance',\n args: [account, bridgeContract.address],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The amount exceeds allowance. \\nAmount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n console.info(exceededMessage);\n try {\n const txHash = await approveLBTC({\n account,\n spender: bridgeContract.address,\n amount,\n chainId: from,\n provider,\n rpcUrl,\n env,\n });\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${bridgeContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${bridgeContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n const extraOptions = Options.newOptions().addExecutorLzReceiveOption(\n (OFT_HI_GAS_LIMIT_CHAINS as number[]).includes(to)\n ? OFT_HI_GAS_LIMIT\n : OFT_GAS_LIMIT,\n 0,\n );\n\n /** _sendParam */\n const sendParam = [\n /** dstEid - uint32 */\n DESTINATION_ENDPOINT_ID_MAP[to],\n /** to - bytes32 */\n pad(recipient),\n /** amountLD - uint256 */\n amountBase,\n /** minAmountLD - uint256 */\n amountBase,\n /** extraOptions - bytes */\n extraOptions.toHex(),\n /** composeMsg - bytes */\n '0x',\n /** oftCmd - bytes */\n '0x',\n ];\n\n const { nativeFee, lzTokenFee } = (await publicClient.readContract({\n abi: bridgeContract.abi,\n address: bridgeContract.address,\n account,\n functionName: 'quoteSend',\n args: [sendParam, false],\n })) as { nativeFee: bigint; lzTokenFee: bigint };\n\n const bridgeArgs = [\n /** _sendParam */\n sendParam,\n /** _fee */\n [\n /** nativeFee - uint256 */\n nativeFee,\n /** lzTokenFee - uint256 */\n lzTokenFee,\n ],\n /** address - address */\n account,\n ];\n\n const { request } = await publicClient.simulateContract({\n abi: bridgeContract.abi,\n address: bridgeContract.address,\n account,\n functionName: 'send',\n args: bridgeArgs,\n value: nativeFee,\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\nimport { Address } from 'viem';\n\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { bridgeCCIP } from './ccip-bridge';\nimport {\n BRIDGE_EXPLORER_URL_MAP,\n BridgeChain,\n BridgeType,\n CCIP_BRIDGE_CHAINS,\n CCIPBridgeChain,\n getBridgeInfo,\n OFTBridgeChain,\n} from './config';\nimport { bridgeOFT } from './oft-bridge';\n\nexport type BridgeParameters = {\n /** The destination chain id. */\n to: BridgeChain;\n /** The LBTC amount. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The destination address. If omitted the same as the account address. */\n recipient?: Address;\n} & CommonWriteParameters & {\n /**\n * A flag indicating whether the OFT bridge should be allowed.\n * Use at your onw risk!\n */\n experimentalAllowOFT?: boolean;\n };\n\n/**\n * Bridges funds (`amount`) from the connected chain (`chainId`) to the provided\n * destination chain (`to`)\n */\nexport async function bridge({\n to,\n amount,\n approve,\n account,\n chainId,\n provider,\n recipient,\n rpcUrl,\n env,\n experimentalAllowOFT = false,\n}: BridgeParameters) {\n const bridgeInfo = getBridgeInfo(chainId as BridgeChain, to);\n\n if (\n !bridgeInfo ||\n (!experimentalAllowOFT && bridgeInfo.type === BridgeType.OFT)\n ) {\n // The OFT bridges are disabled for now in this generic function as we're\n // working on moving all bridges to the CCIP method. OFT bridging shouldn't\n // be exposed.\n throw new Error(\n `Unsupported bridge from ${chainId} to ${to}. Please switch to the supported chains: ${CCIP_BRIDGE_CHAINS.join(', ')}`,\n );\n }\n\n switch (bridgeInfo.type) {\n case BridgeType.CCIP: {\n const txHash = await bridgeCCIP({\n to: to as CCIPBridgeChain,\n amount,\n approve,\n recipient,\n account,\n chainId,\n provider,\n env,\n rpcUrl,\n });\n\n return {\n txHash,\n explorerUrl: BRIDGE_EXPLORER_URL_MAP[BridgeType.CCIP].replace(\n '{txHash}',\n txHash,\n ),\n type: BridgeType.CCIP,\n };\n }\n\n case BridgeType.OFT: {\n const txHash = await bridgeOFT({\n to: to as OFTBridgeChain,\n amount,\n approve,\n recipient,\n account,\n chainId,\n provider,\n env,\n rpcUrl,\n });\n\n return {\n txHash,\n explorerUrl: BRIDGE_EXPLORER_URL_MAP[BridgeType.OFT].replace(\n '{txHash}',\n txHash,\n ),\n type: BridgeType.OFT,\n };\n }\n }\n}\n"],"names":["CCIP_CONFIG","ChainId","getCCIPConfig","chainId","MIN_BRIDGE_AMOUNT","BigNumber","BridgeType","BRIDGE_EXPLORER_URL_MAP","CCIP_BRIDGE_CHAINS","OFT_BRIDGE_CHAINS","unique","OFT_GAS_LIMIT","OFT_HI_GAS_LIMIT","OFT_HI_GAS_LIMIT_CHAINS","bridgeIdentifier","from","to","CCIP_FROM_ETH","CCIP_BRIDGE_ADAPTER_ABI","CCIP_FROM_BASE","CCIP_FROM_BSC","CCIP_FROM_KATANA","CCIP_FROM_SONIC","CCIP_FROM_BASE_SEPOLIA","CCIP_FROM_HOLESKY","CCIP_BRIDGES","acc","cur","route","OFT_BRIDGES","OFT_BRIDGE_ADAPTER_ABI","BRIDGES","getBridgeInfo","encodeExtraArgs","gasLimit","tag","encodedGasLimit","encodePacked","bridgeCCIP","amountRaw","approve","optionalRecipient","account","provider","env","rpcUrl","amount","recipient","bridgeInfo","sourceChainConfig","destinationChainConfig","routerAddress","lbtcContract","getTokenInfo","Token","publicClient","makePublicClient","walletClient","makeWalletClient","amountBase","toBigInt","toBaseDenomination","balanceRaw","balance","fromBaseDenomination","allowanceRaw","allowance","exceededMessage","txHash","approveLBTC","err","msg","getErrorMessage","receiverBytes","encodeAbiParameters","parseAbiParameters","extraArgs","message","fee","CCIP_ROUTER_ABI","request","DESTINATION_ENDPOINT_ID_MAP","bridgeOFT","bridgeContract","extraOptions","Options","sendParam","pad","nativeFee","lzTokenFee","bridgeArgs","bridge","experimentalAllowOFT"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-DbB23m2a.js","sources":["../../src/bridge/lib/ccip-config.ts","../../src/bridge/lib/config.ts","../../src/bridge/lib/ccip-bridge.ts","../../src/bridge/lib/oft-bridge.ts","../../src/bridge/lib/bridge.ts"],"sourcesContent":["import { Address } from 'viem';\n\nimport { ChainId } from '../../common/chains';\n\nexport type CCIPChainConfig = {\n routerAddress: Address;\n chainSelector: string;\n};\n\ntype CCIPConfig = Record<number, CCIPChainConfig>;\n\nexport const CCIP_CONFIG: CCIPConfig = {\n [ChainId.ethereum]: {\n routerAddress: '0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D',\n chainSelector: '5009297550715157269',\n },\n [ChainId.base]: {\n routerAddress: '0x881e3A65B4d4a04dD529061dd0071cf975F58bCD',\n chainSelector: '15971525489660198786',\n },\n [ChainId.binanceSmartChain]: {\n routerAddress: '0x34B03Cb9086d7D758AC55af71584F81A598759FE',\n chainSelector: '11344663589394136015',\n },\n [ChainId.sonic]: {\n routerAddress: '0xB4e1Ff7882474BB93042be9AD5E1fA387949B860',\n chainSelector: '1673871237479749969',\n },\n [ChainId.katana]: {\n routerAddress: '0x7c19b79D2a054114Ab36ad758A36e92376e267DA',\n chainSelector: '2459028469735686113',\n },\n [ChainId.megaeth]: {\n routerAddress: '0xfa546248C54939AA6C48279CdC1EAf9A1125c411',\n chainSelector: '6093540873831549674',\n },\n [ChainId.avalanche]: {\n routerAddress: '0xF4c7E640EdA248ef95972845a62bdC74237805dB',\n chainSelector: '6433500567565415381',\n },\n [ChainId.monad]: {\n routerAddress: '0x33566fE5976AAa420F3d5C64996641Fc3858CaDB',\n chainSelector: '8481857512324358265',\n },\n [ChainId.stable]: {\n routerAddress: '0xECFF67559c0583027A5fbd85136E33bC4D66eeA0',\n chainSelector: '16978377838628290997',\n },\n // Testnets\n [ChainId.holesky]: {\n routerAddress: '0xb9531b46fE8808fB3659e39704953c2B1112DD43',\n chainSelector: '7717148896336251131',\n },\n [ChainId.baseSepoliaTestnet]: {\n routerAddress: '0xD3b06cEbF099CE7DA4AcCf578aaebFDBd6e88a93',\n chainSelector: '10344971235874465080',\n },\n [ChainId.binanceSmartChainTestnet]: {\n routerAddress: '0xE1053aE1857476f36A3C62580FF9b016E8EE8F6f',\n chainSelector: '13264668187771770619',\n },\n [ChainId.avalancheFuji]: {\n routerAddress: '0xF694E193200268f9a4868e4Aa017A0118C9a8177',\n chainSelector: '14767482510784806043',\n },\n};\n\nexport function getCCIPConfig(chainId: ChainId): CCIPChainConfig | undefined {\n return CCIP_CONFIG[chainId];\n}\n","import BigNumber from 'bignumber.js';\nimport { Abi, Address } from 'viem';\n\nimport { ChainId } from '../../common/chains';\nimport { ContractInfo } from '../../common/contract-info';\nimport { featureConfig } from '../../common/feature-config';\nimport { unique } from '../../utils/array';\nimport CCIP_BRIDGE_ADAPTER_ABI from '../abi/CCIP_BRIDGE_ADAPTER_ABI.json';\nimport OFT_BRIDGE_ADAPTER_ABI from '../abi/OFT_BRIDGE_ADAPTER_ABI.json';\n\nexport const MIN_BRIDGE_AMOUNT = BigNumber(0.000001);\n\nexport enum BridgeType {\n /** CCIP - (Chainlink) Cross-Chain Interoperability Protocol */\n CCIP = 'CCIP',\n\n /** OFT - (LayerZero) Omnichain Fungible Token */\n OFT = 'OFT',\n}\n\nexport const BRIDGE_EXPLORER_URL_MAP = {\n [BridgeType.CCIP]: 'https://ccip.chain.link/tx/{txHash}',\n [BridgeType.OFT]: 'https://layerzeroscan.com/tx/{txHash}',\n};\n\nexport const CCIP_BRIDGE_CHAINS = [\n // Mainnets:\n ChainId.ethereum,\n ChainId.base,\n ChainId.binanceSmartChain,\n ChainId.katana,\n ChainId.sonic,\n ...(featureConfig.isAvalancheMainnetEnabled ? [ChainId.avalanche] : []),\n ...(featureConfig.isMonadEnabled ? [ChainId.monad] : []),\n ChainId.stable,\n // Testnets:\n ...(featureConfig.isAvalancheFujiEnabled ? [ChainId.avalancheFuji] : []),\n ChainId.baseSepoliaTestnet,\n ChainId.holesky,\n ChainId.sepolia,\n];\nexport type CCIPBridgeChain = (typeof CCIP_BRIDGE_CHAINS)[number];\n\nexport const OFT_BRIDGE_CHAINS = [\n // Mainnets:\n ChainId.ethereum,\n ChainId.berachain,\n ChainId.corn,\n ChainId.etherlink,\n ChainId.swell,\n ChainId.tac,\n // Testnets:\n ChainId.berachainBartioTestnet,\n ChainId.sepolia,\n];\n\nexport const BRIDGE_CHAINS = unique([\n ...CCIP_BRIDGE_CHAINS,\n ...OFT_BRIDGE_CHAINS,\n]);\nexport type BridgeChain = CCIPBridgeChain | OFTBridgeChain;\n\nexport const OFT_GAS_LIMIT = 90_000;\nexport const OFT_HI_GAS_LIMIT = 200_000;\nexport const OFT_HI_GAS_LIMIT_CHAINS = [\n // Mainnets:\n ChainId.berachain,\n ChainId.etherlink,\n ChainId.morph,\n ChainId.sonic,\n ChainId.corn,\n ChainId.tac,\n // Testnets:\n ChainId.berachainBartioTestnet,\n ChainId.morphHolesky,\n];\n\nexport type OFTBridgeChain = (typeof OFT_BRIDGE_CHAINS)[number];\n\ntype BridgeIdentifier<Ch extends CCIPBridgeChain | OFTBridgeChain> =\n `[from:${Ch}, to: ${Ch}]`;\n\nconst bridgeIdentifier = <Ch extends CCIPBridgeChain | OFTBridgeChain>([\n from,\n to,\n]: [from: Ch, to: Ch]): BridgeIdentifier<Ch> => `[from:${from}, to: ${to}]`;\n\ntype BridgeInfo = { type: BridgeType; contract: ContractInfo };\n\ntype CCIPBridgesConfig = [\n BridgeIdentifier<CCIPBridgeChain>,\n { type: BridgeType.CCIP; contract: ContractInfo },\n];\n\nconst CCIP_FROM_ETH = {\n routes: [\n bridgeIdentifier([ChainId.ethereum, ChainId.base]),\n bridgeIdentifier([ChainId.ethereum, ChainId.binanceSmartChain]),\n bridgeIdentifier([ChainId.ethereum, ChainId.sonic]),\n bridgeIdentifier([ChainId.ethereum, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n};\n\nconst CCIP_FROM_BASE = {\n routes: [\n bridgeIdentifier([ChainId.base, ChainId.ethereum]),\n bridgeIdentifier([ChainId.base, ChainId.binanceSmartChain]),\n bridgeIdentifier([ChainId.base, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.base,\n },\n};\n\nconst CCIP_FROM_BSC = {\n routes: [\n bridgeIdentifier([ChainId.binanceSmartChain, ChainId.ethereum]),\n bridgeIdentifier([ChainId.binanceSmartChain, ChainId.base]),\n bridgeIdentifier([ChainId.binanceSmartChain, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.binanceSmartChain,\n },\n};\n\nconst CCIP_FROM_KATANA = {\n routes: [\n bridgeIdentifier([ChainId.katana, ChainId.ethereum]),\n bridgeIdentifier([ChainId.katana, ChainId.base]),\n bridgeIdentifier([ChainId.katana, ChainId.binanceSmartChain]),\n bridgeIdentifier([ChainId.katana, ChainId.sonic]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xA869817b48b25EeE986bdF4bE04062e6fd2C418B' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.katana,\n },\n};\n\nconst CCIP_FROM_SONIC = {\n routes: [\n bridgeIdentifier([ChainId.sonic, ChainId.ethereum]),\n bridgeIdentifier([ChainId.sonic, ChainId.katana]),\n ],\n type: BridgeType.CCIP,\n contract: {\n address: '0xa869817b48b25eee986bdf4be04062e6fd2c418b' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.sonic,\n },\n};\n\nconst CCIP_FROM_BASE_SEPOLIA = {\n routes: [bridgeIdentifier([ChainId.baseSepoliaTestnet, ChainId.holesky])],\n type: BridgeType.CCIP,\n contract: {\n address: '0x38247C4c846D549CAAd2C6c0b6fec0c402b77a0F' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.baseSepoliaTestnet,\n },\n};\n\nconst CCIP_FROM_HOLESKY = {\n routes: [bridgeIdentifier([ChainId.holesky, ChainId.baseSepoliaTestnet])],\n type: BridgeType.CCIP,\n contract: {\n address: '0x38247C4c846D549CAAd2C6c0b6fec0c402b77a0F' as Address,\n abi: CCIP_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.holesky,\n },\n};\n\nconst CCIP_BRIDGES: CCIPBridgesConfig[] = [\n // Mainnets:\n CCIP_FROM_ETH,\n CCIP_FROM_BASE,\n CCIP_FROM_BSC,\n CCIP_FROM_KATANA,\n CCIP_FROM_SONIC,\n // Testnets:\n CCIP_FROM_BASE_SEPOLIA,\n CCIP_FROM_HOLESKY,\n].reduce((acc, cur) => {\n if (cur.type !== BridgeType.CCIP) return acc;\n\n const c: CCIPBridgesConfig[] = cur.routes.map(route => [\n route,\n { type: BridgeType.CCIP, contract: cur.contract },\n ]);\n\n return acc.concat(c);\n}, [] as CCIPBridgesConfig[]);\n\ntype OFTBridgeConfig = [\n BridgeIdentifier<OFTBridgeChain>,\n { type: BridgeType.OFT; contract: ContractInfo },\n];\nconst OFT_BRIDGES: OFTBridgeConfig[] = [\n // Mainnets:\n\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.berachain]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x1290A6b480f7eF14925229fdB66f5680aD8F44AD',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.corn]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x6bc15d7930839ec18a57f6f7df72ae1b439d077f',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.etherlink]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x3a7647c1323144a16e7D0D71A581E3FE5BD95299',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.swell]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x37E92d760a15231e652a2C502182a6b44c7510c0',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.ethereum, ChainId.tac]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xA7c4d94F98b6e94C139c4645e4E9a94CD7C0Abf7',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.ethereum,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.berachain, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x630e12D53D4E041b8C5451aD035Ea841E08391d7',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.berachain,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.corn, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xfc7B20D9B59A8A466f4fC3d34aA69a7D98e71d7A',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.corn,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.etherlink, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xC832183d4d5fc5831daaC892a93dBBfd798034E3',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.etherlink,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.swell, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x7B3784AD646C10A8Ddf42b47a4f4bd9aFD351E54',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.swell,\n },\n },\n ],\n [\n bridgeIdentifier([ChainId.tac, ChainId.ethereum]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x1298131cDa718bBcA7ACB1f2411e71c05E16f269',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.tac,\n },\n },\n ],\n\n // Testnets:\n\n [\n bridgeIdentifier([ChainId.berachainBartioTestnet, ChainId.sepolia]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0x1977013acaf27856ac8048C42EE2ed0134d53895',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.berachainBartioTestnet,\n },\n },\n ],\n\n [\n bridgeIdentifier([ChainId.sepolia, ChainId.berachainBartioTestnet]),\n {\n type: BridgeType.OFT,\n contract: {\n address: '0xe3748bF0Ec0A76767539eE28610B3367e35fe2C2',\n abi: OFT_BRIDGE_ADAPTER_ABI as Abi,\n chainId: ChainId.sepolia,\n },\n },\n ],\n];\n\nexport const BRIDGES = new Map<BridgeIdentifier<BridgeChain>, BridgeInfo>([\n ...CCIP_BRIDGES,\n ...OFT_BRIDGES,\n]);\n\n/** Gets the bridge information */\nexport const getBridgeInfo = (from: BridgeChain, to: BridgeChain) => {\n return BRIDGES.get(bridgeIdentifier([from, to]));\n};\n","import BigNumber from 'bignumber.js';\nimport {\n Address,\n encodeAbiParameters,\n encodePacked,\n parseAbiParameters,\n} from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { approveLBTC } from '../../contract-functions';\nimport { Token } from '../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../tokens/tokens';\nimport { getErrorMessage } from '../../utils/err';\nimport toBigInt from '../../utils/numbers';\nimport CCIP_ROUTER_ABI from '../abi/CCIP_ROUTER_ABI.json';\nimport { getCCIPConfig } from './ccip-config';\nimport {\n BridgeType,\n CCIP_BRIDGE_CHAINS,\n CCIPBridgeChain,\n getBridgeInfo,\n MIN_BRIDGE_AMOUNT,\n} from './config';\n\nexport type BridgeCCIPParameters = {\n /** The destination chain id. */\n to: CCIPBridgeChain;\n /** The LBTC amount. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The destination address. If omitted the same as the account address. */\n recipient?: Address;\n} & CommonWriteParameters;\n\n/**\n * Encodes extraArgs for CCIP according to version 1\n * Format: EVMExtraArgsV1 { gasLimit: uint256 }\n *\n * @see https://github.com/smartcontractkit/smart-contract-examples/blob/main/ccip/offchain/javascript/src/transfer-tokens.js\n */\nfunction encodeExtraArgs(gasLimit: bigint): `0x${string}` {\n // Tag for EVMExtraArgsV1\n const tag = '0x97a657c9';\n\n // Encode gasLimit as uint256\n const encodedGasLimit = encodePacked(['uint256'], [gasLimit]);\n\n return `${tag}${encodedGasLimit.slice(2)}` as `0x${string}`;\n}\n\n/**\n * Transfers tokens via CCIP using direct Router contract calls\n * Based on Chainlink example:\n * @see https://github.com/smartcontractkit/smart-contract-examples/blob/main/ccip/offchain/javascript/src/transfer-tokens.js\n */\nexport async function bridgeCCIP({\n to,\n amount: amountRaw,\n approve,\n recipient: optionalRecipient,\n account,\n chainId: from,\n provider,\n env,\n rpcUrl,\n}: BridgeCCIPParameters) {\n const amount = BigNumber(amountRaw);\n const recipient = optionalRecipient || account;\n\n const bridgeInfo = getBridgeInfo(from as CCIPBridgeChain, to);\n if (!bridgeInfo || bridgeInfo.type !== BridgeType.CCIP) {\n throw new Error(\n `Unsupported bridge from ${from} to ${to}. Please switch to the supported chains: ${CCIP_BRIDGE_CHAINS.join(', ')}`,\n );\n }\n\n // Get CCIP Router configuration\n const sourceChainConfig = getCCIPConfig(from);\n const destinationChainConfig = getCCIPConfig(to);\n\n if (!sourceChainConfig || !destinationChainConfig) {\n throw new Error(`CCIP configuration not found for chains ${from} -> ${to}`);\n }\n\n const routerAddress = sourceChainConfig.routerAddress;\n\n const lbtcContract = await getTokenInfo(Token.LBTC, from, env, rpcUrl);\n if (!lbtcContract) {\n throw new Error('Could not retrieve LBTC contract info.');\n }\n\n const publicClient = makePublicClient({ chainId: from, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId: from });\n\n const amountBase = toBigInt(\n toBaseDenomination(amount, lbtcContract.decimals),\n );\n\n if (amount.isLessThan(MIN_BRIDGE_AMOUNT)) {\n throw new Error(\n `The amount is smaller than the minimum amount allowed: ${MIN_BRIDGE_AMOUNT.toFixed()}`,\n );\n }\n\n const balanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The amount exceeds the account's balance. \\nAmount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n const allowanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'allowance',\n args: [account, routerAddress],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The amount exceeds allowance. \\nAmount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount for Router\n console.info(exceededMessage);\n try {\n const txHash = await approveLBTC({\n account,\n spender: routerAddress,\n amount,\n chainId: from,\n provider,\n rpcUrl,\n env,\n });\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${routerAddress}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${routerAddress}. \\nReason: ${msg}`,\n );\n }\n }\n\n // Build CCIP message (EVM2AnyMessage)\n // IMPORTANT: receiver must be abi.encode(address) for EVM chains, not encodePacked\n const receiverBytes = encodeAbiParameters(parseAbiParameters('address'), [\n recipient,\n ]);\n const extraArgs = encodeExtraArgs(0n);\n\n const message = {\n receiver: receiverBytes,\n data: '0x' as `0x${string}`,\n tokenAmounts: [\n {\n token: lbtcContract.address,\n amount: amountBase,\n },\n ],\n feeToken: '0x0000000000000000000000000000000000000000' as Address, // address(0) means payment in native currency\n extraArgs, // 0 = automatic gas limit calculation\n };\n\n // Get fee for sending the message\n const fee = (await publicClient.readContract({\n address: routerAddress,\n abi: CCIP_ROUTER_ABI,\n functionName: 'getFee',\n args: [BigInt(destinationChainConfig.chainSelector), message],\n })) as bigint;\n\n // Send CCIP message\n const { request } = await publicClient.simulateContract({\n address: routerAddress,\n abi: CCIP_ROUTER_ABI,\n account,\n functionName: 'ccipSend',\n args: [BigInt(destinationChainConfig.chainSelector), message],\n value: fee,\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import { Options } from '@layerzerolabs/lz-v2-utilities';\nimport BigNumber from 'bignumber.js';\nimport { Address, pad } from 'viem';\n\nimport { makePublicClient } from '../../clients/public-client';\nimport { makeWalletClient } from '../../clients/wallet-client';\nimport { ChainId } from '../../common/chains';\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { approveLBTC } from '../../contract-functions';\nimport { Token } from '../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenInfo,\n toBaseDenomination,\n} from '../../tokens/tokens';\nimport { getErrorMessage } from '../../utils/err';\nimport toBigInt from '../../utils/numbers';\nimport {\n BridgeType,\n getBridgeInfo,\n MIN_BRIDGE_AMOUNT,\n OFT_BRIDGE_CHAINS,\n OFT_GAS_LIMIT,\n OFT_HI_GAS_LIMIT,\n OFT_HI_GAS_LIMIT_CHAINS,\n OFTBridgeChain,\n} from './config';\n\nconst DESTINATION_ENDPOINT_ID_MAP: Record<OFTBridgeChain, number> = {\n // Mainnets:\n [ChainId.ethereum]: 30101,\n [ChainId.berachain]: 30362,\n [ChainId.corn]: 30331,\n [ChainId.etherlink]: 30292,\n [ChainId.swell]: 30335,\n [ChainId.tac]: 30377,\n // Testnets:\n [ChainId.sepolia]: 40161,\n [ChainId.berachainBartioTestnet]: 40291,\n};\n\nexport type BridgeOFTParameters = {\n /** The destination chain id. */\n to: OFTBridgeChain;\n /** The LBTC amount. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The destination address. If omitted the same as the account address. */\n recipient?: Address;\n} & CommonWriteParameters;\nexport async function bridgeOFT({\n to,\n amount: amountRaw,\n approve,\n recipient: optionalRecipient,\n account,\n chainId: from,\n provider,\n env,\n rpcUrl,\n}: BridgeOFTParameters) {\n console.warn(\n 'The \"bridgeOFT\" function is provided as is and it is not the recommended way of bridging tokens between chains. Please, use \"bridgeCCIP\" or the generic \"bridge\" function.',\n );\n\n const amount = BigNumber(amountRaw);\n const recipient = optionalRecipient || account;\n\n const bridgeInfo = getBridgeInfo(from as OFTBridgeChain, to);\n if (!bridgeInfo || bridgeInfo.type !== BridgeType.OFT) {\n throw new Error(\n `Unsupported bridge from ${from} to ${to}. Please switch to the supported chains: ${OFT_BRIDGE_CHAINS.join(', ')}`,\n );\n }\n\n const bridgeContract = bridgeInfo.contract;\n\n const lbtcContract = await getTokenInfo(Token.LBTC, from, env, rpcUrl);\n if (!lbtcContract) {\n throw new Error('Could not retrieve LBTC contract info.');\n }\n\n const publicClient = makePublicClient({ chainId: from, rpcUrl });\n const walletClient = makeWalletClient({ provider, chainId: from });\n\n const amountBase = toBigInt(\n toBaseDenomination(amount, lbtcContract.decimals),\n );\n\n if (amount.isLessThan(MIN_BRIDGE_AMOUNT)) {\n throw new Error(\n `The amount is smaller than the minimum amount allowed: ${MIN_BRIDGE_AMOUNT.toFixed()}`,\n );\n }\n\n const balanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'balanceOf',\n args: [account],\n });\n const balance = fromBaseDenomination(\n String(balanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds balance\n if (amount.isGreaterThan(balance)) {\n throw new Error(\n `The amount exceeds the account's balance. \\nAmount: ${amount.toFixed()} \\nBalance: ${balance.toFixed()}`,\n );\n }\n\n const allowanceRaw = await publicClient.readContract({\n address: lbtcContract.address,\n abi: lbtcContract.abi,\n functionName: 'allowance',\n args: [account, bridgeContract.address],\n });\n const allowance = fromBaseDenomination(\n String(allowanceRaw),\n lbtcContract.decimals,\n );\n\n // check if amount exceeds allowance\n if (amount.isGreaterThan(allowance)) {\n const exceededMessage = `The amount exceeds allowance. \\nAmount: ${amount.toFixed()} \\nAllowance: ${allowance.toFixed()}`;\n if (!approve) {\n throw new Error(exceededMessage);\n }\n\n // try to approve new amount\n console.info(exceededMessage);\n try {\n const txHash = await approveLBTC({\n account,\n spender: bridgeContract.address,\n amount,\n chainId: from,\n provider,\n rpcUrl,\n env,\n });\n console.info(`Approve tx hash: ${txHash}`);\n console.info(`Approved ${amountBase} for ${bridgeContract.address}`);\n } catch (err) {\n const msg = getErrorMessage(err);\n throw new Error(\n `Could not approve ${amountBase} for ${bridgeContract.address}. \\nReason: ${msg}`,\n );\n }\n }\n\n const extraOptions = Options.newOptions().addExecutorLzReceiveOption(\n (OFT_HI_GAS_LIMIT_CHAINS as number[]).includes(to)\n ? OFT_HI_GAS_LIMIT\n : OFT_GAS_LIMIT,\n 0,\n );\n\n /** _sendParam */\n const sendParam = [\n /** dstEid - uint32 */\n DESTINATION_ENDPOINT_ID_MAP[to],\n /** to - bytes32 */\n pad(recipient),\n /** amountLD - uint256 */\n amountBase,\n /** minAmountLD - uint256 */\n amountBase,\n /** extraOptions - bytes */\n extraOptions.toHex(),\n /** composeMsg - bytes */\n '0x',\n /** oftCmd - bytes */\n '0x',\n ];\n\n const { nativeFee, lzTokenFee } = (await publicClient.readContract({\n abi: bridgeContract.abi,\n address: bridgeContract.address,\n account,\n functionName: 'quoteSend',\n args: [sendParam, false],\n })) as { nativeFee: bigint; lzTokenFee: bigint };\n\n const bridgeArgs = [\n /** _sendParam */\n sendParam,\n /** _fee */\n [\n /** nativeFee - uint256 */\n nativeFee,\n /** lzTokenFee - uint256 */\n lzTokenFee,\n ],\n /** address - address */\n account,\n ];\n\n const { request } = await publicClient.simulateContract({\n abi: bridgeContract.abi,\n address: bridgeContract.address,\n account,\n functionName: 'send',\n args: bridgeArgs,\n value: nativeFee,\n });\n\n const txHash = await walletClient.writeContract(request);\n return txHash;\n}\n","import BigNumber from 'bignumber.js';\nimport { Address } from 'viem';\n\nimport { CommonWriteParameters } from '../../common/parameters';\nimport { bridgeCCIP } from './ccip-bridge';\nimport {\n BRIDGE_EXPLORER_URL_MAP,\n BridgeChain,\n BridgeType,\n CCIP_BRIDGE_CHAINS,\n CCIPBridgeChain,\n getBridgeInfo,\n OFTBridgeChain,\n} from './config';\nimport { bridgeOFT } from './oft-bridge';\n\nexport type BridgeParameters = {\n /** The destination chain id. */\n to: BridgeChain;\n /** The LBTC amount. */\n amount: BigNumber.Value;\n /**\n * A flag determining whether the amount should be approved within\n * the execution of this function. If set to `false` it will\n * throw an error when the deposit amount exceeds allowance.\n */\n approve?: boolean;\n /** The destination address. If omitted the same as the account address. */\n recipient?: Address;\n} & CommonWriteParameters & {\n /**\n * A flag indicating whether the OFT bridge should be allowed.\n * Use at your onw risk!\n */\n experimentalAllowOFT?: boolean;\n };\n\n/**\n * Bridges funds (`amount`) from the connected chain (`chainId`) to the provided\n * destination chain (`to`)\n */\nexport async function bridge({\n to,\n amount,\n approve,\n account,\n chainId,\n provider,\n recipient,\n rpcUrl,\n env,\n experimentalAllowOFT = false,\n}: BridgeParameters) {\n const bridgeInfo = getBridgeInfo(chainId as BridgeChain, to);\n\n if (\n !bridgeInfo ||\n (!experimentalAllowOFT && bridgeInfo.type === BridgeType.OFT)\n ) {\n // The OFT bridges are disabled for now in this generic function as we're\n // working on moving all bridges to the CCIP method. OFT bridging shouldn't\n // be exposed.\n throw new Error(\n `Unsupported bridge from ${chainId} to ${to}. Please switch to the supported chains: ${CCIP_BRIDGE_CHAINS.join(', ')}`,\n );\n }\n\n switch (bridgeInfo.type) {\n case BridgeType.CCIP: {\n const txHash = await bridgeCCIP({\n to: to as CCIPBridgeChain,\n amount,\n approve,\n recipient,\n account,\n chainId,\n provider,\n env,\n rpcUrl,\n });\n\n return {\n txHash,\n explorerUrl: BRIDGE_EXPLORER_URL_MAP[BridgeType.CCIP].replace(\n '{txHash}',\n txHash,\n ),\n type: BridgeType.CCIP,\n };\n }\n\n case BridgeType.OFT: {\n const txHash = await bridgeOFT({\n to: to as OFTBridgeChain,\n amount,\n approve,\n recipient,\n account,\n chainId,\n provider,\n env,\n rpcUrl,\n });\n\n return {\n txHash,\n explorerUrl: BRIDGE_EXPLORER_URL_MAP[BridgeType.OFT].replace(\n '{txHash}',\n txHash,\n ),\n type: BridgeType.OFT,\n };\n }\n }\n}\n"],"names":["CCIP_CONFIG","ChainId","getCCIPConfig","chainId","MIN_BRIDGE_AMOUNT","BigNumber","BridgeType","BRIDGE_EXPLORER_URL_MAP","CCIP_BRIDGE_CHAINS","OFT_BRIDGE_CHAINS","unique","OFT_GAS_LIMIT","OFT_HI_GAS_LIMIT","OFT_HI_GAS_LIMIT_CHAINS","bridgeIdentifier","from","to","CCIP_FROM_ETH","CCIP_BRIDGE_ADAPTER_ABI","CCIP_FROM_BASE","CCIP_FROM_BSC","CCIP_FROM_KATANA","CCIP_FROM_SONIC","CCIP_FROM_BASE_SEPOLIA","CCIP_FROM_HOLESKY","CCIP_BRIDGES","acc","cur","c","route","OFT_BRIDGES","OFT_BRIDGE_ADAPTER_ABI","BRIDGES","getBridgeInfo","encodeExtraArgs","gasLimit","tag","encodedGasLimit","encodePacked","bridgeCCIP","amountRaw","approve","optionalRecipient","account","provider","env","rpcUrl","amount","recipient","bridgeInfo","sourceChainConfig","destinationChainConfig","routerAddress","lbtcContract","getTokenInfo","Token","publicClient","makePublicClient","walletClient","makeWalletClient","amountBase","toBigInt","toBaseDenomination","balanceRaw","balance","fromBaseDenomination","allowanceRaw","allowance","exceededMessage","txHash","approveLBTC","err","msg","getErrorMessage","receiverBytes","encodeAbiParameters","parseAbiParameters","extraArgs","message","fee","CCIP_ROUTER_ABI","request","DESTINATION_ENDPOINT_ID_MAP","bridgeOFT","bridgeContract","extraOptions","Options","sendParam","pad","nativeFee","lzTokenFee","bridgeArgs","bridge","experimentalAllowOFT"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-C8BfN_9P.js","sources":["../../src/vaults/lib/config.ts"],"sourcesContent":["import { Abi, Address } from 'viem';\n\nimport { ChainId } from '../../common/chains';\nimport { Token } from '../../tokens/token-addresses';\nimport BTCE_VAULT_ABI from '../abi/BTCE_VAULT_ABI.json';\nimport VEDA_VAULT_ABI from '../abi/VEDA_VAULT_ABI.json';\nimport VEDA_VAULT_ACCOUNTANT_ABI from '../abi/VEDA_VAULT_ACCOUNTANT_ABI.json';\nimport VEDA_VAULT_BASE_ASSET_ABI from '../abi/VEDA_VAULT_BASE_ASSET_ABI.json';\nimport VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI from '../abi/VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI.json';\nimport VEDA_VAULT_LENS_ABI from '../abi/VEDA_VAULT_LENS_ABI.json';\nimport VEDA_VAULT_SPENDER_ABI from '../abi/VEDA_VAULT_SPENDER_ABI.json';\nimport VEDA_VAULT_TELLER_ABI from '../abi/VEDA_VAULT_TELLER_ABI.json';\n\ntype ContractInfo = {\n abi: Abi;\n address: Address;\n chainId: ChainId;\n};\n\nexport const VEDA_VAULT_CHAINS = [\n ChainId.ethereum,\n ChainId.base,\n ChainId.binanceSmartChain,\n ChainId.corn,\n] as const;\n\nexport type VedaVaultChain = (typeof VEDA_VAULT_CHAINS)[number];\nexport const isVedaVaultChain = (chainId: number): chainId is VedaVaultChain =>\n VEDA_VAULT_CHAINS.includes(chainId as VedaVaultChain);\n\nexport const VEDA_VAULT_CHAIN_TO_NETWORK_MAP: Record<VedaVaultChain, string> = {\n [ChainId.ethereum]: 'ethereum',\n [ChainId.base]: 'base',\n [ChainId.corn]: 'corn',\n [ChainId.binanceSmartChain]: 'bnb',\n};\n\nexport const NETWORK_TO_VEDA_VAULT_CHAIN_MAP: Record<string, VedaVaultChain> = {\n ethereum: ChainId.ethereum,\n base: ChainId.base,\n corn: ChainId.corn,\n bnb: ChainId.binanceSmartChain,\n};\n\n/** A list of chains where stake and bake is enabled */\nexport const VEDA_VAULT_STAKE_AND_BAKE_CHAINS = [\n ChainId.ethereum,\n // Testnets:\n ChainId.sepolia,\n];\nexport type VedaVaultStakeAndBakeChain =\n (typeof VEDA_VAULT_STAKE_AND_BAKE_CHAINS)[number];\nexport const isVedaVaultStakeAndBakeChain = (\n chainId: number,\n): chainId is VedaVaultStakeAndBakeChain =>\n VEDA_VAULT_STAKE_AND_BAKE_CHAINS.includes(\n chainId as VedaVaultStakeAndBakeChain,\n );\n\nexport const VEDA_VAULT_DEFAULT_CHAIN_ID: VedaVaultChain = ChainId.ethereum;\n\nexport const VEDA_VAULT_CONTRACT = '0x5401b8620E5FB570064CA9114fd1e135fd77D57c';\nexport const VEDA_VAULT_ACCOUNTANT_CONTRACT =\n '0x28634D0c5edC67CF2450E74deA49B90a4FF93dCE';\nexport const VEDA_VAULT_LENS_CONTRACT =\n '0x5232bc0F5999f8dA604c42E1748A13a170F94A1B';\n\nexport const VEDA_VAULT_TELLER_CONTRACTS: Record<VedaVaultChain, ContractInfo> =\n {\n [ChainId.ethereum]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x4E8f5128F473C6948127f9Cbca474a6700F99bab',\n chainId: ChainId.ethereum,\n },\n [ChainId.base]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x2eA43384F1A98765257bc6Cb26c7131dEbdEB9B3',\n chainId: ChainId.base,\n },\n [ChainId.binanceSmartChain]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x2eA43384F1A98765257bc6Cb26c7131dEbdEB9B3',\n chainId: ChainId.binanceSmartChain,\n },\n [ChainId.corn]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x2eA43384F1A98765257bc6Cb26c7131dEbdEB9B3',\n chainId: ChainId.corn,\n },\n } as const;\n\n/** Stake and bake contracts */\nexport const VEDA_VAULT_SPENDER_CONTRACTS: Record<\n VedaVaultStakeAndBakeChain,\n ContractInfo\n> = {\n [ChainId.ethereum]: {\n abi: VEDA_VAULT_SPENDER_ABI as Abi,\n address: '0xC8bbF6153D7Ba105f1399D992ebd32B0541996ef',\n chainId: ChainId.ethereum,\n },\n // Testnets:\n [ChainId.sepolia]: {\n abi: VEDA_VAULT_SPENDER_ABI as Abi,\n address: '0x77eD6a84fEF665156e81247ECbd43A847B8A6398',\n chainId: ChainId.sepolia,\n },\n} as const;\n\nexport const VEDA_VAULT_WITHDRAW_QUEUE_CONTRACTS: Record<\n VedaVaultChain,\n ContractInfo\n> = {\n [ChainId.ethereum]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n [ChainId.base]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n [ChainId.binanceSmartChain]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n [ChainId.corn]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n};\n\nexport const VEDA_VAULT_BASE_ASSET = {\n abi: VEDA_VAULT_BASE_ASSET_ABI,\n symbol: 'WBTC',\n displayName: 'wBTC',\n address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n decimals: 8,\n};\n\n/**\n * BTCe is an ERC4626 wrapper vault around the Veda vault's LBTCv share token.\n * Holders of BTCe shares have a claim on the underlying LBTCv position.\n *\n * The wrapper is currently a 1:1 pass-through (totalSupply == totalAssets,\n * convertToAssets(1e8) == 1e8 on every supported chain). Convert through\n * `convertToAssets` rather than naive summation in case fees or rebases ever\n * change the ratio.\n *\n * Currently deployed at the same address on every supported chain, but kept\n * in a Record so future deployments can diverge without an API change.\n */\nexport const BTCE_VAULT_CHAINS = [\n ChainId.ethereum,\n ChainId.base,\n ChainId.binanceSmartChain,\n] as const;\n\nexport type BtceVaultChain = (typeof BTCE_VAULT_CHAINS)[number];\n\nexport const isBtceVaultChain = (chainId: number): chainId is BtceVaultChain =>\n BTCE_VAULT_CHAINS.includes(chainId as BtceVaultChain);\n\nexport const BTCE_VAULT_CONTRACTS: Record<BtceVaultChain, Address> = {\n [ChainId.ethereum]: '0x3a4baaBf4DC9910596821615e848f0e6545762F3',\n [ChainId.base]: '0x3a4baaBf4DC9910596821615e848f0e6545762F3',\n [ChainId.binanceSmartChain]: '0x3a4baaBf4DC9910596821615e848f0e6545762F3',\n};\n\nexport const BTCE_VAULT_DECIMALS = 8;\n\nexport const BTCE_VAULT = {\n abi: BTCE_VAULT_ABI as Abi,\n decimals: BTCE_VAULT_DECIMALS,\n chains: BTCE_VAULT_CHAINS,\n contracts: BTCE_VAULT_CONTRACTS,\n} as const;\n\nexport enum Vault {\n Veda = 'veda',\n}\n\nexport const VaultNameMap = {\n [Vault.Veda]: 'Veda / Lombard DeFi Vault',\n} as const;\n\nexport const VAULTS = {\n [Vault.Veda]: {\n defaultChainId: VEDA_VAULT_DEFAULT_CHAIN_ID,\n chains: VEDA_VAULT_CHAINS,\n tokens: {\n [Token.LBTC]: VEDA_VAULT_CHAINS,\n [Token.BTCBinance]: [ChainId.binanceSmartChain],\n [Token.cbBTC]: [ChainId.ethereum, ChainId.base],\n [Token.eBTC]: [ChainId.ethereum],\n [Token.wBTC]: [ChainId.ethereum],\n [Token.wBTCN]: [ChainId.corn],\n },\n stakeAndBakeChains: VEDA_VAULT_STAKE_AND_BAKE_CHAINS,\n decimals: 8,\n vaultContract: {\n abi: VEDA_VAULT_ABI,\n address: VEDA_VAULT_CONTRACT,\n },\n accountantContract: {\n abi: VEDA_VAULT_ACCOUNTANT_ABI,\n address: VEDA_VAULT_ACCOUNTANT_CONTRACT,\n },\n lensContract: {\n abi: VEDA_VAULT_LENS_ABI,\n address: VEDA_VAULT_LENS_CONTRACT,\n },\n spenderContracts: VEDA_VAULT_SPENDER_CONTRACTS,\n tellerContracts: VEDA_VAULT_TELLER_CONTRACTS,\n withdrawQueueContracts: VEDA_VAULT_WITHDRAW_QUEUE_CONTRACTS,\n\n queueWithdrawDiscountPercent: '0.01',\n queueWithdrawDaysValid: '14',\n },\n} as const;\n"],"names":["VEDA_VAULT_CHAINS","ChainId","isVedaVaultChain","chainId","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","NETWORK_TO_VEDA_VAULT_CHAIN_MAP","VEDA_VAULT_STAKE_AND_BAKE_CHAINS","isVedaVaultStakeAndBakeChain","VEDA_VAULT_DEFAULT_CHAIN_ID","VEDA_VAULT_CONTRACT","VEDA_VAULT_ACCOUNTANT_CONTRACT","VEDA_VAULT_LENS_CONTRACT","VEDA_VAULT_TELLER_CONTRACTS","VEDA_VAULT_TELLER_ABI","VEDA_VAULT_SPENDER_CONTRACTS","VEDA_VAULT_SPENDER_ABI","VEDA_VAULT_WITHDRAW_QUEUE_CONTRACTS","VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI","BTCE_VAULT_CHAINS","isBtceVaultChain","BTCE_VAULT_CONTRACTS","BTCE_VAULT_DECIMALS","BTCE_VAULT","BTCE_VAULT_ABI","Vault","VAULTS","Token","VEDA_VAULT_ABI","VEDA_VAULT_ACCOUNTANT_ABI","VEDA_VAULT_LENS_ABI"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-ow9X5H0c.cjs","sources":["../../src/vaults/lib/config.ts"],"sourcesContent":["import { Abi, Address } from 'viem';\n\nimport { ChainId } from '../../common/chains';\nimport { Token } from '../../tokens/token-addresses';\nimport BTCE_VAULT_ABI from '../abi/BTCE_VAULT_ABI.json';\nimport VEDA_VAULT_ABI from '../abi/VEDA_VAULT_ABI.json';\nimport VEDA_VAULT_ACCOUNTANT_ABI from '../abi/VEDA_VAULT_ACCOUNTANT_ABI.json';\nimport VEDA_VAULT_BASE_ASSET_ABI from '../abi/VEDA_VAULT_BASE_ASSET_ABI.json';\nimport VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI from '../abi/VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI.json';\nimport VEDA_VAULT_LENS_ABI from '../abi/VEDA_VAULT_LENS_ABI.json';\nimport VEDA_VAULT_SPENDER_ABI from '../abi/VEDA_VAULT_SPENDER_ABI.json';\nimport VEDA_VAULT_TELLER_ABI from '../abi/VEDA_VAULT_TELLER_ABI.json';\n\ntype ContractInfo = {\n abi: Abi;\n address: Address;\n chainId: ChainId;\n};\n\nexport const VEDA_VAULT_CHAINS = [\n ChainId.ethereum,\n ChainId.base,\n ChainId.binanceSmartChain,\n ChainId.corn,\n] as const;\n\nexport type VedaVaultChain = (typeof VEDA_VAULT_CHAINS)[number];\nexport const isVedaVaultChain = (chainId: number): chainId is VedaVaultChain =>\n VEDA_VAULT_CHAINS.includes(chainId as VedaVaultChain);\n\nexport const VEDA_VAULT_CHAIN_TO_NETWORK_MAP: Record<VedaVaultChain, string> = {\n [ChainId.ethereum]: 'ethereum',\n [ChainId.base]: 'base',\n [ChainId.corn]: 'corn',\n [ChainId.binanceSmartChain]: 'bnb',\n};\n\nexport const NETWORK_TO_VEDA_VAULT_CHAIN_MAP: Record<string, VedaVaultChain> = {\n ethereum: ChainId.ethereum,\n base: ChainId.base,\n corn: ChainId.corn,\n bnb: ChainId.binanceSmartChain,\n};\n\n/** A list of chains where stake and bake is enabled */\nexport const VEDA_VAULT_STAKE_AND_BAKE_CHAINS = [\n ChainId.ethereum,\n // Testnets:\n ChainId.sepolia,\n];\nexport type VedaVaultStakeAndBakeChain =\n (typeof VEDA_VAULT_STAKE_AND_BAKE_CHAINS)[number];\nexport const isVedaVaultStakeAndBakeChain = (\n chainId: number,\n): chainId is VedaVaultStakeAndBakeChain =>\n VEDA_VAULT_STAKE_AND_BAKE_CHAINS.includes(\n chainId as VedaVaultStakeAndBakeChain,\n );\n\nexport const VEDA_VAULT_DEFAULT_CHAIN_ID: VedaVaultChain = ChainId.ethereum;\n\nexport const VEDA_VAULT_CONTRACT = '0x5401b8620E5FB570064CA9114fd1e135fd77D57c';\nexport const VEDA_VAULT_ACCOUNTANT_CONTRACT =\n '0x28634D0c5edC67CF2450E74deA49B90a4FF93dCE';\nexport const VEDA_VAULT_LENS_CONTRACT =\n '0x5232bc0F5999f8dA604c42E1748A13a170F94A1B';\n\nexport const VEDA_VAULT_TELLER_CONTRACTS: Record<VedaVaultChain, ContractInfo> =\n {\n [ChainId.ethereum]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x4E8f5128F473C6948127f9Cbca474a6700F99bab',\n chainId: ChainId.ethereum,\n },\n [ChainId.base]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x2eA43384F1A98765257bc6Cb26c7131dEbdEB9B3',\n chainId: ChainId.base,\n },\n [ChainId.binanceSmartChain]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x2eA43384F1A98765257bc6Cb26c7131dEbdEB9B3',\n chainId: ChainId.binanceSmartChain,\n },\n [ChainId.corn]: {\n abi: VEDA_VAULT_TELLER_ABI as Abi,\n address: '0x2eA43384F1A98765257bc6Cb26c7131dEbdEB9B3',\n chainId: ChainId.corn,\n },\n } as const;\n\n/** Stake and bake contracts */\nexport const VEDA_VAULT_SPENDER_CONTRACTS: Record<\n VedaVaultStakeAndBakeChain,\n ContractInfo\n> = {\n [ChainId.ethereum]: {\n abi: VEDA_VAULT_SPENDER_ABI as Abi,\n address: '0xC8bbF6153D7Ba105f1399D992ebd32B0541996ef',\n chainId: ChainId.ethereum,\n },\n // Testnets:\n [ChainId.sepolia]: {\n abi: VEDA_VAULT_SPENDER_ABI as Abi,\n address: '0x77eD6a84fEF665156e81247ECbd43A847B8A6398',\n chainId: ChainId.sepolia,\n },\n} as const;\n\nexport const VEDA_VAULT_WITHDRAW_QUEUE_CONTRACTS: Record<\n VedaVaultChain,\n ContractInfo\n> = {\n [ChainId.ethereum]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n [ChainId.base]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n [ChainId.binanceSmartChain]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n [ChainId.corn]: {\n abi: VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI as Abi,\n address: '0x3b4aCd8879fb60586cCd74bC2F831A4C5E7DbBf8',\n chainId: ChainId.ethereum,\n },\n};\n\nexport const VEDA_VAULT_BASE_ASSET = {\n abi: VEDA_VAULT_BASE_ASSET_ABI,\n symbol: 'WBTC',\n displayName: 'wBTC',\n address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n decimals: 8,\n};\n\n/**\n * BTCe is an ERC4626 wrapper vault around the Veda vault's LBTCv share token.\n * Holders of BTCe shares have a claim on the underlying LBTCv position.\n *\n * The wrapper is currently a 1:1 pass-through (totalSupply == totalAssets,\n * convertToAssets(1e8) == 1e8 on every supported chain). Convert through\n * `convertToAssets` rather than naive summation in case fees or rebases ever\n * change the ratio.\n *\n * Currently deployed at the same address on every supported chain, but kept\n * in a Record so future deployments can diverge without an API change.\n */\nexport const BTCE_VAULT_CHAINS = [\n ChainId.ethereum,\n ChainId.base,\n ChainId.binanceSmartChain,\n] as const;\n\nexport type BtceVaultChain = (typeof BTCE_VAULT_CHAINS)[number];\n\nexport const isBtceVaultChain = (chainId: number): chainId is BtceVaultChain =>\n BTCE_VAULT_CHAINS.includes(chainId as BtceVaultChain);\n\nexport const BTCE_VAULT_CONTRACTS: Record<BtceVaultChain, Address> = {\n [ChainId.ethereum]: '0x3a4baaBf4DC9910596821615e848f0e6545762F3',\n [ChainId.base]: '0x3a4baaBf4DC9910596821615e848f0e6545762F3',\n [ChainId.binanceSmartChain]: '0x3a4baaBf4DC9910596821615e848f0e6545762F3',\n};\n\nexport const BTCE_VAULT_DECIMALS = 8;\n\nexport const BTCE_VAULT = {\n abi: BTCE_VAULT_ABI as Abi,\n decimals: BTCE_VAULT_DECIMALS,\n chains: BTCE_VAULT_CHAINS,\n contracts: BTCE_VAULT_CONTRACTS,\n} as const;\n\nexport enum Vault {\n Veda = 'veda',\n}\n\nexport const VaultNameMap = {\n [Vault.Veda]: 'Veda / Lombard DeFi Vault',\n} as const;\n\nexport const VAULTS = {\n [Vault.Veda]: {\n defaultChainId: VEDA_VAULT_DEFAULT_CHAIN_ID,\n chains: VEDA_VAULT_CHAINS,\n tokens: {\n [Token.LBTC]: VEDA_VAULT_CHAINS,\n [Token.BTCBinance]: [ChainId.binanceSmartChain],\n [Token.cbBTC]: [ChainId.ethereum, ChainId.base],\n [Token.eBTC]: [ChainId.ethereum],\n [Token.wBTC]: [ChainId.ethereum],\n [Token.wBTCN]: [ChainId.corn],\n },\n stakeAndBakeChains: VEDA_VAULT_STAKE_AND_BAKE_CHAINS,\n decimals: 8,\n vaultContract: {\n abi: VEDA_VAULT_ABI,\n address: VEDA_VAULT_CONTRACT,\n },\n accountantContract: {\n abi: VEDA_VAULT_ACCOUNTANT_ABI,\n address: VEDA_VAULT_ACCOUNTANT_CONTRACT,\n },\n lensContract: {\n abi: VEDA_VAULT_LENS_ABI,\n address: VEDA_VAULT_LENS_CONTRACT,\n },\n spenderContracts: VEDA_VAULT_SPENDER_CONTRACTS,\n tellerContracts: VEDA_VAULT_TELLER_CONTRACTS,\n withdrawQueueContracts: VEDA_VAULT_WITHDRAW_QUEUE_CONTRACTS,\n\n queueWithdrawDiscountPercent: '0.01',\n queueWithdrawDaysValid: '14',\n },\n} as const;\n"],"names":["VEDA_VAULT_CHAINS","ChainId","isVedaVaultChain","chainId","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","NETWORK_TO_VEDA_VAULT_CHAIN_MAP","VEDA_VAULT_STAKE_AND_BAKE_CHAINS","isVedaVaultStakeAndBakeChain","VEDA_VAULT_DEFAULT_CHAIN_ID","VEDA_VAULT_CONTRACT","VEDA_VAULT_ACCOUNTANT_CONTRACT","VEDA_VAULT_LENS_CONTRACT","VEDA_VAULT_TELLER_CONTRACTS","VEDA_VAULT_TELLER_ABI","VEDA_VAULT_SPENDER_CONTRACTS","VEDA_VAULT_SPENDER_ABI","VEDA_VAULT_WITHDRAW_QUEUE_CONTRACTS","VEDA_VAULT_BORING_WITHDRAW_QUEUE_ABI","BTCE_VAULT_CHAINS","isBtceVaultChain","BTCE_VAULT_CONTRACTS","BTCE_VAULT_DECIMALS","BTCE_VAULT","BTCE_VAULT_ABI","Vault","VAULTS","Token","VEDA_VAULT_ABI","VEDA_VAULT_ACCOUNTANT_ABI","VEDA_VAULT_LENS_ABI"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defi-registry-B8V6dRVB.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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defi-registry-CD8EUcNu.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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"}
|