{"version":3,"sources":["../src/xlinkSdkUtils/bridgeFromStacks.ts"],"sourcesContent":["import * as btc from \"@scure/btc-signer\"\nimport { ContractCallOptions } from \"clarity-codegen\"\nimport { addressToScriptPubKey } from \"../bitcoinUtils/bitcoinHelpers\"\nimport { contractAssignedChainIdFromKnownChain } from \"../stacksUtils/crossContractDataMapping\"\nimport { isSupportedStacksRoute } from \"../stacksUtils/peggingHelpers\"\nimport {\n  composeTxXLINK,\n  getStacksContractCallInfo,\n  getStacksTokenContractInfo,\n  numberToStacksContractNumber,\n} from \"../stacksUtils/xlinkContractHelpers\"\nimport {\n  buildSupportedRoutes,\n  defineRoute,\n  KnownRoute_FromStacks_ToBitcoin,\n  KnownRoute_FromStacks_ToBRC20,\n  KnownRoute_FromStacks_ToEVM,\n  KnownRoute_FromStacks_ToRunes,\n} from \"../utils/buildSupportedRoutes\"\nimport { UnsupportedBridgeRouteError } from \"../utils/errors\"\nimport { decodeHex } from \"../utils/hexHelpers\"\nimport { assertExclude, checkNever } from \"../utils/typeHelpers\"\nimport {\n  KnownChainId,\n  KnownTokenId,\n  _allKnownEVMMainnetChains,\n  _allKnownEVMTestnetChains,\n} from \"../utils/types/knownIds\"\nimport { ChainId, SDKNumber, TokenId } from \"./types\"\nimport { SDKGlobalContext } from \"./types.internal\"\nimport { getTerminatingStacksTokenContractAddress } from \"../stacksUtils/stxContractAddresses\"\n\nexport const supportedRoutes = buildSupportedRoutes(\n  [\n    // from mainnet\n    ...defineRoute(\n      // to Bitcoin\n      [[KnownChainId.Stacks.Mainnet], [KnownChainId.Bitcoin.Mainnet]],\n      [[KnownTokenId.Stacks.aBTC, KnownTokenId.Bitcoin.BTC]],\n    ),\n    ...defineRoute(\n      // to rest EVM chains\n      [[KnownChainId.Stacks.Mainnet], [..._allKnownEVMMainnetChains]],\n      [\n        // BTCs\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.aBTC],\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.WBTC],\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.BTCB],\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.cbBTC],\n        // USDTs\n        [KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.USDT],\n        [KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.sUSDT],\n        // others\n        [KnownTokenId.Stacks.sSKO, KnownTokenId.EVM.SKO],\n        [KnownTokenId.Stacks.ALEX, KnownTokenId.EVM.ALEX],\n        [KnownTokenId.Stacks.vLiSTX, KnownTokenId.EVM.vLiSTX],\n        [KnownTokenId.Stacks.vLiALEX, KnownTokenId.EVM.vLiALEX],\n        [KnownTokenId.Stacks.uBTC, KnownTokenId.EVM.uBTC],\n        [KnownTokenId.Stacks.uBTC, KnownTokenId.EVM.wuBTC],\n        [KnownTokenId.Stacks.DB20, KnownTokenId.EVM.DB20],\n        [KnownTokenId.Stacks.DOG, KnownTokenId.EVM.DOG],\n      ],\n    ),\n\n    // from testnet\n    ...defineRoute(\n      // to Bitcoin\n      [[KnownChainId.Stacks.Testnet], [KnownChainId.Bitcoin.Testnet]],\n      [[KnownTokenId.Stacks.aBTC, KnownTokenId.Bitcoin.BTC]],\n    ),\n    ...defineRoute(\n      // to rest EVM chains\n      [[KnownChainId.Stacks.Testnet], [..._allKnownEVMTestnetChains]],\n      [\n        // BTCs\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.aBTC],\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.WBTC],\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.BTCB],\n        [KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.cbBTC],\n        // USDTs\n        [KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.USDT],\n        [KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.sUSDT],\n        // others\n        [KnownTokenId.Stacks.sSKO, KnownTokenId.EVM.SKO],\n        [KnownTokenId.Stacks.ALEX, KnownTokenId.EVM.ALEX],\n        [KnownTokenId.Stacks.vLiSTX, KnownTokenId.EVM.vLiSTX],\n        [KnownTokenId.Stacks.vLiALEX, KnownTokenId.EVM.vLiALEX],\n        [KnownTokenId.Stacks.uBTC, KnownTokenId.EVM.uBTC],\n        [KnownTokenId.Stacks.uBTC, KnownTokenId.EVM.wuBTC],\n        [KnownTokenId.Stacks.DB20, KnownTokenId.EVM.DB20],\n        [KnownTokenId.Stacks.DOG, KnownTokenId.EVM.DOG],\n      ],\n    ),\n  ],\n  {\n    isSupported: isSupportedStacksRoute,\n  },\n)\n\nexport interface BridgeFromStacksInput {\n  fromChain: ChainId\n  toChain: ChainId\n  fromToken: TokenId\n  toToken: TokenId\n  fromAddress: string\n  toAddress: string\n  amount: SDKNumber\n  sendTransaction: (tx: ContractCallOptions) => Promise<{\n    txid: string\n  }>\n}\n\nexport interface BridgeFromStacksOutput {\n  txid: string\n}\n\nexport async function bridgeFromStacks(\n  ctx: SDKGlobalContext,\n  info: BridgeFromStacksInput,\n): Promise<BridgeFromStacksOutput> {\n  const route = await supportedRoutes.checkRouteValid(ctx, info)\n\n  if (KnownChainId.isStacksChain(route.fromChain)) {\n    if (KnownChainId.isBitcoinChain(route.toChain)) {\n      if (\n        KnownTokenId.isStacksToken(route.fromToken) &&\n        KnownTokenId.isBitcoinToken(route.toToken)\n      ) {\n        return bridgeFromStacks_toBitcoin({\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.isStacksToken(route.fromToken) &&\n        KnownTokenId.isEVMToken(route.toToken)\n      ) {\n        return bridgeFromStacks_toEVM({\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.isStacksToken(route.fromToken) &&\n        KnownTokenId.isBRC20Token(route.toToken)\n      ) {\n        return bridgeFromStacks_toMeta({\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.isStacksToken(route.fromToken) &&\n        KnownTokenId.isRunesToken(route.toToken)\n      ) {\n        return bridgeFromStacks_toMeta({\n          ...info,\n          fromChain: route.fromChain,\n          toChain: route.toChain,\n          fromToken: route.fromToken,\n          toToken: route.toToken,\n        })\n      }\n    } else {\n      assertExclude(route.toChain, assertExclude.i<KnownChainId.StacksChain>())\n      checkNever(route)\n    }\n  } else {\n    assertExclude(route.fromChain, assertExclude.i<KnownChainId.EVMChain>())\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 bridgeFromStacks_toBitcoin(\n  info: Omit<\n    BridgeFromStacksInput,\n    \"fromChain\" | \"toChain\" | \"fromToken\" | \"toToken\"\n  > &\n    KnownRoute_FromStacks_ToBitcoin,\n): Promise<BridgeFromStacksOutput> {\n  const contractCallInfo = getStacksContractCallInfo(\n    info.fromChain,\n    \"btc-peg-out-endpoint-v2-01\",\n  )\n  if (!contractCallInfo) {\n    throw new UnsupportedBridgeRouteError(\n      info.fromChain,\n      info.toChain,\n      info.fromToken,\n      info.toToken,\n    )\n  }\n\n  const bitcoinNetwork =\n    info.toChain === KnownChainId.Bitcoin.Mainnet\n      ? btc.NETWORK\n      : btc.TEST_NETWORK\n\n  const options = composeTxXLINK(\n    contractCallInfo.contractName,\n    \"request-peg-out-0\",\n    {\n      \"peg-out-address\": addressToScriptPubKey(bitcoinNetwork, info.toAddress),\n      amount: numberToStacksContractNumber(info.amount),\n    },\n    { deployerAddress: contractCallInfo.deployerAddress },\n  )\n\n  return await info.sendTransaction(options)\n}\n\nasync function bridgeFromStacks_toEVM(\n  info: Omit<\n    BridgeFromStacksInput,\n    \"fromChain\" | \"toChain\" | \"fromToken\" | \"toToken\"\n  > &\n    KnownRoute_FromStacks_ToEVM,\n): Promise<BridgeFromStacksOutput> {\n  const contractCallInfo = getStacksContractCallInfo(\n    info.fromChain,\n    \"cross-peg-out-endpoint-v2-01\",\n  )\n  const fromTokenContractInfo = getStacksTokenContractInfo(\n    info.fromChain,\n    info.fromToken,\n  )\n  if (contractCallInfo == null || fromTokenContractInfo == null) {\n    throw new UnsupportedBridgeRouteError(\n      info.fromChain,\n      info.toChain,\n      info.fromToken,\n      info.toToken,\n    )\n  }\n\n  const terminatingTokenContractAddress =\n    getTerminatingStacksTokenContractAddress(info) ?? fromTokenContractInfo\n\n  const options = composeTxXLINK(\n    contractCallInfo.contractName,\n    \"transfer-to-unwrap\",\n    {\n      \"token-trait\": `${terminatingTokenContractAddress.deployerAddress}.${terminatingTokenContractAddress.contractName}`,\n      \"amount-in-fixed\": numberToStacksContractNumber(info.amount),\n      \"dest-chain-id\": contractAssignedChainIdFromKnownChain(info.toChain),\n      \"settle-address\": decodeHex(info.toAddress),\n    },\n    { deployerAddress: contractCallInfo.deployerAddress },\n  )\n\n  return await info.sendTransaction(options)\n}\n\nasync function bridgeFromStacks_toMeta(\n  info: Omit<\n    BridgeFromStacksInput,\n    \"fromChain\" | \"toChain\" | \"fromToken\" | \"toToken\"\n  > &\n    (KnownRoute_FromStacks_ToBRC20 | KnownRoute_FromStacks_ToRunes),\n): Promise<BridgeFromStacksOutput> {\n  const contractCallInfo = getStacksContractCallInfo(\n    info.fromChain,\n    \"meta-peg-out-endpoint-v2-04\",\n  )\n  const fromTokenContractInfo = getStacksTokenContractInfo(\n    info.fromChain,\n    info.fromToken,\n  )\n  if (contractCallInfo == null || fromTokenContractInfo == null) {\n    throw new UnsupportedBridgeRouteError(\n      info.fromChain,\n      info.toChain,\n      info.fromToken,\n      info.toToken,\n    )\n  }\n\n  const bitcoinNetwork =\n    info.toChain === KnownChainId.BRC20.Mainnet ||\n    info.toChain === KnownChainId.Runes.Mainnet\n      ? btc.NETWORK\n      : btc.TEST_NETWORK\n\n  const options = composeTxXLINK(\n    contractCallInfo.contractName,\n    \"request-peg-out\",\n    {\n      \"peg-out-address\": addressToScriptPubKey(bitcoinNetwork, info.toAddress),\n      \"the-chain-id\": contractAssignedChainIdFromKnownChain(info.toChain),\n      \"token-trait\": `${fromTokenContractInfo.deployerAddress}.${fromTokenContractInfo.contractName}`,\n      amount: numberToStacksContractNumber(info.amount),\n    },\n    { deployerAddress: contractCallInfo.deployerAddress },\n  )\n\n  return await info.sendTransaction(options)\n}\n"],"mappings":"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","names":[]}