Ereignishorizont
Cashu

Cashu

Cashu Nutshell – die eCash Mint

Cashu ist ein Open-Source-Protokoll fĂĽr ecash (digitale MĂĽnzen), inspiriert von Chaumian eCash.
Ziel: privates, anonymes Bezahlen ĂĽber das Bitcoin-Lightning-Netzwerk.

Funktionsweise

-> Nutzer tauschen Bitcoin ĂĽber Lightning gegen eCash-Tokens bei einem sogenannten Mint (Ausgeber).
-> Diese Tokens sind kryptographisch blinded – der Mint kann nicht nachvollziehen, welche Tokens später eingelöst oder weitergegeben werden.
-> Tokens lassen sich transferieren, tauschen oder wieder gegen Lightning-Bitcoin einlösen.

Nutshell ist die Referenz-Implementierung von Cashu in Python.

-> Enthält den Mint-Server (Ausgabestelle für eCash) und Clients.
-> Wird von der Cashu-Community gepflegt (Repo: cashubtc/nutshell).
-> Eignet sich sowohl als Experimentierplattform als auch als praktisches Backend fĂĽr Wallets und Apps.
-> Mit Nutshell kannst du einen eigenen Mint starten und eCash-Tokens ausgeben und empfangen.

Hinweis

Dieses Tutorial verwendet ein LNbits-Wallet als Finanzierungsquelle.
Andere Optionen – z. B. dein persönliches Blink-Wallet – sind ebenfalls möglich.


1. Grundlagen

Die Grundlage für dieses Tutorial ist ein Ubuntu-VPS. Es wird empfohlen, das System regelmäßig zu aktualisieren und abzusichern.
Als Orientierung können die Kapitel 2 und 3 der Blitz⚡Bank-Dokumentation dienen.

2. Voraussetzungen installieren

Update und Bibliotheken installieren

sudo apt update
sudo apt install -y \
  make build-essential libssl-dev zlib1g-dev \
  libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
  libncurses5-dev libncursesw5-dev xz-utils tk-dev \
  libffi-dev liblzma-dev python3-openssl git

pyenv installieren

curl https://pyenv.run | bash

Pfad zu pyenv setzen

Den Pfad zu pyenv wird am Ende der Installation angezeigt und muss den zwei Dateien ~/.profile (fĂĽr Login-Shells) und ~/.bashrc (fĂĽr interaktive Shells) hinzugefĂĽgt werden.

Hinweis: Den hier verwendeten Pfad einmal mit der Terminal Ausgabe nach der Installation ĂĽberprĂĽfen.

echo -e "\n# pyenv path" >> ~/.profile
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init - bash)"' >> ~/.profile

echo -e "\n# pyenv path" >> ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc

-> Jetzt die Shell-Initialisierungsdateien sauber neu laden, in dem du dich einmal mit exit aus der Shell aus- und neu einloggst.

pyenv auf aktiv prĂĽfen

pyenv versions

-> Ausgabe: * system (set by /home/user/.pyenv/version) âś…

Python installieren

pyenv install 3.10.4

Poetry installieren

Poetry ist ein Python-Ökosystem und verwaltet Abhängigkeiten (Libraries) und virtuelle Umgebungen.

curl -sSL https://install.python-poetry.org | python3 - --version 1.8.5
echo export PATH=\"$HOME/.local/bin:$PATH\" >> ~/.bashrc
source ~/.bashrc

Die installierte Version prĂĽfen mit: poetry -V

3. Nutshell installieren

Release prĂĽfen: https://github.com/cashubtc/nutshell/releases

git clone https://github.com/cashubtc/nutshell.git nutshell
cd nutshell
git checkout <latest_tag>
pyenv local 3.10.4
poetry install

-> Repository Tag prĂĽfen: git describe --tags
-> Nutshell Version prĂĽfen: poetry version
-> Poetry Umgebung prĂĽfen: poetry env info

Hinweis, Update Nutshell: git pull && poetry install

4. Nutshell konfigurieren

FĂĽr die Mint einen Private Key generieren

openssl rand -hex 32

-> Den SchlĂĽssel gut wegsichern und nachfolgend unter MINT_PRIVATE_KEY= eintragen.

LNbits als Nutshell Backend Wallet

Ein LNbits Account mit Wallet erstellen, den Admin key ermitteln und nachfolgend unter MINT_LNBITS_KEY= eintragen.

.env Konfigurationsdatei erstellen und bearbeiten

cp .env.example .env
nano ~/nutshell/.env

-> MINT_PRIVATE_KEY=, MINT_LNBITS_ENDPOINT= und MINT_LNBITS_KEY= bearbeiten.
-> MINT_BACKEND_BOLT11_SAT= auf LNbitsWallet einstellen.

5. Nutshell starten

Einmalig starten

poetry shell
poetry run mint

-> Startet die interaktive Shell in der virtuellen Umgebung und anschlieĂźend die Mint im Terminal.

Systemdienst erstellen

sudo nano /etc/systemd/system/nutshell.service

fĂĽllen mit:

[Unit]
Description=Nutshell
After=network.target

[Service]
WorkingDirectory=/home/user/nutshell
ExecStart=/home/user/.local/bin/poetry run mint
User=user
Restart=always
TimeoutSec=120
RestartSec=30
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

-> Den user und Pfad ggf. anpassen!

Systemdienst starten und prĂĽfen

sudo systemctl enable nutshell
sudo systemctl start nutshell
sudo systemctl status nutshell
sudo journalctl -u nutshell -f --since "2 hour ago"

6. Caddy Webserver

Vorbereitung: Die Domain / Subdomain fĂĽr Nutshell auf die die IP-Adresse des Servers einrichten.

Caddy installieren

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Caddyfile erstellen

sudo nano /etc/caddy/Caddyfile

fĂĽlle mit:

# for nutshell mint
mint.yourdomain.com {
	reverse_proxy 127.0.0.1:3338 {
		header_up X-Forwarded-Host mint.yourdomain.com
	}
}

Caddy einmal neu laden

sudo systemctl reload caddy

7. Cashu Wallets

Die Mint ist eingerichtet und aktiv. Sie ist jetzt unter der Domain mint.yourdomain.com fĂĽr Cashu-Wallets erreichbar.
Auf der Webseite selbst wird nichts angezeigt, aber eCash-Wallets wie Cashu.me, Minibits oder Macadamia können damit etwas anfangen.

-> Macadamia.cash ist fĂĽr iOS,
-> Minibits.cash fĂĽr Android,
-> Cashu.me ist eine Web-Wallet, die auf mobilen Geräten und im Desktop-Browser funktioniert.

Das Besondere an Cashu.me: Es bietet die Möglichkeit, als PWA (Progressive Web App) installiert zu werden. Damit kann das Wallet direkt aus dem Browser „extrahiert“ und wie eine eigenständige App dargestellt werden. Es sieht dann nicht nur wie eine App aus, sondern verhält sich auch so.

Der Link lässt sich auf dem Startbildschirm speichern oder an die Taskleiste anheften. Auf mobilen Geräten erscheint die Option, die Seite als PWA zu installieren, wenn man sie dem Home-Bildschirm hinzufügt. In Chrome findet man außerdem in der Adressleiste ganz rechts ein kleines Monitorsymbol mit einem Pfeil in der Ecke. Fährt man mit der Maus darüber, wird beispielsweise „Cashu.me installieren“ angezeigt.

Hat man ein Cashu-Wallet eingerichtet, kann man manuell eine Mint hinzufĂĽgen. Eine Ăśbersicht verschiedener Mints findet ihr > hier <.
Zum Testen könnt ihr auch meine Mint verwenden – schreibt mir dazu einfach eine kurze Nachricht über einen der vielen Kanäle.

Alternativ – und noch einfacher: Wenn ihr Cashu-Token erhaltet, könnt ihr diese direkt einlösen.
Der Token enthält bereits die Information zur Mint, und euer Wallet verbindet sich automatisch mit ihr. Im Hintergrund wird der Token eingelöst, und ab diesem Zeitpunkt gehören die Coins euch und werden auf eurem Gerät gespeichert.

Wenn der Betrag so relevant ist, dass ihr ihn im Worst Case nicht verlieren möchtet, solltet ihr ihn auf eure eigene Mint übertragen oder – noch besser – per Lightning in eure eigene non-custodial Lightning Wallet abziehen.

Danke fĂĽrs lesen!

8. Anhang

NĂĽtzliche Links

cashubtc/nutshell – Das Nutshell Repository
awesome-cashu – Alles zu Cashu auf einer Seite
bitcoinmints.com – Übersicht verschiedener Mints mit Rating
nodeacademy.org/nutshell – Ein Kompendium für Nutshell mit LND

Backup and Recovery

Mit Cashu-Wallets erhält man oft auch eine Seed-Phrase (12 Wörter). Diese ist der Schlüssel, um eure Token wiederherzustellen.
Soweit ich das verstehe, wird ein verschlĂĽsseltes Backup auf der Mint gespeichert. Die Mint hat keinen Zugriff auf das Wallet, sie speichert nur einen Haufen kryptische Daten.

Wenn ihr ein Wallet wiederherstellt, bekommt ihr zunächst einen neuen Seed. Mit eurem Backup-Seed könnt ihr jedoch die darin gespeicherten eCash-Token wiederherstellen. Dabei werden die für euch verschlüsselt abgelegten Token auf euer neues Cashu-Wallet übertragen. Der Backup-Seed ist danach verbraucht und leer.

Zur Wiederherstellung benötigt ihr also: Euren Seed und die Information, welche Cashu-Mints ihr verwendet habt.


Erstellt mit Liebe 🧡 Seit 917103 / 917109