UNPKG

evtjs

Version:

Javascript API Bindings for the everiToken blockchain.

125 lines (88 loc) 3.65 kB
'use strict'; var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var assert = require('assert'); var Structs = require('./structs'); module.exports = AssetCache; function AssetCache(network) { var cache = { 'SYS@eosio.token': { precision: 4 }, 'EOS@eosio.token': { precision: 4 } /** @return {Promise} {precision} */ };function lookupAsync(symbol, account) { assert(symbol, 'required symbol'); assert(account, 'required account'); if (account === 'eosio') { account = 'eosio.token'; } var extendedAsset = symbol + '@' + account; if (cache[extendedAsset] != null) { return _promise2.default.resolve(cache[extendedAsset]); } var statsPromise = network.getCurrencyStats(account, symbol).then(function (result) { var stats = result[symbol]; assert(stats, 'Missing currency stats for asset: ' + extendedAsset); var max_supply = stats.max_supply; assert.equal(typeof max_supply === 'undefined' ? 'undefined' : (0, _typeof3.default)(max_supply), 'string', 'Expecting max_supply string in currency stats: ' + result); assert(new RegExp('^[0-9]+(.[0-9]+)? ' + symbol + '$').test(max_supply), 'Expecting max_supply string like 10000.0000 SYM, instead got: ' + max_supply); var _max_supply$split = max_supply.split(' '), _max_supply$split2 = (0, _slicedToArray3.default)(_max_supply$split, 1), supply = _max_supply$split2[0]; var _supply$split = supply.split('.'), _supply$split2 = (0, _slicedToArray3.default)(_supply$split, 2), _supply$split2$ = _supply$split2[1], decimalstr = _supply$split2$ === undefined ? '' : _supply$split2$; var precision = decimalstr.length; assert(precision >= 0 && precision <= 18, 'unable to determine precision from string: ' + max_supply); return cache[extendedAsset] = { precision: precision }; }); promises.push(statsPromise); return cache[extendedAsset] = statsPromise; } function lookup(symbol, account) { assert(symbol, 'required symbol'); assert(account, 'required account'); if (account === 'eosio') { account = 'eosio.token'; } var extendedAsset = symbol + '@' + account; var c = cache[extendedAsset]; if (c != null) { return c; } if (c instanceof _promise2.default) { return undefined; } return null; } return { lookupAsync: lookupAsync, lookup: lookup }; } var promises = []; AssetCache.resolve = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return _promise2.default.all(promises); case 2: promises = []; case 3: case 'end': return _context.stop(); } } }, _callee, this); }));