Skip to content

Support keyring metadata in KeyringController #5112

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 38 commits into from
Feb 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7f1608a
feat(multi-srp): add id and typeIndex to hd keyrings
PatrykLucka Dec 16, 2024
281d85f
feat: use keyring index to select srp
PatrykLucka Jan 8, 2025
9c88af9
fix: lock `KeyringController` mutex on `verifySeedPhrase` (#5077)
mikesposito Dec 17, 2024
ec9e428
feat(multi-srp): add id and typeIndex to hd keyrings
PatrykLucka Dec 16, 2024
cbb3803
feat: use keyring index to select srp
PatrykLucka Jan 8, 2025
af226d5
feat: add keyringsMetadata
PatrykLucka Jan 13, 2025
3062aeb
feat: keep metadata in state only
PatrykLucka Jan 14, 2025
ad3e967
fix: revert keyringId arguments in getAccounts, and addNewAccount. Re…
montelaidev Jan 22, 2025
3813a19
fix: handle keyringMetadata cleanup when removing emptyKeyrings and c…
montelaidev Jan 22, 2025
c1409bd
fix: remove keyringmetadata misalignement logic
PatrykLucka Feb 5, 2025
8ba574c
fix: build
PatrykLucka Feb 5, 2025
9559258
test(multi-srp): update unit tests coverage
PatrykLucka Feb 5, 2025
40fac06
fix(multi-srp): clear keyringsMetadata on createNewVaultAndRestore
PatrykLucka Feb 6, 2025
bcaa0a3
feat(multi-srp): add keyring metadta to AccountsController keyring ob…
PatrykLucka Feb 7, 2025
0256b1e
chore: add FIXME packages/keyring-controller/src/KeyringController.ts…
PatrykLucka Feb 7, 2025
3265053
chore: fix lint issues
shane-t Feb 7, 2025
1d4430b
fix: lint warnings
PatrykLucka Feb 7, 2025
4645938
chore: prettier fix
shane-t Feb 7, 2025
09c9430
chore: warning thresholds
shane-t Feb 7, 2025
d5981fa
fix(multi-srp): use internal variable instead of property for metada…
PatrykLucka Feb 7, 2025
03c9731
chore(multi-srp): throw mismatch array outside of the update method
PatrykLucka Feb 11, 2025
ddd8737
fix(multi-srp): use push instead of spread operator for keyringsMetadata
PatrykLucka Feb 11, 2025
4fbbd13
Merge branch 'main' into multi-srp-mvp
PatrykLucka Feb 11, 2025
89746ba
Update packages/keyring-controller/src/KeyringController.ts
PatrykLucka Feb 12, 2025
03509bc
Update packages/keyring-controller/src/KeyringController.ts
PatrykLucka Feb 12, 2025
ca5548b
Update packages/keyring-controller/src/KeyringController.ts
PatrykLucka Feb 12, 2025
aebc8a7
test(multi-srp): add remove last account test
PatrykLucka Feb 12, 2025
5022d86
chore(multi-srp): move primary keyring removal protection to removeAc…
PatrykLucka Feb 12, 2025
ae1a759
chore: Improve error handling related to keyring metadata
Gudahtt Feb 12, 2025
cb58d7d
Merge branch 'main' into multi-srp-mvp
PatrykLucka Feb 13, 2025
f671b62
Merge branch 'improved-keyring-metadata-error-handling' into multi-sr…
PatrykLucka Feb 13, 2025
b93bbdf
test(multi-srp): update test coverage config
PatrykLucka Feb 13, 2025
7a6b427
test(multi-srp): fix length mismatch unit test
PatrykLucka Feb 14, 2025
a0a1422
chore(multi-srp): review fixes
PatrykLucka Feb 17, 2025
f823f91
chore(multi-srp): revert AccountsController changes
PatrykLucka Feb 17, 2025
66c3f05
chore(multi-srp): review changes
PatrykLucka Feb 17, 2025
2fafa9d
Merge branch 'main' into multi-srp-mvp
PatrykLucka Feb 17, 2025
03377ae
Merge branch 'main' into multi-srp-mvp
PatrykLucka Feb 17, 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: 2 additions & 3 deletions eslint-warning-thresholds.json
Original file line number Diff line number Diff line change
Expand Up @@ -242,13 +242,12 @@
"n/no-unsupported-features/node-builtins": 1
},
"packages/keyring-controller/src/KeyringController.test.ts": {
"import-x/namespace": 16,
"import-x/namespace": 14,
"jest/no-conditional-in-test": 8
},
"packages/keyring-controller/src/KeyringController.ts": {
"@typescript-eslint/no-unsafe-enum-comparison": 5,
"@typescript-eslint/no-unused-vars": 2,
"jsdoc/tag-lines": 1
"@typescript-eslint/no-unused-vars": 2
},
"packages/keyring-controller/tests/mocks/mockKeyring.ts": {
"@typescript-eslint/prefer-readonly": 1
Expand Down
127 changes: 126 additions & 1 deletion packages/accounts-controller/src/AccountsController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import type { SnapControllerState } from '@metamask/snaps-controllers';
import { SnapStatus } from '@metamask/snaps-utils';
import type { CaipChainId } from '@metamask/utils';
import * as uuid from 'uuid';

Check warning on line 25 in packages/accounts-controller/src/AccountsController.test.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Lint (20.x)

No exported names found in module 'uuid'
import type { V4Options } from 'uuid';

import type {
Expand Down Expand Up @@ -540,6 +540,12 @@
accounts: [mockAccount.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};

messenger.publish(
Expand All @@ -564,7 +570,7 @@

messenger.publish(
'KeyringController:stateChange',
{ isUnlocked: true, keyrings: [] },
{ isUnlocked: true, keyrings: [], keyringsMetadata: [] },
[],
);

Expand All @@ -582,6 +588,13 @@
{
accounts: [mockAccount.address, mockAccount2.address],
type: KeyringTypes.hd,
id: '123',
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
Expand Down Expand Up @@ -620,6 +633,12 @@
accounts: [mockAccount.address, mockAccount2.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -677,6 +696,16 @@
accounts: [mockAccount3.address, mockAccount4.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
{
id: 'mock-id2',
name: 'mock-name2',
},
],
};

const { accountsController } = setupAccountsController({
Expand Down Expand Up @@ -744,6 +773,16 @@
accounts: [mockAccount3.address, mockAccount4.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
{
id: 'mock-id2',
name: 'mock-name2',
},
],
};

const { accountsController } = setupAccountsController({
Expand Down Expand Up @@ -790,6 +829,12 @@
],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -852,6 +897,12 @@
],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -912,6 +963,16 @@
accounts: [mockAccount3.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
{
id: 'mock-id2',
name: 'mock-name2',
},
],
};

const { accountsController } = setupAccountsController({
Expand Down Expand Up @@ -948,6 +1009,12 @@
accounts: [mockAccount.address, mockAccount2.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -1003,6 +1070,12 @@
accounts: [mockAccount.address, mockAccount2.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};

messenger.publish(
Expand Down Expand Up @@ -1034,6 +1107,12 @@
accounts: [mockAccount2.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -1075,6 +1154,12 @@
accounts: [mockAccount.address, mockAccount2.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -1135,6 +1220,12 @@
accounts: [mockAccount.address, mockAccount2.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -1208,6 +1299,12 @@
],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -1278,6 +1375,12 @@
accounts: [mockAccount.address, mockAccount2.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
messenger.publish(
'KeyringController:stateChange',
Expand Down Expand Up @@ -1322,6 +1425,12 @@
accounts: [mockReinitialisedAccount.address],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
const { accountsController } = setupAccountsController({
initialState: {
Expand Down Expand Up @@ -1418,6 +1527,12 @@
],
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
],
};
messenger.publish(
'KeyringController:stateChange',
Expand Down Expand Up @@ -2694,6 +2809,16 @@
accounts: simpleAddressess,
},
],
keyringsMetadata: [
{
id: 'mock-id',
name: 'mock-name',
},
{
id: 'mock-id2',
name: 'mock-name2',
},
],
};
};

Expand Down
6 changes: 3 additions & 3 deletions packages/keyring-controller/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ module.exports = merge(baseConfig, {
// An object that configures minimum threshold enforcement for coverage results
coverageThreshold: {
global: {
branches: 94.26,
branches: 93.56,
functions: 100,
lines: 98.96,
statements: 98.98,
lines: 98.73,
statements: 98.74,
},
},

Expand Down
9 changes: 7 additions & 2 deletions packages/keyring-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@
"@metamask/utils": "^11.1.0",
"async-mutex": "^0.5.0",
"ethereumjs-wallet": "^1.0.1",
"immer": "^9.0.6"
"immer": "^9.0.6",
"ulid": "^2.3.0"
},
"devDependencies": {
"@ethereumjs/common": "^3.2.0",
Expand Down Expand Up @@ -89,6 +90,10 @@
"registry": "https://registry.npmjs.org/"
},
"lavamoat": {
"allowScripts": {}
"allowScripts": {
"@lavamoat/preinstall-always-fail": false,
"ethereumjs-wallet>ethereum-cryptography>keccak": false,
"ethereumjs-wallet>ethereum-cryptography>secp256k1": false
}
}
}
Loading
Loading