Werden sich bestehende Verträge anders verhalten, wenn REVERT von Metropolis implementiert wird?

Solidity v0.4.10 führte die Funktionen revert()und require()ein, zusammen mit Unterstützung für den REVERTopcode . Soweit ich das beurteilen kann, bedeutet dies, dass jeder Vertrag, der mit erstellt wurde, ^0.4.10ein anderes Verhalten thrownach Metropole ausdrückt.

Hintergrund:

Gemäß der Solidity Exceptions-Dokumentation :

Eine vom Benutzer bereitgestellte Ausnahme wird in den folgenden Situationen generiert:

  1. Calling-Wurf.
  2. Aufrufen von require mit einem Argument, das als false ausgewertet wird.

und

Solidity führt intern eine Wiederherstellungsoperation (instruction 0xfd) durch, wenn eine vom Benutzer bereitgestellte Ausnahme ausgelöst wird.

Fazit:

Es scheint also, dass kürzlich zusammengestellte/bereitgestellte Verträge den 0xfdOpcode enthalten werden, der auf Homestead nur eine INVALIDOperation ist, aber REVERTnach Metropole werden wird.

Frage:

Ist meine Schlussfolgerung richtig?

Gibt es Fälle, in denen das geänderte Verhalten problematisch sein könnte?

Antworten (1)

Ja, das ist laut diesem Gespräch richtig .

Alle undefinierten Anweisungen verhalten sich genauso wie INVALID. Und ja, das Verhalten 0xfdändert sich bei Metropolis, aber vor oder nach Metropolis, 0xfdwirft immer. Der Unterschied besteht darin, ob dem Anrufer ein Teil der Leistung zur Verfügung gestellt wird ... und auch, dass der Rest des Gases zurückerstattet wird.