¿Por qué Solidity usa un salto no válido en lugar de un código de operación no válido para los lanzamientos?

En la versión 0.4.9 de Solidity :

Las excepciones internas ahora se lanzan mediante el uso de un código de operación no válido (0xfe), las excepciones manuales todavía usan un salto no válido.

y

Generador de código: los errores internos (matriz fuera de los límites, etc.) ahora provocan una reversión mediante el uso de una instrucción no válida (0xfe - EIP141) en lugar de un salto no válido. El salto no válido todavía se mantiene para lanzamientos explícitos.

¿Por qué la diferencia? ¿Hay alguna ventaja en usar un destino de salto no válido en lugar del código de operación 0xfe para lanzamientos explícitos?

Respuestas (1)

la idea detrás de usar el salto inválido es quemar todo el gas y, por lo tanto, castigar al usuario por intentar hacer algo que no se le permitió. Primero, todas las excepciones usaron un salto inválido, pero esto también puede conducir a que los usuarios sean castigados de manera injusta: si un usuario provoca una matriz fuera de los límites sin malas intenciones, todo su combustible se quema automáticamente. Esto fue reemplazado con el código de operación inválido, mientras que los desarrolladores aún pueden castigar a los usuarios con un lanzamiento manual.

Un código de operación no válido también quema todo el gas. Entonces, throwpuede usar un código de operación no válido en lugar de un salto no válido. ¿Puede aclarar por qué en un caso "Esto se reemplazó con el código de operación no válido" y en el caso de lanzamiento manual, el salto no válido no se reemplazó con el código de operación no válido?
Sí, me equivoqué, el código de operación no válido también quema gas. Pero los códigos de operación inválidos para errores programáticos permiten un informe de error más fácil/más diferenciado: es más fácil saber si el código o un lanzamiento manual es la razón de la falla de una transacción. Por ejemplo, ¿llamé a un valor de matriz que no debía o simplemente salté fuera de los límites?