Original by Evaldas Drasutis: https://blog.iota.org/an-introduction-to-iota-smart-contracts-16ea6f247936 (06.05.2020)
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.
Hintergrund
Kürzlich stellte Eric Hop das Qubic-Projekt in seinem Artikel The State of Qubic vor und erläuterte unsere Entscheidung, uns vorerst ausschließlich auf intelligente Verträge zu konzentrieren. Natürlich warfen diese Entwicklungen viele Fragen aus der Gemeinschaft auf, wie sich die intelligenten Verträge der IOTA zu Qubics Vision verhalten.
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.
Was ist ein Vertrag?
Bevor wir einen intelligenten Vertrag definieren, ist es wichtig, zunächst zu verstehen, was ein legaler Vertrag ist.
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.
Was ist ein Intelligenter Vertrag?
Im Gegensatz dazu ist ein intelligenter Vertrag eine programmierte Vereinbarung, die völlig deterministisch ist und automatisch durchgesetzt wird. Dies macht es unmöglich, zu streiten.
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: Pünktlichkeit
- Das Konto von Alice: 0
- Intelligentes Vertragskonto: 1000
- Deckungssumme: 100
- Ausbezahlt: Falsch
Flug F: Verspätet (ein Verweis auf eine andere Transaktion mit Nachweis der Verspätung)
- Das Konto von Alice: 100
- Intelligentes Vertragskonto: 900
- Deckungssumme: 100
- Ausbezahlt: Wahr
Arten von intelligenten Verträgen
Schicht 1 ("On-Chain") Intelligente "On-Chain"-Verträge, wie die auf Ethereum, sind Teil des Kernprotokolls. Das bedeutet, dass sie von allen Knoten im Netzwerk ausgeführt und validiert werden.Vorteile
- Die Sicherheit von intelligenten Verträgen ist proportional zur Größe des Netzwerks
- Intelligente Verträge können Tokens von ihrem Konto übertragen, ohne eine Unterschrift zu leisten
- Intelligente Verträge skalieren schlecht, weil ihre Programme von allen Knoten ausgeführt werden müssen
- Intelligente Verträge unterliegen Netztransaktionsgebühren, die ebenso volatil sind wie der zugrunde liegende symbolische Preis.
- Die durchschnittlichen Kosten eines intelligenten Vertragsabschlusses sind ungefähr proportional zum zugrunde liegenden symbolischen Preis
Vorteile
- Intelligente Verträge belasten den Rest des Netzwerks nicht
- Die durchschnittlichen Kosten für eine intelligente Vertragsabwicklung sind niedrig und vorhersehbar
- Der notwendige Grad der Dezentralisierung (und damit die Sicherheit) eines intelligenten Vertrags kann an jeden Anwendungsfall angepasst werden.
- Um Token zu übertragen, müssen intelligente Vertragsprogramme Transaktionen unterzeichnen, um nachzuweisen, dass sie Zugriff auf die Kontoadresse haben.
- Die Dezentralisierung (und damit die Sicherheit) intelligenter Verträge hängt von der Größe des Ausschusses, den Ausschussmitgliedern und der Stelle ab, die den Ausschuss einsetzt.
Warum braucht die IOTA intelligente Verträge?
Intelligente Verträge sind in vielen Bereichen von IOTA unverzichtbar, darunter Supply Chain, Smart Cities, Industrial IoT und andere. Intelligente IOTA-Verträge können Vertragsverpflichtungen innerhalb dieser Branchen automatisieren. Im Vergleich zu ihren Blockchain-Pendants haben IOTA Smart-Contracts dank der Tangle-Eigenschaften wie Skalierbarkeit, hoher Durchsatz und Gebührenfreie Transaktionen viele Vorteile.Wie funktionieren intelligente Verträge in IOTA?
IOTA Smart Contracts werden als unveränderliche Zustandsmaschinen definiert:- Zustandsmaschine: Jeder intelligente Vertrag hat einen Zustand, der mit dem Tangle verbunden ist. Der Zustand enthält Daten wie Kontostände, Eingabebedingungen und Konsequenzen im Laufe der Zeit. Jede Zustandsaktualisierung stellt einen Zustandsübergang auf dem Tangle dar.
- Unveränderlich: Der Zustand und der Programmcode des intelligenten Vertrags sind beide unveränderlich, da sie auf dem Tangle gespeichert sind. Der Zustand kann inkrementell aktualisiert werden, indem neue Transaktionen an das Tangle angehängt werden.
Der Fall für intelligente Layer-2-Verträge
Um die Anwendungsfälle der IOTA, einschließlich des Internet der Dinge, zu erleichtern, bauen wir intelligente IOTA-Verträge auf Schicht 2, "off-Tangle".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 eines intelligenten Vertrags
Jeder Smart-Vertrag hat einen Eigentümer, der für ihn verantwortlich ist:
- Das smart contract-Programm zu erstellen und beim Netzwerk einzureichen
- Festlegung der Größe des Komitees (die Zahl N) und die Auswahl der Netzwerkknoten, die Teil des Komitees sein sollen
- Entscheidung, wie viele Ausschussknoten einen Konsens über Aktualisierungen des Smart Contract-Status erreichen müssen. Diese Zahl wird als Quorum bezeichnet
- Festlegung anderer allgemeiner Konfigurationsparameter des Smart-Vertrags
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.
Motivationen: Belohnungen und Reputation
Es gibt viele mögliche Gründe, einen intelligenten Vertrag zu erstellen oder zu betreiben. Ein Grund ist die Belohnung.
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.
- Ausschussknoten können Belohnungen erhalten, indem sie einen bestimmten intelligenten Vertrag bearbeiten, der eine Belohnung bietet
- Eigentümer haben auch die Möglichkeit, intelligente Verträge zu erstellen, die dem Eigentümer einen Prozentsatz der Belohnung zukommen lassen.
Das Smart Contract Programm
Ein intelligentes Vertragsprogramm ist ein Algorithmus, der Anweisungen für eine virtuelle Maschine (VM) enthält. Wir werden WebAssembly (WASM) als Haupt-VM für IOTA Smart Contracts verwenden. Aber im Allgemeinen kann die VM in jeder Sprache oder sogar fest in der Software des Knotens programmiert sein.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)
Ein Beispiel für ein intelligentes Vertragsprogramm
Es folgt eine kurze Beschreibung des intelligenten FairRoulette-Vertrags: unser interner PoC, den wir für Tests verwenden.
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:
- Eine Gebührenzahlung von IOTA-Marken für die Bearbeitungskosten
- Eine Einzahlung von IOTA-Münzen, die Sie setzen möchten
- Die Farbe, auf die Sie wetten
Die Auszahlung an die Gewinner wird nach Spielende automatisch gemäß dem Programm des Smart-Vertrags ausgeführt.
Der Ausschuss und das Quorum
Die Kontoadresse des Smart-Vertrags ist Eigentum des Ausschusses. Diese Adresse enthält die hinterlegten IOTA-Marken. Nur ein Quorum von Ausschussknoten ist in der Lage, Tokens von der Adresse weg zu übertragen. Mit anderen Worten, ein Quorum von Ausschussknoten muss zusammenarbeiten, um IOTA-Marken vom Konto zu entfernen.
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.
Wie intelligente Verträge erstellt werden
Der Eigentümer eines Smart-Vertrags erstellt das Programm, und sein Binärcode wird in Ausschussknoten gespeichert. Der Hash des Programms ist durch die staatliche Transaktion immer zugänglich, so dass der Smart-Vertrag unveränderlich ist.
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:
- Eine durch den Smart-Vertrag kontrollierte Kontoadresse
- Einen privaten Schlüssel für jeden Ausschussknoten (weder dem Eigentümer noch anderen Ausschussknoten bekannt)
Wie der Status eines intelligenten Vertrags aktualisiert wird
Die Ausschussknotenpunkte hören immer auf den Tangle, wenn es um Anfragetransaktionen geht, die an den intelligenten Vertrag gesendet werden sollen.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.
Herausforderungen
IOTA Smart Contracts sind äußerst flexibel, aber diese Flexibilität bringt auch Herausforderungen mit sich, für die wir zum Teil bereits Lösungen entwickelt haben.
Staatliche „Forks“
Ein State Fork ist eine widersprüchliche Kopie des Zustands des intelligenten Vertrags. Dies kann passieren, wenn zwei oder mehr Transaktionen an den Tangle angehängt werden, die beide den Zustand auf unterschiedliche Weise aktualisieren.
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.
Schnappschüsse
Ein Schnappschuss ist eine Möglichkeit für einen Knoten, Speicherplatz zu sparen. Transaktionen vor einem bestimmten Datum werden möglicherweise "weggeschnappt". Dabei können ältere intelligente Transaktionen und Aktualisierungen des Vertragsstatus verloren gehen.
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.
Große Summen von Tokens
Eine große Geldsumme über einen langen Zeitraum in einem Vertrag zu sperren, ist viel sicherer, wenn man sich darauf verlassen kann, dass das gesamte Netzwerk für die Abwicklung zur Verfügung steht, wie bei den intelligenten Verträgen von Ethereum Level 1. Es ist jedoch nicht garantiert, dass nach einem langen Zeitraum ein Ausschuss von begrenzter Größe existiert. Für diese Anwendungsfälle könnte ein intelligenter Vertragsinhaber von Fall zu Fall andere Notfallpläne aufstellen.
Schlüsselverwaltung
Die Knotenpunkte müssen für jeden Ausschuss, dem sie angehören, einen Schlüssel verwalten. Wenn ein Knotenpunkt Teil vieler Ausschüsse ist, ist daher die Speicherung und Verwaltung dieser Schlüssel eine wesentliche Aufgabe. Die Knotenpunkte benötigen eine Lösung für eine sichere und skalierbare Schlüsselverwaltung.
Schlussfolgerung
IOTA Smart Contracts sind intelligente Vertragsprogramme, die von einem genehmigten Ausschuss auf Schicht 2 (Off-Tangle) ausgeführt werden. Der Ausschuss der Knotenpunkte aktualisiert das Ledger kollektiv, indem er unterzeichnete Transaktionen (unter Verwendung von Schwellenwertunterschriften) an das Tangle einreicht.
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.
Zuerst erschienen auf iota.passives-einkommen.blogBLOG : http://iota.passives-einkommen.blog/2020/05/06/eine-einfuehrung-in-iota-smart-contracts/
Wow, eine geballte Ladung Wissen! Iota find ich ein sehr spannendes Projekt und bin selber investiert :) Ich bin gespannt auf die Zukunft von IOTA.
Ich hoffe es wird groß.