Skip to content

Conversation

@metamaskbot
Copy link
Collaborator

@metamaskbot metamaskbot commented Apr 10, 2025

This is the release candidate for version 12.17.0. The changelog will be found in another PR chore/12.17.0-Changelog.

Team sign-off checklist

  • team-accounts
  • team-assets
  • team-confirmations
  • team-design-system
  • hardware-wallets
  • team-mmi
  • network-enablement
  • team-snaps-platform
  • team-solana
  • team-swaps-and-bridge
  • team-transactions
  • team-vault
  • team-wallet-ux

Reference

dan437 and others added 30 commits March 27, 2025 17:37
## **Description**
This PR implements the publishBatch hook for smart transactions, which
will be used when submitting multiple transactions at once, e.g. when a
user choose their gas token for a transaction.

We can test this end to end once UI for the Transaction Confirmation
page is merged. Then we might need to do some final tweaks if needed.

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

## **Related issues**

Fixes:

## **Manual testing steps**

1. Once the UI on the Transaction Confirmation page is ready (e.g. when
you do a Send transaction), you will be able to choose a gas token to be
used for transaction fees

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

---------

Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com>
<!--
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?
-->
Create selector for checking whether the `vaultRemoteMode` feature flag
is enabled or not. This is the first PR for this project and, as such,
we'd like all changes that follow to be hidden behind this flag, until
we're ready to release.

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

## **Related issues**

Fixes: #31255 

## **Manual testing steps**

1. Go to a top app extension component
2. Add `const isRemoteModeEnabled = useSelector(getIsRemoteModeEnabled)`
to the top of your component
3. Log result to confirm flag is working as expected.

## **Screenshots/Recordings**

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

### **Before**

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

### **After**

<img width="679" alt="Screenshot 2025-03-26 at 12 48 40 PM"
src="https://github.com/user-attachments/assets/1c1c1abe-d112-4a37-a35a-7ed61d7a07d0"
/>



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

Show toast message when changing gas fee tokens.

Plus:

- Temporarily disable support for future ETH flow.
- Add missing unit tests for `GasFeeTokenIcon` and `GasFeeDetails`.

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

## **Related issues**

## **Manual testing steps**

## **Screenshots/Recordings**

### **Before**

### **After**

<img width="353" alt="Toast"
src="https://github.com/user-attachments/assets/bf4cbd7f-8dff-4600-aa3d-27295ffd89f6"
/>

## **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.
## **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? We often get tagged for codeowner
reviews, it can sometimes be difficult to know what you're reviewing
without looking at the CODEOWNER file yourself. It would be nice to know
what you need to review upon just visting the PR link.
2. What is the improvement/solution? Added a new workflow to get the
MetaMask bot to post a comment on the files that need a CODEOWNER review
categorized by the respective team. The bot will post a comment and then
update that comment as needed. It will also delete the comment if there
is no longer a CODEOWNER review required.

## **Manual testing steps**

1. Open a PR against this branch
2. Make some codeowner file changes
3. Observe the MetaMask bot make a comment.

## **Screenshots/Recordings**

### **After**

<img width="954" alt="Screenshot 2025-03-02 at 3 52 44 PM"
src="https://github.com/user-attachments/assets/3d41e00e-5cd6-47aa-866a-187352bda140"
/>

## **Pre-merge author checklist**

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

## **Pre-merge reviewer checklist**

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

---------

Co-authored-by: MetaMask Bot <metamaskbot@users.noreply.github.com>
<!--
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 removes the BridgeController class and shared bridge utils from
the extension repo, and replaces them with
[@metamask/bridge-controller](https://www.npmjs.com/package/@metamask/bridge-controller)
imports

See [Copilot summary for more
details](#31059 (review))

<!--
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/31059?quickstart=1)

## **Related issues**

Fixes:

## **Manual testing steps**

1. Bridge and swap functionality for EVM and Solana should be unchanged,
just updating imports

## **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.
…ltichain, permissions-connect, confirmations-page) (#31058)

## **Description**

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

Added consistent behavior various confirmation pages:
- Responsive width
- Responsive top and bottom padding
- Box-shadow consistencies
- Transition animation with padding
- Border muted color to support border in dark-mode
- Fixed various storybook pages

Affected UI:
- Send
- Bridge
  - (width is the same fixed-width in this PR)
- Multichain
- Snaps
  - remove full width from various multichain pages
  - remove fixed 408px width on install page
  - fixed centered text in a couple of pages
- expand full width and height to content missing css or with e.g.
height: 100% that were not being applied since they needed flex: 1 0
auto

- Redesigned Confirmations
  - SIWE
    - fixed right alignment
  - Fixed padding to prevent overlay with collapsable and copy icons
- Old Confirmations including Add Network
  - remove full width

Additionally:
- Fixes extra shadow in Notification pages and potentially other
multichain pages with multichain header logo

Notes: 
- During this PR, the redesign colors were merged. Snapshots have
outdated colors rather than the new blurple.
- There are many combinations of UI. There's a good chance I've missed
something.
- Some UI still have inconsistencies: background colors, footer button
styles, footer not stuck to bottom (Add Snap Account). These are out of
scope. I fixed many while we're here but there are still many more.

- Swaps page is unchanged
<img width="120"
src="https://github.com/user-attachments/assets/b2c41f63-c10d-4c20-a4ca-f14cfb5bad98">

- Encrypt and Decrypt pages are unchanged
<img width="120"
src="https://github.com/user-attachments/assets/5518f289-e905-415f-b145-870332954055">

## **Related issues**

Fixes: #27115

To address separately:
- Add min-width 320px
#31060

## **Manual testing steps**

Test various confirmations responsive (width) behavior

## **Screenshots/Recordings**

I didn't add all the before and afters though here is many. Some
screenshot colors are outdated after redesigned colors (including
blurple) were merged to main.

### **Before Send Flow:**


https://github.com/user-attachments/assets/29632e90-11f2-45ff-811a-9346a6021511

### **After Send Flow with padding and transition:**
(double scrollbar is out of scope) 


https://github.com/user-attachments/assets/d9af527b-a86d-4be8-a77e-1fb60a8f0fe3

### **Before Snaps Install Flow:**


https://github.com/user-attachments/assets/4eb10a24-8fc9-4ebb-a2f1-e1790fe942f6

### **After Snaps Install Flow w/ padding and transition:**


https://github.com/user-attachments/assets/3ecc8e8d-a4ef-4724-822a-e9c414745ae1

### **Before Snaps Create Flow:**


https://github.com/user-attachments/assets/2fa4285a-d5d7-413d-a955-8488354822f9

<img width="220"
src="https://github.com/user-attachments/assets/05fb9f82-4aff-42b8-9ef1-f168bc9ce85a">

### **After Snaps Create Flow:**


https://github.com/user-attachments/assets/4f52c610-806a-4860-87a3-776b8574d03e

### **Before various Snap pages:**

<img width="320"
src="https://github.com/user-attachments/assets/b5e5c0df-52a8-4499-a13e-8e88665e5f7f">

<img width="220"
src="https://github.com/user-attachments/assets/59bc9697-9fe1-4607-8072-ee4986d832d8">
<img width="220"
src="https://github.com/user-attachments/assets/35b5a8b0-9f44-4687-96c5-228e73ae9e5c">
<img width="220"
src="https://github.com/user-attachments/assets/932abc2b-0cfa-4931-8380-55cd7902b8e3">
<img width="220"
src="https://github.com/user-attachments/assets/96068e81-b01d-4a32-9f6c-4cd5cc200bf6">
<img width="220"
src="https://github.com/user-attachments/assets/d8a05769-276b-4729-b97e-23c796b7249a">

### **After Snaps pages:**

<img width="320"
src="https://github.com/user-attachments/assets/1904e99d-abce-4d48-bc15-7a21c6d4dfca">

<img width="320"
src="https://github.com/user-attachments/assets/257377e3-41c9-42ae-a4a2-59ca6e973f0c">
<img width="320"
src="https://github.com/user-attachments/assets/ffb1e1cb-9432-40a8-8a7f-0ccf3e11754a">
<img width="320"
src="https://github.com/user-attachments/assets/7c65d420-568c-4520-b372-32e42f914498">
<img width="320"
src="https://github.com/user-attachments/assets/6baf1f8c-a1ef-40ac-8c0d-d48f8f54f4a8">
<img width="320"
src="https://github.com/user-attachments/assets/9d94a2bb-f30b-41be-b456-bfb42b52d6c3">
<img width="320"
src="https://github.com/user-attachments/assets/7357ead4-0c59-41fe-9f67-f383f7fb8c8c">


### **Before Notifications Page shadow bug:**

<img width="520"
src="https://github.com/user-attachments/assets/175481dc-4540-4030-9985-979201a1c374">
<img width="520"
src="https://github.com/user-attachments/assets/15d73ec4-dfc6-4f50-8481-6a464b65d55b">

### **After Notifications Page:**

![CleanShot 2025-03-27 at 14 39
09@2x](https://github.com/user-attachments/assets/28a5d205-18d0-4181-95fc-b807e9060d14)
<img width="220"
src="https://github.com/user-attachments/assets/aeba5a93-ead6-469f-bb4a-6d3c23c5073e">
<img width="520"
src="https://github.com/user-attachments/assets/c6389892-c563-46ea-9dfe-1cfaaecbe22b">


### **Before Permissions Connect:**

Slight fix to allow Learn More to break into new line 

<img width="360"
src="https://github.com/user-attachments/assets/bf7b69d0-c94c-4c94-95cc-d53de7651bbd">

### **After Permissions Connect:**

<img width="360"
src="https://github.com/user-attachments/assets/7b31134d-3754-40a1-ba7c-9569139414ec">

### **After Permissions Connect Wide Screen Dark-mode:**

![CleanShot 2025-03-24 at 19 27
46](https://github.com/user-attachments/assets/56a31d77-ae1a-44f7-af08-77a60615ec26)

### **Before SIWE:**

<img width="320"
src="https://github.com/user-attachments/assets/1b390aac-9487-4de0-871c-9d76b4e6806a">

### **Before SIWE with responsiveness added:**
![CleanShot 2025-03-17 at 15 21
15@2x](https://github.com/user-attachments/assets/78737c0a-394b-42fe-b6e7-09f5585bebd7)

### **After SIWE:**

![CleanShot 2025-03-18 at 10 37
25](https://github.com/user-attachments/assets/c3194f76-a8e2-4b6a-b5c6-3aefe04b68b2)

### **Before Bridge:**

<img width="520"
src="https://github.com/user-attachments/assets/fd1088c1-c308-458f-a3ea-c21183ed223a">

### **After Bridge:**

<img width="520"
src="https://github.com/user-attachments/assets/c0369bac-7267-4e6e-83a4-820f20febf43">

### **Before Add Network:**

<img width="520"
src="https://github.com/user-attachments/assets/9704250e-d0f6-4948-8321-516299529f27">

### **After Add Network:**

<img width="520"
src="https://github.com/user-attachments/assets/2020f02f-984e-4bba-bcee-677d80442813">


### **Before storybook:**

<img width="220"
src="https://github.com/user-attachments/assets/3c54b0a2-dfc9-4209-a7ef-9b32e2b464bd">
<img width="220"
src="https://github.com/user-attachments/assets/d6dea7f6-f02c-4105-a35f-1192bcd6bc1c">
<img width="220"
src="https://github.com/user-attachments/assets/10b12d26-b7d0-4ea4-902c-14e19e538b73">
<img width="220"
src="https://github.com/user-attachments/assets/2ca607ca-1e83-438f-926e-8be182889f30">
<img width="220"
src="https://github.com/user-attachments/assets/75ed0172-e69d-46b8-9d40-506bd1fed224">
<img width="220"
src="https://github.com/user-attachments/assets/bc0bfcaa-12e9-4f23-b7f7-45a8e5a472fe">
<img width="220"
src="https://github.com/user-attachments/assets/a0322185-cb2f-4174-bc8e-e0fd57168242">
<img width="220"
src="https://github.com/user-attachments/assets/b0c28430-8c7c-4b44-add6-cd45eadd91a2">

### **After storybook:**

<img width="220"
src="https://github.com/user-attachments/assets/1c4f9f4a-e695-4fab-882b-3affe1ec3bc7">
<img width="220"
src="https://github.com/user-attachments/assets/4e93be21-2c29-4b95-9bab-0993f6ad364b">
<img width="220"
src="https://github.com/user-attachments/assets/d1c2e7de-20fd-44a6-bd03-6ccd54dcf6ad">
<img width="220"
src="https://github.com/user-attachments/assets/17123d03-f9bf-49ce-98b4-f02848aef8e6">
<img width="220"
src="https://github.com/user-attachments/assets/bf2494c9-767b-4ea8-8cd9-0fe8b8f25b20">
<img width="220"
src="https://github.com/user-attachments/assets/f1ed47c1-5fa8-4174-9204-25f2fad0cd10">
<img width="220"
src="https://github.com/user-attachments/assets/5428ff93-b99b-4c10-a63b-fc0f1cd45a23">
<img width="220"
src="https://github.com/user-attachments/assets/76b29583-915a-4a25-adb0-064313e77bf1">


## **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.
<!--
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 .add-non-evm-account-modal__footer background-color to allow its
parent background-color with border-radius applied

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/31374?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**

![CleanShot 2025-03-27 at 17 24
13@2x](https://github.com/user-attachments/assets/f14af6b8-db9e-4359-9733-8a1c30f22447)


### **After**

![CleanShot 2025-03-27 at 17 25
53@2x](https://github.com/user-attachments/assets/26498829-0607-4eb0-8aa2-255c91bed483)


## **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.
…eate a Solana account and switch to another network` (#31382)

<!--
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**
Fixes a race condition when we create a Solana account and immediately
switch to Solana Mainnet network. The problem is that the account is not
yet loaded when we perform the network switch, making the dialog for
"you need a Solana accoun" to sometimes appear, and obfuscate the next
action make the test fail with the error `ElementClickInterceptedError`:

![Screenshot from 2025-03-28
07-57-49](https://github.com/user-attachments/assets/d637197b-eef0-4f90-ae22-5af20ac48c90)

Failure:
https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/134203/workflows/554e280c-2fa9-4dff-8652-0398b8ab80a0/jobs/4697627/tests

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

## **Related issues**

Fixes:

## **Manual testing steps**

1. Check ci run with ff flask enabled:
https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/134219/workflows/52539bc9-bc6d-4d18-8fe6-fbdd51f48463/jobs/4697818

![Screenshot from 2025-03-28
08-17-21](https://github.com/user-attachments/assets/d913ad89-2b56-4d34-a35c-310c3c5a7ad2)


## **Screenshots/Recordings**
See dialog for "you need a Solana account" obfuscating the home page


![image](https://github.com/user-attachments/assets/77c9edb3-5359-4663-92c9-5a531a7752fc)


## **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.
…ge` (#31383)

<!--
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**
The problem is that we are missing the fetch trades mock, and that
request is redirected to the catch-all mock returning a 200 with empty
data.
Then, when the wallet tries to parse the data we get teh JSON error.

This happens ocasionally if there's "time" for that request to happen
and the wallet tries to parse the JSON response, within the test run.

![Screenshot from 2025-03-28
08-11-59](https://github.com/user-attachments/assets/0f426e16-3b5b-42f1-b886-f89e501b7fd5)


Circle ci error:
https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/134207/workflows/69597d81-ae63-41b1-b655-50d85e31b59b/jobs/4697734/tests

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

## **Related issues**

Fixes:

## **Manual testing steps**

1. Check ci run
https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/134223/workflows/9c61c340-c4b3-49c8-8590-d1e2f783f124/jobs/4697845

![Screenshot from 2025-03-28
08-34-05](https://github.com/user-attachments/assets/006cedfe-b110-4487-9000-98ca42fd46fd)



## **Screenshots/Recordings**
See the error fetching quotes behind the modal, which makes the test
fail due to the console error.

![Screenshot from 2025-03-28
08-08-06](https://github.com/user-attachments/assets/3e9f6335-73f4-46f2-9fae-a33da46e872f)


## **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.
…ge on tooltips` (#31384)

<!--
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**
In some of the change language specs, we change the language and
immediately click the close settings button. This action can have no
effect, if we click before the language is changes, as then there's a
re-render and we are still in the settings page.

We need to wait until the language has been changed before proceeding
with the next action. For that, we add a check to make sure the language
has changed, every time we perform a `changeLanguage` action.

![Screenshot from 2025-03-28
10-16-42](https://github.com/user-attachments/assets/bbded9ee-533e-4b34-bbdf-e7b05b3fa81f)


ci failure:
https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/134139/workflows/c284f602-6903-4a81-a0ac-48a05f987ee7/jobs/4696447/tests

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

## **Related issues**

Fixes:

## **Manual testing steps**

1. Check ci

## **Screenshots/Recordings**
See in the failure artifacts, how after clicking close settings, we
still remain in the settings page. The click was performed but took no
effect, as after that the page was re-rendered with the new language.
Then we try to look for an element from the home page but that can't be
found as we are still in settings



![image](https://github.com/user-attachments/assets/016d8cd0-13a4-4658-8979-e1d599e6a289)


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

Fix support link in EIP-5792 cancal request modal.

## **Related issues**

Fixes: MetaMask/MetaMask-planning#4526

## **Manual testing steps**

1. Go to test-dapp
2. Submit EIP-5792 send call request
3. Press cancel button and check learn more link

## **Screenshots/Recordings**
<img width="357" alt="Screenshot 2025-03-28 at 3 27 06 PM"
src="https://github.com/user-attachments/assets/0566ca88-f24d-477c-a920-255af002ea04"
/>

## **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.
…#31242)

## **Description**

Updating @metamask/user-operation-controller to version 31.0.0

## **Related issues**

Fixes: #31189

## **Manual testing steps**
NA

## **Screenshots/Recordings**
NA

## **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 <metamaskbot@users.noreply.github.com>
<!--
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 changes adds a `useAssetMetadata` hook that fetches asset details
if it is not found in existing token lists. I've also added more unit
test coverage for the asset-picker token filtering

See [Copilot summary for more
details](#31258 (review))

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

## **Related issues**

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

## **Manual testing steps**

1. Select solana as active network
2. Go to Bridge page
3. Get the address of a new pump.fun coin
4. Paste address into the asset picker's search bar
5. The token should appear on the list and be selectable
6. After filling out quote params, quotes should be fetched

## **Screenshots/Recordings**

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

### **Before**
No asset is shown
<!-- [screenshots/recordings] -->

### **After**


https://github.com/user-attachments/assets/e1cf7185-49f3-4b64-a31f-1232a19a995d


<!-- [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.
## **Description**
- This PR is mainly refactoring based on the feedback in the [main
PR](#31267) that was
merged + it updates the STX controller to the latest version.

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

## **Related issues**

Fixes:

## **Manual testing steps**

1. Have STX enabled
2. Be on Ethereum mainnet
3. Go to the Send feature
4. You will be able to choose your gas token if you have enough balance
for it and its a supported token

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

---------

Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com>
…reopened (#31343)

<!--
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/31343?quickstart=1)

## **Related issues**

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

## **Manual testing steps**

1. Request a Bridge quote with src=native token
2. Close extension popup
3. Open popup again
4. Balance should be repopulated and token icons should be visible

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

This pull request updates the Security Code Scanner by adding the
`workflow_dispatch` trigger. This trigger allows for the Code Scanner to
be manually triggered from your repository's `Action` tab.


For further questions, please contact the MetaMask Security team.
## **Description**
This PR resolves conflicting types between jest and mocha that were
causing [issues with the type of
"it"](https://github.com/search?q=org%3AMetaMask%20repo%3AMetaMask%2Fmetamask-extension%20it.each%20&type=code)
in unit tests which were masking type errors. It also fixes type issues
that were masked by previously disregarding type errors.


In particular, this PR creates an [isolated TypeScript configuration for
the e2e
tests](https://github.com/MetaMask/metamask-extension/pull/31049/files#diff-bfc1581736f7b790e103572bf8e349eab3346aaa0d29b505f8f9707bfd603e7e)
where they get their own type checking context. Since mocha is only
needed in e2e tests, Mocha types will not be considered for files
outside of that folder.
<!--
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/31049?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.
## **Description**

This reverts the changes made in #31058 because it breaks all the Snaps
confirmations.

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/31391?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.
We don't use this code path, but just having this url appear in our
extension bundle makes it looks like we could load code from an external
source, something which is not permitted by extension web stores.

To test: download the build (or build it yourself), extract it, search
the source the code for `browser.sentry-cdn.com`. It should not exist.

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


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

## **Related issues**

Fixes:

## **Manual testing steps**

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

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

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

After this PR was merged:
#30709 all specs are
now running in Anvil by default. In this PR I'm updating more old
ganache references, to make them client agnostic.

There are no functional changes in this PR, so we can skip the quality
gate

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

## **Related issues**

Fixes:

## **Manual testing steps**

1. Check ci -- everything should be working as before

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

This PR updates the default font family across the MetaMask extension
from `Euclid Circular B` to `CentraNo1` to align with brand evolution
updates. The changes include:

1. Updating font family declarations in SCSS and component files from
'Euclid Circular B' to the design tokens
`--font-family-sans`('CentraNo1')
2. Simplifying text component styling by removing brand evolution
feature flag
3. Updating SVG text elements and third party components to use
CentraNo1 font family

The changes are part of the broader [brand evolution
initiative](https://consensys.slack.com/archives/C1L7H42BT/p1742922214475199)
to standardize typography across MetaMask products.

## Related issues

Fixes: MetaMask/MetaMask-planning#4408

## Manual testing steps

1. Build and load the extension
2. Ensure the font files load in the network tab
3. Navigate through various screens and verify text rendering
4. Verify that all text elements are using `CentraNo1` font family
5. Check that no visual regressions have been introduced
6. Pay special attention to:
   - Headers and titles
   - Body text
   - Form inputs

## Screenshots/Recordings

### Before

Navigating around the extension with current Euclid Circular B font
family in expanded and popup view


https://github.com/user-attachments/assets/48cdd000-1762-47d2-90b3-ac37827add48


https://github.com/user-attachments/assets/6422da7e-c0a9-46b6-859e-2f391aa77830

Text component in storybook with curent Euclid Circular B font family


https://github.com/user-attachments/assets/6dc74c95-9857-4bb5-85d7-e610b60e746a

### After
Navigating around the extension with updated CentraNo1 font family in
expanded and popup view


https://github.com/user-attachments/assets/57c06242-5017-4356-8e5f-f7d399404408


https://github.com/user-attachments/assets/f0c8a71b-bc74-4768-a4f3-397c477157b1

Text component in storybook with updated CentraNo1 font family


https://github.com/user-attachments/assets/fee38240-3197-4b01-9a92-849398ab5926

No instances of Euclid left in codebase apart from mock e2e test urls
for `snap-account-abstraction-keyring`

![Screenshot 2025-03-27 at 2 45
51 PM](https://github.com/user-attachments/assets/6fab1f49-e1ac-4466-beae-0b37b548e533)

## 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 (updated text component tests)
- [x] I've documented my code (updated SCSS comments and type
definitions)
- [x] I've applied the right labels on the PR

## 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
<!--
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 modifies the tab colors to improve the visual hierarchy of the
page. It adds a hover effect and animations to make the transitions
smoother.

## **Related issues**

None

## **Manual testing steps**

1. Open MetaMask
2. Hover and click on tabs

## **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/77cf3c03-1e07-4633-8df1-c472e9da8f8a


### **After**



https://github.com/user-attachments/assets/3dd38f4d-3c8b-4a24-909b-2aabb8216366


## **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: Nick Gambino <35090461+gambinish@users.noreply.github.com>
## **Description**

We recently decided that we wanted to sort by token name, rather than
symbol. The problem is that native tokens for several chains display
`Ethereum` when in actuality the name we get from the token API is
something like `Linea`. This would cause native tokens on some EVM
chains to be miscategorized in sort.

This PR overrides the token name for this scenario. It also consolidates
the `name` and `title` fields to support both EVM and nonEVM chains.

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

## **Related issues**

Fixes: #31235

## **Manual testing steps**

1. Please test on both flask and non flask builds.
2. EVM and Solana tokens should now be sorted by their display name (not
symbol)
3. Check on both firefox and chrome

## **Screenshots/Recordings**

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

### **Before**

Before scenarios in bug ticket linked.

### **After**

Chrome:

<img width="360" alt="Screenshot 2025-03-25 at 12 58 45 PM"
src="https://github.com/user-attachments/assets/b5262950-c649-47da-b18c-1b1daa9c5c01"
/>
<img width="1087" alt="Screenshot 2025-03-25 at 1 01 00 PM"
src="https://github.com/user-attachments/assets/a818d72a-22fc-438a-981b-318dc8faedaa"
/>

Firefox:

<img width="539" alt="Screenshot 2025-03-25 at 1 07 11 PM"
src="https://github.com/user-attachments/assets/f6a2143d-c4a3-4d83-b0ca-bc943b6ba77f"
/>


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

<!--
-->

Updates the color of values from text-alternative to text-default. This
allows users to focus on the information and improves consistency across
pages.

## **Related issues**

None

## **Manual testing steps**

1. Open MetaMask
2. Click on NFT Details

## **Screenshots/Recordings**

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

### **Before**

<img width="355" alt="Screenshot 2025-03-11 at 12 17 22 AM"
src="https://github.com/user-attachments/assets/79db2057-7700-4fdc-8f4a-63b1ee621536"
/>


### **After**

<img width="353" alt="Screenshot 2025-03-11 at 12 19 28 AM"
src="https://github.com/user-attachments/assets/05a3def1-53b9-42d5-9c45-1f622d94ede1"
/>


## **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: Nick Gambino <35090461+gambinish@users.noreply.github.com>
)

## **Description**

Prevent tab from opening upon every browser startup.

A [recent PR](#29826)
updated the logic for how we determine whether the extension was just
installed or not; we used to check state, but now we use the
`runtime.onInstalled` event instead to store a flag in session storage
indicating whether the extension was just installed.

Unfortunately this PR had a couple of bugs; the condition using this
flag was accidentally reversed, and the read from session storage was
never successful because of a race condition (the write had not finished
yet).

To address both problems, the logic for detecting first install was
refactored to use a global variable instead of session storage. Globals
can be accessed and written synchronously, preventing any possibility of
a race condition.

The solution was complicated by the fact that MV3 builds must add an
`onInstalled` listener in the root service worker module, otherwise the
listener is never called (we tested this experimentally). It was also
unclear whether the listener would always run before or after the
`background.js` script loading, and we need to trigger an action in
`background.js` on install. But we've accounted for both possibilities
in this solution.

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

## **Related issues**

Fixes: #30924

## **Manual testing steps**

* Create a production-like build (`yarn dist` and `yarn dist:mv2`), or
download the builds from the `metamaskbot` comment
* Test that the window opens only on first install, not on later browser
restarts.

## **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
- [ ] 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.
…0970)

<!--
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 fixes a rare issue when a user, usually a developer, manually
opens notification.html in a browser tab.

We avoid using `browser.windows.remove(id)` to prevent closing all tabs
in a window.

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

## **Related issues**

* Fixes: #29821

## **Manual testing steps**
Test that browser tab does not auto-close:
1. Open MM in a browser tab
2. Change url path from /home.html => /notification.html
3. Browser tab should stay open (previously the entire window was
closed)

Test that notification popup auto-closes:
4. Open notification popup by visiting a dapp and doing something (like
connecting) that requires permission
5. Cancel/Decline the request in the notification popup
6. Notification popup should auto-close.

## **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.
…31254)

…chitecture

<!--
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/31254?quickstart=1)

## **Related issues**
refactor the token rates controller to modular init architecture

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

Fix balance change simulation of type-4 transactions by bumping
`@metamask/transaction-controller` to `52.3.0`.

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

## **Related issues**

Fixes:
[#4506](MetaMask/MetaMask-planning#4506)

## **Manual testing steps**

## **Screenshots/Recordings**

### **Before**

### **After**

## **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.
<!--
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**
Add tests based on PR
#30896
1. Add ETH to WETH swap 
2. Add send swap ETH to WETH (removed the previous one)

<!--
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?
3. What is the improvement/solution?
-->

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

## **Related issues**

Fixes:

## **Manual testing steps**

1. Go to this page...
2.
4.

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

---------

Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com>
Co-authored-by: seaona <54408225+seaona@users.noreply.github.com>
Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>
Co-authored-by: MetaMask Bot <metamaskbot@users.noreply.github.com>
Co-authored-by: Micaela Estabillo <100321200+micaelae@users.noreply.github.com>
Co-authored-by: Daniel <80175477+dan437@users.noreply.github.com>
Co-authored-by: MetaMask Bot <37885440+metamaskbot@users.noreply.github.com>
Co-authored-by: Derek Brans <dbrans@gmail.com>
Co-authored-by: Guillaume Roux <guillaumeroux123@gmail.com>
Co-authored-by: David Murdoch <187813+davidmurdoch@users.noreply.github.com>
Co-authored-by: George Marshall <george.marshall@consensys.net>
Co-authored-by: Amanda Yeoh <147617420+amandaye0h@users.noreply.github.com>
Co-authored-by: Nick Gambino <35090461+gambinish@users.noreply.github.com>
Co-authored-by: Mark Stacey <mark.stacey@consensys.net>
## **Description**

Ensures that we handle array images correctly be defaulting to their
first image

<!--
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/30494?quickstart=1)

## **Related issues**

Fixes: https://consensys.slack.com/archives/C8RSKCNCD/p1739984618053419

## **Manual testing steps**

1. Use Flask Build > Enable Watched Accounts
2. Add watched address that owns this NFT:
https://polygonscan.com/token/0x4b22c268e3f7f643686e0dfb160b40fe5328cccd?a=0x397d7171504776AD3d5f578ce772914539E28a49
(contract: `0x4b22C268E3f7f643686E0dfB160B40fE5328cccD`, TokenID:
`6822`)
3. Select this watched address and navigate to NFT page.
4. Expect NFT to render - (expected image:
`ipfs://bafybeidgklvljyifilhtrxzh77brgnhcy6s2wxoxqc2l73zr2nxlwuxfcy`)

## **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.
@DDDDDanica DDDDDanica requested review from a team, HowardBraham and dbrans as code owners April 25, 2025 12:23
@DDDDDanica
Copy link
Contributor

@metamaskbot update-attributions

@metamaskbot
Copy link
Collaborator Author

No attributions changes

… `^21.0.4`(#32287) cp-12.17.0 (#32291)

<!--
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**
Cherry-pick #32287
<!--
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? -->
Bumping `@metamask/keyring-controller` to `^21.0.4`
```markdown
## [21.0.4]

### Fixed

- Ensure no duplicate accounts are persisted ([#5710](MetaMask/core#5710))
```

[![Open in GitHub

Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32287?quickstart=1)

## **Related issues**

Fixes: #32097 

## **Manual testing steps**

### In order to test the fix, you first need a wallet bricked because of
a duplicate account:
- Checkout on the v12.16.0 release branch and build locally (a version
with multi-srp support)
- Import or create an SRP (I used `child guilt hollow arrive average
popular nasty soon summer like scheme diary pill country rapid`)
- Import an account that is part of the mnemonic (e.g. I used
`0x80842b7e3cfb1118e86a427cdec418e3b4179ef5bbbfd71c02a76349831c8a8b`
which is the account at index 2 of the above SRP)
- Add a new account on the main HD - note that you'll be able to add the
account, but (1) the account is the same as the imported one
(expectable) and (2) the newly added account is wrongly labeled as
"imported"
- Lock the wallet
- Unlock it with the right password - you will see the reported error:
```
Error: KeyringController - The account you are trying to import is a duplicate
await in withLock		
submitPassword	@	metamask-controller.js:4343
await in submitPassword		
(anonymous)	@	createMetaRPCHandler.js:23
```

### Testing the fix
- Without removing the extension from the browser, switch to this PR
branch and build again
- Visit [chrome://extensions/](chrome://extensions/) and reload the
extension
- Try to login again, you should be able to access the wallet again

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

<!--
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/32291?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.

---------

Co-authored-by: Michele Esposito <34438276+mikesposito@users.noreply.github.com>
@DDDDDanica
Copy link
Contributor

@metamaskbot update-attributions

@metamaskbot
Copy link
Collaborator Author

Attributions updated

@metamaskbot
Copy link
Collaborator Author

Builds ready [95864ba]
UI Startup Metrics (1208 ± 73 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1208109615417312441310
load10579591347621223986
domContentLoaded10519551341611224984
domInteractive17136071629
firstPaint7261651222411241980
backgroundConnect7420379
firstReactRender20154252037
getState13544879
initialActions001001
loadScripts809705109059841882
setupStore8428379
WebpackHomeuiStartup21701757267620323072458
load17011372217217618191981
domContentLoaded16941369216717418111964
domInteractive171370101546
firstPaint18765171916623581
backgroundConnect291085163567
firstReactRender199573521146595
getState13456979
initialActions318134
loadScripts16881368216517118071949
setupStore23727335269
FirefoxBrowserifyHomeuiStartup13501182169410914041602
load12071021156311412621479
domContentLoaded12071021156211412611479
domInteractive10338362449498
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect2313130182041
firstReactRender23197572327
getState7421279
initialActions001001
loadScripts11851004154711612441466
setupStore7436567
WebpackHomeuiStartup15731387217915016291922
load13591211194413714221628
domContentLoaded13581210194313714221627
domInteractive9837198259096
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect21148292231
firstReactRender35295043845
getState8430589
initialActions101011
loadScripts13401191192313614061603
setupStore1052752789

…oved networks (#32293) cp-12.17.0 (#32300)

CP: #32293
<!--
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 ensures we handle better native token display names when you bridge
or swap tokens for networks you have removed or not added.

[![Open in GitHub

Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/32293?quickstart=1)

## **Related issues**

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

## **Manual testing steps**

1. Add BASE network (if you have native tokens in base, otherwise use a
different network you have native tokens for)
2. Try to bridge to BASE - you should see the native token
3. Remove BASE
4. Try to bridge to BASE - you should see the correct native token still
displayed

## **Screenshots/Recordings**

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

### **Before**

https://www.loom.com/share/812617be0e6e4101b777ff56c367ce0a

### **After**



https://www.loom.com/share/1df5613c2b274314b2839bc143a3cbad?sid=a7776357-eab8-473d-b2a6-2da71f3c4107

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

<!--
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/32300?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.

---------

Co-authored-by: Prithpal Sooriya <prithpal.sooriya@gmail.com>
@metamaskbot
Copy link
Collaborator Author

Builds ready [8e86618]
UI Startup Metrics (1216 ± 52 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1216112314025212451321
load10619761233481112992
domContentLoaded10559711224481107989
domInteractive18136291643
firstPaint7281401168413245989
backgroundConnect7426479
firstReactRender20165142127
getState13541879
initialActions001001
loadScripts81071698147842874
setupStore8518279
WebpackHomeuiStartup21361682259119322742391
load16711301207116817552001
domContentLoaded16651296206616717471992
domInteractive171255101450
firstPaint161664216323587
backgroundConnect279242253055
firstReactRender187553651166294
getState12339669
initialActions317135
loadScripts16601294206316317451964
setupStore22627135279
FirefoxBrowserifyHomeuiStartup14361215184911814891705
load12831088169211513331522
domContentLoaded12821088169211513331522
domInteractive10039175269098
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect2214147152242
firstReactRender24205352633
getState8446689
initialActions001001
loadScripts12621073167711213191452
setupStore7436568
WebpackHomeuiStartup15461346208213616011819
load13351171185013013841585
domContentLoaded13351171185013013841584
domInteractive9837321338696
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect20144452230
firstReactRender35295153746
getState9465879
initialActions102111
loadScripts13171157183213013651566
setupStore1053073089

@metamaskbot
Copy link
Collaborator Author

Builds ready [2621ca2]
UI Startup Metrics (1203 ± 57 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1203109513945712391319
load10479321234551170996
domContentLoaded1041925122755952995
domInteractive17136171631
firstPaint7041391233408245980
backgroundConnect7424379
firstReactRender2315133162032
getState13448968
initialActions001001
loadScripts79768595955831905
setupStore8519378
WebpackHomeuiStartup20931716263021622692361
load16411338203416717581933
domContentLoaded16351330202316517541928
domInteractive171279131449
firstPaint166673786324394
backgroundConnect27925528279
firstReactRender169543801176794
getState1441762079
initialActions317134
loadScripts16301328199416217531900
setupStore27628655319
FirefoxBrowserifyHomeuiStartup13561172174611214201581
load12151050162311312861454
domContentLoaded12151049162311312861454
domInteractive10139290339198
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect2113158162031
firstReactRender22193432329
getState7438478
initialActions005101
loadScripts11951034160711412701436
setupStore942142167
WebpackHomeuiStartup15821404202313916541901
load13641201176812814181643
domContentLoaded13631201176712814181642
domInteractive9941186268594
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect241585102446
firstReactRender37305153948
getState10532689
initialActions102111
loadScripts13431185174612713991626
setupStore9575889

@Gudahtt Gudahtt merged commit 5471195 into master Apr 29, 2025
296 checks passed
@github-actions github-actions bot locked and limited conversation to collaborators Apr 29, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

extension-delivery team-bots Bot team (for MetaMask Bot, Runway Bot, etc.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.