Skip to content

feat: inject new parameters in addTransaction for gas fee tokens (Tempo)#8052

Open
maxime-oe wants to merge 5 commits intomainfrom
feat/poc-tempo-transactions-7702
Open

feat: inject new parameters in addTransaction for gas fee tokens (Tempo)#8052
maxime-oe wants to merge 5 commits intomainfrom
feat/poc-tempo-transactions-7702

Conversation

@maxime-oe
Copy link
Copy Markdown
Contributor

@maxime-oe maxime-oe commented Feb 26, 2026

Explanation

(Context and Approach Motivation)

Context:

With upcoming phase 1 for Tempo support, the initial approach will leverage EIP-7702 mechanics and UX.

  1. One difference vs. other chains is that Tempo doesn't have a concept of native token.
    --> This means that some current logic when we "fall back" to the native token for gas fee when user has enough native balance won't work. excludeNativeTokenForFee is a new parameter for signaling that native token should not be an option when set to true and when gasFeeToken is provided.

  2. Since the client dApps will trigger a call addTransactionBatch for some Tempo transactions - was only called internally until now - we add the actionId so such transactions appear on the Activity tab (transaction history). Otherwise such transactions still made it to the state but those without actionId don't appear in the activity tab.

Untitled Diagram drawio (1) (1)

Approach Motivation

TransactionController - why a new excludeNativeTokenForFee argument:

This controller already supports a gasFeeToken argument that does almost exactly what we want (gasless flow behavior). However there was still behavior where:

  1. Native token would override the selected gasFeeToken in the TransactionController --> excludeNativeTokenForFee allows to say "we do NOT want this behavior".
  2. Native token would appear as selectable (or as unavailable but still appear) in the transaction-confirmation UI when trying to select a gas token, which doesn't make sense for chains like Tempo where there is no concept of native token at all --> Since excludeNativeTokenForFee is also included in transactionMeta, this allows UI to understand that the native token shouldn't be displayed on selected when this argument is present.
    Overall, this argument is:
  • Used as a generic way to say "there is no native token", in a way that could be reused for similar chains.
  • Always injected by clients - who are aware of per-chain logic - if no such argument is injected by the client, behavior remains the same as before this PR.

eip-5792-middleware - why a new getChainSpecificExtraParams hook ?

The above outlines the intent of having a client-controlled approach. However when using some dApps with Tempo some are calling wallet_sendCalls directly to send batch transactions (those are regular EVM batch transactions, not Tempo Transactions), triggering the eip-5792-middleware flow, which is not aware of gasFeeToken nor excludeNativeTokenForFee parameters. Instead of adding Tempo-related confirm in this eip-5792-middleware, the approach here is to have a generic getChainSpecificExtraParams that will be called back by the middleware so the client can control what is then passed to the Transactions controller. In this specific case, when it is a Tempo chain, the client will inject both gasFeeToken and excludeNativeTokenForFee as it does when calling the Transactions Controller directly. This approach is purely to respect the "client is in control" philosophy.

References

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 draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Changes transaction metadata/options and alters gas-fee-token selection behavior in addTransaction/batch 7702 flows, which can affect fee payment logic across supported networks. Risk is mitigated by being opt-in via a new optional flag and covered by added unit tests.

Overview
Adds optional excludeNativeTokenForFee plumbing across addTransaction/batch transaction request types and persists it on TransactionMeta when explicitly provided.

Updates TransactionController.addTransaction so isGasFeeTokenIgnoredIfBalance is no longer automatically true when gasFeeToken is set; it becomes false when excludeNativeTokenForFee is passed, ensuring the gas fee token is used regardless of native balance.

Extends the EIP-7702 batch path (utils/batch.ts) to forward excludeNativeTokenForFee into addTransaction, with new tests covering default omission and explicit inclusion, plus controller tests validating the new gas-fee-token behavior.

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

@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 1764dfd to 1b21bb7 Compare March 2, 2026 08:44
@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 1b21bb7 to c64b46d Compare March 4, 2026 09:56
@maxime-oe maxime-oe changed the title feat: tx-ctrl add forceGasFeeToken param feat: tx-ctrl add excludeNativeTokenForFee param Mar 5, 2026
@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch 3 times, most recently from 692c786 to 15dd7d6 Compare March 6, 2026 11:18
@maxime-oe maxime-oe marked this pull request as ready for review March 6, 2026 11:23
@maxime-oe maxime-oe requested review from a team as code owners March 6, 2026 11:23
@maxime-oe
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
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": "4.1.1-preview-15dd7d63f",
  "@metamask-previews/accounts-controller": "36.0.1-preview-15dd7d63f",
  "@metamask-previews/address-book-controller": "7.0.1-preview-15dd7d63f",
  "@metamask-previews/ai-controllers": "0.2.0-preview-15dd7d63f",
  "@metamask-previews/analytics-controller": "1.0.0-preview-15dd7d63f",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-15dd7d63f",
  "@metamask-previews/announcement-controller": "8.0.0-preview-15dd7d63f",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-15dd7d63f",
  "@metamask-previews/approval-controller": "8.0.0-preview-15dd7d63f",
  "@metamask-previews/assets-controller": "2.2.0-preview-15dd7d63f",
  "@metamask-previews/assets-controllers": "100.1.0-preview-15dd7d63f",
  "@metamask-previews/base-controller": "9.0.0-preview-15dd7d63f",
  "@metamask-previews/base-data-service": "0.0.0-preview-15dd7d63f",
  "@metamask-previews/bridge-controller": "68.0.0-preview-15dd7d63f",
  "@metamask-previews/bridge-status-controller": "68.0.0-preview-15dd7d63f",
  "@metamask-previews/build-utils": "3.0.4-preview-15dd7d63f",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-15dd7d63f",
  "@metamask-previews/claims-controller": "0.4.2-preview-15dd7d63f",
  "@metamask-previews/client-controller": "1.0.0-preview-15dd7d63f",
  "@metamask-previews/compliance-controller": "1.0.1-preview-15dd7d63f",
  "@metamask-previews/composable-controller": "12.0.0-preview-15dd7d63f",
  "@metamask-previews/config-registry-controller": "0.1.0-preview-15dd7d63f",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-15dd7d63f",
  "@metamask-previews/controller-utils": "11.19.0-preview-15dd7d63f",
  "@metamask-previews/core-backend": "6.0.0-preview-15dd7d63f",
  "@metamask-previews/delegation-controller": "2.0.1-preview-15dd7d63f",
  "@metamask-previews/earn-controller": "11.1.1-preview-15dd7d63f",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-15dd7d63f",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-15dd7d63f",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-15dd7d63f",
  "@metamask-previews/ens-controller": "19.0.3-preview-15dd7d63f",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-15dd7d63f",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-15dd7d63f",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-15dd7d63f",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-15dd7d63f",
  "@metamask-previews/foundryup": "1.0.1-preview-15dd7d63f",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-15dd7d63f",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-15dd7d63f",
  "@metamask-previews/geolocation-controller": "0.1.0-preview-15dd7d63f",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-15dd7d63f",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-15dd7d63f",
  "@metamask-previews/keyring-controller": "25.1.0-preview-15dd7d63f",
  "@metamask-previews/logging-controller": "7.0.1-preview-15dd7d63f",
  "@metamask-previews/message-manager": "14.1.0-preview-15dd7d63f",
  "@metamask-previews/messenger": "0.3.0-preview-15dd7d63f",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-15dd7d63f",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-15dd7d63f",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-15dd7d63f",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-15dd7d63f",
  "@metamask-previews/name-controller": "9.0.0-preview-15dd7d63f",
  "@metamask-previews/network-controller": "30.0.0-preview-15dd7d63f",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-15dd7d63f",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-15dd7d63f",
  "@metamask-previews/permission-controller": "12.2.0-preview-15dd7d63f",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-15dd7d63f",
  "@metamask-previews/perps-controller": "1.0.0-preview-15dd7d63f",
  "@metamask-previews/phishing-controller": "16.3.0-preview-15dd7d63f",
  "@metamask-previews/polling-controller": "16.0.3-preview-15dd7d63f",
  "@metamask-previews/preferences-controller": "22.1.0-preview-15dd7d63f",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-15dd7d63f",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-15dd7d63f",
  "@metamask-previews/ramps-controller": "10.2.0-preview-15dd7d63f",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-15dd7d63f",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-15dd7d63f",
  "@metamask-previews/sample-controllers": "4.0.3-preview-15dd7d63f",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-15dd7d63f",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-15dd7d63f",
  "@metamask-previews/shield-controller": "5.0.1-preview-15dd7d63f",
  "@metamask-previews/signature-controller": "39.0.4-preview-15dd7d63f",
  "@metamask-previews/storage-service": "1.0.0-preview-15dd7d63f",
  "@metamask-previews/subscription-controller": "6.0.0-preview-15dd7d63f",
  "@metamask-previews/transaction-controller": "62.20.0-preview-15dd7d63f",
  "@metamask-previews/transaction-pay-controller": "16.3.0-preview-15dd7d63f",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-15dd7d63f"
}

@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 15dd7d6 to 87d1261 Compare March 16, 2026 13:23
@maxime-oe
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
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": "5.0.1-preview-87d1261",
  "@metamask-previews/accounts-controller": "37.0.0-preview-87d1261",
  "@metamask-previews/address-book-controller": "7.0.1-preview-87d1261",
  "@metamask-previews/ai-controllers": "0.3.0-preview-87d1261",
  "@metamask-previews/analytics-controller": "1.0.0-preview-87d1261",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-87d1261",
  "@metamask-previews/announcement-controller": "8.0.0-preview-87d1261",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-87d1261",
  "@metamask-previews/approval-controller": "8.0.0-preview-87d1261",
  "@metamask-previews/assets-controller": "2.3.0-preview-87d1261",
  "@metamask-previews/assets-controllers": "100.2.1-preview-87d1261",
  "@metamask-previews/base-controller": "9.0.0-preview-87d1261",
  "@metamask-previews/base-data-service": "0.0.0-preview-87d1261",
  "@metamask-previews/bridge-controller": "69.1.0-preview-87d1261",
  "@metamask-previews/bridge-status-controller": "68.1.0-preview-87d1261",
  "@metamask-previews/build-utils": "3.0.4-preview-87d1261",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-87d1261",
  "@metamask-previews/claims-controller": "0.4.3-preview-87d1261",
  "@metamask-previews/client-controller": "1.0.0-preview-87d1261",
  "@metamask-previews/compliance-controller": "1.0.1-preview-87d1261",
  "@metamask-previews/composable-controller": "12.0.0-preview-87d1261",
  "@metamask-previews/config-registry-controller": "0.1.1-preview-87d1261",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-87d1261",
  "@metamask-previews/controller-utils": "11.19.0-preview-87d1261",
  "@metamask-previews/core-backend": "6.1.1-preview-87d1261",
  "@metamask-previews/delegation-controller": "2.0.2-preview-87d1261",
  "@metamask-previews/earn-controller": "11.1.2-preview-87d1261",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-87d1261",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-87d1261",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-87d1261",
  "@metamask-previews/ens-controller": "19.0.3-preview-87d1261",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-87d1261",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-87d1261",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-87d1261",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-87d1261",
  "@metamask-previews/foundryup": "1.0.1-preview-87d1261",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-87d1261",
  "@metamask-previews/gator-permissions-controller": "2.1.0-preview-87d1261",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-87d1261",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-87d1261",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-87d1261",
  "@metamask-previews/keyring-controller": "25.1.0-preview-87d1261",
  "@metamask-previews/logging-controller": "7.0.1-preview-87d1261",
  "@metamask-previews/message-manager": "14.1.0-preview-87d1261",
  "@metamask-previews/messenger": "0.3.0-preview-87d1261",
  "@metamask-previews/multichain-account-service": "7.1.0-preview-87d1261",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-87d1261",
  "@metamask-previews/multichain-network-controller": "3.0.5-preview-87d1261",
  "@metamask-previews/multichain-transactions-controller": "7.0.2-preview-87d1261",
  "@metamask-previews/name-controller": "9.0.0-preview-87d1261",
  "@metamask-previews/network-controller": "30.0.0-preview-87d1261",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-87d1261",
  "@metamask-previews/notification-services-controller": "23.0.0-preview-87d1261",
  "@metamask-previews/permission-controller": "12.2.0-preview-87d1261",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-87d1261",
  "@metamask-previews/perps-controller": "1.0.1-preview-87d1261",
  "@metamask-previews/phishing-controller": "16.3.0-preview-87d1261",
  "@metamask-previews/polling-controller": "16.0.3-preview-87d1261",
  "@metamask-previews/preferences-controller": "23.0.0-preview-87d1261",
  "@metamask-previews/profile-metrics-controller": "3.0.3-preview-87d1261",
  "@metamask-previews/profile-sync-controller": "28.0.0-preview-87d1261",
  "@metamask-previews/ramps-controller": "12.0.0-preview-87d1261",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-87d1261",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-87d1261",
  "@metamask-previews/sample-controllers": "4.0.3-preview-87d1261",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-87d1261",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-87d1261",
  "@metamask-previews/shield-controller": "5.0.1-preview-87d1261",
  "@metamask-previews/signature-controller": "39.0.5-preview-87d1261",
  "@metamask-previews/storage-service": "1.0.0-preview-87d1261",
  "@metamask-previews/subscription-controller": "6.0.1-preview-87d1261",
  "@metamask-previews/transaction-controller": "62.21.0-preview-87d1261",
  "@metamask-previews/transaction-pay-controller": "16.5.0-preview-87d1261",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-87d1261"
}

@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch 2 times, most recently from a4a16c8 to 222195b Compare March 20, 2026 14:21
@maxime-oe
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@5.0.1-preview-222195b7a
@metamask-previews/accounts-controller@37.0.0-preview-222195b7a
@metamask-previews/address-book-controller@7.1.0-preview-222195b7a
@metamask-previews/ai-controllers@0.4.0-preview-222195b7a
@metamask-previews/analytics-controller@1.0.0-preview-222195b7a
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-222195b7a
@metamask-previews/announcement-controller@8.0.0-preview-222195b7a
@metamask-previews/app-metadata-controller@2.0.0-preview-222195b7a
@metamask-previews/approval-controller@9.0.0-preview-222195b7a
@metamask-previews/assets-controller@3.0.0-preview-222195b7a
@metamask-previews/assets-controllers@101.0.1-preview-222195b7a
@metamask-previews/base-controller@9.0.0-preview-222195b7a
@metamask-previews/base-data-service@0.0.0-preview-222195b7a
@metamask-previews/bridge-controller@69.1.1-preview-222195b7a
@metamask-previews/bridge-status-controller@70.0.0-preview-222195b7a
@metamask-previews/build-utils@3.0.4-preview-222195b7a
@metamask-previews/chain-agnostic-permission@1.4.0-preview-222195b7a
@metamask-previews/claims-controller@0.4.3-preview-222195b7a
@metamask-previews/client-controller@1.0.0-preview-222195b7a
@metamask-previews/compliance-controller@1.0.1-preview-222195b7a
@metamask-previews/composable-controller@12.0.0-preview-222195b7a
@metamask-previews/config-registry-controller@0.1.1-preview-222195b7a
@metamask-previews/connectivity-controller@0.1.0-preview-222195b7a
@metamask-previews/controller-utils@11.19.0-preview-222195b7a
@metamask-previews/core-backend@6.2.0-preview-222195b7a
@metamask-previews/delegation-controller@2.0.2-preview-222195b7a
@metamask-previews/earn-controller@11.1.2-preview-222195b7a
@metamask-previews/eip-5792-middleware@3.0.1-preview-222195b7a
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-222195b7a
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-222195b7a
@metamask-previews/ens-controller@19.1.0-preview-222195b7a
@metamask-previews/error-reporting-service@3.0.1-preview-222195b7a
@metamask-previews/eth-block-tracker@15.0.1-preview-222195b7a
@metamask-previews/eth-json-rpc-middleware@23.1.0-preview-222195b7a
@metamask-previews/eth-json-rpc-provider@6.0.0-preview-222195b7a
@metamask-previews/foundryup@1.0.1-preview-222195b7a
@metamask-previews/gas-fee-controller@26.1.0-preview-222195b7a
@metamask-previews/gator-permissions-controller@2.1.1-preview-222195b7a
@metamask-previews/geolocation-controller@0.1.1-preview-222195b7a
@metamask-previews/json-rpc-engine@10.2.3-preview-222195b7a
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-222195b7a
@metamask-previews/keyring-controller@25.1.0-preview-222195b7a
@metamask-previews/logging-controller@8.0.0-preview-222195b7a
@metamask-previews/message-manager@14.1.0-preview-222195b7a
@metamask-previews/messenger@0.3.0-preview-222195b7a
@metamask-previews/multichain-account-service@7.1.0-preview-222195b7a
@metamask-previews/multichain-api-middleware@1.2.7-preview-222195b7a
@metamask-previews/multichain-network-controller@3.0.5-preview-222195b7a
@metamask-previews/multichain-transactions-controller@7.0.2-preview-222195b7a
@metamask-previews/name-controller@9.1.0-preview-222195b7a
@metamask-previews/network-controller@30.0.0-preview-222195b7a
@metamask-previews/network-enablement-controller@5.0.0-preview-222195b7a
@metamask-previews/notification-services-controller@23.0.0-preview-222195b7a
@metamask-previews/permission-controller@12.2.1-preview-222195b7a
@metamask-previews/permission-log-controller@5.0.0-preview-222195b7a
@metamask-previews/perps-controller@1.3.0-preview-222195b7a
@metamask-previews/phishing-controller@17.0.0-preview-222195b7a
@metamask-previews/polling-controller@16.0.3-preview-222195b7a
@metamask-previews/preferences-controller@23.0.0-preview-222195b7a
@metamask-previews/profile-metrics-controller@3.1.1-preview-222195b7a
@metamask-previews/profile-sync-controller@28.0.0-preview-222195b7a
@metamask-previews/ramps-controller@12.0.0-preview-222195b7a
@metamask-previews/rate-limit-controller@7.0.0-preview-222195b7a
@metamask-previews/react-data-query@0.0.0-preview-222195b7a
@metamask-previews/remote-feature-flag-controller@4.1.0-preview-222195b7a
@metamask-previews/sample-controllers@4.0.3-preview-222195b7a
@metamask-previews/seedless-onboarding-controller@9.0.0-preview-222195b7a
@metamask-previews/selected-network-controller@26.0.3-preview-222195b7a
@metamask-previews/shield-controller@5.0.2-preview-222195b7a
@metamask-previews/signature-controller@39.1.0-preview-222195b7a
@metamask-previews/storage-service@1.0.0-preview-222195b7a
@metamask-previews/subscription-controller@6.0.2-preview-222195b7a
@metamask-previews/transaction-controller@63.0.0-preview-222195b7a
@metamask-previews/transaction-pay-controller@18.0.0-preview-222195b7a
@metamask-previews/user-operation-controller@41.1.0-preview-222195b7a

@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 222195b to 3047a7f Compare March 24, 2026 07:47
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 1 potential issue.

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.

@maxime-oe
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@5.0.1-preview-3047a7f
@metamask-previews/accounts-controller@37.0.0-preview-3047a7f
@metamask-previews/address-book-controller@7.1.0-preview-3047a7f
@metamask-previews/ai-controllers@0.5.0-preview-3047a7f
@metamask-previews/analytics-controller@1.0.0-preview-3047a7f
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-3047a7f
@metamask-previews/announcement-controller@8.0.0-preview-3047a7f
@metamask-previews/app-metadata-controller@2.0.0-preview-3047a7f
@metamask-previews/approval-controller@9.0.0-preview-3047a7f
@metamask-previews/assets-controller@3.1.0-preview-3047a7f
@metamask-previews/assets-controllers@101.0.1-preview-3047a7f
@metamask-previews/base-controller@9.0.0-preview-3047a7f
@metamask-previews/base-data-service@0.0.0-preview-3047a7f
@metamask-previews/bridge-controller@69.2.0-preview-3047a7f
@metamask-previews/bridge-status-controller@70.0.0-preview-3047a7f
@metamask-previews/build-utils@3.0.4-preview-3047a7f
@metamask-previews/chain-agnostic-permission@1.4.0-preview-3047a7f
@metamask-previews/claims-controller@0.4.3-preview-3047a7f
@metamask-previews/client-controller@1.0.0-preview-3047a7f
@metamask-previews/compliance-controller@1.0.1-preview-3047a7f
@metamask-previews/composable-controller@12.0.0-preview-3047a7f
@metamask-previews/config-registry-controller@0.1.1-preview-3047a7f
@metamask-previews/connectivity-controller@0.1.0-preview-3047a7f
@metamask-previews/controller-utils@11.19.0-preview-3047a7f
@metamask-previews/core-backend@6.2.0-preview-3047a7f
@metamask-previews/delegation-controller@2.0.2-preview-3047a7f
@metamask-previews/earn-controller@11.1.2-preview-3047a7f
@metamask-previews/eip-5792-middleware@3.0.1-preview-3047a7f
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-3047a7f
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-3047a7f
@metamask-previews/ens-controller@19.1.0-preview-3047a7f
@metamask-previews/error-reporting-service@3.0.1-preview-3047a7f
@metamask-previews/eth-block-tracker@15.0.1-preview-3047a7f
@metamask-previews/eth-json-rpc-middleware@23.1.0-preview-3047a7f
@metamask-previews/eth-json-rpc-provider@6.0.0-preview-3047a7f
@metamask-previews/foundryup@1.0.1-preview-3047a7f
@metamask-previews/gas-fee-controller@26.1.0-preview-3047a7f
@metamask-previews/gator-permissions-controller@2.1.1-preview-3047a7f
@metamask-previews/geolocation-controller@0.1.1-preview-3047a7f
@metamask-previews/json-rpc-engine@10.2.3-preview-3047a7f
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-3047a7f
@metamask-previews/keyring-controller@25.1.0-preview-3047a7f
@metamask-previews/logging-controller@8.0.0-preview-3047a7f
@metamask-previews/message-manager@14.1.0-preview-3047a7f
@metamask-previews/messenger@0.3.0-preview-3047a7f
@metamask-previews/multichain-account-service@7.1.0-preview-3047a7f
@metamask-previews/multichain-api-middleware@1.2.7-preview-3047a7f
@metamask-previews/multichain-network-controller@3.0.5-preview-3047a7f
@metamask-previews/multichain-transactions-controller@7.0.2-preview-3047a7f
@metamask-previews/name-controller@9.1.0-preview-3047a7f
@metamask-previews/network-controller@30.0.0-preview-3047a7f
@metamask-previews/network-enablement-controller@5.0.0-preview-3047a7f
@metamask-previews/notification-services-controller@23.0.0-preview-3047a7f
@metamask-previews/permission-controller@12.2.1-preview-3047a7f
@metamask-previews/permission-log-controller@5.0.0-preview-3047a7f
@metamask-previews/perps-controller@1.3.0-preview-3047a7f
@metamask-previews/phishing-controller@17.0.0-preview-3047a7f
@metamask-previews/polling-controller@16.0.3-preview-3047a7f
@metamask-previews/preferences-controller@23.0.0-preview-3047a7f
@metamask-previews/profile-metrics-controller@3.1.1-preview-3047a7f
@metamask-previews/profile-sync-controller@28.0.0-preview-3047a7f
@metamask-previews/ramps-controller@12.0.1-preview-3047a7f
@metamask-previews/rate-limit-controller@7.0.0-preview-3047a7f
@metamask-previews/react-data-query@0.0.0-preview-3047a7f
@metamask-previews/remote-feature-flag-controller@4.1.0-preview-3047a7f
@metamask-previews/sample-controllers@4.0.3-preview-3047a7f
@metamask-previews/seedless-onboarding-controller@9.0.0-preview-3047a7f
@metamask-previews/selected-network-controller@26.0.3-preview-3047a7f
@metamask-previews/shield-controller@5.0.2-preview-3047a7f
@metamask-previews/signature-controller@39.1.0-preview-3047a7f
@metamask-previews/storage-service@1.0.0-preview-3047a7f
@metamask-previews/subscription-controller@6.0.2-preview-3047a7f
@metamask-previews/transaction-controller@63.1.0-preview-3047a7f
@metamask-previews/transaction-pay-controller@18.0.0-preview-3047a7f
@metamask-previews/user-operation-controller@41.1.0-preview-3047a7f

@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 3047a7f to 3ce0062 Compare March 26, 2026 07:31
@maxime-oe
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@5.0.1-preview-3ce0062c4
@metamask-previews/accounts-controller@37.0.0-preview-3ce0062c4
@metamask-previews/address-book-controller@7.1.0-preview-3ce0062c4
@metamask-previews/ai-controllers@0.5.0-preview-3ce0062c4
@metamask-previews/analytics-controller@1.0.0-preview-3ce0062c4
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-3ce0062c4
@metamask-previews/announcement-controller@8.0.0-preview-3ce0062c4
@metamask-previews/app-metadata-controller@2.0.0-preview-3ce0062c4
@metamask-previews/approval-controller@9.0.0-preview-3ce0062c4
@metamask-previews/assets-controller@3.1.0-preview-3ce0062c4
@metamask-previews/assets-controllers@101.0.1-preview-3ce0062c4
@metamask-previews/base-controller@9.0.0-preview-3ce0062c4
@metamask-previews/base-data-service@0.0.0-preview-3ce0062c4
@metamask-previews/bridge-controller@69.2.0-preview-3ce0062c4
@metamask-previews/bridge-status-controller@70.0.0-preview-3ce0062c4
@metamask-previews/build-utils@3.0.4-preview-3ce0062c4
@metamask-previews/chain-agnostic-permission@1.4.0-preview-3ce0062c4
@metamask-previews/claims-controller@0.4.3-preview-3ce0062c4
@metamask-previews/client-controller@1.0.0-preview-3ce0062c4
@metamask-previews/compliance-controller@1.0.1-preview-3ce0062c4
@metamask-previews/composable-controller@12.0.0-preview-3ce0062c4
@metamask-previews/config-registry-controller@0.1.1-preview-3ce0062c4
@metamask-previews/connectivity-controller@0.1.0-preview-3ce0062c4
@metamask-previews/controller-utils@11.19.0-preview-3ce0062c4
@metamask-previews/core-backend@6.2.0-preview-3ce0062c4
@metamask-previews/delegation-controller@2.0.2-preview-3ce0062c4
@metamask-previews/earn-controller@11.1.2-preview-3ce0062c4
@metamask-previews/eip-5792-middleware@3.0.1-preview-3ce0062c4
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-3ce0062c4
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-3ce0062c4
@metamask-previews/ens-controller@19.1.0-preview-3ce0062c4
@metamask-previews/error-reporting-service@3.0.1-preview-3ce0062c4
@metamask-previews/eth-block-tracker@15.0.1-preview-3ce0062c4
@metamask-previews/eth-json-rpc-middleware@23.1.0-preview-3ce0062c4
@metamask-previews/eth-json-rpc-provider@6.0.0-preview-3ce0062c4
@metamask-previews/foundryup@1.0.1-preview-3ce0062c4
@metamask-previews/gas-fee-controller@26.1.0-preview-3ce0062c4
@metamask-previews/gator-permissions-controller@2.1.1-preview-3ce0062c4
@metamask-previews/geolocation-controller@0.1.1-preview-3ce0062c4
@metamask-previews/json-rpc-engine@10.2.3-preview-3ce0062c4
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-3ce0062c4
@metamask-previews/keyring-controller@25.1.0-preview-3ce0062c4
@metamask-previews/logging-controller@8.0.0-preview-3ce0062c4
@metamask-previews/message-manager@14.1.0-preview-3ce0062c4
@metamask-previews/messenger@0.3.0-preview-3ce0062c4
@metamask-previews/multichain-account-service@7.1.0-preview-3ce0062c4
@metamask-previews/multichain-api-middleware@1.2.7-preview-3ce0062c4
@metamask-previews/multichain-network-controller@3.0.5-preview-3ce0062c4
@metamask-previews/multichain-transactions-controller@7.0.2-preview-3ce0062c4
@metamask-previews/name-controller@9.1.0-preview-3ce0062c4
@metamask-previews/network-controller@30.0.0-preview-3ce0062c4
@metamask-previews/network-enablement-controller@5.0.0-preview-3ce0062c4
@metamask-previews/notification-services-controller@23.0.0-preview-3ce0062c4
@metamask-previews/permission-controller@12.2.1-preview-3ce0062c4
@metamask-previews/permission-log-controller@5.0.0-preview-3ce0062c4
@metamask-previews/perps-controller@1.3.0-preview-3ce0062c4
@metamask-previews/phishing-controller@17.0.0-preview-3ce0062c4
@metamask-previews/polling-controller@16.0.3-preview-3ce0062c4
@metamask-previews/preferences-controller@23.0.0-preview-3ce0062c4
@metamask-previews/profile-metrics-controller@3.1.1-preview-3ce0062c4
@metamask-previews/profile-sync-controller@28.0.0-preview-3ce0062c4
@metamask-previews/ramps-controller@12.0.1-preview-3ce0062c4
@metamask-previews/rate-limit-controller@7.0.0-preview-3ce0062c4
@metamask-previews/react-data-query@0.0.0-preview-3ce0062c4
@metamask-previews/remote-feature-flag-controller@4.1.0-preview-3ce0062c4
@metamask-previews/sample-controllers@4.0.3-preview-3ce0062c4
@metamask-previews/seedless-onboarding-controller@9.0.0-preview-3ce0062c4
@metamask-previews/selected-network-controller@26.0.3-preview-3ce0062c4
@metamask-previews/shield-controller@5.0.2-preview-3ce0062c4
@metamask-previews/signature-controller@39.1.0-preview-3ce0062c4
@metamask-previews/storage-service@1.0.0-preview-3ce0062c4
@metamask-previews/subscription-controller@6.0.2-preview-3ce0062c4
@metamask-previews/transaction-controller@63.1.0-preview-3ce0062c4
@metamask-previews/transaction-pay-controller@18.0.0-preview-3ce0062c4
@metamask-previews/user-operation-controller@41.1.0-preview-3ce0062c4

@maxime-oe maxime-oe requested a review from a team as a code owner March 26, 2026 17:22
@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 0807fc6 to 4f74a56 Compare March 27, 2026 06:46
@maxime-oe
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@maxime-oe maxime-oe changed the title feat: tx-ctrl add excludeNativeTokenForFee param feat: inject new parameters in addTransaction for gas fee tokens Mar 27, 2026
@maxime-oe maxime-oe changed the title feat: inject new parameters in addTransaction for gas fee tokens feat: inject new parameters in addTransaction for gas fee tokens (Tempo) Mar 27, 2026
@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@6.0.0-preview-4f74a56
@metamask-previews/accounts-controller@37.1.0-preview-4f74a56
@metamask-previews/address-book-controller@7.1.1-preview-4f74a56
@metamask-previews/ai-controllers@0.6.2-preview-4f74a56
@metamask-previews/analytics-controller@1.0.1-preview-4f74a56
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-4f74a56
@metamask-previews/announcement-controller@8.1.0-preview-4f74a56
@metamask-previews/app-metadata-controller@2.0.1-preview-4f74a56
@metamask-previews/approval-controller@9.0.1-preview-4f74a56
@metamask-previews/assets-controller@3.2.0-preview-4f74a56
@metamask-previews/assets-controllers@102.0.0-preview-4f74a56
@metamask-previews/base-controller@9.0.1-preview-4f74a56
@metamask-previews/base-data-service@0.1.1-preview-4f74a56
@metamask-previews/bridge-controller@69.2.2-preview-4f74a56
@metamask-previews/bridge-status-controller@70.0.2-preview-4f74a56
@metamask-previews/build-utils@3.0.4-preview-4f74a56
@metamask-previews/chain-agnostic-permission@1.5.0-preview-4f74a56
@metamask-previews/claims-controller@0.5.0-preview-4f74a56
@metamask-previews/client-controller@1.0.1-preview-4f74a56
@metamask-previews/compliance-controller@1.0.2-preview-4f74a56
@metamask-previews/composable-controller@12.0.1-preview-4f74a56
@metamask-previews/config-registry-controller@0.2.0-preview-4f74a56
@metamask-previews/connectivity-controller@0.2.0-preview-4f74a56
@metamask-previews/controller-utils@11.19.0-preview-4f74a56
@metamask-previews/core-backend@6.2.1-preview-4f74a56
@metamask-previews/delegation-controller@2.1.0-preview-4f74a56
@metamask-previews/earn-controller@11.2.0-preview-4f74a56
@metamask-previews/eip-5792-middleware@3.0.2-preview-4f74a56
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-4f74a56
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-4f74a56
@metamask-previews/ens-controller@19.1.1-preview-4f74a56
@metamask-previews/error-reporting-service@3.0.2-preview-4f74a56
@metamask-previews/eth-block-tracker@15.0.1-preview-4f74a56
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-4f74a56
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-4f74a56
@metamask-previews/foundryup@1.0.1-preview-4f74a56
@metamask-previews/gas-fee-controller@26.1.1-preview-4f74a56
@metamask-previews/gator-permissions-controller@2.2.0-preview-4f74a56
@metamask-previews/geolocation-controller@0.1.2-preview-4f74a56
@metamask-previews/json-rpc-engine@10.2.4-preview-4f74a56
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-4f74a56
@metamask-previews/keyring-controller@25.1.1-preview-4f74a56
@metamask-previews/logging-controller@8.0.1-preview-4f74a56
@metamask-previews/message-manager@14.1.1-preview-4f74a56
@metamask-previews/messenger@1.0.0-preview-4f74a56
@metamask-previews/multichain-account-service@8.0.0-preview-4f74a56
@metamask-previews/multichain-api-middleware@2.0.0-preview-4f74a56
@metamask-previews/multichain-network-controller@3.0.6-preview-4f74a56
@metamask-previews/multichain-transactions-controller@7.0.3-preview-4f74a56
@metamask-previews/name-controller@9.1.1-preview-4f74a56
@metamask-previews/network-controller@30.0.1-preview-4f74a56
@metamask-previews/network-enablement-controller@5.0.1-preview-4f74a56
@metamask-previews/notification-services-controller@23.0.1-preview-4f74a56
@metamask-previews/permission-controller@12.3.0-preview-4f74a56
@metamask-previews/permission-log-controller@5.1.0-preview-4f74a56
@metamask-previews/perps-controller@2.0.0-preview-4f74a56
@metamask-previews/phishing-controller@17.1.0-preview-4f74a56
@metamask-previews/polling-controller@16.0.4-preview-4f74a56
@metamask-previews/preferences-controller@23.1.0-preview-4f74a56
@metamask-previews/profile-metrics-controller@3.1.2-preview-4f74a56
@metamask-previews/profile-sync-controller@28.0.1-preview-4f74a56
@metamask-previews/ramps-controller@12.1.0-preview-4f74a56
@metamask-previews/rate-limit-controller@7.0.1-preview-4f74a56
@metamask-previews/react-data-query@0.2.0-preview-4f74a56
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-4f74a56
@metamask-previews/sample-controllers@4.0.4-preview-4f74a56
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-4f74a56
@metamask-previews/selected-network-controller@26.1.0-preview-4f74a56
@metamask-previews/shield-controller@5.1.0-preview-4f74a56
@metamask-previews/signature-controller@39.1.1-preview-4f74a56
@metamask-previews/storage-service@1.0.1-preview-4f74a56
@metamask-previews/subscription-controller@6.1.1-preview-4f74a56
@metamask-previews/transaction-controller@63.3.1-preview-4f74a56
@metamask-previews/transaction-pay-controller@18.2.0-preview-4f74a56
@metamask-previews/user-operation-controller@41.1.1-preview-4f74a56

Copy link
Copy Markdown
Contributor

@khanti42 khanti42 left a comment

Choose a reason for hiding this comment

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

only nit comments

@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 4f74a56 to 3df0deb Compare March 27, 2026 17:39
@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 3df0deb to 624f1df Compare March 30, 2026 07:57
@maxime-oe maxime-oe requested a review from khanti42 March 30, 2026 08:04
batchId?: Hex;

/** Added for tx to appear in Activity tab */
actionId?: string;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can you elaborate? Your transactions should be visible regardless of actionId?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

In this specific case and based on my understanding, only passing the actionId to this function from the client led to the transaction history state not to contain actionId, causing it to never appear. Adding it as explicit argument here made it appear in the state, which was enough for having it appear in the tx history. Since it's been a month, I can try locally to remove it and send you what the state looks like without this change, because maybe not having an actionId was a expected behavior ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Please do, this was originally intended for avoiding duplication but is now deprecated so shouldn't be needed at all, otherwise there is a bug.

Copy link
Copy Markdown
Contributor Author

@maxime-oe maxime-oe Mar 31, 2026

Choose a reason for hiding this comment

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

Ok it is a bug then, because I just had pushed another commit where I "force-injected" the actionId somewhere else because otherwise I would definitely not show up in the Activity tab.
For reference the part in the code that filters the tx if there is no actionId (only filters if not actionId AND origin is not MetaMask):

https://github.com/MetaMask/metamask-extension/blob/747fda515a5d6ce3fc11109e23a654e3248a6b1c/ui/selectors/activity.ts#L67-L70

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That is a bug, they're using actionId to identify dApp requests when we should just be checking that origin is not empty and not ORIGIN_METAMASK.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I see. Then this return should probably have the origin clause negated.
Such as

 return isPending || !isLocalOrigin

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Actually !isLocalOrigin doesn't really make sense there because if it is a Send transaction there is no reason to display it.
Only alternative is to return true there regardless of actionId and batchId, since those conditions might have been there for historical reasons and may not have any reason to be there today.

I don't think the solution would impact this PR anymore, though (only MetaMask/metamask-extension#40449)

/** Function to validate if auxiliary funds capability is supported. */
isAuxiliaryFundsSupported: (chainId: Hex) => boolean;
/** Created for Tempo for ability to signal preferred fee token and absence of native */
getChainSpecificExtraParams: (chainId: Hex) => {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Minor, could we define this return value as a type, and make it more generic so the client can inject more in future?

Maybe just an optional getOverrideParams and pass it a ParamsOverrideRequest that returns a ParamsOverrideResponse etc?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Or actually, are we overcomplicating, could we just inject in the hooks themselves inside MetaMaskController and check the networkClientId and then mutate the call?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I am not sure to fully get your second comment.
Right now in Extension for example we set the hooks to add Tempo parameters here.

Since this area was a "function binding" area and not a "business logic" area I wanted to follow how things were done - specifically isAuxiliaryFundsSupported appeared similar in intent.

If we would to directly add the arguments there, wouldn't we have to add gasFeeToken and excludeNativeTokenForFee in even more places ? (top level of the middleware)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Is your suggestion that instead of passing getChainSpecificExtraParams we directly pass gasFeeToken and excludeNativeTokenForFee ? I am open to it. It just would make it a bit less generic in my opinion.

Copy link
Copy Markdown
Member

@matthewwalsh0 matthewwalsh0 Mar 30, 2026

Choose a reason for hiding this comment

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

Since it's a client decision, I'm saying do we need to add another hook, or can we just update the existing addTransactionBatch and addTransaction hooks to do more than just bind?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I suppose we could, indeed.

  • Pros: No need to modify eip-5792-middleware at all.
  • Cons: Tiny performance overhead - to get the chainId from networkClientId from one extra place.

Just to confirm that this is what you are thinking about:

              addTransaction: (txParams, txOptions) => {
                // ... obtain tempo options here if any ...
                return this.txController.addTransaction(txParams, {
                  ...txOptions,
                  ...tempoOptions, // assuming get got them above
                });
              },

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Made the change in Extension in accordance to what you said: https://github.com/MetaMask/metamask-extension/pull/40449/changes#diff-6fbff2cfe97ac01b77296ef2122c7e0a5b3ff6a84b584b4d1a87482f35eea3d6R1019-R1038

This removes the need for the eip-5792-middleware upgrade in Extension.
I will do the same thing for Mobile to check before I permanently remove it from this PR.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@matthewwalsh0 This is what it will look like on Mobile: https://github.com/MetaMask/metamask-mobile/pull/27142/changes#diff-e39cb6f200b31535fa6c6cebdc19d7721a389d27c1749ce705d527c84117349cR877-R901

(although I haven't managed to actually test it on Mobile yet, maybe my device is too slow)

@maxime-oe maxime-oe force-pushed the feat/poc-tempo-transactions-7702 branch from 624f1df to 27fa5d8 Compare March 30, 2026 16:57
@maxime-oe
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.0.0-preview-27fa5d81d
@metamask-previews/accounts-controller@37.1.1-preview-27fa5d81d
@metamask-previews/address-book-controller@7.1.1-preview-27fa5d81d
@metamask-previews/ai-controllers@0.6.3-preview-27fa5d81d
@metamask-previews/analytics-controller@1.0.1-preview-27fa5d81d
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-27fa5d81d
@metamask-previews/announcement-controller@8.1.0-preview-27fa5d81d
@metamask-previews/app-metadata-controller@2.0.1-preview-27fa5d81d
@metamask-previews/approval-controller@9.0.1-preview-27fa5d81d
@metamask-previews/assets-controller@3.2.1-preview-27fa5d81d
@metamask-previews/assets-controllers@103.0.0-preview-27fa5d81d
@metamask-previews/base-controller@9.0.1-preview-27fa5d81d
@metamask-previews/base-data-service@0.1.1-preview-27fa5d81d
@metamask-previews/bridge-controller@69.2.3-preview-27fa5d81d
@metamask-previews/bridge-status-controller@70.0.3-preview-27fa5d81d
@metamask-previews/build-utils@3.0.4-preview-27fa5d81d
@metamask-previews/chain-agnostic-permission@1.5.0-preview-27fa5d81d
@metamask-previews/claims-controller@0.5.0-preview-27fa5d81d
@metamask-previews/client-controller@1.0.1-preview-27fa5d81d
@metamask-previews/compliance-controller@1.0.2-preview-27fa5d81d
@metamask-previews/composable-controller@12.0.1-preview-27fa5d81d
@metamask-previews/config-registry-controller@0.2.0-preview-27fa5d81d
@metamask-previews/connectivity-controller@0.2.0-preview-27fa5d81d
@metamask-previews/controller-utils@11.19.0-preview-27fa5d81d
@metamask-previews/core-backend@6.2.1-preview-27fa5d81d
@metamask-previews/delegation-controller@2.1.0-preview-27fa5d81d
@metamask-previews/earn-controller@11.2.1-preview-27fa5d81d
@metamask-previews/eip-5792-middleware@3.0.2-preview-27fa5d81d
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-27fa5d81d
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-27fa5d81d
@metamask-previews/ens-controller@19.1.1-preview-27fa5d81d
@metamask-previews/eth-block-tracker@15.0.1-preview-27fa5d81d
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-27fa5d81d
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-27fa5d81d
@metamask-previews/foundryup@1.0.1-preview-27fa5d81d
@metamask-previews/gas-fee-controller@26.1.1-preview-27fa5d81d
@metamask-previews/gator-permissions-controller@3.0.0-preview-27fa5d81d
@metamask-previews/geolocation-controller@0.1.2-preview-27fa5d81d
@metamask-previews/json-rpc-engine@10.2.4-preview-27fa5d81d
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-27fa5d81d
@metamask-previews/keyring-controller@25.1.1-preview-27fa5d81d
@metamask-previews/logging-controller@8.0.1-preview-27fa5d81d
@metamask-previews/message-manager@14.1.1-preview-27fa5d81d
@metamask-previews/messenger@1.0.0-preview-27fa5d81d
@metamask-previews/multichain-account-service@8.0.1-preview-27fa5d81d
@metamask-previews/multichain-api-middleware@2.0.0-preview-27fa5d81d
@metamask-previews/multichain-network-controller@3.0.6-preview-27fa5d81d
@metamask-previews/multichain-transactions-controller@7.0.4-preview-27fa5d81d
@metamask-previews/name-controller@9.1.1-preview-27fa5d81d
@metamask-previews/network-controller@30.0.1-preview-27fa5d81d
@metamask-previews/network-enablement-controller@5.0.1-preview-27fa5d81d
@metamask-previews/notification-services-controller@23.0.1-preview-27fa5d81d
@metamask-previews/permission-controller@12.3.0-preview-27fa5d81d
@metamask-previews/permission-log-controller@5.1.0-preview-27fa5d81d
@metamask-previews/perps-controller@2.0.0-preview-27fa5d81d
@metamask-previews/phishing-controller@17.1.0-preview-27fa5d81d
@metamask-previews/polling-controller@16.0.4-preview-27fa5d81d
@metamask-previews/preferences-controller@23.1.0-preview-27fa5d81d
@metamask-previews/profile-metrics-controller@3.1.2-preview-27fa5d81d
@metamask-previews/profile-sync-controller@28.0.2-preview-27fa5d81d
@metamask-previews/ramps-controller@12.1.0-preview-27fa5d81d
@metamask-previews/rate-limit-controller@7.0.1-preview-27fa5d81d
@metamask-previews/react-data-query@0.2.0-preview-27fa5d81d
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-27fa5d81d
@metamask-previews/sample-controllers@4.0.4-preview-27fa5d81d
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-27fa5d81d
@metamask-previews/selected-network-controller@26.1.0-preview-27fa5d81d
@metamask-previews/shield-controller@5.1.0-preview-27fa5d81d
@metamask-previews/signature-controller@39.1.2-preview-27fa5d81d
@metamask-previews/social-controllers@0.0.0-preview-27fa5d81d
@metamask-previews/storage-service@1.0.1-preview-27fa5d81d
@metamask-previews/subscription-controller@6.1.1-preview-27fa5d81d
@metamask-previews/transaction-controller@63.3.1-preview-27fa5d81d
@metamask-previews/transaction-pay-controller@19.0.0-preview-27fa5d81d
@metamask-previews/user-operation-controller@41.1.1-preview-27fa5d81d

@maxime-oe maxime-oe requested a review from matthewwalsh0 March 31, 2026 07:35
@maxime-oe
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.0.0-preview-bb9040b29
@metamask-previews/accounts-controller@37.1.1-preview-bb9040b29
@metamask-previews/address-book-controller@7.1.1-preview-bb9040b29
@metamask-previews/ai-controllers@0.6.3-preview-bb9040b29
@metamask-previews/analytics-controller@1.0.1-preview-bb9040b29
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-bb9040b29
@metamask-previews/announcement-controller@8.1.0-preview-bb9040b29
@metamask-previews/app-metadata-controller@2.0.1-preview-bb9040b29
@metamask-previews/approval-controller@9.0.1-preview-bb9040b29
@metamask-previews/assets-controller@3.2.1-preview-bb9040b29
@metamask-previews/assets-controllers@103.0.0-preview-bb9040b29
@metamask-previews/base-controller@9.0.1-preview-bb9040b29
@metamask-previews/base-data-service@0.1.1-preview-bb9040b29
@metamask-previews/bridge-controller@70.0.0-preview-bb9040b29
@metamask-previews/bridge-status-controller@70.0.4-preview-bb9040b29
@metamask-previews/build-utils@3.0.4-preview-bb9040b29
@metamask-previews/chain-agnostic-permission@1.5.0-preview-bb9040b29
@metamask-previews/claims-controller@0.5.0-preview-bb9040b29
@metamask-previews/client-controller@1.0.1-preview-bb9040b29
@metamask-previews/compliance-controller@1.0.2-preview-bb9040b29
@metamask-previews/composable-controller@12.0.1-preview-bb9040b29
@metamask-previews/config-registry-controller@0.2.0-preview-bb9040b29
@metamask-previews/connectivity-controller@0.2.0-preview-bb9040b29
@metamask-previews/controller-utils@11.20.0-preview-bb9040b29
@metamask-previews/core-backend@6.2.1-preview-bb9040b29
@metamask-previews/delegation-controller@2.1.0-preview-bb9040b29
@metamask-previews/earn-controller@11.2.1-preview-bb9040b29
@metamask-previews/eip-5792-middleware@3.0.2-preview-bb9040b29
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-bb9040b29
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-bb9040b29
@metamask-previews/ens-controller@19.1.1-preview-bb9040b29
@metamask-previews/eth-block-tracker@15.0.1-preview-bb9040b29
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-bb9040b29
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-bb9040b29
@metamask-previews/foundryup@1.0.1-preview-bb9040b29
@metamask-previews/gas-fee-controller@26.1.1-preview-bb9040b29
@metamask-previews/gator-permissions-controller@3.0.0-preview-bb9040b29
@metamask-previews/geolocation-controller@0.1.2-preview-bb9040b29
@metamask-previews/json-rpc-engine@10.2.4-preview-bb9040b29
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-bb9040b29
@metamask-previews/keyring-controller@25.1.1-preview-bb9040b29
@metamask-previews/logging-controller@8.0.1-preview-bb9040b29
@metamask-previews/message-manager@14.1.1-preview-bb9040b29
@metamask-previews/messenger@1.0.0-preview-bb9040b29
@metamask-previews/multichain-account-service@8.0.1-preview-bb9040b29
@metamask-previews/multichain-api-middleware@2.0.0-preview-bb9040b29
@metamask-previews/multichain-network-controller@3.0.6-preview-bb9040b29
@metamask-previews/multichain-transactions-controller@7.0.4-preview-bb9040b29
@metamask-previews/name-controller@9.1.1-preview-bb9040b29
@metamask-previews/network-controller@30.0.1-preview-bb9040b29
@metamask-previews/network-enablement-controller@5.0.1-preview-bb9040b29
@metamask-previews/notification-services-controller@23.0.1-preview-bb9040b29
@metamask-previews/permission-controller@12.3.0-preview-bb9040b29
@metamask-previews/permission-log-controller@5.1.0-preview-bb9040b29
@metamask-previews/perps-controller@2.0.0-preview-bb9040b29
@metamask-previews/phishing-controller@17.1.0-preview-bb9040b29
@metamask-previews/polling-controller@16.0.4-preview-bb9040b29
@metamask-previews/preferences-controller@23.1.0-preview-bb9040b29
@metamask-previews/profile-metrics-controller@3.1.2-preview-bb9040b29
@metamask-previews/profile-sync-controller@28.0.2-preview-bb9040b29
@metamask-previews/ramps-controller@12.1.0-preview-bb9040b29
@metamask-previews/rate-limit-controller@7.0.1-preview-bb9040b29
@metamask-previews/react-data-query@0.2.0-preview-bb9040b29
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-bb9040b29
@metamask-previews/sample-controllers@4.0.4-preview-bb9040b29
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-bb9040b29
@metamask-previews/selected-network-controller@26.1.0-preview-bb9040b29
@metamask-previews/shield-controller@5.1.0-preview-bb9040b29
@metamask-previews/signature-controller@39.1.2-preview-bb9040b29
@metamask-previews/social-controllers@0.0.0-preview-bb9040b29
@metamask-previews/storage-service@1.0.1-preview-bb9040b29
@metamask-previews/subscription-controller@6.1.1-preview-bb9040b29
@metamask-previews/transaction-controller@63.3.1-preview-bb9040b29
@metamask-previews/transaction-pay-controller@19.0.1-preview-bb9040b29
@metamask-previews/user-operation-controller@41.1.1-preview-bb9040b29

* Unless true, gasFeeToken is only taken as a suggestion and native balance will be used in batch 7702 transactions
* This was first implemented for Tempo, since Tempo doesn't have the notion of native token at all
*/
excludeNativeTokenForFee?: boolean;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Minor, do we need to persist this? Could it just be a add transaction option?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Right now the Extension and Mobile implementations rely on this excludeNativeTokenForFee to indicate that there is no native token selectable when picking the gas token.
This allowed it to remain generic instead of having "if Tempo, then hide native" for the gas confirmation modal.
Image

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Without this, USD would appear as selectable token.
Alternative to this approach is to "pull" Tempo config in those UI components, but to me since we already rely on transactionMeta in those, I preferred this current approach.

batchId?: Hex;

/** Added for tx to appear in Activity tab */
actionId?: string;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Please do, this was originally intended for avoiding duplication but is now deprecated so shouldn't be needed at all, otherwise there is a bug.

@maxime-oe
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@maxime-oe maxime-oe requested a review from matthewwalsh0 March 31, 2026 15:13
@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.0.0-preview-3f3a92d7b
@metamask-previews/accounts-controller@37.1.1-preview-3f3a92d7b
@metamask-previews/address-book-controller@7.1.1-preview-3f3a92d7b
@metamask-previews/ai-controllers@0.6.3-preview-3f3a92d7b
@metamask-previews/analytics-controller@1.0.1-preview-3f3a92d7b
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-3f3a92d7b
@metamask-previews/announcement-controller@8.1.0-preview-3f3a92d7b
@metamask-previews/app-metadata-controller@2.0.1-preview-3f3a92d7b
@metamask-previews/approval-controller@9.0.1-preview-3f3a92d7b
@metamask-previews/assets-controller@3.2.1-preview-3f3a92d7b
@metamask-previews/assets-controllers@103.0.0-preview-3f3a92d7b
@metamask-previews/base-controller@9.0.1-preview-3f3a92d7b
@metamask-previews/base-data-service@0.1.1-preview-3f3a92d7b
@metamask-previews/bridge-controller@70.0.0-preview-3f3a92d7b
@metamask-previews/bridge-status-controller@70.0.4-preview-3f3a92d7b
@metamask-previews/build-utils@3.0.4-preview-3f3a92d7b
@metamask-previews/chain-agnostic-permission@1.5.0-preview-3f3a92d7b
@metamask-previews/claims-controller@0.5.0-preview-3f3a92d7b
@metamask-previews/client-controller@1.0.1-preview-3f3a92d7b
@metamask-previews/compliance-controller@1.0.2-preview-3f3a92d7b
@metamask-previews/composable-controller@12.0.1-preview-3f3a92d7b
@metamask-previews/config-registry-controller@0.2.0-preview-3f3a92d7b
@metamask-previews/connectivity-controller@0.2.0-preview-3f3a92d7b
@metamask-previews/controller-utils@11.20.0-preview-3f3a92d7b
@metamask-previews/core-backend@6.2.1-preview-3f3a92d7b
@metamask-previews/delegation-controller@2.1.0-preview-3f3a92d7b
@metamask-previews/earn-controller@11.2.1-preview-3f3a92d7b
@metamask-previews/eip-5792-middleware@3.0.2-preview-3f3a92d7b
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-3f3a92d7b
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-3f3a92d7b
@metamask-previews/ens-controller@19.1.1-preview-3f3a92d7b
@metamask-previews/eth-block-tracker@15.0.1-preview-3f3a92d7b
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-3f3a92d7b
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-3f3a92d7b
@metamask-previews/foundryup@1.0.1-preview-3f3a92d7b
@metamask-previews/gas-fee-controller@26.1.1-preview-3f3a92d7b
@metamask-previews/gator-permissions-controller@3.0.0-preview-3f3a92d7b
@metamask-previews/geolocation-controller@0.1.2-preview-3f3a92d7b
@metamask-previews/json-rpc-engine@10.2.4-preview-3f3a92d7b
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-3f3a92d7b
@metamask-previews/keyring-controller@25.1.1-preview-3f3a92d7b
@metamask-previews/logging-controller@8.0.1-preview-3f3a92d7b
@metamask-previews/message-manager@14.1.1-preview-3f3a92d7b
@metamask-previews/messenger@1.0.0-preview-3f3a92d7b
@metamask-previews/multichain-account-service@8.0.1-preview-3f3a92d7b
@metamask-previews/multichain-api-middleware@2.0.0-preview-3f3a92d7b
@metamask-previews/multichain-network-controller@3.0.6-preview-3f3a92d7b
@metamask-previews/multichain-transactions-controller@7.0.4-preview-3f3a92d7b
@metamask-previews/name-controller@9.1.1-preview-3f3a92d7b
@metamask-previews/network-controller@30.0.1-preview-3f3a92d7b
@metamask-previews/network-enablement-controller@5.0.1-preview-3f3a92d7b
@metamask-previews/notification-services-controller@23.0.1-preview-3f3a92d7b
@metamask-previews/permission-controller@12.3.0-preview-3f3a92d7b
@metamask-previews/permission-log-controller@5.1.0-preview-3f3a92d7b
@metamask-previews/perps-controller@2.0.0-preview-3f3a92d7b
@metamask-previews/phishing-controller@17.1.0-preview-3f3a92d7b
@metamask-previews/polling-controller@16.0.4-preview-3f3a92d7b
@metamask-previews/preferences-controller@23.1.0-preview-3f3a92d7b
@metamask-previews/profile-metrics-controller@3.1.2-preview-3f3a92d7b
@metamask-previews/profile-sync-controller@28.0.2-preview-3f3a92d7b
@metamask-previews/ramps-controller@12.1.0-preview-3f3a92d7b
@metamask-previews/rate-limit-controller@7.0.1-preview-3f3a92d7b
@metamask-previews/react-data-query@0.2.0-preview-3f3a92d7b
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-3f3a92d7b
@metamask-previews/sample-controllers@4.0.4-preview-3f3a92d7b
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-3f3a92d7b
@metamask-previews/selected-network-controller@26.1.0-preview-3f3a92d7b
@metamask-previews/shield-controller@5.1.0-preview-3f3a92d7b
@metamask-previews/signature-controller@39.1.2-preview-3f3a92d7b
@metamask-previews/social-controllers@0.0.0-preview-3f3a92d7b
@metamask-previews/storage-service@1.0.1-preview-3f3a92d7b
@metamask-previews/subscription-controller@6.1.1-preview-3f3a92d7b
@metamask-previews/transaction-controller@63.3.1-preview-3f3a92d7b
@metamask-previews/transaction-pay-controller@19.0.1-preview-3f3a92d7b
@metamask-previews/user-operation-controller@41.1.1-preview-3f3a92d7b

@maxime-oe
Copy link
Copy Markdown
Contributor Author

@matthewwalsh0 testing with preview build, it looks like things work as expected for Extension. Is this PR good to go ?

@maxime-oe maxime-oe enabled auto-merge March 31, 2026 19:48
@maxime-oe
Copy link
Copy Markdown
Contributor Author

Setting to "merge when ready" in case it gets approved and conflicts arise so I don't have to ask re-approve

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.

4 participants