keyring - synchronous getState

feature/default_network_editable
kumavis 8 years ago
parent 8257853819
commit c0d3db6a8c
  1. 17
      app/scripts/keyring-controller.js
  2. 12
      app/scripts/metamask-controller.js
  3. 7
      test/unit/idStore-migration-test.js

@ -2,6 +2,7 @@ const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN
const bip39 = require('bip39')
const EventEmitter = require('events').EventEmitter
const extend = require('xtend')
const ObservableStore = require('obs-store')
const filter = require('promise-filter')
const encryptor = require('browser-passworder')
@ -32,6 +33,7 @@ class KeyringController extends EventEmitter {
super()
const initState = opts.initState || {}
this.store = new ObservableStore(initState)
this.memStore = new ObservableStore({})
this.configManager = opts.configManager
this.ethStore = opts.ethStore
this.encryptor = encryptor
@ -74,16 +76,14 @@ class KeyringController extends EventEmitter {
// in this class, but will need to be Promisified when we move our
// persistence to an async model.
getState () {
return Promise.all(this.keyrings.map(this.displayForKeyring))
.then((displayKeyrings) => {
const state = this.store.getState()
// old wallet
const wallet = this.configManager.getWallet()
return {
const memState = this.memStore.getState()
return extend(memState, {
// computed
isInitialized: (!!wallet || !!state.vault),
isUnlocked: (!!this.password),
keyrings: displayKeyrings,
// hard coded
keyringTypes: this.keyringTypes.map(krt => krt.type),
// memStore
@ -97,7 +97,6 @@ class KeyringController extends EventEmitter {
// messageManager
unconfMsgs: messageManager.unconfirmedMsgs(),
messages: messageManager.getMsgList(),
}
})
}
@ -164,6 +163,7 @@ class KeyringController extends EventEmitter {
setLocked () {
this.password = null
this.keyrings = []
this._updateMemStoreKeyrings()
return this.fullUpdate()
}
@ -639,6 +639,13 @@ class KeyringController extends EventEmitter {
this.identities = {}
}
_updateMemStoreKeyrings() {
Promise.all(this.keyrings.map(this.displayForKeyring))
.then((keyrings) => {
this.memStore.updateState({ keyrings })
})
}
}
module.exports = KeyringController

@ -169,14 +169,12 @@ module.exports = class MetamaskController extends EventEmitter {
//
getState () {
return this.keyringController.getState()
.then((keyringControllerState) => {
return extend(
this.state,
this.ethStore.getState(),
this.configManager.getConfig(),
this.txManager.getState(),
keyringControllerState,
this.keyringController.getState(),
this.preferencesController.store.getState(),
this.noticeController.getState(),
{
@ -184,7 +182,6 @@ module.exports = class MetamaskController extends EventEmitter {
lostAccounts: this.configManager.getLostAccounts(),
}
)
})
}
//
@ -199,7 +196,7 @@ module.exports = class MetamaskController extends EventEmitter {
return {
// etc
getState: nodeify(this.getState.bind(this)),
getState: (cb) => cb(null, this.getState()),
setRpcTarget: this.setRpcTarget.bind(this),
setProviderType: this.setProviderType.bind(this),
useEtherscanProvider: this.useEtherscanProvider.bind(this),
@ -296,10 +293,7 @@ module.exports = class MetamaskController extends EventEmitter {
}
sendUpdate () {
this.getState()
.then((state) => {
this.emit('update', state)
})
this.emit('update', this.getState())
}
//

@ -83,15 +83,10 @@ describe('IdentityStore to KeyringController migration', function() {
describe('entering a password', function() {
it('should identify an old wallet as an initialized keyring', function(done) {
keyringController.configManager.setWallet('something')
keyringController.getState()
.then((state) => {
const state = keyringController.getState()
assert(state.isInitialized, 'old vault counted as initialized.')
assert(!state.lostAccounts, 'no lost accounts')
done()
})
.catch((err) => {
done(err)
})
})
})
})

Loading…
Cancel
Save