Der Ein-Platinen-Rechner als Krypto-Device So erstellen Sie Ihre private Blockchain mit Raspberry Pi

Andrew Back* |

Anbieter zum Thema

Erforschen Sie mit „Raspberry Pi“ „Ethereum“, und erstellen Sie ein Testnetzwerk mit vorab zugewiesenen Geldern und Peering-Knoten. In dem Artikel steht, wie das geht.

Blockchain und Ethereum: entdecken mit Raspberry Pi
Blockchain und Ethereum: entdecken mit Raspberry Pi
(Bild: Raspberry Pi / Ethereum)

Ethereum ist eine dezentrale Plattform zur Abwicklung digitaler Verträge (Smart Contracts) und damit weit mehr als nur eine Kryptowährung. In diesem Artikel erfahren Leser, wie sie eine private Blockchain (Blockkette) erstellen und nutzen – und dabei Ethereum erforschen.

Im Artikel Blockchain-Client, „Mit Raspberry Pi Ethereum entdecken“ informierte Andrew Back über die Grundlagen der dezentralen Blockchain-Plattform Ethereum, ihre Währung, den Ether und den Smart Contracts, Verträgen auf Software-Basis. Außerdem zeigt er in dort noch, wie sich ein Ethereum-Blockchain-Client auf einem „Raspberry Pi 3B“ installieren und ausführen lässt. Dieser Artikel baut auf den Infos auf.

Bildergalerie
Bildergalerie mit 7 Bildern

Wenn Sie einen Knoten so konfiguriert haben, dass er das Hauptnetz verwendet und im Synchronisationsmodus läuft, kann dieser gestoppt und der Start deaktiviert werden über folgenden Befehl:

$ sudo systemctl stop geth@pi.service$ sudo systemctl disable geth@pi.service

Erstellen eines neuen Kontos

Wir brauchen einen Namen für unser neues Blockchain-Netzwerk und verwenden für dieses Beispiel „DesignSpark“. Standardmäßig speichert Ethereum Daten in einem Unterverzeichnis Ihres Home-Verzeichnisses namens „ethereum“, das heißt in einem versteckten Verzeichnis unter Linux/BSD. Um die Daten für unsere private Blockchain getrennt zu halten, verwenden wir „designspark“. Starten wir nun und erstellen ein neues Konto (die Befehle finden Sie auch als Screenshot in der Bildergalerie):

$ geth --datadir .designspark account new

Notieren Sie sich die Adresse des Kontos, da wir diese bei der Initialisierung des neuen Netzwerks benötigen werden, wenn wir vorab Zuweisungen vornehmen möchten.

Am Anfang steht Block 0

Es gibt immer ein erstes Glied in einer Kette und genau so verhält es sich in einer Blockchain. Es ist ein Genesis-Block zu erstellen, der von der ersten Gruppe von Knoten verwendet wird, die am Netzwerk teilnehmen sollen. Dies wird über eine JSON-Datei konfiguriert und der Inhalt der von uns verwendeten Datei lautet folgendermaßen:

(Bild: RS Components)

Die „chainId“ ist ein numerischer Wert, der das Netzwerk identifiziert. Eine Liste derjenigen Werte, die derzeit von öffentlichen Netzwerken verwendet werden, finden Sie über diesen Link. Wir müssen eine Nummer für unser privates DesignSpark-Netzwerk auswählen, etwa 555. Weitere Parameter dieser Datei sind:

  • homesteadBlock: Homestead ist ein Ethereum-Release und für unsere Kette ist dies auf 0 gesetzt.
  • eip155Block: Für unsere Kette wird diese auf 0 gesetzt.
  • eip158Block: Für unsere Kette wird diese auf 0 gesetzt.
  • difficulty: Dieses bestimmt die Schwierigkeit des Minings, und in unserem Fall wollen wir diese relativ gering halten.
  • GasLimit: Dies ist die Grenze der Gaskosten pro Block.
  • alloc: Hier können wir den Accounts vorab Zahlungen zuweisen.

Tipp: Wer diese und weitere Befehle nicht abtippen sondern kopieren möchte, findet sie im Beitrag Exploring Ethereum with Raspberry Pi Part 2der Community Designspark von RS Components.

Standards der Ethereum-Plattform

Standards für die Ethereum-Plattform finden sich in den Ethereum Improvement Proposals (EIPs). Diese können ergänzt werden, etwa um Mängel zu beheben. Wenn ein Netzwerk wächst, kann es an einem bestimmten Punkt abgezweigt werden, um die Einbindung von EIPs zu ermöglichen. Doch für unser privates Netzwerk ist es eher von Interesse, Details darüber zu erfahren, wo EIP155 mit mainnet implementiert wurde und was dies bewirkt (Details dazu siehe Spurious Dragon auf GitHub.)

Gas ist die Einheit, die als Maß dafür dient, wie viel Arbeit eine Aktion oder ein Satz von Aktionen erfordert. Dadurch können Kosten für die Ausführung intelligenter Verträge – den Smart Contracts –entstehen . Die Objekte der Blockchain, die Code-Funktionen enthalten und in der Lage sind, mit anderen Verträgen zu interagieren, können Entscheidungen treffen, Daten speichern und die Ethereum-Währung Ether an andere senden.

Alloc ermöglicht es uns, Währungen einem oder mehreren Konten vorzuweisen. Hier wurden Zuwendungen an die Adresse des zuvor angelegten Kontos vergeben.

Nachdem wir unsere Konfigurationsdatei in designspark.json gespeichert haben, können wir das Netzwerk nun initialisieren mit:

$ geth --datadir .designspark init designspark.json

Unser Genesis-Block ist nun erstellt und wir stehen am Anfang unseres neuen Netzwerks. Sofern nachfolgende Knoten auf die gleiche Weise initialisiert werden, können diese auch Mitglieder werden.

Start des ersten Knotens

Um den ersten Knoten mit der JavaScript-Konsole zu starten, geben wir folgenden Befehl ein:

$ geth --identity chainpi --rpc --rpcport 8080 --rpccorsdomain "*" --datadir .designspark --port 30303 --nodiscover --rpcapi "db,eth,net,web3" --networkid 555 console

Die einzelnen Parameter bedeuten folgendes:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu RZ- und Server-Technik

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung
  • indentity: legt die Identität des Ethereum-Knotens fest.
  • rpc*: Konfiguriert die verschiedenen RPC-Einstellungen, die verfügbaren APIs und wer Zugriff darauf hat.
  • Datadir: Wichtig ist, dass wir das gleiche Datenverzeichnis wie vorher verwenden.
  • nodiscover: Das bedeutet, dass unser Knoten nicht auffindbar ist.
  • networkid: Dies muss die gleiche numerische ID sein, die während der Initialisierung konfiguriert wurde.

Sobald wir die Konsole betreten haben, können wir mit eth.accounts die verfügbaren Konten auflisten und mit eth.getBalance den Saldo überprüfen.

> eth.accounts> primary = eth.accounts[0]> balance = web3.fromWei(eth.getBalance(primary), “ether”);

Beachten Sie, dass die zurückgegebene Zahl viel kleiner ist als diejenige, die wir über designspark.json vorbelegt haben. Das liegt daran, dass die Differenz in Ether zurückgegeben wurde, während bei der Initialisierung die Zuordnung tatsächlich in Wei, einer weitaus kleineren Einheit, festgelegt wurde.

Anlegen eines 2. Knotens

Ein Blockchain-Netzwerk mit nur einem Knoten würde nicht viel nützen und so werden wir ein zweites erstellen. Diesmal ist es empfehlenswert, statt des Rasperry Pis einen Computer mit etwas mehr RAM zu verwenden, etwa einen Laptop oder Desktop mit Debian/Ubuntu, da wir irgendwann einmal einen Miner laufen lassen wollen.

Zur Erinnerung, die Schritte sind folgende:

  • Installieren Sie geth.
  • Führen Sie den Befehl wie oben beschrieben aus, um ein neues Konto zu erstellen.
  • Initialisieren Sie mit derselben JSON-Konfigurationsdatei.
  • Starten Sie den Knoten wie bisher, aber verwenden Sie diesmal eine andere Identität!

Ist dies erfolgt, startet der Knoten und wird in der JavaScript-Konsole abgelegt. Dann können wir das neue Konto und seinen Saldo noch einmal überprüfen.

> eth.accounts> primary = eth.accounts[0]> balance = web3.fromWei(eth.getBalance(primary), “ether”);

Dieses Mal sollten wir einen Saldo von 0 haben, da wir dem Konto keine Mittel zugewiesen haben.

Anbindung der Peers

Da wir nicht wollen, dass unsere Knoten auffindbar sind, haben wir sie mit der Option --nodiscover gestartet. Deshalb müssen wir einen Weg finden, sie zu konfigurieren. Dies gelingt, indem wir eine Datei namens static-nodes.json in datadir erstellen, die in unserem Fall ~/.designspark ist.

Zuerst müssen wir jedoch die Enode-URL für jeden unserer Knoten durch Eingabe in der JavaScript-Konsole auf jedem System ermitteln:

> admin.nodeInfo.enode

Wir füllen dann die Datei static-nodes.json mit der folgenden Information:

["enode://01f5ecc7c232f7571175bffc71c4e1608e1308e2ce7fd6ed3ae17d5e97e2d5253dcaa854286f99991d671788127f7902fa56d20875eabae49665a515da105047@10.100.1.196:30303", "enode://5156218119a3697389a34bf0a19ceca49d9f3d06948836b8cc6c206c9f7b7081e64537eeb0f9c059561736a8e7cb6ebbe438028dd949d0f69f4cab642c11d46c@10.100.1.229:30303"]

Beachten Sie, wie [::] durch die IP-Adresse des Knotens ersetzt wurde und das Suffix ?discport=0 weggelassen wurde.

rde, können wir geth über CTRL-D beenden und die Konsole neu starten. Danach geht's zum ersten Knoten:

> admin.peers

Jetzt sollten wir die Details für den zweiten Knoten sehen. Wenn wir dieses auf dem zweiten Knoten wiederholen, sollten wir die Knoteninformationen für den ersten Knoten sehen.

Unser eigenes privates Blockchain-Netzwerk mit zwei Knoten ist erstellt. Jedes mit einem Account und eines mit vorab zugewiesenen Währungen.

Hinweis: Der Originaltext entstammt der Partnerpublikation „Elektronik Praxis

* Andrew Back ist Freelance Consultant | AB Open und Autor auf der Community Designspark von RS Components, UK

(ID:45400501)