mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge pull request #4467 from MetaMask/preferences-account-sync
bugfix - update preferences controller identities on keyring controller update
This commit is contained in:
commit
8cd692e37c
@ -63,6 +63,13 @@ class PreferencesController {
|
|||||||
this.store.updateState({ currentLocale: key })
|
this.store.updateState({ currentLocale: key })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates identities to only include specified addresses. Removes identities
|
||||||
|
* not included in addresses array
|
||||||
|
*
|
||||||
|
* @param {string[]} addresses An array of hex addresses
|
||||||
|
*
|
||||||
|
*/
|
||||||
setAddresses (addresses) {
|
setAddresses (addresses) {
|
||||||
const oldIdentities = this.store.getState().identities
|
const oldIdentities = this.store.getState().identities
|
||||||
const identities = addresses.reduce((ids, address, index) => {
|
const identities = addresses.reduce((ids, address, index) => {
|
||||||
@ -73,6 +80,24 @@ class PreferencesController {
|
|||||||
this.store.updateState({ identities })
|
this.store.updateState({ identities })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds addresses to the identities object without removing identities
|
||||||
|
*
|
||||||
|
* @param {string[]} addresses An array of hex addresses
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
addAddresses (addresses) {
|
||||||
|
const identities = this.store.getState().identities
|
||||||
|
addresses.forEach((address) => {
|
||||||
|
// skip if already exists
|
||||||
|
if (identities[address]) return
|
||||||
|
// add missing identity
|
||||||
|
const identityCount = Object.keys(identities).length
|
||||||
|
identities[address] = { name: `Account ${identityCount + 1}`, address }
|
||||||
|
})
|
||||||
|
this.store.updateState({ identities })
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for the `selectedAddress` property
|
* Setter for the `selectedAddress` property
|
||||||
*
|
*
|
||||||
@ -111,7 +136,7 @@ class PreferencesController {
|
|||||||
/**
|
/**
|
||||||
* Adds a new token to the token array, or updates the token if passed an address that already exists.
|
* Adds a new token to the token array, or updates the token if passed an address that already exists.
|
||||||
* Modifies the existing tokens array from the store. All objects in the tokens array array AddedToken objects.
|
* Modifies the existing tokens array from the store. All objects in the tokens array array AddedToken objects.
|
||||||
* @see AddedToken {@link AddedToken}
|
* @see AddedToken {@link AddedToken}
|
||||||
*
|
*
|
||||||
* @param {string} rawAddress Hex address of the token contract. May or may not be a checksum address.
|
* @param {string} rawAddress Hex address of the token contract. May or may not be a checksum address.
|
||||||
* @param {string} symbol The symbol of the token
|
* @param {string} symbol The symbol of the token
|
||||||
@ -197,7 +222,7 @@ class PreferencesController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for the `currentAccountTab` property
|
* Setter for the `currentAccountTab` property
|
||||||
*
|
*
|
||||||
* @param {string} currentAccountTab Specifies the new tab to be marked as current
|
* @param {string} currentAccountTab Specifies the new tab to be marked as current
|
||||||
* @returns {Promise<void>} Promise resolves with undefined
|
* @returns {Promise<void>} Promise resolves with undefined
|
||||||
@ -215,7 +240,7 @@ class PreferencesController {
|
|||||||
* The returned list will have a max length of 2. If the _url currently exists it the list, it will be moved to the
|
* The returned list will have a max length of 2. If the _url currently exists it the list, it will be moved to the
|
||||||
* end of the list. The current list is modified and returned as a promise.
|
* end of the list. The current list is modified and returned as a promise.
|
||||||
*
|
*
|
||||||
* @param {string} _url The rpc url to add to the frequentRpcList.
|
* @param {string} _url The rpc url to add to the frequentRpcList.
|
||||||
* @returns {Promise<array>} The updated frequentRpcList.
|
* @returns {Promise<array>} The updated frequentRpcList.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -139,6 +139,8 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
const address = addresses[0]
|
const address = addresses[0]
|
||||||
this.preferencesController.setSelectedAddress(address)
|
this.preferencesController.setSelectedAddress(address)
|
||||||
}
|
}
|
||||||
|
// ensure preferences + identities controller know about all addresses
|
||||||
|
this.preferencesController.addAddresses(addresses)
|
||||||
this.accountTracker.syncWithAddresses(addresses)
|
this.accountTracker.syncWithAddresses(addresses)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -456,7 +458,11 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
async createNewVaultAndRestore (password, seed) {
|
async createNewVaultAndRestore (password, seed) {
|
||||||
const release = await this.createVaultMutex.acquire()
|
const release = await this.createVaultMutex.acquire()
|
||||||
try {
|
try {
|
||||||
|
// clear known identities
|
||||||
|
this.preferencesController.setAddresses([])
|
||||||
|
// create new vault
|
||||||
const vault = await this.keyringController.createNewVaultAndRestore(password, seed)
|
const vault = await this.keyringController.createNewVaultAndRestore(password, seed)
|
||||||
|
// set new identities
|
||||||
const accounts = await this.keyringController.getAccounts()
|
const accounts = await this.keyringController.getAccounts()
|
||||||
this.preferencesController.setAddresses(accounts)
|
this.preferencesController.setAddresses(accounts)
|
||||||
this.selectFirstIdentity()
|
this.selectFirstIdentity()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user