Waves Node Installation unter Linux (Ubuntu/Lubuntu)

Erstellt am:17.03.2021 Aktualisiert am:01.06.2022

Wer im Krypto-Space passives Einkommen erwirtschaften möchte, der kann WAVES staken oder selbst eine 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 Node ist jedoch mit Aufwand verbunden: Wartung, Updates, Monitoring usw.

Wenn du der Waves Node-Community beitreten möchtest, dann findest du hier die vollständige Node-Installationsanleitung. Es ist eine detailierte Step by Step Anleitung zum aufsetzen bzw. installieren einer eigenen Waves Node unter Linux (Ubuntu/Lubuntu). Beachte, dass eine Node mindestens 1000 WAVES im Staking/Leasing oder selbst im Besitz haben muss, damit Blöcke gemint werden. Die Gesamtinstallation inkl. Konfiguration und Blockchaindownload dauert etwa zwei Stunden.

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/Lubuntu) vorhanden sein. D.h. dir ist bekannt was ein Terminal ist und du weißt, wie man im Terminal einen Befehl ausführt, zB. ein Verzeichnis wechselt. In dieser Anleitung wird alles über Terminal bzw. über eine SSH Verbindung 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 Tests zu verwenden. MainNet-Daten wie zB. Waves-Adresse, können nicht im und für TestNet und anders herum verwendet werden. Ein weiterer Unterschied ist die Verzeichnisbezeichnung. MainNet hat das Verzeichnis: "waves/", das TestNet hat das Verzeichnis "waves-testnet/".

1.2 Systemvoraussetzungen

Eine Waves-Node funktioniert bereits ab 4 GB RAM. Für den Dauerbetrieb einer MainNet-Node werden jedoch 8 GB empfohlen. Für die gesamte Blockchain wird eine Festplattengröße von aktuell 80 GB (MainNet) und 30 GB (TestNet) benötigt (Stand 05.2022).

Für die Installation inkl. Download der Blockchain werden jedoch ca. 195GB Festplattenplatz benötigt. Das Ubuntu-System benötigt etwa 45GB, dann muss die Blockchain von aktuell 75GB (Stand 05.2022) heruntergeladen und dann nochmal mit 75GB entpackt werden. Gesamt sind damit 195GB knapp bemessen. Ich empfehle hier mindestens 200GB oder mehr einzurichten.

1.3 Linux System aufsetzen / installieren

Diese Anleitung beschreibt die Installation einer Waves Full-Node auf einem Linux-System (Ubuntu/Lubuntu). Entsprechend benötigst du ein Linux-System. Dieses Linux-System sollte nach Möglichkeit "clean" sein, demzufolge sollte es neu aufgesetzt/installiert worden sein.

D.h. installiere jetzt ein komplett neues Linux System (falls nicht schon vorhanden), welches du für diese Node-Installation verwenden möchtest. Du kannst dazu auch VirtualBox (virtueller PC) verwenden. Eine Anleitung zum installieren eines Linux-Systems unter VirtualBox findest du hier: Lubuntu 19 Grundinstallation

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 auf einer VirtualBox betrieben werden.

1.4 SSH Server auf Linux installieren (falls notwendig)

Diesen Punkt kannst du überspringen, wenn du Direktzugriff (auf Terminal über GUI) auf deinem Linux-System hast. Falls nicht, dann führe diesen Punkt jetzt entsprechend aus.

Bei VPS wird SSH benötigt. Was SSH bedeutet und wie es installiert sowie verwendet wird, beschreibe ich detailiert in dieser Anleitung: Remote Verbindung zum Linux via SSH Server

1.5 Linux Updates durchführen

Damit der Installationsverlauf ordentlich funktioniert, solltest du jetzt dein Linux updaten. Führe dazu diese zwei Update- und Upgrade-Befehle im Terminal oder über deinen SSH-Zugang aus. Mehr Info zum Update / Upgrade findest du hier: Update / Upgrade Linux

$ sudo apt-get update 
$ sudo apt-get upgrade

1.6 Java per Terminal oder SSH installieren (Linux)

Der Waves-Server (Node) benötigt Java in Version 8 oder 11. D.h. installiere jetzt Java in der gewünschten Version auf deinem Linux-System. Ich empfehle die version 11 zu installieren.

Wie du die Javaversion prüfen und installieren kannst, erfährst du hier: Java openJDK Installation (Linux)

1.7 Waves-Wallet MainNet oder TestNet über Waves.Exchange erstellen

Der Waves-Server benötigt zum funktionieren eine eigene WAVES Wallet auf der Blockchain. D.h. erstelle jetzt eine Waves-Wallet für deine Node. Das kannst du einfach über den Waves.Exchange Client machen. Wichtig dabei ist, dass du hier zwischen TestNet und MainNet unterscheidest. Links zu den entsprechenden Clients: MainNet | TestNet

Und hier beschreibe ich, wie du unter Waves-Exchange eine Wallet erstellen kannst: WAVES Wallet erstellen

2.0 Die WAVES Node-Installation

Nach Erledigung der oberen Punkte kann jetzt mit der Installation der Waves-Node begonnen werden. Die Installation erfolgt über APT Repository (Advanced Packaging Tool).

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. Melde dich über SSH PuTTY, PowerShell oder über das Terminal an und führe 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 apt-key add -

2.2 WavesPlatform zum APT Magazin (Repository) hinzufügen

Je nachdem, ob du den TestNet- oder den MainNet-Server 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.

Wichtig:
xenial muss auch bei neueren Linux-Versionen verwendet werden, d.h. bei foscal ebenso xenial verwenden.

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üssen die software-properties installiert werden. Das wird über diesen Befehl ausgeführt. Danach kann Punkt 2.2 wiederholt werden.

$ sudo apt install software-properties-common

2.3 APT Update/Upgrade durchführen

Führe 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) mit Punkt 2.2 geholt wurde, kann jetzt die entsprechende WAVES-Node installiert werden. Für das MainNet muss der folgende Befehl ausgeführt werden:

$ sudo apt install waves

Und für das TestNet muss dieser Befehl ausgeführt werden:

$ sudo apt install waves-testnet

Die Installation dauert jetzt etwa 5-10 Minuten.

2.5 Die WAVES application.ini konfigurieren oder herunterladen

Durch die Installation ist die application.ini-Datei angelegt worden. Über die application.ini wird u.a. gesteurt, wie viel Arbeitsspeicher die Java virtual machine (JVM) erhält. Wie unter den Voraussetzungen (Punkt 1.2) bereits beschrieben, 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

Für eine TestNet-Node müssen die Werte in 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 oder die SSH Verbindung 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 ist auf der folgenden Seite der gesamte Aufbau dieser Datei im Detail erklärt: Waves Node Konfiguration

2.7 Waves Blockchain downloaden und entpacken

Nachdem die waves.conf-Datei konfiguriert wurde, muss jetzt die Blockchain vor dem Start der Node heruntergeladen werden. Dies dauert bei einer guten Internetverbindung ca. 1h. Bei normaler Verbindung kann dies 3-4h dauern. Bei starker Überlasung des Download-Servers kann dies auch mal 8-9 Stunden dauern. Der Download der Blockchain wird mit diesem Befehl gestartet. Wichtig: Groß- Kleinschreibung beachten!

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üfe als nächstes, ob das Blockchain-Verzeichnis "data" nicht eventuell schon vorhanden ist. Das kann passieren, wenn man den Server schon einmal gestartet hat. D.h. prüfe mit diesem Befehl, ob das Verzeichnis "data" im MainNet oder TestNet vorhanden ist:

$ ls /var/lib/waves/
$ ls /var/lib/waves-testnet/

Wenn in diesem Verzeichnis der Ordner "data" nicht existiert, dann kannst du diesen Punkt überspringen. Andernfalls muss dieser Ordner nun komplett gelöscht werden (MainNet oder TestNet):

$ rm -r /var/lib/waves/data/
$ rm -r /var/lib/waves-testnet/data/

Jetzt kann die blockchain_last.tar entspackt werden. Das wird mit diesem Befehlt durchgeführt. Auch hier, oben MainNet, unten TestNet:

$ tar -xvf /var/lib/waves/blockchain_last.tar -C /var/lib/waves/
$ tar -xvf /var/lib/waves/blockchain_last.tar -C /var/lib/waves-testnet/

3.0 Systemstart / Node-Wechsel

Fast geschafft! Deine Node ist nun komplett installiert und konfiguriert. Du kannst deine Node nun starten. Das erfolgt mit diesem Befehl für MainNet oben, für TestNet unten.

$ systemctl start waves.service
$ systemctl start waves-testnet.service

Zum prüfen, ob deine Node erfolgreich gestartet wurde und auch läuft, führe folgenden Befehl aus:

$ 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

Waves Config-Change / Wallet und Restart / Fragen & Antworten

Nachfolgend noch ein paar wichtige Infos und Befehle, die jeder Node-Betreiber kennen sollte. Beachte, dass bei diesen Beispielen MainNet beschrieben wird. Für TestNet muss einfach statt "waves", "waves-testnet" eingegeben werden.

1. Server stoppen, starten, deakvieren

$ systemctl stop waves.server
$ systemctl start 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. Damit aber der Server die wallet.dat neu anlegen kann, muss diese vorher manuell mit diesem Befehl gelöscht werden:

$ rm /var/lib/waves/wallet/wallet.dat

3. waves.config editieren

Über eine SSH-Verbindugn kann kein GUI-Editor wie featherpad usw. verwendet werden. Um die waves.conf-Datei über SSH trotzem bearbeiten zu können, kann das Programm nano verwendet werden:

$ nano /etc/waves/waves.conf

4. Server Status prüfen

Um den Waves Node Status prüfen zu können, kann der folgende Befehl verwendet werden:

$ journalctl -u waves.service -f

5. Logs prüfen / löschen

Die Waves-Node erzeugt durchgehen Logs um mögliche Fehler finden zu können. Diese Log-Dateien (Archive) sollten in gewissen Zeitabständen gelöscht werden. Am besten ist es, sich hier eine monatliche Erinnerung im Kalender einzustellen.

Mit diesem Befehl werden Log-Archive gelöscht:
[Update:] Seit Version 1.3 werden Logs nicht mehr erzeugt.

$ rm /var/log/waves/*.log.gz

6. Müssen Node-Rewards an die Node selbst gestaked werden?

Sobald die Node Rewards erwirtschaftet, müssen diese nicht manuell ins Staking zur selbigen/eigenen Node hinzugefügt werden. Die erwirtschaftete Waves-Menge wird automatisch einbezogen.

7. Die Meldung "forked at 2721396" und was in so einem Fall unternommen werden sollte?

Bitfinex.com Krypto-Börse

Unter PyWaves - NodeList kann der Status jeder Node geprüft werden. Es kann vorkommen, dass deine Node "forked at xxx" meldet. Das bedeutet, dass deine 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 um den Fehler zu beheben.