aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Finlay <dan@danfinlay.com>2016-11-18 06:05:12 +0800
committerDan Finlay <dan@danfinlay.com>2016-11-18 06:05:12 +0800
commit8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed (patch)
tree975275cc991cdc4f2a0b8decd2db4f429e2f9096
parentb0ccde66f62ae69c5818ddd43e22fb517f8f13e2 (diff)
downloadtangerine-wallet-browser-8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed.tar
tangerine-wallet-browser-8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed.tar.gz
tangerine-wallet-browser-8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed.tar.bz2
tangerine-wallet-browser-8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed.tar.lz
tangerine-wallet-browser-8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed.tar.xz
tangerine-wallet-browser-8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed.tar.zst
tangerine-wallet-browser-8eb91e89bf62fd835d5e59bd01ac54e0df7c22ed.zip
Increment tx ids to avoid collisions
Fixes #791 It was possible for two requests to have the same ID, causing a crash and loss of StreamProvider connection. This new id generation strategy creates a random ID, and increments it for each request. In case the id generator is included from two different processes, I'm initializing the counter at a random number, and rolling it over a large number when it gets too big.
-rw-r--r--CHANGELOG.md2
-rw-r--r--app/scripts/lib/idStore.js2
-rw-r--r--app/scripts/lib/inpage-provider.js11
-rw-r--r--app/scripts/lib/random-id.js9
4 files changed, 13 insertions, 11 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5d75538f5..177545214 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Current Master
+- Fix bug that would cause MetaMask to occasionally lose its StreamProvider connection and drop requests.
+
## 2.13.8 2016-11-16
- Show a warning when a transaction fails during simulation.
diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js
index 65b8c7029..ccd5efe69 100644
--- a/app/scripts/lib/idStore.js
+++ b/app/scripts/lib/idStore.js
@@ -7,7 +7,7 @@ const EthQuery = require('eth-query')
const KeyStore = require('eth-lightwallet').keystore
const clone = require('clone')
const extend = require('xtend')
-const createId = require('web3-provider-engine/util/random-id')
+const createId = require('./random-id')
const ethBinToOps = require('eth-bin-to-ops')
const autoFaucet = require('./auto-faucet')
const messageManager = require('./message-manager')
diff --git a/app/scripts/lib/inpage-provider.js b/app/scripts/lib/inpage-provider.js
index 052a8f5fe..f1ba2e0ed 100644
--- a/app/scripts/lib/inpage-provider.js
+++ b/app/scripts/lib/inpage-provider.js
@@ -2,6 +2,7 @@ const Streams = require('mississippi')
const StreamProvider = require('web3-stream-provider')
const ObjectMultiplex = require('./obj-multiplex')
const RemoteStore = require('./remote-store.js').RemoteStore
+const createRandomId = require('./random-id')
module.exports = MetamaskInpageProvider
@@ -119,16 +120,6 @@ function remoteStoreWithLocalStorageCache (storageKey) {
return store
}
-function createRandomId(){
- const extraDigits = 3
- // 13 time digits
- const datePart = new Date().getTime() * Math.pow(10, extraDigits)
- // 3 random digits
- const extraPart = Math.floor(Math.random() * Math.pow(10, extraDigits))
- // 16 digits
- return datePart + extraPart
-}
-
function eachJsonMessage(payload, transformFn){
if (Array.isArray(payload)) {
return payload.map(transformFn)
diff --git a/app/scripts/lib/random-id.js b/app/scripts/lib/random-id.js
new file mode 100644
index 000000000..3c5ae5600
--- /dev/null
+++ b/app/scripts/lib/random-id.js
@@ -0,0 +1,9 @@
+const MAX = 1000000000
+
+let idCounter = Math.round( Math.random() * MAX )
+function createRandomId() {
+ idCounter = idCounter % MAX
+ return idCounter++
+}
+
+module.exports = createRandomId