Solidez: ¿Cuál es la diferencia entre `vista` y `constante`?

Solidity 0.4.16 introdujo los modificadores de función viewy . La documentación dice:constant

constantpara funciones: Igual que view.

¿Esto significa viewque es solo un alias para constant? Si es así, ¿por qué lo necesitamos?

Esta respuesta explica los significados de constant, purey viewmuy bien.

Respuestas (2)

Esto se analiza aquí: https://github.com/ethereum/solidity/issues/992 y se implementó parcialmente en el cambio que anotó.

Tal como lo entiendo, el punto es que constantes engañoso (las funciones constantes no necesariamente devuelven resultados constantes) y no particularmente matizado. Cuando se completen los cambios, se introducirán dos palabras clave de reemplazo: viewy pureque pretenden ser más significativas y útiles.

Del problema de GitHub ,

Ahora:

  • la función constante no debe modificar el estado (aún no se aplica por completo)
  • variable de estado constante (es decir, la que está en la clase y no en un método) se evalúa cada vez que se llama

Después del cambio:

  1. la vista de palabra clave se introduce para funciones (reemplaza a constante). Llamar a una vista no puede alterar el comportamiento de futuras interacciones con ningún contrato. Esto significa que tales funciones no pueden usar SSTORE, no pueden enviar ni recibir ether y solo pueden llamar a otras vistas o funciones puras.
  2. la palabra clave pure se introduce para funciones, son funciones de vista con la restricción adicional de que su valor solo depende de los argumentos de la función. Esto significa que no pueden usar SSTORE, SLOAD, no pueden enviar ni recibir ether, no pueden usar msg o block y solo pueden llamar a otras funciones puras.
  3. la palabra clave constante no es válida en las funciones
  4. la palabra clave constante en cualquier variable significa que no se puede modificar (y el optimizador podría colocarla en la memoria o en el código de bytes)

Como se describe aquí,

Las funciones se pueden declarar como vista, lo que hace que prometan no modificar el estado, por lo que solo se usan para ver el estado.

Aquí hay una lista de condiciones para que una declaración se considere como "modificando el estado":

  1. Variables de estado en las que se está escribiendo.
  2. Eventos que se están emitiendo.
  3. Se están creando otros contratos.
  4. se está utilizando la autodestrucción.
  5. El éter se envía a través de llamadas.
  6. Funciones de llamada que no están marcadas como vistas o puras.
  7. Se están utilizando llamadas de bajo nivel.
  8. Ensamblaje en línea que contiene ciertos códigos de operación en uso