Solidity 0.4.16 führte die Funktionsmodifikatoren view
und ein constant
. Die Dokumentation sagt:
constant
für Funktionen: wieview
.
Bedeutet das view
nur ein Alias für constant
? Wenn ja, warum brauchen wir es?
Dies wird hier diskutiert: https://github.com/ethereum/solidity/issues/992 und wurde in der von Ihnen notierten Änderung teilweise implementiert .
So wie ich es verstehe, ist der Punkt constant
irreführend (konstante Funktionen geben nicht unbedingt konstante Ergebnisse zurück) und nicht besonders nuanciert. Nach Abschluss der Änderungen werden zwei Ersatzschlüsselwörter eingeführt: view
und pure
die sinnvoller und nützlicher sein sollen.
Aus dem GitHub-Problem ,
Jetzt:
- konstante Funktion sollte den Status nicht ändern (noch nicht vollständig erzwungen)
- Konstante Zustandsvariable (dh die in der Klasse und nicht in einer Methode) wird bei jedem Aufruf ausgewertet
Nach der Änderung:
- das Schlüsselwort view wird für Funktionen eingeführt (es ersetzt Konstante). Das Aufrufen einer Ansicht kann das Verhalten zukünftiger Interaktionen mit einem Vertrag nicht ändern. Dies bedeutet, dass solche Funktionen SSTORE nicht verwenden können, keine Äther senden oder empfangen können und nur andere Ansichten oder reine Funktionen aufrufen können.
- das Schlüsselwort pure wird für Funktionen eingeführt, sie sind Ansichtsfunktionen mit der zusätzlichen Einschränkung, dass ihr Wert nur von den Funktionsargumenten abhängt. Das bedeutet, dass sie SSTORE, SLOAD nicht verwenden, kein Ether senden oder empfangen, keine msg oder block verwenden und nur andere reine Funktionen aufrufen können.
- Das Schlüsselwort Konstante ist für Funktionen ungültig
- Das Schlüsselwort Konstante für eine beliebige Variable bedeutet, dass sie nicht geändert werden kann (und vom Optimierer in den Speicher oder Bytecode gestellt werden kann).
Funktionen können als Ansicht deklariert werden, wodurch sie versprechen, den Zustand nicht zu ändern, und somit nur zum Anzeigen des Zustands verwendet werden.
Hier ist eine Liste der Bedingungen für eine Anweisung, die als „Änderung des Zustands“ betrachtet wird:
ÄTHER
constant
,pure
, undview
sehr gut.