diff --git a/app/scripts/metamask-controller.actions.test.js b/app/scripts/metamask-controller.actions.test.js index 5e7c771a1a6b..397648c371da 100644 --- a/app/scripts/metamask-controller.actions.test.js +++ b/app/scripts/metamask-controller.actions.test.js @@ -145,27 +145,21 @@ describe('MetaMaskController', function () { metamaskController.addNewAccount(1), metamaskController.addNewAccount(1), ]); - assert.deepEqual( - Object.keys(addNewAccountResult1.identities), - Object.keys(addNewAccountResult2.identities), - ); + assert.equal(addNewAccountResult1, addNewAccountResult2); }); it('two successive calls with same accountCount give same result', async function () { await metamaskController.createNewVaultAndKeychain('test@123'); const addNewAccountResult1 = await metamaskController.addNewAccount(1); const addNewAccountResult2 = await metamaskController.addNewAccount(1); - assert.deepEqual( - Object.keys(addNewAccountResult1.identities), - Object.keys(addNewAccountResult2.identities), - ); + assert.equal(addNewAccountResult1, addNewAccountResult2); }); it('two successive calls with different accountCount give different results', async function () { await metamaskController.createNewVaultAndKeychain('test@123'); const addNewAccountResult1 = await metamaskController.addNewAccount(1); const addNewAccountResult2 = await metamaskController.addNewAccount(2); - assert.notDeepEqual(addNewAccountResult1, addNewAccountResult2); + assert.notEqual(addNewAccountResult1, addNewAccountResult2); }); }); diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index fa120200fc2a..366556d359e8 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -2943,12 +2943,10 @@ export default class MetamaskController extends EventEmitter { // seek out the first zero balance while (lastBalance !== '0x0') { - await this.coreKeyringController.addNewAccount(accounts.length); + const { addedAccountAddress } = + await this.coreKeyringController.addNewAccount(accounts.length); accounts = await this.coreKeyringController.getAccounts(); - lastBalance = await this.getBalance( - accounts[accounts.length - 1], - ethQuery, - ); + lastBalance = await this.getBalance(addedAccountAddress, ethQuery); } // remove extra zero balance account potentially created from seeking ahead @@ -3394,7 +3392,7 @@ export default class MetamaskController extends EventEmitter { * Adds a new account to the default (first) HD seed phrase Keyring. * * @param accountCount - * @returns {} keyState + * @returns {Promise} The address of the newly-created account. */ async addNewAccount(accountCount) { const isActionMetricsQueueE2ETest = @@ -3404,38 +3402,16 @@ export default class MetamaskController extends EventEmitter { await new Promise((resolve) => setTimeout(resolve, 5_000)); } - const [primaryKeyring] = this.coreKeyringController.getKeyringsByType( - KeyringType.hdKeyTree, - ); - if (!primaryKeyring) { - throw new Error('MetamaskController - No HD Key Tree found'); - } - const { keyringController } = this; - const { identities: oldIdentities } = - this.preferencesController.store.getState(); - - if (Object.keys(oldIdentities).length === accountCount) { - const oldAccounts = await keyringController.getAccounts(); - const keyState = await keyringController.addNewAccount(primaryKeyring); - const newAccounts = await keyringController.getAccounts(); + const oldAccounts = await this.coreKeyringController.getAccounts(); - await this.verifySeedPhrase(); + const { addedAccountAddress } = + await this.coreKeyringController.addNewAccount(accountCount); - this.preferencesController.setAddresses(newAccounts); - newAccounts.forEach((address) => { - if (!oldAccounts.includes(address)) { - this.preferencesController.setSelectedAddress(address); - } - }); - - const { identities } = this.preferencesController.store.getState(); - return { ...keyState, identities }; + if (!oldAccounts.includes(addedAccountAddress)) { + this.preferencesController.setSelectedAddress(addedAccountAddress); } - return { - ...keyringController.memStore.getState(), - identities: oldIdentities, - }; + return addedAccountAddress; } /** diff --git a/app/scripts/metamask-controller.test.js b/app/scripts/metamask-controller.test.js index b11e34372ffb..f2c3fa6adeeb 100644 --- a/app/scripts/metamask-controller.test.js +++ b/app/scripts/metamask-controller.test.js @@ -737,7 +737,7 @@ describe('MetaMaskController', function () { metamaskController.keyringController, 'addNewAccount', ); - addNewAccountStub.returns({}); + addNewAccountStub.returns('0x123'); getAccountsStub = sinon.stub( metamaskController.keyringController, @@ -818,7 +818,7 @@ describe('MetaMaskController', function () { await addNewAccount; assert.fail('should throw'); } catch (e) { - assert.equal(e.message, 'MetamaskController - No HD Key Tree found'); + assert.equal(e.message, 'No HD keyring found'); } }); }); diff --git a/ui/store/actions.test.js b/ui/store/actions.test.js index 933ec6ce2c91..359e2a349b03 100644 --- a/ui/store/actions.test.js +++ b/ui/store/actions.test.js @@ -398,7 +398,7 @@ describe('Actions', () => { const addNewAccount = background.addNewAccount.callsFake((_, cb) => cb(null, { - identities: {}, + addedAccountAddress: '0x123', }), ); diff --git a/ui/store/actions.ts b/ui/store/actions.ts index 6d92e5b1b246..00e94aa71a27 100644 --- a/ui/store/actions.ts +++ b/ui/store/actions.ts @@ -432,12 +432,11 @@ export function addNewAccount(): ThunkAction< const oldIdentities = getState().metamask.identities; dispatch(showLoadingIndication()); - let newIdentities; + let addedAccountAddress; try { - const { identities } = await submitRequestToBackground('addNewAccount', [ + addedAccountAddress = await submitRequestToBackground('addNewAccount', [ Object.keys(oldIdentities).length, ]); - newIdentities = identities; } catch (error) { dispatch(displayWarning(error)); throw error; @@ -445,11 +444,8 @@ export function addNewAccount(): ThunkAction< dispatch(hideLoadingIndication()); } - const newAccountAddress = Object.keys(newIdentities).find( - (address) => !oldIdentities[address], - ); await forceUpdateMetamaskState(dispatch); - return newAccountAddress; + return addedAccountAddress; }; }