Releases: cashubtc/cdk
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])
v0.15.1
v0.15.0
0.15.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
Summary
Version 0.15.0 introduces Wallet Sagas, a major architectural improvement that brings the saga pattern to all wallet operations for robust error recovery and crash resilience. This release also adds async wallet operations support and NUT-26 (Payment Request Bech32m Encoding) for compatibility with BIP-321 and BIP-353 human-readable addresses.
Key highlights include:
- Wallet Sagas: All wallet operations (mint, melt, send, receive, swap) now use the saga pattern with type-state safety and automatic compensation actions
- Melt Flow Redesign: New two-phase prepare/confirm pattern for melts with
PreparedMelt, similar toPreparedSend - Async Wallet Operations: Non-blocking melt operations via
preferfield - returns immediately with aPendingMeltfuture that can be awaited immediately OR dropped to complete via WebSocket notifications or background recovery - NUT-26: Payment Request Bech32m Encoding support (CREQ-B format) - provides better QR code compatibility and enables integration with BIP-321/BIP-353 human-readable addresses
- Breaking Change: MultiMintWallet has been removed - use
WalletRepositoryinstead - Authentication (NUT-21/NUT-22) is now always enabled - the
authfeature flag has been removed - Keyset V2 is now the default for new keysets
Added
- cdk: Wallet saga pattern for all wallet operations (mint, melt, send, receive, swap) with type-state pattern and compensation actions ([thesimplekid]).
- cdk:
Wallet::recover_incomplete_sagas()method to recover from interrupted operations and prevent proofs from being stuck in reserved states ([thesimplekid]). - cdk:
Wallet::prepare_melt()andWallet::prepare_melt_proofs()to createPreparedMeltfor two-phase melt operations ([thesimplekid]). - cdk:
PreparedMeltwithconfirm(),confirm_with_options(),confirm_prefer_async(), andcancel()methods for controlled melt execution ([thesimplekid]). - cdk:
MeltConfirmOptionsto configure melt behavior (e.g.,skip_swap) ([thesimplekid]). - cdk:
MeltOutcomeenum withPaid(immediate completion) orPendingvariants -Pendingreturns aPendingMeltthat can be awaited immediately OR dropped to complete via WebSocket notifications orWallet::finalize_pending_melts()([thesimplekid]). - cdk:
PendingMeltstruct that implementsIntoFuturefor awaiting async melt completion ([thesimplekid]). - cdk:
Wallet::finalize_pending_melts()to recover and complete pending melt operations after crash ([thesimplekid]). - cdk: Async wallet operations support using
preferfield in request body ([thesimplekid]). - cdk: NUT-26 Payment Request Bech32m Encoding support (CREQ-B format as an alternative to NUT-18's CREQ-A) ([thesimplekid]).
- cdk:
WalletRepositoryas a simpler replacement for MultiMintWallet - manages Wallet instances by mint URL and currency unit with direct access to Wallet methods ([asmo]). - cdk:
WalletRepositoryBuilderfor constructing WalletRepository with configurable proxy, Tor, and database settings ([asmo]). - cdk:
WalletConfigfor per-wallet customization of connectors, target proof counts, and metadata cache TTL ([asmo]). - cdk:
TokenDatastruct for extracting mint URL, proofs, and metadata from parsed tokens ([asmo]). - cdk: Keyset V2 configuration with
use_keyset_v2setting - defaults to V2 for new keysets while preserving existing keyset versions ([thesimplekid]). - cdk: Input and output limits for swap, melt, and other transactions to prevent DoS attacks ([thesimplekid]).
- cdk: Glob pattern support for NUT-21/22 route validation ([thesimplekid]).
- cdk:
Wallet::fetch_mint_quote()method to retrieve mint quote by ID ([asmo]). - cdk-ldk-node: BIP39 mnemonic seed configuration ([asmo]).
- cdk-ldk-node: Configurable announcement addresses ([asmo]).
- cdk-ldk-node: Configurable logging settings ([asmo]).
Changed
- cdk: BREAKING - Removed
MultiMintWalletand all its methods - useWalletRepositoryinstead for managing multiple wallets ([asmo]). - cdk: BREAKING - Removed
authfeature flag - authentication code (NUT-21/NUT-22) is now always compiled ([crodas]). - cdk: Melt operations now use the saga pattern with type-state safety and automatic compensation on failure ([thesimplekid]).
- cdk:
PreparedMelt,PreparedSend, and other prepared structs marked with#[must_use]to prevent accidental drops ([thesimplekid]). - cashu: Default features are now off ([thesimplekid]).
- cdk-common: Abstracted HTTP client behind
cdk_common::HttpClient([crodas]).
Fixed
- cdk: Fee conversion in payment backend ([thesimplekid]).
- cdk: Mint publishes quote back to unpaid state on failure ([thesimplekid]).
- cdk: Add error code for input and output limits ([thesimplekid]).
- cdk-sqlite: Correct SQLite connection pool size check ([crodas]).
Removed
- cdk: MultiMintWallet and all associated methods ([asmo]).
- cdk:
authfeature flag and all conditional compilation paths ([crodas]).
v0.15.0-rc.3
v0.15.0-rc.3
v0.15.0-rc.2
v0.15.0-rc.2