fix: evm routes checks

This commit is contained in:
c4605
2024-11-25 16:35:55 +01:00
parent 0ed72d216c
commit 79ef0448ac
4 changed files with 34 additions and 36 deletions

View File

@@ -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)
}

View File

@@ -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)) {

View File

@@ -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

View File

@@ -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)