Что означает эта ошибка «неверный код операции 0xfd»?

Я нашел сообщение об ошибке «неверный код операции 0xfd». Что это значит?

Я погуглил и нашел здесь только один результат .

Цитата: «Недопустимый код операции 0xfd никогда не срабатывает (некоторые компиляторы кодируют свойства безопасности, используя 0xfd)»

Ответы (1)

0xfdэто REVERTкод операции, как описано в EIP140 .

Что нужно знать:

  1. REVERTзадуман как «мягкий бросок», при котором не расходуется весь оставшийся газ. Он также может возвращать некоторые данные, которые могут быть полезны для отладки и обратной связи с пользователем.

  2. Он еще не реализован в EVM; это будет реализовано первым форком Metropolis. Вот почему в настоящее время он сообщается как «неверный код операции», когда EVM встречает его.

  3. Тем не менее, компилятор Solidity уже реализует и генерирует REVERTs через require()оператор. Рекомендуется использовать для проверки пользовательского ввода. Поскольку опкод пока недоступен, в настоящее время он действует точно так же, как и старый throw, но после Метрополиса он будет реализовывать новый функционал.

Поэтому, если вы используете require() перед разветвлением Metropolis, он отображает «ВМ возвращена с ошибкой err = «неверный код операции 0xfd»». Но это сработало, как и ожидалось, так что это не ошибка. Я прав?
Это зависит от того, что вы подразумеваете под «не ошибкой». Что-то пошло не так, если вы requireпотерпели неудачу: теперь это приводит к исключению недопустимого кода операции; в будущем он вернется более красиво. В любом случае выполнение кода прекращается.