Skip to content

chore: remove usages of NetworkController:getState in EarnController #6153

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 13 commits into
base: main
Choose a base branch
from

Conversation

ameliejyc
Copy link

@ameliejyc ameliejyc commented Jul 21, 2025

Explanation

The Global Network Selector is being removed and these changes for the EarnController ensure that we are not relying on global state via NetworkController:getState. Instead, information required such as the selected network client ID or chain ID is passed in contextually.

  • Removes NetworkController:getState. Instead:
    • EarnController requires selectedNetworkClientId to be passed in when constructed and it is used in initializeSDK.
    • Optional chainId parameter with fallback to Ethereum Mainnet used in Pooled Staking data calls: refreshPooledStakingVaultApyAverages, refreshPooledStakingVaultDailyApys, refreshPooledStakingVaultMetadata and refreshPooledStakes
    • Compulsory chainId parameter required in all Lending transaction calls: executeLendingTokenApprove, executeLendingWithdraw and executeLendingDeposit
    • Compulsory chainId parameter required in Lending data calls:getLendingMarketDailyApysAndAverages andgetLendingPositionHistory. The other Lending data fetches do not require a chainId.
  • Uses NetworkController:networkDidChange rather than NetworkController:stateChange as this is a more granular and less frequent event to listen to.
  • Updates tests

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@ameliejyc
Copy link
Author

@metamaskbot publish-preview

@ameliejyc ameliejyc changed the title Tat 1264 mobile remove usage s of global chain id in earn experiences chore: remove usages of networkController:getState in earn controller Jul 21, 2025
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": "0.4.0-preview-243e64f7",
  "@metamask-previews/accounts-controller": "31.0.0-preview-243e64f7",
  "@metamask-previews/address-book-controller": "6.1.1-preview-243e64f7",
  "@metamask-previews/announcement-controller": "7.0.3-preview-243e64f7",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-243e64f7",
  "@metamask-previews/approval-controller": "7.1.3-preview-243e64f7",
  "@metamask-previews/assets-controllers": "72.0.0-preview-243e64f7",
  "@metamask-previews/base-controller": "8.0.1-preview-243e64f7",
  "@metamask-previews/bridge-controller": "36.1.0-preview-243e64f7",
  "@metamask-previews/bridge-status-controller": "36.0.0-preview-243e64f7",
  "@metamask-previews/build-utils": "3.0.3-preview-243e64f7",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-243e64f7",
  "@metamask-previews/composable-controller": "11.0.0-preview-243e64f7",
  "@metamask-previews/controller-utils": "11.11.0-preview-243e64f7",
  "@metamask-previews/delegation-controller": "0.5.0-preview-243e64f7",
  "@metamask-previews/earn-controller": "3.0.0-preview-243e64f7",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-243e64f7",
  "@metamask-previews/ens-controller": "17.0.1-preview-243e64f7",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-243e64f7",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-243e64f7",
  "@metamask-previews/foundryup": "1.0.0-preview-243e64f7",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-243e64f7",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-243e64f7",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-243e64f7",
  "@metamask-previews/keyring-controller": "22.1.0-preview-243e64f7",
  "@metamask-previews/logging-controller": "6.0.4-preview-243e64f7",
  "@metamask-previews/message-manager": "12.0.2-preview-243e64f7",
  "@metamask-previews/messenger": "0.0.0-preview-243e64f7",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-243e64f7",
  "@metamask-previews/multichain-network-controller": "0.10.0-preview-243e64f7",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-243e64f7",
  "@metamask-previews/name-controller": "8.0.3-preview-243e64f7",
  "@metamask-previews/network-controller": "24.0.0-preview-243e64f7",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-243e64f7",
  "@metamask-previews/permission-controller": "11.0.6-preview-243e64f7",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-243e64f7",
  "@metamask-previews/phishing-controller": "13.1.0-preview-243e64f7",
  "@metamask-previews/polling-controller": "14.0.0-preview-243e64f7",
  "@metamask-previews/preferences-controller": "18.4.1-preview-243e64f7",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-243e64f7",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-243e64f7",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-243e64f7",
  "@metamask-previews/sample-controllers": "1.0.0-preview-243e64f7",
  "@metamask-previews/seedless-onboarding-controller": "2.1.0-preview-243e64f7",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-243e64f7",
  "@metamask-previews/signature-controller": "31.0.1-preview-243e64f7",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-243e64f7",
  "@metamask-previews/transaction-controller": "58.1.1-preview-243e64f7",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-243e64f7"
}

@ameliejyc ameliejyc changed the title chore: remove usages of networkController:getState in earn controller chore: remove usages of NetworkController:getState in earn controller Jul 21, 2025
@ameliejyc ameliejyc changed the title chore: remove usages of NetworkController:getState in earn controller chore: remove usages of NetworkController:getState in EarnController Jul 21, 2025
@ameliejyc ameliejyc force-pushed the TAT-1264-mobile-remove-usage-s-of-global-chain-id-in-earn-experiences branch from 243e64f to 8886aa1 Compare July 21, 2025 12:53
@ameliejyc ameliejyc force-pushed the TAT-1264-mobile-remove-usage-s-of-global-chain-id-in-earn-experiences branch from 8886aa1 to 6a9a827 Compare July 21, 2025 13:16
@ameliejyc
Copy link
Author

@metamaskbot publish-preview

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": "0.5.0-preview-6a9a827",
  "@metamask-previews/accounts-controller": "31.0.0-preview-6a9a827",
  "@metamask-previews/address-book-controller": "6.1.1-preview-6a9a827",
  "@metamask-previews/announcement-controller": "7.0.3-preview-6a9a827",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-6a9a827",
  "@metamask-previews/approval-controller": "7.1.3-preview-6a9a827",
  "@metamask-previews/assets-controllers": "72.0.0-preview-6a9a827",
  "@metamask-previews/base-controller": "8.0.1-preview-6a9a827",
  "@metamask-previews/bridge-controller": "36.1.0-preview-6a9a827",
  "@metamask-previews/bridge-status-controller": "36.0.0-preview-6a9a827",
  "@metamask-previews/build-utils": "3.0.3-preview-6a9a827",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-6a9a827",
  "@metamask-previews/composable-controller": "11.0.0-preview-6a9a827",
  "@metamask-previews/controller-utils": "11.11.0-preview-6a9a827",
  "@metamask-previews/delegation-controller": "0.5.0-preview-6a9a827",
  "@metamask-previews/earn-controller": "3.0.0-preview-6a9a827",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-6a9a827",
  "@metamask-previews/ens-controller": "17.0.1-preview-6a9a827",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-6a9a827",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-6a9a827",
  "@metamask-previews/foundryup": "1.0.0-preview-6a9a827",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-6a9a827",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-6a9a827",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-6a9a827",
  "@metamask-previews/keyring-controller": "22.1.0-preview-6a9a827",
  "@metamask-previews/logging-controller": "6.0.4-preview-6a9a827",
  "@metamask-previews/message-manager": "12.0.2-preview-6a9a827",
  "@metamask-previews/messenger": "0.0.0-preview-6a9a827",
  "@metamask-previews/multichain-account-service": "0.0.0-preview-6a9a827",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-6a9a827",
  "@metamask-previews/multichain-network-controller": "0.10.0-preview-6a9a827",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-6a9a827",
  "@metamask-previews/name-controller": "8.0.3-preview-6a9a827",
  "@metamask-previews/network-controller": "24.0.1-preview-6a9a827",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-6a9a827",
  "@metamask-previews/permission-controller": "11.0.6-preview-6a9a827",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-6a9a827",
  "@metamask-previews/phishing-controller": "13.1.0-preview-6a9a827",
  "@metamask-previews/polling-controller": "14.0.0-preview-6a9a827",
  "@metamask-previews/preferences-controller": "18.4.1-preview-6a9a827",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-6a9a827",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-6a9a827",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-6a9a827",
  "@metamask-previews/sample-controllers": "1.0.0-preview-6a9a827",
  "@metamask-previews/seedless-onboarding-controller": "2.3.0-preview-6a9a827",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-6a9a827",
  "@metamask-previews/signature-controller": "31.0.1-preview-6a9a827",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-6a9a827",
  "@metamask-previews/transaction-controller": "58.1.1-preview-6a9a827",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-6a9a827"
}

@ameliejyc ameliejyc force-pushed the TAT-1264-mobile-remove-usage-s-of-global-chain-id-in-earn-experiences branch from 7853624 to d05158e Compare July 22, 2025 09:56
@ameliejyc
Copy link
Author

@metamaskbot publish-preview

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": "0.5.0-preview-d05158e7",
  "@metamask-previews/accounts-controller": "31.0.0-preview-d05158e7",
  "@metamask-previews/address-book-controller": "6.1.1-preview-d05158e7",
  "@metamask-previews/announcement-controller": "7.0.3-preview-d05158e7",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-d05158e7",
  "@metamask-previews/approval-controller": "7.1.3-preview-d05158e7",
  "@metamask-previews/assets-controllers": "72.0.0-preview-d05158e7",
  "@metamask-previews/base-controller": "8.0.1-preview-d05158e7",
  "@metamask-previews/bridge-controller": "36.1.0-preview-d05158e7",
  "@metamask-previews/bridge-status-controller": "36.0.0-preview-d05158e7",
  "@metamask-previews/build-utils": "3.0.3-preview-d05158e7",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-d05158e7",
  "@metamask-previews/composable-controller": "11.0.0-preview-d05158e7",
  "@metamask-previews/controller-utils": "11.11.0-preview-d05158e7",
  "@metamask-previews/delegation-controller": "0.5.0-preview-d05158e7",
  "@metamask-previews/earn-controller": "3.0.0-preview-d05158e7",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-d05158e7",
  "@metamask-previews/ens-controller": "17.0.1-preview-d05158e7",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-d05158e7",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-d05158e7",
  "@metamask-previews/foundryup": "1.0.0-preview-d05158e7",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-d05158e7",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-d05158e7",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-d05158e7",
  "@metamask-previews/keyring-controller": "22.1.0-preview-d05158e7",
  "@metamask-previews/logging-controller": "6.0.4-preview-d05158e7",
  "@metamask-previews/message-manager": "12.0.2-preview-d05158e7",
  "@metamask-previews/messenger": "0.0.0-preview-d05158e7",
  "@metamask-previews/multichain-account-service": "0.0.0-preview-d05158e7",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-d05158e7",
  "@metamask-previews/multichain-network-controller": "0.10.0-preview-d05158e7",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-d05158e7",
  "@metamask-previews/name-controller": "8.0.3-preview-d05158e7",
  "@metamask-previews/network-controller": "24.0.1-preview-d05158e7",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-d05158e7",
  "@metamask-previews/permission-controller": "11.0.6-preview-d05158e7",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-d05158e7",
  "@metamask-previews/phishing-controller": "13.1.0-preview-d05158e7",
  "@metamask-previews/polling-controller": "14.0.0-preview-d05158e7",
  "@metamask-previews/preferences-controller": "18.4.1-preview-d05158e7",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-d05158e7",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-d05158e7",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-d05158e7",
  "@metamask-previews/sample-controllers": "1.0.0-preview-d05158e7",
  "@metamask-previews/seedless-onboarding-controller": "2.3.0-preview-d05158e7",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-d05158e7",
  "@metamask-previews/signature-controller": "31.0.1-preview-d05158e7",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-d05158e7",
  "@metamask-previews/transaction-controller": "58.1.1-preview-d05158e7",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-d05158e7"
}

cursor[bot]

This comment was marked as outdated.

salimtb
salimtb previously approved these changes Jul 23, 2025
Copy link
Contributor

@salimtb salimtb left a comment

Choose a reason for hiding this comment

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

LGTM

cursor[bot]

This comment was marked as outdated.

Copy link
Contributor

@nickewansmith nickewansmith left a comment

Choose a reason for hiding this comment

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

LGTM 👍🏽, we may need some more coverage on the constants file @ameliejyc

cursor[bot]

This comment was marked as outdated.


readonly #env: EarnEnvironments;

constructor({
messenger,
state = {},
addTransactionFn,
selectedNetworkClientId,
Copy link
Contributor

@mcmire mcmire Jul 23, 2025

Choose a reason for hiding this comment

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

Hmm, we may have followed this pattern in the past, but this will require that NetworkController be initialized before EarnController. We are trying to eliminate dependencies on controllers like this and make it so that it doesn't matter which order controllers are initialized, they will "just work".

I was going to suggest that we make selectedNetworkClientId optional, then add an init method where we pull the selected network via NetworkController:getState. But that's a bit similar to what we were doing before, and access to NetworkController:getState seems to be getting removed in this PR. The PR description claims that this is due to removing reliance on the global network, but selectedNetworkClientId is the global network. So I'm a bit confused on what this change in particular achieves. Are we also trying to increase performance?

Copy link
Contributor

@salimtb salimtb Jul 23, 2025

Choose a reason for hiding this comment

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

Hey @mcmire,

The main objective here is to remove the direct dependency on the globalNetwork selector, which currently relies on NetworkController.state.selectedNetworkClientId.

Instead of accessing the network directly from the NetworkController, we want to pass selectedNetworkClientId as a parameter to the EarnController constructor during initialization.

For now, since the globalNetwork selector is still in place on mobile, it will continue to be used. But in the upcoming PR, once it's removed, we’ll update the initialization to pass the enabledNetwork value instead.

So on the client side, the initialization will look like this:

new EarnController({
  ...,
  selectedNetworkClientId: Engine.context.NetworkController.state.selectedNetworkClientId,
  ...
})

Passing the network value from the client has two main benefits:

  • It allows us to easily swap or override the value as needed.
  • It eliminates the tight coupling with NetworkController.selectedNetworkClientId, improving modularity and flexibility.

Copy link
Contributor

@mcmire mcmire Jul 23, 2025

Choose a reason for hiding this comment

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

Okay, thanks for the context. How will enabled networks work on mobile? Will multiple enabled networks be allowed like on extension or will only one be allowed?

Also, you mention that this eliminates the tight coupling to NetworkController.selectedNetworkClientId, however, it seems that we are still listening to networkDidChange below, so we are still coupled to the global network. Do we have plans to change that down the road as well?

Copy link
Member

Choose a reason for hiding this comment

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

Since we're still getting the selectedNetworkClientId from the NetworkController, this doesn't seem to change how coupled this is with the NetworkController at all. I don't follow how this makes it easier to swap or override the value either - do you mean in a test? The messenger class was designed to be easily used in tests for mocking external code.

Copy link
Contributor

Choose a reason for hiding this comment

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

@mcmire This is just the initial step. The next phase will involve listening to events from the new NetworkEnablementController and dropping the dependency on networkDidChange. That said, the related PR is still under review and the controller hasn’t been published yet.

On mobile, the enabled network behavior will align with the extension.

Copy link
Contributor

Choose a reason for hiding this comment

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

@Gudahtt Hmm, I’m not sure I fully follow. Currently, we’re still using selectedNetworkClientId from the NetworkController and passing it in param because the global network selector hasn’t been removed on mobile yet. Once that’s done, we’ll update this value directly from the mobile UI codebase at the initialisation.

Copy link
Member

Choose a reason for hiding this comment

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

My point was that if you are passing selectedNetworkClientId from the NetworkController to the EarnController, doing so via a constructor parameter is not less coupled than doing so through the messenger, it's equally coupled. The goals you stated above are not achieved by this PR.

But that was before I heard about your intention to pass in a network client ID from UI state. I can see how this might be a step towards the goals you referenced even if it doesn't achieve them alone. This makes a bit more sense with that context, at least if there is some obstacle to implementing the network enablement controller on mobile (otherwise why not go straight to using that?).

@nickewansmith nickewansmith self-requested a review July 23, 2025 14:25
@ameliejyc
Copy link
Author

@metamaskbot publish-preview

@MetaMask MetaMask deleted a comment from github-actions bot Jul 23, 2025
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": "0.6.0-preview-280e81c5",
  "@metamask-previews/accounts-controller": "32.0.0-preview-280e81c5",
  "@metamask-previews/address-book-controller": "6.1.1-preview-280e81c5",
  "@metamask-previews/announcement-controller": "7.0.3-preview-280e81c5",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-280e81c5",
  "@metamask-previews/approval-controller": "7.1.3-preview-280e81c5",
  "@metamask-previews/assets-controllers": "73.0.0-preview-280e81c5",
  "@metamask-previews/base-controller": "8.0.1-preview-280e81c5",
  "@metamask-previews/bridge-controller": "37.0.0-preview-280e81c5",
  "@metamask-previews/bridge-status-controller": "37.0.0-preview-280e81c5",
  "@metamask-previews/build-utils": "3.0.3-preview-280e81c5",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-280e81c5",
  "@metamask-previews/composable-controller": "11.0.0-preview-280e81c5",
  "@metamask-previews/controller-utils": "11.11.0-preview-280e81c5",
  "@metamask-previews/delegation-controller": "0.6.0-preview-280e81c5",
  "@metamask-previews/earn-controller": "4.0.0-preview-280e81c5",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-280e81c5",
  "@metamask-previews/ens-controller": "17.0.1-preview-280e81c5",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-280e81c5",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-280e81c5",
  "@metamask-previews/foundryup": "1.0.0-preview-280e81c5",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-280e81c5",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-280e81c5",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-280e81c5",
  "@metamask-previews/keyring-controller": "22.1.0-preview-280e81c5",
  "@metamask-previews/logging-controller": "6.0.4-preview-280e81c5",
  "@metamask-previews/message-manager": "12.0.2-preview-280e81c5",
  "@metamask-previews/messenger": "0.0.0-preview-280e81c5",
  "@metamask-previews/multichain-account-service": "0.2.1-preview-280e81c5",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-280e81c5",
  "@metamask-previews/multichain-network-controller": "0.11.0-preview-280e81c5",
  "@metamask-previews/multichain-transactions-controller": "4.0.0-preview-280e81c5",
  "@metamask-previews/name-controller": "8.0.3-preview-280e81c5",
  "@metamask-previews/network-controller": "24.0.1-preview-280e81c5",
  "@metamask-previews/notification-services-controller": "15.0.0-preview-280e81c5",
  "@metamask-previews/permission-controller": "11.0.6-preview-280e81c5",
  "@metamask-previews/permission-log-controller": "4.0.0-preview-280e81c5",
  "@metamask-previews/phishing-controller": "13.1.0-preview-280e81c5",
  "@metamask-previews/polling-controller": "14.0.0-preview-280e81c5",
  "@metamask-previews/preferences-controller": "18.4.1-preview-280e81c5",
  "@metamask-previews/profile-sync-controller": "22.0.0-preview-280e81c5",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-280e81c5",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-280e81c5",
  "@metamask-previews/sample-controllers": "1.0.0-preview-280e81c5",
  "@metamask-previews/seedless-onboarding-controller": "2.4.0-preview-280e81c5",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-280e81c5",
  "@metamask-previews/signature-controller": "32.0.0-preview-280e81c5",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-280e81c5",
  "@metamask-previews/transaction-controller": "59.0.0-preview-280e81c5",
  "@metamask-previews/user-operation-controller": "38.0.0-preview-280e81c5"
}

cursor[bot]

This comment was marked as outdated.

@ameliejyc ameliejyc requested review from salimtb and mcmire July 23, 2025 15:43
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Bug: Redundant API Calls in Loop

The refreshEarnEligibility method is called redundantly inside the refreshPooledStakingData loop for each supported chain. As eligibility is a global, account-specific property (a compliance check against an address blocklist) and the method is chain-agnostic, this leads to unnecessary duplicate API calls and potential race conditions. It should be called once outside the loop.

packages/earn-controller/src/EarnController.ts#L650-L671

for (const chainId of this.#supportedPooledStakingChains) {
await Promise.all([
this.refreshPooledStakes({ resetCache, address, chainId }).catch(
(error) => {
errors.push(error);
},
),
this.refreshEarnEligibility({ address }).catch((error) => {
errors.push(error);
}),
this.refreshPooledStakingVaultMetadata(chainId).catch((error) => {
errors.push(error);
}),
this.refreshPooledStakingVaultDailyApys({ chainId }).catch((error) => {
errors.push(error);
}),
this.refreshPooledStakingVaultApyAverages(chainId).catch((error) => {
errors.push(error);
}),
]);
}

Fix in CursorFix in Web


Was this report helpful? Give feedback by reacting with 👍 or 👎

@ameliejyc ameliejyc requested a review from mcmire July 23, 2025 17:22
nickewansmith
nickewansmith previously approved these changes Jul 23, 2025
Copy link
Contributor

@mcmire mcmire left a comment

Choose a reason for hiding this comment

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

One more thing!

@ameliejyc
Copy link
Author

@metamaskbot publish-preview

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": "0.6.0-preview-defa214d",
  "@metamask-previews/accounts-controller": "32.0.0-preview-defa214d",
  "@metamask-previews/address-book-controller": "6.1.1-preview-defa214d",
  "@metamask-previews/announcement-controller": "7.0.3-preview-defa214d",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-defa214d",
  "@metamask-previews/approval-controller": "7.1.3-preview-defa214d",
  "@metamask-previews/assets-controllers": "73.0.0-preview-defa214d",
  "@metamask-previews/base-controller": "8.0.1-preview-defa214d",
  "@metamask-previews/bridge-controller": "37.0.0-preview-defa214d",
  "@metamask-previews/bridge-status-controller": "37.0.0-preview-defa214d",
  "@metamask-previews/build-utils": "3.0.3-preview-defa214d",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-defa214d",
  "@metamask-previews/composable-controller": "11.0.0-preview-defa214d",
  "@metamask-previews/controller-utils": "11.11.0-preview-defa214d",
  "@metamask-previews/delegation-controller": "0.6.0-preview-defa214d",
  "@metamask-previews/earn-controller": "4.0.0-preview-defa214d",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-defa214d",
  "@metamask-previews/ens-controller": "17.0.1-preview-defa214d",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-defa214d",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-defa214d",
  "@metamask-previews/foundryup": "1.0.0-preview-defa214d",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-defa214d",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-defa214d",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-defa214d",
  "@metamask-previews/keyring-controller": "22.1.0-preview-defa214d",
  "@metamask-previews/logging-controller": "6.0.4-preview-defa214d",
  "@metamask-previews/message-manager": "12.0.2-preview-defa214d",
  "@metamask-previews/messenger": "0.0.0-preview-defa214d",
  "@metamask-previews/multichain-account-service": "0.2.1-preview-defa214d",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-defa214d",
  "@metamask-previews/multichain-network-controller": "0.11.0-preview-defa214d",
  "@metamask-previews/multichain-transactions-controller": "4.0.0-preview-defa214d",
  "@metamask-previews/name-controller": "8.0.3-preview-defa214d",
  "@metamask-previews/network-controller": "24.0.1-preview-defa214d",
  "@metamask-previews/notification-services-controller": "15.0.0-preview-defa214d",
  "@metamask-previews/permission-controller": "11.0.6-preview-defa214d",
  "@metamask-previews/permission-log-controller": "4.0.0-preview-defa214d",
  "@metamask-previews/phishing-controller": "13.1.0-preview-defa214d",
  "@metamask-previews/polling-controller": "14.0.0-preview-defa214d",
  "@metamask-previews/preferences-controller": "18.4.1-preview-defa214d",
  "@metamask-previews/profile-sync-controller": "22.0.0-preview-defa214d",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-defa214d",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-defa214d",
  "@metamask-previews/sample-controllers": "1.0.0-preview-defa214d",
  "@metamask-previews/seedless-onboarding-controller": "2.4.0-preview-defa214d",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-defa214d",
  "@metamask-previews/signature-controller": "32.0.0-preview-defa214d",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-defa214d",
  "@metamask-previews/transaction-controller": "59.0.0-preview-defa214d",
  "@metamask-previews/user-operation-controller": "38.0.0-preview-defa214d"
}

@ameliejyc
Copy link
Author

@metamaskbot publish-preview

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": "0.6.0-preview-e0bc4b4b",
  "@metamask-previews/accounts-controller": "32.0.0-preview-e0bc4b4b",
  "@metamask-previews/address-book-controller": "6.1.1-preview-e0bc4b4b",
  "@metamask-previews/announcement-controller": "7.0.3-preview-e0bc4b4b",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-e0bc4b4b",
  "@metamask-previews/approval-controller": "7.1.3-preview-e0bc4b4b",
  "@metamask-previews/assets-controllers": "73.0.0-preview-e0bc4b4b",
  "@metamask-previews/base-controller": "8.0.1-preview-e0bc4b4b",
  "@metamask-previews/bridge-controller": "37.0.0-preview-e0bc4b4b",
  "@metamask-previews/bridge-status-controller": "37.0.0-preview-e0bc4b4b",
  "@metamask-previews/build-utils": "3.0.3-preview-e0bc4b4b",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-e0bc4b4b",
  "@metamask-previews/composable-controller": "11.0.0-preview-e0bc4b4b",
  "@metamask-previews/controller-utils": "11.11.0-preview-e0bc4b4b",
  "@metamask-previews/delegation-controller": "0.6.0-preview-e0bc4b4b",
  "@metamask-previews/earn-controller": "4.0.0-preview-e0bc4b4b",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-e0bc4b4b",
  "@metamask-previews/ens-controller": "17.0.1-preview-e0bc4b4b",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-e0bc4b4b",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-e0bc4b4b",
  "@metamask-previews/foundryup": "1.0.0-preview-e0bc4b4b",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-e0bc4b4b",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-e0bc4b4b",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-e0bc4b4b",
  "@metamask-previews/keyring-controller": "22.1.0-preview-e0bc4b4b",
  "@metamask-previews/logging-controller": "6.0.4-preview-e0bc4b4b",
  "@metamask-previews/message-manager": "12.0.2-preview-e0bc4b4b",
  "@metamask-previews/messenger": "0.0.0-preview-e0bc4b4b",
  "@metamask-previews/multichain-account-service": "0.2.1-preview-e0bc4b4b",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-e0bc4b4b",
  "@metamask-previews/multichain-network-controller": "0.11.0-preview-e0bc4b4b",
  "@metamask-previews/multichain-transactions-controller": "4.0.0-preview-e0bc4b4b",
  "@metamask-previews/name-controller": "8.0.3-preview-e0bc4b4b",
  "@metamask-previews/network-controller": "24.0.1-preview-e0bc4b4b",
  "@metamask-previews/notification-services-controller": "15.0.0-preview-e0bc4b4b",
  "@metamask-previews/permission-controller": "11.0.6-preview-e0bc4b4b",
  "@metamask-previews/permission-log-controller": "4.0.0-preview-e0bc4b4b",
  "@metamask-previews/phishing-controller": "13.1.0-preview-e0bc4b4b",
  "@metamask-previews/polling-controller": "14.0.0-preview-e0bc4b4b",
  "@metamask-previews/preferences-controller": "18.4.1-preview-e0bc4b4b",
  "@metamask-previews/profile-sync-controller": "22.0.0-preview-e0bc4b4b",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-e0bc4b4b",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-e0bc4b4b",
  "@metamask-previews/sample-controllers": "1.0.0-preview-e0bc4b4b",
  "@metamask-previews/seedless-onboarding-controller": "2.4.0-preview-e0bc4b4b",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-e0bc4b4b",
  "@metamask-previews/signature-controller": "32.0.0-preview-e0bc4b4b",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-e0bc4b4b",
  "@metamask-previews/transaction-controller": "59.0.0-preview-e0bc4b4b",
  "@metamask-previews/user-operation-controller": "38.0.0-preview-e0bc4b4b"
}

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.

5 participants