— ist ein verteiltes Ledger zur Speicherung, Verwaltung und Synchronisierung von finanziellen Verpflichtungen zwischen verschiedenen Finanzorganisationen.

Corda hat eine ziemlich gute Dokumentation mit Video-Vorlesungen, die man finden kann . Ich werde versuchen, kurz zu beschreiben, wie Corda intern aufgebaut ist.
Lassen Sie uns die Hauptmerkmale von Corda und seine Einzigartigkeit im Vergleich zu anderen Blockchains betrachten:
- Corda hat keine eigene Kryptowährung.
- Corda verwendet kein Mining-Konzept und kein Proof-of-Work-System.
- Die Datenübertragung erfolgt nur zwischen den Teilnehmern der Transaktion / des Vertrags. Es gibt hier kein globales Broadcasting an alle Knoten im Netzwerk.
- Es gibt keinen zentralen Controller, der alle Transaktionen verwaltet.
- Corda unterstützt verschiedene Konsensmechanismen.
- Der Konsens wird zwischen den Teilnehmern auf Ebene eines einzelnen Agreements / Vertrags erreicht, und nicht auf Systemeebene.
- Eine Transaktion wird nur von denjenigen Teilnehmern bestätigt, die davon betroffen sind.
- Corda bietet eine direkte Verbindung zwischen der formalen menschlichen juristischen Sprache und dem Code der Smart Contracts.
Das Ledger
Der Begriff Ledger in Corda ist subjektiv. Es gibt kein zentrales Datenspeicher. Stattdessen hält jeder Knoten eine separate Datenbank mit den ihm bekannten Fakten.
Stellen Sie sich beispielsweise ein Netzwerk aus 5 Knoten vor, wobei der Kreis ein dem Knoten bekanntes Faktum darstellt.

Wie wir sehen können, wissen Ed, Carl und Demi von Fakt 3, während Alice und Bob nichts davon wissen. Corda gewährleistet, dass gemeinsame Fakten in die Datenbank jedes Knotens aufgenommen werden, und die Daten identisch sein werden.
Zustände
Ein Zustand ist ein unveränderliches Objekt, das ein Faktum darstellt, das einem oder mehreren Knoten im Netzwerk zu einem bestimmten Zeitpunkt bekannt ist.
Zustände können beliebige Daten speichern, beispielsweise Aktien, Anleihen, Kredite oder Identifikationsinformationen.
Zum Beispiel stellt der folgende Zustand ein IOU dar – eine Vereinbarung, dass Alice Bob einen Betrag X schuldet:

Der Lebenszyklus eines Faktums über die Zeit wird durch eine Sequenz von Zuständen repräsentiert. Wenn es erforderlich ist, den aktuellen Zustand zu aktualisieren, erstellen wir einen neuen und markieren den aktuellen als historisch.

Transaktionen
Transaktionen sind Vorschläge zur Aktualisierung des Ledgers. Sie werden nicht an alle Teilnehmer des Ledgers übertragen und sind nur für diejenigen Teilnehmer des Netzwerks zugänglich, die das rechtliche Recht haben, sie einzusehen und zu verwalten.
Eine Transaktion wird dem Ledger hinzugefügt, wenn sie:
- vertraglich gültig
- von allen erforderlichen Teilnehmern unterzeichnet
- enthält keine Doppelbuchungen (double-spends)
Corda verwendet das UTXO-Modell (unspent transaction output), wobei jeder Zustand des Ledgers unveränderlich ist.
Bei der Erstellung wird der Output-Zustand der vorherigen Transaktion (per Hash und Index) an die Eingabe der Transaktion übergeben.

Lebenszyklus einer Transaktion:
- Erstellung (Derzeit ist die Transaktion nur ein Vorschlag zur Aktualisierung des Ledgers)
- Sammlung von Unterschriften (Die erforderlichen Teilnehmer der Transaktion genehmigen den Aktualisierungsvorschlag, indem sie ihre Unterschrift zur Transaktion hinzufügen)
- Commit der Transaktion in das Ledger
Nach der Hinzufügung der Transaktion in das Ledger werden die Eingabewerte als historisch markiert und können in zukünftigen Transaktionen nicht mehr verwendet werden.

Neben den Eingabe- und Ausgabezuständen kann die Transaktion Folgendes enthalten:
- Befehle (Parameter der Transaktion, die das Ziel der Transaktion angeben)
- Anlagen (Feiertagskalender, Währungsumrechner)
- Zeitfenster (Gültigkeitsdauer)
- Notar (Notary, spezielle Teilnehmer des Netzwerks, die Transaktionen validieren)

Verträge
Wenn wir von der Gültigkeit einer Transaktion sprechen, meinen wir nicht nur das Vorhandensein der erforderlichen Unterschriften, sondern auch die Gültigkeit gemäß dem Vertrag. Jede Transaktion ist mit einem Vertrag verbunden, der sie akzeptiert und die Eingabe- und Ausgabezustände validiert. Eine Transaktion gilt nur dann als gültig, wenn alle ihre Zustände gültig sind.
Verträge in Corda werden in jeder JVM-Sprache (z.B. Java, Kotlin) geschrieben.
class CommercialPaper : Contract {
override fun verify(tx: LedgerTransaction) {
TODO()
}
}
Muss von der Klasse Contract erben und die Methode verify. Bei Ungültigkeit der Transaktion muss eine Ausnahme ausgelöst werden.
Die Validierung von Transaktionen muss deterministisch sein, d.h. der Vertrag muss die Transaktion immer entweder akzeptieren oder ablehnen. Aufgrund dessen kann die Gültigkeit einer Transaktion nicht von Zeit, Zufallszahlen, Knoten-Dateien im Netzwerk usw. abhängen.
In Corda werden Verträge in einer sogenannten Sandbox ausgeführt – einer etwas modifizierten JVM, die die deterministische Ausführung von Verträgen garantiert.
Threads
Um die Kommunikation zwischen den Knoten des Netzwerks zu automatisieren, wurden Flows hinzugefügt.
Flow – eine Abfolge von Schritten, die dem Knoten mitteilen, wie ein bestimmtes Update des Ledgers durchgeführt werden soll, zu welchem Zeitpunkt die Transaktion unterschrieben und validiert werden muss.

Manchmal dauern Stunden oder Tage, bis eine Transaktion von allen Parteien unterzeichnet und im Ledger erscheint. Was passiert, wenn man einen Knoten, der an der Transaktion beteiligt ist, trennt? Ströme haben Kontrollpunkte, an denen die Zustände des Streams in die Datenbank des Knotens geschrieben werden. Beim Wiederherstellen des Knotens im Netzwerk setzt er seinen Betrieb von dem Punkt fort, an dem er gestoppt ist.
Konsens
Um ins Ledger zu gelangen, muss die Transaktion zwei Konsensen erreichen: über die Gültigkeit und über die Einzigartigkeit.
Die Entscheidung über die Gültigkeit der Transaktion wird nur von den direkt daran beteiligten Parteien getroffen.
Notarielle Knoten überprüfen die Transaktion auf Einzigartigkeit und verhindern Doppel-Ausgaben.
Stellen wir uns vor, Bob hat 100 $ und möchte 80 $ an Charlie und 70 $ an Dan überweisen und dabei denselben Eingangsstatus nutzen.

Ein solcher Trick lässt sich mit Corda nicht ausführen. Obwohl die Transaktion den Gültigkeitstest besteht, wird der Einzigartigkeitstest fehlschlagen.
Fazit
Die Corda-Plattform, die von dem Blockchain-Konsortium R3 entwickelt wurde, ist kein reines Beispiel für die Nutzung der Blockchain-Technologie. Corda ist ein spezialisiertes Werkzeug für Finanzorganisationen.
Quelle: habr.com
