Skip to content

feat: resolve swap quote metadata by migration phase - #9744

Open
micaelae wants to merge 85 commits into
mainfrom
swaps4547-use-v2-migration
Open

feat: resolve swap quote metadata by migration phase#9744
micaelae wants to merge 85 commits into
mainfrom
swaps4547-use-v2-migration

Conversation

@micaelae

@micaelae micaelae commented Jul 31, 2026

Copy link
Copy Markdown
Member

Explanation

Draft client PRs

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 selector and submit APIs change how bridge/swap quotes expose fees, fiat, and legacy fields—incorrect migrationPhase can mislead users at confirmation and in metrics until clients adopt the extension/mobile PRs.

Overview
Introduces a breaking migrationPhase option on bridge quote selectors and on bridge-status-controller submit paths (submitTx, submitIntent, submitBatchSell). Clients must pass QuoteMetadataMigrationPhase to control how quote amounts and fiat values are built during the V1 → V2 metadata migration.

Phase behavior: Phase 1 (V1Data) keeps client-facing legacy fields from calcQuoteMetadata and skips V2 fiat derivation. Phase 1.5 (V2WithV1Fallback) prefers nested V2/API metadata plus fiat from USD, with legacy fallback. Phase 2 (V2Only) drops legacy metadata entirely and merges only normalized V2 fields and toCurrencyValues output.

mergeQuoteMetadata is now V2-only and takes migrationPhase plus optional currency partials; V1 quote merging was removed. toQuoteMetadataV1 is phase-aware so submission can still produce V1-shaped metadata from V2 quotes. Selectors gain selectUsdToFiatExchangeRate, selectCurrencyValues, and updated merge ordering per phase. QuoteMetadataMigrationPhase is exported from bridge-controller.

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

Base automatically changed from swaps4546-v2-controller-update to main August 4, 2026 21:48
@micaelae
micaelae marked this pull request as ready for review August 4, 2026 22:14
@micaelae
micaelae requested review from a team as code owners August 4, 2026 22:14
Comment thread packages/bridge-controller/src/utils/quote-metadata/calculators.ts Outdated
@micaelae

micaelae commented Aug 5, 2026

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Aug 5, 2026

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.6.0-preview-0e01525b8
@metamask-previews/accounts-controller@39.0.6-preview-0e01525b8
@metamask-previews/address-book-controller@7.1.2-preview-0e01525b8
@metamask-previews/ai-controllers@0.8.0-preview-0e01525b8
@metamask-previews/analytics-controller@2.0.0-preview-0e01525b8
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-0e01525b8
@metamask-previews/announcement-controller@8.1.0-preview-0e01525b8
@metamask-previews/app-metadata-controller@2.0.1-preview-0e01525b8
@metamask-previews/approval-controller@9.0.2-preview-0e01525b8
@metamask-previews/assets-controller@13.1.0-preview-0e01525b8
@metamask-previews/assets-controllers@110.1.1-preview-0e01525b8
@metamask-previews/authenticated-user-storage@3.0.1-preview-0e01525b8
@metamask-previews/base-controller@9.1.0-preview-0e01525b8
@metamask-previews/base-data-service@0.1.3-preview-0e01525b8
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-0e01525b8
@metamask-previews/bridge-controller@79.0.0-preview-0e01525b8
@metamask-previews/bridge-status-controller@75.0.0-preview-0e01525b8
@metamask-previews/build-utils@3.0.4-preview-0e01525b8
@metamask-previews/chain-agnostic-permission@1.7.0-preview-0e01525b8
@metamask-previews/chomp-api-service@4.0.0-preview-0e01525b8
@metamask-previews/claims-controller@0.5.4-preview-0e01525b8
@metamask-previews/client-controller@1.0.1-preview-0e01525b8
@metamask-previews/client-utils@2.0.0-preview-0e01525b8
@metamask-previews/compliance-controller@2.1.0-preview-0e01525b8
@metamask-previews/composable-controller@12.0.1-preview-0e01525b8
@metamask-previews/config-registry-controller@2.0.1-preview-0e01525b8
@metamask-previews/connectivity-controller@0.3.0-preview-0e01525b8
@metamask-previews/controller-utils@12.3.0-preview-0e01525b8
@metamask-previews/core-backend@8.1.1-preview-0e01525b8
@metamask-previews/delegation-controller@3.0.2-preview-0e01525b8
@metamask-previews/earn-controller@12.2.3-preview-0e01525b8
@metamask-previews/eip-5792-middleware@3.0.5-preview-0e01525b8
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-0e01525b8
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-0e01525b8
@metamask-previews/ens-controller@19.1.6-preview-0e01525b8
@metamask-previews/eth-block-tracker@15.0.1-preview-0e01525b8
@metamask-previews/eth-json-rpc-middleware@24.0.0-preview-0e01525b8
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-0e01525b8
@metamask-previews/foundryup@1.0.1-preview-0e01525b8
@metamask-previews/gas-fee-controller@26.3.1-preview-0e01525b8
@metamask-previews/gator-permissions-controller@5.0.1-preview-0e01525b8
@metamask-previews/geolocation-controller@1.0.0-preview-0e01525b8
@metamask-previews/java-tron-up@1.0.0-preview-0e01525b8
@metamask-previews/json-rpc-engine@10.5.0-preview-0e01525b8
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-0e01525b8
@metamask-previews/keyring-controller@27.1.0-preview-0e01525b8
@metamask-previews/local-node-utils@1.0.0-preview-0e01525b8
@metamask-previews/logging-controller@8.0.2-preview-0e01525b8
@metamask-previews/message-manager@14.1.2-preview-0e01525b8
@metamask-previews/messenger@2.0.0-preview-0e01525b8
@metamask-previews/messenger-cli@0.2.0-preview-0e01525b8
@metamask-previews/money-account-api-data-service@0.4.0-preview-0e01525b8
@metamask-previews/money-account-balance-service@2.4.1-preview-0e01525b8
@metamask-previews/money-account-controller@0.3.3-preview-0e01525b8
@metamask-previews/money-account-upgrade-controller@3.0.1-preview-0e01525b8
@metamask-previews/money-account-utils@1.1.0-preview-0e01525b8
@metamask-previews/multichain-account-service@13.0.0-preview-0e01525b8
@metamask-previews/multichain-api-middleware@4.0.2-preview-0e01525b8
@metamask-previews/multichain-network-controller@3.2.2-preview-0e01525b8
@metamask-previews/multichain-transactions-controller@7.1.1-preview-0e01525b8
@metamask-previews/name-controller@9.1.2-preview-0e01525b8
@metamask-previews/network-connection-banner-controller@0.1.2-preview-0e01525b8
@metamask-previews/network-controller@35.0.1-preview-0e01525b8
@metamask-previews/network-enablement-controller@6.0.2-preview-0e01525b8
@metamask-previews/notification-services-controller@26.0.1-preview-0e01525b8
@metamask-previews/passkey-controller@3.0.0-preview-0e01525b8
@metamask-previews/permission-controller@13.1.1-preview-0e01525b8
@metamask-previews/permission-log-controller@5.1.0-preview-0e01525b8
@metamask-previews/perps-controller@10.0.0-preview-0e01525b8
@metamask-previews/phishing-controller@17.3.1-preview-0e01525b8
@metamask-previews/platform-api-docs@0.0.0-preview-0e01525b8
@metamask-previews/polling-controller@16.0.9-preview-0e01525b8
@metamask-previews/preferences-controller@23.1.0-preview-0e01525b8
@metamask-previews/profile-metrics-controller@4.0.3-preview-0e01525b8
@metamask-previews/profile-sync-controller@29.0.0-preview-0e01525b8
@metamask-previews/ramps-controller@20.0.0-preview-0e01525b8
@metamask-previews/rate-limit-controller@7.0.1-preview-0e01525b8
@metamask-previews/react-data-query@0.2.2-preview-0e01525b8
@metamask-previews/remote-feature-flag-controller@5.0.0-preview-0e01525b8
@metamask-previews/sample-controllers@5.0.4-preview-0e01525b8
@metamask-previews/seedless-onboarding-controller@10.1.1-preview-0e01525b8
@metamask-previews/selected-network-controller@26.1.6-preview-0e01525b8
@metamask-previews/sentinel-api-service@1.0.0-preview-0e01525b8
@metamask-previews/shield-controller@5.1.3-preview-0e01525b8
@metamask-previews/signature-controller@39.2.9-preview-0e01525b8
@metamask-previews/smart-transactions-controller@25.1.0-preview-0e01525b8
@metamask-previews/snap-account-service@2.1.1-preview-0e01525b8
@metamask-previews/social-controllers@2.7.1-preview-0e01525b8
@metamask-previews/solana-test-validator-up@1.0.0-preview-0e01525b8
@metamask-previews/stellar-quickstart-up@0.0.0-preview-0e01525b8
@metamask-previews/storage-service@1.0.2-preview-0e01525b8
@metamask-previews/subscription-controller@6.2.2-preview-0e01525b8
@metamask-previews/transaction-controller@69.5.0-preview-0e01525b8
@metamask-previews/transaction-pay-controller@26.2.2-preview-0e01525b8
@metamask-previews/user-operation-controller@41.2.8-preview-0e01525b8
@metamask-previews/wallet@9.0.0-preview-0e01525b8
@metamask-previews/wallet-cli@0.0.0-preview-0e01525b8

@micaelae
micaelae force-pushed the swaps4547-use-v2-migration branch from 363f891 to 8257447 Compare August 7, 2026 01:11
@micaelae
micaelae enabled auto-merge August 7, 2026 01:15
@micaelae
micaelae force-pushed the swaps4547-use-v2-migration branch from cb46f5f to 3885f72 Compare August 7, 2026 01:33

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 3885f72. Configure here.

@micaelae

micaelae commented Aug 7, 2026

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Aug 7, 2026

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.6.1-preview-4c8a5dfcb
@metamask-previews/accounts-controller@39.0.7-preview-4c8a5dfcb
@metamask-previews/address-book-controller@7.1.2-preview-4c8a5dfcb
@metamask-previews/ai-controllers@0.8.0-preview-4c8a5dfcb
@metamask-previews/analytics-controller@2.0.0-preview-4c8a5dfcb
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-4c8a5dfcb
@metamask-previews/announcement-controller@8.1.0-preview-4c8a5dfcb
@metamask-previews/app-metadata-controller@2.0.1-preview-4c8a5dfcb
@metamask-previews/approval-controller@9.0.2-preview-4c8a5dfcb
@metamask-previews/assets-controller@13.1.1-preview-4c8a5dfcb
@metamask-previews/assets-controllers@111.1.0-preview-4c8a5dfcb
@metamask-previews/authenticated-user-storage@3.0.1-preview-4c8a5dfcb
@metamask-previews/base-controller@9.1.0-preview-4c8a5dfcb
@metamask-previews/base-data-service@0.1.3-preview-4c8a5dfcb
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-4c8a5dfcb
@metamask-previews/bridge-controller@79.0.1-preview-4c8a5dfcb
@metamask-previews/bridge-status-controller@75.0.0-preview-4c8a5dfcb
@metamask-previews/build-utils@3.0.4-preview-4c8a5dfcb
@metamask-previews/chain-agnostic-permission@1.7.0-preview-4c8a5dfcb
@metamask-previews/chomp-api-service@4.0.0-preview-4c8a5dfcb
@metamask-previews/claims-controller@0.5.4-preview-4c8a5dfcb
@metamask-previews/client-controller@1.0.1-preview-4c8a5dfcb
@metamask-previews/client-utils@2.0.1-preview-4c8a5dfcb
@metamask-previews/compliance-controller@2.1.0-preview-4c8a5dfcb
@metamask-previews/composable-controller@12.0.1-preview-4c8a5dfcb
@metamask-previews/config-registry-controller@2.0.1-preview-4c8a5dfcb
@metamask-previews/connectivity-controller@0.3.0-preview-4c8a5dfcb
@metamask-previews/controller-utils@12.3.0-preview-4c8a5dfcb
@metamask-previews/core-backend@8.1.1-preview-4c8a5dfcb
@metamask-previews/delegation-controller@3.0.2-preview-4c8a5dfcb
@metamask-previews/earn-controller@12.2.4-preview-4c8a5dfcb
@metamask-previews/eip-5792-middleware@3.0.5-preview-4c8a5dfcb
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-4c8a5dfcb
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-4c8a5dfcb
@metamask-previews/ens-controller@19.1.6-preview-4c8a5dfcb
@metamask-previews/eth-block-tracker@15.0.1-preview-4c8a5dfcb
@metamask-previews/eth-json-rpc-middleware@24.0.0-preview-4c8a5dfcb
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-4c8a5dfcb
@metamask-previews/foundryup@1.0.1-preview-4c8a5dfcb
@metamask-previews/gas-fee-controller@26.3.1-preview-4c8a5dfcb
@metamask-previews/gator-permissions-controller@5.0.1-preview-4c8a5dfcb
@metamask-previews/geolocation-controller@1.0.0-preview-4c8a5dfcb
@metamask-previews/java-tron-up@1.0.0-preview-4c8a5dfcb
@metamask-previews/json-rpc-engine@10.5.0-preview-4c8a5dfcb
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-4c8a5dfcb
@metamask-previews/keyring-controller@27.1.1-preview-4c8a5dfcb
@metamask-previews/kyc-controller@0.0.0-preview-4c8a5dfcb
@metamask-previews/local-node-utils@1.0.0-preview-4c8a5dfcb
@metamask-previews/logging-controller@8.0.2-preview-4c8a5dfcb
@metamask-previews/message-manager@14.1.2-preview-4c8a5dfcb
@metamask-previews/messenger@2.0.0-preview-4c8a5dfcb
@metamask-previews/messenger-cli@0.2.0-preview-4c8a5dfcb
@metamask-previews/money-account-api-data-service@0.4.0-preview-4c8a5dfcb
@metamask-previews/money-account-balance-service@2.4.1-preview-4c8a5dfcb
@metamask-previews/money-account-controller@1.0.0-preview-4c8a5dfcb
@metamask-previews/money-account-upgrade-controller@3.0.1-preview-4c8a5dfcb
@metamask-previews/money-account-utils@1.1.0-preview-4c8a5dfcb
@metamask-previews/multichain-account-service@13.0.1-preview-4c8a5dfcb
@metamask-previews/multichain-api-middleware@4.0.2-preview-4c8a5dfcb
@metamask-previews/multichain-network-controller@3.2.3-preview-4c8a5dfcb
@metamask-previews/multichain-transactions-controller@7.1.2-preview-4c8a5dfcb
@metamask-previews/name-controller@9.1.2-preview-4c8a5dfcb
@metamask-previews/network-connection-banner-controller@0.1.2-preview-4c8a5dfcb
@metamask-previews/network-controller@35.0.1-preview-4c8a5dfcb
@metamask-previews/network-enablement-controller@6.0.3-preview-4c8a5dfcb
@metamask-previews/notification-services-controller@26.0.1-preview-4c8a5dfcb
@metamask-previews/passkey-controller@3.0.0-preview-4c8a5dfcb
@metamask-previews/permission-controller@13.1.1-preview-4c8a5dfcb
@metamask-previews/permission-log-controller@5.1.0-preview-4c8a5dfcb
@metamask-previews/perps-controller@11.0.0-preview-4c8a5dfcb
@metamask-previews/phishing-controller@17.3.1-preview-4c8a5dfcb
@metamask-previews/platform-api-docs@0.0.0-preview-4c8a5dfcb
@metamask-previews/polling-controller@16.0.9-preview-4c8a5dfcb
@metamask-previews/preferences-controller@23.1.0-preview-4c8a5dfcb
@metamask-previews/profile-metrics-controller@4.0.3-preview-4c8a5dfcb
@metamask-previews/profile-sync-controller@29.0.0-preview-4c8a5dfcb
@metamask-previews/ramps-controller@20.0.0-preview-4c8a5dfcb
@metamask-previews/rate-limit-controller@7.0.1-preview-4c8a5dfcb
@metamask-previews/react-data-query@0.2.2-preview-4c8a5dfcb
@metamask-previews/remote-feature-flag-controller@5.0.0-preview-4c8a5dfcb
@metamask-previews/sample-controllers@5.0.4-preview-4c8a5dfcb
@metamask-previews/seedless-onboarding-controller@10.1.1-preview-4c8a5dfcb
@metamask-previews/selected-network-controller@26.1.6-preview-4c8a5dfcb
@metamask-previews/sentinel-api-service@1.0.0-preview-4c8a5dfcb
@metamask-previews/shield-controller@5.1.3-preview-4c8a5dfcb
@metamask-previews/signature-controller@39.2.9-preview-4c8a5dfcb
@metamask-previews/smart-transactions-controller@25.1.0-preview-4c8a5dfcb
@metamask-previews/snap-account-service@2.1.2-preview-4c8a5dfcb
@metamask-previews/social-controllers@2.7.1-preview-4c8a5dfcb
@metamask-previews/solana-test-validator-up@1.0.0-preview-4c8a5dfcb
@metamask-previews/stellar-quickstart-up@0.0.0-preview-4c8a5dfcb
@metamask-previews/storage-service@1.0.2-preview-4c8a5dfcb
@metamask-previews/subscription-controller@6.2.2-preview-4c8a5dfcb
@metamask-previews/transaction-controller@69.5.1-preview-4c8a5dfcb
@metamask-previews/transaction-pay-controller@26.2.3-preview-4c8a5dfcb
@metamask-previews/user-operation-controller@41.2.8-preview-4c8a5dfcb
@metamask-previews/wallet@9.0.0-preview-4c8a5dfcb
@metamask-previews/wallet-cli@0.0.0-preview-4c8a5dfcb

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.

1 participant