Будут ли существующие контракты вести себя по-другому, когда Метрополис внедрит REVERT?

Solidity v0.4.10 представила функции revert()и require(), а также поддержку REVERTкода операции . Насколько я могу судить, это означает, что любой контракт, составленный с использованием ^0.4.10, будет выражать другое поведение throwпосле мегаполиса.

Фон:

Согласно документации Solidity Exceptions :

предоставленное пользователем исключение генерируется в следующих ситуациях:

  1. Вызывающий бросок.
  2. Вызов require с аргументом, который оценивается как false.

а также

Внутри Solidity выполняет операцию возврата (инструкцию 0xfd) при возникновении предоставленного пользователем исключения.

Вывод:

Таким образом, кажется, что недавно скомпилированные/развернутые контракты будут включать в себя 0xfdопкод, который на усадьбе является просто INVALIDоперацией, но станет REVERTпосле метрополиса.

Вопрос:

Верен ли мой вывод?

Есть ли случаи, когда измененное поведение может быть проблематичным?

Ответы (1)

Да, это правильно, согласно этому разговору .

Все неопределенные инструкции ведут себя так же, как INVALID. И да, поведение 0xfdменяется на Метрополисе, но до или после Метрополиса 0xfdвсегда бросает. Разница заключается в том, предоставляется ли вызывающему абоненту некоторый выход... а также в том, что оставшаяся часть газа возвращается.