Konsens-Level-Illusion

Ethereum ist eine dezentrale Plattform, die als Grundlage für intelligente Verträge dient - Anwendungen, die genau nach ihrem Programmcode funktionieren, ohne die geringste Wahrscheinlichkeit von Ausfallzeiten, Zensur, Eingriffen von Betrügern oder Agenten Dritter.
- Ethereum.org



Wir Entwickler glauben gerne an ein Konsensniveau, das sich der Lösung aller komplexen Probleme verteilter Systeme verschrieben hat und es uns ermöglicht, Anwendungen zu schreiben. Bergleute leben auf Konsensniveau und erledigen ihre Bergarbeiterangelegenheiten. Entwickler sitzen auf Anwendungsebene und schreiben intelligente Verträge - Programme, die in der Ethereum Virtual Machine (EVM) funktionieren. Unsere dezentralen Anwendungen interagieren mit dem Computer und verlassen sich auf dessen Integrität und Sicherheit.

Wir wissen, dass EVM im Konsens funktioniert, und wir müssen nicht über diesen Mechanismus nachdenken, solange er funktioniert. Wir denken nicht an Bergleute, weil es letztendlich nicht notwendig ist, das Funktionsprinzip von Halbleitern oder die Konstruktionsmerkmale von Mikrochips moderner Computer zu verstehen. Leider ist diese bequeme und vorhersehbare Trennung zwischen den Ebenen nichts weiter als eine Illusion. Die Illusion auf Konsensebene, die uns vergisst, dass Bergleute nicht unsere Freunde sind.

In der Praxis ist der Übergang von Verträgen zu Konsens ein viel weniger reibungsloses Phänomen und nicht so einfach, wie allgemein angenommen wird. Die Erstellung von Blöcken wirkt sich auf den Status von EVM aus, was sich wiederum auf die Herausforderungen intelligenter Verträge und damit auf den Betrieb dezentraler Anwendungen und ihrer Benutzer auswirkt. Je langsamer die Blöcke sind, desto langsamer sind die dezentralen Anwendungen. Je schneller die Blöcke, desto schneller die Anwendungen. Leere Blöcke führen dazu, dass Anwendungen nicht mehr funktionieren.

Von Zeit zu Zeit stört ein Konsensniveau versehentlich dezentrale Anwendungen. Es kann jedoch Fälle geben, in denen Vertreter dieser Ebene absichtlich eingreifen. Bergleute kontrollieren das Konsensniveau. Sie arbeiten für Geld und behalten daher das Anwendungsniveau nur so lange bei, wie es ihnen Gewinn bringt. Wenn sie durch Eingriffe in die Anwendungsebene mehr Geld verdienen können, werden sie irgendwann damit beginnen.

Bergarbeiter Laufband


Bergleute sind nicht deine Freunde. Allerdings keine Feinde. Sie wollen dir nichts anhaben, sie können es einfach nicht vermeiden. Dies sind die Anforderungen von Proof-of-Work. Bergleute müssen sich einem harten Wettbewerb stellen, um das Recht zu erhalten, eine sehr kleine Marge zu erhalten. Sie sitzen auf dem Laufband der Bergleute fest, wo der schnellste der Läufer das Tempo vorgibt.



Immer wenn es ihnen gelingt, einen anderen Weg zu finden, um die Kosten für die Berechnung von Hashes zu beschleunigen oder zu senken, steigt die Komplexität. Mit seinem Wachstum gewinnt jeder einzelne Hash für mich zunehmend an Bedeutung. Ihre Hash-Rate bleibt möglicherweise unverändert, aber Sie erhalten allmählich immer weniger. In dieser Hinsicht zwingt Proof-of-Work Bergleute, Gewinne ständig wieder anzulegen. Sie erzielen nur durch konstante Ausgaben, Optimierung und Aufrechterhaltung der Wettbewerbsfähigkeit Gewinne. Diejenigen von ihnen, die nicht antreten können , verlassen das Rennen .



Wenn Ihre Marge 1% beträgt, raubt Ihnen ein Rückgang des Einkommens um 1% den Gewinn. Wenn die Hashrate des Bergmanns mindestens geringfügig unter der aktuellen Norm liegt, bleibt sie hinter den anderen Kollegen zurück. Andererseits führt eine Einkommenssteigerung von 1% zu einer Verdoppelung des Gewinns. Selbst eine kleine Effizienzspanne ermöglicht es dem Bergmann, viel mehr Geld für die Reinvestition in Ausrüstung zu erhalten. Und die Trennung solcher Teilnehmer nimmt immer mehr zu, wodurch sich weniger erfolgreiche Wettbewerber ihnen nicht mehr widersetzen können. Proof-of-Work veranlasst Bergleute, nach kleinen Vorteilen zu suchen, alle Aspekte des Prozesses zu verbessern und damit Konkurrenten vom Laufband zu werfen.

Es gibt zwei Möglichkeiten, die Rentabilität des Bergbaus zu verbessern: die Rentabilität zu steigern oder die Kosten zu senken. Der Gewinn setzt sich aus Belohnungen für genehmigte Blöcke und Provisionen für darin enthaltene Transaktionen zusammen. Kosten entstehen durch die Notwendigkeit, Strom, Ausrüstung, Gehälter der Mitarbeiter, Büromiete und dergleichen zu bezahlen.



Bergleute konkurrieren derzeit aufgrund sehr offensichtlicher wesentlicher Verbesserungen, wie der Suche nach niedrigeren Stromtarifen oder der Verbesserung der Ausrüstung. Leider führt dieser Ansatz in Zukunft zu einem immer stärkeren Gewinnrückgang. Für Unternehmen wird es immer schwieriger, günstigeren Strom zu finden. Das Mining mit Hilfe von Grafikkarten beruht auf der Begrenzung der Speicherbandbreite, und die ASICs sind wiederum durch die minimale physikalische Größe der in ihren Mikroschaltungen verwendeten Transistoren begrenzt. Jetzt bleiben alle diese Entwicklungspfade immer noch relevant, aber irgendwann wird ihr Potenzial ausgeschöpft sein und die Bergleute werden gezwungen sein, nach weniger offensichtlichen , komplexeren Optimierungsoptionen zu suchen.

Es gibt einige sehr effektive und nicht offensichtliche Wege. Leider sind sie für andere Benutzer des Systems schädlich. Ich möchte mich auf die Möglichkeiten konzentrieren, wie Bergleute Gewinne steigern und Kosten senken können, indem sie Geld von Menschen und Systemen nehmen, die auf die Arbeit von Blockchains angewiesen sind. Versuchen Sie beim Lesen dieses Materials nicht zu vergessen, dass die Bergleute Ihr Geld nicht nehmen wollen, sondern es tun müssen. Der Nachweis der Arbeit erfordert eine Steigerung der Wettbewerbsfähigkeit.

Wie Bergleute eingreifen können


Bergleute haben viele Möglichkeiten, den Betrieb von EVM und die darin ausgeführten Anwendungen zu stören. Da jeder Miner die von ihm generierten Blöcke steuern kann, kann er auch die Statusänderungen in diesem Block steuern. Lassen Sie uns einige der einfachsten Methoden durchgehen, ohne zu tief in die Details zu gehen. Für jeden von ihnen werden wir versuchen, eine Interventionsstrategie zu bestimmen, wer leiden wird und wie Bergleute damit Geld verdienen können.

Transaktionen neu anordnen

Transaktionen werden in Blöcken verarbeitet. Jeder Block hat eine kanonische Reihenfolge für die Verarbeitung von Transaktionsstatusänderungen. Bergleute wenden jede Transaktion der Reihe nach auf den EVM-Status an und bestimmen den Root-Hash des endgültigen Status im Blockheader. Der Miner, der den Block generiert, hat die Kontrolle über die Reihenfolge der Transaktionen in den Blöcken. Die Möglichkeit, die Reihenfolge der Transaktionen in einem Block zu steuern, ermöglicht es Ihnen, die Reihenfolge der Statusänderungen zu steuern.



Angenommen, ich möchte Zahlungen an einen Freund senden. Ich werde einen einfachen Vertrag mit drei Funktionen erstellen: deposit , unlock und retrieve . Der deposit überträgt Geld auf das Lager. Wann immer ich ihm Geld schicken möchte, unlock 5 ich unlock 5 Ether frei. Mein Freund ruft die retrieve , die ihm alle Gelder sendet, die nicht mit deposit blockiert sind. Wenn der Miner sieht unlock Transaktionen in einem Block unlock und retrieve werden, kann er sie austauschen und das retrieve wird früher aufgerufen. Wenn Sie retrieve anrufen, erhalten Sie alle kostenlosen, nicht in Speichermitteln. Danach wird unlock aufgerufen. Infolgedessen wird mein Freund gezwungen sein, die Abruftransaktion erneut zu senden, nachdem er die Provision dafür erneut bezahlt hat.



Durch die Änderung der Reihenfolge der Exportverträge können Bergleute die Ergebnisse der Vertragsabwicklung beeinflussen. Dies bedeutet, dass sie innerhalb bestimmter Grenzen den Status des EVM überwachen können. Die Situation wird besonders durch große öffentliche Aufträge verschärft, die die Interaktion zwischen einer großen Anzahl von Benutzern regeln. Je größer der Transaktionspool ist, der dem Bergmann zur Verfügung steht, desto mehr Kontrolle hat er über den Endzustand.

Vertragsentwickler sollten solche Versuche vorsehen, die Reihenfolge der Transaktionen in Blöcken willkürlich zu ändern. Andernfalls können Bergleute die Zahlung zusätzlicher Provisionen provozieren oder anderen Anwendungsbenutzern anderen unbeabsichtigten Schaden zufügen.

Einfügen von Transaktionen


Bei der Bildung der Reihenfolge von Transaktionen in einem Block sind Bergleute nicht nur auf die Möglichkeit beschränkt, die Transaktionen anderer Personen zu manipulieren. Sie können ihre eigenen Transaktionen erstellen. Sie haben eine ETH. Und wie wir alle können sie mit ihm im Blockchain Casino spielen und es auf den Blockchain-Märkten kaufen oder verkaufen. Die Möglichkeit, die Verarbeitungsreihenfolge von Transaktionen in einigen Fällen zu bestimmen, kann es ihnen jedoch ermöglichen, die ersten in der Verarbeitungswarteschlange zu werden.

Lassen Sie uns einen weiteren einfachen intelligenten Vertrag ausarbeiten. Dieses Mal möchte Alice ein Ratespiel spielen. Sie setzt 5 Ether in einen Vertrag ein. Dieser Betrag wird an die Person gesendet, die die Nummer nennt, die der erratenen Nummer am nächsten kommt. Alice ruft commit mit einem Hash der Nummer auf und garantiert so dessen Unveränderlichkeit. Jeder kann guess und am Raten teilnehmen. Nach 2 Blöcken reveal Alice Anrufe reveal um alle wissen zu lassen, welche Nummer erfunden wurde.



Alice kann nicht schummeln, da dies im Vertrag vorgesehen ist. Aber der Bergmann hat eine solche Gelegenheit. Er kann warten und seine Nummer anrufen, nachdem er den Enthüllungsruf gesehen hat. Er wird das Ergebnis noch vor der Bildung des Blocks kennen! Selbst wenn David auch 4 ruft, kann der Bergmann die Reihenfolge ändern und ihn damit schlagen.

Wenn ein regulärer Benutzer eine Transaktion erstellt, sendet er sie zur Aufnahme in den Block an die Bergleute. Der Benutzer muss der Transaktion irreversibel zustimmen, bevor er das Ergebnis ihrer Ausführung sieht. Im Gegensatz dazu können Bergleute beim Erstellen eines Blocks warten und erst dann entscheiden, ob sie eine bestimmte Transaktion aufnehmen sollen. Dies bedeutet, dass sie Zugriff auf mehr Informationen als normale Benutzer haben und die Möglichkeit haben, die Reihenfolge der Transaktionen zu ändern. Dies gibt ihnen einen ernsthaften Vorteil in jedem Blockchain-basierten System.

Immer wenn Benutzer und Bergleute über einen intelligenten Vertrag in der Blockchain interagieren, besteht das Risiko, dass die Bergleute Transaktionen einfügen und ihre Reihenfolge zu ihrem eigenen Vorteil ändern. Dies bedeutet in der Regel, dass sie Geld erhalten, das sonst in die Tasche eines normalen Benutzers hätte fließen sollen. Intelligente Vertragsentwickler sollten ihre Systeme so gestalten, dass diese Ungleichheit behoben wird.

Erzwungene Fehler

Bergleute können Nachbestellungen und Beilagen nutzen, um in die Herausforderungen intelligenter Verträge einzugreifen. Manchmal können sie die Herausforderung sogar vollständig stören. Wir nennen solche Fälle erzwungene Fehler. Sie treten auf, wenn Bergleute den Status in einen unerwarteten Anruf ändern, wodurch er fehlschlägt. Sie können dies tun, indem Sie eine Transaktion einfügen, die sich auf den Status auswirkt.

Lassen Sie uns einen einfachen intelligenten Vertrag für den Markt erstellen. Ich exportiere sell , um einige Token zu einem bestimmten Preis zum Verkauf anzubieten. Jeder kann buy anrufen buy um einige meiner Token zu kaufen.



In dieser Situation kann der Bergmann Bobs eingehenden Anruf zum buy überprüfen und die Option seines Token-Kaufs in Betracht ziehen. Er kann genau so viel kaufen, wie Bob benötigt, um die Transaktion mit einem Fehler abzuschließen. Wenn Bob 2,5 GNT kaufen möchte, kann der Bergmann diesen Mangel erreichen. Bobs Transaktion endet irrtümlich, aber der Bergmann erhält eine Provision dafür. So wird Bob entgegen seinem Willen den Kauf von GNT-Token durch den Bergmann bezahlen, ohne etwas dafür zu erhalten.

Dieser Angriff ist in älteren Versionen von Solidity besonders gefährlich. Alte Versionen der Schlüsselwörter assert und throw übertragen das gesamte angehängte Gas an den Bergmann, was dazu führt, dass dieser wegen fehlender Arbeit sehr hohe Provisionen erhält. Die neueren Schlüsselwörter require und beschränken die Verwendung von Gas auf der Grundlage der tatsächlich geleisteten Arbeit.

Durch erzwungene Fehler können Bergleute Provisionen erhalten, wenn sie sich weigern, Arbeiten auszuführen. Wenn die Transaktion mit Fehlern endet, kehrt der Status in seinen ursprünglichen Status zurück. Wenn der Bergmann einen zuverlässigen Weg findet, um fehlerhafte Anrufe zu provozieren, muss er nicht einmal Statusänderungen verarbeiten. Der ideale Block gemäß der Version des Bergmanns ist ein Block, der durch einen Fehler bei fehlerhaften Transaktionen und Zahlungen mit einer Übertragung der Provision für deren Verarbeitung ohne weitere Statusänderungen blockiert wird.

Intelligente Vertragsentwickler können dieses Verhalten teilweise verhindern, indem sie ihre revert sorgfältig prüfen und Ausdrücke require . Wenn es den Bergleuten gelingt, den richtigen Weg zu finden, um den Vertrag in die Irre zu führen, können sie zusätzliche Provisionen von Ihren Benutzern sammeln. Regel Nummer eins in solchen Fällen: Wenn ein Anruf auf einem Status beruht, der von einem anderen Benutzer geändert werden kann, ist er anfällig für erzwungene Fehler.

Zensur

Bei der Entscheidung über die Reihenfolge der Transaktionen in einem Block können Bergleute bestimmte Transaktionen auch selektiv ignorieren. Sie können dies aus politischen oder finanziellen Gründen tun. Benutzer haben im Allgemeinen keine Garantie dafür, dass Bergleute jemals eine bestimmte Transaktion in einen Block aufnehmen.

Nehmen wir an, Alice möchte sich ein Sparschwein machen. Sie kann einen einfachen Vertrag abschließen, der es ihr ermöglicht, Geld frühestens in zehntausend Blöcken abzuheben. Alice ist eine gute Person und möchte daher sicherstellen, dass im Falle ihres plötzlichen Todes das Geld zumindest an eine andere Person gesendet wird. Deshalb stellt sie sicher, dass der Vertrag es Bergleuten erlaubt, nach 50.000 Blöcken Geld abzuheben.



Jeder einzelne Bergmann hat eine starke Motivation, seine Auszahlungstransaktion nicht in seine Blöcke aufzunehmen. Sie haben nichts zu verlieren: Wenn sie das Geld nie nehmen kann, können sie ihr Glück versuchen und es in Zukunft bekommen. Außerdem kann sie nur dann Geld abheben, wenn die Bergleute dies zulassen. Selbst wenn sie ihre Transaktionen nicht verschwören und ignorieren oder einen 51% igen Angriff durchführen, können sie sich dennoch weigern, ihre Transaktion gemeinsam zur Verarbeitung anzunehmen.

Dies bedeutet, dass es einfach keine Verträge gibt, die eine 100% pünktliche Lieferung einer Transaktion garantieren! Sie müssen Anwendungen im Hinblick auf die unvorhersehbare mögliche Zensur durch Bergleute entwerfen. Und da der Vertrag ihren Interventionswunsch nicht vorhersehen kann, sollte er mögliche willkürliche Zeitverzögerungen vorsehen.

Eskalation von Problemen


Je mehr Geld in das System fließt, desto wahrscheinlicher ist es, dass Bergleute auf die eine oder andere Weise in ihre Arbeit eingreifen möchten. Mit zunehmendem Austausch werden die Casinos komplexer und der Blockchain-Wert steigt, ebenso wie die Motivation der Bergleute, einzugreifen.

Konsens ist nicht nur die Ebene, auf der unsere dezentralen Anträge gehalten werden. Tatsächlich sind sie eng mit der Anwendungsschicht verflochten. Wenn wir Programme schreiben, denken wir nicht an die physikalischen Eigenschaften von Silizium, weil wir wissen, dass es nicht aktiv versuchen wird, unser Geld zu nehmen. Leider gibt es zwischen EVM und Silizium eine Schicht in Form von Bergleuten, und wenn ihnen nicht vertraut werden kann, kann EVM nicht vertraut werden.

Solidity-Entwickler müssen einen Computer programmieren, der gegen sie arbeitet. EVM als solches ist ein "byzantinisches System". Jeder Teil davon, der zu einem erfolglosen Ergebnis neigt, wird im schlimmsten Moment dazu kommen. Wir befinden uns noch in einem sehr frühen Stadium, um Kryptowährungen, Bergbau und intelligente Verträge zu verstehen. Jetzt zeigen Bergleute keinen aktiven Wunsch, ihre Aktivitäten auf Kosten der Benutzer zu optimieren, aber dies ist nur für den Moment. Das Ethereum wird wachsen und eines Tages werden wir uns noch an diese Zeit als das goldene Zeitalter dezentraler Anwendungen erinnern.

Bergleute sind keine Freunde und keine Feinde. Sie sind eine Art unkontrollierbare Naturkatastrophe in unseren Konsenssystemen. Diejenigen, die nicht lernen, mit diesem Element umzugehen, werden letztendlich Opfer fortgeschrittener Bergleute.

Bild

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


All Articles