Was bedeutet dieser Fehler "ungültiger Opcode 0xfd"?

Ich habe eine Fehlermeldung gefunden, 'invalid opcode 0xfd'. Was bedeutet das?

Ich habe gegoogelt und hier nur ein Ergebnis gefunden .

Zitat: "I der ungültige Opcode 0xfd wird nie getroffen (Einige Compiler codieren Sicherheitseigenschaften mit 0xfd)"

Antworten (1)

0xfdist der REVERTOpcode wie im EIP140 beschrieben .

Sachen zu wissen:

  1. REVERTist als "weicher Wurf" gedacht, der nicht das gesamte verbleibende Gas verbraucht. Es kann auch einige Daten zurückgeben, die für das Debugging und Benutzerfeedback nützlich sein könnten.

  2. Es ist noch nicht von der EVM implementiert; es wird durch den ersten Metropolis-Fork implementiert. Aus diesem Grund wird es derzeit als "ungültiger Opcode" gemeldet, wenn das EVM darauf trifft.

  3. Nichtsdestotrotz implementiert und generiert der Solidity-Compiler bereits REVERTs über die require()Anweisung. Es wird empfohlen, es für die Validierung von Benutzereingaben zu verwenden. Da der Opcode noch nicht verfügbar ist, verhält es sich derzeit genauso wie das alte throw, wird aber nach Metropolis die neue Funktionalität implementieren.

Wenn Sie also require() vor dem Metropolis-Fork verwenden, wird „VM mit Fehler err="invalid opcode 0xfd" zurückgegeben“ angezeigt. Aber es hat wie erwartet funktioniert, also ist es kein Fehler. Habe ich recht?
Es hängt davon ab, was Sie mit "kein Fehler" meinen. Wenn Sie fehlgeschlagen sind, ist etwas schief gelaufen require: Jetzt führt dies zu einer ungültigen Opcode-Ausnahme. in Zukunft wird es schöner zurückkehren. In jedem Fall wird die Codeausführung beendet.