Skip to content

Fix block tracker not resolving for failed requests#5860

Merged
mcmire merged 4 commits intomainfrom
upgrade-eth-block-tracker-to-v12
May 29, 2025
Merged

Fix block tracker not resolving for failed requests#5860
mcmire merged 4 commits intomainfrom
upgrade-eth-block-tracker-to-v12

Conversation

@mcmire
Copy link
Copy Markdown
Contributor

@mcmire mcmire commented May 23, 2025

Explanation

Currently, if a consumer makes a request to an RPC endpoint via a network provider object, and that request continually fails in some way and then throws a circuit breaker error, it will never resolve. Naturally, this causes problems if the consuming code (e.g. TransactionController, or UI code) is expecting a response from the network in order to proceed.

This problem occurs because internally the NetworkController wraps requests in special middleware that use the block tracker to get the latest block number. This middleware gets executed before the desired request reaches the network, and in this case because the block tracker does not return a resolved promise, the middleware does not resolve along with the entire request.

This bug has been resolved in @metamask/eth-block-tracker 12.0.1 and @metamask/eth-json-rpc-middleware 17.0.1. So, to fix this problem, this PR upgrades these packages.

For more see:

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, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@socket-security
Copy link
Copy Markdown

socket-security bot commented May 23, 2025

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​metamask/​eth-json-rpc-middleware@​17.0.1981007596100
Added@​metamask/​eth-block-tracker@​12.0.19410010095100

View full report

@mcmire mcmire force-pushed the upgrade-eth-block-tracker-to-v12 branch from cda8835 to 4a9e3c1 Compare May 27, 2025 14:53
@mcmire mcmire changed the title Upgrade eth-block-tracker to v12 network-controller: Upgrade some dependencies May 27, 2025
@mcmire mcmire force-pushed the upgrade-eth-block-tracker-to-v12 branch from 4a9e3c1 to 8058614 Compare May 27, 2025 14:58
Upgrade `@metamask/eth-block-tracker` to ^12.0.0 and
`@metamask/eth-json-rpc-middleware` to ^17.0.1. This fixes a bug where
calls to `getLatestBlock` within middleware would hang if an error was
thrown while making the request to the network.
@mcmire mcmire force-pushed the upgrade-eth-block-tracker-to-v12 branch from 8058614 to 88a682b Compare May 27, 2025 18:52
@mcmire mcmire changed the title network-controller: Upgrade some dependencies Fix block tracker not resolving for failed requests May 27, 2025
@mcmire
Copy link
Copy Markdown
Contributor Author

mcmire commented May 27, 2025

Marking no-changelog because changes to transaction-controller and user-operation-controller are dev-only.

@mcmire mcmire marked this pull request as ready for review May 27, 2025 19:15
@mcmire mcmire requested review from a team as code owners May 27, 2025 19:15
cryptodev-2s
cryptodev-2s previously approved these changes May 27, 2025
Copy link
Copy Markdown
Contributor

@cryptodev-2s cryptodev-2s left a comment

Choose a reason for hiding this comment

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

LGTM!

@mcmire
Copy link
Copy Markdown
Contributor Author

mcmire commented May 27, 2025

@metamaskbot publish-previews

@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": "29.0.0-preview-88a682b",
  "@metamask-previews/address-book-controller": "6.0.3-preview-88a682b",
  "@metamask-previews/announcement-controller": "7.0.3-preview-88a682b",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-88a682b",
  "@metamask-previews/approval-controller": "7.1.3-preview-88a682b",
  "@metamask-previews/assets-controllers": "65.0.0-preview-88a682b",
  "@metamask-previews/base-controller": "8.0.1-preview-88a682b",
  "@metamask-previews/bridge-controller": "28.0.0-preview-88a682b",
  "@metamask-previews/bridge-status-controller": "25.0.0-preview-88a682b",
  "@metamask-previews/build-utils": "3.0.3-preview-88a682b",
  "@metamask-previews/chain-agnostic-permission": "0.7.0-preview-88a682b",
  "@metamask-previews/composable-controller": "11.0.0-preview-88a682b",
  "@metamask-previews/controller-utils": "11.9.0-preview-88a682b",
  "@metamask-previews/delegation-controller": "0.3.0-preview-88a682b",
  "@metamask-previews/earn-controller": "0.14.0-preview-88a682b",
  "@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-88a682b",
  "@metamask-previews/ens-controller": "16.0.0-preview-88a682b",
  "@metamask-previews/error-reporting-service": "0.0.0-preview-88a682b",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-88a682b",
  "@metamask-previews/gas-fee-controller": "23.0.0-preview-88a682b",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-88a682b",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-88a682b",
  "@metamask-previews/keyring-controller": "22.0.0-preview-88a682b",
  "@metamask-previews/logging-controller": "6.0.4-preview-88a682b",
  "@metamask-previews/message-manager": "12.0.1-preview-88a682b",
  "@metamask-previews/multichain": "4.1.0-preview-88a682b",
  "@metamask-previews/multichain-api-middleware": "0.4.0-preview-88a682b",
  "@metamask-previews/multichain-network-controller": "0.7.0-preview-88a682b",
  "@metamask-previews/multichain-transactions-controller": "1.0.0-preview-88a682b",
  "@metamask-previews/name-controller": "8.0.3-preview-88a682b",
  "@metamask-previews/network-controller": "23.5.0-preview-88a682b",
  "@metamask-previews/notification-services-controller": "8.0.0-preview-88a682b",
  "@metamask-previews/permission-controller": "11.0.6-preview-88a682b",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-88a682b",
  "@metamask-previews/phishing-controller": "12.5.0-preview-88a682b",
  "@metamask-previews/polling-controller": "13.0.0-preview-88a682b",
  "@metamask-previews/preferences-controller": "18.0.0-preview-88a682b",
  "@metamask-previews/profile-sync-controller": "15.0.0-preview-88a682b",
  "@metamask-previews/queued-request-controller": "10.0.0-preview-88a682b",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-88a682b",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-88a682b",
  "@metamask-previews/sample-controllers": "0.1.0-preview-88a682b",
  "@metamask-previews/selected-network-controller": "22.1.0-preview-88a682b",
  "@metamask-previews/signature-controller": "29.0.0-preview-88a682b",
  "@metamask-previews/token-search-discovery-controller": "3.1.0-preview-88a682b",
  "@metamask-previews/transaction-controller": "56.2.0-preview-88a682b",
  "@metamask-previews/user-operation-controller": "35.0.0-preview-88a682b"
}

@mcmire
Copy link
Copy Markdown
Contributor Author

mcmire commented May 28, 2025

We are waiting on another fix for the block tracker before merging this.

@mcmire mcmire marked this pull request as draft May 28, 2025 17:37
@mcmire mcmire marked this pull request as ready for review May 29, 2025 14:43
@mcmire mcmire added the team-wallet-framework Deprecated: Please use `team-core-platform` instead. label May 29, 2025
Copy link
Copy Markdown
Member

@Gudahtt Gudahtt left a comment

Choose a reason for hiding this comment

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

LGTM!

@mcmire mcmire merged commit 01869a6 into main May 29, 2025
209 checks passed
@mcmire mcmire deleted the upgrade-eth-block-tracker-to-v12 branch May 29, 2025 14:48
@mcmire mcmire mentioned this pull request May 29, 2025
mcmire added a commit that referenced this pull request May 29, 2025
This release primarily includes the following two fixes to
`network-controller`:

- Rather than throwing an error, NetworkController now corrects an
invalid initial `selectedNetworkClientId` to point to the default RPC
endpoint of the first network sorted by chain ID, then logs the error
via Sentry ([#5851](#5851))
- Fix the block tracker so that it will now reject if an error is thrown
while making the request instead of hanging
([#5860](#5860))

---

Full list of packages and versions in this release:

- `@metamask/error-reporting-service` (1.0.0)
- `@metamask/network-controller` (23.5.0 -> 23.5.1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-changelog team-wallet-framework Deprecated: Please use `team-core-platform` instead.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants