mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-22 17:33:23 +01:00
Fixed bugs related to clearing caches when restoring to a new vault
This commit is contained in:
parent
72729060dc
commit
b5f6ef8c01
@ -9,6 +9,7 @@ const BN = ethUtil.BN
|
|||||||
const Transaction = require('ethereumjs-tx')
|
const Transaction = require('ethereumjs-tx')
|
||||||
const createId = require('web3-provider-engine/util/random-id')
|
const createId = require('web3-provider-engine/util/random-id')
|
||||||
const autoFaucet = require('./lib/auto-faucet')
|
const autoFaucet = require('./lib/auto-faucet')
|
||||||
|
const bip39 = require('bip39')
|
||||||
|
|
||||||
// TEMPORARY UNTIL FULL DEPRECATION:
|
// TEMPORARY UNTIL FULL DEPRECATION:
|
||||||
const IdStoreMigrator = require('./lib/idStore-migrator')
|
const IdStoreMigrator = require('./lib/idStore-migrator')
|
||||||
@ -46,6 +47,8 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getState() {
|
getState() {
|
||||||
|
let address = this.configManager.getSelectedAccount()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
seedWords: this.configManager.getSeedWords(),
|
seedWords: this.configManager.getSeedWords(),
|
||||||
isInitialized: !!this.configManager.getVault(),
|
isInitialized: !!this.configManager.getVault(),
|
||||||
@ -55,7 +58,8 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
transactions: this.configManager.getTxList(),
|
transactions: this.configManager.getTxList(),
|
||||||
unconfMsgs: messageManager.unconfirmedMsgs(),
|
unconfMsgs: messageManager.unconfirmedMsgs(),
|
||||||
messages: messageManager.getMsgList(),
|
messages: messageManager.getMsgList(),
|
||||||
selectedAddress: this.configManager.getSelectedAccount(),
|
selectedAddress: address,
|
||||||
|
selectedAccount: address,
|
||||||
shapeShiftTxList: this.configManager.getShapeShiftTxList(),
|
shapeShiftTxList: this.configManager.getShapeShiftTxList(),
|
||||||
currentFiat: this.configManager.getCurrentFiat(),
|
currentFiat: this.configManager.getCurrentFiat(),
|
||||||
conversionRate: this.configManager.getConversionRate(),
|
conversionRate: this.configManager.getConversionRate(),
|
||||||
@ -78,12 +82,33 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createNewVaultAndRestore(password, seed, cb) {
|
createNewVaultAndRestore(password, seed, cb) {
|
||||||
|
if (typeof password !== 'string') {
|
||||||
|
return cb('Password must be text.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bip39.validateMnemonic(seed)) {
|
||||||
|
return cb('Seed phrase is invalid.')
|
||||||
|
}
|
||||||
|
|
||||||
|
this.clearKeyrings()
|
||||||
|
|
||||||
this.createNewVault(password, '', (err) => {
|
this.createNewVault(password, '', (err) => {
|
||||||
if (err) return cb(err)
|
if (err) return cb(err)
|
||||||
this.addNewKeyring('HD Key Tree', {
|
this.addNewKeyring('HD Key Tree', {
|
||||||
mnemonic: seed,
|
mnemonic: seed,
|
||||||
n: 1,
|
n: 1,
|
||||||
}, cb)
|
}, (err) => {
|
||||||
|
if (err) return cb(err)
|
||||||
|
const firstKeyring = this.keyrings[0]
|
||||||
|
const accounts = firstKeyring.getAccounts()
|
||||||
|
const firstAccount = accounts[0]
|
||||||
|
const hexAccount = ethUtil.addHexPrefix(firstAccount)
|
||||||
|
this.configManager.setSelectedAccount(hexAccount)
|
||||||
|
|
||||||
|
this.setupAccounts(accounts)
|
||||||
|
this.emit('update')
|
||||||
|
cb(null, this.getState())
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,6 +163,7 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
return this.unlockKeyrings(key)
|
return this.unlockKeyrings(key)
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
this.emit('update')
|
||||||
cb(null, this.getState())
|
cb(null, this.getState())
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
@ -175,6 +201,7 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
const ring = this.keyrings[keyRingNum]
|
const ring = this.keyrings[keyRingNum]
|
||||||
const accounts = ring.addAccounts(1)
|
const accounts = ring.addAccounts(1)
|
||||||
this.setupAccounts(accounts)
|
this.setupAccounts(accounts)
|
||||||
|
this.persistAllKeyrings()
|
||||||
cb(null, this.getState())
|
cb(null, this.getState())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -468,10 +495,6 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
cb(null, '0xPrivateKey')
|
cb(null, '0xPrivateKey')
|
||||||
}
|
}
|
||||||
|
|
||||||
tryPassword(password, cb) {
|
|
||||||
cb()
|
|
||||||
}
|
|
||||||
|
|
||||||
getNetwork(err) {
|
getNetwork(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
this.network = 'loading'
|
this.network = 'loading'
|
||||||
@ -503,6 +526,22 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
cb(null, this.configManager.getSelectedAccount())
|
cb(null, this.configManager.getSelectedAccount())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearKeyrings() {
|
||||||
|
let accounts
|
||||||
|
try {
|
||||||
|
accounts = Object.keys(this.ethStore._currentState.accounts)
|
||||||
|
} catch (e) {
|
||||||
|
accounts = []
|
||||||
|
}
|
||||||
|
accounts.forEach((address) => {
|
||||||
|
this.ethStore.removeAccount(address)
|
||||||
|
})
|
||||||
|
|
||||||
|
this.keyrings = []
|
||||||
|
this.identities = {}
|
||||||
|
this.configManager.setSelectedAccount()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function noop () {}
|
function noop () {}
|
||||||
|
@ -13,7 +13,7 @@ module.exports = class HdKeyring extends EventEmitter {
|
|||||||
return type
|
return type
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(opts) {
|
constructor(opts = {}) {
|
||||||
super()
|
super()
|
||||||
this.type = type
|
this.type = type
|
||||||
this.opts = opts || {}
|
this.opts = opts || {}
|
||||||
|
@ -38,8 +38,8 @@ module.exports = class MetamaskController {
|
|||||||
return extend(
|
return extend(
|
||||||
this.state,
|
this.state,
|
||||||
this.ethStore.getState(),
|
this.ethStore.getState(),
|
||||||
this.keyringController.getState(),
|
this.configManager.getConfig(),
|
||||||
this.configManager.getConfig()
|
this.keyringController.getState()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,7 +73,6 @@ module.exports = class MetamaskController {
|
|||||||
setLocked: keyringController.setLocked.bind(keyringController),
|
setLocked: keyringController.setLocked.bind(keyringController),
|
||||||
exportAccount: keyringController.exportAccount.bind(keyringController),
|
exportAccount: keyringController.exportAccount.bind(keyringController),
|
||||||
saveAccountLabel: keyringController.saveAccountLabel.bind(keyringController),
|
saveAccountLabel: keyringController.saveAccountLabel.bind(keyringController),
|
||||||
tryPassword: keyringController.tryPassword.bind(keyringController),
|
|
||||||
// coinbase
|
// coinbase
|
||||||
buyEth: this.buyEth.bind(this),
|
buyEth: this.buyEth.bind(this),
|
||||||
// shapeshift
|
// shapeshift
|
||||||
|
@ -161,7 +161,7 @@ function tryUnlockMetamask (password) {
|
|||||||
background.submitPassword(password, (err, newState) => {
|
background.submitPassword(password, (err, newState) => {
|
||||||
dispatch(actions.hideLoadingIndication())
|
dispatch(actions.hideLoadingIndication())
|
||||||
if (err) {
|
if (err) {
|
||||||
dispatch(actions.unlockFailed())
|
dispatch(actions.unlockFailed(err.message))
|
||||||
} else {
|
} else {
|
||||||
dispatch(this.updateMetamaskState(newState))
|
dispatch(this.updateMetamaskState(newState))
|
||||||
let selectedAccount
|
let selectedAccount
|
||||||
@ -407,9 +407,10 @@ function unlockInProgress () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function unlockFailed () {
|
function unlockFailed (message) {
|
||||||
return {
|
return {
|
||||||
type: actions.UNLOCK_FAILED,
|
type: actions.UNLOCK_FAILED,
|
||||||
|
value: message,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,7 +335,7 @@ function reduceApp (state, action) {
|
|||||||
|
|
||||||
case actions.UNLOCK_FAILED:
|
case actions.UNLOCK_FAILED:
|
||||||
return extend(appState, {
|
return extend(appState, {
|
||||||
warning: 'Incorrect password. Try again.',
|
warning: action.value || 'Incorrect password. Try again.',
|
||||||
})
|
})
|
||||||
|
|
||||||
case actions.SHOW_LOADING:
|
case actions.SHOW_LOADING:
|
||||||
|
@ -55,6 +55,8 @@ UnlockScreen.prototype.render = function () {
|
|||||||
h('.error', {
|
h('.error', {
|
||||||
style: {
|
style: {
|
||||||
display: warning ? 'block' : 'none',
|
display: warning ? 'block' : 'none',
|
||||||
|
padding: '0 20px',
|
||||||
|
textAlign: 'center',
|
||||||
},
|
},
|
||||||
}, warning),
|
}, warning),
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user