Einführung in Smart Contracts

In diesem Artikel werden wir uns ansehen, was Smart Contracts sind, was sie sind, wir werden verschiedene Smart Contract-Plattformen und ihre Funktionen kennenlernen und auch diskutieren, wie sie funktionieren und welche Vorteile sie mit sich bringen können. Dieses Material wird für Leser sehr nützlich sein, die mit dem Thema Smart Contracts nicht so gut vertraut sind, es aber besser verstehen möchten.

Regulärer Vertrag vs. intelligenter Vertrag

Bevor wir uns mit den Details befassen, nehmen wir ein Beispiel für die Unterschiede zwischen einem regulären Vertrag, der auf Papier spezifiziert wird, und einem Smart Contract, der digital dargestellt wird.

Einführung in Smart Contracts

Wie funktionierte das vor dem Aufkommen intelligenter Verträge? Stellen Sie sich eine Gruppe von Menschen vor, die bestimmte Regeln und Bedingungen für die Verteilung von Werten sowie einen bestimmten Mechanismus festlegen möchten, um die Umsetzung dieser Verteilung gemäß den gegebenen Regeln und Bedingungen zu gewährleisten. Dann kamen sie zusammen, erstellten ein Papier, auf dem sie ihre Identifikationsdaten, die Bedingungen und die damit verbundenen Werte notierten, datierten und unterschrieben. Auch dieser Vertrag wurde von einer vertrauenswürdigen Stelle, beispielsweise einem Notar, beglaubigt. Darüber hinaus gingen diese Leute mit ihrer Papierkopie eines solchen Vertrags in verschiedene Richtungen und begannen, einige Aktionen durchzuführen, die möglicherweise nicht dem Vertrag selbst entsprachen, das heißt, sie taten eine Sache, aber auf dem Papier wurde ihnen bescheinigt, dass sie etwas tun sollten ganz anders. Und wie kommt man aus dieser Situation heraus? Tatsächlich muss eines der Gruppenmitglieder dieses Papier nehmen, einige Beweise sammeln, es vor Gericht bringen und die Übereinstimmung zwischen dem Vertrag und den tatsächlichen Handlungen sicherstellen. Oftmals ist es schwierig, eine faire Umsetzung dieses Vertrags zu erreichen, was unangenehme Folgen hat.

Was lässt sich über Smart Contracts sagen? Sie vereinen sowohl die Möglichkeit, die Vertragsbedingungen zu verfassen, als auch den Mechanismus zu ihrer strikten Umsetzung. Wenn die Bedingungen festgelegt und die entsprechende Transaktion oder Anfrage unterzeichnet wurde, ist es nach Annahme dieser Anfrage oder Transaktion nicht mehr möglich, die Bedingungen zu ändern oder deren Umsetzung zu beeinflussen.

Es gibt einen Validator oder ein ganzes Netzwerk sowie eine Datenbank, die alle zur Ausführung eingereichten Smart Contracts in streng chronologischer Reihenfolge speichert. Wichtig ist auch, dass diese Datenbank alle Auslösebedingungen für die Ausführung des Smart Contracts enthalten muss. Darüber hinaus muss genau der Wert berücksichtigt werden, dessen Verteilung im Vertrag beschrieben ist. Wenn dies auf eine digitale Währung zutrifft, sollte diese Datenbank dies berücksichtigen.

Mit anderen Worten: Smart-Contract-Validatoren müssen Zugriff auf alle Daten haben, auf denen der Smart Contract läuft. Beispielsweise sollte eine einzige Datenbank verwendet werden, um gleichzeitig digitale Währungen, Benutzersalden, Benutzertransaktionen und Zeitstempel zu erfassen. Dann kann die Bedingung in einem Smart Contract das Guthaben des Benutzers in einer bestimmten Währung, das Eintreffen einer bestimmten Zeit oder die Tatsache sein, dass eine bestimmte Transaktion durchgeführt wurde, aber nichts weiter.

Definition eines Smart Contracts

Im Allgemeinen wurde die Terminologie selbst vom Forscher Nick Szabo geprägt und erstmals 1994 verwendet und 1997 in einem Artikel dokumentiert, der die eigentliche Idee intelligenter Verträge beschreibt.

Intelligente Verträge implizieren, dass eine gewisse Automatisierung der Wertverteilung durchgeführt wird, die nur von den im Voraus festgelegten Bedingungen abhängen kann. In seiner einfachsten Form sieht es aus wie ein Vertrag mit genau definierten Bedingungen, der von bestimmten Parteien unterzeichnet wird.

Intelligente Verträge sollen das Vertrauen in Dritte minimieren. Manchmal wird das Entscheidungszentrum, von dem alles abhängt, völlig ausgeschlossen. Darüber hinaus sind solche Verträge einfacher zu prüfen. Dies ist eine Folge einiger Designmerkmale eines solchen Systems, aber am häufigsten verstehen wir unter einem Smart Contract eine dezentrale Umgebung und das Vorhandensein von Funktionen, die es jedem ermöglichen, die Datenbank zu analysieren und eine vollständige Prüfung der Vertragsausführung durchzuführen. Dies gewährleistet den Schutz vor nachträglichen Datenänderungen, die Änderungen in der Vertragserfüllung nach sich ziehen würden. Die Digitalisierung der meisten Prozesse bei der Erstellung und Einführung eines Smart Contracts vereinfacht häufig die Technologie und die Kosten ihrer Implementierung.

Ein einfaches Beispiel – Treuhandservice

Schauen wir uns ein sehr einfaches Beispiel an. Es wird Ihnen helfen, die Funktionalität von Smart Contracts besser zu verstehen und besser zu verstehen, in welchen Fällen sie verwendet werden sollten.

Einführung in Smart Contracts

Es lässt sich auch mit Bitcoin umsetzen, allerdings kann Bitcoin derzeit noch kaum als vollwertige Plattform für Smart Contracts bezeichnet werden. Wir haben also einen Käufer und einen Online-Shop. Ein Kunde möchte in diesem Shop einen Monitor kaufen. Im einfachsten Fall führt der Käufer eine Zahlung aus und sendet diese ab, der Online-Shop nimmt diese entgegen, bestätigt sie und versendet dann die Ware. In dieser Situation ist jedoch großes Vertrauen erforderlich – der Käufer muss dem Online-Shop die gesamten Kosten für den Monitor anvertrauen. Da ein Online-Shop in den Augen des Käufers möglicherweise einen schlechten Ruf genießt, besteht die Gefahr, dass der Shop aus irgendeinem Grund nach Annahme der Zahlung den Service verweigert und die Ware nicht an den Käufer versendet. Daher stellt sich für den Käufer die Frage (und dementsprechend stellt sich auch der Online-Shop die Frage), was in diesem Fall angewendet werden kann, um solche Risiken zu minimieren und solche Transaktionen zuverlässiger zu machen.

Im Fall von Bitcoin besteht die Möglichkeit, dass Käufer und Verkäufer unabhängig voneinander einen Vermittler auswählen können. Es gibt viele Menschen, die an der Lösung kontroverser Probleme beteiligt sind. Und unsere Teilnehmer können aus einer allgemeinen Liste von Mediatoren denjenigen auswählen, dem sie vertrauen. Zusammen erstellen sie eine 2-aus-3-Multisignatur-Adresse, bei der es drei Schlüssel gibt und zwei Signaturen mit zwei beliebigen Schlüsseln erforderlich sind, um Münzen von dieser Adresse auszugeben. Ein Schlüssel gehört dem Käufer, der zweite dem Online-Shop und der dritte dem Vermittler. Und an eine solche Multisignaturadresse sendet der Käufer den für die Bezahlung des Monitors erforderlichen Betrag. Wenn der Verkäufer nun feststellt, dass das Geld an einer von ihm abhängigen Multisignatur-Adresse für einige Zeit gesperrt ist, kann er den Monitor bedenkenlos per Post versenden.

Anschließend erhält der Käufer das Paket, prüft die Ware und trifft eine Entscheidung über den endgültigen Kauf. Er kann mit der erbrachten Leistung völlig einverstanden sein und die Transaktion mit seinem Schlüssel unterzeichnen, wobei er Münzen von der Multisignaturadresse an den Verkäufer überweist, oder er ist mit etwas unzufrieden. Im zweiten Fall kontaktiert er einen Vermittler, um eine alternative Transaktion zusammenzustellen, die diese Münzen anders verteilt.

Nehmen wir an, der Monitor kam etwas zerkratzt an und das Kit enthielt kein Kabel zum Anschließen an den Computer, obwohl auf der Website des Online-Shops angegeben war, dass das Kabel im Kit enthalten sein sollte. Anschließend sammelt der Käufer die notwendigen Beweise, um dem Vermittler zu beweisen, dass er in dieser Situation getäuscht wurde: Er macht Screenshots der Website, fotografiert den Posteingang, fotografiert die Kratzer auf dem Monitor und zeigt, dass das Siegel vorhanden war gebrochen und das Kabel wurde herausgezogen. Der Online-Shop wiederum sammelt seine Beweise und übermittelt sie an den Mediator.

Der Vermittler ist daran interessiert, sowohl die Empörung des Käufers als auch die Interessen des Online-Shops zu befriedigen (warum, wird später klar werden). Dabei handelt es sich um eine Transaktion, bei der Münzen von einer Multisignatur-Adresse in einem bestimmten Verhältnis zwischen dem Käufer, dem Online-Shop und dem Vermittler ausgegeben werden, da er als Belohnung für seine Arbeit einen Teil für sich selbst erhält. Nehmen wir an, 90 % des Gesamtbetrags gehen an den Verkäufer, 5 % an den Vermittler und 5 % Entschädigung an den Käufer. Der Vermittler signiert diese Transaktion mit seinem Schlüssel, sie kann jedoch noch nicht angewendet werden, da dafür zwei Unterschriften erforderlich sind, sich aber nur eine lohnt. Es sendet eine solche Transaktion sowohl an den Käufer als auch an den Verkäufer. Wenn mindestens einer von ihnen mit dieser Option zur Umverteilung von Münzen zufrieden ist, wird die Transaktion vorsigniert und an das Netzwerk verteilt. Zur Validierung reicht es aus, dass eine der Parteien der Transaktion mit der Option des Mediators einverstanden ist.

Es ist wichtig, zunächst einen Mediator auszuwählen, damit ihm beide Beteiligten vertrauen. In diesem Fall wird er unabhängig von den Interessen des einen oder anderen handeln und die Situation objektiv beurteilen. Wenn der Vermittler keine Option zur Verteilung von Münzen vorsieht, die mindestens einen Teilnehmer zufriedenstellt, können sowohl der Käufer als auch der Online-Shop nach gemeinsamer Vereinbarung die Münzen durch Hinterlegen ihrer beiden Unterschriften an eine neue Multisignaturadresse senden. Die neue Multisignatur-Adresse wird mit einem anderen Vermittler erstellt, der in der Angelegenheit möglicherweise kompetenter ist und eine bessere Option bietet.

Beispiel mit einem Schlafsaal und einem Kühlschrank

Schauen wir uns ein komplexeres Beispiel an, das die Fähigkeiten eines Smart Contracts deutlicher zeigt.

Einführung in Smart Contracts

Nehmen wir an, es gibt drei Männer, die kürzlich in denselben Schlafsaal gezogen sind. Die drei sind daran interessiert, für ihr Zimmer einen Kühlschrank zu kaufen, den sie gemeinsam nutzen können. Einer von ihnen meldete sich freiwillig, um den nötigen Betrag für den Kauf eines Kühlschranks einzusammeln und mit dem Verkäufer zu verhandeln. Allerdings haben sie sich erst vor kurzem kennengelernt und es herrscht nicht genügend Vertrauen zwischen ihnen. Offensichtlich gehen zwei von ihnen ein Risiko ein, indem sie dem Dritten Geld geben. Darüber hinaus müssen sie sich bei der Auswahl eines Verkäufers einigen.

Sie können den Treuhandservice nutzen, also einen Vermittler wählen, der die Durchführung der Transaktion überwacht und gegebenenfalls kontroverse Fragen klärt. Anschließend erstellen sie nach Zustimmung einen Smart Contract und schreiben darin bestimmte Bedingungen vor.

Die erste Bedingung besteht darin, dass vor einem bestimmten Zeitpunkt, beispielsweise innerhalb einer Woche, auf dem entsprechenden Smart-Contract-Konto drei Zahlungen von bestimmten Adressen über einen bestimmten Betrag eingehen müssen. Geschieht dies nicht, stoppt der Smart Contract die Ausführung und gibt die Coins an alle Teilnehmer zurück. Wenn die Bedingung erfüllt ist, werden die Werte der Verkäufer- und Vermittlerkennungen festgelegt und die Bedingung überprüft, dass alle Teilnehmer mit der Wahl des Verkäufers und Vermittlers einverstanden sind. Wenn alle Bedingungen erfüllt sind, wird das Geld an die angegebenen Adressen überwiesen. Dieser Ansatz kann die Teilnehmer vor Betrug von jeglicher Seite schützen und macht im Allgemeinen das Vertrauensbedürfnis überflüssig.

Wir sehen in diesem Beispiel das Prinzip, dass diese Fähigkeit, schrittweise Parameter für die Erfüllung jeder Bedingung festzulegen, es Ihnen ermöglicht, Systeme beliebiger Komplexität und Tiefe verschachtelter Ebenen zu erstellen. Darüber hinaus können Sie zunächst die erste Bedingung im Smart Contract definieren und erst nach deren Erfüllung Parameter für die nächste Bedingung festlegen. Mit anderen Worten: Die Bedingung wird formal geschrieben und die Parameter dafür können bereits während ihrer Ausführung festgelegt werden.

Klassifizierung intelligenter Verträge

Für die Klassifizierung können Sie verschiedene Gruppen von Kriterien festlegen. Zum Zeitpunkt der Technologieentwicklung sind jedoch vier davon relevant.

Smart Contracts zeichnen sich durch ihre Ausführungsumgebung aus, die entweder zentral oder dezentral sein kann. Im Falle der Dezentralisierung haben wir eine viel größere Unabhängigkeit und Fehlertoleranz bei der Ausführung von Smart Contracts.

Sie lassen sich auch durch den Prozess des Setzens und Erfüllens von Bedingungen unterscheiden: Sie können frei programmierbar, begrenzt oder vordefiniert, also streng typisiert, sein. Wenn auf der Smart-Contract-Plattform nur 4 spezifische Smart Contracts vorhanden sind, können die Parameter dafür auf beliebige Weise eingestellt werden. Dementsprechend ist die Einstellung viel einfacher: Wir wählen einen Vertrag aus der Liste aus und übergeben die Parameter.

Nach der Initiierungsmethode gibt es automatisierte Smart Contracts, das heißt, wenn bestimmte Bedingungen eintreten, führen sie sich selbst aus, und es gibt Verträge, in denen die Bedingungen spezifiziert sind, die Plattform deren Erfüllung aber nicht automatisch prüft; dafür sorgen sie müssen gesondert eingeleitet werden.

Darüber hinaus unterscheiden sich Smart Contracts in ihrem Datenschutzniveau. Sie können entweder völlig offen, teilweise oder vollständig vertraulich sein. Letzteres bedeutet, dass externe Beobachter die Bedingungen von Smart Contracts nicht sehen. Allerdings ist das Thema Datenschutz sehr weit gefasst und es ist besser, es getrennt vom aktuellen Artikel zu betrachten.

Im Folgenden gehen wir näher auf die ersten drei Kriterien ein, um mehr Klarheit in das Verständnis des aktuellen Themas zu bringen.

Intelligente Verträge nach Laufzeit

Einführung in Smart Contracts

Basierend auf der Ausführungsumgebung wird zwischen zentralisierten und dezentralen Smart-Contract-Plattformen unterschieden. Bei zentralisierten digitalen Verträgen kommt ein einziger Dienst zum Einsatz, bei dem es nur einen Validator und gegebenenfalls einen Backup- und Wiederherstellungsdienst gibt, der ebenfalls zentral verwaltet wird. Es gibt eine Datenbank, die alle notwendigen Informationen speichert, um die Bedingungen des Smart Contracts festzulegen und den Wert zu verteilen, der in dieser Servicedatenbank berücksichtigt wird. Ein solcher zentralisierter Dienst hat einen Kunden, der mit bestimmten Anfragen Bedingungen festlegt und solche Verträge verwendet. Aufgrund des zentralisierten Charakters der Plattform sind Authentifizierungsmechanismen möglicherweise weniger sicher als bei Kryptowährungen.

Als Beispiel können wir Mobilfunkanbieter (verschiedene Mobilfunkbetreiber) nehmen. Nehmen wir an, ein bestimmter Betreiber führt auf seinen Servern eine zentrale Aufzeichnung des Datenverkehrs, der in verschiedenen Formaten übertragen werden kann, zum Beispiel in Form von Sprachanrufen, SMS-Übertragung, mobilem Internetverkehr und nach unterschiedlichen Standards, und führt auch Aufzeichnungen der Mittel auf Benutzerguthaben. Dementsprechend kann der Mobilfunkanbieter Verträge zur Abrechnung der erbrachten Leistungen und deren Bezahlung mit abweichenden Konditionen abschließen. In diesem Fall ist es einfach, Bedingungen festzulegen wie „Senden Sie eine SMS mit diesem oder jenem Code an diese und jene Nummer und Sie erhalten diese und jene Bedingungen für die Verkehrsverteilung.“

Als weiteres Beispiel sei genannt: traditionelle Banken mit erweiterter Funktionalität des Internetbankings und sehr einfachen Verträgen wie regelmäßige Zahlungen, automatische Umrechnung eingehender Zahlungen, automatische Abbuchung von Zinsen auf ein bestimmtes Konto usw.

Wenn wir über intelligente Verträge mit einer dezentralen Ausführungsumgebung sprechen, dann haben wir es mit einer Gruppe von Validatoren zu tun. Im Idealfall kann jeder Validator werden. Aufgrund des Datenbanksynchronisierungsprotokolls und der Konsensfindung verfügen wir über eine gemeinsame Datenbank, in der nun alle Transaktionen mit streng beschriebenen Verträgen gespeichert werden, und nicht über einige bedingte Abfragen, deren Formate sich häufig ändern, und es gibt keine offene Spezifikation. Dabei enthalten Transaktionen Anweisungen zur Vertragsausführung nach einer strengen Spezifikation. Diese Spezifikation ist offen und daher können Plattformbenutzer selbst Smart Contracts prüfen und validieren. Hier sehen wir, dass dezentrale Plattformen den zentralisierten hinsichtlich Unabhängigkeit und Fehlertoleranz überlegen sind, ihr Design und ihre Wartung jedoch deutlich komplexer sind.

Intelligente Verträge durch die Methode der Festlegung und Erfüllung von Bedingungen

Schauen wir uns nun genauer an, wie sich Smart Contracts in der Art und Weise unterscheiden können, wie sie Bedingungen festlegen und erfüllen. Hier richten wir unsere Aufmerksamkeit auf intelligente Verträge, die zufällig programmierbar und Turing-vollständig sind. Mit einem Turing-vollständigen Smart Contract können Sie nahezu beliebige Algorithmen als Bedingungen für die Vertragsausführung festlegen: Schreibzyklen, einige Funktionen zur Berechnung von Wahrscheinlichkeiten und dergleichen – bis hin zu Ihren eigenen elektronischen Signaturalgorithmen. In diesem Fall meinen wir ein wirklich willkürliches Schreiben von Logik.

Es gibt auch beliebige Smart Contracts, jedoch keine Turing-vollständigen. Dazu gehören Bitcoin und Litecoin mit eigenem Skript. Dies bedeutet, dass Sie nur bestimmte Operationen in beliebiger Reihenfolge verwenden können, aber keine Schleifen und keine eigenen Algorithmen mehr schreiben können.

Darüber hinaus gibt es Smart-Contract-Plattformen, die vordefinierte Smart Contracts umsetzen. Dazu gehören Bitshares und Steemit. Bitshares verfügt über eine Reihe intelligenter Verträge für den Handel, die Kontoverwaltung sowie die Verwaltung der Plattform selbst und ihrer Parameter. Steemit ist eine ähnliche Plattform, die sich jedoch nicht mehr wie Bitshares auf die Ausgabe von Tokens und den Handel konzentriert, sondern auf das Bloggen, also die Speicherung und Verarbeitung von Inhalten dezentral.

Zu den willkürlichen Turing-Complete-Verträgen gehören die Ethereum-Plattform und RootStock, das sich noch in der Entwicklung befindet. Daher werden wir im Folgenden etwas detaillierter auf die Smart-Contract-Plattform Ethereum eingehen.

Intelligente Verträge nach Initiierungsmethode

Basierend auf der Art der Initiierung können Smart Contracts auch in mindestens zwei Gruppen eingeteilt werden: automatisiert und manuell (nicht automatisiert). Automatisierte zeichnen sich dadurch aus, dass der Smart Contract unter Berücksichtigung aller bekannten Parameter und Bedingungen vollständig automatisch ausgeführt wird, d. h. es ist nicht erforderlich, zusätzliche Transaktionen zu senden und für jede weitere Ausführung eine zusätzliche Provision auszugeben. Die Plattform selbst verfügt über alle Daten, um zu berechnen, wie der Smart Contract zustande kommt. Die Logik dort ist nicht willkürlich, sondern vorbestimmt und alles ist vorhersehbar. Das heißt, Sie können die Komplexität der Ausführung eines Smart Contracts im Voraus abschätzen, eine Art konstante Provision dafür verwenden und alle Prozesse zu seiner Umsetzung sind effizienter.

Bei frei programmierten Smart Contracts erfolgt die Ausführung nicht automatisiert. Um einen solchen Smart Contract zu initiieren, müssen Sie praktisch bei jedem Schritt eine neue Transaktion erstellen, die die nächste Ausführungsstufe oder die nächste Smart Contract-Methode aufruft, die entsprechende Provision zahlen und auf die Bestätigung der Transaktion warten. Die Ausführung kann erfolgreich abgeschlossen werden oder nicht, da der Smart-Contract-Code willkürlich ist und einige unvorhersehbare Momente auftreten können, wie z. B. eine ewige Schleife, das Fehlen einiger Parameter und Argumente, nicht behandelte Ausnahmen usw.

Ethereum-Konten

Arten von Ethereum-Konten

Schauen wir uns an, welche Arten von Konten es auf der Ethereum-Plattform geben kann. Hier gibt es nur zwei Arten von Konten und keine anderen Optionen. Der erste Typ wird als Benutzerkonto bezeichnet, der zweite als Vertragskonto. Lassen Sie uns herausfinden, wie sie sich unterscheiden.

Das Benutzerkonto wird nur durch den persönlichen Schlüssel der elektronischen Signatur gesteuert. Der Kontoinhaber generiert sein eigenes Schlüsselpaar für die elektronische Signatur mithilfe des ECDSA-Algorithmus (Elliptic Curve Digital Signature Algorithm). Nur mit diesem Schlüssel signierte Transaktionen können den Status dieses Kontos ändern.

Für das Smart-Contract-Konto ist eine eigene Logik vorgesehen. Es kann nur durch vordefinierten Softwarecode gesteuert werden, der das Verhalten des Smart Contracts vollständig bestimmt: wie er seine Münzen unter bestimmten Umständen verwaltet, auf Initiative des Benutzers und unter welchen zusätzlichen Bedingungen diese Münzen verteilt werden. Wenn einige Punkte von den Entwicklern im Programmcode nicht vorgesehen sind, kann es zu Problemen kommen. Beispielsweise kann ein Smart-Vertrag einen bestimmten Status erhalten, in dem er die Einleitung einer weiteren Ausführung durch keinen der Benutzer akzeptiert. In diesem Fall werden die Coins tatsächlich eingefroren, da der Smart Contract kein Verlassen dieses Zustands vorsieht.

So werden Konten auf Ethereum erstellt

Bei einem Benutzerkonto generiert der Inhaber mittels ECDSA selbstständig ein Schlüsselpaar. Es ist wichtig zu beachten, dass Ethereum genau denselben Algorithmus und genau dieselbe elliptische Kurve für elektronische Signaturen verwendet wie Bitcoin, die Adresse jedoch auf etwas andere Weise berechnet wird. Hier wird nicht mehr wie bei Bitcoin das Ergebnis des Double-Hashings verwendet, sondern es wird ein Single-Hashing mit der Keccak-Funktion in einer Länge von 256 Bit bereitgestellt. Die niedrigstwertigen Bits werden vom resultierenden Wert abgeschnitten, nämlich die niedrigstwertigen 160 Bits des ausgegebenen Hash-Werts. Als Ergebnis erhalten wir eine Adresse in Ethereum. Tatsächlich nimmt es 20 Bytes ein.

Bitte beachten Sie, dass die Kontokennung in Ethereum hexadezimal kodiert ist, ohne dass eine Prüfsumme angewendet wird, im Gegensatz zu Bitcoin und vielen anderen Systemen, wo die Adresse in einem Zahlensystem zur Basis 58 mit zusätzlicher Prüfsumme kodiert ist. Das bedeutet, dass Sie bei der Arbeit mit Kontokennungen in Ethereum vorsichtig sein müssen: Schon ein einziger Fehler in der Kennung führt garantiert zum Verlust von Coins.

Es gibt eine wichtige Funktion: Ein Benutzerkonto auf der allgemeinen Datenbankebene wird in dem Moment erstellt, in dem er die erste eingehende Zahlung akzeptiert.

Die Erstellung eines Smart-Contract-Kontos erfordert einen völlig anderen Ansatz. Zunächst schreibt einer der Benutzer den Quellcode des Smart Contracts, anschließend wird der Code durch einen speziellen Compiler für die Ethereum-Plattform geleitet und erhält Bytecode für seine eigene virtuelle Ethereum-Maschine. Der resultierende Bytecode wird in einem speziellen Feld der Transaktion platziert. Die Beglaubigung erfolgt im Namen des Kontos des Initiators. Als nächstes wird diese Transaktion im gesamten Netzwerk verbreitet und der Smart-Contract-Code platziert. Die Provision für die Transaktion und damit für die Vertragsabwicklung wird vom Kontostand des Initiators abgebucht.

Jeder Smart-Vertrag enthält notwendigerweise einen eigenen Konstruktor (dieses Vertrags). Es kann leer sein oder Inhalt enthalten. Nachdem der Konstruktor ausgeführt wurde, wird eine Smart-Contract-Kontokennung erstellt, mit der Sie Münzen senden, bestimmte Smart-Contract-Methoden aufrufen usw. können.

Ethereum-Transaktionsstruktur

Zur Verdeutlichung beginnen wir mit der Struktur einer Ethereum-Transaktion und einem Beispiel für einen Smart-Contract-Code.

Einführung in Smart Contracts

Eine Ethereum-Transaktion besteht aus mehreren Feldern. Die erste davon, Nonce, ist eine bestimmte Seriennummer der Transaktion relativ zu dem Konto selbst, das sie verteilt und ihr Autor ist. Dies ist notwendig, um Doppeltransaktionen zu unterscheiden, also den Fall auszuschließen, dass dieselbe Transaktion zweimal akzeptiert wird. Durch die Verwendung einer Kennung verfügt jede Transaktion über einen eindeutigen Hashwert.

Als nächstes kommt ein Feld wie Gaspreis. Dies gibt den Preis an, zu dem die Ethereum-Basiswährung in Gas umgewandelt wird, das zur Bezahlung der Ausführung des Smart Contracts und der Zuteilung der virtuellen Maschinenressource verwendet wird. Was bedeutet das?

Bei Bitcoin werden die Gebühren direkt von der Basiswährung – Bitcoin selbst – bezahlt. Dies ist dank eines einfachen Berechnungsmechanismus möglich: Wir zahlen streng nach der in der Transaktion enthaltenen Datenmenge. Bei Ethereum ist die Situation komplizierter, da es sehr schwierig ist, sich auf die Menge der Transaktionsdaten zu verlassen. Dabei kann die Transaktion auch Programmcode enthalten, der auf der virtuellen Maschine ausgeführt wird, und jede Operation der virtuellen Maschine kann eine andere Komplexität haben. Es gibt auch Operationen, die Speicher für Variablen reservieren. Sie haben ihre eigene Komplexität, von der die Bezahlung für jeden Vorgang abhängt.

Die Kosten für jeden Vorgang in Gasäquivalenten bleiben konstant. Es wird speziell eingeführt, um die konstanten Kosten jeder Operation zu ermitteln. Abhängig von der Auslastung des Netzes ändert sich der Gaspreis, also der Koeffizient, nach dem die Basiswährung zur Zahlung der Provision in diese Hilfseinheit umgerechnet wird.

Es gibt noch ein weiteres Merkmal einer Transaktion in Ethereum: Der darin enthaltene Bytecode zur Ausführung in einer virtuellen Maschine wird so lange ausgeführt, bis sie mit einem Ergebnis (Erfolg oder Misserfolg) abgeschlossen wird oder bis eine bestimmte Menge an zugewiesenen Münzen zur Zahlung der Provision aufgebraucht ist . Um eine Situation zu vermeiden, in der im Falle eines Fehlers alle Münzen vom Konto des Absenders für Provisionen ausgegeben wurden (z. B. eine Art ewiger Zyklus, der in einer virtuellen Maschine gestartet wurde), gibt es das folgende Feld: Gas starten (oft als Gaslimit bezeichnet) – es bestimmt die maximale Menge an Münzen, die der Absender bereit ist auszugeben, um eine bestimmte Transaktion abzuschließen.

Das nächste Feld wird aufgerufen Zieladresse. Dazu gehört die Adresse des Empfängers der Coins oder die Adresse eines bestimmten Smart Contracts, dessen Methoden aufgerufen werden. Danach kommt das Feld Wert, wo die Anzahl der Münzen eingegeben wird, die an die Zieladresse gesendet werden.

Als nächstes kommt ein interessantes Feld namens technische Daten, wo die gesamte Struktur passt. Dabei handelt es sich nicht um ein separates Feld, sondern um eine ganze Struktur, in der der Code für die virtuelle Maschine definiert wird. Hier können Sie beliebige Daten platzieren, hierfür gibt es gesonderte Regeln.

Und das letzte Feld heißt Stempel, Unterschrift. Es enthält gleichzeitig sowohl die elektronische Signatur des Autors dieser Transaktion als auch den öffentlichen Schlüssel, mit dem diese Signatur überprüft wird. Aus dem öffentlichen Schlüssel können Sie die Kontokennung des Absenders dieser Transaktion ermitteln, also das Konto des Absenders im System selbst eindeutig identifizieren. Wir haben das Wesentliche über die Struktur der Transaktion herausgefunden.

Beispiel für einen Smart-Contract-Code für Solidity

Schauen wir uns nun den einfachsten Smart Contract anhand eines Beispiels genauer an.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Oben ist ein vereinfachter Quellcode, der die Münzen der Benutzer aufbewahren und bei Bedarf zurückgeben kann.

Es gibt also einen Bank-Smart-Vertrag, der die folgenden Funktionen ausführt: Er sammelt Münzen auf seinem Guthaben, das heißt, wenn eine Transaktion bestätigt und ein solcher Smart-Vertrag platziert wird, wird ein neues Konto erstellt, das Münzen auf seinem Guthaben enthalten kann; es erinnert sich an Benutzer und die Verteilung der Münzen zwischen ihnen; verfügt über mehrere Methoden zur Verwaltung des Guthabens, d. h. es ist möglich, das Guthaben des Benutzers aufzufüllen, abzuheben und zu überprüfen.

Lassen Sie uns jede Zeile des Quellcodes durchgehen. Dieser Vertrag hat konstante Felder. Einer davon mit der Typadresse heißt Eigentümer. Dabei merkt sich der Vertrag die Adresse des Benutzers, der diesen Smart Contract erstellt hat. Darüber hinaus gibt es eine dynamische Struktur, die die Korrespondenz zwischen Benutzeradressen und Guthaben aufrechterhält.

Darauf folgt die Bankmethode – sie hat den gleichen Namen wie der Vertrag. Dementsprechend ist dies sein Konstruktor. Hier wird der Owner-Variable die Adresse der Person zugewiesen, die diesen Smart Contract im Netzwerk platziert hat. Dies ist das Einzige, was in diesem Konstruktor passiert. Das heißt, msg sind in diesem Fall genau die Daten, die zusammen mit der Transaktion an die virtuelle Maschine übertragen wurden und den gesamten Code dieses Vertrags enthalten. Dementsprechend ist msg.sender der Autor dieser Transaktion, die diesen Code hostet. Er wird der Eigentümer des Smart Contracts sein.

Die Einzahlungsmethode ermöglicht es Ihnen, per Transaktion eine bestimmte Anzahl an Coins auf das Vertragskonto zu übertragen. In diesem Fall belässt der Smart Contract, der diese Coins erhält, diese in seiner Bilanz, zeichnet aber in der Bilanzstruktur auf, wer genau der Absender dieser Coins war, um zu wissen, wem sie gehören.

Die nächste Methode heißt Abheben und benötigt einen Parameter – die Menge an Münzen, die jemand von dieser Bank abheben möchte. Dadurch wird überprüft, ob genügend Coins auf dem Guthaben des Benutzers vorhanden sind, der diese Methode aufruft, um diese zu versenden. Wenn genügend davon vorhanden sind, gibt der Smart Contract selbst diese Anzahl an Münzen an den Anrufer zurück.

Als nächstes folgt die Methode zur Überprüfung des aktuellen Kontostands des Benutzers. Wer diese Methode aufruft, wird verwendet, um dieses Guthaben im Smart Contract abzurufen. Es ist erwähnenswert, dass der Modifikator dieser Methode view ist. Das bedeutet, dass die Methode selbst die Variablen ihrer Klasse in keiner Weise verändert und es sich eigentlich nur um eine Lesemethode handelt. Für den Aufruf dieser Methode wird keine separate Transaktion erstellt, es wird keine Gebühr gezahlt und alle Berechnungen werden lokal durchgeführt, woraufhin der Benutzer das Ergebnis erhält.

Die Kill-Methode wird benötigt, um den Zustand des Smart Contracts zu zerstören. Und hier erfolgt zusätzlich die Prüfung, ob der Aufrufer dieser Methode der Eigentümer dieses Vertrags ist. Wenn dies der Fall ist, zerstört sich der Vertrag selbst und die Zerstörungsfunktion benötigt einen Parameter – die Kontokennung, an die der Vertrag alle auf seinem Kontostand verbleibenden Münzen sendet. In diesem Fall gehen die restlichen Coins automatisch an die Adresse des Vertragsinhabers.

Wie funktioniert ein Full Node im Ethereum-Netzwerk?

Schauen wir uns schematisch an, wie solche Smart Contracts auf der Ethereum-Plattform ausgeführt werden und wie ein vollständiger Netzwerkknoten funktioniert.

Einführung in Smart Contracts

Ein vollständiger Knoten im Ethereum-Netzwerk muss mindestens vier Module haben.
Das erste ist, wie bei jedem dezentralen Protokoll, das P2P-Netzwerkmodul – ein Modul für die Netzwerkverbindung und die Arbeit mit anderen Knoten, in dem Blöcke, Transaktionen und Informationen über andere Knoten ausgetauscht werden. Dies ist eine traditionelle Komponente für alle dezentralen Kryptowährungen.

Als nächstes haben wir ein Modul zum Speichern von Blockchain-Daten, zur Verarbeitung, zur Auswahl eines Prioritätszweigs, zum Anhängen von Blöcken, zum Aufheben der Verknüpfung von Blöcken, zur Validierung dieser Blöcke usw.

Das dritte Modul heißt EVM (Ethereum Virtual Machine) – das ist eine virtuelle Maschine, die Bytecode von Ethereum-Transaktionen empfängt. Dieses Modul erfasst den aktuellen Status eines bestimmten Kontos und nimmt basierend auf dem empfangenen Bytecode Änderungen an dessen Status vor. Die Version der virtuellen Maschine muss auf jedem Netzwerkknoten identisch sein. Die Berechnungen, die auf jedem Ethereum-Knoten stattfinden, sind genau gleich, erfolgen jedoch asynchron: Jemand prüft und akzeptiert diese Transaktion früher, d. h. führt den gesamten darin enthaltenen Code aus, und jemand später. Wenn eine Transaktion erstellt wird, wird sie dementsprechend an das Netzwerk verteilt, die Knoten akzeptieren sie und zum Zeitpunkt der Überprüfung wird hier auf die gleiche Weise, wie Bitcoin Script in Bitcoin ausgeführt wird, der Bytecode der virtuellen Maschine ausgeführt.

Eine Transaktion gilt als verifiziert, wenn der gesamte darin enthaltene Code ausgeführt wurde, ein neuer Status eines bestimmten Kontos generiert und gespeichert wurde, bis klar ist, ob diese Transaktion angewendet wurde oder nicht. Wenn die Transaktion angewendet wird, gilt dieser Status nicht nur als abgeschlossen, sondern auch als aktuell. Es gibt eine Datenbank, die den Status jedes Kontos für jeden Netzwerkknoten speichert. Da alle Berechnungen auf die gleiche Weise erfolgen und der Zustand der Blockchain gleich ist, ist auch die Datenbank mit den Zuständen aller Konten für jeden Knoten gleich.

Mythen und Grenzen intelligenter Verträge

Was die Einschränkungen betrifft, die für Smart-Contract-Plattformen ähnlich wie Ethereum bestehen, kann Folgendes angeführt werden:

  • Codeausführung;
  • Speicher zuweisen;
  • Blockchain-Daten;
  • Zahlungen senden;
  • neuen Vertrag erstellen;
  • andere Verträge aufrufen.

Schauen wir uns die Einschränkungen an, die einer virtuellen Maschine auferlegt werden, und dementsprechend einige Mythen über intelligente Verträge zerstreuen. Auf einer virtuellen Maschine, die sich nicht nur in Ethereum, sondern auch auf ähnlichen Plattformen befinden kann, können Sie wirklich beliebige logische Operationen ausführen, d. h. Code schreiben und er wird dort ausgeführt, Sie können zusätzlich Speicher zuweisen. Die Gebühr wird jedoch für jeden Vorgang und für jede zusätzlich zugewiesene Speichereinheit separat gezahlt.

Als nächstes kann die virtuelle Maschine Daten aus der Blockchain-Datenbank lesen, um diese Daten als Auslöser für die Ausführung der einen oder anderen Smart-Contract-Logik zu verwenden. Die virtuelle Maschine kann Transaktionen erstellen und senden, sie kann neue Verträge erstellen und Methoden anderer Smart Contracts aufrufen, die bereits im Netzwerk veröffentlicht sind: vorhanden, verfügbar usw.

Der am weitesten verbreitete Mythos besagt, dass intelligente Verträge von Ethereum in ihren Bedingungen Informationen aus jeder Internetressource nutzen können. Die Wahrheit ist, dass eine virtuelle Maschine keine Netzwerkanfrage an eine externe Informationsressource im Internet senden kann. Das heißt, es ist unmöglich, einen intelligenten Vertrag zu schreiben, der den Wert zwischen den Benutzern verteilt, abhängig davon, wie das Wetter draußen ist. oder wer eine Meisterschaft gewonnen hat, oder basierend auf anderen Vorfällen in der Außenwelt, denn Informationen über diese Vorfälle befinden sich einfach nicht in der Datenbank der Plattform selbst. Das heißt, es gibt nichts darüber in der Blockchain. Wenn es dort nicht erscheint, kann die virtuelle Maschine diese Daten nicht als Auslöser verwenden.

Nachteile von Ethereum

Lassen Sie uns die wichtigsten auflisten. Der erste Nachteil besteht darin, dass es einige Schwierigkeiten beim Entwerfen, Entwickeln und Testen intelligenter Verträge in Ethereum gibt (Ethereum verwendet die Solidity-Sprache, um intelligente Verträge zu schreiben). Tatsächlich zeigt die Praxis, dass ein sehr großer Prozentsatz aller Fehler auf den menschlichen Faktor zurückzuführen ist. Dies gilt tatsächlich für bereits geschriebene Ethereum-Smart-Verträge mit durchschnittlicher oder höherer Komplexität. Wenn bei einfachen Smart Contracts die Wahrscheinlichkeit eines Fehlers gering ist, kommt es bei komplexen Smart Contracts sehr häufig zu Fehlern, die zum Diebstahl von Geldern, deren Einfrieren, der Zerstörung von Smart Contracts auf unerwartete Weise usw. führen. Es gibt bereits viele solcher Fälle bekannt.

Der zweite Nachteil besteht darin, dass die virtuelle Maschine selbst nicht perfekt ist, da sie auch von Menschen geschrieben wird. Es kann beliebige Befehle ausführen, und darin liegt die Schwachstelle: Eine Reihe von Befehlen können auf eine bestimmte Art und Weise konfiguriert werden, die zu im Vorhinein unvorhergesehenen Konsequenzen führt. Dies ist ein sehr komplexer Bereich, aber es gibt bereits mehrere Studien, die zeigen, dass diese Schwachstellen in der aktuellen Version des Ethereum-Netzwerks bestehen und zum Scheitern vieler Smart Contracts führen können.

Eine weitere große Schwierigkeit, die als Nachteil angesehen werden kann. Es liegt darin, dass Sie praktisch oder technisch zu dem Schluss kommen können, dass Sie beim Kompilieren des Bytecodes eines Vertrags, der auf einer virtuellen Maschine ausgeführt wird, eine bestimmte Reihenfolge von Vorgängen bestimmen können. Wenn diese Vorgänge zusammen ausgeführt werden, wird die virtuelle Maschine stark belastet und verlangsamt sie in einem unverhältnismäßigen Verhältnis zu der Gebühr, die für die Durchführung dieser Vorgänge gezahlt wurde.

In der Vergangenheit gab es bereits eine Phase in der Entwicklung von Ethereum, in der viele Leute, die die Funktionsweise einer virtuellen Maschine im Detail verstanden, solche Schwachstellen entdeckten. Tatsächlich zahlten Transaktionen eine sehr geringe Gebühr, verlangsamten jedoch praktisch das gesamte Netzwerk. Diese Probleme sind sehr schwer zu lösen, da es erstens notwendig ist, sie zu ermitteln, zweitens den Preis für die Durchführung dieser Vorgänge anzupassen und drittens einen Hard Fork durchzuführen, also alle Netzwerkknoten auf eine neue Version zu aktualisieren der Software und anschließender gleichzeitiger Aktivierung dieser Änderungen.

Was Ethereum betrifft, wurde viel geforscht, es wurden viele praktische Erfahrungen gesammelt: sowohl positive als auch negative, aber dennoch bleiben Schwierigkeiten und Schwachstellen bestehen, die noch irgendwie angegangen werden müssen.

Damit ist der thematische Teil des Artikels abgeschlossen. Kommen wir nun zu Fragen, die häufig auftauchen.

Häufig gestellte Fragen

– Wenn alle Parteien eines bestehenden Smart-Vertrags die Bedingungen ändern möchten, können sie diesen Smart-Vertrag mithilfe von Multisig kündigen und dann einen neuen Smart-Vertrag mit aktualisierten Bedingungen für seine Ausführung erstellen?

Die Antwort wird hier zweifach sein. Warum? Denn einerseits wird ein Smart Contract einmalig definiert und bringt keine Änderungen mehr mit sich, andererseits kann er über eine vorab geschriebene Logik verfügen, die eine vollständige oder teilweise Änderung einiger Bedingungen vorsieht. Das heißt, wenn Sie etwas an Ihrem Smart Contract ändern möchten, dann müssen Sie die Bedingungen vorgeben, unter denen Sie diese Bedingungen aktualisieren können. Nur so umsichtig kann die Vertragsverlängerung daher organisiert werden. Aber auch hier kann es zu Problemen kommen: Machen Sie einen Fehler und erhalten Sie eine entsprechende Schwachstelle. Daher müssen solche Dinge sehr detailliert und sorgfältig entworfen und getestet werden.

— Was passiert, wenn der Mediator eine Vereinbarung mit einer der teilnehmenden Parteien abschließt: Treuhandvertrag oder Smart Contract? Ist in einem Smart Contract ein Mediator erforderlich?

Ein Vermittler ist in einem Smart Contract nicht erforderlich. Es existiert möglicherweise nicht. Wenn der Mediator im Falle eines Treuhandvertrags eine Verschwörung mit einer der Parteien eingeht, dann verliert dieses Schema drastisch seinen Wert. Deshalb werden Mediatoren so ausgewählt, dass ihnen gleichzeitig das Vertrauen aller an diesem Prozess Beteiligten genießt. Dementsprechend werden Sie einfach keine Münzen an eine Multisignatur-Adresse mit einem Vermittler übertragen, dem Sie nicht vertrauen.

— Ist es möglich, mit einer Ethereum-Transaktion viele verschiedene Token von Ihrer Adresse an verschiedene Zieladressen zu übertragen, beispielsweise an Börsenadressen, an denen diese Token gehandelt werden?

Das ist eine gute Frage und sie betrifft das Ethereum-Transaktionsmodell und wie es sich vom Bitcoin-Modell unterscheidet. Und der Unterschied ist radikal. Wenn Sie im Ethereum-Transaktionsmodell einfach Münzen übertragen, werden diese nur von einer Adresse an eine andere übertragen, ohne Änderung, nur der von Ihnen angegebene spezifische Betrag. Mit anderen Worten handelt es sich hierbei nicht um ein Modell der nicht ausgegebenen Ausgaben (UTXO), sondern um ein Modell der Konten und entsprechenden Salden. Es ist theoretisch möglich, mehrere verschiedene Token in einer Transaktion gleichzeitig zu senden, wenn Sie einen raffinierten Smart Contract schreiben, aber Sie müssen trotzdem viele Transaktionen durchführen, einen Vertrag erstellen, dann Token und Coins darauf übertragen und dann die entsprechende Methode aufrufen . Dies erfordert Aufwand und Zeit, daher funktioniert es in der Praxis nicht so und alle Zahlungen in Ethereum erfolgen in separaten Transaktionen.

— Einer der Mythen über die Ethereum-Plattform ist, dass es unmöglich ist, Bedingungen zu beschreiben, die von den Daten einer externen Internetressource abhängen. Was also tun?

Die Lösung besteht darin, dass der Smart Contract selbst ein oder mehrere sogenannte vertrauenswürdige Orakel bereitstellen kann, die Daten über den Zustand der Dinge in der Außenwelt sammeln und diese über spezielle Methoden an die Smart Contracts übermitteln. Der Vertrag selbst betrachtet die Daten, die er von vertrauenswürdigen Parteien erhalten hat, als wahr. Für mehr Zuverlässigkeit wählen Sie einfach eine große Gruppe von Orakeln aus und minimieren Sie das Risiko ihrer Absprachen. Der Vertrag selbst darf Daten von Orakeln, die der Mehrheit widersprechen, nicht berücksichtigen.

Eine der Vorlesungen des Online-Kurses zu Blockchain ist diesem Thema gewidmet – „Einführung in Smart Contracts".

Source: habr.com

Kommentar hinzufügen