Costo de gas llamar vs enviar para funciones puras/ver

Soy consciente del hecho de que las funciones pure/view no cuestan gasolina con una simple "llamada". Pero, ¿qué sucede si tengo una función que cambia el estado del contrato en función del resultado de la función pura/vista? ¿Tengo que pagar gasolina por las funciones pure/view en bucle si hago un "envío"?

En mi ejemplo, quiero encontrar un número en una matriz y devolver el índice.

function indexOfUint(uint256[] _array, uint _value) public pure returns (uint256) {
    bool exist;
    for (uint i=0; i<_array.length;i++){
        if(_array[i] == _value){
            exist = true;
            return i;
        }
    }
    assert(exist == true);
}

Respuestas (4)

Hay dos declaraciones en https://github.com/ethereum/solidity/issues/992

la palabra clave viewse introduce para funciones (reemplaza a constant). Llamar a una vista no puede alterar el comportamiento de futuras interacciones con ningún contrato. Esto significa que dichas funciones no pueden usar SSTORE, no pueden enviar ni recibir ether y solo pueden llamar a otras vistas o funciones puras.

la palabra clave purese introduce para las funciones, son viewfunciones 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.

Significa ver y puro no puede cambiar el estado del contrato. Si necesita cambiar el estado del contrato, debe eliminar purelas viewpalabras clave.

function indexOfUint(uint256[] _array, uint _value) public pure returns (uint256) {
    bool exist;
    ...
}

La función no cambia de estado de contrato. existalmacenes de variables en la pila

Las funciones pure y view no consumen gas cuando estas se ejecutan en su nodo local (o el nodo que está usando como local, infura, etherscan, etc.). en tales casos la transacción no será enviada.

Por otro lado, si la transacción se envía a la red (como en su caso), las funciones pure y view consumirán gas.

Espero que esto ayude.

Sí, si su función cambia de estado, definitivamente usará gas.

Consulte esto: http://ethdocs.org/en/latest/contracts-and-transactions/account-types-gas-and-transactions.html#estimating-transaction-costs

Un análisis más detallado del costo del gas según el tipo de operación: https://docs.google.com/spreadsheets/d/1m89CVujrQe5LAFJ8-YAUCcNK950dUzMQPMJBxRtGCqs/edit#gid=0

Para las llamadas, el gas se cobra solo cuando se llama por un contrato.

Cuando llama a una función de vista, se ejecuta localmente. la transacción no se transmite. es gratis.

Pero cuando la función de vista es llamada por un contrato. es ejecutado por otros, la transacción puede registrarse en blockchain.