Ethereum – wie wird der Output einer Kontraktrechnung verifiziert? [abgeschlossen]

Dies kann so einfach sein wie ein Verweis auf eine Stelle in den Dokumenten, die ich übersehen habe, aber wie/wo wird die Ausgabe einer Vertragsberechnung überprüft oder gegen einen böswilligen Miner mit einer absichtlich beschädigten VM-Implementierung gesichert?

Triviales Beispiel: Mein Vertrag nimmt zwei Eingaben, A und B, und gibt ihre Summe zurück. Ein anrüchiger Miner möchte txn-Gebühren und das Ethereum für das Gas für diesen Vertrag sammeln, ohne die Arbeit zu erledigen, und hackt seine VM-Implementierung, um dem Anrufer immer „4“ zurückzugeben. Wer mit „2+2“ testet, wird denken, dass die Funktion funktioniert.

Angenommen, der Bergmann hat es geschafft, den Block mit einer Anfrage für meinen Vertrag abzubauen, und „4“ zurückgegeben (um nicht seine eigene Rechenleistung zu verschwenden und die Benzinkosten einzustecken). Block-Hashes für akzeptierte Transaktionen und übertragene Ether sind alle korrekt und überprüfbar, die Quelle und Opcodes des Vertrags sind alle überprüfbar und korrekt. Aber wie wird die Ausgabe der Berechnung auf Korrektheit überprüft?

Ich habe das Gefühl, dass ich etwas Offensichtliches übersehe. Was hält einen Miner davon ab, die angeforderte Arbeit (was auch immer es ist) kurzzuschließen und zu behaupten, die Arbeit erledigt zu haben, während er nur etwas syntaktisch Korrektes, aber semantisch zweifelhaftes oder falsches zurückgibt?

Vielen Dank.

Antworten (1)

Andere Knoten führen die gleiche Berechnung auf deterministische Weise durch und vergleichen ihr Ergebnis mit dem Ergebnis, das der Miner erhalten hat. Aus diesem Grund gibt es keine Funktion, die zufällige Ergebnisse zurückgibt - verschiedene Knoten würden unterschiedliche Zahlen liefern, und die Kette würde sich verzweigen. Alle anderen Miner verifizieren Ihren Block, und die Strafe für den Bau eines falschen Blocks ist der Verlust des Blocks, den Sie abgebaut haben.

Aber es gibt eine verwandte Frage: Können Sie einen Vorteil erzielen, indem Sie die Geschwindigkeit der VM verbessern oder irgendwie Berechnungen überspringen?

Ich denke, du könntest. Beispielsweise könnten Sie die Berechnungen auf eine GPU auslagern. Obwohl Dagger GPU-resistent ist, benötigen die VMs wenig Speicher und könnten wahrscheinlich auf einer GPU ausgeführt werden.

Der Vorteil wäre jedoch ziemlich gering.

Sie sind mit dem Mining-Algorithmus etwas veraltet, er wurde mehrmals geändert und ist jetzt angeblich GPU-freundlich, ASIC- und Pool-resistent. Ein Pool hat jedoch 40 % der Netzwerk-Hash-Power , sodass die letztere Behauptung nachweislich falsch ist.
Danke, ich dachte, es wäre so etwas, aber ich bin immer noch verwirrt. Erstens, grundlegender, werden alle Berechnungsergebnisse in der Blockchain als Teil der Transaktion zurückgegeben? Die Geschwindigkeit der Rückgabe scheint darauf hinzudeuten, dass ich die ersten Prozessorergebnisse zurückbekomme, unabhängig davon, ob der Block später ungültig wird. Ich scheine nicht auf N Bestätigungen des Blocks zu warten, bevor ich mein Ergebnis erhalte. Als nächstes, was ist mit einem Vertrag, der aufgefordert wird, eine Kennung des ihn verarbeitenden Knotens zurückzugeben? Das wäre ein unterschiedliches Ergebnis, je nachdem, wer es verarbeitet, und von anderen nicht überprüfbar. Oder Millisekunden-Zeitstempel?