UNPKG

@broxus/js-bridge-essentials

Version:

Bridge JavaScript Essentials library

94 lines (93 loc) 4.34 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TonTokenUtils = void 0; const js_core_1 = require("@broxus/js-core"); const js_utils_1 = require("@broxus/js-utils"); const bignumber_js_1 = __importDefault(require("bignumber.js")); const abi_1 = require("../../models/ton-token/abi"); const types_1 = require("../../types"); const utils_1 = require("../../utils"); const endpoints = { [types_1.TonChains.Mainnet]: 'https://ton-tokens-meta.chainconnect.com', [types_1.TonChains.Testnet]: 'https://ton-testnet-tokens-meta.chainconnect.com', }; class TonTokenUtils { static async getOffchainDetails(address, chainId) { const endpoint = new js_core_1.Endpoint('token/:address', chainId != null ? endpoints[chainId] : endpoints[types_1.TonChains.Mainnet] ?? endpoints[types_1.TonChains.Mainnet]); const details = await endpoint.fetch({ address: (0, utils_1.resolveTonAddress)(address).toRawString() }); if (!details.symbol) { throw new Error('Details does not contains symbol'); } if (!details.decimals) { throw new Error('Details does not contains decimals'); } if (!details.name) { throw new Error('Details does not contains name'); } return { address: (0, utils_1.resolveTonAddress)(address), decimals: Number(details.decimals), logoURI: details.imageUrl ?? undefined, name: details.name, symbol: details.symbol, }; } static async getOffchainMeta(address, chainId) { const endpoint = new js_core_1.Endpoint('token/:address', chainId != null ? endpoints[chainId] : endpoints[types_1.TonChains.Mainnet] ?? endpoints[types_1.TonChains.Mainnet]); const details = await endpoint.fetch({ address: (0, utils_1.resolveTonAddress)(address).toRawString(), }); if (!details.meta) { throw new Error('Details does not contains meta'); } if (!details.meta.decimals) { throw new Error('Meta does not contains decimals'); } return { baseChainId: details.meta.chainId, baseToken: details.meta.baseToken, decimals: details.meta.decimals, evmTokenAddress: `0x${(0, bignumber_js_1.default)(details.meta.baseToken).toString(16).padStart(40, '0')}`, name: details.meta.name, symbol: details.meta.symbol, }; } static async walletOf(connection, params, cachedState) { const tokenRawAddress = (0, utils_1.resolveTonAddress)(params.tokenAddress).toRawString(); const ownerRawAddress = (0, utils_1.resolveTonAddress)(params.ownerAddress).toRawString(); try { // @ts-ignore const result = await connection.runGetter({ address: (0, js_core_1.resolveTvmAddress)(tokenRawAddress), cachedState, inputData: { walletOwner: (0, js_core_1.resolveTvmAddress)(ownerRawAddress), }, inputStructure: [ { name: 'walletOwner', type: 'address' }, ], method: 'get_wallet_address', outputStructure: [ { name: 'value0', type: 'address' }, ], }); if (!result.output?.value0) { (0, js_utils_1.throwException)('Wallet not found'); } return (0, utils_1.resolveTonAddress)(result.output.value0.toString()); } catch (e) { (0, js_utils_1.debug)('runGetter call failed with an error. Fallback to contract getter call'); const contract = new connection.Contract(abi_1.TonTokenRootAbi, (0, js_core_1.resolveTvmAddress)(tokenRawAddress)); // @ts-ignore const result = await contract.getters.get_wallet_address({ walletOwner: (0, js_core_1.resolveTvmAddress)(ownerRawAddress), }).run({ cachedState }); return (0, utils_1.resolveTonAddress)(result.value0.toString()); } } } exports.TonTokenUtils = TonTokenUtils;