UNPKG

@xlink-network/xlink-sdk

Version:
178 lines (176 loc) 6.2 kB
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