Skip to content

Conversation

@mcmire
Copy link
Contributor

@mcmire mcmire commented Nov 18, 2025

Explanation

NetworkController has the ability to analyze an RPC endpoint and capture its availability status (that is, whether the controller is able to make successful requests to the endpoint). However, this step occurs automatically only once, when the RPC endpoint's network is switched to, and so any changes in status while the network is being used will not be reflected in state. This problem can be mitigated by periodically calling lookupNetwork manually, but this is awkward, and usage of this method should be kept in check so as not to create too many requests.

Ideally, the controller should keep track of network status as requests are made. This commit implements this change by hooking into network client events added in a previous commit.

Note that this PR does not remove lookupNetwork or touch the existing behavior for this method. So with these changes there are now two strategies at play for updating the network status. This should be okay for the time being, although we should look to refactor this in the future.

References

Progresses https://consensyssoftware.atlassian.net/browse/WPC-99.

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

NetworkController has the ability to analyze an RPC endpoint and capture
its availability status (that is, whether the controller is able to make
successful requests to the endpoint). However, this step occurs
automatically only once, when the RPC endpoint's network is switched to,
and so any changes in status while the network is being used will not
be reflected in state. This problem can be mitigated by periodically
calling `lookupNetwork` manually, but this is awkward, and usage of this
method should be kept in check so as not to create too many requests.

Ideally, the controller should keep track of network status as requests
are made. This commit implements this change by hooking into events
published by the network client and added in a previous commit.
@mcmire mcmire force-pushed the update-network-status-live branch from f91d5e1 to dabf9bd Compare November 18, 2025 21:59
@mcmire
Copy link
Contributor Author

mcmire commented Nov 18, 2025

@metamaskbot publish-previews

@github-actions
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/account-tree-controller": "3.0.0-preview-dabf9bd8",
  "@metamask-previews/accounts-controller": "34.0.0-preview-dabf9bd8",
  "@metamask-previews/address-book-controller": "7.0.0-preview-dabf9bd8",
  "@metamask-previews/analytics-controller": "0.0.0-preview-dabf9bd8",
  "@metamask-previews/announcement-controller": "8.0.0-preview-dabf9bd8",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-dabf9bd8",
  "@metamask-previews/approval-controller": "8.0.0-preview-dabf9bd8",
  "@metamask-previews/assets-controllers": "88.0.0-preview-dabf9bd8",
  "@metamask-previews/base-controller": "9.0.0-preview-dabf9bd8",
  "@metamask-previews/bridge-controller": "60.1.0-preview-dabf9bd8",
  "@metamask-previews/bridge-status-controller": "60.1.0-preview-dabf9bd8",
  "@metamask-previews/build-utils": "3.0.4-preview-dabf9bd8",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-dabf9bd8",
  "@metamask-previews/claims-controller": "0.2.0-preview-dabf9bd8",
  "@metamask-previews/composable-controller": "12.0.0-preview-dabf9bd8",
  "@metamask-previews/controller-utils": "11.15.0-preview-dabf9bd8",
  "@metamask-previews/core-backend": "4.0.0-preview-dabf9bd8",
  "@metamask-previews/delegation-controller": "1.0.0-preview-dabf9bd8",
  "@metamask-previews/earn-controller": "10.0.0-preview-dabf9bd8",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-dabf9bd8",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-dabf9bd8",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-dabf9bd8",
  "@metamask-previews/ens-controller": "18.0.0-preview-dabf9bd8",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-dabf9bd8",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-dabf9bd8",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-dabf9bd8",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-dabf9bd8",
  "@metamask-previews/foundryup": "1.0.1-preview-dabf9bd8",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-dabf9bd8",
  "@metamask-previews/gator-permissions-controller": "0.4.0-preview-dabf9bd8",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-dabf9bd8",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-dabf9bd8",
  "@metamask-previews/keyring-controller": "24.0.0-preview-dabf9bd8",
  "@metamask-previews/logging-controller": "7.0.0-preview-dabf9bd8",
  "@metamask-previews/message-manager": "14.0.0-preview-dabf9bd8",
  "@metamask-previews/messenger": "0.3.0-preview-dabf9bd8",
  "@metamask-previews/multichain-account-service": "3.0.0-preview-dabf9bd8",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-dabf9bd8",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-dabf9bd8",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-dabf9bd8",
  "@metamask-previews/name-controller": "9.0.0-preview-dabf9bd8",
  "@metamask-previews/network-controller": "25.0.0-preview-dabf9bd8",
  "@metamask-previews/network-enablement-controller": "3.1.0-preview-dabf9bd8",
  "@metamask-previews/notification-services-controller": "20.0.0-preview-dabf9bd8",
  "@metamask-previews/permission-controller": "12.1.0-preview-dabf9bd8",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-dabf9bd8",
  "@metamask-previews/phishing-controller": "15.0.1-preview-dabf9bd8",
  "@metamask-previews/polling-controller": "15.0.0-preview-dabf9bd8",
  "@metamask-previews/preferences-controller": "21.0.0-preview-dabf9bd8",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-dabf9bd8",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-dabf9bd8",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-dabf9bd8",
  "@metamask-previews/sample-controllers": "3.0.0-preview-dabf9bd8",
  "@metamask-previews/seedless-onboarding-controller": "6.1.0-preview-dabf9bd8",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-dabf9bd8",
  "@metamask-previews/shield-controller": "2.1.0-preview-dabf9bd8",
  "@metamask-previews/signature-controller": "36.0.0-preview-dabf9bd8",
  "@metamask-previews/subscription-controller": "4.2.2-preview-dabf9bd8",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-dabf9bd8",
  "@metamask-previews/transaction-controller": "61.3.0-preview-dabf9bd8",
  "@metamask-previews/transaction-pay-controller": "6.0.0-preview-dabf9bd8",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-dabf9bd8"
}

@mcmire
Copy link
Contributor Author

mcmire commented Nov 21, 2025

@metamaskbot publish-previews

@github-actions
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/account-tree-controller": "4.0.0-preview-e3eb8eca",
  "@metamask-previews/accounts-controller": "35.0.0-preview-e3eb8eca",
  "@metamask-previews/address-book-controller": "7.0.1-preview-e3eb8eca",
  "@metamask-previews/analytics-controller": "0.0.0-preview-e3eb8eca",
  "@metamask-previews/announcement-controller": "8.0.0-preview-e3eb8eca",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-e3eb8eca",
  "@metamask-previews/approval-controller": "8.0.0-preview-e3eb8eca",
  "@metamask-previews/assets-controllers": "91.0.0-preview-e3eb8eca",
  "@metamask-previews/base-controller": "9.0.0-preview-e3eb8eca",
  "@metamask-previews/bridge-controller": "63.0.0-preview-e3eb8eca",
  "@metamask-previews/bridge-status-controller": "63.0.0-preview-e3eb8eca",
  "@metamask-previews/build-utils": "3.0.4-preview-e3eb8eca",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-e3eb8eca",
  "@metamask-previews/claims-controller": "0.2.0-preview-e3eb8eca",
  "@metamask-previews/composable-controller": "12.0.0-preview-e3eb8eca",
  "@metamask-previews/controller-utils": "11.16.0-preview-e3eb8eca",
  "@metamask-previews/core-backend": "5.0.0-preview-e3eb8eca",
  "@metamask-previews/delegation-controller": "2.0.0-preview-e3eb8eca",
  "@metamask-previews/earn-controller": "11.0.0-preview-e3eb8eca",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-e3eb8eca",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-e3eb8eca",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-e3eb8eca",
  "@metamask-previews/ens-controller": "19.0.0-preview-e3eb8eca",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-e3eb8eca",
  "@metamask-previews/eth-block-tracker": "15.0.0-preview-e3eb8eca",
  "@metamask-previews/eth-json-rpc-middleware": "22.0.0-preview-e3eb8eca",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-e3eb8eca",
  "@metamask-previews/foundryup": "1.0.1-preview-e3eb8eca",
  "@metamask-previews/gas-fee-controller": "26.0.0-preview-e3eb8eca",
  "@metamask-previews/gator-permissions-controller": "0.6.0-preview-e3eb8eca",
  "@metamask-previews/json-rpc-engine": "10.2.0-preview-e3eb8eca",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-e3eb8eca",
  "@metamask-previews/keyring-controller": "25.0.0-preview-e3eb8eca",
  "@metamask-previews/logging-controller": "7.0.1-preview-e3eb8eca",
  "@metamask-previews/message-manager": "14.1.0-preview-e3eb8eca",
  "@metamask-previews/messenger": "0.3.0-preview-e3eb8eca",
  "@metamask-previews/multichain-account-service": "4.0.0-preview-e3eb8eca",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-e3eb8eca",
  "@metamask-previews/multichain-network-controller": "3.0.0-preview-e3eb8eca",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-e3eb8eca",
  "@metamask-previews/name-controller": "9.0.0-preview-e3eb8eca",
  "@metamask-previews/network-controller": "26.0.0-preview-e3eb8eca",
  "@metamask-previews/network-enablement-controller": "4.0.0-preview-e3eb8eca",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-e3eb8eca",
  "@metamask-previews/permission-controller": "12.1.1-preview-e3eb8eca",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-e3eb8eca",
  "@metamask-previews/phishing-controller": "16.0.0-preview-e3eb8eca",
  "@metamask-previews/polling-controller": "16.0.0-preview-e3eb8eca",
  "@metamask-previews/preferences-controller": "22.0.0-preview-e3eb8eca",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-e3eb8eca",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-e3eb8eca",
  "@metamask-previews/remote-feature-flag-controller": "2.0.1-preview-e3eb8eca",
  "@metamask-previews/sample-controllers": "4.0.0-preview-e3eb8eca",
  "@metamask-previews/seedless-onboarding-controller": "7.0.0-preview-e3eb8eca",
  "@metamask-previews/selected-network-controller": "26.0.0-preview-e3eb8eca",
  "@metamask-previews/shield-controller": "3.0.0-preview-e3eb8eca",
  "@metamask-previews/signature-controller": "37.0.0-preview-e3eb8eca",
  "@metamask-previews/subscription-controller": "5.0.0-preview-e3eb8eca",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-e3eb8eca",
  "@metamask-previews/transaction-controller": "62.0.0-preview-e3eb8eca",
  "@metamask-previews/transaction-pay-controller": "10.0.0-preview-e3eb8eca",
  "@metamask-previews/user-operation-controller": "41.0.0-preview-e3eb8eca"
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants