Skip to content

feat: arc bridge native approach#9262

Open
maxime-oe wants to merge 1 commit into
mainfrom
feat/arc-bridge-native
Open

feat: arc bridge native approach#9262
maxime-oe wants to merge 1 commit into
mainfrom
feat/arc-bridge-native

Conversation

@maxime-oe

@maxime-oe maxime-oe commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Explanation

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
Changes quote cost and network-fee metadata used for sorting and display; incorrect relayer logic could mislead users on bridge economics, though the fix targets a known bad path when trade.value is zero.

Overview
Aligns Arc bridge native token metadata with a USDC symbol (replacing USDC-native) in the default token map and SYMBOL_TO_SLIP44_MAP, matching the “native USDC at zero address” model while the UI can still hide it from the asset picker.

Relayer fee math in calcRelayerFee now only back-calculates trade.value - sentAmount when the source is native and trade.value is greater than zero. When trade.value is 0x0 (e.g. ERC-20 source or native flows that don’t put value on the trade), the relayer fee stays 0 instead of becoming a large negative that poisoned cost, adjusted return, and total network fee in quote selectors.

Selector tests were updated for the corrected fee/cost figures on mocks that use trade.value: '0x0'.

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

@maxime-oe maxime-oe force-pushed the feat/arc-bridge-native branch from 16678d5 to 31eae6b Compare June 25, 2026 06:24
@maxime-oe maxime-oe marked this pull request as ready for review June 25, 2026 06:35
@maxime-oe maxime-oe requested a review from a team as a code owner June 25, 2026 06:35
@maxime-oe

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

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.5.3-preview-31eae6ba5
@metamask-previews/accounts-controller@39.0.3-preview-31eae6ba5
@metamask-previews/address-book-controller@7.1.2-preview-31eae6ba5
@metamask-previews/ai-controllers@0.7.0-preview-31eae6ba5
@metamask-previews/analytics-controller@1.1.1-preview-31eae6ba5
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-31eae6ba5
@metamask-previews/announcement-controller@8.1.0-preview-31eae6ba5
@metamask-previews/app-metadata-controller@2.0.1-preview-31eae6ba5
@metamask-previews/approval-controller@9.0.2-preview-31eae6ba5
@metamask-previews/assets-controller@9.1.0-preview-31eae6ba5
@metamask-previews/assets-controllers@109.2.2-preview-31eae6ba5
@metamask-previews/authenticated-user-storage@2.1.0-preview-31eae6ba5
@metamask-previews/base-controller@9.1.0-preview-31eae6ba5
@metamask-previews/base-data-service@0.1.3-preview-31eae6ba5
@metamask-previews/bitcoin-regtest-up@0.0.0-preview-31eae6ba5
@metamask-previews/bridge-controller@76.1.0-preview-31eae6ba5
@metamask-previews/bridge-status-controller@72.3.0-preview-31eae6ba5
@metamask-previews/build-utils@3.0.4-preview-31eae6ba5
@metamask-previews/chain-agnostic-permission@1.6.2-preview-31eae6ba5
@metamask-previews/chomp-api-service@3.1.0-preview-31eae6ba5
@metamask-previews/claims-controller@0.5.3-preview-31eae6ba5
@metamask-previews/client-controller@1.0.1-preview-31eae6ba5
@metamask-previews/compliance-controller@2.1.0-preview-31eae6ba5
@metamask-previews/composable-controller@12.0.1-preview-31eae6ba5
@metamask-previews/config-registry-controller@0.4.1-preview-31eae6ba5
@metamask-previews/connectivity-controller@0.2.0-preview-31eae6ba5
@metamask-previews/controller-utils@12.3.0-preview-31eae6ba5
@metamask-previews/core-backend@6.3.3-preview-31eae6ba5
@metamask-previews/delegation-controller@3.0.2-preview-31eae6ba5
@metamask-previews/earn-controller@12.2.1-preview-31eae6ba5
@metamask-previews/eip-5792-middleware@3.0.4-preview-31eae6ba5
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-31eae6ba5
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-31eae6ba5
@metamask-previews/ens-controller@19.1.4-preview-31eae6ba5
@metamask-previews/eth-block-tracker@15.0.1-preview-31eae6ba5
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-31eae6ba5
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-31eae6ba5
@metamask-previews/foundryup@1.0.1-preview-31eae6ba5
@metamask-previews/gas-fee-controller@26.2.3-preview-31eae6ba5
@metamask-previews/gator-permissions-controller@4.2.1-preview-31eae6ba5
@metamask-previews/geolocation-controller@0.1.3-preview-31eae6ba5
@metamask-previews/java-tron-up@0.0.0-preview-31eae6ba5
@metamask-previews/json-rpc-engine@10.5.0-preview-31eae6ba5
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-31eae6ba5
@metamask-previews/keyring-controller@27.1.0-preview-31eae6ba5
@metamask-previews/local-node-utils@0.0.0-preview-31eae6ba5
@metamask-previews/logging-controller@8.0.2-preview-31eae6ba5
@metamask-previews/message-manager@14.1.2-preview-31eae6ba5
@metamask-previews/messenger@1.2.0-preview-31eae6ba5
@metamask-previews/messenger-cli@0.2.0-preview-31eae6ba5
@metamask-previews/money-account-balance-service@2.1.1-preview-31eae6ba5
@metamask-previews/money-account-controller@0.3.3-preview-31eae6ba5
@metamask-previews/money-account-upgrade-controller@2.1.0-preview-31eae6ba5
@metamask-previews/multichain-account-service@11.0.0-preview-31eae6ba5
@metamask-previews/multichain-api-middleware@3.1.5-preview-31eae6ba5
@metamask-previews/multichain-network-controller@3.1.4-preview-31eae6ba5
@metamask-previews/multichain-transactions-controller@7.1.1-preview-31eae6ba5
@metamask-previews/name-controller@9.1.2-preview-31eae6ba5
@metamask-previews/network-controller@33.0.0-preview-31eae6ba5
@metamask-previews/network-enablement-controller@5.4.0-preview-31eae6ba5
@metamask-previews/notification-services-controller@24.2.0-preview-31eae6ba5
@metamask-previews/passkey-controller@2.0.1-preview-31eae6ba5
@metamask-previews/permission-controller@13.1.1-preview-31eae6ba5
@metamask-previews/permission-log-controller@5.1.0-preview-31eae6ba5
@metamask-previews/perps-controller@9.0.0-preview-31eae6ba5
@metamask-previews/phishing-controller@17.2.0-preview-31eae6ba5
@metamask-previews/polling-controller@16.0.7-preview-31eae6ba5
@metamask-previews/preferences-controller@23.1.0-preview-31eae6ba5
@metamask-previews/profile-metrics-controller@4.0.0-preview-31eae6ba5
@metamask-previews/profile-sync-controller@28.2.0-preview-31eae6ba5
@metamask-previews/ramps-controller@14.3.0-preview-31eae6ba5
@metamask-previews/rate-limit-controller@7.0.1-preview-31eae6ba5
@metamask-previews/react-data-query@0.2.1-preview-31eae6ba5
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-31eae6ba5
@metamask-previews/sample-controllers@5.0.2-preview-31eae6ba5
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-31eae6ba5
@metamask-previews/selected-network-controller@26.1.4-preview-31eae6ba5
@metamask-previews/shield-controller@5.1.2-preview-31eae6ba5
@metamask-previews/signature-controller@39.2.6-preview-31eae6ba5
@metamask-previews/smart-transactions-controller@24.2.3-preview-31eae6ba5
@metamask-previews/snap-account-service@1.0.0-preview-31eae6ba5
@metamask-previews/social-controllers@2.3.1-preview-31eae6ba5
@metamask-previews/solana-test-validator-up@0.0.0-preview-31eae6ba5
@metamask-previews/storage-service@1.0.2-preview-31eae6ba5
@metamask-previews/subscription-controller@6.2.0-preview-31eae6ba5
@metamask-previews/transaction-controller@68.1.1-preview-31eae6ba5
@metamask-previews/transaction-pay-controller@23.14.0-preview-31eae6ba5
@metamask-previews/user-operation-controller@41.2.5-preview-31eae6ba5
@metamask-previews/wallet@4.0.0-preview-31eae6ba5
@metamask-previews/wallet-cli@0.0.0-preview-31eae6ba5

// back-calculated as trade.value - sentAmount. This only holds when the native
// asset actually flows through trade.value; when trade.value is 0 there is
// nothing to back out and the relayer fee is 0.
if (isNativeAddress(quote.srcAsset.address) && relayerFeeAmount.gt(0)) {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Why this is useful for Arc:

  • The logic " - " doesn't make sense for Arc since USDC native transactions will actually be ERC20 transactions. This change prevents the display of wrong fees in the quotes list.

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