Я заметил в различных руководствах по смарт-контрактам, что разные версии Solidity объявляются вверху. Я бы предположил, что вы просто будете использовать последнюю версию, но я заметил, что некоторые контракты, кажется, работают на одной платформе, не работают на другой, то есть развертывание одного и того же контракта через Remix и MetaMask против Mist?
Это функция безопасности.
Может быть полезно думать о solc
компиляторе как о возможном источнике дефектов. Это способ указать версию компилятора, которая использовалась при разработке и тестировании.
Рассмотрим ситуацию, в которой команда провела кропотливое тестирование с большими затратами. Затем ряд неудачных обстоятельств приводит к компиляции с использованием более нового компилятора. Они запустили его в производство, ошибочно полагая, что он был тщательно протестирован, но на самом деле он другой и сломанный. Ой!
Компилятор выдаст ошибку, если он не соответствует тому, что запрашивает исходный файл.
pragma solidity 0.4.11; // version 0.4.11. Nothing else will do.
pragma solidity ^0.4.11; // version 0.4.11 or newer
На мой взгляд , нотация ^ удобна для неформальной разработки. Перед обширным тестированием или выпуском требуется точное обозначение.
По сути, это говорит о том, что «этот код был скомпилирован с 0.4.11», и люди могут сами скомпилировать исходный код и убедиться, что он точно соответствует. Неявно, если тестируемая версия была скомпилирована с чем-то другим, то «этот» байт-код вообще не тестировался.
Надеюсь, это поможет.
Даниэль Макклюр