aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2018-04-07 04:18:48 +0800
committerGitHub <noreply@github.com>2018-04-07 04:18:48 +0800
commit2511a9e634234135862259510a38b69308c2b81b (patch)
treeeda940e6d4349b556e40be25ff30dbae3cc4d7de
parent2b787f2833d4f4cfda74ca22d3d340f0f924c94e (diff)
parentf9a6feb26369048d63cc3794f4f94db4c89ed287 (diff)
downloadtangerine-wallet-browser-2511a9e634234135862259510a38b69308c2b81b.tar
tangerine-wallet-browser-2511a9e634234135862259510a38b69308c2b81b.tar.gz
tangerine-wallet-browser-2511a9e634234135862259510a38b69308c2b81b.tar.bz2
tangerine-wallet-browser-2511a9e634234135862259510a38b69308c2b81b.tar.lz
tangerine-wallet-browser-2511a9e634234135862259510a38b69308c2b81b.tar.xz
tangerine-wallet-browser-2511a9e634234135862259510a38b69308c2b81b.tar.zst
tangerine-wallet-browser-2511a9e634234135862259510a38b69308c2b81b.zip
Merge pull request #3922 from MetaMask/empty-vault-fix
Empty vault - attempt recovery
-rw-r--r--app/scripts/background.js34
1 files changed, 31 insertions, 3 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index ec586f642..5878cd2e8 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -78,6 +78,28 @@ async function loadStateFromPersistence () {
diskStore.getState() ||
migrator.generateInitialState(firstTimeState)
+ // check if somehow state is empty
+ // this should never happen but new error reporting suggests that it has
+ // for a small number of users
+ // https://github.com/metamask/metamask-extension/issues/3919
+ if (versionedData && !versionedData.data) {
+ // try to recover from diskStore incase only localStore is bad
+ const diskStoreState = diskStore.getState()
+ if (diskStoreState && diskStoreState.data) {
+ // we were able to recover (though it might be old)
+ versionedData = diskStoreState
+ const vaultStructure = getObjStructure(versionedData)
+ raven.captureMessage('MetaMask - Empty vault found - recovered from diskStore', {
+ // "extra" key is required by Sentry
+ extra: { vaultStructure },
+ })
+ } else {
+ // unable to recover, clear state
+ versionedData = migrator.generateInitialState(firstTimeState)
+ raven.captureMessage('MetaMask - Empty vault found - unable to recover')
+ }
+ }
+
// report migration errors to sentry
migrator.on('error', (err) => {
// get vault structure without secrets
@@ -140,9 +162,9 @@ function setupController (initState, initLangCode) {
asStream(controller.store),
debounce(1000),
storeTransform(versionifyData),
- storeTransform(syncDataWithExtension),
+ storeTransform(persistData),
(error) => {
- log.error('pump hit error', error)
+ log.error('MetaMask - Persistence pipeline failed', error)
}
)
@@ -151,7 +173,13 @@ function setupController (initState, initLangCode) {
return versionedData
}
- function syncDataWithExtension(state) {
+ function persistData(state) {
+ if (!state) {
+ throw new Error('MetaMask - updated state is missing', state)
+ }
+ if (!state.data) {
+ throw new Error('MetaMask - updated state does not have data', state)
+ }
if (localStore.isSupported) {
localStore.set(state)
.catch((err) => {