more utils refactoring.

This commit is contained in:
Christopher Jeffrey 2016-04-30 20:06:26 -07:00
parent 30abc9bc25
commit 8d38178b30
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
4 changed files with 156 additions and 174 deletions

View File

@ -1034,7 +1034,7 @@ ChainDB.prototype.getCoinsByAddress = function getCoinsByAddress(addresses, call
if (typeof addresses === 'string')
addresses = [addresses];
addresses = utils.uniqs(addresses);
addresses = utils.uniq(addresses);
utils.forEachSerial(addresses, function(address, done) {
var iter = self.db.iterator({
@ -1146,7 +1146,7 @@ ChainDB.prototype.getTXByAddress = function getTXByAddress(addresses, callback)
if (typeof addresses === 'string')
addresses = [addresses];
addresses = utils.uniqs(addresses);
addresses = utils.uniq(addresses);
utils.forEachSerial(addresses, function(address, done) {
var iter = self.db.iterator({

View File

@ -72,7 +72,7 @@ TXDB.prototype.getMap = function getMap(tx, callback) {
input = tx.getInputAddresses();
output = tx.getOutputAddresses();
addresses = utils.uniqs(input.concat(output));
addresses = utils.uniq(input.concat(output));
function cb(err, table) {
if (err)
@ -95,9 +95,9 @@ TXDB.prototype.getMap = function getMap(tx, callback) {
map.output = map.output.concat(map.table[address]);
});
map.input = utils.uniqs(map.input);
map.output = utils.uniqs(map.output);
map.all = utils.uniqs(map.input.concat(map.output));
map.input = utils.uniq(map.input);
map.output = utils.uniq(map.output);
map.all = utils.uniq(map.input.concat(map.output));
return callback(null, map);
}
@ -1087,7 +1087,7 @@ TXDB.prototype.getHistoryHashes = function getHistoryHashes(address, callback) {
if (err)
return callback(err);
txs = utils.uniqs(txs);
txs = utils.uniq(txs);
return callback(null, txs);
});
@ -1162,7 +1162,7 @@ TXDB.prototype.getUnconfirmedHashes = function getUnconfirmedHashes(address, cal
if (err)
return callback(err);
txs = utils.uniqs(txs);
txs = utils.uniq(txs);
return callback(null, txs);
});

View File

@ -52,21 +52,21 @@ utils.gc = !utils.isBrowser && typeof gc === 'function' ? gc : utils.nop;
/**
* A slow buffer slice (will allocate a new buffer).
* @param {Buffer} buf
* @param {Buffer} data
* @param {Number?} start
* @param {Number?} end
* @returns {Buffer}
*/
utils.slice = function slice(buf, start, end) {
utils.slice = function slice(data, start, end) {
var clone;
if (start != null)
buf = buf.slice(start, end);
data = data.slice(start, end);
clone = new Buffer(buf.length);
clone = new Buffer(data.length);
buf.copy(clone, 0, 0, buf.length);
data.copy(clone, 0, 0, data.length);
return clone;
};
@ -88,27 +88,27 @@ for (var i = 0; i < base58.length; i++)
/**
* Encode a base58 string.
* @see https://github.com/bitcoin/bitcoin/blob/master/src/base58.cpp
* @param {Buffer} buf
* @param {Buffer} data
* @returns {Base58String}
*/
utils.toBase58 = function toBase58(buf) {
utils.toBase58 = function toBase58(data) {
var zeroes = 0;
var length = 0;
var str = '';
var i, b58, carry, j, k;
for (i = 0; i < buf.length; i++) {
if (buf[i] !== 0)
for (i = 0; i < data.length; i++) {
if (data[i] !== 0)
break;
zeroes++;
}
b58 = new Buffer(((buf.length * 138 / 100) | 0) + 1);
b58 = new Buffer(((data.length * 138 / 100) | 0) + 1);
b58.fill(0);
for (; i < buf.length; i++) {
carry = buf[i];
for (; i < data.length; i++) {
carry = data[i];
j = 0;
for (k = b58.length - 1; k >= 0; k--, j++) {
if (carry === 0 && j >= length)
@ -189,12 +189,12 @@ utils.fromBase58 = function fromBase58(str) {
/**
* Test whether a string is base58 (note that you
* may get a false positive on a hex string).
* @param {String?} msg
* @param {String?} obj
* @returns {Boolean}
*/
utils.isBase58 = function isBase58(msg) {
return typeof msg === 'string' && /^[1-9a-zA-Z]+$/.test(msg);
utils.isBase58 = function isBase58(obj) {
return typeof obj === 'string' && /^[1-9a-zA-Z]+$/.test(obj);
};
/**
@ -461,12 +461,12 @@ utils.pbkdf2key = function pbkdf2key(passphrase, salt, iterations, dkLen, ivLen,
/**
* Test whether a string is hex. Note that this
* may yield a false positive on base58 strings.
* @param {String?} msg
* @param {String?} obj
* @returns {Boolean}
*/
utils.isHex = function isHex(msg) {
return typeof msg === 'string' && /^[0-9a-f]+$/i.test(msg);
utils.isHex = function isHex(obj) {
return typeof obj === 'string' && /^[0-9a-f]+$/i.test(obj);
};
/**
@ -590,8 +590,8 @@ utils.merge = function merge(target) {
/**
* Assertion.
* @param {Boolean} val - Expression.
* @param {String?} msg - Optional error message.
* @param {Boolean} value - Expression.
* @param {String?} message - Optional error message.
*/
utils.assert = function assert(value, message) {
@ -1056,31 +1056,13 @@ utils.sortTX = function sortTX(txs) {
});
};
/**
* Unique-ify an array.
* @param {Array} obj
* @returns {Array}
*/
utils.uniq = function uniq(obj) {
var out = [];
var i = 0;
for (; i < obj.length; i++) {
if (out.indexOf(obj[i]) === -1)
out.push(obj[i]);
}
return out;
};
/**
* Unique-ify an array of strings.
* @param {String[]} obj
* @returns {String[]}
*/
utils.uniqs = function uniqs(obj) {
utils.uniq = function uniq(obj) {
var table = {};
var out = [];
var i = 0;
@ -1187,7 +1169,7 @@ utils.now = function now() {
/**
* Create a Date ISO string from time in unix time (seconds).
* @param {Number?} - Seconds in unix time.
* @param {Number?} ts - Seconds in unix time.
* @returns {String}
*/
@ -1265,187 +1247,187 @@ utils.nonce = function nonce() {
/**
* Read uint8.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.readU8 = function readU8(arr, off) {
utils.readU8 = function readU8(data, off) {
off = off >>> 0;
return arr[off];
return data[off];
};
/**
* Read uint16le.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.readU16 = function readU16(arr, off) {
utils.readU16 = function readU16(data, off) {
off = off >>> 0;
return arr[off] | (arr[off + 1] << 8);
return data[off] | (data[off + 1] << 8);
};
/**
* Read uint16be.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.readU16BE = function readU16BE(arr, off) {
utils.readU16BE = function readU16BE(data, off) {
off = off >>> 0;
return (arr[off] << 8) | arr[off + 1];
return (data[off] << 8) | data[off + 1];
};
/**
* Read uint32le.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.readU32 = function readU32(arr, off) {
utils.readU32 = function readU32(data, off) {
off = off >>> 0;
return ((arr[off])
| (arr[off + 1] << 8)
| (arr[off + 2] << 16))
+ (arr[off + 3] * 0x1000000);
return ((data[off])
| (data[off + 1] << 8)
| (data[off + 2] << 16))
+ (data[off + 3] * 0x1000000);
};
/**
* Read uint32be.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.readU32BE = function readU32BE(arr, off) {
utils.readU32BE = function readU32BE(data, off) {
off = off >>> 0;
return (arr[off] * 0x1000000)
+ ((arr[off + 1] << 16)
| (arr[off + 2] << 8)
| arr[off + 3]);
return (data[off] * 0x1000000)
+ ((data[off + 1] << 16)
| (data[off + 2] << 8)
| data[off + 3]);
};
/**
* Read uint64le.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {BN}
*/
utils.readU64 = function readU64(arr, off) {
utils.readU64 = function readU64(data, off) {
var num;
off = off >>> 0;
num = arr.slice(off, off + 8);
num = data.slice(off, off + 8);
return new bn(num, 'le');
};
/**
* Read uint64be.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {BN}
*/
utils.readU64BE = function readU64BE(arr, off) {
utils.readU64BE = function readU64BE(data, off) {
var num;
off = off >>> 0;
num = arr.slice(off, off + 8);
num = data.slice(off, off + 8);
return new bn(num, 'be');
};
/**
* Read int8.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.read8 = function read8(arr, off) {
utils.read8 = function read8(data, off) {
var num;
off = off >>> 0;
num = arr[off];
num = data[off];
return !(num & 0x80) ? num : (0xff - num + 1) * -1;
};
/**
* Read int16le.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.read16 = function read16(arr, off) {
utils.read16 = function read16(data, off) {
var num;
off = off >>> 0;
num = arr[off] | (arr[off + 1] << 8);
num = data[off] | (data[off + 1] << 8);
return (num & 0x8000) ? num | 0xffff0000 : num;
};
/**
* Read int16be.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.read16BE = function read16BE(arr, off) {
utils.read16BE = function read16BE(data, off) {
var num;
off = off >>> 0;
num = arr[off + 1] | (arr[off] << 8);
num = data[off + 1] | (data[off] << 8);
return (num & 0x8000) ? num | 0xffff0000 : num;
};
/**
* Read int32le.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.read32 = function read32(arr, off) {
utils.read32 = function read32(data, off) {
off = off >>> 0;
return (arr[off])
| (arr[off + 1] << 8)
| (arr[off + 2] << 16)
| (arr[off + 3] << 24);
return (data[off])
| (data[off + 1] << 8)
| (data[off + 2] << 16)
| (data[off + 3] << 24);
};
/**
* Read int32be.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.read32BE = function read32BE(arr, off) {
utils.read32BE = function read32BE(data, off) {
off = off >>> 0;
return (arr[off] << 24)
| (arr[off + 1] << 16)
| (arr[off + 2] << 8)
| (arr[off + 3]);
return (data[off] << 24)
| (data[off + 1] << 16)
| (data[off + 2] << 8)
| (data[off + 3]);
};
/**
* Read int64le.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {BN}
*/
utils.read64 = function read64(arr, off) {
utils.read64 = function read64(data, off) {
var num;
off = off >>> 0;
num = arr.slice(off, off + 8);
num = data.slice(off, off + 8);
if (num[num.length - 1] & 0x80)
return new bn(num, 'le').notn(64).addn(1).neg();
@ -1455,17 +1437,17 @@ utils.read64 = function read64(arr, off) {
/**
* Read int64be.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {BN}
*/
utils.read64BE = function read64BE(arr, off) {
utils.read64BE = function read64BE(data, off) {
var num;
off = off >>> 0;
num = arr.slice(off, off + 8);
num = data.slice(off, off + 8);
if (num[0] & 0x80)
return new bn(num, 'be').notn(64).addn(1).neg();
@ -1691,17 +1673,17 @@ utils.write64NBE = function write64NBE(dst, num, off) {
/**
* Read uint64le as a js number.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @param {Boolean} force53 - Read only 53 bits, but maintain the sign.
* @returns {Number}
* @throws on num > MAX_SAFE_INTEGER
*/
utils.readU64N = function readU64N(dst, off, force53) {
utils.readU64N = function readU64N(data, off, force53) {
off = off >>> 0;
var hi = utils.readU32(dst, off + 4);
var lo = utils.readU32(dst, off);
var hi = utils.readU32(data, off + 4);
var lo = utils.readU32(data, off);
if (force53)
hi &= utils.MAX_SAFE_HI;
assert(hi <= utils.MAX_SAFE_HI, 'Number exceeds 2^53-1');
@ -1710,17 +1692,17 @@ utils.readU64N = function readU64N(dst, off, force53) {
/**
* Read uint64be as a js number.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @param {Boolean} force53 - Read only 53 bits, but maintain the sign.
* @returns {Number}
* @throws on num > MAX_SAFE_INTEGER
*/
utils.readU64NBE = function readU64NBE(dst, off, force53) {
utils.readU64NBE = function readU64NBE(data, off, force53) {
off = off >>> 0;
var hi = utils.readU32BE(dst, off);
var lo = utils.readU32BE(dst, off + 4);
var hi = utils.readU32BE(data, off);
var lo = utils.readU32BE(data, off + 4);
if (force53)
hi &= utils.MAX_SAFE_HI;
assert(hi <= utils.MAX_SAFE_HI, 'Number exceeds 2^53-1');
@ -1729,17 +1711,17 @@ utils.readU64NBE = function readU64NBE(dst, off, force53) {
/**
* Read int64le as a js number.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @param {Boolean} force53 - Read only 53 bits, but maintain the sign.
* @returns {Number}
* @throws on num > MAX_SAFE_INTEGER
*/
utils.read64N = function read64N(dst, off, force53) {
utils.read64N = function read64N(data, off, force53) {
off = off >>> 0;
var hi = utils.readU32(dst, off + 4);
var lo = utils.readU32(dst, off);
var hi = utils.readU32(data, off + 4);
var lo = utils.readU32(data, off);
if (hi & 0x80000000) {
hi = ~hi + 1;
lo = ~lo + 1;
@ -1756,17 +1738,17 @@ utils.read64N = function read64N(dst, off, force53) {
/**
* Read int64be as a js number.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @param {Boolean} force53 - Read only 53 bits, but maintain the sign.
* @returns {Number}
* @throws on num > MAX_SAFE_INTEGER
*/
utils.read64NBE = function read64NBE(dst, off, force53) {
utils.read64NBE = function read64NBE(data, off, force53) {
off = off >>> 0;
var hi = utils.readU32BE(dst, off);
var lo = utils.readU32BE(dst, off + 4);
var hi = utils.readU32BE(data, off);
var lo = utils.readU32BE(data, off + 4);
if (hi & 0x80000000) {
hi = ~hi + 1;
lo = ~lo + 1;
@ -1784,49 +1766,49 @@ utils.read64NBE = function read64NBE(dst, off, force53) {
/**
* Read first least significant 53 bits of
* a uint64le as a js number. Maintain the sign.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.readU53 = function readU53(dst, off) {
return utils.readU64N(dst, off, true);
utils.readU53 = function readU53(data, off) {
return utils.readU64N(data, off, true);
};
/**
* Read first least significant 53 bits of
* a uint64be as a js number. Maintain the sign.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.readU53BE = function readU53BE(dst, off) {
return utils.readU64NBE(dst, off, true);
utils.readU53BE = function readU53BE(data, off) {
return utils.readU64NBE(data, off, true);
};
/**
* Read first least significant 53 bits of
* a uint64le as a js number. Maintain the sign.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.read53 = function read53(dst, off) {
return utils.read64N(dst, off, true);
utils.read53 = function read53(data, off) {
return utils.read64N(data, off, true);
};
/**
* Read first least significant 53 bits of
* a int64be as a js number. Maintain the sign.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @returns {Number}
*/
utils.read53BE = function read53BE(dst, off) {
return utils.read64NBE(dst, off, true);
utils.read53BE = function read53BE(data, off) {
return utils.read64NBE(data, off, true);
};
/**
@ -1974,42 +1956,42 @@ utils.write64BE = function write64BE(dst, num, off) {
/**
* Read a varint.
* @param {Buffer} arr
* @param {Buffer} data
* @param {Number} off
* @param {Boolean?} big - Whether to read as a big number.
* @returns {Number}
*/
utils.readVarint = function readVarint(arr, off, big) {
utils.readVarint = function readVarint(data, off, big) {
var r, bytes;
off = off >>> 0;
assert(off < arr.length);
assert(off < data.length);
if (arr[off] < 0xfd) {
r = arr[off];
if (data[off] < 0xfd) {
r = data[off];
if (big)
r = new bn(r);
bytes = 1;
} else if (arr[off] === 0xfd) {
assert(off + 2 < arr.length);
r = arr[off + 1] | (arr[off + 2] << 8);
} else if (data[off] === 0xfd) {
assert(off + 2 < data.length);
r = data[off + 1] | (data[off + 2] << 8);
if (big)
r = new bn(r);
bytes = 3;
} else if (arr[off] === 0xfe) {
assert(off + 4 < arr.length);
r = utils.readU32(arr, off + 1);
} else if (data[off] === 0xfe) {
assert(off + 4 < data.length);
r = utils.readU32(data, off + 1);
if (big)
r = new bn(r);
bytes = 5;
} else if (arr[off] === 0xff) {
assert(off + 8 < arr.length);
} else if (data[off] === 0xff) {
assert(off + 8 < data.length);
if (big)
r = utils.readU64(arr, off + 1);
r = utils.readU64(data, off + 1);
else
r = utils.readU64N(arr, off + 1);
r = utils.readU64N(data, off + 1);
bytes = 9;
} else {
assert(false, 'Malformed varint.');
@ -2227,13 +2209,13 @@ utils.forRange = function forRange(from, to, iter, callback) {
/**
* Asynchronously iterate over an array in parallel.
* @param {Array} arr
* @param {Array} obj
* @param {Function} iter
* @param {Function} callback
*/
utils.forEach = function forEach(arr, iter, callback) {
var pending = arr.length;
utils.forEach = function forEach(obj, iter, callback) {
var pending = obj.length;
var error;
callback = utils.asyncify(callback);
@ -2249,7 +2231,7 @@ utils.forEach = function forEach(arr, iter, callback) {
callback(error);
}
arr.forEach(function(item, i) {
obj.forEach(function(item, i) {
iter(item, next, i);
});
};
@ -2286,12 +2268,12 @@ utils.forRangeSerial = function forRangeSerial(from, to, iter, callback) {
/**
* Asynchronously iterate over an array in serial.
* @param {Array} arr
* @param {Array} obj
* @param {Function} iter
* @param {Function} callback
*/
utils.forEachSerial = function forEachSerial(arr, iter, callback) {
utils.forEachSerial = function forEachSerial(obj, iter, callback) {
var i = 0;
var called = false;
@ -2304,11 +2286,11 @@ utils.forEachSerial = function forEachSerial(arr, iter, callback) {
called = true;
return callback(err);
}
if (i >= arr.length) {
if (i >= obj.length) {
called = true;
return callback();
}
item = arr[i];
item = obj[i];
i++;
utils.nextTick(function() {
iter(item, next, i - 1);
@ -2319,13 +2301,13 @@ utils.forEachSerial = function forEachSerial(arr, iter, callback) {
/**
* Asynchronously apply a truth test to every
* member of an array in parallel.
* @param {Array} arr
* @param {Array} obj
* @param {Function} iter
* @param {Function} callback
*/
utils.every = function every(arr, iter, callback) {
var pending = arr.length;
utils.every = function every(obj, iter, callback) {
var pending = obj.length;
var result = true;
var error;
@ -2347,7 +2329,7 @@ utils.every = function every(arr, iter, callback) {
}
}
arr.forEach(function(item, i) {
obj.forEach(function(item, i) {
iter(item, next, i);
});
};
@ -2355,12 +2337,12 @@ utils.every = function every(arr, iter, callback) {
/**
* Asynchronously apply a truth test to every
* member of an array in serial.
* @param {Array} arr
* @param {Array} obj
* @param {Function} iter
* @param {Function} callback
*/
utils.everySerial = function everySerial(arr, iter, callback) {
utils.everySerial = function everySerial(obj, iter, callback) {
var i = 0;
var called = false;
@ -2377,11 +2359,11 @@ utils.everySerial = function everySerial(arr, iter, callback) {
called = true;
return callback(null, false);
}
if (i >= arr.length) {
if (i >= obj.length) {
called = true;
return callback(null, true);
}
item = arr[i];
item = obj[i];
i++;
utils.nextTick(function() {
iter(item, next, i - 1);
@ -2566,21 +2548,21 @@ utils.checkMerkleBranch = function checkMerkleBranch(hash, branch, index) {
/**
* Find index of a buffer in an array of buffers.
* @param {Buffer[]} arr
* @param {Buffer} buf - Target buffer to find.
* @param {Buffer[]} obj
* @param {Buffer} data - Target buffer to find.
* @returns {Number} Index (-1 if not found).
*/
utils.indexOf = function indexOf(arr, buf) {
utils.indexOf = function indexOf(obj, data) {
var i;
assert(Array.isArray(arr));
assert(Buffer.isBuffer(buf));
assert(Array.isArray(obj));
assert(Buffer.isBuffer(data));
for (i = 0; i < arr.length; i++) {
if (!Buffer.isBuffer(arr[i]))
for (i = 0; i < obj.length; i++) {
if (!Buffer.isBuffer(obj[i]))
continue;
if (utils.equal(arr[i], buf))
if (utils.equal(obj[i], data))
return i;
}
@ -2695,13 +2677,13 @@ utils.serial = function serial(stack, callback) {
/**
* Convert an array to a map.
* @param {String[]} arr
* @param {String[]} obj
* @returns {Object} Map.
*/
utils.toMap = function toMap(arr) {
utils.toMap = function toMap(obj) {
var map = {};
arr.forEach(function(value) {
obj.forEach(function(value) {
map[value] = true;
});
return map;

View File

@ -901,7 +901,7 @@ Wallet.prototype.getInputPaths = function getInputPaths(tx, index) {
paths.push(path);
}
return utils.uniqs(paths);
return utils.uniq(paths);
};
/**
@ -937,7 +937,7 @@ Wallet.prototype.getOutputPaths = function getOutputPaths(tx, index) {
paths.push(path);
}
return utils.uniqs(paths);
return utils.uniq(paths);
};
/**