From 349fcd58be36136a5563033d3e90adb736a013b0 Mon Sep 17 00:00:00 2001 From: Florin Dzeladini Date: Wed, 5 Nov 2025 17:08:25 +0100 Subject: [PATCH 1/5] chore: add is gasFeeSponsored field is transaction batch params --- packages/bridge-status-controller/src/utils/transaction.ts | 2 ++ packages/transaction-controller/src/types.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/packages/bridge-status-controller/src/utils/transaction.ts b/packages/bridge-status-controller/src/utils/transaction.ts index e60dce0a756..ee9381c4282 100644 --- a/packages/bridge-status-controller/src/utils/transaction.ts +++ b/packages/bridge-status-controller/src/utils/transaction.ts @@ -300,6 +300,7 @@ export const getAddTransactionBatchParams = async ({ feeData: { txFee }, gasIncluded, gasIncluded7702, + gasSponsored, }, sentAmount, toTokenAmount, @@ -393,6 +394,7 @@ export const getAddTransactionBatchParams = async ({ >[0] = { disable7702, isGasFeeIncluded: Boolean(gasIncluded7702), + isGasFeeSponsored: Boolean(gasSponsored), networkClientId, requireApproval, origin: 'metamask', diff --git a/packages/transaction-controller/src/types.ts b/packages/transaction-controller/src/types.ts index 16ade4dbe8a..6b5c28bbf70 100644 --- a/packages/transaction-controller/src/types.ts +++ b/packages/transaction-controller/src/types.ts @@ -1726,6 +1726,9 @@ export type TransactionBatchRequest = { /** Whether MetaMask will be compensated for the gas fee by the transaction. */ isGasFeeIncluded?: boolean; + /** Whether MetaMask will sponsor the gas fee for the transaction. */ + isGasFeeSponsored?: boolean; + /** ID of the network client to submit the transaction. */ networkClientId: NetworkClientId; From c682f66ea3ed0453bbd689f7a971c68fd9d05ebc Mon Sep 17 00:00:00 2001 From: Florin Dzeladini Date: Thu, 6 Nov 2025 09:53:27 +0100 Subject: [PATCH 2/5] chore: update --- packages/bridge-status-controller/CHANGELOG.md | 4 ++++ .../src/__snapshots__/bridge-status-controller.test.ts.snap | 2 ++ packages/transaction-controller/CHANGELOG.md | 1 + packages/transaction-controller/src/TransactionController.ts | 2 ++ packages/transaction-controller/src/types.ts | 3 +++ packages/transaction-controller/src/utils/batch.ts | 1 + 6 files changed, 13 insertions(+) diff --git a/packages/bridge-status-controller/CHANGELOG.md b/packages/bridge-status-controller/CHANGELOG.md index 0448775d65a..05c80364a62 100644 --- a/packages/bridge-status-controller/CHANGELOG.md +++ b/packages/bridge-status-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add isGasFeeSponsored field in transaction batch params ([#6978](https://github.com/MetaMask/core/pull/6978)) + ## [59.0.0] ### Changed diff --git a/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap b/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap index 73eb5e665d0..862bbfc80da 100644 --- a/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap +++ b/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap @@ -1252,6 +1252,7 @@ Array [ "disable7702": true, "from": "0xaccount1", "isGasFeeIncluded": false, + "isGasFeeSponsored": false, "networkClientId": "arbitrum", "origin": "metamask", "requireApproval": false, @@ -2952,6 +2953,7 @@ Array [ "disable7702": true, "from": "0xaccount1", "isGasFeeIncluded": false, + "isGasFeeSponsored": false, "networkClientId": "arbitrum", "origin": "metamask", "requireApproval": false, diff --git a/packages/transaction-controller/CHANGELOG.md b/packages/transaction-controller/CHANGELOG.md index ccb7cc1d150..8d749e6a22b 100644 --- a/packages/transaction-controller/CHANGELOG.md +++ b/packages/transaction-controller/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Calculate operator fee for OP stack networks and include it in `layer1GasFee` ([#6979](https://github.com/MetaMask/core/pull/6979)) +- Add support for `isGasFeeSponsored` field in transaction batch and add transaction options ([#6978](https://github.com/MetaMask/core/pull/6978)) ## [61.1.0] diff --git a/packages/transaction-controller/src/TransactionController.ts b/packages/transaction-controller/src/TransactionController.ts index c385bd4a62a..b89a718bafc 100644 --- a/packages/transaction-controller/src/TransactionController.ts +++ b/packages/transaction-controller/src/TransactionController.ts @@ -1216,6 +1216,7 @@ export class TransactionController extends BaseController< deviceConfirmedOn, disableGasBuffer, isGasFeeIncluded, + isGasFeeSponsored, method, nestedTransactions, networkClientId, @@ -1315,6 +1316,7 @@ export class TransactionController extends BaseController< disableGasBuffer, id: random(), isGasFeeIncluded, + isGasFeeSponsored, isFirstTimeInteraction: undefined, nestedTransactions, networkClientId, diff --git a/packages/transaction-controller/src/types.ts b/packages/transaction-controller/src/types.ts index 6b5c28bbf70..b23a567785f 100644 --- a/packages/transaction-controller/src/types.ts +++ b/packages/transaction-controller/src/types.ts @@ -2064,6 +2064,9 @@ export type AddTransactionOptions = { /** Whether MetaMask will be compensated for the gas fee by the transaction. */ isGasFeeIncluded?: boolean; + /** Whether MetaMask will sponsor the gas fee for the transaction. */ + isGasFeeSponsored?: boolean; + /** RPC method that requested the transaction. */ method?: string; diff --git a/packages/transaction-controller/src/utils/batch.ts b/packages/transaction-controller/src/utils/batch.ts index fbc27322937..3e5ead32db8 100644 --- a/packages/transaction-controller/src/utils/batch.ts +++ b/packages/transaction-controller/src/utils/batch.ts @@ -401,6 +401,7 @@ async function addTransactionBatchWith7702( const { result } = await addTransaction(txParams, { batchId, isGasFeeIncluded: userRequest.isGasFeeIncluded, + isGasFeeSponsored: userRequest.isGasFeeSponsored, nestedTransactions, networkClientId, origin, From c307071c792f2d8c0c23f9d9033928281627f1b3 Mon Sep 17 00:00:00 2001 From: Florin Dzeladini Date: Thu, 6 Nov 2025 09:59:53 +0100 Subject: [PATCH 3/5] chore: update changelog --- packages/bridge-status-controller/CHANGELOG.md | 2 +- packages/transaction-controller/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bridge-status-controller/CHANGELOG.md b/packages/bridge-status-controller/CHANGELOG.md index 05c80364a62..617e4af3005 100644 --- a/packages/bridge-status-controller/CHANGELOG.md +++ b/packages/bridge-status-controller/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Add isGasFeeSponsored field in transaction batch params ([#6978](https://github.com/MetaMask/core/pull/6978)) +- Add isGasFeeSponsored field in transaction batch params ([#7064](https://github.com/MetaMask/core/pull/7064)) ## [59.0.0] diff --git a/packages/transaction-controller/CHANGELOG.md b/packages/transaction-controller/CHANGELOG.md index 8d749e6a22b..42270b3aa93 100644 --- a/packages/transaction-controller/CHANGELOG.md +++ b/packages/transaction-controller/CHANGELOG.md @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Calculate operator fee for OP stack networks and include it in `layer1GasFee` ([#6979](https://github.com/MetaMask/core/pull/6979)) -- Add support for `isGasFeeSponsored` field in transaction batch and add transaction options ([#6978](https://github.com/MetaMask/core/pull/6978)) +- Add support for `isGasFeeSponsored` field in transaction batch and add transaction options ([#7064](https://github.com/MetaMask/core/pull/7064)) ## [61.1.0] From 0a5a3ad4106a7953ee764bec7347ab97ff894a0e Mon Sep 17 00:00:00 2001 From: Florin Dzeladini Date: Fri, 7 Nov 2025 13:48:31 +0100 Subject: [PATCH 4/5] fix: test --- .../transaction-controller/src/TransactionController.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/transaction-controller/src/TransactionController.test.ts b/packages/transaction-controller/src/TransactionController.test.ts index bb18eb1a17d..e9c865d50e7 100644 --- a/packages/transaction-controller/src/TransactionController.test.ts +++ b/packages/transaction-controller/src/TransactionController.test.ts @@ -1692,6 +1692,7 @@ describe('TransactionController', () => { id: expect.any(String), isFirstTimeInteraction: undefined, isGasFeeIncluded: undefined, + isGasFeeSponsored: undefined, nestedTransactions: undefined, networkClientId: NETWORK_CLIENT_ID_MOCK, origin: undefined, From faf89cc49c42b7b34f416675e198989cefb498a0 Mon Sep 17 00:00:00 2001 From: Florin Dzeladini Date: Fri, 7 Nov 2025 14:42:32 +0100 Subject: [PATCH 5/5] chore: test added isGasFeeSponsored flag check --- .../src/utils/batch.test.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/transaction-controller/src/utils/batch.test.ts b/packages/transaction-controller/src/utils/batch.test.ts index 313736e6364..14834f3944a 100644 --- a/packages/transaction-controller/src/utils/batch.test.ts +++ b/packages/transaction-controller/src/utils/batch.test.ts @@ -810,6 +810,33 @@ describe('Batch Utils', () => { }, ); + it.each([true, false])( + 'passes isGasFeeSponsored flag (%s) through to addTransaction when provided (EIP-7702 path)', + async (isGasFeeSponsored) => { + isAccountUpgradedToEIP7702Mock.mockResolvedValueOnce({ + delegationAddress: undefined, + isSupported: true, + }); + + addTransactionMock.mockResolvedValueOnce({ + transactionMeta: TRANSACTION_META_MOCK, + result: Promise.resolve(''), + }); + + request.request.isGasFeeSponsored = isGasFeeSponsored; + + await addTransactionBatch(request); + + expect(addTransactionMock).toHaveBeenCalledTimes(1); + expect(addTransactionMock).toHaveBeenCalledWith( + expect.any(Object), + expect.objectContaining({ + isGasFeeSponsored, + }), + ); + }, + ); + describe('validates security', () => { it('using transaction params', async () => { isAccountUpgradedToEIP7702Mock.mockResolvedValueOnce({