Skip to content

Conversation

@geositta
Copy link
Contributor

@geositta geositta commented Jan 22, 2026

Description

Implements transaction history UI for perpetual futures trading, enabling users to view and filter their trading activity.

Key changes:

  • Add TransactionCard component for displaying individual transactions with contextual formatting (deposits, trades, funding payments)
  • Add PerpsRecentActivity widget for the main perps tab view with "See All" navigation
  • Add full PerpsActivityPage with category filtering (All/Deposits/Trades/Funding)
  • Introduce ButtonFilter component to component library for filter pill selection
  • Add transaction type definitions and formatting utilities

Architecture:

  • Transaction rendering is driven by a discriminated union type (PerpsTransactionType) with type-specific display logic
  • Shared utilities handle amount formatting, timestamp display, and transaction categorization
  • Route structure follows existing patterns: /perps/activity with optional filter query param

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Implements transaction history UI for perps

Related issues

Fixes:

Manual testing steps

  1. Verify transaction cards render correctly for each transaction type
  2. Confirm filter buttons properly filter the transaction list
  3. Test "See All" navigation from widget to full activity page
  4. Validate empty state displays when no transactions exist

Screenshots/Recordings

Before

After

perps_history.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
Adds new perps activity route and new UI components/utilities for rendering and filtering transaction history; risk is mostly UI/UX regressions and navigation/i18n edge cases rather than core funds handling.

Overview
Adds perps transaction history UI, including a reusable TransactionCard, a PerpsRecentActivity widget on the perps tab (with “See All”), and a new full PerpsActivityPage at PERPS_ACTIVITY_ROUTE with type filtering and date-grouped sections.

Introduces perps transaction types plus mock transaction data, and adds utilities for grouping/filtering transactions and selecting display colors; also expands perps i18n strings for new labels/statuses and updates tests/baselines accordingly.

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

@github-actions
Copy link
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@geositta geositta added the team-perps Perps team label Jan 22, 2026
@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 22, 2026

✨ Files requiring CODEOWNER review ✨

👨‍🔧 @MetaMask/perps (15 files, +1903 -5)
  • 📁 ui/
    • 📁 components/
      • 📁 app/
        • 📁 perps/
          • 📁 perps-recent-activity/
            • 📄 index.ts +2 -0
            • 📄 perps-recent-activity.test.tsx +214 -0
            • 📄 perps-recent-activity.tsx +119 -0
          • 📁 transaction-card/
            • 📄 index.ts +2 -0
            • 📄 transaction-card.test.tsx +389 -0
            • 📄 transaction-card.tsx +197 -0
            • 📄 index.ts +8 -0
            • 📄 mocks.ts +243 -1
            • 📄 perps-tab-view.tsx +4 -0
            • 📄 types.ts +43 -0
            • 📄 utils.test.ts +214 -1
            • 📄 utils.ts +133 -1
    • 📁 pages/
      • 📁 perps/
        • 📁 market-list/
          • 📁 components/
            • 📁 dropdown/
              • 📄 dropdown.tsx +2 -2
          • 📄 perps-activity-page.test.tsx +165 -0
          • 📄 perps-activity-page.tsx +168 -0

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 22, 2026

Builds ready [ea32709]
UI Startup Metrics (1301 ± 102 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13011085164610213781454
load--109290413689611541277
domContentLoaded--108689813659611491268
domInteractive--271695192480
firstPaint--170641171149191295
backgroundConnect--21819929715221252
firstReactRender--16103861729
getState--361991124063
initialActions--106112
loadScripts--8766891148979351060
setupStore--1374261323
numNetworkReqs--171179171164
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--18681423244820419272333
load--1014887145710010371247
domContentLoaded--1001880144810110231240
domInteractive--35181382736110
firstPaint--191731469183225307
backgroundConnect--266205740117240605
firstReactRender--21144842226
getState--18012875384192224
initialActions--104111
loadScripts--7896751228978131029
setupStore--1674151724
numNetworkReqs--58351362361121
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--806662108585869960
load--65557296282694849
domContentLoaded--65156795481690841
domInteractive--251696182180
firstPaint--986134948110215
backgroundConnect--3151213043100
firstReactRender--15103041624
getState--3115128164059
initialActions--104112
loadScripts--64856595280687832
setupStore--1165361118
numNetworkReqs--171181171167
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13561029194824115421883
load--69960991682737894
domContentLoaded--69060491182723889
domInteractive--36171563131135
firstPaint--1346639169165265
backgroundConnect--114759819464553
firstReactRender--24174852631
getState--15313219815161186
initialActions--103111
loadScripts--68760390280721881
setupStore--1795391743
numNetworkReqs--76372243879175
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13641085184618814911707
load--1092911157013211751350
domContentLoaded--1092906157013211751349
domInteractive--743129558105206
firstPaint--------
backgroundConnect--52161984268139
firstReactRender--1393441321
getState--126114131223
initialActions--102112
loadScripts--1060896146111211261244
setupStore--195449471058
numNetworkReqs--18978151355
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--24701864544761524914117
load--12401017270832812012135
domContentLoaded--12401017270832812012134
domInteractive--11934945109118301
firstPaint--------
backgroundConnect--125281061176100481
firstReactRender--22159392429
getState--30387895236466794
initialActions--2133323
loadScripts--1186995257428211561865
setupStore--1498783196143640
numNetworkReqs--513098217787
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16621353219215117721969
load--1374114116229714411556
domContentLoaded--1374114016229714411555
domInteractive--923223744128169
firstPaint--------
backgroundConnect--57222293960145
firstReactRender--15122631719
getState--178165191730
initialActions--103122
loadScripts--1342112616008513911491
setupStore--216207291694
numNetworkReqs--19982191473
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--29572096751193928464789
load--16881189611471916623093
domContentLoaded--16871189611371916623093
domInteractive--158324242434110398
firstPaint--------
backgroundConnect--1882611762861441139
firstReactRender--251687102735
getState--31483916248530832
initialActions--216123
loadScripts--15891170609064116102811
setupStore--991067012497403
numNetworkReqs--5130119207088
19--------
📊 Page Load Benchmark Results

Current Commit: ea32709 | Date: 1/22/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±42ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 736ms (±38ms) 🟢 | historical mean value: 718ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 80ms (±13ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 42ms 1.03s 1.36s 1.08s 1.36s
domContentLoaded 736ms 38ms 712ms 1.02s 754ms 1.02s
firstPaint 80ms 13ms 60ms 200ms 88ms 200ms
firstContentfulPaint 80ms 13ms 60ms 200ms 88ms 200ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 18.61 KiB (0.24%)
  • common: 348 Bytes (0%)

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 28, 2026

Builds ready [911b4e3]
UI Startup Metrics (1326 ± 100 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13261079161510014021487
load--1123917137810011961269
domContentLoaded--111691513719911901257
domInteractive--2716101192481
firstPaint--181651167172199320
backgroundConnect--23820931015246264
firstReactRender--18115471934
initialActions--106113
loadScripts--89469711441009661034
setupStore--1263251422
numNetworkReqs--201381171370
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--19471586252218420532343
load--1097979149012211411391
domContentLoaded--1081969148112011231373
domInteractive--37192122836102
firstPaint--1827443579241322
backgroundConnect--33028062559326486
firstReactRender--23164772443
initialActions--104112
loadScripts--84473312321188751143
setupStore--1585061726
numNetworkReqs--69411813869166
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--8406751115989091044
load--70259195986775855
domContentLoaded--69658694985770849
domInteractive--251585172279
firstPaint--1006024844120193
backgroundConnect--39181702743106
firstReactRender--15103141625
initialActions--104112
loadScripts--69358494184763847
setupStore--1153851221
numNetworkReqs--201384181372
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13791056207122015791756
load--77864312821197951064
domContentLoaded--76863812691207821058
domInteractive--42192243837133
firstPaint--15775713100181333
backgroundConnect--16714355949167227
firstReactRender--26186062835
initialActions--102011
loadScripts--76563612591187801049
setupStore--1352241519
numNetworkReqs--69381774059167
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14331153211919515281937
load--1160984167915112251464
domContentLoaded--1160983167915112251464
domInteractive--75332084399171
firstPaint--------
backgroundConnect--69253545592176
firstReactRender--13107371319
initialActions--103122
loadScripts--1123968164113611931384
setupStore--134162181041
numNetworkReqs--211185191576
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--26421913797781126884492
load--12811036282734112292259
domContentLoaded--12801036282634112292259
domInteractive--142371048166116453
firstPaint--------
backgroundConnect--3121253753440226987
firstReactRender--21147482331
initialActions--203122
loadScripts--12331008280431211871896
setupStore--1548841211134639
numNetworkReqs--61311723877163
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16741321210118718462042
load--14301154174512415171633
domContentLoaded--14301154174512415161633
domInteractive--973221842131152
firstPaint--------
backgroundConnect--802523353131185
firstReactRender--14112831519
initialActions--103112
loadScripts--1380114016369914401558
setupStore--1842223213110
numNetworkReqs--211287181572
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--30812064522073135824588
load--17201194325953418463085
domContentLoaded--17201194325853418453084
domInteractive--11932775120122372
firstPaint--------
backgroundConnect--350861715302387966
firstReactRender--23167692530
initialActions--213123
loadScripts--16751177310250918172986
setupStore--1927791238365735
numNetworkReqs--59291744079166
19--------
📊 Page Load Benchmark Results

Current Commit: 911b4e3 | Date: 1/28/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±39ms) 🟡 | historical mean value: 1.04s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 726ms (±37ms) 🟢 | historical mean value: 724ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 78ms (±10ms) 🟢 | historical mean value: 80ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 39ms 1.02s 1.34s 1.07s 1.34s
domContentLoaded 726ms 37ms 704ms 1.01s 746ms 1.01s
firstPaint 78ms 10ms 60ms 160ms 88ms 160ms
firstContentfulPaint 78ms 10ms 60ms 160ms 88ms 160ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 20.16 KiB (0.24%)
  • common: 2.29 KiB (0.02%)

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 30, 2026

Builds ready [11c1595]
UI Startup Metrics (1290 ± 119 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--12901031168311913661458
load--1105868145111211721274
domContentLoaded--1098864144311111641266
domInteractive--251593182178
firstPaint--187611334205194319
backgroundConnect--22520230215232254
firstReactRender--16103241722
initialActions--105114
loadScripts--88866712051119491064
setupStore--1373451624
numNetworkReqs--221579171574
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--272516316073118838535027
load--1125947167413511721438
domContentLoaded--1107937156112911561395
domInteractive--3518134213791
firstPaint--198711573157234332
backgroundConnect--816287387684711542830
firstReactRender--24165672740
initialActions--105113
loadScripts--86871112991199151143
setupStore--1664881936
numNetworkReqs--1255125549162222
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--86469311371029271057
load--7296181054102783975
domContentLoaded--7246141045102779969
domInteractive--261695172376
firstPaint--1065936757119228
backgroundConnect--37181442439104
firstReactRender--17104271831
initialActions--103112
loadScripts--7216121042101771967
setupStore--1353561528
numNetworkReqs--221583171573
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1269841223626314741687
load--72261112821147291029
domContentLoaded--71260612751157111022
domInteractive--37181622836109
firstPaint--1526446782208290
backgroundConnect--16013036445164288
firstReactRender--22183732328
initialActions--103111
loadScripts--70960412671137091014
setupStore--1254151520
numNetworkReqs--1504832258174279
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14311151199416615401731
load--1149970178012612291379
domContentLoaded--1148970178012512291378
domInteractive--67322223995139
firstPaint--------
backgroundConnect--63252024183153
firstReactRender--1494761417
initialActions--102012
loadScripts--1116954175311111821296
setupStore--144171221037
numNetworkReqs--231294181876
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--29422047657751330983558
load--14091120276225415191898
domContentLoaded--14091120276225415191897
domInteractive--174561030147187532
firstPaint--------
backgroundConnect--44612316363106651157
firstReactRender--24157172734
initialActions--209123
loadScripts--13451083266422014571744
setupStore--13718777166145570
numNetworkReqs--85262514896201
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16251381199615617371925
load--13911204168410814661605
domContentLoaded--13911203168410814651605
domInteractive--933023047131189
firstPaint--------
backgroundConnect--712321350102179
firstReactRender--14102421419
initialActions--102122
loadScripts--1346116915899513961541
setupStore--154230271343
numNetworkReqs--231290191878
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--30192211481843632373829
load--15971310222622417152049
domContentLoaded--15971310222622417152049
domInteractive--15039706133140524
firstPaint--------
backgroundConnect--40012812663025771108
firstReactRender--24176782632
initialActions--216123
loadScripts--15571282220022016772016
setupStore--16111772200182658
numNetworkReqs--85362934895195
19--------
📊 Page Load Benchmark Results

Current Commit: 11c1595 | Date: 1/30/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±41ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 724ms (±37ms) 🟢 | historical mean value: 718ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 78ms (±12ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 41ms 1.02s 1.32s 1.06s 1.32s
domContentLoaded 724ms 37ms 703ms 986ms 733ms 986ms
firstPaint 78ms 12ms 60ms 180ms 92ms 180ms
firstContentfulPaint 78ms 12ms 60ms 180ms 92ms 180ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 21.92 KiB (0.26%)
  • common: 497 Bytes (0.01%)

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Jan 30, 2026

Builds ready [2d7d166]
UI Startup Metrics (1317 ± 117 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--13171061181211713851483
load--1118881156111211911279
domContentLoaded--1112876155511111861273
domInteractive--271799172378
firstPaint--182681168199192419
backgroundConnect--23321528111236259
firstReactRender--17104151824
initialActions--107113
loadScripts--89467013341119681039
setupStore--1363551622
numNetworkReqs--211578161569
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--236916088760114522914713
load--1108952176415011501438
domContentLoaded--1089942175514411361390
domInteractive--3519153233495
firstPaint--192711377138231319
backgroundConnect--61928360728534082905
firstReactRender--26165593043
initialActions--105112
loadScripts--85171115051328821113
setupStore--18676111939
numNetworkReqs--1274927151144236
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--8386751131928931041
load--68959794478749846
domContentLoaded--68459393878744842
domInteractive--261698192281
firstPaint--1156164377153244
backgroundConnect--40181292546105
firstReactRender--16103761728
initialActions--105112
loadScripts--68159193677738840
setupStore--1162731118
numNetworkReqs--221584181577
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1249852238925814511681
load--704613107496708969
domContentLoaded--694608106896697960
domInteractive--35181732733102
firstPaint--1386249983173279
backgroundConnect--15312845746153249
firstReactRender--22173932328
initialActions--101011
loadScripts--692606106094694953
setupStore--1142031317
numNetworkReqs--1415330759160270
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--14701132199817715601877
load--1177979174513212581368
domContentLoaded--1176979174413212581367
domInteractive--75311844198149
firstPaint--------
backgroundConnect--722530153107176
firstReactRender--1493951321
initialActions--103122
loadScripts--1137966171811711961323
setupStore--13590141141
numNetworkReqs--241288191881
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--28212043703873329463940
load--13241078243227514372042
domContentLoaded--13241078243227514362042
domInteractive--15139848136145423
firstPaint--------
backgroundConnect--3461371343256456930
firstReactRender--21155952228
initialActions--203122
loadScripts--12611058240423213581610
setupStore--1608766199153645
numNetworkReqs--834122749100214
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16251360212717217171981
load--13961173174212114771672
domContentLoaded--13951171174212114771671
domInteractive--812723141117140
firstPaint--------
backgroundConnect--722020247104176
firstReactRender--14103231420
initialActions--102012
loadScripts--13531137171310613991573
setupStore--1752053212108
numNetworkReqs--231284171873
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--29802216550754931544118
load--15791246348035716362563
domContentLoaded--15791246348035716362559
domInteractive--147301290168138529
firstPaint--------
backgroundConnect--39912017063254981164
firstReactRender--21153142329
initialActions--207123
loadScripts--15371218295932515882419
setupStore--1776785210263649
numNetworkReqs--82412944889191
19--------
📊 Page Load Benchmark Results

Current Commit: 2d7d166 | Date: 1/30/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.02s (±38ms) 🟡 | historical mean value: 1.03s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 710ms (±34ms) 🟢 | historical mean value: 717ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 74ms (±11ms) 🟢 | historical mean value: 76ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.02s 38ms 1.00s 1.32s 1.03s 1.32s
domContentLoaded 710ms 34ms 694ms 969ms 721ms 969ms
firstPaint 74ms 11ms 56ms 168ms 80ms 168ms
firstContentfulPaint 74ms 11ms 56ms 168ms 80ms 168ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 23.81 KiB (0.29%)
  • common: 883 Bytes (0.01%)

@geositta geositta marked this pull request as ready for review January 30, 2026 19:40
@geositta geositta requested a review from a team as a code owner January 30, 2026 19:40
Copy link

@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.

return {
text: `${transaction.fill.realizedPnl.startsWith('-') ? '-' : '+'}$${transaction.fill.realizedPnl.replace(/^[+-]/u, '')}`,
color: getTransactionAmountColor(transaction.fill.realizedPnl),
};
Copy link

Choose a reason for hiding this comment

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

Color mismatch for positive PnL without prefix

Medium Severity

When realizedPnl lacks a sign prefix, the display text adds a '+' sign but getTransactionAmountColor returns neutral color instead of green. This creates inconsistent UI where a visibly positive amount displays in neutral color rather than success color. The funding transaction logic (lines 70-76) correctly handles this case inline but the PnL path delegates to a utility that expects prefixed values.

Fix in Cursor Fix in Web

>
{amountDisplay.text}
</Text>
</Box>
Copy link

Choose a reason for hiding this comment

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

Missing timestamp display in transaction cards

Medium Severity

The TransactionCard comment states "amount + time on right" and the Box element is labeled "Right side: Amount and time", but only the amount is rendered. The timestamp field from PerpsTransaction is never displayed, leaving users unable to see when transactions occurred. Transaction history UIs require timestamps for users to understand temporal context.

Fix in Cursor Fix in Web

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Feb 3, 2026

Builds ready [ede6099]
UI Startup Metrics (1398 ± 91 ms)
PlatformBuildTypePageMetricTest Title (ms)Persona (ms)Mean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1398119316429114681528
load--120299813838812691322
domContentLoaded--119499413789012621314
domInteractive--261789172378
firstPaint--154671245128200309
backgroundConnect--23821728113243269
firstReactRender--18104262027
initialActions--108113
loadScripts--97276811629010361099
setupStore--1363961526
numNetworkReqs--211581161568
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--20061631250514921122272
load--11361028158512411271512
domContentLoaded--11231017157112511101499
domInteractive--34181382433100
firstPaint--194711159133240420
backgroundConnect--32228348842325452
firstReactRender--23165462638
initialActions--102112
loadScripts--88778712981148721216
setupStore--1665391743
numNetworkReqs--80481884074173
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--8336531105988981017
load--694589100195758893
domContentLoaded--68858599492749888
domInteractive--241583162172
firstPaint--1136139064143250
backgroundConnect--3718122234787
firstReactRender--15103451629
initialActions--105114
loadScripts--68558399291744886
setupStore--1153041119
numNetworkReqs--221580171572
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--1236946180121114371634
load--69660211811196891030
domContentLoaded--68659611451186751023
domInteractive--3517259333192
firstPaint--1445865186180297
backgroundConnect--16714239040167234
firstReactRender--22153842430
initialActions--102111
loadScripts--68459411381166731014
setupStore--1155051317
numNetworkReqs--1285226758151258
19--------
FirefoxBrowserifyStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--15191277203317915881917
load--12801090181815413561659
domContentLoaded--12791090181815413501655
domInteractive--65311713792138
firstPaint--------
backgroundConnect--61281873556155
firstReactRender--1191611215
initialActions--102012
loadScripts--12471075169313513211540
setupStore--12458101238
numNetworkReqs--221191181878
19--------
BrowserifyPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--30162241481655530924338
load--16051255255732417432482
domContentLoaded--16041255255632417432477
domInteractive--1103542781109339
firstPaint--------
backgroundConnect--3011181401258286928
firstReactRender--19146972027
initialActions--103123
loadScripts--15431230252929416102341
setupStore--134880621090693
numNetworkReqs--72401894299178
19--------
WebpackStandard Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--16961395263220417992045
load--14431192209113815131653
domContentLoaded--14421192209113815121653
domInteractive--992830754132201
firstPaint--------
backgroundConnect--71242664896167
firstReactRender--14115661520
initialActions--103122
loadScripts--13991177194211714691572
setupStore--2142324012127
numNetworkReqs--231288181878
19--------
WebpackPower User Home0--------
1--------
2--------
3--------
4--------
5--------
6--------
7--------
8--------
9--------
10--------
11--------
12--------
13--------
14--------
15--------
16--------
17--------
18--------
uiStartup--28822147727661430423839
load--16021239558347817432241
domContentLoaded--16021239558247817432241
domInteractive--11235653110106389
firstPaint--------
backgroundConnect--2691091082202275850
firstReactRender--22155452430
initialActions--203122
loadScripts--15581225554246816712156
setupStore--1566677192264607
numNetworkReqs--70371864392180
19--------
📊 Page Load Benchmark Results

Current Commit: ede6099 | Date: 2/3/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.02s (±44ms) 🟡 | historical mean value: 1.02s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 706ms (±40ms) 🟢 | historical mean value: 712ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 80ms (±13ms) 🟢 | historical mean value: 79ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.02s 44ms 986ms 1.33s 1.06s 1.33s
domContentLoaded 706ms 40ms 678ms 993ms 739ms 993ms
firstPaint 80ms 13ms 64ms 196ms 88ms 196ms
firstContentfulPaint 80ms 13ms 64ms 196ms 88ms 196ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 20.04 KiB (0.24%)
  • common: 670 Bytes (0.01%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants