[pull] main from MetaMask:main#515
Merged
Merged
Conversation
## **Description**
Per **ADR-042** ("PerpsController Package Location"), the team is
adopting a mobile-first strategy for perps: mobile remains the single
source of truth, and the controller will be published as
`@metamask/perps-controller` on npm so the Extension can achieve feature
parity.
The controller code originally lived under
`app/components/UI/Perps/controllers/` — that co-location with UI was
the right design when perps was a mobile-only feature. Now that
cross-platform publication is the goal, ADR-042 requires a prerequisite
step: **simulate package boundaries inside the mobile repo before actual
extraction**. This PR implements that "Mobile Isolation" section of
ADR-042. **No functional changes** — this is a pure reorganization.
Three outcomes:
1. **Controller code lives at `app/controllers/perps/`** — physically
separated from the UI layer and consistent with where other controllers
sit in the mobile codebase. Services that were always part of the
controller layer (connection management, trading readiness, all
HyperLiquid services) now live there too, with a `ServiceContext`
abstraction for runtime injection of mobile-specific infrastructure.
2. **All imports use the `@metamask/perps-controller` alias** —
configured in `tsconfig.json`, `babel.config.js`, `metro.config.js`, and
`jest.config.js`. This simulates the npm package boundary so that every
import site is ready for extraction with zero diff.
3. **ESLint `no-restricted-imports` rule enforces the boundary going
forward** — direct imports from `app/controllers/perps/` are disallowed;
all consumers must go through the alias, exactly as they would with a
real npm package.
## **Changelog**
CHANGELOG entry: null
## **Related issues**
Fixes: N/A — internal refactor for perps-controller portability
## **Manual testing steps**
```gherkin
Feature: Perps trading functionality unchanged after refactor
Scenario: User opens perps market view
Given the user has perps feature enabled
When user navigates to the perps trading screen
Then the market list loads correctly with live prices
Scenario: User places a perps order
Given the user is on a perps market detail page
When user enters order parameters and submits
Then the order executes successfully via HyperLiquid
Scenario: User views open positions and orders
Given the user has existing perps positions
When user navigates to positions/orders tab
Then all positions and open orders display correctly
```
## **Screenshots/Recordings**
N/A — pure refactor, no UI changes.
## **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**
> Broad refactor across many Perps modules changing import sources and
moving constants, which risks subtle runtime/test breakages if any
symbol wiring diverges. No business-logic changes are intended, but the
new platform dependency surface (feature flags/formatters) needs
verification.
>
> **Overview**
> **Perps controller/package boundary is enforced.** Adds an ESLint
`no-restricted-imports` rule to block direct imports from
`app/controllers/perps/**` and updates depcheck config to ignore the new
`@metamask/perps-controller` TS path alias.
>
> **UI code is migrated to the alias.** Most Perps screens, components,
hooks, and tests switch their imports (types, constants, helpers like
`getPerpsDisplaySymbol`, analytics event names, chart enums, trading
calculations) from local `controllers/*`, `constants/*`, and `utils/*`
to `@metamask/perps-controller`, and removes a now-redundant
`controllers/utils.ts` helper.
>
> **Mobile-only constants and adapters are carved out.**
`constants/chartConfig.ts` and `constants/perpsConfig.ts` are slimmed to
UI-specific exports while portable enums/pure logic move to the
controller package; new `constants/perpsUIConfig.ts` holds UI-only
fee/timing/spread values. The mobile platform bridge
(`mobileInfrastructure.ts`) is extended to provide controller
dependencies for version-gated feature flags and market-data formatting
utilities.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8350386. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
… taking 30s (#25939) <!-- 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 updates the toast behavior for **TransactionType.perpsDepositAndOrder** (deposit + order flow): 1. **Pending deposit toast ("Depositing your funds")** The toast is no longer sticky: it now auto-dismisses after the default visibility duration (~2–3 seconds) instead of staying until the deposit completes or fails. Implemented by setting `hasNoTimeout: false` in `usePerpsOrderDepositTracking` when showing the progress toast. 2. **"Deposit taking longer than usual" toast** The delay before this toast is shown is increased from 15 seconds to 30 seconds (`DepositTakingLongerToastDelayMs` in `perpsConfig.ts`). ## **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: Fixed Perps deposit+order flow so the pending deposit toast auto-dismisses after a few seconds and the "deposit taking longer" message appears after 30 seconds. ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2525 ## **Manual testing steps** ```gherkin Feature: Perps deposit and order toast behavior Scenario: user confirms a deposit-and-order transaction Given user is on Perps order view with insufficient balance (deposit + order required) When user submits the order and confirms the deposit transaction in the confirmation sheet Then the "Depositing your funds" toast appears and auto-dismisses after ~2–3 seconds (not sticky) And if the deposit is still pending after 30 seconds, the "Deposit taking longer than usual" toast is shown (previously 15 seconds) ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** No visible change ## **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** > UI-only toast timing/behavior changes with no impact on transaction execution, auth, or data handling. > > **Overview** > Updates the Perps deposit+order flow toast behavior so the initial **"Depositing your funds"** progress toast is no longer sticky (it now uses the default timeout instead of `hasNoTimeout: true`). > > Delays the **"Deposit taking longer than usual"** toast from 15s to 30s via `PERPS_CONSTANTS.DepositTakingLongerToastDelayMs`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 41fd05a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
#25951) <!-- 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 startPositionX and startPositionY to ScrollOptions in order to allow for offset scrolling actions. It also fixes a snap test where the scrollable container was not allowing scrolls on Android due to its viewport. <!-- 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: ## **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 shared test framework scrolling behavior on Android, which can impact many Detox tests if the new parameters or default `NaN` handling behave differently across devices; changes are limited to test code. > > **Overview** > Adds `startPositionX`/`startPositionY` to `ScrollOptions` and threads them into Android’s `Gestures.scrollToElement()` call so Detox scrolls can start from an explicit screen offset. > > Updates affected page objects/tests to pass start positions for Snap UI date-time picker scrolling and horizontal quick-action scrolling, and adjusts the predict claim smoke test to scroll to the lost position first (then winning) before asserting claim-button visibility. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f977d57. 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** 1. **What is the reason for the change?** - The Perps order view had 32px top padding on the scroll content that created unnecessary empty space. - The fees row showed a loading state whenever `feeResults.isLoadingMetamaskFee` was true, which could keep the row in a loading state even when the main fee data was ready, causing a flickery or stuck loading experience. 2. **What is the improvement/solution?** - Set `scrollViewContent.paddingTop` from `32` to `0` in `PerpsOrderView.styles.ts` so the scroll content aligns with the rest of the layout. - Simplified `isFeesLoading` in `PerpsOrderView.tsx` to only depend on pay-totals loading when a custom token is selected (`hasCustomTokenSelected && isPayTotalsLoading`). The fees row no longer shows loading solely because the MetaMask fee is loading, reducing unnecessary loading states. ## **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/TAT-2522 Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2515 ## **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** <img width="1206" height="2622" alt="simulator_screenshot_EEA6722D-603A-4185-9DFD-1CF08262D61B" src="https://github.com/user-attachments/assets/b7640e3f-2ed9-477e-92bc-f6f10953c056" /> ## **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** > Small UI/layout tweak and a narrow change to when the order button is disabled; low blast radius but could affect edge-case timing when paying with a custom token. > > **Overview** > Removes the extra 32px top padding from `PerpsOrderView` scroll content so the order form no longer starts with empty space. > > Separates fee *display* loading from order *blocking*: the fees row can still show a loading skeleton, but the Place Order button is now only disabled while custom-token pay totals are loading (not while `feeResults.isLoadingMetamaskFee` is true). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 56e7cfa. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Cursor <cursoragent@cursor.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**
Changed Slack message to displayed a descriptive message where the build
type can be easily spotted
<!--
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:
## **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 CI reporting/notification outputs and slightly changes the
`summary.json` schema and Slack message formatting, which could impact
any downstream consumers expecting the previous structure or text
layout.
>
> **Overview**
> Performance E2E aggregation now propagates the workflow
`build_variant` (rc/exp) into generated artifacts by adding
`buildVariant`/`buildType` fields to `summary.json` (including
empty/fallback summaries) and showing the build type in the HTML report
header.
>
> The `run-performance-e2e` workflow passes `BUILD_VARIANT` to the
aggregator, and the Slack summary message is reformatted to include a
build-type label, a one-line run overview (devices/tests/failures),
clearer device/test sections, and failed-test output grouped by platform
(iOS then Android).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
065e3cc. 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 token display layout to match competitor's setup so the row answers, in one glance: - What is it? (symbol/name) - What’s it doing? (price + 24h) - What do I have? (fiat value + quantity) Left block (identity + market quote) - Line 1: SYMBOL / Name (and small network pill if relevant) - Line 2: Unit price + 24h change (this is Trust’s win) Right block (user holding) - Line 1: Fiat value (bold, largest) - Line 2: Token quantity + token symbol (smaller, muted) <!-- 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: created new token list item v2 ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-2615 & https://consensyssoftware.atlassian.net/browse/ASSETS-2621 ## **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/41cfff75-0a3b-4718-8410-153d359866db <!-- [screenshots/recordings] --> ### **After** https://github.com/user-attachments/assets/966863aa-4162-4fa8-a479-1a6c126a83b9 <!-- [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** > UI changes affect the primary token list rendering and add new conditional CTA/analytics behavior gated by a remote flag; risk is moderate due to breadth of interactions (Earn CTAs, navigation, market data) despite being feature-flagged. > > **Overview** > Adds a new **Token List Item V2** layout behind a LaunchDarkly A/B test (`tokenListItemV2Abtest`), and switches `TokenList` to render either V1 or V2 items based on the flag. > > `TokenListItemV2` introduces a new row presentation (logo + network badge, name/labels, unit price + secondary action, fiat + token balance) and integrates existing Earn-related states (Merkl claim bonus, mUSD conversion CTA, stablecoin lending Earn CTA threshold, stake CTA), stock token badge support, and updated navigation source tagging. > > Centralizes *very-small-number* subscript formatting into a shared `formatSubscriptNotation` utility, reusing it in Predict price formatting and optionally in `addCurrencySymbol` (new `useSubscriptNotation` param), with accompanying unit tests. Token details open analytics now includes `ab_tests.token_list_layout` when launched from the token list. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit d1c32ec. 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>
<!-- 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?** The Perps home overflow menu previously hid the "Learn more" item when the user had an empty balance to avoid duplicating the "Learn more" CTA already shown on the empty-state card. Users with an empty state could only use that card and had no "Learn more" in the menu. 2. **What is the improvement/solution?** Always show "Learn more" in the Perps home menu, independent of balance. Users can access the tutorial from the menu in all states, and the empty-state card can still offer the same link without conflicting with the menu. ## **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: Always display learn more about perps link ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2526 ## **Manual testing steps** ```gherkin Feature: Perps Scenario: user has no activity in perps Given user visits the perps home screen Then user should see the link to learn more about Perps ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> <img width="1206" height="2622" alt="simulator_screenshot_D734BD34-3FE8-4B2A-B9E0-6E1AEF9E30A9" src="https://github.com/user-attachments/assets/ad4dbf11-1224-4366-be9d-33a3f2ebcbd4" /> ## **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** > Small UI/menu logic change with no auth, funds movement, or data handling impact; main risk is minor UX duplication in the empty state. > > **Overview** > The Perps home navigation/overflow menu now **always** includes the `Learn more` item, instead of hiding it when the balance is empty to avoid duplicating the empty-state CTA. > > This removes the `isBalanceEmpty` gating and dependency from the `navigationItems` memo, so `Learn more` consistently routes to the tutorial from the menu in all states. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 149606f. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: Cursor <cursoragent@cursor.com>
…fication deeplink handler (#25964) <!-- 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? --> The `handleCardKycNotification` deeplink handler had its own inline feature flag verification logic using `selectCardExperimentalSwitch`, which diverged from the canonical check used across the rest of the Card feature. The shared `isBaanxLoginEnabled` utility (used by the `useIsBaanxLoginEnabled` hook) defines the single source of truth for whether the Baanx/Card feature is enabled, based on `alwaysShowCardButton`, `cardGeoLocation`, `cardSupportedCountries`, and `displayCardButtonFeatureFlag`. This PR replaces the inline logic with a call to `isBaanxLoginEnabled`, ensuring the deeplink handler uses the same enablement criteria as the rest of the app. Tests have been updated accordingly. ## **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: Fixed card KYC notification deeplink using incorrect feature flag check ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: Card KYC notification deeplink Scenario: user taps a card KYC push notification when the card feature is enabled Given the user has the card feature enabled (via alwaysShowCardButton or supported country + feature flag) And the user has a pending or completed KYC verification When user taps on the card KYC push notification deeplink Then the user is navigated to the correct screen based on their verification state (KYCFailed, Complete, KYCPending, or CardHome) Scenario: user taps a card KYC push notification when the card feature is disabled Given the user does not have the card feature enabled When user taps on the card KYC push notification deeplink Then nothing happens and the handler exits early ``` ## **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** > Small, localized change to deeplink feature-gating logic with corresponding test updates; primary risk is inadvertently changing when the handler early-exits vs navigates. > > **Overview** > `handleCardKycNotification` now uses the shared `isBaanxLoginEnabled` check (driven by `alwaysShowCardButton` and supported-country + `displayCardButtonFeatureFlag`) instead of its own inline logic based on `selectCardExperimentalSwitch`. > > Tests were updated to mock `selectAlwaysShowCardButton` and validate navigation behavior under the new enablement criteria. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit cbf4b20. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ments (#25942) <!-- 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 transaction controller for transaction polling and incoming transaction improvements. ## **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: #25941 ## **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** NA ## **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** > Upgrades `@metamask/transaction-controller`, which may change transaction polling/incoming-transaction behavior across the app. Also broadens event wiring for the transaction controller messenger, potentially affecting when transactions refresh and how UI/state reacts to account/network/connectivity changes. > > **Overview** > Updates `@metamask/transaction-controller` from `62.15.0` to `62.16.0` (lockfile updated accordingly) to pick up transaction polling and incoming-transaction improvements. > > Extends `transaction-controller-messenger` delegation to listen for additional engine events (`AccountActivityService` updates/status changes, selected account changes, and backend websocket connection state changes) instead of only `NetworkController:stateChange`, enabling the transaction controller to react to more real-time state changes. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit a2e126a. 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?
-->
Adds chiliz CHZ network logos to metamask mobile
## **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: Adds chiliz.png as network logo and enables it in
metamask mobile
## **Related issues**
Fixes: N/A
## **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]
```
Feature: Chiliz network logo
Scenario: user wants to add chiliz network
Given network is not added
When user fills in the information
Then network logo should appear and apply for netowrk tokens
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<img width="388" height="894" alt="image"
src="https://github.com/user-attachments/assets/decdb11a-db5b-42c8-8fbb-a0cbe38ac2b8"
/>
<img width="388" height="898" alt="image"
src="https://github.com/user-attachments/assets/40a5b729-2ca1-4e53-9221-28c13f19c1bb"
/>
### **After**
<img width="395" height="865" alt="image"
src="https://github.com/user-attachments/assets/94e4859a-f2b7-461a-b528-1be3c7be96ad"
/>
<img width="391" height="862" alt="image"
src="https://github.com/user-attachments/assets/20c8b74f-0fce-46b4-b3da-463e812d0d17"
/>
## **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**
> Asset and mapping-only changes (new icon + chain-id/image mappings)
with no changes to transaction/auth/data flow; main risk is an incorrect
chain id or missing asset causing the logo to not render.
>
> **Overview**
> Adds support for displaying the **Chiliz (CHZ) logo** by importing
`chiliz.png` and exposing it via the `image-icons.js` symbol map
(`CHZ`).
>
> Extends custom network configuration to recognize the `CHILIZ` chain
id (`0x15b38`) and maps it to the same `chiliz.png` asset in
`CustomNetworkImgMapping`, enabling the logo to appear for Chiliz custom
networks/tokens.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
753d2ce. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…ct to any existing flow) (#25766) <!-- 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** signing certificates configuration; main-dev working; script to generate build secrets into the build yml, could be optimised hopefully; action to configure signing certificates; set secrets from config script; apply build config excepts secrets script <!-- 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: ## **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** - [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** > Updates CI build and signing flows, including fetching and injecting signing materials/secrets at runtime, so misconfiguration could break releases or leak/omit required env vars despite the changes being mostly workflow/scripts. > > **Overview** > **Build configuration is moved and expanded.** `.github/builds.yml` is removed and replaced by a root-level `builds.yml`, now including an explicit `signing` section (AWS role/secret + Android keystore path) and a new `main-beta` build variant, plus updated GitHub Environment mappings for UAT/flask builds. > > **GitHub Actions build pipeline now supports AWS-based code signing and more reliable env propagation.** The `build.yml` workflow reads config from root `builds.yml`, persists applied config into `GITHUB_ENV`, replaces the previous keystore action with a new composite action (`.github/actions/configure-signing`) that assumes an AWS role and pulls signing material from AWS Secrets Manager (Android keystore + iOS cert/profile/keychain), and adds retries/timeouts plus Android CI Gradle properties and an updated iOS simulator artifact path. > > **Secret/config tooling is refactored to match the new workflow requirements.** `apply-build-config.js`, `validate-build-config.js`, and `verify-build-config.js` are updated to use root `builds.yml`, `apply-build-config.js` adds `--export-github-env`, `set-secrets-from-config.js` now writes mapped secrets into `GITHUB_ENV` (with multiline support), and a new maintenance script `generate-build-workflow-secrets-env.js` (wired via `yarn build:workflow:update-secrets`) regenerates the workflow’s explicit secret env list. Docs/CODEOWNERS are updated accordingly. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 77a734b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: sethkfman <10342624+sethkfman@users.noreply.github.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** This PR fixes the height clipping of the swaps input with vertical paddings for Android <!-- 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: #25950 ## **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="798" height="1908" alt="image" src="https://github.com/user-attachments/assets/df984b60-3d76-4856-80d2-62f3ed516403" /> <!-- [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** > Small, UI-only styling change limited to the Bridge token amount input; risk is mainly minor layout regressions across platforms/font sizes. > > **Overview** > Restores vertical spacing in the Bridge amount input by adding platform-specific `paddingVertical` in `TokenInputArea` (iOS: `2`, Android: `1`) to avoid height/text clipping. > > Updates `BridgeView` Jest snapshots to reflect the new input style (`paddingVertical`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 02a76f3. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ing (#24272) <!-- 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** Improves MM Connect connection deeplink reliability by adding an addition UUID format check for the id in the payload ## **Changelog** CHANGELOG entry: null MetaMask Connect has not been released to public yet. ## **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** > Small input-validation tightening in deeplink handling with unit test coverage; main risk is rejecting previously-accepted non-UUID IDs if any callers relied on them. > > **Overview** > Connection deeplink parsing now rejects payloads where `sessionRequest.id` is not a valid UUID by extending `isConnectionRequest` to check `id` with `isUUID`. > > Tests were updated to use UUID-shaped IDs and a new `handleConnectDeeplink` case asserts that a non-UUID `id` triggers `showConnectionError` and prevents connection creation, persistence, or UI sync. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit b0cd29a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )