Skip to content

NetworkController: Make failover URLs optional - #5561

Merged
mcmire merged 2 commits into
mainfrom
make-rpc-failovers-optional
Apr 1, 2025
Merged

NetworkController: Make failover URLs optional#5561
mcmire merged 2 commits into
mainfrom
make-rpc-failovers-optional

Conversation

@mcmire

@mcmiremcmire commented Mar 27, 2025

Copy link
Copy Markdown
Collaborator

Explanation

There are two new non-optional properties that were added in a previous commit:

  • failoverUrls in RpcEndpoint (which is used in NetworkController state)
  • failoverRpcUrls in NetworkClientConfiguration (which is exposed via the network client)

Making these properties non-optional makes sense to avoid undefined, however, this is requiring clients that wish to upgrade to implement a migration to ensure that state is valid along with many other changes to test files and such which expect state to be a certain shape. We would rather avoid this right now due to some other changes to network-controller that we need to adapt to, so to make the maintenance burden lighter, we are changing these to optional. We will change them back to non-optional in another commit.

References

This PR came out of a discussion with @stanleyyconsensys and others who are trying to get the changes in this PR integrated into Mobile: #5527

Changelog

(Updated in PR)

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 highlighted breaking changes using the "BREAKING" category above as appropriate
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@mcmire
mcmireforce-pushed the make-rpc-failovers-optional branch from f2378b3 to 9b7ee15CompareMarch 27, 2025 14:56
@mcmire
mcmire marked this pull request as ready for review March 27, 2025 16:51
@mcmire
mcmire requested review from a team as code ownersMarch 27, 2025 16:51
@mcmiremcmire added the team-wallet-framework Deprecated: Please use `team-core-platform` instead. label Mar 27, 2025
@mcmire
mcmire marked this pull request as draft March 27, 2025 16:51
@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": "27.0.0-preview-f09aaadc",
"@metamask-previews/address-book-controller": "6.0.3-preview-f09aaadc",
"@metamask-previews/announcement-controller": "7.0.3-preview-f09aaadc",
"@metamask-previews/approval-controller": "7.1.3-preview-f09aaadc",
"@metamask-previews/assets-controllers": "55.0.1-preview-f09aaadc",
"@metamask-previews/base-controller": "8.0.0-preview-f09aaadc",
"@metamask-previews/bridge-controller": "11.0.0-preview-f09aaadc",
"@metamask-previews/bridge-status-controller": "10.0.0-preview-f09aaadc",
"@metamask-previews/build-utils": "3.0.3-preview-f09aaadc",
"@metamask-previews/chain-agnostic-permission": "0.3.0-preview-f09aaadc",
"@metamask-previews/composable-controller": "11.0.0-preview-f09aaadc",
"@metamask-previews/controller-utils": "11.6.0-preview-f09aaadc",
"@metamask-previews/earn-controller": "0.10.0-preview-f09aaadc",
"@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-f09aaadc",
"@metamask-previews/ens-controller": "16.0.0-preview-f09aaadc",
"@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-f09aaadc",
"@metamask-previews/gas-fee-controller": "23.0.0-preview-f09aaadc",
"@metamask-previews/json-rpc-engine": "10.0.3-preview-f09aaadc",
"@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-f09aaadc",
"@metamask-previews/keyring-controller": "21.0.1-preview-f09aaadc",
"@metamask-previews/logging-controller": "6.0.4-preview-f09aaadc",
"@metamask-previews/message-manager": "12.0.1-preview-f09aaadc",
"@metamask-previews/multichain": "4.0.0-preview-f09aaadc",
"@metamask-previews/multichain-api-middleware": "0.1.1-preview-f09aaadc",
"@metamask-previews/multichain-network-controller": "0.3.0-preview-f09aaadc",
"@metamask-previews/multichain-transactions-controller": "0.8.0-preview-f09aaadc",
"@metamask-previews/name-controller": "8.0.3-preview-f09aaadc",
"@metamask-previews/network-controller": "23.1.0-preview-f09aaadc",
"@metamask-previews/notification-services-controller": "5.0.1-preview-f09aaadc",
"@metamask-previews/permission-controller": "11.0.6-preview-f09aaadc",
"@metamask-previews/permission-log-controller": "3.0.3-preview-f09aaadc",
"@metamask-previews/phishing-controller": "12.4.1-preview-f09aaadc",
"@metamask-previews/polling-controller": "13.0.0-preview-f09aaadc",
"@metamask-previews/preferences-controller": "17.0.0-preview-f09aaadc",
"@metamask-previews/profile-sync-controller": "11.0.0-preview-f09aaadc",
"@metamask-previews/queued-request-controller": "10.0.0-preview-f09aaadc",
"@metamask-previews/rate-limit-controller": "6.0.3-preview-f09aaadc",
"@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-f09aaadc",
"@metamask-previews/sample-controllers": "0.0.0-preview-f09aaadc",
"@metamask-previews/selected-network-controller": "22.0.0-preview-f09aaadc",
"@metamask-previews/signature-controller": "27.0.0-preview-f09aaadc",
"@metamask-previews/token-search-discovery-controller": "2.1.0-preview-f09aaadc",
"@metamask-previews/transaction-controller": "52.2.0-preview-f09aaadc",
"@metamask-previews/user-operation-controller": "31.0.0-preview-f09aaadc"
}

@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": "27.0.0-preview-eb4d653e",
"@metamask-previews/address-book-controller": "6.0.3-preview-eb4d653e",
"@metamask-previews/announcement-controller": "7.0.3-preview-eb4d653e",
"@metamask-previews/approval-controller": "7.1.3-preview-eb4d653e",
"@metamask-previews/assets-controllers": "55.0.1-preview-eb4d653e",
"@metamask-previews/base-controller": "8.0.0-preview-eb4d653e",
"@metamask-previews/bridge-controller": "11.0.0-preview-eb4d653e",
"@metamask-previews/bridge-status-controller": "10.0.0-preview-eb4d653e",
"@metamask-previews/build-utils": "3.0.3-preview-eb4d653e",
"@metamask-previews/chain-agnostic-permission": "0.3.0-preview-eb4d653e",
"@metamask-previews/composable-controller": "11.0.0-preview-eb4d653e",
"@metamask-previews/controller-utils": "11.6.0-preview-eb4d653e",
"@metamask-previews/earn-controller": "0.10.0-preview-eb4d653e",
"@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-eb4d653e",
"@metamask-previews/ens-controller": "16.0.0-preview-eb4d653e",
"@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-eb4d653e",
"@metamask-previews/gas-fee-controller": "23.0.0-preview-eb4d653e",
"@metamask-previews/json-rpc-engine": "10.0.3-preview-eb4d653e",
"@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-eb4d653e",
"@metamask-previews/keyring-controller": "21.0.1-preview-eb4d653e",
"@metamask-previews/logging-controller": "6.0.4-preview-eb4d653e",
"@metamask-previews/message-manager": "12.0.1-preview-eb4d653e",
"@metamask-previews/multichain": "4.0.0-preview-eb4d653e",
"@metamask-previews/multichain-api-middleware": "0.1.1-preview-eb4d653e",
"@metamask-previews/multichain-network-controller": "0.3.0-preview-eb4d653e",
"@metamask-previews/multichain-transactions-controller": "0.8.0-preview-eb4d653e",
"@metamask-previews/name-controller": "8.0.3-preview-eb4d653e",
"@metamask-previews/network-controller": "23.1.0-preview-eb4d653e",
"@metamask-previews/notification-services-controller": "5.0.1-preview-eb4d653e",
"@metamask-previews/permission-controller": "11.0.6-preview-eb4d653e",
"@metamask-previews/permission-log-controller": "3.0.3-preview-eb4d653e",
"@metamask-previews/phishing-controller": "12.4.1-preview-eb4d653e",
"@metamask-previews/polling-controller": "13.0.0-preview-eb4d653e",
"@metamask-previews/preferences-controller": "17.0.0-preview-eb4d653e",
"@metamask-previews/profile-sync-controller": "11.0.0-preview-eb4d653e",
"@metamask-previews/queued-request-controller": "10.0.0-preview-eb4d653e",
"@metamask-previews/rate-limit-controller": "6.0.3-preview-eb4d653e",
"@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-eb4d653e",
"@metamask-previews/sample-controllers": "0.0.0-preview-eb4d653e",
"@metamask-previews/selected-network-controller": "22.0.0-preview-eb4d653e",
"@metamask-previews/signature-controller": "27.0.0-preview-eb4d653e",
"@metamask-previews/token-search-discovery-controller": "2.1.0-preview-eb4d653e",
"@metamask-previews/transaction-controller": "52.2.0-preview-eb4d653e",
"@metamask-previews/user-operation-controller": "31.0.0-preview-eb4d653e"
}

@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": "27.0.0-preview-bf2d2c4c",
"@metamask-previews/address-book-controller": "6.0.3-preview-bf2d2c4c",
"@metamask-previews/announcement-controller": "7.0.3-preview-bf2d2c4c",
"@metamask-previews/approval-controller": "7.1.3-preview-bf2d2c4c",
"@metamask-previews/assets-controllers": "55.0.1-preview-bf2d2c4c",
"@metamask-previews/base-controller": "8.0.0-preview-bf2d2c4c",
"@metamask-previews/bridge-controller": "11.0.0-preview-bf2d2c4c",
"@metamask-previews/bridge-status-controller": "10.0.0-preview-bf2d2c4c",
"@metamask-previews/build-utils": "3.0.3-preview-bf2d2c4c",
"@metamask-previews/chain-agnostic-permission": "0.3.0-preview-bf2d2c4c",
"@metamask-previews/composable-controller": "11.0.0-preview-bf2d2c4c",
"@metamask-previews/controller-utils": "11.6.0-preview-bf2d2c4c",
"@metamask-previews/earn-controller": "0.10.0-preview-bf2d2c4c",
"@metamask-previews/eip1193-permission-middleware": "0.1.0-preview-bf2d2c4c",
"@metamask-previews/ens-controller": "16.0.0-preview-bf2d2c4c",
"@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-bf2d2c4c",
"@metamask-previews/gas-fee-controller": "23.0.0-preview-bf2d2c4c",
"@metamask-previews/json-rpc-engine": "10.0.3-preview-bf2d2c4c",
"@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-bf2d2c4c",
"@metamask-previews/keyring-controller": "21.0.1-preview-bf2d2c4c",
"@metamask-previews/logging-controller": "6.0.4-preview-bf2d2c4c",
"@metamask-previews/message-manager": "12.0.1-preview-bf2d2c4c",
"@metamask-previews/multichain": "4.0.0-preview-bf2d2c4c",
"@metamask-previews/multichain-api-middleware": "0.1.1-preview-bf2d2c4c",
"@metamask-previews/multichain-network-controller": "0.3.0-preview-bf2d2c4c",
"@metamask-previews/multichain-transactions-controller": "0.8.0-preview-bf2d2c4c",
"@metamask-previews/name-controller": "8.0.3-preview-bf2d2c4c",
"@metamask-previews/network-controller": "23.1.0-preview-bf2d2c4c",
"@metamask-previews/notification-services-controller": "5.0.1-preview-bf2d2c4c",
"@metamask-previews/permission-controller": "11.0.6-preview-bf2d2c4c",
"@metamask-previews/permission-log-controller": "3.0.3-preview-bf2d2c4c",
"@metamask-previews/phishing-controller": "12.4.1-preview-bf2d2c4c",
"@metamask-previews/polling-controller": "13.0.0-preview-bf2d2c4c",
"@metamask-previews/preferences-controller": "17.0.0-preview-bf2d2c4c",
"@metamask-previews/profile-sync-controller": "11.0.0-preview-bf2d2c4c",
"@metamask-previews/queued-request-controller": "10.0.0-preview-bf2d2c4c",
"@metamask-previews/rate-limit-controller": "6.0.3-preview-bf2d2c4c",
"@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-bf2d2c4c",
"@metamask-previews/sample-controllers": "0.0.0-preview-bf2d2c4c",
"@metamask-previews/selected-network-controller": "22.0.0-preview-bf2d2c4c",
"@metamask-previews/signature-controller": "27.0.0-preview-bf2d2c4c",
"@metamask-previews/token-search-discovery-controller": "2.1.0-preview-bf2d2c4c",
"@metamask-previews/transaction-controller": "52.2.0-preview-bf2d2c4c",
"@metamask-previews/user-operation-controller": "31.0.0-preview-bf2d2c4c"
}

There are two new non-optional properties that were added in a previous
commit:
- `failoverUrls` in `RpcEndpoint` (which is used in NetworkController
state)
- `failoverRpcUrls` in `NetworkClientConfiguration` (which is exposed
via the network client)
Making these properties non-optional makes sense to avoid `undefined`,
however, this is requiring clients that wish to upgrade to implement a
migration to ensure that state is valid along with many other changes
to test files and such which expect state to be a certain shape. We
would rather avoid this right now due to some other changes to
`network-controller` that we need to adapt to, so to make the
maintenance burden lighter, we are changing these to optional. We will
change them back to non-optional in another commit.
@mcmire
mcmireforce-pushed the make-rpc-failovers-optional branch from 755989b to 924db9eCompareApril 1, 2025 21:48
@mcmire
mcmire marked this pull request as ready for review April 1, 2025 21:54
@mcmire

Copy link
Copy Markdown
CollaboratorAuthor

Conflicts fixed, ready for review again.

@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
mcmire merged commit 8f4f5c9 into mainApr 1, 2025
@mcmire
mcmire deleted the make-rpc-failovers-optional branch April 1, 2025 22:29
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@mcmire@cryptodev-2s@desi