mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 00:16:59 +00:00
The Cashu "Add wallet" screen had become a mint manager, and its Create path published a fresh kind:17375 that could clobber a portable NIP-60 wallet the user already owned in another client (kind:17375 is replaceable). When no wallet is loaded, drive the user into a new find-or-create wizard that crawls every relay (modeled on the Event Sync tool) for the user's existing kind:17375 wallets and branches on the result: - 0 wallets: offer to create a new one. - 1 wallet: verify + balance-probe it, adopt as the main wallet and rebroadcast to outbox so it's easy to find next time. - >1 wallets: the newest becomes the main wallet; older/duplicate wallets are verified, their recoverable balances probed via NUT-09/NUT-07, and the user gets one-tap "Recover funds to main wallet" per old wallet. The mint manager (AddCashuWalletScreen) is now reachable only from Cashu Wallet Settings, once a wallet exists; the no-wallet and "add wallet" picker paths route through the wizard instead. Implementation: - Split CashuWalletOps.restoreFromMint into scanRecoverableProofs (no publish, for the balance probe) + publishRecoveredProofs; foreign-seed recovery never bumps the main wallet's NUT-13 counter. - New CashuWalletDiscovery crawler reuses fetchAllPages + a fresh NostrClient so crawled events don't pollute LocalCache. - CashuWalletState gains decrypt/probe/recover/adopt helpers. - Extract AccountViewModel's relay-crawl closures (crawlRelayDb, buildCrawlClient) so Event Sync and the wizard share them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqmMR2QiULS5QGosSgSQAe