UNPKG

@broxus/js-core

Version:

MobX-based JavaScript Core library

319 lines (318 loc) 16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TvmTokenUtils = void 0; const js_utils_1 = require("@broxus/js-utils"); const console_1 = require("../../console"); const constants_1 = require("../../constants"); const contracts_1 = require("../../models/tvm-token/contracts"); const utils_1 = require("../../utils"); const get_scan_link_1 = require("../../utils/get-scan-link"); class TvmTokenUtils { static async deployWallet(provider, tokenAddress, params, args) { const _params = { answerId: 0, deployWalletValue: params.deployWalletValue ?? (0, utils_1.toInt)(1, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), walletOwner: (0, utils_1.resolveTvmAddress)(params.walletOwner), }; const _args = { amount: (0, utils_1.toInt)(1, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: true, from: (0, utils_1.resolveTvmAddress)(params.walletOwner), ...args, }; try { return await (0, contracts_1.tokenRootContract)(provider, tokenAddress) .methods.deployWallet(_params) .sendDelayed(_args); } catch (e) { if (!(0, utils_1.isUnsupportedAbiVersionError)(e)) { throw e; } return (0, contracts_1.tokenRootV23Contract)(provider, tokenAddress) .methods.deployWallet(_params) .sendDelayed(_args); } } static async burn(provider, tokenAddress, params, args) { const _params = { amount: params.amount, callbackTo: (0, utils_1.resolveTvmAddress)(params.callbackTo), payload: params.payload, remainingGasTo: (0, utils_1.resolveTvmAddress)(params.remainingGasTo), walletOwner: (0, utils_1.resolveTvmAddress)(params.walletOwner), }; const _args = { amount: (0, utils_1.toInt)(0.5, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: true, from: (0, utils_1.resolveTvmAddress)(params.remainingGasTo), ...args, }; try { return await (0, contracts_1.tokenRootContract)(provider, tokenAddress) .methods.burnTokens(_params) .sendDelayed(_args); } catch (e) { if (!(0, utils_1.isUnsupportedAbiVersionError)(e)) { throw e; } return (0, contracts_1.tokenRootV23Contract)(provider, tokenAddress) .methods.burnTokens(_params) .sendDelayed(_args); } } static async mint(provider, tokenAddress, params, args) { const _params = { amount: params.amount, deployWalletValue: params.deployWalletValue ?? (0, utils_1.toInt)(1, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), notify: params.notify ?? false, payload: params.payload ?? '', recipient: (0, utils_1.resolveTvmAddress)(params.recipient), remainingGasTo: (0, utils_1.resolveTvmAddress)(params.remainingGasTo), }; const _args = { amount: (0, utils_1.toInt)(0.6, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: true, from: (0, utils_1.resolveTvmAddress)(params.remainingGasTo), ...args, }; try { return await (0, contracts_1.tokenRootContract)(provider, tokenAddress) .methods.mint(_params) .sendDelayed(_args); } catch (e) { if (!(0, utils_1.isUnsupportedAbiVersionError)(e)) { throw e; } return (0, contracts_1.tokenRootV23Contract)(provider, tokenAddress) .methods.mint(_params) .sendDelayed(_args); } } static async transferOwnership(provider, tokenAddress, params, args) { const _params = { callbacks: params.callbacks ?? [], newOwner: (0, utils_1.resolveTvmAddress)(params.newOwner), remainingGasTo: (0, utils_1.resolveTvmAddress)(params.remainingGasTo), }; const _args = { amount: (0, utils_1.toInt)(5, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: true, from: (0, utils_1.resolveTvmAddress)(params.remainingGasTo), ...args, }; try { return await (0, contracts_1.tokenRootContract)(provider, tokenAddress) .methods.transferOwnership(_params) .sendDelayed(_args); } catch (e) { if (!(0, utils_1.isUnsupportedAbiVersionError)(e)) { throw e; } return (0, contracts_1.tokenRootV23Contract)(provider, tokenAddress) .methods.transferOwnership(_params) .sendDelayed(_args); } } static async disableBurnByRoot(provider, tokenAddress, args) { const _args = { amount: (0, utils_1.toInt)(0.1, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: true, ...args, }; try { return await (0, contracts_1.tokenRootContract)(provider, tokenAddress) .methods.disableBurnByRoot({ answerId: 0 }) .sendDelayed(_args); } catch (e) { if (!(0, utils_1.isUnsupportedAbiVersionError)(e)) { throw e; } return (0, contracts_1.tokenRootV23Contract)(provider, tokenAddress) .methods.disableBurnByRoot({ answerId: 0 }) .sendDelayed(_args); } } static async disableMint(provider, tokenAddress, args) { const _args = { amount: (0, utils_1.toInt)(0.1, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: true, ...args, }; try { return await (0, contracts_1.tokenRootContract)(provider, tokenAddress) .methods.disableMint({ answerId: 0 }) .sendDelayed(_args); } catch (e) { if (!(0, utils_1.isUnsupportedAbiVersionError)(e)) { throw e; } return (0, contracts_1.tokenRootV23Contract)(provider, tokenAddress) .methods.disableMint({ answerId: 0 }) .sendDelayed(_args); } } static async setBurnPaused(provider, tokenAddress, params, args) { const _args = { amount: (0, utils_1.toInt)(0.1, constants_1.DEFAULT_NATIVE_CURRENCY_DECIMALS), bounce: true, ...args, }; try { return await (0, contracts_1.tokenRootContract)(provider, tokenAddress) .methods.setBurnPaused({ answerId: 0, paused: params.paused }) .sendDelayed(_args); } catch (e) { if (!(0, utils_1.isUnsupportedAbiVersionError)(e)) { throw e; } return (0, contracts_1.tokenRootV23Contract)(provider, tokenAddress) .methods.setBurnPaused({ answerId: 0, paused: params.paused }) .sendDelayed(_args); } } static async getDetails(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); if (!state?.isDeployed) { return undefined; } return Promise.all([ TvmTokenUtils.getDecimals(connection, tokenAddress, state), TvmTokenUtils.getName(connection, tokenAddress, state), TvmTokenUtils.getSymbol(connection, tokenAddress, state), TvmTokenUtils.rootOwnerAddress(connection, tokenAddress, state), TvmTokenUtils.totalSupply(connection, tokenAddress, state), ]).then(async ([decimals, name, symbol, rootOwnerAddress, totalSupply]) => { if (process.env.NODE_ENV !== 'production') { const providerState = await connection.getProviderState(); const tokenLink = (0, get_scan_link_1.getScanLink)(tokenAddress.toString(), providerState.networkId.toString()); const ownerLink = (0, get_scan_link_1.getScanLink)(rootOwnerAddress.toString(), providerState.networkId.toString()); const args = [ `%cTvmTokenUtils%c Request token %c${symbol}%c [%c${(0, js_utils_1.sliceString)(tokenAddress.toString())}%c] details${cachedState ? ' [from cache]' : ''}`, console_1.successLabelStyle, console_1.inheritTextStyle, console_1.successTextStyle, console_1.inheritTextStyle, console_1.successTextStyle, console_1.inheritTextStyle, ]; (0, js_utils_1.groupCollapsed)(...args); (0, js_utils_1.debug)(`Token root address: %c${(0, js_utils_1.sliceString)(tokenAddress.toString())}%c ${tokenLink}`, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.debug)(`Token symbol: %c${symbol}`, console_1.successTextStyle); (0, js_utils_1.debug)(`Token name: %c${name}`, console_1.successTextStyle); (0, js_utils_1.debug)(`Token decimals: %c${decimals}`, console_1.successTextStyle); (0, js_utils_1.debug)(`Token total supply: %c${(0, js_utils_1.formattedTokenAmount)(totalSupply, decimals, { preserve: true, roundOn: false, })}`, console_1.successTextStyle); (0, js_utils_1.debug)(`Token root owner address: %c${(0, js_utils_1.sliceString)(rootOwnerAddress.toString())}%c ${ownerLink}`, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.groupEnd)(); } return { address: (0, utils_1.resolveTvmAddress)(tokenAddress), contractState: state, decimals, name, rootOwnerAddress, symbol, totalSupply, }; }); } static async getDecimals(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.decimals({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return parseInt(result.value0, 10); } static async getSymbol(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.symbol({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } static async getName(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.name({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } static async rootOwnerAddress(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.rootOwner({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } static async totalSupply(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.totalSupply({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } static async burnPaused(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.burnPaused({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } static async burnByRootDisabled(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.burnByRootDisabled({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } static async mintDisabled(connection, tokenAddress, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, tokenAddress) .methods.mintDisabled({ answerId: 0 }) .call({ cachedState: state, responsible: true }); return result.value0; } /** * Returns expected token wallet address * @param {ProviderRpcClient} connection * @param {TvmTokenOwnerAbiParams} params * @param {FullContractState} [cachedState] * @returns Promise<Address> */ static async walletOf(connection, params, cachedState) { const state = cachedState ?? await (0, utils_1.getFullContractState)(connection, params.tokenAddress); const result = await (0, contracts_1.tokenRootContract)(connection, params.tokenAddress) .methods.walletOf({ answerId: 0, walletOwner: (0, utils_1.resolveTvmAddress)(params.ownerAddress), }) .call({ cachedState: state, responsible: true }); if (process.env.NODE_ENV !== 'production') { const providerState = await connection.getProviderState(); const tokenLink = (0, get_scan_link_1.getScanLink)(params.tokenAddress.toString(), providerState.networkId.toString()); const ownerLink = (0, get_scan_link_1.getScanLink)(params.ownerAddress.toString(), providerState.networkId.toString()); const walletLink = (0, get_scan_link_1.getScanLink)(result.value0.toString(), providerState.networkId.toString()); const symbol = cachedState ? await TvmTokenUtils.getSymbol(connection, params.tokenAddress, cachedState) : undefined; (0, js_utils_1.groupCollapsed)(`%cTvmTokenUtils%c Request wallet address in token %c${symbol ?? (0, js_utils_1.sliceString)(params.tokenAddress.toString())}%c${cachedState ? ' [from cache]' : ''}`, console_1.successLabelStyle, console_1.inheritTextStyle, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.debug)(`Token root address: %c${(0, js_utils_1.sliceString)(params.tokenAddress.toString())}%c ${tokenLink}`, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.debug)(`Owner address: %c${(0, js_utils_1.sliceString)(params.ownerAddress.toString())}%c ${ownerLink}`, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.debug)(`Wallet address: %c${(0, js_utils_1.sliceString)(result.value0.toString())}%c ${walletLink}`, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.groupEnd)(); } return result.value0; } } exports.TvmTokenUtils = TvmTokenUtils;