Skip to content

Fix block tracker not resolving for failed requests - #5860

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

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

Conversation

@mcmire

@mcmiremcmire commented May 23, 2025

Copy link
Copy Markdown
Collaborator

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

socket-securityBot commented May 23, 2025

Copy link
Copy Markdown

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

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Added@​metamask/​eth-json-rpc-middleware@​17.0.1981007596100
Added@​metamask/​eth-block-tracker@​12.0.19410010095100

View full report

@mcmire
mcmireforce-pushed the upgrade-eth-block-tracker-to-v12 branch from cda8835 to 4a9e3c1CompareMay 27, 2025 14:53
@mcmiremcmire changed the title Upgrade eth-block-tracker to v12network-controller: Upgrade some dependenciesMay 27, 2025
@mcmire
mcmireforce-pushed the upgrade-eth-block-tracker-to-v12 branch from 4a9e3c1 to 8058614CompareMay 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
mcmireforce-pushed the upgrade-eth-block-tracker-to-v12 branch from 8058614 to 88a682bCompareMay 27, 2025 18:52
@mcmiremcmire changed the title network-controller: Upgrade some dependenciesFix block tracker not resolving for failed requestsMay 27, 2025
@mcmire

Copy link
Copy Markdown
CollaboratorAuthor

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 ownersMay 27, 2025 19:15
cryptodev-2s
cryptodev-2s previously approved these changes May 27, 2025

@cryptodev-2scryptodev-2s left a comment

Copy link
Copy Markdown
Contributor

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
CollaboratorAuthor

@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
CollaboratorAuthor

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
@mcmiremcmire added the team-wallet-framework Deprecated: Please use `team-core-platform` instead. label May 29, 2025

@GudahttGudahtt left a comment

Copy link
Copy Markdown
Member

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 mainMay 29, 2025
@mcmire
mcmire deleted the upgrade-eth-block-tracker-to-v12 branch May 29, 2025 14:48
@mcmiremcmire 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-changelogteam-wallet-frameworkDeprecated: Please use `team-core-platform` instead.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mcmire@Gudahtt@cryptodev-2s