Skip to content

0.16.0

Compare
Choose a tag to compare
@callebtc callebtc released this 25 Jul 10:06
· 57 commits to main since this release
125ce9e

This is major release comes with a ton of new features, bug fixes, performance improvements, and protocol updates. We have a new binary token format that is smaller, the wallet got a lot smarter with coin selection, the nutshell mint and wallet now support ecash fees, WebSocket updates, Multinut payments, and much more.

This release includes a database migration for the mint. Make sure to back up your mint database before upgrading.

New features

New binary token format

The Cashu protocol introduced a new binary Cashu TokenV4 format (with prefix cashuB) that saves around 40% space compared to the previous token format (with prefix cashuA). The Nutshell wallet will produce TokenV4 tokens by default now. To produce tokens with the old format, you can use the command cashu send --legacy <amount> (or -l for short). If you created a new token already but you'd like to see the legacy version of it, enter cashu pending -l.

Offline wallet and improved coin selection

The Nutshell wallet is now equipped with a vastly improved coin selection algorithm that allows the user to make as many transactions offline as possible while also saving on future fees by avoiding swaps with the mint as much as possible. This improves the utility, speed, and privacy of the Nutshell wallet, as it requires less communication with the mint.

Ecash fees

Nutshell now supports fees for Ecash transactions according to changes in NUT-02. Fees are determined by the number of Ecash inputs to a transaction. Fees are given in parts per thousand (ppk). As an example, if the fee is set to 250 ppk (in Satoshis), a transaction spending 4 inputs will require 1 sat in fees. Mints can enable fees by setting MINT_INPUT_FEE_PPK to an integer value in parts per thousand. Fees will only affect newly generated keysets, not old ones.

Warning: Wallet support for fees is still in active development. Enabling fees will break compatibility with most wallets in their current state. Mint operators should enable fees later in the future when there is widespread support for fees.

WebSocket subscriptions

The Cashu protocol recently introduced WebSocket subscriptions in NUT-17 which allows wallets to get notifications for state changes of mint quotes, melt quotes, and ecash spent states and the witness used for unlocking a locked token. The Nutshell mint can now receive subscription requests and send out updates to its clients. For the Nutshell wallet, this improves the responsiveness when minting new tokens as it does not require constant polling anymore. This feature will also improve the execution of smart contracts that require a timely retrieval of the witness used to unlock a token (for example when making atomic swaps against Lightning payments).

Multinut payments

The Nutshell mint now supports Multinut payments with the LND backend (see NUT-15). This feature is still experimental. To enable it, set the env variable MINT_LND_ENABLE_MPP=TRUE. To initiate a partial payment with the Nutshell wallet, use cashu pay <invoice> <amount> where <amount> is the partial amount you want the mint to send. You can initiate partial payments from different mints by repeating this command with different mints that support this feature.

Getting ready for the cloud

A lot of work has been made to extract all state of the mint from the system's memory into the database. These are preparations for making Nutshell ready for parallel deployments in a Kubernetes cluster so that multiple instances of the mint can run on top of the same database. This will allow scaling Nutshell to process many more transactions than what was previously possible.

Support for EUR

We added initial support for Euro Ecash using the StrikeWallet backend for Strike users who have access to Euro balances. FakeWallet now also supports the Euro.

Support for CLN Rest

A new CLNRestWallet backend was added that now supports CLN through the clnrest.py plugin. Previously, CLN was only supported through the c-lightning-rest third party interface for which we will phase out support through the CoreLightningRestWallet.

Protocol updates

NUT-04 and NUT-5 state fields

Mint and melt quotes now have a new state enum field that represents the state of the quote (PR) to reflect changes in the corresponding NUT-04 and NUT-05 specifications.

What's Changed

New Contributors

Full Changelog: 0.15.3...0.16.0