Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
6dd9edf
chore: bump `@metamask/keyring-controller`
mikesposito Feb 28, 2025
b65cc5e
Merge branch 'main' into mikesposito/bump-keyring-controller
mikesposito Feb 28, 2025
c4a8c9d
use preview build
mikesposito Feb 28, 2025
be6cb84
use new option bag from `withKeyring`
mikesposito Feb 28, 2025
bf6646b
fix: support new addNewKeyring return
mikesposito Feb 28, 2025
6f06ffc
Update LavaMoat policies
metamaskbot Feb 28, 2025
e44e7da
fix: use the right preview build
mikesposito Mar 3, 2025
0f9ae0f
fix ledger tests
mikesposito Mar 3, 2025
b890f35
fix mmi-controller unit tests
mikesposito Mar 3, 2025
c4445ea
bump `@metamask/profile-sync-controller`
mikesposito Mar 3, 2025
227b1b7
Merge branch 'main' into mikesposito/bump-keyring-controller
mikesposito Mar 3, 2025
d0e8ea2
remove package previews
mikesposito Mar 4, 2025
561fbc6
Merge branch 'main' into mikesposito/bump-keyring-controller
mikesposito Mar 4, 2025
9e24ac2
Merge branch 'main' into mikesposito/bump-keyring-controller
mikesposito Mar 4, 2025
8378ea8
Update LavaMoat policies
metamaskbot Mar 4, 2025
5188bdd
update policies
mikesposito Mar 5, 2025
f639d3a
Merge branch 'main' into mikesposito/bump-keyring-controller
mikesposito Mar 5, 2025
70e7886
use `@metamask/eth-trezor-keyring@^6.1.1`
mikesposito Mar 5, 2025
2d7df2b
fix: `:withKeyring` action for snaps
mikesposito Mar 5, 2025
ff11f90
Merge branch 'main' into mikesposito/bump-keyring-controller
mikesposito Mar 5, 2025
3aad368
chore: remove findKeyringById
mikesposito Mar 5, 2025
ea84681
Merge branch 'main' into mikesposito/bump-keyring-controller
mikesposito Mar 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions app/scripts/controllers/mmi-controller.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -313,10 +313,11 @@ describe('MMIController', function () {
const type = 'mock-keyring-type';
mmiController.keyringController.getKeyringsByType = jest
.fn()
.mockReturnValue([]);
.mockReturnValueOnce([])
.mockReturnValueOnce(['new-keyring']);
mmiController.keyringController.addNewKeyring = jest
.fn()
.mockResolvedValue('new-keyring');
.mockResolvedValue('new-keyring-metadata');

const result = await mmiController.addKeyringIfNotExists(type);

Expand Down
3 changes: 2 additions & 1 deletion app/scripts/controllers/mmi-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,8 @@ export class MMIController {
async addKeyringIfNotExists(type: KeyringTypes) {
let keyring = await this.keyringController.getKeyringsByType(type)[0];
if (!keyring) {
keyring = await this.keyringController.addNewKeyring(type);
await this.keyringController.addNewKeyring(type);
[keyring] = await this.keyringController.getKeyringsByType(type);
}
return keyring;
}
Expand Down
88 changes: 46 additions & 42 deletions app/scripts/metamask-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,9 +189,6 @@ import {
LedgerTransportTypes,
} from '../../shared/constants/hardware-wallets';
import { KeyringType } from '../../shared/constants/keyring';
///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
import { findKeyringId } from '../../shared/lib/keyring';
///: END:ONLY_INCLUDE_IF
import {
RestrictedMethods,
ExcludedSnapPermissions,
Expand Down Expand Up @@ -2455,11 +2452,14 @@ export default class MetamaskController extends EventEmitter {
* @returns {SnapKeyring}
*/
async getSnapKeyring() {
// TODO: Use `withKeyring` instead
let [snapKeyring] = this.keyringController.getKeyringsByType(
KeyringType.snap,
);
if (!snapKeyring) {
snapKeyring = await this.keyringController.addNewKeyring(
await this.keyringController.addNewKeyring(KeyringType.snap);
// TODO: Use `withKeyring` instead
[snapKeyring] = this.keyringController.getKeyringsByType(
KeyringType.snap,
);
}
Expand Down Expand Up @@ -2633,7 +2633,7 @@ export default class MetamaskController extends EventEmitter {
{
id: source,
},
async (keyring) => ({
async ({ keyring }) => ({
type: keyring.type,
mnemonic: keyring.mnemonic,
}),
Expand Down Expand Up @@ -4316,7 +4316,7 @@ export default class MetamaskController extends EventEmitter {
try {
// TODO: `getKeyringsByType` is deprecated, this logic should probably be moved to the `KeyringController`.
// FIXME: The `KeyringController` does not check yet for duplicated accounts with HD keyrings, see: https://github.com/MetaMask/core/issues/5411
const alreadyImportedSrp = await this.keyringController
const alreadyImportedSrp = this.keyringController
.getKeyringsByType(KeyringTypes.hd)
.some((keyring) => {
return (
Expand All @@ -4332,26 +4332,22 @@ export default class MetamaskController extends EventEmitter {
);
}

const newKeyring = await this.keyringController.addNewKeyring(
const { id } = await this.keyringController.addNewKeyring(
KeyringTypes.hd,
{
mnemonic,
numberOfAccounts: 1,
},
);
const [newAccountAddress] = await newKeyring.getAccounts();
const [newAccountAddress] = await this.keyringController.withKeyring(
{ id },
async ({ keyring }) => keyring.getAccounts(),
);
const account =
this.accountsController.getAccountByAddress(newAccountAddress);
this.accountsController.setSelectedAccount(account.id);

// TODO: Find a way to encapsulate this logic in the KeyringController itself.
const { keyrings, keyringsMetadata } = this.keyringController.state;
const keyringId = findKeyringId(keyrings, keyringsMetadata, {
address: newAccountAddress,
type: KeyringTypes.hd,
});

await this._addAccountsWithBalance(keyringId);
await this._addAccountsWithBalance(id);

return newAccountAddress;
} finally {
Expand All @@ -4372,10 +4368,13 @@ export default class MetamaskController extends EventEmitter {
const releaseLock = await this.createVaultMutex.acquire();
try {
// addNewKeyring auto creates 1 account.
const newHdkeyring = await this.keyringController.addNewKeyring(
const { id } = await this.keyringController.addNewKeyring(
KeyringTypes.hd,
);
const [newAccount] = await newHdkeyring.getAccounts();
const [newAccount] = await this.keyringController.withKeyring(
{ id },
async ({ keyring }) => keyring.getAccounts(),
);
const account = this.accountsController.getAccountByAddress(newAccount);
this.accountsController.setSelectedAccount(account.id);

Expand Down Expand Up @@ -4451,7 +4450,7 @@ export default class MetamaskController extends EventEmitter {

const accounts = await this.keyringController.withKeyring(
keyringSelector,
async (keyring) => {
async ({ keyring }) => {
return await keyring.getAccounts();
},
);
Expand Down Expand Up @@ -4487,7 +4486,7 @@ export default class MetamaskController extends EventEmitter {
// This account has assets, so check the next one
address = await this.keyringController.withKeyring(
keyringSelector,
async (keyring) => {
async ({ keyring }) => {
const [newAddress] = await keyring.addAccounts(1);
return newAddress;
},
Expand Down Expand Up @@ -4770,11 +4769,13 @@ export default class MetamaskController extends EventEmitter {
// The `getKeyringForAccount` is now deprecated, so we just use `withKeyring` instead to access our keyring.
return await this.keyringController.withKeyring(
{ address },
({ type: keyringType, bridge: keyringBridge }) =>
({ keyring }) => {
const { type: keyringType, bridge: keyringBridge } = keyring;
// Specific case for OneKey devices, see `ONE_KEY_VIA_TREZOR_MINOR_VERSION` for further details.
keyringBridge?.minorVersion === ONE_KEY_VIA_TREZOR_MINOR_VERSION
return keyringBridge?.minorVersion === ONE_KEY_VIA_TREZOR_MINOR_VERSION
? HardwareKeyringType.oneKey
: HardwareKeyringType[keyringType],
: HardwareKeyringType[keyringType];
},
);
}

Expand Down Expand Up @@ -4832,23 +4833,26 @@ export default class MetamaskController extends EventEmitter {
* @returns {'ledger' | 'lattice' | string | undefined}
*/
async getDeviceModel(address) {
return this.keyringController.withKeyring({ address }, async (keyring) => {
switch (keyring.type) {
case KeyringType.trezor:
case KeyringType.oneKey:
return keyring.getModel();
case KeyringType.qr:
return keyring.getName();
case KeyringType.ledger:
// TODO: get model after ledger keyring exposes method
return HardwareDeviceNames.ledger;
case KeyringType.lattice:
// TODO: get model after lattice keyring exposes method
return HardwareDeviceNames.lattice;
default:
return undefined;
}
});
return this.keyringController.withKeyring(
{ address },
async ({ keyring }) => {
switch (keyring.type) {
case KeyringType.trezor:
case KeyringType.oneKey:
return keyring.getModel();
case KeyringType.qr:
return keyring.getName();
case KeyringType.ledger:
// TODO: get model after ledger keyring exposes method
return HardwareDeviceNames.ledger;
case KeyringType.lattice:
// TODO: get model after lattice keyring exposes method
return HardwareDeviceNames.lattice;
default:
return undefined;
}
},
);
}

/**
Expand Down Expand Up @@ -4936,7 +4940,7 @@ export default class MetamaskController extends EventEmitter {

const addedAccountAddress = await this.keyringController.withKeyring(
keyringSelector,
async (keyring) => {
async ({ keyring }) => {
if (keyring.type !== KeyringTypes.hd) {
throw new Error('Cannot add account to non-HD keyring');
}
Expand Down Expand Up @@ -7573,7 +7577,7 @@ export default class MetamaskController extends EventEmitter {

return this.keyringController.withKeyring(
{ type: keyringType },
async (keyring) => {
async ({ keyring }) => {
if (options.hdPath && keyring.setHdPath) {
keyring.setHdPath(options.hdPath);
}
Expand Down
6 changes: 4 additions & 2 deletions app/scripts/metamask-controller.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ const buildMockKeyringBridge = (publicKeyPayload) =>
jest.fn(() => ({
init: jest.fn(),
dispose: jest.fn(),
destroy: jest.fn(),
updateTransportMethod: jest.fn(),
getPublicKey: jest.fn(async () => publicKeyPayload),
}));
Expand All @@ -214,6 +215,7 @@ jest.mock('@metamask/eth-ledger-bridge-keyring', () => ({
...jest.requireActual('@metamask/eth-ledger-bridge-keyring'),
LedgerIframeBridge: buildMockKeyringBridge({
publicKey: KNOWN_PUBLIC_KEY,
address: KNOWN_PUBLIC_KEY_ADDRESSES[0].address,
chainCode: '0x1',
}),
}));
Expand Down Expand Up @@ -1859,7 +1861,7 @@ describe('MetaMaskController', () => {
async (type) => {
jest
.spyOn(metamaskController.keyringController, 'withKeyring')
.mockImplementation((_, fn) => fn({ type }));
.mockImplementation((_, fn) => fn({ keyring: { type } }));

const result = await metamaskController.getHardwareTypeForMetric(
'0x123',
Expand All @@ -1877,7 +1879,7 @@ describe('MetaMaskController', () => {
type: 'trezor',
bridge: { minorVersion: ONE_KEY_VIA_TREZOR_MINOR_VERSION },
};
return fn(keyring);
return fn({ keyring });
});

const result = await metamaskController.getHardwareTypeForMetric(
Expand Down
2 changes: 1 addition & 1 deletion lavamoat/browserify/beta/policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -1147,8 +1147,8 @@
"@ethereumjs/tx>@ethereumjs/util": true,
"@metamask/eth-ledger-bridge-keyring>@ledgerhq/hw-app-eth": true,
"@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true,
"@metamask/utils": true,
"browserify>buffer": true,
"webpack>events": true,
"@metamask/eth-trezor-keyring>hdkey": true
}
},
Expand Down
2 changes: 1 addition & 1 deletion lavamoat/browserify/flask/policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -1147,8 +1147,8 @@
"@ethereumjs/tx>@ethereumjs/util": true,
"@metamask/eth-ledger-bridge-keyring>@ledgerhq/hw-app-eth": true,
"@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true,
"@metamask/utils": true,
"browserify>buffer": true,
"webpack>events": true,
"@metamask/eth-trezor-keyring>hdkey": true
}
},
Expand Down
2 changes: 1 addition & 1 deletion lavamoat/browserify/main/policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -1147,8 +1147,8 @@
"@ethereumjs/tx>@ethereumjs/util": true,
"@metamask/eth-ledger-bridge-keyring>@ledgerhq/hw-app-eth": true,
"@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true,
"@metamask/utils": true,
"browserify>buffer": true,
"webpack>events": true,
"@metamask/eth-trezor-keyring>hdkey": true
}
},
Expand Down
2 changes: 1 addition & 1 deletion lavamoat/browserify/mmi/policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -1239,8 +1239,8 @@
"@ethereumjs/tx>@ethereumjs/util": true,
"@metamask/eth-ledger-bridge-keyring>@ledgerhq/hw-app-eth": true,
"@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true,
"@metamask/utils": true,
"browserify>buffer": true,
"webpack>events": true,
"@metamask/eth-trezor-keyring>hdkey": true
}
},
Expand Down
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -271,19 +271,19 @@
"@metamask/ens-resolver-snap": "^0.1.2",
"@metamask/eth-json-rpc-filters": "^9.0.0",
"@metamask/eth-json-rpc-middleware": "^15.1.2",
"@metamask/eth-ledger-bridge-keyring": "^8.0.3",
"@metamask/eth-ledger-bridge-keyring": "^9.0.0",
"@metamask/eth-sig-util": "^7.0.1",
"@metamask/eth-snap-keyring": "^11.1.0",
"@metamask/eth-token-tracker": "^10.0.2",
"@metamask/eth-trezor-keyring": "^6.0.0",
"@metamask/eth-trezor-keyring": "^6.1.1",
"@metamask/etherscan-link": "^3.0.0",
"@metamask/gas-fee-controller": "^22.0.3",
"@metamask/jazzicon": "^2.0.0",
"@metamask/json-rpc-engine": "^10.0.0",
"@metamask/json-rpc-middleware-stream": "^8.0.4",
"@metamask/keyring-api": "^17.2.1",
"@metamask/keyring-controller": "^19.2.0",
"@metamask/keyring-internal-api": "^4.0.3",
"@metamask/keyring-controller": "^20.0.0",
"@metamask/keyring-internal-api": "^5.0.0",
"@metamask/keyring-snap-client": "^4.0.1",
"@metamask/logging-controller": "^6.0.4",
"@metamask/logo": "^4.0.0",
Expand All @@ -305,7 +305,7 @@
"@metamask/post-message-stream": "^9.0.0",
"@metamask/ppom-validator": "0.36.0",
"@metamask/preinstalled-example-snap": "^0.3.0",
"@metamask/profile-sync-controller": "^8.1.1",
"@metamask/profile-sync-controller": "^9.0.0",
"@metamask/providers": "^20.0.0",
"@metamask/queued-request-controller": "^7.0.1",
"@metamask/rate-limit-controller": "^6.0.3",
Expand Down
Loading
Loading