[pull] main from MetaMask:main#586
Merged
Merged
Conversation
<!--
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?
-->
Updates `TransactionPayController` to `16.4.0`.
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry:
## **Related issues**
Fixes: -
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [X] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [X] I've completed the PR template to the best of my ability
- [X] I've included tests if applicable
- [X] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [X] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] 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.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Dependency-only change, but it upgrades a transaction/payment
controller that can impact transaction submission and fee/payment
behavior at runtime.
>
> **Overview**
> Bumps `@metamask/transaction-pay-controller` from `16.3.0` to
`16.4.0`, updating both `package.json` and the corresponding `yarn.lock`
resolution/checksum.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
c107088. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…SS (Part 2) (#26736) ## **Description** Replace StyleSheet.create() and raw View/Text components with design-system-react-native Box/Text and useTailwind() in ImportFromSecretRecoveryPhrase and ImportNewSecretRecoveryPhrase. Delete the now-unused .styles.ts files. Part 2 of 2. Part 1: #26673 ## **Changelog** CHANGELOG entry: null ## **Related issues** Refs: [TO-554 - Migrate @MetaMask/web3auth onboarding screens to Design System with Tailwind CSS](https://consensyssoftware.atlassian.net/browse/TO-554) ## **Manual testing steps** No functional changes. Visual regression only — verify import SRP screens render correctly. ```gherkin Feature: Import SRP screens styling Scenario: user imports wallet using SRP Given app is freshly installed When user taps "I already have a wallet" and enters SRP Then import screens render identically to before ``` ## **Screenshots/Recordings** ### **Before left, after right** <img width="500" height="1066" alt="Screenshot 2026-03-02 at 11 16 46 AM" src="https://github.com/user-attachments/assets/4ef5ca42-5c71-42d2-b16e-5bbd8ec77f16" /> <img width="500" height="1059" alt="Screenshot 2026-03-02 at 11 16 59 AM" src="https://github.com/user-attachments/assets/3e8b276e-937e-429d-b962-ecbc3b001bbb" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] 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. Made with [Cursor](https://cursor.com) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Primarily a UI refactor, but it touches the wallet import/onboarding SRP flows where styling/layout regressions could block users or break keyboard/safe-area behavior across iOS/Android. > > **Overview** > Migrates `ImportFromSecretRecoveryPhrase` and `ImportNewSecretRecoveryPhrase` from `StyleSheet.create()` and raw `View`/library `Text` components to design-system `Box`/`Text`/`Label` with `useTailwind()` styling, including minor platform-specific spacing tweaks. > > Deletes the now-unused `styles.ts` files and updates the Jest snapshot to reflect the new component/styling output. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2c5e19c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- 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** - A week ago I merged [this](#25512) PR which fixed an issue regarding O(n) api calls in tokens list (n being the number of tokens. - My PR changes were reverted by [this](#25555) PR from @dawnseeker8 - I believe this was a mistake so I am re-adding my changes <!-- 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? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix avoid O(n) api calls to on-ramp endpoint ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-2850 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **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 Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/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-mobile/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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches token list rendering on the homepage and full token list by changing `TokenListItem`/`TokenListItemV2` props and CTA-visibility wiring; failures would mainly impact mUSD CTA display and could cause runtime errors if any call sites miss the new prop. > > **Overview** > **Prevents repeated on-ramp lookups while rendering token rows.** `useMusdCtaVisibility()` is now invoked once in `TokenList` and `TokensSection`, and its `shouldShowTokenListItemCta` predicate is passed down to each `TokenListItem`/`TokenListItemV2`. > > Token row components no longer call `useMusdCtaVisibility()` internally, and unit tests were updated/mocked accordingly to supply the new required `shouldShowTokenListItemCta` prop. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit afc473c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
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**
update the new home page redesign defi section to always show popular
networks
<!--
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?
-->
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: update the new home page redesign defi section to
always show popular networks
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
https://github.com/user-attachments/assets/bdff5b07-959d-43e7-8c3a-dd9098ee26bf
## **Pre-merge author checklist**
- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] 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-mobile/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.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Changes DeFi positions filtering/enablement logic (including testnet
and non-popular network handling) behind a feature flag, which can alter
what users see and which controls are enabled. Risk is mitigated by
added unit coverage and flag-gated behavior, but incorrect chain list
selection could hide/show positions unexpectedly.
>
> **Overview**
> **Homepage DeFi positions now prefer popular networks when
`homepageSectionsV1` is enabled.** The homepage DeFi hook switches from
“enabled networks” filtering to an explicit popular-chain list, using a
new selector `selectDefiPositionsByChainIds` to fetch only those chains’
positions.
>
> **DeFi positions control bar disabling is relaxed under the same
flag.** When `homepageSectionsV1` is enabled, the network filter is no
longer disabled on testnets or non-popular networks; otherwise it keeps
the prior testnet/popular-network gating. Tests were updated/added to
cover the new selector and flag-dependent UI behavior.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
bf0897e. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
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**
update the new home page nft section redesign to always show popular
networks
<!--
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?
-->
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: update the new home page nft section redesign to always
show popular networks
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
https://github.com/user-attachments/assets/137702a5-b7df-4cb6-a75d-040a4b7495bd
## **Pre-merge author checklist**
- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] 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-mobile/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.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Updates NFT selection logic used by homepage to pass dynamic
chain/address filters into a shared selector, which could change which
NFTs appear across networks/accounts. No auth/security impact, but
affects core asset display behavior.
>
> **Overview**
> Updates the homepage `useOwnedNfts` hook to **optionally filter by
“popular” networks** (when the homepage sections V1 flag is enabled) and
to **aggregate NFTs across all addresses in the selected account
group**, rather than only the currently selected address.
>
> Extends `multichainCollectiblesByEnabledNetworksSelector` to accept
optional `preferredChainIds` (including CAIP-2 `eip155:*`, normalized to
hex) and `addressesOverride`, while preserving the previous
enabled-network fallback; corresponding unit tests are updated/added for
the new selector and hook behavior.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f6da55a. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**
Minor spacing tweaks for the homepage sections:
1. **Add top margin to the homepage container** -- Adds `marginTop={4}`
(4 units) to the main Homepage `Box` to create breathing room between
the action buttons and the first section.
2. **Add horizontal margin to perps sparkline** -- The sparkline chart
in `PerpsMarketTileCard` was touching the edges of the card. Adds 4
units of horizontal margin to the sparkline container and adjusts the
sparkline width calculation accordingly, matching the Figma spec.
3. **Adjust section gap** -- Changed the gap between homepage sections
from 12 to 10 units for better visual balance.
## **Changelog**
CHANGELOG entry: null
## **Related issues**
Refs: https://consensyssoftware.atlassian.net/browse/TMCU-541
## **Manual testing steps**
```gherkin
Feature: Homepage spacing tweaks
Scenario: Sections have top margin and adjusted gap
Given user is on the homepage
When user views the sections area
Then there is spacing above the Tokens section
And the gap between sections is 10 units
Scenario: Perps sparkline has horizontal padding
Given user is on the homepage with the Perps carousel visible
When user views a perps market tile card
Then the sparkline chart has padding on left and right edges
```
## **Screenshots/Recordings**
N/A -- spacing-only changes, verified on device.
### **Before**
#### Sections top margin
<img width="300"
src="https://github.com/user-attachments/assets/7880c290-fefc-4d5c-9a4c-5ea1c32ae68b"
/>
#### Perpetuals Market Card
<img width="300"
src="https://github.com/user-attachments/assets/d428a82b-de63-4233-9c03-01060e3ba367"
/>
### **After**
#### Sections top margin
<img width="300"
src="https://github.com/user-attachments/assets/61339a0f-1976-4cbc-9321-2139e06ce6df"
/>
#### Perpetuals Market Card
<img width="300"
src="https://github.com/user-attachments/assets/3021b48f-73de-4e8e-b1d0-8164866e9eee"
/>
#### Sections Gap
https://github.com/user-attachments/assets/0de548cb-d8c2-4ed9-8f54-abec22d3c794
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] 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.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
5f8d7fb. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…xt and icons (#27067) <!-- 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** 1. **What is the reason for the change?** In Networks Management, when a network has multiple RPCs the list showed the raw RPC URL. That was inconsistent with how RPC URLs are shown elsewhere (e.g. Network Selector). 2. **What is the improvement/solution?** - **Networks Management**: RPC URLs are now formatted for display the same way as in Network Selector: API key stripped via `hideKeyFromUrl`, protocol stripped via `hideProtocolFromUrl`, so users see short host + path only (e.g. `mainnet.infura.io/v3` instead of `https://mainnet.infura.io/v3/abc123`). Long URLs are truncated to 36 characters with an ellipsis so they fit on one line without changing shared cell layout. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Improved RPC URL display in Networks Management to hide protocol and API keys, matching Network Selector, and fixed layout so long URLs truncate correctly. ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: Networks Management RPC display Scenario: user views a network with multiple RPCs Given the user has the Networks Management feature enabled And at least one network has multiple RPC endpoints When the user opens Networks Management and looks at the network list Then the secondary text shows the RPC URL without protocol (e.g. no "https://") And the secondary text does not show API keys or key-like path segments And long RPC URLs truncate with ellipsis and the dropdown arrow remains visible ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="378" height="135" alt="Screenshot 2026-03-05 at 16 39 57" src="https://github.com/user-attachments/assets/fb8a75a5-dbb7-41a4-a65b-0bd174f15c45" /> <!-- [screenshots/recordings] --> ### **After** <img width="382" height="137" alt="Screenshot 2026-03-05 at 17 29 03" src="https://github.com/user-attachments/assets/0458ffd7-8690-4b4e-802b-69d7f7b2272c" /> <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Low risk UI-only change that affects how RPC URLs are displayed (hiding protocol/API keys and truncating long values). Main risk is minor regressions in string formatting/edge cases for unusual URLs. > > **Overview** > Updates Networks Management network list cells to display formatted RPC URLs (protocol/API-key removed) instead of the raw URL when a network has multiple RPCs. > > Introduces `formatRpcUrlForDisplay` with a 36-char truncation rule and adds focused unit tests (including edge cases for `undefined`/`null` returns and overlong URLs). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f15d1d0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- 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** **Bug fix** Fixed market_insights_displayed always reporting false in the `TOKEN_DETAILS_OPENED` event by initializing `isLoading` to true in `useMarketInsights` when a fetch will occur, preventing a race condition where the tracking callback fired before loading started and deduplication blocked the correct value ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TSA-243 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [ ] 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-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Low risk state-initialization change in a React hook; main risk is a minor behavior shift where `isLoading` may start `true` when enabled and an asset id is present. > > **Overview** > Fixes a race where market insights tracking could run before loading begins by initializing `useMarketInsights`’s `isLoading` state to `true` whenever the hook is enabled and a `caip19Id` is provided, ensuring first-render consumers don’t see a transient “not loading” state before the initial fetch. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2033d2c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
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**
We're updating the digest API url, just to be a bit cleaner.
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: null
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **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 Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/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-mobile/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.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Low risk configuration-only change that repoints the Digest service
base URL; main risk is misconfiguration causing Digest/AiDigest requests
to fail in certain build environments.
>
> **Overview**
> Updates the Digest service base URL by switching `DIGEST_API_URL` from
`digest-api.*` to the cleaner `digest.*` hostname.
>
> This change is applied both to the app’s fallback constant
(`AppConstants.DIGEST_API_URL`) and to `builds.yml` so production and
non-prod build variants all point at the updated endpoints.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a722183. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- 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? --> - Add `selectTransactionPayFiatPaymentByTransactionId` selector to read `fiatPayment` from `TransactionPayController` state per transaction - Add `useTransactionPayFiatPayment()` data hook following the existing `useTransactionPayData` pattern - Add `useTransactionPaySelectedFiatPaymentMethod()` hook that resolves the selected fiat payment method ID to the full `PaymentMethod` object from `RampsController`, returning `undefined` when nothing is selected ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: #27111 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [X] I've included tests if applicable - [X] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Low risk: adds read-only selectors/hooks and unit tests without changing transaction execution or payment logic. > > **Overview** > Adds a new `selectTransactionPayFiatPaymentByTransactionId` selector plus a `useTransactionPayFiatPayment()` hook to expose `fiatPayment` from `TransactionPayController` state for the active confirmation transaction. > > Introduces `useTransactionPaySelectedFiatPaymentMethod()` to map `fiatPayment.selectedPaymentMethodId` to the corresponding `PaymentMethod` from `useRampsPaymentMethods`, returning `undefined` when unset or unmatched, and adds unit coverage for the new selector/hook behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 151d4a5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ers (#27189) <!-- 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? --> ## Summary - Adds `fiatOrders.rampRoutingDecision` to the fixture validation ignored keys — it's a non-deterministic runtime value (set by ramps routing detection) that was causing a false positive on main - Restricts the `validate-e2e-fixtures` CI job to only run on PRs, not on pushes to `main`, scheduled runs, or merge queue ## Problem The fixture validation job was failing on `main` with a cyclic false positive: 1. **Run 1** — fixture has `null`, live app produces `"AGGREGATOR"` (ramps routing detection ran). Type mismatch detected → test writes updated fixture to disk with `"AGGREGATOR"` before throwing. 2. **Run 2 (retry)** — reads the just-updated fixture (`"AGGREGATOR"`), but live app returns `null` this time. New type mismatch: `expected "string", received "null"`. Fails again. `rampRoutingDecision` is non-deterministic between runs (same category as `fiatOrders.detectedGeolocation`, which was already ignored). Running the job on `main` pushes also has no useful effect — there's no PR to comment on and no one to action the result. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Medium risk because it changes CI execution conditions (fixture validation no longer runs on non-PR events) and expands the ignored schema keys, which could hide genuine fixture drift for that field. > > **Overview** > **Stabilizes E2E fixture validation** by adding `fiatOrders.rampRoutingDecision` to the fixture-validation ignore list to avoid non-deterministic runtime mismatches. > > **Adjusts CI behavior** so the `validate-e2e-fixtures` job only runs on `pull_request` events (still skipping forks), rather than running on other event types like `push`/scheduled runs. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 866b310. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- 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? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: MetaMask/MetaMask-planning#6982 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <img width="397" height="852" alt="Screenshot 2026-02-26 at 6 56 11 PM" src="https://github.com/user-attachments/assets/c53aba8a-938c-454f-acae-634fc933778b" /> ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [X] I've included tests if applicable - [X] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [X] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Changes payment-token availability/selection logic to enforce a remote-configured blocklist, which could unintentionally disable valid tokens or alter default token selection if misconfigured. > > **Overview** > **MetaMask Pay token lists now respect a remote-configured blocklist.** A new `blockedTokens` config is added to `confirmations_pay_tokens` flags (with per-transaction-type overrides) and consumed via `useTransactionPayBlockedTokens` in both `PayWithModal` and `useTransactionPayAvailableTokens`. > > `getAvailableTokens` now marks blocklisted chains/tokens as `disabled` with a new `pay_with_modal.not_supported` message, and sorts disabled tokens to the bottom; tests were expanded/updated to cover blocklist resolution and behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2eba3c5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description**
Display TRX that is currently in the 14-day unstaking lock period on the
token details view.
Adds:
- `TronUnstakingBanner` component showing "Unstaking X TRX in progress.
It takes 14 days for unstaking." with `Info` severity
- `createTronDerivedAsset.ts` utility with `createInLockPeriodTrxAsset`
and `createStakingRewardsTrxAsset` helpers
- Staking rewards `Balance` row rendered conditionally when staking
rewards data is available
- Derives `inLockPeriodTrxAsset` and `stakingRewardsTrxAsset` from the
Tron special assets selector in `useTokenBalance`
- Uses `Text` from `@metamask/design-system-react-native` (not
deprecated component-library)
## **Changelog**
CHANGELOG entry: Added a banner to display TRX in the 14-day unstaking
lock period on the token details view
## **Related issues**
Refs: NEB-577
## **Manual testing steps**
```gherkin
Feature: TRX unstaking lock period display
Scenario: user views TRX token details with TRX in lock period
Given user has TRX that is in the 14-day unstaking lock period
When user navigates to the TRX token details view
Then an info banner is displayed showing "Unstaking X TRX in progress. It takes 14 days for unstaking."
Scenario: user views TRX token details without TRX in lock period
Given user has no TRX in the unstaking lock period
When user navigates to the TRX token details view
Then no unstaking banner is displayed
```
## **Screenshots/Recordings**
### **Before**
N/A - new feature
### **After**
<!-- Screenshots to be added after manual testing -->
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] 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.
Made with [Cursor](https://cursor.com)
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Touches the shared `formatWithThreshold` utility and
`useTokenBalance`, which can affect balance formatting across the app if
unexpected `NaN`/parsing cases occur. UI changes are otherwise gated to
Tron-native TRX and only render when a positive lock-period balance is
present.
>
> **Overview**
> Displays a new Tron-native TRX *unstaking in progress* info banner on
the token details screen when `trxInLockPeriod` from
`selectTronSpecialAssetsBySelectedAccountGroup` is a positive value.
>
> Extends `useTokenBalance` to derive and locale-format
`inLockPeriodBalance` (and threads it through
`TokenDetails`/`AssetOverviewContent`), adds a dedicated
`TronUnstakingBanner` component + tests, and hardens
`formatWithThreshold` to return an empty string for `NaN` (with a new
unit test).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f482b1a. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )