Skip to content

feat(backup & sync): use entropySourceId to sync accounts for Multi-SRP #5753

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 26 commits into from
Jun 3, 2025

Conversation

mirceanis
Copy link
Contributor

@mirceanis mirceanis commented May 2, 2025

Explanation

This is a first pass at syncing account data for each SRP.
This PR adds an optional entropySourceId param to all methods that might use it, and then uses it for account-syncing.

Following #5618 we have extra options available on InternalAccount objects; entropySource and derivationPath.
We can use these to properly segregate account data for multi-SRP.

This PR does not introduce breaking changes to the API, but to be able to get the benefits we still need the clients to cooperate, so some changes are needed there too.

  • Proposal for a later PR: it might be easier to replace the spray of entropySourceId params in the user-storage sdk/controller with multiple this.config.auth instances, or something along those lines.
    • the SRP JWT bearer authenticator can have multiple instances; each instance could use a class member entropySourceId instead of needing an update to all method params
    • the Auth controller is a singleton, this means its methods will need to accept entropySourceId parameters
    • not sure yet if these can be reconciled; perhaps the controller can maintain multiple instances of the SDK authenticators
    • will solve these in later passes

Subtasks

  • (EXTENSION) on performSignIn, list entropy sources, login for each
  • (EXTENSION) Hook to the srp added event to create another auth session and bind it to the srp id
  • (EXTENSION) Fix conflict for first account being renamed when importing a new SRP
  • (EXTENSION + CORE) Implement working multi-auth management
  • (EXTENSION + CORE) Implement working multi-SRP account syncing
  • Remove duplicate getIdentifier call
  • Deprecate sessionData and use srpSessionData instead
  • Add calls to updateAccounts before each sync to refresh entropySource when missing
  • filter listAccounts to get accounts by entropySourceId
  • Implement entropySourceId based big sync (multiple sequential big syncs)
  • Fix fixtures and CI
  • Add new tests to cover multi SRP auth
  • Add new tests to cover multi SRP account syncing
  • Verify with smart accounts? (not especially relevant to multi-SRP though)
  • Enhance auth mockResponses for client E2E environments to support mocked multi-SRP auth & storage
  • (EXTENSION) Add new E2E framework that support multi-auth/SRP
  • (EXTENSION) Add multi SRP account syncing E2E test case
  • (MOBILE) Add new E2E framework that support multi-auth/SRP
  • (MOBILE) Add multi SRP account syncing E2E test case

References

Fixes:

Related to:

Changelog

Checklist

@mathieuartu
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": "28.0.0-preview-5cc6dab9",
  "@metamask-previews/address-book-controller": "6.0.3-preview-5cc6dab9",
  "@metamask-previews/announcement-controller": "7.0.3-preview-5cc6dab9",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-5cc6dab9",
  "@metamask-previews/approval-controller": "7.1.3-preview-5cc6dab9",
  "@metamask-previews/assets-controllers": "62.0.0-preview-5cc6dab9",
  "@metamask-previews/base-controller": "8.0.1-preview-5cc6dab9",
  "@metamask-previews/bridge-controller": "24.0.0-preview-5cc6dab9",
  "@metamask-previews/bridge-status-controller": "20.1.0-preview-5cc6dab9",
  "@metamask-previews/build-utils": "3.0.3-preview-5cc6dab9",
  "@metamask-previews/chain-agnostic-permission": "0.6.0-preview-5cc6dab9",
  "@metamask-previews/composable-controller": "11.0.0-preview-5cc6dab9",
  "@metamask-previews/controller-utils": "11.8.0-preview-5cc6dab9",
  "@metamask-previews/delegation-controller": "0.2.0-preview-5cc6dab9",
  "@metamask-previews/earn-controller": "0.13.0-preview-5cc6dab9",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-5cc6dab9",
  "@metamask-previews/ens-controller": "16.0.0-preview-5cc6dab9",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-5cc6dab9",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-5cc6dab9",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-5cc6dab9",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-5cc6dab9",
  "@metamask-previews/keyring-controller": "21.0.6-preview-5cc6dab9",
  "@metamask-previews/logging-controller": "6.0.4-preview-5cc6dab9",
  "@metamask-previews/message-manager": "12.0.1-preview-5cc6dab9",
  "@metamask-previews/multichain": "4.0.0-preview-5cc6dab9",
  "@metamask-previews/multichain-api-middleware": "0.2.0-preview-5cc6dab9",
  "@metamask-previews/multichain-network-controller": "0.6.0-preview-5cc6dab9",
  "@metamask-previews/multichain-transactions-controller": "0.10.0-preview-5cc6dab9",
  "@metamask-previews/name-controller": "8.0.3-preview-5cc6dab9",
  "@metamask-previews/network-controller": "23.4.0-preview-5cc6dab9",
  "@metamask-previews/notification-services-controller": "7.0.0-preview-5cc6dab9",
  "@metamask-previews/permission-controller": "11.0.6-preview-5cc6dab9",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-5cc6dab9",
  "@metamask-previews/phishing-controller": "12.5.0-preview-5cc6dab9",
  "@metamask-previews/polling-controller": "13.0.0-preview-5cc6dab9",
  "@metamask-previews/preferences-controller": "17.0.0-preview-5cc6dab9",
  "@metamask-previews/profile-sync-controller": "14.0.0-preview-5cc6dab9",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-5cc6dab9",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-5cc6dab9",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-5cc6dab9",
  "@metamask-previews/sample-controllers": "0.1.0-preview-5cc6dab9",
  "@metamask-previews/selected-network-controller": "22.0.0-preview-5cc6dab9",
  "@metamask-previews/signature-controller": "28.0.0-preview-5cc6dab9",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-5cc6dab9",
  "@metamask-previews/transaction-controller": "55.0.2-preview-5cc6dab9",
  "@metamask-previews/user-operation-controller": "34.0.0-preview-5cc6dab9"
}

@mathieuartu
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": "28.0.0-preview-6a340ce8",
  "@metamask-previews/address-book-controller": "6.0.3-preview-6a340ce8",
  "@metamask-previews/announcement-controller": "7.0.3-preview-6a340ce8",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-6a340ce8",
  "@metamask-previews/approval-controller": "7.1.3-preview-6a340ce8",
  "@metamask-previews/assets-controllers": "62.0.0-preview-6a340ce8",
  "@metamask-previews/base-controller": "8.0.1-preview-6a340ce8",
  "@metamask-previews/bridge-controller": "24.0.0-preview-6a340ce8",
  "@metamask-previews/bridge-status-controller": "20.1.0-preview-6a340ce8",
  "@metamask-previews/build-utils": "3.0.3-preview-6a340ce8",
  "@metamask-previews/chain-agnostic-permission": "0.6.0-preview-6a340ce8",
  "@metamask-previews/composable-controller": "11.0.0-preview-6a340ce8",
  "@metamask-previews/controller-utils": "11.8.0-preview-6a340ce8",
  "@metamask-previews/delegation-controller": "0.2.0-preview-6a340ce8",
  "@metamask-previews/earn-controller": "0.13.0-preview-6a340ce8",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-6a340ce8",
  "@metamask-previews/ens-controller": "16.0.0-preview-6a340ce8",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-6a340ce8",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-6a340ce8",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-6a340ce8",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-6a340ce8",
  "@metamask-previews/keyring-controller": "21.0.6-preview-6a340ce8",
  "@metamask-previews/logging-controller": "6.0.4-preview-6a340ce8",
  "@metamask-previews/message-manager": "12.0.1-preview-6a340ce8",
  "@metamask-previews/multichain": "4.0.0-preview-6a340ce8",
  "@metamask-previews/multichain-api-middleware": "0.2.0-preview-6a340ce8",
  "@metamask-previews/multichain-network-controller": "0.6.0-preview-6a340ce8",
  "@metamask-previews/multichain-transactions-controller": "0.10.0-preview-6a340ce8",
  "@metamask-previews/name-controller": "8.0.3-preview-6a340ce8",
  "@metamask-previews/network-controller": "23.4.0-preview-6a340ce8",
  "@metamask-previews/notification-services-controller": "7.0.0-preview-6a340ce8",
  "@metamask-previews/permission-controller": "11.0.6-preview-6a340ce8",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-6a340ce8",
  "@metamask-previews/phishing-controller": "12.5.0-preview-6a340ce8",
  "@metamask-previews/polling-controller": "13.0.0-preview-6a340ce8",
  "@metamask-previews/preferences-controller": "17.0.0-preview-6a340ce8",
  "@metamask-previews/profile-sync-controller": "14.0.0-preview-6a340ce8",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-6a340ce8",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-6a340ce8",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-6a340ce8",
  "@metamask-previews/sample-controllers": "0.1.0-preview-6a340ce8",
  "@metamask-previews/selected-network-controller": "22.0.0-preview-6a340ce8",
  "@metamask-previews/signature-controller": "28.0.0-preview-6a340ce8",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-6a340ce8",
  "@metamask-previews/transaction-controller": "55.0.2-preview-6a340ce8",
  "@metamask-previews/user-operation-controller": "34.0.0-preview-6a340ce8"
}

@mathieuartu
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": "29.0.0-preview-646215b8",
  "@metamask-previews/address-book-controller": "6.0.3-preview-646215b8",
  "@metamask-previews/announcement-controller": "7.0.3-preview-646215b8",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-646215b8",
  "@metamask-previews/approval-controller": "7.1.3-preview-646215b8",
  "@metamask-previews/assets-controllers": "63.0.0-preview-646215b8",
  "@metamask-previews/base-controller": "8.0.1-preview-646215b8",
  "@metamask-previews/bridge-controller": "25.0.1-preview-646215b8",
  "@metamask-previews/bridge-status-controller": "21.0.0-preview-646215b8",
  "@metamask-previews/build-utils": "3.0.3-preview-646215b8",
  "@metamask-previews/chain-agnostic-permission": "0.6.0-preview-646215b8",
  "@metamask-previews/composable-controller": "11.0.0-preview-646215b8",
  "@metamask-previews/controller-utils": "11.9.0-preview-646215b8",
  "@metamask-previews/delegation-controller": "0.3.0-preview-646215b8",
  "@metamask-previews/earn-controller": "0.14.0-preview-646215b8",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-646215b8",
  "@metamask-previews/ens-controller": "16.0.0-preview-646215b8",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-646215b8",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-646215b8",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-646215b8",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-646215b8",
  "@metamask-previews/keyring-controller": "22.0.0-preview-646215b8",
  "@metamask-previews/logging-controller": "6.0.4-preview-646215b8",
  "@metamask-previews/message-manager": "12.0.1-preview-646215b8",
  "@metamask-previews/multichain": "4.0.0-preview-646215b8",
  "@metamask-previews/multichain-api-middleware": "0.2.0-preview-646215b8",
  "@metamask-previews/multichain-network-controller": "0.7.0-preview-646215b8",
  "@metamask-previews/multichain-transactions-controller": "0.11.0-preview-646215b8",
  "@metamask-previews/name-controller": "8.0.3-preview-646215b8",
  "@metamask-previews/network-controller": "23.5.0-preview-646215b8",
  "@metamask-previews/notification-services-controller": "8.0.0-preview-646215b8",
  "@metamask-previews/permission-controller": "11.0.6-preview-646215b8",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-646215b8",
  "@metamask-previews/phishing-controller": "12.5.0-preview-646215b8",
  "@metamask-previews/polling-controller": "13.0.0-preview-646215b8",
  "@metamask-previews/preferences-controller": "18.0.0-preview-646215b8",
  "@metamask-previews/profile-sync-controller": "15.0.0-preview-646215b8",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-646215b8",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-646215b8",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-646215b8",
  "@metamask-previews/sample-controllers": "0.1.0-preview-646215b8",
  "@metamask-previews/selected-network-controller": "22.0.0-preview-646215b8",
  "@metamask-previews/signature-controller": "29.0.0-preview-646215b8",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-646215b8",
  "@metamask-previews/transaction-controller": "56.1.0-preview-646215b8",
  "@metamask-previews/user-operation-controller": "35.0.0-preview-646215b8"
}

@mathieuartu
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": "29.0.0-preview-0c874fe4",
  "@metamask-previews/address-book-controller": "6.0.3-preview-0c874fe4",
  "@metamask-previews/announcement-controller": "7.0.3-preview-0c874fe4",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-0c874fe4",
  "@metamask-previews/approval-controller": "7.1.3-preview-0c874fe4",
  "@metamask-previews/assets-controllers": "63.0.0-preview-0c874fe4",
  "@metamask-previews/base-controller": "8.0.1-preview-0c874fe4",
  "@metamask-previews/bridge-controller": "25.0.1-preview-0c874fe4",
  "@metamask-previews/bridge-status-controller": "21.0.0-preview-0c874fe4",
  "@metamask-previews/build-utils": "3.0.3-preview-0c874fe4",
  "@metamask-previews/chain-agnostic-permission": "0.6.0-preview-0c874fe4",
  "@metamask-previews/composable-controller": "11.0.0-preview-0c874fe4",
  "@metamask-previews/controller-utils": "11.9.0-preview-0c874fe4",
  "@metamask-previews/delegation-controller": "0.3.0-preview-0c874fe4",
  "@metamask-previews/earn-controller": "0.14.0-preview-0c874fe4",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-0c874fe4",
  "@metamask-previews/ens-controller": "16.0.0-preview-0c874fe4",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-0c874fe4",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-0c874fe4",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-0c874fe4",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-0c874fe4",
  "@metamask-previews/keyring-controller": "22.0.0-preview-0c874fe4",
  "@metamask-previews/logging-controller": "6.0.4-preview-0c874fe4",
  "@metamask-previews/message-manager": "12.0.1-preview-0c874fe4",
  "@metamask-previews/multichain": "4.0.0-preview-0c874fe4",
  "@metamask-previews/multichain-api-middleware": "0.2.0-preview-0c874fe4",
  "@metamask-previews/multichain-network-controller": "0.7.0-preview-0c874fe4",
  "@metamask-previews/multichain-transactions-controller": "0.11.0-preview-0c874fe4",
  "@metamask-previews/name-controller": "8.0.3-preview-0c874fe4",
  "@metamask-previews/network-controller": "23.5.0-preview-0c874fe4",
  "@metamask-previews/notification-services-controller": "8.0.0-preview-0c874fe4",
  "@metamask-previews/permission-controller": "11.0.6-preview-0c874fe4",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-0c874fe4",
  "@metamask-previews/phishing-controller": "12.5.0-preview-0c874fe4",
  "@metamask-previews/polling-controller": "13.0.0-preview-0c874fe4",
  "@metamask-previews/preferences-controller": "18.0.0-preview-0c874fe4",
  "@metamask-previews/profile-sync-controller": "15.0.0-preview-0c874fe4",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-0c874fe4",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-0c874fe4",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-0c874fe4",
  "@metamask-previews/sample-controllers": "0.1.0-preview-0c874fe4",
  "@metamask-previews/selected-network-controller": "22.0.0-preview-0c874fe4",
  "@metamask-previews/signature-controller": "29.0.0-preview-0c874fe4",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-0c874fe4",
  "@metamask-previews/transaction-controller": "56.1.0-preview-0c874fe4",
  "@metamask-previews/user-operation-controller": "35.0.0-preview-0c874fe4"
}

mirceanis added a commit that referenced this pull request May 21, 2025
`AccountsController:accountAdded` events were missing the `.options.entropySource` property, causing account syncing to misbehave.

Relates to #5618
Relates to #5725
Relates to #5753
mirceanis added a commit that referenced this pull request May 22, 2025
…t` (#5841)

## Explanation

`AccountsController:accountAdded` events were missing the
`.options.entropySource` property, causing account syncing to misbehave,
registering new accounts to the primary SRP instead of the actual SRP
used to add the account.

We now add the `entropySource` to these new `InternalAccount`s based on
the `keyring` that was used to create them.

## References
Relates to #5618
Relates to #5725
Relates to #5753
@mathieuartu
Copy link
Contributor

@metamaskbot publish-preview

Copy link
Contributor Author

@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.

@mathieuartu I added a bunch of notes and questions. Please take a look 🙏

@mathieuartu
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": "29.0.0-preview-f6dbfb00",
  "@metamask-previews/address-book-controller": "6.0.3-preview-f6dbfb00",
  "@metamask-previews/announcement-controller": "7.0.3-preview-f6dbfb00",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-f6dbfb00",
  "@metamask-previews/approval-controller": "7.1.3-preview-f6dbfb00",
  "@metamask-previews/assets-controllers": "63.0.0-preview-f6dbfb00",
  "@metamask-previews/base-controller": "8.0.1-preview-f6dbfb00",
  "@metamask-previews/bridge-controller": "26.0.0-preview-f6dbfb00",
  "@metamask-previews/bridge-status-controller": "23.0.0-preview-f6dbfb00",
  "@metamask-previews/build-utils": "3.0.3-preview-f6dbfb00",
  "@metamask-previews/chain-agnostic-permission": "0.7.0-preview-f6dbfb00",
  "@metamask-previews/composable-controller": "11.0.0-preview-f6dbfb00",
  "@metamask-previews/controller-utils": "11.9.0-preview-f6dbfb00",
  "@metamask-previews/delegation-controller": "0.3.0-preview-f6dbfb00",
  "@metamask-previews/earn-controller": "0.14.0-preview-f6dbfb00",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-f6dbfb00",
  "@metamask-previews/ens-controller": "16.0.0-preview-f6dbfb00",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-f6dbfb00",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-f6dbfb00",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-f6dbfb00",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-f6dbfb00",
  "@metamask-previews/keyring-controller": "22.0.0-preview-f6dbfb00",
  "@metamask-previews/logging-controller": "6.0.4-preview-f6dbfb00",
  "@metamask-previews/message-manager": "12.0.1-preview-f6dbfb00",
  "@metamask-previews/multichain": "4.1.0-preview-f6dbfb00",
  "@metamask-previews/multichain-api-middleware": "0.3.0-preview-f6dbfb00",
  "@metamask-previews/multichain-network-controller": "0.7.0-preview-f6dbfb00",
  "@metamask-previews/multichain-transactions-controller": "1.0.0-preview-f6dbfb00",
  "@metamask-previews/name-controller": "8.0.3-preview-f6dbfb00",
  "@metamask-previews/network-controller": "23.5.0-preview-f6dbfb00",
  "@metamask-previews/notification-services-controller": "8.0.0-preview-f6dbfb00",
  "@metamask-previews/permission-controller": "11.0.6-preview-f6dbfb00",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-f6dbfb00",
  "@metamask-previews/phishing-controller": "12.5.0-preview-f6dbfb00",
  "@metamask-previews/polling-controller": "13.0.0-preview-f6dbfb00",
  "@metamask-previews/preferences-controller": "18.0.0-preview-f6dbfb00",
  "@metamask-previews/profile-sync-controller": "15.0.0-preview-f6dbfb00",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-f6dbfb00",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-f6dbfb00",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-f6dbfb00",
  "@metamask-previews/sample-controllers": "0.1.0-preview-f6dbfb00",
  "@metamask-previews/selected-network-controller": "22.1.0-preview-f6dbfb00",
  "@metamask-previews/signature-controller": "29.0.0-preview-f6dbfb00",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-f6dbfb00",
  "@metamask-previews/transaction-controller": "56.2.0-preview-f6dbfb00",
  "@metamask-previews/user-operation-controller": "35.0.0-preview-f6dbfb00"
}

@mirceanis mirceanis added team-identity Identity Team changes. https://github.com/orgs/MetaMask/teams/identity and removed no-changelog labels May 22, 2025
@mathieuartu mathieuartu marked this pull request as ready for review June 3, 2025 07:59
@mathieuartu mathieuartu requested review from a team as code owners June 3, 2025 07:59
Copy link
Contributor

@mathieuartu mathieuartu left a comment

Choose a reason for hiding this comment

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

Approving @mirceanis changes, while also approving my changes on behalf of @mirceanis

@mathieuartu mathieuartu merged commit 9270c7e into main Jun 3, 2025
210 checks passed
@mathieuartu mathieuartu deleted the use-entropySourceId-for-account-sync branch June 3, 2025 09:54
github-merge-queue bot pushed a commit to MetaMask/metamask-extension that referenced this pull request Jun 11, 2025
## **Description**

This PR implements the core changes seen in [this
PR](MetaMask/core#5753).
In short, this changes the implementation of `AuthenticationController`
so that it can manage parallel sessions based on `entropySource`.
In turn, this addition permits `UserStorageController` to scope user
storage requests to a specific `entropySource`.

Using all those changes, account syncing now iterates over each
`entropySource` present in the client and syncs accounts in consequence.
This will ensure that each SRP has its own data, that can be synced
independently of the context (e.g Device 1 (SRP 1 + SRP 2), Device 2
(SRP 2 only) will bi-directionally sync).

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32951?quickstart=1)

## **Related issues**

Fixes:
- https://consensyssoftware.atlassian.net/browse/IDENTITY-43
- https://consensyssoftware.atlassian.net/browse/IDENTITY-102

## **Manual testing steps**

1. Import or create an SRP, complete onboarding, add and rename an EVM
account
2. Import a second SRP, add and rename an EVM account
3. Uninstall and reinstall extension, onboard with one or both previous
SRPs
4. Verify that EVM accounts are restored

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

---------

Co-authored-by: MetaMask Bot <[email protected]>
github-merge-queue bot pushed a commit to MetaMask/metamask-mobile that referenced this pull request Jun 12, 2025
## **Description**

This PR implements the core changes seen in [this
PR](MetaMask/core#5753).
In short, this changes the implementation of `AuthenticationController`
so that it can manage parallel sessions based on `entropySource`.
In turn, this addition permits `UserStorageController` to scope user
storage requests to a specific `entropySource`.

Using all those changes, account syncing now iterates over each
`entropySource` present in the client and syncs accounts in consequence.
This will ensure that each SRP has its own data, that can be synced
independently of the context (e.g Device 1 (SRP 1 + SRP 2), Device 2
(SRP 2 only) will bi-directionally sync).

## **Related issues**

Fixes:
- https://consensyssoftware.atlassian.net/browse/IDENTITY-43
- https://consensyssoftware.atlassian.net/browse/IDENTITY-102

## **Manual testing steps**

1. Import or create an SRP, complete onboarding, add and rename an EVM
account
2. Import a second SRP, add and rename an EVM account
3. Uninstall and reinstall extension, onboard with one or both previous
SRPs
4. Verify that EVM accounts are restored

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
team-identity Identity Team changes. https://github.com/orgs/MetaMask/teams/identity
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants