Skip to content

refactor(confirmations): migrate gas timing estimate fetch to TanStack Query - #45590

Draft
n3ps wants to merge 1 commit into
mainfrom
n3ps/gas-timing-tanstack-query-5147
Draft

refactor(confirmations): migrate gas timing estimate fetch to TanStack Query#45590
n3ps wants to merge 1 commit into
mainfrom
n3ps/gas-timing-tanstack-query-5147

Conversation

@n3ps

@n3ps n3ps commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Description

GasTiming was fetching custom fee-market wait times with a hand-rolled useEffect + useState + usePrevious race guard around getGasFeeTimeEstimate.

This replaces that with a small useGasFeeTimeEstimate hook backed by TanStack useQuery, and converts the component to TypeScript. GasFeeController / background RPC / Redux gas selectors are unchanged — only the UI fetch lifecycle moves.

Changelog

CHANGELOG entry: null

Related issues

Fixes:

Manual testing steps

  1. Run the extension and open a confirmation on a fee-market (EIP-1559) network.
  2. Confirm medium/high gas options still show timing text as before.
  3. Open advanced gas edit and set a priority fee below the network “low” estimate.
  4. Verify a custom wait-time (or too-low / unknown) message still appears.
  5. Confirm too-low form warnings and loading / non-fee-market screens still hide timing as before.

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.

Made with Cursor

…k Query

Replace manual useEffect/useState/usePrevious race handling in GasTiming
with a useGasFeeTimeEstimate hook that uses useQuery, and convert the
component to TypeScript.

Co-authored-by: Francis Nepomuceno <n3ps@users.noreply.github.com>
@n3ps
n3ps deployed to pr-comment August 18, 2026 03:26 — with GitHub Actions Active
@metamask-ci metamask-ci Bot added the team-core-extension-ux Core Extension UX team label Aug 18, 2026
@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

✨ Files requiring CODEOWNER review ✨

@MetaMask/confirmations (3 files, +158 -82)
  • 📁 ui/
    • 📁 pages/
      • 📁 confirmations/
        • 📁 components/
          • 📁 gas-timing/
            • 📄 gas-timing.component.tsx +57 -82
        • 📁 hooks/
          • 📁 gas/
            • 📄 useGasFeeTimeEstimate.test.ts +75 -0
            • 📄 useGasFeeTimeEstimate.ts +26 -0

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
70.9% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@n3ps
n3ps deployed to pr-comment August 18, 2026 03:48 — with GitHub Actions Active
@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor
Builds ready [85b2941]
⚡ Performance Benchmarks (Total: 🟢 14 pass · 🟡 7 warn · 🔴 3 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 32095493732 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]

Regressions (🔴 3 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: +190%
  • loadNewAccount/total: +190%
  • loadNewAccount/inp: +29%
  • loadNewAccount/cls: -100%
  • confirmTx/longTaskMaxDuration: +46%
  • confirmTx/tbt: -15%
  • bridgeUserActions/bridge_load_page: +16%
  • bridgeUserActions/bridge_load_asset_picker: +73%
  • bridgeUserActions/longTaskCount: +11%
  • bridgeUserActions/longTaskTotalDuration: -13%
  • bridgeUserActions/longTaskMaxDuration: -26%
  • bridgeUserActions/tbt: -61%
  • bridgeUserActions/inp: +15%
  • loadNewAccount/load_new_account: +190%
  • loadNewAccount/total: +190%
  • loadNewAccount/inp: -24%
  • loadNewAccount/fcp: -64%
  • loadNewAccount/lcp: +1196%
  • confirmTx/longTaskCount: -100%
  • confirmTx/longTaskTotalDuration: -100%
  • confirmTx/longTaskMaxDuration: -100%
  • confirmTx/tbt: -100%
  • confirmTx/inp: -24%
  • confirmTx/fcp: -57%
  • confirmTx/lcp: +1022%
  • bridgeUserActions/bridge_load_page: +161%
  • bridgeUserActions/bridge_load_asset_picker: +87%
  • bridgeUserActions/bridge_search_token: -12%
  • bridgeUserActions/longTaskCount: -100%
  • bridgeUserActions/longTaskTotalDuration: -100%
  • bridgeUserActions/longTaskMaxDuration: -100%
  • bridgeUserActions/tbt: -100%
  • bridgeUserActions/inp: -31%
  • bridgeUserActions/fcp: -54%
  • bridgeUserActions/lcp: +951%

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

  • 🟡 loadNewAccount/FCP: p75 1.8s
  • 🟡 confirmTx/FCP: p75 1.8s
  • 🟡 bridgeUserActions/FCP: p75 1.8s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/backgroundConnect: +12%
  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/numNetworkReqs: -14%
  • startupStandardHome/domInteractive: -29%
  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/numNetworkReqs: -20%
  • startupStandardHome/fcp: -26%
  • startupPowerUserHome/uiStartup: -24%
  • startupPowerUserHome/load: -11%
  • startupPowerUserHome/domContentLoaded: -11%
  • startupPowerUserHome/domInteractive: -54%
  • startupPowerUserHome/backgroundConnect: -30%
  • startupPowerUserHome/firstReactRender: -99%
  • startupPowerUserHome/initialActions: +11%
  • startupPowerUserHome/loadScripts: -10%
  • startupPowerUserHome/setupStore: -76%
  • startupPowerUserHome/numNetworkReqs: -38%
  • startupPowerUserHome/inp: -15%
  • startupPowerUserHome/fcp: -52%
  • startupPowerUserHome/lcp: -16%
User Journey Benchmarks · Samples: 5 · mock API 🔴 1
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟡 [CI log]
🟡 total
🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
sendTransactions
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -14%
  • onboardingImportWallet/confirmSrpToPwForm: -20%
  • onboardingImportWallet/pwFormToMetricsScreen: -19%
  • onboardingImportWallet/metricsToWalletReadyScreen: -42%
  • onboardingImportWallet/doneButtonToHomeScreen: -92%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -55%
  • onboardingImportWallet/longTaskCount: -100%
  • onboardingImportWallet/longTaskTotalDuration: -100%
  • onboardingImportWallet/longTaskMaxDuration: -100%
  • onboardingImportWallet/tbt: -100%
  • onboardingImportWallet/total: -83%
  • onboardingNewWallet/doneButtonToAssetList: -83%
  • onboardingNewWallet/longTaskCount: -69%
  • onboardingNewWallet/longTaskTotalDuration: -77%
  • onboardingNewWallet/longTaskMaxDuration: -47%
  • onboardingNewWallet/tbt: -94%
  • onboardingNewWallet/total: -79%
  • solanaAssetDetails/longTaskCount: -100%
  • solanaAssetDetails/longTaskTotalDuration: -100%
  • solanaAssetDetails/longTaskMaxDuration: -100%
  • solanaAssetDetails/tbt: -100%
  • solanaAssetDetails/inp: -13%
  • solanaAssetDetails/lcp: -12%
  • importSrpHome/loginToHomeScreen: -31%
  • importSrpHome/homeAfterImportWithNewWallet: -64%
  • importSrpHome/longTaskCount: -65%
  • importSrpHome/longTaskTotalDuration: -73%
  • importSrpHome/longTaskMaxDuration: -49%
  • importSrpHome/tbt: -76%
  • importSrpHome/total: -59%
  • importSrpHome/inp: -69%
  • importSrpHome/fcp: -26%
  • importSrpHome/lcp: -20%
  • importSrpHome/cls: +435%
  • sendTransactions/openSendPageFromHome: -28%
  • sendTransactions/selectTokenToSendFormLoaded: +56%
  • sendTransactions/reviewTransactionToConfirmationPage: -98%
  • sendTransactions/longTaskCount: -100%
  • sendTransactions/longTaskTotalDuration: -100%
  • sendTransactions/longTaskMaxDuration: -100%
  • sendTransactions/tbt: -100%
  • sendTransactions/total: -95%
  • sendTransactions/inp: -48%
  • sendTransactions/lcp: -61%
  • sendTransactions/cls: +171%
  • swap/openSwapPageFromHome: +829%
  • swap/fetchAndDisplaySwapQuotes: +87%
  • swap/longTaskCount: +33%
  • swap/longTaskTotalDuration: -11%
  • swap/tbt: -84%
  • swap/total: +101%
  • swap/lcp: -71%
  • swap/cls: -92%

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

  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 importSrpHome/FCP: p75 1.9s
  • 🔴 sendTransactions/INP: p75 560ms
  • 🔴 swap/INP: p75 560ms
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: -58%
  • dappPageLoad/firstPaint: -46%
  • dappPageLoad/firstContentfulPaint: -46%
Bundle size diffs
  • background: 111 Bytes (0%)
  • ui: 534 Bytes (0%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 12 Bytes (0%)
  • zip: 217 Bytes (0%)

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

Labels

size-M team-core-extension-ux Core Extension UX team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants