Solidity v0.4.10 introdujo las funciones revert()
y require()
, junto con la compatibilidad con el REVERT
código de operación . Por lo que puedo decir, esto significa que cualquier contrato compilado usando ^0.4.10
expresará un comportamiento diferente throw
después de la metrópolis.
Fondo:
De acuerdo con la documentación de Solidity Exceptions :
La excepción proporcionada por el usuario se genera en las siguientes situaciones:
- Tiro de llamada.
- Llamar a require con un argumento que se evalúa como falso.
y
Internamente, Solidity realiza una operación de reversión (instrucción
0xfd
) cuando se lanza una excepción proporcionada por el usuario.
Conclusión:
Por lo tanto, parece que los contratos compilados/implementados recientemente incluirán el 0xfd
código de operación, que en homestead es solo una INVALID
operación, pero se convertirá REVERT
en metrópolis.
Pregunta:
¿Es correcta mi conclusión?
¿Hay casos en los que el cambio de comportamiento podría ser problemático?
Sí, esto es correcto, según esta conversación .
Todas las instrucciones no definidas se comportan de la misma manera que INVALID. Y sí, el comportamiento de los
0xfd
cambios en Metropolis, pero antes o después de Metropolis,0xfd
siempre tira. La diferencia es si se pone a disposición del llamante alguna salida... y, además, se reembolsa el resto del gas.