Ethereum Light Node mit Geth Far Rim in go auf Debian Bullseye Raspberry Pi

Ein Node ist ein Computer, der Teil des Ethereum-Netzwerkes ist. Dieser speichert entweder eine unvollständige (Light Client, (Downloads all block headers, block data, and verifies some randomly)) oder vollständige (Full Node ( Downloads all blocks (including headers, transactions, and receipts) and generates the state of the blockchain incrementally by executing every block)) Kopie der Blockchain und schreibt diese permanent fort.

Da ich noch einen alten Raspberry Pi 2 B+ liegen hatte, habe ich da mal einen Light Node drauf installiert. Das geht mit dem Proof-of-Work Client Geth der für alle (viele) Betriebssystem vorliegt. …

Vorbedingung

Es muss die aktuelle Raspberry Pi OS Lite (32-Bit) Version Bullseye vom 30.10.2021 installiert sein.

Es wird nur ein SSH Zugang benötigt, da wir ohne GUI arbeiten. Die SD-Karte muss auch nicht groß sein, und man braucht keine SSD bzw. Festplatte da der Light Node bisher nur ca. 400 MB benötigt. Eine 16 oder 32GB Karte reicht also. Hier das aktuelle Verzeichnis mit Größenangaben:

Geth installieren

Zuerst wollen wir Geth installieren. Dazu müssen wir uns auf der Downloadseite die für unseren Pi Passende Version raus suchen.

Da ich ein arm6 Raspberry Pi 2 B+ verwende, kann ich die Linux stable release Version Geth 1.10.13 verwenden.

Blockchain anlegen

(Optional) Um eine private Blockchain zu erzeugen, muss erst eine Datei mit dem sog. Genesis-Block angelegt werden.

Dann in der genesis.json Datei den folgenden Inhalt einfügen:

Optional evl. noch die chainId anpassen, wenn nicht die default Chain Id verwenden werden soll:
1 Ethereum mainnet
2 Morden (disused), Expanse mainnet
3 Ropsten
4 Rinkeby
5 Goerli
42 Kovan
1337 Geth private chains (default)

Init Blockchain

(Optional) Nun einmalig ein init der Blockchain mit der genesis.json aufrufen, wenn eine eigene private Blockchain verwendet werden soll.

Sync. bzw. starten der Blockchain

Nun kommen wir zum starten der Blockchain.

Welcher Block gerade aktuell ist, kann auf diesem Eth. Block Explorer angezeigt werden. Bei mir ist es gerade die Blocknummer 13850173.

Leistungsverbrauch

Das war es schon, wir haben einen Eth. ligth Node am laufen, der wenn er syncronisiert ist, auch nicht viel Leistung braucht:


Während der init, wird aber schon die 100 % verbraucht, wie dieses HTOP Bild zeigt:

JavaScript Konsole

Während der Node läuft, kann eine andere Konsole geöffnet werden. Dort starten wir nun die JavaScript Konsole.

1. Check

Erster Check, eingabe in der Konsole:

Das Ergebnis:

Blocknummer ausgeben

Oder nur die Block Nummer ausgeben

Verbundene Peers anzeigen

Die Verbundene Peers können mit

angezeigt werden. Z.b. hier gekürzt

Kontostand einer echten Eth. Adresse ausgeben

Nun wollen wir mal von einer echten Eth. Adresse (meine buy me a Coffee Adresse 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2) den Kontostand abfragen. Wenn es eine Fehlermeldung gibt, ist evl. die Syncronisation noch nicht abgeschlossen.

Wer will, kann auf diese Adresse auch etwas für Kaffee überweisen, und dann checken ob der Betrag sich verändert hat.

Kontostand per curl und RPC Call

Nun noch den Kontostand per RPC von einer anderen Konsole von meiner Kaffee Adresse: 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2:

Das JSon Ergebnis:

Das ist der Kontostand in Hexadecimal und WEI. Wenn man ETH braucht, muss es in Dezimal konvertiert werden und durch 10 hoch 18 geteilt werden.

Node im Hintergrund starten

Damit wir das Konsolenfenster nicht immer offenhalten müssen, starten wir den Node im Hintergrund mit

Der Output landet dann in der nohup.out Datei und kann mit

angeschaut werden.

Node autom. als systemctl starten

Optional kann auch ein System-Dienst eingerichtet werden, der dann automatisch beim rebooten startet.
Dazu einfach die Datei

mit diesen Inhalt anlegen:

Dann noch den Service anschalten mit:

Den Status des Service kann mit

abgefragt werden. Z.b.:

Starten und Stoppen des Service geht dann als pi User so:

Weitere Infos

Weitere Infos in engl. auf ethereum.org oder auch in bezug auf Geth und für die JavaScript web3js Konsole.

Oder auch alle Parameter über geth –help