A management backend for bitcoin and lightning node operators written in Python with FastAPI.
This software is still considered BETA and may contain bugs. Don't expose it to the open internet or use with a lot of funds.
- Blitz API
- Beta Disclaimer
- Configuration
- Installation
- Run the application
- Development
- Acknowledgements
Create a .env
file with your bitcoind
and lnd
configuration. See the .env_sample
file for all configuration options.
- Python in version 3.7
- Redis
- Polar If you need an easy option to run a simple bitcoind & lnd client
make install
or
python -m pip install -r requirements.txt
py -m pip install -r requirements.txt
make run
or
python -m uvicorn app.main:app --reload
py -m uvicorn app.main:app --reload
It is recommended to have python-poetry installed.
From within the blitz_api
folder open a poetry shell via:
poetry shell
(To exit the poetry shell use: exit
)
Blitz API provides a Nix Flake file to create a development environment. Execute nix develop
(make sure you have flakes enabled) to enter the environment.
In this environment a hidden folder .venv
is created to install the python dependencies locally. If pyright can't find these dependencies create the following file in the root
folder of the project:
{
"venvPath": ".",
"venv": ".venv"
}
poetry install
or
make install-dev
If python dependencies have been changed it's necessary to freeze all requirements to requirements.txt:
poetry export -f requirements.txt --output requirements.txt
ℹ️ This will skip all dev dependencies by default.
This step is required to avoid having to install poetry for final deployment.
Create a file /script/sync_to_blitz.personal.sh
(will be ignored by github) the SSH connection data to your RaspiBlitz.
localIP="192.168.178.61" sshPort="22" passwordA=""
Then you can run always make sync-to-blitz
to copy your latest code over to your RaspiBlitz. The script automatically restarts the backend API with the new code on your RaspiBlitz and shows you the logs.
To test the backend API then call the SwaggerUI: http://[LOCALIP]/api/v1/docs
- to call protected endpoints run the /system/login
endpoint first with HTTP POST body:
{
"password": "[PASSWORDA]"
}
and then copy the JWT Auth string returned to Authorize
in the top section of the SwaggerUI.
You can also now test the RaspiBlitz WebUI against the API by running it locally on your dev laptop when you configure it to use the backend API of your RaspiBlitz.
To debug Python code that is running on another machine, like a RaspiBlitz, follow these steps.
- run
make install-dev
. - open the
.vscode/launch.json
file and change the host to your remote machines IP-
"connect": { "host": "192.168.1.49", "port": 5678 }
-
- open your
.env_sample
file and replace the line# remote_debugging=false
withremote_debugging=true
This is necessary because we're going to synchronize the local source with the remote node. The blitz_api service will be restarted on the remote node. Any changes to the `.env' file will be overwritten by the setup script on the Blitz. This script will use the `.env_sample` file as a base and fill it with data. This way we can trick the Blitz into enabling this setting every time we change something without the Blitz explicitly supporting it. - make sure you follow the steps in the Sync changes to a RaspiBlitz section
- execute
make sync-to-blitz
- Make sure to chose
Attach
in the RUN AND DEBUG windows of VSCode - Hit F5 and voila you should be connected to your RaspiBlitz and debug code remotely
- SSH into the Blitz, and run
sudo -i -u blitzapi
cd blitz_api
- Finally run
make enable-remote-debugging
Refer to this documentation to learn how to setup VSCode correctly.
Make sure to include tests for important pieces of submitted code.
make test
make coverage
This will run tests and generate a coverage html file in this folder: ./htmlcov
ℹ️ The client libraries live in an extra repository: https://github.com/fusion44/blitz_api_client_libraries
Install OpenAPI Generator and Java:
npm install @openapitools/openapi-generator-cli -g
sudo apt install default-jre
Clone https://github.com/fusion44/blitz_api_client_libraries next to the blitz_api folder.
make generate-client-libs
⚠️ The first run requiressudo
as it must download a Java .jar file to the system npm package folder.
Once the API is running swagger docs can be found here:
http://127.0.0.1:8000/latest/docs
curl -N -H "Authorization: Bearer JWT_TOKEN_HERE" http://127.0.0.1:8000/sse/subscribe
curl -N -H "Authorization: Bearer JWT_TOKEN_HERE" http://127.0.0.1:8000/v1/bitcoin/getblockchaininfo
curl -X POST -N http://127.0.0.1:8000/v1/setup/type/1
curl --header "Content-Type: application/json" \
--request POST \
--data '{"password":"12345678"}' \
http://127.0.0.1:8000/system/login
Integrated Libraries: