{"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":[]}