We're sorry
You're using an old Web-Browser

The micobo website is not viewable on Internet Explorer.
Please download a new browser and visit micobo.com.

Download Chrome

We want to inform you by using our site, that micobo uses cookies to improve your user experience and tracking usage of our site. You can find more related information in our Customer Data Privacy Policy Page

I understand and approve
Micobo Preloader
Implementing a Distributed Ledger Prototype for Use Cases within Capital Markets on Corda

Implementing a Distributed Ledger Prototype for Use Cases within Capital Markets on Corda

20.02.2018

Implementing a Distributed Ledger Prototype for Use Cases within Capital Markets on Corda

micobo Research

With this working paper, we provide a brief analysis of R3’s Corda platform and share our experience regarding our recent progress on establishing a working prototype. For demonstration purpose we performed this research experiment with the financial use case of a promissory note bond (Schuldscheindarlehen) – any other use case is conceivable due to the flexible framework approach of Corda. Also included is a brief overview and reasoning with regards to the choice of Corda as an open-source platform in comparison to other existing enterprise distributed ledger frameworks.

Zusammenfassung:
Mit diesem Working Paper stellen wir eine kurze Analyse von R3’s Corda Plattform zur Verfügung und teilen unsere Erfahrungen bei der Implementierung eines Prototypens. Zu Demonstrationszwecken wurde dieses Forschungsexperiment anhand des Finanzanwendungsfalles eines Schuldscheindarlehens durchgeführt – jeder andere Use Case ist denkbar, aufgrund des flexiblen Frameworks von Corda. Ebenfalls enthalten ist eine kurze Übersicht und Abwägung hinsichtlich der Auswahl von Corda als eine open-source Plattform im Vergleich zu anderen existierenden Enterprise Distributed Ledger Frameworks.

Contents
(1) Design and Advantages of R3 Corda
(2) Framework features and overview
(3) Technical Design of the prototype
(4) Customization process
(5) Final Evaluation & Lessons Learned

Design and Advantages of R3 Corda

„R3 is an enterprise software firm working with over 100 banks, financial institutions, regulators, trade associations, professional services firms and technology companies to develop Corda, our distributed ledger platform designed specifically for financial services.“¹ R3 als Konsortium aus über 70 Financial Service Providern ist zu jeweils einem Drittel finanziell unterstützt aus Asien, Nordamerika und Europa und hat heute etwa 125 Mitarbeiter.

Corda von R3 ist heute neben Hyperledger Fabric eines der führenden Software Frameworks für die Etablierung von Permissioned Blockchain Infrastruktur. Im Gegensatz zur Unpermissioned Blockchain wie beispielsweise der öffentlichen Bitcoin oder Ethereum Blockchain werden die Transaktionen in einer „privaten“ Blockchain Infrastruktur nicht im gesamten Netzwerk geteilt. Ursprünglich ist Corda angetreten, um das Problem des Datenschutzes einer Blockchain-Lösung zu lösen (“privacy issue solved”). Die Idee dahinter ist es, die Transaktionen nur mit dem eigenen Netzwerk zu teilen (“no broadcast data propagation”). Dabei muss nicht zwingend eine „Blockchain“ im engeren Sinne implementiert sein, sondern relevant ist der Distributed Ledger. „Privacy and interoperability“ sind dabei die beiden fundamentalen Designprinzipien von Corda.

Definition von Corda

„Corda is a distributed ledger platform designed and built from the ground up to record, manage and synchronize agreements (legal contracts), designed for use by regulated financial institutions but applicable to any industry.“ (Richard Brown, R3)

Entscheidend ist dabei, dass unterschiedliche Algorithmen für Konsens im Netzwerk sorgen, dies allerdings nicht im gesamten Netzwerk, sondern auf der Logikebene einer Handelstransaktion “consensus on deal-level (not on network-level)”.
Eines der Grundprinzipien von Corda – und damit diametral divergent zu dem „Code is Law“ Prinzip von Ethereum – ist, dass die Einbettung von Vertragstexten vorgesehen ist und durch Attachements ermöglicht wird – there is a „strong link between legal prose and smart contract code”.

Der Konsens zwischen den im Netzwerk bei einer Transaktion beteiligten Nodes wird dementsprechend über einen Mittelsmann, der Notary Node hergestellt. Das System erlaubt sogar spezielle Supervisor bzw. Regulator-Observer Nodes.
Bevor wir in den Vergleich der Plattformen einsteigen ist eine wichtige Differenzierung vorzunehmen. Grundsätzlich bieten alle Blockchain-basierten Systeme wie Bitcoin und Ethereum nur einen globalen Konsens auf Ledger-Ebene. Dementsprechend gibt es theoretisch nur gesamtheitlichen Konsens durch das sog. Mining oder es kommt zum logischen Fork. Dies ist bei DLT-Systemen anders, hier wird in der Regel ein Konsens (bspw. durch Notary Nodes) auf Transaktionsebene vorgenommen. Somit gibt es in den DLT Systemen – je nach Ausgestaltung – und insbesondere bei Corda nicht eine einheitliche Wahrheit aller Transaktionen, sondern nur eine diskrete Wahrheit zwischen zwei oder mehr an der Transaktion beteiligten Parteien.

Neben R3 Corda finden sich noch weitere Distributed Ledger Plattformen, die für den Einsatz in dedizierten Communities wie beispielsweise Firmennetzwerken gebaut wurden.
Nachfolgend eine Auflistung der bekanntesten Blockchain bzw. DLT Plattformen:

Organisation Plattform / Framework
Ethereum Foundation Ethereum as a Platform (ethereum.org)
JPMorgan Chase & Co Quorum™ (Ethereum-based)
Linux Foundation Hyperledger Fabric (with IBM and Digital Assets)
Chain Inc. (Chain.com) Chain Core / Sequence (seq.com)
R3 (R3CEV LLC) Corda Enterprise / Open Source
Monax.io Monax (former “Eris”)²
Clearmatics „Distributed Virtual Machine“ (DVM)
Blockstream Framework “Sidechain Elements”

Diese Plattformen sind zu großen Teilen der Open Source Community zuzurechnen, auch wenn es sich dabei um Enterprise Software handelt. Dass dies schon lange kein Widerspruch mehr ist, dürfte bereits im Rahmen der Linux Foundation bekannt sein. Selbst der Ethereum-Klon von J.P. Morgan ist komplett Open Source.³ Dieser Paradigmenwechsel lässt sich im Bankensektor insbesondere dadurch erklären, dass sich die Vorteile von DLT sich an der Schnittstelle zu anderen Instituten zeigen, sodass nur ein gemeinsamer Ansatz erfolgsversprechend ist.

Das bekannteste Framework aus der obenstehenden Auflistung ist sicherlich Ethereum mit der zugehörigen Digital- und Kryptowährung Ether. Das UTXO Modell ist Standard für die Transaktionen, hier sind im wesentlichen Inputs, Outputs und Signaturen zu finden. Dieses Modell wird im Übrigen auch von Corda genutzt. Ethereum hat die besondere Eigenschaft, alle Transaktionen mit allen Nodes im Netzwerk zu teilen und via Proof of Work (PoW) einen Konsens herzustellen. Dies ist Vor- und Nachteil zugleich, bedeutet allerdings, dass keinerlei Privatsphäre existiert und jeweilige Transaktionsstatus aller Nodes eingesehen werden können (müssen). Corda löst dieses Problem, indem gezielt nicht auf Proof of Work sondern auf Notary Nodes gesetzt wird.

Der Anbieter Monax.io liefert für die drei Marktsegmente Finance, Insurance und Logistics ein Software Development Kit (SDK) an, mit dem einzelne UseCases abgedeckt werden sollen.

Chain Core und die zugehörige Sequence-Plattform haben den Vorteil, dass bestehende Use Cases bereits implementiert und verfügbar sind.

Der Provider Clearmatics entwickelt mit einigen Partnern eine eigene DLT-Plattform. Ein wesentlicher Anwendungsfall ist dabei der Utility Settlement Coin.

Vergleichen wir Corda und die weiteren Plattformen, fallen deutliche Unterschiede ins Auge. Der entscheidende Vorteil für Corda liegt in der gut steuerbaren Node-Architektur und dem Monitoring dieser.

Hyperledger Fabric ist recht flexibel in der Ausgestaltung und Implementierung der Smart Contracts – hier werden insbesondere drei Programmiersprachen unterstützt (Java, Java Script und Go). Corda dagegen bietet Kompatibilität zu einer ganzen Bandbreite an – grundsätzlich lassen sich Kontrakte mit jeder Programmiersprache definieren, die kompatibel zur Java Virtual Machine (JVM) ist. “Smart contracts in Corda are defined using JVM bytecode”.⁴ Dies sind insbesondere Java und Kotlin, allerdings auch weitere wie beispielsweise Apache Groovy, JRuby, Jython, Clojure (Lisp Dialekt), Scala, Fantom und viele mehr.⁵ “Corda focuses on deterministic execution of any JVM bytecode, formally verifiable languages that target this instruction set are usable for the expression of smart contracts.”⁶

Framework features and overview

„Corda is a platform for the writing of CorDapps: applications that extend the global database with new capabilities. Such apps define new data types, new inter-node protocol flows and the smart contracts that determine allowed changes.” (Mike Hearn, 2016)

Das Corda Framework selbst bietet dabei den zugrunde liegenden, technologischen Rahmen um eigene und neue „Flows“ zwischen den Nodes zu impmentieren. Dabei bietet Corda weitere Features:

Ein weiterer Vorteil ist die Integration von Metadaten, diese Möglichkeit ist bei einer klassischen Blockchain wie bspw. der Bitcoin-Blockchain nicht gegeben, da diese nur einen Wert pro Schlüssel speichert: “Corda database rows can contain arbitrary data, not just a value field. Because the data consumed and added by transactions is not necessarily a set of key/value pairs, we don’t talk about rows but rather states.” (Mike Hearn, 2016)

Passend dazu hier eine schematische Darstellung von States in Corda:

Besonders ist hier anzumerken, dass Contract Code und Legal Prose zusammen den State of Cash ergeben. Damit kann jeder Handelstransaktion immer ein rechtliches Dokument, wie ein Kaufvertrag angefügt werden.

Technical Design of the prototype

Vor dem Hintergrund der Entwicklung des avisierten Prototypens ist es wichtig, einige grundlegende technische Module des Corda Frameworks näher zu betrachten.

Die Zusammensetzung der technischen Komponenten des Frameworks wird in der nachfolgend dargestellten technischen Architektur schematisch veranschaulicht:

Wichtig hierbei ist zu erwähnen, dass durch die Modularität der Architektur und die Verwendung von etablierten technischen Standards eine hohe Flexibilität und Integrität realisiert wird. Der Fokus liegt dabei auf der Interoperabilität.

Anbindung von Nodes an bereitgestellte Services durch den Apache MQ Message Broker⁷ (Abbildung: https://docs.corda.net/releases/release-M8.2/key-concepts-ecosystem.html):

Nachfolgend eine beschreibende Auflistung der wichtigsten Komponenten:

  • Notary: Notaries stellen einen bestimmten Netzwerk Service dar, der sowohl dafür zuständig ist das „Double-Spending“ Problem zu lösen, als auch (optional) Transaktionen zu validieren. Hier können verschiedene Consensus Algorithmen eingesetzt werden.
  • Nodes: Nodes sind JVM Run-Time Entitäten die eine eindeutige Identität im Netzwerk besitzen und über Schnittstellen mit anderen Nodes und dem Node Owner kommunizieren sowie Services aufrufen. Dabei werden alle relevanten States (gegenwärtige und historische) in einem Vault inkl. Transaktionsdaten, Attachments und Flow Checkpoints in einem dedizierten Storage Service gesichert.
  • H2: Als zugrundeliegende Datenbank zur Sicherung von Node Daten wird derzeit eine lokale H2 Datenbank (Java SQL basiert) verwendet. Hierin werden Node-abhängige States, Transaktionen und Attachments gespeichert. Hier findet sich bspw. die VAULT_CASH_BALANCES Tabelle, welche die aktuellen Zustände inkl. „Kontenstände“ des Vaults speichert.
  • SQL: Durch die Verwendung der zuvor genannte relationalen Datenbank ist es möglich, Node Daten über SQL abzufragen. Dies erleichtert zudem die Datenintegration anderer Datenbanksysteme.
  • JVM: Corda operiert auf der Java Virtual Machine (JVM). Hierbei ist zu erwähnen, dass der Corda Kern selbst mittels Kotlin (als zugrundeliegende Programmiersprache) implementiert wurde, Lösungen und vor allem auch entsprechende CorDapps, die zusätzliche Funktionalitäten bereitstellen, können mittels JVM kompatiblen Technologien implementiert werden.
  • MQ Messaging: Wie bereits eingangs genannt, wird die Kommunikation (Messaging) zwischen Nodes und Services (Notaries, etc.) durch den Apache MQ Message Broker realisiert.
  • HTTP: Da der Zugriff auf Nodes über HTTP realisiert wird, sind verschiedene HTTP basierte Anwendungsfälle (wie beispielweise die Ein- und Anbindung an Web Applikationen) denkbar.
  • REST API: Zuletzt ist zu sagen, dass Corda eine REST/JSON API zur Anbindung und Kommunikation unter Nodes verwendet.

Customization process

Der Anpassungsprozess zur Realisierung des Prototyps beginnt mit dem Setup der Entwicklungsumgebung. Hierzu werden folgende Komponenten benötigt:

  • Als Java IDE wird aufgrund der profunden Integrität und Unterstützung von Kotlin IntelliJ (JetBrains) empfohlen.
  • Es wird zudem Java JDK in Version 8 benötigt
  • Als git-basiertes Projekt wird zudem die aktuelle git Version benötigt.
  • Zudem wird nach der Installation der Komponenten die Corda Version über das entsprechende GitHub Repository lokal repliziert.

Um Anpassungen am Source Code vornehmen zu können wurde das lokal geklonte Corda Projekt mittels IntelliJ importiert.

Gradle wird dabei als integriertes Build-Management Tool verwendet. Deshalb sind jegliche Build Operationen in dem entsprechenden Command-Line Interface vorzunehmen.

Als Basis zur Entwicklung des Prototyps wurde das von R3 Framework verwendet, da dieses bereits grundlegende Transaktionen (wie Issue, Pay, Exit) sowie eine grafische Benutzeroberfläche (User Interface) bietet, um Operationen auf Nodes auszuführen und mit diesen zu interagieren.⁸

In dem Zusammenhang wurde zunächst eine Source Code Analyse hinsichtlich der Integration und des Umgangs mit Modulen zur Erzeugung von:

  • Dem neuen Transaktionstyp „Schuldscheindarlehen“
  • zugrundeliegenden Flows
  • Smart Contracts
  • sowie dem User Interface

durchgeführt.

Anpassungen zur Erzeugung eines Schuldscheindarlehen spezifischen Transaktionstyps sowie die Einbindung eines Flows mit spezifischen Attributen und Smart Contract wurden entsprechend in verschiedenen *.kt Dateien vorgenommen.

Ergänzung um den Transaktionstyp „Schuldscheindarlehen“:

Erzeugung eines spezifischen Flows mit spezifischer Flow Logik mittels Transaction Builder:

Integration des SSD Flows durch Erzeugung eines Request Konstruktors:

Initiierung des Flows via SSDRequest und startFlow()-Methode:

Zuweisung der Attribute an den Konstruktor:

Nach Anpassung des Source Codes zur Integration der Geschäftslogik wurde die grafische Benutzeroberfläche (User Interface) im Node Explorer mittels JavaFX in den zugehörigen *.fxml Dateien entsprechend der neuen Transaktion adaptiert:

Zum Testen der Transaktion auf dem Ledger wird zunächst ein (Re-)Build Prozess unter Verwendung von Gradle durchgeführt:

Anschließend wird Gradle genutzt, um den Installer zur Ausführung des Tools zu erzeugen.

Nachfolgend eine exemplarische Darstellung des Prototypens:

Die Bedienung erfolgt über ein einfaches GUI, mit dem Transaktionstypen „Schuldscheindarlehen“ im Node Explorer:

Die hier in der Benutzerschnittstelle eingegebenen Werte werden in den jeweils zugrunde liegenden Flow integriert und somit in die Transaktion geschrieben.

Transaktionsübersicht “Schuldscheindarlehen” im Node Explorer:

In der zugehören Flow-Logik bzw. dem Smart Contract können nun korrespondierende Commands definiert werden, welche die Geschäftslogik der Handelstransaktion steuern – beispielsweise Emission, Principle oder Interest Payments.

Final Evaluation & Lessons Learned

Nachfolgend seien die wesentlichen Erkenntnisse bei der Implementierung eines Minimum Viable Products (MVP) im Financial Services Bereich dokumentiert.

Als wesentliche Feststellung lässt sich als großer Vorteil von Corda nennen, dass elementare Geschäftsvorgänge wie beispielsweise Issuance und Payments bereits inhärenter Bestandteil des zur Verfügung gestellten Frameworks sind. Dies gilt darüber hinaus auch für enorm hilfreiche Module wie den Node Explorer. Design-Prinzipien wie „Need-to-know“ sorgen für tatsächliche Privacy zwischen den Nodes und der zugrunde liegende Technologie Stack sorgt für hervorragende Interoperabilität mit anderen (Legacy-)Systemen einer Organisation. Darüber hinaus stellt die Flexibilität aufgrund der Einbindung der JVM als zentraler Designprinzip eine Vielzahl an Entwikclungsmöglichkeiten und Programmiersprachen für die Implementierung von Geschäftslogik bereit. Dementsprechend kommen wir zu dem Entschluss, dass Corda das Framework der Wahl für die Etablierung von Non-public Use Cases im Distributed Ledger Bereich ist.

Trotz unserer guten Erfahrungen mit R3’s Corda bleiben dennoch abschließend einige Aspekte von Corda kritisch zu hinterfragen:

  • Corda ist trotz des V2.0 Releases noch in der Entwicklung und dementsprechend muss auch der eigene Code regelmäßig angepasst werden, zudem sind diverse interne Funktionen als depricated markiert.
  • Nodes sind arbeitsspeicherintensive Prozesse, dies ist beim Hardware-sizing des Node-Ecosystems zu berücksichtigen.
  • Globale Interdependenzen:
    •  Es bestehen erhebliche Abhängigkeiten zu anderen Frameworks, dies bedeutet ggf. hohen Aufwand bei Patches/Weiterentwicklungen
    • Servicemodule der Nodes (z.B. Messaging, consensus etc.) basieren auf third-party Modulen
    • Weitere Abhängigkeiten zu third-party Software wie
      • H2 als Datenbank (MySQL/PostgreSQL vorbereitet)
      • JKS als KeyStore Format (besser wäre ein offener Standard)
    • Die Node ist der leistungsfähigste Teil des Frameworks und bisher nur auf Singlethreading angelegt.
      • Hierdurch werden diverse Elemente (z.B. Events) serialisiert. Offen bleibt, ob das für bestimmte Anwendungsfälle z.B. NotaryServices ausreichend performant ist.

References

¹ 2017, r3. http://www.r3.com/about
² 2016, Casey Kuhlman, From Chaos to Order — Rebranding Eris to Monax. https://monax.io/2016/09/30/from-chaos-to-order
³ nd., JPMorgan Chase & Co, Quorum. https://github.com/jpmorganchase/quorum
⁴ 2016, Mike Hearn, Corda: A distributed ledger, Version 0.5
⁵ 2015, Oracle, The Java® Virtual Machine Specification, Java SE 8 Edition
⁶ 2016, Mike Hearn, Corda: A distributed ledger, Version 0.5
⁷ 2017, r3, Corda Documentation: Corda Ecosystem. https://docs.corda.net/releases/release-M8.2/key-concepts-ecosystem.html
⁸ 2017, r3, Corda Documentation: Welcome to Corda! https://docs.corda.net