-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: market data for native tokens with non zero addresses #28584
Conversation
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
## **Description** This consolidates the changes from a series of 3 Multichain Asset List PRs that built on each other: 1. Product code (feature branch): #28386 2. Unit tests: #28451 3. e2e tests: #28524 We created separate branches for rapid iteration and isolated testing. The code is now cleaner and stable enough for review and merge into develop, gated by the `PORTFOLIO_VIEW` feature flag. We will introduce another PR to remove this feature flag when we are ready to ship it. [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/28593?quickstart=1) ## **Related issues** Fixes: https://github.com/orgs/MetaMask/projects/85/views/35?pane=issue&itemId=82217837 ## **Manual testing steps** `PORTFOLIO_VIEW=1 yarn webpack --watch` 1. View tokens across all networks in one unified list. 2. Filter tokens by selected network 3. Crosschain navigation: - Token detail pages update to display data from the appropriate network. - Send/Swap actions automatically adjust the selected network for user convenience. - Ensure that network switch is functional, and sends/swaps happen on correct chain. Known caveats: 1. POL native token market data not populating. Will be addressed here: #28584 and MetaMask/core#4952 2. Native token swapping on different network than selected network swaps incorrect token: #28587 3. Multichain token detection experimental draft: #28380 ## **Screenshots/Recordings** https://github.com/user-attachments/assets/79e7fd2d-9908-4c7a-8134-089cbe6593cc https://github.com/user-attachments/assets/dfb4a54f-a8ae-48a4-a9e7-50327f56054a ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --------- Co-authored-by: Jonathan Bursztyn <[email protected]> Co-authored-by: chloeYue <[email protected]> Co-authored-by: seaona <[email protected]> Co-authored-by: Monte Lai <[email protected]> Co-authored-by: Charly Chevalier <[email protected]> Co-authored-by: Pedro Figueiredo <[email protected]> Co-authored-by: MetaMask Bot <[email protected]> Co-authored-by: NidhiKJha <[email protected]> Co-authored-by: sahar-fehri <[email protected]>
… brian/polygonzeroaddress
## Explanation When querying the price API, the native token is usually represented by the zero address. But this is not the case on some chains like polygon, whose native token has a contract `0x0000000000000000000000000000000000001010`. Note: Extension/mobile would also need to use the exported `getNativeTokenAddress`, so they know where to lookup the native prices in state. Draft extension PR: MetaMask/metamask-extension#28584 ## 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 --> ## Changelog <!-- If you're making any consumer-facing changes, list those changes here as if you were updating a changelog, using the template below as a guide. (CATEGORY is one of BREAKING, ADDED, CHANGED, DEPRECATED, REMOVED, or FIXED. For security-related issues, follow the Security Advisory process.) Please take care to name the exact pieces of the API you've added or changed (e.g. types, interfaces, functions, or methods). If there are any breaking changes, make sure to offer a solution for consumers to follow once they upgrade to the changes. Finally, if you're only making changes to development scripts or tests, you may replace the template below with "None". --> ### `@metamask/assets-controllers` - **ADDED**: `chainIdToNativeTokenAddress` to record chains with unique (non-zero) addresses - **ADDED**: `getNativeTokenAddress()` exported function to return the correct native token address for native assets (either zero addresses, or the unique addresses recorded in `chainIdToNativeTokenAddress`) - **CHANGED**: Updated price API calls to use the native token by chain instead of relying on the zero address. - **CHANGED**: Updated `TokenRatesController` market data mapping to use `getNativeTokenAddress` instead of the zero address for native tokens. ## Checklist - [x] I've updated the test suite for new or updated code as appropriate - [x] I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate - [x] I've highlighted breaking changes using the "BREAKING" category above as appropriate - [x] I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes --------- Co-authored-by: Prithpal Sooriya <[email protected]>
Builds ready [b17514b]
Page Load Metrics (1882 ± 74 ms)
Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
...ltichain/token-list-item/price/percentage-and-amount-change/percentage-and-amount-change.tsx
Outdated
Show resolved
Hide resolved
const mockGetIntlLocale = jest.mocked(getIntlLocale); | ||
const mockGetCurrentCurrency = jest.mocked(getCurrentCurrency); | ||
const mockGetPreferences = jest.mocked(getPreferences); | ||
const mockGetSelectedAccount = jest.mocked(getSelectedAccount); | ||
const mockGetShouldHideZeroBalanceTokens = jest.mocked( | ||
getShouldHideZeroBalanceTokens, | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TIL jest.mocked
way better than casting to jest.Mock
like I'm used to 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Pulled down and ran. Populates both the percent change as well as the graph over time in asset details 👍
If you need another pass after removing the patch, lmk.
Builds ready [ff6daec]
Page Load Metrics (1986 ± 74 ms)
Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
… brian/polygonzeroaddress
ea42a9c
to
3fd86fb
Compare
.yarn/patches/@metamask-assets-controllers-npm-45.1.0-d914c453f0.patch
Outdated
Show resolved
Hide resolved
c29f098
to
b8caf56
Compare
Builds ready [b8caf56]
Page Load Metrics (1917 ± 126 ms)
Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
Description
Draft
When querying the price API, the native token is usually represented by the zero address. But this is not the case on some chains like polygon, whose native token has a contract
0x0000000000000000000000000000000000001010
.Depends on: MetaMask/core#4952
Related issues
Fixes:
Manual testing steps
(pre-req - you may need to enable the
PORTFOLIO_VIEW=true
flag)Screenshots/Recordings
Before
After
Pre-merge author checklist
Pre-merge reviewer checklist