UNPKG

@xlink-network/xlink-sdk

Version:
1 lines 16.3 kB
{"version":3,"sources":["../src/xlinkSdkUtils/bridgeInfoFromEVM.ts"],"sourcesContent":["import { getStacks2BtcFeeInfo } from \"../bitcoinUtils/peggingHelpers\"\nimport { nativeCurrencyAddress } from \"../evmUtils/addressHelpers\"\nimport {\n getEvm2StacksFeeInfo,\n getStacks2EvmFeeInfo,\n toCorrespondingStacksToken,\n} from \"../evmUtils/peggingHelpers\"\nimport { getEVMTokenContractInfo } from \"../evmUtils/xlinkContractHelpers\"\nimport { getStacks2MetaFeeInfo } from \"../metaUtils/peggingHelpers\"\nimport { BigNumber } from \"../utils/BigNumber\"\nimport {\n KnownRoute,\n KnownRoute_FromEVM_ToBitcoin,\n KnownRoute_FromEVM_ToBRC20,\n KnownRoute_FromEVM_ToEVM,\n KnownRoute_FromEVM_ToRunes,\n KnownRoute_FromEVM_ToStacks,\n KnownRoute_FromStacks_ToBRC20,\n KnownRoute_FromStacks_ToRunes,\n} from \"../utils/buildSupportedRoutes\"\nimport { UnsupportedBridgeRouteError } from \"../utils/errors\"\nimport { assertExclude, checkNever } from \"../utils/typeHelpers\"\nimport {\n PublicTransferProphetAggregated,\n transformToPublicTransferProphet,\n transformToPublicTransferProphetAggregated,\n} from \"../utils/types/TransferProphet\"\nimport { KnownChainId, KnownTokenId } from \"../utils/types/knownIds\"\nimport { supportedRoutes } from \"./bridgeFromEVM\"\nimport { ChainId, SDKNumber, TokenId } from \"./types\"\nimport { SDKGlobalContext } from \"./types.internal\"\n\nexport interface BridgeInfoFromEVMInput {\n fromChain: ChainId\n toChain: ChainId\n fromToken: TokenId\n toToken: TokenId\n amount: SDKNumber\n}\n\nexport interface BridgeInfoFromEVMOutput\n extends PublicTransferProphetAggregated {}\n\nexport async function bridgeInfoFromEVM(\n ctx: SDKGlobalContext,\n info: BridgeInfoFromEVMInput,\n): Promise<BridgeInfoFromEVMOutput> {\n const route = await supportedRoutes.checkRouteValid(ctx, info)\n\n if (KnownChainId.isEVMChain(route.fromChain)) {\n if (KnownChainId.isStacksChain(route.toChain)) {\n if (\n KnownTokenId.isEVMToken(route.fromToken) &&\n KnownTokenId.isStacksToken(route.toToken)\n ) {\n return bridgeInfoFromEVM_toStacks(ctx, {\n ...info,\n fromChain: route.fromChain,\n toChain: route.toChain,\n fromToken: route.fromToken,\n toToken: route.toToken,\n })\n }\n } else if (KnownChainId.isBitcoinChain(route.toChain)) {\n if (\n KnownTokenId.isEVMToken(route.fromToken) &&\n KnownTokenId.isBitcoinToken(route.toToken)\n ) {\n return bridgeInfoFromEVM_toBitcoin(ctx, {\n ...info,\n fromChain: route.fromChain,\n toChain: route.toChain,\n fromToken: route.fromToken,\n toToken: route.toToken,\n })\n }\n } else if (KnownChainId.isEVMChain(route.toChain)) {\n if (\n KnownTokenId.isEVMToken(route.fromToken) &&\n KnownTokenId.isEVMToken(route.toToken)\n ) {\n return bridgeInfoFromEVM_toEVM(ctx, {\n ...info,\n fromChain: route.fromChain,\n toChain: route.toChain,\n fromToken: route.fromToken,\n toToken: route.toToken,\n })\n }\n } else if (KnownChainId.isBRC20Chain(route.toChain)) {\n if (\n KnownTokenId.isEVMToken(route.fromToken) &&\n KnownTokenId.isBRC20Token(route.toToken)\n ) {\n return bridgeInfoFromEVM_toMeta(ctx, {\n ...info,\n fromChain: route.fromChain,\n toChain: route.toChain,\n fromToken: route.fromToken,\n toToken: route.toToken,\n })\n }\n } else if (KnownChainId.isRunesChain(route.toChain)) {\n if (\n KnownTokenId.isEVMToken(route.fromToken) &&\n KnownTokenId.isRunesToken(route.toToken)\n ) {\n return bridgeInfoFromEVM_toMeta(ctx, {\n ...info,\n fromChain: route.fromChain,\n toChain: route.toChain,\n fromToken: route.fromToken,\n toToken: route.toToken,\n })\n }\n } else {\n checkNever(route.toChain)\n }\n } else {\n assertExclude(route.fromChain, assertExclude.i<KnownChainId.StacksChain>())\n assertExclude(route.fromChain, assertExclude.i<KnownChainId.BitcoinChain>())\n checkNever(route)\n }\n\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n}\n\nasync function bridgeInfoFromEVM_toStacks(\n ctx: SDKGlobalContext,\n info: Omit<\n BridgeInfoFromEVMInput,\n \"fromChain\" | \"toChain\" | \"fromToken\" | \"toToken\"\n > &\n KnownRoute_FromEVM_ToStacks,\n): Promise<BridgeInfoFromEVMOutput> {\n const step1 = await getEvm2StacksFeeInfo(ctx, info)\n const evmTokenContractCallInfo = await getEVMTokenContractInfo(\n ctx,\n info.fromChain,\n info.fromToken,\n )\n if (\n step1 == null ||\n evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress\n ) {\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n }\n\n return {\n ...transformToPublicTransferProphet(info, info.amount, step1),\n transferProphets: [],\n }\n}\n\nasync function bridgeInfoFromEVM_toBitcoin(\n ctx: SDKGlobalContext,\n info: Omit<\n BridgeInfoFromEVMInput,\n \"fromChain\" | \"toChain\" | \"fromToken\" | \"toToken\"\n > &\n KnownRoute_FromEVM_ToBitcoin,\n): Promise<BridgeInfoFromEVMOutput> {\n const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain)\n ? KnownChainId.Stacks.Mainnet\n : KnownChainId.Stacks.Testnet\n const transitStacksToken = await toCorrespondingStacksToken(info.fromToken)\n if (transitStacksToken == null) {\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n }\n\n const step1Route: KnownRoute = {\n fromChain: info.fromChain,\n fromToken: info.fromToken,\n toChain: transitStacksChain,\n toToken: transitStacksToken,\n }\n const step2Route: KnownRoute = {\n fromChain: transitStacksChain,\n fromToken: transitStacksToken,\n toChain: info.toChain,\n toToken: info.toToken,\n }\n\n const [step1, step2] = await Promise.all([\n getEvm2StacksFeeInfo(ctx, step1Route),\n getStacks2BtcFeeInfo(step2Route),\n ])\n if (step1 == null || step2 == null) {\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n }\n\n const step1TransferProphet = transformToPublicTransferProphet(\n step1Route,\n info.amount,\n step1,\n )\n const step2TransferProphet = transformToPublicTransferProphet(\n step2Route,\n step1TransferProphet.toAmount,\n step2,\n )\n\n return {\n ...transformToPublicTransferProphetAggregated(\n [step1TransferProphet, step2TransferProphet],\n [BigNumber.ONE],\n ),\n transferProphets: [step1TransferProphet, step2TransferProphet],\n }\n}\n\nasync function bridgeInfoFromEVM_toEVM(\n ctx: SDKGlobalContext,\n info: Omit<\n BridgeInfoFromEVMInput,\n \"fromChain\" | \"toChain\" | \"fromToken\" | \"toToken\"\n > &\n KnownRoute_FromEVM_ToEVM,\n): Promise<BridgeInfoFromEVMOutput> {\n const evmTokenContractCallInfo = await getEVMTokenContractInfo(\n ctx,\n info.fromChain,\n info.fromToken,\n )\n\n const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain)\n ? KnownChainId.Stacks.Mainnet\n : KnownChainId.Stacks.Testnet\n const transitStacksToken = await toCorrespondingStacksToken(info.fromToken)\n if (\n transitStacksToken == null ||\n evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress\n ) {\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n }\n\n const step1Route: KnownRoute = {\n fromChain: info.fromChain,\n fromToken: info.fromToken,\n toChain: transitStacksChain,\n toToken: transitStacksToken,\n }\n const step2Route: KnownRoute = {\n fromChain: transitStacksChain,\n fromToken: transitStacksToken,\n toChain: info.toChain,\n toToken: info.toToken,\n }\n\n const [step1, step2] = await Promise.all([\n getEvm2StacksFeeInfo(ctx, step1Route),\n getStacks2EvmFeeInfo(step2Route),\n ])\n if (step1 == null || step2 == null) {\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n }\n\n const step1TransferProphet = transformToPublicTransferProphet(\n step1Route,\n info.amount,\n step1,\n )\n const step2TransferProphet = transformToPublicTransferProphet(\n step2Route,\n step1TransferProphet.toAmount,\n step2,\n )\n\n return {\n ...transformToPublicTransferProphetAggregated(\n [step1TransferProphet, step2TransferProphet],\n [BigNumber.ONE],\n ),\n transferProphets: [step1TransferProphet, step2TransferProphet],\n }\n}\n\nasync function bridgeInfoFromEVM_toMeta(\n ctx: SDKGlobalContext,\n info: Omit<\n BridgeInfoFromEVMInput,\n \"fromChain\" | \"toChain\" | \"fromToken\" | \"toToken\"\n > &\n (KnownRoute_FromEVM_ToBRC20 | KnownRoute_FromEVM_ToRunes),\n): Promise<BridgeInfoFromEVMOutput> {\n const evmTokenContractCallInfo = await getEVMTokenContractInfo(\n ctx,\n info.fromChain,\n info.fromToken,\n )\n\n const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain)\n ? KnownChainId.Stacks.Mainnet\n : KnownChainId.Stacks.Testnet\n const transitStacksToken = await toCorrespondingStacksToken(info.fromToken)\n if (\n transitStacksToken == null ||\n evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress\n ) {\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n }\n\n const step1Route: KnownRoute = {\n fromChain: info.fromChain,\n fromToken: info.fromToken,\n toChain: transitStacksChain,\n toToken: transitStacksToken,\n }\n const step2Route:\n | KnownRoute_FromStacks_ToBRC20\n | KnownRoute_FromStacks_ToRunes = {\n fromChain: transitStacksChain,\n fromToken: transitStacksToken,\n toChain: info.toChain as any,\n toToken: info.toToken as any,\n }\n\n const [step1, step2] = await Promise.all([\n getEvm2StacksFeeInfo(ctx, step1Route),\n getStacks2MetaFeeInfo(ctx, step2Route),\n ])\n if (step1 == null || step2 == null) {\n throw new UnsupportedBridgeRouteError(\n info.fromChain,\n info.toChain,\n info.fromToken,\n info.toToken,\n )\n }\n\n const step1TransferProphet = transformToPublicTransferProphet(\n step1Route,\n info.amount,\n step1,\n )\n const step2TransferProphet = transformToPublicTransferProphet(\n step2Route,\n step1TransferProphet.toAmount,\n step2,\n )\n\n return {\n ...transformToPublicTransferProphetAggregated(\n [step1TransferProphet, step2TransferProphet],\n [BigNumber.ONE],\n ),\n transferProphets: [step1TransferProphet, step2TransferProphet],\n }\n}\n"],"mappings":"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","names":[]}