@xlink-network/xlink-sdk
Version:
135 lines (133 loc) • 3.88 kB
JavaScript
import {
transformToPublicTransferProphet,
transformToPublicTransferProphetAggregated
} from "./chunk-6SXUQECQ.mjs";
import {
supportedRoutes
} from "./chunk-66DYX3RO.mjs";
import {
getBtc2StacksFeeInfo
} from "./chunk-DAZBH3JI.mjs";
import {
getStacks2EvmFeeInfo
} from "./chunk-COUTRDKA.mjs";
import {
UnsupportedBridgeRouteError
} from "./chunk-KTUPNUM5.mjs";
import {
KnownChainId,
KnownTokenId
} from "./chunk-GZDQGY7B.mjs";
import {
assertExclude,
checkNever
} from "./chunk-E5Y3FGR6.mjs";
import {
BigNumber
} from "./chunk-KHTJNOQE.mjs";
// src/xlinkSdkUtils/bridgeInfoFromBitcoin.ts
var bridgeInfoFromBitcoin = async (ctx, info) => {
const route = await supportedRoutes.checkRouteValid(ctx, info);
if (KnownChainId.isBitcoinChain(route.fromChain)) {
if (KnownChainId.isStacksChain(route.toChain)) {
if (KnownTokenId.isBitcoinToken(route.fromToken) && KnownTokenId.isStacksToken(route.toToken)) {
return bridgeInfoFromBitcoin_toStacks({
...info,
fromChain: route.fromChain,
toChain: route.toChain,
fromToken: route.fromToken,
toToken: route.toToken
});
}
} else if (KnownChainId.isEVMChain(route.toChain)) {
if (KnownTokenId.isBitcoinToken(route.fromToken) && KnownTokenId.isEVMToken(route.toToken)) {
return bridgeInfoFromBitcoin_toEVM({
...info,
fromChain: route.fromChain,
toChain: route.toChain,
fromToken: route.fromToken,
toToken: route.toToken
});
}
} else if (KnownChainId.isBRC20Chain(route.toChain) || KnownChainId.isRunesChain(route.toChain)) {
assertExclude(route.toChain, assertExclude.i());
assertExclude(route.toChain, assertExclude.i());
} else {
assertExclude(route.toChain, assertExclude.i());
checkNever(route);
}
} else {
assertExclude(route.fromChain, assertExclude.i());
assertExclude(route.fromChain, assertExclude.i());
checkNever(route);
}
throw new UnsupportedBridgeRouteError(
info.fromChain,
info.toChain,
info.fromToken,
info.toToken
);
};
async function bridgeInfoFromBitcoin_toStacks(info) {
const step1 = await getBtc2StacksFeeInfo(info);
if (step1 == null) {
throw new UnsupportedBridgeRouteError(
info.fromChain,
info.toChain,
info.fromToken,
info.toToken
);
}
return {
...transformToPublicTransferProphet(info, info.amount, step1),
transferProphets: []
};
}
async function bridgeInfoFromBitcoin_toEVM(info) {
const transitStacksChainId = info.fromChain === KnownChainId.Bitcoin.Mainnet ? KnownChainId.Stacks.Mainnet : KnownChainId.Stacks.Testnet;
const step1Route = {
fromChain: info.fromChain,
fromToken: KnownTokenId.Bitcoin.BTC,
toChain: transitStacksChainId,
toToken: KnownTokenId.Stacks.aBTC
};
const step2Route = {
fromChain: transitStacksChainId,
fromToken: KnownTokenId.Stacks.aBTC,
toChain: info.toChain,
toToken: info.toToken
};
const [step1, step2] = await Promise.all([
getBtc2StacksFeeInfo(step1Route),
getStacks2EvmFeeInfo(step2Route)
]);
if (step1 == null || step2 == null) {
throw new UnsupportedBridgeRouteError(
info.fromChain,
info.toChain,
info.fromToken,
info.toToken
);
}
const step1TransferProphet = transformToPublicTransferProphet(
step1Route,
info.amount,
step1
);
const step2TransferProphet = transformToPublicTransferProphet(
step2Route,
step1TransferProphet.toAmount,
step2
);
return {
...transformToPublicTransferProphetAggregated(
[step1TransferProphet, step2TransferProphet],
[BigNumber.ONE]
),
transferProphets: [step1TransferProphet, step2TransferProphet]
};
}
export {
bridgeInfoFromBitcoin
};
//# sourceMappingURL=chunk-B5H2K2TI.mjs.map