Sé que se han hecho preguntas similares antes, sin embargo, no pude encontrar una buena explicación para lo siguiente:
En uno de los tutoriales dice:
Llamar a las funciones Pure y View no cuesta nada si se llama externamente desde fuera del contrato. Pero cuestan gasolina si son llamados internamente por otra función.
Según entiendo,
Las funciones Pure y View no cuestan gasolina para llamar si se llaman externamente desde el exterior
En este tipo de caso, no se iniciará ninguna transacción porque será como consultar el estado actual de la cadena de bloques y nada cambiará.
Pero cuestan gasolina si son llamados internamente por otra función.
Esto significa que ya existe una transacción para cambiar el estado de la cadena de bloques, y ese proceso de cambio de estado necesita usar esa función pura, por ejemplo, para los cálculos. El costo del gas para una transacción depende de la cantidad de códigos de operación EVM ejecutados mientras se completa, por lo que ejecutar esa función pura también está dentro de ese conjunto de códigos de operación. Por eso se dice que cuesta gasolina.
Considere el siguiente contrato:
pragma solidity ^0.4.24;
contract PureFunctionTest {
uint state;
function addNumbers(uint a, uint b) public pure returns (uint) {
return a +b ;
}
function updateState(uint a, uint b) public {
uint c = addNumbers(a,b);
state = c;
}
function addThreeNumbers(uint a, uint b, uint c) public pure returns (uint) {
uint temp = addNumbers(a,b);
uint num = addNumbers(temp,c);
return num;
}
}
Simplemente llamar addNumbers
no le costará nada. Pero llamar updateState
también tendrá un costo, incluido el costo addNumbers(a,b)
. Llamar addThreeNumbers
no costará gasolina, incluso si se llama addNumbers
internamente, ya que no se necesita ninguna transacción durante la llamada de función.
addNUmbers
llamado alsone. pero cuando se llama dentro de otras funciones que cambian los estados. porque para un costo de transacción lo que importa es la cantidad de códigos de operación que se ejecutan. ¿lo entiendes?updatestate
no puedes dejar de sate =c
estar ejecutando. Edité el ejemplo, verifique si tiene sentido.Como dice la cita, no cuestan nada si solo se usan para leer desde su nodo local.
Cuestan gasolina si son parte de una transacción que necesita ser minada. El gas compensa a la red por ejecutar su código. No importa que esta función en particular no actualice el estado; todavía se necesitan recursos para ejecutarse, por lo que cuesta gasolina.
Alex Koz.
op
eración tiene un costo en Gas si se ejecuta en un nodo Miners, no en su nodo local (del usuario). Las operaciones de lectura (de blockchain) tienen un costo menor, Escritura: más.