From 00a0be5fcd8157f145c63df44982b4f74960c815 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 17 Aug 2026 14:44:26 -0700 Subject: A snapshot only counts on its own network: the seed-keyed cache stops showing mainnet money under a mutinynet flag, and staging forgives the mainnet default it stamped before it knew better Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz --- src/api.js | 11 +++++++++++ src/wallet.js | 7 ++++++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/api.js b/src/api.js index c020a0c..5917234 100644 --- a/src/api.js +++ b/src/api.js @@ -31,6 +31,17 @@ export function setExplorerConfig({ server, url }, net = getNetwork()) { // blocks) for testing — same address format as testnet, its own explorer at // mutinynet.com. Data-source choices are stored per network (see nk()). const NETWORK_KEY = 'btc-wallet-network'; +// Staging's default is mutinynet, but a "mainnet" stored BEFORE the staging +// flag existed would pin early testers to mainnet forever. Clear it once — +// anyone who picks mainnet on staging after this keeps their choice. +if (STAGING) { + try { + if (!localStorage.getItem(NETWORK_KEY + '-staged')) { + localStorage.setItem(NETWORK_KEY + '-staged', '1'); + if (localStorage.getItem(NETWORK_KEY) === 'mainnet') localStorage.removeItem(NETWORK_KEY); + } + } catch {} +} export const NETWORKS = [ { id: 'mainnet', label: 'Mainnet' }, { id: 'testnet', label: 'Testnet' }, diff --git a/src/wallet.js b/src/wallet.js index cdae1ff..cce0a45 100644 --- a/src/wallet.js +++ b/src/wallet.js @@ -1871,7 +1871,12 @@ export class Wallet { // cache yet — fall back to the xpub mirror so it shows instantly. if (!raw && !this.watchOnly) raw = localStorage.getItem(this._xpubCacheKey()); if (!raw) return false; - this._applySnapshot(JSON.parse(raw)); + const snap = JSON.parse(raw); + // The seed-keyed cache slot is shared across networks (the key hashes + // only the seed), so a wallet switched to mutinynet would restore — and + // show — its mainnet balance. A snapshot only counts on its own network. + if (snap.netName && snap.netName !== this.netName) return false; + this._applySnapshot(snap); this.emit(); return true; } catch { -- cgit v1.2.3