Solidity v0.4.10 introduced the
require() functions, along with support for the
REVERT opcode. As far as I can tell, this means that any contract compiled using
^0.4.10 will express different behavior on
throw after metropolis.
According to the Solidity Exceptions documentation:
user-provided exception is generated in the following situations:
- Calling throw.
- Calling require with an argument that evaluates to false.
Internally, Solidity performs a revert operation (instruction
0xfd) when a user-provided exception is thrown.
So, it seems that recently compiled/deployed contracts will include the
0xfd opcode, which on homestead is just an
INVALID operation, but will become
REVERT after metropolis.
Is my conclusion correct?
Are there any cases where the the changed behavior could be problematic?