Skip to content

[pull] main from MetaMask:main#586

Merged
pull[bot] merged 13 commits into
Reality2byte:mainfrom
MetaMask:main
Mar 9, 2026
Merged

[pull] main from MetaMask:main#586
pull[bot] merged 13 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Mar 9, 2026

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 : )

OGPoyraz and others added 13 commits March 9, 2026 08:05
<!--
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 -->
@pull pull Bot locked and limited conversation to collaborators Mar 9, 2026
@pull pull Bot added the ⤵️ pull label Mar 9, 2026
@pull pull Bot merged commit 78688b1 into Reality2byte:main Mar 9, 2026
2 of 36 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.