Skip to content

Adds transactionBatches into transaction controller state #5793

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 27 commits into from
May 27, 2025

Conversation

vinistevam
Copy link
Contributor

@vinistevam vinistevam commented May 13, 2025

Explanation

This PR introduces support for batch transactions in the Transaction Controller by adding a new ApprovalType and extending the state to handle TransactionBatches. These changes enable enhanced metadata management for sequential batch flows, including UI updates for gas estimation and future automation capabilities.

Changes

Controller Utils

  • Added a new ApprovalType to the enum: TransactionBatch, to support batch transactions.

Transaction Controller

  • Introduced a new state property: transactionBatches, to store metadata for transaction batches.
  • Added a private method: addBatchMetadata, responsible for populating batch-specific metadata.
  • Created a new type: TransactionBatchMeta, to manage metadata for transaction batches.
  • Add addBatchMetadata to store batch metadata and wipeTransactionBatches to clean up state after batch hook completion.
  • Update unit tests

Rationale

The introduction of TransactionBatchMeta allows for a clean separation of metadata for batch transactions, which conceptually differ from individual transactions. This ensures:

  • Accurate metadata at the time of batch creation, as TransactionMeta for individual transactions may not yet exist.
  • Future support for advanced features such as transaction simulations and dynamic gas fee updates for batches, enabling better client-side functionality and automation.

These changes lay the groundwork for improved handling of batch transactions and pave the way for future enhancements.

References

Changelog

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@vinistevam vinistevam force-pushed the feat/add-batch-transaction-approval-type branch 2 times, most recently from c3f8a6b to 49e9a89 Compare May 14, 2025 16:13
@vinistevam vinistevam marked this pull request as ready for review May 14, 2025 16:14
@vinistevam vinistevam requested review from a team as code owners May 14, 2025 16:14
@pedronfigueiredo pedronfigueiredo force-pushed the feat/add-batch-transaction-approval-type branch from 31069c4 to e62592d Compare May 14, 2025 16:24
@vinistevam vinistevam changed the title Adds and populate transactionBatches into transaction controller state Adds transactionBatches into transaction controller state May 19, 2025
@vinistevam
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

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

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "29.0.0-preview-559651c0",
  "@metamask-previews/address-book-controller": "6.0.3-preview-559651c0",
  "@metamask-previews/announcement-controller": "7.0.3-preview-559651c0",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-559651c0",
  "@metamask-previews/approval-controller": "7.1.3-preview-559651c0",
  "@metamask-previews/assets-controllers": "63.0.0-preview-559651c0",
  "@metamask-previews/base-controller": "8.0.1-preview-559651c0",
  "@metamask-previews/bridge-controller": "26.0.0-preview-559651c0",
  "@metamask-previews/bridge-status-controller": "23.0.0-preview-559651c0",
  "@metamask-previews/build-utils": "3.0.3-preview-559651c0",
  "@metamask-previews/chain-agnostic-permission": "0.7.0-preview-559651c0",
  "@metamask-previews/composable-controller": "11.0.0-preview-559651c0",
  "@metamask-previews/controller-utils": "11.9.0-preview-559651c0",
  "@metamask-previews/delegation-controller": "0.3.0-preview-559651c0",
  "@metamask-previews/earn-controller": "0.14.0-preview-559651c0",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-559651c0",
  "@metamask-previews/ens-controller": "16.0.0-preview-559651c0",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-559651c0",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-559651c0",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-559651c0",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-559651c0",
  "@metamask-previews/keyring-controller": "22.0.0-preview-559651c0",
  "@metamask-previews/logging-controller": "6.0.4-preview-559651c0",
  "@metamask-previews/message-manager": "12.0.1-preview-559651c0",
  "@metamask-previews/multichain": "4.1.0-preview-559651c0",
  "@metamask-previews/multichain-api-middleware": "0.3.0-preview-559651c0",
  "@metamask-previews/multichain-network-controller": "0.7.0-preview-559651c0",
  "@metamask-previews/multichain-transactions-controller": "1.0.0-preview-559651c0",
  "@metamask-previews/name-controller": "8.0.3-preview-559651c0",
  "@metamask-previews/network-controller": "23.5.0-preview-559651c0",
  "@metamask-previews/notification-services-controller": "8.0.0-preview-559651c0",
  "@metamask-previews/permission-controller": "11.0.6-preview-559651c0",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-559651c0",
  "@metamask-previews/phishing-controller": "12.5.0-preview-559651c0",
  "@metamask-previews/polling-controller": "13.0.0-preview-559651c0",
  "@metamask-previews/preferences-controller": "18.0.0-preview-559651c0",
  "@metamask-previews/profile-sync-controller": "15.0.0-preview-559651c0",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-559651c0",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-559651c0",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-559651c0",
  "@metamask-previews/sample-controllers": "0.1.0-preview-559651c0",
  "@metamask-previews/selected-network-controller": "22.1.0-preview-559651c0",
  "@metamask-previews/signature-controller": "29.0.0-preview-559651c0",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-559651c0",
  "@metamask-previews/transaction-controller": "56.2.0-preview-559651c0",
  "@metamask-previews/user-operation-controller": "35.0.0-preview-559651c0"
}

@vinistevam
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

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

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "29.0.0-preview-6aac6e71",
  "@metamask-previews/address-book-controller": "6.0.3-preview-6aac6e71",
  "@metamask-previews/announcement-controller": "7.0.3-preview-6aac6e71",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-6aac6e71",
  "@metamask-previews/approval-controller": "7.1.3-preview-6aac6e71",
  "@metamask-previews/assets-controllers": "63.0.0-preview-6aac6e71",
  "@metamask-previews/base-controller": "8.0.1-preview-6aac6e71",
  "@metamask-previews/bridge-controller": "26.0.0-preview-6aac6e71",
  "@metamask-previews/bridge-status-controller": "23.0.0-preview-6aac6e71",
  "@metamask-previews/build-utils": "3.0.3-preview-6aac6e71",
  "@metamask-previews/chain-agnostic-permission": "0.7.0-preview-6aac6e71",
  "@metamask-previews/composable-controller": "11.0.0-preview-6aac6e71",
  "@metamask-previews/controller-utils": "11.9.0-preview-6aac6e71",
  "@metamask-previews/delegation-controller": "0.3.0-preview-6aac6e71",
  "@metamask-previews/earn-controller": "0.14.0-preview-6aac6e71",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-6aac6e71",
  "@metamask-previews/ens-controller": "16.0.0-preview-6aac6e71",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-6aac6e71",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-6aac6e71",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-6aac6e71",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-6aac6e71",
  "@metamask-previews/keyring-controller": "22.0.0-preview-6aac6e71",
  "@metamask-previews/logging-controller": "6.0.4-preview-6aac6e71",
  "@metamask-previews/message-manager": "12.0.1-preview-6aac6e71",
  "@metamask-previews/multichain": "4.1.0-preview-6aac6e71",
  "@metamask-previews/multichain-api-middleware": "0.3.0-preview-6aac6e71",
  "@metamask-previews/multichain-network-controller": "0.7.0-preview-6aac6e71",
  "@metamask-previews/multichain-transactions-controller": "1.0.0-preview-6aac6e71",
  "@metamask-previews/name-controller": "8.0.3-preview-6aac6e71",
  "@metamask-previews/network-controller": "23.5.0-preview-6aac6e71",
  "@metamask-previews/notification-services-controller": "8.0.0-preview-6aac6e71",
  "@metamask-previews/permission-controller": "11.0.6-preview-6aac6e71",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-6aac6e71",
  "@metamask-previews/phishing-controller": "12.5.0-preview-6aac6e71",
  "@metamask-previews/polling-controller": "13.0.0-preview-6aac6e71",
  "@metamask-previews/preferences-controller": "18.0.0-preview-6aac6e71",
  "@metamask-previews/profile-sync-controller": "15.0.0-preview-6aac6e71",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-6aac6e71",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-6aac6e71",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-6aac6e71",
  "@metamask-previews/sample-controllers": "0.1.0-preview-6aac6e71",
  "@metamask-previews/selected-network-controller": "22.1.0-preview-6aac6e71",
  "@metamask-previews/signature-controller": "29.0.0-preview-6aac6e71",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-6aac6e71",
  "@metamask-previews/transaction-controller": "56.2.0-preview-6aac6e71",
  "@metamask-previews/user-operation-controller": "35.0.0-preview-6aac6e71"
}

Copy link
Member

@mikesposito mikesposito left a comment

Choose a reason for hiding this comment

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

Changes to controller-utils look good

@vinistevam vinistevam merged commit 4e2d3d5 into main May 27, 2025
206 checks passed
@vinistevam vinistevam deleted the feat/add-batch-transaction-approval-type branch May 27, 2025 08:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants