Releases: cashubtc/cdk
v0.17.1
0.17.1
Fixed
- cdk: Token handling now decodes proofs from inactive keysets when redeeming or inspecting tokens ([thesimplekid]).
- cdk: Issue saga recovery treats mint input and output limit errors as definitive failures instead of falling back to restore ([thesimplekid]).
- cdk-cln: Persist CLN Bolt12 quote lookup IDs before payment so pending payments can be checked after restart ([thesimplekid]).
- cdk-ldk-node: Release reserved proofs when pending LDK payments fail during melt recovery ([thesimplekid]).
v0.17.0
Caution
This release includes a database migration for the mint. Ensure you back up your database before upgrading your mint instance to avoid data loss
0.17.0
Summary
Version 0.17.0 introduces NUT-30 on-chain payment support and a new BDK-backed on-chain payment backend. This release expands mint operation with multiple payment backends per currency unit, Redis Cluster cache support, seed-file startup, and new management RPC fields. Wallet flows gain stronger payment request routing, P2PK signing key support, token-based melt preparation, configurable Nostr restore options, and broader saga recovery hardening.
Key highlights include:
- NUT-30 On-chain Payments: Protocol types and wallet/mint support for on-chain mint and melt flows.
- BDK Backend: New
cdk-bdkcrate with Bitcoin Core RPC and Esplora chain-source support, fee tiers, confirmation tracking, and regtest wiring. - Mint Backend Flexibility:
cdk-mintdcan configure multiple payment backends per currency unit and load seeds from a file. - LNbits Deprecation Notice: Version 0.17.0 is the final CDK release that supports the LNbits backend.
- Language Binding Releases: Kotlin JVM, Go, Dart, and Swift binding release workflows were added or improved.
- Security Hardening: Additional validation for tokens, NUT-26 TLVs, P2PK/refund conditions, CATs, DLEQ proofs, proxy setup, LNURL callbacks, and Lightning address metadata.
- Recovery and Reliability: Wallet and mint saga recovery, async melt finalization, WebSocket cleanup, SQL migrations, and Lightning backend accounting were hardened.
Added
- cashu: NUT-30 on-chain payment method types for mint and melt quotes, fee options, selected fee indexes, and quote state notifications (thesimplekid).
- cdk: On-chain mint and melt support across wallet, mint, HTTP client, subscriptions, and integration tests (thesimplekid).
- cdk-bdk: New BDK payment backend with Bitcoin Core RPC and Esplora chain sources, BIP84 wallet derivation, fee estimation, batching scaffolding, and recovery handling (thesimplekid).
- cdk-mintd: BDK backend configuration, on-chain regtest wiring, backend limits, and seed-file startup support (thesimplekid/[asmo]).
- cdk-mintd: Multiple Lightning payment backends per currency unit ([asmo]).
- cdk-axum: Redis Cluster support for the cache backend ([GEET3001]).
- cdk:
Wallet::prepare_melt_token()to prepare melts from encoded tokens directly ([Forte11Cuba]). - cdk:
RestoreOptionsfor tuning Nostr wallet restore behavior ([Forte11Cuba]). - cdk: P2PK signing key support for wallet sends and persisted wallet keys (vnprc).
- cdk:
mintsfield support when creating NUT-18 payment requests ([a1denvalu3]). - cdk: Generic async payment events and
QuoteIdidentifiers for payment backends (thesimplekid). - cdk:
load_from_dbsupport forMintMetadataCache(crodas). - cdk-fake-wallet: Custom payment method support and on-chain test support (thesimplekid).
- cdk-mint-rpc:
tos_urlinGetInfoResponseandUpdateTosUrlmanagement RPC support (crodas). - cdk-ffi: Kotlin JVM bindings and publication pipeline (#1797) (crodas).
- cdk-ffi: Go bindings, Dart publish workflow with prebuilt binary support, Swift CI-built XCFramework release flow, and unified FFI binding release workflows (crodas).
- fuzz: Additional fuzz targets for token conversion, keyset derivation, DLEQ, P2PK, HTLC, short keyset IDs, and structured Cashu types (thesimplekid).
Changed
- cdk-supabase: BREAKING - Wallet encryption keys are now derived with scrypt and tracked with migration metadata (thesimplekid/[asmo]).
- cdk: On-chain melt fee selection now uses explicit
fee_indexvalues and exposes multiple fee options per quote (thesimplekid). - cdk: Quote IDs use UUID v7 for better database locality (thesimplekid).
- cdk:
payment_preimagefields were renamed topayment_proofin wallet and mint quote storage (thesimplekid). - cdk-common:
wait_invoicepayment backend APIs were renamed topayment_event_streamand use event-driven payment handling (thesimplekid). - cdk: Mint and melt quote handling now uses polymorphic quote enums for method-specific behavior (thesimplekid).
- cdk: Locked-proof send handling now uses an explicit send mode instead of a passthrough boolean (thesimplekid).
- cdk: Keyset expiry is enforced for mint operations ([gudnuf]).
- cdk-cln: CLN backend amount handling now uses millisatoshis (thesimplekid).
- cdk-lnbits: LNbits dependency and v1 integration paths were updated; this is the final release that supports the LNbits backend (thesimplekid).
- cdk-prometheus: Metrics accounting and in-flight metric handling were reworked (thesimplekid/[asmo]).
- ci: Release and binding workflows were hardened, moved to newer Node actions, and gained pre-release handling (thesimplekid/crodas).
Fixed
- cashu: Reject duplicate NUT-01 amount keys, duplicate token proof secrets, duplicate NUT-26 NUT-10 fields, and oversized NUT-26 TLV lengths (thesimplekid).
- cashu: Token decoding and byte-slice parsing now fail safely instead of panicking on invalid input (thesimplekid).
- cdk: Reject CATs without client binding, DLEQ tokens from other mints, invalid refund tags, zero-signature spending conditions, and signature amount mismatches in sagas (thesimplekid).
- cdk: Validate custom payment method paths, LNURL callback invoices, Lightning address components and metadata, and DNSSEC behavior outside Tor (thesimplekid).
- cdk: Auth keyset handling now enforces auth-only keysets, preserves wildcard endpoint matching, returns active auth keyset pubkeys, and keeps auth metadata cache TTLs (thesimplekid).
- cdk: Wallet builder seeds are zeroized on drop and npubcash quotes no longer persist wallet seed bytes (thesimplekid).
- cdk: Wallet saga recovery now handles async melt finalization, failed melt confirms, send rollback, pending-spent proofs, fast-path swap recovery, and confirmed send cancellation correctly (thesimplekid).
- cdk: Wallet proof reservation for sends and pending melt transaction proofs is scoped more narrowly to avoid locking unrelated proofs (thesimplekid).
- cdk: Payment requests without a unit now default to sat and payment request mint filtering is applied when selecting wallets (thesimplekid).
- cdk: Mint LND melt spend accounting, blind-auth expiry checks, quote signature ordering, paid melt quote change ordering, and batch mint quote subscription snapshots were corrected (thesimplekid/[a1denvalu3]).
- cdk: Split amounts must be non-zero and coin selection with locked proofs was corrected (thesimplekid).
- cdk-ldk-node: Bolt12 mint and melt handling, outgoing routing-fee accounting, pending payment resolution, and incoming offer lookup were stabilized (thesimplekid).
- cdk-ldk-node: Dashboard amount conversions were checked, CSRF/dashboard hardening was added, and Docker binding defaults to localhost (thesimplekid).
- cdk-lnd: Mint quote TTL is honored on invoices and no-route MPP errors are surfaced (thesimplekid).
- cdk-axum: WebSocket connection and subscription limits are enforced, unsubscribe cleanup cancels background tasks, notification decoding respects subscription kind, and cache growth is bounded (thesimplekid).
- cdk-mintd: Multi-unit environment variables, multiple keyset rotations, backend support checks, CLN bare-tilde RPC paths, and management RPC env vars were fixed (thesimplekid).
- cdk-cli: Balance output is scoped by unit, npubcash mint selection is pinned, and idle timeout behavior was fixed (thesimplekid).
- cdk-ffi: FFI conversions now surface errors instead of panicking, mint info conversion errors propagate, placeholder key values were removed, and runtime handling was consolidated (thesimplekid/crodas).
- cdk-sql-common: Vector binds bypass cached statements, empty
INclause guards are centralized, melt quote indexes and migrations were repaired, and blind signature order indexes were added (thesimplekid/crodas/[Forte11Cuba]). - cdk-postgres: Failed setup connections are marked stale and PostgreSQL config debug output is redacted (thesimplekid).
- cdk-redb: Keyset counter overflow is rejected (thesimplekid).
- cdk-supabase: RPC function names are encoded and wallet persistence tests/migrations were hardened (thesimplekid/[asmo]).
- cdk-payment-processor: Mint quote IDs are propagated to payment backends ([Dario]).
- cdk-prometheus: Metric wrappers and in-flight metric accounting were corrected (thesimplekid/[asmo]).
Removed
- cdk-axum: Removed Swagger/OpenAPI support (thesimplekid).
- cdk: Removed duplicate exported types now provided by shared crates (thesimplekid).
- dev: Removed the dead Greenlight command path (thesimplekid).
New Contributors
- @b-l-u-e made their first contribution in #1859
- @orangeshyguy21 made their first contribution in #1884
- @zeugmaster made their first contribution in #1973
- @GEET3001 made their first contribution in #1936
Full Changelog: v0.16.0...v0.17.0
[ben...
v0.17.0-rc.3
v0.17.0-rc.3
v0.17.0-rc.0
v0.17.0-rc.0
v0.16.0
0.16.0
Summary
Version 0.16.0 introduces NUT-28 (Pay-to-Blinded-Key) and NUT-29 (Batch Minting) as significant protocol enhancements. This release also brings BIP-321 (Bitcoin Payment Requests) support and BIP-353 resolution in the CLI. A major architectural refinement introduces the WalletTrait, unifying core and FFI wallet implementations.
Key highlights include:
- NUT-28 (Pay-to-Blinded-Key): Privacy-enhancing P2PK variant that blinds keys before spending.
- NUT-29 (Batch Minting): Support for batching mint quotes for improved efficiency.
- BIP-321 Support: Complete parsing and creation of Bitcoin payment requests (BIP-321).
- WalletTrait: Unified abstraction for all wallet types, simplifying integrations and FFI bindings.
- Improved WASM Support: Refactored WebSocket client and time handling for better browser compatibility.
- CLI Enhancements: BIP-353 resolution, NUT-26 PR support, and improved mint management commands.
Added
- cdk: NUT-29 Batch Minting support (#1698) (thesimplekid).
- cdk: NUT-28 Pay-to-Blinded-Key (P2BK) support (#1253, #1729) (lollerfirst).
- cdk: BIP-321 (Bitcoin Payment Requests) parsing and creation (#1716) (thesimplekid).
- cdk:
WalletTraitshared between core and FFI wallets for improved architectural consistency (#1581) (crodas). - cdk: WASM-compatible WebSocket client abstraction (#1615) (crodas).
- cdk: Added
inactive/expiredkeysets toMintBuilder(crodas). - cdk: Added
config_unittoMintBuilder(#1659) (thesimplekid). - cdk: Added
get_mint_quotesto the mint database trait (#1689) (thesimplekid). - cdk: Added MacOS builds to the automated release process (#1702) (thesimplekid).
- cdk: Subscribe to mint quote state changes in FFI bindings (#1725) (Forte11Cuba).
- cdk: Add
to_bech32_stringto FFI (#1712) (thesimplekid). - cdk: Store Nostr payment request information (#1732) (thesimplekid).
- cdk: Add keys and mint info to mock connector for testing (#1727) (thesimplekid).
- cdk: Add keyset methods to
WalletTraitand FFI (#1789) (crodas). - cdk: Add Supabase wallet database backend (#1540) ([asmogo]).
- cdk-cli: BIP-353 human-readable address resolution (#1739) (thesimplekid).
- cdk-cli: NUT-26 Payment Request CLI subcommands (#1731) (thesimplekid).
- cdk-cli: Recover from incomplete saga command (#1674) (thesimplekid).
- cdk-mintd: Home page and footer with custodial information (#1760, #1771) (thesimplekid).
- cdk-mintd: Add
expose_private_channelsconfiguration for CLN backend (#1758) (4xvgal). - cdk(wallet): P2PK Receive wallet keyring (#1466) ((lescuer97).
Changed
- cdk: BREAKING - Unified
meltandmelt_asynclogic in the mint implementation (#1715) (0xEgao). - cdk: BREAKING - NUT-18 payment requests now use
Vec<T>instead ofOption<Vec<T>>for better consistency (#1664) (Forte11Cuba). - cdk: Upgraded
redbto version 3.0.0 (#1672) (thesimplekid). - cdk: Align signatory keyset derivation with the remote signer specification (#1257) (lescuer97).
- cdk: For mint quotes, use enum for mint connector selection (#1708) (thesimplekid).
- cdk: Replaced
TryFrom<MeltQuote>with a directOutgoingPaymentOptionsfunction for cleaner API (#1724) (TheMhv). - cdk: Use amount with unit in gRPC communication (#1616) (thesimplekid).
- cdk: Remove default features of
hyper-rustlsto reduce binary size and dependencies (#1768) (thesimplekid). - cdk: Static release builds for all platforms (#1683) (thesimplekid).
- cdk: Tor service default configuration (#1449) (gandlafbtc).
- cdk: Inject version header at client level instead of per request (#1766) (Forte11Cuba).
- cdk: Moved spending conditions implementation to
nut10module for better organization (#1714) (TheMhv). - cdk-lnd: Update lnd proto file (#1656)) ((lescuer97).
Fixed
- cdk: Auth token (NUT-22) no longer requires base64 padding for better compatibility (#1755) (crodas).
- cdk: Wallet restore now scans all keysets, including inactive ones, to prevent missed funds (#1753) (crodas).
- cdk: Correctly filter sagas and quotes by wallet unit and mint URL (#1759) (thesimplekid).
- cdk: Ensure
extra_jsonis persisted onmint_quotesin SQL backends (#1742) (vnprc). - cdk: Publish pubsub notifications only after successful transaction commit (thesimplekid).
- cdk: Allow denomination reuse in amount split for restricted keysets (#1676) (thesimplekid).
- cdk: Compensate for failed sagas in the mint to ensure consistency (#1675) (thesimplekid).
- cdk: Fixed saga proof reservation in the wallet to prevent accidental spending during pending operations (#1728) (thesimplekid).
- cdk: Pass currency unit through protobuf instead of hardcoding Msat in
MakePayment(#1673) (crodas). - cdk: Fixed wallet validation for impossible multisig and refund configurations (#1711) (ritoban23).
- cdk: Handle WASM compatibility in WebSocket client and time handling (#1615, #1662) (crodas).
- cashu: Accept first tag in spending condition if multiple are provided (#1805) (thesimplekid).
- cdk-axum: CORS preflight now allows all headers instead of hardcoded list (#1798) (robwoodgate).
- cdk-mint-rpc: Added missing version header to all mint RPC CLI subcommands (#1764) (thesimplekid).
Removed
- cdk: Remove
output_already_signed(#1690) (thesimplekid). - cdk: Remove redundant unit field from
get_payment_quote(#1704) (thesimplekid). - cdk: Remove deprecated
promisesfield fromRestoreResponse(#1663) (Forte11Cuba).
New Contributors
- @Forte11Cuba made their first contribution in #1663
- @TheMhv made their first contribution in #1696
- @ritoban23 made their first contribution in #1711
- @0xEgao made their first contribution in #1715
- @4xvgal made their first contribution in #1758
- @robwoodgate made their first contribution in #1798
Full Changelog: v0.15.1...v0.16.0
v0.16.0-rc.4
v0.16.0-rc.4
v0.16.0-rc.3
v0.16.0-rc.3
v0.16.0-rc.2
v0.16.0-rc.2
v0.16.0-rc.1
0.16.0
Summary
Version 0.16.0 introduces NUT-28 (Pay-to-Blinded-Key) and NUT-29 (Batch Minting) as significant protocol enhancements. This release also brings BIP-321 (Bitcoin Payment Requests) support and BIP-353 resolution in the CLI. A major architectural refinement introduces the WalletTrait, unifying core and FFI wallet implementations.
Key highlights include:
- NUT-28 (Pay-to-Blinded-Key): Privacy-enhancing P2PK variant that blinds keys before spending.
- NUT-29 (Batch Minting): Support for batching mint quotes for improved efficiency.
- BIP-321 Support: Complete parsing and creation of Bitcoin payment requests (BIP-321).
- WalletTrait: Unified abstraction for all wallet types, simplifying integrations and FFI bindings.
- Improved WASM Support: Refactored WebSocket client and time handling for better browser compatibility.
- CLI Enhancements: BIP-353 resolution, NUT-26 PR support, and improved mint management commands.
Added
- cdk: NUT-29 Batch Minting support (#1698) ([thesimplekid]).
- cdk: NUT-28 Pay-to-Blinded-Key (P2BK) support (#1253, #1729) ([lollerfirst]).
- cdk: BIP-321 (Bitcoin Payment Requests) parsing and creation (#1716) ([thesimplekid]).
- cdk:
WalletTraitshared between core and FFI wallets for improved architectural consistency (#1581) ([crodas]). - cdk: WASM-compatible WebSocket client abstraction (#1615) ([crodas]).
- cdk: Added
inactive/expiredkeysets toMintBuilder([crodas]). - cdk: Added
config_unittoMintBuilder(#1659) ([thesimplekid]). - cdk: Added
get_mint_quotesto the mint database trait (#1689) ([thesimplekid]). - cdk: Added MacOS builds to the automated release process (#1702) ([thesimplekid]).
- cdk: Subscribe to mint quote state changes in FFI bindings (#1725) ([Forte11Cuba]).
- cdk: Add
to_bech32_stringto FFI (#1712) ([thesimplekid]). - cdk: Store Nostr payment request information (#1732) ([thesimplekid]).
- cdk: Add keys and mint info to mock connector for testing (#1727) ([thesimplekid]).
- cdk-cli: BIP-353 human-readable address resolution (#1739) ([thesimplekid]).
- cdk-cli: NUT-26 Payment Request CLI subcommands (#1731) ([thesimplekid]).
- cdk-cli: Recover from incomplete saga command (#1674) ([thesimplekid]).
- cdk-mintd: Home page and footer with custodial information (#1760, #1771) ([thesimplekid]).
- cdk-mintd: Add
expose_private_channelsconfiguration for CLN backend (#1758) ([4xvgal]).
Changed
- cdk: BREAKING - Unified
meltandmelt_asynclogic in the mint implementation (#1715) ([0xEgao]). - cdk: BREAKING - NUT-18 payment requests now use
Vec<T>instead ofOption<Vec<T>>for better consistency (#1664) ([Forte11Cuba]). - cdk: Upgraded
redbto version 3.0.0 (#1672) ([thesimplekid]). - cdk: Align signatory keyset derivation with the remote signer specification (#1257) ([lescuer97]).
- cdk: For mint quotes, use enum for mint connector selection (#1708) ([thesimplekid]).
- cdk: Replaced
TryFrom<MeltQuote>with a directOutgoingPaymentOptionsfunction for cleaner API (#1724) ([TheMhv]). - cdk: Use amount with unit in gRPC communication (#1616) ([thesimplekid]).
- cdk: Remove default features of
hyper-rustlsto reduce binary size and dependencies (#1768) ([thesimplekid]). - cdk: Static release builds for all platforms (#1683) ([thesimplekid]).
- cdk: Tor service default configuration (#1449) ([gandlafbtc]).
- cdk: Inject version header at client level instead of per request (#1766) ([Forte11Cuba]).
- cdk: Moved spending conditions implementation to
nut10module for better organization (#1714) ([TheMhv]).
Fixed
- cdk: Auth token (NUT-22) no longer requires base64 padding for better compatibility (#1755) ([crodas]).
- cdk: Wallet restore now scans all keysets, including inactive ones, to prevent missed funds (#1753) ([crodas]).
- cdk: Correctly filter sagas and quotes by wallet unit and mint URL (#1759) ([thesimplekid]).
- cdk: Ensure
extra_jsonis persisted onmint_quotesin SQL backends (#1742) ([vnprc]). - cdk: Publish pubsub notifications only after successful transaction commit ([thesimplekid]).
- cdk: Allow denomination reuse in amount split for restricted keysets (#1676) ([thesimplekid]).
- cdk: Compensate for failed sagas in the mint to ensure consistency (#1675) ([thesimplekid]).
- cdk: Fixed saga proof reservation in the wallet to prevent accidental spending during pending operations (#1728) ([thesimplekid]).
- cdk: Pass currency unit through protobuf instead of hardcoding Msat in
MakePayment(#1673) ([crodas]). - cdk: Fixed wallet validation for impossible multisig and refund configurations (#1711) ([ritoban23]).
- cdk: Handle WASM compatibility in WebSocket client and time handling (#1615, #1662) ([crodas]).
- cdk-mint-rpc: Added missing version header to all mint RPC CLI subcommands (#1764) ([thesimplekid]).
Removed
- cdk: Remove
output_already_signed(#1690) ([thesimplekid]). - cdk: Remove redundant unit field from
get_payment_quote(#1704) ([thesimplekid]). - cdk: Remove deprecated
promisesfield fromRestoreResponse(#1663) ([Forte11Cuba]).
New Contributors
- @Forte11Cuba made their first contribution in #1663
- @TheMhv made their first contribution in #1696
- @ritoban23 made their first contribution in #1711
- @0xEgao made their first contribution in #1715
- @4xvgal made their first contribution in #1758
Full Changelog: v0.15.1...v0.16.0-rc.0
v0.15.2-rc.0
0.15.2
Added
- cdk-ffi: Export
to_bech32_stringfor payment requests ([thesimplekid]) - cdk-cli: Add
recover-incomplete-sagascommand to recover from interrupted wallet operations ([thesimplekid])
Fixed
- cashu: Allow denomination reuse in amount split for restricted keysets ([thesimplekid])
- cdk: Compensate prepared saga in mint ([thesimplekid])