aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2018-03-01 03:16:23 +0800
committerGitHub <noreply@github.com>2018-03-01 03:16:23 +0800
commit4b69531c3c57ad21d06742a4d1d90f696bebb4e7 (patch)
tree04e7c79de7db2b161c416ede7fc17291fde83e7e
parentb1faa1334499d244f2c0d08aa36962247a9c1e14 (diff)
parentc3bd27c9657d5e0236e2960dedd108ca5e2bb0ec (diff)
downloadtangerine-wallet-browser-4b69531c3c57ad21d06742a4d1d90f696bebb4e7.tar
tangerine-wallet-browser-4b69531c3c57ad21d06742a4d1d90f696bebb4e7.tar.gz
tangerine-wallet-browser-4b69531c3c57ad21d06742a4d1d90f696bebb4e7.tar.bz2
tangerine-wallet-browser-4b69531c3c57ad21d06742a4d1d90f696bebb4e7.tar.lz
tangerine-wallet-browser-4b69531c3c57ad21d06742a4d1d90f696bebb4e7.tar.xz
tangerine-wallet-browser-4b69531c3c57ad21d06742a4d1d90f696bebb4e7.tar.zst
tangerine-wallet-browser-4b69531c3c57ad21d06742a4d1d90f696bebb4e7.zip
Merge pull request #3353 from MetaMask/sentry-fail-tx-1
Sentry - improve ethjs-rpc error formating for failed txs
-rw-r--r--app/scripts/background.js10
-rw-r--r--app/scripts/lib/reportFailedTxToSentry.js38
-rw-r--r--app/scripts/lib/setupRaven.js (renamed from app/scripts/setupRaven.js)2
-rw-r--r--app/scripts/popup.js2
4 files changed, 44 insertions, 8 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 476d073d1..4487ff318 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -13,9 +13,11 @@ const PortStream = require('./lib/port-stream.js')
const NotificationManager = require('./lib/notification-manager.js')
const MetamaskController = require('./metamask-controller')
const firstTimeState = require('./first-time-state')
-const setupRaven = require('./setupRaven')
+const setupRaven = require('./lib/setupRaven')
+const reportFailedTxToSentry = require('./lib/reportFailedTxToSentry')
const setupMetamaskMeshMetrics = require('./lib/setupMetamaskMeshMetrics')
+
const STORAGE_KEY = 'metamask-config'
const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG'
@@ -86,11 +88,7 @@ function setupController (initState) {
controller.txController.on(`tx:status-update`, (txId, status) => {
if (status !== 'failed') return
const txMeta = controller.txController.txStateManager.getTx(txId)
- const errorMessage = `Transaction Failed: ${txMeta.err.message}`
- raven.captureMessage(errorMessage, {
- // "extra" key is required by Sentry
- extra: txMeta,
- })
+ reportFailedTxToSentry({ raven, txMeta })
})
// setup state persistence
diff --git a/app/scripts/lib/reportFailedTxToSentry.js b/app/scripts/lib/reportFailedTxToSentry.js
new file mode 100644
index 000000000..ee73f6845
--- /dev/null
+++ b/app/scripts/lib/reportFailedTxToSentry.js
@@ -0,0 +1,38 @@
+const ethJsRpcSlug = 'Error: [ethjs-rpc] rpc error with payload '
+const errorLabelPrefix = 'Error: '
+
+module.exports = reportFailedTxToSentry
+
+//
+// utility for formatting failed transaction messages
+// for sending to sentry
+//
+
+function reportFailedTxToSentry({ raven, txMeta }) {
+ const errorMessage = extractErrorMessage(txMeta.err.message)
+ raven.captureMessage(errorMessage, {
+ // "extra" key is required by Sentry
+ extra: txMeta,
+ })
+}
+
+//
+// ethjs-rpc provides overly verbose error messages
+// if we detect this type of message, we extract the important part
+// Below is an example input and output
+//
+// Error: [ethjs-rpc] rpc error with payload {"id":3947817945380,"jsonrpc":"2.0","params":["0xf8eb8208708477359400830398539406012c8cf97bead5deae237070f9587f8e7a266d80b8843d7d3f5a0000000000000000000000000000000000000000000000000000000000081d1a000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000003f48025a04c32a9b630e0d9e7ff361562d850c86b7a884908135956a7e4a336fa0300d19ca06830776423f25218e8d19b267161db526e66895567147015b1f3fc47aef9a3c7"],"method":"eth_sendRawTransaction"} Error: replacement transaction underpriced
+//
+// Transaction Failed: replacement transaction underpriced
+//
+
+function extractErrorMessage(errorMessage) {
+ const isEthjsRpcError = errorMessage.includes(ethJsRpcSlug)
+ if (isEthjsRpcError) {
+ const payloadAndError = errorMessage.slice(ethJsRpcSlug.length)
+ const originalError = payloadAndError.slice(payloadAndError.indexOf(errorLabelPrefix) + errorLabelPrefix.length)
+ return `Transaction Failed: ${originalError}`
+ } else {
+ return `Transaction Failed: ${errorMessage}`
+ }
+}
diff --git a/app/scripts/setupRaven.js b/app/scripts/lib/setupRaven.js
index 7beffeff9..42e48cb90 100644
--- a/app/scripts/setupRaven.js
+++ b/app/scripts/lib/setupRaven.js
@@ -1,4 +1,4 @@
-const Raven = require('./vendor/raven.min.js')
+const Raven = require('../vendor/raven.min.js')
const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG'
const PROD = 'https://3567c198f8a8412082d32655da2961d0@sentry.io/273505'
const DEV = 'https://f59f3dd640d2429d9d0e2445a87ea8e1@sentry.io/273496'
diff --git a/app/scripts/popup.js b/app/scripts/popup.js
index 53ab00e00..11d50ee87 100644
--- a/app/scripts/popup.js
+++ b/app/scripts/popup.js
@@ -8,7 +8,7 @@ const extension = require('extensionizer')
const ExtensionPlatform = require('./platforms/extension')
const NotificationManager = require('./lib/notification-manager')
const notificationManager = new NotificationManager()
-const setupRaven = require('./setupRaven')
+const setupRaven = require('./lib/setupRaven')
// create platform global
global.platform = new ExtensionPlatform()