Solidity 0.4.16 introdujo los modificadores de función view
y . La documentación dice:constant
constant
para funciones: Igual queview
.
¿Esto significa view
que es solo un alias para constant
? Si es así, ¿por qué lo necesitamos?
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 constant
es 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: view
y pure
que 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:
- 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.
- 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.
- la palabra clave constante no es válida en las funciones
- 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)
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":
ÉTER
constant
,pure
yview
muy bien.