Waves Node Installation Linux (Ubuntu/Lubuntu)
Wenn ihr im Krypto-Space passives Einkommen erwirtschaften möchtet, dann könnt ihr WAVES staken oder selbst eine eigene WAVES-Node betreiben. Mit dem Betrieb einer eigenen WAVES-Node ist der Ertrag aufgrund der zusätzlichen Einnahmen durch zusätzliche/externe Staker höher. Der Betrieb einer eigenen Node ist jedoch mit etwas Aufwand und Verantwortung verbunden: Wartung, Updates, Monitoring und UpTime-Sicherstellung.
Wer eine eigene WAVES-Node aufsetzen und betreiben möchte, der findet in diesem Artikel die vollständige Node-Installationsanleitung. Es ist eine detailierte Step by Step Anleitung zum aufsetzen einer eigenen WAVES-Node unter Linux (Distribution: Ubuntu). Beachtet bitte, dass eine Node min. 1000 WAVES halten oder im Staking/Leasing haben muss, damit Blöcke geminted werden. Die Installationsdauer inkl. Konfiguration beträgt etwa zwei Stunden. Auf gehts!
1. Vorbereitung
1.1 Vorab Informationen
Diese Anleitung ist auch für Anfänger geeignet. Trotzdem sollte ein Grundlagenwissen aus dem Bereich IT und Linux (Ubuntu) vorhanden sein. Euch sollte ein Terminal und die Grundbefehle bekannt sein. Die gesamte Installation wird über das Terminal druchgeführt. Es ist keine GUI-Anleitung.
Waves kann als MainNet oder als TestNet installiert werden. Wie der Name schon sagt, ist das TestNet für Testzwecke vorgesehen. Im TestNet haben alle Token keinen Wert. Es können keine Token zwischen MainNet und TestNet übertragen werden. Die Wallet-Adressen unterscheiden sich zwischen MainNet und TestNet. Ein weiterer Unterschied ist die Verzeichnisbezeichnung. MainNet nutzt das Verzeichnis: "waves/", TestNet das Verzeichnis "waves-testnet/".
1.2 Systemvoraussetzungen
Eine Waves-Node funktioniert bereits ab 4 GB RAM. Für den Dauerbetrieb einer MainNet-Node werden 8 GB RAM empfohlen.
Für die Installation einer MainNet Node (System + Blockchain) benötigt ihr mindestens 365 GB Festplattenspeicher. Das Ubuntu-System benötigt etwa 45 GB und die Blockchain muss heruntergeladen und entpackt werden (2x 160 GB) (Stand 03.2024). Daher empfehle ich mindestens 400 GB für MainNet. SSD-Festplatte wird empfholen.
1.3 Linux System aufsetzen / installieren
Diese Anleitung beschreibt die Installation einer Waves Full-Node auf einem Linux-System (Distro: Ubuntu). Entsprechend benötigt ihr ein sauberes bzw. neu aufgesetztes Linux-System.
Setzt entsprechend zuerst ein komplett neues Linux-System auf (falls nicht schon vorhanden). Ihr könnt dazu auch VirtualBox nutzen. Eine Anleitung dazu findet ihr hier: Lubuntu 19
Empfehlung: Für den Betrieb einer MainNet Node wird ein VPS empfohlen. Gute und günstige Anbieter sind DigitalOcean und Contabo (HISPEED-1). Eine MainNet-Node kann und darf aber auch auf einer VirtualBox betrieben werden.
1.4 SSH Server auf Linux installieren (falls notwendig)
Diesen Punkt könnt ihr überspringen, wenn ihr über die GUI auf das Terminal Zugriff habt. Bei VPS benötigt ihr immer SSH, um auf das Terminal des VPS-Servers zu gelanden. Installiert jetzt auf eurer Node den SSH-Server. Wie das funktioniert, zeige ich hier: Remote Verbindung zum Linux SSH Server
1.5 Linux Updates durchführen
Damit der Installationsverlauf ordentlich funktioniert, solltest ihr die Node jetzt updaten. Führt dazu diese zwei Update- und Upgrade-Befehle im Terminal der Node aus. Mehr Infos zum Update / Upgrade findet ihr hier: Lubuntu/Ubuntu Pakete aktualisieren (update/upgrade)
$ sudo apt-get update
$ sudo apt-get upgrade
1.6 Java per Terminal / SSH installieren (Linux)
Die WAVES-Node benötigt Java OpenJDK in Version 11 oder 17. D.h. installiere jetzt Java in der Version auf deinem Linux-System. Wie Java auf einem Linux-System installiert wird zeige ich hier: Java openJDK 8/11 unter Linux (Ubuntu/Lubuntu) installieren
1.7 Waves-Wallet MainNet oder TestNet über wx.network erstellen
Die WAVES-Node benötigt zum funktionieren eine eigene WAVES Wallet auf der WAVES-Blockchain. Erstellt jetzt eine Waves-Wallet für eure Node. Das könnt ihr einfach über den wx.exchange Client machen. Wichtig dabei ist, dass ihr hier zwischen TestNet und MainNet unterscheidet. Download-Links zu den entsprechenden Clients: WX.Network | WX.Network TestNet
Hier beschreibe ich, wie ihr unter waves.network eine Wallet erstellt: WX.Wallet
2.0 WAVES-Node Installation
Nach Abschluss der oberen Punkte könnt ihr jetzt mit der Node-Installation beginnen. Die Installation erfolgt über APT Repository (Advanced Packaging Tool). Keine Sorge, es klingt nur kompliziert.
2.1 GPG Schlüssel bekannt gegeben
Als erstes muss der GPG-Schlüssel bekannt gegeben werden. Dazu muss curl auf dem Linux-System installiert sein. Meldet euch über SSH bzw. über das Terminal an und führt zur curl-Installation folgenden Befehl aus.
$ sudo apt install curl
Jetzt kann über den curl-Befehl der GPG-Schlüssel bekanntgegeben werden. Führt dazu im Terminal folgenden Befehl aus.
$ curl -sL http://apt.wavesplatform.com/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/apt-wavesplatform-com.gpg
2.2 WavesPlatform zum APT Magazin (Repository) hinzufügen
Je nachdem, ob ihr TestNet- oder MainNet-Node installieren möchtest, muss das entsprechende APT Magazin (Repository) für die Installation hinzugefügt werden. Bei dieser Ausführung werden alle Daten heruntergeladen und die Paketlisten aktualisiert.
Info: xenial muss auch bei neuen Linux-Versionen verwendet werden, d.h. bei foscal ebenso xenial verwenden.
Führt jetzt diesen Befehl aus:
Für TestNet:
$ sudo add-apt-repository "deb https://apt.wavesplatform.com/ xenial testnet"
Für MainNet:
$ sudo add-apt-repository "deb https://apt.wavesplatform.com/ xenial mainnet"
Sollte an dieser Stelle die Meldung "add-apt-repository command not found" erscheinen, dann müsst ihr die software-properties installieren. Das geht mit diesem Befehl. Wiederholt danach Punkt 2.2.
$ sudo apt install software-properties-common
2.3 APT Update/Upgrade durchführen
Führt jetzt ein Update und Upgrade durch:
$ sudo apt update $ sudo apt upgrade
2.4 Waves Node installieren
Hier wird die abschließende Installation durchgeführt. Abhängig davon, welche Node (TestNet oder MainNet) ihr bei Punkt 2.2 ausgewählt habt, kann jetzt die entsprechende WAVES-Node installiert werden. Für das MainNet müsst ihr jetzt den folgenden Befehl ausführen:
$ sudo apt install waves
Und für das TestNet müsst ihr diesen Befehl ausführen:
$ sudo apt install waves-testnet
Die Installation dauert jetzt etwa 10 Minuten. Startet den Server (Node) mit diesem Befehl danach neu:
$ sudo reboot now
2.5 Die WAVES application.ini konfigurieren oder herunterladen
Mit der Node-Installation ist die application.ini-Datei angelegt worden. Über die application.ini wird u.a. gesteuert, wie viel Arbeitsspeicher die Java virtual machine (JVM) erhält. Wie unter Voraussetzungen (Punkt 1.2) erwähnt, sollte eine MainNet-Node 8 GB erhalten. Eine auskonfigurierte application.ini einer MainNet-Node sieht wie folgt aus.
-J-Dwaves.defaults.blockchain.type=mainnet -J-Dwaves.defaults.directory=/var/lib/waves -J-Dwaves.defaults.config.directory=/etc/waves # options from build -J-server -J-Xms4g -J-Xmx8g -J-XX:+ExitOnOutOfMemoryError -J-XX:+UseG1GC -J-XX:+UseNUMA -J-XX:+AlwaysPreTouch -J-XX:+PerfDisableSharedMem -J-XX:+ParallelRefProcEnabled -J-XX:+UseStringDeduplication -J-Dfile.encoding=UTF-8
Bei der TestNet-Node müssen die Werte der application.ini wie folgt aussehen.
-J-Dwaves.defaults.blockchain.type=testnet -J-Dwaves.defaults.directory=/var/lib/waves-testnet -J-Dwaves.defaults.config.directory=/etc/waves-testnet # options from build -J-server -J-Xms4g -J-Xmx8g -J-XX:+ExitOnOutOfMemoryError -J-XX:+UseG1GC -J-XX:+UseNUMA -J-XX:+AlwaysPreTouch -J-XX:+PerfDisableSharedMem -J-XX:+ParallelRefProcEnabled -J-XX:+UseStringDeduplication -J-Dfile.encoding=UTF-8
Das Verzeichnis dieser Datei ist "/etc/waves/" (MainNet), und "/etc/waves-testnet/" (TestNet). Diese Datei kann über das Terminal mit dem Editor nano bearbeitet werden. Um das ganze einfacher zu machen, kann die application.ini auch direkt auskonfiguriert über diesen Befehl heruntergeladen werden:
Für MainNet:
$ curl https://www.chaincheck.de/stuff/waves-node-anleitung/mainnet/application.ini -o /etc/waves/application.ini
Für TestNet:
$ curl https://www.chaincheck.de/stuff/waves-node-anleitung/testnet/application.ini -o /etc/waves-testnet/application.ini
2.6 Konfigurieren der waves.config
Die WAVES Config-Datei ist relativ komplex, daher habe ich auf der folgenden Seite den Aufbau dieser Datei im Detail erklärt: Waves Node Konfigurations-Datei waves.conf
Konfiguriert jetzt die waves.config-Datei aus.
2.7 Waves Blockchain downloaden und entpacken
Nachdem ihr die waves.conf-Datei auskonfiguriert habt, muss jetzt die Blockchain vor dem Start der Node heruntergeladen und entpackt werden. Der Download dauert bei einer guten Internetverbindung ca. 1-2h. Bei starker Überlasung des Download-Servers kann dies aber auch ~9 Stunden dauern. Den Download der Blockchain führt ihr mit diesem Befehl aus:
Für MainNet:
$ wget -c http://blockchain.wavesnodes.com/blockchain_last.tar -P /var/lib/waves/
Für TestNet:
$ wget -c http://blockchain-testnet.wavesnodes.com/blockchain_last.tar -P /var/lib/waves-testnet/
Prüft als nächstes, ob das Blockchain-Verzeichnis "data" schon existiert. Das ist möglich, wenn die Node (Node-Dienst) schon einmal gestartet wurde. Die Prüfung führt ihr mit diesem Befehl aus:
$ ls /var/lib/waves/ $ ls /var/lib/waves-testnet/
Wenn der Ordner "data" nicht existiert, dann könnt ihr diesen Punkt überspringen. Andernfalls müsst ihr diesen Ordner mit diesem Befehl jetzt leeren. (oben: MainNet, unten: TestNet):
$ rm -d /var/lib/waves/data/* $ rm -d /var/lib/waves-testnet/data/*
Jetzt kann die blockchain_last.tar entspackt werden. Dieser Vorgang dauert, abhängig von der Hardware, etwa 20-30 Min. Das Entpacken wird mit diesem Befehl durchgeführt. Auch hier, oben MainNet, unten TestNet:
$ tar -xvf /var/lib/waves/blockchain_last.tar -C /var/lib/waves/data/ $ tar -xvf /var/lib/waves/blockchain_last.tar -C /var/lib/waves-testnet/data/
3.0 Systemstart und Node-Wechsel
Fast geschafft! Eure eigene WAVES-Node ist nun komplett installiert und konfiguriert. Ihr könnt eure Node nun starten. Das erfolgt mit diesem Befehl (oben: MainNet unten TestNet):
$ systemctl start waves.service $ systemctl start waves-testnet.service
Jetzt könnt ihr mit diesem Befehl prüfen, ob die Node läuft:
$ journalctl -u waves.service -f $ journalctl -u waves-testnet.service -f
Sieht die Ausgabe wie folgt aus, bzw. es gibt die Ausgabe "MicroBlock" und "New height: xxxx", dann war die Node-Installation und der Start der Node erfolgreich.
Mar 16 16:41:18 x1.consr.net waves[10687]: INFO c.w.s.BlockchainUpdaterImpl - MicroBlock(B8kKF9o... -> 7kydM44..., txs=6) appended, diff=63374b0 Mar 16 16:41:23 x1.consr.net waves[10687]: INFO c.w.s.BlockchainUpdaterImpl - MicroBlock(4RR512Z... -> B8kKF9o..., txs=1) appended, diff=d75f3f6c Mar 16 16:41:28 x1.consr.net waves[10687]: INFO c.w.s.BlockchainUpdaterImpl - MicroBlock(5Rc4ddB... -> 4RR512Z..., txs=4) appended, diff=b02a6498 Mar 16 16:41:33 x1.consr.net waves[10687]: INFO c.w.s.BlockchainUpdaterImpl - MicroBlock(CCPHwmT... -> 5Rc4ddB..., txs=1) appended, diff=1039424b Mar 16 16:41:36 x1.consr.net waves[10687]: INFO c.w.s.BlockchainUpdaterImpl - New height: 2505451 Mar 16 16:41:38 x1.consr.net waves[10687]: INFO c.w.s.BlockchainUpdaterImpl - MicroBlock(AxAZsML... -> uzebxbE..., txs=1) appended, diff=4d38c552 Mar 16 16:41:40 x1.consr.net waves[10687]: INFO c.w.s.BlockchainUpdaterImpl - MicroBlock(5aDZU9s... -> AxAZsML..., txs=1) appended, diff=d071d6db
Fragen & Antworten Waves Config-File / Wallet / Restart
Nachfolgend noch ein paar wichtige Infos und Befehle, die jeder Node-Betreiber kennen sollte. Beachtet, dass bei diesen Befehlen MainNet angesprochen wird. Für TestNet muss einfach "waves" gegen "waves-testnet" geändert werden.
1. Server/Node stoppen, starten, restarten, deakvieren und aktivieren
$ systemctl stop waves.server $ systemctl start waves.server $ systemctl restart waves.server $ systemctl disable waves.server $ systemctl enable waves.server
2. Wallet.dat löschen
Immer wenn in der waves.conf-Datei eine signifikante Änderung vorgenommen wurde, muss die wallet.dat neu angelegt werden, andernfalls kann der Node-Dienst nicht starten. Damit der Node-Dienst diese Datei neu anlegen kann, muss diese Datei vorher gelöscht werden. Die wallet.dat könnt ihr mit diesem Befehl löschen.
$ rm /var/lib/waves/wallet/wallet.dat
3. waves.config editieren
Über eine SSH-Verbindugn/Terminal kann kein GUI-Editor wie featherpad, Nodepadqq usw. verwendet werden. Um die waves.conf-Datei über SSH/Terminal bearbeiten zu können, könnt ihr auf das Programm nano zugrückgreifen.
$ nano /etc/waves/waves.conf
4. Server Status prüfen
Um den Waves-Node Status prüfen zu können, könnt ihr diesen Befehl verwenden:
$ journalctl -u waves.service -f
5. Logs prüfen / löschen
Um Fehler finden zu können, erzeugt die Node grundsätzlich Logs. Diese Log-Dateien (Archive) sollten in gewissen Zeitabständen gelöscht werden.
Mit diesem Befehl werden Log-Archive gelöscht:
$ rm /var/log/waves/*.log.gz
6. Müssen Node-Rewards an die eigene Node gestaked werden?
Die erwirtschafteten Rewards der Node müssen nicht manuell ins Staking zur selbigen/eigenen Node hinzugefügt werden. Die erwirtschaftete Waves-Menge wird automatisch einbezogen.
7. Meldung "forked at 2721396" und was in so einem Fall unternommen werden sollte?

Es kann vorkommen, dass eure Node "forked at xxx" meldet. Das bedeutet, dass eure Node nicht mehr im Konsens der anderen Nodes ist. Häufig normalisiert sich die Node von selbst, einfach 20-30 Minuten abwarten. Sollte es nicht funktionieren, dann kann die Node gestoppt und neu gestartet werden. Dadurch sollte sich der Fehler beheben. Und wenn das nicht hilft, dann muss die Blockchain neu heruntergeladen werden.
8. Meldung "/var/lib/waves/data/LOCK: Permission denied"
Prüft bei dieser Meldung im Verzeichnis "/var/lib/waves/data/", ob alle Dateien den richtigen Eigentümer und die richtige Gruppe "waves" haben. Das könnt ihr mit dem Befehl "ll data/" durchführen. Ist das nicht der Fall, dann müssen alle Datein den Eigentümer und die Gruppe "waves" erhalten. Das könnt ihr mit diesem Befehl durchführen.
$ chown waves:waves data/LOC* $ chown waves:waves data/CURRENT
Danach könnt ihr eure WAVES-Node starten.
$ sudo systemc