Ver/Uso de gas puro - ¿Coste de gas si lo llama internamente otra función?

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.

  • Para que necesitan gasolina si no actualizan nada?
  • ¿Cómo cuesta la gasolina leer?
  • ¿No se lee desde mi blockchain local?
Como sé, cualquier operació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.

Respuestas (2)

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 addNumbersno le costará nada. Pero llamar updateStatetambién tendrá un costo, incluido el costo addNumbers(a,b). Llamar addThreeNumbersno costará gasolina, incluso si se llama addNumbersinternamente, ya que no se necesita ninguna transacción durante la llamada de función.

Muchas gracias. No entendí por qué las llamadas internas siempre cuestan gasolina.
pero de acuerdo con la cita en la pregunta, ¿debería costar gasolina cuando se usa 'addNumbers'? ¿Por que es esto entonces?
no cuando sólo el addNUmbersllamado 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?
¿Qué pasa si no actualizo el estado? Digamos que si solo llamo a la función agregarNúmeros y no uso esta línea: estado = c; pero de acuerdo con la cita en la pregunta, ¿esto todavía costaría algo, ya que es interno?
si estás llamando updatestateno puedes dejar de sate =cestar 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.

Muchas gracias. ¿Las llamadas internas son siempre parte de la transacción? ¿Cuál es la diferencia entre leer la misma variable de función interna y de función externa?
Si paga gasolina está relacionado con si transmite una transacción o no. Si no está transmitiendo una transacción, solo está haciendo una lectura local, entonces nada cuesta nada. Si estás transmitiendo una transacción, todo cuesta.
Eso significa que las llamadas internas siempre transmiten una transacción, ¿cuánto cuestan?
No. Las llamadas internas pueden ser parte de una transacción o no ser parte de una transacción. La distinción entre "llamada externa" y "llamada interna" es ortogonal a si algo cuesta o no gasolina.