From fd6b315756a0566a1aea8bb843110e030881822e Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 3 Apr 2016 04:20:18 -0700 Subject: [PATCH] refactor. miner fixes. --- bin/node | 6 +++++- lib/bcoin/fullnode.js | 4 ++++ lib/bcoin/miner.js | 22 +++++----------------- lib/bcoin/utils.js | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/bin/node b/bin/node index 1a99781d..f19ea3d2 100755 --- a/bin/node +++ b/bin/node @@ -8,7 +8,8 @@ var node = bcoin.fullnode({ debug: true, passphrase: 'node', prune: process.argv.indexOf('--prune') !== -1, - useCheckpoints: process.argv.indexOf('--checkpoints') !== -1 + useCheckpoints: process.argv.indexOf('--checkpoints') !== -1, + mine: process.argv.indexOf('--mine') !== -1 }); node.on('error', function(err) { @@ -20,4 +21,7 @@ node.open(function(err) { throw err; node.startSync(); + + if (node.options.mine) + node.miner.start(); }); diff --git a/lib/bcoin/fullnode.js b/lib/bcoin/fullnode.js index cc0df80b..8671ad1e 100644 --- a/lib/bcoin/fullnode.js +++ b/lib/bcoin/fullnode.js @@ -81,6 +81,10 @@ Fullnode.prototype._init = function _init() { self.emit('error', err); }); + this.miner.on('error', function(err) { + self.emit('error', err); + }); + this.pool.on('error', function(err) { self.emit('error', err); }); diff --git a/lib/bcoin/miner.js b/lib/bcoin/miner.js index 9603c82a..e813e220 100644 --- a/lib/bcoin/miner.js +++ b/lib/bcoin/miner.js @@ -361,7 +361,8 @@ Miner.prototype.iterate = function iterate() { if (err) { if (err.type === 'VerifyError') utils.debug('Miner: %s could not be added to chain.', self.block.rhash); - return self.emit('error', err); + self.emit('error', err); + return self.iterate(); } // Emit our newly found block @@ -403,10 +404,12 @@ Miner.prototype.findNonce = function findNonce() { // Track how long we've been at it. this._begin = utils.now(); + // assert(this.block.ts > this.last.ts); + // The heart and soul of the miner: match the target. while (this.block.nonce <= 0xffffffff) { // Hash and test against the next target - if (rcmp(this.dsha256(data), target) < 0) + if (utils.rcmp(this.dsha256(data), target) < 0) return true; // Increment the nonce to get a different hash @@ -453,21 +456,6 @@ Miner.prototype.findNonce = function findNonce() { return false; }; -function rcmp(a, b) { - var i; - - assert(a.length === b.length); - - for (i = a.length - 1; i >= 0; i--) { - if (a[i] < b[i]) - return -1; - if (a[i] > b[i]) - return 1; - } - - return 0; -} - /** * Expose */ diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 526362ee..223cabc3 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -1444,6 +1444,21 @@ utils.cmp = function cmp(a, b) { return 0; }; +utils.rcmp = function rcmp(a, b) { + var i; + + assert(a.length === b.length); + + for (i = a.length - 1; i >= 0; i--) { + if (a[i] < b[i]) + return -1; + if (a[i] > b[i]) + return 1; + } + + return 0; +}; + // memcmp in constant time (can only return true or false) // https://cryptocoding.net/index.php/Coding_rules // $ man 3 memcmp (see NetBSD's consttime_memequal)