Please contribute to Nutshell! You can open issues if you find bugs and pull requests for improvements.
Pick an issue you would like to work on. Those with the tag good first issue
are great for getting started. When you open a pull request, make sure that you've run tests and formatting locally before you push code.
We use Ruff for formatting. To make sure that your tests succeed, please run make format
before you push code. You can find the Ruff parameters in pyproject.toml
.
We use Poetry as a dependency and environment manager. Currently, Nutshell supports Python 3.10.4
which you can install using pyenv
(see README.md). To install all dependencies, run poetry install
. After install, you can activate the shell with poetry shell
. Now you can execute cashu --help
to use the wallet or mint
to run the mint.
To run the formatter and mypy (linter) before you push code, you can install the very useful pre-commit hook which will check your code every time you push with git.
poetry run pre-commit install
For more expressive debug logging, you can enable debug logs or trace-level logs (even more expressive).
DEBUG=TRUE
LOG_LEVEL=TRACE
To run the tests, run make test
or pytest tests
in the poetry environment.
We use the FakeWallet
backend for most of the tests. FakeWallet
acts like a Lightning node where all (fake) invoices are always automatically paid. It's great for testing code that does not affect the Lightning functionality of the mint. To use it, set:
MINT_BACKEND_BOLT11_SAT=FakeWallet
You can control how fast payments should succeed by setting these flags
FAKEWALLET_DELAY_PAYMENT=TRUE
FAKEWALLET_DELAY_OUTGOING_PAYMENT=3
FAKEWALLET_DELAY_INCOMING_PAYMENT=3
There are many tests that also run in regtest, a simulated Lightning network environment. To run the regtest, clone this repository and run ./start.sh
. This will start your regtest environment with several Lightning node implementations.
You can choose one of the nodes as a backend for nutshell using the .env
variable:
# Choose one from:
# LndRestWallet, CLNRestWallet, CoreLightningRestWallet, LNbitsWallet
MINT_BACKEND_BOLT11_SAT=LndRestWallet
The Nutshell settings to connect to the provided nodes are given below
# regtest
MINT_LND_REST_ENDPOINT=https://localhost:8081
MINT_LND_REST_CERT="../cashu-regtest-enviroment/data/lnd-3/tls.cert"
MINT_LND_REST_MACAROON="../cashu-regtest-enviroment/data/lnd-3/data/chain/bitcoin/regtest/admin.macaroon"
MINT_CLNREST_URL=https://localhost:3010
MINT_CLNREST_RUNE="../cashu-regtest-enviroment/data/clightning-2/rune"
MINT_CLNREST_CERT="../cashu-regtest-enviroment/data/clightning-2/regtest/ca.pem"
MINT_CORELIGHTNING_REST_URL=https://localhost:3001
MINT_CORELIGHTNING_REST_MACAROON=../cashu-regtest-enviroment/data/clightning-2-rest/access.macaroon
MINT_CORELIGHTNING_REST_CERT=../cashu-regtest-enviroment/data/clightning-2-rest/certificate.pem
If you'd like to profile your code (measure how long steps take to execute), run the mint using DEBUG_PROFILING=TRUE
. Make sure to turn this off again, as your application will be significantly slower with profiling enabled.
To run the mint with only V0 API support (deprecated), use DEBUG_MINT_ONLY_DEPRECATED=TRUE