¿Pago alguna tarifa al minero si llamo a una función no constante, cuando no se cambia ninguna variable de estado?

Supongamos que tengo una función no constante que cambia una variable de estado bajo alguna condición.

En otras palabras, la función a veces puede cambiar esta variable y otras dejarla como está.

¿Pagaré alguna tarifa de gas al minero cuando la función no cambie la variable?

Escribí una pequeña prueba de Trufa que muestra el costo del gas cuando la función no cambia la variable:

Archivo MiContrato.sol:

pragma solidity 0.4.24;

contract MyContract {
    uint private x;

    constructor(uint _x) public {
        x = _x;
    }

    function set() external {
        if (x >= 42)
            x += 42;
    }

    function get() external view returns (uint) {
        return x;
    }
}

Archivo MyContract.js:

contract("MyContractTest", function(accounts) {
    it("set", async function() {
        let myContract = await artifacts.require("MyContract.sol").new(41);
        let estimateGas = await myContract.set.estimateGas();
        console.log(estimateGas);
    });
    it("get", async function() {
        let myContract = await artifacts.require("MyContract.sol").new(41);
        let estimateGas = await myContract.get.estimateGas();
        console.log(estimateGas);
    });
});

La impresión :

Contract: MyContractTest set: 21647
Contract: MyContractTest get: 21656

Luego me di cuenta de que estimateGasse ejecuta bajo el supuesto de que la función probada se llama desde la cadena (es decir, mediante algún otro contrato) y no desde fuera de la cadena, porque el costo del gas de la función constante gettambién era mayor que 0.

Entonces, como en el título de mi pregunta:

¿Pagaré alguna tarifa al minero si llamo a la función sety no cambia la variable x?

¡Gracias!

ACLARACIÓN:

Mi pregunta es sobre el costo del gas de una función no constante (puede ser cero en algunos casos). La pregunta sugerida como duplicado es sobre el costo del gas de una función constante (puede ser mayor que cero en algunos casos). Así que estas son esencialmente dos preguntas diferentes.

Posible duplicado de funciones constantes y gas

Respuestas (1)

Sí.

La no constante (not pure, viewor constant) sería invocada por una transacción para cambiar potencialmente el estado. Una transacción es extraída y confirmada por todos los nodos completos para averiguar qué hace. Incluso si no hace nada como resultado de la ramificación condicional, el remitente paga el gas consumido formando un consenso de red.

Con más detalle: https://blog.b9lab.com/calls-vs-transactions-in-ethereum-smart-contracts-62d6b17d0bc2

Espero eso ayude.