diff --git a/src/bitcoinUtils/peggingHelpers.ts b/src/bitcoinUtils/peggingHelpers.ts index 911733e..cd0b3a9 100644 --- a/src/bitcoinUtils/peggingHelpers.ts +++ b/src/bitcoinUtils/peggingHelpers.ts @@ -15,7 +15,7 @@ import { KnownRoute_FromStacks_ToBitcoin, } from "../utils/buildSupportedRoutes" import { props } from "../utils/promiseHelpers" -import { checkNever, isNotNull } from "../utils/typeHelpers" +import { checkNever } from "../utils/typeHelpers" import { TransferProphet } from "../utils/types/TransferProphet" import { _allNoLongerSupportedEVMChains, @@ -23,7 +23,6 @@ import { KnownTokenId, } from "../utils/types/knownIds" import { getBTCPegInAddress } from "./btcAddresses" -import { hasAny } from "../utils/arrayHelpers" export const getBtc2StacksFeeInfo = async ( route: KnownRoute_FromBitcoin_ToStacks, @@ -191,19 +190,15 @@ export const isSupportedBitcoinRoute: IsSupportedFn = async (ctx, route) => { } if (KnownChainId.isEVMChain(toChain)) { + if (!KnownTokenId.isEVMToken(toToken)) return false + + const info = await getEVMTokenContractInfo(ctx, toChain, toToken) + if (info == null) return false + const toEVMTokens = await fromCorrespondingStacksToken( toChain, KnownTokenId.Stacks.aBTC, ) - if (!hasAny(toEVMTokens)) return false - - const infos = ( - await Promise.all( - toEVMTokens.map(token => getEVMTokenContractInfo(ctx, toChain, token)), - ) - ).filter(isNotNull) - if (!hasAny(infos)) return false - return toEVMTokens.includes(toToken as any) } diff --git a/src/evmUtils/peggingHelpers.ts b/src/evmUtils/peggingHelpers.ts index 2ad7cd1..649d836 100644 --- a/src/evmUtils/peggingHelpers.ts +++ b/src/evmUtils/peggingHelpers.ts @@ -1,6 +1,10 @@ import { callReadOnlyFunction } from "@stacks/transactions" import { CallReadOnlyFunctionFn, unwrapResponse } from "clarity-codegen" import { readContract } from "viem/actions" +import { + getBRC20SupportedRoutes, + getRunesSupportedRoutes, +} from "../metaUtils/xlinkContractHelpers" import { contractAssignedChainIdFromKnownChain } from "../stacksUtils/crossContractDataMapping" import { getTerminatingStacksTokenContractAddress, @@ -13,14 +17,13 @@ import { numberFromStacksContractNumber, } from "../stacksUtils/xlinkContractHelpers" import { BigNumber } from "../utils/BigNumber" -import { hasAny } from "../utils/arrayHelpers" import { IsSupportedFn, KnownRoute_FromEVM_ToStacks, KnownRoute_FromStacks_ToEVM, } from "../utils/buildSupportedRoutes" import { props } from "../utils/promiseHelpers" -import { assertExclude, checkNever, isNotNull } from "../utils/typeHelpers" +import { assertExclude, checkNever } from "../utils/typeHelpers" import { TransferProphet } from "../utils/types/TransferProphet" import { _allNoLongerSupportedEVMChains, @@ -35,10 +38,6 @@ import { getEVMTokenContractInfo, numberFromSolidityContractNumber, } from "./xlinkContractHelpers" -import { - getBRC20SupportedRoutes, - getRunesSupportedRoutes, -} from "../metaUtils/xlinkContractHelpers" export const getEvm2StacksFeeInfo = async ( ctx: SDKGlobalContext, @@ -381,6 +380,11 @@ export const isSupportedEVMRoute: IsSupportedFn = async (ctx, route) => { } if (KnownChainId.isEVMChain(toChain)) { + if (!KnownTokenId.isEVMToken(toToken)) return false + + const info = await getEVMTokenContractInfo(ctx, toChain, toToken) + if (info == null) return false + const transitStacksToken = await toCorrespondingStacksToken(fromToken) if (transitStacksToken == null) return false @@ -388,14 +392,7 @@ export const isSupportedEVMRoute: IsSupportedFn = async (ctx, route) => { toChain, transitStacksToken, ) - if (!hasAny(toEVMTokens)) return false - - const toTokenInfos = await Promise.all( - toEVMTokens.map(token => getEVMTokenContractInfo(ctx, toChain, token)), - ).then(infos => infos.filter(isNotNull)) - if (!hasAny(toTokenInfos)) return false - - return toEVMTokens.includes(toToken as any) + return toEVMTokens.includes(toToken) } if (KnownChainId.isBitcoinChain(toChain)) { diff --git a/src/metaUtils/peggingHelpers.ts b/src/metaUtils/peggingHelpers.ts index b0b6d2d..1488e6d 100644 --- a/src/metaUtils/peggingHelpers.ts +++ b/src/metaUtils/peggingHelpers.ts @@ -1,4 +1,5 @@ import { toCorrespondingStacksToken } from "../evmUtils/peggingHelpers" +import { getEVMTokenContractInfo } from "../evmUtils/xlinkContractHelpers" import { BigNumber } from "../utils/BigNumber" import { _KnownRoute_FromBRC20_ToStacks, @@ -173,6 +174,9 @@ export const isSupportedMetaRoute: IsSupportedFn = async (ctx, route) => { if (KnownChainId.isEVMChain(toChain)) { if (!KnownTokenId.isEVMToken(toToken)) return false + const info = await getEVMTokenContractInfo(ctx, toChain, toToken) + if (info == null) return false + const transitStacksToken = await toCorrespondingStacksToken(toToken) if (transitStacksToken == null) return false diff --git a/src/stacksUtils/peggingHelpers.ts b/src/stacksUtils/peggingHelpers.ts index ac39497..4de9409 100644 --- a/src/stacksUtils/peggingHelpers.ts +++ b/src/stacksUtils/peggingHelpers.ts @@ -6,7 +6,7 @@ import { } from "../metaUtils/xlinkContractHelpers" import { hasAny } from "../utils/arrayHelpers" import { IsSupportedFn } from "../utils/buildSupportedRoutes" -import { checkNever, isNotNull } from "../utils/typeHelpers" +import { checkNever } from "../utils/typeHelpers" import { _allNoLongerSupportedEVMChains, KnownChainId, @@ -46,6 +46,8 @@ export const isSupportedStacksRoute: IsSupportedFn = async (ctx, route) => { } if (KnownChainId.isBitcoinChain(toChain)) { + if (!KnownTokenId.isBitcoinToken(toToken)) return false + return ( fromToken === KnownTokenId.Stacks.aBTC && toToken === KnownTokenId.Bitcoin.BTC @@ -53,6 +55,8 @@ export const isSupportedStacksRoute: IsSupportedFn = async (ctx, route) => { } if (KnownChainId.isRunesChain(toChain)) { + if (!KnownTokenId.isRunesToken(toToken)) return false + const supportedRoutes = await getRunesSupportedRoutes(ctx, toChain) if (supportedRoutes == null || !hasAny(supportedRoutes)) return false @@ -62,6 +66,8 @@ export const isSupportedStacksRoute: IsSupportedFn = async (ctx, route) => { } if (KnownChainId.isBRC20Chain(toChain)) { + if (!KnownTokenId.isBRC20Token(toToken)) return false + const supportedRoutes = await getBRC20SupportedRoutes(ctx, toChain) if (supportedRoutes == null || !hasAny(supportedRoutes)) return false @@ -71,17 +77,13 @@ export const isSupportedStacksRoute: IsSupportedFn = async (ctx, route) => { } if (KnownChainId.isEVMChain(toChain)) { + if (!KnownTokenId.isEVMToken(toToken)) return false + + const info = await getEVMTokenContractInfo(ctx, toChain, toToken) + if (info == null) return false + const toEVMTokens = await fromCorrespondingStacksToken(toChain, fromToken) - if (!hasAny(toEVMTokens)) return false - - const toTokenInfos = ( - await Promise.all( - toEVMTokens.map(token => getEVMTokenContractInfo(ctx, toChain, token)), - ) - ).filter(isNotNull) - if (!hasAny(toTokenInfos)) return false - - return toEVMTokens.includes(toToken as any) + return toEVMTokens.includes(toToken) } checkNever(toChain)