Add stack traces both in errors and as a way to track txMetas

feature/default_network_editable
frankiebee 7 years ago
parent 9b24ab0e70
commit ab01358a48
  1. 2
      CHANGELOG.md
  2. 30
      app/scripts/controllers/transactions.js
  3. 8
      app/scripts/lib/util.js
  4. 1
      package.json

@ -2,6 +2,8 @@
## Current Master
- Include stack traces in txMeta's to better understand the life cycle of transactions
## 3.9.1 2017-7-19
- No longer automatically request 1 ropsten ether for the first account in a new vault.

@ -1,10 +1,12 @@
const EventEmitter = require('events')
const async = require('async')
const extend = require('xtend')
const clone = require('deep-clone')
const ObservableStore = require('obs-store')
const ethUtil = require('ethereumjs-util')
const pify = require('pify')
const TxProviderUtil = require('../lib/tx-utils')
const getStack = require('../lib/util').getStack
const createId = require('../lib/random-id')
const NonceTracker = require('../lib/nonce-tracker')
@ -117,9 +119,14 @@ module.exports = class TransactionController extends EventEmitter {
//
updateTx (txMeta) {
const txMetaForHistory = clone(txMeta)
txMetaForHistory.stack = getStack()
var txId = txMeta.id
var txList = this.getFullTxList()
var index = txList.findIndex(txData => txData.id === txId)
if (!txMeta.history) txMeta.history = []
txMeta.history.push(txMetaForHistory)
txList[index] = txMeta
this._saveTxList(txList)
this.emit('update')
@ -134,7 +141,7 @@ module.exports = class TransactionController extends EventEmitter {
}
addUnapprovedTransaction (txParams, done) {
let txMeta
let txMeta = {}
async.waterfall([
// validate
(cb) => this.txProviderUtils.validateTxParams(txParams, cb),
@ -146,6 +153,7 @@ module.exports = class TransactionController extends EventEmitter {
status: 'unapproved',
metamaskNetworkId: this.getNetwork(),
txParams: txParams,
history: [],
}
cb()
},
@ -165,6 +173,7 @@ module.exports = class TransactionController extends EventEmitter {
txParams.value = txParams.value || '0x0'
if (!txParams.gasPrice) {
this.query.gasPrice((err, gasPrice) => {
if (err) return cb(err)
// set gasPrice
txParams.gasPrice = gasPrice
@ -201,6 +210,7 @@ module.exports = class TransactionController extends EventEmitter {
nonceLock.releaseLock()
} catch (err) {
this.setTxStatusFailed(txId, {
stack: err.stack || err.message,
errCode: err.errCode || err,
message: err.message || 'Transaction failed during approval',
})
@ -364,11 +374,11 @@ module.exports = class TransactionController extends EventEmitter {
var txId = txMeta.id
if (!txHash) {
const errReason = {
return this.setTxStatusFailed(txId, {
stack: 'checkForTxInBlock: custom tx-controller error message Line# 368',
errCode: 'No hash was provided',
message: 'We had an error while submitting this transaction, please try again.',
}
return this.setTxStatusFailed(txId, errReason)
})
}
block.transactions.forEach((tx) => {
@ -452,6 +462,7 @@ module.exports = class TransactionController extends EventEmitter {
if (isKnownTx) return
// encountered real error - transition to error state
this.setTxStatusFailed(txMeta.id, {
stack: err.stack || err.message,
errCode: err.errCode || err,
message: err.message,
})
@ -466,7 +477,10 @@ module.exports = class TransactionController extends EventEmitter {
// if the value of the transaction is greater then the balance, fail.
if (!this.txProviderUtils.sufficientBalance(txMeta.txParams, balance)) {
const message = 'Insufficient balance.'
this.setTxStatusFailed(txMeta.id, { message })
this.setTxStatusFailed(txMeta.id, {
stack: '_resubnitTx: custom tx-controller error line# 472',
message,
})
cb()
return log.error(message)
}
@ -501,11 +515,11 @@ module.exports = class TransactionController extends EventEmitter {
// extra check in case there was an uncaught error during the
// signature and submission process
if (!txHash) {
const errReason = {
this.setTxStatusFailed(txId, {
stack: '_checkPendingTxs: custom tx-controller error message Line# 510',
errCode: 'No hash was provided',
message: 'We had an error while submitting this transaction, please try again.',
}
this.setTxStatusFailed(txId, errReason)
})
return
}
// get latest transaction status

@ -0,0 +1,8 @@
module.exports = {
getStack,
}
function getStack () {
const stack = new Error('Stack trace generator - not an error').stack
return stack
}

@ -57,6 +57,7 @@
"clone": "^1.0.2",
"copy-to-clipboard": "^2.0.0",
"debounce": "^1.0.0",
"deep-clone": "^3.0.2",
"deep-extend": "^0.4.1",
"detect-node": "^2.0.3",
"disc": "^1.3.2",

Loading…
Cancel
Save