Skip to content

feat(transaction-controller): support saved gas fee levels#8993

Open
pedronfigueiredo wants to merge 1 commit into
mainfrom
pnf/save-custom-gas-settings
Open

feat(transaction-controller): support saved gas fee levels#8993
pedronfigueiredo wants to merge 1 commit into
mainfrom
pnf/save-custom-gas-settings

Conversation

@pedronfigueiredo

@pedronfigueiredo pedronfigueiredo commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Explanation

This expands transaction-controller saved gas fee handling so clients can resolve saved preferences with full transaction metadata instead of only a chain ID. That lets consumers key saved gas settings by both chain and account while keeping the controller API responsible for applying saved fees.

The saved gas payload now supports gas fee estimate levels (low, medium, high) and legacy custom gasPrice values in addition to EIP-1559 custom fee values. Saved estimate levels reuse the current gas fee flow estimate for the saved level; custom values override only the specific saved fields.

Transactions that already include gas fee params continue to use those initial params, so dapp-proposed fees keep precedence over saved preferences. Swap transaction types continue to skip saved gas fees.

References

Related PRs:

Checklist

  • I’ve updated the test suite for new or updated code as appropriate
  • I’ve updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I’ve communicated my changes to consumers by updating changelogs for packages I’ve changed
  • I’ve introduced breaking changes in this PR and have prepared client adoption work to resolve them

Note

Medium Risk
Breaking change to getSavedGasFees requires client updates; gas fee defaults affect every new send path but precedence rules limit impact when dapp or initial params are set.

Overview
BREAKING: getSavedGasFees now receives full TransactionMeta instead of chain ID, and SavedGasFees supports optional level (low/medium/high or custom), optional EIP-1559 fields, and legacy gasPrice.

Gas fee application in updateGasFees skips saved preferences when the tx already has gas params or is a swap; saved estimate levels pick the matching tier from the gas fee flow, while custom saved fields still override specific fee values. userFeeLevel follows savedGasFees.level when present.

The changelog also documents incoming-transaction backwards compatibility: ignored incomingTransactions constructor options and no-op startIncomingTransactionPolling / stopIncomingTransactionPolling, with tests added. TransactionController gains additional AllowedEvents types for account activity and WebSocket connection (imports only in this diff).

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

@pedronfigueiredo pedronfigueiredo force-pushed the pnf/save-custom-gas-settings branch 2 times, most recently from 83cc6ba to ba63c2b Compare June 3, 2026 16:45
@pedronfigueiredo pedronfigueiredo marked this pull request as ready for review June 8, 2026 13:23
@pedronfigueiredo pedronfigueiredo requested review from a team as code owners June 8, 2026 13:23
vinistevam
vinistevam previously approved these changes Jun 9, 2026
@pedronfigueiredo pedronfigueiredo added this pull request to the merge queue Jun 9, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jun 9, 2026
@pedronfigueiredo pedronfigueiredo added this pull request to the merge queue Jun 11, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jun 11, 2026
@pedronfigueiredo pedronfigueiredo added this pull request to the merge queue Jun 11, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jun 11, 2026
@pedronfigueiredo pedronfigueiredo force-pushed the pnf/save-custom-gas-settings branch from ba63c2b to b620f8f Compare June 11, 2026 09:11
@pedronfigueiredo

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.2-preview-b620f8fc6
@metamask-previews/accounts-controller@39.0.1-preview-b620f8fc6
@metamask-previews/address-book-controller@7.1.2-preview-b620f8fc6
@metamask-previews/ai-controllers@0.7.0-preview-b620f8fc6
@metamask-previews/analytics-controller@1.1.1-preview-b620f8fc6
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-b620f8fc6
@metamask-previews/announcement-controller@8.1.0-preview-b620f8fc6
@metamask-previews/app-metadata-controller@2.0.1-preview-b620f8fc6
@metamask-previews/approval-controller@9.0.2-preview-b620f8fc6
@metamask-previews/assets-controller@9.0.1-preview-b620f8fc6
@metamask-previews/assets-controllers@109.0.0-preview-b620f8fc6
@metamask-previews/authenticated-user-storage@2.0.0-preview-b620f8fc6
@metamask-previews/base-controller@9.1.0-preview-b620f8fc6
@metamask-previews/base-data-service@0.1.3-preview-b620f8fc6
@metamask-previews/bridge-controller@75.1.1-preview-b620f8fc6
@metamask-previews/bridge-status-controller@72.1.0-preview-b620f8fc6
@metamask-previews/build-utils@3.0.4-preview-b620f8fc6
@metamask-previews/chain-agnostic-permission@1.6.1-preview-b620f8fc6
@metamask-previews/chomp-api-service@3.1.0-preview-b620f8fc6
@metamask-previews/claims-controller@0.5.3-preview-b620f8fc6
@metamask-previews/client-controller@1.0.1-preview-b620f8fc6
@metamask-previews/compliance-controller@2.1.0-preview-b620f8fc6
@metamask-previews/composable-controller@12.0.1-preview-b620f8fc6
@metamask-previews/config-registry-controller@0.4.1-preview-b620f8fc6
@metamask-previews/connectivity-controller@0.2.0-preview-b620f8fc6
@metamask-previews/controller-utils@12.2.0-preview-b620f8fc6
@metamask-previews/core-backend@6.3.3-preview-b620f8fc6
@metamask-previews/delegation-controller@3.0.2-preview-b620f8fc6
@metamask-previews/earn-controller@12.2.0-preview-b620f8fc6
@metamask-previews/eip-5792-middleware@3.0.4-preview-b620f8fc6
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-b620f8fc6
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-b620f8fc6
@metamask-previews/ens-controller@19.1.3-preview-b620f8fc6
@metamask-previews/eth-block-tracker@15.0.1-preview-b620f8fc6
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-b620f8fc6
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-b620f8fc6
@metamask-previews/foundryup@1.0.1-preview-b620f8fc6
@metamask-previews/gas-fee-controller@26.2.2-preview-b620f8fc6
@metamask-previews/gator-permissions-controller@4.2.0-preview-b620f8fc6
@metamask-previews/geolocation-controller@0.1.3-preview-b620f8fc6
@metamask-previews/json-rpc-engine@10.5.0-preview-b620f8fc6
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-b620f8fc6
@metamask-previews/keyring-controller@27.0.0-preview-b620f8fc6
@metamask-previews/logging-controller@8.0.2-preview-b620f8fc6
@metamask-previews/message-manager@14.1.2-preview-b620f8fc6
@metamask-previews/messenger@1.2.0-preview-b620f8fc6
@metamask-previews/messenger-cli@0.2.0-preview-b620f8fc6
@metamask-previews/money-account-balance-service@1.0.2-preview-b620f8fc6
@metamask-previews/money-account-controller@0.3.3-preview-b620f8fc6
@metamask-previews/money-account-upgrade-controller@2.0.4-preview-b620f8fc6
@metamask-previews/multichain-account-service@10.0.3-preview-b620f8fc6
@metamask-previews/multichain-api-middleware@3.1.3-preview-b620f8fc6
@metamask-previews/multichain-network-controller@3.1.3-preview-b620f8fc6
@metamask-previews/multichain-transactions-controller@7.1.1-preview-b620f8fc6
@metamask-previews/name-controller@9.1.2-preview-b620f8fc6
@metamask-previews/network-controller@32.0.0-preview-b620f8fc6
@metamask-previews/network-enablement-controller@5.3.0-preview-b620f8fc6
@metamask-previews/notification-services-controller@24.1.3-preview-b620f8fc6
@metamask-previews/passkey-controller@2.0.1-preview-b620f8fc6
@metamask-previews/permission-controller@13.1.1-preview-b620f8fc6
@metamask-previews/permission-log-controller@5.1.0-preview-b620f8fc6
@metamask-previews/perps-controller@8.1.0-preview-b620f8fc6
@metamask-previews/phishing-controller@17.2.0-preview-b620f8fc6
@metamask-previews/polling-controller@16.0.6-preview-b620f8fc6
@metamask-previews/preferences-controller@23.1.0-preview-b620f8fc6
@metamask-previews/profile-metrics-controller@3.2.0-preview-b620f8fc6
@metamask-previews/profile-sync-controller@28.1.1-preview-b620f8fc6
@metamask-previews/ramps-controller@14.1.1-preview-b620f8fc6
@metamask-previews/rate-limit-controller@7.0.1-preview-b620f8fc6
@metamask-previews/react-data-query@0.2.1-preview-b620f8fc6
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-b620f8fc6
@metamask-previews/sample-controllers@5.0.1-preview-b620f8fc6
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-b620f8fc6
@metamask-previews/selected-network-controller@26.1.3-preview-b620f8fc6
@metamask-previews/shield-controller@5.1.2-preview-b620f8fc6
@metamask-previews/signature-controller@39.2.5-preview-b620f8fc6
@metamask-previews/snap-account-service@0.3.1-preview-b620f8fc6
@metamask-previews/social-controllers@2.2.1-preview-b620f8fc6
@metamask-previews/storage-service@1.0.2-preview-b620f8fc6
@metamask-previews/subscription-controller@6.1.3-preview-b620f8fc6
@metamask-previews/transaction-controller@67.1.0-preview-b620f8fc6
@metamask-previews/transaction-pay-controller@23.5.1-preview-b620f8fc6
@metamask-previews/user-operation-controller@41.2.4-preview-b620f8fc6
@metamask-previews/wallet@3.0.0-preview-b620f8fc6

@pedronfigueiredo pedronfigueiredo force-pushed the pnf/save-custom-gas-settings branch from b620f8f to a8ca11c Compare June 11, 2026 11:50
@pedronfigueiredo

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.2-preview-a8ca11c
@metamask-previews/accounts-controller@39.0.1-preview-a8ca11c
@metamask-previews/address-book-controller@7.1.2-preview-a8ca11c
@metamask-previews/ai-controllers@0.7.0-preview-a8ca11c
@metamask-previews/analytics-controller@1.1.1-preview-a8ca11c
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-a8ca11c
@metamask-previews/announcement-controller@8.1.0-preview-a8ca11c
@metamask-previews/app-metadata-controller@2.0.1-preview-a8ca11c
@metamask-previews/approval-controller@9.0.2-preview-a8ca11c
@metamask-previews/assets-controller@9.0.1-preview-a8ca11c
@metamask-previews/assets-controllers@109.0.0-preview-a8ca11c
@metamask-previews/authenticated-user-storage@2.0.0-preview-a8ca11c
@metamask-previews/base-controller@9.1.0-preview-a8ca11c
@metamask-previews/base-data-service@0.1.3-preview-a8ca11c
@metamask-previews/bridge-controller@75.1.1-preview-a8ca11c
@metamask-previews/bridge-status-controller@72.1.0-preview-a8ca11c
@metamask-previews/build-utils@3.0.4-preview-a8ca11c
@metamask-previews/chain-agnostic-permission@1.6.1-preview-a8ca11c
@metamask-previews/chomp-api-service@3.1.0-preview-a8ca11c
@metamask-previews/claims-controller@0.5.3-preview-a8ca11c
@metamask-previews/client-controller@1.0.1-preview-a8ca11c
@metamask-previews/compliance-controller@2.1.0-preview-a8ca11c
@metamask-previews/composable-controller@12.0.1-preview-a8ca11c
@metamask-previews/config-registry-controller@0.4.1-preview-a8ca11c
@metamask-previews/connectivity-controller@0.2.0-preview-a8ca11c
@metamask-previews/controller-utils@12.2.0-preview-a8ca11c
@metamask-previews/core-backend@6.3.3-preview-a8ca11c
@metamask-previews/delegation-controller@3.0.2-preview-a8ca11c
@metamask-previews/earn-controller@12.2.0-preview-a8ca11c
@metamask-previews/eip-5792-middleware@3.0.4-preview-a8ca11c
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-a8ca11c
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-a8ca11c
@metamask-previews/ens-controller@19.1.3-preview-a8ca11c
@metamask-previews/eth-block-tracker@15.0.1-preview-a8ca11c
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-a8ca11c
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-a8ca11c
@metamask-previews/foundryup@1.0.1-preview-a8ca11c
@metamask-previews/gas-fee-controller@26.2.2-preview-a8ca11c
@metamask-previews/gator-permissions-controller@4.2.0-preview-a8ca11c
@metamask-previews/geolocation-controller@0.1.3-preview-a8ca11c
@metamask-previews/json-rpc-engine@10.5.0-preview-a8ca11c
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-a8ca11c
@metamask-previews/keyring-controller@27.0.0-preview-a8ca11c
@metamask-previews/logging-controller@8.0.2-preview-a8ca11c
@metamask-previews/message-manager@14.1.2-preview-a8ca11c
@metamask-previews/messenger@1.2.0-preview-a8ca11c
@metamask-previews/messenger-cli@0.2.0-preview-a8ca11c
@metamask-previews/money-account-balance-service@1.0.2-preview-a8ca11c
@metamask-previews/money-account-controller@0.3.3-preview-a8ca11c
@metamask-previews/money-account-upgrade-controller@2.0.5-preview-a8ca11c
@metamask-previews/multichain-account-service@10.0.3-preview-a8ca11c
@metamask-previews/multichain-api-middleware@3.1.3-preview-a8ca11c
@metamask-previews/multichain-network-controller@3.1.3-preview-a8ca11c
@metamask-previews/multichain-transactions-controller@7.1.1-preview-a8ca11c
@metamask-previews/name-controller@9.1.2-preview-a8ca11c
@metamask-previews/network-controller@32.0.0-preview-a8ca11c
@metamask-previews/network-enablement-controller@5.3.0-preview-a8ca11c
@metamask-previews/notification-services-controller@24.1.3-preview-a8ca11c
@metamask-previews/passkey-controller@2.0.1-preview-a8ca11c
@metamask-previews/permission-controller@13.1.1-preview-a8ca11c
@metamask-previews/permission-log-controller@5.1.0-preview-a8ca11c
@metamask-previews/perps-controller@8.1.0-preview-a8ca11c
@metamask-previews/phishing-controller@17.2.0-preview-a8ca11c
@metamask-previews/polling-controller@16.0.6-preview-a8ca11c
@metamask-previews/preferences-controller@23.1.0-preview-a8ca11c
@metamask-previews/profile-metrics-controller@3.2.0-preview-a8ca11c
@metamask-previews/profile-sync-controller@28.1.1-preview-a8ca11c
@metamask-previews/ramps-controller@14.1.1-preview-a8ca11c
@metamask-previews/rate-limit-controller@7.0.1-preview-a8ca11c
@metamask-previews/react-data-query@0.2.1-preview-a8ca11c
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-a8ca11c
@metamask-previews/sample-controllers@5.0.1-preview-a8ca11c
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-a8ca11c
@metamask-previews/selected-network-controller@26.1.3-preview-a8ca11c
@metamask-previews/shield-controller@5.1.2-preview-a8ca11c
@metamask-previews/signature-controller@39.2.5-preview-a8ca11c
@metamask-previews/snap-account-service@0.3.1-preview-a8ca11c
@metamask-previews/social-controllers@2.2.1-preview-a8ca11c
@metamask-previews/storage-service@1.0.2-preview-a8ca11c
@metamask-previews/subscription-controller@6.2.0-preview-a8ca11c
@metamask-previews/transaction-controller@68.0.0-preview-a8ca11c
@metamask-previews/transaction-pay-controller@23.5.1-preview-a8ca11c
@metamask-previews/user-operation-controller@41.2.4-preview-a8ca11c
@metamask-previews/wallet@3.0.0-preview-a8ca11c

@pedronfigueiredo pedronfigueiredo force-pushed the pnf/save-custom-gas-settings branch from a8ca11c to 1a8241c Compare June 11, 2026 12:12
@pedronfigueiredo

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.2-preview-1a8241c
@metamask-previews/accounts-controller@39.0.1-preview-1a8241c
@metamask-previews/address-book-controller@7.1.2-preview-1a8241c
@metamask-previews/ai-controllers@0.7.0-preview-1a8241c
@metamask-previews/analytics-controller@1.1.1-preview-1a8241c
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-1a8241c
@metamask-previews/announcement-controller@8.1.0-preview-1a8241c
@metamask-previews/app-metadata-controller@2.0.1-preview-1a8241c
@metamask-previews/approval-controller@9.0.2-preview-1a8241c
@metamask-previews/assets-controller@9.0.1-preview-1a8241c
@metamask-previews/assets-controllers@109.0.0-preview-1a8241c
@metamask-previews/authenticated-user-storage@2.0.0-preview-1a8241c
@metamask-previews/base-controller@9.1.0-preview-1a8241c
@metamask-previews/base-data-service@0.1.3-preview-1a8241c
@metamask-previews/bridge-controller@75.1.1-preview-1a8241c
@metamask-previews/bridge-status-controller@72.1.0-preview-1a8241c
@metamask-previews/build-utils@3.0.4-preview-1a8241c
@metamask-previews/chain-agnostic-permission@1.6.1-preview-1a8241c
@metamask-previews/chomp-api-service@3.1.0-preview-1a8241c
@metamask-previews/claims-controller@0.5.3-preview-1a8241c
@metamask-previews/client-controller@1.0.1-preview-1a8241c
@metamask-previews/compliance-controller@2.1.0-preview-1a8241c
@metamask-previews/composable-controller@12.0.1-preview-1a8241c
@metamask-previews/config-registry-controller@0.4.1-preview-1a8241c
@metamask-previews/connectivity-controller@0.2.0-preview-1a8241c
@metamask-previews/controller-utils@12.2.0-preview-1a8241c
@metamask-previews/core-backend@6.3.3-preview-1a8241c
@metamask-previews/delegation-controller@3.0.2-preview-1a8241c
@metamask-previews/earn-controller@12.2.0-preview-1a8241c
@metamask-previews/eip-5792-middleware@3.0.4-preview-1a8241c
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-1a8241c
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-1a8241c
@metamask-previews/ens-controller@19.1.3-preview-1a8241c
@metamask-previews/eth-block-tracker@15.0.1-preview-1a8241c
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-1a8241c
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-1a8241c
@metamask-previews/foundryup@1.0.1-preview-1a8241c
@metamask-previews/gas-fee-controller@26.2.2-preview-1a8241c
@metamask-previews/gator-permissions-controller@4.2.0-preview-1a8241c
@metamask-previews/geolocation-controller@0.1.3-preview-1a8241c
@metamask-previews/json-rpc-engine@10.5.0-preview-1a8241c
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-1a8241c
@metamask-previews/keyring-controller@27.0.0-preview-1a8241c
@metamask-previews/logging-controller@8.0.2-preview-1a8241c
@metamask-previews/message-manager@14.1.2-preview-1a8241c
@metamask-previews/messenger@1.2.0-preview-1a8241c
@metamask-previews/messenger-cli@0.2.0-preview-1a8241c
@metamask-previews/money-account-balance-service@1.0.2-preview-1a8241c
@metamask-previews/money-account-controller@0.3.3-preview-1a8241c
@metamask-previews/money-account-upgrade-controller@2.0.5-preview-1a8241c
@metamask-previews/multichain-account-service@10.0.3-preview-1a8241c
@metamask-previews/multichain-api-middleware@3.1.3-preview-1a8241c
@metamask-previews/multichain-network-controller@3.1.3-preview-1a8241c
@metamask-previews/multichain-transactions-controller@7.1.1-preview-1a8241c
@metamask-previews/name-controller@9.1.2-preview-1a8241c
@metamask-previews/network-controller@32.0.0-preview-1a8241c
@metamask-previews/network-enablement-controller@5.3.0-preview-1a8241c
@metamask-previews/notification-services-controller@24.1.3-preview-1a8241c
@metamask-previews/passkey-controller@2.0.1-preview-1a8241c
@metamask-previews/permission-controller@13.1.1-preview-1a8241c
@metamask-previews/permission-log-controller@5.1.0-preview-1a8241c
@metamask-previews/perps-controller@8.1.0-preview-1a8241c
@metamask-previews/phishing-controller@17.2.0-preview-1a8241c
@metamask-previews/polling-controller@16.0.6-preview-1a8241c
@metamask-previews/preferences-controller@23.1.0-preview-1a8241c
@metamask-previews/profile-metrics-controller@3.2.0-preview-1a8241c
@metamask-previews/profile-sync-controller@28.1.1-preview-1a8241c
@metamask-previews/ramps-controller@14.1.1-preview-1a8241c
@metamask-previews/rate-limit-controller@7.0.1-preview-1a8241c
@metamask-previews/react-data-query@0.2.1-preview-1a8241c
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-1a8241c
@metamask-previews/sample-controllers@5.0.1-preview-1a8241c
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-1a8241c
@metamask-previews/selected-network-controller@26.1.3-preview-1a8241c
@metamask-previews/shield-controller@5.1.2-preview-1a8241c
@metamask-previews/signature-controller@39.2.5-preview-1a8241c
@metamask-previews/snap-account-service@0.3.1-preview-1a8241c
@metamask-previews/social-controllers@2.2.1-preview-1a8241c
@metamask-previews/storage-service@1.0.2-preview-1a8241c
@metamask-previews/subscription-controller@6.2.0-preview-1a8241c
@metamask-previews/transaction-controller@68.0.0-preview-1a8241c
@metamask-previews/transaction-pay-controller@23.5.1-preview-1a8241c
@metamask-previews/user-operation-controller@41.2.4-preview-1a8241c
@metamask-previews/wallet@3.0.0-preview-1a8241c

@pedronfigueiredo pedronfigueiredo force-pushed the pnf/save-custom-gas-settings branch from 1a8241c to 69d8cef Compare June 12, 2026 16:48
@pedronfigueiredo pedronfigueiredo added team-transactions Transactions team and removed team-transactions Transactions team labels Jun 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants