UNPKG

@abcpros/bitcore-wallet-service

Version:
263 lines 9.5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Utils = void 0; var CWC = __importStar(require("@abcpros/crypto-wallet-core")); var lodash_1 = __importDefault(require("lodash")); var $ = require('preconditions').singleton(); var bitcore = require('@abcpros/bitcore-lib'); var crypto = bitcore.crypto; var secp256k1 = require('secp256k1'); var Bitcore = require('@abcpros/bitcore-lib'); var Bitcore_ = { btc: Bitcore, bch: require('@abcpros/bitcore-lib-cash'), xec: require('@abcpros/bitcore-lib-xec'), doge: require('@abcpros/bitcore-lib-doge'), xpi: require('@abcpros/bitcore-lib-xpi'), ltc: require('@abcpros/bitcore-lib-ltc') }; var Utils = (function () { function Utils() { } Utils.getMissingFields = function (obj, args) { args = [].concat(args); if (!lodash_1.default.isObject(obj)) return args; var missing = lodash_1.default.filter(args, function (arg) { return !obj.hasOwnProperty(arg); }); return missing; }; Utils.strip = function (number) { return parseFloat(number.toPrecision(12)); }; Utils.hashMessage = function (text, noReverse) { $.checkArgument(text); var buf = Buffer.from(text); var ret = crypto.Hash.sha256sha256(buf); if (!noReverse) { ret = new bitcore.encoding.BufferReader(ret).readReverse(); } return ret; }; Utils.verifyMessage = function (message, signature, publicKey) { $.checkArgument(message); var flattenedMessage = lodash_1.default.isArray(message) ? lodash_1.default.join(message) : message; var hash = Utils.hashMessage(flattenedMessage, true); var sig = this._tryImportSignature(signature); if (!sig) { return false; } var publicKeyBuffer = this._tryImportPublicKey(publicKey); if (!publicKeyBuffer) { return false; } return this._tryVerifyMessage(hash, sig, publicKeyBuffer); }; Utils._tryImportPublicKey = function (publicKey) { var publicKeyBuffer = publicKey; try { if (!Buffer.isBuffer(publicKey)) { publicKeyBuffer = Buffer.from(publicKey, 'hex'); } return publicKeyBuffer; } catch (e) { return false; } }; Utils._tryImportSignature = function (signature) { try { var signatureBuffer = signature; if (!Buffer.isBuffer(signature)) { signatureBuffer = Buffer.from(signature, 'hex'); } return secp256k1.signatureImport(signatureBuffer); } catch (e) { return false; } }; Utils._tryVerifyMessage = function (hash, sig, publicKeyBuffer) { try { return secp256k1.verify(hash, sig, publicKeyBuffer); } catch (e) { return false; } }; Utils.formatAmount = function (satoshis, unit, opts) { var UNITS = Object.entries(CWC.Constants.UNITS).reduce(function (units, _a) { var currency = _a[0], currencyConfig = _a[1]; units[currency] = { toSatoshis: currencyConfig.toSatoshis, maxDecimals: currencyConfig.short.maxDecimals, minDecimals: currencyConfig.short.minDecimals }; return units; }, {}); $.shouldBeNumber(satoshis); $.checkArgument(lodash_1.default.includes(lodash_1.default.keys(UNITS), unit)); function addSeparators(nStr, thousands, decimal, minDecimals) { nStr = nStr.replace('.', decimal); var x = nStr.split(decimal); var x0 = x[0]; var x1 = x[1]; x1 = lodash_1.default.dropRightWhile(x1, function (n, i) { return n == '0' && i >= minDecimals; }).join(''); var x2 = x.length > 1 ? decimal + x1 : ''; x0 = x0.replace(/\B(?=(\d{3})+(?!\d))/g, thousands); return x0 + x2; } opts = opts || {}; if (!UNITS[unit]) { return Number(satoshis).toLocaleString(); } var u = lodash_1.default.assign(UNITS[unit], opts); var amount = (satoshis / u.toSatoshis).toFixed(u.maxDecimals); return addSeparators(amount, opts.thousandsSeparator || ',', opts.decimalSeparator || '.', u.minDecimals); }; Utils.formatAmountInBtc = function (amount) { return (Utils.formatAmount(amount, 'btc', { minDecimals: 8, maxDecimals: 8 }) + 'btc'); }; Utils.formatUtxos = function (utxos) { if (lodash_1.default.isEmpty(utxos)) return 'none'; return lodash_1.default.map([].concat(utxos), function (i) { var amount = Utils.formatAmountInBtc(i.satoshis); var confirmations = i.confirmations ? i.confirmations + 'c' : 'u'; return amount + '/' + confirmations; }).join(', '); }; Utils.formatRatio = function (ratio) { return (ratio * 100).toFixed(4) + '%'; }; Utils.formatSize = function (size) { return (size / 1000).toFixed(4) + 'kB'; }; Utils.parseVersion = function (version) { var v = {}; if (!version) return null; var x = version.split('-'); if (x.length != 2) { v.agent = version; return v; } v.agent = lodash_1.default.includes(['bwc', 'bws'], x[0]) ? 'bwc' : x[0]; x = x[1].split('.'); v.major = x[0] ? parseInt(x[0]) : null; v.minor = x[1] ? parseInt(x[1]) : null; v.patch = x[2] ? parseInt(x[2]) : null; return v; }; Utils.parseAppVersion = function (agent) { var v = {}; if (!agent) return null; agent = agent.toLowerCase(); var w; w = agent.indexOf('copay'); if (w >= 0) { v.app = 'copay'; } else { w = agent.indexOf('bitpay'); if (w >= 0) { v.app = 'bitpay'; } else { v.app = 'other'; return v; } } var version = agent.substr(w + v.app.length); var x = version.split('.'); v.major = x[0] ? parseInt(x[0].replace(/\D/g, '')) : null; v.minor = x[1] ? parseInt(x[1]) : null; v.patch = x[2] ? parseInt(x[2]) : null; return v; }; Utils.getIpFromReq = function (req) { if (req.headers) { if (req.headers['x-forwarded-for']) return req.headers['x-forwarded-for'].split(',')[0]; if (req.headers['x-real-ip']) return req.headers['x-real-ip'].split(',')[0]; } if (req.ip) return req.ip; if (req.connection && req.connection.remoteAddress) return req.connection.remoteAddress; return ''; }; Utils.checkValueInCollection = function (value, collection) { if (!value || !lodash_1.default.isString(value)) return false; return lodash_1.default.includes(lodash_1.default.values(collection), value); }; Utils.getAddressCoin = function (address) { try { new Bitcore_['btc'].Address(address); return 'btc'; } catch (e) { try { new Bitcore_['bch'].Address(address); return 'bch'; } catch (e) { try { new Bitcore_['doge'].Address(address); return 'doge'; } catch (e) { try { new Bitcore_['ltc'].Address(address); return 'ltc'; } catch (e) { return; } } } } }; Utils.translateAddress = function (address, coin) { var origCoin = Utils.getAddressCoin(address); var origAddress = new Bitcore_[origCoin].Address(address); var origObj = origAddress.toObject(); var result = Bitcore_[coin].Address.fromObject(origObj); return coin == 'bch' ? result.toLegacyAddress() : result.toString(); }; return Utils; }()); exports.Utils = Utils; module.exports = Utils; //# sourceMappingURL=utils.js.map