From aec1ebbdd3ef69e8c0e6f01ecfe542b40ca8d2fc Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 22 Jun 2016 16:45:24 -0700 Subject: [PATCH] fix notfound bug. ensure fast properties for network object. --- lib/bcoin/network.js | 36 ++++++++++++++++++++++++++--------- lib/bcoin/peer.js | 10 ++++++---- lib/bcoin/pool.js | 4 ++-- lib/bcoin/protocol/network.js | 30 +++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 15 deletions(-) diff --git a/lib/bcoin/network.js b/lib/bcoin/network.js index c276236d..2bfabdf1 100644 --- a/lib/bcoin/network.js +++ b/lib/bcoin/network.js @@ -24,8 +24,6 @@ var PolicyEstimator = require('./fees'); */ function Network(options) { - var i, keys, key, value; - if (!(this instanceof Network)) return new Network(options); @@ -37,13 +35,33 @@ function Network(options) { if (Network[options.type]) return Network[options.type]; - keys = Object.keys(options); - - for (i = 0; i < keys.length; i++) { - key = keys[i]; - value = options[key]; - this[key] = value; - } + this.type = options.type; + this.height = options.height; + this.seeds = options.seeds; + this.magic = options.magic; + this.port = options.port; + this.alertKey = options.alertKey; + this.checkpoints = options.checkpoints; + this.halvingInterval = options.halvingInterval; + this.genesis = options.genesis; + this.genesisBlock = options.genesisBlock; + this.pow = options.pow; + this.block = options.block; + this.witness = options.witness; + this.segwitHeight = options.segwitHeight; + this.ruleChangeActivationThreshold = options.ruleChangeActivationThreshold; + this.minerConfirmationWindow = options.minerConfirmationWindow; + this.deployments = options.deployments; + this.prefixes = options.prefixes; + this.address = options.address; + this.requireStandard = options.requireStandard; + this.rpcPort = options.rpcPort; + this.minRelay = options.minRelay; + this.feeRate = options.feeRate; + this.minRate = options.minRate; + this.maxRate = options.maxRate; + this.selfConnect = options.selfConnect; + this.requestMempool = options.requestMempool; this.fees = new PolicyEstimator(constants.tx.MIN_RELAY, this); diff --git a/lib/bcoin/peer.js b/lib/bcoin/peer.js index 31b90ab7..eb55fa5c 100644 --- a/lib/bcoin/peer.js +++ b/lib/bcoin/peer.js @@ -282,8 +282,10 @@ Peer.prototype._onConnect = function _onConnect() { self.sync(); // Ask for the mempool if we're synced. - if (self.loader && self.pool.synced) - self.sendMempool(); + if (self.network.requestMempool) { + if (self.loader && self.pool.synced) + self.sendMempool(); + } bcoin.debug('Received verack (%s).', self.hostname); @@ -1227,7 +1229,7 @@ Peer.prototype._handleGetBlocks = function _handleGetBlocks(payload) { Peer.prototype._handleVersion = function _handleVersion(version) { var self = this; - if (this.network.type !== 'regtest') { + if (!this.network.selfConnect) { if (version.nonce.cmp(this.pool.localNonce) === 0) { this._error('We connected to ourself. Oops.'); this.setMisbehavior(100); @@ -1419,7 +1421,7 @@ Peer.prototype._handleGetData = function _handleGetData(items) { return next(err); if (!entry) { - notfound.push({ type: constants.inv.TX, hash: hash }); + notfound.push(new InvItem(constants.inv.TX, hash)); return next(); } diff --git a/lib/bcoin/pool.js b/lib/bcoin/pool.js index 7cf25027..6d5c2d13 100644 --- a/lib/bcoin/pool.js +++ b/lib/bcoin/pool.js @@ -1002,10 +1002,10 @@ Pool.prototype._createPeer = function _createPeer(options) { : null; bcoin.debug( - 'Received reject (%s): msg=%s ccode=%s reason=%s data=%s.', + 'Received reject (%s): msg=%s code=%s reason=%s data=%s.', peer.hostname, payload.message, - payload.ccode, + constants.rejectByVal[payload.code] || payload.code, payload.reason, data); diff --git a/lib/bcoin/protocol/network.js b/lib/bcoin/protocol/network.js index dbf16556..e1cfdf0e 100644 --- a/lib/bcoin/protocol/network.js +++ b/lib/bcoin/protocol/network.js @@ -455,6 +455,20 @@ main.minRate = 10000; main.maxRate = 50000; +/** + * Whether to allow self-connection. + * @const {Boolean} + */ + +main.selfConnect = false; + +/** + * Whether to request mempool on sync. + * @const {Boolean} + */ + +main.requestMempool = false; + /* * Testnet (v3) * https://en.bitcoin.it/wiki/Testnet @@ -605,6 +619,10 @@ testnet.minRate = 10000; testnet.maxRate = 40000; +testnet.selfConnect = false; + +testnet.requestMempool = true; + /* * Regtest */ @@ -748,6 +766,10 @@ regtest.minRate = 10000; regtest.maxRate = 40000; +regtest.selfConnect = false; + +regtest.requestMempool = true; + /* * segnet3 */ @@ -875,6 +897,10 @@ segnet3.minRate = 10000; segnet3.maxRate = 40000; +segnet3.selfConnect = false; + +segnet3.requestMempool = true; + /* * segnet4 */ @@ -1016,3 +1042,7 @@ segnet4.feeRate = 20000; segnet4.minRate = 10000; segnet4.maxRate = 40000; + +segnet4.selfConnect = false; + +segnet4.requestMempool = true;