1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 17:33:23 +01:00

Use addNewAccount from core KeyringController (#19814)

* refactor: use addNewAccount from core KeyringController

* refactor: replace missed interaction

* refactor: select account only when is new

* refactor: use getAccounts to check if account is new
This commit is contained in:
Michele Esposito 2023-08-16 11:19:41 +02:00 committed by GitHub
parent fed047f88b
commit 42d05ef9cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 19 additions and 53 deletions

View File

@ -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);
});
});

View File

@ -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<string>} 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();
const oldAccounts = await this.coreKeyringController.getAccounts();
if (Object.keys(oldIdentities).length === accountCount) {
const oldAccounts = await keyringController.getAccounts();
const keyState = await keyringController.addNewAccount(primaryKeyring);
const newAccounts = await keyringController.getAccounts();
const { addedAccountAddress } =
await this.coreKeyringController.addNewAccount(accountCount);
await this.verifySeedPhrase();
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;
}
/**

View File

@ -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');
}
});
});

View File

@ -398,7 +398,7 @@ describe('Actions', () => {
const addNewAccount = background.addNewAccount.callsFake((_, cb) =>
cb(null, {
identities: {},
addedAccountAddress: '0x123',
}),
);

View File

@ -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;
};
}