From 47d40bda3c4fad8de0c3161cb88e453f5e1a2916 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Wed, 12 Nov 2025 13:04:20 +0000 Subject: [PATCH 01/29] prices v3 upgrade --- package.json | 5 +++-- yarn.lock | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index b7504c10c4e0..f59970cfeabc 100644 --- a/package.json +++ b/package.json @@ -242,7 +242,8 @@ "@endo/env-options@npm:^1.1.7": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@endo/env-options@npm:^1.1.8": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", - "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch" + "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -270,7 +271,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "^88.0.0", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.5.0", "@metamask/bridge-controller": "^59.0.0", diff --git a/yarn.lock b/yarn.lock index 2f4f8ac9e4c0..89052aa285be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5584,9 +5584,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:^88.0.0": - version: 88.0.0 - resolution: "@metamask/assets-controllers@npm:88.0.0" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e": + version: 88.0.0-preview-82b6f2e + resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-82b6f2e" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5632,7 +5632,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/edb9c932a0fc64c8dd9fd437a38aacb4b7e1a3c0e22619b1ef8fc2d9ef5a8d48830d28c79f7bbb557663bb839bd8dac0b40466777af68bf1993e2bbfa7f283e1 + checksum: 10/4fec849173fae670f1787781cd708422d365bfed14afb52ca18fa9b90a74bd8b8aa85759d1ccc3f387ce8f1b8d28f8e1d938f161b9af739af696463e736e350e languageName: node linkType: hard @@ -32022,7 +32022,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:^88.0.0" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.5.0" From 2bc2dc4545310f17cb28c5dc77f21bb492d8057f Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Wed, 12 Nov 2025 14:26:32 +0000 Subject: [PATCH 02/29] update --- package.json | 4 ++-- yarn.lock | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index f59970cfeabc..deeee2e5bcaf 100644 --- a/package.json +++ b/package.json @@ -243,7 +243,7 @@ "@endo/env-options@npm:^1.1.8": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -271,7 +271,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.5.0", "@metamask/bridge-controller": "^59.0.0", diff --git a/yarn.lock b/yarn.lock index 89052aa285be..5d4dee13f290 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5584,9 +5584,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e": - version: 88.0.0-preview-82b6f2e - resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-82b6f2e" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8": + version: 88.0.0-preview-6dd22b8 + resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-6dd22b8" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5632,7 +5632,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/4fec849173fae670f1787781cd708422d365bfed14afb52ca18fa9b90a74bd8b8aa85759d1ccc3f387ce8f1b8d28f8e1d938f161b9af739af696463e736e350e + checksum: 10/21b0deebdb919d56bd350e3915868e97538c974595157e3469794e08cb67355fec5c891c9d727d07a589c14b5ebdeb9f3c7706feb3d7864477304f9721435f56 languageName: node linkType: hard @@ -32022,7 +32022,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-82b6f2e" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.5.0" From 5e1e68c562e4ac4c529d19b4ffa12ae7d13b7365 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 13 Nov 2025 10:18:22 +0000 Subject: [PATCH 03/29] upgrade package --- package.json | 4 ++-- yarn.lock | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index deeee2e5bcaf..64c2cf03073d 100644 --- a/package.json +++ b/package.json @@ -243,7 +243,7 @@ "@endo/env-options@npm:^1.1.8": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -271,7 +271,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.5.0", "@metamask/bridge-controller": "^59.0.0", diff --git a/yarn.lock b/yarn.lock index 5d4dee13f290..5b75bc364b49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5584,9 +5584,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8": - version: 88.0.0-preview-6dd22b8 - resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-6dd22b8" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e": + version: 88.0.0-preview-373429e + resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-373429e" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5632,7 +5632,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/21b0deebdb919d56bd350e3915868e97538c974595157e3469794e08cb67355fec5c891c9d727d07a589c14b5ebdeb9f3c7706feb3d7864477304f9721435f56 + checksum: 10/c3cdf4b0ee9b4fb5dc24324c32689cfd2149550ba025fed4a6995cf6d39137e0ae8fe1f561fe443816e5556bb9753558c0ad33a693043bea7087c2f40fc65f90 languageName: node linkType: hard @@ -32022,7 +32022,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-6dd22b8" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.5.0" From 54150869da0af025068785c4ec373de5fc76f68f Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Fri, 14 Nov 2025 10:25:05 +0000 Subject: [PATCH 04/29] update --- .../assets/token-rates-controller-init.ts | 5 ++++- package.json | 7 +++--- yarn.lock | 22 +++++++++---------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/app/scripts/controller-init/assets/token-rates-controller-init.ts b/app/scripts/controller-init/assets/token-rates-controller-init.ts index fa9c644ae121..938c65bc3e24 100644 --- a/app/scripts/controller-init/assets/token-rates-controller-init.ts +++ b/app/scripts/controller-init/assets/token-rates-controller-init.ts @@ -22,7 +22,8 @@ export const TokenRatesControllerInit: ControllerInitFunction< TokenRatesControllerMessenger, TokenRatesControllerInitMessenger > = (request) => { - const { controllerMessenger, initMessenger, persistedState } = request; + const { controllerMessenger, initMessenger, persistedState, getController } = + request; const preferencesState = initMessenger.call('PreferencesController:getState'); const controller = new TokenRatesController({ @@ -30,6 +31,8 @@ export const TokenRatesControllerInit: ControllerInitFunction< state: persistedState.TokenRatesController, tokenPricesService: new CodefiTokenPricesServiceV2(), disabled: !preferencesState.useCurrencyRateCheck, + getSelectedCurrency: () => + getController('CurrencyRateController').state.currentCurrency, }); initMessenger.subscribe( diff --git a/package.json b/package.json index 64c2cf03073d..49b022020ed5 100644 --- a/package.json +++ b/package.json @@ -243,7 +243,8 @@ "@endo/env-options@npm:^1.1.8": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad", + "@metamask/bridge-controller": "npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -271,10 +272,10 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.5.0", - "@metamask/bridge-controller": "^59.0.0", + "@metamask/bridge-controller": "npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad", "@metamask/bridge-status-controller": "^56.0.0", "@metamask/browser-passworder": "^4.3.0", "@metamask/chain-agnostic-permission": "^1.2.2", diff --git a/yarn.lock b/yarn.lock index 5b75bc364b49..8f0ef4e5a667 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5584,9 +5584,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e": - version: 88.0.0-preview-373429e - resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-373429e" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad": + version: 88.0.0-preview-06da73ad + resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-06da73ad" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5632,7 +5632,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/c3cdf4b0ee9b4fb5dc24324c32689cfd2149550ba025fed4a6995cf6d39137e0ae8fe1f561fe443816e5556bb9753558c0ad33a693043bea7087c2f40fc65f90 + checksum: 10/005e5c6a778570d466f63aa5ee81bd023a11d40cc217c47a4d3df1e74586bc18fe4485e503e05c8d03bb160e8eb9fe8bad136371ba8fbca2c889afc5796bb348 languageName: node linkType: hard @@ -5699,9 +5699,9 @@ __metadata: languageName: node linkType: hard -"@metamask/bridge-controller@npm:^59.0.0": - version: 59.0.0 - resolution: "@metamask/bridge-controller@npm:59.0.0" +"@metamask/bridge-controller@npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad": + version: 60.1.0-preview-06da73ad + resolution: "@metamask-previews/bridge-controller@npm:60.1.0-preview-06da73ad" dependencies: "@ethersproject/address": "npm:^5.7.0" "@ethersproject/bignumber": "npm:^5.7.0" @@ -5722,12 +5722,12 @@ __metadata: uuid: "npm:^8.3.2" peerDependencies: "@metamask/accounts-controller": ^34.0.0 - "@metamask/assets-controllers": ^87.0.0 + "@metamask/assets-controllers": ^88.0.0 "@metamask/network-controller": ^25.0.0 "@metamask/remote-feature-flag-controller": ^2.0.0 "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 - checksum: 10/311e1a835f48ae1ff9ee03f856ccd4925395810b435478a140c7776e5eec3c4a6f7f3d411e0fe4a271ab73ed3d07dd09fb4a8491469d6c967940f83e39b81a2d + checksum: 10/483492656ee2bc1d7fb1c0f106d0d5e15cf7b12eeb80f6902e80ef42566522da963614c8b154800ec3374c38f47c496a5c02c0ea42774a268b252b114bf52de8 languageName: node linkType: hard @@ -32022,11 +32022,11 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-373429e" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.5.0" - "@metamask/bridge-controller": "npm:^59.0.0" + "@metamask/bridge-controller": "npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad" "@metamask/bridge-status-controller": "npm:^56.0.0" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/build-utils": "npm:^3.0.0" From b136954d231bc2d2c6a498df51c012e599941417 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Fri, 14 Nov 2025 13:42:54 +0000 Subject: [PATCH 05/29] update package --- .../lib/bridge-status/metrics-utils.ts | 32 ------------------- package.json | 7 ++-- ui/hooks/useTokenRatesPolling.ts | 19 +---------- yarn.lock | 22 ++++++------- 4 files changed, 15 insertions(+), 65 deletions(-) diff --git a/app/scripts/lib/bridge-status/metrics-utils.ts b/app/scripts/lib/bridge-status/metrics-utils.ts index c12a37837ea1..e4a884cd9727 100644 --- a/app/scripts/lib/bridge-status/metrics-utils.ts +++ b/app/scripts/lib/bridge-status/metrics-utils.ts @@ -35,35 +35,3 @@ export const getHexGasTotalUsd = ({ ); return calcTokenAmount(hexGasTotalWei, 18).toNumber() * nativeToUsdRate; }; -export const getTokenUsdValue = async ({ - chainId, - tokenAmount, - tokenAddress, - state, -}: { - chainId: Hex; - tokenAmount: number; - tokenAddress: string; - state: { metamask: MetricsBackgroundState }; -}) => { - const marketData = getMarketData(state); - const tokenToNativeAssetRate = exchangeRateFromMarketData( - chainId, - tokenAddress, - marketData, - ); - if (tokenToNativeAssetRate) { - const nativeToUsdRate = getUSDConversionRateByChainId(chainId)(state); - return tokenAmount * tokenToNativeAssetRate * nativeToUsdRate; - } - - const tokenToUsdRate = await getTokenExchangeRate({ - chainId, - tokenAddress, - currency: 'usd', - }); - if (!tokenToUsdRate) { - return null; - } - return tokenAmount * tokenToUsdRate; -}; diff --git a/package.json b/package.json index 49b022020ed5..ff48471ce7a2 100644 --- a/package.json +++ b/package.json @@ -243,8 +243,7 @@ "@endo/env-options@npm:^1.1.8": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad", - "@metamask/bridge-controller": "npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -272,10 +271,10 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.5.0", - "@metamask/bridge-controller": "npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad", + "@metamask/bridge-controller": "^59.0.0", "@metamask/bridge-status-controller": "^56.0.0", "@metamask/browser-passworder": "^4.3.0", "@metamask/chain-agnostic-permission": "^1.2.2", diff --git a/ui/hooks/useTokenRatesPolling.ts b/ui/hooks/useTokenRatesPolling.ts index c4760392f126..8623bd024729 100644 --- a/ui/hooks/useTokenRatesPolling.ts +++ b/ui/hooks/useTokenRatesPolling.ts @@ -1,11 +1,5 @@ import { useSelector } from 'react-redux'; -import { - getChainIdsToPoll, - getMarketData, - getTokenExchangeRates, - getTokensMarketData, - getUseCurrencyRateCheck, -} from '../selectors'; +import { getChainIdsToPoll, getUseCurrencyRateCheck } from '../selectors'; import { getEnabledChainIds } from '../selectors/multichain/networks'; import { tokenRatesStartPolling, @@ -26,11 +20,6 @@ const useTokenRatesPolling = () => { const chainIds = useSelector(getChainIdsToPoll); const enabledChainIds = useSelector(getEnabledChainIds); - // Selectors returning state updated by the polling - const tokenExchangeRates = useSelector(getTokenExchangeRates); - const tokensMarketData = useSelector(getTokensMarketData); - const marketData = useSelector(getMarketData); - const enabled = completedOnboarding && isUnlocked && useCurrencyRateCheck; const pollableChains = isGlobalNetworkSelectorRemoved @@ -44,12 +33,6 @@ const useTokenRatesPolling = () => { stopPollingByPollingToken: tokenRatesStopPollingByPollingToken, input: enabled ? [pollableChains] : [], }); - - return { - tokenExchangeRates, - tokensMarketData, - marketData, - }; }; export default useTokenRatesPolling; diff --git a/yarn.lock b/yarn.lock index 8f0ef4e5a667..1fba1a0c7102 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5584,9 +5584,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad": - version: 88.0.0-preview-06da73ad - resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-06da73ad" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de": + version: 88.0.0-preview-32bc01de + resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-32bc01de" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5632,7 +5632,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/005e5c6a778570d466f63aa5ee81bd023a11d40cc217c47a4d3df1e74586bc18fe4485e503e05c8d03bb160e8eb9fe8bad136371ba8fbca2c889afc5796bb348 + checksum: 10/28500fd4056b4ca661cfedd5c6a89e08dbc3e5f2c2a3fa93ff471b2aeb4bc371bb7e7bc431d52fced1b2b962d0b8ea5bfd4492913e75677752755545aa1bc055 languageName: node linkType: hard @@ -5699,9 +5699,9 @@ __metadata: languageName: node linkType: hard -"@metamask/bridge-controller@npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad": - version: 60.1.0-preview-06da73ad - resolution: "@metamask-previews/bridge-controller@npm:60.1.0-preview-06da73ad" +"@metamask/bridge-controller@npm:^59.0.0": + version: 59.0.0 + resolution: "@metamask/bridge-controller@npm:59.0.0" dependencies: "@ethersproject/address": "npm:^5.7.0" "@ethersproject/bignumber": "npm:^5.7.0" @@ -5722,12 +5722,12 @@ __metadata: uuid: "npm:^8.3.2" peerDependencies: "@metamask/accounts-controller": ^34.0.0 - "@metamask/assets-controllers": ^88.0.0 + "@metamask/assets-controllers": ^87.0.0 "@metamask/network-controller": ^25.0.0 "@metamask/remote-feature-flag-controller": ^2.0.0 "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 - checksum: 10/483492656ee2bc1d7fb1c0f106d0d5e15cf7b12eeb80f6902e80ef42566522da963614c8b154800ec3374c38f47c496a5c02c0ea42774a268b252b114bf52de8 + checksum: 10/311e1a835f48ae1ff9ee03f856ccd4925395810b435478a140c7776e5eec3c4a6f7f3d411e0fe4a271ab73ed3d07dd09fb4a8491469d6c967940f83e39b81a2d languageName: node linkType: hard @@ -32022,11 +32022,11 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-06da73ad" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.5.0" - "@metamask/bridge-controller": "npm:@metamask-previews/bridge-controller@60.1.0-preview-06da73ad" + "@metamask/bridge-controller": "npm:^59.0.0" "@metamask/bridge-status-controller": "npm:^56.0.0" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/build-utils": "npm:^3.0.0" From 51cef171dc088b436044ad2fea7a86445560adce Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Fri, 14 Nov 2025 13:43:45 +0000 Subject: [PATCH 06/29] code not used --- .../lib/bridge-status/metrics-utils.ts | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 app/scripts/lib/bridge-status/metrics-utils.ts diff --git a/app/scripts/lib/bridge-status/metrics-utils.ts b/app/scripts/lib/bridge-status/metrics-utils.ts deleted file mode 100644 index e4a884cd9727..000000000000 --- a/app/scripts/lib/bridge-status/metrics-utils.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Hex } from '@metamask/utils'; -import { BridgeHistoryItem } from '@metamask/bridge-status-controller'; -import { calcHexGasTotal } from '../../../../shared/lib/transaction-breakdown-utils'; -import { calcTokenAmount } from '../../../../shared/lib/transactions-controller-utils'; -import { MetricsBackgroundState } from '../../../../shared/types/bridge-status'; -import { - exchangeRateFromMarketData, - getTokenExchangeRate, - // eslint-disable-next-line import/no-restricted-paths -} from '../../../../ui/ducks/bridge/utils'; -import { - getMarketData, - getUSDConversionRateByChainId, - // eslint-disable-next-line import/no-restricted-paths -} from '../../../../ui/selectors'; - -export const getHexGasTotalUsd = ({ - bridgeHistoryItem, - state, -}: { - bridgeHistoryItem: BridgeHistoryItem; - state: { metamask: MetricsBackgroundState }; -}) => { - const srcTxMeta = state.metamask.transactions.find( - (txMeta) => txMeta.id === bridgeHistoryItem.txMetaId, - ); - - if (!srcTxMeta) { - return null; - } - - const hexGasTotalWei = calcHexGasTotal(srcTxMeta); - const nativeToUsdRate = getUSDConversionRateByChainId(srcTxMeta.chainId)( - state, - ); - return calcTokenAmount(hexGasTotalWei, 18).toNumber() * nativeToUsdRate; -}; From 7ea12be32c43a567eaba5d00a3463e1228d3eb76 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Fri, 14 Nov 2025 17:43:56 +0000 Subject: [PATCH 07/29] e2e fixes --- test/e2e/tests/hardware-wallets/ledger/mocks.ts | 2 +- .../tests/privacy/onboarding-token-price-call-privacy.spec.ts | 2 +- .../e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts | 2 +- test/e2e/tests/tokens/add-token-using-search.spec.ts | 2 +- test/e2e/tests/tokens/import-tokens.spec.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/e2e/tests/hardware-wallets/ledger/mocks.ts b/test/e2e/tests/hardware-wallets/ledger/mocks.ts index 1327da35e7af..bd5247ce30f4 100644 --- a/test/e2e/tests/hardware-wallets/ledger/mocks.ts +++ b/test/e2e/tests/hardware-wallets/ledger/mocks.ts @@ -232,7 +232,7 @@ async function mockSwapNetworkInfo(mockServer: MockttpServer) { async function mockPriceAPIs(mockServer: MockttpServer) { // Mock empty spot prices for mainnet await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .thenCallback(() => ({ statusCode: 200, json: {}, diff --git a/test/e2e/tests/privacy/onboarding-token-price-call-privacy.spec.ts b/test/e2e/tests/privacy/onboarding-token-price-call-privacy.spec.ts index a840d3bebe82..529666030179 100644 --- a/test/e2e/tests/privacy/onboarding-token-price-call-privacy.spec.ts +++ b/test/e2e/tests/privacy/onboarding-token-price-call-privacy.spec.ts @@ -17,7 +17,7 @@ async function mockTokenPriceApi( return [ // mainnet await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .thenCallback(() => ({ statusCode: 200, json: {}, diff --git a/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts b/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts index 39089e28d27b..d46898e50e24 100644 --- a/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts +++ b/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts @@ -10,7 +10,7 @@ import { NATIVE_TOKEN_SYMBOL, SwapSendPage } from './swap-send-test-utils'; async function mockSwapQuotes(mockServer: MockttpServer) { return [ await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .thenCallback(() => ({ statusCode: 200, json: {}, diff --git a/test/e2e/tests/tokens/add-token-using-search.spec.ts b/test/e2e/tests/tokens/add-token-using-search.spec.ts index ecd166181ca2..3585b27d871c 100644 --- a/test/e2e/tests/tokens/add-token-using-search.spec.ts +++ b/test/e2e/tests/tokens/add-token-using-search.spec.ts @@ -12,7 +12,7 @@ describe('Add existing token using search', function () { ): Promise { return [ await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/56/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .withQuery({ tokenAddresses: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', vsCurrency: 'ETH', diff --git a/test/e2e/tests/tokens/import-tokens.spec.ts b/test/e2e/tests/tokens/import-tokens.spec.ts index dad7d29b1d89..34ceba0c4897 100644 --- a/test/e2e/tests/tokens/import-tokens.spec.ts +++ b/test/e2e/tests/tokens/import-tokens.spec.ts @@ -10,7 +10,7 @@ import { loginWithoutBalanceValidation } from '../../page-objects/flows/login.fl async function mockPriceFetch(mockServer: Mockttp) { return [ await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .withQuery({ tokenAddresses: '0x06af07097c9eeb7fd685c692751d5c66db49c215,0x514910771af9ca656af840dff83e8264ecf986ca,0x7d4b8cce0591c9044a22ee543533b72e976e36c3', From f48f67968f025bff732f31b38b0b7ed9392fb896 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Fri, 14 Nov 2025 17:44:48 +0000 Subject: [PATCH 08/29] docs --- test/e2e/.cursor/rules/e2e-testing-guidelines.mdc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/.cursor/rules/e2e-testing-guidelines.mdc b/test/e2e/.cursor/rules/e2e-testing-guidelines.mdc index b1de8488d672..a4f7b8125603 100644 --- a/test/e2e/.cursor/rules/e2e-testing-guidelines.mdc +++ b/test/e2e/.cursor/rules/e2e-testing-guidelines.mdc @@ -379,7 +379,7 @@ async function mockTokenPriceApi(mockServer: Mockttp): Promise return [ // Mock token price API to avoid external dependency await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .thenCallback(() => ({ statusCode: 200, json: { ETH: { usd: 2500 }, BTC: { usd: 45000 } }, From d784cd9c6e77e67e23a03a110fadeb9639bb4119 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Sun, 16 Nov 2025 10:33:15 +0000 Subject: [PATCH 09/29] fix api mocks --- test/e2e/tests/privacy/basic-functionality.spec.ts | 2 +- .../swaps/swap-erc20-with-loaded-state.spec.ts | 2 +- test/e2e/tests/tokens/token-details.spec.ts | 4 ++-- test/e2e/tests/tokens/token-list.spec.ts | 10 ++++------ test/e2e/tests/tokens/utils/mocks.ts | 13 ++++++------- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/test/e2e/tests/privacy/basic-functionality.spec.ts b/test/e2e/tests/privacy/basic-functionality.spec.ts index 48add00b1543..f3e9a97ca317 100644 --- a/test/e2e/tests/privacy/basic-functionality.spec.ts +++ b/test/e2e/tests/privacy/basic-functionality.spec.ts @@ -83,7 +83,7 @@ async function mockApis( }, }; }), - await mockEmptyPrices(mockServer, CHAIN_IDS.MAINNET), + await mockEmptyPrices(mockServer), ]; } diff --git a/test/e2e/tests/swaps/swap-erc20-with-loaded-state.spec.ts b/test/e2e/tests/swaps/swap-erc20-with-loaded-state.spec.ts index 03d28b4f29ec..06c80d067109 100644 --- a/test/e2e/tests/swaps/swap-erc20-with-loaded-state.spec.ts +++ b/test/e2e/tests/swaps/swap-erc20-with-loaded-state.spec.ts @@ -18,7 +18,7 @@ async function mockSwapQuotes(mockServer: MockttpServer) { return [ await mockEmptyHistoricalPrices(mockServer, ETH_ADDRESS, '0x1'), - await mockEmptyPrices(mockServer, '1'), + await mockEmptyPrices(mockServer), await mockServer .forGet('https://bridge.api.cx.metamask.io/token/1') .thenCallback(() => ({ diff --git a/test/e2e/tests/tokens/token-details.spec.ts b/test/e2e/tests/tokens/token-details.spec.ts index 37bb1c5e44bf..c78421090d12 100644 --- a/test/e2e/tests/tokens/token-details.spec.ts +++ b/test/e2e/tests/tokens/token-details.spec.ts @@ -33,7 +33,7 @@ describe('Token Details', function () { ...fixtures, title: (this as Context).test?.fullTitle(), testSpecificMock: async (mockServer: Mockttp) => [ - await mockEmptyPrices(mockServer, chainId), + await mockEmptyPrices(mockServer), await mockEmptyHistoricalPrices(mockServer, tokenAddress, chainId), ], }, @@ -80,7 +80,7 @@ describe('Token Details', function () { title: (this as Context).test?.fullTitle(), ethConversionInUsd, testSpecificMock: async (mockServer: Mockttp) => [ - await mockSpotPrices(mockServer, chainId, { + await mockSpotPrices(mockServer, { [tokenAddress.toLowerCase()]: marketData, }), await mockHistoricalPrices(mockServer, { diff --git a/test/e2e/tests/tokens/token-list.spec.ts b/test/e2e/tests/tokens/token-list.spec.ts index 5daa84e54fb7..ccd8a4acb885 100644 --- a/test/e2e/tests/tokens/token-list.spec.ts +++ b/test/e2e/tests/tokens/token-list.spec.ts @@ -20,7 +20,6 @@ const isFirefox = process.env.SELENIUM_BROWSER === Browser.FIREFOX; describe('Token List', function () { const chainId = CHAIN_IDS.MAINNET; - const lineaChainId = CHAIN_IDS.LINEA_MAINNET; const tokenAddress = '0x2EFA2Cb29C2341d8E5Ba7D3262C9e9d6f1Bf3711'; const symbol = 'foo'; @@ -37,8 +36,7 @@ describe('Token List', function () { ...fixtures, title: (this as Context).test?.fullTitle(), testSpecificMock: async (mockServer: Mockttp) => [ - await mockEmptyPrices(mockServer, chainId), - await mockEmptyPrices(mockServer, lineaChainId), + await mockEmptyPrices(mockServer), await mockEmptyHistoricalPrices(mockServer, tokenAddress, chainId), ], }, @@ -84,9 +82,9 @@ describe('Token List', function () { title: (this as Context).test?.fullTitle(), ethConversionInUsd, testSpecificMock: async (mockServer: Mockttp) => [ - await mockSpotPrices(mockServer, chainId, { - [zeroAddress()]: marketDataNative, - [tokenAddress.toLowerCase()]: marketData, + await mockSpotPrices(mockServer, { + 'eip155:1/slip44:60': marketDataNative, + [`eip155:1/erc20:${tokenAddress.toLowerCase()}`]: marketData, }), await mockHistoricalPrices(mockServer, { address: tokenAddress, diff --git a/test/e2e/tests/tokens/utils/mocks.ts b/test/e2e/tests/tokens/utils/mocks.ts index 26883700b2fa..a0ed71230b9a 100644 --- a/test/e2e/tests/tokens/utils/mocks.ts +++ b/test/e2e/tests/tokens/utils/mocks.ts @@ -1,12 +1,14 @@ import { Mockttp } from 'mockttp'; import { toChecksumHexAddress } from '../../../../../shared/modules/hexstring-utils'; +const PRICE_API_URL = 'https://price.api.cx.metamask.io'; + const getPriceUrl = (version: string, chainId: string, endpoint: string) => - `https://price.api.cx.metamask.io/${version}/chains/${chainId}/${endpoint}`; + `${PRICE_API_URL}/${version}/chains/${chainId}/${endpoint}`; -export const mockEmptyPrices = async (mockServer: Mockttp, chainId: string) => { +export const mockEmptyPrices = async (mockServer: Mockttp) => { return mockServer - .forGet(getPriceUrl('v2', parseInt(chainId, 16).toString(), 'spot-prices')) + .forGet(`${PRICE_API_URL}/v3/spot-prices`) .thenCallback(() => ({ statusCode: 200, json: {}, @@ -28,16 +30,13 @@ export const mockEmptyHistoricalPrices = async ( export const mockSpotPrices = async ( mockServer: Mockttp, - chainIdToMock: string, prices: Record< string, { price: number; pricePercentChange1d?: number; marketCap: number } >, ) => { return mockServer - .forGet( - getPriceUrl('v2', parseInt(chainIdToMock, 16).toString(), 'spot-prices'), - ) + .forGet(`${PRICE_API_URL}/v3/spot-prices`) .thenCallback(() => ({ statusCode: 200, json: prices, From 79e59cac1d62d5463cdc59b93598c1e8032b13d8 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Sun, 16 Nov 2025 11:01:45 +0000 Subject: [PATCH 10/29] fix test --- test/integration/confirmations/signatures/permit.test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/integration/confirmations/signatures/permit.test.tsx b/test/integration/confirmations/signatures/permit.test.tsx index 0ed7003d22df..4530405ca0b3 100644 --- a/test/integration/confirmations/signatures/permit.test.tsx +++ b/test/integration/confirmations/signatures/permit.test.tsx @@ -168,15 +168,15 @@ describe('Permit Confirmation', () => { it('displays the simulation section', async () => { const scope = nock('https://price.api.cx.metamask.io') .persist() - .get('/v2/chains/1/spot-prices') + .get('/v3/spot-prices') .query({ tokenAddresses: - '0x0000000000000000000000000000000000000000,0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + 'eip155:1/slip44:60,eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc', vsCurrency: 'ETH', includeMarketData: 'true', }) .reply(200, { - '0xcccccccccccccccccccccccccccccccccccccccc': { + 'eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc': { allTimeHigh: 12, allTimeLow: 1, circulatingSupply: 50000, From 04f693def663489a723842082211a1f3df3941ed Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Sun, 16 Nov 2025 11:03:41 +0000 Subject: [PATCH 11/29] fix test mock --- test/e2e/tests/tokens/token-details.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/tests/tokens/token-details.spec.ts b/test/e2e/tests/tokens/token-details.spec.ts index c78421090d12..646c362c052c 100644 --- a/test/e2e/tests/tokens/token-details.spec.ts +++ b/test/e2e/tests/tokens/token-details.spec.ts @@ -81,7 +81,7 @@ describe('Token Details', function () { ethConversionInUsd, testSpecificMock: async (mockServer: Mockttp) => [ await mockSpotPrices(mockServer, { - [tokenAddress.toLowerCase()]: marketData, + [`eip155:1/erc20:${tokenAddress.toLowerCase()}`]: marketData, }), await mockHistoricalPrices(mockServer, { address: tokenAddress, From 76bb5efb31ab344eee4185b0878f5fc60cbb5049 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Mon, 17 Nov 2025 11:06:14 +0000 Subject: [PATCH 12/29] revert change to mock --- test/integration/confirmations/signatures/permit.test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/integration/confirmations/signatures/permit.test.tsx b/test/integration/confirmations/signatures/permit.test.tsx index 4530405ca0b3..0ed7003d22df 100644 --- a/test/integration/confirmations/signatures/permit.test.tsx +++ b/test/integration/confirmations/signatures/permit.test.tsx @@ -168,15 +168,15 @@ describe('Permit Confirmation', () => { it('displays the simulation section', async () => { const scope = nock('https://price.api.cx.metamask.io') .persist() - .get('/v3/spot-prices') + .get('/v2/chains/1/spot-prices') .query({ tokenAddresses: - 'eip155:1/slip44:60,eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc', + '0x0000000000000000000000000000000000000000,0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', vsCurrency: 'ETH', includeMarketData: 'true', }) .reply(200, { - 'eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc': { + '0xcccccccccccccccccccccccccccccccccccccccc': { allTimeHigh: 12, allTimeLow: 1, circulatingSupply: 50000, From de8b20d5aaca6628d3fc138e09e95a27d0ce2e36 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Mon, 17 Nov 2025 11:06:46 +0000 Subject: [PATCH 13/29] revert change --- .../lib/bridge-status/metrics-utils.ts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 app/scripts/lib/bridge-status/metrics-utils.ts diff --git a/app/scripts/lib/bridge-status/metrics-utils.ts b/app/scripts/lib/bridge-status/metrics-utils.ts new file mode 100644 index 000000000000..c12a37837ea1 --- /dev/null +++ b/app/scripts/lib/bridge-status/metrics-utils.ts @@ -0,0 +1,69 @@ +import { Hex } from '@metamask/utils'; +import { BridgeHistoryItem } from '@metamask/bridge-status-controller'; +import { calcHexGasTotal } from '../../../../shared/lib/transaction-breakdown-utils'; +import { calcTokenAmount } from '../../../../shared/lib/transactions-controller-utils'; +import { MetricsBackgroundState } from '../../../../shared/types/bridge-status'; +import { + exchangeRateFromMarketData, + getTokenExchangeRate, + // eslint-disable-next-line import/no-restricted-paths +} from '../../../../ui/ducks/bridge/utils'; +import { + getMarketData, + getUSDConversionRateByChainId, + // eslint-disable-next-line import/no-restricted-paths +} from '../../../../ui/selectors'; + +export const getHexGasTotalUsd = ({ + bridgeHistoryItem, + state, +}: { + bridgeHistoryItem: BridgeHistoryItem; + state: { metamask: MetricsBackgroundState }; +}) => { + const srcTxMeta = state.metamask.transactions.find( + (txMeta) => txMeta.id === bridgeHistoryItem.txMetaId, + ); + + if (!srcTxMeta) { + return null; + } + + const hexGasTotalWei = calcHexGasTotal(srcTxMeta); + const nativeToUsdRate = getUSDConversionRateByChainId(srcTxMeta.chainId)( + state, + ); + return calcTokenAmount(hexGasTotalWei, 18).toNumber() * nativeToUsdRate; +}; +export const getTokenUsdValue = async ({ + chainId, + tokenAmount, + tokenAddress, + state, +}: { + chainId: Hex; + tokenAmount: number; + tokenAddress: string; + state: { metamask: MetricsBackgroundState }; +}) => { + const marketData = getMarketData(state); + const tokenToNativeAssetRate = exchangeRateFromMarketData( + chainId, + tokenAddress, + marketData, + ); + if (tokenToNativeAssetRate) { + const nativeToUsdRate = getUSDConversionRateByChainId(chainId)(state); + return tokenAmount * tokenToNativeAssetRate * nativeToUsdRate; + } + + const tokenToUsdRate = await getTokenExchangeRate({ + chainId, + tokenAddress, + currency: 'usd', + }); + if (!tokenToUsdRate) { + return null; + } + return tokenAmount * tokenToUsdRate; +}; From 8dff0781c00ad664d1b690e6ea1def057caed370 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Tue, 18 Nov 2025 13:08:30 +0000 Subject: [PATCH 14/29] updated preview --- .../assets/token-rates-controller-init.ts | 5 +-- .../token-rates-controller-messenger.ts | 34 +++---------------- package.json | 4 +-- yarn.lock | 12 +++---- 4 files changed, 14 insertions(+), 41 deletions(-) diff --git a/app/scripts/controller-init/assets/token-rates-controller-init.ts b/app/scripts/controller-init/assets/token-rates-controller-init.ts index 938c65bc3e24..fa9c644ae121 100644 --- a/app/scripts/controller-init/assets/token-rates-controller-init.ts +++ b/app/scripts/controller-init/assets/token-rates-controller-init.ts @@ -22,8 +22,7 @@ export const TokenRatesControllerInit: ControllerInitFunction< TokenRatesControllerMessenger, TokenRatesControllerInitMessenger > = (request) => { - const { controllerMessenger, initMessenger, persistedState, getController } = - request; + const { controllerMessenger, initMessenger, persistedState } = request; const preferencesState = initMessenger.call('PreferencesController:getState'); const controller = new TokenRatesController({ @@ -31,8 +30,6 @@ export const TokenRatesControllerInit: ControllerInitFunction< state: persistedState.TokenRatesController, tokenPricesService: new CodefiTokenPricesServiceV2(), disabled: !preferencesState.useCurrencyRateCheck, - getSelectedCurrency: () => - getController('CurrencyRateController').state.currentCurrency, }); initMessenger.subscribe( diff --git a/app/scripts/controller-init/messengers/assets/token-rates-controller-messenger.ts b/app/scripts/controller-init/messengers/assets/token-rates-controller-messenger.ts index 888d596f468b..7bdcb74c3555 100644 --- a/app/scripts/controller-init/messengers/assets/token-rates-controller-messenger.ts +++ b/app/scripts/controller-init/messengers/assets/token-rates-controller-messenger.ts @@ -1,14 +1,8 @@ import { Messenger } from '@metamask/messenger'; import { NetworkControllerGetStateAction, - NetworkControllerGetNetworkClientByIdAction, NetworkControllerStateChangeEvent, } from '@metamask/network-controller'; -import { - AccountsControllerGetSelectedAccountAction, - AccountsControllerGetAccountAction, - AccountsControllerSelectedEvmAccountChangeEvent, -} from '@metamask/accounts-controller'; import { TokensControllerGetStateAction, TokensControllerStateChangeEvent, @@ -19,18 +13,11 @@ import { } from '../../../controllers/preferences-controller'; import { RootMessenger } from '../../../lib/messenger'; -type Actions = - | TokensControllerGetStateAction - | NetworkControllerGetNetworkClientByIdAction - | NetworkControllerGetStateAction - | AccountsControllerGetAccountAction - | AccountsControllerGetSelectedAccountAction; +type Actions = TokensControllerGetStateAction | NetworkControllerGetStateAction; type Events = - | NetworkControllerStateChangeEvent - | AccountsControllerSelectedEvmAccountChangeEvent - | PreferencesControllerStateChangeEvent - | TokensControllerStateChangeEvent; + | TokensControllerStateChangeEvent + | NetworkControllerStateChangeEvent; export type TokenRatesControllerMessenger = ReturnType< typeof getTokenRatesControllerMessenger @@ -57,19 +44,8 @@ export function getTokenRatesControllerMessenger( }); messenger.delegate({ messenger: controllerMessenger, - actions: [ - 'TokensController:getState', - 'NetworkController:getNetworkClientById', - 'NetworkController:getState', - 'AccountsController:getAccount', - 'AccountsController:getSelectedAccount', - ], - events: [ - 'NetworkController:stateChange', - 'AccountsController:selectedEvmAccountChange', - 'PreferencesController:stateChange', - 'TokensController:stateChange', - ], + actions: ['TokensController:getState', 'NetworkController:getState'], + events: ['TokensController:stateChange', 'NetworkController:stateChange'], }); return controllerMessenger; } diff --git a/package.json b/package.json index 7adbbe532700..1c8166e9f646 100644 --- a/package.json +++ b/package.json @@ -243,7 +243,7 @@ "@endo/env-options@npm:^1.1.8": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -271,7 +271,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.6.0", "@metamask/bridge-controller": "^60.1.0", diff --git a/yarn.lock b/yarn.lock index 522efb899c38..9ac3a5c48650 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5591,9 +5591,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de": - version: 88.0.0-preview-32bc01de - resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-32bc01de" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d": + version: 88.0.0-preview-16cf753d + resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-16cf753d" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5629,7 +5629,7 @@ __metadata: "@metamask/account-tree-controller": ^3.0.0 "@metamask/accounts-controller": ^34.0.0 "@metamask/approval-controller": ^8.0.0 - "@metamask/core-backend": ^4.0.0 + "@metamask/core-backend": ^4.1.0 "@metamask/keyring-controller": ^24.0.0 "@metamask/network-controller": ^25.0.0 "@metamask/permission-controller": ^12.0.0 @@ -5639,7 +5639,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/28500fd4056b4ca661cfedd5c6a89e08dbc3e5f2c2a3fa93ff471b2aeb4bc371bb7e7bc431d52fced1b2b962d0b8ea5bfd4492913e75677752755545aa1bc055 + checksum: 10/419f9f904f72dc4afe15326b8ea4a161018108a969fdc9429a251344caaaf2061bf3bf0a1087c8e7fc40aa2fa5658b1dc5dd6d088c1264d0e8f84eed4a55be01 languageName: node linkType: hard @@ -32507,7 +32507,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-32bc01de" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.6.0" From b77709bd2afce5e4acf6eeb6d86e11372f064c37 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Tue, 18 Nov 2025 15:02:07 +0000 Subject: [PATCH 15/29] remove code that breaks --- .../currency-rate-controller-init.ts | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/app/scripts/controller-init/currency-rate-controller-init.ts b/app/scripts/controller-init/currency-rate-controller-init.ts index dd71eb277572..c85a5430b58f 100644 --- a/app/scripts/controller-init/currency-rate-controller-init.ts +++ b/app/scripts/controller-init/currency-rate-controller-init.ts @@ -34,27 +34,6 @@ export const CurrencyRateControllerInit: ControllerInitFunction< tokenPricesService: new CodefiTokenPricesServiceV2(), }); - // TODO: This logic should be ported to `CurrencyRateController` directly. - const originalFetchMultiExchangeRate = - // @ts-expect-error: Accessing private method. - controller.fetchMultiExchangeRate.bind(controller); - - // @ts-expect-error: Accessing private method. - controller.fetchMultiExchangeRate = (...args) => { - const { useCurrencyRateCheck } = initMessenger.call( - 'PreferencesController:getState', - ); - - if (useCurrencyRateCheck) { - return originalFetchMultiExchangeRate(...args); - } - - return { - conversionRate: null, - usdConversionRate: null, - }; - }; - return { memStateKey: 'CurrencyController', persistedStateKey: 'CurrencyController', From 099cfa782c8dcc0421721eaaa8474d9d9e433176 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Wed, 19 Nov 2025 10:39:52 +0000 Subject: [PATCH 16/29] upgrade preview --- package.json | 4 ++-- yarn.lock | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 0594379e2bf0..b4008856e9bf 100644 --- a/package.json +++ b/package.json @@ -244,7 +244,7 @@ "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", "addons-linter/glob": "^10.5.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -272,7 +272,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.6.0", "@metamask/bridge-controller": "^60.1.0", diff --git a/yarn.lock b/yarn.lock index 61074179288e..aa7cfb0410fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5591,9 +5591,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d": - version: 88.0.0-preview-16cf753d - resolution: "@metamask-previews/assets-controllers@npm:88.0.0-preview-16cf753d" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b": + version: 89.0.1-preview-40ec088b + resolution: "@metamask-previews/assets-controllers@npm:89.0.1-preview-40ec088b" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5639,7 +5639,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/419f9f904f72dc4afe15326b8ea4a161018108a969fdc9429a251344caaaf2061bf3bf0a1087c8e7fc40aa2fa5658b1dc5dd6d088c1264d0e8f84eed4a55be01 + checksum: 10/7fec055ad51251bf5eace450148087e2c6d6dad508eacf5514c7d0dc0f15f7987be7d108c3f9f6ce4fefc8d268213c72595d9b54fb63a107e6a68bfa739beef7 languageName: node linkType: hard @@ -32492,7 +32492,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@88.0.0-preview-16cf753d" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.6.0" From 671deb1f3992919c7e016c140a3ccca5025574c2 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Wed, 19 Nov 2025 12:58:02 +0000 Subject: [PATCH 17/29] upgrade preview --- package.json | 4 ++-- yarn.lock | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 3a91641ae325..002df039922a 100644 --- a/package.json +++ b/package.json @@ -244,7 +244,7 @@ "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", "addons-linter/glob": "^10.5.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -272,7 +272,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.6.0", "@metamask/bridge-controller": "^60.1.0", diff --git a/yarn.lock b/yarn.lock index 3c7f9f5d3fd9..11ae2c6c71ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5591,9 +5591,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b": - version: 89.0.1-preview-40ec088b - resolution: "@metamask-previews/assets-controllers@npm:89.0.1-preview-40ec088b" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f": + version: 89.0.1-preview-152da47f + resolution: "@metamask-previews/assets-controllers@npm:89.0.1-preview-152da47f" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5639,7 +5639,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/7fec055ad51251bf5eace450148087e2c6d6dad508eacf5514c7d0dc0f15f7987be7d108c3f9f6ce4fefc8d268213c72595d9b54fb63a107e6a68bfa739beef7 + checksum: 10/a50591585ef6cbf879b43fbaadcbbd6e984b2136baec284d1ab6ec9e3abbb7c5384d7840f9e9ba83e6a39a8378716c3420919213bda45c6ee759f44acb18367e languageName: node linkType: hard @@ -32509,7 +32509,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-40ec088b" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.6.0" From 91a77c6945f928fff53ebadcf10cf3d64330539a Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Wed, 19 Nov 2025 19:57:44 +0000 Subject: [PATCH 18/29] upgrade package --- package.json | 4 ++-- yarn.lock | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 002df039922a..7a06e4bc69c8 100644 --- a/package.json +++ b/package.json @@ -244,7 +244,7 @@ "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", "addons-linter/glob": "^10.5.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -272,7 +272,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f", + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.6.0", "@metamask/bridge-controller": "^60.1.0", diff --git a/yarn.lock b/yarn.lock index 11ae2c6c71ee..1bc0d17ffdb0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5591,9 +5591,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f": - version: 89.0.1-preview-152da47f - resolution: "@metamask-previews/assets-controllers@npm:89.0.1-preview-152da47f" +"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058": + version: 89.0.1-preview-f83c2058 + resolution: "@metamask-previews/assets-controllers@npm:89.0.1-preview-f83c2058" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5639,7 +5639,7 @@ __metadata: "@metamask/snaps-controllers": ^14.0.0 "@metamask/transaction-controller": ^61.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/a50591585ef6cbf879b43fbaadcbbd6e984b2136baec284d1ab6ec9e3abbb7c5384d7840f9e9ba83e6a39a8378716c3420919213bda45c6ee759f44acb18367e + checksum: 10/763303eb721be344df20c30bd37f5515d2f00b281a8a0a27b6b85c125f9cb530858596759ba813430e1aa645637cce89bb73ab4c7760bf2e0e75d1f2c2569adf languageName: node linkType: hard @@ -32509,7 +32509,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-152da47f" + "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.6.0" From 819739b3c66d1eb5bf1fba686d4d1eb87223d6fb Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 11:02:44 +0000 Subject: [PATCH 19/29] fixes --- .../account/incremental-security.spec.ts | 4 +--- .../account/snap-account-transfers.spec.ts | 6 ++--- test/e2e/tests/network/multi-rpc.spec.ts | 24 +++++++------------ test/e2e/tests/onboarding/onboarding.spec.ts | 4 +--- 4 files changed, 12 insertions(+), 26 deletions(-) diff --git a/test/e2e/tests/account/incremental-security.spec.ts b/test/e2e/tests/account/incremental-security.spec.ts index bf345e43f6e9..55ec9c222e31 100644 --- a/test/e2e/tests/account/incremental-security.spec.ts +++ b/test/e2e/tests/account/incremental-security.spec.ts @@ -17,9 +17,7 @@ import { handleSidepanelPostOnboarding } from '../../page-objects/flows/onboardi async function mockSpotPrices(mockServer: Mockttp) { return await mockServer - .forGet( - /^https:\/\/price\.api\.cx\.metamask\.io\/v2\/chains\/\d+\/spot-prices/u, - ) + .forGet(/^https:\/\/price\.api\.cx\.metamask\.io\/v3\/spot-prices/u) .thenCallback(() => ({ statusCode: 200, json: { diff --git a/test/e2e/tests/account/snap-account-transfers.spec.ts b/test/e2e/tests/account/snap-account-transfers.spec.ts index d896197a7c5b..695a82e6d082 100644 --- a/test/e2e/tests/account/snap-account-transfers.spec.ts +++ b/test/e2e/tests/account/snap-account-transfers.spec.ts @@ -20,13 +20,11 @@ async function mockSnapSimpleKeyringAndSiteWithSpotPrices( ) { const snapMocks = await mockSnapSimpleKeyringAndSite(mockServer, port); const spotPricesMock = await mockServer - .forGet( - /^https:\/\/price\.api\.cx\.metamask\.io\/v2\/chains\/\d+\/spot-prices/u, - ) + .forGet(/^https:\/\/price\.api\.cx\.metamask\.io\/v3\/spot-prices/u) .thenCallback(() => ({ statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 1700, marketCap: 382623505141, diff --git a/test/e2e/tests/network/multi-rpc.spec.ts b/test/e2e/tests/network/multi-rpc.spec.ts index cb83d4de8801..d143b3353c1d 100644 --- a/test/e2e/tests/network/multi-rpc.spec.ts +++ b/test/e2e/tests/network/multi-rpc.spec.ts @@ -41,13 +41,11 @@ describe('MultiRpc:', function (this: Suite) { })), // Mock spot-prices for balance display await mockServer - .forGet( - /^https:\/\/price\.api\.cx\.metamask\.io\/v2\/chains\/\d+\/spot-prices/u, - ) + .forGet(/^https:\/\/price\.api\.cx\.metamask\.io\/v3\/spot-prices/u) .thenCallback(() => ({ statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 1700, marketCap: 382623505141, @@ -174,13 +172,11 @@ describe('MultiRpc:', function (this: Suite) { })), // Mock spot-prices for balance display await mockServer - .forGet( - /^https:\/\/price\.api\.cx\.metamask\.io\/v2\/chains\/\d+\/spot-prices/u, - ) + .forGet(/^https:\/\/price\.api\.cx\.metamask\.io\/v3\/spot-prices/u) .thenCallback(() => ({ statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 1700, marketCap: 382623505141, @@ -288,13 +284,11 @@ describe('MultiRpc:', function (this: Suite) { })), // Mock spot-prices for balance display await mockServer - .forGet( - /^https:\/\/price\.api\.cx\.metamask\.io\/v2\/chains\/\d+\/spot-prices/u, - ) + .forGet(/^https:\/\/price\.api\.cx\.metamask\.io\/v3\/spot-prices/u) .thenCallback(() => ({ statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 1700, marketCap: 382623505141, @@ -390,13 +384,11 @@ describe('MultiRpc:', function (this: Suite) { })), // Mock spot-prices for balance display await mockServer - .forGet( - /^https:\/\/price\.api\.cx\.metamask\.io\/v2\/chains\/\d+\/spot-prices/u, - ) + .forGet(/^https:\/\/price\.api\.cx\.metamask\.io\/v3\/spot-prices/u) .thenCallback(() => ({ statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 1700, marketCap: 382623505141, diff --git a/test/e2e/tests/onboarding/onboarding.spec.ts b/test/e2e/tests/onboarding/onboarding.spec.ts index 29f705eb1554..7c28e641b269 100644 --- a/test/e2e/tests/onboarding/onboarding.spec.ts +++ b/test/e2e/tests/onboarding/onboarding.spec.ts @@ -32,9 +32,7 @@ const IMPORTED_SRP_ACCOUNT_1 = '0x0Cc5261AB8cE458dc977078A3623E2BaDD27afD3'; async function mockSpotPrices(mockServer: Mockttp) { return await mockServer - .forGet( - /^https:\/\/price\.api\.cx\.metamask\.io\/v2\/chains\/\d+\/spot-prices/u, - ) + .forGet(/^https:\/\/price\.api\.cx\.metamask\.io\/v3\/spot-prices/u) .thenCallback(() => ({ statusCode: 200, json: { From d563bb53dd96cdebac9b7ffa0586c2f108385801 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 11:11:51 +0000 Subject: [PATCH 20/29] fix test --- .../e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts b/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts index fac9901e88b5..3fb2a31fc0b4 100644 --- a/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts +++ b/test/e2e/tests/swap-send/swap-send-eth-with-loaded-state.spec.ts @@ -14,7 +14,7 @@ async function mockSwapQuotes(mockServer: MockttpServer) { .thenCallback(() => ({ statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 1700, // Default ETH price for swap tests marketCap: 382623505141, From d25c84429bc98077ff72b68bc79e489ce1bfeaa8 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 11:53:30 +0000 Subject: [PATCH 21/29] more fixes --- test/e2e/mock-e2e.js | 11 +--- .../bridge/bridge-negative-cases.spec.ts | 2 +- test/e2e/tests/confirmations/helpers.ts | 4 +- test/e2e/tests/settings/localization.spec.ts | 6 +- .../tests/swap-send/swap-send-test-utils.ts | 4 +- test/e2e/tests/tokens/token-list.spec.ts | 2 +- test/e2e/tests/tokens/utils/mocks.ts | 11 ++-- .../confirmations/signatures/permit.test.tsx | 59 ++++++++++--------- 8 files changed, 50 insertions(+), 49 deletions(-) diff --git a/test/e2e/mock-e2e.js b/test/e2e/mock-e2e.js index 13404b6413e2..39cfd3ea97c5 100644 --- a/test/e2e/mock-e2e.js +++ b/test/e2e/mock-e2e.js @@ -920,14 +920,9 @@ async function setupMocking( // Uses zero address (0x0000000000000000000000000000000000000000) to represent native token // API format: v2/chains/{chainId}/spot-prices?tokenAddresses={address}&vsCurrency=usd&includeMarketData=true await server - .forGet( - `https://price.api.cx.metamask.io/v2/chains/${parseInt( - chainId, - 16, - )}/spot-prices`, - ) + .forGet(`https://price.api.cx.metamask.io/v3/spot-prices`) .withQuery({ - tokenAddresses: '0x0000000000000000000000000000000000000000', + assetIds: 'eip155:1/slip44:60', vsCurrency: 'usd', includeMarketData: 'true', }) @@ -935,7 +930,7 @@ async function setupMocking( return { statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: ethConversionInUsd, marketCap: 382623505141, diff --git a/test/e2e/tests/bridge/bridge-negative-cases.spec.ts b/test/e2e/tests/bridge/bridge-negative-cases.spec.ts index 37d520f479d1..8a1c929481e9 100644 --- a/test/e2e/tests/bridge/bridge-negative-cases.spec.ts +++ b/test/e2e/tests/bridge/bridge-negative-cases.spec.ts @@ -70,7 +70,7 @@ describe('Bridge functionality', function (this: Suite) { ); }); - it('should show message that no trade route is available if getQuote returns empty array', async function () { + it.only('should show message that no trade route is available if getQuote returns empty array', async function () { await withFixtures( getQuoteNegativeCasesFixtures( { diff --git a/test/e2e/tests/confirmations/helpers.ts b/test/e2e/tests/confirmations/helpers.ts index a82344c0a5fe..bd451079470b 100644 --- a/test/e2e/tests/confirmations/helpers.ts +++ b/test/e2e/tests/confirmations/helpers.ts @@ -612,12 +612,12 @@ export async function mockDeFiPositionFeatureFlag(mockServer: Mockttp) { }; }), await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .thenCallback(() => { return { statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { price: 1700, marketCap: 382623505141, pricePercentChange1d: 0, diff --git a/test/e2e/tests/settings/localization.spec.ts b/test/e2e/tests/settings/localization.spec.ts index c22cbf48227a..1d2c96e1b3ab 100644 --- a/test/e2e/tests/settings/localization.spec.ts +++ b/test/e2e/tests/settings/localization.spec.ts @@ -48,7 +48,7 @@ async function mockPhpConversion(mockServer: Mockttp) { }), // Mock v2 spot-prices for chain 1 (mainnet) await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .thenCallback((request) => { const url = new URL(request.url); const vsCurrency = url.searchParams.get('vsCurrency'); @@ -58,7 +58,7 @@ async function mockPhpConversion(mockServer: Mockttp) { return { statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 100000, // 1 ETH = 100,000 PHP marketCap: 382623505141, @@ -72,7 +72,7 @@ async function mockPhpConversion(mockServer: Mockttp) { return { statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { id: 'ethereum', price: 2500, // 1 ETH = 2,500 USD marketCap: 382623505141, diff --git a/test/e2e/tests/swap-send/swap-send-test-utils.ts b/test/e2e/tests/swap-send/swap-send-test-utils.ts index 770487e394e3..d54d47694935 100644 --- a/test/e2e/tests/swap-send/swap-send-test-utils.ts +++ b/test/e2e/tests/swap-send/swap-send-test-utils.ts @@ -285,12 +285,12 @@ export const mockSwapsApi = }; }); await mockServer - .forGet('https://price.api.cx.metamask.io/v2/chains/1/spot-prices') + .forGet('https://price.api.cx.metamask.io/v3/spot-prices') .thenCallback(() => { return { statusCode: 200, json: { - '0x0000000000000000000000000000000000000000': { + 'eip155:1/slip44:60': { price: 3010, marketCap: 382623505141, pricePercentChange1d: 0, diff --git a/test/e2e/tests/tokens/token-list.spec.ts b/test/e2e/tests/tokens/token-list.spec.ts index ccd8a4acb885..ac4aee0b5fab 100644 --- a/test/e2e/tests/tokens/token-list.spec.ts +++ b/test/e2e/tests/tokens/token-list.spec.ts @@ -63,7 +63,7 @@ describe('Token List', function () { ); }); - it('shows percentage increase for an ERC20 token with prices available', async function () { + it.only('shows percentage increase for an ERC20 token with prices available', async function () { const ethConversionInUsd = 10000; const marketData = { price: 0.123, diff --git a/test/e2e/tests/tokens/utils/mocks.ts b/test/e2e/tests/tokens/utils/mocks.ts index a0ed71230b9a..b2de283afc6c 100644 --- a/test/e2e/tests/tokens/utils/mocks.ts +++ b/test/e2e/tests/tokens/utils/mocks.ts @@ -37,10 +37,13 @@ export const mockSpotPrices = async ( ) => { return mockServer .forGet(`${PRICE_API_URL}/v3/spot-prices`) - .thenCallback(() => ({ - statusCode: 200, - json: prices, - })); + .thenCallback(() => { + console.log('DEBUG XXXXXXXX', prices); + return { + statusCode: 200, + json: prices, + }; + }); }; type HistoricalPricesOptions = { diff --git a/test/integration/confirmations/signatures/permit.test.tsx b/test/integration/confirmations/signatures/permit.test.tsx index 0ed7003d22df..65388e4fa512 100644 --- a/test/integration/confirmations/signatures/permit.test.tsx +++ b/test/integration/confirmations/signatures/permit.test.tsx @@ -165,37 +165,40 @@ describe('Permit Confirmation', () => { }); }); - it('displays the simulation section', async () => { + it.only('displays the simulation section', async () => { const scope = nock('https://price.api.cx.metamask.io') .persist() .get('/v2/chains/1/spot-prices') - .query({ - tokenAddresses: - '0x0000000000000000000000000000000000000000,0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', - vsCurrency: 'ETH', - includeMarketData: 'true', - }) - .reply(200, { - '0xcccccccccccccccccccccccccccccccccccccccc': { - allTimeHigh: 12, - allTimeLow: 1, - circulatingSupply: 50000, - dilutedMarketCap: 50000, - high1d: 11, - low1d: 9.9, - marketCap: 10000, - marketCapPercentChange1d: 1, - price: 10, - priceChange1d: 0.5, - pricePercentChange1d: 1, - pricePercentChange1h: 0, - pricePercentChange1y: 80, - pricePercentChange7d: 2, - pricePercentChange14d: 5, - pricePercentChange30d: 10, - pricePercentChange200d: 50, - totalVolume: 100, - }, + // .query({ + // assetIds: + // 'eip155:1/slip44:60,eip155:1/erc20:0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + // vsCurrency: 'ETH', + // includeMarketData: 'true', + // }) + .reply((request) => { + console.log('ADHJKGAADGKHJHJKADJKHDAJKHADKJH', request); + return { + 'eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc': { + allTimeHigh: 12, + allTimeLow: 1, + circulatingSupply: 50000, + dilutedMarketCap: 50000, + high1d: 11, + low1d: 9.9, + marketCap: 10000, + marketCapPercentChange1d: 1, + price: 10, + priceChange1d: 0.5, + pricePercentChange1d: 1, + pricePercentChange1h: 0, + pricePercentChange1y: 80, + pricePercentChange7d: 2, + pricePercentChange14d: 5, + pricePercentChange30d: 10, + pricePercentChange200d: 50, + totalVolume: 100, + }, + }; }); const account = From 95fdf3fda90a81584e740a4f771c389497d7f080 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 12:02:00 +0000 Subject: [PATCH 22/29] remove .only --- test/e2e/tests/bridge/bridge-negative-cases.spec.ts | 2 +- test/e2e/tests/tokens/token-list.spec.ts | 2 +- test/integration/confirmations/signatures/permit.test.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/e2e/tests/bridge/bridge-negative-cases.spec.ts b/test/e2e/tests/bridge/bridge-negative-cases.spec.ts index 8a1c929481e9..37d520f479d1 100644 --- a/test/e2e/tests/bridge/bridge-negative-cases.spec.ts +++ b/test/e2e/tests/bridge/bridge-negative-cases.spec.ts @@ -70,7 +70,7 @@ describe('Bridge functionality', function (this: Suite) { ); }); - it.only('should show message that no trade route is available if getQuote returns empty array', async function () { + it('should show message that no trade route is available if getQuote returns empty array', async function () { await withFixtures( getQuoteNegativeCasesFixtures( { diff --git a/test/e2e/tests/tokens/token-list.spec.ts b/test/e2e/tests/tokens/token-list.spec.ts index ac4aee0b5fab..ccd8a4acb885 100644 --- a/test/e2e/tests/tokens/token-list.spec.ts +++ b/test/e2e/tests/tokens/token-list.spec.ts @@ -63,7 +63,7 @@ describe('Token List', function () { ); }); - it.only('shows percentage increase for an ERC20 token with prices available', async function () { + it('shows percentage increase for an ERC20 token with prices available', async function () { const ethConversionInUsd = 10000; const marketData = { price: 0.123, diff --git a/test/integration/confirmations/signatures/permit.test.tsx b/test/integration/confirmations/signatures/permit.test.tsx index 65388e4fa512..c1405a2d1c1b 100644 --- a/test/integration/confirmations/signatures/permit.test.tsx +++ b/test/integration/confirmations/signatures/permit.test.tsx @@ -165,7 +165,7 @@ describe('Permit Confirmation', () => { }); }); - it.only('displays the simulation section', async () => { + it('displays the simulation section', async () => { const scope = nock('https://price.api.cx.metamask.io') .persist() .get('/v2/chains/1/spot-prices') From d30a4736eb95503c5083d1ce62032dfbab09e656 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 13:42:11 +0000 Subject: [PATCH 23/29] fix integration test --- .../confirmations/signatures/permit.test.tsx | 59 +++++++++---------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/test/integration/confirmations/signatures/permit.test.tsx b/test/integration/confirmations/signatures/permit.test.tsx index c1405a2d1c1b..02782adec91f 100644 --- a/test/integration/confirmations/signatures/permit.test.tsx +++ b/test/integration/confirmations/signatures/permit.test.tsx @@ -168,37 +168,34 @@ describe('Permit Confirmation', () => { it('displays the simulation section', async () => { const scope = nock('https://price.api.cx.metamask.io') .persist() - .get('/v2/chains/1/spot-prices') - // .query({ - // assetIds: - // 'eip155:1/slip44:60,eip155:1/erc20:0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', - // vsCurrency: 'ETH', - // includeMarketData: 'true', - // }) - .reply((request) => { - console.log('ADHJKGAADGKHJHJKADJKHDAJKHADKJH', request); - return { - 'eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc': { - allTimeHigh: 12, - allTimeLow: 1, - circulatingSupply: 50000, - dilutedMarketCap: 50000, - high1d: 11, - low1d: 9.9, - marketCap: 10000, - marketCapPercentChange1d: 1, - price: 10, - priceChange1d: 0.5, - pricePercentChange1d: 1, - pricePercentChange1h: 0, - pricePercentChange1y: 80, - pricePercentChange7d: 2, - pricePercentChange14d: 5, - pricePercentChange30d: 10, - pricePercentChange200d: 50, - totalVolume: 100, - }, - }; + .get('/v3/spot-prices') + .query({ + assetIds: + 'eip155:1/slip44:60,eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc', + vsCurrency: 'ETH', + includeMarketData: 'true', + }) + .reply(200, { + 'eip155:1/erc20:0xcccccccccccccccccccccccccccccccccccccccc': { + allTimeHigh: 12, + allTimeLow: 1, + circulatingSupply: 50000, + dilutedMarketCap: 50000, + high1d: 11, + low1d: 9.9, + marketCap: 10000, + marketCapPercentChange1d: 1, + price: 10, + priceChange1d: 0.5, + pricePercentChange1d: 1, + pricePercentChange1h: 0, + pricePercentChange1y: 80, + pricePercentChange7d: 2, + pricePercentChange14d: 5, + pricePercentChange30d: 10, + pricePercentChange200d: 50, + totalVolume: 100, + }, }); const account = From 0e52615df83310df66459c4a3abd5d8c61ad29cb Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 16:20:03 +0000 Subject: [PATCH 24/29] package updated --- package.json | 5 ++-- yarn.lock | 67 ++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 54 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index ba5d270c8d8c..d914159ef673 100644 --- a/package.json +++ b/package.json @@ -246,8 +246,7 @@ "@endo/env-options@npm:^1.1.8": "patch:@endo/env-options@npm%3A1.1.11#~/.yarn/patches/@endo-env-options-npm-1.1.11-1b7fae374a.patch", "@metamask/jazzicon@npm:^2.0.0": "patch:@metamask/jazzicon@npm%3A2.0.0#~/.yarn/patches/@metamask-jazzicon-npm-2.0.0-36957be38d.patch", "@rive-app/canvas@npm:2.31.5": "patch:@rive-app/canvas@patch%3A@rive-app/canvas@patch%253A@rive-app/canvas@npm%25253A2.31.5%2523~/.yarn/patches/@rive-app-canvas-npm-2.31.5-df519c6e0f.patch%253A%253Aversion=2.31.5&hash=1ed092%23~/.yarn/patches/@rive-app-canvas-patch-9b746e9393.patch%3A%3Aversion=2.31.5&hash=19c5d0#~/.yarn/patches/@rive-app-canvas-patch-03752f0c3b.patch", - "addons-linter/glob": "^10.5.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058" + "addons-linter/glob": "^10.5.0" }, "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch", @@ -275,7 +274,7 @@ "@metamask/address-book-controller": "^7.0.0", "@metamask/announcement-controller": "^8.0.0", "@metamask/approval-controller": "^8.0.0", - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058", + "@metamask/assets-controllers": "^91.0.0", "@metamask/base-controller": "^9.0.0", "@metamask/bitcoin-wallet-snap": "^1.6.0", "@metamask/bridge-controller": "^61.0.0", diff --git a/yarn.lock b/yarn.lock index 4442f721df13..f41e37ea9964 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5591,9 +5591,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058": - version: 89.0.1-preview-f83c2058 - resolution: "@metamask-previews/assets-controllers@npm:89.0.1-preview-f83c2058" +"@metamask/assets-controllers@npm:^91.0.0": + version: 91.0.0 + resolution: "@metamask/assets-controllers@npm:91.0.0" dependencies: "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -5604,12 +5604,12 @@ __metadata: "@metamask/abi-utils": "npm:^2.0.3" "@metamask/base-controller": "npm:^9.0.0" "@metamask/contract-metadata": "npm:^2.4.0" - "@metamask/controller-utils": "npm:^11.15.0" + "@metamask/controller-utils": "npm:^11.16.0" "@metamask/eth-query": "npm:^4.0.0" "@metamask/keyring-api": "npm:^21.0.0" "@metamask/messenger": "npm:^0.3.0" "@metamask/metamask-eth-abis": "npm:^3.1.1" - "@metamask/polling-controller": "npm:^15.0.0" + "@metamask/polling-controller": "npm:^16.0.0" "@metamask/rpc-errors": "npm:^7.0.2" "@metamask/snaps-sdk": "npm:^9.0.0" "@metamask/snaps-utils": "npm:^11.0.0" @@ -5626,20 +5626,20 @@ __metadata: single-call-balance-checker-abi: "npm:^1.0.0" uuid: "npm:^8.3.2" peerDependencies: - "@metamask/account-tree-controller": ^3.0.0 - "@metamask/accounts-controller": ^34.0.0 + "@metamask/account-tree-controller": ^4.0.0 + "@metamask/accounts-controller": ^35.0.0 "@metamask/approval-controller": ^8.0.0 - "@metamask/core-backend": ^4.1.0 - "@metamask/keyring-controller": ^24.0.0 - "@metamask/network-controller": ^25.0.0 + "@metamask/core-backend": ^5.0.0 + "@metamask/keyring-controller": ^25.0.0 + "@metamask/network-controller": ^26.0.0 "@metamask/permission-controller": ^12.0.0 - "@metamask/phishing-controller": ^15.0.0 - "@metamask/preferences-controller": ^21.0.0 + "@metamask/phishing-controller": ^16.0.0 + "@metamask/preferences-controller": ^22.0.0 "@metamask/providers": ^22.0.0 "@metamask/snaps-controllers": ^14.0.0 - "@metamask/transaction-controller": ^61.0.0 + "@metamask/transaction-controller": ^62.0.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/763303eb721be344df20c30bd37f5515d2f00b281a8a0a27b6b85c125f9cb530858596759ba813430e1aa645637cce89bb73ab4c7760bf2e0e75d1f2c2569adf + checksum: 10/8e43d631a5ae86fc4801912e79d944ad087a605bb7a5e2813de64b6e068dc26482d25d37c3e2272e435a71ee8a7dafe875edb46cbfbcd150fb474588b45e6ff4 languageName: node linkType: hard @@ -5894,6 +5894,27 @@ __metadata: languageName: node linkType: hard +"@metamask/controller-utils@npm:^11.16.0": + version: 11.16.0 + resolution: "@metamask/controller-utils@npm:11.16.0" + dependencies: + "@metamask/eth-query": "npm:^4.0.0" + "@metamask/ethjs-unit": "npm:^0.3.0" + "@metamask/utils": "npm:^11.8.1" + "@spruceid/siwe-parser": "npm:2.1.0" + "@types/bn.js": "npm:^5.1.5" + bignumber.js: "npm:^9.1.2" + bn.js: "npm:^5.2.1" + cockatiel: "npm:^3.1.2" + eth-ens-namehash: "npm:^2.0.8" + fast-deep-equal: "npm:^3.1.3" + lodash: "npm:^4.17.21" + peerDependencies: + "@babel/runtime": ^7.0.0 + checksum: 10/ff364f3655edf0cd0c00743c1bf2ed3d66e057dbac6df9976146ad9bc176ce60e3b5e3765d9dd0aca5af68bbd6aad85779be97bae2aafc860bb56fa2deb69e7f + languageName: node + linkType: hard + "@metamask/core-backend@npm:^4.1.0": version: 4.1.0 resolution: "@metamask/core-backend@npm:4.1.0" @@ -7551,6 +7572,22 @@ __metadata: languageName: node linkType: hard +"@metamask/polling-controller@npm:^16.0.0": + version: 16.0.0 + resolution: "@metamask/polling-controller@npm:16.0.0" + dependencies: + "@metamask/base-controller": "npm:^9.0.0" + "@metamask/controller-utils": "npm:^11.16.0" + "@metamask/utils": "npm:^11.8.1" + "@types/uuid": "npm:^8.3.0" + fast-json-stable-stringify: "npm:^2.1.0" + uuid: "npm:^8.3.2" + peerDependencies: + "@metamask/network-controller": ^26.0.0 + checksum: 10/b65d6879f7b8c996148eb816402b5544ca849ad8e59890eeeeb35dda18f9e8efe07c86ab5b3acf6a0cf9320b12ae311e2346c03bf74116331579d8460f556961 + languageName: node + linkType: hard + "@metamask/post-message-stream@npm:^10.0.0": version: 10.0.0 resolution: "@metamask/post-message-stream@npm:10.0.0" @@ -32510,7 +32547,7 @@ __metadata: "@metamask/announcement-controller": "npm:^8.0.0" "@metamask/api-specs": "npm:^0.13.0" "@metamask/approval-controller": "npm:^8.0.0" - "@metamask/assets-controllers": "npm:@metamask-previews/assets-controllers@89.0.1-preview-f83c2058" + "@metamask/assets-controllers": "npm:^91.0.0" "@metamask/auto-changelog": "npm:^5.1.0" "@metamask/base-controller": "npm:^9.0.0" "@metamask/bitcoin-wallet-snap": "npm:^1.6.0" From 6204d017a1a1b2d27804fffa50fbd4877213c5a2 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 16:27:49 +0000 Subject: [PATCH 25/29] revert console.log --- test/e2e/tests/tokens/utils/mocks.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/test/e2e/tests/tokens/utils/mocks.ts b/test/e2e/tests/tokens/utils/mocks.ts index b2de283afc6c..a0ed71230b9a 100644 --- a/test/e2e/tests/tokens/utils/mocks.ts +++ b/test/e2e/tests/tokens/utils/mocks.ts @@ -37,13 +37,10 @@ export const mockSpotPrices = async ( ) => { return mockServer .forGet(`${PRICE_API_URL}/v3/spot-prices`) - .thenCallback(() => { - console.log('DEBUG XXXXXXXX', prices); - return { - statusCode: 200, - json: prices, - }; - }); + .thenCallback(() => ({ + statusCode: 200, + json: prices, + })); }; type HistoricalPricesOptions = { From 13dd55dad4b854dbf0a6e2ee59f79b476d0e0e66 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 16:29:14 +0000 Subject: [PATCH 26/29] dedupe --- yarn.lock | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/yarn.lock b/yarn.lock index f41e37ea9964..748aa9a6f4e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5873,28 +5873,7 @@ __metadata: languageName: node linkType: hard -"@metamask/controller-utils@npm:^11.0.0, @metamask/controller-utils@npm:^11.14.1, @metamask/controller-utils@npm:^11.15.0, @metamask/controller-utils@npm:^11.3.0": - version: 11.15.0 - resolution: "@metamask/controller-utils@npm:11.15.0" - dependencies: - "@metamask/eth-query": "npm:^4.0.0" - "@metamask/ethjs-unit": "npm:^0.3.0" - "@metamask/utils": "npm:^11.8.1" - "@spruceid/siwe-parser": "npm:2.1.0" - "@types/bn.js": "npm:^5.1.5" - bignumber.js: "npm:^9.1.2" - bn.js: "npm:^5.2.1" - cockatiel: "npm:^3.1.2" - eth-ens-namehash: "npm:^2.0.8" - fast-deep-equal: "npm:^3.1.3" - lodash: "npm:^4.17.21" - peerDependencies: - "@babel/runtime": ^7.0.0 - checksum: 10/30466473a73d02d32551c65820e307cd5231c35176521edce852efdf11a4b3dc2606afffd681e9105ddd686d1ba6bef85961b35f7ea3b77307141a92b66a6a12 - languageName: node - linkType: hard - -"@metamask/controller-utils@npm:^11.16.0": +"@metamask/controller-utils@npm:^11.0.0, @metamask/controller-utils@npm:^11.14.1, @metamask/controller-utils@npm:^11.15.0, @metamask/controller-utils@npm:^11.16.0, @metamask/controller-utils@npm:^11.3.0": version: 11.16.0 resolution: "@metamask/controller-utils@npm:11.16.0" dependencies: From 6d07c222b4e237da82c85629095ee8e85f68e19e Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 16:41:04 +0000 Subject: [PATCH 27/29] lavamoat --- lavamoat/browserify/beta/policy.json | 14 +++++++++++++- lavamoat/browserify/experimental/policy.json | 14 +++++++++++++- lavamoat/browserify/flask/policy.json | 14 +++++++++++++- lavamoat/browserify/main/policy.json | 14 +++++++++++++- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index a1040ce06a6c..1643fb789b43 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -842,7 +842,7 @@ "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, "@metamask/phishing-controller": true, - "@metamask/bridge-controller>@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/utils": true, @@ -1682,6 +1682,18 @@ "punycode": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/bridge-controller>@metamask/polling-controller": { "globals": { "clearTimeout": true, diff --git a/lavamoat/browserify/experimental/policy.json b/lavamoat/browserify/experimental/policy.json index a1040ce06a6c..1643fb789b43 100644 --- a/lavamoat/browserify/experimental/policy.json +++ b/lavamoat/browserify/experimental/policy.json @@ -842,7 +842,7 @@ "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, "@metamask/phishing-controller": true, - "@metamask/bridge-controller>@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/utils": true, @@ -1682,6 +1682,18 @@ "punycode": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/bridge-controller>@metamask/polling-controller": { "globals": { "clearTimeout": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index a1040ce06a6c..1643fb789b43 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -842,7 +842,7 @@ "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, "@metamask/phishing-controller": true, - "@metamask/bridge-controller>@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/utils": true, @@ -1682,6 +1682,18 @@ "punycode": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/bridge-controller>@metamask/polling-controller": { "globals": { "clearTimeout": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index a1040ce06a6c..1643fb789b43 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -842,7 +842,7 @@ "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, "@metamask/phishing-controller": true, - "@metamask/bridge-controller>@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/utils": true, @@ -1682,6 +1682,18 @@ "punycode": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/bridge-controller>@metamask/polling-controller": { "globals": { "clearTimeout": true, From 831ebf243bc652651eaf382b6c76cb4028fa32e2 Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Thu, 20 Nov 2025 16:55:56 +0000 Subject: [PATCH 28/29] webpack policies --- lavamoat/webpack/mv2/policy.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lavamoat/webpack/mv2/policy.json b/lavamoat/webpack/mv2/policy.json index 279f53d62340..d071ca2dfa91 100644 --- a/lavamoat/webpack/mv2/policy.json +++ b/lavamoat/webpack/mv2/policy.json @@ -865,7 +865,7 @@ "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, "@metamask/phishing-controller": true, - "@metamask/bridge-controller>@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/utils": true, @@ -1753,6 +1753,18 @@ "punycode": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/bridge-controller>@metamask/polling-controller": { "globals": { "clearTimeout": true, From 363b3dc8ab432722ca3d04bf05bdd178980a645c Mon Sep 17 00:00:00 2001 From: Bernardo Garces Chapero Date: Fri, 21 Nov 2025 11:09:14 +0000 Subject: [PATCH 29/29] fix for tron --- ui/pages/asset/hooks/useTronResources.test.ts | 26 +- ui/pages/asset/hooks/useTronResources.ts | 6 +- ui/selectors/assets.test.ts | 370 ++---------------- ui/selectors/assets.ts | 123 +++--- 4 files changed, 105 insertions(+), 420 deletions(-) diff --git a/ui/pages/asset/hooks/useTronResources.test.ts b/ui/pages/asset/hooks/useTronResources.test.ts index b314cd9ee2f9..940525603036 100644 --- a/ui/pages/asset/hooks/useTronResources.test.ts +++ b/ui/pages/asset/hooks/useTronResources.test.ts @@ -12,7 +12,7 @@ import { useTronResources } from './useTronResources'; // Mock the selectors jest.mock('../../../selectors/assets', () => ({ ...jest.requireActual('../../../selectors/assets'), - getAssetsBySelectedAccountGroup: jest.fn(), + getAssetsBySelectedAccountGroupWithTronResources: jest.fn(), })); jest.mock('../../../selectors/multichain', () => ({ @@ -66,7 +66,7 @@ describe('useTronResources', () => { `${chainId}/resource:max-bandwidth` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.ENERGY, energyAssetId), @@ -112,7 +112,7 @@ describe('useTronResources', () => { const bandwidthAssetId = `${chainId}/resource:bandwidth` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.ENERGY, energyAssetId), @@ -148,7 +148,7 @@ describe('useTronResources', () => { const bandwidthAssetId = `${chainId}/resource:bandwidth` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.ENERGY, energyAssetId), @@ -188,7 +188,7 @@ describe('useTronResources', () => { `${chainId}/resource:max-bandwidth` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.MAX_ENERGY, maxEnergyAssetId), @@ -231,7 +231,7 @@ describe('useTronResources', () => { `${chainId}/token:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.ENERGY, energyAssetId), @@ -276,7 +276,7 @@ describe('useTronResources', () => { it('handles empty assets array', () => { ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [], }); @@ -306,7 +306,7 @@ describe('useTronResources', () => { it('handles chainId with no assets', () => { ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({}); (multichainSelectors.getMultichainBalances as jest.Mock).mockReturnValue({ @@ -340,7 +340,7 @@ describe('useTronResources', () => { `${chainId}/resource:max-bandwidth` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.ENERGY, energyAssetId), @@ -374,7 +374,7 @@ describe('useTronResources', () => { describe('when account is undefined', () => { it('returns default values', () => { ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({}); (multichainSelectors.getMultichainBalances as jest.Mock).mockReturnValue( @@ -402,7 +402,7 @@ describe('useTronResources', () => { describe('when chainId is empty', () => { it('returns default values', () => { ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({}); (multichainSelectors.getMultichainBalances as jest.Mock).mockReturnValue({ @@ -433,7 +433,7 @@ describe('useTronResources', () => { const bandwidthAssetId = `${chainId}/resource:bandwidth` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.ENERGY, energyAssetId), @@ -470,7 +470,7 @@ describe('useTronResources', () => { const energyAssetId = `${chainId}/resource:energy` as CaipAssetId; ( - assetsSelectors.getAssetsBySelectedAccountGroup as unknown as jest.Mock + assetsSelectors.getAssetsBySelectedAccountGroupWithTronResources as unknown as jest.Mock ).mockReturnValue({ [chainId]: [ createTronResourceAsset(TRON_RESOURCE.ENERGY, energyAssetId), diff --git a/ui/pages/asset/hooks/useTronResources.ts b/ui/pages/asset/hooks/useTronResources.ts index 280055c6a1f4..5c17238e80e6 100644 --- a/ui/pages/asset/hooks/useTronResources.ts +++ b/ui/pages/asset/hooks/useTronResources.ts @@ -3,7 +3,7 @@ import { useSelector } from 'react-redux'; import { InternalAccount } from '@metamask/keyring-internal-api'; import { CaipAssetId } from '@metamask/keyring-api'; import { isTronResource } from '../../../../shared/lib/asset-utils'; -import { getAssetsBySelectedAccountGroup } from '../../../selectors/assets'; +import { getAssetsBySelectedAccountGroupWithTronResources } from '../../../selectors/assets'; import { getMultichainBalances } from '../../../selectors/multichain'; import { TRON_RESOURCE } from '../../../../shared/constants/multichain/assets'; @@ -28,7 +28,9 @@ export const useTronResources = ( energy: TronResource; bandwidth: TronResource; } => { - const accountGroupAssets = useSelector(getAssetsBySelectedAccountGroup); + const accountGroupAssets = useSelector( + getAssetsBySelectedAccountGroupWithTronResources, + ); const multichainBalances = useSelector(getMultichainBalances); return useMemo(() => { diff --git a/ui/selectors/assets.test.ts b/ui/selectors/assets.test.ts index 3b584412e836..4e7933f70ec3 100644 --- a/ui/selectors/assets.test.ts +++ b/ui/selectors/assets.test.ts @@ -1,4 +1,4 @@ -import { EthScope, SolScope, TrxScope } from '@metamask/keyring-api'; +import { EthScope, SolScope } from '@metamask/keyring-api'; import { InternalAccount } from '@metamask/keyring-internal-api'; import { AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS } from '@metamask/multichain-network-controller'; import { cloneDeep } from 'lodash'; @@ -31,6 +31,7 @@ import { getAssetsBySelectedAccountGroup, getAsset, getAllIgnoredAssets, + getAssetsBySelectedAccountGroupWithTronResources, } from './assets'; jest.mock('@metamask/assets-controllers', () => { @@ -990,344 +991,45 @@ describe('getAssetsBySelectedAccountGroup', () => { expect(selectorMock).toHaveBeenCalledWith(mockState.metamask); expect(result).toStrictEqual(selectorMockResult); }); +}); + +describe('getAssetsBySelectedAccountGroupWithTronResources', () => { + beforeEach(() => { + getAssetsBySelectedAccountGroupWithTronResources.clearCache(); + getAssetsBySelectedAccountGroupWithTronResources.memoizedResultFunc.clearCache(); + }); + + const mockState = { + metamask: { + accountTree: 'mockAccountTree', + internalAccounts: 'mockInternalAccounts', + allTokens: 'mockAllTokens', + allIgnoredTokens: 'mockAllIgnoredTokens', + tokenBalances: 'mockTokenBalances', + marketData: 'mockMarketData', + currencyRates: 'mockCurrencyRates', + currentCurrency: 'mockCurrentCurrency', + networkConfigurationsByChainId: 'mockNetworkConfigurationsByChainId', + accountsByChainId: 'mockAccountsByChainId', + accountsAssets: 'mockAccountsAssets', + assetsMetadata: 'mockAssetsMetadata', + allIgnoredAssets: 'mockAllIgnoredAssets', + balances: 'mockBalances', + conversionRates: 'mockConversionRates', + }, + }; - it('filters out tron staked bandwidth and energy', () => { + it('calls selector with option to not filter tron resources', () => { const selectorMock = jest .mocked(selectAssetsBySelectedAccountGroup) - .mockReturnValue({ - 'tron:728126428': [ - { - accountType: 'tron:eoa', - assetId: 'tron:728126428/slip44:195', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Tron', - symbol: 'TRX', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - fiat: { - balance: 0, - currency: 'usd', - conversionRate: 0.28516, - }, - chainId: 'tron:728126428', - }, - { - accountType: 'tron:eoa', - assetId: 'tron:728126428/slip44:195-staked-for-bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Staked for Bandwidth', - symbol: 'sTRX-BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:728126428', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:728126428/slip44:195-staked-for-energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Staked for Energy', - symbol: 'sTRX-ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:728126428', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:728126428/slip44:bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Bandwidth', - symbol: 'BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:728126428', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:728126428/slip44:maximum-bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Max Bandwidth', - symbol: 'MAX-BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:728126428', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:728126428/slip44:energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Energy', - symbol: 'ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:728126428', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:728126428/slip44:maximum-energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Max Energy', - symbol: 'MAX-ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:728126428', - fiat: undefined, - }, - ], - 'tron:3448148188': [ - { - accountType: 'tron:eoa', - assetId: 'tron:3448148188/slip44:195', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Tron', - symbol: 'TRX', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:3448148188', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:3448148188/slip44:195-staked-for-bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Staked for Bandwidth', - symbol: 'sTRX-BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:3448148188', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:3448148188/slip44:195-staked-for-energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Staked for Energy', - symbol: 'sTRX-ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:3448148188', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:3448148188/slip44:bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Bandwidth', - symbol: 'BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:3448148188', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:3448148188/slip44:maximum-bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Max Bandwidth', - symbol: 'MAX-BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:3448148188', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:3448148188/slip44:energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Energy', - symbol: 'ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:3448148188', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:3448148188/slip44:maximum-energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Max Energy', - symbol: 'MAX-ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:3448148188', - fiat: undefined, - }, - ], - 'tron:2494104990': [ - { - accountType: 'tron:eoa', - assetId: 'tron:2494104990/slip44:195', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Tron', - symbol: 'TRX', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:2494104990', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:2494104990/slip44:195-staked-for-bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Staked for Bandwidth', - symbol: 'sTRX-BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:2494104990', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:2494104990/slip44:195-staked-for-energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Staked for Energy', - symbol: 'sTRX-ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 6, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:2494104990', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:2494104990/slip44:bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Bandwidth', - symbol: 'BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:2494104990', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:2494104990/slip44:maximum-bandwidth', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Max Bandwidth', - symbol: 'MAX-BANDWIDTH', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:2494104990', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:2494104990/slip44:energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Energy', - symbol: 'ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:2494104990', - fiat: undefined, - }, - { - accountType: 'tron:eoa', - assetId: 'tron:2494104990/slip44:maximum-energy', - isNative: true, - image: - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png', - name: 'Max Energy', - symbol: 'MAX-ENERGY', - accountId: 'de5c3465-d01e-4091-a219-232903e982bb', - decimals: 0, - rawBalance: '0x0', - balance: '0', - chainId: 'tron:2494104990', - fiat: undefined, - }, - ], - }); + .mockReturnValue({}); - const result = getAssetsBySelectedAccountGroup(mockState); + const result = getAssetsBySelectedAccountGroupWithTronResources(mockState); - expect(selectorMock).toHaveBeenCalled(); - expect(result[TrxScope.Mainnet]).toHaveLength(1); - expect(result[TrxScope.Nile]).toHaveLength(1); - expect(result[TrxScope.Shasta]).toHaveLength(1); + expect(selectorMock).toHaveBeenCalledWith(mockState.metamask, { + filterTronStakedTokens: false, + }); + expect(result).toStrictEqual({}); }); }); diff --git a/ui/selectors/assets.ts b/ui/selectors/assets.ts index 7a0c1b5ca3d8..f0f65f9d6dc9 100644 --- a/ui/selectors/assets.ts +++ b/ui/selectors/assets.ts @@ -8,7 +8,7 @@ import { calculateBalanceChangeForAccountGroup, selectAssetsBySelectedAccountGroup, } from '@metamask/assets-controllers'; -import { CaipAssetId, TrxScope } from '@metamask/keyring-api'; +import { CaipAssetId } from '@metamask/keyring-api'; import { CaipAssetType, CaipChainId, @@ -29,7 +29,6 @@ import type { CurrencyRateState, BalanceChangePeriod, BalanceChangeResult, - Asset, } from '@metamask/assets-controllers'; import { TEST_CHAINS } from '../../shared/constants/network'; import { createDeepEqualSelector } from '../../shared/modules/selectors/util'; @@ -42,10 +41,6 @@ import { } from '../ducks/metamask/metamask'; import { findAssetByAddress } from '../pages/asset/util'; import { isEvmChainId } from '../../shared/lib/asset-utils'; -import { - TRON_RESOURCE_SYMBOLS_SET, - TronResourceSymbol, -} from '../../shared/constants/multichain/assets'; import { getSelectedInternalAccount } from './accounts'; import { getMultichainBalances } from './multichain'; import { EMPTY_OBJECT } from './shared'; @@ -1007,74 +1002,60 @@ export const selectBalanceByWallet = (walletId: string) => }; }); -export const getAssetsBySelectedAccountGroup = createDeepEqualSelector( - ({ metamask }) => { - const initialState = { - accountTree: metamask.accountTree, - internalAccounts: metamask.internalAccounts, - allTokens: metamask.allTokens, - allIgnoredTokens: metamask.allIgnoredTokens, - tokenBalances: metamask.tokenBalances, - marketData: metamask.marketData, - currencyRates: metamask.currencyRates, - currentCurrency: metamask.currentCurrency, - networkConfigurationsByChainId: metamask.networkConfigurationsByChainId, - accountsByChainId: metamask.accountsByChainId, - }; - - let multichainState = { - accountsAssets: {}, - assetsMetadata: {}, - allIgnoredAssets: {}, - balances: {}, - conversionRates: {}, - }; - - ///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps) - multichainState = { - accountsAssets: metamask.accountsAssets, - assetsMetadata: metamask.assetsMetadata, - allIgnoredAssets: metamask.allIgnoredAssets, - balances: metamask.balances, - conversionRates: metamask.conversionRates, - }; - ///: END:ONLY_INCLUDE_IF - - return { - ...initialState, - ...multichainState, - }; - }, - (assetListState: AssetListState) => { - const assetsByAccountGroup = - selectAssetsBySelectedAccountGroup(assetListState); - - // Filter Tron tokens - const newAssetsByAccountGroup = { ...assetsByAccountGroup }; - Object.values(TrxScope).forEach((tronChainId) => { - if (!newAssetsByAccountGroup[tronChainId]) { - return; - } - - newAssetsByAccountGroup[tronChainId] = newAssetsByAccountGroup[ - tronChainId - ].filter((asset: Asset) => { - if ( - asset.chainId.startsWith('tron:') && - TRON_RESOURCE_SYMBOLS_SET.has( - asset.symbol?.toLowerCase() as TronResourceSymbol, - ) - ) { - return false; - } - return true; - }); - }); +// eslint-disable-next-line @typescript-eslint/no-explicit-any -- There is no type for the root state +const getStateForAssetSelector = ({ metamask }: any) => { + const initialState = { + accountTree: metamask.accountTree, + internalAccounts: metamask.internalAccounts, + allTokens: metamask.allTokens, + allIgnoredTokens: metamask.allIgnoredTokens, + tokenBalances: metamask.tokenBalances, + marketData: metamask.marketData, + currencyRates: metamask.currencyRates, + currentCurrency: metamask.currentCurrency, + networkConfigurationsByChainId: metamask.networkConfigurationsByChainId, + accountsByChainId: metamask.accountsByChainId, + }; + + let multichainState = { + accountsAssets: {}, + assetsMetadata: {}, + allIgnoredAssets: {}, + balances: {}, + conversionRates: {}, + }; + + ///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps) + multichainState = { + accountsAssets: metamask.accountsAssets, + assetsMetadata: metamask.assetsMetadata, + allIgnoredAssets: metamask.allIgnoredAssets, + balances: metamask.balances, + conversionRates: metamask.conversionRates, + }; + ///: END:ONLY_INCLUDE_IF + + return { + ...initialState, + ...multichainState, + } as AssetListState; +}; - return newAssetsByAccountGroup; - }, +export const getAssetsBySelectedAccountGroup = createDeepEqualSelector( + getStateForAssetSelector, + (assetListState: AssetListState) => + selectAssetsBySelectedAccountGroup(assetListState), ); +export const getAssetsBySelectedAccountGroupWithTronResources = + createDeepEqualSelector( + getStateForAssetSelector, + (assetListState: AssetListState) => + selectAssetsBySelectedAccountGroup(assetListState, { + filterTronStakedTokens: false, + }), + ); + export const getAsset = createSelector( [ getAssetsBySelectedAccountGroup,