2

I found an error message, 'invalid opcode 0xfd'. What does this mean?

I googled, and found just one result here.

Quote: "I the invalid opcode 0xfd is never hit (Some compilers encode safety properties using 0xfd)"

4

0xfd is the REVERT opcode as described in the EIP140.

Things to know:

  1. REVERT is intended as a "soft throw" that does not consume all the remaining gas. It can also return some data, which could be useful for debugging and user feedback.

  2. It is not yet implemented by the EVM; it will be implemented by the first Metropolis fork. This is why it is currently reported as "invalid opcode" when the EVM encounters it.

  3. Nonetheless, the Solidity compiler already implements and generates REVERTs via the require() statement. It is recommended to be used for user input validation. Since the opcode is not yet available, it currently acts just like the old throw, but after Metropolis it will implement the new functionality.

  • So if you use require() before metropolis fork, it displays 'VM returned with error err="invalid opcode 0xfd"'. But it's worked as expected, so it's not an error. Am I right? – Satoshi Nakanishi Aug 29 '17 at 10:57
  • It depends what you mean by "not an error". Something went wrong if your require failed: now it results in the invalid opcode exception; in future it will revert more nicely. In either case the code execution terminates. – benjaminion Aug 29 '17 at 11:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.