Skip to content

Latest commit

 

History

History
87 lines (57 loc) · 3.53 KB

CONTRIBUTING.md

File metadata and controls

87 lines (57 loc) · 3.53 KB

How to contribute

Please contribute to Nutshell! You can open issues if you find bugs and pull requests for improvements.

Contributing

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.

Formatting

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.

Setting up your environment

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.

Precommit hook

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

Debugging

For more expressive debug logging, you can enable debug logs or trace-level logs (even more expressive).

DEBUG=TRUE
LOG_LEVEL=TRACE

Testing

To run the tests, run make test or pytest tests in the poetry environment.

FakeWallet

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

Lightning regtest

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

Profiling

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.

V0 API only

To run the mint with only V0 API support (deprecated), use DEBUG_MINT_ONLY_DEPRECATED=TRUE