core
core copied to clipboard
Group network configurations by chain
Explanation
Currently, in the client, it is possible to have multiple networks with different RPC endpoint URLs representing the same chain. This creates a problem because if all we have is a chain ID, we don't know which URL to use for requests.
To solve this, we plan on consolidating the UX on the client side such that each network corresponds to exactly one chain. Users can then select which default RPC URL they'd like to use for requests. This commit implements the controller changes necessary to support this UX.
Here are some more details on the changes here:
-
The concept of a network configuration has been repurposed such that instead of representing an RPC endpoint, it now represents a whole chain.
- A network configuration may have multiple RPC endpoints, and one of them must be designated as the default.
- Some RPC endpoints are special in that they represent Infura API URLs; these have the same object shape as "non-Infura" (custom) RPC endpoints, but the Infura project ID is hidden and injected into the RPC URL when creating the network client.
- There is no longer a 1-to-1 relationship between network configuration and network client; rather, the 1-to-1 relationship exists between RPC endpoint and network client. This means that the ID of the network client which is created for an RPC endpoint is stored on that RPC endpoint instead of the whole network configuration.
-
The
networkConfigurations
state property has been replaced withnetworkConfigurationsByChainId
. This continues to be an object, but the data inside is organized such that network configurations are identified by chain ID instead of network client ID as they were previously. -
The methods
upsertNetworkConfiguration
andremoveNetworkConfiguration
have been removed. These methods always did more than simply add or remove a network configuration; they also updated the registry of network clients. Instead, these methods have been replaced withaddNetwork
,updateNetwork
, andremoveNetwork
.-
addNetwork
creates new network clients for each RPC endpoint in the given network configuration. -
updateNetwork
takes a chain ID referring to a network configuration and a draft version of that network configuration, and adds or removes network clients for added or removed RPC endpoints. -
removeNetwork
takes a chain ID referring to a network configuration and removes the network clients for each of its RPC endpoints.
-
-
In addition, due to the changes to network configuration itself, there are new restrictions on
networkConfigurationsByChainId
, which are validated on initialization and on update. These are:- The network controller cannot be initialized with an empty collection of network configurations. This is because there must be a selected network client so that consumers have a provider to use out of the gate.
- Consequently, the last network configuration cannot be removed.
- The network configuration that contains a reference to the currently selected network client cannot be removed.
- The chain ID of a network configuration must match the same chain that it's filed under in
networkConfigurationsByChainId
. - No two network configurations can have the same chain ID.
- A RPC endpoint in a network configuration must have a well-formed URL.
- A network configuration cannot have duplicate RPC endpoints.
- No two RPC endpoints (regardless of network configuration) can have the same URL. Equality is currently determined by normalizing URLs as per RFC 3986 and may include data like request headers in the future.
- If a network configuration has an Infura RPC endpoint, its chain ID must match the set chain ID of the network configuration.
- Changing the chain ID of a network configuration is possible, but any existing Infura RPC endpoint must be replaced with the one that matches the new chain ID.
- No two RPC endpoints (regardless of network configuration) can have the same network client ID.
-
Finally, the
trackMetaMetricsEvent
option has been removed from the constructor. This was previously used inupsertNetworkConfiguration
to create a MetaMetrics event when a new network added, but I've added a new eventNetworkController:networkAdded
to allow the client to do this on its own accord.
References
Fixes #4189. Fixes #3793.
Changelog
(Updated in the 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
👍 Dependency issues cleared. Learn more about Socket for GitHub ↗︎
This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored.
@metamaskbot publish-preview
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": "17.0.0-preview-0ee2e0a7",
"@metamask-previews/address-book-controller": "5.0.0-preview-0ee2e0a7",
"@metamask-previews/announcement-controller": "7.0.0-preview-0ee2e0a7",
"@metamask-previews/approval-controller": "7.0.0-preview-0ee2e0a7",
"@metamask-previews/assets-controllers": "33.0.0-preview-0ee2e0a7",
"@metamask-previews/base-controller": "6.0.0-preview-0ee2e0a7",
"@metamask-previews/build-utils": "3.0.0-preview-0ee2e0a7",
"@metamask-previews/chain-controller": "0.1.0-preview-0ee2e0a7",
"@metamask-previews/composable-controller": "7.0.0-preview-0ee2e0a7",
"@metamask-previews/controller-utils": "11.0.0-preview-0ee2e0a7",
"@metamask-previews/ens-controller": "12.0.0-preview-0ee2e0a7",
"@metamask-previews/eth-json-rpc-provider": "4.0.0-preview-0ee2e0a7",
"@metamask-previews/gas-fee-controller": "17.0.0-preview-0ee2e0a7",
"@metamask-previews/json-rpc-engine": "9.0.0-preview-0ee2e0a7",
"@metamask-previews/json-rpc-middleware-stream": "8.0.0-preview-0ee2e0a7",
"@metamask-previews/keyring-controller": "17.1.0-preview-0ee2e0a7",
"@metamask-previews/logging-controller": "5.0.0-preview-0ee2e0a7",
"@metamask-previews/message-manager": "10.0.0-preview-0ee2e0a7",
"@metamask-previews/name-controller": "8.0.0-preview-0ee2e0a7",
"@metamask-previews/network-controller": "19.0.0-preview-0ee2e0a7",
"@metamask-previews/notification-controller": "6.0.0-preview-0ee2e0a7",
"@metamask-previews/notification-services-controller": "0.0.0-preview-0ee2e0a7",
"@metamask-previews/permission-controller": "10.0.0-preview-0ee2e0a7",
"@metamask-previews/permission-log-controller": "3.0.0-preview-0ee2e0a7",
"@metamask-previews/phishing-controller": "10.0.0-preview-0ee2e0a7",
"@metamask-previews/polling-controller": "8.0.0-preview-0ee2e0a7",
"@metamask-previews/preferences-controller": "13.0.0-preview-0ee2e0a7",
"@metamask-previews/profile-sync-controller": "0.0.0-preview-0ee2e0a7",
"@metamask-previews/queued-request-controller": "0.12.0-preview-0ee2e0a7",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-0ee2e0a7",
"@metamask-previews/selected-network-controller": "15.0.2-preview-0ee2e0a7",
"@metamask-previews/signature-controller": "18.0.0-preview-0ee2e0a7",
"@metamask-previews/transaction-controller": "33.0.0-preview-0ee2e0a7",
"@metamask-previews/user-operation-controller": "12.0.0-preview-0ee2e0a7"
}
@metamaskbot publish-preview
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": "17.0.0-preview-98d4c2a0",
"@metamask-previews/address-book-controller": "5.0.0-preview-98d4c2a0",
"@metamask-previews/announcement-controller": "7.0.0-preview-98d4c2a0",
"@metamask-previews/approval-controller": "7.0.0-preview-98d4c2a0",
"@metamask-previews/assets-controllers": "33.0.0-preview-98d4c2a0",
"@metamask-previews/base-controller": "6.0.0-preview-98d4c2a0",
"@metamask-previews/build-utils": "3.0.0-preview-98d4c2a0",
"@metamask-previews/chain-controller": "0.1.0-preview-98d4c2a0",
"@metamask-previews/composable-controller": "7.0.0-preview-98d4c2a0",
"@metamask-previews/controller-utils": "11.0.0-preview-98d4c2a0",
"@metamask-previews/ens-controller": "12.0.0-preview-98d4c2a0",
"@metamask-previews/eth-json-rpc-provider": "4.0.0-preview-98d4c2a0",
"@metamask-previews/gas-fee-controller": "17.0.0-preview-98d4c2a0",
"@metamask-previews/json-rpc-engine": "9.0.0-preview-98d4c2a0",
"@metamask-previews/json-rpc-middleware-stream": "8.0.0-preview-98d4c2a0",
"@metamask-previews/keyring-controller": "17.1.0-preview-98d4c2a0",
"@metamask-previews/logging-controller": "5.0.0-preview-98d4c2a0",
"@metamask-previews/message-manager": "10.0.0-preview-98d4c2a0",
"@metamask-previews/name-controller": "8.0.0-preview-98d4c2a0",
"@metamask-previews/network-controller": "19.0.0-preview-98d4c2a0",
"@metamask-previews/notification-controller": "6.0.0-preview-98d4c2a0",
"@metamask-previews/notification-services-controller": "0.0.0-preview-98d4c2a0",
"@metamask-previews/permission-controller": "10.0.0-preview-98d4c2a0",
"@metamask-previews/permission-log-controller": "3.0.0-preview-98d4c2a0",
"@metamask-previews/phishing-controller": "10.0.0-preview-98d4c2a0",
"@metamask-previews/polling-controller": "8.0.0-preview-98d4c2a0",
"@metamask-previews/preferences-controller": "13.0.0-preview-98d4c2a0",
"@metamask-previews/profile-sync-controller": "0.0.0-preview-98d4c2a0",
"@metamask-previews/queued-request-controller": "1.0.0-preview-98d4c2a0",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-98d4c2a0",
"@metamask-previews/selected-network-controller": "15.0.2-preview-98d4c2a0",
"@metamask-previews/signature-controller": "18.0.0-preview-98d4c2a0",
"@metamask-previews/transaction-controller": "33.0.0-preview-98d4c2a0",
"@metamask-previews/user-operation-controller": "12.0.0-preview-98d4c2a0"
}
Adding this before I forget: Brian suggested that we add a way to access the network client configuration for a network client from state in order to clean up selectors in the extension. To solve this, we could add another state property networkClientConfigurationsByNetworkClientId
, and subscribe to the NetworkConfiguration:stateChange
event to keep it automatically in sync with networkConfigurationsByChainId
.
New changes:
-
defaultRpcEndpointUrl
is nowdefaultRpcEndpointIndex
-
blockExplorerUrl
is nowblockExplorerUrls
; addeddefaultBlockExplorerUrlIndex
- The
name
property on RpcEndpoint is now optional
@metamaskbot publish-previews
@metamaskbot publish-preview
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": "17.1.1-preview-1c4ca62e",
"@metamask-previews/address-book-controller": "5.0.0-preview-1c4ca62e",
"@metamask-previews/announcement-controller": "7.0.0-preview-1c4ca62e",
"@metamask-previews/approval-controller": "7.0.0-preview-1c4ca62e",
"@metamask-previews/assets-controllers": "34.0.0-preview-1c4ca62e",
"@metamask-previews/base-controller": "6.0.0-preview-1c4ca62e",
"@metamask-previews/build-utils": "3.0.0-preview-1c4ca62e",
"@metamask-previews/chain-controller": "0.1.0-preview-1c4ca62e",
"@metamask-previews/composable-controller": "7.0.0-preview-1c4ca62e",
"@metamask-previews/controller-utils": "11.0.0-preview-1c4ca62e",
"@metamask-previews/ens-controller": "12.0.0-preview-1c4ca62e",
"@metamask-previews/eth-json-rpc-provider": "4.0.0-preview-1c4ca62e",
"@metamask-previews/gas-fee-controller": "17.0.0-preview-1c4ca62e",
"@metamask-previews/json-rpc-engine": "9.0.0-preview-1c4ca62e",
"@metamask-previews/json-rpc-middleware-stream": "8.0.0-preview-1c4ca62e",
"@metamask-previews/keyring-controller": "17.1.0-preview-1c4ca62e",
"@metamask-previews/logging-controller": "5.0.0-preview-1c4ca62e",
"@metamask-previews/message-manager": "10.0.0-preview-1c4ca62e",
"@metamask-previews/name-controller": "8.0.0-preview-1c4ca62e",
"@metamask-previews/network-controller": "19.0.0-preview-1c4ca62e",
"@metamask-previews/notification-controller": "6.0.0-preview-1c4ca62e",
"@metamask-previews/notification-services-controller": "0.1.1-preview-1c4ca62e",
"@metamask-previews/permission-controller": "10.0.0-preview-1c4ca62e",
"@metamask-previews/permission-log-controller": "3.0.0-preview-1c4ca62e",
"@metamask-previews/phishing-controller": "10.0.0-preview-1c4ca62e",
"@metamask-previews/polling-controller": "8.0.0-preview-1c4ca62e",
"@metamask-previews/preferences-controller": "13.0.0-preview-1c4ca62e",
"@metamask-previews/profile-sync-controller": "0.1.2-preview-1c4ca62e",
"@metamask-previews/queued-request-controller": "2.0.0-preview-1c4ca62e",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-1c4ca62e",
"@metamask-previews/selected-network-controller": "15.0.2-preview-1c4ca62e",
"@metamask-previews/signature-controller": "18.0.0-preview-1c4ca62e",
"@metamask-previews/transaction-controller": "33.0.1-preview-1c4ca62e",
"@metamask-previews/user-operation-controller": "12.0.1-preview-1c4ca62e"
}
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": "17.1.1-preview-28c65566",
"@metamask-previews/address-book-controller": "5.0.0-preview-28c65566",
"@metamask-previews/announcement-controller": "7.0.0-preview-28c65566",
"@metamask-previews/approval-controller": "7.0.0-preview-28c65566",
"@metamask-previews/assets-controllers": "34.0.0-preview-28c65566",
"@metamask-previews/base-controller": "6.0.0-preview-28c65566",
"@metamask-previews/build-utils": "3.0.0-preview-28c65566",
"@metamask-previews/chain-controller": "0.1.0-preview-28c65566",
"@metamask-previews/composable-controller": "7.0.0-preview-28c65566",
"@metamask-previews/controller-utils": "11.0.0-preview-28c65566",
"@metamask-previews/ens-controller": "12.0.0-preview-28c65566",
"@metamask-previews/eth-json-rpc-provider": "4.0.0-preview-28c65566",
"@metamask-previews/gas-fee-controller": "17.0.0-preview-28c65566",
"@metamask-previews/json-rpc-engine": "9.0.0-preview-28c65566",
"@metamask-previews/json-rpc-middleware-stream": "8.0.0-preview-28c65566",
"@metamask-previews/keyring-controller": "17.1.0-preview-28c65566",
"@metamask-previews/logging-controller": "5.0.0-preview-28c65566",
"@metamask-previews/message-manager": "10.0.0-preview-28c65566",
"@metamask-previews/name-controller": "8.0.0-preview-28c65566",
"@metamask-previews/network-controller": "19.0.0-preview-28c65566",
"@metamask-previews/notification-controller": "6.0.0-preview-28c65566",
"@metamask-previews/notification-services-controller": "0.1.1-preview-28c65566",
"@metamask-previews/permission-controller": "10.0.0-preview-28c65566",
"@metamask-previews/permission-log-controller": "3.0.0-preview-28c65566",
"@metamask-previews/phishing-controller": "10.0.0-preview-28c65566",
"@metamask-previews/polling-controller": "8.0.0-preview-28c65566",
"@metamask-previews/preferences-controller": "13.0.0-preview-28c65566",
"@metamask-previews/profile-sync-controller": "0.1.2-preview-28c65566",
"@metamask-previews/queued-request-controller": "2.0.0-preview-28c65566",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-28c65566",
"@metamask-previews/selected-network-controller": "15.0.2-preview-28c65566",
"@metamask-previews/signature-controller": "18.0.0-preview-28c65566",
"@metamask-previews/transaction-controller": "33.0.1-preview-28c65566",
"@metamask-previews/user-operation-controller": "12.0.1-preview-28c65566"
}
Items to do before merging:
- Resolve conflicts.
- The assets team requested that we add an option to
updateNetwork
which allows for removing the default RPC endpoint by making it possible to simultaneously switching the network. Currently we throw an error when the default RPC endpoint is being removed, but instead of throwing an error we can require anewNetworkClientId
option to be passed instead.
~I thought of something else that I should probably do now vs. later: if the URL of an RPC endpoint changes, but the networkClientId
stays the same, then I'm not sure whether the controller will create a new network client or not. If it doesn't, then perhaps we should account for this (because then the URL associated with the RPC endpoint will be different from the actual URL used by the network client). Or, maybe we ask the client to remove the networkClientId
if the user changes the URL so that it can be regenerated.~ This is now resolved. If the URL of an RPC endpoint changes then a new network client will be created regardless of the given networkClientId
.
@metamaskbot publish-preview
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": "17.2.0-preview-5ba43a24",
"@metamask-previews/address-book-controller": "5.0.0-preview-5ba43a24",
"@metamask-previews/announcement-controller": "7.0.0-preview-5ba43a24",
"@metamask-previews/approval-controller": "7.0.1-preview-5ba43a24",
"@metamask-previews/assets-controllers": "35.0.0-preview-5ba43a24",
"@metamask-previews/base-controller": "6.0.1-preview-5ba43a24",
"@metamask-previews/build-utils": "3.0.0-preview-5ba43a24",
"@metamask-previews/chain-controller": "0.1.0-preview-5ba43a24",
"@metamask-previews/composable-controller": "7.0.0-preview-5ba43a24",
"@metamask-previews/controller-utils": "11.0.1-preview-5ba43a24",
"@metamask-previews/ens-controller": "13.0.0-preview-5ba43a24",
"@metamask-previews/eth-json-rpc-provider": "4.1.1-preview-5ba43a24",
"@metamask-previews/gas-fee-controller": "19.0.0-preview-5ba43a24",
"@metamask-previews/json-rpc-engine": "9.0.1-preview-5ba43a24",
"@metamask-previews/json-rpc-middleware-stream": "8.0.1-preview-5ba43a24",
"@metamask-previews/keyring-controller": "17.1.0-preview-5ba43a24",
"@metamask-previews/logging-controller": "5.0.0-preview-5ba43a24",
"@metamask-previews/message-manager": "10.0.0-preview-5ba43a24",
"@metamask-previews/name-controller": "8.0.0-preview-5ba43a24",
"@metamask-previews/network-controller": "20.0.0-preview-5ba43a24",
"@metamask-previews/notification-controller": "6.0.0-preview-5ba43a24",
"@metamask-previews/notification-services-controller": "0.1.1-preview-5ba43a24",
"@metamask-previews/permission-controller": "10.0.1-preview-5ba43a24",
"@metamask-previews/permission-log-controller": "3.0.0-preview-5ba43a24",
"@metamask-previews/phishing-controller": "10.0.0-preview-5ba43a24",
"@metamask-previews/polling-controller": "9.0.0-preview-5ba43a24",
"@metamask-previews/preferences-controller": "13.0.0-preview-5ba43a24",
"@metamask-previews/profile-sync-controller": "0.1.2-preview-5ba43a24",
"@metamask-previews/queued-request-controller": "3.0.0-preview-5ba43a24",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-5ba43a24",
"@metamask-previews/selected-network-controller": "16.0.0-preview-5ba43a24",
"@metamask-previews/signature-controller": "18.0.0-preview-5ba43a24",
"@metamask-previews/transaction-controller": "35.0.0-preview-5ba43a24",
"@metamask-previews/user-operation-controller": "14.0.0-preview-5ba43a24"
}
Changes since last preview build:
- The
updateNetwork
method now throws an error when the RPC endpoint that is represented by the globally selected network is removed (otherwise,selectedNetworkClientId
would have no corresponding RPC endpoint).- To prevent this error, you'll want to detect when an RPC endpoint is being removed and designate which RPC endpoint should be used for the globally selected network by passing a
replacementSelectedRpcEndpointIndex
option. This must point to an object inrpcEndpoints
.updateNetwork
will then automatically issue a network switch, and it will update bothselectedNetworkClientId
andnetworkConfigurationsByChainId
at the same time to avoid creating a moment where the state is invalid. - Note that if an RPC endpoint is changed in such a way that necessitates recreating the network client for that RPC endpoint,
updateNetwork
will automatically use the new network client without having to specifyreplacementSelectedRpcEndpointIndex
. - If you'd like to always pass
replacementSelectedRpcEndpointIndex
, there isn't a good way to get this without looping throughnetworkConfigurationsByChainId
. It can be done, but let me know if you need a more convenient way.
- To prevent this error, you'll want to detect when an RPC endpoint is being removed and designate which RPC endpoint should be used for the globally selected network by passing a
-
updateNetwork
now throws if you try to add an invalid Infura RPC endpoint or change any part of an Infura RPC endpoint (since they must have specific data at all times).- The
url
must match a specific string.
- The
-
addNetwork
andupdateNetwork
now throw ifdefaultBlockExplorerUrlIndex
is invalid. -
updateNetwork
will now gracefully handle the case in which anetworkClientId
for a previously added RPC endpoint is unset (it will just fill it back in without creating a new network client) -
updateNetwork
is also smarter about keeping track of RPC endpoints, so for instance you can shuffle around RPC endpoints and it won't change state or create any new network clients.
@metamaskbot publish-preview
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": "17.2.0-preview-ee06f305",
"@metamask-previews/address-book-controller": "5.0.0-preview-ee06f305",
"@metamask-previews/announcement-controller": "7.0.0-preview-ee06f305",
"@metamask-previews/approval-controller": "7.0.1-preview-ee06f305",
"@metamask-previews/assets-controllers": "36.0.0-preview-ee06f305",
"@metamask-previews/base-controller": "6.0.1-preview-ee06f305",
"@metamask-previews/build-utils": "3.0.0-preview-ee06f305",
"@metamask-previews/chain-controller": "0.1.0-preview-ee06f305",
"@metamask-previews/composable-controller": "7.0.0-preview-ee06f305",
"@metamask-previews/controller-utils": "11.0.1-preview-ee06f305",
"@metamask-previews/ens-controller": "13.0.0-preview-ee06f305",
"@metamask-previews/eth-json-rpc-provider": "4.1.1-preview-ee06f305",
"@metamask-previews/gas-fee-controller": "19.0.0-preview-ee06f305",
"@metamask-previews/json-rpc-engine": "9.0.1-preview-ee06f305",
"@metamask-previews/json-rpc-middleware-stream": "8.0.1-preview-ee06f305",
"@metamask-previews/keyring-controller": "17.1.1-preview-ee06f305",
"@metamask-previews/logging-controller": "5.0.0-preview-ee06f305",
"@metamask-previews/message-manager": "10.0.1-preview-ee06f305",
"@metamask-previews/name-controller": "8.0.0-preview-ee06f305",
"@metamask-previews/network-controller": "20.0.0-preview-ee06f305",
"@metamask-previews/notification-controller": "6.0.0-preview-ee06f305",
"@metamask-previews/notification-services-controller": "0.1.1-preview-ee06f305",
"@metamask-previews/permission-controller": "10.0.1-preview-ee06f305",
"@metamask-previews/permission-log-controller": "3.0.0-preview-ee06f305",
"@metamask-previews/phishing-controller": "10.1.0-preview-ee06f305",
"@metamask-previews/polling-controller": "9.0.0-preview-ee06f305",
"@metamask-previews/preferences-controller": "13.0.0-preview-ee06f305",
"@metamask-previews/profile-sync-controller": "0.1.3-preview-ee06f305",
"@metamask-previews/queued-request-controller": "3.0.0-preview-ee06f305",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-ee06f305",
"@metamask-previews/selected-network-controller": "16.0.0-preview-ee06f305",
"@metamask-previews/signature-controller": "18.0.0-preview-ee06f305",
"@metamask-previews/transaction-controller": "35.0.0-preview-ee06f305",
"@metamask-previews/user-operation-controller": "14.0.0-preview-ee06f305"
}
Pushed some updates to fix tests, and specifically to ensure that when we are testing updateNetwork
we do not try to update a network configuration that has an RPC endpoint that is represented by the selected network client unless we explicitly want to. This should guarantee that we don't have the same issue that Brian reported.
That should be it for updates unless we receive another bug report.
@metamaskbot publish-preview
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": "17.2.0-preview-276db038",
"@metamask-previews/address-book-controller": "5.0.0-preview-276db038",
"@metamask-previews/announcement-controller": "7.0.0-preview-276db038",
"@metamask-previews/approval-controller": "7.0.2-preview-276db038",
"@metamask-previews/assets-controllers": "36.0.0-preview-276db038",
"@metamask-previews/base-controller": "6.0.2-preview-276db038",
"@metamask-previews/build-utils": "3.0.0-preview-276db038",
"@metamask-previews/chain-controller": "0.1.0-preview-276db038",
"@metamask-previews/composable-controller": "7.0.0-preview-276db038",
"@metamask-previews/controller-utils": "11.0.2-preview-276db038",
"@metamask-previews/ens-controller": "13.0.0-preview-276db038",
"@metamask-previews/eth-json-rpc-provider": "4.1.1-preview-276db038",
"@metamask-previews/gas-fee-controller": "19.0.0-preview-276db038",
"@metamask-previews/json-rpc-engine": "9.0.2-preview-276db038",
"@metamask-previews/json-rpc-middleware-stream": "8.0.2-preview-276db038",
"@metamask-previews/keyring-controller": "17.1.1-preview-276db038",
"@metamask-previews/logging-controller": "5.0.0-preview-276db038",
"@metamask-previews/message-manager": "10.0.1-preview-276db038",
"@metamask-previews/name-controller": "8.0.0-preview-276db038",
"@metamask-previews/network-controller": "20.0.0-preview-276db038",
"@metamask-previews/notification-controller": "6.0.0-preview-276db038",
"@metamask-previews/notification-services-controller": "0.1.2-preview-276db038",
"@metamask-previews/permission-controller": "11.0.0-preview-276db038",
"@metamask-previews/permission-log-controller": "3.0.0-preview-276db038",
"@metamask-previews/phishing-controller": "10.1.1-preview-276db038",
"@metamask-previews/polling-controller": "9.0.0-preview-276db038",
"@metamask-previews/preferences-controller": "13.0.0-preview-276db038",
"@metamask-previews/profile-sync-controller": "0.1.4-preview-276db038",
"@metamask-previews/queued-request-controller": "3.0.0-preview-276db038",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-276db038",
"@metamask-previews/selected-network-controller": "16.0.0-preview-276db038",
"@metamask-previews/signature-controller": "18.0.0-preview-276db038",
"@metamask-previews/transaction-controller": "35.0.0-preview-276db038",
"@metamask-previews/user-operation-controller": "14.0.0-preview-276db038"
}
Updates since previous preview release:
- Added
AddNetworkFields
andUpdateNetworkFields
types.
Marking this as "DO-NOT-MERGE" until we are prepared to update this on both mobile and extension (e.g. until we have a draft PR somewhat-close to working)
Fixed conflicts.
I suspect a fix is needed in SelectedNetworkController
.
This code to remove deleted network client IDs from dapp domains no longer triggers, since it expects a patch to networkConfigurations
but receives networkConfigurationsByChainId
.
It would also need to trigger when deleting an RPC endpoint within a network, not just when deleting the whole network. Since both remove network client id(s).
Something like this: https://github.com/MetaMask/core/commit/ac25fa0fa198d5779726722d6bbbb71f00f3392e
In the future, it could make sense for SelectedNetworkController
to migrate from Record<Domain, NetworkClientId>
to Record<Domain, ChainId>
.
Edit: I've now tested that change via extension and it is needed Edit2: I committed this change so I can publish a preview release containing it
@metamaskbot publish-preview
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": "18.1.0-preview-b59ee0c8",
"@metamask-previews/address-book-controller": "5.0.0-preview-b59ee0c8",
"@metamask-previews/announcement-controller": "7.0.0-preview-b59ee0c8",
"@metamask-previews/approval-controller": "7.0.2-preview-b59ee0c8",
"@metamask-previews/assets-controllers": "37.0.0-preview-b59ee0c8",
"@metamask-previews/base-controller": "6.0.3-preview-b59ee0c8",
"@metamask-previews/build-utils": "3.0.0-preview-b59ee0c8",
"@metamask-previews/chain-controller": "0.1.1-preview-b59ee0c8",
"@metamask-previews/composable-controller": "8.0.0-preview-b59ee0c8",
"@metamask-previews/controller-utils": "11.0.2-preview-b59ee0c8",
"@metamask-previews/ens-controller": "13.0.1-preview-b59ee0c8",
"@metamask-previews/eth-json-rpc-provider": "4.1.3-preview-b59ee0c8",
"@metamask-previews/gas-fee-controller": "19.0.1-preview-b59ee0c8",
"@metamask-previews/json-rpc-engine": "9.0.2-preview-b59ee0c8",
"@metamask-previews/json-rpc-middleware-stream": "8.0.2-preview-b59ee0c8",
"@metamask-previews/keyring-controller": "17.1.2-preview-b59ee0c8",
"@metamask-previews/logging-controller": "5.0.0-preview-b59ee0c8",
"@metamask-previews/message-manager": "10.0.2-preview-b59ee0c8",
"@metamask-previews/name-controller": "8.0.0-preview-b59ee0c8",
"@metamask-previews/network-controller": "20.2.0-preview-b59ee0c8",
"@metamask-previews/notification-controller": "6.0.0-preview-b59ee0c8",
"@metamask-previews/notification-services-controller": "0.2.1-preview-b59ee0c8",
"@metamask-previews/permission-controller": "11.0.0-preview-b59ee0c8",
"@metamask-previews/permission-log-controller": "3.0.0-preview-b59ee0c8",
"@metamask-previews/phishing-controller": "11.0.0-preview-b59ee0c8",
"@metamask-previews/polling-controller": "9.0.1-preview-b59ee0c8",
"@metamask-previews/preferences-controller": "13.0.1-preview-b59ee0c8",
"@metamask-previews/profile-sync-controller": "0.2.1-preview-b59ee0c8",
"@metamask-previews/queued-request-controller": "4.0.0-preview-b59ee0c8",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-b59ee0c8",
"@metamask-previews/selected-network-controller": "17.0.0-preview-b59ee0c8",
"@metamask-previews/signature-controller": "18.1.0-preview-b59ee0c8",
"@metamask-previews/transaction-controller": "35.2.0-preview-b59ee0c8",
"@metamask-previews/user-operation-controller": "14.0.1-preview-b59ee0c8"
}
@mikesposito The only remaining thing I can't figure out, is an error Cannot perform 'get' on a proxy that has been revoked
on various places that call getNetworkConfigurationByNetworkClientId
.
The easiest repro is on thrown by TokenDetectionController when switching chains here:
It's possible it was introduced by https://github.com/MetaMask/core/commit/b59ee0c80be54b353033f5fbfa156ebb8fec2849. Perhaps using the draft state passed to this.update
becomes revoked on later reference. But then we'll need another way to fix https://github.com/MetaMask/core/pull/4286#discussion_r1732085702
Edit: I think I've fixed it in https://github.com/MetaMask/core/pull/4286/commits/02e7ff99c640127d9b08c80f0951f1141c16b3c6 by performing buildNetworkConfigurationsByNetworkClientId
after the call to this.update
instead of inside it. This satisfies both criteria. That we're including the added/updated/removed network in the call to build...()
, but it's also not revoked due to being a reference to draft state.
@metamaskbot publish-preview
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": "18.1.0-preview-02e7ff99",
"@metamask-previews/address-book-controller": "5.0.0-preview-02e7ff99",
"@metamask-previews/announcement-controller": "7.0.0-preview-02e7ff99",
"@metamask-previews/approval-controller": "7.0.2-preview-02e7ff99",
"@metamask-previews/assets-controllers": "37.0.0-preview-02e7ff99",
"@metamask-previews/base-controller": "6.0.3-preview-02e7ff99",
"@metamask-previews/build-utils": "3.0.0-preview-02e7ff99",
"@metamask-previews/chain-controller": "0.1.1-preview-02e7ff99",
"@metamask-previews/composable-controller": "8.0.0-preview-02e7ff99",
"@metamask-previews/controller-utils": "11.0.2-preview-02e7ff99",
"@metamask-previews/ens-controller": "13.0.1-preview-02e7ff99",
"@metamask-previews/eth-json-rpc-provider": "4.1.3-preview-02e7ff99",
"@metamask-previews/gas-fee-controller": "19.0.1-preview-02e7ff99",
"@metamask-previews/json-rpc-engine": "9.0.2-preview-02e7ff99",
"@metamask-previews/json-rpc-middleware-stream": "8.0.2-preview-02e7ff99",
"@metamask-previews/keyring-controller": "17.1.2-preview-02e7ff99",
"@metamask-previews/logging-controller": "5.0.0-preview-02e7ff99",
"@metamask-previews/message-manager": "10.0.2-preview-02e7ff99",
"@metamask-previews/name-controller": "8.0.0-preview-02e7ff99",
"@metamask-previews/network-controller": "20.2.0-preview-02e7ff99",
"@metamask-previews/notification-controller": "6.0.0-preview-02e7ff99",
"@metamask-previews/notification-services-controller": "0.2.1-preview-02e7ff99",
"@metamask-previews/permission-controller": "11.0.0-preview-02e7ff99",
"@metamask-previews/permission-log-controller": "3.0.0-preview-02e7ff99",
"@metamask-previews/phishing-controller": "11.0.0-preview-02e7ff99",
"@metamask-previews/polling-controller": "9.0.1-preview-02e7ff99",
"@metamask-previews/preferences-controller": "13.0.1-preview-02e7ff99",
"@metamask-previews/profile-sync-controller": "0.2.1-preview-02e7ff99",
"@metamask-previews/queued-request-controller": "4.0.0-preview-02e7ff99",
"@metamask-previews/rate-limit-controller": "6.0.0-preview-02e7ff99",
"@metamask-previews/selected-network-controller": "17.0.0-preview-02e7ff99",
"@metamask-previews/signature-controller": "18.1.0-preview-02e7ff99",
"@metamask-previews/transaction-controller": "35.2.0-preview-02e7ff99",
"@metamask-previews/user-operation-controller": "14.0.1-preview-02e7ff99"
}