Skip to content

feat: PoC PerpsController intergration#39721

Closed
gambinish wants to merge 82 commits intomainfrom
perps/poc-controller-integration
Closed

feat: PoC PerpsController intergration#39721
gambinish wants to merge 82 commits intomainfrom
perps/poc-controller-integration

Conversation

@gambinish
Copy link
Copy Markdown
Member

@gambinish gambinish commented Feb 3, 2026

Description

This PR integrates the @metamask/perps-controller preview package as a PoC for fetching real Hyperliquid account data in the extension.

The PerpsController is still being iterated on in core, so we've temporarily published a preview-package to unblock development in the meantime. All of the frontend routes in this PR are hidden behind a feature flag. This PR also introduces a temporary shim to pass through dependency injection into the PerpsController while it's being refactored to use the messenger API. This is temporary and will be removed once the controller is finalized.

Introduces a suite of data streaming hooks inspired from mobile that will integrate with the Websocket exposed from the controller/sdk:

usePerpsLiveAccount - Streams user account balance and margin info
usePerpsLivePositions - Streams open positions with live P&L updates
usePerpsLiveOrders - Streams pending orders
usePerpsLiveFills - Streams trade execution history
usePerpsLivePrices - Streams real-time asset prices
usePerpsLiveMarketData - Streams market metadata (funding rates, open interest, etc.)
usePerpsLiveOrderBook - Streams order book depth
usePerpsLiveCandles - Streams candlestick chart data
usePerpsTopOfBook - Provides best bid/ask prices

Transaction History

  • Created usePerpsTransactionHistory hook that aggregates fills, orders, funding payments, deposits, and withdrawals into a unified transaction feed
  • Added useUserHistory hook for fetching historical user data from the controller
  • Built comprehensive transaction transform utilities that convert raw API data into display-ready objects with proper categorization, timestamps, and formatting

Infrastructure

  • Added Hyperliquid SDK as a dependency with proper LavaMoat security policies
  • Updated Jest config to handle the new SDK's ESM modules
  • Added new i18n strings for perps-related UI text

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Integrates a preview package of PerpsController to unblock UI development

Related issues

https://consensyssoftware.atlassian.net/browse/TAT-2388
https://consensyssoftware.atlassian.net/browse/TAT-2384
https://consensyssoftware.atlassian.net/browse/TAT-2392

Manual testing steps

  1. Go to this page...

Screenshots/Recordings

Screen.Recording.2026-02-04.at.1.28.46.PM.mov

Pre-merge author checklist

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.

Note

Medium Risk
Introduces a new trading controller dependency and injects typed-data signing hooks into the wallet, plus broad build/Jest/LavaMoat policy changes that can impact bundling and security assumptions.

Overview
Adds a PoC integration of preview @metamask/perps-controller, including a new controller shim (app/scripts/controllers/perps/*) that wires platform dependencies and exposes an EIP-712 signing bridge via perpsSignTypedData.

Updates build/test/security infrastructure to accommodate the controller’s ESM dependency tree and runtime requirements (Jest transformIgnorePatterns, dev build allowlist, LavaMoat policies, MM_PERPS_BLOCKED_REGIONS env), and pins the preview package via package.json resolutions.

Expands the Perps UI with new i18n strings and HIP-3 market classification constants, adds an EditMarginExpandable component (with tests) for add/remove isolated margin and liquidation-risk warnings, and refines OrderCard display/click behavior plus related TP/SL auto-close UI tests.

Written by Cursor Bugbot for commit 0524d4e. This will update automatically on new commits. Configure here.

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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/39971?quickstart=1)

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

1. Go to this page...
2.
3.

## **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
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/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-extension/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 the perps market detail page with new live price subscription
logic and a 1s interval timer, which could affect rendering/performance
or cleanup behavior if mismanaged; otherwise changes are primarily
UI/formatting.
> 
> **Overview**
> Improves the perps market detail UI by adding **info tooltips** for
Funding Rate and Open Interest, plus a new **Oracle Price** row
populated from a live `subscribeToPrices` stream update.
> 
> Adds a per-second UTC **funding countdown** shown alongside the
funding rate, and polishes formatting/styling: available balance now
displays the numeric value, ROE uses percent formatting, size/margin
values are reformatted, and CTA button variants/styles are adjusted
(swap primary/secondary and remove custom long/short coloring).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
36d3d81. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
},
"perpsGiveFeedback": {
"message": "Give us feedback"
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

en_GB locale missing several new i18n keys

Low Severity

Four new i18n keys added to en/messages.json are missing from en_GB/messages.json: perpsFundingRateTooltip, perpsOpenInterestTooltip, perpsOraclePrice, and perpsOraclePriceTooltip. All other new perps keys were added to both locales, so this appears to be an oversight in the en_GB file.

Fix in Cursor Fix in Web

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Feb 11, 2026

Builds ready [ce48256]
UI Startup Metrics (1395 ± 113 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13951151181011314621572
load1200993155910512661364
domContentLoaded1194989154610512601358
domInteractive2817101202484
firstPaint174671243188208329
backgroundConnect21319826111216225
firstReactRender16113131722
initialActions107113
loadScripts995790131910510591159
setupStore1262741420
numNetworkReqs231589211582
BrowserifyPower User HomeuiStartup20511449798887620392891
load12001034191317512181692
domContentLoaded11821029183416612051604
domInteractive3619150233782
firstPaint218781845261242427
backgroundConnect45527033055263431050
firstReactRender22164452431
initialActions102111
loadScripts96482116051599911363
setupStore1563251825
numNetworkReqs1194826446149192
WebpackStandard HomeuiStartup86672214041149071101
load741639108692790905
domContentLoaded736634107791785895
domInteractive261692182378
firstPaint1126082086120199
backgroundConnect27136093147
firstReactRender15103151824
initialActions104112
loadScripts733633106890778886
setupStore1162131217
numNetworkReqs2315100211583
WebpackPower User HomeuiStartup1246944218921013291623
load75164515101337421079
domContentLoaded74163814731317331068
domInteractive37181923233130
firstPaint14268775110139332
backgroundConnect16913264268166270
firstReactRender22163532329
initialActions102111
loadScripts73863614601297311058
setupStore1345771424
numNetworkReqs1274628251155241
FirefoxBrowserifyStandard HomeuiStartup15971374226415816101959
load13861189203512714181628
domContentLoaded13841189203012714171628
domInteractive843323845101167
firstPaint------
backgroundConnect5327171175580
firstReactRender12101921216
initialActions102112
loadScripts13611164200912613941596
setupStore146177191327
numNetworkReqs231392201787
BrowserifyPower User HomeuiStartup28492157789660229783469
load16501297648752716782072
domContentLoaded16501292648752716732071
domInteractive12635650119123409
firstPaint------
backgroundConnect286113975238277925
firstReactRender211493141963
initialActions2154523
loadScripts16131276643952216192032
setupStore1089832161107452
numNetworkReqs72391543196128
WebpackStandard HomeuiStartup15971339193611916431847
load1394121716279314461564
domContentLoaded1394121716279314451563
domInteractive862722343130143
firstPaint------
backgroundConnect52241522353103
firstReactRender13102831320
initialActions102122
loadScripts1370119515939014231528
setupStore146175191335
numNetworkReqs241397191776
WebpackPower User HomeuiStartup27881948856273828653636
load16341253681359917242358
domContentLoaded16331253681359917232357
domInteractive14431755156121581
firstPaint------
backgroundConnect2801101247237290898
firstReactRender20157062227
initialActions216122
loadScripts16001230678559717022333
setupStore2277800260402765
numNetworkReqs70351593296128
📊 Page Load Benchmark Results

Current Commit: ce48256 | Date: 2/10/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.01s (±35ms) 🟡 | historical mean value: 1.03s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 705ms (±34ms) 🟢 | historical mean value: 720ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 74ms (±10ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.01s 35ms 993ms 1.28s 1.03s 1.28s
domContentLoaded 705ms 34ms 687ms 961ms 723ms 961ms
firstPaint 74ms 10ms 60ms 160ms 84ms 160ms
firstContentfulPaint 74ms 10ms 60ms 160ms 84ms 160ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 269 Bytes (0.01%)
  • ui: 1.09 MiB (13.42%)
  • common: -1.33 KiB (-0.01%)

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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/39972?quickstart=1)

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

1. Go to this page...
2.
3.

## **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
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/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-extension/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.
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Feb 11, 2026

Builds ready [37d8173]
UI Startup Metrics (1452 ± 119 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup14521224176511915301638
load12441019149410913151418
domContentLoaded12371014148510813071411
domInteractive271797172473
firstPaint204631322193224345
backgroundConnect24120533624253291
firstReactRender1793651926
initialActions1014224
loadScripts1011809126310310771184
setupStore1374061522
numNetworkReqs231597211585
BrowserifyPower User HomeuiStartup21291491927189322393317
load12601089176314813211574
domContentLoaded12421079168314213011542
domInteractive3621171243761
firstPaint1867841180255307
backgroundConnect43727537184393531197
firstReactRender24156272636
initialActions107113
loadScripts1013847145813610681310
setupStore1675381730
numNetworkReqs78431612590121
WebpackStandard HomeuiStartup84469812611038881050
load72361596889775888
domContentLoaded71861195388771881
domInteractive2515102172172
firstPaint1136196099122195
backgroundConnect2817126133045
firstReactRender1592841823
initialActions104112
loadScripts71560995087769874
setupStore1153141119
numNetworkReqs231590211584
WebpackPower User HomeuiStartup1252940240122713111670
load75065014331347491070
domContentLoaded74064413961327351065
domInteractive3617187333396
firstPaint1416675197156316
backgroundConnect16613260065160289
firstReactRender21173942330
initialActions102111
loadScripts73764213871307331056
setupStore1354161423
numNetworkReqs1324628249153222
FirefoxBrowserifyStandard HomeuiStartup15981413235217816051990
load13851227182912514151627
domContentLoaded13841227182912514151627
domInteractive853836351103154
firstPaint------
backgroundConnect5531169215390
firstReactRender12101811214
initialActions102012
loadScripts13611202180412413891601
setupStore146145161329
numNetworkReqs251298241794
BrowserifyPower User HomeuiStartup28192117421243030073755
load16551310260528517602285
domContentLoaded16541310260528517602284
domInteractive15638810160130584
firstPaint------
backgroundConnect2901191076224289857
firstReactRender18147461822
initialActions203122
loadScripts16131285257527616992237
setupStore1359788189125553
numNetworkReqs773718235101136
WebpackStandard HomeuiStartup16771403219814717282004
load1459126617199615191644
domContentLoaded1459126617189615181644
domInteractive1023121041134150
firstPaint------
backgroundConnect57281682559106
firstReactRender14112421418
initialActions103122
loadScripts1434125216889414961611
setupStore177180261265
numNetworkReqs241391201779
WebpackPower User HomeuiStartup284121161008484129223615
load16901354823673116512273
domContentLoaded16891353823673216512273
domInteractive15338954168128582
firstPaint------
backgroundConnect3861271214282535922
firstReactRender221677102330
initialActions214123
loadScripts16431330819772315722142
setupStore1499840192154613
numNetworkReqs76362174488177
📊 Page Load Benchmark Results

Current Commit: 37d8173 | Date: 2/11/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±37ms) 🟡 | historical mean value: 1.03s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 720ms (±35ms) 🟢 | historical mean value: 720ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±11ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 37ms 1.01s 1.31s 1.06s 1.31s
domContentLoaded 720ms 35ms 699ms 982ms 743ms 982ms
firstPaint 76ms 11ms 60ms 168ms 84ms 168ms
firstContentfulPaint 76ms 11ms 60ms 168ms 84ms 168ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 269 Bytes (0.01%)
  • ui: 1.09 MiB (13.53%)
  • common: -1.12 KiB (-0.01%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Feb 11, 2026

Builds ready [318256e]
UI Startup Metrics (1381 ± 91 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1381119216119114161543
load1180100913878612221330
domContentLoaded1175100313818612181323
domInteractive271693182380
firstPaint1496939871203259
backgroundConnect2101972306213220
firstReactRender16112431820
initialActions105114
loadScripts97680511848610181122
setupStore1363351621
numNetworkReqs231591211583
BrowserifyPower User HomeuiStartup17631355239916618012058
load11761040203817211521591
domContentLoaded11611032203016711391556
domInteractive3720203283793
firstPaint181711794178224286
backgroundConnect30226938621310347
firstReactRender23145272536
initialActions104112
loadScripts94182917581639171321
setupStore17872101732
numNetworkReqs1114523443134201
WebpackStandard HomeuiStartup85370312871139281054
load7456291129101804916
domContentLoaded7406261123100799909
domInteractive2615105202181
firstPaint1105934453146212
backgroundConnect261671102855
firstReactRender14102541721
initialActions104112
loadScripts737624112199794904
setupStore1052331116
numNetworkReqs231597221586
WebpackPower User HomeuiStartup1236852168214813161517
load75065912191277391125
domContentLoaded74265212131287271113
domInteractive39182043438119
firstPaint1456754197164301
backgroundConnect16513234340164237
firstReactRender23163542430
initialActions104111
loadScripts73965012031267251105
setupStore1445181531
numNetworkReqs1154527451141249
FirefoxBrowserifyStandard HomeuiStartup16041370244016616541936
load13981214211913814441650
domContentLoaded13961214211913914411650
domInteractive803824742103142
firstPaint------
backgroundConnect5326149195591
firstReactRender1291911314
initialActions102012
loadScripts13731199202713214171631
setupStore1365991435
numNetworkReqs251295221688
BrowserifyPower User HomeuiStartup28372166377240130673655
load16221367239324516862120
domContentLoaded16221367239324516852120
domInteractive12037682120111448
firstPaint------
backgroundConnect2491111018193241693
firstReactRender201488102023
initialActions103122
loadScripts15851306233523916152089
setupStore1478917196149587
numNetworkReqs66371573491130
WebpackStandard HomeuiStartup16391352226815216871947
load14301255171810014841601
domContentLoaded14301250171810014831601
domInteractive953031250134158
firstPaint------
backgroundConnect57251712759106
firstReactRender14114241419
initialActions103112
loadScripts1406124016889714581571
setupStore176201291236
numNetworkReqs231288191779
WebpackPower User HomeuiStartup26642025364739428173474
load15811301238528116882158
domContentLoaded15811300238528116872158
domInteractive12733706144107524
firstPaint------
backgroundConnect229951253178224534
firstReactRender20158882125
initialActions213122
loadScripts15391281233026016652107
setupStore19181156238283657
numNetworkReqs64331593390126
📊 Page Load Benchmark Results

Current Commit: 318256e | Date: 2/11/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±42ms) 🟡 | historical mean value: 1.03s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 717ms (±39ms) 🟢 | historical mean value: 720ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±12ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 42ms 1.01s 1.33s 1.05s 1.33s
domContentLoaded 717ms 39ms 698ms 1000ms 730ms 1000ms
firstPaint 77ms 12ms 60ms 172ms 88ms 172ms
firstContentfulPaint 77ms 12ms 60ms 172ms 88ms 172ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 269 Bytes (0.01%)
  • ui: 1.09 MiB (13.51%)
  • common: -1.13 KiB (-0.01%)

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

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/39999?quickstart=1)

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

1. Go to this page...
2.
3.

## **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
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/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-extension/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.
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

@gambinish
Copy link
Copy Markdown
Member Author

closing in favor of #40078

@gambinish gambinish closed this Mar 2, 2026
@github-actions github-actions bot locked and limited conversation to collaborators Mar 2, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

DO-NOT-MERGE Pull requests that should not be merged size-XL team-perps Perps team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants