Skip to content

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

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

feat: resolve swap quote metadata by migration phase#9744
micaelae wants to merge 84 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 mergeQuoteMetadata APIs plus phase-dependent fee/amount shaping can change what users see and what metrics receive if clients pass the wrong phase or lag on adoption.

Overview
Introduces a phased migration from client-calculated legacy quote metadata to V2 nested metadata from the bridge API, controlled by a new migrationPhase parameter.

bridge-controller: Clients must pass optional migrationPhase on quote selectors (defaults to Phase 1). Exported QuoteMetadataMigrationPhase defines V1Data (legacy calcQuoteMetadata only), V2WithV1Fallback (prefer API V2 + fiat derived from usd, fall back to legacy), and V2Only (no legacy top-level fields). mergeQuoteMetadata is breaking: V1 quote support removed; signature now includes migrationPhase and optional V2 currencyValues from new toCurrencyValues. toQuoteMetadataV1 is phase-aware so submission/history can rebuild legacy-shaped fields from V2 when needed.

bridge-status-controller: submitTx, submitIntent, and submitBatchSell accept migrationPhase and use it when coercing V2 quotes to V1 for metrics/history (spread merge instead of mergeQuoteMetadata in tests).

Consumers (extension/mobile draft PRs) must adopt the new selector param and align phase with their rollout.

Reviewed by Cursor Bugbot for commit 3885f72. 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.

priceImpact: toTokenAmountValues(priceData?.priceImpact),
// Use priceImpact as cost
cost: toTokenAmountValues(priceData?.priceImpact),
}),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Wrong cost from price impact

Medium Severity

In the V2 metadata path, cost is copied from priceImpact instead of being derived from sentAmount and adjustedReturn. Under V2WithV1Fallback, that value is merged over the correct legacy cost, so submit/history metrics can store an understated cost when network fees differ from price impact.

Additional Locations (1)
Fix in Cursor Fix in Web

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

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