Skip to content

Conversation

@matthewwalsh0
Copy link
Member

@matthewwalsh0 matthewwalsh0 commented Nov 12, 2025

Explanation

Support providing gasFeeToken when adding a transaction or transaction batch.

References

Related to #6173

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, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

Note

Adds optional gas fee token to single/batch transactions, pre-publish validation that auto-toggles token use based on native balance, and supporting balance utilities.

  • Transaction gas-fee token support
    • addTransaction/addTransactionBatch: accept optional gasFeeToken.
    • TransactionMeta: add selectedGasFeeToken and isGasFeeTokenIgnoredIfBalance; initialised from options.
    • Batch flow (utils/batch.ts): plumbs gasFeeToken through to addTransaction.
  • Pre-publish validation and behavior
    • New checkGasFeeTokenBeforePublish in utils/gas-fee-tokens.ts:
      • If native balance is sufficient, unsets selectedGasFeeToken and disables isExternalSign.
      • If insufficient, enforces token presence (fetches if needed) or throws.
    • Invoked during approval in TransactionController#approveTransaction.
  • Gas fee token retrieval refactor
    • Extracted #getGasFeeTokens helper in TransactionController and reused in simulation updates.
  • Balance utilities
    • New utils/balance.ts: getNativeBalance, isNativeBalanceSufficientForGas (uses bignumber.js).
    • utils/balance-changes.ts: now uses getNativeBalance instead of raw eth_getBalance.
  • Tests
    • Added tests for balance utils and gas fee token pre-publish logic; updated existing tests for new meta fields.
  • Misc
    • Dependency: add bignumber.js.
    • Minor Jest coverage threshold tweak.
    • Changelog updated with new options and fields.

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

@matthewwalsh0
Copy link
Member Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "3.0.0-preview-02caee59",
  "@metamask-previews/accounts-controller": "34.0.0-preview-02caee59",
  "@metamask-previews/address-book-controller": "7.0.0-preview-02caee59",
  "@metamask-previews/analytics-controller": "0.0.0-preview-02caee59",
  "@metamask-previews/announcement-controller": "8.0.0-preview-02caee59",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-02caee59",
  "@metamask-previews/approval-controller": "8.0.0-preview-02caee59",
  "@metamask-previews/assets-controllers": "88.0.0-preview-02caee59",
  "@metamask-previews/base-controller": "9.0.0-preview-02caee59",
  "@metamask-previews/bridge-controller": "60.0.0-preview-02caee59",
  "@metamask-previews/bridge-status-controller": "60.0.0-preview-02caee59",
  "@metamask-previews/build-utils": "3.0.4-preview-02caee59",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-02caee59",
  "@metamask-previews/claims-controller": "0.2.0-preview-02caee59",
  "@metamask-previews/composable-controller": "12.0.0-preview-02caee59",
  "@metamask-previews/controller-utils": "11.15.0-preview-02caee59",
  "@metamask-previews/core-backend": "4.0.0-preview-02caee59",
  "@metamask-previews/delegation-controller": "1.0.0-preview-02caee59",
  "@metamask-previews/earn-controller": "10.0.0-preview-02caee59",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-02caee59",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-02caee59",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-02caee59",
  "@metamask-previews/ens-controller": "18.0.0-preview-02caee59",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-02caee59",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-02caee59",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-02caee59",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-02caee59",
  "@metamask-previews/foundryup": "1.0.1-preview-02caee59",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-02caee59",
  "@metamask-previews/gator-permissions-controller": "0.4.0-preview-02caee59",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-02caee59",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-02caee59",
  "@metamask-previews/keyring-controller": "24.0.0-preview-02caee59",
  "@metamask-previews/logging-controller": "7.0.0-preview-02caee59",
  "@metamask-previews/message-manager": "14.0.0-preview-02caee59",
  "@metamask-previews/messenger": "0.3.0-preview-02caee59",
  "@metamask-previews/multichain-account-service": "3.0.0-preview-02caee59",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-02caee59",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-02caee59",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-02caee59",
  "@metamask-previews/name-controller": "9.0.0-preview-02caee59",
  "@metamask-previews/network-controller": "25.0.0-preview-02caee59",
  "@metamask-previews/network-enablement-controller": "3.1.0-preview-02caee59",
  "@metamask-previews/notification-services-controller": "19.0.0-preview-02caee59",
  "@metamask-previews/permission-controller": "12.1.0-preview-02caee59",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-02caee59",
  "@metamask-previews/phishing-controller": "15.0.0-preview-02caee59",
  "@metamask-previews/polling-controller": "15.0.0-preview-02caee59",
  "@metamask-previews/preferences-controller": "21.0.0-preview-02caee59",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-02caee59",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-02caee59",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-02caee59",
  "@metamask-previews/sample-controllers": "3.0.0-preview-02caee59",
  "@metamask-previews/seedless-onboarding-controller": "6.1.0-preview-02caee59",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-02caee59",
  "@metamask-previews/shield-controller": "2.0.0-preview-02caee59",
  "@metamask-previews/signature-controller": "36.0.0-preview-02caee59",
  "@metamask-previews/subscription-controller": "3.3.0-preview-02caee59",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-02caee59",
  "@metamask-previews/transaction-controller": "61.1.0-preview-02caee59",
  "@metamask-previews/transaction-pay-controller": "4.0.0-preview-02caee59",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-02caee59"
}

@matthewwalsh0 matthewwalsh0 force-pushed the feat/relay-transactions branch 2 times, most recently from 1d4c565 to bba0dee Compare November 12, 2025 12:32
Base automatically changed from feat/relay-transactions to main November 12, 2025 12:36
@matthewwalsh0 matthewwalsh0 force-pushed the feat/gas-fee-token-option branch from 9733480 to b7df144 Compare November 12, 2025 14:48
@matthewwalsh0 matthewwalsh0 marked this pull request as ready for review November 12, 2025 16:38
@matthewwalsh0 matthewwalsh0 requested review from a team as code owners November 12, 2025 16:38
@matthewwalsh0 matthewwalsh0 enabled auto-merge (squash) November 12, 2025 16:49
@matthewwalsh0 matthewwalsh0 force-pushed the feat/gas-fee-token-option branch from 2ffc7e8 to 27af205 Compare November 12, 2025 16:49
@matthewwalsh0 matthewwalsh0 force-pushed the feat/gas-fee-token-option branch from 27af205 to f44e910 Compare November 13, 2025 09:14
@matthewwalsh0 matthewwalsh0 merged commit 01702fe into main Nov 13, 2025
271 checks passed
@matthewwalsh0 matthewwalsh0 deleted the feat/gas-fee-token-option branch November 13, 2025 09:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants