He leído varias veces que todo cuesta gasolina en ethereum. Pero cuando escribo y uso una función que no cambia el estado de un contrato (es decir, suma dos parámetros y devuelve la suma), eso no cuesta nada.
Entonces, ¿qué significa ahora realmente la afirmación "todo cuesta gas en ethereum"?
Las funciones que no cambian el estado se pueden escribir explícitamente como funciones de solo lectura usando los modificadores view
y pure
(anteriormente constant
).
view
: Leerá el estado pero no lo cambiará.pure
: No necesita acceso al estado y no lo cambiará.Un cliente también puede invocar cualquier función utilizando el método Web3 .call()
.
En los tres casos se aplica lo siguiente:
call()
, por ejemplo. Lo mismo se aplica a las situaciones de "sin gasolina". Se debe suministrar suficiente gas con la solicitud.Cada OPCODE de nivel de ensamblador tiene un costo determinado. Podría ser una generalización un poco más precisa decir que todas las operaciones de cambio de estado cuestan gasolina. Me gustaría decir que las lecturas son gratis. Al final, lo son, cuando se implementan adecuadamente. Esperemos que los detalles anteriores brinden algo de claridad sobre lo que está sucediendo.
Espero eso ayude.
Richard Horrocks