UNPKG

@broxus/js-core

Version:

MobX-based JavaScript Core library

164 lines (163 loc) 7.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DexUtils = void 0; const constants_1 = require("../../constants"); const contracts_1 = require("../../models/dex/contracts"); const utils_1 = require("../../utils"); class DexUtils { /** * Sends a delayed message to deploy a DEX Account * @param {ProviderRpcClient} provider * @param {Address | string} dexRootAddress * @param {DexDeployAccountAbiParams} params * @param {Partial<SendInternalParams>} [args] * @returns {Promise<DelayedMessageExecution>} */ static deployAccount(provider, dexRootAddress, params, args) { const ownerAddress = (0, utils_1.resolveTvmAddress)(params.ownerAddress); const senderAddress = params.senderAddress ? (0, utils_1.resolveTvmAddress)(params.senderAddress) : undefined; const sendGasTo = params.sendGasTo ? (0, utils_1.resolveTvmAddress)(params.sendGasTo) : undefined; return (0, contracts_1.dexRootContract)(provider, dexRootAddress) .methods.deployAccount({ account_owner: (0, utils_1.resolveTvmAddress)(params.ownerAddress), send_gas_to: sendGasTo ?? senderAddress ?? ownerAddress, }) .sendDelayed({ amount: (0, utils_1.toInt)(2, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: false, from: senderAddress ?? ownerAddress, ...args, }); } /** * Sends a delayed message to deploy a pair * @param {ProviderRpcClient} provider * @param {Address | string} dexRootAddress * @param {DexDeployPairAbiParams} params * @param {Partial<SendInternalParams>} [args] * @returns {Promise<DelayedMessageExecution>} */ static deployPair(provider, dexRootAddress, params, args) { return (0, contracts_1.dexRootContract)(provider, dexRootAddress) .methods.deployPair({ left_root: (0, utils_1.resolveTvmAddress)(params.leftRootAddress), right_root: (0, utils_1.resolveTvmAddress)(params.rightRootAddress), send_gas_to: (0, utils_1.resolveTvmAddress)(params.sendGasTo), }) .sendDelayed({ amount: (0, utils_1.toInt)(10, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: false, from: (0, utils_1.resolveTvmAddress)(params.sendGasTo), ...args, }); } /** * Sends a delayed message to deploy a pool * @param {ProviderRpcClient} provider * @param {Address | string} dexRootAddress * @param {DexDeployPoolAbiParams} params * @param {Partial<SendInternalParams>} [args] * @returns {Promise<DelayedMessageExecution>} */ static deployStablePool(provider, dexRootAddress, params, args) { return (0, contracts_1.dexRootContract)(provider, dexRootAddress) .methods.deployStablePool({ roots: params.roots.map(utils_1.resolveTvmAddress), send_gas_to: (0, utils_1.resolveTvmAddress)(params.sendGasTo), }) .sendDelayed({ amount: (0, utils_1.toInt)(10, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: false, from: (0, utils_1.resolveTvmAddress)(params.sendGasTo), ...args, }); } /** * Returns an expected user DEX account address * by a given DEX root address and user wallet address * @param {ProviderRpcClient} connection * @param {Address | string} dexRootAddress * @param {DexExpectedAccountAddressAbiParams} params * @param {FullContractState} [cachedState] * @returns {Promise<Address>} */ static async getExpectedAccountAddress(connection, dexRootAddress, params, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, dexRootAddress); const result = await (0, contracts_1.dexRootContract)(connection, dexRootAddress) .methods.getExpectedAccountAddress({ account_owner: (0, utils_1.resolveTvmAddress)(params.ownerAddress), answerId: 0, }) .call({ cachedState: state, responsible: true }); return result.value0; } /** * Returns an expected pair address by a given DEX root address * and left and right tokens addresses * @param {ProviderRpcClient} connection * @param {Address | string} dexRootAddress * @param {DexExpectedPairAddressAbiParams} params * @param {FullContractState} [cachedState] * @return {Promise<Address>} */ static async getExpectedPairAddress(connection, dexRootAddress, params, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, dexRootAddress); const result = await (0, contracts_1.dexRootContract)(connection, dexRootAddress) .methods.getExpectedPairAddress({ answerId: 0, left_root: (0, utils_1.resolveTvmAddress)(params.leftRootAddress), right_root: (0, utils_1.resolveTvmAddress)(params.rightRootAddress), }) .call({ cachedState: state, responsible: true }); return result.value0; } /** * Returns an expected pool address by a given DEX root address * and possible included tokens addresses * @param {ProviderRpcClient} connection * @param {Address | string} dexRootAddress * @param {DexExpectedPoolAddressAbiParams} params * @param {FullContractState} [cachedState] * @return {Promise<Address>} */ static async getExpectedPoolAddress(connection, dexRootAddress, params, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, dexRootAddress); const result = await (0, contracts_1.dexRootContract)(connection, dexRootAddress) .methods.getExpectedPoolAddress({ _roots: params.roots.map(utils_1.resolveTvmAddress), answerId: 0, }) .call({ cachedState: state, responsible: true }); return result.value0; } static async getManager(connection, dexRootAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, dexRootAddress); const result = await (0, contracts_1.dexRootContract)(connection, dexRootAddress) .methods.getManager({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } static async getOwner(connection, dexRootAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, dexRootAddress); const result = await (0, contracts_1.dexRootContract)(connection, dexRootAddress) .methods.getOwner({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.dex_owner; } static async getVault(connection, dexRootAddress, cachedState) { const result = await (0, contracts_1.dexRootContract)(connection, dexRootAddress) .methods.getVault({ answerId: 0 }) .call({ cachedState, responsible: true }); return result.value0; } static decodeEvent(connection, dexRootAddress, args) { return (0, contracts_1.dexRootContract)(connection, dexRootAddress).decodeEvent(args); } static decodeTransaction(connection, dexRootAddress, args) { return (0, contracts_1.dexRootContract)(connection, dexRootAddress).decodeTransaction(args); } static decodeTransactionEvents(connection, dexRootAddress, transaction) { return (0, contracts_1.dexRootContract)(connection, dexRootAddress).decodeTransactionEvents({ transaction }); } } exports.DexUtils = DexUtils;