Die Technologie Blockchain ist noch in einem sehr frühen Entwicklungsstadium. Dies bedeutet, dass sie sich noch sehr schnell wandelt. Das macht es schwierig zu definieren, welche Frameworks und Sprachen für einen Blockchain-Entwickler allgemein wichtig sind und worauf die Weiterbildungs-Schwerpunkte liegen sollten. Im Folgenden wird ein Vorschlag für ein Einstiegs-Curriculum entwickelt.
Austausch
Der Austausch mit Kollegen über Chats und Social Communities ist wichtig. Mittlerweile ist die Blockchain-Community in manchen Unternehmen so gewachsen, dass selbst kleinere Headlines wie Updates bei der Smart-Contract-Programmiersprache Solidity schnell in entsprechenden Kanälen landen und Ideen gemeinsam in Hackathons ausprobiert werden.
Kryptographie, Verschlüsselung und mehr
Die Blockchain ist immer ein verteiltes System, und zwar kein Client-Server-System, sondern ein Client-to-Client-Netzwerk. Sie verwendet darüber hinaus verschiedene weitere Konzepte wie Transaktionen, asymmetrische Verschlüsselung und Hashing-Algorithmen. Kryptographische Verfahren werden benötigt, um Transaktionen zu validieren und eine gemeinsame Datenbasis unter vertrauenswürdigen Parteien aufzubauen. Von einem Blockchain-Engineer wird dementsprechend umfassendes Wissen in den Bereichen verteilter Systeme und Kryptographie erwartet, speziell Peer-to-Peer Systeme, asymmetrische Verschlüsselungsalgorithmen und Verfahren zur Prüfsummenberechnung.
Blockchain ist vom Konzept her so gestaltet, dass es Vertrauen schafft, indem die Transaktionshistorie nur erweitert und rückwirkend nicht verändert werden kann. Es werden zum Teil große Vermögenswerte in Smart Contracts verwaltet. Kleinste Fehler könnten hier enorme wirtschaftliche Auswirkungen haben. Dies zeigt zum Beispiel der DAO Hack, bei dem bei einer Auszahlungsfunktion erst die Überweisung getätigt wird und anschließend der Betrag vom Konto abgebucht wird. Dies ist zunächst kein Problem, solange die Funktion nur von Accounts ausgeführt. Wird die Funktion jedoch von einem Smart Contract ausgeführt, so wird zunächst das Geld an den Smart Contract gesendet, woraufhin eine Callback-Funktion ausgeführt wird. Ruft diese Callback-Funktion wieder die Auszahlungsfunktion auf, so wird das Geld zwei Mal ausgezahlt, ohne dass der Kontostand zurückgesetzt wird. Dieses Verhalten wird als Re-Entrancy bezeichnet. Ein Blockchain-Engineer sollte daher gewissenhaft arbeiten und spezielles Wissen bezüglich IT-Security mitbringen, vor allem im Bereich der Smart-Contract-Programmierung und des Testens mit Solidity.
Weiter wird erwartet, dass er oder sie generelle Konzepte verteilter Systeme verstanden hat und Kenntnisse im Bereich der Kryptographie, IT-Security und Anwendungsentwicklung mitbringt - dazu unten mehr.
Blockchain ist Open Source und wächst durch die unterstützende Community. Zu wissen, wie man mit OpenSource-Software in Sachen Handling, Einsatz und Informationsaustausch umgeht, ist also ebenfalls sinnvoll.
Blockchain alleine reicht nicht
In vielen Projekten gilt es, einen oder mehrere Anwendungsfälle auf bestehende Blockchain-Systeme zu implementieren. Der Smart-Contract-Anteil beläuft sich dabei häufig auf wenige Teile, nicht selten unter zehn Prozent. Das bedeutet auch, dass der Skill "Blockchain" einer von vielen ist. Jede und jeder Blockchain-Engineer ist immer auch ein Full-Stack-Engineer und sollte in der Lage sein, ein Frontend oder eine REST-Schnittstelle für einen Prototypen zu bauen. So werden etwa Frameworks basierend auf JavaScript bzw. Typescript eingesetzt, wie etwa AngularJS und NodeJS.
Wenn es um Frameworks, Tools und Clients geht, lohnt sich der Blick auf Remix, Truffle, Embark, Parity, Geth oder Web3js. Um schnell verschiedene Arten von Blockchain-Testnetzen zu erstellen und selbst entwickelte Smart Contracts auf bekannte Sicherheitslücken zu prüfen, bietet sich das OpenSource-Tool EDEN an.
Zwei Kernkonzepte der Blockchain
Blockchain-Technologien bestehen aus zwei wesentlichen Bereichen der Informatik: Verteilte Systeme und Kryptographie. Neben Tools und Frameworks gibt es eine Reihe Anforderungen an eine oder einen Blockchain-Engineer, die sich aus diesen Konzepten ableiten.
Verteilte Systeme
Ein verteiltes System ist ein Zusammenschluss von unabhängigen Rechnern, welche sich für den Benutzer als ein einzelnes System präsentieren. Das Teilgebiet der Informatik, welches sich mit verteilten Systemen und deren Algorithmen beschäftigt, wird verteiltes Rechnen oder verteilte Verarbeitung genannt.
Im Wesentlichen lassen sich verteilte Systeme in drei Klassen einteilen:
Client-Server-System | Viele Clients greifen auf einen oder mehrere Server zu. |
Verteilte Anwendung | Durch die Programmierung der Anwendung wird das verteilte System erstellt. |
Verteiltes Betriebssystem | Das Betriebssystem selbst ist verteilt, für die Benutzer und Anwendungen ist das nicht sichtbar. |
Die Blockchain ist eine verteilte Anwendung, da die Anwendung selbst das verteilte System erstellt. Der Blockchain-Client besteht dabei aus vier Komponenten: Dem eigentlichen Client, der die Verbindung zu anderen Clients herstellt, der Blockchain, welche die Transaktionshistorie enthält, dem Miner, der Blöcke erstellt und anschließend publiziert und der Wallet, die private Schlüssel zur sicheren Kommunikation des Anwenders enthält. Die Kommunikation der einzelnen Clients erfolgt über UDP und TCP.
Nun treten auch bei verteilten Systemen Probleme auf, die ein Software-Engineer lösen, oder besser noch: antizipieren muss.
Es kann beispielsweise zu Teilausfällen des Netzwerks kommen. In der Praxis existieren bis heute keine zufriedenstellenden Methoden, um einen Teilausfall zu erkennen und zu beheben. Blockchain basiert auf der Heartbeat-Methode. Ein neuer Heartbeatzyklus wird durch die Veröffentlichung eines Blocks angestoßen. Dabei führen alle Teilnehmer des Netzwerks einen im Protokoll definierten Prozess aus, bei dem der neue Block validiert und an die lokale Kette mit angehangen wird. Bereits Satoshi Nakamoto hat in seinem Bitcoin Whitepaper bereits auf mögliche Angriffsszenarien aufmerksam gemacht. Nach seiner Berechnung kann ein Angreifer manipulierte Blöcke veröffentlichen und diese anschließend auch noch bestätigen, wenn er über mehr als 50 Prozent der dem Netzwerk bereitgestellten Rechenkraft verfügt.
Weiter verwenden verteilte Systeme keinen gemeinsamen Speicher, so dass die Kommunikation über das Versenden und Empfangen von Nachrichten erfolgen muss. Dieses Verfahren kann sehr fehleranfällig sein, da zum Beispiel die Nachrichtenlaufzeit nicht vorsehbar ist. Die Blockchain verwendet dabei das asynchrone Modell zur Verarbeitung von Nachrichten. Die einzelnen Prozesse warten nicht, bis eine Transaktion in die Blockchain mitaufgenommen wird.
Für den Blockchain-Engineer bedeutet das, dass dieser über ein umfassendes Wissen von verteilten Anwendungen verfügt, die Konzepte hinter Blockchain verstanden hat und stets im Hinterkopf haben muss. Außerdem wird ein Grundwissen der Netzwerktechnik erwartet.