Skip to content

feat(transaction-pay-controller): send v2 metamask envelope and alternate caveats for subsidized executes - #9298

Merged
matthewwalsh0 merged 6 commits into
mainfrom
feat/pay-subsidized-submit
Jul 8, 2026
Merged

feat(transaction-pay-controller): send v2 metamask envelope and alternate caveats for subsidized executes#9298
matthewwalsh0 merged 6 commits into
mainfrom
feat/pay-subsidized-submit

Conversation

@matthewwalsh0

@matthewwalsh0 matthewwalsh0 commented Jun 28, 2026

Copy link
Copy Markdown
Member

Explanation

What

The Relay /execute path now requires a signed metamask envelope and opts into execute v2. Execute submissions carry metamask: { isSubsidized, quoteRequest, signature } — the HMAC token minted by the intents-api — and are refused without it. The getDelegationTransaction callback gains an optional isSubsidized flag so the delegation can select the subsidized caveat set.

How

  • Signed execute envelope. RelayExecuteRequest carries metamask: { isSubsidized, quoteRequest, signature }; submitViaRelayExecute throws if metamask.signature is absent.
  • Execute v2 opt-in. Execute quote requests send metamask.executeVersion: 2.
  • isSubsidized on the delegation callback. getDelegationTransaction accepts isSubsidized?: boolean (derived from quote.fees.subsidized), letting the callback select the subsidized caveat set.
  • Regenerated execute txParams. Before requesting the delegation transaction, txParams (to, value, data) are rebuilt from the current quote's nested transactions — a single nested transaction is used directly; multiple are wrapped into an atomic ERC-7821 batch via the newly exported generateEIP7702BatchTransaction from @metamask/transaction-controller.
  • Server requestId reconciliation. After submit, the first-step requestId is replaced with the server-returned id via a mutable clone of quote.original (state is frozen by Immer), so completion polling targets the re-quoted request.

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

High Risk
Breaking callback/API changes and signed execute envelopes affect money movement and EIP-7702 delegation; incorrect txParams or caveat selection could mis-submit or fail subsidized executes.

Overview
Updates the Relay EIP-7702 /execute path for execute v2: quote requests on enabled chains now send metamask: { executeVersion: 2 }, and execute POSTs require a signed metamask envelope (isSubsidized, quoteRequest, signature) or submission fails.

getDelegationTransaction gains an optional isSubsidized flag (from subsidized quote fees) so clients can pick the right delegation caveat set. Execute flow is moved into submitViaRelayExecute, which rebuilds txParams from the current quote calls (not stale meta)—one call used as-is, multiple wrapped via newly exported generateEIP7702BatchTransaction from @metamask/transaction-controller—then posts delegation data to Relay. After execute, the first step requestId is updated from the server response via a mutable clone of quote.original so status polling stays correct.

Minor relay submit tweaks: optional EIP-1559 fields when missing from quote data, and execute tests consolidated into the new module.

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

@matthewwalsh0 matthewwalsh0 changed the title feat(transaction-pay-controller): add subsidized Relay submit via /relay/subsidize feat(transaction-pay-controller): subsidized submit Jun 28, 2026
@matthewwalsh0
matthewwalsh0 force-pushed the feat/pay-subsidized-submit branch 2 times, most recently from 7aa8583 to f2d9f00 Compare July 3, 2026 23:04
@matthewwalsh0 matthewwalsh0 changed the title feat(transaction-pay-controller): subsidized submit feat(transaction-pay-controller): add subsidized Relay execute support Jul 3, 2026
@matthewwalsh0 matthewwalsh0 changed the title feat(transaction-pay-controller): add subsidized Relay execute support feat(transaction-pay-controller): send v2 metamask envelope and alternate caveats on subsidized Relay executes Jul 3, 2026
@matthewwalsh0

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Jul 4, 2026

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.3-preview-8b02acdf0
@metamask-previews/accounts-controller@39.0.4-preview-8b02acdf0
@metamask-previews/address-book-controller@7.1.2-preview-8b02acdf0
@metamask-previews/ai-controllers@0.7.0-preview-8b02acdf0
@metamask-previews/analytics-controller@1.2.1-preview-8b02acdf0
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-8b02acdf0
@metamask-previews/announcement-controller@8.1.0-preview-8b02acdf0
@metamask-previews/app-metadata-controller@2.0.1-preview-8b02acdf0
@metamask-previews/approval-controller@9.0.2-preview-8b02acdf0
@metamask-previews/assets-controller@10.0.1-preview-8b02acdf0
@metamask-previews/assets-controllers@109.3.0-preview-8b02acdf0
@metamask-previews/authenticated-user-storage@3.0.0-preview-8b02acdf0
@metamask-previews/base-controller@9.1.0-preview-8b02acdf0
@metamask-previews/base-data-service@0.1.3-preview-8b02acdf0
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-8b02acdf0
@metamask-previews/bridge-controller@77.3.2-preview-8b02acdf0
@metamask-previews/bridge-status-controller@74.0.2-preview-8b02acdf0
@metamask-previews/build-utils@3.0.4-preview-8b02acdf0
@metamask-previews/chain-agnostic-permission@1.6.2-preview-8b02acdf0
@metamask-previews/chomp-api-service@3.1.0-preview-8b02acdf0
@metamask-previews/claims-controller@0.5.3-preview-8b02acdf0
@metamask-previews/client-controller@1.0.1-preview-8b02acdf0
@metamask-previews/client-utils@0.0.0-preview-8b02acdf0
@metamask-previews/compliance-controller@2.1.0-preview-8b02acdf0
@metamask-previews/composable-controller@12.0.1-preview-8b02acdf0
@metamask-previews/config-registry-controller@0.4.1-preview-8b02acdf0
@metamask-previews/connectivity-controller@0.2.0-preview-8b02acdf0
@metamask-previews/controller-utils@12.3.0-preview-8b02acdf0
@metamask-previews/core-backend@6.5.0-preview-8b02acdf0
@metamask-previews/delegation-controller@3.0.2-preview-8b02acdf0
@metamask-previews/earn-controller@12.2.2-preview-8b02acdf0
@metamask-previews/eip-5792-middleware@3.0.4-preview-8b02acdf0
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-8b02acdf0
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-8b02acdf0
@metamask-previews/ens-controller@19.1.5-preview-8b02acdf0
@metamask-previews/eth-block-tracker@15.0.1-preview-8b02acdf0
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-8b02acdf0
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-8b02acdf0
@metamask-previews/foundryup@1.0.1-preview-8b02acdf0
@metamask-previews/gas-fee-controller@26.2.4-preview-8b02acdf0
@metamask-previews/gator-permissions-controller@4.2.2-preview-8b02acdf0
@metamask-previews/geolocation-controller@0.1.3-preview-8b02acdf0
@metamask-previews/java-tron-up@1.0.0-preview-8b02acdf0
@metamask-previews/json-rpc-engine@10.5.0-preview-8b02acdf0
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-8b02acdf0
@metamask-previews/keyring-controller@27.1.0-preview-8b02acdf0
@metamask-previews/local-node-utils@1.0.0-preview-8b02acdf0
@metamask-previews/logging-controller@8.0.2-preview-8b02acdf0
@metamask-previews/message-manager@14.1.2-preview-8b02acdf0
@metamask-previews/messenger@1.2.0-preview-8b02acdf0
@metamask-previews/messenger-cli@0.2.0-preview-8b02acdf0
@metamask-previews/money-account-balance-service@2.1.2-preview-8b02acdf0
@metamask-previews/money-account-controller@0.3.3-preview-8b02acdf0
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-8b02acdf0
@metamask-previews/multichain-account-service@11.1.0-preview-8b02acdf0
@metamask-previews/multichain-api-middleware@4.0.0-preview-8b02acdf0
@metamask-previews/multichain-network-controller@3.2.1-preview-8b02acdf0
@metamask-previews/multichain-transactions-controller@7.1.1-preview-8b02acdf0
@metamask-previews/name-controller@9.1.2-preview-8b02acdf0
@metamask-previews/network-controller@34.0.0-preview-8b02acdf0
@metamask-previews/network-enablement-controller@5.4.1-preview-8b02acdf0
@metamask-previews/notification-services-controller@24.3.0-preview-8b02acdf0
@metamask-previews/passkey-controller@2.0.1-preview-8b02acdf0
@metamask-previews/permission-controller@13.1.1-preview-8b02acdf0
@metamask-previews/permission-log-controller@5.1.0-preview-8b02acdf0
@metamask-previews/perps-controller@9.2.0-preview-8b02acdf0
@metamask-previews/phishing-controller@17.2.0-preview-8b02acdf0
@metamask-previews/platform-api-docs@0.0.0-preview-8b02acdf0
@metamask-previews/polling-controller@16.0.8-preview-8b02acdf0
@metamask-previews/preferences-controller@23.1.0-preview-8b02acdf0
@metamask-previews/profile-metrics-controller@4.0.1-preview-8b02acdf0
@metamask-previews/profile-sync-controller@28.2.0-preview-8b02acdf0
@metamask-previews/ramps-controller@15.0.0-preview-8b02acdf0
@metamask-previews/rate-limit-controller@7.0.1-preview-8b02acdf0
@metamask-previews/react-data-query@0.2.1-preview-8b02acdf0
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-8b02acdf0
@metamask-previews/sample-controllers@5.0.3-preview-8b02acdf0
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-8b02acdf0
@metamask-previews/selected-network-controller@26.1.5-preview-8b02acdf0
@metamask-previews/shield-controller@5.1.2-preview-8b02acdf0
@metamask-previews/signature-controller@39.2.7-preview-8b02acdf0
@metamask-previews/smart-transactions-controller@24.2.4-preview-8b02acdf0
@metamask-previews/snap-account-service@1.0.0-preview-8b02acdf0
@metamask-previews/social-controllers@2.3.1-preview-8b02acdf0
@metamask-previews/solana-test-validator-up@1.0.0-preview-8b02acdf0
@metamask-previews/stellar-quickstart-up@0.0.0-preview-8b02acdf0
@metamask-previews/storage-service@1.0.2-preview-8b02acdf0
@metamask-previews/subscription-controller@6.2.0-preview-8b02acdf0
@metamask-previews/transaction-controller@68.2.2-preview-8b02acdf0
@metamask-previews/transaction-pay-controller@23.17.4-preview-8b02acdf0
@metamask-previews/user-operation-controller@41.2.6-preview-8b02acdf0
@metamask-previews/wallet@6.0.0-preview-8b02acdf0
@metamask-previews/wallet-cli@0.0.0-preview-8b02acdf0

@matthewwalsh0 matthewwalsh0 changed the title feat(transaction-pay-controller): send v2 metamask envelope and alternate caveats on subsidized Relay executes feat(transaction-pay-controller): send v2 metamask envelope and alternate caveats for subsidized executes Jul 4, 2026
@matthewwalsh0
matthewwalsh0 force-pushed the feat/pay-subsidized-submit branch 3 times, most recently from 0b1ee61 to 81662a8 Compare July 6, 2026 13:01
@matthewwalsh0

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Jul 6, 2026

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.3-preview-9a5366037
@metamask-previews/accounts-controller@39.0.4-preview-9a5366037
@metamask-previews/address-book-controller@7.1.2-preview-9a5366037
@metamask-previews/ai-controllers@0.7.0-preview-9a5366037
@metamask-previews/analytics-controller@1.2.1-preview-9a5366037
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-9a5366037
@metamask-previews/announcement-controller@8.1.0-preview-9a5366037
@metamask-previews/app-metadata-controller@2.0.1-preview-9a5366037
@metamask-previews/approval-controller@9.0.2-preview-9a5366037
@metamask-previews/assets-controller@10.0.1-preview-9a5366037
@metamask-previews/assets-controllers@109.3.0-preview-9a5366037
@metamask-previews/authenticated-user-storage@3.0.0-preview-9a5366037
@metamask-previews/base-controller@9.1.0-preview-9a5366037
@metamask-previews/base-data-service@0.1.3-preview-9a5366037
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-9a5366037
@metamask-previews/bridge-controller@77.3.2-preview-9a5366037
@metamask-previews/bridge-status-controller@74.0.2-preview-9a5366037
@metamask-previews/build-utils@3.0.4-preview-9a5366037
@metamask-previews/chain-agnostic-permission@1.6.2-preview-9a5366037
@metamask-previews/chomp-api-service@3.1.0-preview-9a5366037
@metamask-previews/claims-controller@0.5.3-preview-9a5366037
@metamask-previews/client-controller@1.0.1-preview-9a5366037
@metamask-previews/client-utils@0.0.0-preview-9a5366037
@metamask-previews/compliance-controller@2.1.0-preview-9a5366037
@metamask-previews/composable-controller@12.0.1-preview-9a5366037
@metamask-previews/config-registry-controller@0.4.1-preview-9a5366037
@metamask-previews/connectivity-controller@0.2.0-preview-9a5366037
@metamask-previews/controller-utils@12.3.0-preview-9a5366037
@metamask-previews/core-backend@6.5.0-preview-9a5366037
@metamask-previews/delegation-controller@3.0.2-preview-9a5366037
@metamask-previews/earn-controller@12.2.2-preview-9a5366037
@metamask-previews/eip-5792-middleware@3.0.4-preview-9a5366037
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-9a5366037
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-9a5366037
@metamask-previews/ens-controller@19.1.5-preview-9a5366037
@metamask-previews/eth-block-tracker@15.0.1-preview-9a5366037
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-9a5366037
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-9a5366037
@metamask-previews/foundryup@1.0.1-preview-9a5366037
@metamask-previews/gas-fee-controller@26.2.4-preview-9a5366037
@metamask-previews/gator-permissions-controller@4.2.2-preview-9a5366037
@metamask-previews/geolocation-controller@0.1.3-preview-9a5366037
@metamask-previews/java-tron-up@1.0.0-preview-9a5366037
@metamask-previews/json-rpc-engine@10.5.0-preview-9a5366037
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-9a5366037
@metamask-previews/keyring-controller@27.1.0-preview-9a5366037
@metamask-previews/local-node-utils@1.0.0-preview-9a5366037
@metamask-previews/logging-controller@8.0.2-preview-9a5366037
@metamask-previews/message-manager@14.1.2-preview-9a5366037
@metamask-previews/messenger@1.2.0-preview-9a5366037
@metamask-previews/messenger-cli@0.2.0-preview-9a5366037
@metamask-previews/money-account-balance-service@2.1.2-preview-9a5366037
@metamask-previews/money-account-controller@0.3.3-preview-9a5366037
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-9a5366037
@metamask-previews/multichain-account-service@11.1.0-preview-9a5366037
@metamask-previews/multichain-api-middleware@4.0.0-preview-9a5366037
@metamask-previews/multichain-network-controller@3.2.1-preview-9a5366037
@metamask-previews/multichain-transactions-controller@7.1.1-preview-9a5366037
@metamask-previews/name-controller@9.1.2-preview-9a5366037
@metamask-previews/network-controller@34.0.0-preview-9a5366037
@metamask-previews/network-enablement-controller@5.4.1-preview-9a5366037
@metamask-previews/notification-services-controller@24.3.0-preview-9a5366037
@metamask-previews/passkey-controller@2.0.1-preview-9a5366037
@metamask-previews/permission-controller@13.1.1-preview-9a5366037
@metamask-previews/permission-log-controller@5.1.0-preview-9a5366037
@metamask-previews/perps-controller@9.2.0-preview-9a5366037
@metamask-previews/phishing-controller@17.2.0-preview-9a5366037
@metamask-previews/platform-api-docs@0.0.0-preview-9a5366037
@metamask-previews/polling-controller@16.0.8-preview-9a5366037
@metamask-previews/preferences-controller@23.1.0-preview-9a5366037
@metamask-previews/profile-metrics-controller@4.0.1-preview-9a5366037
@metamask-previews/profile-sync-controller@28.2.0-preview-9a5366037
@metamask-previews/ramps-controller@15.0.0-preview-9a5366037
@metamask-previews/rate-limit-controller@7.0.1-preview-9a5366037
@metamask-previews/react-data-query@0.2.1-preview-9a5366037
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-9a5366037
@metamask-previews/sample-controllers@5.0.3-preview-9a5366037
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-9a5366037
@metamask-previews/selected-network-controller@26.1.5-preview-9a5366037
@metamask-previews/shield-controller@5.1.2-preview-9a5366037
@metamask-previews/signature-controller@39.2.7-preview-9a5366037
@metamask-previews/smart-transactions-controller@24.2.4-preview-9a5366037
@metamask-previews/snap-account-service@1.0.0-preview-9a5366037
@metamask-previews/social-controllers@2.3.1-preview-9a5366037
@metamask-previews/solana-test-validator-up@1.0.0-preview-9a5366037
@metamask-previews/stellar-quickstart-up@0.0.0-preview-9a5366037
@metamask-previews/storage-service@1.0.2-preview-9a5366037
@metamask-previews/subscription-controller@6.2.0-preview-9a5366037
@metamask-previews/transaction-controller@68.2.2-preview-9a5366037
@metamask-previews/transaction-pay-controller@23.17.4-preview-9a5366037
@metamask-previews/user-operation-controller@41.2.6-preview-9a5366037
@metamask-previews/wallet@6.0.0-preview-9a5366037
@metamask-previews/wallet-cli@0.0.0-preview-9a5366037

@matthewwalsh0

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Jul 6, 2026

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.3-preview-b538ab03c
@metamask-previews/accounts-controller@39.0.4-preview-b538ab03c
@metamask-previews/address-book-controller@7.1.2-preview-b538ab03c
@metamask-previews/ai-controllers@0.7.0-preview-b538ab03c
@metamask-previews/analytics-controller@1.2.1-preview-b538ab03c
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-b538ab03c
@metamask-previews/announcement-controller@8.1.0-preview-b538ab03c
@metamask-previews/app-metadata-controller@2.0.1-preview-b538ab03c
@metamask-previews/approval-controller@9.0.2-preview-b538ab03c
@metamask-previews/assets-controller@10.0.1-preview-b538ab03c
@metamask-previews/assets-controllers@109.3.0-preview-b538ab03c
@metamask-previews/authenticated-user-storage@3.0.0-preview-b538ab03c
@metamask-previews/base-controller@9.1.0-preview-b538ab03c
@metamask-previews/base-data-service@0.1.3-preview-b538ab03c
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-b538ab03c
@metamask-previews/bridge-controller@77.3.2-preview-b538ab03c
@metamask-previews/bridge-status-controller@74.0.2-preview-b538ab03c
@metamask-previews/build-utils@3.0.4-preview-b538ab03c
@metamask-previews/chain-agnostic-permission@1.6.2-preview-b538ab03c
@metamask-previews/chomp-api-service@3.1.0-preview-b538ab03c
@metamask-previews/claims-controller@0.5.3-preview-b538ab03c
@metamask-previews/client-controller@1.0.1-preview-b538ab03c
@metamask-previews/client-utils@0.0.0-preview-b538ab03c
@metamask-previews/compliance-controller@2.1.0-preview-b538ab03c
@metamask-previews/composable-controller@12.0.1-preview-b538ab03c
@metamask-previews/config-registry-controller@0.4.1-preview-b538ab03c
@metamask-previews/connectivity-controller@0.2.0-preview-b538ab03c
@metamask-previews/controller-utils@12.3.0-preview-b538ab03c
@metamask-previews/core-backend@6.5.0-preview-b538ab03c
@metamask-previews/delegation-controller@3.0.2-preview-b538ab03c
@metamask-previews/earn-controller@12.2.2-preview-b538ab03c
@metamask-previews/eip-5792-middleware@3.0.4-preview-b538ab03c
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-b538ab03c
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-b538ab03c
@metamask-previews/ens-controller@19.1.5-preview-b538ab03c
@metamask-previews/eth-block-tracker@15.0.1-preview-b538ab03c
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-b538ab03c
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-b538ab03c
@metamask-previews/foundryup@1.0.1-preview-b538ab03c
@metamask-previews/gas-fee-controller@26.2.4-preview-b538ab03c
@metamask-previews/gator-permissions-controller@4.2.2-preview-b538ab03c
@metamask-previews/geolocation-controller@0.1.3-preview-b538ab03c
@metamask-previews/java-tron-up@1.0.0-preview-b538ab03c
@metamask-previews/json-rpc-engine@10.5.0-preview-b538ab03c
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-b538ab03c
@metamask-previews/keyring-controller@27.1.0-preview-b538ab03c
@metamask-previews/local-node-utils@1.0.0-preview-b538ab03c
@metamask-previews/logging-controller@8.0.2-preview-b538ab03c
@metamask-previews/message-manager@14.1.2-preview-b538ab03c
@metamask-previews/messenger@1.2.0-preview-b538ab03c
@metamask-previews/messenger-cli@0.2.0-preview-b538ab03c
@metamask-previews/money-account-balance-service@2.1.2-preview-b538ab03c
@metamask-previews/money-account-controller@0.3.3-preview-b538ab03c
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-b538ab03c
@metamask-previews/multichain-account-service@11.1.0-preview-b538ab03c
@metamask-previews/multichain-api-middleware@4.0.0-preview-b538ab03c
@metamask-previews/multichain-network-controller@3.2.1-preview-b538ab03c
@metamask-previews/multichain-transactions-controller@7.1.1-preview-b538ab03c
@metamask-previews/name-controller@9.1.2-preview-b538ab03c
@metamask-previews/network-controller@34.0.0-preview-b538ab03c
@metamask-previews/network-enablement-controller@5.4.1-preview-b538ab03c
@metamask-previews/notification-services-controller@24.3.0-preview-b538ab03c
@metamask-previews/passkey-controller@2.0.1-preview-b538ab03c
@metamask-previews/permission-controller@13.1.1-preview-b538ab03c
@metamask-previews/permission-log-controller@5.1.0-preview-b538ab03c
@metamask-previews/perps-controller@9.2.0-preview-b538ab03c
@metamask-previews/phishing-controller@17.2.0-preview-b538ab03c
@metamask-previews/platform-api-docs@0.0.0-preview-b538ab03c
@metamask-previews/polling-controller@16.0.8-preview-b538ab03c
@metamask-previews/preferences-controller@23.1.0-preview-b538ab03c
@metamask-previews/profile-metrics-controller@4.0.1-preview-b538ab03c
@metamask-previews/profile-sync-controller@28.2.0-preview-b538ab03c
@metamask-previews/ramps-controller@15.0.0-preview-b538ab03c
@metamask-previews/rate-limit-controller@7.0.1-preview-b538ab03c
@metamask-previews/react-data-query@0.2.1-preview-b538ab03c
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-b538ab03c
@metamask-previews/sample-controllers@5.0.3-preview-b538ab03c
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-b538ab03c
@metamask-previews/selected-network-controller@26.1.5-preview-b538ab03c
@metamask-previews/shield-controller@5.1.2-preview-b538ab03c
@metamask-previews/signature-controller@39.2.7-preview-b538ab03c
@metamask-previews/smart-transactions-controller@24.2.4-preview-b538ab03c
@metamask-previews/snap-account-service@1.0.0-preview-b538ab03c
@metamask-previews/social-controllers@2.3.1-preview-b538ab03c
@metamask-previews/solana-test-validator-up@1.0.0-preview-b538ab03c
@metamask-previews/stellar-quickstart-up@0.0.0-preview-b538ab03c
@metamask-previews/storage-service@1.0.2-preview-b538ab03c
@metamask-previews/subscription-controller@6.2.0-preview-b538ab03c
@metamask-previews/transaction-controller@68.2.2-preview-b538ab03c
@metamask-previews/transaction-pay-controller@23.17.4-preview-b538ab03c
@metamask-previews/user-operation-controller@41.2.6-preview-b538ab03c
@metamask-previews/wallet@6.0.0-preview-b538ab03c
@metamask-previews/wallet-cli@0.0.0-preview-b538ab03c

matthewwalsh0 added a commit to MetaMask/metamask-mobile that referenced this pull request Jul 6, 2026
…538ab03c

Preview build from MetaMask/core#9298 (feat/pay-subsidized-submit) for
testing the isSubsidized delegation flag, executeVersion: 2 quote request,
and signed metamask execute envelope end-to-end.
matthewwalsh0 added a commit to MetaMask/metamask-mobile that referenced this pull request Jul 6, 2026
…538ab03c

Preview build from MetaMask/core#9298 (feat/pay-subsidized-submit) for
testing the isSubsidized delegation flag, executeVersion: 2 quote request,
and signed metamask execute envelope end-to-end.
matthewwalsh0 added a commit to MetaMask/metamask-mobile that referenced this pull request Jul 6, 2026
…538ab03c

Preview build from MetaMask/core#9298 (feat/pay-subsidized-submit) for
testing the isSubsidized delegation flag, executeVersion: 2 quote request,
and signed metamask execute envelope end-to-end.
@matthewwalsh0
matthewwalsh0 force-pushed the feat/pay-subsidized-submit branch from e248ad2 to 380bb5c Compare July 7, 2026 12:54
@matthewwalsh0
matthewwalsh0 marked this pull request as ready for review July 7, 2026 12:54
@matthewwalsh0
matthewwalsh0 requested review from a team as code owners July 7, 2026 12:54
@matthewwalsh0

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Jul 7, 2026

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.3-preview-380bb5c
@metamask-previews/accounts-controller@39.0.4-preview-380bb5c
@metamask-previews/address-book-controller@7.1.2-preview-380bb5c
@metamask-previews/ai-controllers@0.7.0-preview-380bb5c
@metamask-previews/analytics-controller@1.2.1-preview-380bb5c
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-380bb5c
@metamask-previews/announcement-controller@8.1.0-preview-380bb5c
@metamask-previews/app-metadata-controller@2.0.1-preview-380bb5c
@metamask-previews/approval-controller@9.0.2-preview-380bb5c
@metamask-previews/assets-controller@10.0.1-preview-380bb5c
@metamask-previews/assets-controllers@109.3.0-preview-380bb5c
@metamask-previews/authenticated-user-storage@3.0.0-preview-380bb5c
@metamask-previews/base-controller@9.1.0-preview-380bb5c
@metamask-previews/base-data-service@0.1.3-preview-380bb5c
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-380bb5c
@metamask-previews/bridge-controller@77.3.2-preview-380bb5c
@metamask-previews/bridge-status-controller@74.0.2-preview-380bb5c
@metamask-previews/build-utils@3.0.4-preview-380bb5c
@metamask-previews/chain-agnostic-permission@1.7.0-preview-380bb5c
@metamask-previews/chomp-api-service@3.1.0-preview-380bb5c
@metamask-previews/claims-controller@0.5.3-preview-380bb5c
@metamask-previews/client-controller@1.0.1-preview-380bb5c
@metamask-previews/client-utils@0.0.0-preview-380bb5c
@metamask-previews/compliance-controller@2.1.0-preview-380bb5c
@metamask-previews/composable-controller@12.0.1-preview-380bb5c
@metamask-previews/config-registry-controller@0.4.1-preview-380bb5c
@metamask-previews/connectivity-controller@0.2.0-preview-380bb5c
@metamask-previews/controller-utils@12.3.0-preview-380bb5c
@metamask-previews/core-backend@6.5.0-preview-380bb5c
@metamask-previews/delegation-controller@3.0.2-preview-380bb5c
@metamask-previews/earn-controller@12.2.2-preview-380bb5c
@metamask-previews/eip-5792-middleware@3.0.4-preview-380bb5c
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-380bb5c
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-380bb5c
@metamask-previews/ens-controller@19.1.5-preview-380bb5c
@metamask-previews/eth-block-tracker@15.0.1-preview-380bb5c
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-380bb5c
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-380bb5c
@metamask-previews/foundryup@1.0.1-preview-380bb5c
@metamask-previews/gas-fee-controller@26.2.4-preview-380bb5c
@metamask-previews/gator-permissions-controller@4.2.2-preview-380bb5c
@metamask-previews/geolocation-controller@0.1.3-preview-380bb5c
@metamask-previews/java-tron-up@1.0.0-preview-380bb5c
@metamask-previews/json-rpc-engine@10.5.0-preview-380bb5c
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-380bb5c
@metamask-previews/keyring-controller@27.1.0-preview-380bb5c
@metamask-previews/local-node-utils@1.0.0-preview-380bb5c
@metamask-previews/logging-controller@8.0.2-preview-380bb5c
@metamask-previews/message-manager@14.1.2-preview-380bb5c
@metamask-previews/messenger@2.0.0-preview-380bb5c
@metamask-previews/messenger-cli@0.2.0-preview-380bb5c
@metamask-previews/money-account-api-data-service@0.0.0-preview-380bb5c
@metamask-previews/money-account-balance-service@2.1.2-preview-380bb5c
@metamask-previews/money-account-controller@0.3.3-preview-380bb5c
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-380bb5c
@metamask-previews/multichain-account-service@11.1.0-preview-380bb5c
@metamask-previews/multichain-api-middleware@4.0.1-preview-380bb5c
@metamask-previews/multichain-network-controller@3.2.1-preview-380bb5c
@metamask-previews/multichain-transactions-controller@7.1.1-preview-380bb5c
@metamask-previews/name-controller@9.1.2-preview-380bb5c
@metamask-previews/network-controller@34.0.0-preview-380bb5c
@metamask-previews/network-enablement-controller@5.4.1-preview-380bb5c
@metamask-previews/notification-services-controller@24.3.0-preview-380bb5c
@metamask-previews/passkey-controller@2.0.1-preview-380bb5c
@metamask-previews/permission-controller@13.1.1-preview-380bb5c
@metamask-previews/permission-log-controller@5.1.0-preview-380bb5c
@metamask-previews/perps-controller@9.2.1-preview-380bb5c
@metamask-previews/phishing-controller@17.2.0-preview-380bb5c
@metamask-previews/platform-api-docs@0.0.0-preview-380bb5c
@metamask-previews/polling-controller@16.0.8-preview-380bb5c
@metamask-previews/preferences-controller@23.1.0-preview-380bb5c
@metamask-previews/profile-metrics-controller@4.0.1-preview-380bb5c
@metamask-previews/profile-sync-controller@28.2.0-preview-380bb5c
@metamask-previews/ramps-controller@15.1.0-preview-380bb5c
@metamask-previews/rate-limit-controller@7.0.1-preview-380bb5c
@metamask-previews/react-data-query@0.2.1-preview-380bb5c
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-380bb5c
@metamask-previews/sample-controllers@5.0.3-preview-380bb5c
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-380bb5c
@metamask-previews/selected-network-controller@26.1.5-preview-380bb5c
@metamask-previews/shield-controller@5.1.2-preview-380bb5c
@metamask-previews/signature-controller@39.2.7-preview-380bb5c
@metamask-previews/smart-transactions-controller@24.2.4-preview-380bb5c
@metamask-previews/snap-account-service@1.0.0-preview-380bb5c
@metamask-previews/social-controllers@2.3.1-preview-380bb5c
@metamask-previews/solana-test-validator-up@1.0.0-preview-380bb5c
@metamask-previews/stellar-quickstart-up@0.0.0-preview-380bb5c
@metamask-previews/storage-service@1.0.2-preview-380bb5c
@metamask-previews/subscription-controller@6.2.0-preview-380bb5c
@metamask-previews/transaction-controller@68.2.2-preview-380bb5c
@metamask-previews/transaction-pay-controller@23.17.4-preview-380bb5c
@metamask-previews/user-operation-controller@41.2.6-preview-380bb5c
@metamask-previews/wallet@7.0.0-preview-380bb5c
@metamask-previews/wallet-cli@0.0.0-preview-380bb5c

matthewwalsh0 added a commit to MetaMask/metamask-mobile that referenced this pull request Jul 7, 2026
…538ab03c

Preview build from MetaMask/core#9298 (feat/pay-subsidized-submit) for
testing the isSubsidized delegation flag, executeVersion: 2 quote request,
and signed metamask execute envelope end-to-end.
@matthewwalsh0
matthewwalsh0 requested a review from OGPoyraz July 8, 2026 11:00
OGPoyraz
OGPoyraz previously approved these changes Jul 8, 2026
… callback and signed metamask envelope for Relay executes

- Add optional isSubsidized flag to GetDelegationTransactionCallback
- Send signed metamask envelope (executeVersion: 2) for Relay executes; refuse without HMAC signature
- Derive isSubsidized from quote.fees.subsidized.amountUsd
- Reconcile server requestId after JIT re-quote via mutable clone of frozen quote.original
- Extract submitViaRelayExecute into relay-submit-execute.ts
- Tolerate undefined maxFeePerGas/maxPriorityFeePerGas in normalizeParams
…utcome, derive execute error prefix

- Set metamask.executeVersion: 2 on Relay execute quote requests so intents-api activates the v2 subsidized flow (was a dead type field)
- Restore shared RelayCompletionOutcome import from ./types; remove duplicate local definition in relay-submit.ts
- Use RELAY_EXECUTE_ERROR_PREFIX constant in execute throws instead of hardcoding the 'Relay: Execute: ' literal; outer wrapper composes the 'Relay: ' prefix
- Wrap submitViaRelayExecute body in a single try/catch that applies
  RELAY_EXECUTE_ERROR_PREFIX via prefixError, instead of prefixing each
  throw individually
- Plain error messages in the inner helpers; remove the redundant
  inner try/catch around submitRelayExecute
…rent quote

Build the delegation transaction's txParams (to, value, data) from the current
quote's nested transactions before requesting the delegation transaction on
Relay executes, instead of spreading potentially stale txParams from a previous
quote. Single nested transaction is used directly; multiple are wrapped into an
atomic ERC-7821 batch.

Also export generateEIP7702BatchTransaction from @metamask/transaction-controller
to build the ERC-7821 execute(mode, calls) batch.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

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.

Reviewed by Cursor Bugbot for commit fd072cb. Configure here.

};
}

/**

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Subsidized flag omitted prepended delegation

Medium Severity

For subsidized Relay execute with a post-quote account override, buildDelegatedOriginalParams still calls getDelegationTransaction without isSubsidized, while the later execute path passes isSubsidized: true. The prepended redemption calldata can then disagree with the subsidized caveat set used for the outer execute delegation.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit fd072cb. Configure here.

@matthewwalsh0
matthewwalsh0 requested a review from OGPoyraz July 8, 2026 15:26
@matthewwalsh0
matthewwalsh0 added this pull request to the merge queue Jul 8, 2026
Merged via the queue into main with commit 4b63fe6 Jul 8, 2026
417 checks passed
@matthewwalsh0
matthewwalsh0 deleted the feat/pay-subsidized-submit branch July 8, 2026 16:13
@OGPoyraz OGPoyraz mentioned this pull request Jul 10, 2026
4 tasks
pull Bot pushed a commit to dmrazzy/core that referenced this pull request Jul 10, 2026
## Explanation

Release `1111.0.0` with version bumps for:

- **`@metamask/transaction-controller`** `68.3.0` → `68.4.0` (minor)
- **`@metamask/transaction-pay-controller`** `24.0.0` → `24.0.1` (patch)

### `@metamask/transaction-controller@68.4.0`

#### Added

- Export `generateEIP7702BatchTransaction` utility for building an
ERC-7821 `execute(mode, calls)` batch transaction from a list of nested
transactions ([MetaMask#9298](MetaMask#9298))

### `@metamask/transaction-pay-controller@24.0.1`

#### Changed

- Bump `@metamask/assets-controller` from `^10.1.0` to `^10.2.0`
([MetaMask#9450](MetaMask#9450))
- Bump `@metamask/assets-controllers` from `^109.3.1` to `^109.4.0`
([MetaMask#9450](MetaMask#9450))
- Bump `@metamask/transaction-controller` from `^68.3.0` to `^68.4.0`
([MetaMask#9456](MetaMask#9456))

### Dependency updates

15 packages had their `@metamask/transaction-controller` dependency
range updated from `^68.3.0` to `^68.4.0`, with corresponding changelog
entries under `[Unreleased]` (`earn-controller` and `perps-controller`
are omitted as they only consume `transaction-controller` as a
`devDependency` — matching precedent from prior releases).

## References

- [MetaMask#9298](MetaMask#9298) — Export
`generateEIP7702BatchTransaction` (transaction-controller)
- [MetaMask#9450](MetaMask#9450) — Bump
assets-controller/assets-controllers (transaction-pay-controller)

## 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
- [x] I've communicated my changes to consumers by [updating changelogs
for packages I've
changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md)
- [ ] I've introduced [breaking
changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md)
in this PR and have prepared draft pull requests for clients and
consumer packages to resolve them

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> The change propagates a new transaction-controller minor across many
packages that touch transaction flows; 68.4.0 is additive but wide blast
radius warrants careful consumer integration testing.
> 
> **Overview**
> **Monorepo release `1111.0.0`** that cuts
**`@metamask/transaction-controller` `68.4.0`** and
**`@metamask/transaction-pay-controller` `24.0.1`**, and aligns
dependents on the new transaction-controller range.
> 
> **`@metamask/transaction-controller@68.4.0`** documents and ships the
**`generateEIP7702BatchTransaction`** export (ERC-7821 `execute(mode,
calls)` batch tx from nested transactions). Package version and
changelog section **`[68.4.0]`** are added; root monorepo version moves
**`1110.0.0` → `1111.0.0`**.
> 
> **Dependency sweep:** many workspace packages (assets, bridge,
client-utils, EIP-5792, gator-permissions, phishing, smart-transactions,
wallet, etc.) bump **`@metamask/transaction-controller`** from
**`^68.3.0`** to **`^68.4.0`** with matching **`[Unreleased]`**
changelog lines; **`yarn.lock`** is updated.
**`transaction-pay-controller`** patch **`24.0.1`** records the
transaction-controller bump alongside its existing asset dependency
updates.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
f98dc13. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@matthewwalsh0

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

1 similar comment
@matthewwalsh0

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@matthewwalsh0
matthewwalsh0 restored the feat/pay-subsidized-submit branch July 10, 2026 15:28
@matthewwalsh0
matthewwalsh0 deleted the feat/pay-subsidized-submit branch July 10, 2026 15:29
matthewwalsh0 added a commit to MetaMask/metamask-mobile that referenced this pull request Jul 10, 2026
…538ab03c

Preview build from MetaMask/core#9298 (feat/pay-subsidized-submit) for
testing the isSubsidized delegation flag, executeVersion: 2 quote request,
and signed metamask execute envelope end-to-end.
matthewwalsh0 added a commit to MetaMask/metamask-mobile that referenced this pull request Jul 10, 2026
…538ab03c

Preview build from MetaMask/core#9298 (feat/pay-subsidized-submit) for
testing the isSubsidized delegation flag, executeVersion: 2 quote request,
and signed metamask execute envelope end-to-end.
matthewwalsh0 added a commit to MetaMask/metamask-mobile that referenced this pull request Jul 13, 2026
…538ab03c

Preview build from MetaMask/core#9298 (feat/pay-subsidized-submit) for
testing the isSubsidized delegation flag, executeVersion: 2 quote request,
and signed metamask execute envelope end-to-end.
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