Skip to content

feat: MUSD-681: (money-account-balance-service) replace constructor config with remote feature flag subscription#8742

Merged
Matt561 merged 17 commits intomainfrom
feat/musd-681-support-remote-vault-config-feature-flag-in-money-account-balance-service
May 8, 2026
Merged

feat: MUSD-681: (money-account-balance-service) replace constructor config with remote feature flag subscription#8742
Matt561 merged 17 commits intomainfrom
feat/musd-681-support-remote-vault-config-feature-flag-in-money-account-balance-service

Conversation

@Matt561
Copy link
Copy Markdown
Contributor

@Matt561 Matt561 commented May 7, 2026

Explanation

This PR updates the @metamask/money-account-balance-service to use a remote vault config instead of constructor args.

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

Medium Risk
Breaking API changes shift vault configuration from constructor args to RemoteFeatureFlagController state and alter response shapes, which can break consumers and affect balance/APY lookups until flags are available. Runtime behavior now depends on async flag delivery and validation, adding new error paths and cache invalidation logic.

Overview
Refactors MoneyAccountBalanceService to stop taking vault config in the constructor and instead init()/subscribe to RemoteFeatureFlagController (getState + stateChange) for a remote moneyAccountVaultConfig, throwing VaultConfigNotAvailableError until a valid config is present and routing malformed configs via VaultConfigValidationError.

Updates on-chain/API fetching to use the new config shape (boringVault, chainId, lensAddress, tellerAddress, etc.), including switching getMusdEquivalentValue to call the Lens contract’s balanceOfInAssets and tightening getVaultApy to error when the chain ID lacks a VEDA_API_NETWORK_NAMES mapping (adds Monad). Adds corresponding structs/types, logging, exports, dependency on @metamask/remote-feature-flag-controller, and extensive test coverage for config lifecycle and cache invalidation.

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

@Matt561 Matt561 changed the title feat: MUSD-681: money-account-balance-service - replace constructor config with remote feature flag subscription feat: MUSD-681: (money-account-balance-service) replace constructor config with remote feature flag subscription May 7, 2026
@Matt561 Matt561 marked this pull request as ready for review May 8, 2026 17:52
@Matt561 Matt561 requested review from a team as code owners May 8, 2026 17:52
@Matt561 Matt561 temporarily deployed to default-branch May 8, 2026 17:52 — with GitHub Actions Inactive
@Matt561
Copy link
Copy Markdown
Contributor Author

Matt561 commented May 8, 2026

@metamaskbot publish-previews

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 8, 2026

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.3.0-preview-5e603a6c0
@metamask-previews/accounts-controller@38.0.0-preview-5e603a6c0
@metamask-previews/address-book-controller@7.1.1-preview-5e603a6c0
@metamask-previews/ai-controllers@0.6.3-preview-5e603a6c0
@metamask-previews/analytics-controller@1.0.1-preview-5e603a6c0
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-5e603a6c0
@metamask-previews/announcement-controller@8.1.0-preview-5e603a6c0
@metamask-previews/app-metadata-controller@2.0.1-preview-5e603a6c0
@metamask-previews/approval-controller@9.0.1-preview-5e603a6c0
@metamask-previews/assets-controller@7.0.0-preview-5e603a6c0
@metamask-previews/assets-controllers@106.0.0-preview-5e603a6c0
@metamask-previews/authenticated-user-storage@1.0.0-preview-5e603a6c0
@metamask-previews/base-controller@9.1.0-preview-5e603a6c0
@metamask-previews/base-data-service@0.1.1-preview-5e603a6c0
@metamask-previews/bridge-controller@72.0.1-preview-5e603a6c0
@metamask-previews/bridge-status-controller@71.1.1-preview-5e603a6c0
@metamask-previews/build-utils@3.0.4-preview-5e603a6c0
@metamask-previews/chain-agnostic-permission@1.6.0-preview-5e603a6c0
@metamask-previews/chomp-api-service@3.0.0-preview-5e603a6c0
@metamask-previews/claims-controller@0.5.0-preview-5e603a6c0
@metamask-previews/client-controller@1.0.1-preview-5e603a6c0
@metamask-previews/compliance-controller@2.0.0-preview-5e603a6c0
@metamask-previews/composable-controller@12.0.1-preview-5e603a6c0
@metamask-previews/config-registry-controller@0.3.0-preview-5e603a6c0
@metamask-previews/connectivity-controller@0.2.0-preview-5e603a6c0
@metamask-previews/controller-utils@11.20.0-preview-5e603a6c0
@metamask-previews/core-backend@6.2.1-preview-5e603a6c0
@metamask-previews/delegation-controller@3.0.0-preview-5e603a6c0
@metamask-previews/earn-controller@12.1.0-preview-5e603a6c0
@metamask-previews/eip-5792-middleware@3.0.3-preview-5e603a6c0
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-5e603a6c0
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-5e603a6c0
@metamask-previews/ens-controller@19.1.1-preview-5e603a6c0
@metamask-previews/eth-block-tracker@15.0.1-preview-5e603a6c0
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-5e603a6c0
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-5e603a6c0
@metamask-previews/foundryup@1.0.1-preview-5e603a6c0
@metamask-previews/gas-fee-controller@26.2.0-preview-5e603a6c0
@metamask-previews/gator-permissions-controller@4.1.0-preview-5e603a6c0
@metamask-previews/geolocation-controller@0.1.2-preview-5e603a6c0
@metamask-previews/json-rpc-engine@10.4.0-preview-5e603a6c0
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-5e603a6c0
@metamask-previews/keyring-controller@25.5.0-preview-5e603a6c0
@metamask-previews/logging-controller@8.0.1-preview-5e603a6c0
@metamask-previews/message-manager@14.1.1-preview-5e603a6c0
@metamask-previews/messenger@1.2.0-preview-5e603a6c0
@metamask-previews/messenger-cli@0.2.0-preview-5e603a6c0
@metamask-previews/money-account-balance-service@0.2.0-preview-5e603a6c0
@metamask-previews/money-account-controller@0.3.0-preview-5e603a6c0
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-5e603a6c0
@metamask-previews/multichain-account-service@9.0.0-preview-5e603a6c0
@metamask-previews/multichain-api-middleware@3.1.0-preview-5e603a6c0
@metamask-previews/multichain-network-controller@3.1.0-preview-5e603a6c0
@metamask-previews/multichain-transactions-controller@7.1.0-preview-5e603a6c0
@metamask-previews/name-controller@9.1.1-preview-5e603a6c0
@metamask-previews/network-controller@30.1.0-preview-5e603a6c0
@metamask-previews/network-enablement-controller@5.1.0-preview-5e603a6c0
@metamask-previews/notification-services-controller@23.1.0-preview-5e603a6c0
@metamask-previews/passkey-controller@2.0.1-preview-5e603a6c0
@metamask-previews/permission-controller@13.1.0-preview-5e603a6c0
@metamask-previews/permission-log-controller@5.1.0-preview-5e603a6c0
@metamask-previews/perps-controller@6.0.0-preview-5e603a6c0
@metamask-previews/phishing-controller@17.1.1-preview-5e603a6c0
@metamask-previews/polling-controller@16.0.4-preview-5e603a6c0
@metamask-previews/preferences-controller@23.1.0-preview-5e603a6c0
@metamask-previews/profile-metrics-controller@3.1.3-preview-5e603a6c0
@metamask-previews/profile-sync-controller@28.0.2-preview-5e603a6c0
@metamask-previews/ramps-controller@13.3.0-preview-5e603a6c0
@metamask-previews/rate-limit-controller@7.0.1-preview-5e603a6c0
@metamask-previews/react-data-query@0.2.0-preview-5e603a6c0
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-5e603a6c0
@metamask-previews/sample-controllers@4.0.4-preview-5e603a6c0
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-5e603a6c0
@metamask-previews/selected-network-controller@26.1.1-preview-5e603a6c0
@metamask-previews/shield-controller@5.1.1-preview-5e603a6c0
@metamask-previews/signature-controller@39.2.0-preview-5e603a6c0
@metamask-previews/snap-account-service@0.0.0-preview-5e603a6c0
@metamask-previews/social-controllers@2.2.0-preview-5e603a6c0
@metamask-previews/storage-service@1.0.1-preview-5e603a6c0
@metamask-previews/subscription-controller@6.1.2-preview-5e603a6c0
@metamask-previews/transaction-controller@65.2.0-preview-5e603a6c0
@metamask-previews/transaction-pay-controller@22.1.0-preview-5e603a6c0
@metamask-previews/user-operation-controller@41.2.0-preview-5e603a6c0

Copy link
Copy Markdown
Contributor

@Jwhiles Jwhiles left a comment

Choose a reason for hiding this comment

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

Nice! I like the approach - will do something similar for the chomp and upgrade controller packages :)

@Matt561 Matt561 added this pull request to the merge queue May 8, 2026
Merged via the queue into main with commit f7df669 May 8, 2026
366 checks passed
@Matt561 Matt561 deleted the feat/musd-681-support-remote-vault-config-feature-flag-in-money-account-balance-service branch May 8, 2026 18:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants