Skip to content

refactor(transaction-controller): encapsulate provider logic - #8273

Merged
matthewwalsh0 merged 15 commits into
mainfrom
feat/encapsulate-provider-util
Mar 27, 2026
Merged

refactor(transaction-controller): encapsulate provider logic#8273
matthewwalsh0 merged 15 commits into
mainfrom
feat/encapsulate-provider-util

Conversation

@matthewwalsh0

@matthewwalsh0matthewwalsh0 commented Mar 23, 2026

Copy link
Copy Markdown
Member

Explanation

Currently, transaction-controller passes ethQuery instances throughout the codebase — into utils, helpers, hooks, and gas flows — to make RPC calls. This couples every layer to EthQuery internals and makes the provider plumbing verbose and fragile.

This PR introduces a utils/provider.ts module with functions including rpcRequest and getProvider, meaning all EthQuery usage is replaced, and all provider logic is encapsulated and callable anywhere with a messenger.

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
Medium risk because it replaces EthQuery across transaction publishing, gas estimation, and pending-tracking flows with a new messenger-based RPC abstraction, which could change runtime RPC behavior and error handling. Also includes a breaking API/export removal (determineTransactionType) and dependency removal (@metamask/eth-query).

Overview
Refactors transaction-controller to remove @metamask/eth-query entirely and route all RPC access through new utils/provider.ts helpers (getProvider, rpcRequest, getChainId, getNetworkClientId) using the messenger to resolve network clients.

Updates transaction publishing, gas estimation/fee flows, simulation balance checks, batch/sequential publish hooks, PendingTransactionTracker, and related helpers to pass networkClientId/messenger instead of EthQuery/provider instances, and adjusts tests/integration mocks accordingly. Also removes the public export of determineTransactionType (breaking change) and updates .gitignore to ignore .sisyphus/.

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

@matthewwalsh0
matthewwalsh0force-pushed the feat/encapsulate-provider-util branch 3 times, most recently from 72ca7a5 to a7e5332CompareMarch 23, 2026 16:15
@matthewwalsh0matthewwalsh0 changed the title refactor: encapsulate provider logic in transaction-controller, eliminate ethQueryrefactor(transaction-controller): encapsulate provider logicMar 24, 2026
@matthewwalsh0
matthewwalsh0 marked this pull request as ready for review March 24, 2026 23:36
@matthewwalsh0
matthewwalsh0 requested review from a team as code ownersMarch 24, 2026 23:36
Comment threadpackages/transaction-controller/src/helpers/PendingTransactionTracker.ts Outdated
@matthewwalsh0

Copy link
Copy Markdown
MemberAuthor

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

Comment threadpackages/transaction-controller/src/helpers/GasFeePoller.ts
@matthewwalsh0

Copy link
Copy Markdown
MemberAuthor

@metamaskbot publish-preview

…ethQuery from transaction-controller
Replace all ethQuery/EthQuery usage with a new rpcRequest() utility that
accepts messenger + chainId/networkClientId + method + params. Any file
can now send RPC requests without passing around ethQuery instances.
- Add utils/provider.ts with rpcRequest() and getProvider() functions
- Migrate all utils, gas-flows, helpers, hooks, and TransactionController
- Update GasFeeFlowRequest type: ethQuery -> networkClientId (BREAKING)
- Update determineTransactionType signature to options object (BREAKING)
- Remove @metamask/eth-query dependency
- Update all test files to match new signatures
@matthewwalsh0
matthewwalsh0force-pushed the feat/encapsulate-provider-util branch from a0caca0 to 2fbeb5cCompareMarch 27, 2026 12:55

@cursorcursorBot 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 2 potential issues.

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.

Comment threadpackages/transaction-controller/src/TransactionController.ts
Comment threadpackages/transaction-controller/src/types.ts
OGPoyraz
OGPoyraz previously approved these changes Mar 27, 2026
@matthewwalsh0
matthewwalsh0 added this pull request to the merge queueMar 27, 2026
Merged via the queue into main with commit 74003e4Mar 27, 2026
332 checks passed
@matthewwalsh0
matthewwalsh0 deleted the feat/encapsulate-provider-util branch March 27, 2026 13:34
@maxime-oemaxime-oe mentioned this pull request Apr 1, 2026
4 tasks
Sign up for freeto 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.

3 participants

@matthewwalsh0@OGPoyraz@vinistevam