{"version":3,"sources":["../src/evmUtils/peggingHelpers.ts"],"sourcesContent":["import { callReadOnlyFunction } from \"@stacks/transactions\"\nimport { CallReadOnlyFunctionFn, unwrapResponse } from \"clarity-codegen\"\nimport { readContract } from \"viem/actions\"\nimport {\n  getBRC20SupportedRoutes,\n  getRunesSupportedRoutes,\n} from \"../metaUtils/xlinkContractHelpers\"\nimport { contractAssignedChainIdFromKnownChain } from \"../stacksUtils/crossContractDataMapping\"\nimport {\n  getTerminatingStacksTokenContractAddress,\n  stxTokenContractAddresses,\n} from \"../stacksUtils/stxContractAddresses\"\nimport {\n  executeReadonlyCallXLINK,\n  getStacksContractCallInfo,\n  getStacksTokenContractInfo,\n  numberFromStacksContractNumber,\n} from \"../stacksUtils/xlinkContractHelpers\"\nimport { BigNumber } from \"../utils/BigNumber\"\nimport {\n  IsSupportedFn,\n  KnownRoute_FromEVM_ToStacks,\n  KnownRoute_FromStacks_ToEVM,\n} from \"../utils/buildSupportedRoutes\"\nimport { props } from \"../utils/promiseHelpers\"\nimport { assertExclude, checkNever } from \"../utils/typeHelpers\"\nimport { TransferProphet } from \"../utils/types/TransferProphet\"\nimport {\n  _allNoLongerSupportedEVMChains,\n  KnownChainId,\n  KnownTokenId,\n} from \"../utils/types/knownIds\"\nimport { SDKGlobalContext } from \"../xlinkSdkUtils/types.internal\"\nimport { nativeCurrencyAddress } from \"./addressHelpers\"\nimport { BridgeEndpointAbi } from \"./contractAbi/bridgeEndpoint\"\nimport { BridgeRegistryAbi } from \"./contractAbi/bridgeRegistry\"\nimport {\n  getEVMContractCallInfo,\n  getEVMTokenContractInfo,\n  numberFromSolidityContractNumber,\n} from \"./xlinkContractHelpers\"\n\nexport const getEvm2StacksFeeInfo = async (\n  ctx: SDKGlobalContext,\n  route: KnownRoute_FromEVM_ToStacks,\n): Promise<undefined | TransferProphet> => {\n  const stacksContractCallInfo = getStacksContractCallInfo(\n    route.toChain,\n    \"cross-peg-in-endpoint-v2-04\",\n  )\n  const evmContractCallInfo = await getEVMContractCallInfo(ctx, route.fromChain)\n  const evmTokenContractCallInfo = await getEVMTokenContractInfo(\n    ctx,\n    route.fromChain,\n    route.fromToken,\n  )\n  if (\n    stacksContractCallInfo == null ||\n    evmContractCallInfo == null ||\n    evmTokenContractCallInfo == null\n  ) {\n    return\n  }\n\n  if (evmTokenContractCallInfo.tokenContractAddress === nativeCurrencyAddress) {\n    return getEvm2StacksNativeBridgeFeeInfo(ctx, route)\n  }\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 { client, tokenContractAddress } = evmTokenContractCallInfo\n\n  const registryAddr =\n    evmContractCallInfo.registryContractAddress ??\n    (await readContract(client, {\n      abi: BridgeEndpointAbi,\n      address: evmContractCallInfo.bridgeEndpointContractAddress,\n      functionName: \"registry\",\n    }))\n\n  const resp = await props({\n    isApproved: readContract(client, {\n      abi: BridgeRegistryAbi,\n      address: registryAddr,\n      functionName: \"APPROVED_TOKEN\",\n    }).then(key =>\n      readContract(client, {\n        abi: BridgeRegistryAbi,\n        address: registryAddr,\n        functionName: \"hasRole\",\n        args: [key, tokenContractAddress],\n      }),\n    ),\n    feeRate: readContract(client, {\n      abi: BridgeRegistryAbi,\n      address: registryAddr,\n      functionName: \"feePctPerToken\",\n      args: [tokenContractAddress],\n    }).then(numberFromSolidityContractNumber),\n    minFeeAmount: readContract(client, {\n      abi: BridgeRegistryAbi,\n      address: registryAddr,\n      functionName: \"minFeePerToken\",\n      args: [tokenContractAddress],\n    }).then(numberFromSolidityContractNumber),\n    minAmount: readContract(client, {\n      abi: BridgeRegistryAbi,\n      address: registryAddr,\n      functionName: \"minAmountPerToken\",\n      args: [tokenContractAddress],\n    }).then(numberFromSolidityContractNumber),\n    maxAmount: readContract(client, {\n      abi: BridgeRegistryAbi,\n      address: registryAddr,\n      functionName: \"maxAmountPerToken\",\n      args: [tokenContractAddress],\n    }).then(numberFromSolidityContractNumber),\n    isPaused: executeReadonlyCallXLINK(\n      stacksContractCallInfo.contractName,\n      \"get-paused\",\n      {},\n      executeOptions,\n    ),\n  })\n\n  if (!resp.isApproved) return undefined\n\n  const minAmount = BigNumber.max([resp.minAmount, resp.minFeeAmount])\n  const maxAmount = BigNumber.min([resp.maxAmount])\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(minAmount) ? null : minAmount,\n    maxBridgeAmount: BigNumber.isZero(maxAmount) ? null : maxAmount,\n  }\n}\n\nconst getEvm2StacksNativeBridgeFeeInfo = async (\n  ctx: SDKGlobalContext,\n  route: KnownRoute_FromEVM_ToStacks,\n): Promise<undefined | TransferProphet> => {\n  const stacksContractCallInfo = getStacksContractCallInfo(\n    route.toChain,\n    \"cross-peg-in-endpoint-v2-04\",\n  )\n  const evmContractCallInfo = await getEVMContractCallInfo(ctx, route.fromChain)\n  if (\n    stacksContractCallInfo == null ||\n    evmContractCallInfo?.nativeBridgeEndpointContractAddress == null\n  ) {\n    return\n  }\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      \"get-paused\",\n      {},\n      executeOptions,\n    ),\n  })\n\n  return {\n    isPaused: resp.isPaused,\n    bridgeToken: route.fromToken,\n    fees: [],\n    minBridgeAmount: null,\n    maxBridgeAmount: null,\n  }\n}\n\nexport const getStacks2EvmFeeInfo = async (\n  route: KnownRoute_FromStacks_ToEVM,\n): Promise<undefined | TransferProphet> => {\n  const stacksContractCallInfo = getStacksContractCallInfo(\n    route.fromChain,\n    \"cross-peg-out-endpoint-v2-01\",\n  )\n  const stacksTokenContractCallInfo = getStacksTokenContractInfo(\n    route.fromChain,\n    route.fromToken,\n  )\n  const toChainId = contractAssignedChainIdFromKnownChain(route.toChain)\n  if (stacksContractCallInfo == null || stacksTokenContractCallInfo == null) {\n    return\n  }\n\n  const terminatingStacksTokenAddress =\n    getTerminatingStacksTokenContractAddress(route) ??\n    stacksTokenContractCallInfo\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 tokenConf = await Promise.all([\n    executeReadonlyCallXLINK(\n      stacksContractCallInfo.contractName,\n      \"get-approved-pair-or-fail\",\n      {\n        pair: {\n          token: `${terminatingStacksTokenAddress.deployerAddress}.${terminatingStacksTokenAddress.contractName}`,\n          \"chain-id\": toChainId,\n        },\n      },\n      executeOptions,\n    ),\n    executeReadonlyCallXLINK(\n      stacksContractCallInfo.contractName,\n      \"get-paused\",\n      {},\n      executeOptions,\n    ),\n  ]).then(([resp, isPaused]) => {\n    if (resp.type !== \"success\") return undefined\n\n    return {\n      ...unwrapResponse(resp),\n      isPaused,\n    }\n  })\n\n  if (tokenConf == null) return undefined\n\n  const feeRate = numberFromStacksContractNumber(tokenConf.fee)\n  const minFee = numberFromStacksContractNumber(tokenConf[\"min-fee\"])\n  const reserve = numberFromStacksContractNumber(tokenConf.reserve)\n\n  const minAmount = BigNumber.max([\n    numberFromStacksContractNumber(tokenConf[\"min-amount\"]),\n    minFee,\n  ])\n  const maxAmount = BigNumber.min([\n    numberFromStacksContractNumber(tokenConf[\"max-amount\"]),\n    reserve,\n  ])\n\n  return {\n    isPaused: tokenConf.isPaused || tokenConf.approved === false,\n    bridgeToken: route.fromToken,\n    fees: [\n      {\n        type: \"rate\",\n        token: route.fromToken,\n        rate: feeRate,\n        minimumAmount: minFee,\n      },\n    ],\n    minBridgeAmount: BigNumber.isZero(minAmount) ? null : minAmount,\n    maxBridgeAmount: BigNumber.isZero(maxAmount) ? null : maxAmount,\n  }\n}\n\nexport async function fromCorrespondingStacksToken(\n  toChain: KnownChainId.EVMChain,\n  stacksToken: KnownTokenId.StacksToken,\n): Promise<KnownTokenId.EVMToken[]> {\n  const EVMToken = KnownTokenId.EVM\n  const StacksToken = KnownTokenId.Stacks\n\n  const restEVMTokenPossibilities = assertExclude.i<KnownTokenId.EVMToken>()\n\n  if (stacksToken === StacksToken.sLUNR) {\n    return [EVMToken.LUNR]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.LUNR)\n\n  if (stacksToken === StacksToken.ALEX) {\n    return [EVMToken.ALEX]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.ALEX)\n\n  if (stacksToken === StacksToken.sSKO) {\n    return [EVMToken.SKO]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.SKO)\n\n  if (stacksToken === StacksToken.vLiSTX) {\n    return [EVMToken.vLiSTX]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.vLiSTX)\n\n  if (stacksToken === StacksToken.vLiALEX) {\n    return [EVMToken.vLiALEX]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.vLiALEX)\n\n  if (stacksToken === StacksToken.sUSDT) {\n    return [EVMToken.sUSDT, EVMToken.USDT, EVMToken.USDC]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.sUSDT)\n  assertExclude(restEVMTokenPossibilities, EVMToken.USDT)\n  assertExclude(restEVMTokenPossibilities, EVMToken.USDC)\n  if (stacksToken === StacksToken.aBTC) {\n    return [EVMToken.aBTC, EVMToken.WBTC, EVMToken.BTCB, EVMToken.cbBTC]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.aBTC)\n  assertExclude(restEVMTokenPossibilities, EVMToken.WBTC)\n  assertExclude(restEVMTokenPossibilities, EVMToken.BTCB)\n  assertExclude(restEVMTokenPossibilities, EVMToken.cbBTC)\n\n  if (stacksToken === StacksToken.uBTC) {\n    return [EVMToken.uBTC, EVMToken.wuBTC]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.uBTC)\n  assertExclude(restEVMTokenPossibilities, EVMToken.wuBTC)\n\n  if (stacksToken === StacksToken.DB20) {\n    return [EVMToken.DB20]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.DB20)\n\n  if (stacksToken === StacksToken.DOG) {\n    return [EVMToken.DOG]\n  }\n  assertExclude(restEVMTokenPossibilities, EVMToken.DOG)\n\n  checkNever(restEVMTokenPossibilities)\n  return []\n}\nexport async function toCorrespondingStacksToken(\n  evmToken: KnownTokenId.EVMToken,\n): Promise<undefined | KnownTokenId.StacksToken> {\n  const EVMToken = KnownTokenId.EVM\n  const StacksToken = KnownTokenId.Stacks\n\n  switch (evmToken) {\n    case EVMToken.LUNR:\n      return StacksToken.sLUNR\n    case EVMToken.ALEX:\n      return StacksToken.ALEX\n    case EVMToken.SKO:\n      return StacksToken.sSKO\n    case EVMToken.vLiSTX:\n      return StacksToken.vLiSTX\n    case EVMToken.vLiALEX:\n      return StacksToken.vLiALEX\n    case EVMToken.sUSDT:\n    case EVMToken.USDT:\n    case EVMToken.USDC:\n      return StacksToken.sUSDT\n    case EVMToken.aBTC:\n    case EVMToken.BTCB:\n    case EVMToken.WBTC:\n    case EVMToken.cbBTC:\n      return StacksToken.aBTC\n    case EVMToken.uBTC:\n    case EVMToken.wuBTC:\n      return StacksToken.uBTC\n    case EVMToken.DB20:\n      return StacksToken.DB20\n    case EVMToken.DOG:\n      return StacksToken.DOG\n    default:\n      checkNever(evmToken)\n      return\n  }\n}\n\nexport const isSupportedEVMRoute: IsSupportedFn = async (ctx, route) => {\n  const { fromChain, fromToken, toChain, 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.isEVMChain(fromChain) ||\n    !KnownTokenId.isEVMToken(fromToken)\n  ) {\n    return false\n  }\n  if (!KnownChainId.isKnownChain(toChain)) return false\n\n  const fromContractInfo = await getEVMContractCallInfo(ctx, fromChain)\n  if (fromContractInfo == null) return false\n\n  const fromTokenInfo = await getEVMTokenContractInfo(ctx, fromChain, fromToken)\n  if (fromTokenInfo == null) return false\n\n  if (fromTokenInfo.tokenContractAddress === nativeCurrencyAddress) {\n    if (fromContractInfo.bridgeEndpointContractAddress == null) return false\n    if (!KnownChainId.isBitcoinChain(toChain)) return false\n  }\n\n  if (KnownChainId.isStacksChain(toChain)) {\n    if (!KnownTokenId.isStacksToken(toToken)) return false\n\n    const stacksToken = await toCorrespondingStacksToken(fromToken)\n    if (stacksToken == null) return false\n\n    if (stxTokenContractAddresses[stacksToken]?.[toChain] == null) {\n      return false\n    }\n\n    return stacksToken === toToken\n  }\n\n  if (KnownChainId.isEVMChain(toChain)) {\n    if (!KnownTokenId.isEVMToken(toToken)) return false\n\n    const toTokenInfo = await getEVMTokenContractInfo(ctx, toChain, toToken)\n    if (toTokenInfo == null) return false\n\n    const transitStacksToken = await toCorrespondingStacksToken(fromToken)\n    if (transitStacksToken == null) return false\n\n    const toEVMTokens = await fromCorrespondingStacksToken(\n      toChain,\n      transitStacksToken,\n    )\n    return toEVMTokens.includes(toToken)\n  }\n\n  if (KnownChainId.isBitcoinChain(toChain)) {\n    if (!KnownTokenId.isBitcoinToken(toToken)) return false\n    const stacksToken = await toCorrespondingStacksToken(fromToken)\n    return stacksToken === KnownTokenId.Stacks.aBTC\n  }\n\n  if (KnownChainId.isRunesChain(toChain)) {\n    if (!KnownTokenId.isRunesToken(toToken)) return false\n\n    const transitStacksToken = await toCorrespondingStacksToken(fromToken)\n    if (transitStacksToken == null) return false\n\n    const runesRoutes = await getRunesSupportedRoutes(ctx, toChain)\n    return runesRoutes.some(route => route.stacksToken === transitStacksToken)\n  }\n\n  if (KnownChainId.isBRC20Chain(toChain)) {\n    if (!KnownTokenId.isBRC20Token(toToken)) return false\n\n    const transitStacksToken = await toCorrespondingStacksToken(fromToken)\n    if (transitStacksToken == null) return false\n\n    const brc20Routes = await getBRC20SupportedRoutes(ctx, toChain)\n    return brc20Routes.some(route => route.stacksToken === transitStacksToken)\n  }\n\n  checkNever(toChain)\n  return false\n}\n"],"mappings":"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","names":["route"]}