diff --git a/packages/bitcore-mnemonic/lib/mnemonic.js b/packages/bitcore-mnemonic/lib/mnemonic.js index 033228dfb9d..9e6289b6995 100644 --- a/packages/bitcore-mnemonic/lib/mnemonic.js +++ b/packages/bitcore-mnemonic/lib/mnemonic.js @@ -2,11 +2,10 @@ const bitcore = require('@bitpay-labs/bitcore-lib'); const unorm = require('unorm'); -const pbkdf2 = require('./pbkdf2'); const errors = require('./errors'); +const pbkdf2 = require('./pbkdf2'); const BN = bitcore.crypto.BN; -const _ = bitcore.deps._; const Hash = bitcore.crypto.Hash; const Random = bitcore.crypto.Random; const Network = bitcore.Networks; @@ -41,20 +40,20 @@ const Mnemonic = function(data, wordlist) { return new Mnemonic(data, wordlist); } - if (_.isArray(data)) { + if (Array.isArray(data)) { wordlist = data; data = null; } // handle data overloading - var ent, phrase, seed; + let ent, phrase, seed; if (Buffer.isBuffer(data)) { seed = data; ent = seed.length * 8; - } else if (_.isString(data)) { + } else if (typeof data === 'string') { phrase = unorm.nfkd(data); - } else if (_.isNumber(data)) { + } else if (typeof data === 'number') { ent = data; } else if (data) { throw new bitcore.errors.InvalidArgument('data', 'Must be a Buffer, a string or an integer'); @@ -120,22 +119,22 @@ Mnemonic.isValid = function(mnemonic, wordlist) { return false; } - var words = mnemonic.split(' '); - var bin = ''; - for (var i = 0; i < words.length; i++) { - var ind = wordlist.indexOf(words[i]); + const words = mnemonic.split(' '); + let bin = ''; + for (let i = 0; i < words.length; i++) { + const ind = wordlist.indexOf(words[i]); if (ind < 0) return false; bin = bin + ('00000000000' + ind.toString(2)).slice(-11); } - var cs = bin.length / 33; - var hash_bits = bin.slice(-cs); - var nonhash_bits = bin.slice(0, bin.length - cs); - var buf = Buffer.alloc(nonhash_bits.length / 8); - for (i = 0; i < nonhash_bits.length / 8; i++) { + const cs = bin.length / 33; + const hash_bits = bin.slice(-cs); + const nonhash_bits = bin.slice(0, bin.length - cs); + const buf = Buffer.alloc(nonhash_bits.length / 8); + for (let i = 0; i < nonhash_bits.length / 8; i++) { buf.writeUInt8(parseInt(bin.slice(i * 8, (i + 1) * 8), 2), i); } - var expected_hash_bits = Mnemonic._entropyChecksum(buf); + const expected_hash_bits = Mnemonic._entropyChecksum(buf); return expected_hash_bits === hash_bits; }; @@ -147,9 +146,9 @@ Mnemonic.isValid = function(mnemonic, wordlist) { * @returns {boolean} */ Mnemonic._belongsToWordlist = function(mnemonic, wordlist) { - var words = unorm.nfkd(mnemonic).split(' '); - for (var i = 0; i < words.length; i++) { - var ind = wordlist.indexOf(words[i]); + const words = unorm.nfkd(mnemonic).split(' '); + for (let i = 0; i < words.length; i++) { + const ind = wordlist.indexOf(words[i]); if (ind < 0) return false; } return true; @@ -164,9 +163,9 @@ Mnemonic._belongsToWordlist = function(mnemonic, wordlist) { Mnemonic._getDictionary = function(mnemonic) { if (!mnemonic) return null; - var dicts = Object.keys(Mnemonic.Words); - for (var i = 0; i < dicts.length; i++) { - var key = dicts[i]; + const dicts = Object.keys(Mnemonic.Words); + for (let i = 0; i < dicts.length; i++) { + const key = dicts[i]; if (Mnemonic._belongsToWordlist(mnemonic, Mnemonic.Words[key])) { return Mnemonic.Words[key]; } @@ -194,7 +193,7 @@ Mnemonic.prototype.toSeed = function(passphrase) { */ Mnemonic.fromSeed = function(seed, wordlist) { $.checkArgument(Buffer.isBuffer(seed), 'seed must be a Buffer.'); - $.checkArgument(_.isArray(wordlist) || _.isString(wordlist), 'wordlist must be a string or an array.'); + $.checkArgument(Array.isArray(wordlist) || typeof wordlist === 'string', 'wordlist must be a string or an array.'); return new Mnemonic(seed, wordlist); }; @@ -274,7 +273,7 @@ Mnemonic.prototype.inspect = function() { * @returns {String} Mnemonic string */ Mnemonic._mnemonic = function(ENT, wordlist) { - var buf = Random.getRandomBuffer(ENT / 8); + const buf = Random.getRandomBuffer(ENT / 8); return Mnemonic._entropy2mnemonic(buf, wordlist); }; @@ -286,8 +285,8 @@ Mnemonic._mnemonic = function(ENT, wordlist) { * @returns {String} Mnemonic string */ Mnemonic._entropy2mnemonic = function(entropy, wordlist) { - var bin = ''; - for (var i = 0; i < entropy.length; i++) { + let bin = ''; + for (let i = 0; i < entropy.length; i++) { bin = bin + ('00000000' + entropy[i].toString(2)).slice(-8); } @@ -295,12 +294,12 @@ Mnemonic._entropy2mnemonic = function(entropy, wordlist) { if (bin.length % 11 !== 0) { throw new errors.InvalidEntropy(bin); } - var mnemonic = []; - for (i = 0; i < bin.length / 11; i++) { - var wi = parseInt(bin.slice(i * 11, (i + 1) * 11), 2); + const mnemonic = []; + for (let i = 0; i < bin.length / 11; i++) { + const wi = parseInt(bin.slice(i * 11, (i + 1) * 11), 2); mnemonic.push(wordlist[wi]); } - var ret; + let ret; if (wordlist === Mnemonic.Words.JAPANESE) { ret = mnemonic.join('\u3000'); } else { @@ -317,18 +316,18 @@ Mnemonic._entropy2mnemonic = function(entropy, wordlist) { * @private */ Mnemonic._entropyChecksum = function(entropy) { - var hash = Hash.sha256(entropy); - var bits = entropy.length * 8; - var cs = bits / 32; + const hash = Hash.sha256(entropy); + const bits = entropy.length * 8; + const cs = bits / 32; - var hashbits = new BN(hash.toString('hex'), 16).toString(2); + let hashbits = new BN(hash.toString('hex'), 16).toString(2); // zero pad the hash bits while (hashbits.length % 256 !== 0) { hashbits = '0' + hashbits; } - var checksum = hashbits.slice(0, cs); + const checksum = hashbits.slice(0, cs); return checksum; }; diff --git a/packages/bitcore-p2p-cash/integration/bitcoind.js b/packages/bitcore-p2p-cash/integration/bitcoind.js index 8525c1d265b..bf898fd0c0e 100644 --- a/packages/bitcore-p2p-cash/integration/bitcoind.js +++ b/packages/bitcore-p2p-cash/integration/bitcoind.js @@ -1,22 +1,17 @@ 'use strict'; -const chai = require('chai'); -const sinon = require('sinon'); const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const chai = require('chai'); const p2p = require('../'); const should = chai.should(); -const _ = bitcore.deps._; const Random = bitcore.crypto.Random; const BN = bitcore.crypto.BN; -const BufferUtil = bitcore.util.buffer; const Peer = p2p.Peer; -const Pool = p2p.Pool; const Networks = bitcore.Networks; const Messages = p2p.Messages; const Inventory = p2p.Inventory; const Block = bitcore.Block; -const Transaction = bitcore.Transaction; // config const network = process.env.NETWORK === 'testnet' ? Networks.testnet : Networks.livenet; @@ -31,24 +26,20 @@ const stopBlock = { 'livenet': '00000000000000000b539ef570128acb953af3dbcfc19dd8e6066949672311a1', 'testnet': '00000000d0bc4271bcefaa7eb25000e345910ba16b91eb375cd944b68624de9f' }; -const txHash = { - 'livenet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b', - 'testnet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b' -}; // These tests require a running bitcoind instance describe('Integration with ' + network.name + ' bitcoind', function() { this.timeout(15000); - var opts = { + const opts = { host: 'localhost', network: network.name }; it('handshakes', function(cb) { - var peer = new Peer(opts); + const peer = new Peer(opts); peer.once('version', function(m) { m.version.should.be.above(70000); - m.services.toString().should.equal('1'); + m.services.and(new BN(1)).toString().should.equal('1'); Math.abs(new Date() - m.timestamp).should.be.below(10000); // less than 10 seconds of time difference m.nonce.length.should.equal(8); m.startHeight.should.be.above(300000); @@ -60,8 +51,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); peer.connect(); }); - var connect = function(cb) { - var peer = new Peer(opts); + const connect = function(cb) { + const peer = new Peer(opts); peer.once('ready', function() { cb(peer); }); @@ -73,8 +64,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('connects', function(cb) { connect(function(peer) { peer.version.should.be.above(70000); - _.isString(peer.subversion).should.equal(true); - _.isNumber(peer.bestHeight).should.equal(true); + (typeof peer.subversion === 'string').should.equal(true); + (typeof peer.bestHeight === 'number').should.equal(true); cb(); }); }); @@ -91,14 +82,14 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('handles addr', function(cb) { connect(function(peer) { peer.once('addr', function(message) { - message.addresses.forEach(function(address) { + for (const address of message.addresses) { (address.time instanceof Date).should.equal(true); should.exist(address.ip); (address.services instanceof BN).should.equal(true); - }); + } cb(); }); - var message = messages.GetAddr(); + const message = messages.GetAddr(); peer.sendMessage(message); }); }); @@ -113,15 +104,15 @@ describe('Integration with ' + network.name + ' bitcoind', function() { cb(); }); peer.once('inv', function(message) { - var get = messages.GetData(message.inventory); + const get = messages.GetData(message.inventory); peer.sendMessage(get); }); }); }); it('sends tx inv and receives getdata for that tx', function(cb) { connect(function(peer) { - var type = Inventory.TYPE.TX; - var inv = [{ + const type = Inventory.TYPE.TX; + const inv = [{ type: type, hash: Buffer.from(Random.getRandomBuffer(32)) // needs to be random for repeatability }]; @@ -129,7 +120,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { message.inventory[0].should.deep.equal(inv[0]); cb(); }); - var message = messages.Inventory(inv); + const message = messages.Inventory(inv); message.inventory[0].hash.length.should.equal(32); peer.sendMessage(message); }); @@ -140,27 +131,27 @@ describe('Integration with ' + network.name + ' bitcoind', function() { (message.block instanceof Block).should.equal(true); cb(); }); - var message = messages.GetData.forBlock(blockHash[network.name]); + const message = messages.GetData.forBlock(blockHash[network.name]); peer.sendMessage(message); }); }); - var fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a'; + const fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a'; it('handles request tx data not found', function(cb) { connect(function(peer) { - var expected = messages.NotFound.forTransaction(fakeHash); + const expected = messages.NotFound.forTransaction(fakeHash); peer.once('notfound', function(message) { message.command.should.equal('notfound'); message.inventory[0].type.should.equal(Inventory.TYPE.TX); - var expectedHash = expected.inventory[0].hash.toString('hex'); + const expectedHash = expected.inventory[0].hash.toString('hex'); message.inventory[0].hash.toString('hex').should.equal(expectedHash); cb(); }); - var message = messages.GetData.forTransaction(fakeHash); + const message = messages.GetData.forTransaction(fakeHash); peer.sendMessage(message); }); }); - var from = [blockHash[network.name]]; - var stop = stopBlock[network.name]; + const from = [blockHash[network.name]]; + const stop = stopBlock[network.name]; it('gets headers', function(cb) { connect(function(peer) { peer.once('headers', function(message) { @@ -168,7 +159,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { message.headers.length.should.equal(3); cb(); }); - var message = messages.GetHeaders({ + const message = messages.GetHeaders({ starts: from, stop: stop }); @@ -185,19 +176,19 @@ describe('Integration with ' + network.name + ' bitcoind', function() { cb(); } }); - var message = messages.GetBlocks({ + const message = messages.GetBlocks({ starts: from, stop: stop }); peer.sendMessage(message); }); }); - var testInvGetData = function(expected, message, cb) { + const testInvGetData = function(expected, message, cb) { connect(function(peer) { peer.once('getdata', function(message) { message.command.should.equal('getdata'); message.inventory[0].type.should.equal(expected.inventory[0].type); - var expectedHash = expected.inventory[0].hash.toString('hex'); + const expectedHash = expected.inventory[0].hash.toString('hex'); message.inventory[0].hash.toString('hex').should.equal(expectedHash); cb(); }); @@ -205,15 +196,15 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); }; it('sends block inv and receives getdata', function(cb) { - var randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer - var expected = messages.GetData.forBlock(randomHash); - var message = messages.Inventory.forBlock(randomHash); + const randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer + const expected = messages.GetData.forBlock(randomHash); + const message = messages.Inventory.forBlock(randomHash); testInvGetData(expected, message, cb); }); it('sends tx inv and receives getdata', function(cb) { - var randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer - var expected = messages.GetData.forTransaction(randomHash); - var message = messages.Inventory.forTransaction(randomHash); + const randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer + const expected = messages.GetData.forTransaction(randomHash); + const message = messages.Inventory.forTransaction(randomHash); testInvGetData(expected, message, cb); }); }); diff --git a/packages/bitcore-p2p-cash/lib/inventory.js b/packages/bitcore-p2p-cash/lib/inventory.js index 702a4b9b321..e7fbd9311f9 100644 --- a/packages/bitcore-p2p-cash/lib/inventory.js +++ b/packages/bitcore-p2p-cash/lib/inventory.js @@ -6,7 +6,6 @@ const $ = bitcore.util.preconditions; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; /** * A constructor for inventory related Bitcoin messages such as @@ -32,7 +31,7 @@ function Inventory(obj) { */ Inventory.forItem = function(type, hash) { $.checkArgument(hash); - if (_.isString(hash)) { + if (typeof hash === 'string') { hash = Buffer.from(hash, 'hex'); hash = BufferUtil.reverse(hash); } diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/addr.js b/packages/bitcore-p2p-cash/lib/messages/commands/addr.js index 578af10e45b..be800651e36 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/addr.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; @@ -20,11 +19,12 @@ function AddrMessage(arg, options) { Message.call(this, options); this.command = 'addr'; $.checkArgument( - _.isUndefined(arg) || + arg == null || (Array.isArray(arg) && - !_.isUndefined(arg[0].services) && - !_.isUndefined(arg[0].ip) && - !_.isUndefined(arg[0].port)), + arg[0] && + arg[0].services != null && + arg[0].ip != null && + arg[0].port != null), 'First argument is expected to be an array of addrs' ); this.addresses = arg; diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/block.js b/packages/bitcore-p2p-cash/lib/messages/commands/block.js index 2a05f93b4ed..e48dedaaac8 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/block.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/block.js @@ -1,11 +1,10 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * @param {Block=} arg - An instance of a Block @@ -19,7 +18,7 @@ function BlockMessage(arg, options) { this.Block = options.Block; this.command = 'block'; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.Block, + arg == null || arg instanceof this.Block, 'An instance of Block or undefined is expected' ); this.block = arg; diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js b/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js index 0af8a9f4dde..61057644892 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js @@ -1,15 +1,14 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const utils = require('../utils'); const BufferUtil = bitcore.util.buffer; const BufferWriter = bitcore.encoding.BufferWriter; const BufferReader = bitcore.encoding.BufferReader; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Request peer to add data to a bloom filter already set by 'filterload' @@ -22,7 +21,7 @@ function FilteraddMessage(arg, options) { Message.call(this, options); this.command = 'filteradd'; $.checkArgument( - _.isUndefined(arg) || BufferUtil.isBuffer(arg), + arg == null || BufferUtil.isBuffer(arg), 'First argument is expected to be a Buffer or undefined' ); this.data = arg || BufferUtil.EMPTY_BUFFER; @@ -31,13 +30,13 @@ inherits(FilteraddMessage, Message); FilteraddMessage.prototype.setPayload = function(payload) { $.checkArgument(payload); - var parser = new BufferReader(payload); + const parser = new BufferReader(payload); this.data = parser.readVarLengthBuffer(); utils.checkFinished(parser); }; FilteraddMessage.prototype.getPayload = function() { - var bw = new BufferWriter(); + const bw = new BufferWriter(); bw.writeVarintNum(this.data.length); bw.write(this.data); return bw.concat(); diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js index a9b4a67adaf..a37ee720774 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); const BloomFilter = require('../../bloomfilter'); +const Message = require('../message'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Request peer to send inv messages based on a bloom filter @@ -20,7 +19,7 @@ function FilterloadMessage(arg, options) { Message.call(this, options); this.command = 'filterload'; $.checkArgument( - _.isUndefined(arg) || arg instanceof BloomFilter, + arg == null || arg instanceof BloomFilter, 'An instance of BloomFilter or undefined is expected' ); this.filter = arg; @@ -32,7 +31,7 @@ FilterloadMessage.prototype.setPayload = function(payload) { }; FilterloadMessage.prototype.getPayload = function() { - if(this.filter) { + if (this.filter) { return this.filter.toBuffer(); } else { return BufferUtil.EMPTY_BUFFER; diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/headers.js b/packages/bitcore-p2p-cash/lib/messages/commands/headers.js index a38ed120b3c..68ae65b3d66 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/headers.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const utils = require('../utils'); const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; const $ = bitcore.util.preconditions; /** @@ -25,7 +24,7 @@ function HeadersMessage(arg, options) { this.BlockHeader = options.BlockHeader; this.command = 'headers'; $.checkArgument( - _.isUndefined(arg) || (Array.isArray(arg) && arg[0] instanceof this.BlockHeader), + arg == null || (Array.isArray(arg) && arg[0] instanceof this.BlockHeader), 'First argument is expected to be an array of BlockHeader instances' ); this.headers = arg; diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js b/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js index 1380b96c8e6..9925b75ab0d 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Contains information about a MerkleBlock @@ -22,7 +21,7 @@ function MerkleblockMessage(arg, options) { this.MerkleBlock = options.MerkleBlock; // constructor this.command = 'merkleblock'; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.MerkleBlock, + arg == null || arg instanceof this.MerkleBlock, 'An instance of MerkleBlock or undefined is expected' ); this.merkleBlock = arg; diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/ping.js b/packages/bitcore-p2p-cash/lib/messages/commands/ping.js index 3c56f0ece91..45aecf3c65b 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/ping.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/ping.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; @@ -21,7 +20,7 @@ function PingMessage(arg, options) { Message.call(this, options); this.command = 'ping'; $.checkArgument( - _.isUndefined(arg) || (BufferUtil.isBuffer(arg) && arg.length === 8), + arg == null || (BufferUtil.isBuffer(arg) && arg.length === 8), 'First argument is expected to be an 8 byte buffer' ); this.nonce = arg || utils.getNonce(); diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/pong.js b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js index 26aff7fe0ef..9de286fc9c6 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; @@ -21,7 +20,7 @@ function PongMessage(arg, options) { Message.call(this, options); this.command = 'pong'; $.checkArgument( - _.isUndefined(arg) || (BufferUtil.isBuffer(arg) && arg.length === 8), + arg == null || (BufferUtil.isBuffer(arg) && arg.length === 8), 'First argument is expected to be an 8 byte buffer' ); this.nonce = arg || utils.getNonce(); diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/tx.js b/packages/bitcore-p2p-cash/lib/messages/commands/tx.js index 4572c3c3524..677f14aa1ea 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/tx.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/tx.js @@ -1,11 +1,10 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-cash'); +const Message = require('../message'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * @param {Transaction=} arg - An instance of Transaction @@ -18,7 +17,7 @@ function TransactionMessage(arg, options) { this.command = 'tx'; this.Transaction = options.Transaction; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.Transaction, + arg == null || arg instanceof this.Transaction, 'An instance of Transaction or undefined is expected' ); this.transaction = arg; diff --git a/packages/bitcore-p2p-cash/lib/messages/utils.js b/packages/bitcore-p2p-cash/lib/messages/utils.js index 282cb7afd75..8c58fe208ea 100644 --- a/packages/bitcore-p2p-cash/lib/messages/utils.js +++ b/packages/bitcore-p2p-cash/lib/messages/utils.js @@ -4,20 +4,19 @@ const bitcore = require('@bitpay-labs/bitcore-lib-cash'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; let utils; module.exports = utils = { checkInventory: function(arg) { $.checkArgument( - _.isUndefined(arg) || - (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && !_.isUndefined(arg[0].type) && !_.isUndefined(arg[0].hash)), + arg == null || + (Array.isArray(arg) && + (arg.length === 0 || (arg[0].type != null && arg[0].hash != null))), 'Argument is expected to be an array of inventory objects' ); }, checkFinished: function checkFinished(parser) { - if(!parser.finished()) { + if (!parser.finished()) { throw new Error('Data still available after parsing'); } }, @@ -25,17 +24,17 @@ module.exports = utils = { return bitcore.crypto.Random.getRandomBuffer(8); }, writeIP: function writeIP(ip, bw) { - var words = ip.v6.split(':').map(function(s) { + const words = ip.v6.split(':').map(function(s) { return Buffer.from(s, 'hex'); }); - for (var i = 0; i < words.length; i++) { - var word = words[i]; + for (let i = 0; i < words.length; i++) { + const word = words[i]; bw.write(word); } }, writeAddr: function writeAddr(addr, bw) { - if (_.isUndefined(addr)) { - var pad = Buffer.from(Array(26)); + if (addr == null) { + const pad = Buffer.from(Array(26)); bw.write(pad); return; } @@ -46,16 +45,16 @@ module.exports = utils = { }, writeInventory: function writeInventory(inventory, bw) { bw.writeVarintNum(inventory.length); - inventory.forEach(function(value) { + for (const value of inventory) { bw.writeUInt32LE(value.type); bw.write(value.hash); - }); + } }, parseIP: function parseIP(parser) { - var ipv6 = []; - var ipv4 = []; - for (var a = 0; a < 8; a++) { - var word = parser.read(2); + let ipv6 = []; + let ipv4 = []; + for (let a = 0; a < 8; a++) { + const word = parser.read(2); ipv6.push(word.toString('hex')); if (a >= 6) { ipv4.push(word[0]); @@ -70,9 +69,9 @@ module.exports = utils = { }; }, parseAddr: function parseAddr(parser) { - var services = parser.readUInt64LEBN(); - var ip = utils.parseIP(parser); - var port = parser.readUInt16BE(); + const services = parser.readUInt64LEBN(); + const ip = utils.parseIP(parser); + const port = parser.readUInt16BE(); return { services: services, ip: ip, @@ -82,12 +81,12 @@ module.exports = utils = { sanitizeStartStop: function sanitizeStartStop(obj) { /* jshint maxcomplexity: 10 */ /* jshint maxstatements: 20 */ - $.checkArgument(_.isUndefined(obj.starts) || _.isArray(obj.starts)); - var starts = obj.starts; - var stop = obj.stop; + $.checkArgument(obj?.starts == null || Array.isArray(obj?.starts)); + let starts = obj.starts; + let stop = obj.stop; if (starts) { starts = starts.map(function(hash) { - if (_.isString(hash)) { + if (typeof hash === 'string') { return BufferUtil.reverse(Buffer.from(hash, 'hex')); } else { return hash; @@ -97,14 +96,14 @@ module.exports = utils = { starts = []; } - for (var i = 0; i < starts.length; i++) { + for (let i = 0; i < starts.length; i++) { if (starts[i].length !== 32) { throw new Error('Invalid hash ' + i + ' length: ' + starts[i].length); } } stop = obj.stop; - if (_.isString(stop)) { + if (typeof stop === 'string') { stop = BufferUtil.reverse(Buffer.from(stop, 'hex')); } if (!stop) { diff --git a/packages/bitcore-p2p-cash/test/peer.js b/packages/bitcore-p2p-cash/test/peer.js index ea6698a8f11..260d9ef8d21 100644 --- a/packages/bitcore-p2p-cash/test/peer.js +++ b/packages/bitcore-p2p-cash/test/peer.js @@ -11,7 +11,6 @@ const EventEmitter = require('events').EventEmitter; const should = chai.should(); const expect = chai.expect; -const _ = bitcore.deps._; const Peer = P2P.Peer; const Messages = P2P.Messages; const messages = new Messages(); @@ -21,17 +20,17 @@ describe('Peer', function() { describe('Integration test', function() { it('parses this stream of data from a connection', function(callback) { - var peer = new Peer(''); - var stub = sinon.stub(); - var dataCallback; - var connectCallback; - var expected = { + const peer = new Peer(''); + const stub = sinon.stub(); + let dataCallback; + let connectCallback; + const expected = { version: 1, verack: 1, inv: 18, addr: 4 }; - var received = { + const received = { version: 0, verack: 0, inv: 0, @@ -55,9 +54,10 @@ describe('Peer', function() { peer.on('connect', function() { dataCallback(fs.readFileSync('./test/data/connection.log')); }); - var check = function(message) { + const check = function(message) { received[message.command]++; - if (_.isEqual(received, expected)) { + const countsMatch = Object.keys(expected).every((key) => received[key] === expected[key]); + if (countsMatch) { callback(); } }; @@ -70,49 +70,49 @@ describe('Peer', function() { }); it('create instance', function() { - var peer = new Peer('localhost'); + const peer = new Peer('localhost'); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.livenet); peer.port.should.equal(Networks.livenet.port); }); it('create instance setting a port', function() { - var peer = new Peer({host: 'localhost', port: 8111}); + const peer = new Peer({ host: 'localhost', port: 8111 }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.livenet); peer.port.should.equal(8111); }); it('create instance setting a network', function() { - var peer = new Peer({host: 'localhost', network: Networks.testnet}); + const peer = new Peer({ host: 'localhost', network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(Networks.testnet.port); }); it('create instance setting port and network', function() { - var peer = new Peer({host: 'localhost', port: 8111, network: Networks.testnet}); + const peer = new Peer({ host: 'localhost', port: 8111, network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(8111); }); it('create instance without new', function() { - var peer = Peer({host: 'localhost', port: 8111, network: Networks.testnet}); + const peer = Peer({ host: 'localhost', port: 8111, network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(8111); }); it('set a proxy', function() { - var peer, peer2, socket; + let socket; - peer = new Peer('localhost'); + const peer = new Peer('localhost'); expect(peer.proxy).to.be.undefined(); socket = peer._getSocket(); socket.should.be.instanceof(Net.Socket); - peer2 = peer.setProxy('127.0.0.1', 9050); + const peer2 = peer.setProxy('127.0.0.1', 9050); peer2.proxy.host.should.equal('127.0.0.1'); peer2.proxy.port.should.equal(9050); socket = peer2._getSocket(); @@ -122,8 +122,8 @@ describe('Peer', function() { }); it('send pong on ping', function(done) { - var peer = new Peer({host: 'localhost'}); - var pingMessage = messages.Ping(); + const peer = new Peer({ host: 'localhost' }); + const pingMessage = messages.Ping(); peer.sendMessage = function(message) { message.command.should.equal('pong'); message.nonce.should.equal(pingMessage.nonce); @@ -133,14 +133,14 @@ describe('Peer', function() { }); it('relay error from socket', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.spy(); socket.destroy = sinon.spy(); peer._getSocket = function() { return socket; }; - var error = new Error('error'); + const error = new Error('error'); peer.on('error', function(err) { err.should.equal(error); done(); @@ -150,8 +150,8 @@ describe('Peer', function() { }); it('will not disconnect twice on disconnect and error', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.stub(); socket.destroy = sinon.stub(); peer._getSocket = function() { @@ -159,7 +159,7 @@ describe('Peer', function() { }; peer.on('error', sinon.stub()); peer.connect(); - var called = 0; + let called = 0; peer.on('disconnect', function() { called++; called.should.not.be.above(1); @@ -170,13 +170,13 @@ describe('Peer', function() { }); it('disconnect with max buffer length', function(done) { - var peer = new Peer({ host: 'localhost' }); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.spy(); peer._getSocket = function() { return socket; }; - var error; + let error; peer.on('error', function(err) { error = err; }); @@ -187,18 +187,18 @@ describe('Peer', function() { done(); }; peer.connect(); - var buffer = Buffer.allocUnsafe(Peer.MAX_RECEIVE_BUFFER + 1); + const buffer = Buffer.allocUnsafe(Peer.MAX_RECEIVE_BUFFER + 1); peer.socket.emit('data', buffer); }); it('emits an error on unknown messages', function(done) { - var peer = new Peer({ host: 'localhost' }); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.spy(); peer._getSocket = function() { return socket; }; - var error; + let error; peer.on('error', function(err) { error = err; }); @@ -209,13 +209,13 @@ describe('Peer', function() { done(); }; peer.connect(); - var buf = Buffer.from('e3e1f3e8756e6b6e6f776e0000000000000000005df6e0e2', 'hex'); + const buf = Buffer.from('e3e1f3e8756e6b6e6f776e0000000000000000005df6e0e2', 'hex'); peer.socket.emit('data', buf); }); it('should send version on version if not already sent', function(done) { - var peer = new Peer({host:'localhost'}); - var commands = {}; + const peer = new Peer({ host: 'localhost' }); + const commands = {}; peer.sendMessage = function(message) { commands[message.command] = true; if (commands.verack && commands.version) { @@ -231,9 +231,9 @@ describe('Peer', function() { }); it('should not send version on version if already sent', function(done) { - var peer = new Peer({host:'localhost'}); + const peer = new Peer({ host: 'localhost' }); peer.versionSent = true; - var commands = {}; + const commands = {}; peer.sendMessage = function(message) { message.command.should.not.equal('version'); done(); @@ -247,39 +247,39 @@ describe('Peer', function() { }); it('relay set properly', function() { - var peer = new Peer({host: 'localhost'}); + const peer = new Peer({ host: 'localhost' }); peer.relay.should.equal(true); - var peer2 = new Peer({host: 'localhost', relay: false}); + const peer2 = new Peer({ host: 'localhost', relay: false }); peer2.relay.should.equal(false); - var peer3 = new Peer({host: 'localhost', relay: true}); + const peer3 = new Peer({ host: 'localhost', relay: true }); peer3.relay.should.equal(true); }); it('relay setting respected', function() { - [true,false].forEach(function(relay) { - var peer = new Peer({host: 'localhost', relay: relay}); - var peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { + for (const relay of [true, false]) { + const peer = new Peer({ host: 'localhost', relay: relay }); + const peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { message.relay.should.equal(relay); }); peer._sendVersion(); peerSendMessageStub.restore(); - }); + } }); it('version/subversion set properly', function() { - var peer = new Peer({ host: 'localhost' }); + const peer = new Peer({ host: 'localhost' }); should.not.exist(peer.ownSubversion); should.not.exist(peer.ownVersion); - var peer2 = new Peer({ + const peer2 = new Peer({ host: 'localhost', subversion: '/useragent:0.0.0/' }); peer2.ownSubversion.should.equal('/useragent:0.0.0/'); should.not.exist(peer.ownVersion); - var peer3 = new Peer({ host: 'localhost', version: 70012 }); + const peer3 = new Peer({ host: 'localhost', version: 70012 }); should.not.exist(peer.ownSubversion); peer3.ownVersion.should.equal(70012); - var peer4 = new Peer({ + const peer4 = new Peer({ host: 'localhost', subversion: '/useragent:0.0.0/', version: 70012 @@ -289,8 +289,8 @@ describe('Peer', function() { }); it('version/subversion settings respected', function(done) { - var socket = new EventEmitter(); - var peer = new Peer({ + const socket = new EventEmitter(); + const peer = new Peer({ socket: socket, subversion: '/useragent:0.0.0/', version: 70012 diff --git a/packages/bitcore-p2p-doge/integration/bitcoind.js b/packages/bitcore-p2p-doge/integration/bitcoind.js index 31a54efb0a4..5381fdffdbc 100644 --- a/packages/bitcore-p2p-doge/integration/bitcoind.js +++ b/packages/bitcore-p2p-doge/integration/bitcoind.js @@ -1,22 +1,17 @@ 'use strict'; -const chai = require('chai'); -const sinon = require('sinon'); const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const chai = require('chai'); const p2p = require('../'); const should = chai.should(); -const _ = bitcore.deps._; const Random = bitcore.crypto.Random; const BN = bitcore.crypto.BN; -const BufferUtil = bitcore.util.buffer; const Peer = p2p.Peer; -const Pool = p2p.Pool; const Networks = bitcore.Networks; const Messages = p2p.Messages; const Inventory = p2p.Inventory; const Block = bitcore.Block; -const Transaction = bitcore.Transaction; // config const network = process.env.NETWORK === 'testnet' ? Networks.testnet : Networks.livenet; @@ -24,31 +19,27 @@ const messages = new Messages({ network: network }); const blockHash = { - 'livenet': '000000000000000013413cf2536b491bf0988f52e90c476ffeb701c8bfdb1db9', - 'testnet': '0000000058cc069d964711cd25083c0a709f4df2b34c8ff9302ce71fe5b45786' + 'livenet': 'e6a483c6856aecab01e4965fa86a9bc00917e9e8fe2e53bc29fa480f54d48bb1', + 'testnet': '22768ded5ba4ba57035c4f058c76cb2f014d509ab01e2a5e683c86a3a2bff970' }; const stopBlock = { - 'livenet': '00000000000000000b539ef570128acb953af3dbcfc19dd8e6066949672311a1', - 'testnet': '00000000d0bc4271bcefaa7eb25000e345910ba16b91eb375cd944b68624de9f' -}; -const txHash = { - 'livenet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b', - 'testnet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b' + 'livenet': 'd0a237eec8dfbc52b455cf421c319edb090819075901676038be911a17798574', + 'testnet': '8187e075e43082163adc5e515cef3145eac45bf56d0e77f4a92bf11fa5c947b1' }; // These tests require a running bitcoind instance describe('Integration with ' + network.name + ' bitcoind', function() { this.timeout(15000); - var opts = { + const opts = { host: 'localhost', network: network.name }; it('handshakes', function(cb) { - var peer = new Peer(opts); + const peer = new Peer(opts); peer.once('version', function(m) { m.version.should.be.above(70000); - m.services.toString().should.equal('1'); + m.services.and(new BN(1)).toString().should.equal('1'); Math.abs(new Date() - m.timestamp).should.be.below(10000); // less than 10 seconds of time difference m.nonce.length.should.equal(8); m.startHeight.should.be.above(300000); @@ -60,8 +51,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); peer.connect(); }); - var connect = function(cb) { - var peer = new Peer(opts); + const connect = function(cb) { + const peer = new Peer(opts); peer.once('ready', function() { cb(peer); }); @@ -73,8 +64,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('connects', function(cb) { connect(function(peer) { peer.version.should.be.above(70000); - _.isString(peer.subversion).should.equal(true); - _.isNumber(peer.bestHeight).should.equal(true); + (typeof peer.subversion === 'string').should.equal(true); + (typeof peer.bestHeight === 'number').should.equal(true); cb(); }); }); @@ -91,14 +82,14 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('handles addr', function(cb) { connect(function(peer) { peer.once('addr', function(message) { - message.addresses.forEach(function(address) { + for (const address of message.addresses) { (address.time instanceof Date).should.equal(true); should.exist(address.ip); (address.services instanceof BN).should.equal(true); - }); + } cb(); }); - var message = messages.GetAddr(); + const message = messages.GetAddr(); peer.sendMessage(message); }); }); @@ -113,15 +104,15 @@ describe('Integration with ' + network.name + ' bitcoind', function() { cb(); }); peer.once('inv', function(message) { - var get = messages.GetData(message.inventory); + const get = messages.GetData(message.inventory); peer.sendMessage(get); }); }); }); it('sends tx inv and receives getdata for that tx', function(cb) { connect(function(peer) { - var type = Inventory.TYPE.TX; - var inv = [{ + const type = Inventory.TYPE.TX; + const inv = [{ type: type, hash: Buffer.from(Random.getRandomBuffer(32)) // needs to be random for repeatability }]; @@ -129,7 +120,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { message.inventory[0].should.deep.equal(inv[0]); cb(); }); - var message = messages.Inventory(inv); + const message = messages.Inventory(inv); message.inventory[0].hash.length.should.equal(32); peer.sendMessage(message); }); @@ -140,27 +131,27 @@ describe('Integration with ' + network.name + ' bitcoind', function() { (message.block instanceof Block).should.equal(true); cb(); }); - var message = messages.GetData.forBlock(blockHash[network.name]); + const message = messages.GetData.forBlock(blockHash[network.name]); peer.sendMessage(message); }); }); - var fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a'; + const fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a'; it('handles request tx data not found', function(cb) { connect(function(peer) { - var expected = messages.NotFound.forTransaction(fakeHash); + const expected = messages.NotFound.forTransaction(fakeHash); peer.once('notfound', function(message) { message.command.should.equal('notfound'); message.inventory[0].type.should.equal(Inventory.TYPE.TX); - var expectedHash = expected.inventory[0].hash.toString('hex'); + const expectedHash = expected.inventory[0].hash.toString('hex'); message.inventory[0].hash.toString('hex').should.equal(expectedHash); cb(); }); - var message = messages.GetData.forTransaction(fakeHash); + const message = messages.GetData.forTransaction(fakeHash); peer.sendMessage(message); }); }); - var from = [blockHash[network.name]]; - var stop = stopBlock[network.name]; + const from = [blockHash[network.name]]; + const stop = stopBlock[network.name]; it('gets headers', function(cb) { connect(function(peer) { peer.once('headers', function(message) { @@ -168,7 +159,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { message.headers.length.should.equal(3); cb(); }); - var message = messages.GetHeaders({ + const message = messages.GetHeaders({ starts: from, stop: stop }); @@ -185,19 +176,19 @@ describe('Integration with ' + network.name + ' bitcoind', function() { cb(); } }); - var message = messages.GetBlocks({ + const message = messages.GetBlocks({ starts: from, stop: stop }); peer.sendMessage(message); }); }); - var testInvGetData = function(expected, message, cb) { + const testInvGetData = function(expected, message, cb) { connect(function(peer) { peer.once('getdata', function(message) { message.command.should.equal('getdata'); message.inventory[0].type.should.equal(expected.inventory[0].type); - var expectedHash = expected.inventory[0].hash.toString('hex'); + const expectedHash = expected.inventory[0].hash.toString('hex'); message.inventory[0].hash.toString('hex').should.equal(expectedHash); cb(); }); @@ -205,15 +196,15 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); }; it('sends block inv and receives getdata', function(cb) { - var randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer - var expected = messages.GetData.forBlock(randomHash); - var message = messages.Inventory.forBlock(randomHash); + const randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer + const expected = messages.GetData.forBlock(randomHash); + const message = messages.Inventory.forBlock(randomHash); testInvGetData(expected, message, cb); }); it('sends tx inv and receives getdata', function(cb) { - var randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer - var expected = messages.GetData.forTransaction(randomHash); - var message = messages.Inventory.forTransaction(randomHash); + const randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer + const expected = messages.GetData.forTransaction(randomHash); + const message = messages.Inventory.forTransaction(randomHash); testInvGetData(expected, message, cb); }); }); diff --git a/packages/bitcore-p2p-doge/lib/inventory.js b/packages/bitcore-p2p-doge/lib/inventory.js index e04f0fa71be..47584c0b3b1 100644 --- a/packages/bitcore-p2p-doge/lib/inventory.js +++ b/packages/bitcore-p2p-doge/lib/inventory.js @@ -6,7 +6,7 @@ const $ = bitcore.util.preconditions; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; + /** * A constructor for inventory related Bitcoin messages such as @@ -32,7 +32,7 @@ function Inventory(obj) { */ Inventory.forItem = function(type, hash) { $.checkArgument(hash); - if (_.isString(hash)) { + if (typeof hash === 'string') { hash = Buffer.from(hash, 'hex'); hash = BufferUtil.reverse(hash); } diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/addr.js b/packages/bitcore-p2p-doge/lib/messages/commands/addr.js index d520b5e4d87..e06034e2f24 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/addr.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; @@ -20,11 +19,12 @@ function AddrMessage(arg, options) { Message.call(this, options); this.command = 'addr'; $.checkArgument( - _.isUndefined(arg) || + arg == null || (Array.isArray(arg) && - !_.isUndefined(arg[0].services) && - !_.isUndefined(arg[0].ip) && - !_.isUndefined(arg[0].port)), + arg[0] && + arg[0].services != null && + arg[0].ip != null && + arg[0].port != null), 'First argument is expected to be an array of addrs' ); this.addresses = arg; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/block.js b/packages/bitcore-p2p-doge/lib/messages/commands/block.js index 1c5446548ae..e2a3daaed13 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/block.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/block.js @@ -1,11 +1,10 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * @param {Block=} arg - An instance of a Block @@ -19,7 +18,7 @@ function BlockMessage(arg, options) { this.Block = options.Block; this.command = 'block'; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.Block, + arg == null || arg instanceof this.Block, 'An instance of Block or undefined is expected' ); this.block = arg; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js b/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js index 21e18ffa133..2b727b6f74e 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js @@ -1,15 +1,14 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const utils = require('../utils'); const BufferUtil = bitcore.util.buffer; const BufferWriter = bitcore.encoding.BufferWriter; const BufferReader = bitcore.encoding.BufferReader; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Request peer to add data to a bloom filter already set by 'filterload' @@ -22,7 +21,7 @@ function FilteraddMessage(arg, options) { Message.call(this, options); this.command = 'filteradd'; $.checkArgument( - _.isUndefined(arg) || BufferUtil.isBuffer(arg), + arg == null || BufferUtil.isBuffer(arg), 'First argument is expected to be a Buffer or undefined' ); this.data = arg || BufferUtil.EMPTY_BUFFER; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js b/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js index 58fb6f4a43f..e0c9daca50f 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); const BloomFilter = require('../../bloomfilter'); +const Message = require('../message'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Request peer to send inv messages based on a bloom filter @@ -20,7 +19,7 @@ function FilterloadMessage(arg, options) { Message.call(this, options); this.command = 'filterload'; $.checkArgument( - _.isUndefined(arg) || arg instanceof BloomFilter, + arg == null || arg instanceof BloomFilter, 'An instance of BloomFilter or undefined is expected' ); this.filter = arg; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/headers.js b/packages/bitcore-p2p-doge/lib/messages/commands/headers.js index 66398271bcb..2dddc4013b4 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/headers.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const utils = require('../utils'); const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; const $ = bitcore.util.preconditions; /** @@ -25,7 +24,7 @@ function HeadersMessage(arg, options) { this.BlockHeader = options.BlockHeader; this.command = 'headers'; $.checkArgument( - _.isUndefined(arg) || (Array.isArray(arg) && arg[0] instanceof this.BlockHeader), + arg == null || (Array.isArray(arg) && arg[0] instanceof this.BlockHeader), 'First argument is expected to be an array of BlockHeader instances' ); this.headers = arg; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js b/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js index f5a5f179cf4..56b2681f1ae 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Contains information about a MerkleBlock @@ -22,7 +21,7 @@ function MerkleblockMessage(arg, options) { this.MerkleBlock = options.MerkleBlock; // constructor this.command = 'merkleblock'; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.MerkleBlock, + arg == null || arg instanceof this.MerkleBlock, 'An instance of MerkleBlock or undefined is expected' ); this.merkleBlock = arg; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/ping.js b/packages/bitcore-p2p-doge/lib/messages/commands/ping.js index e9e1bca9d81..5b3833fa271 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/ping.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/ping.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; @@ -21,7 +20,7 @@ function PingMessage(arg, options) { Message.call(this, options); this.command = 'ping'; $.checkArgument( - _.isUndefined(arg) || (BufferUtil.isBuffer(arg) && arg.length === 8), + arg == null || (BufferUtil.isBuffer(arg) && arg.length === 8), 'First argument is expected to be an 8 byte buffer' ); this.nonce = arg || utils.getNonce(); diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/pong.js b/packages/bitcore-p2p-doge/lib/messages/commands/pong.js index 827aade2899..06840f92e6c 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/pong.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; @@ -21,7 +20,7 @@ function PongMessage(arg, options) { Message.call(this, options); this.command = 'pong'; $.checkArgument( - _.isUndefined(arg) || (BufferUtil.isBuffer(arg) && arg.length === 8), + arg == null || (BufferUtil.isBuffer(arg) && arg.length === 8), 'First argument is expected to be an 8 byte buffer' ); this.nonce = arg || utils.getNonce(); diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/tx.js b/packages/bitcore-p2p-doge/lib/messages/commands/tx.js index d1199008b6f..5ee4c1d5d81 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/tx.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/tx.js @@ -1,11 +1,10 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib-doge'); +const Message = require('../message'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * @param {Transaction=} arg - An instance of Transaction @@ -18,7 +17,7 @@ function TransactionMessage(arg, options) { this.command = 'tx'; this.Transaction = options.Transaction; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.Transaction, + arg == null || arg instanceof this.Transaction, 'An instance of Transaction or undefined is expected' ); this.transaction = arg; diff --git a/packages/bitcore-p2p-doge/lib/messages/utils.js b/packages/bitcore-p2p-doge/lib/messages/utils.js index 296a78f6bce..aba0f44a6ee 100644 --- a/packages/bitcore-p2p-doge/lib/messages/utils.js +++ b/packages/bitcore-p2p-doge/lib/messages/utils.js @@ -4,15 +4,14 @@ const bitcore = require('@bitpay-labs/bitcore-lib-doge'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; let utils; module.exports = utils = { checkInventory: function(arg) { $.checkArgument( - _.isUndefined(arg) || - (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && !_.isUndefined(arg[0].type) && !_.isUndefined(arg[0].hash)), + arg == null || + (Array.isArray(arg) && + (arg.length === 0 || (arg[0].type != null && arg[0].hash != null))), 'Argument is expected to be an array of inventory objects' ); }, @@ -34,7 +33,7 @@ module.exports = utils = { } }, writeAddr: function writeAddr(addr, bw) { - if (_.isUndefined(addr)) { + if (addr == null) { const pad = Buffer.from(Array(26)); bw.write(pad); return; @@ -46,10 +45,10 @@ module.exports = utils = { }, writeInventory: function writeInventory(inventory, bw) { bw.writeVarintNum(inventory.length); - inventory.forEach(function(value) { + for (const value of inventory) { bw.writeUInt32LE(value.type); bw.write(value.hash); - }); + } }, parseIP: function parseIP(parser) { let ipv6 = []; @@ -82,12 +81,12 @@ module.exports = utils = { sanitizeStartStop: function sanitizeStartStop(obj) { /* jshint maxcomplexity: 10 */ /* jshint maxstatements: 20 */ - $.checkArgument(_.isUndefined(obj.starts) || _.isArray(obj.starts)); + $.checkArgument(obj?.starts == null || Array.isArray(obj?.starts)); let starts = obj.starts; let stop = obj.stop; if (starts) { starts = starts.map(function(hash) { - if (_.isString(hash)) { + if (typeof hash === 'string') { return BufferUtil.reverse(Buffer.from(hash, 'hex')); } else { return hash; @@ -104,7 +103,7 @@ module.exports = utils = { } stop = obj.stop; - if (_.isString(stop)) { + if (typeof stop === 'string') { stop = BufferUtil.reverse(Buffer.from(stop, 'hex')); } if (!stop) { diff --git a/packages/bitcore-p2p-doge/test/peer.js b/packages/bitcore-p2p-doge/test/peer.js index f1ffd6b2652..7c1073fef50 100644 --- a/packages/bitcore-p2p-doge/test/peer.js +++ b/packages/bitcore-p2p-doge/test/peer.js @@ -11,7 +11,6 @@ const EventEmitter = require('events').EventEmitter; const should = chai.should(); const expect = chai.expect; -const _ = bitcore.deps._; const Peer = P2P.Peer; const Messages = P2P.Messages; const messages = new Messages(); @@ -21,17 +20,17 @@ describe('Peer', function() { describe.skip('Integration test', function() { // skipped until we get a proper ./test/data/connection.log it('parses this stream of data from a connection', function(callback) { - var peer = new Peer(''); - var stub = sinon.stub(); - var dataCallback; - var connectCallback; - var expected = { + const peer = new Peer(''); + const stub = sinon.stub(); + let dataCallback; + let connectCallback; + const expected = { version: 1, verack: 1, inv: 18, addr: 4 }; - var received = { + const received = { version: 0, verack: 0, inv: 0, @@ -55,9 +54,10 @@ describe('Peer', function() { peer.on('connect', function() { dataCallback(fs.readFileSync('./test/data/connection.log')); }); - var check = function(message) { + const check = function(message) { received[message.command]++; - if (_.isEqual(received, expected)) { + const countsMatch = Object.keys(expected).every((key) => received[key] === expected[key]); + if (countsMatch) { callback(); } }; @@ -70,49 +70,49 @@ describe('Peer', function() { }); it('create instance', function() { - var peer = new Peer('localhost'); + const peer = new Peer('localhost'); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.livenet); peer.port.should.equal(Networks.livenet.port); }); it('create instance setting a port', function() { - var peer = new Peer({host: 'localhost', port: 8111}); + const peer = new Peer({ host: 'localhost', port: 8111 }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.livenet); peer.port.should.equal(8111); }); it('create instance setting a network', function() { - var peer = new Peer({host: 'localhost', network: Networks.testnet}); + const peer = new Peer({ host: 'localhost', network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(Networks.testnet.port); }); it('create instance setting port and network', function() { - var peer = new Peer({host: 'localhost', port: 8111, network: Networks.testnet}); + const peer = new Peer({ host: 'localhost', port: 8111, network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(8111); }); it('create instance without new', function() { - var peer = Peer({host: 'localhost', port: 8111, network: Networks.testnet}); + const peer = Peer({ host: 'localhost', port: 8111, network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(8111); }); it('set a proxy', function() { - var peer, peer2, socket; + let socket; - peer = new Peer('localhost'); + const peer = new Peer('localhost'); expect(peer.proxy).to.be.undefined(); socket = peer._getSocket(); socket.should.be.instanceof(Net.Socket); - peer2 = peer.setProxy('127.0.0.1', 9050); + const peer2 = peer.setProxy('127.0.0.1', 9050); peer2.proxy.host.should.equal('127.0.0.1'); peer2.proxy.port.should.equal(9050); socket = peer2._getSocket(); @@ -122,8 +122,8 @@ describe('Peer', function() { }); it('send pong on ping', function(done) { - var peer = new Peer({host: 'localhost'}); - var pingMessage = messages.Ping(); + const peer = new Peer({ host: 'localhost' }); + const pingMessage = messages.Ping(); peer.sendMessage = function(message) { message.command.should.equal('pong'); message.nonce.should.equal(pingMessage.nonce); @@ -133,14 +133,14 @@ describe('Peer', function() { }); it('relay error from socket', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.spy(); socket.destroy = sinon.spy(); peer._getSocket = function() { return socket; }; - var error = new Error('error'); + const error = new Error('error'); peer.on('error', function(err) { err.should.equal(error); done(); @@ -150,8 +150,8 @@ describe('Peer', function() { }); it('will not disconnect twice on disconnect and error', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.stub(); socket.destroy = sinon.stub(); peer._getSocket = function() { @@ -159,7 +159,7 @@ describe('Peer', function() { }; peer.on('error', sinon.stub()); peer.connect(); - var called = 0; + let called = 0; peer.on('disconnect', function() { called++; called.should.not.be.above(1); @@ -170,8 +170,8 @@ describe('Peer', function() { }); it('disconnect with max buffer length', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.spy(); peer._getSocket = function() { return socket; @@ -180,14 +180,14 @@ describe('Peer', function() { done(); }; peer.connect(); - var buffer = Buffer.from(Array(Peer.MAX_RECEIVE_BUFFER + 1)); + const buffer = Buffer.from(Array(Peer.MAX_RECEIVE_BUFFER + 1)); peer.socket.emit('data', buffer); }); it('should send version on version if not already sent', function(done) { - var peer = new Peer({host:'localhost'}); - var commands = {}; + const peer = new Peer({ host: 'localhost' }); + const commands = {}; peer.sendMessage = function(message) { commands[message.command] = true; if (commands.verack && commands.version) { @@ -203,9 +203,9 @@ describe('Peer', function() { }); it('should not send version on version if already sent', function(done) { - var peer = new Peer({host:'localhost'}); + const peer = new Peer({ host: 'localhost' }); peer.versionSent = true; - var commands = {}; + const commands = {}; peer.sendMessage = function(message) { message.command.should.not.equal('version'); done(); @@ -219,23 +219,23 @@ describe('Peer', function() { }); it('relay set properly', function() { - var peer = new Peer({host: 'localhost'}); + const peer = new Peer({ host: 'localhost' }); peer.relay.should.equal(true); - var peer2 = new Peer({host: 'localhost', relay: false}); + const peer2 = new Peer({ host: 'localhost', relay: false }); peer2.relay.should.equal(false); - var peer3 = new Peer({host: 'localhost', relay: true}); + const peer3 = new Peer({ host: 'localhost', relay: true }); peer3.relay.should.equal(true); }); it('relay setting respected', function() { - [true,false].forEach(function(relay) { - var peer = new Peer({host: 'localhost', relay: relay}); - var peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { + for (const relay of [true, false]) { + const peer = new Peer({ host: 'localhost', relay: relay }); + const peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { message.relay.should.equal(relay); }); peer._sendVersion(); peerSendMessageStub.restore(); - }); + } }); }); diff --git a/packages/bitcore-p2p/integration/bitcoind.js b/packages/bitcore-p2p/integration/bitcoind.js index db4614df635..ae5dce2c7f3 100644 --- a/packages/bitcore-p2p/integration/bitcoind.js +++ b/packages/bitcore-p2p/integration/bitcoind.js @@ -1,22 +1,17 @@ 'use strict'; -const chai = require('chai'); -const sinon = require('sinon'); const bitcore = require('@bitpay-labs/bitcore-lib'); +const chai = require('chai'); const p2p = require('../'); const should = chai.should(); -const _ = bitcore.deps._; const Random = bitcore.crypto.Random; const BN = bitcore.crypto.BN; -const BufferUtil = bitcore.util.buffer; const Peer = p2p.Peer; -const Pool = p2p.Pool; const Networks = bitcore.Networks; const Messages = p2p.Messages; const Inventory = p2p.Inventory; const Block = bitcore.Block; -const Transaction = bitcore.Transaction; // config const network = process.env.NETWORK === 'testnet' ? Networks.testnet : Networks.livenet; @@ -31,10 +26,6 @@ const stopBlock = { 'livenet': '00000000000000000b539ef570128acb953af3dbcfc19dd8e6066949672311a1', 'testnet': '00000000d0bc4271bcefaa7eb25000e345910ba16b91eb375cd944b68624de9f' }; -const txHash = { - 'livenet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b', - 'testnet': '22231e8219a0617a0ded618b5dc713fdf9b0db8ebd5bb3322d3011a703119d3b' -}; // These tests require a running bitcoind instance describe('Integration with ' + network.name + ' bitcoind', function() { @@ -47,7 +38,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { const peer = new Peer(opts); peer.once('version', function(m) { m.version.should.be.above(70000); - m.services.toString().should.equal('1'); + m.services.and(new BN(1)).toString().should.equal('1'); Math.abs(new Date() - m.timestamp).should.be.below(10000); // less than 10 seconds of time difference m.nonce.length.should.equal(8); m.startHeight.should.be.above(300000); @@ -59,8 +50,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); peer.connect(); }); - var connect = function(cb) { - var peer = new Peer(opts); + const connect = function(cb) { + const peer = new Peer(opts); peer.once('ready', function() { cb(peer); }); @@ -72,8 +63,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('connects', function(cb) { connect(function(peer) { peer.version.should.be.above(70000); - _.isString(peer.subversion).should.equal(true); - _.isNumber(peer.bestHeight).should.equal(true); + (typeof peer.subversion === 'string').should.equal(true); + (typeof peer.bestHeight === 'number').should.equal(true); cb(); }); }); @@ -90,14 +81,14 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('handles addr', function(cb) { connect(function(peer) { peer.once('addr', function(message) { - message.addresses.forEach(function(address) { + for (const address of message.addresses) { (address.time instanceof Date).should.equal(true); should.exist(address.ip); (address.services instanceof BN).should.equal(true); - }); + } cb(); }); - var message = messages.GetAddr(); + const message = messages.GetAddr(); peer.sendMessage(message); }); }); @@ -112,15 +103,15 @@ describe('Integration with ' + network.name + ' bitcoind', function() { cb(); }); peer.once('inv', function(message) { - var get = messages.GetData(message.inventory); + const get = messages.GetData(message.inventory); peer.sendMessage(get); }); }); }); it('sends tx inv and receives getdata for that tx', function(cb) { connect(function(peer) { - var type = Inventory.TYPE.TX; - var inv = [{ + const type = Inventory.TYPE.TX; + const inv = [{ type: type, hash: Buffer.from(Random.getRandomBuffer(32)) // needs to be random for repeatability }]; @@ -128,7 +119,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { message.inventory[0].should.deep.equal(inv[0]); cb(); }); - var message = messages.Inventory(inv); + const message = messages.Inventory(inv); message.inventory[0].hash.length.should.equal(32); peer.sendMessage(message); }); @@ -139,27 +130,27 @@ describe('Integration with ' + network.name + ' bitcoind', function() { (message.block instanceof Block).should.equal(true); cb(); }); - var message = messages.GetData.forBlock(blockHash[network.name]); + const message = messages.GetData.forBlock(blockHash[network.name]); peer.sendMessage(message); }); }); - var fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a'; + const fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a'; it('handles request tx data not found', function(cb) { connect(function(peer) { - var expected = messages.NotFound.forTransaction(fakeHash); + const expected = messages.NotFound.forTransaction(fakeHash); peer.once('notfound', function(message) { message.command.should.equal('notfound'); message.inventory[0].type.should.equal(Inventory.TYPE.TX); - var expectedHash = expected.inventory[0].hash.toString('hex'); + const expectedHash = expected.inventory[0].hash.toString('hex'); message.inventory[0].hash.toString('hex').should.equal(expectedHash); cb(); }); - var message = messages.GetData.forTransaction(fakeHash); + const message = messages.GetData.forTransaction(fakeHash); peer.sendMessage(message); }); }); - var from = [blockHash[network.name]]; - var stop = stopBlock[network.name]; + const from = [blockHash[network.name]]; + const stop = stopBlock[network.name]; it('gets headers', function(cb) { connect(function(peer) { peer.once('headers', function(message) { @@ -167,7 +158,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { message.headers.length.should.equal(3); cb(); }); - var message = messages.GetHeaders({ + const message = messages.GetHeaders({ starts: from, stop: stop }); @@ -184,19 +175,19 @@ describe('Integration with ' + network.name + ' bitcoind', function() { cb(); } }); - var message = messages.GetBlocks({ + const message = messages.GetBlocks({ starts: from, stop: stop }); peer.sendMessage(message); }); }); - var testInvGetData = function(expected, message, cb) { + const testInvGetData = function(expected, message, cb) { connect(function(peer) { peer.once('getdata', function(message) { message.command.should.equal('getdata'); message.inventory[0].type.should.equal(expected.inventory[0].type); - var expectedHash = expected.inventory[0].hash.toString('hex'); + const expectedHash = expected.inventory[0].hash.toString('hex'); message.inventory[0].hash.toString('hex').should.equal(expectedHash); cb(); }); @@ -204,15 +195,15 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); }; it('sends block inv and receives getdata', function(cb) { - var randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer - var expected = messages.GetData.forBlock(randomHash); - var message = messages.Inventory.forBlock(randomHash); + const randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer + const expected = messages.GetData.forBlock(randomHash); + const message = messages.Inventory.forBlock(randomHash); testInvGetData(expected, message, cb); }); it('sends tx inv and receives getdata', function(cb) { - var randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer - var expected = messages.GetData.forTransaction(randomHash); - var message = messages.Inventory.forTransaction(randomHash); + const randomHash = Buffer.from(Random.getRandomBuffer(32)); // slow buffer + const expected = messages.GetData.forTransaction(randomHash); + const message = messages.Inventory.forTransaction(randomHash); testInvGetData(expected, message, cb); }); }); diff --git a/packages/bitcore-p2p/lib/inventory.js b/packages/bitcore-p2p/lib/inventory.js index 17ac93fba8b..3c9e764103b 100644 --- a/packages/bitcore-p2p/lib/inventory.js +++ b/packages/bitcore-p2p/lib/inventory.js @@ -1,11 +1,11 @@ 'use strict'; const bitcore = require('@bitpay-labs/bitcore-lib'); + const $ = bitcore.util.preconditions; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; /** * A constructor for inventory related Bitcoin messages such as @@ -31,11 +31,11 @@ function Inventory(obj) { */ Inventory.forItem = function(type, hash) { $.checkArgument(hash); - if (_.isString(hash)) { + if (typeof hash === 'string') { hash = Buffer.from(hash, 'hex'); hash = BufferUtil.reverse(hash); } - return new Inventory({type: type, hash: hash}); + return new Inventory({ type: type, hash: hash }); }; /** @@ -69,7 +69,7 @@ Inventory.forTransaction = function(hash) { * @returns {Buffer} - Serialized inventory */ Inventory.prototype.toBuffer = function() { - var bw = new BufferWriter(); + const bw = new BufferWriter(); bw.writeUInt32LE(this.type); bw.write(this.hash); return bw.concat(); @@ -88,8 +88,8 @@ Inventory.prototype.toBufferWriter = function(bw) { * @param {Buffer} payload - Serialized buffer of the inventory */ Inventory.fromBuffer = function(payload) { - var parser = new BufferReader(payload); - var obj = {}; + const parser = new BufferReader(payload); + const obj = {}; obj.type = parser.readUInt32LE(); obj.hash = parser.read(32); return new Inventory(obj); @@ -99,7 +99,7 @@ Inventory.fromBuffer = function(payload) { * @param {BufferWriter} br - An instance of BufferWriter */ Inventory.fromBufferReader = function(br) { - var obj = {}; + const obj = {}; obj.type = br.readUInt32LE(); obj.hash = br.read(32); return new Inventory(obj); diff --git a/packages/bitcore-p2p/lib/messages/commands/addr.js b/packages/bitcore-p2p/lib/messages/commands/addr.js index bcb138534c2..e1b49eb8b65 100644 --- a/packages/bitcore-p2p/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p/lib/messages/commands/addr.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; @@ -20,11 +19,12 @@ function AddrMessage(arg, options) { Message.call(this, options); this.command = 'addr'; $.checkArgument( - _.isUndefined(arg) || - (Array.isArray(arg) && - !_.isUndefined(arg[0].services) && - !_.isUndefined(arg[0].ip) && - !_.isUndefined(arg[0].port)), + arg == null || + (Array.isArray(arg) && + arg[0] && + arg[0].services != null && + arg[0].ip != null && + arg[0].port != null), 'First argument is expected to be an array of addrs' ); this.addresses = arg; @@ -32,16 +32,16 @@ function AddrMessage(arg, options) { inherits(AddrMessage, Message); AddrMessage.prototype.setPayload = function(payload) { - var parser = new BufferReader(payload); + const parser = new BufferReader(payload); - var addrCount = parser.readVarintNum(); + const addrCount = parser.readVarintNum(); this.addresses = []; - for (var i = 0; i < addrCount; i++) { + for (let i = 0; i < addrCount; i++) { // todo: time only available on versions >=31402 - var time = new Date(parser.readUInt32LE() * 1000); + const time = new Date(parser.readUInt32LE() * 1000); - var addr = utils.parseAddr(parser); + const addr = utils.parseAddr(parser); addr.time = time; this.addresses.push(addr); } @@ -50,11 +50,11 @@ AddrMessage.prototype.setPayload = function(payload) { }; AddrMessage.prototype.getPayload = function() { - var bw = new BufferWriter(); + const bw = new BufferWriter(); bw.writeVarintNum(this.addresses.length); - for (var i = 0; i < this.addresses.length; i++) { - var addr = this.addresses[i]; + for (let i = 0; i < this.addresses.length; i++) { + const addr = this.addresses[i]; bw.writeUInt32LE(addr.time.getTime() / 1000); utils.writeAddr(addr, bw); } diff --git a/packages/bitcore-p2p/lib/messages/commands/block.js b/packages/bitcore-p2p/lib/messages/commands/block.js index 5b0540b93b8..a86f3ab3e2b 100644 --- a/packages/bitcore-p2p/lib/messages/commands/block.js +++ b/packages/bitcore-p2p/lib/messages/commands/block.js @@ -1,11 +1,10 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * @param {Block=} arg - An instance of a Block @@ -19,7 +18,7 @@ function BlockMessage(arg, options) { this.Block = options.Block; this.command = 'block'; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.Block, + arg == null || arg instanceof this.Block, 'An instance of Block or undefined is expected' ); this.block = arg; diff --git a/packages/bitcore-p2p/lib/messages/commands/filteradd.js b/packages/bitcore-p2p/lib/messages/commands/filteradd.js index cd5e83d3549..60c863cb4c6 100644 --- a/packages/bitcore-p2p/lib/messages/commands/filteradd.js +++ b/packages/bitcore-p2p/lib/messages/commands/filteradd.js @@ -1,15 +1,14 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const utils = require('../utils'); const BufferUtil = bitcore.util.buffer; const BufferWriter = bitcore.encoding.BufferWriter; const BufferReader = bitcore.encoding.BufferReader; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Request peer to add data to a bloom filter already set by 'filterload' @@ -22,7 +21,7 @@ function FilteraddMessage(arg, options) { Message.call(this, options); this.command = 'filteradd'; $.checkArgument( - _.isUndefined(arg) || BufferUtil.isBuffer(arg), + arg == null || BufferUtil.isBuffer(arg), 'First argument is expected to be a Buffer or undefined' ); this.data = arg || BufferUtil.EMPTY_BUFFER; diff --git a/packages/bitcore-p2p/lib/messages/commands/filterload.js b/packages/bitcore-p2p/lib/messages/commands/filterload.js index 859f4da473c..4a25b124f6b 100644 --- a/packages/bitcore-p2p/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p/lib/messages/commands/filterload.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); const BloomFilter = require('../../bloomfilter'); +const Message = require('../message'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Request peer to send inv messages based on a bloom filter @@ -20,7 +19,7 @@ function FilterloadMessage(arg, options) { Message.call(this, options); this.command = 'filterload'; $.checkArgument( - _.isUndefined(arg) || arg instanceof BloomFilter, + arg == null || arg instanceof BloomFilter, 'An instance of BloomFilter or undefined is expected' ); this.filter = arg; @@ -32,7 +31,7 @@ FilterloadMessage.prototype.setPayload = function(payload) { }; FilterloadMessage.prototype.getPayload = function() { - if(this.filter) { + if (this.filter) { return this.filter.toBuffer(); } else { return BufferUtil.EMPTY_BUFFER; diff --git a/packages/bitcore-p2p/lib/messages/commands/getdata.js b/packages/bitcore-p2p/lib/messages/commands/getdata.js index b70791f60c0..1aa1bc21ac4 100644 --- a/packages/bitcore-p2p/lib/messages/commands/getdata.js +++ b/packages/bitcore-p2p/lib/messages/commands/getdata.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const utils = require('../utils'); const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; /** * @param {Object|Array=} - options - If options is an array will use as "inventory" @@ -26,19 +25,19 @@ inherits(GetdataMessage, Message); GetdataMessage.prototype.setPayload = function(payload) { this.inventory = []; - var parser = new BufferReader(payload); - var count = parser.readVarintNum(); - for (var i = 0; i < count; i++) { - var type = parser.readUInt32LE(); - var hash = parser.read(32); - this.inventory.push({type: type, hash: hash}); + const parser = new BufferReader(payload); + const count = parser.readVarintNum(); + for (let i = 0; i < count; i++) { + const type = parser.readUInt32LE(); + const hash = parser.read(32); + this.inventory.push({ type: type, hash: hash }); } utils.checkFinished(parser); }; GetdataMessage.prototype.getPayload = function() { - var bw = new BufferWriter(); + const bw = new BufferWriter(); utils.writeInventory(this.inventory, bw); return bw.concat(); }; diff --git a/packages/bitcore-p2p/lib/messages/commands/headers.js b/packages/bitcore-p2p/lib/messages/commands/headers.js index fcada8b93f8..8b6a3a74a85 100644 --- a/packages/bitcore-p2p/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p/lib/messages/commands/headers.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const utils = require('../utils'); const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; const $ = bitcore.util.preconditions; /** @@ -25,7 +24,7 @@ function HeadersMessage(arg, options) { this.BlockHeader = options.BlockHeader; this.command = 'headers'; $.checkArgument( - _.isUndefined(arg) || (Array.isArray(arg) && arg[0] instanceof this.BlockHeader), + arg == null || (Array.isArray(arg) && arg[0] instanceof this.BlockHeader), 'First argument is expected to be an array of BlockHeader instances' ); this.headers = arg; @@ -34,24 +33,24 @@ inherits(HeadersMessage, Message); HeadersMessage.prototype.setPayload = function(payload) { $.checkArgument(payload && payload.length > 0, 'No data found to create Headers message'); - var parser = new BufferReader(payload); - var count = parser.readVarintNum(); + const parser = new BufferReader(payload); + const count = parser.readVarintNum(); this.headers = []; - for (var i = 0; i < count; i++) { - var header = this.BlockHeader.fromBufferReader(parser); + for (let i = 0; i < count; i++) { + const header = this.BlockHeader.fromBufferReader(parser); this.headers.push(header); - var txn_count = parser.readUInt8(); + const txn_count = parser.readUInt8(); $.checkState(txn_count === 0, 'txn_count should always be 0'); } utils.checkFinished(parser); }; HeadersMessage.prototype.getPayload = function() { - var bw = new BufferWriter(); + const bw = new BufferWriter(); bw.writeVarintNum(this.headers.length); - for (var i = 0; i < this.headers.length; i++) { - var buffer = this.headers[i].toBuffer(); + for (let i = 0; i < this.headers.length; i++) { + const buffer = this.headers[i].toBuffer(); bw.write(buffer); bw.writeUInt8(0); } diff --git a/packages/bitcore-p2p/lib/messages/commands/merkleblock.js b/packages/bitcore-p2p/lib/messages/commands/merkleblock.js index 0be2edce7d1..863eeb55826 100644 --- a/packages/bitcore-p2p/lib/messages/commands/merkleblock.js +++ b/packages/bitcore-p2p/lib/messages/commands/merkleblock.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * Contains information about a MerkleBlock @@ -22,7 +21,7 @@ function MerkleblockMessage(arg, options) { this.MerkleBlock = options.MerkleBlock; // constructor this.command = 'merkleblock'; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.MerkleBlock, + arg == null || arg instanceof this.MerkleBlock, 'An instance of MerkleBlock or undefined is expected' ); this.merkleBlock = arg; diff --git a/packages/bitcore-p2p/lib/messages/commands/notfound.js b/packages/bitcore-p2p/lib/messages/commands/notfound.js index 12525163e7f..7ee5d96ded8 100644 --- a/packages/bitcore-p2p/lib/messages/commands/notfound.js +++ b/packages/bitcore-p2p/lib/messages/commands/notfound.js @@ -1,13 +1,12 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const utils = require('../utils'); const BufferReader = bitcore.encoding.BufferReader; const BufferWriter = bitcore.encoding.BufferWriter; -const _ = bitcore.deps._; /** * @param {Array} arg - An array of inventory @@ -27,19 +26,19 @@ inherits(NotfoundMessage, Message); NotfoundMessage.prototype.setPayload = function(payload) { this.inventory = []; - var parser = new BufferReader(payload); - var count = parser.readVarintNum(); - for (var i = 0; i < count; i++) { - var type = parser.readUInt32LE(); - var hash = parser.read(32); - this.inventory.push({type: type, hash: hash}); + const parser = new BufferReader(payload); + const count = parser.readVarintNum(); + for (let i = 0; i < count; i++) { + const type = parser.readUInt32LE(); + const hash = parser.read(32); + this.inventory.push({ type: type, hash: hash }); } utils.checkFinished(parser); }; NotfoundMessage.prototype.getPayload = function() { - var bw = new BufferWriter(); + const bw = new BufferWriter(); utils.writeInventory(this.inventory, bw); return bw.concat(); }; diff --git a/packages/bitcore-p2p/lib/messages/commands/ping.js b/packages/bitcore-p2p/lib/messages/commands/ping.js index 33786b9408a..c9ca7099ed0 100644 --- a/packages/bitcore-p2p/lib/messages/commands/ping.js +++ b/packages/bitcore-p2p/lib/messages/commands/ping.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; @@ -21,7 +20,7 @@ function PingMessage(arg, options) { Message.call(this, options); this.command = 'ping'; $.checkArgument( - _.isUndefined(arg) || (BufferUtil.isBuffer(arg) && arg.length === 8), + arg == null || (BufferUtil.isBuffer(arg) && arg.length === 8), 'First argument is expected to be an 8 byte buffer' ); this.nonce = arg || utils.getNonce(); @@ -29,7 +28,7 @@ function PingMessage(arg, options) { inherits(PingMessage, Message); PingMessage.prototype.setPayload = function(payload) { - var parser = new BufferReader(payload); + const parser = new BufferReader(payload); this.nonce = parser.read(8); utils.checkFinished(parser); diff --git a/packages/bitcore-p2p/lib/messages/commands/pong.js b/packages/bitcore-p2p/lib/messages/commands/pong.js index 77820b95be1..ef241d7a834 100644 --- a/packages/bitcore-p2p/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p/lib/messages/commands/pong.js @@ -1,12 +1,11 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const utils = require('../utils'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; @@ -21,7 +20,7 @@ function PongMessage(arg, options) { Message.call(this, options); this.command = 'pong'; $.checkArgument( - _.isUndefined(arg) || (BufferUtil.isBuffer(arg) && arg.length === 8), + arg == null || (BufferUtil.isBuffer(arg) && arg.length === 8), 'First argument is expected to be an 8 byte buffer' ); this.nonce = arg || utils.getNonce(); @@ -29,7 +28,7 @@ function PongMessage(arg, options) { inherits(PongMessage, Message); PongMessage.prototype.setPayload = function(payload) { - var parser = new BufferReader(payload); + const parser = new BufferReader(payload); this.nonce = parser.read(8); utils.checkFinished(parser); diff --git a/packages/bitcore-p2p/lib/messages/commands/tx.js b/packages/bitcore-p2p/lib/messages/commands/tx.js index ffdae5168c6..23f9cde6a50 100644 --- a/packages/bitcore-p2p/lib/messages/commands/tx.js +++ b/packages/bitcore-p2p/lib/messages/commands/tx.js @@ -1,11 +1,10 @@ 'use strict'; -const Message = require('../message'); const inherits = require('util').inherits; const bitcore = require('@bitpay-labs/bitcore-lib'); +const Message = require('../message'); const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; /** * @param {Transaction=} arg - An instance of Transaction @@ -18,7 +17,7 @@ function TransactionMessage(arg, options) { this.command = 'tx'; this.Transaction = options.Transaction; $.checkArgument( - _.isUndefined(arg) || arg instanceof this.Transaction, + arg == null || arg instanceof this.Transaction, 'An instance of Transaction or undefined is expected' ); this.transaction = arg; diff --git a/packages/bitcore-p2p/lib/messages/utils.js b/packages/bitcore-p2p/lib/messages/utils.js index 7e0ba00b30b..4d50f124c56 100644 --- a/packages/bitcore-p2p/lib/messages/utils.js +++ b/packages/bitcore-p2p/lib/messages/utils.js @@ -4,20 +4,19 @@ const bitcore = require('@bitpay-labs/bitcore-lib'); const BufferUtil = bitcore.util.buffer; const $ = bitcore.util.preconditions; -const _ = bitcore.deps._; let utils; module.exports = utils = { checkInventory: function(arg) { $.checkArgument( - _.isUndefined(arg) || - (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && !_.isUndefined(arg[0].type) && !_.isUndefined(arg[0].hash)), + arg == null || + (Array.isArray(arg) && + (arg.length === 0 || (arg[0].type != null && arg[0].hash != null))), 'Argument is expected to be an array of inventory objects' ); }, checkFinished: function checkFinished(parser) { - if(!parser.finished()) { + if (!parser.finished()) { throw new Error('Data still available after parsing'); } }, @@ -25,17 +24,17 @@ module.exports = utils = { return bitcore.crypto.Random.getRandomBuffer(8); }, writeIP: function writeIP(ip, bw) { - var words = ip.v6.split(':').map(function(s) { + const words = ip.v6.split(':').map(function(s) { return Buffer.from(s, 'hex'); }); - for (var i = 0; i < words.length; i++) { - var word = words[i]; + for (let i = 0; i < words.length; i++) { + const word = words[i]; bw.write(word); } }, writeAddr: function writeAddr(addr, bw) { - if (_.isUndefined(addr)) { - var pad = Buffer.from(Array(26)); + if (addr == null) { + const pad = Buffer.from(Array(26)); bw.write(pad); return; } @@ -46,16 +45,16 @@ module.exports = utils = { }, writeInventory: function writeInventory(inventory, bw) { bw.writeVarintNum(inventory.length); - inventory.forEach(function(value) { + for (const value of inventory) { bw.writeUInt32LE(value.type); bw.write(value.hash); - }); + } }, parseIP: function parseIP(parser) { - var ipv6 = []; - var ipv4 = []; - for (var a = 0; a < 8; a++) { - var word = parser.read(2); + let ipv6 = []; + let ipv4 = []; + for (let a = 0; a < 8; a++) { + const word = parser.read(2); ipv6.push(word.toString('hex')); if (a >= 6) { ipv4.push(word[0]); @@ -70,9 +69,9 @@ module.exports = utils = { }; }, parseAddr: function parseAddr(parser) { - var services = parser.readUInt64LEBN(); - var ip = utils.parseIP(parser); - var port = parser.readUInt16BE(); + const services = parser.readUInt64LEBN(); + const ip = utils.parseIP(parser); + const port = parser.readUInt16BE(); return { services: services, ip: ip, @@ -82,12 +81,12 @@ module.exports = utils = { sanitizeStartStop: function sanitizeStartStop(obj) { /* jshint maxcomplexity: 10 */ /* jshint maxstatements: 20 */ - $.checkArgument(_.isUndefined(obj.starts) || _.isArray(obj.starts)); - var starts = obj.starts; - var stop = obj.stop; + $.checkArgument(obj?.starts == null || Array.isArray(obj?.starts)); + let starts = obj.starts; + let stop = obj.stop; if (starts) { starts = starts.map(function(hash) { - if (_.isString(hash)) { + if (typeof hash === 'string') { return BufferUtil.reverse(Buffer.from(hash, 'hex')); } else { return hash; @@ -97,14 +96,14 @@ module.exports = utils = { starts = []; } - for (var i = 0; i < starts.length; i++) { + for (let i = 0; i < starts.length; i++) { if (starts[i].length !== 32) { throw new Error('Invalid hash ' + i + ' length: ' + starts[i].length); } } stop = obj.stop; - if (_.isString(stop)) { + if (typeof stop === 'string') { stop = BufferUtil.reverse(Buffer.from(stop, 'hex')); } if (!stop) { diff --git a/packages/bitcore-p2p/test/peer.js b/packages/bitcore-p2p/test/peer.js index f38d9dc7c12..cebbdd287f4 100644 --- a/packages/bitcore-p2p/test/peer.js +++ b/packages/bitcore-p2p/test/peer.js @@ -9,9 +9,7 @@ const bitcore = require('@bitpay-labs/bitcore-lib'); const P2P = require('../'); const EventEmitter = require('events').EventEmitter; -const should = chai.should(); const expect = chai.expect; -const _ = bitcore.deps._; const Peer = P2P.Peer; const Messages = P2P.Messages; const messages = new Messages(); @@ -21,17 +19,17 @@ describe('Peer', function() { describe('Integration test', function() { it('parses this stream of data from a connection', function(callback) { - var peer = new Peer(''); - var stub = sinon.stub(); - var dataCallback; - var connectCallback; - var expected = { + const peer = new Peer(''); + const stub = sinon.stub(); + let dataCallback; + let connectCallback; + const expected = { version: 1, verack: 1, inv: 18, addr: 4 }; - var received = { + const received = { version: 0, verack: 0, inv: 0, @@ -55,9 +53,9 @@ describe('Peer', function() { peer.on('connect', function() { dataCallback(fs.readFileSync('./test/data/connection.log')); }); - var check = function(message) { + const check = function(message) { received[message.command]++; - if (_.isEqual(received, expected)) { + if (Object.keys(expected).every((command) => received[command] === expected[command])) { callback(); } }; @@ -70,21 +68,21 @@ describe('Peer', function() { }); it('create instance', function() { - var peer = new Peer('localhost'); + const peer = new Peer('localhost'); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.livenet); peer.port.should.equal(Networks.livenet.port); }); it('create instance setting a port', function() { - var peer = new Peer({host: 'localhost', port: 8111}); + const peer = new Peer({ host: 'localhost', port: 8111 }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.livenet); peer.port.should.equal(8111); }); it('create instance setting a network', function() { - var peer = new Peer({host: 'localhost', network: Networks.testnet}); + const peer = new Peer({ host: 'localhost', network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); // Default testnet doesn't have a port, it is contained in the variants properties @@ -92,7 +90,7 @@ describe('Peer', function() { }); it('create instance setting a network from string', function() { - var peer = new Peer({host: 'localhost', network: 'testnet'}); + const peer = new Peer({ host: 'localhost', network: 'testnet' }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); // Default testnet doesn't have a port, it is contained in the variants properties @@ -100,7 +98,7 @@ describe('Peer', function() { }); it('create instance setting a network from xpubkey', function() { - var peer = new Peer({host: 'localhost', network: 0x043587cf}); + const peer = new Peer({ host: 'localhost', network: 0x043587cf }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); // Default testnet doesn't have a port, it is contained in the variants properties @@ -108,36 +106,36 @@ describe('Peer', function() { }); it('create instance setting a custom network', function() { - const customNetwork = new class Network{ constructor(port, networkMagic) { this.port = port; this.networkMagic = networkMagic } }(1234, 0x1234567); - var peer = new Peer({host: 'localhost', network: customNetwork}); + const customNetwork = new class Network { constructor(port, networkMagic) { this.port = port; this.networkMagic = networkMagic; } }(1234, 0x1234567); + const peer = new Peer({ host: 'localhost', network: customNetwork }); peer.host.should.equal('localhost'); peer.network.should.equal(customNetwork); peer.port.should.equal(customNetwork.port); }); it('create instance setting port and network', function() { - var peer = new Peer({host: 'localhost', port: 8111, network: Networks.testnet}); + const peer = new Peer({ host: 'localhost', port: 8111, network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(8111); }); it('create instance without new', function() { - var peer = Peer({host: 'localhost', port: 8111, network: Networks.testnet}); + const peer = Peer({ host: 'localhost', port: 8111, network: Networks.testnet }); peer.host.should.equal('localhost'); peer.network.should.equal(Networks.testnet); peer.port.should.equal(8111); }); it('set a proxy', function() { - var peer, peer2, socket; + let socket; - peer = new Peer('localhost'); + const peer = new Peer('localhost'); expect(peer.proxy).to.be.undefined(); socket = peer._getSocket(); socket.should.be.instanceof(Net.Socket); - peer2 = peer.setProxy('127.0.0.1', 9050); + const peer2 = peer.setProxy('127.0.0.1', 9050); peer2.proxy.host.should.equal('127.0.0.1'); peer2.proxy.port.should.equal(9050); socket = peer2._getSocket(); @@ -147,8 +145,8 @@ describe('Peer', function() { }); it('send pong on ping', function(done) { - var peer = new Peer({host: 'localhost'}); - var pingMessage = messages.Ping(); + const peer = new Peer({ host: 'localhost' }); + const pingMessage = messages.Ping(); peer.sendMessage = function(message) { message.command.should.equal('pong'); message.nonce.should.equal(pingMessage.nonce); @@ -158,14 +156,14 @@ describe('Peer', function() { }); it('relay error from socket', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.spy(); socket.destroy = sinon.spy(); peer._getSocket = function() { return socket; }; - var error = new Error('error'); + const error = new Error('error'); peer.on('error', function(err) { err.should.equal(error); done(); @@ -175,8 +173,8 @@ describe('Peer', function() { }); it('will not disconnect twice on disconnect and error', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.stub(); socket.destroy = sinon.stub(); peer._getSocket = function() { @@ -184,7 +182,7 @@ describe('Peer', function() { }; peer.on('error', sinon.stub()); peer.connect(); - var called = 0; + let called = 0; peer.on('disconnect', function() { called++; called.should.not.be.above(1); @@ -195,8 +193,8 @@ describe('Peer', function() { }); it('disconnect with max buffer length', function(done) { - var peer = new Peer({host: 'localhost'}); - var socket = new EventEmitter(); + const peer = new Peer({ host: 'localhost' }); + const socket = new EventEmitter(); socket.connect = sinon.spy(); peer._getSocket = function() { return socket; @@ -205,14 +203,14 @@ describe('Peer', function() { done(); }; peer.connect(); - var buffer = Buffer.from(Array(Peer.MAX_RECEIVE_BUFFER + 1)); + const buffer = Buffer.from(Array(Peer.MAX_RECEIVE_BUFFER + 1)); peer.socket.emit('data', buffer); }); it('should send version on version if not already sent', function(done) { - var peer = new Peer({host:'localhost'}); - var commands = {}; + const peer = new Peer({ host: 'localhost' }); + const commands = {}; peer.sendMessage = function(message) { commands[message.command] = true; if (commands.verack && commands.version) { @@ -228,9 +226,9 @@ describe('Peer', function() { }); it('should not send version on version if already sent', function(done) { - var peer = new Peer({host:'localhost'}); + const peer = new Peer({ host: 'localhost' }); peer.versionSent = true; - var commands = {}; + const commands = {}; peer.sendMessage = function(message) { message.command.should.not.equal('version'); done(); @@ -244,23 +242,22 @@ describe('Peer', function() { }); it('relay set properly', function() { - var peer = new Peer({host: 'localhost'}); + const peer = new Peer({ host: 'localhost' }); peer.relay.should.equal(true); - var peer2 = new Peer({host: 'localhost', relay: false}); + const peer2 = new Peer({ host: 'localhost', relay: false }); peer2.relay.should.equal(false); - var peer3 = new Peer({host: 'localhost', relay: true}); + const peer3 = new Peer({ host: 'localhost', relay: true }); peer3.relay.should.equal(true); }); - it('relay setting respected', function() { - [true,false].forEach(function(relay) { - var peer = new Peer({host: 'localhost', relay: relay}); - var peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { + it('relay setting respected', function() { + for (const relay of [true, false]) { + const peer = new Peer({ host: 'localhost', relay: relay }); + const peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { message.relay.should.equal(relay); }); peer._sendVersion(); peerSendMessageStub.restore(); - }); + } }); - });