diff --git a/src/popup/views/settings.js b/src/popup/views/settings.js index 9bae55a..497a3d2 100644 --- a/src/popup/views/settings.js +++ b/src/popup/views/settings.js @@ -2,6 +2,7 @@ const { $, showView, showFlash, escapeHtml } = require("./helpers"); const { applyTheme } = require("../theme"); const { state, saveState, currentNetwork } = require("../../shared/state"); const { NETWORKS, SUPPORTED_CHAIN_IDS } = require("../../shared/networks"); +const { clearPrices } = require("../../shared/prices"); const { log, debugFetch } = require("../../shared/log"); const deleteWallet = require("./deleteWallet"); @@ -227,6 +228,7 @@ function init(ctx) { state.blockscoutUrl = net.defaultBlockscoutUrl; $("settings-rpc").value = state.rpcUrl; $("settings-blockscout").value = state.blockscoutUrl; + if (net.isTestnet) clearPrices(); await saveState(); showFlash("Switched to " + net.name + "."); }); diff --git a/src/shared/prices.js b/src/shared/prices.js index 363f40c..a80bc89 100644 --- a/src/shared/prices.js +++ b/src/shared/prices.js @@ -8,9 +8,13 @@ const prices = {}; let lastFetchedAt = 0; async function refreshPrices() { - // Testnet tokens have no real market value — skip price fetching. + // Testnet tokens have no real market value — skip price fetching + // and clear any stale mainnet prices so the UI shows no USD values. const { currentNetwork } = require("./state"); - if (currentNetwork().isTestnet) return; + if (currentNetwork().isTestnet) { + clearPrices(); + return; + } const now = Date.now(); if (now - lastFetchedAt < PRICE_CACHE_TTL) return; try { @@ -22,7 +26,16 @@ async function refreshPrices() { } } +function clearPrices() { + for (const key of Object.keys(prices)) { + delete prices[key]; + } + lastFetchedAt = 0; +} + function getPrice(symbol) { + const { currentNetwork } = require("./state"); + if (currentNetwork().isTestnet) return null; return prices[symbol] || null; } @@ -40,6 +53,8 @@ function formatUsd(amount) { } function getAddressValueUsd(addr) { + const { currentNetwork } = require("./state"); + if (currentNetwork().isTestnet) return null; if (!prices.ETH) return null; let total = 0; const ethBal = parseFloat(addr.balance || "0"); @@ -54,6 +69,8 @@ function getAddressValueUsd(addr) { } function getWalletValueUsd(wallet) { + const { currentNetwork } = require("./state"); + if (currentNetwork().isTestnet) return null; if (!prices.ETH) return null; let total = 0; for (const addr of wallet.addresses) { @@ -63,6 +80,8 @@ function getWalletValueUsd(wallet) { } function getTotalValueUsd(wallets) { + const { currentNetwork } = require("./state"); + if (currentNetwork().isTestnet) return null; if (!prices.ETH) return null; let total = 0; for (const wallet of wallets) { @@ -74,6 +93,7 @@ function getTotalValueUsd(wallets) { module.exports = { prices, refreshPrices, + clearPrices, getPrice, formatUsd, getAddressValueUsd,