UNPKG

@xlink-network/xlink-sdk

Version:
1 lines 8.73 kB
{"version":3,"sources":["../src/bitcoinUtils/peggingHelpers.ts"],"sourcesContent":["import { callReadOnlyFunction } from \"@stacks/transactions\"\nimport { CallReadOnlyFunctionFn } from \"clarity-codegen\"\nimport { fromCorrespondingStacksToken } from \"../evmUtils/peggingHelpers\"\nimport { getEVMTokenContractInfo } from \"../evmUtils/xlinkContractHelpers\"\nimport { stxTokenContractAddresses } from \"../stacksUtils/stxContractAddresses\"\nimport {\n executeReadonlyCallXLINK,\n getStacksContractCallInfo,\n numberFromStacksContractNumber,\n} from \"../stacksUtils/xlinkContractHelpers\"\nimport { BigNumber } from \"../utils/BigNumber\"\nimport {\n IsSupportedFn,\n KnownRoute_FromBitcoin_ToStacks,\n KnownRoute_FromStacks_ToBitcoin,\n} from \"../utils/buildSupportedRoutes\"\nimport { props } from \"../utils/promiseHelpers\"\nimport { checkNever } from \"../utils/typeHelpers\"\nimport { TransferProphet } from \"../utils/types/TransferProphet\"\nimport {\n _allNoLongerSupportedEVMChains,\n KnownChainId,\n KnownTokenId,\n} from \"../utils/types/knownIds\"\nimport { getBTCPegInAddress } from \"./btcAddresses\"\n\nexport const getBtc2StacksFeeInfo = async (\n route: KnownRoute_FromBitcoin_ToStacks,\n): Promise<undefined | TransferProphet> => {\n const stacksContractCallInfo = getStacksContractCallInfo(\n route.toChain,\n \"btc-peg-in-endpoint-v2-05\",\n )\n if (stacksContractCallInfo == null) return\n\n const executeOptions = {\n deployerAddress: stacksContractCallInfo.deployerAddress,\n callReadOnlyFunction: (callOptions =>\n callReadOnlyFunction({\n ...callOptions,\n network: stacksContractCallInfo.network,\n })) satisfies CallReadOnlyFunctionFn,\n }\n\n const resp = await props({\n isPaused: executeReadonlyCallXLINK(\n stacksContractCallInfo.contractName,\n \"is-peg-in-paused\",\n {},\n executeOptions,\n ),\n feeRate: executeReadonlyCallXLINK(\n stacksContractCallInfo.contractName,\n \"get-peg-in-fee\",\n {},\n executeOptions,\n ).then(numberFromStacksContractNumber),\n minFeeAmount: executeReadonlyCallXLINK(\n stacksContractCallInfo.contractName,\n \"get-peg-in-min-fee\",\n {},\n executeOptions,\n ).then(numberFromStacksContractNumber),\n })\n\n return {\n isPaused: resp.isPaused,\n bridgeToken: route.fromToken,\n fees: [\n {\n type: \"rate\",\n token: route.fromToken,\n rate: resp.feeRate,\n minimumAmount: resp.minFeeAmount,\n },\n ],\n minBridgeAmount: BigNumber.isZero(resp.minFeeAmount)\n ? null\n : resp.minFeeAmount,\n maxBridgeAmount: null,\n }\n}\n\nexport const getStacks2BtcFeeInfo = async (\n route: KnownRoute_FromStacks_ToBitcoin,\n): Promise<undefined | TransferProphet> => {\n const stacksContractCallInfo = getStacksContractCallInfo(\n route.fromChain,\n \"btc-peg-out-endpoint-v2-01\",\n )\n if (stacksContractCallInfo == null) return\n\n const executeOptions = {\n deployerAddress: stacksContractCallInfo.deployerAddress,\n callReadOnlyFunction: (callOptions =>\n callReadOnlyFunction({\n ...callOptions,\n network: stacksContractCallInfo.network,\n })) satisfies CallReadOnlyFunctionFn,\n }\n\n const resp = await props({\n isPaused: executeReadonlyCallXLINK(\n stacksContractCallInfo.contractName,\n \"is-peg-out-paused\",\n {},\n executeOptions,\n ),\n feeRate: executeReadonlyCallXLINK(\n stacksContractCallInfo.contractName,\n \"get-peg-out-fee\",\n {},\n executeOptions,\n ).then(numberFromStacksContractNumber),\n minFeeAmount: executeReadonlyCallXLINK(\n stacksContractCallInfo.contractName,\n \"get-peg-out-min-fee\",\n {},\n executeOptions,\n ).then(numberFromStacksContractNumber),\n })\n\n return {\n isPaused: resp.isPaused,\n bridgeToken: route.fromToken,\n fees: [\n {\n type: \"rate\",\n token: route.fromToken,\n rate: resp.feeRate,\n minimumAmount: resp.minFeeAmount,\n },\n ],\n minBridgeAmount: BigNumber.isZero(resp.minFeeAmount)\n ? null\n : resp.minFeeAmount,\n maxBridgeAmount: null,\n }\n}\n\nexport const isSupportedBitcoinRoute: IsSupportedFn = async (ctx, route) => {\n const { fromChain, toChain, fromToken, toToken } = route\n\n if (fromChain === toChain && fromToken === toToken) {\n return false\n }\n\n if (\n KnownChainId.isEVMChain(fromChain) &&\n _allNoLongerSupportedEVMChains.includes(fromChain)\n ) {\n return false\n }\n if (\n KnownChainId.isEVMChain(toChain) &&\n _allNoLongerSupportedEVMChains.includes(toChain)\n ) {\n return false\n }\n\n if (\n !KnownChainId.isBitcoinChain(fromChain) ||\n !KnownTokenId.isBitcoinToken(fromToken)\n ) {\n return false\n }\n if (!KnownChainId.isKnownChain(toChain)) return false\n\n const pegInAddress = getBTCPegInAddress(fromChain, toChain)\n if (pegInAddress == null) return false\n\n if (KnownChainId.isBitcoinChain(toChain)) {\n return false\n }\n if (KnownChainId.isRunesChain(toChain)) {\n return false\n }\n if (KnownChainId.isBRC20Chain(toChain)) {\n return false\n }\n\n if (KnownChainId.isStacksChain(toChain)) {\n if (!KnownTokenId.isStacksToken(toToken)) return false\n\n return (\n fromToken === KnownTokenId.Bitcoin.BTC &&\n toToken === KnownTokenId.Stacks.aBTC &&\n stxTokenContractAddresses[toToken]?.[toChain] != null\n )\n }\n\n if (KnownChainId.isEVMChain(toChain)) {\n if (!KnownTokenId.isEVMToken(toToken)) return false\n\n const info = await getEVMTokenContractInfo(ctx, toChain, toToken)\n if (info == null) return false\n\n const toEVMTokens = await fromCorrespondingStacksToken(\n toChain,\n KnownTokenId.Stacks.aBTC,\n )\n return toEVMTokens.includes(toToken as any)\n }\n\n checkNever(toChain)\n return false\n}\n"],"mappings":"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","names":[]}