Skip to content
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

Support keyring metadata in KeyringController #5112

Merged
merged 38 commits into from
Feb 17, 2025
Merged

Support keyring metadata in KeyringController #5112

merged 38 commits into from
Feb 17, 2025

Conversation

PatrykLucka
Copy link
Contributor

@PatrykLucka PatrykLucka commented Jan 8, 2025

Explanation

Currently, we assume that the only HD Keyring is the Primary Keyring. Most methods related to adding accounts or displaying the SRP assume that it refers to the first keyring, which is the Primary Keyring. To enable having more than one SRP, and consequently more than one HD Keyring, this PR adds an array called keyringsMetadata, which contains an id that can be used to identify all keyrings and a proper place to keep other data we might want to add to each keyring such as name.

keyringsMetadata is a separate in order to minimize changes that we need to make to keyrings and the way we process them. We also can keep this data outside of the vault, as it's not storing any sensitive data.

References

Related to ADR 0002-keyring-id-and-name.md
Blocks Extension PR

Changelog

@metamask/keyring-controller

  • ADDED: { id: string } selector to withKeyring function
  • ADDED: optional keyringId param to addNewAccount function
  • ADDED: optional keyringId param to exportSeedPhrase function
  • ADDED: optional keyringId param to getAccounts function
  • ADDED: optional keyringId param to verifySeedPhrase function
  • ADDED: private #getKeyringById helper function
  • ADDED: optional keyringId param to #verifySeedPhrase function
  • ADDED: optional metadata param to #newKeyring function
  • ADDED: optional metadata param to #newKeyring function

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've highlighted breaking changes using the "BREAKING" category above as appropriate
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@PatrykLucka PatrykLucka self-assigned this Jan 8, 2025
@PatrykLucka
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

github-actions bot commented Jan 8, 2025

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "20.0.2-preview-e96ca40c",
  "@metamask-previews/address-book-controller": "6.0.2-preview-e96ca40c",
  "@metamask-previews/announcement-controller": "7.0.2-preview-e96ca40c",
  "@metamask-previews/approval-controller": "7.1.1-preview-e96ca40c",
  "@metamask-previews/assets-controllers": "45.1.2-preview-e96ca40c",
  "@metamask-previews/base-controller": "7.0.2-preview-e96ca40c",
  "@metamask-previews/build-utils": "3.0.2-preview-e96ca40c",
  "@metamask-previews/chain-controller": "0.2.2-preview-e96ca40c",
  "@metamask-previews/composable-controller": "10.0.0-preview-e96ca40c",
  "@metamask-previews/controller-utils": "11.4.4-preview-e96ca40c",
  "@metamask-previews/ens-controller": "15.0.1-preview-e96ca40c",
  "@metamask-previews/eth-json-rpc-provider": "4.1.6-preview-e96ca40c",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-e96ca40c",
  "@metamask-previews/json-rpc-engine": "10.0.1-preview-e96ca40c",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.5-preview-e96ca40c",
  "@metamask-previews/keyring-controller": "19.0.2-preview-e96ca40c",
  "@metamask-previews/logging-controller": "6.0.3-preview-e96ca40c",
  "@metamask-previews/message-manager": "11.0.3-preview-e96ca40c",
  "@metamask-previews/multichain": "1.1.2-preview-e96ca40c",
  "@metamask-previews/name-controller": "8.0.2-preview-e96ca40c",
  "@metamask-previews/network-controller": "22.1.1-preview-e96ca40c",
  "@metamask-previews/notification-services-controller": "0.15.0-preview-e96ca40c",
  "@metamask-previews/permission-controller": "11.0.4-preview-e96ca40c",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-e96ca40c",
  "@metamask-previews/phishing-controller": "12.3.1-preview-e96ca40c",
  "@metamask-previews/polling-controller": "12.0.2-preview-e96ca40c",
  "@metamask-previews/preferences-controller": "15.0.1-preview-e96ca40c",
  "@metamask-previews/profile-sync-controller": "3.1.1-preview-e96ca40c",
  "@metamask-previews/queued-request-controller": "8.0.2-preview-e96ca40c",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-e96ca40c",
  "@metamask-previews/remote-feature-flag-controller": "1.2.0-preview-e96ca40c",
  "@metamask-previews/selected-network-controller": "20.0.2-preview-e96ca40c",
  "@metamask-previews/signature-controller": "23.1.0-preview-e96ca40c",
  "@metamask-previews/transaction-controller": "42.0.0-preview-e96ca40c",
  "@metamask-previews/user-operation-controller": "21.0.0-preview-e96ca40c"
}

@PatrykLucka
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "20.0.2-preview-407f96d",
  "@metamask-previews/address-book-controller": "6.0.2-preview-407f96d",
  "@metamask-previews/announcement-controller": "7.0.2-preview-407f96d",
  "@metamask-previews/approval-controller": "7.1.1-preview-407f96d",
  "@metamask-previews/assets-controllers": "45.1.2-preview-407f96d",
  "@metamask-previews/base-controller": "7.1.0-preview-407f96d",
  "@metamask-previews/build-utils": "3.0.2-preview-407f96d",
  "@metamask-previews/chain-controller": "0.2.2-preview-407f96d",
  "@metamask-previews/composable-controller": "10.0.0-preview-407f96d",
  "@metamask-previews/controller-utils": "11.4.4-preview-407f96d",
  "@metamask-previews/ens-controller": "15.0.1-preview-407f96d",
  "@metamask-previews/eth-json-rpc-provider": "4.1.7-preview-407f96d",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-407f96d",
  "@metamask-previews/json-rpc-engine": "10.0.2-preview-407f96d",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.6-preview-407f96d",
  "@metamask-previews/keyring-controller": "19.0.2-preview-407f96d",
  "@metamask-previews/logging-controller": "6.0.3-preview-407f96d",
  "@metamask-previews/message-manager": "11.0.3-preview-407f96d",
  "@metamask-previews/multichain": "2.0.0-preview-407f96d",
  "@metamask-previews/name-controller": "8.0.2-preview-407f96d",
  "@metamask-previews/network-controller": "22.1.1-preview-407f96d",
  "@metamask-previews/notification-services-controller": "0.15.0-preview-407f96d",
  "@metamask-previews/permission-controller": "11.0.4-preview-407f96d",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-407f96d",
  "@metamask-previews/phishing-controller": "12.3.1-preview-407f96d",
  "@metamask-previews/polling-controller": "12.0.2-preview-407f96d",
  "@metamask-previews/preferences-controller": "15.0.1-preview-407f96d",
  "@metamask-previews/profile-sync-controller": "3.3.0-preview-407f96d",
  "@metamask-previews/queued-request-controller": "8.0.2-preview-407f96d",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-407f96d",
  "@metamask-previews/remote-feature-flag-controller": "1.3.0-preview-407f96d",
  "@metamask-previews/selected-network-controller": "20.0.2-preview-407f96d",
  "@metamask-previews/signature-controller": "23.2.0-preview-407f96d",
  "@metamask-previews/transaction-controller": "42.1.0-preview-407f96d",
  "@metamask-previews/user-operation-controller": "21.0.0-preview-407f96d"
}

@PatrykLucka PatrykLucka force-pushed the multi-srp-mvp branch 3 times, most recently from b9ca305 to 83c8a21 Compare January 17, 2025 10:44
@PatrykLucka
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "21.0.1-preview-83c8a21",
  "@metamask-previews/address-book-controller": "6.0.2-preview-83c8a21",
  "@metamask-previews/announcement-controller": "7.0.2-preview-83c8a21",
  "@metamask-previews/approval-controller": "7.1.2-preview-83c8a21",
  "@metamask-previews/assets-controllers": "46.0.0-preview-83c8a21",
  "@metamask-previews/base-controller": "7.1.1-preview-83c8a21",
  "@metamask-previews/build-utils": "3.0.2-preview-83c8a21",
  "@metamask-previews/composable-controller": "10.0.0-preview-83c8a21",
  "@metamask-previews/controller-utils": "11.4.5-preview-83c8a21",
  "@metamask-previews/ens-controller": "15.0.1-preview-83c8a21",
  "@metamask-previews/eth-json-rpc-provider": "4.1.7-preview-83c8a21",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-83c8a21",
  "@metamask-previews/json-rpc-engine": "10.0.2-preview-83c8a21",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.6-preview-83c8a21",
  "@metamask-previews/keyring-controller": "19.0.3-preview-83c8a21",
  "@metamask-previews/logging-controller": "6.0.3-preview-83c8a21",
  "@metamask-previews/message-manager": "12.0.0-preview-83c8a21",
  "@metamask-previews/multichain": "2.0.0-preview-83c8a21",
  "@metamask-previews/name-controller": "8.0.2-preview-83c8a21",
  "@metamask-previews/network-controller": "22.1.1-preview-83c8a21",
  "@metamask-previews/notification-services-controller": "0.16.0-preview-83c8a21",
  "@metamask-previews/permission-controller": "11.0.5-preview-83c8a21",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-83c8a21",
  "@metamask-previews/phishing-controller": "12.3.1-preview-83c8a21",
  "@metamask-previews/polling-controller": "12.0.2-preview-83c8a21",
  "@metamask-previews/preferences-controller": "15.0.1-preview-83c8a21",
  "@metamask-previews/profile-sync-controller": "4.1.0-preview-83c8a21",
  "@metamask-previews/queued-request-controller": "8.0.2-preview-83c8a21",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-83c8a21",
  "@metamask-previews/remote-feature-flag-controller": "1.3.0-preview-83c8a21",
  "@metamask-previews/selected-network-controller": "20.0.2-preview-83c8a21",
  "@metamask-previews/signature-controller": "23.2.0-preview-83c8a21",
  "@metamask-previews/transaction-controller": "43.0.0-preview-83c8a21",
  "@metamask-previews/user-operation-controller": "22.0.0-preview-83c8a21"
}

@PatrykLucka PatrykLucka marked this pull request as ready for review January 18, 2025 09:26
@PatrykLucka PatrykLucka requested review from a team as code owners January 18, 2025 09:26
@shane-t shane-t changed the title Multi srp mvp Support keyring metadata in KeyringController Jan 21, 2025
Copy link

@mirceanis mirceanis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's make sure the keyring metadata also bubbles up to the AccountsController events.
I believe this block would need an update for that to happen.

Also, do we expect 1 keyring ID === 1 SRP ?
or would we ever have multiple keyrings derived from 1 SRP?

@montelaidev
Copy link
Contributor

@metamaskbot publish-preview

1 similar comment
@montelaidev
Copy link
Contributor

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "21.0.1-preview-183f0b5a",
  "@metamask-previews/address-book-controller": "6.0.2-preview-183f0b5a",
  "@metamask-previews/announcement-controller": "7.0.2-preview-183f0b5a",
  "@metamask-previews/approval-controller": "7.1.2-preview-183f0b5a",
  "@metamask-previews/assets-controllers": "46.0.0-preview-183f0b5a",
  "@metamask-previews/base-controller": "7.1.1-preview-183f0b5a",
  "@metamask-previews/build-utils": "3.0.2-preview-183f0b5a",
  "@metamask-previews/composable-controller": "10.0.0-preview-183f0b5a",
  "@metamask-previews/controller-utils": "11.4.5-preview-183f0b5a",
  "@metamask-previews/ens-controller": "15.0.1-preview-183f0b5a",
  "@metamask-previews/eth-json-rpc-provider": "4.1.7-preview-183f0b5a",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-183f0b5a",
  "@metamask-previews/json-rpc-engine": "10.0.2-preview-183f0b5a",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.6-preview-183f0b5a",
  "@metamask-previews/keyring-controller": "19.0.3-preview-183f0b5a",
  "@metamask-previews/logging-controller": "6.0.3-preview-183f0b5a",
  "@metamask-previews/message-manager": "12.0.0-preview-183f0b5a",
  "@metamask-previews/multichain": "2.0.0-preview-183f0b5a",
  "@metamask-previews/name-controller": "8.0.2-preview-183f0b5a",
  "@metamask-previews/network-controller": "22.1.1-preview-183f0b5a",
  "@metamask-previews/notification-services-controller": "0.16.0-preview-183f0b5a",
  "@metamask-previews/permission-controller": "11.0.5-preview-183f0b5a",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-183f0b5a",
  "@metamask-previews/phishing-controller": "12.3.1-preview-183f0b5a",
  "@metamask-previews/polling-controller": "12.0.2-preview-183f0b5a",
  "@metamask-previews/preferences-controller": "15.0.1-preview-183f0b5a",
  "@metamask-previews/profile-sync-controller": "4.1.0-preview-183f0b5a",
  "@metamask-previews/queued-request-controller": "8.0.2-preview-183f0b5a",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-183f0b5a",
  "@metamask-previews/remote-feature-flag-controller": "1.3.0-preview-183f0b5a",
  "@metamask-previews/selected-network-controller": "20.0.2-preview-183f0b5a",
  "@metamask-previews/signature-controller": "23.2.0-preview-183f0b5a",
  "@metamask-previews/token-search-discovery-controller": "1.0.0-preview-183f0b5a",
  "@metamask-previews/transaction-controller": "43.0.0-preview-183f0b5a",
  "@metamask-previews/user-operation-controller": "22.0.0-preview-183f0b5a"
}

@PatrykLucka
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

github-actions bot commented Feb 5, 2025

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "21.0.1-preview-4c4eb52a",
  "@metamask-previews/address-book-controller": "6.0.2-preview-4c4eb52a",
  "@metamask-previews/announcement-controller": "7.0.2-preview-4c4eb52a",
  "@metamask-previews/approval-controller": "7.1.2-preview-4c4eb52a",
  "@metamask-previews/assets-controllers": "46.0.0-preview-4c4eb52a",
  "@metamask-previews/base-controller": "7.1.1-preview-4c4eb52a",
  "@metamask-previews/build-utils": "3.0.2-preview-4c4eb52a",
  "@metamask-previews/composable-controller": "10.0.0-preview-4c4eb52a",
  "@metamask-previews/controller-utils": "11.4.5-preview-4c4eb52a",
  "@metamask-previews/ens-controller": "15.0.1-preview-4c4eb52a",
  "@metamask-previews/eth-json-rpc-provider": "4.1.7-preview-4c4eb52a",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-4c4eb52a",
  "@metamask-previews/json-rpc-engine": "10.0.2-preview-4c4eb52a",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.6-preview-4c4eb52a",
  "@metamask-previews/keyring-controller": "19.0.3-preview-4c4eb52a",
  "@metamask-previews/logging-controller": "6.0.3-preview-4c4eb52a",
  "@metamask-previews/message-manager": "12.0.0-preview-4c4eb52a",
  "@metamask-previews/multichain": "2.0.0-preview-4c4eb52a",
  "@metamask-previews/name-controller": "8.0.2-preview-4c4eb52a",
  "@metamask-previews/network-controller": "22.1.1-preview-4c4eb52a",
  "@metamask-previews/notification-services-controller": "0.16.0-preview-4c4eb52a",
  "@metamask-previews/permission-controller": "11.0.5-preview-4c4eb52a",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-4c4eb52a",
  "@metamask-previews/phishing-controller": "12.3.1-preview-4c4eb52a",
  "@metamask-previews/polling-controller": "12.0.2-preview-4c4eb52a",
  "@metamask-previews/preferences-controller": "15.0.1-preview-4c4eb52a",
  "@metamask-previews/profile-sync-controller": "4.1.0-preview-4c4eb52a",
  "@metamask-previews/queued-request-controller": "8.0.2-preview-4c4eb52a",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-4c4eb52a",
  "@metamask-previews/remote-feature-flag-controller": "1.3.0-preview-4c4eb52a",
  "@metamask-previews/selected-network-controller": "20.0.2-preview-4c4eb52a",
  "@metamask-previews/signature-controller": "23.2.0-preview-4c4eb52a",
  "@metamask-previews/token-search-discovery-controller": "1.0.0-preview-4c4eb52a",
  "@metamask-previews/transaction-controller": "43.0.0-preview-4c4eb52a",
  "@metamask-previews/user-operation-controller": "22.0.0-preview-4c4eb52a"
}

@mikesposito
Copy link
Member

My understanding is that now, if removeAccount is called with the last account from the first (primary) HD keyring while there are two HD keyrings in the state, the primary keyring will be obliterated because the second one will still be going around this protection. Is this something that we want?

In either case, can we add a test case for the expected behavior?

PatrykLucka and others added 2 commits February 12, 2025 16:25
This is a suggestion on how to improve error handling for keyring metadata in
the PR #5112.
@PatrykLucka
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "23.1.0-preview-cb58d7d1",
  "@metamask-previews/address-book-controller": "6.0.3-preview-cb58d7d1",
  "@metamask-previews/announcement-controller": "7.0.3-preview-cb58d7d1",
  "@metamask-previews/approval-controller": "7.1.3-preview-cb58d7d1",
  "@metamask-previews/assets-controllers": "49.0.0-preview-cb58d7d1",
  "@metamask-previews/base-controller": "8.0.0-preview-cb58d7d1",
  "@metamask-previews/build-utils": "3.0.3-preview-cb58d7d1",
  "@metamask-previews/composable-controller": "11.0.0-preview-cb58d7d1",
  "@metamask-previews/controller-utils": "11.5.0-preview-cb58d7d1",
  "@metamask-previews/earn-controller": "0.2.1-preview-cb58d7d1",
  "@metamask-previews/ens-controller": "15.0.2-preview-cb58d7d1",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-cb58d7d1",
  "@metamask-previews/gas-fee-controller": "22.0.3-preview-cb58d7d1",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-cb58d7d1",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-cb58d7d1",
  "@metamask-previews/keyring-controller": "19.1.0-preview-cb58d7d1",
  "@metamask-previews/logging-controller": "6.0.4-preview-cb58d7d1",
  "@metamask-previews/message-manager": "12.0.1-preview-cb58d7d1",
  "@metamask-previews/multichain": "2.1.1-preview-cb58d7d1",
  "@metamask-previews/multichain-network-controller": "0.0.0-preview-cb58d7d1",
  "@metamask-previews/multichain-transactions-controller": "0.3.0-preview-cb58d7d1",
  "@metamask-previews/name-controller": "8.0.3-preview-cb58d7d1",
  "@metamask-previews/network-controller": "22.2.1-preview-cb58d7d1",
  "@metamask-previews/notification-services-controller": "0.20.1-preview-cb58d7d1",
  "@metamask-previews/permission-controller": "11.0.6-preview-cb58d7d1",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-cb58d7d1",
  "@metamask-previews/phishing-controller": "12.3.2-preview-cb58d7d1",
  "@metamask-previews/polling-controller": "12.0.3-preview-cb58d7d1",
  "@metamask-previews/preferences-controller": "15.0.2-preview-cb58d7d1",
  "@metamask-previews/profile-sync-controller": "7.0.1-preview-cb58d7d1",
  "@metamask-previews/queued-request-controller": "9.0.1-preview-cb58d7d1",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-cb58d7d1",
  "@metamask-previews/remote-feature-flag-controller": "1.4.0-preview-cb58d7d1",
  "@metamask-previews/selected-network-controller": "21.0.1-preview-cb58d7d1",
  "@metamask-previews/signature-controller": "23.2.1-preview-cb58d7d1",
  "@metamask-previews/token-search-discovery-controller": "2.1.0-preview-cb58d7d1",
  "@metamask-previews/transaction-controller": "45.1.0-preview-cb58d7d1",
  "@metamask-previews/user-operation-controller": "24.0.1-preview-cb58d7d1"
}

mikesposito
mikesposito previously approved these changes Feb 14, 2025
Copy link
Member

@mikesposito mikesposito left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM; great work and thanks for addressing all the comments!

@@ -213,6 +214,7 @@ export type AccountsControllerMessenger = RestrictedMessenger<
type AddressAndKeyringTypeObject = {
address: string;
type: string;
metadata: KeyringMetadata;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need this? I think it has no real use, so I would remove it if possible?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ccharly I'll have to re-re-read (😅) the PR but I think it could be of use for account syncing?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It could be useful indeed 🤔 even though, I'm not a fan of duplicating (kinda like mirroring, but here we truly are duplicating) state everywhere.

However, we must be careful with the metadata field, we do have a schema for the InternalAccount and "native accounts" (or also named "normal accounts") which includes simple + HD keyring accounts, will also be re-created as InternalAccount in the updateAccounts method of this controller.

This controller re-creates internally its list of accounts based on keyring's accounts.

And I think having a "flat" KeyringMetadata here is not ideal. I would maybe add an intermediary field for this, like keyringMetadata maybe? It could also introduces conflicts and overwrites potentially, because of this logic:

BTW, here's the list of "known metadata":

WDYT @montelaidev? @PatrykLucka is this already being used elsewhere in some other PRs?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For now, the goal is to make it easier to find the keyring of a specific account. Since we can have multiple HD keyrings, it's now easier to query them by id. However, we will soon need to add entropySourceId, which will be essential to support multiple SRPs for snaps.

Copy link
Member

@shane-t shane-t Feb 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

entropySourceId at the moment (though this doesn't exist in our code anywhere, only in our Architecture) is in account.options

The reasoning here is that an account snap can set this during the AccountCreated event (see this line here in "Multi-SRP for preinstalled account snaps"

I'm not sure if this helps, just feel like it's the right time to highlight it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think your comment is on point actually @shane-t! That makes sense for Snap accounts, but to my knowledge, we don't have any use of the options bag for the "normal accounts". So IDK if we'll follow the same logic for those, but this we have to be decided (if not already 🙈).

My comment here, was more about being careful of adding some new information to the metadata object (because of the way InternalAccount are being re-created internally).

Also, after checking the accounts state, I'd say that metadata.keyring.id might be the safest option here (but could be a bit more tricky to implement).

My recommendation here would be to remove this keyringMetadata from the logic of this PR if we don't use it now.

We can always follow-up with a 2nd PR to re-introduce this if needed (but we'll have to discuss and add more tests to make sure nothing gets overwritten or cause conflicts).

WDYT @shane-t @PatrykLucka?

Copy link
Member

@shane-t shane-t Feb 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. As I understand it though, we have to find some way for @mathieuartu to read the keyring ID for eth-hd-keyring account related events, right?

I might be off here, but the type that's needed in, is whatever type represents the event paylioad

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need some form of metadata about the source of the account in the accountAdded/accountRenamed events to be able to perform account sync properly.
If we can get that information by some other means, please guide us to it.

A second PR would also be acceptable as long as it's within a similar timeframe.
Without this, we won't be able to filter events properly and you'll end up with a new account on your primary SRP every time a new account is added elsewhere.

Copy link
Member

@mikesposito mikesposito Feb 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For now, the goal is to make it easier to find the keyring of a specific account

@PatrykLucka could you elaborate on that? since withKeyring can be used with the { address } selector, isn't the account itself enough to access the keyring it belongs to?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to close up this thread, it has been decided to not inject those metadata for the moment. Account syncing will be addressed later with the addition of entropySource (see SIP-30).

Copy link

socket-security bot commented Feb 17, 2025

New dependencies detected. Learn more about Socket for GitHub ↗︎

Package New capabilities Transitives Size Publisher
npm/[email protected] None 0 23 kB alizain

View full report↗︎

@shane-t shane-t requested a review from ccharly February 17, 2025 15:12
@PatrykLucka PatrykLucka enabled auto-merge (squash) February 17, 2025 16:10
@PatrykLucka PatrykLucka merged commit 1380220 into main Feb 17, 2025
133 checks passed
@PatrykLucka PatrykLucka deleted the multi-srp-mvp branch February 17, 2025 16:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants