Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Mit Raspberry Pi Ethereum entdecken – Teil 1: erste Schritte

Pi_Ethereum1_1fa72be7f086b5bdc06c00c480ed56dd73840657.jpg

Installieren und Ausführen eines Ethereum-Blockchain-Clients auf einem Pi 3, Modell B.

Blockchain ist seit einiger Zeit und auch momentan noch ein brisantes Thema, was nicht zuletzt auf das Vermögen zurückzuführen ist, das Kriptowährungen – insbesondere Bitcoin – für frühe Nutzer scheinbar über Nacht generiert haben, sowie auf die neuen wirtschaftlichen Möglichkeiten, die sich durch Kryptowährungen eröffnen.

Blockchain kann aber für bedeutend mehr als Kryptowährungen verwendet werden und wie Greig es in seinem jüngsten Beitrag angemerkt hat, eignet sich das Blockchain-Konzept aufgrund der verteilten Natur 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 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

contract mortal {
    /* Define variable owner of the type address */
    address owner;

    /* This function is executed at initialization and sets the owner of the contract */
    function mortal() { owner = msg.sender; }

    /* Function to recover the funds on the contract */
    function kill() { if (msg.sender == owner) selfdestruct(owner); }
}

contract greeter is mortal {
    /* Define variable greeting of the type string */
    string greeting;
    
    /* This runs when the contract is executed */
    function greeter(string _greeting) public {
        greeting = _greeting;
    }

    /* Main function */
    function greet() constant returns (string) {
        return greeting;
    }
}

Ein Beispiel für einen Ethereum-Startvertrag. Quelle: ethereum.org.

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.

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. Damit befassen wir uns in einem künftigen Beitrag.

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

CP_geth_make1_ff91cce5e5450ced1866d24248b81b1b8326209c.jpg

In der Annahme, dass Raspbian bereits installiert ist, können wir zunächst mit der Aktualisierung der installierten Softwarepakete auf die neuesten Versionen beginnen.

$ 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 können wir 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

CP_geth_account_new_dbe1594a9757b68967faa56511301254750bee1a.jpg

 

Zunächst verwenden wir geth zur Erstellung eines neuen Kontos.

$ 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.

CP_geth-firstRun_51a18f5c62808f7a3ca802da072d51d3fbf918aa.jpg

$ 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 GB, 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, drücken Sie einfach STRG+C. Zum Ausführen als Service beim Booten:

$ sudo vi /etc/systemd/system/geth@.service

(Ersetzen Sie „vi“ durch Ihren bevorzugten Texteditor.)

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

Speichern Sie die Datei. Zum Ausführen des Ethereum-Knotens als „pi“-Benutzer:

$ sudo systemctl enable geth@pi.service
$ sudo systemctl start geth@pi.service

CP_gethAttach_db7a4f9b6dc9cb9fccef9219297ae92cd262f979.jpg

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.

CP_gethAttach_admin-peers_9e4b78b6f051577ac537a4304e648a00fc258694.jpg

Zum Abrufen von Informationen zu den verbundenen Peers:

> admin.peers

Beachten Sie, 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.

Ausblick

Bis jetzt haben wir nur die Client-Software installiert, ein Konto erstellt, einen Knoten gestartet und eine Peer-Verbindung betrachtet. Im nächsten Beitrag befassen wir uns mit der eigentlichen Ausführung von Transaktionen.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.