Wird revert() das gesamte Gas der Transaktion zurückerstatten oder nur das verbleibende Gas?

Laut den Dokumenten revert() wird kein Gas verbraucht:

Beachten Sie, dass Ausnahmen im Assert-Stil das gesamte für den Anruf verfügbare Gas verbrauchen, während Ausnahmen im Revert-Stil ab der Metropolis-Version kein Gas verbrauchen.

Aber ich habe häufig gelesen, dass ungenutztes Gas zurückerstattet wird, z. B. in revert()dieser Antwort .

Ich denke, dass die Rückerstattung ALLEN Benzins Tore für DOS-Angriffe öffnen wird, also gehe ich davon aus, dass nur unbenutztes Benzin zurückerstattet wird. Aber ich hätte gerne eine Bestätigung :-)

Antworten (1)

Nur das Restgas.

revertbehält ungenutztes Gas: Das bedeutet, dass der Anrufer das ungenutzte Gas hat, um weitere Berechnungen durchzuführen. ist anders und Sie haben Recht, dass, wenn Sie revertdem Anrufer Gas zurückgeben, dies DoS-Angriffe ermöglichen würde (ein Anrufer könnte viele Male, dann revert, Schleife und revertunendlich wiederholen).

Können wir also sagen, dass die Verwendung von revert() gegenüber throw bevorzugt wird, da es dem Aufrufer etwas Benzin spart? ZB in Fällen, in denen der Anrufer einen Fehler macht und falsche Parameter angibt, was dazu führt, dass der Vertrag einen Fehler auslöst.
@TripleSpeeder Ja, throwist veraltet.
@eth, was kostet die Rückkehr selbst?
@ user2284570 laut dieser Antwort benötigt (was im Wesentlichen Revert umschließt) nur sehr wenig, etwa 23 Gas: stackoverflow.com/a/48085107/10261711