Ich möchte mich bei meinen Kollegen in der IOTA-Stiftung bedanken, die Beiträge und Feedback zu diesem Artikel geliefert haben. Insbesondere Eric Hop, der das Qubic-Projekt leitete und jetzt zu IOTA Smart Contracts gehört, und Jake Cahill, der für den größten Teil des Wortlauts verantwortlich ist.
IOTA Smart Contracts ist eine fortlaufende Bemühung der IOTA Foundation. Das Ziel dieses Artikels ist es, die Gemeinschaft darüber zu informieren, was wir tun und wohin wir mit IOTA Smart Contracts gehen. Er bietet auch eine Gelegenheit für die Gemeinschaft, mit Fragen und Feedback zum Projekt beizutragen.
Der vorliegende Artikel wird diese Fragen beantworten, indem er einen Kontext und eine technische Einführung zu den IOTA Smart Contracts bietet. Obwohl viele Aspekte der IOTA Smart Contracts vom Qubic-Projekt abgeleitet wurden, handelt es sich in vielerlei Hinsicht um ein eigenständiges, eigenständiges Projekt. Wir glauben, dass die Richtung, die wir einschlagen, viel Potenzial hat, und wir unternehmen jetzt die notwendigen Schritte, um dieses Potenzial in der Praxis unter Beweis zu stellen.
Juristische Verträge sind nicht-deterministische Vereinbarungen, die komplexen Rechtssystemen unterliegen. Die Gesetze, die Verträge umgeben, variieren in Abhängigkeit von einer Reihe von Faktoren, wie zum Beispiel dem Land, in dem alle Parteien den Vertrag abgeschlossen haben. Das wichtigste Wort ist hier "nicht-deterministisch". Das bedeutet, dass Verträge oft mehrdeutig sind, und ihre subjektive Auslegung kann zu Streitigkeiten führen.
Das Konzept eines intelligenten Vertrags wurde von Nick Szabo in den 90er Jahren in seiner Abhandlung mit dem Titel "Forming and Securing Relationships on Public Networks" (Beziehungen in öffentlichen Netzwerken bilden und sichern) erfunden. In diesem Papier stellte er sich Vertragsregeln vor, die als Computercode kodiert sind.
Ein intelligenter Vertrag könnte zum Beispiel für die folgende Vereinbarung programmiert werden:
Wenn Flug F mehr als 3 Stunden Verspätung hat, dann zahlen Sie den Versicherungsbetrag A auf das Konto von Alice.
"Der Flug hat Verspätung" ist eine Bedingung der Vereinbarung, und "Versicherungsbetrag A an Alice zahlen" ist eine Folge dieser Bedingung.
Die Folgen der Ausführung eines intelligenten Vertrags hängen von einer Reihe von Bedingungen ab, die wir seinen Zustand nennen.
Der Zustand eines intelligenten Vertrags kann zum Beispiel umfassen
Flug F: Verspätet (ein Verweis auf eine andere Transaktion mit Nachweis der Verspätung)
Vorteile
Vorteile
Obwohl die "on-chain" intelligenten Verträge von Ethereum aufgrund ihrer Eigenschaften beliebt sind, haben sie einige bedeutende Nachteile. Der hervorstechendste ist, dass jeder Knotenpunkt für jeden intelligenten Vertrag, der existiert, eine Kopie des Programmcodes und -status des Vertrags behalten muss. Jeder Knoten im Netzwerk muss genau den gleichen Code ausführen, wenn der Smart-Vertrag ausgelöst wird.
Es gibt keine Begrenzung der Anzahl der Knoten, die diesen identischen Code ausführen müssen, nur um ein einziges Ergebnis zu erzeugen. Und je größer das Netzwerk wird, desto mehr Verarbeitung ist erforderlich, um dasselbe Ergebnis zu erzielen. Dies stellt ein enormes Hindernis für die Skalierbarkeit dar.
Zusätzlich zu den Transaktionsgebühren, die Sie zahlen müssen, um für die Aufnahme in das Hauptbuch in Betracht gezogen zu werden, müssen Sie auch Gasgebühren zahlen, um das Programm lange genug laufen zu lassen, damit es abgeschlossen werden kann. Das bedeutet, dass die Kosten für den Betrieb dieser intelligenten Verträge unerschwinglich hoch werden, wenn man von bestimmten Anwendungsfällen absieht, in denen der Kostenaufwand relativ unbedeutend ist.
Aus diesem Grund werden IOTA Smart-Contracts nicht als Teil des Kernprotokolls implementiert, sondern als ein Layer-2-Protokoll.
Infolgedessen bieten IOTA Smart-Contracts eine natürlichere Art und Weise, verteilte Berechnungen auszuführen. Jeder Smart-Contract kann in einem lokalisierten Kontext ausgeführt werden, ohne dass das gesamte Netzwerk zur Ausführung gezwungen wird. Dies bedeutet auch, dass IOTA Smart-Contracts in Zukunft nicht zu einem Hindernis für die Skalierung des IOTA-Netzwerks mit Sharing-Lösungen werden.
Der Eigentümer kann je nach Kontext und Zweck wählen, wie intelligente Verträge eingerichtet werden sollen. Beispielsweise kann ein intelligenter Vertrag, der hochwertige Transaktionen abwickelt, einen großen Ausschuss von Knoten erfordern. Während ein intelligenter Vertrag, der Mikrotransaktionen abwickelt, unter Umständen nur 20-30 Knoten im Ausschuss benötigt.
Obwohl IOTA-Transaktionen Gebührenfrei sind, bieten intelligente IOTA-Verträge den Unternehmen die Möglichkeit, eine Gebühr in IOTA-Tokens zu verlangen, z.B. zur Deckung der Betriebskosten. Wir nennen diese Gebühr eine Belohnung.
Sowohl Eigentümer als auch Ausschussknotenpunkte können intelligente Vertragsbelohnungen erhalten. Es ist Sache des Eigentümers, mit den Betreibern von Komitee-Knotenpunkten zu verhandeln, um die minimal akzeptable Belohnung festzulegen.
Das Programm nimmt zwei Transaktionen als Input: die Anfragetransaktion und die Transaktion des aktuellen Status. Die Transaktion des nächsten Zustands verweist immer auf die Anfragetransaktion und die Transaktion des vorherigen Zustands. Auf diese Weise verfügt das intelligente Vertragsprogramm über eine deterministische Methode zum Aufbau einer Kette von Zustandsaktualisierungen, die durch eingehende Anfragen ausgelöst werden.
Der Hash des Programms wird im Tangle gespeichert und ist daher unveränderlich.
(Hinweis: Intelligente IOTA-Verträge werden durch eine Transaktion und nicht durch ein Bündel definiert, da wir sie im IOTA-Protokoll nach dem IOTA-Koordizid implementieren, das ein UTXO-Modell für Werttransaktionen verwendet)
Betrachten Sie einen Smart-Vertrag, der Wetten auf ein Rouletterad annimmt. Der Smart-Vertrag würde in seinem Konto gestapelte IOTA-Münzen sowie Daten über jede platzierte Wette (Summe, Farbe, Spieler) enthalten. Letzteres wird für Auszahlungen an die Gewinner von Roulette-Spielen benötigt.
Um eine Wette zu platzieren, senden Sie eine Antragstransaktion an den Smart-Vertrag. Die Transaktion würde enthalten:
Die Auszahlung an die Gewinner wird nach Spielende automatisch gemäß dem Programm des Smart-Vertrags ausgeführt.
Wir verwenden BLS-Adressen mit mehreren Unterschriften, um den Ausschussknoten das gleiche Eigentumsrecht an der Adresse zu geben. Diese Adressen ermöglichen Schwellenunterschriften, was bedeutet, dass eine bestimmte Anzahl von Knoten im Ausschuss, das Quorum, dieselbe Transaktion mit ihrem geheimen Schlüssel unterschreiben muss, um eine gültige Unterschrift zu erzeugen und somit den Zustand des Smart-Vertrags zu aktualisieren und die vom Smart-Vertrag kontrollierten Mittel zu bewegen.
Der Eigentümer setzt einen Ausschuss von Knotenpunkten ein, die für die Ausführung des Programms, das Abhören des Tangle für Anfragetransaktionen und die kollektive Aktualisierung des Zustands des Smart-Vertrags verantwortlich sind.
Während der Einsetzung des Ausschusses entscheidet der Eigentümer über die Größe des Ausschusses und das Quorum und initialisiert einen Prozess der verteilten Schlüsselerzeugung (Distributed Key Generation, DKG) zwischen den Knoten des Ausschusses. Dieser Prozess erzeugt:
Wenn ein Ausschussknoten eine Transaktion erkennt, berechnet er den nächsten Zustand, indem er das Smart-Contract-Programm ausführt. Auf diese Weise werden ehrliche und synchronisierte Knoten immer genau die gleiche Zustandsaktualisierungstransaktion erzeugen. Ausschussknoten tauschen nie echte Ergebnisse aus, sondern nur Hashes. Es besteht also kein Risiko, dass Knoten die Ergebnisse der anderen kopieren, um zu versuchen, die Belohnung auszuspielen.
Wenn sich die Knoten nicht über den aktualisierten Zustand einig sind, wird jeder Knoten eine andere Transaktion unterzeichnen, was zu einer ungültigen Signatur führt. Die Knoten müssen daher einen mehrheitlichen Konsens über den aktualisierten Zustand erreichen.
In der asynchronen Einstellung des Tangles kann jeder Ausschussknoten einen anderen Zustand sehen, je nach seiner lokalen Uhr oder seinen Nachbarn. Ausschussknoten müssen daher einen verteilten Konsensalgorithmus ausführen, um einen Konsens über das Ergebnis zu erzielen. Das Ergebnis des Konsenses ist ein Hash des Ergebniskerns, eine Sammlung von Teilunterschriften des BLS und ein Zeitstempel. Alle intelligenten Vertragstransaktionen werden mit einem Zeitstempel versehen, und der Zeitstempel stimmt mit den lokalen Uhren der meisten Knoten überein.
Wenn alle Knoten einen Konsens erreicht haben, sammelt ein Ausschussmitglied, der Leiter, alle Teil-BLS-Signaturen der Knoten, bevor die endgültige Transaktion an das Tangle übermittelt wird. Diese Transaktion muss sich auf den vorherigen Zustand beziehen, um eine Kette von Zustandsaktualisierungen zu erstellen, die als Prüfpfad dient. Wenn die Transaktion bestätigt wird, wird sie zum neuen Zustand des intelligenten Vertrags.
Obwohl wir erwarten, dass Zustandsabzweigungen selten sind, könnten sie theoretisch in einer asynchronen Umgebung auftreten. Zum Beispiel verliert der führende Knoten unmittelbar vor der Verbuchung der letzten Transaktion die Verbindung mit dem Tangle und nach einer Zeitüberschreitung übernimmt ein anderer Knoten die Führung. In diesem Fall könnten zwei führende Knoten Aktualisierungen des Tangle nach der Verbuchung der letzten Transaktion vornehmen.
Um Zustandsabzweigungen zu verhindern, wird bei der Einrichtung des Smart-Vertrags ein einzigartiges farbiges Token, das als Smart-Vertrags-Token (mit einem Gesamtvorrat von 1) bezeichnet wird, erstellt und an die Smart-Vertragsadresse übertragen. Bei jeder Statusaktualisierung wird das einzige Smart-Contract-Token an dieselbe Adresse gesendet, wodurch die entsprechende nicht ausgegebene Ausgabe in die neue Transaktion verschoben wird. Auf diese Weise bilden die Transaktionen eine nicht verarbeitbare Kette, da es unmöglich ist, den Output des intelligenten Vertragstokens aufzuteilen und zweimal auszugeben.
Um dieses Problem zu entschärfen, können intelligente Verträge ihre eigenen Momentaufnahmen durchführen, indem sie alle Zustandsinformationen sammeln und sie zu einer einzigen Transaktion hinzufügen. Diese Transaktion wird zum Anfang der neuen Kette.
IOTA Smart-Contracts sind sehr flexibel und benötigen viel weniger Ressourcen als die Blockketten-Alternativen. Sie ermöglichen Anwendungsfälle, die mit Gebühren als einzigem Anreiz nicht möglich gewesen wären. Dies gilt insbesondere im Bereich des IoT, wo Mikroverträge und Mikrotransaktionen die Norm sein dürften.
Wir planen, WebAssembly in der ersten Version zu verwenden, aber wir sind nicht auf eine einzige virtuelle Maschine (VM) beschränkt, mit der Möglichkeit, in Zukunft auch andere Programmiersprachen und VMs zu verwenden.
Wir laden die Gemeinschaft ein, ihre Gedanken, Ideen und ihr Feedback im Kanal #smartcontracts auf dem offiziellen IOTA-Discord zu teilen.