Wo ist der Hauptunterschied zwischen:
pragma solidity ^0.4.24;
Undpragma solidity 0.4.24;
Warum sollte ich das eine oder das andere verwenden? Vorteile Nachteile?
Welche Auswirkungen hat es in Zukunft, wenn ich den Smart Contract auf die Blockchain setze?
Gemäß dem Abschnitt Version Pragma der Dokumentation :
Das Versions-Pragma wird wie folgt verwendet:
pragma solidity ^0.4.0;
Eine solche Quelldatei wird nicht mit einem Compiler vor Version 0.4.0 kompiliert und funktioniert auch nicht auf einem Compiler ab Version 0.5.0 (diese zweite Bedingung wird durch die Verwendung von ^ hinzugefügt).
Also in deinem Beispiel
pragma solidity 0.4.24;
funktioniert auf jedem Compiler ab 0.4.24
und aufwärts, wohingegen
pragma solidity ^0.4.24;
wird auf jedem Compiler von 0.4.24
(einschließlich) bis 0.5.0
(nicht einschließlich) kompiliert.
Beachten Sie jedoch, dass dies nur der Compiler-Kompatibilität dient. Sobald Sie Ihren Vertrag zusammengestellt haben, befindet er sich nicht mehr in Solidity, sodass Sie ihn in Zukunft bereitstellen können, ohne sich Gedanken über die Kompatibilität machen zu müssen.
pragma solidity ^0.4.24;
verstehe ich. Gibt es jedoch pragma solidity 0.4.24;
wirklich 0.4.24 und höher an? Denn wenn ich pragma solidity 0.4.0;
es verwende, wird beim Kompilieren ein Fehler ausgegeben: SyntaxError: Source file requires different compiler version (current compiler is 0.4.24+commit.e67f0147.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version pragma solidity 0.4.0; ^--------------------^ Compilation failed. See above.
Wie in Ihrer Erklärung sollte es in Ordnung sein, da 0.4.0 jede höhere Compiler-Version enthalten würde?Sperren Sie Pragmas für eine bestimmte Compilerversion
Verträge sollten mit derselben Compilerversion und denselben Flags bereitgestellt werden, mit denen sie am häufigsten getestet wurden. Durch das Sperren des Pragmas wird sichergestellt, dass Verträge nicht versehentlich beispielsweise mit dem neuesten Compiler bereitgestellt werden, der möglicherweise ein höheres Risiko unentdeckter Fehler birgt. Verträge können auch von anderen bereitgestellt werden, und das Pragma gibt die von den ursprünglichen Autoren beabsichtigte Compilerversion an.
// bad pragma solidity ^0.4.4; // good pragma solidity 0.4.4;
Solidity-Dokumentation: Version Pragma
Das Versions-Pragma wird wie folgt verwendet:
pragma solidity ^0.4.0;
Eine solche Quelldatei wird nicht mit einem Compiler vor Version 0.4.0 kompiliert und funktioniert auch nicht auf einem Compiler ab Version 0.5.0 (diese zweite Bedingung wird durch die Verwendung von ^ hinzugefügt).
Das Symbol ^ bedeutet, dass Sie mit jeder Version zwischen der deklarierten Version bis zur nächsten ganzen Zahl kompilieren können.
mirg
Senju
pragma solidity 0.4.24;
die Version?mirg
^
, wird "offen" sein