Einführung in Smart Contracts

In diesem Artikel werden wir uns ansehen, was intelligente Verträge sind, was sie sind, verschiedene intelligente Vertragsplattformen kennenlernen, ihre Funktionen kennenlernen und diskutieren, wie sie funktionieren und welche Vorteile sie bieten können. Dieses Material ist sehr nützlich für Leser, die mit dem Thema Smart Contracts nicht vertraut sind, es aber näher verstehen möchten.

Regulärer Vertrag vs. kluger Vertrag


Bevor wir auf Details eingehen, schauen wir uns ein Beispiel für den Unterschied zwischen einem normalen Vertrag, der auf Papier festgelegt ist, und einem intelligenten Vertrag, der in digitaler Form dargestellt wird.

Bild

Wie hat das vor intelligenten Verträgen funktioniert? Stellen Sie sich eine Gruppe von Menschen vor, die einige Regeln und Bedingungen für die Verteilung von Werten sowie einen bestimmten Mechanismus festlegen möchten, um die Umsetzung dieser Verteilung gemäß den vorgegebenen Regeln und Bedingungen zu gewährleisten. Dann kamen sie zusammen, machten ein Papier, auf das sie ihre Identifikationsdaten, die Bedingungen, die Werte aufschrieben, das Datum festlegten und unterschrieben. Dieser Vertrag wurde auch von einer vertrauenswürdigen Partei wie einem Notar bestätigt. Darüber hinaus gingen diese Personen mit ihrer Papierkopie eines solchen Vertrags in verschiedene Richtungen auseinander und begannen, einige Maßnahmen durchzuführen, die möglicherweise nicht dem Vertrag selbst entsprachen, dh sie taten eine Sache, und auf dem Papier wurde versichert, dass sie etwas völlig anderes tun sollten. Und wie kommt man aus dieser Situation heraus? Tatsächlich muss eines der Mitglieder der Gruppe dieses Papier nehmen, einige Beweise vorlegen, es vor Gericht bringen und die Einhaltung des Vertrags und der tatsächlichen Maßnahmen anstreben. Sehr oft ist es schwierig, eine faire Ausführung dieses Vertrags zu erreichen, was zu unangenehmen Konsequenzen führt.

Was kann man über intelligente Verträge sagen? Sie kombinieren sowohl die Möglichkeit, die Vertragsbedingungen zu schreiben, als auch den Mechanismus für ihre strikte Umsetzung. Wenn die Bedingungen festgelegt wurden und die entsprechende Transaktion oder Anforderung signiert wurde, ist es nach Annahme dieser Anforderung oder Transaktion nicht mehr möglich, die Bedingungen zu ändern oder deren Implementierung zu beeinflussen.

Es gibt einen Validator oder das gesamte Netzwerk sowie eine Datenbank, in der alle zur Ausführung eingegangenen intelligenten Verträge in strenger chronologischer Reihenfolge gespeichert sind. Es ist auch wichtig, dass diese Datenbank alle Auslösebedingungen für die Ausführung eines intelligenten Vertrags enthält. Darüber hinaus muss der Wert berücksichtigt werden, dessen Verteilung im Vertrag beschrieben ist. Wenn dies für eine digitale Währung gilt, sollte diese Datenbank dies berücksichtigen.

Mit anderen Worten, die Prüfer von Smart Contracts müssen Zugriff auf alle Daten haben, mit denen der Smart Contract arbeitet. Beispielsweise sollte eine Datenbank verwendet werden, um gleichzeitig digitale Währungen, Benutzersalden, Benutzertransaktionen und Zeitstempel aufzuzeichnen. In einem intelligenten Vertrag kann die Bedingung dann das Guthaben des Benutzers in einer bestimmten Währung, der Beginn einer bestimmten Zeit oder die Tatsache einer bestimmten Transaktion sein, jedoch nicht mehr.

Intelligente Vertragsdefinition


Im Allgemeinen wurde die Terminologie selbst vom Forscher Nick Szabo erfunden und erstmals 1994 angewendet. Sie wurde 1997 in einem Artikel dokumentiert, der die Idee intelligenter Verträge beschreibt.

Intelligente Verträge implizieren, dass eine gewisse Automatisierung der Wertverteilung durchgeführt wird, die möglicherweise nur von den vordefinierten Bedingungen abhängt. In seiner einfachsten Form sieht es aus wie ein Vertrag mit genau festgelegten Bedingungen, der von bestimmten Parteien unterzeichnet wird.

Intelligente Verträge sollen das Vertrauen in Dritte minimieren. Manchmal ist das Entscheidungszentrum, von dem alles abhängt, völlig ausgeschlossen. Darüber hinaus ist es einfacher, eine Prüfung für solche Verträge durchzuführen. Dies ist eine Folge einiger Konstruktionsmerkmale eines solchen Systems, aber meistens meinen wir mit einem intelligenten Vertrag eine dezentrale Umgebung und das Vorhandensein von Funktionen, mit denen jeder die Datenbank analysieren und eine vollständige Prüfung der Ausführung von Verträgen durchführen kann. Dies gewährleistet den Schutz vor rückwirkenden Änderungen von Daten, die Änderungen bei der Ausführung des Vertrags selbst zur Folge haben. Die Digitalisierung der meisten Prozesse beim Erstellen und Starten eines intelligenten Vertrags vereinfacht häufig die Technologie und die Kosten ihrer Implementierung.

Ein einfaches Beispiel - Treuhandservice


Schauen wir uns ein sehr einfaches Beispiel an. Dies hilft Ihnen dabei, die Funktionalität intelligenter Verträge besser zu verstehen und besser zu navigieren, in welchen Fällen sie verwendet werden sollten.

Bild

Es kann auch mit Bitcoin implementiert werden, obwohl es derzeit immer noch schwierig ist, Bitcoin als vollwertige Plattform für intelligente Verträge zu bezeichnen. Wir haben also einige Käufer und es gibt einen Online-Shop. Der Käufer möchte in diesem Geschäft einen Monitor kaufen. Im einfachsten Fall bereitet der Käufer die Zahlung vor und sendet sie. Der Online-Shop akzeptiert sie, bestätigt sie und sendet sie dann. In dieser Situation besteht jedoch ein großer Vertrauensbedarf - der Käufer muss dem Online-Shop für die gesamten Kosten des Monitors vertrauen. Da der Online-Shop in den Augen des Käufers ein schlechtes Ansehen hat, besteht das Risiko, dass der Shop nach Annahme der Zahlung aus irgendeinem Grund den Service verweigert und die Waren nicht an den Käufer sendet. Daher stellt der Käufer eine Frage (und der Online-Shop stellt diese Frage), was in diesem Fall angewendet werden kann, um solche Risiken zu minimieren und solche Transaktionen zuverlässiger zu machen.

Bei Bitcoin können Sie dem Käufer und Verkäufer die Möglichkeit geben, einen Mediator unabhängig voneinander auszuwählen. Es gibt viele Menschen, die sich mit strittigen Themen befassen. Und unsere Teilnehmer können aus der allgemeinen Liste der Mediatoren auswählen, denen gleichzeitig vertraut wird. Zusammen bilden sie eine Multisignaturadresse 2 von 3, wobei drei Schlüssel vorhanden sind und zwei Signaturen von zwei beliebigen Schlüsseln benötigt werden, um Münzen von dieser Adresse auszugeben. Ein Schlüssel gehört dem Käufer, der zweite dem Online-Shop und der dritte dem Mediator. Und der Käufer sendet den zur Bezahlung des Monitors erforderlichen Betrag an eine solche Multisignaturadresse. Wenn der Verkäufer nun feststellt, dass das Geld für eine Weile an der von ihm abhängigen Multisignaturadresse gesperrt ist, kann er den Monitor sicher per Post senden.

Ferner erhält der Käufer das Paket, prüft die Ware und entscheidet über den endgültigen Kauf. Er kann dem erbrachten Service vollständig zustimmen und die Transaktion mit seinem Schlüssel unterschreiben, wo er Münzen von der Multisignaturadresse an den Verkäufer überweist, oder mit etwas unzufrieden sein. Im zweiten Fall kontaktiert er den Mediator, um eine alternative Transaktion zu erstellen, bei der diese Münzen unterschiedlich verteilt werden.

Angenommen, der Monitor ist etwas zerkratzt angekommen und es gab kein Kabel zum Anschließen an einen Computer im Kit, obwohl auf der Website des Online-Shops geschrieben wurde, dass das Kabel im Kit enthalten sein sollte. Dann sammelt der Käufer die Beweise, die erforderlich sind, um dem Mediator zu beweisen, dass er in dieser Situation getäuscht wurde: Er macht Screenshots der Website, macht ein Foto des Schecks aus der Post, macht ein Foto von Kratzern auf dem Monitor und zeigt, dass das Siegel gebrochen und das Kabel herausgezogen wurde. Der Online-Shop wiederum sammelt seine Beweise und gibt sie an den Mediator weiter.

Der Mediator ist daran interessiert, sowohl die Empörung des Käufers als auch die Interessen des Online-Shops zu befriedigen (es wird weiter verstanden, warum). Er stellt eine solche Transaktion dar, bei der Münzen mit Multisignaturadressen in einem gewissen Verhältnis zwischen dem Käufer, dem Online-Shop und der Auswahl ausgegeben werden, da er als Belohnung für seine Arbeit an sich selbst teilnimmt. Angenommen, 90% des Gesamtbetrags gehen an den Verkäufer, 5% an den Mediator und 5% an den Käufer. Der Mediator signiert diese Transaktion mit seinem Schlüssel, sie kann jedoch noch nicht angewendet werden, da hierfür zwei Signaturen erforderlich sind, jedoch nur eine. Er sendet eine solche Transaktion sowohl an den Käufer als auch an den Verkäufer. Wenn mindestens einer von ihnen mit dieser Möglichkeit der Umverteilung von Münzen zufrieden ist, wird die Transaktion zusätzlich signiert und an das Netzwerk verteilt. Für die Validierung reicht es aus, wenn einer der Transaktionsteilnehmer der Mediator-Option zustimmt.

In diesem Fall ist es wichtig, zunächst einen Mediator auszuwählen, damit beide Teilnehmer ihm vertrauen. In diesem Fall wird er unabhängig von den Interessen des einen oder anderen handeln und die Situation objektiv beurteilen. Wenn der Mediator keine solche Option für die Verteilung von Münzen bietet, die mindestens einen Teilnehmer zufriedenstellen, können sowohl der Käufer als auch der Online-Shop die Münzen nach gemeinsamer Vereinbarung an eine neue Multisignaturadresse weiterleiten und ihre beiden Unterschriften setzen. Die neue Multisignaturadresse wird mit einer anderen Auswahl zusammengestellt, die möglicherweise kompetenter in dieser Angelegenheit ist und eine bessere Option bietet.

Beispiel für Schlafsaal und Kühlschrank


Schauen wir uns ein komplexeres Beispiel an, in dem die Funktionen eines intelligenten Vertrags expliziter dargestellt werden.

Bild

Nehmen wir an, es gibt drei Leute, die sich kürzlich in einem Schlafsaal niedergelassen haben. Die drei sind daran interessiert, einen Kühlschrank in ihrem Zimmer zu kaufen, den sie teilen werden. Einer von ihnen meldete sich freiwillig, um den notwendigen Betrag für den Kauf eines Kühlschranks zu sammeln und mit dem Verkäufer zu verhandeln. Sie haben sich jedoch vor relativ kurzer Zeit kennengelernt, und es besteht nicht genügend Vertrauen zwischen ihnen. Offensichtlich sind zwei von ihnen gefährdet und geben einem dritten Geld. Darüber hinaus müssen sie eine Einigung über die Wahl des Verkäufers erzielen.

Sie können den Treuhandservice nutzen, dh einen Mediator auswählen, der die Ausführung der Transaktion überwacht und umstrittene Probleme löst, falls solche auftreten. Nachdem sie zugestimmt haben, erstellen sie einen intelligenten Vertrag und schreiben darin bestimmte Bedingungen vor.

Die erste Bedingung ist, dass vor einer bestimmten Zeit, beispielsweise innerhalb einer Woche, drei Zahlungen von bestimmten Adressen für einen bestimmten Betrag auf dem entsprechenden Konto des Smart-Vertrags eingehen müssen. Geschieht dies nicht, endet der Smart-Vertrag und gibt die Münzen an alle Teilnehmer zurück. Wenn die Bedingung erfüllt ist, werden die Werte der Kennungen des Verkäufers und des Mediators festgelegt und die Bedingung, dass alle Teilnehmer mit der Wahl des Verkäufers und des Mediators einverstanden sind, überprüft. Wenn alle Bedingungen erfüllt sind, wird das Geld an die angegebenen Adressen überwiesen. Ein solcher Ansatz kann die Teilnehmer auf jeder Seite vor Betrug schützen und beseitigt im Allgemeinen die Notwendigkeit des Vertrauens.

Wir sehen in diesem Beispiel das Prinzip selbst, dass eine solche Möglichkeit, Schritt für Schritt Parameter für jede zu erfüllende Bedingung festzulegen, die Erstellung von Systemen beliebiger Komplexität und Tiefe verschachtelter Ebenen ermöglicht. Darüber hinaus können Sie zunächst die erste Bedingung in einem Smart-Vertrag definieren und erst nach dessen Abschluss Parameter für die nächste Bedingung festlegen. Mit anderen Worten, formal ist die Bedingung vorgeschrieben, und Parameter dafür können bereits während ihres Betriebs eingestellt werden.

Klassifizierung intelligenter Verträge


Zur Klassifizierung können Sie verschiedene Kriteriengruppen angeben. Zum Zeitpunkt der Technologieentwicklung sind jedoch vier davon relevant.

Intelligente Verträge können durch eine Laufzeitumgebung unterschieden werden, 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 intelligenter Verträge.

Sie können auch durch den Prozess des Einstellens und Erfüllens von Bedingungen unterschieden werden: Sie können willkürlich programmierbar, begrenzt oder vordefiniert sein, d. H. Streng typisiert. Wenn es auf der Smart Contract-Plattform nur 4 spezifische Smart Contracts gibt, können die Parameter für diese beliebig festgelegt werden. Dementsprechend ist das Einstellen viel einfacher: Wir wählen einen Vertrag aus der Liste aus und übergeben die Parameter.

Bei der Initiierungsmethode gibt es automatisierte intelligente Verträge, dh wenn bestimmte Bedingungen erfüllt sind, erfüllen sie sich selbst, und es gibt solche Verträge, in denen die Bedingungen angegeben sind, aber die Plattform überprüft ihre Erfüllung nicht automatisch, da sie separat initiiert werden müssen.

Darüber hinaus unterscheiden sich intelligente Verträge in Bezug auf den Datenschutz. Sie können entweder vollständig offen oder teilweise oder vollständig vertraulich sein. Letzteres bedeutet, dass externe Beobachter die Bedingungen intelligenter Verträge nicht sehen. Das Thema Datenschutz ist jedoch sehr umfangreich und sollte getrennt vom aktuellen Artikel betrachtet werden.

Im Folgenden werden wir uns mit den ersten drei Kriterien befassen, um das Verständnis des aktuellen Themas zu verdeutlichen.

Intelligente Laufzeitverträge


Bild

Die Laufzeit unterscheidet zwischen zentralisierten und dezentralisierten Smart Contract-Plattformen. Bei zentralisierten digitalen Verträgen wird ein Dienst verwendet, bei dem nur ein Validator vorhanden ist und möglicherweise ein Sicherungs- und Wiederherstellungsdienst vorhanden ist, der ebenfalls zentral verwaltet wird. Es gibt eine Datenbank, in der alle erforderlichen Informationen zum Festlegen der Bedingungen des Smart Contract und zur Verteilung des Werts gespeichert sind, der in dieser Datenbank des Dienstes berücksichtigt wird. Ein solcher zentralisierter Dienst hat einen Kunden, der Bedingungen für bestimmte Anforderungen festlegt und solche Verträge verwendet. Aufgrund der Tatsache, dass die Plattform zentralisiert ist, sind Authentifizierungsmechanismen möglicherweise weniger zuverlässig als in Kryptowährungen.

Als Beispiel können Sie Mobilfunkanbieter (verschiedene Mobilfunkbetreiber) verwenden. Angenommen, ein bestimmter Betreiber verfolgt den Datenverkehr auf seinen Servern zentral, der in verschiedenen Formaten übertragen werden kann, z. B. in Form von Sprachanrufen, SMS, mobilem Internetverkehr und nach verschiedenen Standards, und verfolgt auch die Gelder auf den Benutzerguthaben. Dementsprechend kann ein Mobilfunkanbieter Verträge zur Abrechnung der erbrachten Dienste und ihrer Zahlung zu unterschiedlichen Bedingungen abschließen. In diesem Fall können Bedingungen wie "Senden Sie eine SMS mit diesem und jenem Code an diese und jene Nummer und Sie erhalten solche und solche Verkehrsverteilungsbedingungen" leicht festgelegt werden.

Ein weiteres Beispiel kann angeführt werden: traditionelle Banken mit fortschrittlicher Internetbanking-Funktionalität und sehr einfachen Verträgen wie regelmäßigen Zahlungen, automatischer Umwandlung eingehender Zahlungen, automatischem Zinsabzug auf einem bestimmten Konto usw.

Wenn es sich um intelligente Verträge mit einer dezentralen Laufzeit handelt, haben wir eine Gruppe von Validatoren. Im Idealfall kann jeder überhaupt ein Validator werden. Aufgrund des Datenbanksynchronisationsprotokolls und der Konsensbildung verfügen wir über eine gemeinsame Datenbank, in der jetzt alle Transaktionen mit streng beschriebenen Verträgen gespeichert werden und nicht einige bedingte Anforderungen, deren Formate sich häufig ändern, aber es gibt keine offene Spezifikation. Hier enthalten Transaktionen Anweisungen zur Ausführung eines Vertrags gemäß strengen Spezifikationen. Diese Spezifikation ist offen und daher können Plattformbenutzer selbst intelligente Verträge prüfen und validieren. Hier sehen wir, dass dezentrale Plattformen in Bezug auf Unabhängigkeit und Fehlertoleranz den zentralisierten Plattformen überlegen sind, ihr Design und ihre Wartung jedoch viel komplizierter sind.

Intelligente Verträge auf dem Weg zur Festlegung und Erfüllung von Bedingungen


Jetzt werden wir genauer analysieren, wie sich intelligente Verträge in der Art und Weise unterscheiden können, wie sie definiert und erfüllt werden. Hier achten wir auf intelligente Verträge, die willkürlich programmiert und Turing-vollständig sind. Mit einem Turing-Complete-Smart-Vertrag können Sie nahezu jeden Algorithmus als Bedingung für die Vertragserfüllung angeben: Registerzyklen, eine Art von Wahrscheinlichkeitsberechnungsfunktionen und dergleichen bis hin zu Ihren eigenen elektronischen Signaturalgorithmen. In diesem Fall meinen wir eine wirklich willkürliche Schreibweise der Logik.

Sie wählen auch willkürliche intelligente Verträge aus, die laut Turing jedoch nicht vollständig sind. Dazu gehören Bitcoin und Litecoin mit einem eigenen Skript. Dies bedeutet, dass es möglich ist, nur bestimmte Operationen in einer beliebigen Reihenfolge zu verwenden, aber es ist nicht mehr möglich, Schleifen und benutzerdefinierte Algorithmen zu schreiben.

Darüber hinaus gibt es solche Smart Contract-Plattformen, die vordefinierte Smart Contracts implementieren. Dazu gehören Bitshares und Steemit. Bitshares verfügt über eine Reihe intelligenter Verträge für den Handel, die Verwaltung von Konten, die Verwaltung der Plattform selbst und ihrer Parameter. Steemit ist eine ähnliche Plattform, konzentriert sich jedoch nicht mehr auf die Ausgabe von Token und den Handel wie Bitshares, sondern auf das Bloggen, d. H. Es speichert und verarbeitet Inhalte dezentral.

Zu den willkürlich abgeschlossenen Verträgen gehören die Plattformen Ethereum und RootStock, die sich noch in der Entwicklung befinden. Daher werden wir uns weiter mit der intelligenten Vertragsplattform von Ethereum befassen.

Intelligente Verträge nach Initiierungsmethode


Durch die Initiierungsmethode können intelligente Verträge auch in mindestens zwei Gruppen unterteilt werden: automatisiert und manuell (nicht automatisiert).Es ist typisch für automatisierte Transaktionen, dass der Smart-Vertrag mit allen bekannten Parametern und dem Einsetzen von Bedingungen vollständig automatisch ausgeführt wird, dh es müssen keine zusätzlichen Transaktionen gesendet und für jede nachfolgende Ausführung eine zusätzliche Provision ausgegeben werden. Die Plattform selbst verfügt über alle Daten, um zu berechnen, wie der Smart-Vertrag endet. Die Logik dort ist nicht willkürlich, sondern vorbestimmt, und all dies ist vorhersehbar. Das heißt, Sie können im Voraus die Komplexität des intelligenten Vertrags beurteilen, eine konstante Provision dafür verwenden und alle Prozesse für seine Implementierung sind effizienter.

Bei intelligenten Verträgen, die willkürlich programmiert werden, wird die Ausführung nicht automatisiert. Um einen solchen intelligenten Vertrag zu initiieren, müssen Sie praktisch bei jedem Schritt eine neue Transaktion erstellen, die die nächste Ausführungsphase oder die nächste Methode des intelligenten Vertrags 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. ein ewiger Zyklus, das Fehlen einiger Parameter und Argumente, unverarbeitete außergewöhnliche Momente usw.

Ethereum-Konten


Arten von Ethereum-Konten


Lassen Sie uns überlegen, welche Konten auf der Ethereum-Plattform vorhanden sein können. Hier gibt es nur zwei Arten von Konten und es gibt keine weiteren Optionen. Der erste Typ heißt Benutzerkonto, der zweite ist das Vertragskonto. Mal sehen, wie sie sich unterscheiden.

Das Benutzerkonto wird nur mit dem privaten Schlüssel der elektronischen Signatur verwaltet. Der Kontoinhaber generiert sein Schlüsselpaar für die elektronische Signatur mit dem ECDSA-Algorithmus (Elliptic Curve Digital Signature Algorithm). Nur die mit diesem Schlüssel signierten Transaktionen können den Status dieses Kontos ändern.

Für das Smart Contract-Konto gibt es eine separate Logik. Sie kann nur mit Hilfe eines vorgegebenen Programmcodes gesteuert werden, der das Verhalten des Smart Contract vollständig bestimmt: Wie wird er unter bestimmten Umständen seine Münzen verwalten, auf Initiative des Benutzers und unter welchen zusätzlichen Bedingungen werden diese Münzen verteilt? Wenn die Entwickler im Programmcode einige Punkte nicht angeben, können Probleme auftreten. Beispielsweise kann ein intelligenter Vertrag einen bestimmten Status erhalten, in dem er die Einleitung einer weiteren Ausführung von keinem der Benutzer akzeptiert. In diesem Fall werden die Münzen tatsächlich eingefroren, da der Smart-Vertrag keinen Ausweg aus diesem Zustand bietet.

So erstellen Sie Konten in Ethereum


Bei einem Benutzerkonto generiert der Eigentümer unabhängig ein Schlüsselpaar über ECDSA. Es ist wichtig zu beachten, dass Ethereum für die elektronische Signatur genau denselben Algorithmus und genau dieselbe elliptische Kurve wie Bitcoin verwendet, die Adresse jedoch etwas anders berechnet wird. Hier wird das Ergebnis des doppelten Hashing nicht mehr wie bei Bitcoin angewendet, sondern es wird ein einmaliges Hashing durch die Keccak-Funktion auf einer Länge von 256 Bit bereitgestellt. Die niedrigstwertigen Bits werden vom empfangenen Wert abgeschnitten, nämlich die 160 niedrigstwertigen Bits des Ausgabewerts der Hash-Funktion. Als Ergebnis erhalten wir die Adresse in Ethereum. Tatsächlich dauert es 20 Bytes.

Beachten Sie, dass die Kontokennung in Ethereum im Gegensatz zu Bitcoin und vielen anderen Systemen, bei denen die Adresse im Basisnummernsystem 58 mit einer zusätzlichen Prüfsumme codiert ist, ohne Verwendung einer Prüfsumme hexadezimal codiert wird. Dies bedeutet, dass Sie sorgfältig mit Kontokennungen in Ethereum arbeiten müssen: Selbst ein Fehler in der Kennung führt garantiert zum Verlust von Münzen.

Es gibt eine wichtige Funktion, die darin besteht, dass ein Benutzerkonto auf der allgemeinen Datenbankebene zu dem Zeitpunkt erstellt wird, zu dem er die erste eingehende Zahlung akzeptiert.

Es gibt einen völlig anderen Ansatz für die Erstellung eines intelligenten Vertragskontos. Zunächst schreibt einer der Benutzer den Quellcode des Smart Contract. Anschließend wird der Code durch einen speziellen Compiler für die Ethereum-Plattform geleitet und erhält Bytecode für die virtuelle Ethereum-Maschine. Der empfangene Bytecode wird in ein spezielles Transaktionsfeld gestellt. Es wird im Namen des Initiatorkontos authentifiziert. Darüber hinaus ist diese Transaktion über das Netzwerk verteilt und hostet den Smart Contract Code. Die Provision für die Transaktion und dementsprechend für die Ausführung des Vertrages wird vom Kontostand des Initiators abgezogen.

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

Ethereum-Transaktionsstruktur


Um dies klarer zu machen, werden wir beginnen, die Struktur der Ethereum-Transaktion und den Beispiel-Smart-Vertragscode zu überprüfen.

Bild

Eine Ethereum-Transaktion besteht aus mehreren Feldern. Die erste dieser Nonce ist eine bestimmte Transaktionsnummer in Bezug auf das Konto selbst, die es verteilt und dessen Autor ist. Dies ist erforderlich, um das Doppelte von Transaktionen zu unterscheiden, dh um den Fall auszuschließen, dass dieselbe Transaktion zweimal akzeptiert wird. Durch die Verwendung eines Bezeichners hat jede Transaktion einen eindeutigen Hashwert.

Darauf folgt ein Feld wie der Gaspreis . Dies ist der Preis, zu dem die Basiswährung von Ethereum in Gas umgerechnet wird, der für die Ausführung des Smart-Vertrags und die Zuweisung der Ressource der virtuellen Maschine bezahlt wird. Was bedeutet das?

In Bitcoin werden Provisionen direkt von der Basiswährung - Bitcoin selbst - bezahlt. Dies ist dank eines einfachen Mechanismus zur Berechnung möglich: Wir zahlen streng die Datenmenge, die in der Transaktion enthalten ist. In Ethereum ist die Situation komplizierter, da es sehr schwierig ist, von der Menge der Transaktionsdaten auszugehen. Hier kann die Transaktion noch Programmcode enthalten, der auf der virtuellen Maschine ausgeführt wird, und jede Operation der virtuellen Maschine kann eine andere Komplexität aufweisen. Es gibt auch Operationen, die Speicher für Variablen zuweisen. Sie haben ihre eigene Komplexität, von der die Zahlung für jede Operation abhängt.

Die Kosten für jede Operation in Gasäquivalenten sind konstant. Es wird speziell eingeführt, um die konstanten Kosten jeder Operation zu bestimmen. Abhängig von der Netzlast ändert sich der Gaspreis, dh der Koeffizient, nach dem die Basiswährung zur Zahlung der Provision in diese Hilfseinheit umgerechnet wird.

Es gibt noch eine weitere Funktion der Transaktion in Ethereum: Der Bytecode, den sie zur Ausführung in der virtuellen Maschine enthält, wird ausgeführt, bis sie mit einem bestimmten Ergebnis endet (Erfolg-Fehler) oder bis eine bestimmte Anzahl von Münzen zugewiesen ist eine Provision zahlen. Um die Situation zu vermeiden, dass im Falle eines Fehlers alle Münzen auf Provision vom Konto des Absenders ausgegeben wurden (zum Beispiel wurde in der virtuellen Maschine eine Art ewiger Zyklus gestartet), existiert das folgende Feld - Startgas (es wird oft als Gaslimit bezeichnet) - es definiert Die maximale Anzahl von Münzen, die der Absender bereit ist, für eine bestimmte Transaktion auszugeben.

Das nächste Feld heißt Zieladresse. Dies schließt die Adresse des Empfängers von Münzen oder die Adresse eines bestimmten Smart-Vertrags ein, dessen Methoden aufgerufen werden. Danach folgt das Wertefeld , in das die Anzahl der Münzen eingegeben wird, die an die Zieladresse gesendet werden.

Als nächstes folgt ein interessantes Feld namens Daten , das zur gesamten Struktur passt. Dies ist kein separates Feld, sondern die gesamte Struktur, in der der Code für die virtuelle Maschine definiert ist. Hier können Sie beliebige Daten einfügen - hierfür gibt es separate Regeln.

Und das letzte Feld heißt Signatur. 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. Über den öffentlichen Schlüssel können Sie die Absenderkonto-ID für diese Transaktion abrufen, dh das Absenderkonto im System selbst eindeutig identifizieren. Durch die Struktur der Transaktion haben wir die Hauptsache herausgefunden.

Beispiel für einen Smart Contract Code für Solidität


Schauen wir uns nun anhand eines Beispiels den einfachsten intelligenten Vertrag 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 finden Sie einen vereinfachten Quellcode, der Benutzermünzen enthalten 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, dh 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 von Münzen zwischen ihnen; Es gibt verschiedene Methoden zum Verwalten von Guthaben, dh 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 enthält konstante Felder. Einer von ihnen mit dem Adresstyp heißt Eigentümer. Hier merkt sich der Vertrag die Adresse des Benutzers, der diesen intelligenten Vertrag erstellt hat. Ferner gibt es eine dynamische Struktur, die die Entsprechung zwischen Benutzeradressen und Salden beibehält.

Danach folgt die Bankmethode - sie wird als Vertrag bezeichnet. Dementsprechend ist dies sein Konstruktor. Hier wird der Eigentümervariablen die Adresse der Person zugewiesen, die diesen Smart-Vertrag im Netzwerk veröffentlicht 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, die den gesamten Code für diesen Vertrag enthält, an die virtuelle Maschine übertragen wurden. Dementsprechend ist msg.sender der Autor dieser Transaktion, die diesen Code hostet. Er wird der Eigentümer des Smart-Vertrags sein.

Mit der Einzahlungsmethode kann eine Transaktion eine bestimmte Anzahl von Münzen auf ein Vertragskonto überweisen. In diesem Fall belässt der intelligente Vertrag, der diese Münzen erhält, sie in seiner Bilanz, schreibt jedoch an die Bilanzstruktur, wer genau der Absender dieser Münzen war, um zu wissen, wem sie gehören.

Die nächste Methode heißt Abheben und erfordert einen Parameter - die Anzahl der Münzen, die jemand von dieser Bank abheben möchte. Hier wird überprüft, ob auf dem Guthaben des Benutzers, der diese Methode aufruft, genügend Münzen vorhanden sind, um sie zu senden. Wenn es genug davon gibt, gibt der Smart-Vertrag selbst diese Menge an Münzen an den Anrufer zurück.

Als nächstes wird die Methode zum Überprüfen des aktuellen Kontostands des Benutzers beschrieben. Wer diese Methode aufruft, wird verwendet, um dieses Guthaben im Smart-Vertrag zu erhalten. Es ist erwähnenswert, dass der Modifikator dieser Methode view ist. Dies bedeutet, dass die Methode selbst die Variablen ihrer Klasse in keiner Weise ändert und tatsächlich nur eine Lesemethode ist. Es wird keine separate Transaktion zum Aufrufen dieser Methode erstellt, es wird keine Provision gezahlt, und alle Berechnungen werden lokal durchgeführt. Danach erhält der Benutzer das Ergebnis.

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

Wie funktioniert ein vollständiger Ethereum-Netzwerkknoten?


Lassen Sie uns einen schematischen Blick darauf werfen, wie diese intelligenten Verträge auf der Ethereum-Plattform ausgeführt werden und wie ein vollständiger Netzwerkknoten funktioniert.

Bild

Ein vollständiger Ethereum-Netzwerkknoten 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, bei dem Blöcke, Transaktionen und Informationen über andere Knoten ausgetauscht werden. Dies ist eine traditionelle Komponente für alle dezentralen Kryptowährungen.

Außerdem haben wir ein Modul zum Speichern von Blockchain-Daten, Verarbeiten, Auswählen eines Prioritätszweigs, Ergänzen von Blöcken, Entkoppeln von Blöcken, Überprüfen dieser Blöcke usw.

Das dritte Modul heißt EVM (Ethereum Virtual Machine) - dies ist die virtuelle Maschine, die Bytecode aus der Ethereum-Transaktion akzeptiert. Dieses Modul nimmt den aktuellen Status eines bestimmten Kontos auf und ändert seinen Status basierend auf dem empfangenen Bytecode. Die Version der virtuellen Maschine auf jedem der Netzwerkknoten muss identisch sein. Die Berechnungen auf jedem der Ethereum-Knoten sind genau gleich, erfolgen jedoch in einer asynchronen Reihenfolge: Jemand überprüft und akzeptiert diese Transaktion früher, dh er führt den gesamten darin enthaltenen Code aus und später jemand. Dementsprechend wird beim Erstellen einer Transaktion diese an das Netzwerk verteilt, die Knoten akzeptieren sie und zum Zeitpunkt der Überprüfung wird genau wie bei der Ausführung von Bitcoin Script in Bitcoin der Bytecode der virtuellen Maschine hier ausgeführt.

Eine Transaktion gilt als überprüft, wenn der gesamte darin enthaltene Code ausgeführt wurde, ein neuer Status für ein bestimmtes Konto generiert und gespeichert wurde, bis klar war, ob diese Transaktion angewendet wurde oder nicht. Wenn die Transaktion angewendet wird, gilt dieser Status nicht nur als abgeschlossen, sondern bereits als relevant. Es gibt eine Datenbank, in der der Status jedes Kontos für jeden Host gespeichert ist. Aufgrund der Tatsache, dass alle Berechnungen auf dieselbe Weise ablaufen und der Status der Blockchain derselbe ist, ist die Datenbank mit dem Status aller Konten auch für jeden Knoten gleich.

Mythen und Grenzen intelligenter Verträge


Zu den Einschränkungen, die für Ethereum-ähnliche Smart Contract-Plattformen bestehen, kann Folgendes angeführt werden:

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

Schauen wir uns die Einschränkungen an, die einer virtuellen Maschine auferlegt werden, und zerstreuen dementsprechend einige Mythen über intelligente Verträge. 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, dh Code schreiben, und dieser wird dort ausgeführt. Sie können zusätzlich Speicher zuweisen. Die Provision wird jedoch für jede Operation und für jede zusätzlich zugewiesene Speichereinheit separat gezahlt.

Ferner 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 Logik intelligenter Verträge zu verwenden. Eine virtuelle Maschine kann Transaktionen erstellen und senden, neue Verträge erstellen und Methoden anderer intelligenter Verträge aufrufen, die bereits im Netzwerk veröffentlicht wurden: vorhanden, verfügbar usw.

Der häufigste Mythos ist, dass intelligente Verträge von Ethereum Informationen aus beliebigen Internetressourcen unter ihren eigenen Bedingungen verwenden können. Die Wahrheit ist, dass die virtuelle Maschine keine Netzwerkanforderung an eine externe Informationsquelle im Internet senden kann. Das heißt, es ist unmöglich, einen solchen intelligenten Vertrag zu schreiben, der den Wert zwischen den Benutzern verteilt, je nachdem, wie das Wetter auf der Straße ist, oder Wer hat in einer Meisterschaft gewonnen oder basierend auf einem anderen Vorfall in der Außenwelt, weil Informationen über diese Vorfälle einfach nicht in der Datenbank der Plattform selbst enthalten sind. Das heißt, es gibt nichts in der Blockchain darüber. Wenn es dort nicht angezeigt wird, kann die virtuelle Maschine diese Daten nicht als Auslöser verwenden.

Ethereum Nachteile


Lassen Sie uns die wichtigsten auflisten. Der erste Nachteil besteht darin, dass es beim Entwerfen, Entwickeln und Testen intelligenter Verträge in Ethereum einige Schwierigkeiten gibt (Ethereum verwendet die Solidity-Sprache zum Schreiben intelligenter Verträge). In der Tat zeigt die Praxis, dass ein sehr großer Prozentsatz aller Fehler zum menschlichen Faktor gehört. Dies gilt tatsächlich für bereits geschriebene Ethereum-Smart-Verträge mit einer Komplexität von mittel oder höher. Wenn bei einfachen intelligenten Verträgen die Fehlerwahrscheinlichkeit gering ist, treten bei komplexen intelligenten Verträgen sehr häufig Fehler auf, die zum Diebstahl von Geldern, zu deren Einfrieren, zur Zerstörung intelligenter Verträge auf unerwartete Weise usw. führen. Viele solcher Fälle sind bereits bekannt.

Der zweite Nachteil ist, dass die virtuelle Maschine selbst nicht perfekt ist, da sie auch von Menschen geschrieben wird. Es kann beliebige Befehle ausführen, und dies ist eine Sicherheitsanfälligkeit: Eine Reihe von Befehlen kann auf eine bestimmte Weise konfiguriert werden, was zu unvorhergesehenen Konsequenzen führt. Dies ist ein sehr komplexer Bereich, aber es gibt bereits mehrere Studien, die zeigen, dass diese Sicherheitslücken in der aktuellen Version des Ethereum-Netzwerks bestehen und zum Scheitern vieler intelligenter Verträge führen können.

Eine weitere große Schwierigkeit kann als Nachteil angesehen werden. Es besteht in der Tatsache, dass es auf praktische oder technische Weise möglich ist, zu dem Schluss zu kommen, dass Sie, wenn Sie den Bytecode des Vertrags kompilieren, der auf der virtuellen Maschine ausgeführt wird, eine bestimmte Reihenfolge von Operationen bestimmen können. Wenn diese Vorgänge zusammen ausgeführt werden, wird die virtuelle Maschine sehr stark belastet und überproportional zu der Provision verlangsamt, die für diese Vorgänge gezahlt wurde.

In der Vergangenheit gab es bereits eine solche Phase der Ethereum-Entwicklung, in der viele Leute, die den Betrieb der virtuellen Maschine im Detail verstanden hatten, solche Schwachstellen fanden. Tatsächlich zahlten Transaktionen eine sehr kleine Provision, verlangsamten jedoch praktisch das gesamte Netzwerk. Diese Probleme sind sehr schwer zu lösen, da Sie sie ermitteln müssen, zweitens den Preis für die Durchführung dieser Vorgänge anpassen und drittens eine harte Verzweigung durchführen müssen, dh alle Netzwerkknoten auf eine neue Version der Software aktualisieren und dann gleichzeitige Aktivierung dieser Änderungen.

In Bezug auf Ethereum wurde viel geforscht, es wurden viele praktische Erfahrungen gesammelt: sowohl positive als auch negative, aber es gibt immer noch Schwierigkeiten und Schwachstellen, die irgendwie noch bekämpft werden müssen.

Wenn der thematische Teil des Artikels abgeschlossen ist, wenden wir uns den häufig auftretenden Fragen zu.

Häufig gestellte Fragen


- Wenn alle Parteien des aktuellen Smart-Vertrags die Bedingungen ändern möchten, können sie diesen Smart-Vertrag mit Mehrfachsignatur kündigen und dann einen neuen Smart-Vertrag mit aktualisierten Bedingungen für seine Implementierung erstellen?

Hier wird die Antwort zweifach sein. Warum? Da ein intelligenter Vertrag einerseits einmal festgelegt wird und keine Änderungen impliziert, kann er andererseits eine vordefinierte Logik haben, die unter bestimmten Bedingungen eine vollständige oder teilweise Änderung vorsieht. Das heißt, wenn Sie etwas in Ihrem Smart-Vertrag ändern möchten, müssen Sie die Bedingungen festlegen, unter denen Sie diese Bedingungen aktualisieren können. Dementsprechend kann eine Vertragsverlängerung nur so umsichtig organisiert werden. Aber auch hier kann es zu Problemen kommen: Machen Sie einen Fehler und erhalten Sie die entsprechende Sicherheitslücke. Daher müssen solche Dinge sehr detailliert und gründlich entworfen und getestet werden.

- Und wenn der Mediator eine Verschwörung mit einer der beteiligten Parteien eingeht: Treuhandkonto oder ein kluger Vertrag? Ist in einem intelligenten Vertrag ein Mediator erforderlich?

Ein Mediator ist in einem intelligenten Vertrag nicht erforderlich. Es kann nicht sein. Wenn der Mediator im Falle eines Treuhandvertrags eine Verschwörung von einer der Parteien eingeht, dann verliert dieses System seinen gesamten Wert. Daher werden Mediatoren so ausgewählt, dass ihnen alle an diesem Prozess beteiligten Parteien gleichzeitig vertrauen. Dementsprechend übertragen Sie einfach keine Münzen an eine Multisignaturadresse mit dem Mediator, dem Sie nicht vertrauen.

- Ist es möglich, viele verschiedene Token von einer Adresse an verschiedene Zieladressen zu übertragen, z. B. Austauschadressen, bei denen diese Token in einer Ethereum-Transaktion gehandelt werden?

Dies ist eine gute Frage und betrifft das Ethereum-Transaktionsmodell und seine Unterschiede zum Bitcoin-Modell. Und der Unterschied ist dramatisch. Wenn Sie im Ethereum-Transaktionsmodell einfach Münzen übertragen, werden diese nur von einer Adresse an eine andere übertragen, ohne dass sich der von Ihnen angegebene Betrag ändert. Mit anderen Worten, dies ist kein Modell für nicht ausgegebene Ausgaben (UTXO), sondern ein Modell für Konten und entsprechende Salden. Es ist theoretisch möglich, mit einer Transaktion mehrere verschiedene Token gleichzeitig zu senden, wenn Sie einen kniffligen Smart-Vertrag schreiben, aber dennoch viele Transaktionen durchführen, einen Vertrag erstellen, dann Token und Münzen darauf übertragen und dann die entsprechende Methode aufrufen müssen. Dies erfordert Aufwand und Zeit, in der Praxis funktioniert dies nicht 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 dann?

Die Lösung besteht darin, dass der intelligente Vertrag selbst ein oder mehrere sogenannte vertrauenswürdige Orakel enthalten kann, die Daten über den Stand der Dinge in der Außenwelt sammeln und diese über spezielle Methoden auf intelligente Verträge übertragen. Der Vertrag selbst betrachtet die Daten, die er von vertrauenswürdigen Parteien erhalten hat, als wahr. Für eine höhere Zuverlässigkeit wählen sie einfach eine große Gruppe von Orakeln aus und minimieren das Risiko von Absprachen. Der Vertrag selbst berücksichtigt möglicherweise keine Daten von Orakeln, die der Mehrheit widersprechen.

Dieses Thema wird in einer der Vorlesungen des Online-Blockchain-Kurses „ Einführung in intelligente Verträge “ behandelt.

Source: https://habr.com/ru/post/de413231/


All Articles