Wie stellt die EVM perfekten Determinismus sicher und was bedeutet das?

Ich habe gelesen, was der Grund war, das EVM zu erfinden? aber ich habe das Gefühl, dass es die Frage nicht vollständig beantwortet hat.

Daher habe ich noch ein paar Fragen zum EVM:

Warum gewährleistet die EVM perfekten Determinismus (für Konsens)? Und warum ist das wichtig? Das gemachte Beispiel war Endlosschleifenwiderstand, aber das ist der einzige Grund für "perfekten Determinismus" (was auch immer das bedeutet).

Warum nicht eine abgeschwächte Version einer bereits vorhandenen VM wie JVM verwenden? (und afaik gibt es Open-Source-Alternativen, so dass Sie keine Lizenz von Sun benötigen)

Ich verstehe nicht wirklich, warum die Entwickler eine EVM von Grund auf neu bauen mussten, das klingt zu kompliziert.

Beachten Sie, dass sogar Dinge, die harmlos erscheinen, Nichtdeterminismus einführen können. Fließkomma-Arithmetik zum Beispiel

Antworten (2)

Aus mehreren Gründen ist es viel besser, speziell für diese Aufgabe eine neue virtuelle Maschine zu schreiben:

Determinismus

Ethereum ist, wie alle Blockchains, ein vertrauenswürdiges und dezentrales Netzwerk. Jeder Knoten im Netzwerk muss in der Lage sein, alle Transaktionen und deren Codeausführung selbst zu validieren. Sie müssen dies tun, um nach jeder Transaktion festzustellen, wie viel Ether jede Adresse besitzt, und um zu entscheiden, ob eine Transaktion an andere Knoten weitergeleitet werden soll oder nicht. Um dies zu erreichen, müssen alle Nodes miteinander vereinbaren, was der genaue Ausführungsablauf einer Vertragsausführung war und wie der Zustand der Blockchain ist.

In der JVM können Sie beispielsweise eine Zufallszahl anfordern, eine Datei lesen oder Daten aus dem Internet laden. Diese Operationen können völlig unterschiedliche Ergebnisse zurückgeben, je nachdem, welcher Computer sie ausführt. Sie sind daher nicht deterministisch. Die JVM wurde nicht im Hinblick auf Determinismus entwickelt. Die meisten vorhandenen virtuellen Maschinen garantieren keinen Determinismus.

Es ist weniger Arbeit, eine neue virtuelle Maschine von Grund auf neu zu schreiben, als eine vorhandene virtuelle Maschine so zu modifizieren, dass sie den strengen und präzisen Anforderungen von Ethereum entspricht.

Ausführungsgeschwindigkeit

Wie bereits erwähnt, ist so etwas wie die JVM mit vielen Funktionen ausgestattet, die im Fall von Ethereum nicht wirklich nützlich sind. Dies kann nur dazu dienen, die Ausführung von Smart Contracts zu verlangsamen. Die Ausführungsgeschwindigkeit von Smart Contracts ist entscheidend, um die Nutzung des Netzwerks erschwinglich zu machen. Wenn ein Kontrakt doppelt so langsam ausgeführt wird, würde seine Nutzung das Doppelte der Transaktionsgebühren kosten.

Sicherheit

Die virtuelle Maschine von Ethereum benötigt auf ganz bestimmte Weise perfekte Sicherheit. Beispielsweise sollte ein Vertrag nicht in der Lage sein, den Status eines anderen Vertrags zu ändern. Die Verwendung einer vorhandenen virtuellen Maschine wäre zweifelhaft, da sie nicht unter Berücksichtigung der speziellen Anforderungen von Ethereum geschrieben wurden.

Ausführungsaufwand messen

In einem System wie Ethereum möchte man kleine Transaktionen, die nur sehr wenige CPU-Zyklen benötigen, um geringe Transaktionsgebühren zu haben. Große Transaktionen, die viel Rechenleistung erfordern, sollten proportional mehr kosten. Um dies zu erreichen, müssen Sie messen, wie viel Aufwand es gekostet hat, einen Vertragscode auszuführen. Sie können nicht nur Zeit oder CPU-Zyklen messen, da diese implementierungs- und maschinenabhängig sind. Wir möchten, dass sich alle Knoten im Netzwerk genau darauf einigen, wie viel Aufwand es gekostet hat.

Daher verwendet Ethereum die Einheit gas, um den Aufwand zu messen, der für die Ausführung einer Transaktion erforderlich war. Jeder Opcode in der EVM benötigt eine bestimmte allgemein vereinbarte Menge an gas.

Dieses dynamische Transaktionsgebührensystem bietet Sendern von Transaktionen und Verfassern von Verträgen den notwendigen wirtschaftlichen Anreiz, den Verbrauch von Speicherplatz und CPU-Zeit auf allen Knoten zu reduzieren.

So gut wie keine existierenden virtuellen Maschinen verfügen über einen solchen Zähler.

Binäre Größe

Weniger Opcodes (nur die für diesen speziellen Zweck benötigten) bedeutet, dass Programme dichter gepackt werden können. Dies reduziert die Größe der Blockchain und die Transaktionsgebühren.

Ich hoffe das hilft :-)

Was wäre, wenn sie sich nicht auf den genauen Aufwand einigen würden, sondern auf den endgültigen Ausgabezustand? Ist es nicht machbar, weil einige Miner möglicherweise länger zum Berechnen brauchen als andere, wenn sie eine VM wie die JVM verwenden, und es nicht als "fair" angesehen würde?
@MiguelMota Die Transaktionsgebühren basieren genau darauf, wie viel Aufwand es gekostet hat, und die Transaktionsgebühren sind Teil des endgültigen Ausgabezustands. Wie viel Aufwand es gekostet hat, ist also auch Teil des Endzustands. Sie können die beiden unter dem Transaktionsgebührensystem von Ethereum nicht trennen. Natürlich steht es den Knoten frei, ihre eigene Implementierung des EVM zu schreiben und unterschiedliche Hardware zu verwenden, sodass ein Knoten physisch immer noch länger dauern kann als ein anderer Knoten. Der springende Punkt ist, zumindest einen deterministischen Mechanismus zu haben, um den Aufwand zu messen, der zur Ausführung einer Transaktion erforderlich ist.

Ethereum spricht vom First-Class-Citizen-Eigentum , bei dem Verträge alles tun können, was externe Akteure können, dazu gehört auch, andere Verträge zur Durchführung von Aktionen aufzurufen. Dies legt das potenzielle Problem der unendlichen Rekursion offen. Ein böswilliger Akteur könnte Vertragscode so schreiben, dass Knoten im Netzwerk in eine Endlosschleife geraten und anhalten .

Es wurden Entwurfsentscheidungen getroffen, um das Auftreten dieser Ereignisse zu verhindern. Es waren diese Designentscheidungen, die es dem EVM ermöglichten, Turing-vollständig zu sein. Die Anzahl der Rechenschritte, die Transaktionen/Nachrichten ausführen können, unterliegt einer inhärenten Einschränkung. Warum also nicht trotzdem den zusätzlichen Vorteil der Turing-Vollständigkeit bieten?

Aus diesen Gründen wird Ethereum wegen der garantierten Endgültigkeit aller Ausführungen oft als Quasi-Turing-vollständig bezeichnet.

Unter anderem war eine neue VM (in anderen Antworten erwähnt) erforderlich, um dieses neue Paradigma der redundanten Berechnung zu berücksichtigen.

Hoffe das hilft.