UNPKG

check-ethereum-scanner

Version:

Safety checks for new Ethereum tokens

39 lines (34 loc) 1.86 kB
var BN = require('bn.js'); var stripHexPrefix = require('strip-hex-prefix'); /** * Returns a BN object, converts a number value to a BN * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object * @return {Object} `output` BN object of the number * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number */ module.exports = function numberToBN(arg) { if (typeof arg === 'string' || typeof arg === 'number') { var multiplier = new BN(1); // eslint-disable-line var formattedString = String(arg).toLowerCase().trim(); var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x'; var stringArg = stripHexPrefix(formattedString); // eslint-disable-line if (stringArg.substr(0, 1) === '-') { stringArg = stripHexPrefix(stringArg.slice(1)); multiplier = new BN(-1, 10); } stringArg = stringArg === '' ? '0' : stringArg; if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/)) || stringArg.match(/^[a-fA-F]+$/) || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) { return new BN(stringArg, 16).mul(multiplier); } if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) { return new BN(stringArg, 10).mul(multiplier); } } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) { if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) { return new BN(arg.toString(10), 10); } } throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.'); }