@lombard.finance/sdk 4.3.2 → 4.4.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 +16 -0
- package/LICENSE +21 -0
- package/README.md +6 -6
- package/dist/api-functions/generateDepositBtcAddress/generateDepositBtcAddress.d.ts.map +1 -1
- package/dist/api-functions/getDepositBtcAddress/getDepositBtcAddress.d.ts.map +1 -1
- package/dist/api.cjs +1 -1
- package/dist/api.js +29 -29
- package/dist/bridge.cjs +1 -1
- package/dist/bridge.js +7 -7
- package/dist/btc.cjs +1 -1
- package/dist/btc.js +10 -10
- package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts +7 -4
- package/dist/chains/btc/actions/deposit/BtcDeposit.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/index.d.ts +16 -8
- package/dist/chains/btc/actions/deposit/config/index.d.ts.map +1 -1
- package/dist/chains/btc/actions/deposit/config/solana.d.ts +20 -0
- package/dist/chains/btc/actions/deposit/config/solana.d.ts.map +1 -0
- package/dist/chains/btc/actions/deposit/config/types.d.ts +4 -3
- package/dist/chains/btc/actions/deposit/config/types.d.ts.map +1 -1
- package/dist/chains/evm/EvmActions.d.ts +4 -4
- package/dist/chains/evm/actions/deposit/config/evm.d.ts +3 -3
- package/dist/chains/evm/actions/deposit/config/evm.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/config/types.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/config/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/deposit/factory.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/types.d.ts +1 -1
- package/dist/chains/evm/actions/deposit/types.d.ts.map +1 -1
- package/dist/chains/evm/actions/redeem/EvmRedeem.d.ts.map +1 -1
- package/dist/chains/evm/actions/unstake/EvmUnstake.d.ts.map +1 -1
- package/dist/chains/solana/SolanaActions.d.ts +10 -0
- package/dist/chains/solana/SolanaActions.d.ts.map +1 -1
- package/dist/chains/solana/actions/index.d.ts +1 -0
- package/dist/chains/solana/actions/index.d.ts.map +1 -1
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts +37 -0
- package/dist/chains/solana/actions/redeem/SolanaRedeem.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/index.d.ts +8 -0
- package/dist/chains/solana/actions/redeem/config/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/solana.d.ts +22 -0
- package/dist/chains/solana/actions/redeem/config/solana.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/config/types.d.ts +35 -0
- package/dist/chains/solana/actions/redeem/config/types.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/factory.d.ts +12 -0
- package/dist/chains/solana/actions/redeem/factory.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/index.d.ts +9 -0
- package/dist/chains/solana/actions/redeem/index.d.ts.map +1 -0
- package/dist/chains/solana/actions/redeem/types.d.ts +52 -0
- package/dist/chains/solana/actions/redeem/types.d.ts.map +1 -0
- package/dist/chains/solana/utils.d.ts +15 -0
- package/dist/chains/solana/utils.d.ts.map +1 -0
- package/dist/chunks/BtcActions-BOVJrdTI.cjs +2 -0
- package/dist/chunks/BtcActions-BOVJrdTI.cjs.map +1 -0
- package/dist/chunks/{BtcActions-k-qs1uO0.js → BtcActions-_a8r3Q7c.js} +457 -414
- package/dist/chunks/BtcActions-_a8r3Q7c.js.map +1 -0
- package/dist/chunks/{EvmActions-B_dF42So.js → EvmActions-D4vFpbYk.js} +163 -173
- package/dist/chunks/EvmActions-D4vFpbYk.js.map +1 -0
- package/dist/chunks/EvmActions-VrDbgMDy.cjs +2 -0
- package/dist/chunks/EvmActions-VrDbgMDy.cjs.map +1 -0
- package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs +2 -0
- package/dist/chunks/ReferralsClient-Cmrjo9bN.cjs.map +1 -0
- package/dist/chunks/{ReferralsClient-DbFWWtVi.js → ReferralsClient-DvEsA3II.js} +160 -160
- package/dist/chunks/ReferralsClient-DvEsA3II.js.map +1 -0
- package/dist/chunks/{api-config-CtcP3TVl.js → api-config-Dm6dR85f.js} +6 -6
- package/dist/chunks/{api-config-CtcP3TVl.js.map → api-config-Dm6dR85f.js.map} +1 -1
- package/dist/chunks/{approveLBTC-CZiZmdcX.cjs → approveLBTC-CUXEC3kw.cjs} +2 -2
- package/dist/chunks/{approveLBTC-CZiZmdcX.cjs.map → approveLBTC-CUXEC3kw.cjs.map} +1 -1
- package/dist/chunks/approveLBTC-Du2El1tW.js +26 -0
- package/dist/chunks/{approveLBTC-B5-ZWqct.js.map → approveLBTC-Du2El1tW.js.map} +1 -1
- package/dist/chunks/{array-Cev6kyLJ.js → array-DYttUPf5.js} +7 -7
- package/dist/chunks/{array-Cev6kyLJ.js.map → array-DYttUPf5.js.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs → blockchain-identifier-BTPGxLio.cjs} +2 -2
- package/dist/chunks/{blockchain-identifier-BzMQWh-C.cjs.map → blockchain-identifier-BTPGxLio.cjs.map} +1 -1
- package/dist/chunks/{blockchain-identifier-BmadkNtK.js → blockchain-identifier-CTVaEPpY.js} +24 -24
- package/dist/chunks/{blockchain-identifier-BmadkNtK.js.map → blockchain-identifier-CTVaEPpY.js.map} +1 -1
- package/dist/chunks/{bridge-CTsiodO1.js → bridge-DqGabhIY.js} +13 -13
- package/dist/chunks/{bridge-CTsiodO1.js.map → bridge-DqGabhIY.js.map} +1 -1
- package/dist/chunks/{bridge-BzRlY9pP.cjs → bridge-dWaKrMKm.cjs} +2 -2
- package/dist/chunks/{bridge-BzRlY9pP.cjs.map → bridge-dWaKrMKm.cjs.map} +1 -1
- package/dist/chunks/{config-hFKqUyg3.js → config-DghboRx0.js} +10 -10
- package/dist/chunks/{config-hFKqUyg3.js.map → config-DghboRx0.js.map} +1 -1
- package/dist/chunks/{config-l4ZaZw_g.cjs → config-DmCmanM_.cjs} +2 -2
- package/dist/chunks/{config-l4ZaZw_g.cjs.map → config-DmCmanM_.cjs.map} +1 -1
- package/dist/chunks/constants-D1FnS2Z8.js +6 -0
- package/dist/chunks/constants-D1FnS2Z8.js.map +1 -0
- package/dist/chunks/constants-ueShGH9R.cjs +2 -0
- package/dist/chunks/constants-ueShGH9R.cjs.map +1 -0
- package/dist/chunks/{defi-registry-BIRv_zkp.cjs → defi-registry-DDNavtO1.cjs} +2 -2
- package/dist/chunks/{defi-registry-BIRv_zkp.cjs.map → defi-registry-DDNavtO1.cjs.map} +1 -1
- package/dist/chunks/{defi-registry-wNFN3qyB.js → defi-registry-DxjjBQTV.js} +13 -13
- package/dist/chunks/{defi-registry-wNFN3qyB.js.map → defi-registry-DxjjBQTV.js.map} +1 -1
- package/dist/chunks/{depositStatus-DM7fRmbN.js → depositStatus-05_X7FVs.js} +42 -42
- package/dist/chunks/{depositStatus-DM7fRmbN.js.map → depositStatus-05_X7FVs.js.map} +1 -1
- package/dist/chunks/{depositStatus-C3-EgT2a.cjs → depositStatus-CUjHpXFJ.cjs} +2 -2
- package/dist/chunks/{depositStatus-C3-EgT2a.cjs.map → depositStatus-CUjHpXFJ.cjs.map} +1 -1
- package/dist/chunks/events-5c8IHjEF.cjs +2 -0
- package/dist/chunks/events-5c8IHjEF.cjs.map +1 -0
- package/dist/chunks/{events-DdV_xi-2.js → events-rgJZNpHd.js} +414 -303
- package/dist/chunks/events-rgJZNpHd.js.map +1 -0
- package/dist/chunks/evm-by-btc-address-CZvE15lx.js +39 -0
- package/dist/chunks/{evm-by-btc-address-CwLiENtM.js.map → evm-by-btc-address-CZvE15lx.js.map} +1 -1
- package/dist/chunks/fee-requirements-CCNsxAvJ.js +14 -0
- package/dist/chunks/{fee-requirements-x8-8mpJ7.js.map → fee-requirements-CCNsxAvJ.js.map} +1 -1
- package/dist/chunks/get-exchange-ratio-B-xzYND1.js +20 -0
- package/dist/chunks/{get-exchange-ratio-NtnkG1kZ.js.map → get-exchange-ratio-B-xzYND1.js.map} +1 -1
- package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs → get-exchange-ratio-BEhD4gLB.cjs} +2 -2
- package/dist/chunks/{get-exchange-ratio-C-7DadfD.cjs.map → get-exchange-ratio-BEhD4gLB.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs → get-positions-summary-Dh1QPLYO.cjs} +2 -2
- package/dist/chunks/{get-positions-summary-DkZZYbGP.cjs.map → get-positions-summary-Dh1QPLYO.cjs.map} +1 -1
- package/dist/chunks/{get-positions-summary-B_MmGHLv.js → get-positions-summary-iYshN1RQ.js} +28 -28
- package/dist/chunks/{get-positions-summary-B_MmGHLv.js.map → get-positions-summary-iYshN1RQ.js.map} +1 -1
- package/dist/chunks/{get-vault-tvl-YAXePAW3.js → get-vault-tvl-Ct_Zkg7C.js} +41 -41
- package/dist/chunks/{get-vault-tvl-YAXePAW3.js.map → get-vault-tvl-Ct_Zkg7C.js.map} +1 -1
- package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs → get-vault-tvl-D_tQIDAs.cjs} +2 -2
- package/dist/chunks/{get-vault-tvl-DmTUbOY7.cjs.map → get-vault-tvl-D_tQIDAs.cjs.map} +1 -1
- package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs → get-vault-withdrawals-8ALlEiAC.cjs} +2 -2
- package/dist/chunks/{get-vault-withdrawals-CWcYy_sH.cjs.map → get-vault-withdrawals-8ALlEiAC.cjs.map} +1 -1
- package/dist/chunks/get-vault-withdrawals-jk7Sv4S4.js +161 -0
- package/dist/chunks/{get-vault-withdrawals-BrpZlt6s.js.map → get-vault-withdrawals-jk7Sv4S4.js.map} +1 -1
- package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs → getSharesByAddress-D8hehnP1.cjs} +2 -2
- package/dist/chunks/{getSharesByAddress-BEgOf1C0.cjs.map → getSharesByAddress-D8hehnP1.cjs.map} +1 -1
- package/dist/chunks/{getSharesByAddress-BiruCDp6.js → getSharesByAddress-_tBaIBsw.js} +38 -38
- package/dist/chunks/{getSharesByAddress-BiruCDp6.js.map → getSharesByAddress-_tBaIBsw.js.map} +1 -1
- package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs +2 -0
- package/dist/chunks/getUserStakeAndBakeSignature-CSEyzgMc.cjs.map +1 -0
- package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js +125 -0
- package/dist/chunks/getUserStakeAndBakeSignature-Su-k10ap.js.map +1 -0
- package/dist/chunks/lbtc-addresses-D8MYCdsx.js +10 -0
- package/dist/chunks/{lbtc-addresses-BLRmtR3c.js.map → lbtc-addresses-D8MYCdsx.js.map} +1 -1
- package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs → lbtc-addresses-Kil252DX.cjs} +2 -2
- package/dist/chunks/{lbtc-addresses-xyTYV7hx.cjs.map → lbtc-addresses-Kil252DX.cjs.map} +1 -1
- package/dist/chunks/numbers-CclN2Ohk.js +15 -0
- package/dist/chunks/{numbers-CM-lcmt4.js.map → numbers-CclN2Ohk.js.map} +1 -1
- package/dist/chunks/parameters-C_16L5ft.js +11 -0
- package/dist/chunks/{parameters-CDV-6Hk5.js.map → parameters-C_16L5ft.js.map} +1 -1
- package/dist/chunks/satoshi-CSoJBXc6.js +19 -0
- package/dist/chunks/{satoshi-Ch6y8aYG.js.map → satoshi-CSoJBXc6.js.map} +1 -1
- package/dist/chunks/statusConstants-Cri7yswV.cjs +2 -0
- package/dist/chunks/statusConstants-Cri7yswV.cjs.map +1 -0
- package/dist/chunks/{statusConstants-DFxMrVob.js → statusConstants-Zii1786K.js} +1134 -1113
- package/dist/chunks/statusConstants-Zii1786K.js.map +1 -0
- package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js → storeNetworkFeeSignature-BODIpq3Y.js} +26 -26
- package/dist/chunks/{storeNetworkFeeSignature-BZGL2Zn_.js.map → storeNetworkFeeSignature-BODIpq3Y.js.map} +1 -1
- package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs → storeNetworkFeeSignature-Buk4091C.cjs} +2 -2
- package/dist/chunks/{storeNetworkFeeSignature-D7yo6lDV.cjs.map → storeNetworkFeeSignature-Buk4091C.cjs.map} +1 -1
- package/dist/chunks/time-Sa5gggPG.js +24 -0
- package/dist/chunks/{time-QPeEEEnQ.js.map → time-Sa5gggPG.js.map} +1 -1
- package/dist/chunks/{token-addresses-FKpA3uc4.js → token-addresses-D0v5cR1j.js} +174 -163
- package/dist/chunks/{token-addresses-FKpA3uc4.js.map → token-addresses-D0v5cR1j.js.map} +1 -1
- package/dist/chunks/{token-addresses-DRBecUa7.cjs → token-addresses-nzvTOi24.cjs} +2 -2
- package/dist/chunks/{token-addresses-DRBecUa7.cjs.map → token-addresses-nzvTOi24.cjs.map} +1 -1
- package/dist/chunks/{tokens-D_HeVB5p.cjs → tokens-BkvA0Gp1.cjs} +2 -2
- package/dist/chunks/{tokens-D_HeVB5p.cjs.map → tokens-BkvA0Gp1.cjs.map} +1 -1
- package/dist/chunks/{tokens-C6qZHzph.js → tokens-DgC1hfkm.js} +18 -18
- package/dist/chunks/{tokens-C6qZHzph.js.map → tokens-DgC1hfkm.js.map} +1 -1
- package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs → unstakeLBTC-CmoCaGX9.cjs} +2 -2
- package/dist/chunks/{unstakeLBTC-H0zdYQa6.cjs.map → unstakeLBTC-CmoCaGX9.cjs.map} +1 -1
- package/dist/chunks/{unstakeLBTC-DAIR9NO_.js → unstakeLBTC-DtvVbpbU.js} +50 -50
- package/dist/chunks/{unstakeLBTC-DAIR9NO_.js.map → unstakeLBTC-DtvVbpbU.js.map} +1 -1
- package/dist/chunks/{withdraw-hHueI2p7.js → withdraw-DgjuaUN3.js} +45 -45
- package/dist/chunks/{withdraw-hHueI2p7.js.map → withdraw-DgjuaUN3.js.map} +1 -1
- package/dist/chunks/{withdraw-C1fMFSwy.cjs → withdraw-i0AueZ_C.cjs} +2 -2
- package/dist/chunks/{withdraw-C1fMFSwy.cjs.map → withdraw-i0AueZ_C.cjs.map} +1 -1
- package/dist/common/constants.d.ts +1 -0
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/contracts.cjs +1 -1
- package/dist/contracts.js +16 -16
- package/dist/core/assets/catalog.d.ts.map +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +85 -85
- package/dist/debug.js +4 -4
- package/dist/defi.cjs +1 -1
- package/dist/defi.js +10 -10
- package/dist/evm.cjs +1 -1
- package/dist/evm.js +34 -34
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +287 -283
- package/dist/index.js.map +1 -1
- package/dist/metrics.cjs +1 -1
- package/dist/metrics.js +6 -6
- package/dist/stories/arg-types.d.ts +1 -0
- package/dist/stories/arg-types.d.ts.map +1 -1
- package/dist/tokens/token-addresses.d.ts +2 -2
- package/dist/tokens/token-addresses.d.ts.map +1 -1
- package/dist/utils/chain.d.ts +7 -0
- package/dist/utils/chain.d.ts.map +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +76 -76
- package/dist/vaults.cjs +1 -1
- package/dist/vaults.js +14 -14
- package/package.json +19 -6
- package/dist/chunks/BtcActions-XbVRQEcM.cjs +0 -2
- package/dist/chunks/BtcActions-XbVRQEcM.cjs.map +0 -1
- package/dist/chunks/BtcActions-k-qs1uO0.js.map +0 -1
- package/dist/chunks/EvmActions-BVzQ3fLK.cjs +0 -2
- package/dist/chunks/EvmActions-BVzQ3fLK.cjs.map +0 -1
- package/dist/chunks/EvmActions-B_dF42So.js.map +0 -1
- package/dist/chunks/ReferralsClient-BC-1wT1q.cjs +0 -2
- package/dist/chunks/ReferralsClient-BC-1wT1q.cjs.map +0 -1
- package/dist/chunks/ReferralsClient-DbFWWtVi.js.map +0 -1
- package/dist/chunks/approveLBTC-B5-ZWqct.js +0 -26
- package/dist/chunks/constants-BBK-JNcY.cjs +0 -2
- package/dist/chunks/constants-BBK-JNcY.cjs.map +0 -1
- package/dist/chunks/constants-CuT4axsy.js +0 -5
- package/dist/chunks/constants-CuT4axsy.js.map +0 -1
- package/dist/chunks/events-DdV_xi-2.js.map +0 -1
- package/dist/chunks/events-DqIJRzJo.cjs +0 -2
- package/dist/chunks/events-DqIJRzJo.cjs.map +0 -1
- package/dist/chunks/evm-by-btc-address-CwLiENtM.js +0 -39
- package/dist/chunks/fee-requirements-x8-8mpJ7.js +0 -14
- package/dist/chunks/get-exchange-ratio-NtnkG1kZ.js +0 -20
- package/dist/chunks/get-vault-withdrawals-BrpZlt6s.js +0 -161
- package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs +0 -2
- package/dist/chunks/getUserStakeAndBakeSignature-BxRq2cI1.cjs.map +0 -1
- package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js +0 -120
- package/dist/chunks/getUserStakeAndBakeSignature-NGGblnJl.js.map +0 -1
- package/dist/chunks/lbtc-addresses-BLRmtR3c.js +0 -10
- package/dist/chunks/numbers-CM-lcmt4.js +0 -15
- package/dist/chunks/parameters-CDV-6Hk5.js +0 -11
- package/dist/chunks/satoshi-Ch6y8aYG.js +0 -19
- package/dist/chunks/statusConstants-BLiNBT6s.cjs +0 -2
- package/dist/chunks/statusConstants-BLiNBT6s.cjs.map +0 -1
- package/dist/chunks/statusConstants-DFxMrVob.js.map +0 -1
- package/dist/chunks/time-QPeEEEnQ.js +0 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-CTsiodO1.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
|
+
{"version":3,"file":"bridge-DqGabhIY.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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"}
|