From ba43098215d118ebe278ca2b5980d01aa0a716b1 Mon Sep 17 00:00:00 2001 From: Fabian Vogelsteller Date: Mon, 6 Mar 2017 18:40:20 +0100 Subject: [PATCH] added better error reporting for missing receipts --- packages/web3-core-method/src/index.js | 13 +++++-------- packages/web3-utils/src/index.js | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/web3-core-method/src/index.js b/packages/web3-core-method/src/index.js index bb348d3..b9a6357 100644 --- a/packages/web3-core-method/src/index.js +++ b/packages/web3-core-method/src/index.js @@ -169,7 +169,7 @@ Method.prototype._confirmTransaction = function (defer, result, payload, extraFo payload.params[0].data && payload.params[0].from && !payload.params[0].to, - receiptError = new Error('Failed to check for transaction receipt.'); + receiptError = 'Failed to check for transaction receipt:'; // fire "receipt" and confirmation events and resolve after @@ -178,10 +178,10 @@ Method.prototype._confirmTransaction = function (defer, result, payload, extraFo method.eth.getTransactionReceipt(result) // catch error from requesting receipt - .catch(function () { + .catch(function (err) { sub.unsubscribe(); promiseResolved = true; - utils._fireError(receiptError, defer.eventEmitter, defer.reject); + utils._fireError({message: receiptError, data: err}, defer.eventEmitter, defer.reject); }) // if CONFIRMATION listener exists check for confirmations, by setting canUnsubscribe = false .then(function(receipt) { @@ -254,7 +254,7 @@ Method.prototype._confirmTransaction = function (defer, result, payload, extraFo return receipt; }) - // CHECK for normal tx check for receipt only + // CHECK for normal tx check for receipt only .then(function(receipt) { if (!isContractDeployment && !promiseResolved) { @@ -294,7 +294,7 @@ Method.prototype._confirmTransaction = function (defer, result, payload, extraFo } else { sub.unsubscribe(); promiseResolved = true; - utils._fireError(receiptError, defer.eventEmitter, defer.reject); + utils._fireError({message: receiptError, data: err}, defer.eventEmitter, defer.reject); } }); }; @@ -343,10 +343,7 @@ Method.prototype.buildCall = function() { defer.eventEmitter.emit('transactionHash', result); - method._confirmTransaction(defer, result, payload, extraFromatters); - - } }); diff --git a/packages/web3-utils/src/index.js b/packages/web3-utils/src/index.js index 6be75f3..58df37b 100644 --- a/packages/web3-utils/src/index.js +++ b/packages/web3-utils/src/index.js @@ -34,13 +34,27 @@ var keccak256 = require("js-sha3").keccak_256; // jshint ignore:line * Fires an error in an event emitter and callback and returns the eventemitter * * @method _fireError - * @param {Object} error + * @param {Object} error a string, a error, or an object with {message, data} * @param {Object} emitter * @param {Function} reject * @param {Function} callback * @return {Object} the emitter */ var _fireError = function (error, emitter, reject, callback) { + /*jshint maxcomplexity: 10 */ + + // add data if given + if(_.isObject(error) && !(error instanceof Error) && error.data) { + if(_.isObject(error.data) || _.isArray(error.data)) { + error.data = JSON.stringify(error.data, null, 2); + } + + error = error.message +"\n"+ error.data; + } + + if(_.isString(error)) { + error = new Error(error); + } if (_.isFunction(callback)) { callback(error);