rubic-sdk
Version:
Simplify dApp creation
78 lines • 4.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EDDY_CALCULATION_TYPES = exports.ERD = void 0;
exports.eddyRoutingDirection = eddyRoutingDirection;
exports.isDirectBridge = isDirectBridge;
exports.getEddyCalculationType = getEddyCalculationType;
const errors_1 = require("../../../../../../common/errors");
const blockchain_1 = require("../../../../../../common/utils/blockchain");
const blockchain_name_1 = require("../../../../../../core/blockchain/models/blockchain-name");
const eddy_bridge_contract_addresses_1 = require("../constants/eddy-bridge-contract-addresses");
const find_transit_token_address_1 = require("./find-transit-token-address");
// Eddy Routing Direction
exports.ERD = {
ANY_CHAIN_NATIVE_TO_ZETA_NATIVE: 'ANY_CHAIN_NATIVE_TO_ZETA_NATIVE',
ANY_CHAIN_NATIVE_TO_ZETA_TOKEN: 'ANY_CHAIN_NATIVE_TO_ZETA_TOKEN',
ZETA_NATIVE_TO_ANY_CHAIN_ALL: 'ZETA_NATIVE_TO_ANY_CHAIN_ALL',
ZETA_TOKEN_TO_ANY_CHAIN_ALL: 'ZETA_TOKEN_TO_ANY_CHAIN_ALL',
ANY_CHAIN_NATIVE_TO_ANY_CHAIN_TOKEN: 'ANY_CHAIN_NATIVE_TO_ANY_CHAIN_TOKEN',
ANY_CHAIN_TOKEN_TO_ANY_CHAIN_TOKEN: 'ANY_CHAIN_TOKEN_TO_ANY_CHAIN_TOKEN',
ANY_CHAIN_TOKEN_TO_ZETA_TOKEN: 'ANY_CHAIN_TOKEN_TO_ZETA_TOKEN'
};
exports.EDDY_CALCULATION_TYPES = {
DIRECT_BRIDGE: 'DIRECT_BRIDGE',
SWAP_FROM_ZETACHAIN: 'SWAP_FROM_ZETACHAIN',
SWAP_TO_ZETACHAIN: 'SWAP_TO_ZETACHAIN',
SWAP_BETWEEN_OTHER_CHAINS: 'SWAP_BETWEEN_OTHER_CHAINS'
};
// eslint-disable-next-line complexity
function eddyRoutingDirection(from, to) {
if (from.blockchain === blockchain_name_1.BLOCKCHAIN_NAME.ZETACHAIN) {
const isSupportedFromToken = eddy_bridge_contract_addresses_1.ZETA_CHAIN_SUPPORTED_TOKENS.some(zrcToken => (0, blockchain_1.compareAddresses)(zrcToken.address, from.address));
const isSupportedToToken = !!(0, find_transit_token_address_1.findCompatibleZrc20TokenAddress)(to);
if (from.isNative && isSupportedToToken)
return exports.ERD.ZETA_NATIVE_TO_ANY_CHAIN_ALL;
if (isSupportedFromToken && isSupportedToToken)
return exports.ERD.ZETA_TOKEN_TO_ANY_CHAIN_ALL;
}
if (from.blockchain !== blockchain_name_1.BLOCKCHAIN_NAME.ZETACHAIN &&
to.blockchain === blockchain_name_1.BLOCKCHAIN_NAME.ZETACHAIN) {
const isSupportedToToken = eddy_bridge_contract_addresses_1.ZETA_CHAIN_SUPPORTED_TOKENS.some(zrcToken => (0, blockchain_1.compareAddresses)(zrcToken.address, to.address));
const isSupportedFromToken = !!(0, find_transit_token_address_1.findCompatibleZrc20TokenAddress)(from);
if (from.isNative && to.isNative)
return exports.ERD.ANY_CHAIN_NATIVE_TO_ZETA_NATIVE;
if (from.isNative && isSupportedToToken)
return exports.ERD.ANY_CHAIN_NATIVE_TO_ZETA_TOKEN;
if (!from.isNative && isSupportedToToken && isSupportedFromToken && !to.isNative) {
return exports.ERD.ANY_CHAIN_TOKEN_TO_ZETA_TOKEN;
}
}
// BSC <-> ETH routes are not supported
// if (
// from.blockchain !== BLOCKCHAIN_NAME.ZETACHAIN &&
// to.blockchain !== BLOCKCHAIN_NAME.ZETACHAIN
// ) {
// if (from.isNative && !to.isNative) return ERD.ANY_CHAIN_NATIVE_TO_ANY_CHAIN_TOKEN;
// if (!from.isNative && !to.isNative) return ERD.ANY_CHAIN_TOKEN_TO_ANY_CHAIN_TOKEN;
// }
throw new errors_1.NotSupportedTokensError();
}
/**
* Check if route is Bsc(ETH) <-> Ethereum(ETH), Ethereum(USDT) <-> Zetachain(USDT.ETH) etc.
*/
function isDirectBridge(from, toToken) {
return (0, blockchain_1.compareAddresses)(from.symbol, toToken.symbol);
}
function getEddyCalculationType(from, toToken) {
if (isDirectBridge(from, toToken)) {
return exports.EDDY_CALCULATION_TYPES.DIRECT_BRIDGE;
}
if (from.blockchain === blockchain_name_1.BLOCKCHAIN_NAME.ZETACHAIN) {
return exports.EDDY_CALCULATION_TYPES.SWAP_FROM_ZETACHAIN;
}
if (toToken.blockchain === blockchain_name_1.BLOCKCHAIN_NAME.ZETACHAIN) {
return exports.EDDY_CALCULATION_TYPES.SWAP_TO_ZETACHAIN;
}
return exports.EDDY_CALCULATION_TYPES.SWAP_BETWEEN_OTHER_CHAINS;
}
//# sourceMappingURL=eddy-bridge-routing-directions.js.map