Solidität: Was ist der Unterschied zwischen „view“ und „constant“?

Solidity 0.4.16 führte die Funktionsmodifikatoren viewund ein constant. Die Dokumentation sagt:

constantfür Funktionen: wie view.

Bedeutet das viewnur ein Alias ​​für constant? Wenn ja, warum brauchen wir es?

Diese Antwort erklärt die Bedeutung von constant, pure, und viewsehr gut.

Antworten (2)

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 constantirrefü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: viewund puredie 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:

  1. 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.
  2. 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.
  3. Das Schlüsselwort Konstante ist für Funktionen ungültig
  4. 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).

Wie hier beschrieben,

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:

  1. Zustandsvariablen, in die geschrieben wird.
  2. Ereignisse, die ausgegeben werden.
  3. Andere Verträge werden erstellt.
  4. Selbstzerstörung verwendet.
  5. Ether wird über Anrufe gesendet.
  6. Aufrufen von Funktionen, die nicht als View oder Pure gekennzeichnet sind.
  7. Low-Level-Aufrufe werden verwendet.
  8. Inline-Assembly, die bestimmte Opcodes enthält, die verwendet werden