add interval in case deployment gets stuck

This commit is contained in:
Jonathan Rainville 2018-07-09 16:50:38 -04:00 committed by Iuri Matias
parent 838fa92775
commit 6593a92cc4
1 changed files with 46 additions and 4 deletions

View File

@ -241,13 +241,55 @@ class Blockchain {
}
deployContractFromObject(deployContractObject, params, cb) {
const self = this;
let hash;
let calledBacked = false;
function callback() {
if (calledBacked) {
return;
}
if (interval) {
clearInterval(interval);
}
calledBacked = true;
cb(...arguments);
}
// This interval is there to compensate for the event that sometimes doesn't get triggered when using WebSocket
// FIXME The issue somehow only happens when the blockchain node is started in the same terminal
const interval = setInterval(() => {
if (!hash) {
return; // Wait until we receive the hash
}
self.web3.eth.getTransactionReceipt(hash, (err, receipt) => {
if (!err && !receipt) {
return; // Transaction is not yet complete
}
callback(err, receipt);
});
}, 500);
deployContractObject.send({
from: params.from, gas: params.gas, gasPrice: params.gasPrice
}).on('receipt', function(receipt) {
if (receipt.contractAddress !== undefined) {
cb(null, receipt);
}, function (err, transactionHash) {
if (err) {
return callback(err);
}
}).on('error', cb);
hash = transactionHash;
})
.on('receipt', function (receipt) {
if (receipt.contractAddress !== undefined) {
callback(null, receipt);
}
})
.then(function (_contract) {
if (!hash) {
return; // Somehow we didn't get the receipt yet... Interval will catch it
}
self.web3.eth.getTransactionReceipt(hash, callback);
})
.catch(callback);
}
assertNodeConnection(noLogs, cb) {