@xlink-network/xlink-sdk
Version:
178 lines (176 loc) • 6.2 kB
JavaScript
import {
toCorrespondingStacksToken
} from "./chunk-COUTRDKA.mjs";
import {
getEVMTokenContractInfo
} from "./chunk-UJDCORME.mjs";
import {
getBRC20SupportedRoutes,
getRunesSupportedRoutes
} from "./chunk-BNOOAGFD.mjs";
import {
getMetaPegInAddress
} from "./chunk-S6TTVDUZ.mjs";
import {
KnownChainId,
KnownTokenId,
_allNoLongerSupportedEVMChains
} from "./chunk-GZDQGY7B.mjs";
import {
checkNever,
isNotNull
} from "./chunk-E5Y3FGR6.mjs";
import {
BigNumber
} from "./chunk-KHTJNOQE.mjs";
// src/metaUtils/peggingHelpers.ts
var getMeta2StacksFeeInfo = async (ctx, route) => {
const filteredRoutes = KnownChainId.isBRC20Chain(route.fromChain) ? await getBRC20SupportedRoutes(ctx, route.fromChain).then(
(routes) => routes.filter(
(_route) => _route.brc20Token === route.fromToken && _route.stacksToken === route.toToken
)
) : await getRunesSupportedRoutes(ctx, route.fromChain).then(
(routes) => routes.filter(
(_route) => _route.runesToken === route.fromToken && _route.stacksToken === route.toToken
)
);
const filteredRoute = filteredRoutes[0];
if (filteredRoute == null) return;
return {
isPaused: filteredRoute.pegInPaused,
bridgeToken: route.fromToken,
fees: [
{
type: "rate",
token: route.fromToken,
rate: filteredRoute.pegInFeeRate,
minimumAmount: BigNumber.ZERO
},
filteredRoute.pegInFeeBitcoinAmount == null ? null : {
type: "fixed",
token: KnownTokenId.Stacks.aBTC,
amount: filteredRoute.pegInFeeBitcoinAmount
}
].filter(isNotNull),
minBridgeAmount: BigNumber.ZERO,
maxBridgeAmount: null
};
};
var getStacks2MetaFeeInfo = async (ctx, route) => {
const filteredRoutes = KnownChainId.isBRC20Chain(route.toChain) ? await getBRC20SupportedRoutes(ctx, route.toChain).then(
(routes) => routes.filter(
(_route) => _route.stacksToken === route.fromToken && _route.brc20Token === route.toToken
)
) : await getRunesSupportedRoutes(ctx, route.toChain).then(
(routes) => routes.filter(
(_route) => _route.stacksToken === route.fromToken && _route.runesToken === route.toToken
)
);
const filteredRoute = filteredRoutes[0];
if (filteredRoute == null) return;
return {
isPaused: filteredRoute.pegOutPaused,
bridgeToken: route.fromToken,
fees: [
{
type: "rate",
token: route.fromToken,
rate: filteredRoute.pegOutFeeRate,
minimumAmount: BigNumber.ZERO
},
filteredRoute.pegOutFeeBitcoinAmount == null ? null : {
type: "fixed",
token: KnownTokenId.Stacks.aBTC,
amount: filteredRoute.pegOutFeeBitcoinAmount
}
].filter(isNotNull),
minBridgeAmount: BigNumber.ZERO,
maxBridgeAmount: null
};
};
var isSupportedMetaRoute = async (ctx, route) => {
const { fromChain, toChain, fromToken, toToken } = route;
if (fromChain === toChain && fromToken === toToken) {
return false;
}
if (!KnownChainId.isKnownChain(toChain)) return false;
if (KnownChainId.isEVMChain(fromChain) && _allNoLongerSupportedEVMChains.includes(fromChain)) {
return false;
}
if (KnownChainId.isEVMChain(toChain) && _allNoLongerSupportedEVMChains.includes(toChain)) {
return false;
}
if (KnownChainId.isBitcoinChain(toChain)) {
return false;
}
if (!KnownChainId.isRunesChain(fromChain) && !KnownChainId.isBRC20Chain(fromChain)) {
return false;
}
const pegInAddress = getMetaPegInAddress(fromChain, toChain);
if (pegInAddress == null) return false;
if (KnownChainId.isBitcoinChain(toChain)) {
return false;
}
if (KnownChainId.isStacksChain(toChain)) {
if (!KnownTokenId.isStacksToken(toToken)) return false;
if (KnownChainId.isRunesChain(fromChain)) {
const runesRoutes = await getRunesSupportedRoutes(ctx, fromChain);
return runesRoutes.some((route2) => route2.stacksToken === toToken);
}
if (KnownChainId.isBRC20Chain(fromChain)) {
const brc20Routes = await getBRC20SupportedRoutes(ctx, fromChain);
return brc20Routes.some((route2) => route2.stacksToken === toToken);
}
checkNever(fromChain);
return false;
}
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;
if (KnownChainId.isRunesChain(fromChain)) {
const runesRoutes = await getRunesSupportedRoutes(ctx, fromChain);
return runesRoutes.some((route2) => route2.stacksToken === transitStacksToken);
}
if (KnownChainId.isBRC20Chain(fromChain)) {
const brc20Routes = await getBRC20SupportedRoutes(ctx, fromChain);
return brc20Routes.some((route2) => route2.stacksToken === transitStacksToken);
}
checkNever(fromChain);
return false;
}
if (KnownChainId.isRunesChain(toChain)) {
if (!KnownTokenId.isRunesToken(toToken)) return false;
if (KnownChainId.isRunesChain(fromChain)) return false;
const brc20Routes = await getBRC20SupportedRoutes(ctx, fromChain);
const runesRoutes = await getRunesSupportedRoutes(ctx, toChain);
return getRoutesOverlapping(brc20Routes, runesRoutes) != null;
}
if (KnownChainId.isBRC20Chain(toChain)) {
if (!KnownTokenId.isBRC20Token(toToken)) return false;
if (KnownChainId.isBRC20Chain(fromChain)) return false;
const brc20Routes = await getBRC20SupportedRoutes(ctx, toChain);
const runesRoutes = await getRunesSupportedRoutes(ctx, fromChain);
return getRoutesOverlapping(brc20Routes, runesRoutes) != null;
}
checkNever(toChain);
return false;
};
var getRoutesOverlapping = (brc20Routes, runesRoutes) => {
for (const brc20Route of brc20Routes) {
for (const runesRoute of runesRoutes) {
if (brc20Route.stacksToken === runesRoute.stacksToken) {
return [brc20Route, runesRoute];
}
}
}
return null;
};
export {
getMeta2StacksFeeInfo,
getStacks2MetaFeeInfo,
isSupportedMetaRoute
};
//# sourceMappingURL=chunk-UPYNSDGA.mjs.map