Skip to content

chore: update assets controller (NFT refresh uses multicall v3)#41689

Merged
juanmigdr merged 11 commits into
mainfrom
chore/apply-update-of-core-nfts
Apr 17, 2026
Merged

chore: update assets controller (NFT refresh uses multicall v3)#41689
juanmigdr merged 11 commits into
mainfrom
chore/apply-update-of-core-nfts

Conversation

@juanmigdr

@juanmigdr juanmigdr commented Apr 13, 2026

Copy link
Copy Markdown
Member

Description

Upgrades @metamask/assets-controllers from ^103.1.0 to ^104.0.0, which introduces multicall v3 for NFT ownership refresh. This version removes the getERC721OwnerOf and getERC1155BalanceOf messenger actions from the NftController (ownership checks are now handled internally via multicall), and drops the isMainnet boolean parameter from checkAndUpdateSingleNftOwnershipStatus.

Changes:

  • package.json / yarn.lock: Bumped @metamask/assets-controllers to ^104.0.0
  • nft-controller-messenger.ts: Removed AssetsContractControllerGetERC721OwnerOfAction and AssetsContractControllerGetERC1155BalanceOfAction from the allowed actions and messenger allow list — these are no longer needed as the NftController handles ownership resolution via multicall v3 internally
  • metamask-controller.js: Removed the false (isMainnet) argument from two checkAndUpdateSingleNftOwnershipStatus call sites, matching the updated upstream API signature
  • ui/store/actions.ts: Removed the same false argument from the background request wrapper

Changelog

CHANGELOG entry: update assets controller (NFT refresh uses multicall v3)

Related issues

Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-2959

Manual testing steps

  1. Go to this page...

Screenshots/Recordings

Before

After

Pre-merge author checklist

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.

Note

Medium Risk
Moderate risk due to a dependency upgrade that changes how NFT ownership is refreshed (now internal/multicall-based) and updates multiple call sites/messenger permissions accordingly.

Overview
Upgrades @metamask/assets-controllers to ^104.0.0 and aligns the extension’s NFT ownership refresh calls with the updated checkAndUpdateSingleNftOwnershipStatus signature by removing the isMainnet boolean argument from background/UI and controller call sites.

Tightens NftController messenger permissions by dropping now-unused AssetsContractController actions (e.g. getERC721OwnerOf, getERC1155BalanceOf), and updates LavaMoat policies to reflect the dependency graph change (removing @metamask/assets-controller>@metamask/assets-controllers entries and allowing @metamask/assets-controllers directly).

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

github-merge-queue Bot pushed a commit to MetaMask/core that referenced this pull request Apr 13, 2026
## Explanation
PR #8281 introduced a breaking change that removed
checkAndUpdateSingleNftOwnershipStatus from NftController entirely,
replacing it with a batch-only checkAndUpdateAllNftsOwnershipStatus
flow. However, the MetaMask extension calls
checkAndUpdateSingleNftOwnershipStatus directly after confirmed
transactions to check ownership of a single NFT — making the removal a
regression for extension consumers.

This PR restores checkAndUpdateSingleNftOwnershipStatus with an updated
signature that aligns with the new architecture introduced in #8281: the
batch boolean second argument is removed, the networkClientId is now the
second argument (required), and the method always writes the updated NFT
to state and returns it.

Additionally, a bug introduced in the restored implementation is fixed:
the original draft called this.update() directly followed by
this.#updateNestedNftState(), which also calls this.update() internally
— causing two stateChanged events to fire for a single logical state
change. The redundant this.update() call is removed so the method is
consistent with every other NFT-mutating method in the controller.
<!--
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
Ticket: https://consensyssoftware.atlassian.net/browse/ASSETS-2959
Extension PR: MetaMask/metamask-extension#41689
<!--
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]
> **Medium Risk**
> Reintroduces and changes the signature/behavior of
`checkAndUpdateSingleNftOwnershipStatus`, which may break existing call
sites and affects how NFT ownership state is mutated.
> 
> **Overview**
> Restores `NftController.checkAndUpdateSingleNftOwnershipStatus`
(removed in #8281) to fix consumers that perform per-NFT ownership
checks, and implements it to call `isNftOwner`, update
`isCurrentlyOwned`, persist the updated NFT back into `allNfts`, and
return the updated object.
> 
> Updates documentation/tests: adds unit coverage for state updates and
`userAddress` overrides, and updates the changelog to document the
restored method plus the **breaking** signature change (removing the
`batch` boolean argument).
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
5593976. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@metamaskbotv2

metamaskbotv2 Bot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor
Builds ready [872e68f]
⚡ Performance Benchmarks (Total: 🟢 7 pass · 🟡 12 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24337311950 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-browserify
loadNewAccount🟡 [Show logs]
confirmTx🟡 [Show logs]
bridgeUserActions🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • bridgeUserActions/bridge_load_asset_picker: -40%
  • bridgeUserActions/bridge_search_token: +37%
  • bridgeUserActions/total: +11%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.5s
  • 🟡 confirmTx/FCP: p75 2.5s
  • 🟡 bridgeUserActions/FCP: p75 2.5s
Startup Benchmarks · Samples: 100
Benchmarkchrome-browserifychrome-webpackfirefox-browserifyfirefox-webpack
startupStandardHome🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]
startupPowerUserHome🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -23%
  • startupStandardHome/load: -12%
  • startupStandardHome/domContentLoaded: -14%
  • startupStandardHome/backgroundConnect: +12%
  • startupStandardHome/initialActions: -33%
  • startupStandardHome/loadScripts: -17%
  • startupStandardHome/numNetworkReqs: -21%
  • startupPowerUserHome/uiStartup: -23%
  • startupPowerUserHome/backgroundConnect: +112%
  • startupPowerUserHome/initialActions: +100%
  • startupPowerUserHome/setupStore: +15%
  • startupPowerUserHome/numNetworkReqs: +32%
  • startupStandardHome/uiStartup: -17%
  • startupStandardHome/load: -12%
  • startupStandardHome/domContentLoaded: -12%
  • startupStandardHome/firstPaint: +12%
  • startupStandardHome/backgroundConnect: -37%
  • startupStandardHome/firstReactRender: -19%
  • startupStandardHome/loadScripts: -12%
  • startupStandardHome/numNetworkReqs: -29%
  • startupPowerUserHome/uiStartup: -28%
  • startupPowerUserHome/numNetworkReqs: -26%
  • startupStandardHome/uiStartup: -14%
  • startupStandardHome/domInteractive: -56%
  • startupStandardHome/initialActions: -33%
  • startupPowerUserHome/uiStartup: -37%
  • startupPowerUserHome/backgroundConnect: -34%
  • startupPowerUserHome/firstReactRender: -10%
  • startupPowerUserHome/setupStore: +58%
  • startupStandardHome/uiStartup: -14%
  • startupStandardHome/domInteractive: -38%
  • startupStandardHome/initialActions: -43%
  • startupStandardHome/setupStore: -57%
  • startupStandardHome/numNetworkReqs: -18%
  • startupPowerUserHome/uiStartup: -34%
  • startupPowerUserHome/domInteractive: -24%
  • startupPowerUserHome/backgroundConnect: -29%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 776ms
  • 🔴 startupPowerUserHome/INP: p75 744ms
  • 🟡 startupPowerUserHome/LCP: p75 3.3s
  • 🟡 startupPowerUserHome/LCP: p75 3.3s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]
sendTransactions🟡 [Show logs]
swap🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -85%
  • onboardingImportWallet/metricsToWalletReadyScreen: -49%
  • onboardingImportWallet/doneButtonToHomeScreen: -77%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +26%
  • onboardingImportWallet/total: -44%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/skipBackupToMetricsScreen: -69%
  • onboardingNewWallet/doneButtonToAssetList: -36%
  • onboardingNewWallet/total: -35%
  • assetDetails/assetClickToPriceChart: -41%
  • assetDetails/total: -41%
  • solanaAssetDetails/assetClickToPriceChart: -68%
  • solanaAssetDetails/total: -68%
  • importSrpHome/openAccountMenuAfterLogin: -73%
  • importSrpHome/homeAfterImportWithNewWallet: -74%
  • importSrpHome/total: -64%
  • sendTransactions/selectTokenToSendFormLoaded: -26%
  • sendTransactions/reviewTransactionToConfirmationPage: +34%
  • sendTransactions/total: +31%
  • swap/openSwapPageFromHome: -96%
  • swap/fetchAndDisplaySwapQuotes: +32%
  • swap/total: +11%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/INP: p75 224ms
  • 🟡 assetDetails/FCP: p75 2.5s
  • 🟡 solanaAssetDetails/FCP: p75 2.5s
  • 🟡 importSrpHome/INP: p75 256ms
  • 🟡 importSrpHome/FCP: p75 2.5s
  • 🟡 sendTransactions/INP: p75 232ms
  • 🟡 sendTransactions/FCP: p75 2.5s
  • 🟡 swap/FCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: +21%
  • dappPageLoad/domContentLoaded: +20%
  • dappPageLoad/firstPaint: +32%
  • dappPageLoad/firstContentfulPaint: +32%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 1.11 KiB (0.02%)
  • ui: 8.53 KiB (0.1%)
  • common: 3.92 KiB (0.03%)

@metamaskbotv2

metamaskbotv2 Bot commented Apr 16, 2026

Copy link
Copy Markdown
Contributor
Builds ready [39c70bc]
⚡ Performance Benchmarks (Total: 🟢 3 pass · 🟡 1 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24509767949 | Baseline logs

Interaction Benchmarks · Samples: 5

⚠️ Missing data: chrome/browserify/interactionUserActions

✅ No regressions detected

Startup Benchmarks · Samples: 100

⚠️ Missing data: chrome/browserify/startupStandardHome

Benchmarkchrome-webpack
startupStandardHome🟢 [Show logs]
startupPowerUserHome🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -15%
  • startupStandardHome/firstPaint: +25%
  • startupStandardHome/backgroundConnect: -28%
  • startupStandardHome/firstReactRender: -27%
  • startupStandardHome/setupStore: -13%
  • startupStandardHome/numNetworkReqs: -44%
  • startupPowerUserHome/uiStartup: -27%
  • startupPowerUserHome/domInteractive: -16%
  • startupPowerUserHome/numNetworkReqs: +44%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 744ms
User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: chrome/browserify/userJourneyOnboardingNew, chrome/browserify/userJourneyAssets, chrome/browserify/userJourneyAccountManagement, chrome/browserify/userJourneyTransactions

Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -19 Bytes (0%)
  • ui: -822 Bytes (-0.01%)
  • common: -285.28 KiB (-2.12%)

@juanmigdr juanmigdr requested a review from a team as a code owner April 16, 2026 14:59
@metamaskbotv2

metamaskbotv2 Bot commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

✨ Files requiring CODEOWNER review ✨

📜 @MetaMask/policy-reviewers (8 files, +8 -268)
  • 📁 lavamoat/
    • 📁 browserify/
      • 📁 beta/
        • 📄 policy.json +1 -66
      • 📁 experimental/
        • 📄 policy.json +1 -66
      • 📁 flask/
        • 📄 policy.json +1 -66
      • 📁 main/
        • 📄 policy.json +1 -66
    • 📁 webpack/
      • 📁 mv2/
        • 📁 beta/
          • 📄 policy.json +1 -1
        • 📁 experimental/
          • 📄 policy.json +1 -1
        • 📁 flask/
          • 📄 policy.json +1 -1
        • 📁 main/
          • 📄 policy.json +1 -1

Tip

Follow the policy review process outlined in the LavaMoat Policy Review Process doc before expecting an approval from Policy Reviewers.

@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 39fe37d. Configure here.

Comment thread lavamoat/build-system/policy.json Outdated
@metamaskbotv2

metamaskbotv2 Bot commented Apr 16, 2026

Copy link
Copy Markdown
Contributor
Builds ready [46b813f]
⚡ Performance Benchmarks (Total: 🟢 6 pass · 🟡 10 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24518302726 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-browserify
loadNewAccount🟡 [Show logs]
confirmTx🟡 [Show logs]
bridgeUserActions🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -20%
  • loadNewAccount/total: -20%
  • bridgeUserActions/bridge_load_page: -13%
  • bridgeUserActions/bridge_load_asset_picker: -44%
  • bridgeUserActions/total: -18%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.5s
  • 🟡 confirmTx/FCP: p75 2.5s
  • 🟡 bridgeUserActions/FCP: p75 2.5s
Startup Benchmarks · Samples: 100

⚠️ Missing data: chrome/browserify/startupStandardHome, chrome/browserify/startupPowerUserHome, firefox/webpack/startupPowerUserHome

Benchmarkchrome-webpackfirefox-browserifyfirefox-webpack
startupStandardHome🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]
startupPowerUserHome🟡 [Show logs]🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -16%
  • startupStandardHome/load: -11%
  • startupStandardHome/domContentLoaded: -11%
  • startupStandardHome/firstPaint: +21%
  • startupStandardHome/backgroundConnect: -30%
  • startupStandardHome/firstReactRender: -23%
  • startupStandardHome/loadScripts: -11%
  • startupStandardHome/numNetworkReqs: -44%
  • startupPowerUserHome/uiStartup: -27%
  • startupPowerUserHome/domInteractive: -16%
  • startupPowerUserHome/numNetworkReqs: +44%
  • startupStandardHome/backgroundConnect: +16%
  • startupStandardHome/initialActions: -33%
  • startupStandardHome/setupStore: +13%
  • startupStandardHome/numNetworkReqs: -26%
  • startupPowerUserHome/uiStartup: -26%
  • startupPowerUserHome/backgroundConnect: -14%
  • startupPowerUserHome/loadScripts: +12%
  • startupStandardHome/uiStartup: -18%
  • startupStandardHome/load: -10%
  • startupStandardHome/domContentLoaded: -10%
  • startupStandardHome/domInteractive: -68%
  • startupStandardHome/initialActions: +14%
  • startupStandardHome/loadScripts: -11%
  • startupStandardHome/setupStore: -60%
  • startupStandardHome/numNetworkReqs: -34%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 736ms
  • 🟡 startupPowerUserHome/LCP: p75 3.8s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]
sendTransactions🟡 [Show logs]
swap🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -83%
  • onboardingImportWallet/metricsToWalletReadyScreen: -33%
  • onboardingImportWallet/doneButtonToHomeScreen: -79%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +28%
  • onboardingImportWallet/total: -43%
  • onboardingNewWallet/srpButtonToPwForm: -77%
  • onboardingNewWallet/skipBackupToMetricsScreen: -65%
  • onboardingNewWallet/doneButtonToAssetList: -24%
  • onboardingNewWallet/total: -26%
  • assetDetails/assetClickToPriceChart: -38%
  • assetDetails/total: -38%
  • solanaAssetDetails/assetClickToPriceChart: -73%
  • solanaAssetDetails/total: -73%
  • importSrpHome/openAccountMenuAfterLogin: -76%
  • importSrpHome/homeAfterImportWithNewWallet: -70%
  • importSrpHome/total: -61%
  • sendTransactions/openSendPageFromHome: -23%
  • sendTransactions/selectTokenToSendFormLoaded: -21%
  • sendTransactions/reviewTransactionToConfirmationPage: +34%
  • sendTransactions/total: +31%
  • swap/openSwapPageFromHome: -96%
  • swap/fetchAndDisplaySwapQuotes: +32%
  • swap/total: +11%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/FCP: p75 2.5s
  • 🟡 solanaAssetDetails/FCP: p75 2.5s
  • 🟡 importSrpHome/INP: p75 216ms
  • 🟡 importSrpHome/FCP: p75 2.7s
  • 🟡 importSrpHome/LCP: p75 2.6s
  • 🟡 sendTransactions/INP: p75 216ms
  • 🟡 sendTransactions/FCP: p75 2.4s
  • 🟡 swap/FCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -19 Bytes (0%)
  • ui: -824 Bytes (-0.01%)
  • common: -285.28 KiB (-2.12%)

@metamaskbotv2

metamaskbotv2 Bot commented Apr 16, 2026

Copy link
Copy Markdown
Contributor
Builds ready [6a172a5]
⚡ Performance Benchmarks (Total: 🟢 3 pass · 🟡 5 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24520942527 | Baseline logs

Interaction Benchmarks · Samples: 5

⚠️ Missing data: chrome/browserify/interactionUserActions

✅ No regressions detected

Startup Benchmarks · Samples: 100

⚠️ Missing data: chrome/browserify/startupStandardHome, chrome/browserify/startupPowerUserHome, chrome/webpack/startupStandardHome, firefox/webpack/startupStandardHome

Benchmarkchrome-webpackfirefox-browserifyfirefox-webpack
startupPowerUserHome🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]
startupStandardHome🟢 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupPowerUserHome/uiStartup: -25%
  • startupPowerUserHome/domInteractive: -18%
  • startupPowerUserHome/numNetworkReqs: -44%
  • startupStandardHome/domInteractive: -23%
  • startupStandardHome/backgroundConnect: +11%
  • startupStandardHome/initialActions: -33%
  • startupStandardHome/numNetworkReqs: -32%
  • startupPowerUserHome/uiStartup: -33%
  • startupPowerUserHome/backgroundConnect: -30%
  • startupPowerUserHome/setupStore: +18%
  • startupPowerUserHome/uiStartup: -30%
  • startupPowerUserHome/domInteractive: +11%
  • startupPowerUserHome/backgroundConnect: -23%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 784ms
  • 🟡 startupPowerUserHome/LCP: p75 3.7s
  • 🟡 startupPowerUserHome/LCP: p75 3.6s
User Journey Benchmarks · Samples: 5 · mock API

⚠️ Missing data: chrome/browserify/userJourneyOnboardingImport, chrome/browserify/userJourneyAccountManagement, chrome/browserify/userJourneyTransactions

Benchmarkchrome-browserify
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingNewWallet/srpButtonToPwForm: -74%
  • onboardingNewWallet/skipBackupToMetricsScreen: -67%
  • onboardingNewWallet/doneButtonToAssetList: -31%
  • onboardingNewWallet/total: -31%
  • assetDetails/assetClickToPriceChart: +23%
  • assetDetails/total: +23%
  • solanaAssetDetails/assetClickToPriceChart: -65%
  • solanaAssetDetails/total: -65%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/FCP: p75 2.4s
  • 🟡 solanaAssetDetails/FCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -19 Bytes (0%)
  • ui: -824 Bytes (-0.01%)
  • common: -285.28 KiB (-2.12%)

@sonarqubecloud

Copy link
Copy Markdown

@metamaskbotv2

metamaskbotv2 Bot commented Apr 17, 2026

Copy link
Copy Markdown
Contributor
Builds ready [9c281a4]
⚡ Performance Benchmarks (Total: 🟢 7 pass · 🟡 12 warn · 🔴 0 fail)

Baseline (latest main): 71bd826 | Date: 10/14/58243 | Pipeline: 24559876214 | Baseline logs

Interaction Benchmarks · Samples: 5
Benchmarkchrome-browserify
loadNewAccount🟡 [Show logs]
confirmTx🟡 [Show logs]
bridgeUserActions🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: -19%
  • loadNewAccount/total: -19%
  • bridgeUserActions/bridge_load_asset_picker: -52%
  • bridgeUserActions/total: -15%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.6s
  • 🟡 confirmTx/FCP: p75 2.5s
  • 🟡 bridgeUserActions/FCP: p75 2.5s
Startup Benchmarks · Samples: 100
Benchmarkchrome-browserifychrome-webpackfirefox-browserifyfirefox-webpack
startupStandardHome🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]🟢 [Show logs]
startupPowerUserHome🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/uiStartup: -19%
  • startupStandardHome/domInteractive: +17%
  • startupStandardHome/backgroundConnect: +13%
  • startupStandardHome/firstReactRender: -10%
  • startupStandardHome/initialActions: -33%
  • startupStandardHome/loadScripts: -13%
  • startupStandardHome/numNetworkReqs: -26%
  • startupPowerUserHome/uiStartup: -22%
  • startupPowerUserHome/domInteractive: -13%
  • startupPowerUserHome/backgroundConnect: +92%
  • startupPowerUserHome/numNetworkReqs: -52%
  • startupStandardHome/uiStartup: -19%
  • startupStandardHome/load: -14%
  • startupStandardHome/domContentLoaded: -13%
  • startupStandardHome/firstPaint: +19%
  • startupStandardHome/backgroundConnect: -33%
  • startupStandardHome/firstReactRender: -27%
  • startupStandardHome/loadScripts: -14%
  • startupStandardHome/setupStore: -13%
  • startupStandardHome/numNetworkReqs: -44%
  • startupPowerUserHome/uiStartup: -24%
  • startupPowerUserHome/numNetworkReqs: -24%
  • startupStandardHome/domInteractive: -56%
  • startupStandardHome/backgroundConnect: +16%
  • startupStandardHome/initialActions: +33%
  • startupStandardHome/numNetworkReqs: -32%
  • startupPowerUserHome/uiStartup: -34%
  • startupPowerUserHome/backgroundConnect: -22%
  • startupStandardHome/uiStartup: -17%
  • startupStandardHome/domInteractive: -52%
  • startupStandardHome/initialActions: +14%
  • startupStandardHome/setupStore: -64%
  • startupStandardHome/numNetworkReqs: -34%
  • startupPowerUserHome/uiStartup: -30%
  • startupPowerUserHome/domInteractive: -12%
  • startupPowerUserHome/backgroundConnect: -30%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🔴 startupPowerUserHome/INP: p75 592ms
  • 🔴 startupPowerUserHome/INP: p75 680ms
  • 🟡 startupPowerUserHome/LCP: p75 3.6s
  • 🟡 startupPowerUserHome/LCP: p75 3.6s
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-browserify
onboardingImportWallet🟢 [Show logs]
onboardingNewWallet🟢 [Show logs]
assetDetails🟡 [Show logs]
solanaAssetDetails🟡 [Show logs]
importSrpHome🟡 [Show logs]
sendTransactions🟡 [Show logs]
swap🟡 [Show logs]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -88%
  • onboardingImportWallet/confirmSrpToPwForm: -25%
  • onboardingImportWallet/pwFormToMetricsScreen: -25%
  • onboardingImportWallet/metricsToWalletReadyScreen: -24%
  • onboardingImportWallet/doneButtonToHomeScreen: -81%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: +26%
  • onboardingImportWallet/total: -49%
  • onboardingNewWallet/srpButtonToPwForm: -78%
  • onboardingNewWallet/skipBackupToMetricsScreen: -69%
  • onboardingNewWallet/doneButtonToAssetList: -30%
  • onboardingNewWallet/total: -31%
  • assetDetails/assetClickToPriceChart: -14%
  • assetDetails/total: -14%
  • solanaAssetDetails/assetClickToPriceChart: -68%
  • solanaAssetDetails/total: -68%
  • importSrpHome/openAccountMenuAfterLogin: -78%
  • importSrpHome/homeAfterImportWithNewWallet: -70%
  • importSrpHome/total: -62%
  • sendTransactions/selectTokenToSendFormLoaded: -33%
  • sendTransactions/reviewTransactionToConfirmationPage: +34%
  • sendTransactions/total: +31%
  • swap/openSwapPageFromHome: -96%
  • swap/fetchAndDisplaySwapQuotes: +31%
  • swap/total: +11%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 assetDetails/INP: p75 208ms
  • 🟡 assetDetails/FCP: p75 2.5s
  • 🟡 assetDetails/LCP: p75 2.5s
  • 🟡 solanaAssetDetails/FCP: p75 2.5s
  • 🟡 importSrpHome/FCP: p75 2.5s
  • 🟡 sendTransactions/INP: p75 224ms
  • 🟡 sendTransactions/FCP: p75 2.5s
  • 🟡 swap/FCP: p75 2.5s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-browserify
dappPageLoad🟢 [Show logs]
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -17 Bytes (0%)
  • ui: -855 Bytes (-0.01%)
  • common: -285.25 KiB (-2.12%)

Comment thread lavamoat/browserify/beta/policy.json
@juanmigdr juanmigdr added this pull request to the merge queue Apr 17, 2026
Merged via the queue into main with commit ddce687 Apr 17, 2026
208 of 210 checks passed
@juanmigdr juanmigdr deleted the chore/apply-update-of-core-nfts branch April 17, 2026 10:54
@github-actions github-actions Bot locked and limited conversation to collaborators Apr 17, 2026
@metamaskbot metamaskbot added the release-13.29.0 Issue or pull request that will be included in release 13.29.0 label Apr 17, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.29.0 Issue or pull request that will be included in release 13.29.0 size-S team-assets

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants