Ereignishorizont
Blitz⚡Bank

Blitz⚡Bank

Die selbstverwaltete Blitz⚡Bank

kommt noch..

1. Voraussetzungen

Zwei Dinge benötigt ihr, eine Domain oder Subdomain und einen Virtual Private Server (VPS). Wenn ihr schon eine Domain habt, könnt ihr recht einfach auf der Webseite eures Hosting Anbieters unter DNS / Nameserver einen neuen DNS-Eintrag mit der Subdomain eintragen und die auf die IP-Adresse des Virtual Private Server verweisen. Wenn ihr noch kein Domain habt, könnt ihr schon für unter 5 Euro pro Jahr eine Domain bekommen bei irgendeinem Hosting Anbieter bekommen. Domain und VPS Anbieter müssen nicht nicht identisch sein. Viele Web Hosting Anbieter bieten auch Virtual Private Server an. Hier habe ich mal die Einrichtung eines VPS bei Digital Ocean erklärt. Ihr könnt aber jeden x-beliebigen verwenden. Der Server benötigt nicht viel: Mindestvoraussetzung ist 1 CPU / 1 GB Ram / 25 GB SSD / 1 GB Transfer). Als Betriebssystem empfehle ich Ubuntu 22.04 LTS, mit der Version habe ich es ausgiebig getestet.

2. Server härten

Ubuntu OS Update / Upgrade durchführen

apt update && apt dist-upgrade -y

Ggf. müsst ihr mal Enter drücken

ufw (Firewall)

apt install ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22 comment 'OpenSSH'
ufw allow 80 comment 'Standard Webserver'
ufw allow 443 comment 'SSL Webserver'
ufw enable
ufw status 

-> Einmal y + Enter drücken, um die Firewall zu aktivieren.


sudo journalctl -u lnbits -f --since "2 hour ago"
sudo journalctl -u phoenixd -f --since "2 hour ago"

2. Server härten

Ubuntu OS Update / Upgrade durchführen

apt update && apt dist-upgrade -y

Ggf. müsst ihr mal Enter drücken

ufw (Firewall)

apt install ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22 comment 'OpenSSH'
ufw allow 80 comment 'Standard Webserver'
ufw allow 443 comment 'SSL Webserver'
ufw enable
ufw status 

-> Einmal y + Enter drücken, um die Firewall zu aktivieren.

fail2ban (Schutz vor Brute Force Attacken)

apt install fail2ban -y 
systemctl enable fail2ban
systemctl start fail2ban
systemctl status fail2ban

-> Zwei mal Enter bestätigen

swapfile (Virtueller RAM, für Speicherüberlauf)

fallocate -l 6G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon -s
sudo nano /etc/fstab

Folgendes an Ende anhängen, für den Autostart:

/swapfile swap swap defaults 0 0

-> Speichern und schießen mit STRG+X -> Y -> Enter

Swapfile Installation überprüfen:

htop

-> Oben links: Swp[ 0K/6.00G] -> Mit F10 beenden

Dedizierten Benutzer anlegen

adduser blitzbank

-> Passwort vergeben, Dateneingabe ist optional

usermod -aG sudo blitzbank 
sudo nano /etc/ssh/sshd_config   

Erweitern mit:

AllowUsers blitzbank

-> STRG+X -> Y -> Enter

systemctl poweroff

Jetzt ist ein guter Zeitpunkt um einen "Snapshot", also ein Backup (Image) eures Virtual Private Servers zu machen. Auf der Webseite eures Hosting Anbieters findet ihr eine Backup Funktion, mit der ihr ein Backup/Snapshot machen könnten. Mit diesem Snapshot könnte ihr später den VPS wiederherstellen. Danach den Server über die gleiche Webseite wieder starten und ab jetzt immer mit dem neuen Benutzer anmelden.

ssh blitzbank@45.157.11.35

3. Phoenix Wallet

Phoenix Installieren

Letzte Version: https://github.com/ACINQ/phoenixd/releases

mkdir phoenixd 
cd phoenixd
wget https://github.com/ACINQ/phoenixd/releases/download/v0.4.0/phoenix-0.4.0-linux-x64.zip
unzip -j phoenix-0.4.0-linux-x64.zip
./phoenixd

Ihr werdet jetzt einmal gefragt, ob euch klar ist, dass ihr für das Wallet selbst verantwortlich seid und versteht, dass ihr die 12 Seed Wörter gut sichern müsst. -> I understand Und als zweites werdet ihr gefragt, ob ihr automatische Liquiditätsmanagement versteht. Zum automatische Liquiditätsmanagement gibt es hier Infos. Grob gesagt, übernimmt Phoenix für euch das ganze Management. Ich könnt sofort die ersten Satoshi empfangen. Allerdings, muss erst eine gewisse Schwelle überschritten werden, dass sie für euch einen Kanal mit 2 Millionen Satoshis eröffnen. Der liegt bei ca. bei 30.000 Sats, dass sind die On-Chain + Service Gebühren. Später dazu mehr. -> I understand

Jetzt noch einmal Enter zum Start des Phoenix Server drücken, dann seht ihr erste Informationen, wie z.B. eure nodeid:. Den Prozess mit STRG+C erstmal wieder beenden.

Den Wallet Seed anzeigen lassen:

cat ~/.phoenix/seed.dat ; echo

Wichtig: Die 12 Wörter gut sichern! Das ist eure Versicherung, mit der ihr das Wallet immer wieder herstellen könnte. Ein Lightning Channel Backup benötigt ihr nicht, dass übernimmt Phoenix, bzw. der ACINQ Server für euch.

Phoenix Autostart Service

sudo  nano /etc/systemd/system/phoenixd.service
[Unit]
Description=phoenixd
After=network.target
[Service]
ExecStart=/home/blitzbank/phoenixd/phoenixd
WorkingDirectory=/home/blitzbank/phoenixd
User=blitzbank
Restart=always
TimeoutSec=120
RestartSec=30  
[Install]
WantedBy=multi-user.target
sudo systemctl enable phoenixd
sudo systemctl start phoenixd
sudo systemctl status phoenixd

Das Phoenix Wallet läuft ab jetzt im Hintergrund und wird immer automatisch gestartet. 🐦‍🔥

4. LNbits Server

LNbits Voraussetzungen schaffen

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

LNbits installieren

cd ~
git clone https://github.com/lnbits/lnbits.git
cd lnbits
git checkout main
poetry install --only main
cp .env.example .env
poetry run lnbits

Der Server sollte jetzt erfolgreich gestartet sein. .. SUCCESS | ✔️ Backend VoidWallet connected and with a balance of 0 msat. .. VoidWallet ist ein Leer Wallet bzw. virtuelles Wallet, dass LNbits immer automatisch einstellt, sobald keine gültige Finanzierungsquelle eingerichtet ist. Den LNbits Server kann man trotzdem bedienen, aber verwenden kann man da Wallet nicht. Transaktionen sind nicht möglich, da kein Lightning Wallet dahinter steckt. Die Einstellung werden wir gleich auf das Phoenix Wallet umstellen, aber zuerst einmal STRG+C, um den Prozess abzubrechen.

LNbits Autostart Service

sudo  nano /etc/systemd/system/lnbits.service
[Unit]
Description=LNbits
[Service]
ExecStartPre=/bin/sleep 2
WorkingDirectory=/home/blitzbank/lnbits
ExecStart=/home/blitzbank/.local/bin/poetry run lnbits
User=blitzbank
Restart=always
TimeoutSec=120 
RestartSec=30
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
sudo systemctl enable lnbits
sudo systemctl start lnbits
sudo systemctl status lnbits

-> STRG+C

5. Caddy Webserver

Vorab: Stellt sicher, das ihr bei eurem Domainanbieter die DNS-Adresse (A und AAAA) eurer Subdomain/Domain auf die IP-Adresse eures Virtual Private Servers verweist, damit Anfragen über die Domain zum VPS weitergeleitet werden.

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

Im Internet Browser testen mit: http://youripadress

Caddyfile einstellen

sudo nano /etc/caddy/Caddyfile
yourdomain.com {
  handle /api/v1/payments/sse* {
    reverse_proxy 0.0.0.0:5000 {
      header_up X-Forwarded-Host yourdomain.com
      transport http {
         keepalive off
         compression off
      }
    }
  }
  reverse_proxy 0.0.0.0:5000 {
    header_up X-Forwarded-Host yourdomain.com
  }
}
sudo systemctl restart caddy

Nach einer kurzen Verzögerung sollte Caddy alle notwendigen Zertifikaten bekommen haben und ihr könnte den Webserver mit dem Internet Browser prüfen. Einfach yourdomain.com eingeben und euer LNbits-Server sollte euch angezeigt werden. 🎉

6. Einrichtung der Bank

LNbits Super User / Admin UI aktivieren

sudo nano ~/lnbits/.env 

Folgende Zeile (ca. Zeile 12) von false auf true ändern:

LNBITS_ADMIN_UI=true

-> STRG+X -> Y -> Enter

sudo systemctl restart lnbits

Ruft jetzt euer LNbits Server erneut auf. Ihr sollte den Seitenaufruf yourdomain.com/first_install sehen. Dort ihr müsste dem Super User einen Username und Passwort vergeben.

Danach klickt einmal links oben auf "LNbits wallet" und dann rechts auf "Export to Phone with QR Code". Ihr seht jetzt unter dem QR-Code den Button COPY WALLET URL. Die URL kopieren und sicher wegspeichern, dass ist euer Zugang zum Super User Account, <u>der alle Administratorrechte hat</u>.

Empfehlung: Logt euch jetzt oben rechts unter "My Account" aus und den Super User, zukünftig nur über ein Inkognito Fenster eures Browsers, wieder ein. Das Wallet und die Erweiterungen des Super Users Accounts am besten nicht nutzen. Der Super User sollte nur zur administrativen Verwaltung verwendet werden.

Phoenix Wallet und LNbits verheiraten

Euer LNbits läuft bereits, hat aber noch das "VoidWallet" hinterlegt, also ein Dummy. Ihr müsst jetzt die Zugangsdaten des Phoenix Wallet in LNbits hinterlegen, damit LNbits Zugriff auf das Wallet hat.

Phoenix Wallet API anzeigen

 cat ~/.phoenix/phoenix.conf ; echo

Die Zeichenkette hinter http-password= ist euer API-Schlüsse den ihr braucht.

Phoenix API-Schlüssel in LNbits hinterlegen

Öffnet den Super User Account und geht auf Server / Funding Source. Klickt auf Void Wallet und stellt dort Phoenixd ein. Jetzt PHOENIX_KEY durch den Phoenix API-Schlüssel ersetzten. Der Endpoint kann so bleiben. Dann auf SAVE und weiter auf RESTART SERVER. Wenn ihr keine Fehlermeldung bekommt, habt ihr jetzt dem LNbits Server das Phoenix Wallet als Finanzierungsquelle hinterlegt. 🏆

Prüft das gerne nochmal mit den LNbits-Logdateien:

sudo journalctl -u lnbits -f --since "2 hour ago"

-> SUCCESS | ✔️ Backend PhoenixdWallet connected and with a balance of 0 msat.

-> STRG+C

Finanzieren des Phoenix Wallets

Geht jetzt nochmal zum Super User Account, klickt auf LNbits Wallet und dann auf CREATE INVOICE. Hier jetzt 100.000 Satoshis eintragen, Memo "funding" und mit CREATE INVOICE bestätigen. Die Lightning Rechnung jetzt begleichen und schon habt ihr eine "Selbstverwaltete⚡Bank".

Phoenix erledigt jetzt alles weitere für euch im Hintergrund. Sie eröffnen einen 2.000.000 Satoshis Lightning Kanal für dich, der "dual funded" ist. Der Kanal hat dann sowohl Inbound als auch Outbound Liquidität. Das heißt, ihr könnt damit bezahlen (Outbound), aber auch Empfangen (Inbound). Von den 100.000 Satoshis die ihr bezahlt habt, nimmt Phoenix sich ca. 30.000 Satoshis für die Kanal Eröffnungsgebühren (on-chain fee) und eine kleine Gebühre, für den Service, bzw. die Inbound Liquidität.

Euer Guthaben seht ihr jetzt im Super User Account unter Server / Funding. Die LNbits Balance sollte bei 100k sats liegen und eure Node Balance bei ca. 70k sats . Die 30k sats Differenz, sind die Gebühren.

Möchte ihr den Status des Lightning Channels überprüfen:

~/phoenixd/phoenix-cli listchannels | grep "txId"

-> Die txId kopieren und im mempool.space anzeigen lassen.

Weiter Infos zu eurer Channel Balance:

~/phoenixd/phoenix-cli getinfo

-> balanceSat, inboundLiquiditySat und capacitySat

7. Zusammenfassung

Damit habt ihr jetzt eine eigene Bitcoin Lightning Bank in Selbstverwahrung. Ein vollwertiges Wallet und Account System mit vielen Erweiterungsmöglichkeiten im Frontend und eine selbst verwahrte Finanzierungsquelle im Backend. Eure Möglichkeiten sind jetzt unbegrenzt und ihr benötigt keine Custody-Service mehr.

Im Anhang findet ihr noch ein paar nützliche Informationen, Erweiterungen und Optionen. Aktuelle Informationen über euer System könnt ihr Logdateien entnehmen.

sudo journalctl -u lnbits -f --since "2 hour ago"
sudo journalctl -u phoenixd -f --since "2 hour ago"

8. Anhang

Anerkennung und Referenz

Danke Yvette und Daniel für ihre Arbeit, auf die ich aufbauen konnte. 🧡

Weitere 📚 Quellen: