Skip to content

fix(assets-controller): force default-track Arc's native USDC - #9869

Merged
maxime-oe merged 4 commits into
mainfrom
fix/arc-native-usdc-default-tracked
Aug 13, 2026
Merged

fix(assets-controller): force default-track Arc's native USDC#9869
maxime-oe merged 4 commits into
mainfrom
fix/arc-native-usdc-default-tracked

Conversation

@maxime-oe

@maxime-oemaxime-oe commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

For fresh SRP, when adding Arc, no USDC (native) entry shows at all, until balance gets different from 0.
I couldn't find the root cause of the issue - only happening for Arc - but found that default.ts contains instructions that pre-dates the decision of showing USDC native (instead of ERC20) on Arc.
Re-using the same maps, we can force-show USDC native, overriding the still-nonunderstood behavior that led it to disappear.

image

Default-track the native id (eip155:5042/slip44:5042) instead of the 0x3600... ERC20 identity, which is no longer a valid representation to track here.
As a result, USDC native on Arc is forced to be always shown in user's asset list, even when they own 0 USDC.

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

Low Risk
Narrows to default-tracked asset IDs and metadata for Arc only; no auth, pipeline, or API contract changes.

Overview
Fixes Arc native USDC missing from the asset list until the wallet receives a non-zero balance by changing how Arc default-tracked assets are registered in defaults.ts.

For eip155:5042, the default tracked id is now eip155:5042/slip44:5042 (native USDC) instead of the 0x3600… ERC-20 CAIP-19 id. Pre-seeded metadata is updated to type: 'native' with 18 decimals, so buildDefaultAssetsInfo / default seeding populate assetsInfo (and zero balances) as soon as Arc is enabled—matching the decision to surface native USDC rather than the duplicate ERC-20 representation.

The Unreleased changelog documents the user-visible fix.

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

… its ERC20 identity
Arc's native gas token is USDC, but Arc's Accounts-API balance fetch
always succeeds for the ERC20 identity, which short-circuits the RPC
fallback path that would otherwise be the only place writing
`type: 'native'` metadata for the native asset id. Without that
metadata, the zero-balance native entry `#ensureNativeBalancesDefaultZero`
seeds for every chain has nothing to be recognized by, and clients that
gate rendering on `assetsInfo[assetId]?.type === 'native'` (e.g.
metamask-mobile's assets-migration.ts) silently drop the row until the
account's first deposit triggers a different code path.
Default-track the native id (`eip155:5042/slip44:5042`) instead of the
`0x3600...` ERC20 identity, which is no longer a valid representation to
track here.
@maxime-oemaxime-oe changed the title fix(assets-controller): default-track Arc's native USDC id instead of…fix(assets-controller): force default-track Arc's native USDCAug 13, 2026
@maxime-oe
maxime-oe marked this pull request as ready for review August 13, 2026 14:17
@maxime-oe
maxime-oe requested review from a team as code ownersAugust 13, 2026 14:17

@cursorcursorBot 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 d46df6c. Configure here.

Comment threadpackages/assets-controller/src/defaults.ts
…efault-tracked
# Conflicts:
#	packages/assets-controller/CHANGELOG.md
@maxime-oe
maxime-oe added this pull request to the merge queueAug 13, 2026
Merged via the queue into main with commit 4c93a80Aug 13, 2026
58 checks passed
@maxime-oe
maxime-oe deleted the fix/arc-native-usdc-default-tracked branch August 13, 2026 20:12
@maxime-oemaxime-oe mentioned this pull request Aug 13, 2026
4 tasks
pullBot pushed a commit to dmrazzy/core that referenced this pull request Aug 13, 2026
## Explanation
## Assets Controller [13.1.3]
### Changed
- Bump `@metamask/transaction-controller` from `^69.5.1` to `^69.5.2`
([MetaMask#9823](MetaMask#9823))
### Fixed
- Fix Arc native USDC never appearing until the account receives its
first deposit, by default-tracking the native asset id
(`eip155:5042/slip44:5042`) instead of the `0x3600...` ERC20 identity so
`assetsInfo` metadata is seeded up front
([MetaMask#9869](MetaMask#9869))
- Properly filter empty (`''`) selected account group event
([MetaMask#9825](MetaMask#9825))
<!--
Thanks for your contribution! Take a moment to answer these questions so
that reviewers have the information they need to properly understand
your changes:
* What is the current state of things and why does it need to change?
* What is the solution your changes offer and how does it work?
* Are there any changes whose purpose might not obvious to those
unfamiliar with the domain?
* If your primary goal was to update one package but you found you had
to update another one along the way, why did you do so?
* If you had to upgrade a dependency, why did you do so?
-->
## References
<!--
Are there any issues that this pull request is tied to?
Are there other links that reviewers should consult to understand these
changes better?
Are there client or consumer pull requests to adopt any breaking
changes?
For example:
* Fixes #12345
* Related to #67890
-->
## 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](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md)
- [ ] I've introduced [breaking
changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md)
in this PR and have prepared draft pull requests for clients and
consumer packages to resolve them
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/bugbot) is generating a
summary for commit 444cbe4. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
maxime-oe added a commit to MetaMask/metamask-extension that referenced this pull request Aug 14, 2026
@metamask/assets-controller@13.1.3 is now published to npm with the
Arc native USDC default-tracking fix (MetaMask/core#9869), so the
local .yarn/patches override against 13.1.2 is no longer needed.
maxime-oe added a commit to MetaMask/metamask-mobile that referenced this pull request Aug 14, 2026
@metamask/assets-controller@13.1.3 is now published to npm with the
Arc native USDC default-tracking fix (MetaMask/core#9869), so the
local .yarn/patches override against 13.1.2 is no longer needed.
cursorBot pushed a commit that referenced this pull request Aug 14, 2026
Resolved merge conflict in CHANGELOG.md by keeping both Fixed entries:
- Revert of AccountsApiDataSource forceUpdate cache window (#9870)
- Arc native USDC default-tracking fix (#9869)
Co-authored-by: Salim TOUBAL <salimtb@users.noreply.github.com>
Sign up for freeto 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.

2 participants

@maxime-oe@Prithpal-Sooriya