Was ist die Corda Blockchain?

Achtung: Corda ist momentan brandheiss! Wäre Corda eine heisse Suppe, wären momentan viele Menschen bereit, sich die Zunge zu verbrennen, um mehr Informationen darüber zu erhalten oder entsprechende Projekte umzusetzen.

Corda ist eine Open Source Blockchain Plattform basierend auf der Distributed Ledger Technology (DLT). Corda gehört zur dritten Blockchain Welle.

Eine private Blockchain

Weiss eigentlich mittlerweile jeder, was eine Blockchain ist? Falls nicht, bitte kurz die Einführung dazu lesen.

Corda ist eine Weiterentwicklung der ursprünglichen Blockchain für Bitcoins. Der Grundgedanke ist aber geblieben: In einem Netzwerk hat es verschiedene Teilnehmer (Englisch: peers oder nodes oder participants) und jeder Teilnehmer hat eine Buchhaltung über die getätigten Transaktionen. (Ich mag das Wort Buchhaltung mehr als Hauptbuch, obwohl das eigentlich treffender wäre für das englische Wort ledger. Schlussendlich könnte man auch Datenbank sagen, das ist schlussendlich nicht so relevant für das Verständnis).

Im Gegensatz zur Bitcoin Blockchain hat aber jeder Teilnehmer seine eigene Buchhaltung!

Es gilt nicht mehr das Prinzip, dass alle Transaktionen öffentlich sind und im gesamten Netz verteilt werden. Teilnehmer A kann Teilnehmer B Geld schicken, und nur diese beiden Nodes kennen dann diese Transaktionen.

Und besonders im Businessbereich, etwa bei Banken, ist die Privatsphäre das oberste Gut. Und Corda verspricht, diese Privatsphäre zu gewähren und zu schützen.

Zusammenarbeit mit Industriepartnern

Der grosse Vorteil von Corda: Es wurde von Grund auf für das Business konzipiert. Die dafür zuständige Firma R3 steht dazu im Kontakt mit über 200 Mitgliedern der Industrie, darunter Banken oder Wirtschaftsverbände.

Das Ziel von Corda ist es, komplexe Finanztransaktionen durchführen zu können. Der Austausch von Bitcoin zwischen A und B ist aus finanztechnischer Sicht nämlich eine einfache Transaktion. In einer Bank oder einer Versicherung müssen hunderte weitere Finanzinstrumente umgesetzt werden können.

Und wo werden die umgesetzt? Natürlich in Code, und dafür gibt es uns Programmierer 🙂

Die Programmierlogik wird dabei in sogenannte CorDapps gepflanzt.

Obwohl Corda von der traditionellen Blockchain inspiriert wurde, gibt es darin keine Kryptowährung. Corda geht noch viel weiter: Das Ziel ist es, jedes beliebige Finanzinstrument definieren und verwenden zu können.

Double Spending Problem wird durch Notare verhindert

Ein grosses Problem bei Blockchain Netzwerken ist das Double Spending Problem. In Corda sind die Lösung dazu sogeannte Notare. Dabei handelt es sich um einen weiteren Teilnehmer im Corda Blockchain Netzwerk – Dieser Teilnehmer kann aber mehrere Notare beinhalten.

Notare haben das Ziel, zu prüfen, dass bereits ausgegebenes Geld nicht noch einmal ausgegeben wird. Das wird technisch relativ einfach implementiert: Alle Transaktionen beziehungsweise jeder Geldbetrag wird in einer Liste gespeichert. Wenn der Geldbetrag schon einmal ausgegeben wurde, kann er nicht noch einmal ausgegeben werden.

Ja gut, das ist jetzt vielleicht ein bisschen arg fest vereinfacht erklärt (obwohl es natürlich Sinn macht). Für technische Details mache ich eventuell mal einen eigenen Blogeintrag.

Ein kleiner technischer Einblick in Corda

In Corda gibt es besonders drei technische Objekte, die von zentraler Relevanz sind:

  • States (welche in Transaktionen verwendet werden)
  • Contracts
  • Flows

Ein State ist dabei quasi ein Snapshot von einem beliebigen Objekt – etwa eines Kontos. Eine Transaktion ist dann die Überführung von einem Zustand (Input State) zu einem anderen (Output State). Wenn Person A also 100 Dollar an B zahlen will, wird eine Transaktion erstellt, bei der Person A im Input State 100 Dollar besitzt und im Output State diese an Person B übergeben werden.

Technisch isch ein State einfach eine Java… ähm ne warte, eine Kotlin Klasse mit Attributen, Gettern und Settern. Es können aber beliebige Attribute definiert werden, und genauso können beliebige finanzielle Produkte in Code erstellt werden.

Ein Contract beinhaltet Prüfungen, die eine Transaktion bestehen muss, damit diese valid ist. Wenn Person A 100 Dollar an Person B geben will, kann eine solche Prüfung etwa sein „Hat Person A 100 Dollar auf dem Konto?“ oder auch „Hat Person A überhaupt ein Konto bei uns?„. Die Prüfungen können beliebig eincodiert werden.

Ein Flow beschreibt den gesamten Transaktionsfluss. Wenn Person A Geld an Person B schicken will, muss Person A beziehungweise sein Node in der Blockchain eine Transaktion erzeugen und diese mit dem entsprechenden Contract prüfen lassen. Dann schickt Person A die Transaktion an Person B/Node B und B prüft die Transaktion ebenfalls. Erst wenn beide Teilnehmer die Transaktion erfolgreich validieren, wird diese ausgeführt und committed. Dieser Prozess wird in Corda als Flow implementiert.

Das folgende Bild verdeutlicht das Konzept des Flows. Generell muss ich sagen, dass das Lehrmaterial ausgezeichent ist (siehe Kapitel „Corda lernen“ unten) und mit vielen Bildern/Videos unterstützt wird.

Beispiel eines Flows

Das Bild kommt von dieser URL: https://docs.corda.net/key-concepts-flows.html

Kryptografische Highlights

Aus Sicht eines Kryptografens werden nicht allzu verrückte Techniken eingesetzt.

Ein wichtiger Teil sind Hashfunktionen. Sie wissen schon, dass sind diese Dinger, wo man irgendetwas reinquetschen kann und heraus kommt ein einzigartier Hash wie etwa der folgende:
7e716d0e702df0505fc72e2b89467910

Es wird so ziemlich alles verhasht, was man sich vorstellen kann. Die Transaktionen in der Buchführung eines Nodes werden natürlich auch miteinander verlinkt und unveränderbar (immutable) gemacht, ganz dem Konzept von Blockchains. Jede Transaktion erhält dann den Hash der vorhergehenden Transaktion – und nicht die Transaktion selber.

Das zweite grosse Konzept sind digitale Signaturen – Genau wie in anderen Blockchains. Wenn Person A Geld an Person B schicken will, muss A seine Transaktion signieren, damit B prüfen kann, dass die Transaktion wirklich von A kommt. Genauso wird B die Transaktion signieren, wenn diese erfolgreich validiert werden konnte.

Corda lernen

Corda ist in Kotlin geschrieben. Wer also Corda lernen möchte, der hat damit gleichzeitig eine schöne Motivation, um Kotlin zu lernen.

Ansonsten empfehlen ich jedem, der Corda lernen möchte, folgendes:

Für alle Personen empfehle ich das wirklich gut gemachte Webinar von R3, welches die Corda Konzepte erläutert:
https://r3.lessonly.com/path/5150-corda-key-concepts

Natürlich ist auch die offizielle Homepage und Referenz sehr empfehlenswert:
https://docs.corda.net/index.html

Auf der Corda Homepage kann ein Zertifikation über Corda erworben werden: https://www.corda.net/develop/index.html

Und Entwicklern, die ihre eigenen CorDapps entwickeln dürfen, sei das Bootcamp auf Youtube empfohlen:

Der Link mit der gesamten Playlist ist folgender:
https://www.youtube.com/playlist?list=PLi1PppB3-YrVq5Qy_RM9Qidq0eh-nL11N

Corda auf Stackoverflow (corda tag):
https://stackoverflow.com/questions/tagged/corda

Ist Kotlin das bessere Java?

Falls der geneigte Leser nicht weiss, was Kotlin ist: Kotlin ist eine neue Programmiersprache, welche quasi als Weiterentwicklung von Java entwickelt wurde.

Es ist bereits wieder einige Zeit vergangen, als Google auf der I/O Konferenz in 2017 Kotlin für Android offziell angekündigt hat. Und obwohl Kotlin bisher noch nicht so verbreitet ist, verwenden immer mehr Firmen die Programmiersprache für ihre Projekte – besonders für die Entwicklung von Android Apps. Ein weiteres Beispiel ist etwa Corda, die permissioned distributed ledger Blockchain.

Kotlin ist eine statically typed programming language, was soviel bedeuetet wie dass die Typen der Variablen zur Kompilierzeit geprüft werden statt zur Laufzeit des Programmes. So kann einem die IDE bereits bei der Programmierung auf Fehler hinweisen – Wie man es auch von Java kennt.

Kotlin wurde von JetBrains entwickelt, den gleichen Jungs, die auch die beliebte IntelliJ IDE produziert haben.

Kotlin hat gegenüber aber noch weitere Vorteile, die ich kurz auflisten werde.

Kompatibel zu Java

Das coole an Kotlin ist aber, dass Kotlin vollständig kompatibel mit Java ist. Kotlin läuft ebenfalls auf der JVM (Java Virtual Machine) wie Java und man kann ein Java Programm einfach in ein Kotlin Programm umwandeln (und zurück – für das Meiste, was ich hier schreibe, gelten beide Wege).

Man kann also auch seine alten Java Projekte nehmen und einfach mit Kotlin weitermachen. Man kann in einer Kotlin Datei zum Beispiel Java Klassen normal verwenden und instanzieren. Und das coole ist: alle bisher entwickelten Frameworks wie etwa Spring können ebenfalls mit Kotlin verwendet werden.

Fast identische Syntax

Wer lange Zeit als Java Entwickler gearbeitet hat und dann zum ersten Mal ein Kotlin Programm sieht wird erst mal stutzen. Es sieht doch alles ein wenig anders aus. Und macht das überhaupt Sinn? Hmm, also ich war da sehr skeptisch.

Grundsätzlich wurden aber viele Befehle vereinfacht. Man hat quasi überlegt, was man an Java verbessern könnte, und das dann in Kotlin umgesetzt.

Wenn man sich erst einmal daran gewöhnt hat, ist der Kotlin Code kleiner und einfacher als Java Code – und das finde ich immer eine gute Sache. Weniger Code bedeutet auch weniger Bugs 🙂

Dennoch arbeitet man am besten zuerst einmal mit Kotlin, um sich an die Syntax zu gewöhnen.

Viele kleine Verbesserungen

Es sind ganz viele Kleinigkeiten, die in Kotlin anders gemacht werden als in Java. Die meisten Änderungen, die ich bisher gesehen habe, machen aber durchaus Sinn.

Beispiele:

  • Variablen können nun direkt in Strings verwendet werden und müssen nicht mit + konkateniert werden.
  • Intelligentere Casts: Den Typ eines Objekts kann man statt mit instanceof neu mit schlange is Tier prüfen. Wurde etwa erfolgreich festgestellt, dass ein Tier eine Schlange ist, etwa in einem IF Statement, weiss der Kompiler von diesem Punkt an, dass es sich im ganzen IF Statement um eine Schlange handeln muss.
  • Bei Methoden kann man den Parametern nun Standardwerte angeben.
  • Getters und Setters in Pojos sind optional.
  • switch case wurde durch when ersetzt – wobei die Grösse des when Codes viel kleiner ist als beim switch case.
  • Data Classes sind eine Neuerung, welche die POJO’s (Plain Old Java Objects) verbessern. Eine Data Class ist wie eine normale Java Klasse, der Kompiler bietet aber Standardimplementationen von Methoden wie equals(), hashcode() oder toString() an. So kann ein Java Datenobjekt in einer einzigen Zeile deklariert werden (Objektname plus die dazugehörigen Attribute).
  • Eine Instanz kann nun automatisch in Attribute aufgeteilt werden, so dass man mit den einzelnen Attributen weiterarbeiten kann. Ein Schlange Objekt kann so etwa in zwei Attribute Länge und Farbe aufgeteilt werden.
  • Natürlich unterstützt Kotlin auch bewährte Java Funktionalitäten wie etwa Lambdas.

Ich denke nicht, dass es sinnvoll ist, an diesem Punkt gross Codebeispiele zu zeigen, die gibt es schon auf diversen Internetseiten, etwa der offiziellen Kotlin Referenz.

Kotlin lernen

Wer Kotlin lernen möchte, dem sind die Tutorials von Telusko auf Youtube sehr ans Herz gelegt:

Wer das Video mag klickt lieber auf diesen Link mit der gesamten Playlist, es sind nämlich insgesamt 46 Videos.

Telusko versteht es, auf witzige und einfache Weise alle Spezialitäten der Sprache in kurzen Videos darzulegen. Ein echt sympatischer Typ. Und dadurch, dass jedes Thema ein eigenes Video hat, kann man einfach zu den Themen springen, die einen am meisten interessieren.

Ist Kotlin denn nun das bessere Java?

Kotlin wird in der Programmiercommunity sehr positiv aufgenommen. Ob das langfristig der Fall sein wird, müssen wir abwarten. Kotlin ist modern und fühlt sich wie eine echte Verbesserung von Java an.

Hat man sich erst einmal daran gewöhnt, fühlt sich der Code auch einfacher an als in Java, was oftmals eine Kritik an Java war.

Wer die Möglichkeit hat, sollte Kotlin unbedingt mal ausprobieren. Der Einstieg ist durch die Verträglichkeit mit Java denkbar einfach.

Eines ist klar: Falls sich langfristig herausstellen sollte, dass Kotlin das neue, bessere Java ist, ist es unglaublich einfach, seine Java Projekte in Kotlin weiterzuentwickeln. Man verwendet die gleichen JAR’s oder Java Klassen und macht einfach mit Kotlin Dateien weiter. Es ist nicht nötig, jahrelange Migrationsprojekte wie etwa von Cobol auf Java durchzuführen.

Was ist das Double Spending Problem?

Das Double Spending / Doppelte Ausgeben Problem ist schnell erklärt. In einer Blockchain müssen alle Ledger’s, also Hauptbücher mit den getätigten Transaktionen, auf dem neuesten Stand sein.

Als Beispiel nehmen wir ein Distributed Ledger Netz, welches Immobilien verwaltet. Wir haben 100 Teilnehmer im Netz, welche alle ihren Ledger aktuell halten. Ist alles aktuell, ist das Netz konsistent.

Wenn nun Person A sein Haus verkauft, kann es je nach System eine Weile dauern, bis diese Information zu allen 100 Teilnehmern durchgedrungen ist.

Person A entscheidet sich nun, sein Haus namens Antoinette an Person B zu verkaufen. Nehmen wir an, es dauert 5 Minuten, bis alle Ledger die Information des Hauskaufs erhalten.

Kurz darauf entscheidet sich Person A dazu, das gleiche Haus Antoinette an Person C zu verkaufen.

Da noch nicht alle Ledger wissen, dass Antoinette nun Person B und nicht mehr Person A gehört, ist es durchaus in Ordnung, wenn einige Ledger akzeptieren, dass Person C dieses Haus kauft. Die Transaktion wird akzeptiert.

Natürlich wird es aber ein Problem, wenn schlussendlich beide Transaktionen in einem Ledger bekannt sind und Antoinette nun in einem Ledger bereits Person C gehört, die eintreffende Transaktion aber das Haus von Person A nach Person B transferrieren will.

Person A hat das System ausgetrickst und sein Haus zweimal verkauft – und so zu einem inkonsistenten Zustand geführt.

Diese Situation nennt man das Double Spending Problem.