@xlink-network/xlink-sdk
Version:
302 lines (300 loc) • 8.87 kB
JavaScript
import {
transformToPublicTransferProphet,
transformToPublicTransferProphetAggregated
} from "./chunk-6SXUQECQ.mjs";
import {
getStacks2BtcFeeInfo
} from "./chunk-DAZBH3JI.mjs";
import {
supportedRoutes
} from "./chunk-JQWEO2ZM.mjs";
import {
getStacks2MetaFeeInfo
} from "./chunk-UPYNSDGA.mjs";
import {
getEvm2StacksFeeInfo,
getStacks2EvmFeeInfo,
toCorrespondingStacksToken
} from "./chunk-COUTRDKA.mjs";
import {
getEVMTokenContractInfo
} from "./chunk-UJDCORME.mjs";
import {
nativeCurrencyAddress
} from "./chunk-ZXKZ4Z37.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/bridgeInfoFromEVM.ts
async function bridgeInfoFromEVM(ctx, info) {
const route = await supportedRoutes.checkRouteValid(ctx, info);
if (KnownChainId.isEVMChain(route.fromChain)) {
if (KnownChainId.isStacksChain(route.toChain)) {
if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isStacksToken(route.toToken)) {
return bridgeInfoFromEVM_toStacks(ctx, {
...info,
fromChain: route.fromChain,
toChain: route.toChain,
fromToken: route.fromToken,
toToken: route.toToken
});
}
} else if (KnownChainId.isBitcoinChain(route.toChain)) {
if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isBitcoinToken(route.toToken)) {
return bridgeInfoFromEVM_toBitcoin(ctx, {
...info,
fromChain: route.fromChain,
toChain: route.toChain,
fromToken: route.fromToken,
toToken: route.toToken
});
}
} else if (KnownChainId.isEVMChain(route.toChain)) {
if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isEVMToken(route.toToken)) {
return bridgeInfoFromEVM_toEVM(ctx, {
...info,
fromChain: route.fromChain,
toChain: route.toChain,
fromToken: route.fromToken,
toToken: route.toToken
});
}
} else if (KnownChainId.isBRC20Chain(route.toChain)) {
if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isBRC20Token(route.toToken)) {
return bridgeInfoFromEVM_toMeta(ctx, {
...info,
fromChain: route.fromChain,
toChain: route.toChain,
fromToken: route.fromToken,
toToken: route.toToken
});
}
} else if (KnownChainId.isRunesChain(route.toChain)) {
if (KnownTokenId.isEVMToken(route.fromToken) && KnownTokenId.isRunesToken(route.toToken)) {
return bridgeInfoFromEVM_toMeta(ctx, {
...info,
fromChain: route.fromChain,
toChain: route.toChain,
fromToken: route.fromToken,
toToken: route.toToken
});
}
} else {
checkNever(route.toChain);
}
} 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 bridgeInfoFromEVM_toStacks(ctx, info) {
const step1 = await getEvm2StacksFeeInfo(ctx, info);
const evmTokenContractCallInfo = await getEVMTokenContractInfo(
ctx,
info.fromChain,
info.fromToken
);
if (step1 == null || evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress) {
throw new UnsupportedBridgeRouteError(
info.fromChain,
info.toChain,
info.fromToken,
info.toToken
);
}
return {
...transformToPublicTransferProphet(info, info.amount, step1),
transferProphets: []
};
}
async function bridgeInfoFromEVM_toBitcoin(ctx, info) {
const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain) ? KnownChainId.Stacks.Mainnet : KnownChainId.Stacks.Testnet;
const transitStacksToken = await toCorrespondingStacksToken(info.fromToken);
if (transitStacksToken == null) {
throw new UnsupportedBridgeRouteError(
info.fromChain,
info.toChain,
info.fromToken,
info.toToken
);
}
const step1Route = {
fromChain: info.fromChain,
fromToken: info.fromToken,
toChain: transitStacksChain,
toToken: transitStacksToken
};
const step2Route = {
fromChain: transitStacksChain,
fromToken: transitStacksToken,
toChain: info.toChain,
toToken: info.toToken
};
const [step1, step2] = await Promise.all([
getEvm2StacksFeeInfo(ctx, step1Route),
getStacks2BtcFeeInfo(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]
};
}
async function bridgeInfoFromEVM_toEVM(ctx, info) {
const evmTokenContractCallInfo = await getEVMTokenContractInfo(
ctx,
info.fromChain,
info.fromToken
);
const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain) ? KnownChainId.Stacks.Mainnet : KnownChainId.Stacks.Testnet;
const transitStacksToken = await toCorrespondingStacksToken(info.fromToken);
if (transitStacksToken == null || evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress) {
throw new UnsupportedBridgeRouteError(
info.fromChain,
info.toChain,
info.fromToken,
info.toToken
);
}
const step1Route = {
fromChain: info.fromChain,
fromToken: info.fromToken,
toChain: transitStacksChain,
toToken: transitStacksToken
};
const step2Route = {
fromChain: transitStacksChain,
fromToken: transitStacksToken,
toChain: info.toChain,
toToken: info.toToken
};
const [step1, step2] = await Promise.all([
getEvm2StacksFeeInfo(ctx, 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]
};
}
async function bridgeInfoFromEVM_toMeta(ctx, info) {
const evmTokenContractCallInfo = await getEVMTokenContractInfo(
ctx,
info.fromChain,
info.fromToken
);
const transitStacksChain = KnownChainId.isEVMMainnetChain(info.fromChain) ? KnownChainId.Stacks.Mainnet : KnownChainId.Stacks.Testnet;
const transitStacksToken = await toCorrespondingStacksToken(info.fromToken);
if (transitStacksToken == null || evmTokenContractCallInfo?.tokenContractAddress === nativeCurrencyAddress) {
throw new UnsupportedBridgeRouteError(
info.fromChain,
info.toChain,
info.fromToken,
info.toToken
);
}
const step1Route = {
fromChain: info.fromChain,
fromToken: info.fromToken,
toChain: transitStacksChain,
toToken: transitStacksToken
};
const step2Route = {
fromChain: transitStacksChain,
fromToken: transitStacksToken,
toChain: info.toChain,
toToken: info.toToken
};
const [step1, step2] = await Promise.all([
getEvm2StacksFeeInfo(ctx, step1Route),
getStacks2MetaFeeInfo(ctx, 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 {
bridgeInfoFromEVM
};
//# sourceMappingURL=chunk-JQD6DHL4.mjs.map