Contract 'throw' - vom Vertrag gesendeter Ether auch zurückgekehrt?

Wenn ein Vertrag eine Ausnahme auslöst (mithilfe von „throw“), wird dann auch jeder Ether, der vom Vertrag an andere Verträge oder externe Konten gesendet wird, zurückgesendet?

Ich verstehe, dass jeder Vertragsanrufer den Etherwert zurückerstattet (erstattet) bekommt, aber ich bin mir nicht sicher, was mit dem Ethersaldo des Vertrags passiert, wenn ich Ether an andere Verträge oder Konten sende.

Antworten (1)

Alles , mit einer Handvoll Ausnahmen, wird zurückgesetzt. Kontostandsänderungen, Vertragsstatusänderungen, Statusänderungen in anderen Verträgen, Sie erhalten ein Bild.

Es ist fast so, als ob die Transaktion nie stattgefunden hätte. Hier sind die wenigen Ausnahmen:

  • Das Gas ist noch verbraucht. (Eigentlich ist es alles.)
  • Die Transaktion belegt immer noch Platz im Block. Jeder kann sehen, was mit der Transaktion passiert ist.
  • Die Nonce des Kontos, das die Transaktion gesendet hat, wird erhöht, um Replay-Angriffe zu verhindern.

Weitere Details zu throwBest Practices finden Sie in diesem Blogbeitrag.

Danke für die Antwort. Ich habe jedoch eine Frage. Was meinst du mit Punkt 1? - das Gas ist noch verbraucht. (Tatsächlich ist es alles.) Ich dachte, dass Verträge nur Gas nach Bedarf verwenden (Verarbeitung von EVM-Anweisungen, Speicherung usw.) und jegliches übrig gebliebene Gas wird automatisch an den Transaktionssender zurückgegeben.
ist der Benzinverbrauch bis zu gasLimit?
@AlexDarby Ihr Gedanke ist richtig, aber für Ausnahmen und throw: ethereum.stackexchange.com/questions/2307/…
@RolandKofler: Ja. Es ist, als ob die Transaktion das ganze Gas aufgebraucht hätte und rückgängig gemacht worden wäre.