Solidity: Best Practices - Welche Compiler-Version sollte ich verwenden? Vorteile Nachteile

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?

Vielen Dank für Ihren Link, aus dem ich die Informationen zum Sperren der Version entnehme. Sperrt pragma solidity 0.4.24;die Version?
ja tut es. Wenn Sie verwenden ^, wird "offen" sein

Antworten (3)

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.24und 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.

Soweit 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?
@Senju Ich habe den gleichen Fehler wie du.

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.