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

feat: Add CAIP-25 permission and adapters to @metamask/multichain #4784

Merged
merged 169 commits into from
Nov 13, 2024

Conversation

jiexi
Copy link
Contributor

@jiexi jiexi commented Oct 10, 2024

Explanation

This PR updates @metamask/multichain to provide types, CAIP-25 permission, and helpers/adapters for the new permission, which can be shared across the extension & mobile clients.

These tools and utilities will be used in both clients (mobile + extension)'s multichain API implementations.

File Overview

  • packages/multichain/src/adapters/: Helpers that get and set legacy permission values from and to the new CAIP-25 permission
  • packages/multichain/src/caip25Permission.ts: Constants, types, mutators, and a specification builder for a CAIP-25 permission
  • packages/multichain/src/index.ts: Barrel export
  • packages/multichain/src/scope/: Types for CAIP-217 and our internal normalized/flattened version of them. Additionally contains helpers for validating shape, normalizing/merging, and checking support (i.e. if the wallet is able to serve the chain with it's requested methods and notifications)

References

Upstream: #4812
Downstream: #4813

Key Multichain API Standards implemented here:

Open PR that uses this new package for migrating the legacy permissions to CAIP-25 permission in the extension: MetaMask/metamask-extension#27847

Changelog

@metamask/multichain

  • ADDED: TODO

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

@jiexi jiexi requested a review from a team as a code owner October 10, 2024 22:49
@jiexi jiexi marked this pull request as draft October 10, 2024 22:49
jiexi and others added 3 commits October 10, 2024 15:54
## Explanation
This PR fixes a lot of the linting and typescript errors. still some
left but this covers a lot of it.


<!--
Thanks for your contribution! Take a moment to answer these questions so
that reviewers have the information they need to properly understand
your changes:

* What is the current state of things and why does it need to change?
* What is the solution your changes offer and how does it work?
* Are there any changes whose purpose might not obvious to those
unfamiliar with the domain?
* If your primary goal was to update one package but you found you had
to update another one along the way, why did you do so?
* If you had to upgrade a dependency, why did you do so?
-->

## References

<!--
Are there any issues that this pull request is tied to?
Are there other links that reviewers should consult to understand these
changes better?
Are there client or consumer pull requests to adopt any breaking
changes?

For example:

* Fixes #12345
* Related to #67890
-->

## Changelog

<!--
If you're making any consumer-facing changes, list those changes here as
if you were updating a changelog, using the template below as a guide.

(CATEGORY is one of BREAKING, ADDED, CHANGED, DEPRECATED, REMOVED, or
FIXED. For security-related issues, follow the Security Advisory
process.)

Please take care to name the exact pieces of the API you've added or
changed (e.g. types, interfaces, functions, or methods).

If there are any breaking changes, make sure to offer a solution for
consumers to follow once they upgrade to the changes.

Finally, if you're only making changes to development scripts or tests,
you may replace the template below with "None".
-->

### `@metamask/package-a`

- **<CATEGORY>**: Your change here
- **<CATEGORY>**: Your change here

### `@metamask/package-b`

- **<CATEGORY>**: Your change here
- **<CATEGORY>**: Your change here

## 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

---------

Co-authored-by: Jiexi Luan <[email protected]>
## Explanation

<!--
Thanks for your contribution! Take a moment to answer these questions so
that reviewers have the information they need to properly understand
your changes:

* What is the current state of things and why does it need to change?
* What is the solution your changes offer and how does it work?
* Are there any changes whose purpose might not obvious to those
unfamiliar with the domain?
* If your primary goal was to update one package but you found you had
to update another one along the way, why did you do so?
* If you had to upgrade a dependency, why did you do so?
-->
Added ESM exports for multichain package

## References

<!--
Are there any issues that this pull request is tied to?
Are there other links that reviewers should consult to understand these
changes better?
Are there client or consumer pull requests to adopt any breaking
changes?

For example:

* Fixes #12345
* Related to #67890
-->

## Changelog

<!--
If you're making any consumer-facing changes, list those changes here as
if you were updating a changelog, using the template below as a guide.

(CATEGORY is one of BREAKING, ADDED, CHANGED, DEPRECATED, REMOVED, or
FIXED. For security-related issues, follow the Security Advisory
process.)

Please take care to name the exact pieces of the API you've added or
changed (e.g. types, interfaces, functions, or methods).

If there are any breaking changes, make sure to offer a solution for
consumers to follow once they upgrade to the changes.

Finally, if you're only making changes to development scripts or tests,
you may replace the template below with "None".
-->

### `@metamask/package-a`

- **<CATEGORY>**: Your change here
- **<CATEGORY>**: Your change here

### `@metamask/package-b`

- **<CATEGORY>**: Your change here
- **<CATEGORY>**: Your change here

## 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
@jiexi
Copy link
Contributor Author

jiexi commented Oct 11, 2024

@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": "18.2.2-preview-85a723e",
  "@metamask-previews/address-book-controller": "6.0.1-preview-85a723e",
  "@metamask-previews/announcement-controller": "7.0.1-preview-85a723e",
  "@metamask-previews/approval-controller": "7.1.0-preview-85a723e",
  "@metamask-previews/assets-controllers": "38.3.0-preview-85a723e",
  "@metamask-previews/base-controller": "7.0.1-preview-85a723e",
  "@metamask-previews/build-utils": "3.0.1-preview-85a723e",
  "@metamask-previews/chain-controller": "0.1.3-preview-85a723e",
  "@metamask-previews/composable-controller": "9.0.1-preview-85a723e",
  "@metamask-previews/controller-utils": "11.3.0-preview-85a723e",
  "@metamask-previews/ens-controller": "14.0.1-preview-85a723e",
  "@metamask-previews/eth-json-rpc-provider": "4.1.4-preview-85a723e",
  "@metamask-previews/gas-fee-controller": "20.0.1-preview-85a723e",
  "@metamask-previews/json-rpc-engine": "9.0.3-preview-85a723e",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.3-preview-85a723e",
  "@metamask-previews/keyring-controller": "17.2.2-preview-85a723e",
  "@metamask-previews/logging-controller": "6.0.1-preview-85a723e",
  "@metamask-previews/message-manager": "10.1.1-preview-85a723e",
  "@metamask-previews/multichain": "0.0.0-preview-85a723e",
  "@metamask-previews/name-controller": "8.0.1-preview-85a723e",
  "@metamask-previews/network-controller": "21.0.1-preview-85a723e",
  "@metamask-previews/notification-controller": "7.0.0-preview-85a723e",
  "@metamask-previews/notification-services-controller": "0.9.0-preview-85a723e",
  "@metamask-previews/permission-controller": "11.0.2-preview-85a723e",
  "@metamask-previews/permission-log-controller": "3.0.1-preview-85a723e",
  "@metamask-previews/phishing-controller": "12.0.3-preview-85a723e",
  "@metamask-previews/polling-controller": "10.0.1-preview-85a723e",
  "@metamask-previews/preferences-controller": "13.0.3-preview-85a723e",
  "@metamask-previews/profile-sync-controller": "0.9.7-preview-85a723e",
  "@metamask-previews/queued-request-controller": "5.1.0-preview-85a723e",
  "@metamask-previews/rate-limit-controller": "6.0.1-preview-85a723e",
  "@metamask-previews/selected-network-controller": "18.0.1-preview-85a723e",
  "@metamask-previews/signature-controller": "19.1.0-preview-85a723e",
  "@metamask-previews/transaction-controller": "37.2.0-preview-85a723e",
  "@metamask-previews/user-operation-controller": "15.0.1-preview-85a723e"
}

@jiexi
Copy link
Contributor Author

jiexi commented Oct 11, 2024

@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": "18.2.2-preview-a0bb278",
  "@metamask-previews/address-book-controller": "6.0.1-preview-a0bb278",
  "@metamask-previews/announcement-controller": "7.0.1-preview-a0bb278",
  "@metamask-previews/approval-controller": "7.1.0-preview-a0bb278",
  "@metamask-previews/assets-controllers": "38.3.0-preview-a0bb278",
  "@metamask-previews/base-controller": "7.0.1-preview-a0bb278",
  "@metamask-previews/build-utils": "3.0.1-preview-a0bb278",
  "@metamask-previews/chain-controller": "0.1.3-preview-a0bb278",
  "@metamask-previews/composable-controller": "9.0.1-preview-a0bb278",
  "@metamask-previews/controller-utils": "11.3.0-preview-a0bb278",
  "@metamask-previews/ens-controller": "14.0.1-preview-a0bb278",
  "@metamask-previews/eth-json-rpc-provider": "4.1.4-preview-a0bb278",
  "@metamask-previews/gas-fee-controller": "20.0.1-preview-a0bb278",
  "@metamask-previews/json-rpc-engine": "9.0.3-preview-a0bb278",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.3-preview-a0bb278",
  "@metamask-previews/keyring-controller": "17.2.2-preview-a0bb278",
  "@metamask-previews/logging-controller": "6.0.1-preview-a0bb278",
  "@metamask-previews/message-manager": "10.1.1-preview-a0bb278",
  "@metamask-previews/multichain": "0.0.0-preview-a0bb278",
  "@metamask-previews/name-controller": "8.0.1-preview-a0bb278",
  "@metamask-previews/network-controller": "21.0.1-preview-a0bb278",
  "@metamask-previews/notification-controller": "7.0.0-preview-a0bb278",
  "@metamask-previews/notification-services-controller": "0.9.0-preview-a0bb278",
  "@metamask-previews/permission-controller": "11.0.2-preview-a0bb278",
  "@metamask-previews/permission-log-controller": "3.0.1-preview-a0bb278",
  "@metamask-previews/phishing-controller": "12.0.3-preview-a0bb278",
  "@metamask-previews/polling-controller": "10.0.1-preview-a0bb278",
  "@metamask-previews/preferences-controller": "13.0.3-preview-a0bb278",
  "@metamask-previews/profile-sync-controller": "0.9.7-preview-a0bb278",
  "@metamask-previews/queued-request-controller": "5.1.0-preview-a0bb278",
  "@metamask-previews/rate-limit-controller": "6.0.1-preview-a0bb278",
  "@metamask-previews/selected-network-controller": "18.0.1-preview-a0bb278",
  "@metamask-previews/signature-controller": "19.1.0-preview-a0bb278",
  "@metamask-previews/transaction-controller": "37.2.0-preview-a0bb278",
  "@metamask-previews/user-operation-controller": "15.0.1-preview-a0bb278"
}

@jiexi
Copy link
Contributor Author

jiexi commented Oct 11, 2024

@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": "18.2.2-preview-1cd8ef2",
  "@metamask-previews/address-book-controller": "6.0.1-preview-1cd8ef2",
  "@metamask-previews/announcement-controller": "7.0.1-preview-1cd8ef2",
  "@metamask-previews/approval-controller": "7.1.0-preview-1cd8ef2",
  "@metamask-previews/assets-controllers": "38.3.0-preview-1cd8ef2",
  "@metamask-previews/base-controller": "7.0.1-preview-1cd8ef2",
  "@metamask-previews/build-utils": "3.0.1-preview-1cd8ef2",
  "@metamask-previews/chain-controller": "0.1.3-preview-1cd8ef2",
  "@metamask-previews/composable-controller": "9.0.1-preview-1cd8ef2",
  "@metamask-previews/controller-utils": "11.3.0-preview-1cd8ef2",
  "@metamask-previews/ens-controller": "14.0.1-preview-1cd8ef2",
  "@metamask-previews/eth-json-rpc-provider": "4.1.4-preview-1cd8ef2",
  "@metamask-previews/gas-fee-controller": "20.0.1-preview-1cd8ef2",
  "@metamask-previews/json-rpc-engine": "9.0.3-preview-1cd8ef2",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.3-preview-1cd8ef2",
  "@metamask-previews/keyring-controller": "17.2.2-preview-1cd8ef2",
  "@metamask-previews/logging-controller": "6.0.1-preview-1cd8ef2",
  "@metamask-previews/message-manager": "10.1.1-preview-1cd8ef2",
  "@metamask-previews/multichain": "0.0.0-preview-1cd8ef2",
  "@metamask-previews/name-controller": "8.0.1-preview-1cd8ef2",
  "@metamask-previews/network-controller": "21.0.1-preview-1cd8ef2",
  "@metamask-previews/notification-controller": "7.0.0-preview-1cd8ef2",
  "@metamask-previews/notification-services-controller": "0.9.0-preview-1cd8ef2",
  "@metamask-previews/permission-controller": "11.0.2-preview-1cd8ef2",
  "@metamask-previews/permission-log-controller": "3.0.1-preview-1cd8ef2",
  "@metamask-previews/phishing-controller": "12.0.3-preview-1cd8ef2",
  "@metamask-previews/polling-controller": "10.0.1-preview-1cd8ef2",
  "@metamask-previews/preferences-controller": "13.0.3-preview-1cd8ef2",
  "@metamask-previews/profile-sync-controller": "0.9.7-preview-1cd8ef2",
  "@metamask-previews/queued-request-controller": "5.1.0-preview-1cd8ef2",
  "@metamask-previews/rate-limit-controller": "6.0.1-preview-1cd8ef2",
  "@metamask-previews/selected-network-controller": "18.0.1-preview-1cd8ef2",
  "@metamask-previews/signature-controller": "19.1.0-preview-1cd8ef2",
  "@metamask-previews/transaction-controller": "37.2.0-preview-1cd8ef2",
  "@metamask-previews/user-operation-controller": "15.0.1-preview-1cd8ef2"
}

@jiexi
Copy link
Contributor Author

jiexi commented Oct 11, 2024

@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": "18.2.2-preview-c636def",
  "@metamask-previews/address-book-controller": "6.0.1-preview-c636def",
  "@metamask-previews/announcement-controller": "7.0.1-preview-c636def",
  "@metamask-previews/approval-controller": "7.1.0-preview-c636def",
  "@metamask-previews/assets-controllers": "38.3.0-preview-c636def",
  "@metamask-previews/base-controller": "7.0.1-preview-c636def",
  "@metamask-previews/build-utils": "3.0.1-preview-c636def",
  "@metamask-previews/chain-controller": "0.1.3-preview-c636def",
  "@metamask-previews/composable-controller": "9.0.1-preview-c636def",
  "@metamask-previews/controller-utils": "11.3.0-preview-c636def",
  "@metamask-previews/ens-controller": "14.0.1-preview-c636def",
  "@metamask-previews/eth-json-rpc-provider": "4.1.4-preview-c636def",
  "@metamask-previews/gas-fee-controller": "20.0.1-preview-c636def",
  "@metamask-previews/json-rpc-engine": "9.0.3-preview-c636def",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.3-preview-c636def",
  "@metamask-previews/keyring-controller": "17.2.2-preview-c636def",
  "@metamask-previews/logging-controller": "6.0.1-preview-c636def",
  "@metamask-previews/message-manager": "10.1.1-preview-c636def",
  "@metamask-previews/multichain": "0.0.0-preview-c636def",
  "@metamask-previews/name-controller": "8.0.1-preview-c636def",
  "@metamask-previews/network-controller": "21.0.1-preview-c636def",
  "@metamask-previews/notification-controller": "7.0.0-preview-c636def",
  "@metamask-previews/notification-services-controller": "0.9.0-preview-c636def",
  "@metamask-previews/permission-controller": "11.0.2-preview-c636def",
  "@metamask-previews/permission-log-controller": "3.0.1-preview-c636def",
  "@metamask-previews/phishing-controller": "12.0.3-preview-c636def",
  "@metamask-previews/polling-controller": "10.0.1-preview-c636def",
  "@metamask-previews/preferences-controller": "13.0.3-preview-c636def",
  "@metamask-previews/profile-sync-controller": "0.9.7-preview-c636def",
  "@metamask-previews/queued-request-controller": "5.1.0-preview-c636def",
  "@metamask-previews/rate-limit-controller": "6.0.1-preview-c636def",
  "@metamask-previews/selected-network-controller": "18.0.1-preview-c636def",
  "@metamask-previews/signature-controller": "19.1.0-preview-c636def",
  "@metamask-previews/transaction-controller": "37.2.0-preview-c636def",
  "@metamask-previews/user-operation-controller": "15.0.1-preview-c636def"
}

@jiexi
Copy link
Contributor Author

jiexi commented Oct 14, 2024

@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": "18.2.2-preview-42134f7e",
  "@metamask-previews/address-book-controller": "6.0.1-preview-42134f7e",
  "@metamask-previews/announcement-controller": "7.0.1-preview-42134f7e",
  "@metamask-previews/approval-controller": "7.1.0-preview-42134f7e",
  "@metamask-previews/assets-controllers": "38.3.0-preview-42134f7e",
  "@metamask-previews/base-controller": "7.0.1-preview-42134f7e",
  "@metamask-previews/build-utils": "3.0.1-preview-42134f7e",
  "@metamask-previews/chain-controller": "0.1.3-preview-42134f7e",
  "@metamask-previews/composable-controller": "9.0.1-preview-42134f7e",
  "@metamask-previews/controller-utils": "11.3.0-preview-42134f7e",
  "@metamask-previews/ens-controller": "14.0.1-preview-42134f7e",
  "@metamask-previews/eth-json-rpc-provider": "4.1.4-preview-42134f7e",
  "@metamask-previews/gas-fee-controller": "20.0.1-preview-42134f7e",
  "@metamask-previews/json-rpc-engine": "9.0.3-preview-42134f7e",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.3-preview-42134f7e",
  "@metamask-previews/keyring-controller": "17.2.2-preview-42134f7e",
  "@metamask-previews/logging-controller": "6.0.1-preview-42134f7e",
  "@metamask-previews/message-manager": "10.1.1-preview-42134f7e",
  "@metamask-previews/multichain": "0.0.0-preview-42134f7e",
  "@metamask-previews/name-controller": "8.0.1-preview-42134f7e",
  "@metamask-previews/network-controller": "21.0.1-preview-42134f7e",
  "@metamask-previews/notification-controller": "7.0.0-preview-42134f7e",
  "@metamask-previews/notification-services-controller": "0.9.0-preview-42134f7e",
  "@metamask-previews/permission-controller": "11.0.2-preview-42134f7e",
  "@metamask-previews/permission-log-controller": "3.0.1-preview-42134f7e",
  "@metamask-previews/phishing-controller": "12.0.3-preview-42134f7e",
  "@metamask-previews/polling-controller": "10.0.1-preview-42134f7e",
  "@metamask-previews/preferences-controller": "13.0.3-preview-42134f7e",
  "@metamask-previews/profile-sync-controller": "0.9.7-preview-42134f7e",
  "@metamask-previews/queued-request-controller": "5.1.0-preview-42134f7e",
  "@metamask-previews/rate-limit-controller": "6.0.1-preview-42134f7e",
  "@metamask-previews/selected-network-controller": "18.0.1-preview-42134f7e",
  "@metamask-previews/signature-controller": "19.1.0-preview-42134f7e",
  "@metamask-previews/transaction-controller": "37.2.0-preview-42134f7e",
  "@metamask-previews/user-operation-controller": "15.0.1-preview-42134f7e"
}

@jiexi
Copy link
Contributor Author

jiexi commented Oct 14, 2024

@metamaskbot publish-preview

Comment on lines +147 to +163
// Fetch EVM accounts from native wallet keyring
// These addresses are lowercased already
const existingEvmAddresses = methodHooks
.listAccounts()
.map((account) => account.address);
const ethAccounts = getEthAccounts({
requiredScopes: normalizedRequiredScopes,
optionalScopes: normalizedOptionalScopes,
}).map((address) => address.toLowerCase() as Hex);

const allEthAccountsSupported = ethAccounts.every((address) =>
existingEvmAddresses.includes(address),
);
if (!allEthAccountsSupported) {
throw new Error(
`${Caip25EndowmentPermissionName} error: Received eip155 account value(s) for caveat of type "${Caip25CaveatType}" that were not found in the wallet keyring.`,
);
Copy link
Contributor

Choose a reason for hiding this comment

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

Is there are reason we don't do this in the assertScopesSupported function like we do with methods/notifications? And why don't we use the isSupportedAccount helper? I'm not seeing it used anywhere atm?

Copy link
Contributor

Choose a reason for hiding this comment

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

Also I kindof thought we were going to ignore this - just filter out requested accounts that aren't in the wallet... But probably not a big deal either way

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't necessarily think we need to block on this. We can resolve it in #4813

Copy link
Member

@Gudahtt Gudahtt Nov 13, 2024

Choose a reason for hiding this comment

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

I tried updating this to use isSupportedAccount locally, and found it was more trouble than it was worth. isSupportedAccount takes the CAIP account ID as input, but here we're filtering to just Eth accounts first. Which does seem easier, because then we're not re-checking the same account twice each time we see it referenced in a new scope.

Maybe we don't need isSupportedAccount. Seems fine delete it, at least for now. But agreed that it's not a blocker.

Copy link
Contributor

Choose a reason for hiding this comment

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

I did the same and decided to leave it for now. I'll leave it in since it seems to include some filtering related to SCAs that we may want soon?

Gudahtt
Gudahtt previously approved these changes Nov 13, 2024
Copy link
Member

@Gudahtt Gudahtt left a comment

Choose a reason for hiding this comment

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

LGTM!

Gudahtt
Gudahtt previously approved these changes Nov 13, 2024
@adonesky1 adonesky1 enabled auto-merge (squash) November 13, 2024 21:44
@adonesky1 adonesky1 merged commit 1e7d70e into main Nov 13, 2024
120 checks passed
@adonesky1 adonesky1 deleted the caip-multichain branch November 13, 2024 21:49
github-merge-queue bot pushed a commit to MetaMask/metamask-extension that referenced this pull request Jan 20, 2025
…27847)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This PR replaces the replaces the internal `eth_accounts` and
`endowment:permittedChains` permission structure with a
[CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md)
endowment. It adds adapter logic to translate to and from the new
internal CAIP-25 permissions. This change should be transparent to
wallet users and to dapps except for ~one~ two cases, see below. This
change is required in order to support CAIP-25 and CAIP-27 requests in a
follow-up PR that enables the Multichain API.

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

## **Related issues**

Related: MetaMask/core#4784

## **Manual testing steps**

There should be no user or dapp facing difference in behavior except:

* When calling `wallet_revokePermissions` and specifying either
`eth_accounts` or `endowment:permitted-chains`, the entire CAIP-25
permission will be revoked. It will appear to the dapp as if both
`eth_accounts` and `endowment:permitted-chains` were revoked.
* When calling `wallet_getPermissions` for a permitted dapp when the
wallet is **locked**, `eth_accounts` should be returned in addition to
`endowment:permitted-chains`. Currently there is a regression on `main`
where only `endowment:permitted-chains` gets returned when the wallet is
locked.

```
await window.ethereum.request({
 "method": "wallet_revokePermissions",
 "params": [
  {
    eth_accounts: {}
  }
],
});

await window.ethereum.request({
 "method": "wallet_revokePermissions",
 "params": [
  {
    'endowment:permitted-chains': {}
  }
],
});

await window.ethereum.request({
 "method": "wallet_getPermissions",
 "params": [],
});
```

### Locked Wallet Behavior with dapp connected
Other than the two noted items below, this behavior matches that in
`main`

- `eth_accounts` returns []
- `wallet_getPermissions` returns permissions incl eth_accounts 
- `wallet_revokePermissions` works as usual and revokes eth_accounts and
revoke permitted-chains together
- * Note this fixes a regression in `main` where eth_accounts and
permitted-chains aren't revoked as a pair if either is revoked
- `eth_requestAccounts` prompts for unlock, after unlock returns
accounts if any are permitted, otherwise shows connection prompt
- `wallet_requestPermissions` prompts for unlock
- signature methods fails with method or accounts not authorized
- non-signature methods work as usual
- `accountsChanged` empty array on lock. no event after
revokePermissions which makes sense since the dapp was told empty array
on lock and now it's actually empty array so no changes have occurred as
far as the dapp should be concerned.
- **CHANGED**: for dapps that were granted chain permissions via the
`wallet_addEthereum` or `wallet_switchEthereumChain` flows without
account permissions, these permissions will be removed with this
migration. We think this ok because:
- This is a very uncommon scenario for dapps to request chain switches
without account permissions.
- These permissions can be regained very trivially with subsequent chain
switch requests.


### Testing the migration
* Create a dev build from `main`
* Install the dev build from the `dist/chrome` directory and proceed
through onboarding
* Run this command in the background console:
  ```
  chrome.storage.local.get(
    null,
    (state) => {
state.data.PermissionController = {}; // Replace this line based on
instructions below
      chrome.storage.local.set(state, () => chrome.runtime.reload());
    }
  );
  ```
* Disable the extension
* Switch to `main` and create a dev build
* Enable and reload the extension
  * You should see in the console that migration 139 has failed

Repeat the above steps but with the line above replaced with the
following for example:
* `state.data.NetworkController = {}; `
* `state.data.NetworkController = 'foobar'; `
* `state.data.NetworkController.selectedNetworkClientId = null;`
* `state.data.NetworkController.networkConfigurationsByChainId =
'foobar';`

## **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/develop/.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/develop/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] 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]>
Co-authored-by: Alex <[email protected]>
Co-authored-by: Elliot Winkler <[email protected]>
Co-authored-by: Mark Stacey <[email protected]>
Co-authored-by: Erik Marks <[email protected]>
Co-authored-by: Frederik Bolding <[email protected]>
jiexi added a commit to MetaMask/metamask-extension that referenced this pull request Jan 22, 2025
commit 01c9fbd76ca73d1012f30376cc6cfff8b4769b03
Author: Bryan Fullam <[email protected]>
Date:   Wed Jan 22 19:37:11 2025 +0100

    feat: solana swap and bridge navigation (#29705)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    Enables swap and bridge buttons for non-evm networks and makes both of
    those buttons navigate to the bridge interface. Also fences the feature
    behind a code fence at the build level.

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    ## **Related issues**

    Fixes:

    ## **Manual testing steps**

    1. Run repo with "yarn start:flask" command
    2. Enable "Add a new Solana account (Beta)" toggle in experimental
    settings
    3. Add a Solana account through the account dropdown
    4. Go to home page while having Solana account selected
    5. Click swap or bridge
    6. See bridge interface

    ## **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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit ed2fb49150e97c2db2582fe12fc1bc6f5cc1e3cc
Author: Hassan Malik <[email protected]>
Date:   Wed Jan 22 12:04:22 2025 -0500

    fix: centering on Snap radio buttons (#29850)

    ## **Description**

    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change? Radio buttons were not aligned
    with their labels in the snap component.
    2. What is the improvement/solution? Strip radio button of margin.

    ## **Related issues**

    Fixes: #29725

    ## **Manual testing steps**

    1. Build this branch
    2. Go to https://metamask.github.io/snaps/test-snaps/2.18.0/
    3. Trigger the custom ui interactive snap dialog
    4. Observe the changes below.

    ## **Screenshots/Recordings**

    ### **Before**

    [See issue](https://github.com/MetaMask/metamask-extension/issues/29725)

    ### **After**

    <img width="380" alt="Screenshot 2025-01-22 at 9 47 19 AM"
    src="https://github.com/user-attachments/assets/411479ea-b027-4581-9df1-64edf4e75a9c"
    />

    ## **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.

commit 82db3eea1108ae0417ab2b6cfd5c6405d491a8b1
Author: Pedro Figueiredo <[email protected]>
Date:   Wed Jan 22 16:59:21 2025 +0000

    feat: Remove 'Improved signature requests' setting toggle (#29819)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    Removes the settings toggle for redesigned signatures. Removes e2e tests
    used for old flows no longer supported. For
    `test/e2e/tests/metrics/signature-approved.spec.js`, the tests were
    migrated to the redesigned confirmation screen.

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    ## **Related issues**

    Fixes: https://github.com/MetaMask/MetaMask-planning/issues/3029

    ## **Manual testing steps**

    1. Go to this page...
    2.
    3.

    ## **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**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 50246152bd4fc9d4a2dada96e9a89ee65a1d30e2
Author: Norbert Elter <[email protected]>
Date:   Wed Jan 22 17:01:26 2025 +0100

    feat: build beta (#29712)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    This PR migrates the beta build from CircleCI to GitHub Actions.

    ## **Related issues**

    Fixes: https://github.com/MetaMask/metamask-extension/issues/28572,
    https://github.com/MetaMask/metamask-extension/issues/29446

    ## **Manual testing steps**

    For commit messages matching the pattern: `Version v0.0.0-beta.0` on any
    branch other than `master,` the following should happen:

    1. Build should run on GH Actions
    2. Build should be uploaded on S3
    3. Build should appear in the metamaskbot comment

    ## **Screenshots/Recordings**

    Not applicable

    ## **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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 615c469c2e562faa15f3a98849432a8095ce2153
Author: Micaela Estabillo <[email protected]>
Date:   Wed Jan 22 07:37:47 2025 -0800

    fix: handle undefined token address in useBridging hook (#29832)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->
    Changes
    - gracefully handle tokens for which there is no `address` field in
    useBridging
    - fallback to src token in swaps fetchParams when reopening extension
    and linking to the Bridge page

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

    ## **Related issues**

    Fixes:
    https://metamask.sentry.io/issues/6223741673/?environment=production&project=273505&query=is%3Aunresolved%20issue.priority%3A%5Bhigh%2C%20medium%5D%20firstRelease%3Alatest&referrer=issue-stream&sort=date&statsPeriod=7d&stream_index=12

    ## **Manual testing steps**

    1. Request a swap quote
    2. Close extension
    3. Reopen extensionm, which should redirect to Swaps page
    5. Click "Swap across networks with Bridge" link
    6. Bridge page should load with native asset as src token

    ## **Screenshots/Recordings**

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

    ### **Before**

    https://github.com/user-attachments/assets/0251bf1b-4621-49fa-ab6a-e547f977df22

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

    ### **After**

    https://github.com/user-attachments/assets/549de95c-d325-469a-944d-049455b9e25b

    <!-- [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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 2da82c9e2570d944fd8bdc8b4af357f61f979f8a
Author: Gustavo Antunes <[email protected]>
Date:   Wed Jan 22 09:29:41 2025 -0300

    chore: upgrade `@metamask/user-operation-controller` (#29839)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    ## **Related issues**

    Fixes: https://github.com/MetaMask/metamask-extension/issues/29681

    ## **Manual testing steps**

    E2E is enough to test the changes.

    ## **Screenshots/Recordings**

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

    No UI/UX changes

    ## **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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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]>

commit feb89fad247b1cb45a05c498ed7f0691590ed8d3
Author: Hassan Malik <[email protected]>
Date:   Wed Jan 22 04:35:45 2025 -0500

    fix: overflow of title/description in Snap `Card` component (#29838)

    ## **Description**

    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change? Text overflow was not properly
    working for the title & description section of the `Card` snap
    component.
    2. What is the improvement/solution? Add a constraint to the parent
    container.

    ## **Related issues**

    Fixes: https://github.com/MetaMask/snaps/issues/2815

    ## **Manual testing steps**

    1. Build the extension
    2. Trigger a snap dialog with the example code in the issue
    3. Observe the below changes.

    ## **Screenshots/Recordings**

    ### **Before**

    [See issue link](https://github.com/MetaMask/snaps/issues/2815)

    ### **After**

    <img width="380" alt="Screenshot 2025-01-21 at 6 49 00 PM"
    src="https://github.com/user-attachments/assets/e3486c52-803d-4936-87b1-9117a788c854"
    />

    <img width="380" alt="Screenshot 2025-01-21 at 6 48 00 PM"
    src="https://github.com/user-attachments/assets/2371cd8c-be2d-49e2-9214-66302eff1c13"
    />

    ## **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.

commit 27c1231e11604603b3747388958dd7152953d3b3
Author: Priya <[email protected]>
Date:   Wed Jan 22 10:35:25 2025 +0100

    chore: update test dapp version to 9.0.0 (#29827)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    ## **Related issues**

    Fixes:

    ## **Manual testing steps**

    1. Go to this page...
    2.
    3.

    ## **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**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit d097924275d44d4d10fa1689e193fd9ef02479a6
Author: infiniteflower <[email protected]>
Date:   Wed Jan 22 06:53:47 2025 +0900

    fix: not routing to home page after bridge tx submitted (#29809)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    This PR fixes an issue where you would not be routed back to the Home
    Activity tab after submitting a bridge transaction.

    ## **Related issues**

    Fixes: https://github.com/MetaMask/metamask-extension/issues/29793

    ## **Manual testing steps**

    1. Go to Bridge
    2. Submit a bridge tx
    3. Observe that you are sent to the Activity screen right after

    ## **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
    - [ ] I’ve included tests if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit f856a3b423a4316f14d2e5d7cd0297f76566f70a
Author: Charly Chevalier <[email protected]>
Date:   Tue Jan 21 18:18:52 2025 +0100

    feat: add `scopes` field to `KeyringAccount` (#29195)

    ## **Description**

    Testing the new `scopes` added on the `KeyringAccount`.

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

    ## **Related issues**

    Requires this PR to be merged first:
    - [x] https://github.com/MetaMask/metamask-extension/pull/28861

    Related to:
    - https://github.com/MetaMask/accounts/pull/101
    - https://github.com/MetaMask/core/pull/5066
    - https://github.com/MetaMask/snap-bitcoin-wallet/pull/364

    ## **Manual testing steps**

    - Use a previous stable version
    ```console
    git checkout Version-v12.10.0 # Or use a release build
    ```

    - Run it:
    ```console
    yarn
    yarn start:flask
    ```

    - Create a bunch of accounts (EVM, non-EVM (Solana/Bitcoin),
    hardware-wallet, Snap EVM accounts like the SSK)

    ![Screenshot 2025-01-16 at 17 11
    55](https://github.com/user-attachments/assets/815303e6-2682-4c6b-9969-8f4a8c11e0d7)

    - Save your extension logs (Settings > Advanced)
    - Now disable your extension (chrome://extensions)
    - Stops your `yarn start:flask`
    - Now, update your extension by going back to this PR (or by using the
    latest RC if you're validating an RC version)

    ```console
    git checkout feat/keyring-account-scopes
    ```
    - Re-run it:
    ```console
    yarn
    yarn start:flask
    ```
    - Re-enable your extension (chrome://extensions)
    - Open up your console logs (looking at the `service worker`)
    - You should now see some migrations running like:

    ![Screenshot 2025-01-16 at 17 14
    03](https://github.com/user-attachments/assets/35c08ba9-83f4-4827-aac5-97b9ee055732)

    - You should also see some other migrations from the Snap keyring this
    like so:

    ![Screenshot 2025-01-16 at 18 52
    48](https://github.com/user-attachments/assets/5c74700c-18a4-4452-8a47-77d1434c96ad)

    - Save your extension logs again (Settings > Advanced, and use a
    different filename)
    - Now, compare your 2 `.json` files

    ## **Screenshots/Recordings**

    ### **Before**

    ### **After**

    ## **Pre-merge author checklist**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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: Howard Braham <[email protected]>
    Co-authored-by: MetaMask Bot <[email protected]>

commit fcb30d7034f9fed385d874897a445330b5b47473
Author: Elliot Winkler <[email protected]>
Date:   Tue Jan 21 08:50:04 2025 -0700

    fix: Remove old properties from state (#29792)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

    There are several kinds of errors in Sentry which indicate that there
    are properties in controller state we are attempting to persist that do
    not have corresponding metadata. This indicates that these properties
    were removed at some point from the controller's state but no migration
    was added that removed them from the persisted wallet state. In many
    cases, at the time of removal, such a migration was not needed because
    the controller in question inherited from BaseController v1. We have
    made a targeted effort over the past few years to migrate all
    controllers to BaseController v2, however, and so it matters now that
    every property have corresponding metadata or else are removed from
    state. We don't want these errors to show up in Sentry because they
    create noise, so this commit removes these properties from state.

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

    ## **Related issues**

    Fixes #28289.
    Fixes #28290.
    Fixes #28300.
    Fixes #28302.
    Fixes #28344.
    Fixes #28608.
    Fixes #29746.

    ## **Manual testing steps**

    These changes should not affect users in any way since the errors we are
    trying to avoid occur out of band and should not crash anything.

    ## **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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 212b5c946a4a27d8a21c856f2b3e958a88f7ac7b
Author: João Tavares <[email protected]>
Date:   Tue Jan 21 15:35:01 2025 +0000

    test: address integration tests warnings (#29007)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**
    General improvements/fixes for integration tests.

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

    ## **Related issues**

    Fixes: https://github.com/MetaMask/metamask-extension/issues/29002

    ## **Pre-merge author checklist**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 64e2c3fb041ae9457da1a0ab333613f95bd22eaf
Author: Priya <[email protected]>
Date:   Tue Jan 21 12:02:10 2025 +0100

    fix: Remove scroll to bottom requirement for signatures (#29817)

    Reverts MetaMask/metamask-extension#29808

    Removes scroll to bottom requirement on signatures
    Improves the clickElementSafe function

commit bb9250d5b5f3a366e279b53cc45ddb100696ddeb
Author: weizman <[email protected]>
Date:   Tue Jan 21 09:18:24 2025 +0200

    feat(lavamoat/lavadome): update integration to improve security (#25653)

    Address concerns under [Safe
    Usage](https://github.com/LavaMoat/LavaDome/blob/main/README.md#safe-usage):
    * [#csp](https://github.com/LavaMoat/LavaDome/blob/main/README.md#csp) -
    do not allow font to be fetched from just about anywhere
    *
    [#execution-order](https://github.com/LavaMoat/LavaDome/blob/main/README.md#execution-order)
    - make sure LavaDome is imported right away

    This should go with #27756

commit ecc29079d7e32882b06b805d35849447afc181d7
Author: Prithpal Sooriya <[email protected]>
Date:   Mon Jan 20 20:24:07 2025 +0000

    build: update the patches applied in the package.json (#29807)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    I think there was a small syntax error when adding multiple patches

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    ## **Related issues**

    Fixes:

    ## **Manual testing steps**

    1. Go to this page...
    2.
    3.

    ## **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**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit c99eae23cf40507e5a6e1996b4af190efc205aef
Author: Pedro Figueiredo <[email protected]>
Date:   Mon Jan 20 21:27:31 2025 +0100

    fix: Revert "fix: Remove scroll to bottom requirement for signatures" (#29808)

    Reverts MetaMask/metamask-extension#29784 to address CI failures on
    `main` caused by that PR

commit 210c794a372e29bc953a5c28f824422fe4db6743
Author: Maarten Zuidhoorn <[email protected]>
Date:   Mon Jan 20 18:08:24 2025 +0100

    chore: Bump `@metamask/snaps-rpc-methods` from `^11.9.0` to `^11.9.1` (#29805)

    ## **Description**

    This bumps `@metamask/snaps-rpc-methods` from `^11.9.0` to `^11.9.1`,
    which fixes some bugs and improves error messages related to state
    management.

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

    ## **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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 5e95217ded0c7ab19b0aa6a676b6acb2f924f942
Author: Jony Bursztyn <[email protected]>
Date:   Mon Jan 20 15:00:56 2025 +0000

    feat: add Portfolio button to BTC accounts (#28184)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    Readds the "Portfolio" button for non-EVM accounts

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

    ## **Related issues**

    Fixes: https://github.com/MetaMask/metamask-extension/pull/26148
    https://github.com/MetaMask/metamask-extension/issues/28185

    ## **Manual testing steps**

    1. Go to the Wallet page
    2. Switch to a BTC account
    3. The Portfolio button should be there

    ## **Screenshots/Recordings**

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

    ### **Before**

    <img width="142" alt="before"
    src="https://github.com/user-attachments/assets/2ff13df2-7db1-44e3-a36c-b9a85248b3c1"
    />

    ### **After**

    <img width="142" alt="Screenshot 2025-01-17 at 14 50 46"
    src="https://github.com/user-attachments/assets/6c65ad87-1822-4fb1-a07b-31dde9066f52"
    />

    ## **Pre-merge author checklist**

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

    ## **Pre-merge reviewer checklist**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit d5cd7fd3ad3421952a1222d5115756fac134b95b
Author: jiexi <[email protected]>
Date:   Mon Jan 20 06:26:10 2025 -0800

    feat: Migrate eth_accounts and permittedChains to CAIP-25 endowment (#27847)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    This PR replaces the replaces the internal `eth_accounts` and
    `endowment:permittedChains` permission structure with a
    [CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md)
    endowment. It adds adapter logic to translate to and from the new
    internal CAIP-25 permissions. This change should be transparent to
    wallet users and to dapps except for ~one~ two cases, see below. This
    change is required in order to support CAIP-25 and CAIP-27 requests in a
    follow-up PR that enables the Multichain API.

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

    ## **Related issues**

    Related: https://github.com/MetaMask/core/pull/4784

    ## **Manual testing steps**

    There should be no user or dapp facing difference in behavior except:

    * When calling `wallet_revokePermissions` and specifying either
    `eth_accounts` or `endowment:permitted-chains`, the entire CAIP-25
    permission will be revoked. It will appear to the dapp as if both
    `eth_accounts` and `endowment:permitted-chains` were revoked.
    * When calling `wallet_getPermissions` for a permitted dapp when the
    wallet is **locked**, `eth_accounts` should be returned in addition to
    `endowment:permitted-chains`. Currently there is a regression on `main`
    where only `endowment:permitted-chains` gets returned when the wallet is
    locked.

    ```
    await window.ethereum.request({
     "method": "wallet_revokePermissions",
     "params": [
      {
        eth_accounts: {}
      }
    ],
    });

    await window.ethereum.request({
     "method": "wallet_revokePermissions",
     "params": [
      {
        'endowment:permitted-chains': {}
      }
    ],
    });

    await window.ethereum.request({
     "method": "wallet_getPermissions",
     "params": [],
    });
    ```

    ### Locked Wallet Behavior with dapp connected
    Other than the two noted items below, this behavior matches that in
    `main`

    - `eth_accounts` returns []
    - `wallet_getPermissions` returns permissions incl eth_accounts
    - `wallet_revokePermissions` works as usual and revokes eth_accounts and
    revoke permitted-chains together
    - * Note this fixes a regression in `main` where eth_accounts and
    permitted-chains aren't revoked as a pair if either is revoked
    - `eth_requestAccounts` prompts for unlock, after unlock returns
    accounts if any are permitted, otherwise shows connection prompt
    - `wallet_requestPermissions` prompts for unlock
    - signature methods fails with method or accounts not authorized
    - non-signature methods work as usual
    - `accountsChanged` empty array on lock. no event after
    revokePermissions which makes sense since the dapp was told empty array
    on lock and now it's actually empty array so no changes have occurred as
    far as the dapp should be concerned.
    - **CHANGED**: for dapps that were granted chain permissions via the
    `wallet_addEthereum` or `wallet_switchEthereumChain` flows without
    account permissions, these permissions will be removed with this
    migration. We think this ok because:
    - This is a very uncommon scenario for dapps to request chain switches
    without account permissions.
    - These permissions can be regained very trivially with subsequent chain
    switch requests.

    ### Testing the migration
    * Create a dev build from `main`
    * Install the dev build from the `dist/chrome` directory and proceed
    through onboarding
    * Run this command in the background console:
      ```
      chrome.storage.local.get(
        null,
        (state) => {
    state.data.PermissionController = {}; // Replace this line based on
    instructions below
          chrome.storage.local.set(state, () => chrome.runtime.reload());
        }
      );
      ```
    * Disable the extension
    * Switch to `main` and create a dev build
    * Enable and reload the extension
      * You should see in the console that migration 139 has failed

    Repeat the above steps but with the line above replaced with the
    following for example:
    * `state.data.NetworkController = {}; `
    * `state.data.NetworkController = 'foobar'; `
    * `state.data.NetworkController.selectedNetworkClientId = null;`
    * `state.data.NetworkController.networkConfigurationsByChainId =
    'foobar';`

    ## **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/develop/.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/develop/.github/guidelines/LABELING_GUIDELINES.md)).
    Not required for external contributors.

    ## **Pre-merge reviewer checklist**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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]>
    Co-authored-by: Alex <[email protected]>
    Co-authored-by: Elliot Winkler <[email protected]>
    Co-authored-by: Mark Stacey <[email protected]>
    Co-authored-by: Erik Marks <[email protected]>
    Co-authored-by: Frederik Bolding <[email protected]>

commit 5ae45abf4d88d5643cf21d11b7d89c4e4607ffd9
Author: chloeYue <[email protected]>
Date:   Mon Jan 20 14:53:03 2025 +0100

    test: [POM] Migrate bitcoin send e2e tests to POM (#29515)

    ## **Description**

    - Migrate send transaction e2e tests with bitcoin account to POM
    - Create related Bitcoin transaction page class and methods.

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

    ## **Related issues**

    ## **Manual testing steps**
    Check code readability, make sure tests pass.

    ## **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/develop/.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/develop/.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.

commit 2d335c6509e27ac32731dcef0a3c338cf3584ca2
Author: Priya <[email protected]>
Date:   Mon Jan 20 13:13:07 2025 +0100

    fix: Remove scroll to bottom requirement for signatures (#29784)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    Removes scroll to bottom requirement on signatures
    Improves the clickElementSafe function

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

    ## **Related issues**

    Fixes:
    [#29779](https://github.com/MetaMask/metamask-extension/issues/29779)

    ## **Manual testing steps**

    1. Go to this page...
    2.
    3.

    ## **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**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 27d2706008652602d7d950e701460569a1390ed9
Author: sahar-fehri <[email protected]>
Date:   Mon Jan 20 12:06:50 2025 +0100

    fix: patch mantle price fix (#29790)

    ## **Description**

    PR to patch Mantle price core
    [fix](https://github.com/MetaMask/core/pull/5099)

    current Mantle price:
    https://www.cryptocompare.com/coins/mantle/overview/USDC

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

    ## **Related issues**

    Fixes:

    ## **Manual testing steps**

    1. Add Mantle network from chainList (chainId 5000)
    2. Go to MM and you should see correct fiat balance

    ## **Screenshots/Recordings**

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

    ### **Before**

    <!-- [screenshots/recordings] -->
    <img width="1800" alt="Screenshot 2025-01-17 at 21 18 51"
    src="https://github.com/user-attachments/assets/1100b7a1-d143-46fd-98b4-4a064f700aa2"
    />

    ### **After**

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

    <img width="1797" alt="Screenshot 2025-01-17 at 21 17 08"
    src="https://github.com/user-attachments/assets/e166c121-b484-4da4-935e-cb43ad1b7fa5"
    />

    ## **Pre-merge author checklist**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 5887e05bdd1db65710d58dcac4512858b042ba06
Author: OGPoyraz <[email protected]>
Date:   Mon Jan 20 12:01:12 2025 +0100

    feat: Use `gasLimitNoBuffer` on network fee estimation (#29502)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

    While estimating gas for the transaction we add `50%` gas limit buffer.
    With this PR we want to show network fee without gas limit buffer using
    `gasLimitNoBuffer` property on `transactionMeta`.

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

    ## **Related issues**

    Fixes: https://github.com/MetaMask/MetaMask-planning/issues/3773

    ## **Manual testing steps**

    N/A

    ## **Screenshots/Recordings**

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

    In the recording you will see that `gasLimitNoBuffer` used over
    `txParams.gas`. Please see that `txParams.gas` is greater than
    `gasLimitNoBuffer`. This calculation leads lower value in the UI.

    https://github.com/user-attachments/assets/b5726828-7c13-4eb4-83fa-eea21562e6a9

    ### **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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 2751a0d0b6f723718296b1b3ea5f6aef2dc38955
Author: Micaela Estabillo <[email protected]>
Date:   Fri Jan 17 11:28:25 2025 -0800

    chore: retain src input amount after switching tokens (#29709)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

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

    ## **Related issues**

    Fixes:   https://consensyssoftware.atlassian.net/browse/MMS-1798

    ## **Manual testing steps**

    1. Load bridge page
    2. Select amount, src token and dest token
    3. Click token switch button to swap src and dest selections
    4. Verify that src amount is preserved

    ## **Screenshots/Recordings**

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

    ### **Before**

    Amount is cleared

    ### **After**
    Amount is preserved

    <!-- [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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 582ec932f3c4b4a7002f439095c98a7e76b8ab20
Author: Mark Stacey <[email protected]>
Date:   Fri Jan 17 13:02:15 2025 -0330

    test: Fix invalid fixture builder (#29783)

    ## **Description**

    Two of the permission fixture builders were adding permissions for
    accounts that do not exist. They have been updated to only grant
    permissions for the selected account, which is the only account
    guaranteed to exist in the default fixture.

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

    ## **Related issues**

    This was extracted from
    https://github.com/MetaMask/metamask-extension/pull/27847

    ## **Manual testing steps**

    See that E2E tests still pass

    ## **Screenshots/Recordings**

    N/A

    ## **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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 3b856331b6e26b8d879206850be2e327220de38e
Author: Brian Bergeron <[email protected]>
Date:   Fri Jan 17 07:56:53 2025 -0800

    fix: stop polling on environment close (#29707)

    ## **Description**

    When the asset controllers start polling, they add their polling tokens
    to app state, keyed by the particular environment (popup vs fullscreen).
    But these polling tokens in app state were not being used during
    cleanup. This PR updates `onEnvironmentTypeClosed` to stop polling by
    those tokens.

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

    ## **Related issues**

    ## **Manual testing steps**

    1. Open MM in fullscreen
    2. Open MM popup
    3. Close the popup
    4. `onEnvironmentTypeClosed` should fire for the popup environment
    5. Each polling token should be found and removed by one of the
    controllers

    ## **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**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 8038f4de18ada13fbd3f29f78a315a981839dad7
Author: Daniel <[email protected]>
Date:   Fri Jan 17 16:43:20 2025 +0100

    feat: Enable BSC for smart transactions (#29747)

    ## **Description**
    Enables BSC for smart transactions and reduces status check time to 1s.

    We can turn off BSC support for smart transactions remotely if needed.

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

    ## **Related issues**

    Fixes:

    ## **Manual testing steps**

    1. Make sure smart transactions are enabled in Advanced Settings
    2. Be on the BNB Chain
    3. Submit a tx. It will be submitted as a smart transaction

    Happy paths tested for Swaps, Send and dapp transactions, but this will
    require extensive testing before it goes to production.

    ## **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**

    - [ ] 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).
    - [ ] I've completed the PR template to the best of my ability
    - [ ] I’ve included tests if applicable
    - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
    if applicable
    - [ ] 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**

    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.

commit 8f82ac4f13cb1a67463bec35ca3c977cce4e8a3d
Author: Michele Esposito <[email protected]>
Date:   Fri Jan 17 13:34:02 2025 +0100

    refactor: use `withKeyring` method (#25435) (#27025)

    <!--
    Please submit this PR as a draft initially.
    Do not mark it as "Ready for review" until the template has been
    completely filled out, and PR status checks have passed at least once.
    -->

    ## **Description**

    <!--
    Write a short description of the changes included in this pull request,
    also include relevant motivation and context. Have in mind the following
    questions:
    1. What is the reason for the change?
    2. What is the improvement/solution?
    -->

    This PR cherry-picks def6b15 into `develop`, after being reverted at
    821c3bd. The reason the original commit was re…
Akaryatrh pushed a commit to MetaMask/metamask-extension that referenced this pull request Jan 23, 2025
…27847)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This PR replaces the replaces the internal `eth_accounts` and
`endowment:permittedChains` permission structure with a
[CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md)
endowment. It adds adapter logic to translate to and from the new
internal CAIP-25 permissions. This change should be transparent to
wallet users and to dapps except for ~one~ two cases, see below. This
change is required in order to support CAIP-25 and CAIP-27 requests in a
follow-up PR that enables the Multichain API.

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

## **Related issues**

Related: MetaMask/core#4784

## **Manual testing steps**

There should be no user or dapp facing difference in behavior except:

* When calling `wallet_revokePermissions` and specifying either
`eth_accounts` or `endowment:permitted-chains`, the entire CAIP-25
permission will be revoked. It will appear to the dapp as if both
`eth_accounts` and `endowment:permitted-chains` were revoked.
* When calling `wallet_getPermissions` for a permitted dapp when the
wallet is **locked**, `eth_accounts` should be returned in addition to
`endowment:permitted-chains`. Currently there is a regression on `main`
where only `endowment:permitted-chains` gets returned when the wallet is
locked.

```
await window.ethereum.request({
 "method": "wallet_revokePermissions",
 "params": [
  {
    eth_accounts: {}
  }
],
});

await window.ethereum.request({
 "method": "wallet_revokePermissions",
 "params": [
  {
    'endowment:permitted-chains': {}
  }
],
});

await window.ethereum.request({
 "method": "wallet_getPermissions",
 "params": [],
});
```

### Locked Wallet Behavior with dapp connected
Other than the two noted items below, this behavior matches that in
`main`

- `eth_accounts` returns []
- `wallet_getPermissions` returns permissions incl eth_accounts 
- `wallet_revokePermissions` works as usual and revokes eth_accounts and
revoke permitted-chains together
- * Note this fixes a regression in `main` where eth_accounts and
permitted-chains aren't revoked as a pair if either is revoked
- `eth_requestAccounts` prompts for unlock, after unlock returns
accounts if any are permitted, otherwise shows connection prompt
- `wallet_requestPermissions` prompts for unlock
- signature methods fails with method or accounts not authorized
- non-signature methods work as usual
- `accountsChanged` empty array on lock. no event after
revokePermissions which makes sense since the dapp was told empty array
on lock and now it's actually empty array so no changes have occurred as
far as the dapp should be concerned.
- **CHANGED**: for dapps that were granted chain permissions via the
`wallet_addEthereum` or `wallet_switchEthereumChain` flows without
account permissions, these permissions will be removed with this
migration. We think this ok because:
- This is a very uncommon scenario for dapps to request chain switches
without account permissions.
- These permissions can be regained very trivially with subsequent chain
switch requests.


### Testing the migration
* Create a dev build from `main`
* Install the dev build from the `dist/chrome` directory and proceed
through onboarding
* Run this command in the background console:
  ```
  chrome.storage.local.get(
    null,
    (state) => {
state.data.PermissionController = {}; // Replace this line based on
instructions below
      chrome.storage.local.set(state, () => chrome.runtime.reload());
    }
  );
  ```
* Disable the extension
* Switch to `main` and create a dev build
* Enable and reload the extension
  * You should see in the console that migration 139 has failed

Repeat the above steps but with the line above replaced with the
following for example:
* `state.data.NetworkController = {}; `
* `state.data.NetworkController = 'foobar'; `
* `state.data.NetworkController.selectedNetworkClientId = null;`
* `state.data.NetworkController.networkConfigurationsByChainId =
'foobar';`

## **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/develop/.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/develop/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] 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]>
Co-authored-by: Alex <[email protected]>
Co-authored-by: Elliot Winkler <[email protected]>
Co-authored-by: Mark Stacey <[email protected]>
Co-authored-by: Erik Marks <[email protected]>
Co-authored-by: Frederik Bolding <[email protected]>
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.

5 participants