Skip to content

feat: support atomic batch transactions#5306

Merged
matthewwalsh0 merged 43 commits intomainfrom
feat/transaction-batch
Feb 17, 2025
Merged

feat: support atomic batch transactions#5306
matthewwalsh0 merged 43 commits intomainfrom
feat/transaction-batch

Conversation

@matthewwalsh0
Copy link
Copy Markdown
Member

@matthewwalsh0 matthewwalsh0 commented Feb 11, 2025

Explanation

Support atomic batch transactions via EIP-7702, and ERC-7821.

Specifically:

  • Add addTransactionBatch method with TransactionBatchRequest and TransactionBatchResult types.
  • Encode multiple transactions into single execute call using ERC-7821 ABI.
  • Automatically upgrade account via setCode transaction if needed.
  • Add isAtomicBatchSupported method to identify which chains support atomic batch for a given account.
  • Add new batch TransactionType.
  • Add batch utils to encapsulate all batch-related logic.
  • Add feature-flags utils to encapsulate retrieval and fallback of LaunchDarkly configuration.
    • Currently EIP-7702 chains and contract addresses.
  • Validate to of external transaction is not an internal account unless transactionType is batch.

References

Fixes #4096

Changelog

See CHANGELOG.md.

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 highlighted breaking changes using the "BREAKING" category above as appropriate
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@matthewwalsh0
Copy link
Copy Markdown
Member 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/accounts-controller": "23.0.1-preview-ee98fad1",
  "@metamask-previews/address-book-controller": "6.0.3-preview-ee98fad1",
  "@metamask-previews/announcement-controller": "7.0.3-preview-ee98fad1",
  "@metamask-previews/approval-controller": "7.1.3-preview-ee98fad1",
  "@metamask-previews/assets-controllers": "49.0.0-preview-ee98fad1",
  "@metamask-previews/base-controller": "8.0.0-preview-ee98fad1",
  "@metamask-previews/build-utils": "3.0.3-preview-ee98fad1",
  "@metamask-previews/composable-controller": "11.0.0-preview-ee98fad1",
  "@metamask-previews/controller-utils": "11.5.0-preview-ee98fad1",
  "@metamask-previews/earn-controller": "0.2.1-preview-ee98fad1",
  "@metamask-previews/ens-controller": "15.0.2-preview-ee98fad1",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-ee98fad1",
  "@metamask-previews/gas-fee-controller": "22.0.3-preview-ee98fad1",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-ee98fad1",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-ee98fad1",
  "@metamask-previews/keyring-controller": "19.0.7-preview-ee98fad1",
  "@metamask-previews/logging-controller": "6.0.4-preview-ee98fad1",
  "@metamask-previews/message-manager": "12.0.1-preview-ee98fad1",
  "@metamask-previews/multichain": "2.1.1-preview-ee98fad1",
  "@metamask-previews/multichain-transactions-controller": "0.3.0-preview-ee98fad1",
  "@metamask-previews/name-controller": "8.0.3-preview-ee98fad1",
  "@metamask-previews/network-controller": "22.2.1-preview-ee98fad1",
  "@metamask-previews/notification-services-controller": "0.20.1-preview-ee98fad1",
  "@metamask-previews/permission-controller": "11.0.6-preview-ee98fad1",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-ee98fad1",
  "@metamask-previews/phishing-controller": "12.3.2-preview-ee98fad1",
  "@metamask-previews/polling-controller": "12.0.3-preview-ee98fad1",
  "@metamask-previews/preferences-controller": "15.0.2-preview-ee98fad1",
  "@metamask-previews/profile-sync-controller": "7.0.1-preview-ee98fad1",
  "@metamask-previews/queued-request-controller": "9.0.1-preview-ee98fad1",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-ee98fad1",
  "@metamask-previews/remote-feature-flag-controller": "1.4.0-preview-ee98fad1",
  "@metamask-previews/selected-network-controller": "21.0.1-preview-ee98fad1",
  "@metamask-previews/signature-controller": "23.2.1-preview-ee98fad1",
  "@metamask-previews/token-search-discovery-controller": "2.1.0-preview-ee98fad1",
  "@metamask-previews/transaction-controller": "45.1.0-preview-ee98fad1",
  "@metamask-previews/user-operation-controller": "24.0.1-preview-ee98fad1"
}

@matthewwalsh0 matthewwalsh0 marked this pull request as ready for review February 12, 2025 10:47
@matthewwalsh0 matthewwalsh0 requested review from a team as code owners February 12, 2025 10:47
@matthewwalsh0
Copy link
Copy Markdown
Member 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/accounts-controller": "23.0.1-preview-862b5dac",
  "@metamask-previews/address-book-controller": "6.0.3-preview-862b5dac",
  "@metamask-previews/announcement-controller": "7.0.3-preview-862b5dac",
  "@metamask-previews/approval-controller": "7.1.3-preview-862b5dac",
  "@metamask-previews/assets-controllers": "49.0.0-preview-862b5dac",
  "@metamask-previews/base-controller": "8.0.0-preview-862b5dac",
  "@metamask-previews/build-utils": "3.0.3-preview-862b5dac",
  "@metamask-previews/composable-controller": "11.0.0-preview-862b5dac",
  "@metamask-previews/controller-utils": "11.5.0-preview-862b5dac",
  "@metamask-previews/earn-controller": "0.2.1-preview-862b5dac",
  "@metamask-previews/ens-controller": "15.0.2-preview-862b5dac",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-862b5dac",
  "@metamask-previews/gas-fee-controller": "22.0.3-preview-862b5dac",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-862b5dac",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-862b5dac",
  "@metamask-previews/keyring-controller": "19.0.7-preview-862b5dac",
  "@metamask-previews/logging-controller": "6.0.4-preview-862b5dac",
  "@metamask-previews/message-manager": "12.0.1-preview-862b5dac",
  "@metamask-previews/multichain": "2.1.1-preview-862b5dac",
  "@metamask-previews/multichain-transactions-controller": "0.3.0-preview-862b5dac",
  "@metamask-previews/name-controller": "8.0.3-preview-862b5dac",
  "@metamask-previews/network-controller": "22.2.1-preview-862b5dac",
  "@metamask-previews/notification-services-controller": "0.20.1-preview-862b5dac",
  "@metamask-previews/permission-controller": "11.0.6-preview-862b5dac",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-862b5dac",
  "@metamask-previews/phishing-controller": "12.3.2-preview-862b5dac",
  "@metamask-previews/polling-controller": "12.0.3-preview-862b5dac",
  "@metamask-previews/preferences-controller": "15.0.2-preview-862b5dac",
  "@metamask-previews/profile-sync-controller": "7.0.1-preview-862b5dac",
  "@metamask-previews/queued-request-controller": "9.0.1-preview-862b5dac",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-862b5dac",
  "@metamask-previews/remote-feature-flag-controller": "1.4.0-preview-862b5dac",
  "@metamask-previews/selected-network-controller": "21.0.1-preview-862b5dac",
  "@metamask-previews/signature-controller": "23.2.1-preview-862b5dac",
  "@metamask-previews/token-search-discovery-controller": "2.1.0-preview-862b5dac",
  "@metamask-previews/transaction-controller": "45.1.0-preview-862b5dac",
  "@metamask-previews/user-operation-controller": "24.0.1-preview-862b5dac"
}

@matthewwalsh0
Copy link
Copy Markdown
Member 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/accounts-controller": "23.0.1-preview-f51ef7f8",
  "@metamask-previews/address-book-controller": "6.0.3-preview-f51ef7f8",
  "@metamask-previews/announcement-controller": "7.0.3-preview-f51ef7f8",
  "@metamask-previews/approval-controller": "7.1.3-preview-f51ef7f8",
  "@metamask-previews/assets-controllers": "49.0.0-preview-f51ef7f8",
  "@metamask-previews/base-controller": "8.0.0-preview-f51ef7f8",
  "@metamask-previews/build-utils": "3.0.3-preview-f51ef7f8",
  "@metamask-previews/composable-controller": "11.0.0-preview-f51ef7f8",
  "@metamask-previews/controller-utils": "11.5.0-preview-f51ef7f8",
  "@metamask-previews/earn-controller": "0.2.1-preview-f51ef7f8",
  "@metamask-previews/ens-controller": "15.0.2-preview-f51ef7f8",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-f51ef7f8",
  "@metamask-previews/gas-fee-controller": "22.0.3-preview-f51ef7f8",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-f51ef7f8",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-f51ef7f8",
  "@metamask-previews/keyring-controller": "19.0.7-preview-f51ef7f8",
  "@metamask-previews/logging-controller": "6.0.4-preview-f51ef7f8",
  "@metamask-previews/message-manager": "12.0.1-preview-f51ef7f8",
  "@metamask-previews/multichain": "2.1.1-preview-f51ef7f8",
  "@metamask-previews/multichain-transactions-controller": "0.3.0-preview-f51ef7f8",
  "@metamask-previews/name-controller": "8.0.3-preview-f51ef7f8",
  "@metamask-previews/network-controller": "22.2.1-preview-f51ef7f8",
  "@metamask-previews/notification-services-controller": "0.20.1-preview-f51ef7f8",
  "@metamask-previews/permission-controller": "11.0.6-preview-f51ef7f8",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-f51ef7f8",
  "@metamask-previews/phishing-controller": "12.3.2-preview-f51ef7f8",
  "@metamask-previews/polling-controller": "12.0.3-preview-f51ef7f8",
  "@metamask-previews/preferences-controller": "15.0.2-preview-f51ef7f8",
  "@metamask-previews/profile-sync-controller": "7.0.1-preview-f51ef7f8",
  "@metamask-previews/queued-request-controller": "9.0.1-preview-f51ef7f8",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-f51ef7f8",
  "@metamask-previews/remote-feature-flag-controller": "1.4.0-preview-f51ef7f8",
  "@metamask-previews/selected-network-controller": "21.0.1-preview-f51ef7f8",
  "@metamask-previews/signature-controller": "23.2.1-preview-f51ef7f8",
  "@metamask-previews/token-search-discovery-controller": "2.1.0-preview-f51ef7f8",
  "@metamask-previews/transaction-controller": "45.1.0-preview-f51ef7f8",
  "@metamask-previews/user-operation-controller": "24.0.1-preview-f51ef7f8"
}

OGPoyraz
OGPoyraz previously approved these changes Feb 17, 2025
@matthewwalsh0 matthewwalsh0 merged commit b9cb503 into main Feb 17, 2025
@matthewwalsh0 matthewwalsh0 deleted the feat/transaction-batch branch February 17, 2025 12:06
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