UNPKG

@xlink-network/xlink-sdk

Version:
302 lines (300 loc) 8.87 kB
import { transformToPublicTransferProphet, transformToPublicTransferProphetAggregated } from "./chunk-6SXUQECQ.mjs"; import { getStacks2BtcFeeInfo } from "./chunk-DAZBH3JI.mjs"; import { supportedRoutes } from "./chunk-JQWEO2ZM.mjs"; import { getStacks2MetaFeeInfo } from "./chunk-UPYNSDGA.mjs"; import { getEvm2StacksFeeInfo, getStacks2EvmFeeInfo, toCorrespondingStacksToken } from "./chunk-COUTRDKA.mjs"; import { getEVMTokenContractInfo } from "./chunk-UJDCORME.mjs"; import { nativeCurrencyAddress } from "./chunk-ZXKZ4Z37.mjs"; import { UnsupportedBridgeRouteError } from "./chunk-KTUPNUM5.mjs"; import { KnownChainId, KnownTokenId } from "./chunk-GZDQGY7B.mjs"; import { assertExclude, checkNever } from "./chunk-E5Y3FGR6.mjs"; import { BigNumber } from "./chunk-KHTJNOQE.mjs"; // src/xlinkSdkUtils/bridgeInfoFromEVM.ts async function bridgeInfoFromEVM(ctx, info) { const route = await supportedRoutes.checkRouteValid(ctx, info); if (KnownChainId.isEVMChain(route.fromChain)) { if (KnownChainId.isStacksChain(route.toChain)) { if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isStacksToken(route.toToken)) { return bridgeInfoFromEVM_toStacks(ctx, { ...info, fromChain: route.fromChain, toChain: route.toChain, fromToken: route.fromToken, toToken: route.toToken }); } } else if (KnownChainId.isBitcoinChain(route.toChain)) { if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isBitcoinToken(route.toToken)) { return bridgeInfoFromEVM_toBitcoin(ctx, { ...info, fromChain: route.fromChain, toChain: route.toChain, fromToken: route.fromToken, toToken: route.toToken }); } } else if (KnownChainId.isEVMChain(route.toChain)) { if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isEVMToken(route.toToken)) { return bridgeInfoFromEVM_toEVM(ctx, { ...info, fromChain: route.fromChain, toChain: route.toChain, fromToken: route.fromToken, toToken: route.toToken }); } } else if (KnownChainId.isBRC20Chain(route.toChain)) { if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isBRC20Token(route.toToken)) { return bridgeInfoFromEVM_toMeta(ctx, { ...info, fromChain: route.fromChain, toChain: route.toChain, fromToken: route.fromToken, toToken: route.toToken }); } } else if (KnownChainId.isRunesChain(route.toChain)) { if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isRunesToken(route.toToken)) { return bridgeInfoFromEVM_toMeta(ctx, { ...info, fromChain: route.fromChain, toChain: route.toChain, fromToken: route.fromToken, toToken: route.toToken }); } } else { checkNever(route.toChain); } } else { assertExclude(route.fromChain, assertExclude.i()); assertExclude(route.fromChain, assertExclude.i()); checkNever(route); } throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } async function bridgeInfoFromEVM_toStacks(ctx, info) { const step1 = await getEvm2StacksFeeInfo(ctx, info); const evmTokenContractCallInfo = await getEVMTokenContractInfo( ctx, info.fromChain, info.fromToken ); if (step1 == null || evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress) { throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } return { ...transformToPublicTransferProphet(info, info.amount, step1), transferProphets: [] }; } async function bridgeInfoFromEVM_toBitcoin(ctx, info) { const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain) ? KnownChainId.Stacks.Mainnet : KnownChainId.Stacks.Testnet; const transitStacksToken = await toCorrespondingStacksToken(info.fromToken); if (transitStacksToken == null) { throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } const step1Route = { fromChain: info.fromChain, fromToken: info.fromToken, toChain: transitStacksChain, toToken: transitStacksToken }; const step2Route = { fromChain: transitStacksChain, fromToken: transitStacksToken, toChain: info.toChain, toToken: info.toToken }; const [step1, step2] = await Promise.all([ getEvm2StacksFeeInfo(ctx, step1Route), getStacks2BtcFeeInfo(step2Route) ]); if (step1 == null || step2 == null) { throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } const step1TransferProphet = transformToPublicTransferProphet( step1Route, info.amount, step1 ); const step2TransferProphet = transformToPublicTransferProphet( step2Route, step1TransferProphet.toAmount, step2 ); return { ...transformToPublicTransferProphetAggregated( [step1TransferProphet, step2TransferProphet], [BigNumber.ONE] ), transferProphets: [step1TransferProphet, step2TransferProphet] }; } async function bridgeInfoFromEVM_toEVM(ctx, info) { const evmTokenContractCallInfo = await getEVMTokenContractInfo( ctx, info.fromChain, info.fromToken ); const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain) ? KnownChainId.Stacks.Mainnet : KnownChainId.Stacks.Testnet; const transitStacksToken = await toCorrespondingStacksToken(info.fromToken); if (transitStacksToken == null || evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress) { throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } const step1Route = { fromChain: info.fromChain, fromToken: info.fromToken, toChain: transitStacksChain, toToken: transitStacksToken }; const step2Route = { fromChain: transitStacksChain, fromToken: transitStacksToken, toChain: info.toChain, toToken: info.toToken }; const [step1, step2] = await Promise.all([ getEvm2StacksFeeInfo(ctx, step1Route), getStacks2EvmFeeInfo(step2Route) ]); if (step1 == null || step2 == null) { throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } const step1TransferProphet = transformToPublicTransferProphet( step1Route, info.amount, step1 ); const step2TransferProphet = transformToPublicTransferProphet( step2Route, step1TransferProphet.toAmount, step2 ); return { ...transformToPublicTransferProphetAggregated( [step1TransferProphet, step2TransferProphet], [BigNumber.ONE] ), transferProphets: [step1TransferProphet, step2TransferProphet] }; } async function bridgeInfoFromEVM_toMeta(ctx, info) { const evmTokenContractCallInfo = await getEVMTokenContractInfo( ctx, info.fromChain, info.fromToken ); const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain) ? KnownChainId.Stacks.Mainnet : KnownChainId.Stacks.Testnet; const transitStacksToken = await toCorrespondingStacksToken(info.fromToken); if (transitStacksToken == null || evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress) { throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } const step1Route = { fromChain: info.fromChain, fromToken: info.fromToken, toChain: transitStacksChain, toToken: transitStacksToken }; const step2Route = { fromChain: transitStacksChain, fromToken: transitStacksToken, toChain: info.toChain, toToken: info.toToken }; const [step1, step2] = await Promise.all([ getEvm2StacksFeeInfo(ctx, step1Route), getStacks2MetaFeeInfo(ctx, step2Route) ]); if (step1 == null || step2 == null) { throw new UnsupportedBridgeRouteError( info.fromChain, info.toChain, info.fromToken, info.toToken ); } const step1TransferProphet = transformToPublicTransferProphet( step1Route, info.amount, step1 ); const step2TransferProphet = transformToPublicTransferProphet( step2Route, step1TransferProphet.toAmount, step2 ); return { ...transformToPublicTransferProphetAggregated( [step1TransferProphet, step2TransferProphet], [BigNumber.ONE] ), transferProphets: [step1TransferProphet, step2TransferProphet] }; } export { bridgeInfoFromEVM }; //# sourceMappingURL=chunk-JQD6DHL4.mjs.map