In der Version 0.4.9 von Solidity:
Interne Ausnahmen werden jetzt durch die Verwendung eines ungültigen Opcodes (0xfe) ausgelöst, manuelle Ausnahmen verwenden immer noch einen ungültigen Sprung.
Und
Codegenerator: Interne Fehler (Array außerhalb der Grenzen usw.) führen jetzt zu einer Umkehrung, indem anstelle eines ungültigen Sprungs eine ungültige Anweisung (0xfe - EIP141) verwendet wird. Ungültiger Sprung wird weiterhin für explizite Würfe beibehalten.
Warum der Unterschied? Gibt es einen Vorteil, ein ungültiges Sprungziel anstelle des 0xfe-Opcodes für explizite Throws zu verwenden?
Die ganze Idee hinter der Verwendung des ungültigen Sprungs besteht darin, das ganze Gas zu verbrennen und den Benutzer dafür zu bestrafen, dass er versucht, etwas zu tun, was er nicht durfte. Zunächst verwendeten alle Ausnahmen einen ungültigen Sprung, aber das kann auch dazu führen, dass Benutzer auf unfaire Weise bestraft werden: Wenn ein Benutzer ohne böse Absicht ein Array außerhalb der Grenzen verursacht, wurde automatisch sein gesamtes Gas verbrannt. Dies wurde durch den ungültigen Opcode ersetzt, während Entwickler Benutzer immer noch mit einem manuellen Wurf bestrafen können.
eth
throw
kann ein ungültiger Opcode anstelle eines ungültigen Sprungs verwendet werden. Können Sie erklären, warum in einem Fall "Dies wurde durch den ungültigen Opcode ersetzt" und im Fall des manuellen Wurfs ein ungültiger Sprung nicht durch einen ungültigen Opcode ersetzt wurde?Nikita Fuchs