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