diff --git a/lib/cmds/blockchain/blockchain.js b/lib/cmds/blockchain/blockchain.js index fa8f88a9..bc693463 100644 --- a/lib/cmds/blockchain/blockchain.js +++ b/lib/cmds/blockchain/blockchain.js @@ -183,7 +183,7 @@ Blockchain.prototype.run = function() { console.log('Geth: ' + data); }); self.child.on('exit', (code) => { - let strCode = ''; + let strCode; if (code) { strCode = ' with error code ' + code; } else { diff --git a/lib/contracts/blockchain.js b/lib/contracts/blockchain.js index 0d61b20e..df4a247b 100644 --- a/lib/contracts/blockchain.js +++ b/lib/contracts/blockchain.js @@ -73,6 +73,20 @@ class Blockchain { if (!err) { self.isWeb3Ready = true; self.events.emit(WEB3_READY); + // if the ethereum node goes offline, we need a check to ensure + // the provider is also stopped + self.events.on('check:wentOffline:Ethereum', () => { + self.logger.trace('Ethereum went offline: stopping web3 provider...'); + self.provider.stop(); + + // once the node goes back online, we can restart the provider + self.events.once('check:backOnline:Ethereum', () => { + self.logger.trace('Ethereum back online: starting web3 provider...'); + self.provider.startWeb3Provider(() => { + self.logger.trace('web3 provider restarted after ethereum node came back online'); + }); + }); + }); return next(); } self.web3StartedInProcess = true; @@ -161,14 +175,6 @@ class Blockchain { if (err && err !== NO_NODE) { return cb(err); } - else if ((statusObj && statusObj.status === 'off') || err === NO_NODE){ - self.provider.stop(); - self.events.on('check:backOnline:Ethereum', () => { - self.provider.startWeb3Provider(() => { - self.logger.trace('web3 provider restarted after ethereum node came back online'); - }); - }); - } cb(statusObj); }); }, 5000, 'off'); diff --git a/lib/contracts/provider.js b/lib/contracts/provider.js index c4981a1b..d35b5c89 100644 --- a/lib/contracts/provider.js +++ b/lib/contracts/provider.js @@ -39,8 +39,12 @@ class Provider { // network connectivity error self.engine.on('error', (err) => { - // report connectivity errors - self.logger.error(err); + // report connectivity errors as trace due to polling + self.logger.trace('web3 provider error: ', err); + self.logger.trace('stopping web3 provider due to error'); + + // prevent continuous polling errors + self.engine.stop(); }); self.engine.start();