@broxus/js-core
Version:
MobX-based JavaScript Core library
211 lines (210 loc) • 11.2 kB
JavaScript
;
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;