mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge pull request #1073 from MetaMask/kumavis-refactor4
Kumavis refactor4
This commit is contained in:
commit
cadea1e09e
@ -31,13 +31,17 @@ class KeyringController extends EventEmitter {
|
||||
constructor (opts) {
|
||||
super()
|
||||
const initState = opts.initState || {}
|
||||
this.keyringTypes = keyringTypes
|
||||
this.store = new ObservableStore(initState)
|
||||
this.memStore = new ObservableStore({
|
||||
keyringTypes: this.keyringTypes.map(krt => krt.type),
|
||||
keyrings: [],
|
||||
identities: {},
|
||||
})
|
||||
this.configManager = opts.configManager
|
||||
this.ethStore = opts.ethStore
|
||||
this.encryptor = encryptor
|
||||
this.keyringTypes = keyringTypes
|
||||
this.keyrings = []
|
||||
this.identities = {} // Essentially a name hash
|
||||
|
||||
this._unconfMsgCbs = {}
|
||||
|
||||
@ -74,31 +78,23 @@ 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 {
|
||||
// computed
|
||||
isInitialized: (!!wallet || !!state.vault),
|
||||
isUnlocked: (!!this.password),
|
||||
keyrings: displayKeyrings,
|
||||
// hard coded
|
||||
keyringTypes: this.keyringTypes.map(krt => krt.type),
|
||||
// memStore
|
||||
identities: this.identities,
|
||||
// configManager
|
||||
seedWords: this.configManager.getSeedWords(),
|
||||
isDisclaimerConfirmed: this.configManager.getConfirmedDisclaimer(),
|
||||
currentFiat: this.configManager.getCurrentFiat(),
|
||||
conversionRate: this.configManager.getConversionRate(),
|
||||
conversionDate: this.configManager.getConversionDate(),
|
||||
// messageManager
|
||||
unconfMsgs: messageManager.unconfirmedMsgs(),
|
||||
messages: messageManager.getMsgList(),
|
||||
}
|
||||
})
|
||||
// old wallet
|
||||
const memState = this.memStore.getState()
|
||||
const result = {
|
||||
// computed
|
||||
isUnlocked: (!!this.password),
|
||||
// memStore
|
||||
keyringTypes: memState.keyringTypes,
|
||||
identities: memState.identities,
|
||||
keyrings: memState.keyrings,
|
||||
// messageManager
|
||||
unconfMsgs: messageManager.unconfirmedMsgs(),
|
||||
messages: messageManager.getMsgList(),
|
||||
// configManager
|
||||
seedWords: this.configManager.getSeedWords(),
|
||||
isDisclaimerConfirmed: this.configManager.getConfirmedDisclaimer(),
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// Create New Vault And Keychain
|
||||
@ -164,6 +160,7 @@ class KeyringController extends EventEmitter {
|
||||
setLocked () {
|
||||
this.password = null
|
||||
this.keyrings = []
|
||||
this._updateMemStoreKeyrings()
|
||||
return this.fullUpdate()
|
||||
}
|
||||
|
||||
@ -245,7 +242,9 @@ class KeyringController extends EventEmitter {
|
||||
walletNicknames[hexAddress] = label
|
||||
this.store.updateState({ walletNicknames })
|
||||
// update state on memStore
|
||||
this.identities[hexAddress].name = label
|
||||
const identities = this.memStore.getState().identities
|
||||
identities[hexAddress].name = label
|
||||
this.memStore.updateState({ identities })
|
||||
return Promise.resolve(label)
|
||||
} catch (err) {
|
||||
return Promise.reject(err)
|
||||
@ -439,14 +438,16 @@ class KeyringController extends EventEmitter {
|
||||
// Takes an address, and assigns it an incremented nickname, persisting it.
|
||||
createNickname (address) {
|
||||
const hexAddress = normalizeAddress(address)
|
||||
const currentIdentityCount = Object.keys(this.identities).length + 1
|
||||
const identities = this.memStore.getState().identities
|
||||
const currentIdentityCount = Object.keys(identities).length + 1
|
||||
const nicknames = this.store.getState().walletNicknames || {}
|
||||
const existingNickname = nicknames[hexAddress]
|
||||
const name = existingNickname || `Account ${currentIdentityCount}`
|
||||
this.identities[hexAddress] = {
|
||||
identities[hexAddress] = {
|
||||
address: hexAddress,
|
||||
name,
|
||||
}
|
||||
this.memStore.updateState({ identities })
|
||||
return this.saveAccountLabel(hexAddress, name)
|
||||
}
|
||||
|
||||
@ -635,8 +636,19 @@ class KeyringController extends EventEmitter {
|
||||
this.ethStore.removeAccount(address)
|
||||
})
|
||||
|
||||
// clear keyrings from memory
|
||||
this.keyrings = []
|
||||
this.identities = {}
|
||||
this.memStore.updateState({
|
||||
keyrings: [],
|
||||
identities: {},
|
||||
})
|
||||
}
|
||||
|
||||
_updateMemStoreKeyrings() {
|
||||
Promise.all(this.keyrings.map(this.displayForKeyring))
|
||||
.then((keyrings) => {
|
||||
this.memStore.updateState({ keyrings })
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -169,22 +169,29 @@ 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.preferencesController.store.getState(),
|
||||
this.noticeController.getState(),
|
||||
{
|
||||
shapeShiftTxList: this.configManager.getShapeShiftTxList(),
|
||||
lostAccounts: this.configManager.getLostAccounts(),
|
||||
}
|
||||
)
|
||||
})
|
||||
const wallet = this.configManager.getWallet()
|
||||
const vault = this.keyringController.store.getState().vault
|
||||
const isInitialized = (!!wallet || !!vault)
|
||||
return extend(
|
||||
{
|
||||
isInitialized,
|
||||
},
|
||||
this.state,
|
||||
this.ethStore.getState(),
|
||||
this.txManager.getState(),
|
||||
this.keyringController.getState(),
|
||||
this.preferencesController.store.getState(),
|
||||
this.noticeController.getState(),
|
||||
// config manager
|
||||
this.configManager.getConfig(),
|
||||
{
|
||||
shapeShiftTxList: this.configManager.getShapeShiftTxList(),
|
||||
lostAccounts: this.configManager.getLostAccounts(),
|
||||
currentFiat: this.configManager.getCurrentFiat(),
|
||||
conversionRate: this.configManager.getConversionRate(),
|
||||
conversionDate: this.configManager.getConversionDate(),
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
//
|
||||
@ -199,7 +206,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),
|
||||
@ -295,11 +302,8 @@ module.exports = class MetamaskController extends EventEmitter {
|
||||
)
|
||||
}
|
||||
|
||||
sendUpdate () {
|
||||
this.getState()
|
||||
.then((state) => {
|
||||
this.emit('update', state)
|
||||
})
|
||||
sendUpdate () {
|
||||
this.emit('update', this.getState())
|
||||
}
|
||||
|
||||
//
|
||||
|
16
mock-dev.js
16
mock-dev.js
@ -16,7 +16,6 @@ const extend = require('xtend')
|
||||
const render = require('react-dom').render
|
||||
const h = require('react-hyperscript')
|
||||
const pipe = require('mississippi').pipe
|
||||
const LocalStorageStore = require('obs-store/lib/localStorage')
|
||||
const Root = require('./ui/app/root')
|
||||
const configureStore = require('./ui/app/store')
|
||||
const actions = require('./ui/app/actions')
|
||||
@ -27,7 +26,6 @@ const firstTimeState = require('./app/scripts/first-time-state')
|
||||
const extension = require('./development/mockExtension')
|
||||
const noop = function () {}
|
||||
|
||||
const STORAGE_KEY = 'metamask-config'
|
||||
|
||||
//
|
||||
// Query String
|
||||
@ -56,27 +54,15 @@ const injectCss = require('inject-css')
|
||||
// MetaMask Controller
|
||||
//
|
||||
|
||||
let dataStore = new LocalStorageStore({ storageKey: STORAGE_KEY })
|
||||
// initial state for first time users
|
||||
if (!dataStore.getState()) {
|
||||
dataStore.putState(firstTimeState)
|
||||
}
|
||||
|
||||
const controller = new MetamaskController({
|
||||
// User confirmation callbacks:
|
||||
showUnconfirmedMessage: noop,
|
||||
unlockAccountMessage: noop,
|
||||
showUnapprovedTx: noop,
|
||||
// initial state
|
||||
initState: dataStore.getState(),
|
||||
initState: firstTimeState,
|
||||
})
|
||||
|
||||
// setup state persistence
|
||||
pipe(
|
||||
controller.store,
|
||||
dataStore
|
||||
)
|
||||
|
||||
//
|
||||
// User Interface
|
||||
//
|
||||
|
@ -80,18 +80,4 @@ 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) => {
|
||||
assert(state.isInitialized, 'old vault counted as initialized.')
|
||||
assert(!state.lostAccounts, 'no lost accounts')
|
||||
done()
|
||||
})
|
||||
.catch((err) => {
|
||||
done(err)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
@ -104,7 +104,7 @@ describe('KeyringController', function() {
|
||||
it('should add the address to the identities hash', function() {
|
||||
const fakeAddress = '0x12345678'
|
||||
keyringController.createNickname(fakeAddress)
|
||||
const identities = keyringController.identities
|
||||
const identities = keyringController.memStore.getState().identities
|
||||
const identity = identities[fakeAddress]
|
||||
assert.equal(identity.address, fakeAddress)
|
||||
})
|
||||
@ -114,7 +114,9 @@ describe('KeyringController', function() {
|
||||
it ('sets the nickname', function(done) {
|
||||
const account = addresses[0]
|
||||
var nick = 'Test nickname'
|
||||
keyringController.identities[ethUtil.addHexPrefix(account)] = {}
|
||||
const identities = keyringController.memStore.getState().identities
|
||||
identities[ethUtil.addHexPrefix(account)] = {}
|
||||
keyringController.memStore.updateState({ identities })
|
||||
keyringController.saveAccountLabel(account, nick)
|
||||
.then((label) => {
|
||||
try {
|
||||
|
Loading…
Reference in New Issue
Block a user