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