UNPKG

rubic-sdk

Version:
72 lines 3.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Web3Public = void 0; const errors_1 = require("../../../../common/errors"); const blockchains_info_1 = require("../../utils/blockchains-info/blockchains-info"); const multicall_addresses_1 = require("./constants/multicall-addresses"); const web3_pure_1 = require("../../web3-pure/web3-pure"); /** * Class containing methods for calling contracts in order to obtain information from the blockchain. * To send transaction or execute contract method use {@link Web3Private}. */ class Web3Public { constructor(blockchainName) { this.blockchainName = blockchainName; this.multicallAddress = multicall_addresses_1.MULTICALL_ADDRESSES[this.blockchainName]; this.Web3Pure = web3_pure_1.Web3Pure[blockchains_info_1.BlockchainsInfo.getChainType(this.blockchainName)]; } /** * Checks that user has enough balance. * @param userAddress Wallet address, which contains tokens. * @param token Token to check balance of. * @param requiredAmount Required user balance in Eth units. */ async checkBalance(token, requiredAmount, userAddress) { const balanceWei = await this.getBalance(userAddress, token.address); const balance = web3_pure_1.Web3Pure.fromWei(balanceWei, token.decimals); if (balance.lt(requiredAmount)) { throw new errors_1.InsufficientFundsError(token, balance, requiredAmount); } } /** * Gets token info by address. * @param tokenAddress Address of token. * @param tokenFields Token's fields to get. */ async callForTokenInfo(tokenAddress, tokenFields = ['decimals', 'symbol', 'name']) { return (await this.callForTokensInfo([tokenAddress], tokenFields))[0]; } /** * Uses multicall to make several calls of one method in one contract. * @param contractAddress Target contract address. * @param contractAbi Target contract abi. * @param methodName Method name. * @param methodCallsArguments Method parameters array, for each method call. */ async multicallContractMethod(contractAddress, contractAbi, methodName, methodCallsArguments) { return this.multicallContractMethods(contractAddress, contractAbi, methodCallsArguments.map(methodArguments => ({ methodName, methodArguments }))); } /** * Uses multicall to make several methods calls in one contract. * @param contractAddress Target contract address. * @param contractAbi Target contract abi. * @param methodsData Methods data, containing methods' names and arguments. */ async multicallContractMethods(contractAddress, contractAbi, methodsData) { const results = await this.multicallContractsMethods(contractAbi, [ { contractAddress, methodsData } ]); if (!results?.[0]) { throw new errors_1.RubicSdkError('Cant perform multicall or request data is empty'); } return results[0]; } } exports.Web3Public = Web3Public; //# sourceMappingURL=web3-public.js.map