Blockchain-Client Mit Raspberry Pi Ethereum entdecken
Anbieter zum Thema
Etherium bietet mehr als Kryptowährungen und die Absicherung von Transaktionen. Das Unternehmen stellt eine verteilte Datenverarbeitungsplattform bereit. Dieser Beitrag zeigt, wie sich ein Ethereum-Blockchain-Client auf einem „Raspberry Pi 3B“ installieren und ausführen lässt.

Blockchain ist noch immer ein unglaublich heißes Thema, was nicht zuletzt darauf zurückzuführen ist, dass Kryptowährungen – insbesondere Bitcoin – scheinbar über Nacht für frühe Nutzer generiert haben. Ein anderer Aspekt sind die neuen wirtschaftlichen Möglichkeiten, die sich durch Kryptowährungen eröffnen.
Blockchain kann aber für bedeutend mehr als Kryptowährungen verwendet werden. Das Blockchain-Konzept eignet sich aufgrund seines komplexen, verteilten Gebildes sowie der Fähigkeit zum Verifizieren von Transaktion für fälschungssichere Datensätze auch für IoT-Anwendungen. Das Interessante an der Ethereum-Plattform ist, dass sie über Kryptowährungen und die Absicherung von Transaktionen hinausgeht und eine verteilte Datenverarbeitungsplattform bereitstellt.
In diesem Beitrag werfen wir einen kurzen Blick auf die Ethereum-Architektur und versuchen, einige der wesentlichen Konzepte und Komponenten zu erläutern, bevor wir uns mit der Installation der Client-Software auf einem Raspberry Pi befassen. Nur zur Klarstellung: Wir decken hier nicht das Mining von Kryptowährungen ab, da hierfür eine wirklich leistungsstarke GPU benötigt wird, aber ein Raspberry Pi kann für die Erstellung einer einfachen Sandbox für Versuche verwendet werden – und das beweist, dass es tatsächlich möglich ist, Blockchain-Technologie mit integrierten Plattformen bereitzustellen.
Ethereum 101
Eine Blockchain ist ein Distributed Ledger (verteiltes Hauptbuch), das in der Regel über ein Peer-to-Peer-Netzwerk verwaltet wird und immer weiter wächst, wenn weitere Datensätze – oder Blocks – sukzessive hinzugefügt werden. Blocks enthalten für gewöhnlich einen Zeitstempel sowie Transaktionsdaten und sind mittels Hashing-Algorithmen kryptographisch gesichert. Das heißt, dass Daten nach der Übergabe nicht mehr verändert werden können – sie sind unveränderbar.
Ether ist die Kryptowährung von Etherium
Die Ethereum-Plattform hat ihre eigene Kryptowährung, genannt Ether, baut aber auch weiter auf Blockchain-Technologie auf, um eine dezentralisierte Plattform für Smart Contracts zu schaffen. Bei Smart Contracts handelt es sich um Objekte, die Code-Funktionen enthalten und auf der Blockchain aufsetzen. Sie sind in der Lage, mit anderen Verträgen zu interagieren, Entscheidungen zu treffen, Daten zu speichern und anderen Ether zu senden.
Smart Contracts werden in einer Sprache namens Solidity implementiert, die auf JavaScript basiert. Der Solidity-Compiler wird zum Kompilieren von Smart Contracts zu Bytecode verwendet – genau wie dies bei JavaScript oder beispielsweise Python-, Java- und Android-Code vor der Ausführung der Fall ist – und dieser wird dann über die Ethereum Virtual Machine (EVM) ausgeführt. Die Ausführung von Transaktionen in einem Smart Contract ist mit Kosten verbunden. Doch dieses ist nicht Thema unseres Beitrags.
Es sind verschiedene Client-Anwendungen für Ethereum verfügbar, wobei die Originalreferenzimplementierung geth in Go geschrieben ist. Einige sind zum Mining von Ether imstande und es gibt auch eine Standalone-Mining-Software sowie GUI-Clients und eine IDE für verteilte Anwendungen.
Neben dem primären, öffentlichen Ethereum-Blockchain-Netzwerk mainnet gibt es Testnetzwerke für Versuche und Sie können auch Ihre eigenen privaten Netzwerke erstellen.
Das Einmaleins zu Ethereum
In der Annahme, dass Raspbian bereits installiert ist, können wir zunächst mit der Aktualisierung der installierten Softwarepakete auf die neuesten Versionen beginnen (Bild 1 der Bildergalerie).
$ sudo apt-get update
$ sudo apt-get dist-upgrade
Bei meinem ersten Versuch den Ethereum-Client zu kompilieren, war nicht ausreichend Arbeitsspeicher verfügbar. Eine gute Möglichkeit, RAM für speicherintensive Aufgaben freizumachen, besteht darin, den der GPU zugeordneten Speicher zu reduzieren. Wenn Sie nicht unbedingt einen grafischen Desktop benötigen, können Sie Ihr System auch so konfigurieren, dass es beim Booten einfach die Befehlszeile öffnet.
$ sudo raspi-config
3 → Booten
B1 → Desktop/CLI
B1 → Konsole
7 → Erweitert
A3 → Speicherverteilung
16 (MB)
Neu booten
Danach lassen sich die gebündelten Abhängigkeiten installieren.
$ sudo apt-get install git golang libgmp3-dev
Anschließend nehmen wir die Quellen für geth, die offizielle Go-Sprachimplementierung eines Ethereum-Knotens, kompilieren diese und kopieren die ausführbaren Dateien unter den Pfad /usr/local/bin/.
$ mkdir src
$ cd src
$ git clone -b release/1.7 https://github.com/ethereum/go-ethereum.git
$ cd go-ethereum
$ make
$ sudo cp build/bin/geth /usr/local/bin/
Kontoerstellung und Test
Zunächst verwenden wir geth zur Erstellung eines neuen Kontos (Bild 2 der Bildergalerie):
$ geth account new
Dadurch wird ein neuer Satz kryptographischer Schlüssel generiert und der private Schlüssel wird mit einem Passwort geschützt. Beachten Sie, dass es sich bei Verwendung dieses Kontos für das Mining von Kryptowährung und bedeutungsvolle Transaktionen empfiehlt, Ihre Schlüssel zu sichern und den Zugriff auf Ihren privaten Schlüssel zu verhindern.
Nun starten wir den Knoten (siehe: Bild 3):
$ geth --syncmode light --cache 64 --maxpeers 12
Bei Ausführung von geth ohne Argumente wird ein Knoten gestartet und es wird versucht, die gesamte öffentliche Mainnet-Blockchain zu synchronisieren. Angesichts der Größe von > 50 Gigabyte, die zudem auch noch beständig zunimmt, ist dies auf einem Embedded Computer keine so gute Idee. Stattdessen starten wir den Knoten im Synchronisierungsmodus Leicht. So werden nur Block-Header abgerufen, wie sie erscheinen, und andere Teile der Blockchain auf Anforderung.
Um das Beenden des Knotens zu erzwingen, ist einfach STRG+C zu drücken. Zum Ausführen als Service beim Booten:
$ sudo vi /etc/systemd/system/geth@.service
„vi“ lässt sich auch durch einen anderen bevorzugten Texteditor ersetzen. Geben Sie dann folgendes ein:
[Unit]
Description=Ethereum daemon
Requires=network.target
[Service]
Type=simple
User=%I
ExecStart=/usr/local/bin/geth --syncmode light --cache 64 --maxpeers 12
Restart=on-failure
[Install]
WantedBy=multi-user.target
Nun ist Speichern der Datei angesagt, zum Ausführen des Ethereum-Knotens als „pi“-Benutzer die Kommandos:
$ sudo systemctl enable geth@pi.service
$ sudo systemctl start geth@pi.service
Bei Ausführung unseres Ethereum-Knotens als Service ist ein Anfügen wie folgt möglich:
$ geth attach
Dadurch erhalten wir eine interaktive JavaScript-Konsole. Von hier aus können wir Funktionen aufrufen wie:
> eth.accounts
Damit werden die aktuellen Konten aufgelistet (siehe: Bild 4). Zum Abrufen von Informationen zu den verbundenen Peers (siehe: Bild 5):
> admin.peers
Zu beeachten ist, dass das Light-Client-Protokoll sich noch in der Entwicklung befindet, in gewisser Weise experimentell ist und auf Unterstützung durch vollständige Peers/Knoten angewiesen ist. Demnach ist es womöglich nicht besonders praktisch, es zum Zeitpunkt des Schreibens für Transaktionen auf der Ethereum-Mainnet-Blockchain zu verwenden. Die Dinge entwickeln sich aber schnell und die Situation könnte sich in nicht allzu ferner Zukunft auch leicht ändern.
Hinweis: Der Originaltext entstammt der Partnerpublikation „Elektronik Praxis“
* Andrew Back ist Freelance Consultant bei AB Open und Autor auf der Community Designspark von RS Components.
(ID:45326145)