Skip to content

[pull] main from MetaMask:main#393

Merged
pull[bot] merged 3 commits into
Reality2byte:mainfrom
MetaMask:main
Dec 9, 2025
Merged

[pull] main from MetaMask:main#393
pull[bot] merged 3 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Dec 9, 2025

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

vinistevam and others added 3 commits December 9, 2025 08:39
<!--
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**

PR adding E2E for gas sponsorship via 7702.

<!--
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: null

## **Related issues**

Fixes: MetaMask/mobile-planning#2345

## **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]
> Add E2E tests and mocks for EIP-7702 sponsored relay transactions,
plus E2E chainId-to-Sepolia handling in the delegation publish hook and
supporting selector/utilities.
> 
> - **E2E Tests**:
> - Add sponsored EIP-7702 native send tests with success and failure
cases in `e2e/specs/.../gas-fee-tokens-eip-7702-sponsored.spec.ts`,
including Anvil fixture/state (`withDelegatorContracts.json`),
feature-flag setup, and Sentinel simulation/relay mocks.
> - Introduce transaction relay mock responses in
`e2e/api-mocking/mock-responses/transaction-relay-mocks.ts`.
> - Add UI selector `PAID_BY_METAMASK` and corresponding getter in
`RowComponents`.
> - **Transactions Hook**:
> - Route E2E runs to Sepolia by defaulting `chainId` to `0xaa36a7` for
delegation environment and signing in `delegation-7702-publish.ts`.
> - **Utilities**:
> - Add `isE2ETest(chainId)` helper to detect localhost E2E and support
the chainId override.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2b31351. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Curtis David <Curtis.David7@gmail.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
After doing an audit into the performance of the components of the
Assets team I found out we were re-rendering the FTs many many times
unnecessarily. Look at the video to see the proof, this was a
combination of issues across the app that have been mitigated in this PR

<!--
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 re-rendering of nfts grid

## **Related issues**

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

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


https://github.com/user-attachments/assets/1368cc62-059c-45e7-9146-337b11f5fa24

### **After**


https://github.com/user-attachments/assets/23547786-8955-43fc-ab3f-c17101fdb1a4



## **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]
> Optimizes NFT grid rendering with a 3-column FlashList and memoized
content, reduces image re-renders, hides inactive tabs properly, and
updates tests accordingly.
> 
> - **NFT Grid**:
> - Refactor to a unified `FlashList` 3-column layout (`numColumns=3`)
with per-item padding and controlled scrolling.
> - Introduce `NftGridContent` to handle loading/empty states and
memoize content.
> - Replace grouped rows with flat `collectiblesToRender`; simplify key
extraction and long-press handling.
> - Adjust item spacing (`mb-3`) and full-view padding; show "View all"
when exceeding limit.
> - **Images**:
>   - Convert dynamic styles to static `StyleSheet` in `RemoteImage`.
> - Prevent redundant state updates in `onImageLoad` to avoid
re-renders.
> - **Tabs**:
> - Change inactive tab content from `absolute opacity-0` to `hidden`
for non-active tabs.
> - **Skeleton**:
>   - Reduce placeholders from 18 to 9 for the NFT grid loading state.
> - **Tests**:
> - Add `setupSelectorMocks` helper and adapt tests to new grid
structure and props (e.g., `numColumns`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
c8cceb7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…23799)

<!--
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 replaces all use of `MetaMask/github-tools` _workflows_, usually
referenced by a specific commit hash, with (composite) _actions_,
referenced by a version. This has several benefits:

- We can update actions used simply by creating a new release in the
`github-tools` repository, propagating the changes to all repositories
using the version.
   - Breaking changes can still be made by creating a major release.
- Actions have access to certain variables that workflows don't have
access to, letting us omit input options like `github-tools-ref`.
- In cases where we're already running other steps, using an action
avoids spinning up a new runner.

## **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]
> Replaces calls to MetaMask/github-tools reusable workflows with
versioned composite actions (@v1) across CI/E2E/release/ops workflows,
updating refs, steps, and required inputs.
> 
> - **Workflows migrated from reusable workflows to versioned actions
(`@v1`)**:
> - `add-team-label`, `automated-rca` (adds `github-token`),
`changelog-check`, `log-merge-group-failure`,
`publish-slack-release-testing-status`,
`remove-rca-needed-label-sheets`, `stale-issue-pr`,
`stable-branch-sync`, `update-release-changelog`.
> - Release PR workflows: `create-release-pr.yml` (switch to action
`create-release-pr@v1`), `create-release-pr-legacy.yml` (adds explicit
step with inputs/secrets via action).
> - E2E build/test: `build-android-e2e.yml`, `build-ios-e2e.yml`,
`run-e2e-workflow.yml`, `run-e2e-smoke-tests-android-flask.yml` (use
`setup-e2e-env@v1`/`configure-keystore@v1`).
> - **Ref updates/structural changes**:
> - Replace pinned SHAs with `@v1`; add `runs-on` and explicit `steps`
where needed; move secrets to action inputs (`with`) as required.
> - Merge utilities: update `merge-stable-sync-pr.yml` and
`merge-version-bump-pr.yml` refs to `merge-approved-pr@v1`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
fae9f6e. 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 Dec 9, 2025
@pull pull Bot added the ⤵️ pull label Dec 9, 2025
@pull pull Bot merged commit f90c2af into Reality2byte:main Dec 9, 2025
2 of 12 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.

3 participants