Ich weiß, dass ähnliche Fragen schon einmal gestellt wurden, aber ich konnte keine gute Erklärung für Folgendes finden:
In einem der Tutorials heißt es:
Pure- und View-Funktionen kosten kein Benzin, wenn sie extern von außerhalb des Vertrags aufgerufen werden. Aber sie kosten Gas, wenn sie intern von einer anderen Funktion aufgerufen werden.
Wie ich es verstehe,
Pure- und View-Funktionen kosten kein Benzin, wenn sie extern von außen aufgerufen werden
In dieser Art von Fall wird keine Transaktion initiiert, da dies so wäre, als würde man einfach die Blockchain nach ihrem aktuellen Zustand abfragen, und es würde sich nichts ändern.
Aber sie kosten Gas, wenn sie intern von einer anderen Funktion aufgerufen werden.
Dies bedeutet, dass es bereits eine Transaktion gibt, um den Zustand der Blockchain zu ändern, und dieser Prozess der Zustandsänderung muss diese reine Funktion verwenden, beispielsweise für Berechnungen. Die Gaskosten für eine Transaktion hängen von der Anzahl der EVM-Opcodes ab, die während des Abschlusses ausgeführt werden, sodass die Ausführung dieser reinen Funktion auch innerhalb dieses Satzes von Opcodes liegt. Deshalb heißt es, dass es Benzin kostet.
Betrachten Sie den folgenden Vertrag:
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;
}
}
Ein Anruf addNumbers
kostet nichts. Aber auch das Anrufen updateState
kostet ua Kosten addNumbers(a,b)
. Der Aufruf addThreeNumbers
kostet kein Gas, selbst wenn er addNumbers
intern aufgerufen wurde, da während des gesamten Funktionsaufrufs keine Transaktion erforderlich ist.
addNUmbers
angerufene alsone. aber wenn es innerhalb anderer Funktionen aufgerufen wird, die die Zustände ändern. denn für Transaktionskosten zählt die Anzahl der ausgeführten Opcodes. verstehst du es?updatestate
, können Sie nicht aufhören sate =c
, auszuführen. Ich habe das Beispiel bearbeitet, prüfen, ob es Sinn macht?Wie das Zitat sagt, kosten sie nichts , wenn sie nur zum Lesen von Ihrem lokalen Knoten verwendet werden.
Sie kosten Gas, wenn sie Teil einer Transaktion sind, die abgebaut werden muss. Gas entschädigt das Netzwerk für die Ausführung Ihres Codes. Es spielt keine Rolle, dass diese spezielle Funktion den Status nicht aktualisiert; Die Ausführung erfordert immer noch Ressourcen, also kostet es Benzin.
Alex Kos.
op
Eration Gas, wenn sie auf einem Miners-Knoten ausgeführt wird, nicht auf Ihrem lokalen (Benutzer-)Knoten. Leseoperationen (aus Blockchain) haben geringere Kosten, Schreiboperationen kosten mehr.