Skip to content

[pull] main from MetaMask:main#442

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

[pull] main from MetaMask:main#442
pull[bot] merged 7 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Jan 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 : )

cmd-ob and others added 7 commits January 9, 2026 11:56
…r Android and iOS (#23977)

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

- Enable Smoke and Flask tests to be run according to Smart E2E
selection decisions
- Only run tests chosen by E2E if confidence is at 80% or greater 
- Updated prompt to consider changes that would warrant FlaskBuildTests

*Tests*

#23976
<img width="562" height="199" alt="Screenshot 2025-12-12 at 15 56 56"
src="https://github.com/user-attachments/assets/a7878367-87c2-48b4-91ff-905f9f9d1075"
/>


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

- [ ] 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]
> Introduces AI-driven, tag-based E2E execution across CI with selective
builds and runs.
> 
> - **CI gating:** `ci.yml` now depends on `smart-e2e-selection`;
Android/iOS build jobs skip when AI confidence ≥ 80 and
`ai_e2e_test_tags == '[]'`; smoke test jobs receive `selected_tags` and
only run targeted suites; reporting steps skip when no tags selected.
> - **Android/iOS smoke workflows:** Added `selected_tags` input and
per-suite `if` guards using `contains(fromJson(inputs.selected_tags),
...)`; reporting jobs gated to avoid empty runs.
> - **Flask Android E2E:** New tag-aware gating in
`run-e2e-smoke-tests-android-flask.yml` so repack, run, and report only
when `ALL` or `FlaskBuildTests` is selected.
> - **Tag definitions:** Added `flaskTags` and moved `FlaskBuildTests`
under it; updated helpers to export/use it.
> - **AI selector config/prompt:** Selector now merges `smokeTags` +
`flaskTags` for options; prompt explicitly explains when to select
`FlaskBuildTests`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9f3e917. 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**

Bump solana to 2.6.1 to fix Token2022 send

<!--
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(solana): token 2022 send

## **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]
> Updates dependency to pull in Solana fixes.
> 
> - Bumps `@metamask/solana-wallet-snap` from `^2.5.1` to `^2.6.1` in
`package.json` and `yarn.lock`
> - No application code changes; addresses Token2022 send issue per
upstream release
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b36185c. 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**

Setup CLAUDE on the repo: Before `CLAUDE.md` was ignored. This file
should be committed and hold the memory for future project prompts.
Remember `CLAUDE.md` is project based (so for everyone to use).
Added support for `CLAUDE.local.md`: This file shouldn't be committed
and it will hold your own claude memory for future props.
Added the following commands for Cursor and Claude Code:
* `/setup-project`: In order to make it easier for new developers to run
thought project setup.
* `/setup-ios-simulator-mcp`: This will install the necessary tools for
the agent to control the iOS simulator (Android will come)
* `/setup-jira-mcp`: This will install the Atlassian mcp server in order
for the agent to have access to your jira tasks

Example of `CLAUDE.local.md`:

```
## Claude developer

### Onboarding details

Seed: `xxx`
Password: `xxx`
```

<!--
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: feat: ai workflow with jira and simulator setup

## **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]
> Enhances AI agent workflow with setup docs and configuration tweaks.
> 
> - **Adds MCP setup commands**: `setup-ios-simulator-mcp.md` and
`setup-jira-mcp.md` under `.claude/commands/` with platform-specific
instructions, auth/verification steps, and troubleshooting
> - **Introduces `AGENTS.md`**: guidance for AI coding agents (overview,
essential yarn commands, architecture, guidelines, workflows, docs
references)
> - **Updates `.gitignore`**: stop ignoring `CLAUDE.md`; add ignore for
`*.local.md`; retain temp artifacts
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
3615856. 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**
Fix trending search not getting market data

<!--
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 trending search not getting market data

## **Related issues**

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

## **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]
> Ensures trending-related searches return market data.
> 
> - Adds optional `includeMarketData` to `useSearchRequest` and forwards
it to `searchTokens`
> - Updates `useTrendingSearch` to call `useSearchRequest` with
`includeMarketData: true`
> - Includes `includeMarketData` in `useSearchRequest` effect
dependencies
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ce328cd. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: sahar-fehri <sahar.fehri@consensys.net>
## **Description**

Allows users who've reached the appropriate tier to claim the metal card
reward.

## **Changelog**

CHANGELOG entry: allow metal card rewards claim when season 1 ends

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/RWDS-911

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Enables claiming the end-of-season Metal Card reward and improves
end-of-season reward UX.
> 
> - Add `MetalCardClaimBottomSheet` modal with email validation,
optional Telegram handle, metrics, error banner, and success toast;
register route `REWARDS_METAL_CARD_CLAIM_BOTTOM_SHEET` in navigators
> - Update `PreviousSeasonUnlockedRewards` to show Metal Card rewards as
claimable and navigate to the new sheet; simplify messaging by removing
store/version prompts
> - Enhance `RewardItem` with end-of-season logic: claim expiry
(`claimEndDate`), time-left display, claimed/expired labels, disabled
states, claim button variant/size tweaks, onPress override, and claim
URL interpolation; block actions when locked/claimed/expired
> - Extend rewards types and utils: add `SeasonRewardType.METAL_CARD`,
`claimEndDate` on season rewards, `validateEmail`, new i18n strings
> - Add/adjust tests for the new modal, previous season list, reward
item behavior, and format utils
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6cab01c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…4243)

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

## **Description**

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

This PR adds:

- BOB network and native token logos.
- [Related Jira
ticket](https://consensyssoftware.atlassian.net/browse/BENE-365?atlOrigin=eyJpIjoiOTQzMmRkYmMxN2VjNDQ4Mzg4ZDdiYjhmM2FmMGQ0YWEiLCJwIjoiaiJ9)
- Rootstock network and native token logos.
- [Related Jira
ticket](https://consensyssoftware.atlassian.net/browse/BENE-352?atlOrigin=eyJpIjoiMjcxOTcxOTdjNjI3NGIzMDg4MDIwZmZjMTJjMTYxODQiLCJwIjoiaiJ9)

## **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: Add BOB network and native token logos.
CHANGELOG entry: Add Rootstock network and native token logos.

## **Related issues**

Fixes:

## **Manual testing steps**

BOB

1. Open mobile app
2. Using "Search", go to https://chainlist.org/?search=bob
3. Click on `Add to MetaMask` Button of BOB (ChainID 60808)
4. After accepting, It should add the network to your MetaMask
5. The network icon should show correctly
6. Ethereum should show up as native token with a logo

Rootstock

1. Open mobile app
2. Using "Search", go to https://chainlist.org/?search=rootstock
3. Click on `Add to MetaMask` Button of Rootstock (ChainID 30)
4. After accepting, It should add the network to your MetaMask
5. The network icon should show correctly
6. RBTC should show up as native token with a logo

## **Screenshots/Recordings**

BOB

<img width="411" height="878" alt="BOB-Mobile ChainList"
src="https://github.com/user-attachments/assets/f35e8552-abc4-4225-9b32-11d7e884a0f2"
/>
<img width="411" height="878" alt="BOB-Mobile Chain"
src="https://github.com/user-attachments/assets/5e0b0c31-fa9c-4201-8d86-f0819e929fcc"
/>

<br/>
<br/>

Rootstock
<img width="411" height="878" alt="Rootstock-Mobile ChainList"
src="https://github.com/user-attachments/assets/9fddfb75-5f77-49c9-bb6e-458454e6ba00"
/>
<img width="418" height="868" alt="Rootstock-Mobile Mainnet"
src="https://github.com/user-attachments/assets/77c1a89d-a670-43ae-815e-7895ca4d3b42"
/>

Rootstock Testnet
<img width="407" height="875" alt="Screenshot from 2026-01-09 08-56-33"
src="https://github.com/user-attachments/assets/e6d7b402-3628-4a45-80ab-8436ba1b465d"
/>

## **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]
> Adds support for BOB and Rootstock visuals across networks and tokens.
> 
> - Import `bob.png` and `rootstock-native.png` in `image-icons.js`;
expose `BOB`, `RBTC`, and `tRBTC` token icon keys
> - Extend `NETWORK_CHAIN_ID` with `BOB (0xed88)`, `ROOTSTOCK (0x1e)`,
and `ROOTSTOCK_TESTNET (0x1f)`
> - Map these chain IDs to images in `CustomNetworkImgMapping`
(`bob.png`, `rootstock.png`)
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
5335f0c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Signed-off-by: gabrieledm <gabriele.delmonte@proton.me>
<!--
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**

Withdrawal indicators in Perps could get stuck in "pending" or
"bridging" state indefinitely, even after the withdrawal had
successfully completed on-chain. This created a poor user experience
where users saw stale pending indicators that never resolved.

**Solution**

Enhanced the 1useWithdrawalRequests1 hook to automatically reconcile
pending withdrawal states with completed withdrawals from the
HyperLiquid API:
1. Auto-reconciliation: When a completed withdrawal from the API matches
a pending one in controller state, the controller is automatically
updated to reflect the completion
2. Active polling: Polls the HyperLiquid ledger API every 10 seconds
when there are active (pending/bridging) withdrawals to detect
completions promptly
3. Relaxed flexible matching: Matches withdrawals by amount (±$0.01
tolerance) and asset type; removed timestamp constraint since bridging
operations can sometimes take hours
4. Deduplication tracking: Uses a ref to track which withdrawals have
already been updated, preventing duplicate updateWithdrawalStatus calls
Account isolation: Filters withdrawals by the current selected account
to prevent showing stale indicators from other accounts

## **Changelog**

CHANGELOG entry: Fixed an issue where Perps withdrawal indicators could
remain stuck in "pending" state after the withdrawal completed

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2128

## **Manual testing steps**

```gherkin
Feature: Perps Withdrawal Status Resolution

  Scenario: Pending withdrawal resolves to completed
    Given user has an active Perps account with USDC balance
    And user initiates a withdrawal from Perps

    When the withdrawal completes on HyperLiquid (wait up to 10 seconds for poll)
    Then the withdrawal status updates from "pending" or "bridging" to "completed"
    And the withdrawal displays the transaction hash

  Scenario: Pending indicators clear on account switch
    Given user has a pending withdrawal on Account A
    And user switches to Account B which has no withdrawals

    When the withdrawal list renders
    Then no pending withdrawal indicators are shown for Account B

  Scenario: Completed withdrawals persist after app restart
    Given user had a withdrawal complete while the app was closed
    
    When user opens the app and navigates to Perps withdrawals
    Then the withdrawal shows as "completed" (fetched from HyperLiquid API)
    And no stale "pending" indicator is displayed
```

## **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]
> Resolves stuck pending/bridging withdrawal indicators by reconciling
controller state with HyperLiquid ledger completions.
> 
> - Reworks `useWithdrawalRequests` to merge pending with completed
withdrawals, matching by `amount` (±0.01) and `asset` and removing
timestamp constraints; requires `txHash` for completed matches
> - Moves side-effectful controller updates into `useEffect` and adds
`updatedWithdrawalIdsRef` to prevent duplicate `updateWithdrawalStatus`
calls
> - Adds polling every 10s when active withdrawals exist; maintains
sorting by timestamp (newest first) and filters by selected account
> - Updates tests to cover long-bridge timestamp gaps, small amount
tolerances, txHash requirement, polling behavior, and error handling
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
836ad08. 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 Jan 9, 2026
@pull pull Bot added the ⤵️ pull label Jan 9, 2026
@pull pull Bot merged commit 0b20391 into Reality2byte:main Jan 9, 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.

6 participants