¿Los contratos existentes se comportarán de manera diferente cuando Metropolis implemente REVERT?

Solidity v0.4.10 introdujo las funciones revert()y require(), junto con la compatibilidad con el REVERTcódigo de operación . Por lo que puedo decir, esto significa que cualquier contrato compilado usando ^0.4.10expresará un comportamiento diferente throwdespué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:

  1. Tiro de llamada.
  2. 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 0xfdcódigo de operación, que en homestead es solo una INVALIDoperación, pero se convertirá REVERTen metrópolis.

Pregunta:

¿Es correcta mi conclusión?

¿Hay casos en los que el cambio de comportamiento podría ser problemático?

Respuestas (1)

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 0xfdcambios en Metropolis, pero antes o después de Metropolis, 0xfdsiempre tira. La diferencia es si se pone a disposición del llamante alguna salida... y, además, se reembolsa el resto del gas.