From 09386ce6e067c3ab95b04f31b0c323d35c644253 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 13:49:17 -0400 Subject: [PATCH 01/58] [p2p] lint inventory.js --- packages/bitcore-p2p/lib/inventory.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/bitcore-p2p/lib/inventory.js b/packages/bitcore-p2p/lib/inventory.js index 17ac93fba8b..bf7ab8909f8 100644 --- a/packages/bitcore-p2p/lib/inventory.js +++ b/packages/bitcore-p2p/lib/inventory.js @@ -1,6 +1,7 @@ 'use strict'; const bitcore = require('@bitpay-labs/bitcore-lib'); + const $ = bitcore.util.preconditions; const BufferUtil = bitcore.util.buffer; const BufferReader = bitcore.encoding.BufferReader; @@ -35,7 +36,7 @@ Inventory.forItem = function(type, hash) { 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 +70,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 +89,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 +100,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); From 4cf846fe6f18d7ec1afe2093eaf1e98a5d3d8de3 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 13:50:11 -0400 Subject: [PATCH 02/58] rm lodash - inventory.js --- packages/bitcore-p2p/lib/inventory.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p/lib/inventory.js b/packages/bitcore-p2p/lib/inventory.js index bf7ab8909f8..3c9e764103b 100644 --- a/packages/bitcore-p2p/lib/inventory.js +++ b/packages/bitcore-p2p/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); } From 74a276f4fde4023a451d783e375d49df04ccc69c Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 13:50:59 -0400 Subject: [PATCH 03/58] lint message/utils.js --- packages/bitcore-p2p/lib/messages/utils.js | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/utils.js b/packages/bitcore-p2p/lib/messages/utils.js index 7e0ba00b30b..37acbe67a74 100644 --- a/packages/bitcore-p2p/lib/messages/utils.js +++ b/packages/bitcore-p2p/lib/messages/utils.js @@ -17,7 +17,7 @@ module.exports = utils = { ); }, checkFinished: function checkFinished(parser) { - if(!parser.finished()) { + if (!parser.finished()) { throw new Error('Data still available after parsing'); } }, @@ -25,17 +25,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)); + const pad = Buffer.from(Array(26)); bw.write(pad); return; } @@ -52,10 +52,10 @@ module.exports = utils = { }); }, 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 +70,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, @@ -83,8 +83,8 @@ module.exports = utils = { /* jshint maxcomplexity: 10 */ /* jshint maxstatements: 20 */ $.checkArgument(_.isUndefined(obj.starts) || _.isArray(obj.starts)); - var starts = obj.starts; - var stop = obj.stop; + let starts = obj.starts; + let stop = obj.stop; if (starts) { starts = starts.map(function(hash) { if (_.isString(hash)) { @@ -97,7 +97,7 @@ 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); } From eb75b295f54f6caa5617982f936c145e7fb0de4c Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 13:52:07 -0400 Subject: [PATCH 04/58] forEach -> for of - messages/util.js --- packages/bitcore-p2p/lib/messages/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/utils.js b/packages/bitcore-p2p/lib/messages/utils.js index 37acbe67a74..c03f4767518 100644 --- a/packages/bitcore-p2p/lib/messages/utils.js +++ b/packages/bitcore-p2p/lib/messages/utils.js @@ -46,10 +46,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 = []; From 1556ee23fccad9bb2e9f38a51719732cba9a67f6 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 14:15:40 -0400 Subject: [PATCH 05/58] rm lodash - messages/utils.js --- packages/bitcore-p2p/lib/messages/utils.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/utils.js b/packages/bitcore-p2p/lib/messages/utils.js index c03f4767518..a70fea8a83d 100644 --- a/packages/bitcore-p2p/lib/messages/utils.js +++ b/packages/bitcore-p2p/lib/messages/utils.js @@ -4,15 +4,18 @@ 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) { + /** + * Valid: + * arg is omitted + * OR arg is an array and every element has `type` and `hash` - empty array allowed + */ $.checkArgument( - _.isUndefined(arg) || - (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && !_.isUndefined(arg[0].type) && !_.isUndefined(arg[0].hash)), + arg === undefined || + (Array.isArray(arg) && arg.every(el => !(el?.type == null || el?.hash == null))), 'Argument is expected to be an array of inventory objects' ); }, @@ -34,7 +37,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; @@ -82,12 +85,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 +107,7 @@ module.exports = utils = { } stop = obj.stop; - if (_.isString(stop)) { + if (typeof stop === 'string') { stop = BufferUtil.reverse(Buffer.from(stop, 'hex')); } if (!stop) { From 37108806a45a3de81037d27a6daa9c792f47d28b Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 14:16:30 -0400 Subject: [PATCH 06/58] lint messages/commands/addr.js --- .../bitcore-p2p/lib/messages/commands/addr.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/commands/addr.js b/packages/bitcore-p2p/lib/messages/commands/addr.js index bcb138534c2..eea6a82aa58 100644 --- a/packages/bitcore-p2p/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p/lib/messages/commands/addr.js @@ -1,8 +1,8 @@ '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; @@ -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); } From fb9438e9aaeebcb17293740ea47dd2cc3e893a9a Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:21:02 -0400 Subject: [PATCH 07/58] rm lodash & replace checkArgument conditional - messages/commands/addr.js --- packages/bitcore-p2p/lib/messages/commands/addr.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/commands/addr.js b/packages/bitcore-p2p/lib/messages/commands/addr.js index eea6a82aa58..29e677c1d5a 100644 --- a/packages/bitcore-p2p/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p/lib/messages/commands/addr.js @@ -6,7 +6,6 @@ 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,8 @@ 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 === undefined || + (Array.isArray(arg) && arg.every(el => el && !(el.services == null || el.ip == null || el.port == null))), 'First argument is expected to be an array of addrs' ); this.addresses = arg; From c246f27241a04744594b4da2f35eb6e39a412218 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:22:15 -0400 Subject: [PATCH 08/58] rm lodash - messages/commands/block.js --- packages/bitcore-p2p/lib/messages/commands/block.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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; From bc72820c22748869e89a229101d2a045a2dd0b44 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:23:21 -0400 Subject: [PATCH 09/58] rm lodash - messages/commands/filteradd.js --- packages/bitcore-p2p/lib/messages/commands/filteradd.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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; From b4cca6ebee0262c2027c92b5f97be8b158878d3a Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:23:58 -0400 Subject: [PATCH 10/58] rm lodash - messages/commands/filterload.js --- packages/bitcore-p2p/lib/messages/commands/filterload.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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; From b63c1f80dfd8022aa055b83b1a4b1b95e6e8fbd0 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:25:26 -0400 Subject: [PATCH 11/58] lint messages/commands/getdata.js (and remove unused lodash import) --- .../lib/messages/commands/getdata.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) 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(); }; From baa3f9e3166dac0eb93a2176ddacf9164c08351a Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:25:47 -0400 Subject: [PATCH 12/58] lint messages/commands/headers.js --- .../lib/messages/commands/headers.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/commands/headers.js b/packages/bitcore-p2p/lib/messages/commands/headers.js index fcada8b93f8..d5af49ff28e 100644 --- a/packages/bitcore-p2p/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p/lib/messages/commands/headers.js @@ -1,8 +1,8 @@ '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; @@ -34,24 +34,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); } From 7b2705460b564f28393361abf50a04fd8d9b8e12 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:31:25 -0400 Subject: [PATCH 13/58] lint & rm lodash - messages/commands/headers.js --- packages/bitcore-p2p/lib/messages/commands/headers.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/commands/headers.js b/packages/bitcore-p2p/lib/messages/commands/headers.js index d5af49ff28e..8b6a3a74a85 100644 --- a/packages/bitcore-p2p/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p/lib/messages/commands/headers.js @@ -7,7 +7,6 @@ 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; From d291bdee5158d9bf4b11ed311351b29d4b546469 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:32:47 -0400 Subject: [PATCH 14/58] lint & rm lodash - messages/commands/merkleblock.js --- packages/bitcore-p2p/lib/messages/commands/merkleblock.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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; From e9c08ee3e80464e0f84a3482b300f273ddc5c301 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:33:23 -0400 Subject: [PATCH 15/58] lint & rm lodash (unused) - messages/commands/notfound.js --- .../lib/messages/commands/notfound.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) 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(); }; From a998b1953aed0284003afd5d07e314f8720b88ea Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:34:07 -0400 Subject: [PATCH 16/58] lint & rm lodash - messages/commands/ping.js --- packages/bitcore-p2p/lib/messages/commands/ping.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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); From 98ba99804e574578173f11c4914b43121d5c5463 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:34:43 -0400 Subject: [PATCH 17/58] lint and rm lodash - messages/commands/pong.js --- packages/bitcore-p2p/lib/messages/commands/pong.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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); From 0955ecb441d607d19222cd6fa54bd59594278120 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:35:51 -0400 Subject: [PATCH 18/58] lint & rm lodash - messages/commands/tx.js --- packages/bitcore-p2p/lib/messages/commands/tx.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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; From abdb218b1bdc2ac8debb45af53917525cec088a8 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:37:28 -0400 Subject: [PATCH 19/58] lint test/peer.js --- packages/bitcore-p2p/test/peer.js | 80 +++++++++++++++---------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/bitcore-p2p/test/peer.js b/packages/bitcore-p2p/test/peer.js index f38d9dc7c12..3bf74b48a89 100644 --- a/packages/bitcore-p2p/test/peer.js +++ b/packages/bitcore-p2p/test/peer.js @@ -21,17 +21,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,7 +55,7 @@ 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)) { callback(); @@ -70,21 +70,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 +92,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 +100,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 +108,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 +147,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 +158,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 +175,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 +184,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 +195,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 +205,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 +228,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,18 +244,18 @@ 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) { + [true, false].forEach(function(relay) { + const peer = new Peer({ host: 'localhost', relay: relay }); + const peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { message.relay.should.equal(relay); }); peer._sendVersion(); From dba2cac2062906618ff55efe07ad3d4930a5731e Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:40:00 -0400 Subject: [PATCH 20/58] forEach -> for-of, test/peer.js --- packages/bitcore-p2p/test/peer.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/bitcore-p2p/test/peer.js b/packages/bitcore-p2p/test/peer.js index 3bf74b48a89..7b8424fb251 100644 --- a/packages/bitcore-p2p/test/peer.js +++ b/packages/bitcore-p2p/test/peer.js @@ -9,7 +9,6 @@ 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; @@ -252,15 +251,14 @@ describe('Peer', function() { peer3.relay.should.equal(true); }); - it('relay setting respected', function() { - [true, false].forEach(function(relay) { + 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(); - }); + } }); - }); From 684f14e7c23f7effbe9627ef39e70799e61ecf23 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:42:10 -0400 Subject: [PATCH 21/58] rm lodash - test/peer.js --- packages/bitcore-p2p/test/peer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p/test/peer.js b/packages/bitcore-p2p/test/peer.js index 7b8424fb251..cebbdd287f4 100644 --- a/packages/bitcore-p2p/test/peer.js +++ b/packages/bitcore-p2p/test/peer.js @@ -10,7 +10,6 @@ const P2P = require('../'); const EventEmitter = require('events').EventEmitter; const expect = chai.expect; -const _ = bitcore.deps._; const Peer = P2P.Peer; const Messages = P2P.Messages; const messages = new Messages(); @@ -56,7 +55,7 @@ describe('Peer', function() { }); const check = function(message) { received[message.command]++; - if (_.isEqual(received, expected)) { + if (Object.keys(expected).every((command) => received[command] === expected[command])) { callback(); } }; From 740e0790d5e7f69002185d3589a4666cf99c6284 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:43:24 -0400 Subject: [PATCH 22/58] lint integration/bitcoind.js --- packages/bitcore-p2p/integration/bitcoind.js | 58 +++++++++----------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/packages/bitcore-p2p/integration/bitcoind.js b/packages/bitcore-p2p/integration/bitcoind.js index db4614df635..57741625005 100644 --- a/packages/bitcore-p2p/integration/bitcoind.js +++ b/packages/bitcore-p2p/integration/bitcoind.js @@ -1,22 +1,18 @@ '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 +27,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() { @@ -59,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); }); @@ -97,7 +89,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); cb(); }); - var message = messages.GetAddr(); + const message = messages.GetAddr(); peer.sendMessage(message); }); }); @@ -112,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 }]; @@ -128,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); }); @@ -139,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) { @@ -167,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 }); @@ -184,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(); }); @@ -204,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); }); }); From 07229451dcd57d911088a478273d333714c39acd Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:44:40 -0400 Subject: [PATCH 23/58] forEach -> for-of, integration/bitcoind.js --- packages/bitcore-p2p/integration/bitcoind.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-p2p/integration/bitcoind.js b/packages/bitcore-p2p/integration/bitcoind.js index 57741625005..f44a36cd1c6 100644 --- a/packages/bitcore-p2p/integration/bitcoind.js +++ b/packages/bitcore-p2p/integration/bitcoind.js @@ -82,11 +82,11 @@ 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(); }); const message = messages.GetAddr(); From 45677cf4684b3785f055bdd4b35a2a7c36ba1a9c Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:46:00 -0400 Subject: [PATCH 24/58] rm lodash - integration/bitcoind.js --- packages/bitcore-p2p/integration/bitcoind.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/bitcore-p2p/integration/bitcoind.js b/packages/bitcore-p2p/integration/bitcoind.js index f44a36cd1c6..c682d828082 100644 --- a/packages/bitcore-p2p/integration/bitcoind.js +++ b/packages/bitcore-p2p/integration/bitcoind.js @@ -5,7 +5,6 @@ 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 Peer = p2p.Peer; @@ -64,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).should.be(true); + (typeof peer.bestHeight).should.be(true); cb(); }); }); From 13c710228c9666e9a5bf2711e0d1749148a83d8f Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:51:58 -0400 Subject: [PATCH 25/58] [p2p cash] rm lodash - inventory.js --- packages/bitcore-p2p-cash/lib/inventory.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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); } From ba1bd9236f64891797bf82add16cdd7a68a9d586 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:52:27 -0400 Subject: [PATCH 26/58] [p2p cash] lint messages/utils.js --- .../bitcore-p2p-cash/lib/messages/utils.js | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/utils.js b/packages/bitcore-p2p-cash/lib/messages/utils.js index 282cb7afd75..fc05a035da4 100644 --- a/packages/bitcore-p2p-cash/lib/messages/utils.js +++ b/packages/bitcore-p2p-cash/lib/messages/utils.js @@ -17,7 +17,7 @@ module.exports = utils = { ); }, checkFinished: function checkFinished(parser) { - if(!parser.finished()) { + if (!parser.finished()) { throw new Error('Data still available after parsing'); } }, @@ -25,17 +25,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)); + const pad = Buffer.from(Array(26)); bw.write(pad); return; } @@ -52,10 +52,10 @@ module.exports = utils = { }); }, 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 +70,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, @@ -83,8 +83,8 @@ module.exports = utils = { /* jshint maxcomplexity: 10 */ /* jshint maxstatements: 20 */ $.checkArgument(_.isUndefined(obj.starts) || _.isArray(obj.starts)); - var starts = obj.starts; - var stop = obj.stop; + let starts = obj.starts; + let stop = obj.stop; if (starts) { starts = starts.map(function(hash) { if (_.isString(hash)) { @@ -97,7 +97,7 @@ 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); } From be60cbdcb4ed2cc900fb58f4b4da5cd1ca0f3dac Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:53:03 -0400 Subject: [PATCH 27/58] [p2p cash] forEach -> for-of, messages/utils.js --- packages/bitcore-p2p-cash/lib/messages/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/utils.js b/packages/bitcore-p2p-cash/lib/messages/utils.js index fc05a035da4..0d9902b351c 100644 --- a/packages/bitcore-p2p-cash/lib/messages/utils.js +++ b/packages/bitcore-p2p-cash/lib/messages/utils.js @@ -46,10 +46,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 = []; From 112939c4e9cf619d4b32da634ae9ce93cc447978 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:56:45 -0400 Subject: [PATCH 28/58] rm lodash - messages/utils.js --- packages/bitcore-p2p-cash/lib/messages/utils.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/utils.js b/packages/bitcore-p2p-cash/lib/messages/utils.js index 0d9902b351c..818d5b63741 100644 --- a/packages/bitcore-p2p-cash/lib/messages/utils.js +++ b/packages/bitcore-p2p-cash/lib/messages/utils.js @@ -4,15 +4,14 @@ 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) || + arg == null || (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && !_.isUndefined(arg[0].type) && !_.isUndefined(arg[0].hash)), + (Array.isArray(arg) && 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; @@ -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) { From 7a2b0707f2e6509595bd8ce659adf5a985303472 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 20 Apr 2026 15:58:53 -0400 Subject: [PATCH 29/58] lint & rm lodash - messages/commands/addr.js --- .../bitcore-p2p-cash/lib/messages/commands/addr.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/addr.js b/packages/bitcore-p2p-cash/lib/messages/commands/addr.js index 578af10e45b..ff7ff062b87 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,11 @@ 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].services != null && + arg[0].ip != null && + arg[0].port != null), 'First argument is expected to be an array of addrs' ); this.addresses = arg; From d23f92bd74910f896a58b6d02de147ea48b3c6d9 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 10:14:00 -0400 Subject: [PATCH 30/58] [p2p-cash] rm lodash from messages/commands/block.js --- packages/bitcore-p2p-cash/lib/messages/commands/block.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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; From ac62f7f9934717792734d6cc0b655791182b5fb2 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:29:51 -0400 Subject: [PATCH 31/58] [p2p cash] lint messages/commands/filteradd.js --- .../bitcore-p2p-cash/lib/messages/commands/filteradd.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js b/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js index 0af8a9f4dde..c6fc8c92a42 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js @@ -1,8 +1,8 @@ '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; @@ -31,13 +31,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(); From 6f568641ef4abba265849dd200680a5927ca2616 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:30:40 -0400 Subject: [PATCH 32/58] [p2p cash] rm lodash from messages/commands/filteradd.js --- packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js b/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js index c6fc8c92a42..61057644892 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/filteradd.js @@ -9,7 +9,6 @@ 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; From 3bf2d0bda7ca869fb4800a601a2f94a690eb445a Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:32:22 -0400 Subject: [PATCH 33/58] [p2p cash] lint messages/commands/filterload.js --- packages/bitcore-p2p-cash/lib/messages/commands/filterload.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js index a9b4a67adaf..1956359fe26 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js @@ -1,9 +1,9 @@ '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; @@ -32,7 +32,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; From 596d19740eb3eb6f30bb9a60ac288a9b2d9f0d98 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:32:50 -0400 Subject: [PATCH 34/58] [p2p cash] rm lodash from messages/commands/filterload.js --- packages/bitcore-p2p-cash/lib/messages/commands/filterload.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js index 1956359fe26..4fee4c70f25 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js @@ -7,7 +7,6 @@ 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 == undefined || arg instanceof BloomFilter, 'An instance of BloomFilter or undefined is expected' ); this.filter = arg; From 3da2577f936611444d14705288de1581b6de846c Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:33:22 -0400 Subject: [PATCH 35/58] [p2p cash] lint messages/commands/headers.js --- packages/bitcore-p2p-cash/lib/messages/commands/headers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/headers.js b/packages/bitcore-p2p-cash/lib/messages/commands/headers.js index a38ed120b3c..cf8561a4454 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/headers.js @@ -1,8 +1,8 @@ '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; From b4b06f3e7a2393a4a313f8e1877764b329b2cccb Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:34:23 -0400 Subject: [PATCH 36/58] [p2p cash] rm lodash from messages/commands/headers.js --- packages/bitcore-p2p-cash/lib/messages/commands/headers.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/headers.js b/packages/bitcore-p2p-cash/lib/messages/commands/headers.js index cf8561a4454..68ae65b3d66 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/headers.js @@ -7,7 +7,6 @@ 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; From 022cded02ad72f27c2c21ad755fa3a7e01005bb5 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:35:05 -0400 Subject: [PATCH 37/58] [p2p cash] lint messages/commands/merkleblock.js --- packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js b/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js index 1380b96c8e6..cafda29148e 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js @@ -1,8 +1,8 @@ '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; From 1b5db795ee452082f82d07d0386da45fbc08a24b Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:35:40 -0400 Subject: [PATCH 38/58] [p2p cash] rm lodash from messages/commands/merkleblock.js --- packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js b/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js index cafda29148e..9925b75ab0d 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/merkleblock.js @@ -6,7 +6,6 @@ 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; From 28ef197426bef45abf1f20ea4110415876171ffd Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:36:04 -0400 Subject: [PATCH 39/58] [p2p cash] lint messages/commands/ping.js --- packages/bitcore-p2p-cash/lib/messages/commands/ping.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/ping.js b/packages/bitcore-p2p-cash/lib/messages/commands/ping.js index 3c56f0ece91..5b80a3d8088 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/ping.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/ping.js @@ -1,8 +1,8 @@ '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; From 2e4837c57078346a9a18f50e12cee2323b8383a6 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:36:41 -0400 Subject: [PATCH 40/58] [p2p cash] rm lodash from messages/commands/ping.js --- packages/bitcore-p2p-cash/lib/messages/commands/ping.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/ping.js b/packages/bitcore-p2p-cash/lib/messages/commands/ping.js index 5b80a3d8088..45aecf3c65b 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/ping.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/ping.js @@ -6,7 +6,6 @@ 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(); From 34cf4f362a38618c1917fbf4f62d2f50e8cc5be5 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:37:18 -0400 Subject: [PATCH 41/58] [p2p cash] lint messages/commands/pong.js --- packages/bitcore-p2p-cash/lib/messages/commands/pong.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/pong.js b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js index 26aff7fe0ef..07737b86814 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js @@ -1,8 +1,8 @@ '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; From 771203d27c7ff5a54bd3b5f64d99660046390fca Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:37:43 -0400 Subject: [PATCH 42/58] [p2p cash] rm lodash from messages/commands/pong.js --- packages/bitcore-p2p-cash/lib/messages/commands/pong.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/pong.js b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js index 07737b86814..bec5a0789e2 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js @@ -6,7 +6,6 @@ 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 == undefined || (BufferUtil.isBuffer(arg) && arg.length === 8), 'First argument is expected to be an 8 byte buffer' ); this.nonce = arg || utils.getNonce(); From 8bb1c38609454736b782025c3e1251eab80e1bc7 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:39:41 -0400 Subject: [PATCH 43/58] [p2p cash] lint remaining --- .../bitcore-p2p-cash/integration/bitcoind.js | 58 ++++++------ .../lib/messages/commands/tx.js | 2 +- packages/bitcore-p2p-cash/test/peer.js | 94 +++++++++---------- 3 files changed, 75 insertions(+), 79 deletions(-) diff --git a/packages/bitcore-p2p-cash/integration/bitcoind.js b/packages/bitcore-p2p-cash/integration/bitcoind.js index 8525c1d265b..53c8929622f 100644 --- a/packages/bitcore-p2p-cash/integration/bitcoind.js +++ b/packages/bitcore-p2p-cash/integration/bitcoind.js @@ -1,22 +1,18 @@ '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; @@ -40,12 +36,12 @@ const txHash = { 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'); @@ -60,8 +56,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); }); @@ -98,7 +94,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); cb(); }); - var message = messages.GetAddr(); + const message = messages.GetAddr(); peer.sendMessage(message); }); }); @@ -113,15 +109,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 +125,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 +136,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 +164,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 +181,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 +201,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/messages/commands/tx.js b/packages/bitcore-p2p-cash/lib/messages/commands/tx.js index 4572c3c3524..e85b1152bf5 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/tx.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/tx.js @@ -1,8 +1,8 @@ '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._; diff --git a/packages/bitcore-p2p-cash/test/peer.js b/packages/bitcore-p2p-cash/test/peer.js index ea6698a8f11..ccfca20de55 100644 --- a/packages/bitcore-p2p-cash/test/peer.js +++ b/packages/bitcore-p2p-cash/test/peer.js @@ -21,17 +21,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,7 +55,7 @@ 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)) { 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,18 +247,18 @@ 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) { + [true, false].forEach(function(relay) { + const peer = new Peer({ host: 'localhost', relay: relay }); + const peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { message.relay.should.equal(relay); }); peer._sendVersion(); @@ -267,19 +267,19 @@ describe('Peer', function() { }); 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 From 760c66920e5948fa2d6758459e890efa353cc292 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:41:16 -0400 Subject: [PATCH 44/58] [p2p cash] forEach -> for-of --- packages/bitcore-p2p-cash/integration/bitcoind.js | 4 ++-- packages/bitcore-p2p-cash/test/peer.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/bitcore-p2p-cash/integration/bitcoind.js b/packages/bitcore-p2p-cash/integration/bitcoind.js index 53c8929622f..ba5af89f88e 100644 --- a/packages/bitcore-p2p-cash/integration/bitcoind.js +++ b/packages/bitcore-p2p-cash/integration/bitcoind.js @@ -87,11 +87,11 @@ 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(); }); const message = messages.GetAddr(); diff --git a/packages/bitcore-p2p-cash/test/peer.js b/packages/bitcore-p2p-cash/test/peer.js index ccfca20de55..6b81125da83 100644 --- a/packages/bitcore-p2p-cash/test/peer.js +++ b/packages/bitcore-p2p-cash/test/peer.js @@ -256,14 +256,14 @@ describe('Peer', function() { }); it('relay setting respected', function() { - [true, false].forEach(function(relay) { + 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() { From f25a48f57fa7d6f719f4b45aa487fd12dede53c5 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 12:58:15 -0400 Subject: [PATCH 45/58] [p2p cash] rm lodash --- packages/bitcore-p2p-cash/integration/bitcoind.js | 5 ++--- packages/bitcore-p2p-cash/lib/messages/commands/tx.js | 3 +-- packages/bitcore-p2p-cash/test/peer.js | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/bitcore-p2p-cash/integration/bitcoind.js b/packages/bitcore-p2p-cash/integration/bitcoind.js index ba5af89f88e..ee2da8faab0 100644 --- a/packages/bitcore-p2p-cash/integration/bitcoind.js +++ b/packages/bitcore-p2p-cash/integration/bitcoind.js @@ -5,7 +5,6 @@ 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 Peer = p2p.Peer; @@ -69,8 +68,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.be(true); + (typeof peer.bestHeight === 'number').should.be(true); cb(); }); }); diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/tx.js b/packages/bitcore-p2p-cash/lib/messages/commands/tx.js index e85b1152bf5..677f14aa1ea 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/tx.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/tx.js @@ -5,7 +5,6 @@ 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/test/peer.js b/packages/bitcore-p2p-cash/test/peer.js index 6b81125da83..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(); @@ -57,7 +56,8 @@ describe('Peer', function() { }); 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(); } }; From e82be819e63a6019c1d4914344392e4201e4ca46 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 13:58:39 -0400 Subject: [PATCH 46/58] lint target files (with lodash) in p2p doge --- .../bitcore-p2p-doge/integration/bitcoind.js | 58 +++++++-------- .../lib/messages/commands/addr.js | 2 +- .../lib/messages/commands/block.js | 2 +- .../lib/messages/commands/filteradd.js | 2 +- .../lib/messages/commands/filterload.js | 2 +- .../lib/messages/commands/headers.js | 2 +- .../lib/messages/commands/merkleblock.js | 2 +- .../lib/messages/commands/ping.js | 2 +- .../lib/messages/commands/pong.js | 2 +- .../lib/messages/commands/tx.js | 2 +- packages/bitcore-p2p-doge/test/peer.js | 72 +++++++++---------- 11 files changed, 72 insertions(+), 76 deletions(-) diff --git a/packages/bitcore-p2p-doge/integration/bitcoind.js b/packages/bitcore-p2p-doge/integration/bitcoind.js index 31a54efb0a4..4f0a0d13f52 100644 --- a/packages/bitcore-p2p-doge/integration/bitcoind.js +++ b/packages/bitcore-p2p-doge/integration/bitcoind.js @@ -1,22 +1,18 @@ '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; @@ -40,12 +36,12 @@ const txHash = { 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'); @@ -60,8 +56,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); }); @@ -98,7 +94,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); cb(); }); - var message = messages.GetAddr(); + const message = messages.GetAddr(); peer.sendMessage(message); }); }); @@ -113,15 +109,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 +125,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 +136,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 +164,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 +181,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 +201,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/messages/commands/addr.js b/packages/bitcore-p2p-doge/lib/messages/commands/addr.js index d520b5e4d87..53d66afcdb9 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/addr.js @@ -1,8 +1,8 @@ '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; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/block.js b/packages/bitcore-p2p-doge/lib/messages/commands/block.js index 1c5446548ae..68569720a69 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/block.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/block.js @@ -1,8 +1,8 @@ '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._; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js b/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js index 21e18ffa133..d1dd30ff188 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js @@ -1,8 +1,8 @@ '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; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js b/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js index 58fb6f4a43f..caebe3fd584 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js @@ -1,9 +1,9 @@ '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; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/headers.js b/packages/bitcore-p2p-doge/lib/messages/commands/headers.js index 66398271bcb..85628535bed 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/headers.js @@ -1,8 +1,8 @@ '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; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js b/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js index f5a5f179cf4..64a3f19f2ca 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js @@ -1,8 +1,8 @@ '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; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/ping.js b/packages/bitcore-p2p-doge/lib/messages/commands/ping.js index e9e1bca9d81..67abed7097e 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/ping.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/ping.js @@ -1,8 +1,8 @@ '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; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/pong.js b/packages/bitcore-p2p-doge/lib/messages/commands/pong.js index 827aade2899..3fd442b6dc8 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/pong.js @@ -1,8 +1,8 @@ '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; diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/tx.js b/packages/bitcore-p2p-doge/lib/messages/commands/tx.js index d1199008b6f..17ddd3bc106 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/tx.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/tx.js @@ -1,8 +1,8 @@ '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._; diff --git a/packages/bitcore-p2p-doge/test/peer.js b/packages/bitcore-p2p-doge/test/peer.js index f1ffd6b2652..668b99cb84c 100644 --- a/packages/bitcore-p2p-doge/test/peer.js +++ b/packages/bitcore-p2p-doge/test/peer.js @@ -21,17 +21,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,7 +55,7 @@ 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)) { 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,18 +219,18 @@ 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) { + [true, false].forEach(function(relay) { + const peer = new Peer({ host: 'localhost', relay: relay }); + const peerSendMessageStub = sinon.stub(Peer.prototype, 'sendMessage', function(message) { message.relay.should.equal(relay); }); peer._sendVersion(); From b675c0ad7403292f4b80ddb707fd00c93cc5e385 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 14:01:36 -0400 Subject: [PATCH 47/58] p2p doge: forEach -> for of --- packages/bitcore-p2p-doge/integration/bitcoind.js | 4 ++-- packages/bitcore-p2p-doge/lib/messages/utils.js | 4 ++-- packages/bitcore-p2p-doge/test/peer.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-p2p-doge/integration/bitcoind.js b/packages/bitcore-p2p-doge/integration/bitcoind.js index 4f0a0d13f52..cab167312a1 100644 --- a/packages/bitcore-p2p-doge/integration/bitcoind.js +++ b/packages/bitcore-p2p-doge/integration/bitcoind.js @@ -87,11 +87,11 @@ 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.addresshes) { (address.time instanceof Date).should.equal(true); should.exist(address.ip); (address.services instanceof BN).should.equal(true); - }); + } cb(); }); const message = messages.GetAddr(); diff --git a/packages/bitcore-p2p-doge/lib/messages/utils.js b/packages/bitcore-p2p-doge/lib/messages/utils.js index 296a78f6bce..14427fa4aee 100644 --- a/packages/bitcore-p2p-doge/lib/messages/utils.js +++ b/packages/bitcore-p2p-doge/lib/messages/utils.js @@ -46,10 +46,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 = []; diff --git a/packages/bitcore-p2p-doge/test/peer.js b/packages/bitcore-p2p-doge/test/peer.js index 668b99cb84c..579af33ba42 100644 --- a/packages/bitcore-p2p-doge/test/peer.js +++ b/packages/bitcore-p2p-doge/test/peer.js @@ -228,14 +228,14 @@ describe('Peer', function() { }); it('relay setting respected', function() { - [true, false].forEach(function(relay) { + 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(); - }); + } }); }); From a407744fac5b2068125ce5b5be7b7a0147ad8658 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 14:09:24 -0400 Subject: [PATCH 48/58] rm lodash from p2p doge --- packages/bitcore-p2p-doge/integration/bitcoind.js | 5 ++--- packages/bitcore-p2p-doge/lib/inventory.js | 4 ++-- .../bitcore-p2p-doge/lib/messages/commands/addr.js | 9 ++++----- .../bitcore-p2p-doge/lib/messages/commands/block.js | 3 +-- .../lib/messages/commands/filteradd.js | 3 +-- .../lib/messages/commands/filterload.js | 3 +-- .../lib/messages/commands/headers.js | 3 +-- .../lib/messages/commands/merkleblock.js | 3 +-- .../bitcore-p2p-doge/lib/messages/commands/ping.js | 3 +-- .../bitcore-p2p-doge/lib/messages/commands/pong.js | 3 +-- .../bitcore-p2p-doge/lib/messages/commands/tx.js | 3 +-- packages/bitcore-p2p-doge/lib/messages/utils.js | 13 ++++++------- packages/bitcore-p2p-doge/test/peer.js | 4 ++-- 13 files changed, 24 insertions(+), 35 deletions(-) diff --git a/packages/bitcore-p2p-doge/integration/bitcoind.js b/packages/bitcore-p2p-doge/integration/bitcoind.js index cab167312a1..11e4e668843 100644 --- a/packages/bitcore-p2p-doge/integration/bitcoind.js +++ b/packages/bitcore-p2p-doge/integration/bitcoind.js @@ -5,7 +5,6 @@ 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 Peer = p2p.Peer; @@ -69,8 +68,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.be(true); + (typeof peer.bestHeight === 'number').should.be(true); 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 53d66afcdb9..52bc3241aad 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/addr.js @@ -6,7 +6,6 @@ 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,11 @@ 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].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 68569720a69..e2a3daaed13 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/block.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/block.js @@ -5,7 +5,6 @@ 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 d1dd30ff188..2b727b6f74e 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/filteradd.js @@ -9,7 +9,6 @@ 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 caebe3fd584..e0c9daca50f 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/filterload.js @@ -7,7 +7,6 @@ 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 85628535bed..2dddc4013b4 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/headers.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/headers.js @@ -7,7 +7,6 @@ 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 64a3f19f2ca..56b2681f1ae 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/merkleblock.js @@ -6,7 +6,6 @@ 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 67abed7097e..5b3833fa271 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/ping.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/ping.js @@ -6,7 +6,6 @@ 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 3fd442b6dc8..06840f92e6c 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/pong.js @@ -6,7 +6,6 @@ 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 17ddd3bc106..5ee4c1d5d81 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/tx.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/tx.js @@ -5,7 +5,6 @@ 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 14427fa4aee..683e315a8c4 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) || + arg === undefined || (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && !_.isUndefined(arg[0].type) && !_.isUndefined(arg[0].hash)), + (Array.isArray(arg) && 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; @@ -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 579af33ba42..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(); @@ -57,7 +56,8 @@ describe('Peer', function() { }); 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(); } }; From 8e097c45c9a5636c77bb49cbbba8487787c58a3a Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Apr 2026 17:03:20 -0400 Subject: [PATCH 49/58] replace arg check logic with closer to previously existing arg checks --- packages/bitcore-p2p/lib/messages/commands/addr.js | 6 +++++- packages/bitcore-p2p/lib/messages/utils.js | 8 ++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/bitcore-p2p/lib/messages/commands/addr.js b/packages/bitcore-p2p/lib/messages/commands/addr.js index 29e677c1d5a..64e4d7eeb74 100644 --- a/packages/bitcore-p2p/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p/lib/messages/commands/addr.js @@ -20,7 +20,11 @@ function AddrMessage(arg, options) { this.command = 'addr'; $.checkArgument( arg === undefined || - (Array.isArray(arg) && arg.every(el => el && !(el.services == null || el.ip == null || el.port == 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; diff --git a/packages/bitcore-p2p/lib/messages/utils.js b/packages/bitcore-p2p/lib/messages/utils.js index a70fea8a83d..d5398aa238e 100644 --- a/packages/bitcore-p2p/lib/messages/utils.js +++ b/packages/bitcore-p2p/lib/messages/utils.js @@ -8,14 +8,10 @@ let utils; module.exports = utils = { checkInventory: function(arg) { - /** - * Valid: - * arg is omitted - * OR arg is an array and every element has `type` and `hash` - empty array allowed - */ $.checkArgument( arg === undefined || - (Array.isArray(arg) && arg.every(el => !(el?.type == null || el?.hash == 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' ); }, From 0cde8e4f1ad7f9352ea12d4471827779f3e9f05b Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Fri, 24 Apr 2026 10:14:38 -0400 Subject: [PATCH 50/58] fix bad test --- packages/bitcore-p2p/integration/bitcoind.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-p2p/integration/bitcoind.js b/packages/bitcore-p2p/integration/bitcoind.js index c682d828082..a29a3c59ccc 100644 --- a/packages/bitcore-p2p/integration/bitcoind.js +++ b/packages/bitcore-p2p/integration/bitcoind.js @@ -63,8 +63,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('connects', function(cb) { connect(function(peer) { peer.version.should.be.above(70000); - (typeof peer.subversion).should.be(true); - (typeof peer.bestHeight).should.be(true); + (typeof peer.subversion === 'string').should.be(true); + (typeof peer.bestHeight === 'number').should.be(true); cb(); }); }); From b39c95a568def5c2fb96daa018018e333984aec3 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 27 Apr 2026 10:27:03 -0400 Subject: [PATCH 51/58] add optional chaining for better runtime behavior --- packages/bitcore-p2p-cash/lib/messages/commands/addr.js | 1 + packages/bitcore-p2p-cash/lib/messages/utils.js | 2 +- packages/bitcore-p2p-doge/lib/messages/commands/addr.js | 1 + packages/bitcore-p2p-doge/lib/messages/utils.js | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/addr.js b/packages/bitcore-p2p-cash/lib/messages/commands/addr.js index ff7ff062b87..be800651e36 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/addr.js @@ -21,6 +21,7 @@ function AddrMessage(arg, options) { $.checkArgument( arg == null || (Array.isArray(arg) && + arg[0] && arg[0].services != null && arg[0].ip != null && arg[0].port != null), diff --git a/packages/bitcore-p2p-cash/lib/messages/utils.js b/packages/bitcore-p2p-cash/lib/messages/utils.js index 818d5b63741..92709900c9f 100644 --- a/packages/bitcore-p2p-cash/lib/messages/utils.js +++ b/packages/bitcore-p2p-cash/lib/messages/utils.js @@ -81,7 +81,7 @@ module.exports = utils = { sanitizeStartStop: function sanitizeStartStop(obj) { /* jshint maxcomplexity: 10 */ /* jshint maxstatements: 20 */ - $.checkArgument(obj.starts == null || Array.isArray(obj.starts)); + $.checkArgument(obj?.starts == null || Array.isArray(obj?.starts)); let starts = obj.starts; let stop = obj.stop; if (starts) { diff --git a/packages/bitcore-p2p-doge/lib/messages/commands/addr.js b/packages/bitcore-p2p-doge/lib/messages/commands/addr.js index 52bc3241aad..e06034e2f24 100644 --- a/packages/bitcore-p2p-doge/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p-doge/lib/messages/commands/addr.js @@ -21,6 +21,7 @@ function AddrMessage(arg, options) { $.checkArgument( arg == null || (Array.isArray(arg) && + arg[0] && arg[0].services != null && arg[0].ip != null && arg[0].port != null), diff --git a/packages/bitcore-p2p-doge/lib/messages/utils.js b/packages/bitcore-p2p-doge/lib/messages/utils.js index 683e315a8c4..1b372594fb5 100644 --- a/packages/bitcore-p2p-doge/lib/messages/utils.js +++ b/packages/bitcore-p2p-doge/lib/messages/utils.js @@ -81,7 +81,7 @@ module.exports = utils = { sanitizeStartStop: function sanitizeStartStop(obj) { /* jshint maxcomplexity: 10 */ /* jshint maxstatements: 20 */ - $.checkArgument(obj.starts == null || Array.isArray(obj.starts)); + $.checkArgument(obj?.starts == null || Array.isArray(obj?.starts)); let starts = obj.starts; let stop = obj.stop; if (starts) { From e44233f1c4d6d1adc5955ba335d37b708e63f8b4 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 27 Apr 2026 10:30:43 -0400 Subject: [PATCH 52/58] update checkArgument to perform nullish checks instead of strict undefined --- packages/bitcore-p2p-cash/lib/messages/commands/filterload.js | 2 +- packages/bitcore-p2p-cash/lib/messages/commands/pong.js | 2 +- packages/bitcore-p2p-doge/lib/messages/utils.js | 2 +- packages/bitcore-p2p/lib/messages/commands/addr.js | 2 +- packages/bitcore-p2p/lib/messages/utils.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js index 4fee4c70f25..a37ee720774 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/filterload.js @@ -19,7 +19,7 @@ function FilterloadMessage(arg, options) { Message.call(this, options); this.command = 'filterload'; $.checkArgument( - arg == undefined || 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-cash/lib/messages/commands/pong.js b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js index bec5a0789e2..9de286fc9c6 100644 --- a/packages/bitcore-p2p-cash/lib/messages/commands/pong.js +++ b/packages/bitcore-p2p-cash/lib/messages/commands/pong.js @@ -20,7 +20,7 @@ function PongMessage(arg, options) { Message.call(this, options); this.command = 'pong'; $.checkArgument( - arg == undefined || (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/utils.js b/packages/bitcore-p2p-doge/lib/messages/utils.js index 1b372594fb5..d3a26d94fda 100644 --- a/packages/bitcore-p2p-doge/lib/messages/utils.js +++ b/packages/bitcore-p2p-doge/lib/messages/utils.js @@ -9,7 +9,7 @@ let utils; module.exports = utils = { checkInventory: function(arg) { $.checkArgument( - arg === undefined || + arg == null || (Array.isArray(arg) && arg.length === 0) || (Array.isArray(arg) && arg[0].type != null && arg[0].hash != null), 'Argument is expected to be an array of inventory objects' diff --git a/packages/bitcore-p2p/lib/messages/commands/addr.js b/packages/bitcore-p2p/lib/messages/commands/addr.js index 64e4d7eeb74..e1b49eb8b65 100644 --- a/packages/bitcore-p2p/lib/messages/commands/addr.js +++ b/packages/bitcore-p2p/lib/messages/commands/addr.js @@ -19,7 +19,7 @@ function AddrMessage(arg, options) { Message.call(this, options); this.command = 'addr'; $.checkArgument( - arg === undefined || + arg == null || (Array.isArray(arg) && arg[0] && arg[0].services != null && diff --git a/packages/bitcore-p2p/lib/messages/utils.js b/packages/bitcore-p2p/lib/messages/utils.js index d5398aa238e..4d50f124c56 100644 --- a/packages/bitcore-p2p/lib/messages/utils.js +++ b/packages/bitcore-p2p/lib/messages/utils.js @@ -9,7 +9,7 @@ let utils; module.exports = utils = { checkInventory: function(arg) { $.checkArgument( - arg === undefined || + 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' From 2a0ec0eb8911f2a861d45852690709248e2539d7 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 27 Apr 2026 14:24:44 -0400 Subject: [PATCH 53/58] lint mnemonic.js --- packages/bitcore-mnemonic/lib/mnemonic.js | 60 +++++++++++------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/bitcore-mnemonic/lib/mnemonic.js b/packages/bitcore-mnemonic/lib/mnemonic.js index 033228dfb9d..691525c6a54 100644 --- a/packages/bitcore-mnemonic/lib/mnemonic.js +++ b/packages/bitcore-mnemonic/lib/mnemonic.js @@ -2,8 +2,8 @@ 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._; @@ -48,7 +48,7 @@ const Mnemonic = function(data, wordlist) { // handle data overloading - var ent, phrase, seed; + let ent, phrase, seed; if (Buffer.isBuffer(data)) { seed = data; ent = seed.length * 8; @@ -120,22 +120,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 +147,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 +164,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]; } @@ -274,7 +274,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 +286,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 +295,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 +317,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; }; From 56358938f2e0262d82c037b463e14b9742705f65 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 27 Apr 2026 14:26:05 -0400 Subject: [PATCH 54/58] rm lodash usage from mnemonic.js --- packages/bitcore-mnemonic/lib/mnemonic.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/bitcore-mnemonic/lib/mnemonic.js b/packages/bitcore-mnemonic/lib/mnemonic.js index 691525c6a54..9e6289b6995 100644 --- a/packages/bitcore-mnemonic/lib/mnemonic.js +++ b/packages/bitcore-mnemonic/lib/mnemonic.js @@ -6,7 +6,6 @@ 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,7 +40,7 @@ const Mnemonic = function(data, wordlist) { return new Mnemonic(data, wordlist); } - if (_.isArray(data)) { + if (Array.isArray(data)) { wordlist = data; data = null; } @@ -52,9 +51,9 @@ const Mnemonic = function(data, wordlist) { 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'); @@ -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); }; From 58a36a9f0184cfaa1217d05db48f40d191f745b1 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Wed, 29 Apr 2026 15:44:53 -0400 Subject: [PATCH 55/58] refactor cash & doge checkInventory.$checkArgument condition to match btc --- packages/bitcore-p2p-cash/lib/messages/utils.js | 4 ++-- packages/bitcore-p2p-doge/lib/messages/utils.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/bitcore-p2p-cash/lib/messages/utils.js b/packages/bitcore-p2p-cash/lib/messages/utils.js index 92709900c9f..8c58fe208ea 100644 --- a/packages/bitcore-p2p-cash/lib/messages/utils.js +++ b/packages/bitcore-p2p-cash/lib/messages/utils.js @@ -10,8 +10,8 @@ module.exports = utils = { checkInventory: function(arg) { $.checkArgument( arg == null || - (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && arg[0].type != null && arg[0].hash != 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' ); }, diff --git a/packages/bitcore-p2p-doge/lib/messages/utils.js b/packages/bitcore-p2p-doge/lib/messages/utils.js index d3a26d94fda..aba0f44a6ee 100644 --- a/packages/bitcore-p2p-doge/lib/messages/utils.js +++ b/packages/bitcore-p2p-doge/lib/messages/utils.js @@ -10,8 +10,8 @@ module.exports = utils = { checkInventory: function(arg) { $.checkArgument( arg == null || - (Array.isArray(arg) && arg.length === 0) || - (Array.isArray(arg) && arg[0].type != null && arg[0].hash != 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' ); }, From 8911bfc2ec575ea1cdf5625da96e1eb51e194de7 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Wed, 29 Apr 2026 16:14:00 -0400 Subject: [PATCH 56/58] clean up should.be() --- packages/bitcore-p2p-cash/integration/bitcoind.js | 4 ++-- packages/bitcore-p2p-doge/integration/bitcoind.js | 4 ++-- packages/bitcore-p2p/integration/bitcoind.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-p2p-cash/integration/bitcoind.js b/packages/bitcore-p2p-cash/integration/bitcoind.js index ee2da8faab0..2229c62dd28 100644 --- a/packages/bitcore-p2p-cash/integration/bitcoind.js +++ b/packages/bitcore-p2p-cash/integration/bitcoind.js @@ -68,8 +68,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('connects', function(cb) { connect(function(peer) { peer.version.should.be.above(70000); - (typeof peer.subversion === 'string').should.be(true); - (typeof peer.bestHeight === 'number').should.be(true); + (typeof peer.subversion === 'string').should.equal(true); + (typeof peer.bestHeight === 'number').should.equal(true); cb(); }); }); diff --git a/packages/bitcore-p2p-doge/integration/bitcoind.js b/packages/bitcore-p2p-doge/integration/bitcoind.js index 11e4e668843..0fb62be1ad5 100644 --- a/packages/bitcore-p2p-doge/integration/bitcoind.js +++ b/packages/bitcore-p2p-doge/integration/bitcoind.js @@ -68,8 +68,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('connects', function(cb) { connect(function(peer) { peer.version.should.be.above(70000); - (typeof peer.subversion === 'string').should.be(true); - (typeof peer.bestHeight === 'number').should.be(true); + (typeof peer.subversion === 'string').should.equal(true); + (typeof peer.bestHeight === 'number').should.equal(true); cb(); }); }); diff --git a/packages/bitcore-p2p/integration/bitcoind.js b/packages/bitcore-p2p/integration/bitcoind.js index a29a3c59ccc..74113ca05ea 100644 --- a/packages/bitcore-p2p/integration/bitcoind.js +++ b/packages/bitcore-p2p/integration/bitcoind.js @@ -63,8 +63,8 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('connects', function(cb) { connect(function(peer) { peer.version.should.be.above(70000); - (typeof peer.subversion === 'string').should.be(true); - (typeof peer.bestHeight === 'number').should.be(true); + (typeof peer.subversion === 'string').should.equal(true); + (typeof peer.bestHeight === 'number').should.equal(true); cb(); }); }); From f91b403477767ff428de1b4fc2ae256df124727e Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Wed, 29 Apr 2026 16:20:42 -0400 Subject: [PATCH 57/58] fix typo, rm unused constants, and replace test data in doge integration test --- packages/bitcore-p2p-cash/integration/bitcoind.js | 4 ---- packages/bitcore-p2p-doge/integration/bitcoind.js | 14 +++++--------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/bitcore-p2p-cash/integration/bitcoind.js b/packages/bitcore-p2p-cash/integration/bitcoind.js index 2229c62dd28..0944dbca5e1 100644 --- a/packages/bitcore-p2p-cash/integration/bitcoind.js +++ b/packages/bitcore-p2p-cash/integration/bitcoind.js @@ -26,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() { diff --git a/packages/bitcore-p2p-doge/integration/bitcoind.js b/packages/bitcore-p2p-doge/integration/bitcoind.js index 0fb62be1ad5..a5f79140789 100644 --- a/packages/bitcore-p2p-doge/integration/bitcoind.js +++ b/packages/bitcore-p2p-doge/integration/bitcoind.js @@ -19,16 +19,12 @@ 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 @@ -86,7 +82,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('handles addr', function(cb) { connect(function(peer) { peer.once('addr', function(message) { - for (const address of message.addresshes) { + for (const address of message.addresses) { (address.time instanceof Date).should.equal(true); should.exist(address.ip); (address.services instanceof BN).should.equal(true); From 838e35d0375bc0fa1d8d7f41f81e267774072b7b Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Wed, 29 Apr 2026 16:31:08 -0400 Subject: [PATCH 58/58] fix failing bitcoind integration test --- packages/bitcore-p2p-cash/integration/bitcoind.js | 2 +- packages/bitcore-p2p-doge/integration/bitcoind.js | 2 +- packages/bitcore-p2p/integration/bitcoind.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/bitcore-p2p-cash/integration/bitcoind.js b/packages/bitcore-p2p-cash/integration/bitcoind.js index 0944dbca5e1..bf898fd0c0e 100644 --- a/packages/bitcore-p2p-cash/integration/bitcoind.js +++ b/packages/bitcore-p2p-cash/integration/bitcoind.js @@ -39,7 +39,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); diff --git a/packages/bitcore-p2p-doge/integration/bitcoind.js b/packages/bitcore-p2p-doge/integration/bitcoind.js index a5f79140789..5381fdffdbc 100644 --- a/packages/bitcore-p2p-doge/integration/bitcoind.js +++ b/packages/bitcore-p2p-doge/integration/bitcoind.js @@ -39,7 +39,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); diff --git a/packages/bitcore-p2p/integration/bitcoind.js b/packages/bitcore-p2p/integration/bitcoind.js index 74113ca05ea..ae5dce2c7f3 100644 --- a/packages/bitcore-p2p/integration/bitcoind.js +++ b/packages/bitcore-p2p/integration/bitcoind.js @@ -38,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);