Original release notes
This release speeds up wallet restore by optimising legacy BIP-32 derivation - benchmarks showed roughly 2x speedup for the new cached batch path versus repeated BIP32 derivation of previous implementation.
It also tightens spec compliance and hardens the wallet against real-world mint quirks: BOLT12 quotes, NUT-12 DLEQ verification, and nullable wire fields now behave correctly across mint implementations.
Slow Lightning payments can now be fire-and-forget: wallets can save the in-flight payment, restart or hand off to another process, and still reclaim their change once the payment settles thanks to new OutputData serializers and wallet.createMeltChangeProofs method.
New developer ergonomics include a CTSError base class for cleaner error handling and a maxSpendableAfterFees primitive that makes "send max" flows trivial to build.
Finally, this release implements deterministic DLEQ to mitigate the risk of nonce re-use in JS environments with weak entropy / PRNGs.
[!Note] The fix in https://github.com/cashubtc/cashu-ts/pull/655 is technically a breaking type change to BOLT12
MintQuoteBolt12Response.amountin a very limited set of edge cases, so please check your app if it supports BOLT12. The PR description contains the one line fix if you are affected.
What's Changed
- fix(mint): treat null amount on BOLT12 mint quote as no-amount by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/649
- fix(wallet): treat expiry: 0 as no-expiry in validateMintQuote by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/648
- docs(examples): add README and align bolt12 example with Makefile port by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/650
- refactor(mint): cast wire values as AmountLike, not Amount, in normalizers by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/652
- feat(wallet): add maxSpendableAfterFees method by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/654
- fix(mint): coerce omitted payment_preimage and witness to null by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/653
- feat(nut12): deterministic DLEQ nonce derivation by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/638
- fix(wallet): verify DLEQ on received proofs even without requireDleq (NUT-12) by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/656
- feat(types): align nullable wire fields with spec (T | null) by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/655
- feat(errors): add CTSError base class by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/657
- refactor: optimize deterministic derivation by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/658
- feat(wallet): improve async melt change handling by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/659
- chore(main): release 4.3.0 by @robwoodgate in https://github.com/cashubtc/cashu-ts/pull/651
Full Changelog: https://github.com/cashubtc/cashu-ts/compare/v4.2.1...v4.3.0

