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?
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.
ética
throw
puede 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?Nikita Fuchs