Skip to content

[pull] main from MetaMask:main#503

Merged
pull[bot] merged 6 commits into
Reality2byte:mainfrom
MetaMask:main
Feb 6, 2026
Merged

[pull] main from MetaMask:main#503
pull[bot] merged 6 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Feb 6, 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 : )

abretonc7s and others added 6 commits February 6, 2026 09:16
…les (#25688)

## **Description**

This PR refactors the Perps codebase to ensure consistent usage of
**object parameters** across all service and provider methods. This is a
pure code quality improvement with no behavioral changes.

### Changes Summary

**1. HyperLiquidClientService.ts**
- Extracted repeated inline wallet type to `HyperLiquidWalletParams`
interface (was duplicated 3x)
- Converted `ensureTransportReady(timeoutMs)` to `ensureTransportReady({
timeoutMs? })`
- Converted `fetchHistoricalCandles(symbol, interval, limit, endTime)`
to object params

**2. EligibilityService.ts**
- Converted `checkEligibility(blockedRegions)` to `checkEligibility({
blockedRegions })`

**3. HyperLiquidProvider.ts**
- Updated `updateMargin()` to use existing `UpdateMarginParams` type
from types/index.ts

**4. PerpsController.ts**
- Updated `fetchHistoricalCandles()` to use object parameters

**5. Updated all call sites:**
- HyperLiquidSubscriptionService.ts
- MarketDataService.ts
- CandleStreamChannel.ts
- All related test files

### Why This Change

The Perps codebase already uses object parameters pattern for ~95% of
its methods. This PR addresses the remaining 5% of inconsistencies to:
- Ensure a consistent API style across the codebase
- Reduce code duplication (wallet type was defined inline 3 times)
- Make future API extensions easier (adding optional params to object is
non-breaking)
- Align with the established patterns in PerpsProvider interface

## **Changelog**

CHANGELOG entry: null

## **Related issues**

N/A - Code quality refactor

## **Manual testing steps**

```gherkin
Feature: Perps functionality works unchanged

  Scenario: User views candle charts
    Given user is on a perps trading view
    When user opens the chart for any asset
    Then chart should display candle data correctly

  Scenario: Eligibility check works
    Given user opens perps feature
    When geo-location is checked
    Then eligibility is determined correctly based on blocked regions
```

## **Screenshots/Recordings**

N/A - No visual changes

### **Before**

N/A

### **After**

N/A

## **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**
> Mostly signature/type refactors with updated tests; primary risk is
missed call sites or subtle default-value differences causing runtime
argument mismatches.
> 
> **Overview**
> Standardizes Perps controller/service/provider APIs to use *object
parameters* instead of positional arguments, updating all call sites and
tests accordingly.
> 
> Key refactors include: `PerpsController.fetchHistoricalCandles`,
`MarketDataService` delegation to provider
`clientService.fetchHistoricalCandles`,
`EligibilityService.checkEligibility`, and
`HyperLiquidClientService.ensureTransportReady`/`fetchHistoricalCandles`
(plus extracting a shared `HyperLiquidWalletParams` type).
`HyperLiquidProvider.updateMargin` is also switched to the shared
`UpdateMarginParams` type.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e3023f5. 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**
Seeing a bug with NFT import on mobile for a custom network. On
extension, the image for this NFT shows up just fine after import. On
mobile, the image is blank. Multiple users have reported this.

Mobile:
<img width="300" height="2400" alt="image"
src="https://github.com/user-attachments/assets/ab29a8f7-5c1f-4070-bf79-940f105b8caf"
/>

Extension:
<img width="300" height="492" alt="image"
src="https://github.com/user-attachments/assets/ec722a68-67e3-483a-b6a7-6f7eb08709c6"
/>

Solution:
@sahar-fehri spotted that the difference between Extension and Mobile
was the IPFS gateway, following that piece of information we identified
where to change the ipfs url so that we only had to modify the cleint
(mobile) and not core.

Furthermore, after fixing that issue, we spotted some kind of flakiness
where images were sometimes displayed and other times werent. This was
due to the image being null while decoding the IPFS url which triggered
expo-image calling `onError` and therefore not loading the image

Finally, I also found an existing bug on @MetaMask/confirmations where
IPFS images are not resolved

<!--
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: nft images not loading for ApexYugalabs + flakiness

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-2610

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


https://github.com/user-attachments/assets/a379d20a-0ac2-45e8-89c5-8779517d3891


<!-- [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**
> Changes NFT/IPFS image resolution and controller init parameters;
while localized, it affects how NFT media URLs are derived and rendered
across key user flows.
> 
> **Overview**
> Fixes flaky/blank NFT images by **avoiding rendering `expo-image` with
an empty URI while an `ipfs://` URL is still resolving**: `RemoteImage`
now returns `null` during the initial IPFS resolution state, with a new
unit test covering the loading case and updated snapshots where the
image subtree is absent until resolved.
> 
> Adds IPFS resolution to confirmations’ `useEVMNfts` transformation:
image selection now asynchronously converts `ipfs://` candidates via
`getFormattedIpfsUrl` using the app’s configured gateway, falling back
to the next URL when resolution returns `''`/`null` or throws (with
logging). Tests were updated/added to cover these fallback cases and to
de-flake the send amount NFT image assertion by waiting for resolution.
> 
> Initializes `NftController` with an explicit `ipfsGateway:
'dweb.link'` and updates the init test accordingly, and fixes ERC1155
NFT list rendering to show `(0)` when balance is missing.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a3c533b. 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**
This bug was introduced after RWA tokens were introduced in this
[PR](#24740)

<!--
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: remove subtitle in token details

## **Related issues**

Fixes: #25478 &
https://consensyssoftware.atlassian.net/browse/ASSETS-2586

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

<img width="300" height="929" alt="image"
src="https://github.com/user-attachments/assets/f87cd576-ec56-4226-9f8d-5c5174e9870c"
/>

<img width="300" height="955" alt="image"
src="https://github.com/user-attachments/assets/c36f2ec5-e310-44a8-a2a7-5abb1884127d"
/>

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

### **After**
<img width="300" height="948" alt="image"
src="https://github.com/user-attachments/assets/3f86daf4-2375-461b-94cf-168693119370"
/>

<img width="300" height="916" alt="image"
src="https://github.com/user-attachments/assets/fa39987f-885d-474e-853f-e4f4149f73e6"
/>
<!-- [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**
> UI-only formatting change in the asset header plus test/snapshot
updates; low risk aside from potential minor layout regressions for
edge-case token names.
> 
> **Overview**
> Fixes the token details subtitle rendering in `AssetOverview` by
**combining the asset name and ticker/symbol into a single text node**
(`name (ticker)`), while preserving the special two-line layout when a
stock/RWA badge is shown.
> 
> Updates `Price` header unit tests and the `AssetOverview` snapshot to
match the new subtitle format, including cases where `ticker` is missing
(falls back to `symbol`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a0f9bfe. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

Migrate Onboarding component to use useAnalytics hook instead of
deprecated useMetrics.

## **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:
[MCWP-297](https://consensyssoftware.atlassian.net/browse/MCWP-297)
(Batch 1-6)

## **Manual testing steps**

```gherkin
Feature: Onboarding analytics tracking

  Scenario: user creates a new wallet
    Given app is open and user is on the onboarding screen

    When user taps "Start exploring now" to create a new wallet
    Then WALLET_SETUP_STARTED event is tracked (Mixpanel)

  Scenario: user imports an existing wallet
    Given app is open and user is on the onboarding screen

    When user taps "Import using Secret Recovery Phrase" to import a wallet
    Then WALLET_IMPORT_STARTED event is tracked (Mixpanel)

  Scenario: user completes OAuth login
    Given app is open and user starts OAuth login flow

    When user successfully completes Google or Apple OAuth login
    Then SOCIAL_LOGIN_COMPLETED event is tracked (Mixpanel)
```

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


[MCWP-297]:
https://consensyssoftware.atlassian.net/browse/MCWP-297?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Refactor limited to analytics hook wiring and test synchronization;
minimal behavioral change risk beyond potential timing/consent
regressions in onboarding analytics flows.
> 
> **Overview**
> `Onboarding` now uses `useAnalytics` instead of deprecated
`useMetrics`, shifting consent/enablement calls to the new analytics
hook while keeping existing onboarding/OAuth tracking behavior.
> 
> Tests were updated to mock `useAnalytics` and treat `optIn`/`optOut`
as async, adding a `flushPromises` helper and `waitFor` assertions to
reduce timing-related flakiness around navigation and analytics calls.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
fefc27e. 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**
Adds tracking of BrowserStack network (API) calls into the performance
E2E pipeline. The custom reporter fetches network logs per session and
attaches them to each test metric as apiCalls (and apiCallsError when
the fetch fails). The aggregation script is updated so these fields are
kept in the cleaned and aggregated reports. Removes the unused
getDeviceInfoFromProfiling method and fixes the missing comma in the
aggregation script after the new apiCalls / apiCallsError properties.
<!--
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: https://consensyssoftware.atlassian.net/browse/MMQA-1361

## **Manual testing steps**

```gherkin
Feature: my feature name

Check that after running performance pipeline, the performance summary report includes a section with the api calls
```

## **Screenshots/Recordings**

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

### **Before**

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

### **After**

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

## **Pre-merge author checklist**

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

## **Pre-merge reviewer checklist**

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

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches the test infrastructure and BrowserStack/Appium capability
set, which can change test stability, runtime, and artifact sizes. Risk
is limited to CI/e2e tooling but includes new API calls and additional
logged data.
> 
> **Overview**
> Adds BrowserStack *network log (HAR)* collection to the
performance-reporting pipeline: `AppProfilingDataHandler` now fetches
`/networklogs`, `custom-reporter` retrieves and stores per-session
entries/errors, and emitted `performance-metrics-*.json` plus the
aggregation script now include `apiCalls`/`apiCallsError` fields.
> 
> Updates the patched `appwright` BrowserStack capabilities to enable
richer telemetry (network profile/log content capture, app profiling,
self-heal, various Appium settings), adds env-driven overrides
(`BROWSERSTACK_BUILD_NAME`, `DISABLE_VIDEO_DOWNLOAD`), and adjusts
runner behavior (CI retries/workers, locator text-matching
behavior/logging) via the Yarn patch.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
44ee531. 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**

This PR adds comprehensive display support for
`TransactionType.musdClaim` transactions (Merkl rewards claims) across
the app. Previously, these transactions showed generic/empty
information. Now users see meaningful details about their mUSD reward
claims.

**Changes include:**
- Transaction details view: Shows "Claimed mUSD" title with proper hero
amount, summary, network fee, and received total
- Activity list: Shows received icon with correct claimed amount and
fiat value
- Added musdClaim to appropriate type arrays for proper routing and
display
- Added localization strings for claim-related labels
- Added unit tests for all new musdClaim handling

This PR also fixes an issue where two loading toasts appeared during a
claim transaction. Now only one is shown.

## **Changelog**

CHANGELOG entry: Added detailed transaction display for mUSD reward
claims showing claimed amount, network fee, and received total

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-228

## **Manual testing steps**

```gherkin
Feature: mUSD Claim Transaction Display

  Scenario: User views mUSD claim in activity list
    Given user has completed a Merkl mUSD rewards claim transaction
    
    When user opens the Activity tab
    Then the transaction shows "Claim" label
    And displays the received icon (not generic contract icon)
    And shows the correct claimed mUSD amount and fiat value

  Scenario: User views mUSD claim transaction details
    Given user has completed a Merkl mUSD rewards claim transaction
    
    When user taps on the claim transaction in Activity
    Then the title shows "Claimed mUSD"
    And the hero section displays the claimed amount
    And the summary shows "Claim mUSD"
    And "Network fee" row displays the gas fee paid
    And "Received total" row displays the total claimed value

```

## **Screenshots/Recordings**

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

### **Before**

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

### **After**
<img width="389" height="113" alt="Screenshot 2026-01-30 at 17 42 27"
src="https://github.com/user-attachments/assets/a69b92e4-668b-4f01-9ef8-4b1ec249b31a"
/>
<img width="389" height="839" alt="Screenshot 2026-01-30 at 17 42 32"
src="https://github.com/user-attachments/assets/48c9a7ea-8864-4f6e-8712-6b404e74440e"
/>

<!-- [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**
> Touches transaction classification, decoding, and multiple UI surfaces
(activity list, token details, confirmations), so regressions could hide
or mislabel transactions or show incorrect fiat amounts; changes are
mostly additive with tests covering key paths.
> 
> **Overview**
> Adds first-class support for Merkl mUSD reward claims by emitting
transactions as `TransactionType.musdClaim`, detecting them in token
activity filters, and decoding claim calldata to display claimed amount
and fiat value in the activity list.
> 
> Updates the redesigned Transaction Details flow to handle `musdClaim`
(hero amount, summary titles, network fee, received total) and
introduces `usePayFiatFormatter` to show **user-currency** fiat for
`musdClaim` while keeping other flows USD-default. Also adjusts
navigation to the new details screen via a two-step route to avoid
duplicate/toast/navigation issues, and adds localization + extensive
unit test coverage for the new behavior.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
61436a8. 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 Feb 6, 2026
@pull pull Bot added the ⤵️ pull label Feb 6, 2026
@pull pull Bot merged commit 995cb84 into Reality2byte:main Feb 6, 2026
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.

5 participants