mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-04 22:04:38 +00:00
Complete the Cashu command surface, every verb a thin wrapper over the shared commons CashuWalletOps the Android wallet runs: cashu receive ln SATS [--mint] start mint, return bolt11 + kind:7374 cashu receive complete QUOTE_ID poll mint; on settle, mint proofs cashu receive resume QUOTE_ID alias of complete cashu receive token TOKEN redeem a cashuB token cashu receive nutzap-sweep [--mint] redeem inbound NIP-61 nutzaps cashu send ln INVOICE [--mint] melt to a bolt11 (scrubs first) cashu send token SATS [--mint --memo] export a cashuB token (scrubs first) cashu send nutzap USER SATS [--zapped --message] P2PK-locked nutzap cashu maintenance scrub [--mint] NUT-07 + NIP-09 prune spent proofs cashu maintenance restore MINT_URL NUT-09 restore from seed cashu maintenance migrate-keysets [--mint] consolidate onto active keyset cashu mint-rec show [--author] / add URL [--dtag --review] / remove ID - scrubStaleProofs extracted into CashuWalletOps so Android's CashuWalletState.scrubLocallyStaleProofs and amy share one impl. - Context.cashuRestore mirrors CashuWalletState.restoreFromMint (seed + NUT-13 counter bump); Context.cashuSeed warms the per-run seed. - receive complete recovers the mint amount by decoding the quote's bolt11 (kind:7374 stores only the quote id), so it works statelessly. Verified against mint.minibits.cash + live relays: receive ln returns a real invoice, complete/resume poll a pending quote, mint-rec round-trips, and every error path (insufficient_funds, no_mint, mint_quote_gone) is clean. Happy-path mint/melt completions need a payable bolt11 (interop harness, PR 9). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011SapGdtAc1j7woifoCZ9fY