Zahle ich dem Miner eine Gebühr, wenn ich eine nicht konstante Funktion aufrufe, wenn keine Zustandsvariable geändert wird?

Angenommen, ich habe eine nicht konstante Funktion, die eine Zustandsvariable unter bestimmten Bedingungen ändert.

Mit anderen Worten, die Funktion kann diese Variable manchmal ändern und manchmal so lassen, wie sie ist.

Zahle ich dem Bergmann eine Gasgebühr, wenn die Funktion die Variable nicht ändert?

Ich habe einen kleinen Truffle-Test geschrieben, der die Gaskosten anzeigt, wenn die Funktion die Variable nicht ändert:

Datei MeinVertrag.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;
    }
}

Datei 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);
    });
});

Der Ausdruck :

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

Ich habe dann festgestellt, dass estimateGasdas unter der Annahme läuft, dass die getestete Funktion von der On-Chain (dh von einem anderen Vertrag) und nicht von der Off-Chain aufgerufen wird, da die Gaskosten der konstanten Funktion getauch größer als 0 waren.

Also wie im Titel meiner Frage:

Zahle ich dem Miner eine Gebühr, wenn ich die Funktion aufrufe setund sich die Variable nicht ändert x?

Danke dir!

KLÄRUNG:

Meine Frage bezieht sich auf die Gaskosten einer nicht konstanten Funktion (kann sie in einigen Fällen Null sein). Die als Duplikat vorgeschlagene Frage betrifft die Gaskosten einer konstanten Funktion (kann sie in einigen Fällen größer als Null sein). Das sind also im Wesentlichen zwei verschiedene Fragen.

Mögliches Duplikat von Konstantenfunktionen und Gas

Antworten (1)

Ja.

Die Nicht-Konstante (not pure, viewor constant) würde von einer Transaktion aufgerufen werden, um potenziell zustandsändernd zu sein. Eine Transaktion wird von allen Full Nodes abgebaut und bestätigt, um herauszufinden, was sie tut. Auch wenn es aufgrund der bedingten Verzweigung nichts tut, zahlt der Sender für das verbrauchte Gas, um einen Netzwerkkonsens zu bilden.

Ausführlicher: https://blog.b9lab.com/calls-vs-transactions-in-ethereum-smart-contracts-62d6b17d0bc2

Ich hoffe es hilft.