From 96419f6856204e6b7a313ee2feedd4598703f84f Mon Sep 17 00:00:00 2001 From: Jonathan Rainville Date: Thu, 28 Jun 2018 09:17:19 -0400 Subject: [PATCH] fix miner --- lib/cmds/blockchain/miner.js | 66 +++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/lib/cmds/blockchain/miner.js b/lib/cmds/blockchain/miner.js index 2dedf4e3..16590a10 100644 --- a/lib/cmds/blockchain/miner.js +++ b/lib/cmds/blockchain/miner.js @@ -20,6 +20,7 @@ class GethMiner { this.config = {}; self.interval = null; self.callback = null; + self.started = null; self.commandQueue = async.queue((task, callback) => { self.callback = callback; @@ -67,10 +68,11 @@ class GethMiner { }); if (this.config.mine_normally) { - return this.sendCommand(minerStart); + this.startMiner(); + return; } - self.sendCommand(minerStop, () => { + self.stopMiner(() => { self.fundAccount(function (err) { if (err) { console.error(err); @@ -89,11 +91,34 @@ class GethMiner { params = []; } if (!callback) { - callback = function() {}; + callback = function () { + }; } this.commandQueue.push({method, params: params || []}, callback); } + startMiner(callback) { + if (this.started) { + if (callback) { + callback(); + } + return; + } + this.started = true; + this.sendCommand(minerStart, callback); + } + + stopMiner(callback) { + if (!this.started) { + if (callback) { + callback(); + } + return; + } + this.started = false; + this.sendCommand(minerStop, callback); + } + getCoinbase(callback) { if (this.coinbase) { return callback(null, this.coinbase); @@ -120,17 +145,16 @@ class GethMiner { if (err) { return callback(err); } - callback(null, result >= self.config.initial_ether); + callback(null, parseInt(result, 16) >= self.config.initial_ether); }); }); } - watchBlocks(filterCommand, callback) { + watchBlocks(filterCommand, callback, delay) { const self = this; self.sendCommand(filterCommand, (err, filterId) => { if (err) { - callback(err); - return; + return callback(err); } self.interval = setInterval(() => { self.sendCommand(getChanges, [filterId], (err, changes) => { @@ -143,13 +167,13 @@ class GethMiner { } callback(null, changes); }); - }, 1000); + }, delay || 1000); }); } mineUntilFunded(callback) { const self = this; - this.sendCommand(minerStart); + this.startMiner(); self.watchBlocks(newBlockFilter, (err) => { if (err) { console.error(err); @@ -158,7 +182,7 @@ class GethMiner { self.accountFunded((err, funded) => { if (funded) { clearTimeout(self.interval); - self.sendCommand(minerStop); + self.stopMiner(); callback(); } }); @@ -198,7 +222,7 @@ class GethMiner { let timeout_set = false; let next_block_in_ms; - self.sendCommand(minerStart); + self.startMiner(); self.watchBlocks(newBlockFilter, (err) => { if (err) { console.error(err); @@ -234,7 +258,7 @@ class GethMiner { } else { next_block_in_ms = (self.config.interval_ms - ms_since_block); } - self.sendCommand(minerStop); + self.stopMiner(); console.log("== Looking for next block in " + next_block_in_ms + "ms"); next(); }, @@ -242,8 +266,7 @@ class GethMiner { setTimeout(function () { console.log("== Looking for next block"); timeout_set = false; - //miner_obj.start(config.threads); - self.sendCommand(minerStart); + self.startMiner(); next(); }, next_block_in_ms); } @@ -260,6 +283,7 @@ class GethMiner { start_transaction_mining() { const self = this; + const pendingTrasactionsMessage = "== Pending transactions! Looking for next block..."; self.watchBlocks(pendingBlockFilter, (err) => { if (err) { console.error(err); @@ -268,11 +292,10 @@ class GethMiner { self.sendCommand(getHashRate, (err, result) => { if (result > 0) return; - console.log("== Pending transactions! Looking for next block..."); - self.sendCommand(minerStart); + console.log(pendingTrasactionsMessage); + self.startMiner(); }); - }); - + }, 2000); if (self.config.mine_periodically) return; @@ -288,10 +311,13 @@ class GethMiner { } if (!count) { console.log("== No transactions left. Stopping miner..."); - self.sendCommand(minerStop); + self.stopMiner(); + } else { + console.log(pendingTrasactionsMessage); + self.startMiner(); } }); - }); + }, 2000); } }