Skip to content

feat(network-controller): force RPC failover via remote flag#9175

Open
cryptodev-2s wants to merge 36 commits into
mainfrom
feat/force-rpc-failover
Open

feat(network-controller): force RPC failover via remote flag#9175
cryptodev-2s wants to merge 36 commits into
mainfrom
feat/force-rpc-failover

Conversation

@cryptodev-2s

@cryptodev-2s cryptodev-2s commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Explanation

RPC failover is now controlled by a single remote feature flag, corePlatformRpcFailoverMode, a string with three values:

  • disabled: failover URLs are ignored. Traffic stays on the primary endpoint (Infura only).
  • enabled: traffic diverts to the configured failover URLs when the primary endpoint is unavailable. This is the existing automatic failover behavior.
  • forced: Infura endpoints that have failover URLs route all traffic (including block tracker polling) to those failover URLs, bypassing Infura entirely. Infura endpoints without failover URLs stay on Infura, and custom endpoints are unaffected.

The value defaults to disabled when the flag is absent or unrecognized. forced is the emergency kill switch: if the automatic failover logic itself ever misbehaves, it deterministically takes Infura out of the path.

BREAKING: the controller no longer reads walletFrameworkRpcFailoverEnabled (the enabled mode replaces it), and the imperative NetworkController.enableRpcFailover / disableRpcFailover methods and their messenger actions are removed. Failover is driven entirely by the remote flag. Internally the controller tracks a single RpcFailoverMode applied through one RemoteFeatureFlagController:stateChange subscription.

Note: corePlatformRpcFailoverMode is a server side contract, delivered camelCase by the ClientConfigAPI. The old walletFrameworkRpcFailoverEnabled flag stays in LaunchDarkly for already shipped clients.

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

High Risk
Breaking public API and remote-flag contract changes alter how all wallet RPC traffic is routed for Infura networks, including an emergency bypass path; misconfiguration could cut clients off from Infura or route everything to failovers unexpectedly.

Overview
BREAKING: RPC failover is now controlled only by the remote string flag corePlatformRpcFailoverMode (disabled | enabled | forced), replacing walletFrameworkRpcFailoverEnabled and the imperative enableRpcFailover / disableRpcFailover APIs (including messenger actions and exported action types).

NetworkController tracks RpcFailoverMode, applies it on init() and RemoteFeatureFlagController:stateChange, and propagates it via setRpcFailoverMode on auto-managed clients with failover URLs. createNetworkClient builds the RPC chain through new getAvailableEndpoints logic: enabled keeps Infura primary plus failover fallbacks; forced sends all Infura traffic (including block polling) to failover URLs when configured, bypassing Infura; custom primaries are unchanged.

Tests and helpers switch from isRpcFailoverEnabled to rpcFailoverMode, with coverage for forced routing and selector defaults.

Reviewed by Cursor Bugbot for commit 50e82f0. Bugbot is set up for automated code reviews on this repo. Configure here.

@cryptodev-2s cryptodev-2s requested review from a team as code owners June 17, 2026 17:07
@cryptodev-2s cryptodev-2s self-assigned this Jun 17, 2026
@cryptodev-2s cryptodev-2s marked this pull request as draft June 17, 2026 19:36
Thread isRpcFailoverForced through createNetworkClient, createRpcServiceChain,
and createAutoManagedNetworkClient. When the force flag is on for an Infura
endpoint that has failover URLs, the endpoint chain is built from failovers
only, bypassing Infura entirely.
… param

Add a disableRpcFailoverForced reconstruction test mirroring the sibling, and
add the missing isRpcFailoverForced JSDoc tags.
…e-enabled flag

Subscribe to RemoteFeatureFlagController state changes and read the forced
failover flag on init, reconstructing affected network clients. Add public
enableRpcFailoverForced/disableRpcFailoverForced methods and their messenger
action types. Update existing tests for the new createAutoManagedNetworkClient
argument and the new auto-managed client methods.
Export NetworkControllerEnableRpcFailoverForcedAction and
NetworkControllerDisableRpcFailoverForcedAction, and update the init JSDoc to
mention both failover flags.
…form prefix

Rename the remote flag key from wallet-framework-rpc-failover-force-enabled to
core-platform-rpc-failover-force-enabled to match the team's new name.
@cryptodev-2s cryptodev-2s force-pushed the feat/force-rpc-failover branch from a049dda to 0bd5566 Compare June 18, 2026 07:53
@cryptodev-2s cryptodev-2s marked this pull request as ready for review June 18, 2026 08:04
@cryptodev-2s

Copy link
Copy Markdown
Contributor Author

@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@7.5.2-preview-0bd5566
@metamask-previews/accounts-controller@39.0.1-preview-0bd5566
@metamask-previews/address-book-controller@7.1.2-preview-0bd5566
@metamask-previews/ai-controllers@0.7.0-preview-0bd5566
@metamask-previews/analytics-controller@1.1.1-preview-0bd5566
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-0bd5566
@metamask-previews/announcement-controller@8.1.0-preview-0bd5566
@metamask-previews/app-metadata-controller@2.0.1-preview-0bd5566
@metamask-previews/approval-controller@9.0.2-preview-0bd5566
@metamask-previews/assets-controller@9.0.1-preview-0bd5566
@metamask-previews/assets-controllers@109.1.0-preview-0bd5566
@metamask-previews/authenticated-user-storage@2.0.0-preview-0bd5566
@metamask-previews/base-controller@9.1.0-preview-0bd5566
@metamask-previews/base-data-service@0.1.3-preview-0bd5566
@metamask-previews/bridge-controller@75.1.1-preview-0bd5566
@metamask-previews/bridge-status-controller@72.1.0-preview-0bd5566
@metamask-previews/build-utils@3.0.4-preview-0bd5566
@metamask-previews/chain-agnostic-permission@1.6.2-preview-0bd5566
@metamask-previews/chomp-api-service@3.1.0-preview-0bd5566
@metamask-previews/claims-controller@0.5.3-preview-0bd5566
@metamask-previews/client-controller@1.0.1-preview-0bd5566
@metamask-previews/compliance-controller@2.1.0-preview-0bd5566
@metamask-previews/composable-controller@12.0.1-preview-0bd5566
@metamask-previews/config-registry-controller@0.4.1-preview-0bd5566
@metamask-previews/connectivity-controller@0.2.0-preview-0bd5566
@metamask-previews/controller-utils@12.2.0-preview-0bd5566
@metamask-previews/core-backend@6.3.3-preview-0bd5566
@metamask-previews/delegation-controller@3.0.2-preview-0bd5566
@metamask-previews/earn-controller@12.2.0-preview-0bd5566
@metamask-previews/eip-5792-middleware@3.0.4-preview-0bd5566
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-0bd5566
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-0bd5566
@metamask-previews/ens-controller@19.1.3-preview-0bd5566
@metamask-previews/eth-block-tracker@15.0.1-preview-0bd5566
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-0bd5566
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-0bd5566
@metamask-previews/foundryup@1.0.1-preview-0bd5566
@metamask-previews/gas-fee-controller@26.2.2-preview-0bd5566
@metamask-previews/gator-permissions-controller@4.2.0-preview-0bd5566
@metamask-previews/geolocation-controller@0.1.3-preview-0bd5566
@metamask-previews/json-rpc-engine@10.5.0-preview-0bd5566
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-0bd5566
@metamask-previews/keyring-controller@27.1.0-preview-0bd5566
@metamask-previews/logging-controller@8.0.2-preview-0bd5566
@metamask-previews/message-manager@14.1.2-preview-0bd5566
@metamask-previews/messenger@1.2.0-preview-0bd5566
@metamask-previews/messenger-cli@0.2.0-preview-0bd5566
@metamask-previews/money-account-balance-service@2.1.0-preview-0bd5566
@metamask-previews/money-account-controller@0.3.3-preview-0bd5566
@metamask-previews/money-account-upgrade-controller@2.0.5-preview-0bd5566
@metamask-previews/multichain-account-service@10.0.3-preview-0bd5566
@metamask-previews/multichain-api-middleware@3.1.4-preview-0bd5566
@metamask-previews/multichain-network-controller@3.1.3-preview-0bd5566
@metamask-previews/multichain-transactions-controller@7.1.1-preview-0bd5566
@metamask-previews/name-controller@9.1.2-preview-0bd5566
@metamask-previews/network-controller@32.0.0-preview-0bd5566
@metamask-previews/network-enablement-controller@5.3.0-preview-0bd5566
@metamask-previews/notification-services-controller@24.1.3-preview-0bd5566
@metamask-previews/passkey-controller@2.0.1-preview-0bd5566
@metamask-previews/permission-controller@13.1.1-preview-0bd5566
@metamask-previews/permission-log-controller@5.1.0-preview-0bd5566
@metamask-previews/perps-controller@8.1.0-preview-0bd5566
@metamask-previews/phishing-controller@17.2.0-preview-0bd5566
@metamask-previews/polling-controller@16.0.6-preview-0bd5566
@metamask-previews/preferences-controller@23.1.0-preview-0bd5566
@metamask-previews/profile-metrics-controller@3.2.0-preview-0bd5566
@metamask-previews/profile-sync-controller@28.2.0-preview-0bd5566
@metamask-previews/ramps-controller@14.2.0-preview-0bd5566
@metamask-previews/rate-limit-controller@7.0.1-preview-0bd5566
@metamask-previews/react-data-query@0.2.1-preview-0bd5566
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-0bd5566
@metamask-previews/sample-controllers@5.0.1-preview-0bd5566
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-0bd5566
@metamask-previews/selected-network-controller@26.1.3-preview-0bd5566
@metamask-previews/shield-controller@5.1.2-preview-0bd5566
@metamask-previews/signature-controller@39.2.5-preview-0bd5566
@metamask-previews/smart-transactions-controller@24.2.1-preview-0bd5566
@metamask-previews/snap-account-service@0.3.1-preview-0bd5566
@metamask-previews/social-controllers@2.3.1-preview-0bd5566
@metamask-previews/storage-service@1.0.2-preview-0bd5566
@metamask-previews/subscription-controller@6.2.0-preview-0bd5566
@metamask-previews/transaction-controller@68.0.1-preview-0bd5566
@metamask-previews/transaction-pay-controller@23.9.0-preview-0bd5566
@metamask-previews/user-operation-controller@41.2.4-preview-0bd5566
@metamask-previews/wallet@3.0.0-preview-0bd5566
@metamask-previews/wallet-cli@0.0.0-preview-0bd5566

@cryptodev-2s cryptodev-2s force-pushed the feat/force-rpc-failover branch from 54126df to 0bd5566 Compare June 18, 2026 10:44
Resolve create-network-client.ts by keeping main's URL-based isInfura (#9125)
plus the forced-failover branch. Resolve NetworkController.test.ts by dropping
the stale megaeth-testnet expectation that main replaced with megaeth-testnet-v2.
@cryptodev-2s

Copy link
Copy Markdown
Contributor Author

@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@7.5.2-preview-87604839b
@metamask-previews/accounts-controller@39.0.1-preview-87604839b
@metamask-previews/address-book-controller@7.1.2-preview-87604839b
@metamask-previews/ai-controllers@0.7.0-preview-87604839b
@metamask-previews/analytics-controller@1.1.1-preview-87604839b
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-87604839b
@metamask-previews/announcement-controller@8.1.0-preview-87604839b
@metamask-previews/app-metadata-controller@2.0.1-preview-87604839b
@metamask-previews/approval-controller@9.0.2-preview-87604839b
@metamask-previews/assets-controller@9.0.1-preview-87604839b
@metamask-previews/assets-controllers@109.1.0-preview-87604839b
@metamask-previews/authenticated-user-storage@2.0.0-preview-87604839b
@metamask-previews/base-controller@9.1.0-preview-87604839b
@metamask-previews/base-data-service@0.1.3-preview-87604839b
@metamask-previews/bridge-controller@75.1.1-preview-87604839b
@metamask-previews/bridge-status-controller@72.1.0-preview-87604839b
@metamask-previews/build-utils@3.0.4-preview-87604839b
@metamask-previews/chain-agnostic-permission@1.6.2-preview-87604839b
@metamask-previews/chomp-api-service@3.1.0-preview-87604839b
@metamask-previews/claims-controller@0.5.3-preview-87604839b
@metamask-previews/client-controller@1.0.1-preview-87604839b
@metamask-previews/compliance-controller@2.1.0-preview-87604839b
@metamask-previews/composable-controller@12.0.1-preview-87604839b
@metamask-previews/config-registry-controller@0.4.1-preview-87604839b
@metamask-previews/connectivity-controller@0.2.0-preview-87604839b
@metamask-previews/controller-utils@12.2.0-preview-87604839b
@metamask-previews/core-backend@6.3.3-preview-87604839b
@metamask-previews/delegation-controller@3.0.2-preview-87604839b
@metamask-previews/earn-controller@12.2.0-preview-87604839b
@metamask-previews/eip-5792-middleware@3.0.4-preview-87604839b
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-87604839b
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-87604839b
@metamask-previews/ens-controller@19.1.3-preview-87604839b
@metamask-previews/eth-block-tracker@15.0.1-preview-87604839b
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-87604839b
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-87604839b
@metamask-previews/foundryup@1.0.1-preview-87604839b
@metamask-previews/gas-fee-controller@26.2.2-preview-87604839b
@metamask-previews/gator-permissions-controller@4.2.0-preview-87604839b
@metamask-previews/geolocation-controller@0.1.3-preview-87604839b
@metamask-previews/json-rpc-engine@10.5.0-preview-87604839b
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-87604839b
@metamask-previews/keyring-controller@27.1.0-preview-87604839b
@metamask-previews/logging-controller@8.0.2-preview-87604839b
@metamask-previews/message-manager@14.1.2-preview-87604839b
@metamask-previews/messenger@1.2.0-preview-87604839b
@metamask-previews/messenger-cli@0.2.0-preview-87604839b
@metamask-previews/money-account-balance-service@2.1.0-preview-87604839b
@metamask-previews/money-account-controller@0.3.3-preview-87604839b
@metamask-previews/money-account-upgrade-controller@2.0.5-preview-87604839b
@metamask-previews/multichain-account-service@10.0.3-preview-87604839b
@metamask-previews/multichain-api-middleware@3.1.4-preview-87604839b
@metamask-previews/multichain-network-controller@3.1.3-preview-87604839b
@metamask-previews/multichain-transactions-controller@7.1.1-preview-87604839b
@metamask-previews/name-controller@9.1.2-preview-87604839b
@metamask-previews/network-controller@32.0.0-preview-87604839b
@metamask-previews/network-enablement-controller@5.3.0-preview-87604839b
@metamask-previews/notification-services-controller@24.1.3-preview-87604839b
@metamask-previews/passkey-controller@2.0.1-preview-87604839b
@metamask-previews/permission-controller@13.1.1-preview-87604839b
@metamask-previews/permission-log-controller@5.1.0-preview-87604839b
@metamask-previews/perps-controller@8.1.0-preview-87604839b
@metamask-previews/phishing-controller@17.2.0-preview-87604839b
@metamask-previews/polling-controller@16.0.6-preview-87604839b
@metamask-previews/preferences-controller@23.1.0-preview-87604839b
@metamask-previews/profile-metrics-controller@3.2.0-preview-87604839b
@metamask-previews/profile-sync-controller@28.2.0-preview-87604839b
@metamask-previews/ramps-controller@14.2.0-preview-87604839b
@metamask-previews/rate-limit-controller@7.0.1-preview-87604839b
@metamask-previews/react-data-query@0.2.1-preview-87604839b
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-87604839b
@metamask-previews/sample-controllers@5.0.1-preview-87604839b
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-87604839b
@metamask-previews/selected-network-controller@26.1.3-preview-87604839b
@metamask-previews/shield-controller@5.1.2-preview-87604839b
@metamask-previews/signature-controller@39.2.5-preview-87604839b
@metamask-previews/smart-transactions-controller@24.2.2-preview-87604839b
@metamask-previews/snap-account-service@0.3.1-preview-87604839b
@metamask-previews/social-controllers@2.3.1-preview-87604839b
@metamask-previews/storage-service@1.0.2-preview-87604839b
@metamask-previews/subscription-controller@6.2.0-preview-87604839b
@metamask-previews/transaction-controller@68.0.1-preview-87604839b
@metamask-previews/transaction-pay-controller@23.10.0-preview-87604839b
@metamask-previews/user-operation-controller@41.2.4-preview-87604839b
@metamask-previews/wallet@3.0.0-preview-87604839b
@metamask-previews/wallet-cli@0.0.0-preview-87604839b

@cryptodev-2s

Copy link
Copy Markdown
Contributor Author

@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@7.5.2-preview-eca6f2051
@metamask-previews/accounts-controller@39.0.1-preview-eca6f2051
@metamask-previews/address-book-controller@7.1.2-preview-eca6f2051
@metamask-previews/ai-controllers@0.7.0-preview-eca6f2051
@metamask-previews/analytics-controller@1.1.1-preview-eca6f2051
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-eca6f2051
@metamask-previews/announcement-controller@8.1.0-preview-eca6f2051
@metamask-previews/app-metadata-controller@2.0.1-preview-eca6f2051
@metamask-previews/approval-controller@9.0.2-preview-eca6f2051
@metamask-previews/assets-controller@9.0.1-preview-eca6f2051
@metamask-previews/assets-controllers@109.2.0-preview-eca6f2051
@metamask-previews/authenticated-user-storage@2.0.0-preview-eca6f2051
@metamask-previews/base-controller@9.1.0-preview-eca6f2051
@metamask-previews/base-data-service@0.1.3-preview-eca6f2051
@metamask-previews/bridge-controller@75.1.1-preview-eca6f2051
@metamask-previews/bridge-status-controller@72.1.0-preview-eca6f2051
@metamask-previews/build-utils@3.0.4-preview-eca6f2051
@metamask-previews/chain-agnostic-permission@1.6.2-preview-eca6f2051
@metamask-previews/chomp-api-service@3.1.0-preview-eca6f2051
@metamask-previews/claims-controller@0.5.3-preview-eca6f2051
@metamask-previews/client-controller@1.0.1-preview-eca6f2051
@metamask-previews/compliance-controller@2.1.0-preview-eca6f2051
@metamask-previews/composable-controller@12.0.1-preview-eca6f2051
@metamask-previews/config-registry-controller@0.4.1-preview-eca6f2051
@metamask-previews/connectivity-controller@0.2.0-preview-eca6f2051
@metamask-previews/controller-utils@12.2.0-preview-eca6f2051
@metamask-previews/core-backend@6.3.3-preview-eca6f2051
@metamask-previews/delegation-controller@3.0.2-preview-eca6f2051
@metamask-previews/earn-controller@12.2.0-preview-eca6f2051
@metamask-previews/eip-5792-middleware@3.0.4-preview-eca6f2051
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-eca6f2051
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-eca6f2051
@metamask-previews/ens-controller@19.1.3-preview-eca6f2051
@metamask-previews/eth-block-tracker@15.0.1-preview-eca6f2051
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-eca6f2051
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-eca6f2051
@metamask-previews/foundryup@1.0.1-preview-eca6f2051
@metamask-previews/gas-fee-controller@26.2.2-preview-eca6f2051
@metamask-previews/gator-permissions-controller@4.2.0-preview-eca6f2051
@metamask-previews/geolocation-controller@0.1.3-preview-eca6f2051
@metamask-previews/json-rpc-engine@10.5.0-preview-eca6f2051
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-eca6f2051
@metamask-previews/keyring-controller@27.1.0-preview-eca6f2051
@metamask-previews/logging-controller@8.0.2-preview-eca6f2051
@metamask-previews/message-manager@14.1.2-preview-eca6f2051
@metamask-previews/messenger@1.2.0-preview-eca6f2051
@metamask-previews/messenger-cli@0.2.0-preview-eca6f2051
@metamask-previews/money-account-balance-service@2.1.0-preview-eca6f2051
@metamask-previews/money-account-controller@0.3.3-preview-eca6f2051
@metamask-previews/money-account-upgrade-controller@2.0.5-preview-eca6f2051
@metamask-previews/multichain-account-service@10.0.3-preview-eca6f2051
@metamask-previews/multichain-api-middleware@3.1.4-preview-eca6f2051
@metamask-previews/multichain-network-controller@3.1.3-preview-eca6f2051
@metamask-previews/multichain-transactions-controller@7.1.1-preview-eca6f2051
@metamask-previews/name-controller@9.1.2-preview-eca6f2051
@metamask-previews/network-controller@32.0.0-preview-eca6f2051
@metamask-previews/network-enablement-controller@5.3.0-preview-eca6f2051
@metamask-previews/notification-services-controller@24.1.3-preview-eca6f2051
@metamask-previews/passkey-controller@2.0.1-preview-eca6f2051
@metamask-previews/permission-controller@13.1.1-preview-eca6f2051
@metamask-previews/permission-log-controller@5.1.0-preview-eca6f2051
@metamask-previews/perps-controller@8.2.0-preview-eca6f2051
@metamask-previews/phishing-controller@17.2.0-preview-eca6f2051
@metamask-previews/polling-controller@16.0.6-preview-eca6f2051
@metamask-previews/preferences-controller@23.1.0-preview-eca6f2051
@metamask-previews/profile-metrics-controller@3.2.0-preview-eca6f2051
@metamask-previews/profile-sync-controller@28.2.0-preview-eca6f2051
@metamask-previews/ramps-controller@14.3.0-preview-eca6f2051
@metamask-previews/rate-limit-controller@7.0.1-preview-eca6f2051
@metamask-previews/react-data-query@0.2.1-preview-eca6f2051
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-eca6f2051
@metamask-previews/sample-controllers@5.0.1-preview-eca6f2051
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-eca6f2051
@metamask-previews/selected-network-controller@26.1.3-preview-eca6f2051
@metamask-previews/shield-controller@5.1.2-preview-eca6f2051
@metamask-previews/signature-controller@39.2.5-preview-eca6f2051
@metamask-previews/smart-transactions-controller@24.2.2-preview-eca6f2051
@metamask-previews/snap-account-service@0.3.1-preview-eca6f2051
@metamask-previews/social-controllers@2.3.1-preview-eca6f2051
@metamask-previews/storage-service@1.0.2-preview-eca6f2051
@metamask-previews/subscription-controller@6.2.0-preview-eca6f2051
@metamask-previews/transaction-controller@68.1.0-preview-eca6f2051
@metamask-previews/transaction-pay-controller@23.13.0-preview-eca6f2051
@metamask-previews/user-operation-controller@41.2.4-preview-eca6f2051
@metamask-previews/wallet@3.0.0-preview-eca6f2051
@metamask-previews/wallet-cli@0.0.0-preview-eca6f2051

Comment thread packages/network-controller/src/NetworkController.ts Outdated
Comment thread packages/network-controller/src/create-auto-managed-network-client.ts Outdated
Drop the NetworkController enableRpcFailoverForced/disableRpcFailoverForced
methods, their messenger actions, and exports. Forced failover is driven
entirely by the remote feature flag; nothing calls these imperatively.
…loverMode

Replace the boolean walletFrameworkRpcFailoverEnabled and the forced flag with a
single corePlatformRpcFailoverMode flag (disabled/enabled/forced). The selectors
derive both isRpcFailoverEnabled and isRpcFailoverForced from it, defaulting to
disabled. NetworkController no longer reads walletFrameworkRpcFailoverEnabled.
Comment on lines +1276 to +1278
#isRpcFailoverEnabled = false;

#isRpcFailoverForced = false;

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.

Instead of having two booleans, let's bring the state directly into the controller. Then we can simplify to one RemoteFeatureFlagController:stateChange subscription too

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in e690b24. The controller now tracks a single #rpcFailoverMode field with one RemoteFeatureFlagController:stateChange subscription via getRpcFailoverMode, and the createAutoManagedNetworkClient call sites derive the enabled/forced booleans from the mode.

});

this.#isRpcFailoverEnabled = newIsRpcFailoverEnabled;
}

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.

Since we are making a breaking change we can remove enableRpcFailover and disableRpcFailover on NetworkController

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes I am planning to do this in a follow up PR

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Finally made part of this pr to close #9175 (comment)

cryptodev-2s and others added 3 commits June 24, 2026 17:31
…controller

Replace the two #isRpcFailover* booleans and their two RemoteFeatureFlagController
subscriptions with a single #rpcFailoverMode field, one subscription via
getRpcFailoverMode, and one #updateRpcFailover method. The createAutoManagedNetworkClient
call sites derive the enabled/forced booleans from the mode inline.
Comment thread packages/network-controller/src/NetworkController.ts Outdated
…lover

Remove the imperative enableRpcFailover/disableRpcFailover methods, their
messenger actions, and exported types. RPC failover is driven entirely by the
corePlatformRpcFailoverMode remote feature flag.
@cryptodev-2s

Copy link
Copy Markdown
Contributor Author

@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@7.5.3-preview-0f314298c
@metamask-previews/accounts-controller@39.0.3-preview-0f314298c
@metamask-previews/address-book-controller@7.1.2-preview-0f314298c
@metamask-previews/ai-controllers@0.7.0-preview-0f314298c
@metamask-previews/analytics-controller@1.1.1-preview-0f314298c
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-0f314298c
@metamask-previews/announcement-controller@8.1.0-preview-0f314298c
@metamask-previews/app-metadata-controller@2.0.1-preview-0f314298c
@metamask-previews/approval-controller@9.0.2-preview-0f314298c
@metamask-previews/assets-controller@9.1.0-preview-0f314298c
@metamask-previews/assets-controllers@109.2.2-preview-0f314298c
@metamask-previews/authenticated-user-storage@2.1.0-preview-0f314298c
@metamask-previews/base-controller@9.1.0-preview-0f314298c
@metamask-previews/base-data-service@0.1.3-preview-0f314298c
@metamask-previews/bitcoin-regtest-up@0.0.0-preview-0f314298c
@metamask-previews/bridge-controller@76.1.0-preview-0f314298c
@metamask-previews/bridge-status-controller@72.3.0-preview-0f314298c
@metamask-previews/build-utils@3.0.4-preview-0f314298c
@metamask-previews/chain-agnostic-permission@1.6.2-preview-0f314298c
@metamask-previews/chomp-api-service@3.1.0-preview-0f314298c
@metamask-previews/claims-controller@0.5.3-preview-0f314298c
@metamask-previews/client-controller@1.0.1-preview-0f314298c
@metamask-previews/compliance-controller@2.1.0-preview-0f314298c
@metamask-previews/composable-controller@12.0.1-preview-0f314298c
@metamask-previews/config-registry-controller@0.4.1-preview-0f314298c
@metamask-previews/connectivity-controller@0.2.0-preview-0f314298c
@metamask-previews/controller-utils@12.3.0-preview-0f314298c
@metamask-previews/core-backend@6.3.3-preview-0f314298c
@metamask-previews/delegation-controller@3.0.2-preview-0f314298c
@metamask-previews/earn-controller@12.2.1-preview-0f314298c
@metamask-previews/eip-5792-middleware@3.0.4-preview-0f314298c
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-0f314298c
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-0f314298c
@metamask-previews/ens-controller@19.1.4-preview-0f314298c
@metamask-previews/eth-block-tracker@15.0.1-preview-0f314298c
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-0f314298c
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-0f314298c
@metamask-previews/foundryup@1.0.1-preview-0f314298c
@metamask-previews/gas-fee-controller@26.2.3-preview-0f314298c
@metamask-previews/gator-permissions-controller@4.2.1-preview-0f314298c
@metamask-previews/geolocation-controller@0.1.3-preview-0f314298c
@metamask-previews/java-tron-up@0.0.0-preview-0f314298c
@metamask-previews/json-rpc-engine@10.5.0-preview-0f314298c
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-0f314298c
@metamask-previews/keyring-controller@27.1.0-preview-0f314298c
@metamask-previews/local-node-utils@0.0.0-preview-0f314298c
@metamask-previews/logging-controller@8.0.2-preview-0f314298c
@metamask-previews/message-manager@14.1.2-preview-0f314298c
@metamask-previews/messenger@1.2.0-preview-0f314298c
@metamask-previews/messenger-cli@0.2.0-preview-0f314298c
@metamask-previews/money-account-balance-service@2.1.1-preview-0f314298c
@metamask-previews/money-account-controller@0.3.3-preview-0f314298c
@metamask-previews/money-account-upgrade-controller@2.1.0-preview-0f314298c
@metamask-previews/multichain-account-service@11.0.0-preview-0f314298c
@metamask-previews/multichain-api-middleware@3.1.5-preview-0f314298c
@metamask-previews/multichain-network-controller@3.1.4-preview-0f314298c
@metamask-previews/multichain-transactions-controller@7.1.1-preview-0f314298c
@metamask-previews/name-controller@9.1.2-preview-0f314298c
@metamask-previews/network-controller@33.0.0-preview-0f314298c
@metamask-previews/network-enablement-controller@5.4.0-preview-0f314298c
@metamask-previews/notification-services-controller@24.2.0-preview-0f314298c
@metamask-previews/passkey-controller@2.0.1-preview-0f314298c
@metamask-previews/permission-controller@13.1.1-preview-0f314298c
@metamask-previews/permission-log-controller@5.1.0-preview-0f314298c
@metamask-previews/perps-controller@9.0.0-preview-0f314298c
@metamask-previews/phishing-controller@17.2.0-preview-0f314298c
@metamask-previews/polling-controller@16.0.7-preview-0f314298c
@metamask-previews/preferences-controller@23.1.0-preview-0f314298c
@metamask-previews/profile-metrics-controller@4.0.0-preview-0f314298c
@metamask-previews/profile-sync-controller@28.2.0-preview-0f314298c
@metamask-previews/ramps-controller@14.3.0-preview-0f314298c
@metamask-previews/rate-limit-controller@7.0.1-preview-0f314298c
@metamask-previews/react-data-query@0.2.1-preview-0f314298c
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-0f314298c
@metamask-previews/sample-controllers@5.0.2-preview-0f314298c
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-0f314298c
@metamask-previews/selected-network-controller@26.1.4-preview-0f314298c
@metamask-previews/shield-controller@5.1.2-preview-0f314298c
@metamask-previews/signature-controller@39.2.6-preview-0f314298c
@metamask-previews/smart-transactions-controller@24.2.3-preview-0f314298c
@metamask-previews/snap-account-service@1.0.0-preview-0f314298c
@metamask-previews/social-controllers@2.3.1-preview-0f314298c
@metamask-previews/solana-test-validator-up@0.0.0-preview-0f314298c
@metamask-previews/storage-service@1.0.2-preview-0f314298c
@metamask-previews/subscription-controller@6.2.0-preview-0f314298c
@metamask-previews/transaction-controller@68.2.0-preview-0f314298c
@metamask-previews/transaction-pay-controller@23.15.0-preview-0f314298c
@metamask-previews/user-operation-controller@41.2.5-preview-0f314298c
@metamask-previews/wallet@4.0.0-preview-0f314298c
@metamask-previews/wallet-cli@0.0.0-preview-0f314298c

Comment on lines +100 to +103
isRpcFailoverEnabled?: boolean;
isRpcFailoverForced?: boolean;

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.

Suggested change
isRpcFailoverEnabled?: boolean;
isRpcFailoverForced?: boolean;
rpcFailoverMode?: RpcFailoverMode;

There shouldn't be that many instances to update

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in 268e479. buildRootMessenger, withController, and withNetworkClient all take a single rpcFailoverMode option now.

Comment on lines +264 to +324
isRpcFailoverEnabled: boolean;
isRpcFailoverForced: boolean;

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.

Suggested change
isRpcFailoverEnabled: boolean;
isRpcFailoverForced: boolean;
rpcFailoverMode: RpcFailoverMode;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in 268e479. createNetworkClient, createRpcServiceChain, and getAvailableEndpoints all take a single rpcFailoverMode now and switch on it.

Comment on lines +258 to +262
const enableForcedRpcFailover = (): void => {
isRpcFailoverForced = true;
destroy();
networkClient = undefined;
};

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.

Maybe we only need a single setRpcFailoverMode?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Agreed, done in 268e479. The auto managed client exposes one setRpcFailoverMode and the four enable/disable methods are gone.


* @param callback - Called with each network client that has failover URLs.
*/
#forEachNetworkClientWithFailover(

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.

I guess this can be moved into updateRpcFailover instead of being a separate callback function now

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yep, inlined in 268e479. updateRpcFailover walks the registry directly and calls setRpcFailoverMode on each client that has failover URLs.

cryptodev-2s and others added 2 commits June 25, 2026 15:27
Replace the isRpcFailoverEnabled/isRpcFailoverForced booleans throughout with the
single RpcFailoverMode. createNetworkClient/createRpcServiceChain and
createAutoManagedNetworkClient take a rpcFailoverMode, the auto-managed client
exposes one setRpcFailoverMode, and #updateRpcFailover applies it directly.
@cryptodev-2s

Copy link
Copy Markdown
Contributor Author

@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@7.5.3-preview-50e82f088
@metamask-previews/accounts-controller@39.0.3-preview-50e82f088
@metamask-previews/address-book-controller@7.1.2-preview-50e82f088
@metamask-previews/ai-controllers@0.7.0-preview-50e82f088
@metamask-previews/analytics-controller@1.2.0-preview-50e82f088
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-50e82f088
@metamask-previews/announcement-controller@8.1.0-preview-50e82f088
@metamask-previews/app-metadata-controller@2.0.1-preview-50e82f088
@metamask-previews/approval-controller@9.0.2-preview-50e82f088
@metamask-previews/assets-controller@9.1.0-preview-50e82f088
@metamask-previews/assets-controllers@109.2.2-preview-50e82f088
@metamask-previews/authenticated-user-storage@2.1.0-preview-50e82f088
@metamask-previews/base-controller@9.1.0-preview-50e82f088
@metamask-previews/base-data-service@0.1.3-preview-50e82f088
@metamask-previews/bitcoin-regtest-up@0.0.0-preview-50e82f088
@metamask-previews/bridge-controller@77.0.0-preview-50e82f088
@metamask-previews/bridge-status-controller@73.0.0-preview-50e82f088
@metamask-previews/build-utils@3.0.4-preview-50e82f088
@metamask-previews/chain-agnostic-permission@1.6.2-preview-50e82f088
@metamask-previews/chomp-api-service@3.1.0-preview-50e82f088
@metamask-previews/claims-controller@0.5.3-preview-50e82f088
@metamask-previews/client-controller@1.0.1-preview-50e82f088
@metamask-previews/compliance-controller@2.1.0-preview-50e82f088
@metamask-previews/composable-controller@12.0.1-preview-50e82f088
@metamask-previews/config-registry-controller@0.4.1-preview-50e82f088
@metamask-previews/connectivity-controller@0.2.0-preview-50e82f088
@metamask-previews/controller-utils@12.3.0-preview-50e82f088
@metamask-previews/core-backend@6.3.3-preview-50e82f088
@metamask-previews/delegation-controller@3.0.2-preview-50e82f088
@metamask-previews/earn-controller@12.2.1-preview-50e82f088
@metamask-previews/eip-5792-middleware@3.0.4-preview-50e82f088
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-50e82f088
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-50e82f088
@metamask-previews/ens-controller@19.1.4-preview-50e82f088
@metamask-previews/eth-block-tracker@15.0.1-preview-50e82f088
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-50e82f088
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-50e82f088
@metamask-previews/foundryup@1.0.1-preview-50e82f088
@metamask-previews/gas-fee-controller@26.2.3-preview-50e82f088
@metamask-previews/gator-permissions-controller@4.2.1-preview-50e82f088
@metamask-previews/geolocation-controller@0.1.3-preview-50e82f088
@metamask-previews/java-tron-up@0.0.0-preview-50e82f088
@metamask-previews/json-rpc-engine@10.5.0-preview-50e82f088
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-50e82f088
@metamask-previews/keyring-controller@27.1.0-preview-50e82f088
@metamask-previews/local-node-utils@0.0.0-preview-50e82f088
@metamask-previews/logging-controller@8.0.2-preview-50e82f088
@metamask-previews/message-manager@14.1.2-preview-50e82f088
@metamask-previews/messenger@1.2.0-preview-50e82f088
@metamask-previews/messenger-cli@0.2.0-preview-50e82f088
@metamask-previews/money-account-balance-service@2.1.1-preview-50e82f088
@metamask-previews/money-account-controller@0.3.3-preview-50e82f088
@metamask-previews/money-account-upgrade-controller@2.1.0-preview-50e82f088
@metamask-previews/multichain-account-service@11.1.0-preview-50e82f088
@metamask-previews/multichain-api-middleware@3.1.5-preview-50e82f088
@metamask-previews/multichain-network-controller@3.2.0-preview-50e82f088
@metamask-previews/multichain-transactions-controller@7.1.1-preview-50e82f088
@metamask-previews/name-controller@9.1.2-preview-50e82f088
@metamask-previews/network-controller@33.0.0-preview-50e82f088
@metamask-previews/network-enablement-controller@5.4.0-preview-50e82f088
@metamask-previews/notification-services-controller@24.2.0-preview-50e82f088
@metamask-previews/passkey-controller@2.0.1-preview-50e82f088
@metamask-previews/permission-controller@13.1.1-preview-50e82f088
@metamask-previews/permission-log-controller@5.1.0-preview-50e82f088
@metamask-previews/perps-controller@9.0.0-preview-50e82f088
@metamask-previews/phishing-controller@17.2.0-preview-50e82f088
@metamask-previews/polling-controller@16.0.7-preview-50e82f088
@metamask-previews/preferences-controller@23.1.0-preview-50e82f088
@metamask-previews/profile-metrics-controller@4.0.0-preview-50e82f088
@metamask-previews/profile-sync-controller@28.2.0-preview-50e82f088
@metamask-previews/ramps-controller@15.0.0-preview-50e82f088
@metamask-previews/rate-limit-controller@7.0.1-preview-50e82f088
@metamask-previews/react-data-query@0.2.1-preview-50e82f088
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-50e82f088
@metamask-previews/sample-controllers@5.0.2-preview-50e82f088
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-50e82f088
@metamask-previews/selected-network-controller@26.1.4-preview-50e82f088
@metamask-previews/shield-controller@5.1.2-preview-50e82f088
@metamask-previews/signature-controller@39.2.6-preview-50e82f088
@metamask-previews/smart-transactions-controller@24.2.3-preview-50e82f088
@metamask-previews/snap-account-service@1.0.0-preview-50e82f088
@metamask-previews/social-controllers@2.3.1-preview-50e82f088
@metamask-previews/solana-test-validator-up@0.0.0-preview-50e82f088
@metamask-previews/storage-service@1.0.2-preview-50e82f088
@metamask-previews/subscription-controller@6.2.0-preview-50e82f088
@metamask-previews/transaction-controller@68.2.0-preview-50e82f088
@metamask-previews/transaction-pay-controller@23.16.1-preview-50e82f088
@metamask-previews/user-operation-controller@41.2.5-preview-50e82f088
@metamask-previews/wallet@5.0.0-preview-50e82f088
@metamask-previews/wallet-cli@0.0.0-preview-50e82f088

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