mirror of
https://github.com/Brotocol-xyz/bro-sdk.git
synced 2026-01-12 14:54:21 +08:00
fix: evm routes checks
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user