Smart Contracts und Blockchain

Ein besonders interessanter Aspekt der Legal Tech, der potentiell alle Gebiete des Wirtschaftsrechtes betreffen kann, sind Smart Contracts. Das Konzept von Smart Contracts ist bereits seit längerem existent, die Verbreitung hat allerdings erst in den letzten Jahren erheblich zugenommen. Dies hängt nicht zuletzt mit dem Aufkommen der Ethereum Virtual Machine zusammen, die praktisch gesehen einer der wichtigsten Schauplätze zur Entwicklung von Smart Contracts ist.

Der Vertragsbegriff

Ein Vertrag besteht per definitionem aus zwei übereinstimmenden Willenserklärungen über den wesentlichen Vertragsinhalt. Zum wesentlichen Vertragsinhalt gehören bei jedem noch so simplen Vertrag die Vertragspartner und ihre Hauptleistungspflichten. Weitere Modalitäten können ebenfalls übereinstimmend festgelegt werden. Ein Vertrag lässt sich dabei recht gut mit Programmcode abbilden, da eindeutig bestimmte Akteure unter eindeutigen Bedingungen eindeutig vorgeschriebene Aktionen ausführen sollen. Zur Verdeutlichung hier einmal eine Darstellung in JavaScript:

Achtung: dieses Skript würde so nicht funktionieren, schon allein deswegen, weil auf Inputs aus einem nicht vorhandenen HTML-Dokument verwiesen wird und die Ansprache der Objekteigenschaften in der Methode eines anderen Objektes nicht so einfach ist. Der Code soll lediglich, vereinfacht, die Parallelen zwischen Programmierlogik und Vertrag aufzeigen. Die Objektmethoden wären hier nicht die technisch gesehen optimale Lösung, sie verdeutlichen allerdings die personenbezogenen Hauptleistungspflichten.

 

let Bestellt = false;

let Vorleistung = false;

let Erfuellt = false;

function Bestellung(){

    let Bestellt = true;

    let Bestellung = Bestellmenge.value;

    let Preis = Bestellung;

}

var Baecker = new Object();

    Baecker.Rolle = "Verkaeufer";

    Baecker.Geld = 0;

    Baecker.Broetchen = 7;

    Baecker.Verkauf = function Verkaufen(){

        if (Bestellt == true){

            Baecker.Broetchen = Baecker.Broetchen - Bestellung;

            Kunde.Broetchen = Kunde.Broetchen + Bestellung;

            Vorleistung = true;

        }

    }

var Kunde = new Object();

    Kunde.Rolle = "Kaeufer";

    Kunde.Geld = 20;

    Kunde.Broetchen = 0;

    Kunde.Kauf = function Kaufen (){

        if (Vorleistung == true && Erfuellt == false) {

            Kunde.Geld = Kunde.Geld - Preis;

            Baecker.Geld = Baecker.Geld + Preis;

            Erfuellt = true;

        }

    }

In der vereinfachten Darstellung wird sichtbar: Wir definieren einen Käufer und einen Verkäufer, also die Personen, die § 433 BGB als Akteure eines Kaufvertrages nennt. Wir definieren außerdem die Hauptleistungspflichten, indem wir den Akteuren Handlungen zuweisen: der Bäcker gibt dem Kunden Brötchen, er verringert also die Anzahl seiner Brötchen um die bestellte Menge, und erhöht die des Kunden entsprechend. Der Kunde gibt dem Bäcker Geld, er verringert also sein eigenes Geld und erhöht das des Bäckers. Diese beiden Pflichten stehen im Synallagma. Der Code geht davon aus, dass der Verkäufer vorleistungspflichtig ist, entsprechend dem Normalfall des § 433 Abs. 1 BGB.

Funktionsweise einer Blockchain

Ein Vertrag ist aber nicht automatisch deswegen smart, weil die Abwicklung in Programmcode übersetzt wurde. Smart wird er dadurch, dass er selbst die Modalitäten eines Vertrages einhält und sich dann selbstständig ausführt. Das heißt konkret:

  1. Vertrag kann nur das werden, was einvernehmlich vereinbart wurde.
  2. Dies kann nicht mehr einseitig geändert werden – der Vertrag „hält sich selbst ein.“
  3. Es findet eine objektive, unbeeinflusste Prüfung aller Bedingungen statt, die einvernehmlich in den Programmcode übernommen wurden.

Daher ist die Blockchain-Technologie in der Praxis ein Kernelement von Smart Contracts. Eine Blockchain besteht aus Datensätzen (Blöcken), auf die von allen Computern eines Netzwerkes gleichberechtigt zugegriffen werden kann (Distributed-Ledger-Technologie). Ein Block besteht immer aus einem Datensatz, also einer Sammlung an inhaltlich zusammenhängenden Daten, sowie einem Verweis auf den letzten Block.

Aus dem Inhalt eines solchen Blocks an Informationen kann ein Hash-Wert errechnet werden. Die Hash-Methode ist ein Verschlüsselungsverfahren, ein für Menschen verständlicher Inhalt wird also in einer Zeichenkette codiert, die nicht ohne weiteres in den Inhalt zurück überführt werden kann. Der Hash-Wert ist dabei eindeutig: Jeder Inhalt kann nur einen bestimmten Hash-Wert ausgeben. Wird ein neuer Block an Informationen erschaffen, speichert dieser als „Anknüpfungspunkt“ an die Blockchain auch den Hash-Wert des vorherigen Blocks. So ergibt sich eine durchgehende Kette. Durch das Abgleichen der Hash-Werte kann jeder Versuch, die Informationen in einem Block zu ändern, ohne weiteres erkannt werden. Da die Blocks sich gerade dadurch auszeichnen, dass sie nicht alle auf einem Server liegen, sondern dezentralisiert, ist es extrem schwierig (praktisch unmöglich), die gesamte Blockchain zu manipulieren, da ein bestimmtes Konsensus-Protokoll eingehalten werden muss, an dem jeder auf die Blockchain zugreifende Computer nach einem bestimmten Verfahren (proof of work, proof of stake o.ä.) beteiligt wird.

Um nun auf der Blockchain einen Smart Contract ablaufen zu lassen, würde man den Vertrag als dezentralisierte Webapp auf dieser programmieren. Wichtig ist selbstverständlich, dass der Code auch rein technisch ausgeführt werden kann; die Ethereum-Blockchain etwa stellt die Ethereum Virtual Machine als Umgebung für den Code zur Verfügung, sodass Verträge in der Highlevel-Programmiersprache Solidity geschrieben werden können. Verträge, die in Form einer dezentralisierten Webapp auf einer Blockchain laufen, sind, wie oben gesehen, nicht einseitig manipulierbar und bieten ein Maß an Rechtssicherheit, an das keine herkömmliche Vertragsform heranreicht.

Schwächen der Blockchain

Die Unveränderlichkeit eines Smart Contract auf einer Blockchain ist seine zentrale Stärke, zugleich aber auch seine zentrale Schwäche. Zu denken ist hier insbesondere an die Fälle des Irrtums (§§ 119 f. BGB), der Unmöglichkeit (§ 275 BGB) oder des Wegfalls der Geschäftsgrundlage (§ 313 BGB). Da der Vertrag nur Bedingungen prüfen kann, die korrekt und einvernehmlich in den Code aufgenommen wurden, wird bei Fehlern nur ein separater Vertrag zur Rückabwicklung in Betracht kommen. Dies wiederum relativiert zahlreiche Vorteile, wie etwa die Automatisierung einer Lieferkette durch Smart Contracts, insbesondere auch da eine kontinuierliche Überprüfung durchgeführt werden muss. Dieser Aspekt dürfte in Zukunft neue juristische Fragestellungen aufwerfen.

Hinzu kommt, dass sämtliche Geschäftspartner in die Blockchain-Infrastruktur mit eingebunden werden müssten, wollte man sämtliche Verträge automatisieren. Insbesondere bei einmalig oder unregelmäßig verpflichteten Geschäftspartnern, wie etwa zweckgebunden konsultierten Beratern, häufig unpraktisch. Zumal die Blockchain mit jedem Geschäft weiter wachsen und weitere Akteure im Netzwerk hinzukommen würden, was Korrekturen unter Umständen zusätzlich erschweren kann. Dies ist freilich ein Aspekt, der ganz maßgeblich von der Organisation im Einzelfall abhängt, es ist aber definitiv ein Aspekt, der in der Praxis ebenfalls Fragen aufwerfen wird.

Fazit

Juristische und informatische Logik sind sich sehr ähnlich, daher können viele rechtliche Vorgänge problemlos digitalisiert und teilweise sogar automatisiert werden. Blockchains werfen als Plattform für Verträge zwar einige spezifische Probleme auf, die Vorteile überwiegen aber doch so klar, dass Blockchain-basierte Smart Contracts sich längerfristig in vielen Bereichen etablieren dürften. Dass sie analog ausgeführte Verträge vollständig ersetzen, scheint hingegen nur in wenigen speziellen Fällen realistisch.