Nehmen wir an, ich habe den folgenden Code in der Solidity-Funktion von Ethereum:
function getArray() external pure returns(uint[]) {
// Instantiate a new array in memory with a length of 3
uint[] memory values = new uint[](3);
// Add some values to it
values.push(1);
values.push(2);
values.push(3);
// Return the array
return values;
}
Da es rein ist, liest es nicht einmal Daten aus dem Speicher, ändert nichts am Speicher. Stellen Sie sich also vor, ich hätte diesen Vertrag eingesetzt. Dann gibt es Leute, die diese Funktion zum Beispiel aus web3.js oder remix aufrufen möchten. Wird diese Funktion sie Benzin kosten? Ich habe gelesen, dass Ansichtsfunktionen und reine Funktionen den Speicher nicht ändern. Sie sind also frei (kein Benzin). Wenn Benutzer die obige Funktion verwenden, warum ist sie kostenlos? Ich mache immer noch die Berechnung und speichere temporäre Daten im Speicher.
Es hängt davon ab, ob,
Wenn sie eine pure
Funktion selbst aufrufen, wie in Ihrem Beispiel getArray()
, dann nein, es kostet nichts.
Wenn sie jedoch eine Funktion aufrufen, die nicht pure
oder view
ist, und diese Funktion die Funktion intern aufruft getArray()
, müssen sie für die gesamte Transaktion bezahlen.
Nichts ist umsonst. Verarbeitungsanweisungen kosten Benzin, viel weniger als eine Transaktion, die den Status ändert. Es darf kein Benzin kosten, wenn die EVM in gängigen IDEs läuft, was zu dem Irrglauben führen kann, dass reine Funktionen nichts kosten.
Diese Grundfunktion:
function bigLoop(uint max) public pure returns (uint) {
uint n;
for(n = 0; n < max; n++) {
}
return n;
}
Wird von einem Web3-Client mit max
= 310000 aufgerufen und trifft einen lokalen Dev geth
-Knoten ( geth --dev
), wird eine Gas-Aus-Ausnahme ausgelöst. Wenn Sie dies in die Schleife werfen:
function bigLoop(uint max) public pure returns (uint) {
uint n;
for(n = 0; n < max; n++) {
bytes memory dummy = new bytes(256);
}
return n;
}
dann max
= 11000 wird aus Gas werfen.
Giorgi Lagidze
AnAllergyToAnalogy
pure
oderview
Funktionieren, denke ich, dass technisch gesehen der Anbieter die Berechnungen durchführt, was wahrscheinlich entweder Infura oder Ihr lokal ausgeführter Knoten sein würde.Merunas Grincalaitis