Releases: cashubtc/nutshell
0.16.3
This is service update fixing a number of bugs and other minor issues.
Mint
- bolt11 invoices with different units on the same mint now settle externally via the Lightning network
- Turn on multipath payments (MPP) by default for LND and CLN
- NUT-06: Signal alternative URLs to reach the mint from using
.env
varMINT_INFO_URLS
- Fix: Signal NUT-14 support (HTLCs) in info endpoint
- Fix: Return LN preimage in lookup of successful melt quote
Wallet
- Store Lightning invoices in new melt and mint quote tables
- Sort outputs by amount to mitigate transaction amount privacy leaks
- Minor bug fixes to support older mints
What's Changed
- Mint: settle mint-melt on same mint with different units externally by @gudnuf in #651
- add preimage and change fields to response from
GET /v1/melt/quote/bolt11/{quote_id}
by @elnosh in #656 - sort split from split_wallet_state by @elnosh in #653
- Wallet: store quotes by @callebtc in #657
- Chore: update dev dependencies by @callebtc in #658
- Fix wallet backwards paid flag melt by @callebtc in #659
- Wallet: deprecated api: Catch JSON decoding errors in response handling by @callebtc in #660
- Ensure state check compatibility with versions < 0.16.0 by @callebtc in #661
- bump version to 0.16.2 by @callebtc in #664
- Mint: Turn off locking by default by @callebtc in #662
- Bump python version requirements in all files by @callebtc in #654
- Fix db lock tests by @callebtc in #665
- Wallet check payment hash by @lollerfirst in #649
- add nut-14 as supported in info endpoint by @elnosh in #647
- [FIX] Wallet sort outputs before swapping by @lollerfirst in #648
- Conditions: refactor pubkey extraction and assume
n_sigs=1
for refund spend path by @callebtc in #644 - NUT-06: add urls field by @prusnak in #638
- Add FakeWallet invoice features tag for supported payment secret by @davidcaseria in #609
- Mint: turn on mpp by default by @callebtc in #667
- Fix: format by @callebtc in #668
- bump version to 0.16.3 by @callebtc in #669
New Contributors
- @gudnuf made their first contribution in #651
- @davidcaseria made their first contribution in #609
Full Changelog: 0.16.1...0.16.3
0.16.2
0.16.2
This hot fix disables a feature introduced in 0.16.1 that prevented proofs from getting stuck in case where the Lightning backend is detected to be malfunctioning. In that case, the mint would lock all Lightning payments and return the error "Melt is disabled. Please contact the operator.".
Tests have shown that this feature triggers in too many unrelated cases which is why it is disabled by default now. To manually turn on this feature, set the .env
variable MINT_DISABLE_MELT_ON_ERROR=True
.
Changes since 0.16.1: 0.16.1-branch...0.16.2-branch
0.16.1
This update brings several bug fixes and stability improvements to nutshell. It also adds support for LND via gRPC.
Mint
- Support for LND via gRPC for
LndRPCWallet
- NUT-15 Multinut payments for
CLNRestWallet
- Stability improvements
Wallet
- Several minor bug fixes
Protocol
- NUT-06: Announce local time
- NUT-06: Announce icon URL with the
.env
flagMINT_INFO_ICON
- NUT-04: Mint invoices with a description
- Fix: HTLC signature model
Updating
Notice: This release bumps the minimal Python version to 3.10. If you were using an older version, upgrade your Python version first before you upgrade nutshell.
Dn't forget to run poetry install
if you update from the git repository.
What's Changed
- Remove base64 padding from serialized tokens by @callebtc in #600
- Mint: Talk to LND via gRPC by @lollerfirst in #595
- Wallet: Strip trailing slash from URL by @callebtc in #605
- CLN Multi-Nut payments test fix by @lollerfirst in #602
- implement nut-06 time by @prusnak in #611
- bump bip32 and coincurve dependencies by @prusnak in #612
- NUT-06: add icon URL by @callebtc in #604
- Sanitize mint URL before adding by @callebtc in #606
- NUT-04: add description by @callebtc in #613
- feat: announce description in MintMethodSetting by @prusnak in #617
- chore: run pyupgrade by @prusnak in #623
- Mints: New melt flow by @callebtc in #622
- Fix: Unset pending melt quote by quote id by @callebtc in #629
- Fix: wallet include fees in swap outputs for inputs of successive melt by @callebtc in #630
- Repo: disable codecov status by @callebtc in #631
- Testing: add tests for event client manager by @callebtc in #632
- bump version to 0.16.1 by @callebtc in #633
- chore: modernize f-string usage by @prusnak in #627
- Fix: ledger requires deprecated
paid
flags in db + wallet disable base64 keysets by default by @callebtc in #634 - Bump SQLAlchemy to 2.0 by @lollerfirst in #626
- Halt melt on exception by @callebtc in #635
- Bump dependencies to latest versions by @callebtc in #636
- Add get quote API to wallet + check proof states in batches by @callebtc in #637
- Wallet: handle PostMeltResponse_deprecated from v1 api by @callebtc in #642
- wait for uvicorn server to bind before running tests by @conduition in #607
- Refactor conditions and fix HTLC multisig by @callebtc in #643
- Mint: LNbitsWallet add extra check for payment state by @callebtc in #601
New Contributors
- @prusnak made their first contribution in #611
- @conduition made their first contribution in #607
Full Changelog: 0.16.0...0.16.1
0.16.1
This update brings several bug fixes and stability improvements to nutshell. It also adds support for LND via gRPC.
Mint
- Support for LND via gRPC for
LndRPCWallet
- NUT-15 Multinut payments for
CLNRestWallet
- Stability improvements
Wallet
- Several minor bug fixes
Protocol
- NUT-06: Announce local time
- NUT-06: Announce icon URL with the
.env
flagMINT_INFO_ICON
- NUT-04: Mint invoices with a description
- Fix: HTLC signature model
Updating
Notice: This release bumps the minimal Python version to 3.10. If you were using an older version, upgrade your Python version first before you upgrade nutshell.
Dn't forget to run poetry install
if you update from the git repository.
What's Changed
- Remove base64 padding from serialized tokens by @callebtc in #600
- Mint: Talk to LND via gRPC by @lollerfirst in #595
- Wallet: Strip trailing slash from URL by @callebtc in #605
- CLN Multi-Nut payments test fix by @lollerfirst in #602
- implement nut-06 time by @prusnak in #611
- bump bip32 and coincurve dependencies by @prusnak in #612
- NUT-06: add icon URL by @callebtc in #604
- Sanitize mint URL before adding by @callebtc in #606
- NUT-04: add description by @callebtc in #613
- feat: announce description in MintMethodSetting by @prusnak in #617
- chore: run pyupgrade by @prusnak in #623
- Mints: New melt flow by @callebtc in #622
- Fix: Unset pending melt quote by quote id by @callebtc in #629
- Fix: wallet include fees in swap outputs for inputs of successive melt by @callebtc in #630
- Repo: disable codecov status by @callebtc in #631
- Testing: add tests for event client manager by @callebtc in #632
- bump version to 0.16.1 by @callebtc in #633
- chore: modernize f-string usage by @prusnak in #627
- Fix: ledger requires deprecated
paid
flags in db + wallet disable base64 keysets by default by @callebtc in #634 - Bump SQLAlchemy to 2.0 by @lollerfirst in #626
- Halt melt on exception by @callebtc in #635
- Bump dependencies to latest versions by @callebtc in #636
- Add get quote API to wallet + check proof states in batches by @callebtc in #637
- Wallet: handle PostMeltResponse_deprecated from v1 api by @callebtc in #642
- wait for uvicorn server to bind before running tests by @conduition in #607
- Refactor conditions and fix HTLC multisig by @callebtc in #643
- Mint: LNbitsWallet add extra check for payment state by @callebtc in #601
New Contributors
- @prusnak made their first contribution in #611
- @conduition made their first contribution in #607
Full Changelog: 0.16.0...0.16.1
0.16.0
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
- [CI] prevent pypi upload on pre-releases by @callebtc in #520
- README: add testnut by @callebtc in #522
- Mint: refactor melt quote by @callebtc in #530
- Multinut LND by @callebtc in #492
- startup: do not print postgres connection string, closes #523 by @callebtc in #540
- Add fees by @callebtc in #503
- Use integer division for fee calculation by @callebtc in #549
- Fix false mpp payment handling of unsupported backends by @callebtc in #547
- Mint: add websockets for quote updates by @callebtc in #413
- NUT-04 and NUT-05: Add
state
field to quotes by @callebtc in #560 - [Mint] Add support for BTC and EUR in
StrikeWallet
backend, add EUR toFakeWallet
by @callebtc in #561 - add MINT_LND_REST_CERT_VERIFY env bool that when set to False allow to skip certificate validation for LND api call by @elliedev80 in #535
- LndRestWallet: edit warning messages by @callebtc in #562
- Fix: default witness is None, closes #559 by @callebtc in #563
- Fix: Nut 05 mint response model by @callebtc in #564
- TokenV4 CBOR serialization by @callebtc in #502
- Mint: Add
clnrest.py
Lightning backend by @lollerfirst in #551 - update poetry.lock by @callebtc in #567
- Mint: table locks by @callebtc in #566
- fix: cashu send --lock by @callebtc in #570
- Refactor database transactions by @callebtc in #571
- bump version to 0.16.0 by @callebtc in #573
- Update requirements and docker build by @callebtc in #572
- Fix Tokenv4 handling of base64 keysets by @callebtc in #575
- Fix
receive -a
to receive all pending tokens by @callebtc in #578 - Fix loading b64 keysets and add option to set b64 inactive in WalletSettings by @callebtc in #579
- Wallet: add CLI flag
--force-swap
flag and force swapping all inactive keysets by @callebtc in #580 CONTRIBUTING.md
: Update contributing guidelines and environment setup by @callebtc in #581StrikeWallet
: support USDT by @callebtc in #583- codecov: ignore cashu/nostr by @callebtc in #378
CONTRIBUTING.md
: Add instructions for .env file by @callebtc in #582- Wallet: default to
SIG_INPUTS
in P2PK lock by @elnosh in #584 - NUT-06: Mint contact info by @callebtc in #585
- Fix NUT-17 settings entry for NUT-06 by @callebtc in #587
- Fix parsing of old format contact field in wallet by @callebtc in #589
- Fix race condition by @lollerfirst in #586
- Edit README.md by @callebtc in #590
- Add docker compose instructions by @callebtc in #591
- Mint: enable
LNbitsWallet
invoice stream by @callebtc in #594 - Remove unused coinselection code by @callebtc in #597
New Contributors
- @elliedev80 made their first contribution in #535
- @lollerfirst made their first contribution in #551
- @elnosh made their first contribution in #584
Full Changelog: 0.15.3...0.16.0
0.16.0-rc3
This is a huge major release with tons 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 so 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
- [CI] prevent pypi upload on pre-releases by @callebtc in #520
- README: add testnut by @callebtc in #522
- Mint: refactor melt quote by @callebtc in #530
- Multinut LND by @callebtc in #492
- startup: do not print postgres connection string, closes #523 by @callebtc in #540
- Add fees by @callebtc in #503
- Use integer division for fee calculation by @callebtc in #549
- Fix false mpp payment handling of unsupported backends by @callebtc in #547
- Mint: add websockets for quote updates by @callebtc in #413
- NUT-04 and NUT-05: Add
state
field to quotes by @callebtc in #560 - [Mint] Add support for BTC and EUR in
StrikeWallet
backend, add EUR toFakeWallet
by @callebtc in #561 - add MINT_LND_REST_CERT_VERIFY env bool that when set to False allow to skip certificate validation for LND api call by @elliedev80 in #535
- LndRestWallet: edit warning messages by @callebtc in #562
- Fix: default witness is None, closes #559 by @callebtc in #563
- Fix: Nut 05 mint response model by @callebtc in #564
- TokenV4 CBOR serialization by @callebtc in #502
- Mint: Add
clnrest.py
Lightning backend by @lollerfirst in #551 - update poetry.lock by @callebtc in #567
- Mint: table locks by @callebtc in #566
- fix: cashu send --lock by @callebtc in #570
- Refactor database transactions by @callebtc in #571
- bump version to 0.16.0 by @callebtc in #573
- Update requirements and docker build by @callebtc in #572
- Fix Tokenv4 handling of base64 keysets by @callebtc in #575
- Fix
receive -a
to receive all pending tokens by @callebtc in #578 - Fix loading b64 keysets and add option to set b64 inactive in WalletSettings by @callebtc in #579
- Wallet: add CLI flag
--force-swap
flag and force swapping all inactive keysets by @callebtc in #580 CONTRIBUTING.md
: Update contributing guidelines and environment setup by @callebtc in #581StrikeWallet
: support USDT by @callebtc in #583- codecov: ignore cashu/nostr by @callebtc in #378
CONTRIBUTING.md
: Add instructions for .env file by @callebtc in #582- Wallet: default to
SIG_INPUTS
in P2PK lock by @elnosh in #584 - NUT-06: Mint contact info by @callebtc in #585
New Contributors
- @elliedev80 made their first contribution in #535
- @lollerfirst made their first contribution in #551
- @elnosh made their first contribution in #584
Full Changelog: 0.15.3...0.16.0-rc1
What's Changed
- Fix NUT-17 settings entry for NUT-06 by @callebtc in #587
- Fix parsing of old format contact field in wallet by @callebtc in #589
- Fix race condition by @lollerfirst in #586
- Edit README.md by @callebtc in #590
Full Changelog: 0.16.0-rc1...0.16.0-rc2
What's Changed
- Add docker compose instructions by @callebtc in #591
- Mint: enable
LNbitsWallet
invoice stream by @callebtc in #594 - Remove unused coinselection code by @callebtc in #597
Full Changelog: 0.16.0-rc2...0.16.0
0.16.0-rc2
This is a huge major release with tons 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 so 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
- [CI] prevent pypi upload on pre-releases by @callebtc in #520
- README: add testnut by @callebtc in #522
- Mint: refactor melt quote by @callebtc in #530
- Multinut LND by @callebtc in #492
- startup: do not print postgres connection string, closes #523 by @callebtc in #540
- Add fees by @callebtc in #503
- Use integer division for fee calculation by @callebtc in #549
- Fix false mpp payment handling of unsupported backends by @callebtc in #547
- Mint: add websockets for quote updates by @callebtc in #413
- NUT-04 and NUT-05: Add
state
field to quotes by @callebtc in #560 - [Mint] Add support for BTC and EUR in
StrikeWallet
backend, add EUR toFakeWallet
by @callebtc in #561 - add MINT_LND_REST_CERT_VERIFY env bool that when set to False allow to skip certificate validation for LND api call by @elliedev80 in #535
- LndRestWallet: edit warning messages by @callebtc in #562
- Fix: default witness is None, closes #559 by @callebtc in #563
- Fix: Nut 05 mint response model by @callebtc in #564
- TokenV4 CBOR serialization by @callebtc in #502
- Mint: Add
clnrest.py
Lightning backend by @lollerfirst in #551 - update poetry.lock by @callebtc in #567
- Mint: table locks by @callebtc in #566
- fix: cashu send --lock by @callebtc in #570
- Refactor database transactions by @callebtc in #571
- bump version to 0.16.0 by @callebtc in #573
- Update requirements and docker build by @callebtc in #572
- Fix Tokenv4 handling of base64 keysets by @callebtc in #575
- Fix
receive -a
to receive all pending tokens by @callebtc in #578 - Fix loading b64 keysets and add option to set b64 inactive in WalletSettings by @callebtc in #579
- Wallet: add CLI flag
--force-swap
flag and force swapping all inactive keysets by @callebtc in #580 CONTRIBUTING.md
: Update contributing guidelines and environment setup by @callebtc in #581StrikeWallet
: support USDT by @callebtc in #583- codecov: ignore cashu/nostr by @callebtc in #378
CONTRIBUTING.md
: Add instructions for .env file by @callebtc in #582- Wallet: default to
SIG_INPUTS
in P2PK lock by @elnosh in #584 - NUT-06: Mint contact info by @callebtc in #585
New Contributors
- @elliedev80 made their first contribution in #535
- @lollerfirst made their first contribution in #551
- @elnosh made their first contribution in #584
Full Changelog: 0.15.3...0.16.0-rc1
What's Changed
- Fix NUT-17 settings entry for NUT-06 by @callebtc in #587
- Fix parsing of old format contact field in wallet by @callebtc in #589
- Fix race condition by @lollerfirst in #586
- Edit README.md by @callebtc in #590
Full Changelog: 0.16.0-rc1...0.16.0-rc2
0.16.0-rc1
This is a huge major release with tons 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 so 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-6 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
- [CI] prevent pypi upload on pre-releases by @callebtc in #520
- README: add testnut by @callebtc in #522
- Mint: refactor melt quote by @callebtc in #530
- Multinut LND by @callebtc in #492
- startup: do not print postgres connection string, closes #523 by @callebtc in #540
- Add fees by @callebtc in #503
- Use integer division for fee calculation by @callebtc in #549
- Fix false mpp payment handling of unsupported backends by @callebtc in #547
- Mint: add websockets for quote updates by @callebtc in #413
- NUT-04 and NUT-05: Add
state
field to quotes by @callebtc in #560 - [Mint] Add support for BTC and EUR in
StrikeWallet
backend, add EUR toFakeWallet
by @callebtc in #561 - add MINT_LND_REST_CERT_VERIFY env bool that when set to False allow to skip certificate validation for LND api call by @elliedev80 in #535
- LndRestWallet: edit warning messages by @callebtc in #562
- Fix: default witness is None, closes #559 by @callebtc in #563
- Fix: Nut 05 mint response model by @callebtc in #564
- TokenV4 CBOR serialization by @callebtc in #502
- Mint: Add
clnrest.py
Lightning backend by @lollerfirst in #551 - update poetry.lock by @callebtc in #567
- Mint: table locks by @callebtc in #566
- fix: cashu send --lock by @callebtc in #570
- Refactor database transactions by @callebtc in #571
- bump version to 0.16.0 by @callebtc in #573
- Update requirements and docker build by @callebtc in #572
- Fix Tokenv4 handling of base64 keysets by @callebtc in #575
- Fix
receive -a
to receive all pending tokens by @callebtc in #578 - Fix loading b64 keysets and add option to set b64 inactive in WalletSettings by @callebtc in #579
- Wallet: add CLI flag
--force-swap
flag and force swapping all inactive keysets by @callebtc in #580 CONTRIBUTING.md
: Update contributing guidelines and environment setup by @callebtc in #581StrikeWallet
: support USDT by @callebtc in #583- codecov: ignore cashu/nostr by @callebtc in #378
CONTRIBUTING.md
: Add instructions for .env file by @callebtc in #582- Wallet: default to
SIG_INPUTS
in P2PK lock by @elnosh in #584 - NUT-06: Mint contact info by @callebtc in #585
New Contributors
- @elliedev80 made their first contribution in #535
- @lollerfirst made their first contribution in #551
- @elnosh made their first contribution in #584
Full Changelog: 0.15.3...0.16.0-rc1
0.15.3
What's Changed
This release includes a database migration for the mint. Make sure to back up your mint database before upgrading.
This update improves the crash resistance of a mint. If the mint should fail during an outgoing Lightning payment, the startup routine will now pick up those payments and invalidate all pending proofs associated with them if the payment succeeded.
The wallet can now check pending invoices thanks to work by @Guilospanck using the command cashu invoices
. Various flags have been added to the command which you can see using cashu invoices --help
. The wallet can now also restore ecash from all keysets of a mint with the command cashu restore
thanks to an improvement by @cjbeery24.
Wallet changes
- [Wallet] Issue #313: allow checking pending invoices by @Guilospanck in #493
- [Wallet] Restore wallet now restores tokens for all mint keysets. by @cjbeery24 in #509
- [Wallet] Request Mint Refactor by @cjbeery24 in #507
- [Wallet] Fix regression bug for mint request by @callebtc in #513
Mint changes
- [Mint] Recover pending melts at startup by @callebtc in #499
- [Mint] Refactor: remove output.id optional by @callebtc in #504
- [Mint] Migrate duplicate keysets to db by @callebtc in #511
New Contributors
- @Guilospanck made their first contribution in #493
- @cjbeery24 made their first contribution in #509
Full Changelog: 0.15.2...0.15.3
0.15.2
This update introduces a built-in rate limiter to the mint. It also includes multiple improvements for automated testing of USD backends and various other stability updates and bug fixes.
Mint
- Mint: Add Slowapi rate limiter by @callebtc in #481
- Mint: FakeWallet support for USD by @callebtc in #488
- Set
sat
andusd
wallets separately in.env
(MINT_BACKEND_BOLT11_SAT
,MINT_BACKEND_BOLT11_USD
)- Note: This deprecates the old
.env
variableMINT_LIGHTNING_BACKEND
- Note: This deprecates the old
- Fix: CLNRestWallet (tested with
c-lightning:24.02.1
andc-lightning-rest:0.10.7
) by @callebtc in #494
NUTs
- NUTs (cashubtc/nuts#82): info endpoint method settings by @callebtc in #487
- Use
PostRestoreRequest
for all restore operations by @callebtc in #483
Full Changelog: 0.15.1...0.15.2
0.15.1
This update introduces Blink as a Lightning backend for the mint and includes various other housekeeping items with smaller bug fixes.
This release includes a database migration for the mint. Make sure to back up your mint database before upgrading.
Mint
- Add Blink as a Lightning funding source
- Fix: Quote expiry with absolute Unix time
- Fix: Catch
CashuErrors
and print them nicely - Fix: Do not check MeltQuote status before payment attempt
- Fix: Mint seed encryption
cashu/mint/encrypt.py
Wallet
- Token invalidation: add setting for batch size
Protocol
- NUT-07: Token state check with
Y
(cashubtc/nuts#93) - NUT-09: Response model for v1 updated (cashubtc/nuts#87)
New Contributors
- @findingsov made their first contribution in #450
- @thesimplekid made their first contribution in #453