UNPKG

@broxus/js-core

Version:

MobX-based JavaScript Core library

211 lines (210 loc) 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DexPoolUtils = void 0; const dex_1 = require("../../models/dex"); const dex_pair_1 = require("../../models/dex-pair"); const dex_stable_pair_1 = require("../../models/dex-stable-pair"); const dex_stable_pool_1 = require("../../models/dex-stable-pool"); const utils_1 = require("../../utils"); class DexPoolUtils { static async getDetails(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { const result = await dex_pair_1.DexPairUtils.getDetails(connection, poolAddress, state); return { address: (0, utils_1.resolveTvmAddress)(poolAddress), balances: result.balances, contractState: state, isActive: result.isActive, lpToken: result.lpToken, lpWallet: result.lpWallet, tokens: result.tokens, type: result.type, wallets: result.wallets, }; } if (type === dex_1.DexPoolType.STABLE_PAIR) { const result = await dex_stable_pair_1.DexStablePairUtils.getDetails(connection, poolAddress, state); return { address: (0, utils_1.resolveTvmAddress)(poolAddress), balances: result.balances, contractState: state, isActive: result.isActive, lpToken: result.lpToken, lpWallet: result.lpWallet, tokens: result.tokens, type: result.type, wallets: result.wallets, }; } if (type === dex_1.DexPoolType.STABLE_POOL) { const result = await dex_stable_pool_1.DexStablePoolUtils.getDetails(connection, poolAddress, state); return { address: (0, utils_1.resolveTvmAddress)(poolAddress), balances: result.balances, contractState: state, isActive: result.isActive, lpToken: result.lpToken, lpWallet: result.lpWallet, tokens: result.tokens, type: result.type, wallets: result.wallets, }; } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async getBalances(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { return dex_pair_1.DexPairUtils.getBalances(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_PAIR) { return dex_stable_pair_1.DexStablePairUtils.getBalances(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_POOL) { return dex_stable_pool_1.DexStablePoolUtils.getBalances(connection, poolAddress, state); } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async getVirtualPrice(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.STABLE_PAIR) { return dex_stable_pair_1.DexStablePairUtils.getVirtualPrice(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_POOL) { return dex_stable_pool_1.DexStablePoolUtils.getVirtualPrice(connection, poolAddress, state); } return null; } static async getFeeParams(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { const result = await dex_pair_1.DexPairUtils.getFeeParams(connection, poolAddress, state); return { beneficiaryAddress: result.beneficiaryAddress, beneficiaryNumerator: result.beneficiaryNumerator, denominator: result.denominator, numerator: result.numerator, threshold: result.threshold, }; } if (type === dex_1.DexPoolType.STABLE_PAIR) { const result = await dex_stable_pair_1.DexStablePairUtils.getFeeParams(connection, poolAddress, state); return { beneficiaryAddress: result.beneficiaryAddress, beneficiaryNumerator: result.beneficiaryNumerator, denominator: result.denominator, numerator: result.numerator, threshold: result.threshold, }; } if (type === dex_1.DexPoolType.STABLE_POOL) { const result = await dex_stable_pool_1.DexStablePoolUtils.getFeeParams(connection, poolAddress, state); return { beneficiaryAddress: result.beneficiaryAddress, beneficiaryNumerator: result.beneficiaryNumerator, denominator: result.denominator, numerator: result.numerator, threshold: result.threshold, }; } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async getRoot(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { return dex_pair_1.DexPairUtils.getRoot(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_PAIR) { return dex_stable_pair_1.DexStablePairUtils.getRoot(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_POOL) { return dex_stable_pool_1.DexStablePoolUtils.getRoot(connection, poolAddress, state); } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async isActive(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { return dex_pair_1.DexPairUtils.isActive(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_PAIR) { return dex_stable_pair_1.DexStablePairUtils.isActive(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_POOL) { return dex_stable_pool_1.DexStablePoolUtils.isActive(connection, poolAddress, state); } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async getVault(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { return dex_pair_1.DexPairUtils.getVault(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_PAIR) { return dex_stable_pair_1.DexStablePairUtils.getVault(connection, poolAddress, state); } if (type === dex_1.DexPoolType.STABLE_POOL) { return dex_stable_pool_1.DexStablePoolUtils.getVault(connection, poolAddress, state); } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async getTokenRoots(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { const result = await dex_pair_1.DexPairUtils.getTokenRoots(connection, poolAddress, state); return { lp: result.lp, tokens: [result.left, result.right] }; } if (type === dex_1.DexPoolType.STABLE_PAIR) { const result = await dex_stable_pair_1.DexStablePairUtils.getTokenRoots(connection, poolAddress, state); return { lp: result.lp, tokens: [result.left, result.right] }; } if (type === dex_1.DexPoolType.STABLE_POOL) { const result = await dex_stable_pool_1.DexStablePoolUtils.getTokenRoots(connection, poolAddress, state); return { lp: result.lp, tokens: result.tokens }; } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async getTokenWallets(connection, poolAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, poolAddress)); const type = await DexPoolUtils.getPoolType(connection, poolAddress, state); if (type === dex_1.DexPoolType.CONSTANT_PRODUCT) { const result = await dex_pair_1.DexPairUtils.getTokenWallets(connection, poolAddress, state); return { lp: result.lp, tokens: [result.left, result.right] }; } if (type === dex_1.DexPoolType.STABLE_PAIR) { const result = await dex_stable_pair_1.DexStablePairUtils.getTokenWallets(connection, poolAddress, state); return { lp: result.lp, tokens: [result.left, result.right] }; } if (type === dex_1.DexPoolType.STABLE_POOL) { const result = await dex_stable_pool_1.DexStablePoolUtils.getTokenWallets(connection, poolAddress, state); return { lp: result.lp, tokens: result.tokens }; } throw new Error(`Unexpected pool type. Expected: 1, 2 or 3. Got: ${type}`); } static async getPoolType(connection, pairAddress, cachedState) { const state = cachedState ?? (await (0, utils_1.getFullContractState)(connection, pairAddress)); try { return await dex_pair_1.DexPairUtils.getPoolType(connection, pairAddress, state); } catch { } try { return await dex_stable_pair_1.DexStablePairUtils.getPoolType(connection, pairAddress, state); } catch { } try { return await dex_stable_pool_1.DexStablePoolUtils.getPoolType(connection, pairAddress, state); } catch { } throw new Error('Cant get pool type'); } } exports.DexPoolUtils = DexPoolUtils;