Wie lässt sich die Blockchain in der Logistik einsetzen? Ein Versuch

Blockchain & Logistik
© THATREE - stock.adobe.com
Bewerten
1 Bewertungen,
Durchschnitt 4,0

Blockchains lassen sich in vielen Bereichen anwenden. Auch in der Logistik gibt es verschiedene Einsatzgebiete für diese Technologie. Versuchsweise haben wir eine Webapplikation für das Transportmanagement entwickelt. Die Programmierung hat uns sehr viel über die Grenzen, aber auch die Chancen der Blockchain vermittelt.

Bei dem Wort „Blockchain“ denken viele als Erstes an die Kryptowährung Bitcoin. Zugegebenermaßen ist Bitcoin das wohl prominenteste Beispiel für den Einsatz einer Blockchain, nicht zuletzt wegen der Schlagzeilen über den Sinkflug des Kurses in den letzten Monaten. Doch Blockchain als Technologie bietet weit mehr Möglichkeiten als Kryptowährungen aktuell ausnutzen.

Transport­manage­ment mit Smart Contracts

Um ein Gefühl für das Arbeiten mit der Blockchain zu bekommen, haben wir uns 20 Tage Zeit genommen, um einen Prototyp zu bauen. Die Idee war inspiriert von unserem Alltagsgeschäft in der Logistik: Wir wollten eine Webapplikation für die Ausschreibung, Auswahl und Abwicklung von Transport-Dienstleistungen entwickeln.

Dabei erstellt ein Teilnehmer eine Ausschreibung für einen benötigten Transport von Ort A nach Ort B mit Wunsch-Lieferdatum X. Andere Teilnehmer können zu dieser Ausschreibung konkrete Angebote abgeben, mit Angabe von Kosten und möglichem Liefertermin. Der Ausschreiber kann die Angebote sichten und nach Wunsch annehmen. Die beim Transport anfallenden Nachweis-Dokumente kann der Dienstleister dem Auftraggeber über die Plattform zur Verfügung stellen, und nach abgeschlossenem Transport wird automatisch die Zahlung ausgeführt. Hier kommt ein großer Vorteil der Blockchain zum Tragen: Sie soll dabei nämlich nicht nur als transparenter Datenspeicher fungieren. Zusätzlich können alle Prozesse manipulationssicher als Smart Contract abgebildet werden.  

Smart Contracts sind Objekte (im Programmier-Sinne) mit Attributen und Methoden, die in der Blockchain über eine Transaktion installiert werden. Der Grundgedanke, und auch maßgeblich für den Namen verantwortlich, war die Idee eines digitalen Vertrages, bei dem die beteiligten Parteien nicht sich gegenseitig, sondern nur dem Smart Contract vertrauen müssen. Um dies zu erreichen, wird zu jeder Instanz eines Smart Contracts der gesamte Quellcode (oder besser gesagt Bytecode) in der Blockchain abgelegt. Dadurch ist der Quellcode transparent für jeden einsehbar und kann nach der Installation nicht mehr geändert werden. Man kann Smart Contracts auch als „neutrale dritte Partei“ betrachten. Diese Möglichkeit der sicheren Code-Ausführung kann man aber für weit mehr als normale Verträge nutzen.

Die Umsetzung mit den richtigen Tools

Wir hatten also unsere Aufgabenstellung, jetzt begann die Suche nach den richtigen Werkzeugen. Aufgrund der Vorkenntnisse im Team war Angular in Version 5 mit Bootstrap für das Frontend die nächstliegende Lösung. Beim Backend fiel die Wahl relativ schnell auf Ethereum, primär wegen der exzellenten Unterstützung von Smart Contracts und des großen Ökosystems.

Abgesehen von der Blockchain und einem Webserver wollten wir kein weiteres Backend wie eine Datenbank oder einen Application-Server. Diese Einschränkung haben wir uns selbst gesetzt, um zum einen die Programm-Logik nicht über mehrere Programmiersprachen zu erstrecken, und zum anderen, um die inhärente Transparenz von Datenänderungen in der Blockchain bestmöglich auszuspielen. Es zeichnete sich aber ab, dass die Blockchain aufgrund der Datenmenge nicht für die Dokumentenablage geeignet ist, und deshalb eine zusätzliche Dateiablage wie IPFS unumgänglich sein könnte. Mit der Entscheidung für Ethereum war der restliche Technologie-Stack dann schnell gefunden: Truffle  zum Bauen, Testen und Ausrollen von Smart Contracts und web3js für die Kommunikation zwischen Web-Frontend und Blockchain. Zusätzlich haben wir auch truffle-contract, welches Teil des oben erwähnten Truffle Frameworks ist, eingesetzt, um das Arbeiten mit den Smart Contracts zu vereinfachen. Statt die Transaktionen nämlich selbst zu konstruieren und an die Blockchain zu schicken, kapselt truffle-contract die Blockchain fast vollständig weg und ermöglicht das Arbeiten mit Smart Contracts wie mit einem JavaScript-Objekt. Um die Entwicklung und das Testen mit der Blockchain zu vereinfachen, haben wir anstatt einer richtigen Blockchain mit Ganache gearbeitet, eine aus dem gleichen Haus wie Truffle kommende, Ethereum-kompatible und speziell für die Entwicklung konzipierte Blockchain-Implementierung.

Heraus­forde­rungen beim Programmieren der Smart Contracts

Die erste Überraschung erlebten wir schon sehr früh: Jeder, der Zugriff auf die Blockchain hatte, konnte mit etwas Aufwand alle Smart Contracts inklusive aller enthaltenen Daten auslesen. Damit wurde jeder Teilnehmer zu einer Glaskugel: Jegliche Ausschreibungen und vor allem alle abgegebenen Angebote können also potenziell von der Konkurrenz eingesehen werden. Natürlich kann man Verschlüsselung einsetzen, aber auch die hilft nur zu einem gewissen Grad. Alle Daten, mit denen die Etherum Virtual Machine (EVM) arbeiten/rechnen muss, müssen im Klartext vorliegen. Da wir für dieses Problem keine zufriedenstellende Lösung finden konnten, die nicht gleichzeitig die Komplexität explodieren lässt, haben wir es für diesen Prototyp erst einmal nicht weiter betrachtet.

Zu Beginn haben wir uns auf die Smart Contracts konzentriert. Programmiert werden diese in Solidity, einer speziell für Smart Contracts konzipierten Sprache. Unser ursprünglicher Plan sah vor, die Business Objekte in den Smart Contracts strukturiert als Structs abzubilden, was sich aber sehr schnell als unmöglich herausstellte. Die Smart Contracts werden innerhalb der Blockchain in der EVM ausgeführt, einer speziellen und isolierten Laufzeitumgebung innerhalb der Blockchain, die man sich wie eine kleine Java-VM vorstellen kann. Wie bei allen anderen Aktionen auf der Blockchain auch muss die Rechenleistung der EVM beim Ausführen eines Smart Contracts (bzw. einer seiner Methoden) vom Aufrufer in Form von „Gas“ bezahlt werden, komplexe Methoden können sehr schnell die Kosten nach oben treiben. Des Weiteren ist die Benutzung von Variablen und der Zugriff auf Attribute des Smart Contracts aufgrund des limitierten Heaps der EVM stark eingeschränkt. In unserem konkreten Fall konnten wir das aber umgehen, da der überwiegende Teil der Business Objekte für die eigentliche Ausführung des Smart Contracts nicht relevant ist. Deshalb sind wir dazu übergegangen, die Business Objekte im JSON-Format als BLOB im Smart Contract abzulegen und nur die wirklich vom Smart Contract zur Laufzeit benötigten Daten (beispielsweise das Ende-Datum der Ausschreibung) als Attribute. Dadurch sind diese Daten zwar doppelt vorhanden und es eröffnet die Möglichkeit von Daten-Inkonsistenzen, was wir aber für den Prototyp in Kauf genommen haben.

Nachdem die Tests der Smart Contracts erfolgreich waren, ging die Reise weiter in Richtung Web-Frontend. Und dieser Teil ging erstaunlich schnell von der Hand. Durch die Vorkenntnisse mit Angular war der erste Entwurf schnell gemacht. Die Integration von web3js und truffle-contract in den Angular Dependency Injection Mechanismus bereitete dabei die meisten Probleme.

Durch truffle-contract macht das Arbeiten mit Smart Contracts wirklich Spaß. Wobei es sich für mich eher so anfühlte, als würde ich mit REST-Endpunkten und nicht mit JavaScript-Objekten arbeiten. Ich frage truffle-contract nach einem Smart Contract vom Typ X an Adresse Y, und bekomme ein JavaScript Promise zurück. Wenn dieses Promise aufgelöst wurde, kann ich auf dem Smart Contract Objekt eine Methode aufrufen und bekomme wieder ein RxJS Observable zurück, das zu dem Ergebnis der Methode auflöst. Macht die Methode nur einen lesenden Aufruf, erhält man das Ergebnis nahezu sofort; bei einem schreibenden Zugriff erst, wenn die Transaktion in einen Block festgeschrieben wurde. Dadurch stehen dem Entwickler auch alle Freiheiten und Möglichkeiten zur Verfügung, die RxJS bietet, wie beispielsweise das Mappen von Werten und parallele Auflösen von Observables mit anschließendem Zusammenführen der Ergebnisse.

Richtig spannend wurde es noch einmal beim Thema Authentifizierung („Wer bist du?“) und Autorisierung („Was darfst du?“). Blockchains haben bereits von Haus aus ein Authentifizierungssystem, sonst könnte jemand einfach im Namen anderer beliebige Transaktionen ausführen. Um nicht das Rad neu erfinden zu müssen, wollten wir dieses bestehende System nutzen und ein Autorisierungssystem darauf aufsetzen.

Es kostete etwas mehr Zeit als erwartet, um wirklich zu verstehen, wie die Authentifizierung in der Blockchain funktioniert und welche Rädchen wo ineinandergreifen. Letztendlich erfolgt die Authentifizierung rein über die valide Signatur einer Transaktion, deren Prüfung von der Blockchain automatisch vorgenommen wird. Die Smart Contracts wissen selbst, wer (im Sinne von welche Blockchain-Adresse) sie installiert hat und sichert mit diesem Wissen seine Methodenaufrufe gegen unbefugte Zugriffe ab. Für das Login im Web-Frontend erfolgt die Autorisierung über einen einfachen Smart Contract, der eine Whitelist von Blockchain-Adressen enthält. In diesem Smart Contract werden zu jeder Blockchain-Adresse noch Metadaten gespeichert, beispielsweise der Name zur Anzeige oder Rollen zur Aktivierung bestimmter Funktionen im Web-Frontend. Im Rahmen der Absicherung haben wir den Prototyp ebenfalls im Zusammenspiel mit Browser-Wallet-Managern wie MetaMask erfolgreich getestet.

Fazit: Vorteile der Blockchain in der Auftragsab­wicklung

Leider konnten wir in den vorgegebenen 20 Tagen nicht alle Funktionen umsetzen. Das ganze Thema Dokumenten-Upload und -Verwaltung muss wohl bis zum nächsten Prototypen warten. Nichts desto trotz war aus unserer Sicht das Projekt ein voller Erfolg und hat uns wertvolle Einblicke und Erfahrungen gebracht.

Wir sind uns sicher, dass die Blockchain eine sinnvolle Technologie für das Transportmanagement ist, weil die Verwendung von Smart Contracts, sobald sie eingerichtet sind, sehr einfach ist. Die Authentifizierung und Autorisierung macht ein Arbeiten für alle Beteiligten sicher und effizient. Sowohl für denjenigen, der einen Auftrag ausschreibt, als auch für diejenigen, die ein Angebot machen, wird die Auftragsvergabe transparent.

Keine Updates
mehr verpassen:
1
© THATREE - stock.adobe.com

Zurück