Skip to content

feat: add trust signal awareness to enforced simulations eligibility#41126

Merged
matthewwalsh0 merged 11 commits intomainfrom
feat/enforced-simulations-trust-signals
Apr 14, 2026
Merged

feat: add trust signal awareness to enforced simulations eligibility#41126
matthewwalsh0 merged 11 commits intomainfrom
feat/enforced-simulations-trust-signals

Conversation

@matthewwalsh0
Copy link
Copy Markdown
Member

@matthewwalsh0 matthewwalsh0 commented Mar 23, 2026

Description

Adds trust signal awareness to enforced simulations. The enforced simulations row only appears when at least one transaction recipient is not trusted by the security alerts API. When shown, it defaults ON but the user can opt out.

Key changes:

  • Consolidated eligibility logic in a single shared function checking env, origin, delegation, balance changes, and trust signals
  • Supports nested transactions — scans all to addresses including those from wallet_sendCalls batches
  • Uses txParamsOriginal.to to check the real recipient, not the delegation manager address after container wrapping
  • Unsupported chains skip the trust signal check (remain eligible since trust can't be verified)
  • Background hook simplified to beforeSign only — simulation skip moved to core via containerTypes
  • Fixed toggle stability: row persists during re-simulation, auto-enable fires only once, loading spinner shown during initialization
  • Fixed container unwrapping not clearing data field when reverting to original params

Changelog

CHANGELOG entry: null

Related issues

Fixes: CONF-1078

Manual testing steps

  1. Enable ENABLE_ENFORCED_SIMULATIONS env flag and build
  2. Initiate a transaction with a delegated account to a non-trusted address
  3. Verify the enforced simulations row appears and defaults ON
  4. Verify it does not appear for trusted addresses or while trust signals load
  5. Toggle off — verify it stays off and balance changes remain visible

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

Note

Medium Risk
Updates transaction pre-sign hooking and eligibility logic for enforced simulations, affecting when simulations are enforced during signing and when the opt-out UI appears. Moderate risk due to changes in transaction-flow gating and reliance on trust-signal cache/state.

Overview
Enforced simulations eligibility is now trust-signal aware. isEnforcedSimulationsEligible accepts optional trust-signal state and only returns eligible (on supported chains) when at least one recipient (txParamsOriginal.to, txParams.to, or nestedTransactions[].to) is loaded and not Trusted; unsupported chains bypass the trust check.

Transaction flow enforcement is simplified to beforeSign. The EnforceSimulationHook drops the afterSimulate path, takes an injected isEligible predicate, and only applies containers when containerTypes explicitly include TransactionContainerType.EnforcedSimulations.

Confirmation UI now uses a dedicated hook and auto-enables once. Adds useIsEnforcedSimulationsEligible (wired to metamask.addressSecurityAlertResponses) and updates EnforcedSimulationsRow to (a) render based on eligibility, (b) default ON by writing containerTypes once when unset, and (c) show a loading spinner during initialization/toggles.

Fixes a container unwrap edge case. applyTransactionContainersExisting now defaults txParams.data to 0x when unwrapping leaves it undefined, with added unit coverage; tests and console baselines are updated accordingly.

Reviewed by Cursor Bugbot for commit 70f3d05. Bugbot is set up for automated code reviews on this repo. Configure here.

@metamaskbot metamaskbot added the team-confirmations Push issues to confirmations team label Mar 23, 2026
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Mar 23, 2026

✨ Files requiring CODEOWNER review ✨

@MetaMask/confirmations (8 files, +283 -196)
  • 📁 app/
    • 📁 scripts/
      • 📁 lib/
        • 📁 transaction/
          • 📁 containers/
            • 📄 util.test.ts +26 -0
            • 📄 util.ts +1 -1
          • 📁 hooks/
            • 📄 enforce-simulation-hook.test.ts +34 -105
            • 📄 enforce-simulation-hook.ts +26 -44
  • 📁 ui/
    • 📁 pages/
      • 📁 confirmations/
        • 📁 components/
          • 📁 rows/
            • 📁 enforced-simulations-row/
              • 📄 enforced-simulations-row.test.tsx +74 -39
              • 📄 enforced-simulations-row.tsx +23 -7
        • 📁 hooks/
          • 📄 useIsEnforcedSimulationsEligible.test.ts +72 -0
          • 📄 useIsEnforcedSimulationsEligible.ts +27 -0

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Mar 23, 2026

Builds ready [b17f953]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account383265521116474521
total383265521116474521
Confirm Txconfirm_tx6070601161485961356148
total6070601161485961356148
Bridge User Actionsbridge_load_page2282262302230230
bridge_load_asset_picker2452402525252252
bridge_search_token7607597611761761
total123512291239412391239
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup14531227197310614881646
load1203102216409512311379
domContentLoaded1196101716319412281360
domInteractive3018133232593
firstPaint153711200125193253
backgroundConnect21620126712217245
firstReactRender21134462236
initialActions107123
loadScripts99681214219310271161
setupStore1362851523
numNetworkReqs393187163178
Power User HomeuiStartup56622409159432338647310006
load13221145206713313571563
domContentLoaded13021101205612713391520
domInteractive37202273431101
firstPaint220881356178269344
backgroundConnect201730613681207131495015
firstReactRender2817376362736
initialActions106113
loadScripts1071891175911511171248
setupStore1564271727
numNetworkReqs1807351160194271
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2202172243222224
srpButtonToSrpForm92919419294
confirmSrpToPwForm22212202222
pwFormToMetricsScreen15151601516
metricsToWalletReadyScreen16151601616
doneButtonToHomeScreen53150456225547562
openAccountMenuToAccountListLoaded3040292931298931063129
total3906380540629439664062
Onboarding New WalletcreateWalletToSocialScreen2192182201220220
srpButtonToPwForm1071061101107110
createPwToRecoveryScreen889099
skipBackupToMetricsScreen39393903939
agreeButtonToOnboardingSuccess17161711717
doneButtonToAssetList49047150214502502
total88085989115891891
Asset DetailsassetClickToPriceChart75638587885
total75638587885
Solana Asset DetailsassetClickToPriceChart643987198487
total643987198487
Import Srp HomeloginToHomeScreen25502321300025226533000
openAccountMenuAfterLogin734992178692
homeAfterImportWithNewWallet1543320245895822702458
total41663059487273647054872
Send TransactionsopenSendPageFromHome29243752837
selectTokenToSendFormLoaded32303313333
reviewTransactionToConfirmationPage1173112212575611921257
total1255119113154412631315
SwapopenSwapPageFromHome86838928989
fetchAndDisplaySwapQuotes2692268127131327012713
total2771273027992627842799
🌐 Dapp Page Load Benchmarks

Current Commit: b17f953 | Date: 3/23/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±45ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 737ms (±62ms) 🟢 | historical mean value: 742ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 92ms (±128ms) 🟢 | historical mean value: 88ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 45ms 1.02s 1.40s 1.08s 1.40s
domContentLoaded 737ms 62ms 714ms 1.30s 757ms 1.30s
firstPaint 92ms 128ms 68ms 1.36s 92ms 1.36s
firstContentfulPaint 92ms 128ms 68ms 1.36s 92ms 1.36s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 667 Bytes (0.01%)
  • ui: 55 Bytes (0%)
  • common: -570 Bytes (0%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Mar 25, 2026

Builds ready [b0dea41]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account28526729812294298
total28526729812294298
Confirm Txconfirm_tx6049601860832560616083
total6049601860832560616083
Bridge User Actionsbridge_load_page23017727438259274
bridge_load_asset_picker23721826216248262
bridge_search_token74373075711750757
total1228121112451412371245
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Chrome Browserify Startup Standard HomeuiStartup14971278193710915261716
load1238105216009412711418
domContentLoaded1231104515909312651411
domInteractive3017103192578
firstPaint189711332175228381
backgroundConnect22520726710231238
firstReactRender23134372438
initialActions105124
loadScripts102083713659110481200
setupStore1574061825
numNetworkReqs393183154080
Chrome Browserify Startup Power User HomeuiStartup4677186212882204554227593
load13271103200613513581538
domContentLoaded13041096195512613381502
domInteractive3819389403880
firstPaint246831609195279338
backgroundConnect16993069596181925474660
firstReactRender28197692941
initialActions105114
loadScripts1079887166511611051254
setupStore1563861726
numNetworkReqs2319337559269322
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2202172212221221
srpButtonToSrpForm99921066102106
confirmSrpToPwForm23222412424
pwFormToMetricsScreen16151601616
metricsToWalletReadyScreen16161701717
doneButtonToHomeScreen54652457119563571
openAccountMenuToAccountListLoaded293229282939529352939
total3898383640287239234028
Onboarding New WalletcreateWalletToSocialScreen2262192358235235
srpButtonToPwForm1191161222119122
createPwToRecoveryScreen10101001010
skipBackupToMetricsScreen42404524245
agreeButtonToOnboardingSuccess18181801818
doneButtonToAssetList51249852711516527
total94591999729956997
Asset DetailsassetClickToPriceChart58546445864
total58546445864
Solana Asset DetailsassetClickToPriceChart644879117079
total644879117079
Import Srp HomeloginToHomeScreen2395234124564123992456
openAccountMenuAfterLogin49376095460
homeAfterImportWithNewWallet1120283234396322522343
total36332719488494746804884
Send TransactionsopenSendPageFromHome31283843038
selectTokenToSendFormLoaded35294143641
reviewTransactionToConfirmationPage1077853146821911521468
total1061917121611211041216
SwapopenSwapPageFromHome1049311510112115
fetchAndDisplaySwapQuotes269426872704726972704
total2827278028693328582869
🌐 Dapp Page Load Benchmarks

Current Commit: b0dea41 | Date: 3/25/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.06s (±41ms) 🟡 | historical mean value: 1.05s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 746ms (±38ms) 🟢 | historical mean value: 742ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 82ms (±9ms) 🟢 | historical mean value: 87ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.06s 41ms 1.02s 1.35s 1.10s 1.35s
domContentLoaded 746ms 38ms 714ms 1.03s 780ms 1.03s
firstPaint 82ms 9ms 72ms 156ms 92ms 156ms
firstContentfulPaint 82ms 9ms 72ms 156ms 92ms 156ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 2.02 KiB (0.03%)
  • ui: 4.87 KiB (0.06%)
  • common: 7.19 KiB (0.06%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Mar 27, 2026

Builds ready [bca8b0c]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account34528551297298512
total34528551297298512
Confirm Txconfirm_tx6120607162115161326211
total6120607162115161326211
Bridge User Actionsbridge_load_page25620433348274333
bridge_load_asset_picker2562482667266266
bridge_search_token7627587653765765
total1266122812882412861288
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Chrome Browserify Startup Standard HomeuiStartup15161256192711915731713
load12481018167110713061422
domContentLoaded12401014166410512931408
domInteractive3217114222793
firstPaint209701418195258396
backgroundConnect21318925412220230
firstReactRender2313244232229
initialActions107114
loadScripts1043819145710210991211
setupStore1473861625
numNetworkReqs393182153775
Chrome Browserify Startup Power User HomeuiStartup50442186161073080585113245
load13431151173212713841629
domContentLoaded13191136170112213451615
domInteractive43202043539135
firstPaint263921302174313401
backgroundConnect201630412676274427159307
firstReactRender28186572943
initialActions104113
loadScripts1107940145411611331400
setupStore1777292030
numNetworkReqs1466831546160251
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2212182232221223
srpButtonToSrpForm9794100298100
confirmSrpToPwForm24232512525
pwFormToMetricsScreen17162011820
metricsToWalletReadyScreen17161811718
doneButtonToHomeScreen55953258219571582
openAccountMenuToAccountListLoaded311731113122431223122
total4113404641754941434175
Onboarding New WalletcreateWalletToSocialScreen2202192211221221
srpButtonToPwForm1171101266121126
createPwToRecoveryScreen99100910
skipBackupToMetricsScreen41394214242
agreeButtonToOnboardingSuccess17171811818
doneButtonToAssetList51249253417522534
total91688894724930947
Asset DetailsassetClickToPriceChart1057612017117120
total1057612017117120
Solana Asset DetailsassetClickToPriceChart714792178792
total714792178792
Import Srp HomeloginToHomeScreen2495235425898125532589
openAccountMenuAfterLogin80651001487100
homeAfterImportWithNewWallet36029753199310531
total2962288631008729743100
Send TransactionsopenSendPageFromHome32253953539
selectTokenToSendFormLoaded35294253742
reviewTransactionToConfirmationPage1046884126814711631268
total1134972133113312301331
SwapopenSwapPageFromHome665483116583
fetchAndDisplaySwapQuotes268726852688126882688
total2782275128393627862839
🌐 Dapp Page Load Benchmarks

Current Commit: bca8b0c | Date: 3/27/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.07s (±43ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 749ms (±41ms) 🟢 | historical mean value: 723ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 84ms (±14ms) 🟢 | historical mean value: 82ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.07s 43ms 1.04s 1.39s 1.09s 1.39s
domContentLoaded 749ms 41ms 724ms 1.05s 778ms 1.05s
firstPaint 84ms 14ms 68ms 216ms 92ms 216ms
firstContentfulPaint 84ms 14ms 68ms 216ms 92ms 216ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 3.02 KiB (0.04%)
  • ui: 8.16 KiB (0.1%)
  • common: 9.81 KiB (0.08%)

@matthewwalsh0 matthewwalsh0 force-pushed the feat/enforced-simulations-trust-signals branch from bca8b0c to ed1c8db Compare March 27, 2026 15:29
@matthewwalsh0 matthewwalsh0 force-pushed the feat/enforced-simulations-trust-signals branch from ed1c8db to 20a20e5 Compare April 10, 2026 21:14
Consolidate enforced simulations eligibility into a single function in
transaction-controller-init.ts with access to AppStateController via
messenger. When the to address trust signal is Trusted, enforced
simulations default OFF (user can still opt-in via checkbox).

- Move all eligibility checks (env flag, origin, delegation, balance
  changes, trust signal) into getIsEnforcedSimulationsEligible
- Expose isEnforcedSimulationsEligible via getApi for UI consumption
- Refactor EnforceSimulationHook to accept isDefaultEnabled callback
- Update UI row to call background async via submitRequestToBackground
- Remove isEnforcedSimulationsEligible from shared (keep only slippage)
Move default-on decision from background to UI hook. The hook now checks
that the trust signal cache entry exists before enabling the default,
preventing the checkbox from auto-checking during the loading phase.

- Add useIsEnforcedSimulationsEligible hook with inline loaded check
- Background hook only checks eligibility, never auto-applies
- Remove isTrustSignalLoaded from shared (UI-only concern)
- Trusted addresses: row shows, checkbox unchecked (user opt-in)
… and simplify hooks

- Check trust signals for all to addresses including nested transactions
- Add wallet_sendCalls support to trust signals middleware
- Remove afterSimulate hook; only beforeSign needed for container application
- Simplify enforced simulations row to always-on-by-default when eligible
- Remove debug console.logs and forced untrusted address override
@matthewwalsh0 matthewwalsh0 force-pushed the feat/enforced-simulations-trust-signals branch from 20a20e5 to 0483516 Compare April 10, 2026 21:49
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Apr 10, 2026

Builds ready [e3cc0e0] [reused from 0483516]
⚡ Performance Benchmarks (Total: 🟢 2 pass · 🟡 3 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24266376830 | Baseline logs

Interaction Benchmarks · Samples: 5

⚠️ Missing data: chrome/browserify/interactionUserActions

✅ No regressions detected

Startup Benchmarks · Samples: 100

⚠️ Missing data: chrome/browserify/startupStandardHome, chrome/browserify/startupPowerUserHome, chrome/webpack/startupStandardHome, chrome/webpack/startupPowerUserHome, firefox/browserify/startupStandardHome, firefox/browserify/startupPowerUserHome, firefox/webpack/startupStandardHome, firefox/webpack/startupPowerUserHome

✅ No regressions detected

User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: chrome/browserify/userJourneyTransactions

Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -86%
  • onboardingImportWallet/confirmSrpToPwForm: -12%
  • onboardingImportWallet/metricsToWalletReadyScreen: -50%
  • onboardingImportWallet/doneButtonToHomeScreen: -77%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +26%
  • onboardingImportWallet/total: -43%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/skipBackupToMetricsScreen: -66%
  • onboardingNewWallet/doneButtonToAssetList: -25%
  • onboardingNewWallet/total: -26%
  • assetDetails/assetClickToPriceChart: -46%
  • assetDetails/total: -46%
  • solanaAssetDetails/assetClickToPriceChart: -67%
  • solanaAssetDetails/total: -67%
  • importSrpHome/openAccountMenuAfterLogin: -59%
  • importSrpHome/homeAfterImportWithNewWallet: -70%
  • importSrpHome/total: -60%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/INP: p75 208ms
  • 🟡 assetDetails/FCP: p75 2.5s
  • 🟡 solanaAssetDetails/FCP: p75 2.5s
  • 🟡 importSrpHome/INP: p75 232ms
  • 🟡 importSrpHome/FCP: p75 2.5s
  • 🟡 importSrpHome/LCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100

⚠️ Missing data: chrome/browserify/pageLoadBenchmark

✅ No regressions detected

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 752 Bytes (0.01%)
  • ui: 1.13 KiB (0.01%)
  • common: 514 Bytes (0%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Apr 12, 2026

Builds ready [5848952] [reused from 0483516]
⚡ Performance Benchmarks (Total: 🟢 2 pass · 🟡 3 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24308144305 | Baseline logs

Interaction Benchmarks · Samples: 5

⚠️ Missing data: chrome/browserify/interactionUserActions

✅ No regressions detected

Startup Benchmarks · Samples: 100

⚠️ Missing data: chrome/browserify/startupStandardHome, chrome/browserify/startupPowerUserHome, chrome/webpack/startupStandardHome, chrome/webpack/startupPowerUserHome, firefox/browserify/startupStandardHome, firefox/browserify/startupPowerUserHome, firefox/webpack/startupStandardHome, firefox/webpack/startupPowerUserHome

✅ No regressions detected

User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: chrome/browserify/userJourneyTransactions

Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -86%
  • onboardingImportWallet/confirmSrpToPwForm: -12%
  • onboardingImportWallet/metricsToWalletReadyScreen: -50%
  • onboardingImportWallet/doneButtonToHomeScreen: -77%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +26%
  • onboardingImportWallet/total: -43%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/skipBackupToMetricsScreen: -66%
  • onboardingNewWallet/doneButtonToAssetList: -25%
  • onboardingNewWallet/total: -26%
  • assetDetails/assetClickToPriceChart: -46%
  • assetDetails/total: -46%
  • solanaAssetDetails/assetClickToPriceChart: -67%
  • solanaAssetDetails/total: -67%
  • importSrpHome/openAccountMenuAfterLogin: -59%
  • importSrpHome/homeAfterImportWithNewWallet: -70%
  • importSrpHome/total: -60%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/INP: p75 208ms
  • 🟡 assetDetails/FCP: p75 2.5s
  • 🟡 solanaAssetDetails/FCP: p75 2.5s
  • 🟡 importSrpHome/INP: p75 232ms
  • 🟡 importSrpHome/FCP: p75 2.5s
  • 🟡 importSrpHome/LCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100

⚠️ Missing data: chrome/browserify/pageLoadBenchmark

✅ No regressions detected

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 752 Bytes (0.01%)
  • ui: 1.13 KiB (0.01%)
  • common: 514 Bytes (0%)

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Apr 13, 2026

Builds ready [202f787]
⚡ Performance Benchmarks (Total: 🟢 7 pass · 🟡 12 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24320907122 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-browserify
loadNewAccount🟡 [Show logs]
confirmTx🟡 [Show logs]
bridgeUserActions🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -22%
  • loadNewAccount/total: -22%
  • bridgeUserActions/bridge_load_asset_picker: -19%
  • bridgeUserActions/bridge_search_token: -13%
  • bridgeUserActions/total: -17%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.5s
  • 🟡 confirmTx/FCP: p75 2.5s
  • 🟡 bridgeUserActions/FCP: p75 2.5s
Startup Benchmarks · Samples: 100
Benchmarkchrome-browserifychrome-webpackfirefox-browserifyfirefox-webpack
startupStandardHome🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]
startupPowerUserHome🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -25%
  • startupStandardHome/load: -14%
  • startupStandardHome/domContentLoaded: -16%
  • startupStandardHome/firstReactRender: -18%
  • startupStandardHome/initialActions: -33%
  • startupStandardHome/loadScripts: -19%
  • startupStandardHome/numNetworkReqs: -21%
  • startupPowerUserHome/uiStartup: -35%
  • startupPowerUserHome/domInteractive: -15%
  • startupPowerUserHome/backgroundConnect: +77%
  • startupPowerUserHome/firstReactRender: -11%
  • startupStandardHome/uiStartup: -17%
  • startupStandardHome/load: -12%
  • startupStandardHome/domContentLoaded: -12%
  • startupStandardHome/firstPaint: +17%
  • startupStandardHome/backgroundConnect: -37%
  • startupStandardHome/firstReactRender: -27%
  • startupStandardHome/loadScripts: -12%
  • startupStandardHome/numNetworkReqs: -29%
  • startupPowerUserHome/uiStartup: -28%
  • startupPowerUserHome/domInteractive: -17%
  • startupPowerUserHome/firstPaint: -11%
  • startupPowerUserHome/numNetworkReqs: +11%
  • startupStandardHome/uiStartup: -11%
  • startupStandardHome/domInteractive: -59%
  • startupStandardHome/backgroundConnect: +16%
  • startupStandardHome/initialActions: +33%
  • startupStandardHome/setupStore: +13%
  • startupStandardHome/numNetworkReqs: -18%
  • startupPowerUserHome/uiStartup: -32%
  • startupPowerUserHome/backgroundConnect: -22%
  • startupPowerUserHome/setupStore: -19%
  • startupPowerUserHome/numNetworkReqs: -10%
  • startupStandardHome/uiStartup: -13%
  • startupStandardHome/domInteractive: -47%
  • startupStandardHome/backgroundConnect: -18%
  • startupStandardHome/initialActions: +14%
  • startupStandardHome/setupStore: -50%
  • startupStandardHome/numNetworkReqs: -16%
  • startupPowerUserHome/uiStartup: -31%
  • startupPowerUserHome/domInteractive: -16%
  • startupPowerUserHome/backgroundConnect: -31%
  • startupPowerUserHome/loadScripts: -11%
  • startupPowerUserHome/setupStore: +10%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 760ms
  • 🔴 startupPowerUserHome/INP: p75 696ms
  • 🟡 startupPowerUserHome/LCP: p75 3.7s
  • 🟡 startupPowerUserHome/LCP: p75 3.6s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]
sendTransactions🟡 [Show logs]
swap🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -85%
  • onboardingImportWallet/metricsToWalletReadyScreen: -13%
  • onboardingImportWallet/doneButtonToHomeScreen: -79%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +26%
  • onboardingImportWallet/total: -44%
  • onboardingNewWallet/srpButtonToPwForm: -79%
  • onboardingNewWallet/skipBackupToMetricsScreen: -67%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -10%
  • onboardingNewWallet/doneButtonToAssetList: -28%
  • onboardingNewWallet/total: -29%
  • assetDetails/assetClickToPriceChart: -46%
  • assetDetails/total: -46%
  • solanaAssetDetails/assetClickToPriceChart: -72%
  • solanaAssetDetails/total: -72%
  • importSrpHome/openAccountMenuAfterLogin: -78%
  • importSrpHome/homeAfterImportWithNewWallet: -71%
  • importSrpHome/total: -61%
  • sendTransactions/openSendPageFromHome: -23%
  • sendTransactions/selectTokenToSendFormLoaded: -22%
  • sendTransactions/reviewTransactionToConfirmationPage: +35%
  • sendTransactions/total: +33%
  • swap/openSwapPageFromHome: -96%
  • swap/fetchAndDisplaySwapQuotes: +31%
  • swap/total: +11%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/INP: p75 232ms
  • 🟡 assetDetails/FCP: p75 2.4s
  • 🟡 solanaAssetDetails/FCP: p75 2.4s
  • 🟡 importSrpHome/INP: p75 216ms
  • 🟡 importSrpHome/FCP: p75 2.5s
  • 🟡 sendTransactions/INP: p75 224ms
  • 🟡 sendTransactions/FCP: p75 2.5s
  • 🟡 swap/FCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: -139 Bytes (0%)
  • ui: 1.15 KiB (0.01%)
  • common: 1.06 KiB (0.01%)

@matthewwalsh0 matthewwalsh0 force-pushed the feat/enforced-simulations-trust-signals branch from 205ea58 to e9695ee Compare April 13, 2026 07:15
@matthewwalsh0 matthewwalsh0 force-pushed the feat/enforced-simulations-trust-signals branch from e9695ee to f4fe3fa Compare April 13, 2026 07:22
@matthewwalsh0 matthewwalsh0 force-pushed the feat/enforced-simulations-trust-signals branch from f4fe3fa to b2a26e8 Compare April 13, 2026 07:38
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Apr 13, 2026

Builds ready [b2a26e8]
⚡ Performance Benchmarks (Total: 🟢 7 pass · 🟡 12 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24331533277 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-browserify
loadNewAccount
🟡 load_new_account
[Show logs]
confirmTx🟡 [Show logs]
bridgeUserActions🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: +17%
  • loadNewAccount/total: +17%
  • bridgeUserActions/bridge_load_asset_picker: -37%
  • bridgeUserActions/bridge_search_token: -26%
  • bridgeUserActions/total: -19%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.5s
  • 🟡 confirmTx/FCP: p75 2.4s
  • 🟡 bridgeUserActions/FCP: p75 2.5s
Startup Benchmarks · Samples: 100
Benchmarkchrome-browserifychrome-webpackfirefox-browserifyfirefox-webpack
startupStandardHome🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]
startupPowerUserHome🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -19%
  • startupStandardHome/backgroundConnect: +22%
  • startupStandardHome/initialActions: -33%
  • startupStandardHome/loadScripts: -15%
  • startupStandardHome/numNetworkReqs: -11%
  • startupPowerUserHome/uiStartup: -29%
  • startupPowerUserHome/backgroundConnect: +41%
  • startupPowerUserHome/firstReactRender: -14%
  • startupPowerUserHome/numNetworkReqs: -48%
  • startupStandardHome/uiStartup: -18%
  • startupStandardHome/load: -13%
  • startupStandardHome/domContentLoaded: -13%
  • startupStandardHome/firstPaint: +17%
  • startupStandardHome/backgroundConnect: -39%
  • startupStandardHome/firstReactRender: -19%
  • startupStandardHome/loadScripts: -13%
  • startupStandardHome/numNetworkReqs: -29%
  • startupPowerUserHome/uiStartup: -25%
  • startupPowerUserHome/domInteractive: -16%
  • startupPowerUserHome/firstPaint: +13%
  • startupPowerUserHome/numNetworkReqs: -24%
  • startupStandardHome/uiStartup: -13%
  • startupStandardHome/domInteractive: -47%
  • startupStandardHome/initialActions: +33%
  • startupStandardHome/numNetworkReqs: -18%
  • startupPowerUserHome/uiStartup: -35%
  • startupPowerUserHome/backgroundConnect: -26%
  • startupPowerUserHome/setupStore: -34%
  • startupStandardHome/uiStartup: -14%
  • startupStandardHome/domInteractive: -28%
  • startupStandardHome/backgroundConnect: -17%
  • startupStandardHome/initialActions: +14%
  • startupStandardHome/setupStore: -57%
  • startupPowerUserHome/uiStartup: -31%
  • startupPowerUserHome/load: -11%
  • startupPowerUserHome/domContentLoaded: -11%
  • startupPowerUserHome/domInteractive: -13%
  • startupPowerUserHome/backgroundConnect: -28%
  • startupPowerUserHome/loadScripts: -10%
  • startupPowerUserHome/setupStore: +12%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 728ms
  • 🔴 startupPowerUserHome/INP: p75 696ms
  • 🟡 startupPowerUserHome/LCP: p75 3.5s
  • 🟡 startupPowerUserHome/LCP: p75 3.5s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]
sendTransactions🟡 [Show logs]
swap🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -85%
  • onboardingImportWallet/metricsToWalletReadyScreen: -38%
  • onboardingImportWallet/doneButtonToHomeScreen: -75%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +18%
  • onboardingImportWallet/total: -44%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/skipBackupToMetricsScreen: -68%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -24%
  • onboardingNewWallet/doneButtonToAssetList: -26%
  • onboardingNewWallet/total: -27%
  • assetDetails/assetClickToPriceChart: -31%
  • assetDetails/total: -31%
  • solanaAssetDetails/assetClickToPriceChart: -68%
  • solanaAssetDetails/total: -68%
  • importSrpHome/openAccountMenuAfterLogin: -76%
  • importSrpHome/homeAfterImportWithNewWallet: -70%
  • importSrpHome/total: -61%
  • sendTransactions/openSendPageFromHome: -24%
  • sendTransactions/selectTokenToSendFormLoaded: -29%
  • sendTransactions/reviewTransactionToConfirmationPage: +35%
  • sendTransactions/total: +32%
  • swap/openSwapPageFromHome: -97%
  • swap/fetchAndDisplaySwapQuotes: +31%
  • swap/total: +11%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/INP: p75 224ms
  • 🟡 assetDetails/FCP: p75 2.6s
  • 🟡 solanaAssetDetails/FCP: p75 2.6s
  • 🟡 solanaAssetDetails/LCP: p75 2.6s
  • 🟡 importSrpHome/INP: p75 216ms
  • 🟡 importSrpHome/FCP: p75 2.6s
  • 🟡 sendTransactions/INP: p75 208ms
  • 🟡 sendTransactions/FCP: p75 2.5s
  • 🟡 swap/FCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: -64 Bytes (0%)
  • ui: 1.14 KiB (0.01%)
  • common: 560 Bytes (0%)

@matthewwalsh0 matthewwalsh0 marked this pull request as ready for review April 13, 2026 09:07
@matthewwalsh0 matthewwalsh0 requested a review from a team as a code owner April 13, 2026 09:07
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.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit b2a26e8. Configure here.

Comment thread ui/pages/confirmations/hooks/useIsEnforcedSimulationsEligible.ts
@sonarqubecloud
Copy link
Copy Markdown

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 Bot commented Apr 13, 2026

Builds ready [70f3d05]
⚡ Performance Benchmarks (Total: 🟢 7 pass · 🟡 12 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24337022464 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-browserify
loadNewAccount🟡 [Show logs]
confirmTx🟡 [Show logs]
bridgeUserActions🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • bridgeUserActions/bridge_load_asset_picker: -33%
  • bridgeUserActions/total: -15%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.5s
  • 🟡 confirmTx/FCP: p75 2.6s
  • 🟡 bridgeUserActions/FCP: p75 2.6s
Startup Benchmarks · Samples: 100
Benchmarkchrome-browserifychrome-webpackfirefox-browserifyfirefox-webpack
startupStandardHome🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]
startupPowerUserHome🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -22%
  • startupStandardHome/load: -10%
  • startupStandardHome/domContentLoaded: -12%
  • startupStandardHome/domInteractive: +14%
  • startupStandardHome/backgroundConnect: +13%
  • startupStandardHome/initialActions: -33%
  • startupStandardHome/loadScripts: -16%
  • startupStandardHome/numNetworkReqs: -21%
  • startupPowerUserHome/uiStartup: -29%
  • startupPowerUserHome/backgroundConnect: +71%
  • startupPowerUserHome/numNetworkReqs: -45%
  • startupStandardHome/uiStartup: -20%
  • startupStandardHome/load: -15%
  • startupStandardHome/domContentLoaded: -15%
  • startupStandardHome/backgroundConnect: -41%
  • startupStandardHome/firstReactRender: -19%
  • startupStandardHome/loadScripts: -15%
  • startupStandardHome/numNetworkReqs: -29%
  • startupPowerUserHome/uiStartup: -26%
  • startupPowerUserHome/domInteractive: -13%
  • startupPowerUserHome/firstPaint: -16%
  • startupPowerUserHome/numNetworkReqs: +61%
  • startupStandardHome/backgroundConnect: +11%
  • startupStandardHome/initialActions: +33%
  • startupStandardHome/numNetworkReqs: -16%
  • startupPowerUserHome/uiStartup: -33%
  • startupPowerUserHome/backgroundConnect: -39%
  • startupPowerUserHome/firstReactRender: -10%
  • startupPowerUserHome/setupStore: +60%
  • startupStandardHome/uiStartup: -12%
  • startupStandardHome/domInteractive: -39%
  • startupStandardHome/initialActions: +14%
  • startupStandardHome/setupStore: -47%
  • startupStandardHome/numNetworkReqs: -18%
  • startupPowerUserHome/uiStartup: -27%
  • startupPowerUserHome/backgroundConnect: -18%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 752ms
  • 🔴 startupPowerUserHome/INP: p75 760ms
  • 🟡 startupPowerUserHome/LCP: p75 3.5s
  • 🟡 startupPowerUserHome/LCP: p75 3.7s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]
sendTransactions🟡 [Show logs]
swap🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -84%
  • onboardingImportWallet/metricsToWalletReadyScreen: -26%
  • onboardingImportWallet/doneButtonToHomeScreen: -77%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +36%
  • onboardingImportWallet/total: -40%
  • onboardingNewWallet/srpButtonToPwForm: -80%
  • onboardingNewWallet/skipBackupToMetricsScreen: -66%
  • onboardingNewWallet/doneButtonToAssetList: -35%
  • onboardingNewWallet/total: -34%
  • assetDetails/assetClickToPriceChart: -60%
  • assetDetails/total: -60%
  • solanaAssetDetails/assetClickToPriceChart: -60%
  • solanaAssetDetails/total: -60%
  • importSrpHome/openAccountMenuAfterLogin: -79%
  • importSrpHome/homeAfterImportWithNewWallet: -70%
  • importSrpHome/total: -61%
  • sendTransactions/openSendPageFromHome: -18%
  • sendTransactions/selectTokenToSendFormLoaded: -14%
  • sendTransactions/reviewTransactionToConfirmationPage: +37%
  • sendTransactions/total: +34%
  • swap/openSwapPageFromHome: -97%
  • swap/fetchAndDisplaySwapQuotes: +31%
  • swap/total: +11%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/INP: p75 216ms
  • 🟡 assetDetails/FCP: p75 2.7s
  • 🟡 solanaAssetDetails/FCP: p75 2.7s
  • 🟡 importSrpHome/INP: p75 224ms
  • 🟡 importSrpHome/FCP: p75 2.6s
  • 🟡 sendTransactions/INP: p75 216ms
  • 🟡 sendTransactions/FCP: p75 2.5s
  • 🟡 swap/FCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: -168 Bytes (0%)
  • ui: 1.17 KiB (0.01%)
  • common: 560 Bytes (0%)

@pedronfigueiredo pedronfigueiredo self-requested a review April 13, 2026 14:22
@matthewwalsh0 matthewwalsh0 enabled auto-merge April 14, 2026 08:37
@matthewwalsh0 matthewwalsh0 added this pull request to the merge queue Apr 14, 2026
Merged via the queue into main with commit c161dd3 Apr 14, 2026
396 of 398 checks passed
@matthewwalsh0 matthewwalsh0 deleted the feat/enforced-simulations-trust-signals branch April 14, 2026 12:45
@github-actions github-actions Bot locked and limited conversation to collaborators Apr 14, 2026
@metamaskbot metamaskbot added the release-13.28.0 Issue or pull request that will be included in release 13.28.0 label Apr 14, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.28.0 Issue or pull request that will be included in release 13.28.0 size-L team-confirmations Push issues to confirmations team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants