Nutshell 0.20.3
Caution
This release includes a database migration for the mint (and wallet). Ensure you back up your database before upgrading your Nutshell instance to avoid data loss.
Nutshell 0.20.3 adds P2BK and Spark support, plus mint UX and reliability improvements.
Notable Changes
Mint
- NUT-28 P2BK (Pay-to-Blinded-Key): lock ecash to a receiver without revealing their pubkey to the mint (silent payments / payment unlinkability).
- Spark L2 wallet backend for Lightning payments via Spark.
- Interactive HTML landing page at the mint root route (
/) showing mint info, limits, contacts, and supported NUTs. methodfield on mint/melt quote responses (spec alignment).- Management RPC:
GetKeyset/GetKeysetswith issued liabilities and fees; matchingmint-clisubcommands. - NUT-11
sig_allmessage aggregation extended to match the latest spec. - NUT-20/29 signatures aligned with the current spec (incl. test vectors).
- Async melt race fixed: durable
PENDINGis committed before the HTTP response so clients don’t see a false terminalUNPAID. - Melt change cleanup: orphan blank outputs are deleted on early-return paths (fixes restore collisions).
- Batch mint
issued_timeand legacy base64url keyset ID handling fixed. - Docker Compose Redis bound to localhost only.
Wallet
- NUT-28 P2BK support for creating and receiving P2BK-locked tokens.
cashu send --timelock/-t: per-send locktime override (matchescashu lock p2pk).- Missing mint keysets are marked deleted instead of leaving stale active state.
What's Changed
- Mark Keysets as Deleted. by @KvngMikey in #797
- feat(mint): add method field to quote responses. by @KvngMikey in #1055
- Remove paid field in MeltQuote by @KvngMikey in #1024
- feat(mint): add keyset and keysets endpoints to management RPC with issued liabilities by @a1denvalu3 in #1078
- fix(docker): restrict redis access to localhost in compose by @a1denvalu3 in #1079
- extend and refactor nut11 sig_all message aggregation by @callebtc in #811
- feat(crypto): align NUT-20/29 signatures with spec and add test vectors by @a1denvalu3 in #1057
- feat(mint): add interactive html landing page at root route by @a1denvalu3 in #1077
- feat: support NUT-28 P2BK by @KvngMikey in #950
- feat(mint): Add Spark L2 wallet backend by @a1denvalu3 in #1019
- fix(mint): delete orphan blank outputs on melt change early-return by @gorrdy in #1016
- fix: await ledger.melt() call in test_melt_quote_reuse_same_outputs by @vicjuma in #1080
- chore: retire legacy curve mapping by @a1denvalu3 in #1082
- fix: complete remaining Pydantic v1 to v2 migration by @vicjuma in #1084
- fix(mint): commit PENDING before async melt response by @callebtc in #1087
- fix: handle batch mint times and base64url keysets by @a1denvalu3 in #1091
- refactor(mint): recalculate DLEQs on restore by @a1denvalu3 in #1085
- feat(cli): add --timelock/-t option to send command by @KvngMikey in #1090
- chore(release): bump version to 0.20.3 by @callebtc in #1093
New Contributors
Full Changelog: 0.20.2...0.20.3