1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-ethereum-solidity

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Changelog.md 230 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 00:00 2bfa411

0.8.27 (невыпущенная версия)

Особенности языка:

  • Поддержка объявления переменных состояния с временным расположением данных (поддержка парсера, генерация кода пока не реализована).

Функции компилятора:

  • Отчёт об ошибках: Нереализованные функции теперь корректно отображаются как ошибки, а не обрабатываются как баги.
  • EVM: Поддержка версии EVM «Прага».
  • SMTChecker: Добавление проверки CHC для переполнения и потери значимости в операции унарного минуса.
  • SMTChecker: Замена CVC4 на cvc5 в качестве возможного бэкенда BMC.

Исправления ошибок:

  • SMTChecker: Исправлена ошибка, сообщающая о неверном количестве проверенных проверок для механизмов BMC и CHC.
  • SMTChecker: Исправлено форматирование выражений унарного минуса в инвариантах.
  • SMTChecker: Исправлен внутренний сбой компилятора при сообщении о доказанных целях для механизма BMC.
  • TypeChecker: Исправлен сбой сегментации при назначении вложенного кортежа кортежу.
  • Yul Optimizer: Упрощение имени может привести к запрещённым идентификаторам с ведущей и/или завершающей точкой, например, «x._» будет упрощено до «x.».

0.8.26 (21 мая 2024 года)

Особенности языка:

  • Введение новой перегрузки require(bool, Error), которая позволяет использовать функции require с пользовательскими ошибками. Эта функция доступна только в конвейере via-ir.

Функции компилятора:

  • SMTChecker: Создание цели проверки баланса для механизма CHC.
  • Генерация Yul IR-кода: Более дешёвый код для возврата с ошибками небольшого статического размера кодирования.
  • Оптимизатор Yul: Новая, более быстрая последовательность шагов оптимизатора по умолчанию.

Исправления ошибок:

  • Интерфейс командной строки: Исправлен ICE, когда оптимизатор отключён и пустая строка используется для последовательности —yul-optimizations.
  • SMTChecker: Исправлено ложное срабатывание при сравнении хэшей одинаковых массивов или строковых литералов.
  • SMTChecker: Исправлена внутренняя ошибка при доступе к карте, вызванная слишком строгими требованиями к совместимости сортировки индекса и домена сопоставления.
  • SMTChecker: Исправлена внутренняя ошибка при использовании пустого кортежа в условном операторе.
  • SMTChecker: Исправлена внутренняя ошибка при использовании битовых операторов с элементом массива в качестве аргумента.
  • Стандартный интерфейс JSON: Исправлен ICE, когда оптимизатор отключен и пустая строка используется для последовательности optimizerSteps.
  • StaticAnalyzer: Только выдавать ошибку времени компиляции для деления и по модулю на ноль, когда это происходит между литералами.
  • TypeChecker: Исправлен сбой компилятора, когда левая часть присваивания была заключённым в скобки выражением некортежного типа кортежного типа.
  • Оптимизатор Yul: Исправлен оптимизатор, выполняющий каждую повторяющуюся часть последовательности шагов хотя бы дважды, даже если размер кода уже стал стабильным после первой итерации.
  • Оптимизатор Yul: Исправлен порядок назначений, генерируемых SSATransform, зависящий от идентификаторов AST, что иногда приводит к разному (но эквивалентному) байт-коду при добавлении несвязанных файлов в конвейер компиляции.

Система сборки:

  • Замена внутренней библиотеки JSON jsoncpp на nlohmann::json.

0.8.25 (14 марта 2024 года)

Функции компилятора:

  • Генератор кода: Использование MCOPY вместо цикла MLOAD/MSTORE при копировании байтовых массивов.
  • EVM: Установка версии EVM по умолчанию на cancun.
  • Анализатор Yul: Выдача предупреждения о временном хранилище только при первом появлении tstore.

Исправления ошибок:

  • Ассемблер: Предотвращение неправильного расчёта размеров тегов.
  • Интерфейс командной строки: Не запускать IR-конвейер при использовании —via-ir, но не запрашивается вывод, который зависит от IR.
  • Импорт сборки EVM: Исправление обработки отсутствующих исходных местоположений во время импорта.
  • SMTChecker: Обеспечение правильного сброса запроса в файл перед вызовом решателя при использовании интерфейса SMT-LIB.
  • SMTChecker: Исправлена внутренняя ошибка, вызванная неуважением знака целочисленного типа при построении нулевых выражений SMT.
  • SMTChecker: Запускать Eldarica только тогда, когда явно запрошено с помощью —model-checker-solvers eld, даже когда он присутствует в системе.

0.8.24 (25 января 2024 года)

Особенности языка:

  • Ввести глобальный block.blobbasefee для получения базовой платы за блоб текущего блока.
  • Ввести глобальную функцию. В запросе представлен текст, описывающий обновления и изменения в компиляторе Solidity.

0.8.20 (2023-05-10)

  • Особенности компилятора:

    • Ассемблер: использование push0 для размещения 0 в стеке для версий EVM, начиная с «Shanghai», что снижает затраты на развёртывание и время выполнения.
    • EVM: установка версии EVM по умолчанию на «Shanghai».
    • Поддержка версии EVM «Shanghai».
    • NatSpec: добавлена поддержка документации NatSpec в определениях enum.
    • NatSpec: добавлена поддержка документации NatSpec в определениях struct.
    • NatSpec: включение NatSpec из событий, которые генерируются контрактом, но определены вне его, в выводе userdoc и devdoc.
    • Оптимизатор: переработана упрощённая версия UnusedAssignEliminator и UnusedStoreEliminator. Она может корректно удалять некоторые неиспользуемые присваивания в глубоко вложенных циклах, которые игнорировались старой версией.
    • Парсер: унарный плюс больше не распознаётся как унарный оператор в AST и вызывает ошибку на этапе парсинга (а не позже во время анализа).
    • SMTChecker: добавлен параметр CLI --model-checker-bmc-loop-iterations и параметр JSON settings.modelChecker.bmcLoopIterations, которые определяют, сколько итераций цикла должен развернуть движок BMC. Обратите внимание, что возможны ложные срабатывания при разворачивании циклов. Это связано с тем, что значение параметра bmc loop iteration может быть меньше фактического количества итераций, необходимого для завершения цикла.
    • SMTChecker: все сообщения о неподдерживаемых языковых функциях сгруппированы в одно предупреждение. Параметр CLI --model-checker-show-unsupported и параметр JSON settings.modelChecker.showUnsupported можно включить, чтобы показать полный список.
    • SMTChecker: свойства, которые признаны безопасными, теперь явно сообщаются в конце анализа. По умолчанию отображается только количество безопасных свойств. Параметр CLI --model-checker-show-proved-safe и параметр JSON settings.modelChecker.showProvedSafe можно включить, чтобы отобразить полный список безопасных свойств.
    • Стандартный интерфейс JSON: добавлена экспериментальная поддержка импорта AST через стандартный JSON.
    • Преобразование Yul EVM-кода: если доступно, используйте push0, а не codesize, чтобы создать произвольное значение в стеке и обеспечить одинаковую высоту стека между ветвями.
  • Исправления ошибок:

    • ABI: включение событий в ABI, которые генерируются контрактом, но определены вне него.
    • Неизменяемые значения: запрет инициализации неизменяемых значений в операторах try/catch.
    • SMTChecker: исправление ложных срабатываний в тернарных операторах, содержащих цели проверки, прямо или косвенно.
  • Изменения в AST:

    • AST: добавлено поле internalFunctionIDs к узлам AST контрактов, содержащее идентификаторы функций, которые могут быть вызваны через внутренний диспетчер. Поле представляет собой карту от идентификаторов функций AST к идентификаторам функций внутреннего диспетчера. Эти идентификаторы всегда генерируются, но используются только при генерации кода через IR.
    • AST: добавлено поле usedEvents к ContractDefinition, которое содержит идентификаторы AST всех событий, генерируемых контрактом, а также всех событий, определённых и унаследованных контрактом.

0.8.19 (2023-02-22)

  • Языковые функции:

    • Разрешено определение пользовательских операторов для пользовательских типов значений с помощью синтаксиса using {f as +} for T global.
  • Функции компилятора:

    • SMTChecker: новый доверенный режим, который предполагает, что любой код, доступный во время компиляции, является фактически используемым кодом даже во внешних вызовах. Его можно использовать с помощью параметра CLI --model-checker-ext-calls trusted или поля JSON settings.modelChecker.extCalls: "trusted".
  • Исправление ошибок:

    • Ассемблер: избегание дублирования байт-кода подсборки, где это возможно.
    • Генератор кода: избегание включения ссылок на размещённую метку ссылочных функций, если они вызываются сразу же.
    • Checker на уровне контракта: правильное различение случая отсутствия аргументов базового конструктора и наличия нереализованной базовой функции.
    • SMTChecker: устранение внутренней ошибки, вызванной необработанными выражениями z3, поступающими от решателя при использовании битовых операторов. Упростите начальное смещение операций нулевой длины до нуля.

Исправления ошибок:

  • Проверка типов: исправление внутренней ошибки компилятора при назначениях кортежей с недопустимой левой частью.
  • Генерация кода Yul IR: исправление внутренней ошибки компилятора при доступе к члену .slot сопоставления через ссылку на хранилище во встроенной сборке.

Система сборки:

  • Разрешить отключение педантичных предупреждений и не рассматривать предупреждения как ошибки во время компиляции при передаче флага -DPEDANTIC=OFF в CMake.
  • Обновите Emscripten до версии 3.1.19.

0.8.16 (2022-08-08)

Важные исправления ошибок:

  • Генерация кода: исправление повреждения данных, которое влияло на ABI-кодирование значений calldata, представленных кортежами: структуры на любом уровне вложенности; списки аргументов внешних функций, событий и ошибок; списки возвращаемых значений внешних функций. 32 ведущих байта первого динамически закодированного значения в кортеже обнулялись, когда последний компонент содержал статически закодированный массив.

Функции компилятора:

  • Генератор кода: более эффективный код для проверенного сложения и вычитания.
  • Проверка типа: поддержка использования констант библиотеки в инициализаторах других констант.
  • Генерация Yul IR-кода: улучшенные процедуры копирования для массивов с упакованным макетом хранения.
  • Оптимизатор Yul: добавьте правило для преобразования mod(add(X, Y), A) в addmod(X, Y, A), если A является степенью двойки.
  • Оптимизатор Yul: добавьте правило для преобразования mod(mul(X, Y), A) в mulmod(X, Y, A), если A является степенью двойки.

Исправления ошибок:

  • Интерфейс командной строки: запретить следующие параметры вне режима компилятора: --via-ir, --metadata-literal, --metadata-hash, --model-checker-show-unproved, --model-checker-div-mod-no-slacks, --model-checker-engine, --model-checker-invariants, --model-checker-solvers, --model-checker-timeout, --model-checker-contracts, --model-checker-targets.
  • Проверка типов: исправить сбой компилятора при назначении кортежа с участием определённых шаблонов с унарными кортежами в левой части.
  • Проверка типов: исправить сбой компилятора, когда abi.encodeCall получил выражение кортежа вместо встроенного кортежа.
  • Проверка типов: исправить разыменование нулевого указателя в проверке типов abi.encodeCall свободной функции.

0.8.15 (2022-06-15)

Важное исправление ошибок:

  • Генерация кода: избегайте записи грязных байтов в хранилище при копировании массивов bytes.
  • Оптимизатор Yul: сохраните все побочные эффекты памяти блоков встроенной сборки.

Особенности языка:

  • Добавьте E.selector для неанонимного события E, чтобы получить доступ к 32-байтовому селектору темы.

Функции компилятора:

  • Языковой сервер: добавьте базовую поддержку семантического выделения.
  • Языковой сервер: добавлена поддержка настройки объекта настроек JSON include-paths, который можно передать на этапе конфигурации LSP.
  • Языковой сервер: всегда добавляйте {project_root}/node_modules к путям поиска включений.
  • Проверка типов: предупреждение о назначениях, включающих несколько записей в хранилище bytes, которые могут сделать ссылки недействительными.
  • Оптимизатор Yul: улучшение эвристик встраивания для генерации кода через IR и чистой компиляции Yul.

Исправление ошибок:

  • Кодер ABI: при кодировании пустой строки из хранилища не добавляйте лишний пустой слот для данных.
  • Устранение общих подвыражений: обрабатывайте элементы сборки порциями максимального размера 2000. Это помогает избежать чрезвычайно трудоёмких поисков во время оптимизации кода.
  • Парсер DocString: исправьте ICE, вызванный неизменяемой структурой с сопоставлением.
  • Генерация IR-кода Yul: более надёжная очистка в крайних случаях во время копирования памяти в хранилище.
  • Оптимизатор Yul: не удаляйте returndatacopy в случаях, когда он может выполнять чтения за пределами границ, которые безоговорочно возвращаются как вне газа. Ранее любой returndatacopy, записывающий в память, которая никогда не считывалась, удалялся без учёта условия выхода за границы. Только при переопределении внешних функций

Возможности компилятора:

  • Экспортёр Assembly-Json: включение списка источников в поле sourceList.
  • Интерфейс командной строки: опция «--pretty-json» работает также с опциями «--abi», «--asm-json», «--ast-compact-json», «--devdoc», «--storage-layout», «--userdoc».
  • Сервер языка: разрешить полный доступ к файловой системе для сервера языка.
  • Оптимизатор Peephole: удаление операций без побочных эффектов перед простым завершением.
  • SMTChecker: поддержка abi.encodeCall с учётом вызываемого селектора.

Исправления ошибок:

  • Экспортёр Assembly-Json: исправление экспорта assembly json для хранения типов переходов операций в поле jumpType вместо value.
  • SMTChecker: исправление совместимости ABI с z3 >=4.8.16.
  • SMTChecker: исправление ошибки, когда z3 выбран, но недоступен во время выполнения.
  • Проверка типов: правильная проверка ограничений using ... global в сочетании с библиотеками.
  • Проверка типов: преобразование параметров типа функции в то, как они будут вызываться для abi.encodeCall.

0.8.13 (2022-03-16)

Важные исправления ошибок:

  • Генератор кода: правильное кодирование литералов, используемых в abi.encodeCall, вместо аргументов фиксированных байтов.

Особенности языка:

  • Общие: разрешено аннотирование встроенного ассемблера как безопасного для памяти, чтобы разрешить оптимизации и уклонение от ограничения стека, которые полагаются на соблюдение модели памяти Solidity.
  • Общие: использование M для типа; разрешено на уровне файла, и M теперь также может быть списком свободных функций или функций библиотеки, заключённым в фигурные скобки.
  • Общие: использование ... для T global; разрешено на уровне файлов, где пользовательский тип T был определён, что приводит к тому, что эффект оператора становится доступным везде, где доступен T.

Возможности компилятора:

  • Интерфейс командной строки: разрешение использования --via-ir вместо --experimental-via-ir.
  • Компиляция через Yul IR больше не помечена как экспериментальная.
  • JSON-AST: добавлено поле селектора для ошибок и событий.
  • Сервер языка: реализует goto-определение.
  • Оптимизатор Peephole: оптимизация сравнений перед условными переходами и условных переходов через один безусловный переход.
  • Преобразование кода Yul EVM: избегание ненужных pop при завершении потока управления.
  • Генерация кода Yul IR: когда результат внешнего вызова статически определён по размеру, игнорировать любые данные возврата после размера, ожидаемого компилятором.
  • Yul Optimizer: удаление sstore и mstore операций, которые никогда не считываются.

Исправление ошибок:

  • Общее: исправление внутренней ошибки для локалей с необычными правилами капитализации. Локаль, установленная в среде, теперь полностью игнорируется.
  • Проверка типов: исправление неправильных ошибок проверки типов при импорте перегруженных функций.
  • Генерация кода Yul IR: оптимизация встроенного кода создания с правильными настройками. Это устраняет потенциальные несоответствия между кодом конструктора контракта, скомпилированного изолированно, и байт-кодом в type(C).creationCode, соответственно, байт-код, используемый для new C(...).

0.8.12 (2022-02-16)

Особенности языка:

  • Общие: добавление операторов сравнения равенства для внешних типов функций.
  • Общие: поддержка ContractName.functionName для abi.encodeCall в дополнение к указателям внешних функций.

Возможности компилятора:

  • Интерфейс командной строки: сигнатуры событий и ошибок также возвращаются при использовании --hashes.
  • Yul Optimizer: удаление mstore и sstore операций, если слот уже содержит то же значение.
  • Yul: испускание неизменяемых ссылок для чистого кода yul при запросе.

Исправление ошибок:

  • Грамматика Antlr: разрешить встроенные имена в yulPath для поддержки .address в указателях функций.

  • Генератор кода: исправить внутреннюю ошибку при доступе к членам внешних функций, занимающих более двух слотов стека.

  • Генератор кода: исправить внутреннюю ошибку при явном преобразовании из string calldata в bytes.

  • Граф потока управления: выполнить правильный виртуальный поиск модификаторов для неинициализированного анализа переменных и недоступного кода.

  • Общее: string.concat теперь правильно принимает строки в качестве аргументов и возвращает string memory. Он был случайно представлен как... Не возвращайте нулевой код выхода при сбое записи связанных файлов на диск.

  • Интерфейс командной строки: исправьте дополнительный символ новой строки, добавляемый к источникам, передаваемым через стандартный ввод, что влияет на их хэши.

  • Интерфейс командной строки: сообщайте о параметрах выбора вывода вместо того, чтобы игнорировать их.

  • Интерфейс командной строки: при связывании принимайте только точные совпадения для имён библиотек, переданных в параметр «--libraries». Имена библиотек, не начинающиеся с имени файла, используются для сопоставления любой библиотеки с таким именем.

  • SMTChecker: исправьте внутреннюю ошибку доступа к магическому типу (block, msg, tx).

  • SMTChecker: исправьте внутреннюю ошибку в механизме CHC при передаче газа в параметрах функции.

  • TypeChecker: исправьте внутреннюю ошибку при использовании массивов и структур с пользовательскими типами значений перед объявлением.

  • TypeChecker: исправьте внутреннюю ошибку при использовании пользовательских типов значений в функциях публичных библиотек.

  • TypeChecker: улучшенное сообщение об ошибке для константных переменных с (вложенными) типами отображения.

  • Yul Assembler: исправьте внутреннюю ошибку, когда имена функций не уникальны.

  • Генератор Yul IR: не выводите пустые переключатели/тела if для пустых контрактов.

Важные исправления ошибок в экспериментальных функциях:

  • Генератор Yul IR: изменения в переменных возврата функций, на которые ссылаются аргументы вызова модификатора, не были правильно переданы, если было более одной переменной возврата.

Система сборки:

  • Передавайте параметры компоновщика emscripten только при компоновке.
  • Удалите устаревший обходной путь совместимости для сборок emscripten.
  • Обновите emscripten до версии 2.0.33.

0.8.9 (2021-09-29)

Важное исправление ошибок:

  • Неизменяемые объекты: правильно выполняйте расширение знака для знаковых неизменяемых объектов.
  • Пользовательский тип значения: исправьте макет хранения пользовательских типов значений для базовых типов короче 32 байтов.

Исправления ошибок:

  • AST: экспортируйте canonicalName для UserDefinedValueTypeDefinition и ContractDefinition.

0.8.8 (2021-09-27)

Языковые функции:

  • Наследование: функция, которая переопределяет только одну интерфейсную функцию, не требует спецификатора override.
  • Система типов: поддержка type(E).min и type(E).max для перечислений.
  • Тип пользователя: позволяет создать нулевую стоимость абстракции над типом значения с более строгими требованиями к типу.

Функции компилятора:

  • Интерфейс командной строки: добавьте опцию --include-path для указания дополнительных каталогов, которые могут содержать импортируемый код (например, упакованные сторонние библиотеки).
  • Интерфейс командной строки: не запускайте неявное создание байт-кода EVM, если это не требуется для запрошенного вывода.
  • Интерфейс командной строки: нормализуйте пути, указанные в командной строке, и сделайте их относительными для файлов, расположенных внутри базового пути и/или включающих пути.
  • Иммутабельные переменные можно прочитать во время построения после инициализации.
  • SMTChecker: добавьте ограничения, чтобы лучше соотносить address(this).balance и msg.value.
  • SMTChecker: поддержка констант через модули.
  • SMTChecker: поддержка низкоуровневого вызова как внешних вызовов неизвестного кода.
  • SMTChecker: поддержка параметра value для внешних вызовов функций.
  • SMTChecker: поддержка пользовательских типов значений.

Исправление ошибок:

  • Генератор кода: исправление ICE при назначении структурам calldata и статически размерным массивам calldata в ассемблерном коде.

  • Генератор кода: используйте стабильный порядок источников для функций ABI.

  • Интерфейс командной строки: запретите опцию --experimental-via-ir в режимах Standard JSON, Assembler и Linker.

  • Интерфейс командной строки: исправление разрешения путей, занесённых в белый список с помощью --allowed-paths или неявно из-за базового пути, переназначений и компилируемых файлов. Правильно обрабатывайте пути, которые не соответствуют импорту точно из-за того, что они относительны, ненормализованы или пусты.

  • Интерфейс командной строки: сообщайте об опциях оптимизатора как о недопустимых в режимах Standard JSON и компоновщик вместо игнорирования.

  • Name Resolver: исправление, при котором при импорте псевдонима символа с использованием import {AliasedName} from "a.sol" будет использоваться исходное имя символа, а не псевдоним.

  • Оптимизатор кодов операций: предотвращение многократного запуска оптимизатора во избежание... Потенциальные различия в байт-коде для упомянутого кода.

  • Парсер: Правильно проверять наличие нескольких идентификаторов лицензий SPDX рядом друг с другом и подтверждать их.

  • SMTChecker: Исправить ограничения BMC в отношении внутренних функций.

  • SMTChecker: Устранить ложное отрицательное срабатывание, вызванное «push» на ссылки массива хранения, возвращаемые внутренними функциями.

  • SMTChecker: Устранить ложноположительное срабатывание во внешних вызовах из конструкторов.

  • SMTChecker: Устранить внутреннюю ошибку при использовании «abi.*», криптографических функций и констант из нескольких источников.

  • Стандартный JSON: Исправлять некритические ошибки в режиме Yul, которые отбрасываются, если за ними следует критическая ошибка.

  • Проверка типов: Исправление неправильного сообщения об ошибке во встроенной сборке, жалующегося на «.slot» или «.offset», которые недействительны, когда фактически используется «.length».

  • Проверка типов: Запретить объявления и определения модификаторов в интерфейсах.

  • Оптимизатор Yul: Исправить сбой в LoadResolver, когда «keccak256» имеет определённые аргументы, не являющиеся идентификаторами.

0.8.7 (2021-08-11)

Особенности языка:

  • Введение глобального «block.basefee» для получения базовой платы текущего блока.
  • Yul: введение встроенной функции «basefee()» для получения базовой платы текущего блока.

Функции компилятора:

  • AssemblyStack: также запускать оптимизатор на основе опкодов при компиляции кода Yul.
  • Интерфейс командной строки: опция «--pretty-json» работает также с «--standard-json».
  • EVM: установить версию EVM по умолчанию на «London».
  • SMTChecker: по умолчанию не проверять переполнение и недополнение.
  • SMTChecker: скрытые недоказанные цели по умолчанию, и SMTChecker только сообщает, сколько недоказанных целей существует. Их можно перечислить с помощью параметра командной строки «--model-checker-show-unproved» или параметра JSON «settings.modelChecker.showUnproved».
  • SMTChecker: новая настройка для включения/отключения кодирования деления и по модулю со свободными переменными. Параметр командной строки — «--model-checker-div-mod-slacks», а параметр JSON — «settings.modelChecker.divModWithSlacks».
  • Преобразование кода Yul EVM: также извлекать неиспользуемые слоты аргументов для функций без переменных возврата (с теми же ограничениями, что и для функций с переменными возврата).
  • Преобразование кода Yul EVM: не использовать повторно слоты стека, которые сразу становятся недоступными.
  • Оптимизатор Yul: перемещать аргументы функций и переменные возврата в память с экспериментальным ограничителем стека (который по умолчанию не включён).

Исправления ошибок:

  • Генератор кода: исправление сбоя при передаче пустой строковой литерал в «bytes.concat()».
  • Генератор кода: устранение внутренней ошибки компилятора при вызове функций, связанных со структурами и массивами calldata.
  • Генератор кода: устранение внутренней ошибки компилятора при передаче 32-байтового шестнадцатеричного литерала или нулевого литерала в «bytes.concat()», запрещая такие литералы.
  • Интерфейс командной строки: применение опции «--optimizer-runs» в режиме сборки / Yul.
  • Интерфейс командной строки: устранение сбоя при передаче пути к каталогу в «--standard-json».
  • Интерфейс командной строки: чтение JSON из стандартного ввода, когда «--standard-json» получает «-» в качестве имени файла.
  • Стандарт JSON: включение местоположения источника для ошибок в файлах с пустым именем.
  • Проверка типа: устранение внутренней ошибки и предотвращение статических вызовов к не реализованным модификаторам.
  • Генерация кода Yul: устранение внутренней ошибки компилятора при использовании длинного литерала с побитовым отрицанием.
  • Генерация кода Yul: исправление ссылок на местоположение источника для вызовов встроенных функций.
  • Разбор Yul: исправление ссылок на расположение источника для операторов «if».

0.8.6 (2021-06-22)

Особенности языка:

  • Yul: специальное значение «".metadata"» объекта данных в объекте Yul.

Исправление ошибок:

  • Граф потока управления: исправление неправильно сообщённого недостижимого кода.
  • Solc-Js: при запуске «solcjs» без флага «--optimize» используйте «settings.optimizer.enabled=false» в стандартном JSON вместо пропуска ключа.
  • Стандартный JSON: пропуск «settings.optimizer.enabled» не был эквивалентен установке его в «false». Это означало отключение также peephole-оптимизатора и средства удаления jumpdest, которые по умолчанию всё ещё работают с «enabled=false».

0.8.5 (2021-06-10)

Особенности языка:

  • Разрешение преобразования из «bytes». and bytes slices to bytes1 / ... / bytes32.

  • Yul: Добавить встроенную функцию verbatim для внедрения произвольного байт-кода.

Возможности компилятора:

  • Генератор кода: Вставлять вспомогательные функции для кодов паники вместо безусловного встраивания. Это может снизить затраты, если вставлено много паник (проверок), но может увеличить затраты там, где используется мало паник.

  • EVM: Установить версию EVM по умолчанию «Berlin».

  • SMTChecker: Определения функций можно аннотировать пользовательским тегом Natspec custom:smtchecker abstract-function-nondet, чтобы при вызове они абстрагировались недетерминированным значением.

  • Стандартный JSON / комбинированный JSON: Новый артефакт «functionDebugData», который содержит смещения байт-кода точек входа функций и потенциально больше информации в будущем.

  • Оптимизатор Yul: Оценить keccak256(a, c), когда значение в ячейке памяти a известно во время компиляции и c является константой <= 32.

Исправления ошибок:

  • AST: Не выводить значение литерала Yul, если это не допустимая строка UTF-8.

  • Генератор кода: Исправить внутреннюю ошибку, когда массивы функций присваиваются переменным хранилища, а типы функций могут быть неявно преобразованы, но не идентичны.

  • Генератор кода: Исправить внутреннюю ошибку, когда супер должен был бы пропустить нереализованную функцию в порядке виртуального разрешения.

  • Граф потока управления: Считать, что нереализованные модификаторы используют заполнитель.

  • Граф потока управления: Учитывать внутренние вызовы функций, которые всегда возвращаются, для сообщения о неиспользуемых или неназначенных переменных.

  • График вызовов функций: Исправить внутреннюю ошибку, связанную с круговыми постоянными ссылками.

  • Разрешитель имён: Не выдавать предупреждение о затенении, если затенённое имя напрямую недоступно.

  • Natspec: Разрешить несколько тегов @return в документации по общедоступным переменным состояния.

  • SMTChecker: Исправить внутреннюю ошибку при преобразовании из bytes в fixed bytes.

  • SMTChecker: Исправить внутреннюю ошибку при внешних вызовах из конструктора.

  • SMTChecker: Исправить внутреннюю ошибку в конструкторе структуры с инициализированным строковым литералом членом fixed bytes.

  • Расположение источника: Правильно установить расположение источника блоков с областью действия.

  • Стандартный JSON: Правильно разрешить настройку inliner в разделе settings.optimizer.details.

  • Проверка типов: Исправить внутреннюю ошибку компилятора, связанную с наличием типов сопоставления в параметре конструктора для абстрактных контрактов.

  • Проверка типов: Исправить внутреннюю ошибку компилятора при попытке использовать недопустимый тип внешней функции на EVM до византии.

  • Проверка типов: Исправить внутреннюю ошибку компилятора при переопределении функции получения эфира с другой функцией при наследовании.

  • Проверка типов: Превратить ошибки о (вложенном) типе сопоставления в параметрах события или ошибки в фатальные ошибки типа.

  • Проверка типов: Исправить внутреннюю ошибку компилятора при переопределении реализованного модификатора не реализованным.

Изменения в AST:

Добавить член hexValue для строк и шестнадцатеричных литералов Yul.

0.8.4 (2021-04-21)

Важные исправления ошибок:

  • Декодер ABI V2: Для двумерных массивов и специально созданных данных в памяти результат abi.decode может зависеть от данных в других частях памяти. Декодирование данных не затронуто.

Функции языка:

  • Ассемблер / Yul: Разрешены шестнадцатеричные строковые литералы.

Возможность использования bytes.concat с переменным числом аргументов bytes и bytesNN, которая ведёт себя как ограниченная версия abi.encodePacked с более описательным именем.

Поддержка пользовательских ошибок с помощью ключевого слова error и введение оператора revert.

Особенности компилятора:

  • Анализ: Правильно обнаруживать циклические ссылки на байт-код других контрактов во всех вызовах функций.

  • Интерфейс командной строки: Опция проверки модели --model-checker-targets также принимает outOfBounds.

  • Интерфейс командной строки: Новая опция проверки модели --model-checker-contracts позволяет пользователям выбирать, какие контракты следует анализировать как наиболее производные.

  • Низкоуровневый инлайнер: Встраивать обычные переходы к небольшим блокам и переходы к небольшим блокам, которые завершаются.

  • NatSpec: Разрешён тег @notice для непубличных переменных состояния и объявлений локальных переменных. Документация будет только... Быть частью АСТ, в поле «документация».

  • SMTChecker: Устаревает «pragma experimental SMTChecker» и устанавливает движок модели по умолчанию на «none».

  • SMTChecker: Отчёт о локальных переменных в контрпримерах CHC.

  • SМТChecker: Отчёт об индексе массива и фиксированных байтах вне границ.

  • SМTChecker: Поддержка функций и констант на уровне файлов.

  • Стандартный JSON: Вариант модели проверки «settings.modelChecker.targets» также принимает «outOfBounds».

  • Стандартный JSON: Опция проверки модели «settings.modelChecker.targets» принимает массив строковых целей вместо строки разделённых запятыми целей.

  • Стандартный JSON: Новая опция проверки модели «settings.modelChecker.contracts» позволяет пользователям выбирать, какие контракты должны анализироваться как наиболее производные.

  • Yul EVM Code Transform: Оптимизация стека: повторное использование слотов неиспользуемых аргументов функции и отсрочка выделения слотов стека для возвращаемых переменных до тех пор, пока не будут выполнены выражения и присваивания, которые не ссылаются на них.

  • Оптимизатор Yul: Добавлен новый шаг FunctionSpecializer, который специализирует функцию с её литеральными аргументами.

Исправления ошибок:

  • Antlr Grammar: Исправление разбора путей импорта, включая правильное различение между пустыми и непустыми строковыми литералами в целом.

  • Вывод AST: Исправление поля «kind» для «ModifierInvocation» для вызовов базового конструктора.

  • Интерфейс командной строки: Исправление внутренней ошибки при печати AST и использовании «—base-path» или префикса «file://» в импорте.

  • Интерфейс командной строки: Исправление стандартного ввода, обходящего разрешённые проверки пути.

  • Natspec: Исправление внутренней ошибки, связанной с документацией @returns для публичной переменной состояния, переопределяющей функцию.

  • SMTChecker: Исправление ложных срабатываний и пропусков на «push» как LHS составного присваивания.

  • SMTChecker: Исправление ложного срабатывания в контрактах, которые нельзя развернуть.

  • SMTChecker: Исправление внутренней ошибки в публичных геттерах, возвращающих динамические данные в старых версиях EVM, где они недоступны.

  • SMTChecker: Исправление внутренней ошибки на try-catch с вызовом функции в блоке catch.

  • Проверка типов: Исправление отсутствующей ошибки при использовании событий без оператора emit.

Изменения в АСТ:

  • Новое свойство для узлов «ContractDefinition»: «usedErrors» перечисляет все ошибки AST, используемые контрактом (даже если они определены снаружи).

Важные исправления ошибок:

  • Оптимизатор: Исправление ошибки неправильного кэширования хешей Keccak-256.

Функции компилятора:

  • Интерфейс командной строки: Отказ от экспериментальной поддержки «—machine evm15».

  • Оптимизатор: Попытка переместить «и» с постоянной внутри «или» для улучшения записи в хранилище небольших типов.

  • Оптимизатор: Замена умножений и делений степенями двойки путём сдвигов.

Исправления ошибок:

  • Импорт AST: Для конструкторов публичная видимость игнорируется во время импорта.

  • Отчёт об ошибках: Исправление обработки возврата каретки.

  • SMTChecker: Исправление внутренней ошибки в BMC при разрешении виртуальных функций внутри ветвей.

  • SMTChecker: Исправление внутренней ошибки на «array.pop», вложенной внутрь 1-кортежа.

  • SMTChecker: Исправление внутренней ошибки на константе «FixedBytes», инициализированной строковым литералом.

  • SMTChecker: Исправление внутренней ошибки на срезах массива.

  • SMTChecker: Исправление внутренней ошибки при вызове публичного геттера для переменной состояния типа массива (возможно, вложенного) структур.

  • SMTChecker: Исправление внутренней ошибки при добавлении в строку, приведённую к байтам.

  • SMTChecker: Исправление ошибки в виртуальных функциях, вызываемых конструкторами.

Изменения в АСТ:

  • ModifierInvocation: Добавление поля «kind», которое может быть «modifierInvocation» или «baseConstructorSpecifier». Когда функции передаются в качестве параметров другим вызываемым объектам, когда типы функций могут быть неявно преобразованы, но не идентичны.

  • Парсер: Правильно анализировать .address в некоторых ситуациях.

  • SMTChecker: Исправить недостающие ограничения типов для переменных блока и транзакции на этапе развёртывания.

  • Type Checker: Устранить внутреннюю ошибку, когда спецификатор переопределения не является контрактом.

  • Type Checker: Преобразовать ошибки коллизии функций в фатальные ошибки типа.

Изменения AST:

  • Добавляет nameLocation к объявлениям для представления точного местоположения символического имени.
  • Удалена избыточная функция типа «bytearraypush» — заменена на «arraypush».
  • Поддержка поля documentation для хранения комментариев NatSpec над каждым оператором.

0.8.1 (2021-01-27)

Особенности языка:

  • Возможность использовать catch Panic(uint code) для перехвата паники из-за внешнего вызова.

Возможности компилятора:

  • Генератор кода: Уменьшить стоимость <address>.code.length, используя extcodesize напрямую.
  • Интерфейс командной строки: Разрешить = в качестве разделителя между именем библиотеки и адресом в опции командной строки --libraries.
  • Интерфейс командной строки: Новая опция --model-checker-targets позволяет указать, какие цели должны быть проверены. Допустимые варианты: all, constantCondition, underflow, overflow, divByZero, balance, assert, popEmptyArray, где по умолчанию используется all. Можно выбрать несколько целей одновременно, разделяя их запятой без пробелов: underflow,overflow,assert.
  • Интерфейс командной строки: Принимать только адреса библиотек с префиксом 0x в опции командной строки --libraries.
  • Оптимизатор: Добавить правило для замены iszero(sub(x,y)) на eq(x,y).
  • Парсер: Сообщить значимую ошибку при сбое анализа версии прагмы.
  • SMTChecker: Выводить внутренние и доверенные внешние вызовы функций в трассировке транзакций контрпримера.
  • SMTChecker: Показывать msg.value в трассировках транзакций контрпримеров, если больше 0.
  • SMTChecker: Отображать имя контракта в вызовах функций контрпримера.
  • SMTChecker: Поддерживать функции ABI как неинтерпретированные функции.
  • SMTChecker: Поддерживать операторы try/catch.
  • SMTChecker: Синтезировать ненадёжные функции, вызываемые извне.
  • SMTChecker: Использовать проверенную арифметику по умолчанию и поддерживать блоки unchecked.
  • Стандартный JSON: Новая опция modelCheckerSettings.targets позволяет указывать, какие цели следует проверять. Допустимые параметры: all, constantCondition, underflow, overflow, divByZero, balance, assert, popEmptyArray, по умолчанию — all. Можно выбирать несколько целей одновременно, разделяя их запятыми без пробелов: underflow, overflow, assert.

Исправления ошибок:

  • Генератор кода: Исправление проверки длины при декодировании искажённых данных об ошибках в предложении catch.
  • Граф потока управления: Исправление отсутствующей ошибки, вызванной чтением из/записью в неинициализированные переменные.
  • SMTChecker: Исправление ложных отрицаний при переопределении модификаторов и функций.
  • SMTChecker: Исправление ложных отрицательных результатов при наличии встроенного ассемблера.
  • SMTChecker: Исправление ложных негативных результатов при анализе внешних вызовов функций.
  • SMTChecker: Исправление внутренней ошибки на block.chainid.
  • SMTChecker: Исправление внутренней ошибки при добавлении строкового литерала в массив bytes.
  • SMTChecker: Исправление недостающих ограничений типов для переменных блоков.
  • Тип Checker: Исправление бесконечного цикла при доступе к круговым константам из встроенного ассемблера.
  • Тип Checker: Исправление внутренней ошибки, вызванной константными структурами, содержащими сопоставления.
  • Система типов: Запретить неявное преобразование из uintN в intM, когда M > N, и, соответственно, явное преобразование между теми же типами также запрещено.

Система сборки:

  • Обновите сборку soljson.js до emscripten 2.0.12 и boost 1.75.0.

0.8.0 (2020-12-16)

Критические изменения:

  • Генератор кода: Вся арифметика проверяется по умолчанию. Эти проверки можно отключить с помощью unchecked { ... }.

  • Генератор кода: Вызывать панику, если доступ к байтовому массиву в хранилище осуществляется неправильно.

  • Генератор кода: Использовать revert с сигнатурой ошибки Panic(uint256) и... Ошибки вместо неверного кода операции при сбое утверждений.

  • Интерфейс командной строки: поля JSON abi, devdoc, userdoc и storage-layout теперь являются подобъектами, а не строками.

  • Интерфейс командной строки: удалить опцию --old-reporter.

  • Интерфейс командной строки: удалить устаревшую опцию --ast-json. Теперь поддерживается только опция --ast-compact-json.

  • Общие настройки: включить по умолчанию кодер ABI версии 2.

  • Общие настройки: удалить глобальные функции log0, log1, log2, log3 и log4.

  • Парсер: возведение в степень является правоассоциативным. Выражение a**b**c анализируется как a**(b**c).

  • Сканер: удалить поддержку escape-последовательностей \b, \f и \v.

  • Стандартный JSON: удалить параметр legacyAST.

  • Проверка типов: параметры вызова функций можно указывать только один раз.

  • Система типов: запретить объявления с именами this, super и _, за исключением публичных функций и событий.

  • Система типов: запретить msg.data в функции receive().

  • Система типов: запретить тип (super).

  • Система типов: запретить перечисления с более чем 256 членами.

  • Система типов: запретить явные преобразования из отрицательных литералов и литералов, превышающих type(uint160).max, в тип address.

  • Система типов: запретить тип byte. Он был псевдонимом для bytes1.

  • Система типов: явное преобразование к типу address всегда возвращает не подлежащий оплате тип address. В частности, address(u), address(b), address(c) и address(this) имеют тип address, а не address payable (здесь u, b и c — произвольные переменные типа uint160, bytes20 и контрактного типа соответственно).

  • Система типов: явные преобразования между двумя типами запрещены, если они одновременно изменяют более одного знака, ширины или вида.

  • Система типов: явные преобразования литералов в перечисления разрешены только в том случае, если значение соответствует перечислению.

  • Система типов: явные преобразования литералов в целочисленный тип так же строги, как и неявные преобразования.

  • Система типов: ввести address(...).code для получения кода как bytes memory. Размер можно получить через address(...).code.length, но в настоящее время он всегда включает копирование кода.

  • Система типов: ввести block.chainid для получения текущего идентификатора цепочки.

  • Система типов: поддержка address(...).codehash для получения хэш-кода кода учётной записи.

  • Система типов: глобальные переменные tx.origin и msg.sender имеют тип address, а не address payable.

  • Система типов: унарный минус можно использовать только для целых чисел со знаком, но не для целых чисел без знака.

  • Проверяющий элемент «View Pure Checker»: пометить chainid как просмотр.

  • Yul: запретить использование зарезервированных идентификаторов, таких как инструкции EVM, даже если они недоступны в данном диалекте / версии EVM.

  • Yul: встроенный assignimmutable в диалекте «EVM с объектами» принимает базовый адрес модифицируемого кода в качестве дополнительного аргумента.

Особенности языка:

  • Суперконструкторы теперь можно вызывать с помощью обозначения члена, например M.C(123).

Исправления ошибок:

  • Проверка типов: выполнение правильной усекающей целочисленной арифметики при использовании констант в выражениях длины массива.

Изменения AST:

  • Новый узел AST IdentifierPath, заменяющий во многих местах UserDefinedTypeName.

  • Новый узел AST UncheckedBlock, используемый для unchecked { ... }.

0.7.6 (2020-12-16)

Особенности языка:

  • Генератор кода: поддержка преобразования фрагментов данных calldata в массивы памяти и хранения.

  • Генератор кода: поддержка копирования динамически закодированных структур из calldata в память.

  • Генератор кода: поддержка копирования вложенных массивов из calldata в память.

  • Сканер: генерация ошибки парсера, когда комментарии или строки Unicode содержат несбалансированный или недостаточный набор маркеров переопределения направления Unicode (LRO, RLO, LRE, RLE, PDF).

  • Функция fallback теперь также может иметь единственный аргумент calldata (равный msg.data) и возвращать bytes memory (который не будет кодироваться ABI, а будет возвращён как есть).

  • Wasm backend: добавить инструкции i32.select и i64.select. Система сборки:

  • Дополнительно поддерживать динамическую загрузку Z3 и использовать этот механизм для сборок релизов в Linux.

Генератор кода:

  • Избегать выделения памяти для значения по умолчанию, если оно не используется.

SMTChecker:

  • Применять постоянную оценку к двоичным арифметическим выражениям.
  • Создавать цели проверки на переполнение и недополнение при инкременте/декременте в механизме CHC.
  • Сообщать о значениях структур в контрпримерах из механизма CHC.
  • Поддерживать досрочное завершение в механизме CHC.
  • Поддерживать геттеры.
  • Поддерживать именованные аргументы в вызовах функций.
  • Поддерживать конструктор структур.

Standard-Json:

  • Переместить недавно введённый ключ modelCheckerSettings в settings.modelChecker.
  • Правильно фильтровать запрошенные выходные артефакты.

Исправления ошибок:

Генератор кода:

  • Не дополнять пустые строковые литералы одним 32-байтным нулевым полем в кодировщике ABI версии 1.

NatSpec:

  • Исправить ошибку сегментации при наследовании документации параметров возврата для модификаторов без параметров.

SMTChecker:

  • Исправлять приведение строковых литералов к байтовым массивам.
  • Исправлена внутренняя ошибка компилятора при выполнении побитового составного присваивания со строковыми литералами.
  • Исправлена внутренняя ошибка при попытке создания контрпримеров с использованием старого z3.
  • Исправлена ошибка сегментации, которая могла возникнуть в определённых источниках с поддержкой SMT, когда SMT-решатель был недоступен.
  • Исправлена внутренняя ошибка, возникающая при использовании bytes.push() в качестве LHS присваивания.

Type Checker:

  • «super» недоступен в библиотеках.
  • Запретить ведущие нули в типах с определённым размером (например, bytes000032), но разрешить их использование в качестве идентификаторов.

Yul Optimizer:

  • Устранена ошибка в NameSimplifier, из-за которой новое имя, созданное NameSimplifier, также могло быть создано NameDispenser.
  • Удалено NameSimplifier из доступных пользователям шагов оптимизации.

0.7.5 (2020-11-18)

Языковые функции:

  • Возможность выбора кодировщика abi с помощью прагм abicoder v1 и abicoder v2.
  • Встроенное ассемблерное программирование: использование .offset и .length для переменных calldata типа динамического массива для доступа к их смещению и длине calldata (количество элементов). Оба они также могут быть назначены.
  • Константные переменные с числовыми значениями считаются чистыми.

Функции компилятора:

  • Ассемблер: выполнение компоновки в режиме ассемблирования при предоставлении адресов библиотек.
  • Интерфейс командной строки: новая опция --experimental-via-ir позволяет переключать процесс компиляции на прохождение через промежуточное представление Yul. Это экспериментальная функция, используемая для целей разработки.
  • Интерфейс командной строки: новая опция --model-checker-timeout устанавливает тайм-аут в миллисекундах для каждого отдельного запроса, выполняемого SMTChecker.
  • Интерфейс командной строки: сообщать об ошибке, если файл не удалось прочитать в режиме --standard-json.
  • Интерфейс командной строки: правильно сообщать об ошибках для каждого выходного файла, который не удалось записать. Ранее при первой ошибке генерировалось исключение, и выполнение прерывалось.

SMTChecker:

  • Добавить проверку деления на ноль в механизме CHC.
  • Более точный анализ внешних вызовов с использованием this.
  • Поддержка selector для выражений со значением, известным во время компиляции.
  • Standard JSON: новая опция modelCheckerSettings.timeout устанавливает тайм-аут в миллисекундах для каждого отдельного запроса, выполняемого SMTChecker.
  • Standard JSON: новая опция settings.viaIR позволяет использовать тот же переключатель, что и --experimental-via-ir в командной строке.

Исправления ошибок:

  • Генератор кода: исправить отсутствие отслеживания зависимостей создания для абстрактных контрактов.

  • Интерфейс командной строки: исправить ошибку записи, когда каталог, переданный в --output-dir, заканчивается косой чертой.

  • Интерфейс командной строки: отклонить повторяющиеся библиотеки в опции --libraries вместо произвольного выбора одной из них.

  • NatSpec: исправить внутреннюю ошибку при наследовании документации параметра возврата, но имена параметров различаются между базовым и унаследованным.

  • SMTChecker: исправить ложные срабатывания CHC при использовании ветвей внутри модификаторов. Модификатор применяется несколько раз.

  • SMTChecker: исправление некорректных контрпримеров, о которых сообщил механизм CHC.

  • SMTChecker: устранение внутренней ошибки в механизме BMC при унаследованном контракте из другого исходного модуля, имеющего частные переменные состояния.

  • SMTChecker: устранение внутренней ошибки при преобразовании из строкового литерала в байт.

  • SMTChecker: устранение внутренней ошибки, когда «array.push()» используется в качестве LHS присваивания.

  • SMTChecker: устранение внутренней ошибки при назначении переменной состояния через имя контракта.

  • SMTChecker: устранение внутренней ошибки при использовании кортежей рациональных литералов внутри условного оператора.

  • SMTChecker: устранение недостатка сообщений о потенциальных нарушениях при использовании только механизма CHC.

  • Стандартный JSON: исправление адресов библиотек, указанных в «libraries», которые используются для связывания, даже если имена файлов не совпадают.

Изменения AST:

  • Новый член «суффикс» для идентификаторов встроенной сборки. В настоящее время поддерживаются значения «slot», «offset» и «length» для доступа к компонентам переменной Solidity.

0.7.4 (2020-10-19)

Важные исправления ошибок:

  • Генератор кода: исправление ошибки повреждения данных при копировании пустых байтовых массивов из памяти или calldata в хранилище.

Функции языка:

  • Можно определять константы на уровне файла.

Возможности компилятора:

  • Интерфейс командной строки: новая опция «--model-checker-engine» позволяет выбрать конкретный механизм SMTChecker. Варианты: «all» (по умолчанию), «bmc», «chc» и «none».
  • Граф потока управления: печать предупреждения для непустых функций с неназванными параметрами возврата, которым не присвоено значение во всех путях кода.
  • SMTChecker: поддержка «keccak256», «sha256», «ripemd160» и «ecrecover» в механизме CHC.
  • SMTChecker: поддержка встроенных массивов.
  • SMTChecker: поддержка переменных «block», «msg» и «tx» в механизме CHC.
  • Стандартный JSON: новая опция modelCheckerSettings.engine позволяет выбрать конкретный механизм SMTChecker. Варианты: «all» (по умолчанию), «bmc», «chc» и «none».

Исправления ошибок:

  • Генератор кода: исправить прагму ABIEncoderV2 из текущего модуля, влияющую на унаследованные функции и применяемые модификаторы.
  • Генератор кода: устранить внутреннюю ошибку компилятора при ссылке на элементы через имя модуля, но без использования ссылки.
  • Генератор кода: устранить внутреннюю ошибку при возврате структур, содержащих сопоставления из библиотечной функции.
  • Генератор кода: использовать возврат вместо недопустимого кода операции для доступа к индексу массива вне границ в геттере.
  • Проверка уровня контракта: добавить отсутствующую проверку наследования функций с типами возврата ABIEncoderV2 в контрактах ABIEncoderV1.
  • Разрешитель имён: исправить предупреждения о затенении/одинаковых именах для более поздних объявлений.
  • Тип проверки: разрешить массивы типов контрактов в качестве выражений типов и в качестве аргументов для «abi.decode».
  • Тип проверки: запретить недопустимое использование имён библиотек в качестве имени типа.
  • Тип проверки: устранить внутреннюю ошибку компилятора, вызванную параметрами хранилища с вложенными сопоставлениями в библиотеках.

0.7.3 (2020-10-07)

Важное исправление ошибок:

  • Генератор кода: правильно очистить после копирования динамического массива в хранилище для упакованных типов.

Особенности компилятора:

  • Генератор кода: реализованы события с типом функции в качестве одного из индексированных параметров.
  • Общее: возможность остановить компиляцию после этапа анализа. Может использоваться с «solc --stop-after parsing».
  • Оптимизатор: оптимизировать «exp», когда основание равно «-1».
  • SMTChecker: поддерживать «addmod» и «mulmod».
  • SMTChecker: поддерживать срезы массивов.
  • SMTChecker: поддерживать преобразования типов.

Исправление ошибок:

  • Исправлены внутренние ошибки компилятора для определённых контрактов, связанных с выражением «new».
  • JSON AST: исправлена внутренняя ошибка при использовании «--ast-json» для функции с аргументами памяти в контрактах ABIEncoderV2.
  • Тип проверки: добавлены недостающие проверки для вызовов с использованием типов, несовместимых с ABIEncoderV1, в модулях, где ABIEncoderV2 не включён.
  • Тип проверки: устранена внутренняя ошибка компилятора при вызове «.push()» для массива хранения с вложенным сопоставлением.

0.7.2 (2020-09-28)

Важное исправление ошибок:

  • Тип проверки: запрещение двух или более свободных функций с одинаковыми именами (потенциально импортированными и псевдонимами) и типами параметров. Компилятор

  • Экспорт сгенерированных компилятором служебных источников через standard-json или combined-json.

Оптимизатор

  • Оптимизация exp, когда основание равно 0, 1 или 2.

SMTChecker

  • Сохраняет знания о строковых литералах даже после присваивания и, таким образом, правильно поддерживает свойство .length.
  • Поддерживает преобразование типа address с помощью литералов, например address(0).
  • Поддерживает revert().
  • Поддерживает type(T).min, type(T).max и type(I).interfaceId.
  • Поддерживает операторы and, or и xor.
  • Поддерживает события и низкоуровневые логи.
  • Поддерживает доступ к фиксированным байтам индекса.
  • Поддерживает выделение памяти, например new bytes(123).
  • Поддерживает сдвиги.
  • Поддерживает структуры.

Проверка типов

  • Объясняет, почему слишком длинные шестнадцатеричные строковые литералы нельзя явно преобразовать в более короткий тип bytesNN.
  • Предоставляет более подробные сообщения об ошибках при сбое неявных преобразований.
  • Сообщает о позиции первой недопустимой последовательности UTF-8 в литералах unicode.

Генератор Yul IR

Сообщает об исходном местоположении, связанном с нереализованными функциями.

Yul Optimizer

  • Встраивает функции в функции дальше по графу вызовов.
  • Удаляет неиспользуемые параметры в функциях.
  • Пытается упростить имена функций.

Исправления ошибок

  • Генератор кода: исправляет внутреннюю ошибку при удалении динамических типов из возвращаемых параметров в версиях EVM без RETURNDATACOPY.
  • Проверка типов: добавляет отсутствующую проверку против вложенных динамических массивов в функциях кодирования ABI при отключении ABIEncoderV2.
  • Проверка типов: исправляет сообщение об ошибке для недопустимого именованного параметра в вызове, чтобы оно относилось к правильному аргументу.
  • Проверка типов: запрещает virtual для модификаторов в библиотеках.
  • Разрешение имён: исправляет предупреждение для одноимённых, но не затеняющих объявлений.
  • Система типов: исправляет внутреннюю ошибку неявного преобразования экземпляра контракта в тип его super.
  • Система типов: исправляет внутреннюю ошибку неявного преобразования строкового литерала в строку calldata.
  • Система типов: устраняет неправильное сопоставление именованных параметров в перегруженных вызовах функций и событий, если порядок отличается от объявления.
  • ViewPureChecker: предотвращает проверку видимости конструкторов.

0.7.1 (2020-09-02)

Языковые функции

  • Разрешает определения функций вне контрактов, которые ведут себя подобно внутренним функциям библиотеки.
  • Генератор кода: реализует копирование структур из calldata в хранилище.

Компилятор

  • SMTChecker: добавляет переполнение и переполнение как условия проверки в механизме CHC.
  • SMTChecker: поддерживает побитовые операции or, xor и not.
  • SMTChecker: поддерживает условный оператор.
  • Стандартный интерфейс JSON: не запускает генерацию байткода EVM, если запрашивается только вывод Yul IR или EWasm.
  • Yul Optimizer: LoopInvariantCodeMotion может перемещать операции чтения за пределы циклов for, пока затронутая область не изменяется внутри цикла.
  • Yul: сообщает об ошибке при использовании нестроковых литералов для datasize(), dataoffset(), linkersymbol(), loadimmutable() и setimmutable().

Исправление ошибок

  • AST: удаляет значения членов null, даже когда компилятор используется в режиме standard-json.

  • Общие: разрешает type(Contract).name для абстрактных контрактов и интерфейсов.

  • Неизменяемые объекты: запрещают присваивать неизменяемым объектам более одного раза во время их объявления.

  • Неизменяемые объекты: правильно обрабатывают сложное присваивание и инкремент/декремент как чтение и запись и, следовательно, запрещают это везде для неизменных переменных.

  • Оптимизатор: сохраняет побочные эффекты x в byte(a, shr(b, x)), даже если константы a и b сделали бы выражение равным нулю безоговорочно. Это правило оптимизатора очень сложно, если вообще возможно, вызвать таким образом, чтобы это привело к недопустимому коду.

  • Ссылки Resolver: исправляет внутреннюю ошибку при использовании конструктора для библиотеки.

  • Сканер: исправляет ошибку, из-за которой пробелы допускались в токене -> (например, function f() - > x {} становится недействительным в ассемблере и Yul).

  • SMTChecker: исправляет внутреннюю ошибку в BMC. Функция встраивания.

  • SMTChecker: исправление внутренней ошибки при неявном преобразовании массива.

  • SMTChecker: исправление внутренней ошибки при доступе к индексу фиксированных байтов.

  • SMTChecker: исправление внутренней ошибки с унарными операторами lvalue и кортежами.

  • SMTChecker: исправление внутренней ошибки при назначении кортежей.

  • SMTChecker: исправление внутренней ошибки для кортежей из одного элемента, имеющих тип кортежа.

  • SMTChecker: исправление ошибки при использовании импортированного кода.

  • SMTChecker: обеспечение надёжности операции «pop» для массива.

Проверка типов:

  • запрет использования директивы «using for» внутри интерфейсов;
  • запрет использования знаковых литералов в качестве показателя степени в операторе возведения в степень;
  • запрет структур, содержащих вложенные отображения в памяти, в качестве параметров для библиотечных функций.

Оптимизатор Yul:

  • обеспечение того, чтобы ключевые слова Yul не использовались ошибочно NameDispenser и VarNameCleaners (ошибка может привести к невозможности компиляции кода);
  • повышение устойчивости порядка встраивания функций к наличию или отсутствию несвязанных исходных файлов.

0.7.0 (2020-07-28)

Изменения:

  • встраивание ассемблера: запрет точки («.») в именах пользовательских функций и переменных;
  • доступ к слоту и смещению переменной указателя хранилища «x» осуществляется через «x.slot» и «x.offset» вместо «x_slot» и «x_offset»;
  • маркировка шестнадцатеричных строковых литералов с помощью «kind: "hexString"»;
  • удаление членов со значением null из вывода JSON;
  • запрет «gwei» в качестве идентификатора;
  • запрет синтаксиса точек для «value» и «gas»;
  • запрет непечатаемых символов в строковых литералах;
  • введение строковых литералов Unicode: «unicode"😃"»;
  • разрешение комментариев NatSpec только для общедоступных переменных состояния;
  • исключение деноминаций «finney» и «szabo»;
  • замена идентификатора «now» на «block.timestamp»;
  • влияние «using A for B» только на контракт, в котором оно упоминается, а не на все производные контракты;
  • запрет virtual для библиотечных функций;
  • запрет присваивания переменным состояния, содержащим вложенные сопоставления;
  • запрет событий с одинаковыми именами и типами параметров в иерархии наследования;
  • запрет сдвигов по знаковым типам;
  • запрет структур и массивов в памяти или calldata, если они содержат вложенные сопоставления;
  • возведение в степень и сдвиги литералов по нелитералам всегда будут использовать «uint256» или «int256» в качестве типа;
  • запрет последовательных и конечных точек в идентификаторах (начальные точки уже запрещены);
  • запрет EVM-инструкции pc().

Особенности языка:

  • наследование: разрешение переопределения для более строгой изменчивости состояния: view может переопределить nonpayable, а pure — view;
  • парсер: устаревание видимости для конструкторов;
  • изменчивость состояния: не выдавать рекомендации по более строгой изменчивости для виртуальных функций, но выдавать их для функций, которые переопределяют.

Функции компилятора:

  • SMTChecker: сообщение о контрпримерах с несколькими транзакциями, включая вызовы функций, инициирующие транзакции (не включает конкретные значения для ссылочных типов и реентерабельных вызовов).
  • Переменные, объявленные с использованием ключевого слова var, больше не распознаются.

Исправления ошибок:

  • неизменяемые объекты: исправление внутренней ошибки компилятора, когда неизменяемым объектам не присвоено значение;
  • наследование: запрет публичных переменных состояния, перезаписывающих функции pure;
  • NatSpec: согласованный вывод userdoc для конструкторов и функций;
  • SMTChecker: исправление внутренней ошибки при присвоении значения 1-кортежу;
  • SMTChecker: исправление внутренней ошибки, когда кортежи имеют лишние бессодержательные скобки;
  • изменчивость состояний: постоянные общедоступные переменные состояния считаются функциями pure;
  • проверка типов: устранение проблем с выводом при вызове функций с именованными аргументами.

0.6.12 (2020-07-22)

Особенности языка:

  • NatSpec: реализация тега @inheritdoc для копирования документации из определённого базового контракта.
  • Wasm backend: добавление i32.ctz, i64.ctz, i32.popcnt и i64.popcnt.

Функции компилятора: нет информации. Генератор кода: избегайте двойной очистки при копировании в память.

  • Генератор кода: оценивайте «keccak256» строковых литералов во время компиляции.
  • Оптимизатор: добавьте правило для удаления сдвигов внутри байт-кода операции.
  • Оптимизатор Peephole: добавьте правило, чтобы удалить обмен после дублирования.
  • Оптимизатор Peephole: удалите ненужное маскирование тегов.
  • Yul EVM Code Transform: освободите слоты стека сразу после посещения правой части объявлений переменных, а не только в конце оператора.

Исправления ошибок:

  • SMTChecker: исправление ошибки в событиях с индексами статического массива.
  • SMTChecker: устранение внутренней ошибки при последовательном хранении массивов (push().push()).
  • SMTChecker: устранение внутренней ошибки при использовании побитовых операторов над типом фиксированных байтов.
  • SMTChecker: устранение внутренней ошибки при использовании составных побитовых операций присваивания на индексах массивов внутри ветвей.
  • Type Checker: устранение внутренней ошибки компилятора, связанной с типами большого размера.
  • Type Checker: исправление разрешения перегрузки в сочетании с {value: ...}.

Система сборки:

  • Обновите внутреннюю зависимость jsoncpp до версии 1.9.3.

0.6.11 (2020-07-07)

Языковые функции:

  • Общие: добавление единицы измерения «gwei».
  • Yul: поддержка встроенного «linkersymbol» в автономном режиме сборки для ссылки на адреса библиотек.
  • Yul: поддержка использования строковых литералов длиной более 32 байт в качестве аргументов для встроенных функций.

Функции компилятора:

  • NatSpec: добавление полей «kind» и «version» к выводу JSON.
  • NatSpec: наследование тегов от уникальных базовых функций, если производная функция их не предоставляет.
  • Интерфейс командной строки: предотвращение совместного использования несовместимых параметров командной строки.
  • NatSpec: поддержка комментариев NatSpec для событий.
  • Yul Optimizer: сохранение знаний о хранилище/памяти после a := sload(x) / a := mload(x).
  • SMTChecker: поддержка внешних вызовов неизвестного кода.
  • Исходные карты: также помечайте переходы в функции Yul и из них как переходы в и из функций.

Исправление ошибок:

  • NatSpec: не рассматривайте «////» и «/***» как комментарии NatSpec.
  • Проверка типов: запретить конструкторы с расположением данных «calldata».
  • Проверка типов: не запрещать присваивание переменным calldata.
  • Проверка типов: исправление внутренней ошибки, связанной с использованием «using for» для небиблиотек.
  • Wasm backend: исправление генерации кода для циклов for с предварительными операторами.
  • Wasm backend: правильная поддержка i32.drop и i64.drop, удаление drop.
  • Yul: запрет на использование одной и той же переменной несколько раз в левой части присваивания.
  • Yul: исправление исходного местоположения многозначного присваивания переменной.

0.6.10 (2020-06-11)

Важные исправления ошибок:

  • Исправлена ошибка, связанная с внутренними библиотечными функциями с параметрами calldata, вызываемыми через «using for».

Функции компилятора:

  • Интерфейс командной строки: перегруппировка экрана справки.
  • Вывод кодов ошибок компиляции в стандартном формате JSON и при использовании «--error-codes».
  • Yul: предупреждение для операторов switch, которые имеют только значение по умолчанию и никаких других случаев.

Исправление ошибок:

  • SMTChecker: исправление внутренней ошибки при кодировании кортежей кортежей.
  • SMTChecker: исправление надёжности псевдонимов после нажатия на указатель массива.
  • Система типов: исправление внутренней ошибки компилятора при внешнем вызове функции, возвращающей переменные с расположением calldata.
  • Система типов: исправление ошибки, когда связанная функция не была найдена, если «using for» применяется к явным ссылочным типам.

0.6.9 (2020-06-04)

Языковые функции:

  • Разрешить расположение calldata для всех переменных.
  • NatSpec: поддержка комментариев NatSpec для переменных состояния.
  • Yul: инструкция EVM «pc()» помечена как устаревшая и будет удалена в следующем критическом выпуске.

Функции компилятора:

  • Система сборки: обновление сборки soljson.js до emscripten 1.39.15 и boost 1.73.0 и включение Z3 для интегрированной поддержки SMTChecker без механизма обратного вызова.

  • Система сборки: переключение сборки emscripten с бэкэнда fastcomp на бэкэнд upstream.

  • Генератор кода: не создавайте новые внутренние исходные ссылки для небольших подпрограмм компилятора.

  • Интерфейс командной строки: добавлен новый параметр «—base-path PATH», чтобы использовать указанный путь в качестве корня. source tree (по умолчанию корневой каталог файловой системы)

  • SMTChecker: Поддержка массива «length».

  • SMTChecker: Поддержка массивов «push» и «pop».

  • SMTChecker: Общая поддержка BitVectors и побитового оператора «and».

Исправления ошибок:

  • Генератор кода: Инициирование соответствующих ошибок при реализации определённых операций копирования массивов.
  • Интерфейс командной строки: Устранение внутренней ошибки при использовании опций «—assemble» или «—yul» с «—machine ewasm», но без указания «—yul-dialect».
  • NatSpec: Блок DocString завершается при обнаружении пустой строки.
  • Оптимизатор: Исправление ошибки в BlockDeDuplicator.
  • Сканер: Исправление ошибки, когда два пустых комментария NatSpec приводят к сканированию после EOL.
  • SMTChecker: Исправление внутренней ошибки в предложениях try/catch с параметрами.
  • SMTChecker: Исправление внутренней ошибки при применении арифметических операторов к переменным с фиксированной точкой.
  • SMTChecker: Исправление внутренней ошибки при назначении доступа к индексу внутри ветвей.
  • SMTChecker: Исправление внутренней ошибки при коротком замыкании булевых выражений с вызовами функций в инициализации переменных состояния.
  • Проверка типов: Запрет присваивания переменным хранения типа «mapping».
  • Проверка типов: Запрет встроенных массивов неименованных типов.
  • Проверка типов: Запрещение использования override с непубличными переменными состояния.
  • Проверка типов: Исправление внутренней ошибки компилятора при доступе к членам срезов массивов.
  • Проверка типов: Исправление внутренней ошибки компилятора при прямой ссылке на нелитеральные константы из встроенной сборки.
  • Проверка типов: Исправление внутренней ошибки компилятора при попытке декодировать слишком большие статические массивы.
  • Проверка типов: Исправление неправильной ошибки компилятора при обращении к переопределённой функции без её вызова.

0.6.8 (2020-05-14)

Важные исправления ошибок:

  • Добавление отсутствующей проверки callvalue в код создания контракта, который не определяет конструктор, но имеет базу, которая определяет конструктор.
  • Запрет срезов массивов для массивов с динамически закодированными базовыми типами.
  • Строковые литералы, содержащие символы обратной косой черты, больше не могут вызывать генерацию неправильного кода при передаче непосредственно вызовам функций или функциям кодирования, когда ABIEncoderV2 активен.

Функции языка:

  • Реализованы «type(T).min» и «type(T).max» для каждого целочисленного типа T, которые возвращают наименьшее и наибольшее значение, представляемое типом.

Особенности компилятора:

  • Интерфейс командной строки: Не игнорировать «—yul-optimizations» в режиме сборки.
  • Разрешить использование функций кодирования abi для срезов массива calldata без явных приведений.
  • Вывод двоичного файла Wasm: Реализовать «br» и «br_if».

Исправления ошибок:

  • ABI: Пропускать конструкторы «private» или «internal».
  • Исправлена ошибка «Assembly Exception in Bytecode», где запрошенные функции были сгенерированы дважды.
  • Natspec: Исправлена ошибка, игнорировавшая тег «@return», когда другие теги документации разработчика отсутствовали.
  • Проверка типов: Проверяет, является ли литеральный показатель степени в операции «**» слишком большим или дробным.
  • Проверка типов: Запретить доступ к «runtimeCode» для типов контрактов, содержащих неизменяемые переменные состояния.
  • Ассемблер Yul: Исправить исходное местоположение объявлений переменных без значения.

0.6.7 (2020-05-04)

Возможности языка:

  • Добавить поддержку идентификаторов интерфейса EIP 165 с помощью type(I).interfaceId.
  • Разрешить виртуальные модификаторы внутри абстрактных контрактов иметь пустое тело.

Компиляторные особенности:

  • Оптимизатор: Упростить повторяющиеся операции AND и OR.
  • Стандартный ввод Json: Поддерживать префикс «file://» в поле «urls».
  • Добавьте опцию для указания шагов оптимизации, выполняемых оптимизатором Yul, с помощью «—yul-оптимизаций» в интерфейсе командной строки или optimizer.details.yulDetails.optimizerSteps в стандартном json.

Исправление ошибок:

  • SMTChecker: Исправить внутреннюю ошибку при использовании фиксированных точек.

  • SMTChecker: Исправить внутреннюю ошибку при использовании срезов массивов.

  • Проверка типов: запретить «virtual» и «override» для конструкторов.

  • Проверка типов: исправить несколько внутренних ошибок, выполняя проверки размера и рекурсивности типов перед полной проверкой типов.

  • Проверка типов: исправление внутренней ошибки при присвоении пустым кортежам.

  • Проверка типов: исправление внутренних ошибок. Ошибки при применении унарных операторов к кортежам с пустыми компонентами.

  • Проверка типов: Выполнить проверку рекурсивности для структур, объявленных на уровне файла.

Система сборки:

  • soltest.sh: SOLIDITY_BUILD_DIR больше не является относительным к REPO_ROOT, чтобы разрешить создание каталогов сборки вне исходного дерева.

0.6.6 (2020-04-09)

Важные исправления ошибок:

  • Исправить назначения кортежей с компонентами, занимающими несколько слотов стека и разным размером стека слева и справа.

Исправления ошибок:

  • Экспорт AST: Экспортировать свойство immutable в поле mutability.
  • SMTChecker: Исправить внутреннюю ошибку в механизме CHC при внутреннем вызове унаследованных функций.
  • Проверка типов: Ошибка при попытке кодировать функции с установленными параметрами вызова gas и value.

0.6.5 (2020-04-06)

Важное исправление ошибок:

  • Генератор кода: Ограничить длину динамических массивов памяти до 64 бит во время создания во время выполнения, устраняя возможный переполнение.

Особенности языка:

  • Разрешить объявлять локальные переменные хранения без инициализации, если они назначены перед доступом.
  • Переменные состояния могут быть помечены как immutable, что делает их доступными только для чтения, но присваиваемыми в конструкторе. Значение будет храниться непосредственно в коде.

Возможности компилятора:

  • Интерфейс командной строки: Включить вывод макета хранилища с помощью --storage-layout.
  • Метаданные: Добавлена поддержка IPFS-хэшей больших файлов, которые необходимо разделить на несколько фрагментов.

Исправление ошибок:

  • Наследование: Разрешить публичным переменным состояния переопределять функции с динамическими типами памяти в возвращаемых значениях.
  • Встроенная сборка: Исправить внутреннюю ошибку при доступе к недопустимым константным переменным.
  • Встроенная сборка: Исправить внутреннюю ошибку при обращении к функциям.
  • JSON AST: Всегда добавлять суффикс указателя для ссылочных типов памяти.
  • Резолвер ссылок: Исправить внутреннюю ошибку при доступе к недопустимым членам структуры.
  • Проверка типов: Исправить внутренние ошибки при назначении вложенных кортежей.

0.6.4 (2020-03-10)

Особенности языка:

  • Общие: Устарело значение (...) и газ (...) в пользу {значение: ...} и {газ: ...}.
  • Встроенная сборка: Разрешить присваивание _slot локальных переменных-указателей хранилища.
  • Встроенная сборка: Выполнить анализ потока управления для встроенной сборки. Позволяет устанавливать возврат хранилища только в сборке.

Функции компилятора:

  • AssemblyStack: Поддержка исходных местоположений (сопоставлений источников) и, следовательно, отладка источников Yul.
  • Интерфейс командной строки: Включение вывода экспериментального оптимизированного IR через --ir-optimized.

Исправление ошибок:

  • Наследование: Исправление некорректной ошибки при вызове нереализованных базовых функций.
  • Резолвер ссылок: Исправление проблемы области видимости после операторов try/catch.
  • Стандартный интерфейс JSON: Исправление ошибки, связанной с пустыми именами файлов и импортами.
  • SMTChecker: Исправление внутренних ошибок при анализе кортежей.
  • Импорт Yul AST: Правильный импорт блоков в виде операторов, операторов switch и строковых литералов.

0.6.3 (2020-02-18)

Особенности языка:

  • Разрешить типы контрактов и перечисления в качестве ключей для сопоставлений.
  • Разрешить использование селекторов функций в качестве констант времени компиляции.
  • Сообщать о расположении источника для структурированных ошибок документации.

Функции компилятора:

  • AST: Добавить новый узел для документирования в стиле doxygen, структурированной документации, которая может быть получена определениями контракта, функции, события и модификатора.
  • Генератор кода: Использовать calldatacopy вместо codecopy для обнуления памяти после ввода.
  • Отладка: Предоставить строки причин для внутренних возвратов, сгенерированных компилятором, при использовании параметра --revert-strings или настройки settings.debug.revertStrings в режиме отладки.
  • Оптимизатор Yul: Удалять функции, вызывающие друг друга, но не имеющие других ссылок.
  • SMTChecker: Поддержка CHC для внутренних вызовов функций.

Исправление ошибок:

  • Сборка: Добавлено отсутствующее поле source в устаревшем выводе json для сборки, чтобы завершить ссылку на источник.
  • Парсер: Исправить внутреннюю ошибку для abstract без contract.
  • Проверка типов: Сделать недопустимые вызовы не вызываемых типов фатальными ошибками вместо обычных.

0.6.2 (2020-01-27)

Особенности языка:

  • Разрешить доступ к внешним функциям через имена контрактов и интерфейсов для... Получение их селектора.

  • Разрешить интерфейсам наследоваться от других интерфейсов.

  • Разрешить устанавливать газ и значение во внешних вызовах функций с помощью c.f{gas: 10000, value: 4 ether}().

  • Разрешить указывать соль для создания контрактов и, таким образом, код операции create2 с помощью new C{salt: 0x1234, value: 1 ether}(arg1, arg2).

  • Встроенное ассемблирование: поддержка литералов true и false.

Особенности компилятора:

  • LLL: Компилятор LLL был удалён.
  • Общие: Выдавать предупреждение, если байт-код времени выполнения превышает 24576 байтов (предел, введённый в Spurious Dragon).
  • Общие: Поддержка компиляции начиная с импортированного AST. Среди прочего, это можно использовать для тестирования мутаций.
  • Оптимизатор Yul: Применять штраф при попытке рематериализации в циклы.

Исправления ошибок:

  • Интерфейс командной строки: Активировать оптимизатор Yul только при указании --optimize.
  • Исправляет внутреннюю ошибку компилятора при явном вызове не реализованных базовых функций.

Система сборки:

  • Перейти к созданию soljson.js со встроенным двоичным файлом wasm в кодировке base64.

0.6.1 (2020-01-02)

Исправление ошибок:

  • Оптимизатор Yul: Исправление ошибки в средстве удаления избыточных присваиваний в сочетании с операторами break и continue.

0.6.0 (2019-12-17)

Изменения, нарушающие работу:

  • ABI: Удалить устаревшие поля constant и payable.
  • ABI: Поле type теперь является обязательным и больше не указывается по умолчанию равным function.
  • AST: Встроенная сборка экспортируется как структурированный JSON вместо простой строки.
  • C API (libsolc): Ввести параметр контекста как для solidity_compile, так и для обратного вызова.
  • C API (libsolc): Предоставленный обратный вызов теперь принимает два параметра: kind и data. Обратный вызов может быть использован для различных целей, таких как импорт файлов и SMT-запросы.
  • C API (libsolc): solidity_free был переименован в solidity_reset. Были добавлены функции solidity_alloc и solidity_free.
  • C API (libsolc): solidity_compile теперь возвращает строку, которую необходимо явно освободить с помощью solidity_free().
  • Интерфейс командной строки: Удалить текстовый принтер AST (--ast).
  • Интерфейс командной строки: По умолчанию перейти на новый репортер об ошибках. --old-reporter возвращается к устаревшему старому репортеру об ошибках.
  • Интерфейс командной строки: Добавить опцию для отключения или выбора метода хеширования между IPFS и Swarm для метаданных байт-кода.
  • Общие сведения: Запретить явные преобразования из внешних типов функций в адрес и добавить член с именем address в качестве замены.
  • Общие сведения: Включить оптимизатор Yul в стандартную оптимизацию.
  • Общие сведения: Новые зарезервированные ключевые слова: override, receive и virtual.
  • Общие сведения: private нельзя использовать вместе с virtual.
  • Общие сведения: Разделить неназванные резервные функции на два случая, определённых с использованием fallback() и receive().
  • Наследование: Теневое копирование переменных состояния теперь запрещено.
  • Встроенная ассемблерная программа: Допускается только строгая встроенная ассемблерная программа.
  • Встроенная ассемблерная программа: Объявления переменных не могут затенять объявления вне блока ассемблерной программы.
  • JSON AST: Заменить атрибут superFunction на baseFunctions.
  • Natspec JSON Interface: Правильно поддерживать несколько операторов @return в документации @dev и обеспечивать упоминание именованных параметров возврата в документации.
  • Сопоставления источников: Добавить «глубина модификатора» в качестве пятого поля в сопоставлениях источников.
  • Стандартный интерфейс JSON: Добавить опцию для отключения или выбора метода хэширования между IPFS и Swarm для метаданных байт-кода.
  • Синтаксис: push(element) для динамических массивов хранения больше не возвращает новую длину.
  • Синтаксис: Абстрактные контракты должны быть явно помечены как абстрактные с использованием ключевого слова abstract.
  • Синтаксис: элемент length массивов теперь всегда доступен только для чтения, даже для массивов хранения.
  • Проверка типов: Результирующий тип экспоненты равен типу основания. Также разрешите использование знаковых типов для основания.

Языковые особенности:

  • Разрешить явные преобразования от адреса к адресу payable через payable(...).

  • Разрешить глобальные перечисления и структуры.

  • Разрешить публичным переменным переопределять внешние функции.

  • Разрешить использование символов подчёркивания в качестве... Особенности компилятора:

  • Разрешить отмену строк в двоичном файле с помощью параметра --revert-strings или настройки settings.debug.revertStrings.

  • ABIEncoderV2: больше не выдавать предупреждения об использовании включённого ABIEncoderV2 (прагма всё ещё нужна).

0.5.17 (2020–03–17)

Исправления ошибок:

  • Type Checker: запретить переопределение закрытых функций.

0.5.16 (2020–01–02)

Исправленные ошибки, перенесённые из предыдущих версий:

  • Yul Optimizer: исправить ошибку в избыточном назначении при использовании операторов break и continue.

0.5.15 (2019–12–17)

Исправление ошибок:

  • Yul Optimizer: исправить некорректную оптимизацию избыточной загрузки при работе с пользовательскими функциями, содержащими циклы с записью в память или хранилище.

0.5.14 (2019–12–09)

Языковые особенности:

  • Получить селектор публичных или внешних библиотечных функций через член .selector.
  • Поддержка констант, которые ссылаются на другие константы.
  • Разделение шестнадцатеричных и обычных строковых литералов на несколько частей.

Особенности компилятора:

  • Интерфейс командной строки: разрешить перевод с Yul / строгого ассемблера на EWasm с помощью команды solc --yul --yul-dialect evm --machine ewasm.
  • Установить версию EVM по умолчанию как «Istanbul».
  • SMTChecker: добавить поддержку конструкторов, включая наследование конструкторов.
  • Yul: при компиляции через Yul строковые литералы из кода Solidity сохраняются как строковые литералы, если каждый символ можно безопасно распечатать.
  • Оптимизация Yul: выполнять перемещение кода, инвариантное к циклам.

Исправления ошибок:

  • SMTChecker: исправить внутреннюю ошибку при использовании abi.decode.
  • SMTChecker: исправить внутреннюю ошибку при работе с массивами или отображениями функций.
  • SMTChecker: исправить внутреннюю ошибку в массиве структур.
  • Version Checker: ^0 должен соответствовать 0.5.0, но не предварительной версии.
  • Yul: считать бесконечные циклы и рекурсию нерешаемыми.

Система сборки:

  • Обновление до emscripten версии 1.39.3.

0.5.13 (2019–11–14)

Языковые функции:

  • Получение адреса связанной библиотеки с помощью address(LibraryName).

Компиляторные функции:

  • Генератор кода: использовать SELFBALANCE для address(this).balance, если используется Istanbul EVM.
  • EWasm: экспериментальный вывод двоичного файла EWasm через --ewasm и как описано в standard-json.
  • SMTChecker: поддержка break/continue в CHC-движке.
  • SMTChecker: работа с присваиваниями многомерным массивам и отображениям.
  • SMTChecker: наследование и переопределение функций.
  • Стандартный интерфейс JSON: вывод макета хранилища контракта при запросе артефакта storageLayout.
  • Проверка типов: список возможных кандидатов при неудачной перегрузке.
  • Проверка типов: запрет переменных библиотечных типов.

Исправления ошибок:

  • Генератор кода: исправлена ошибка в утверждении, которая ошибочно срабатывала для размеров массива, превышающих беззнаковое целое число.
  • SMTChecker: исправление внутренней ошибки при доступе к индексам фиксированных байтов.
  • SMTChecker: исправление внутренней ошибки при использовании указателей на функции в качестве аргументов.
  • SMTChecker: исправление внутренней ошибки при неявном преобразовании строковых литералов в фиксированные байты.
  • Проверка типа: запретить использование конструктора того же класса в качестве модификатора.
  • Проверка типа: рассматривать магические переменные как неизвестные идентификаторы в ассемблерном коде.
  • Генератор кода: исправление внутренней ошибки при попытке преобразовать super в другой тип.

0.5.12 (2019–10–01)

Функции языка:

  • Проверка типов: разрешить присваивание внешним аргументам функций, кроме ссылочных типов. Изменить порядок сортировки функций с селектора на вид, имя.

  • Оптимизатор: добавить правило, которое заменяет код операции BYTE на 0, если первый аргумент больше 31.

  • SMTChecker: добавить поддержку циклов в механизм CHC.

  • Yul Optimizer: учитывать отсутствие побочных эффектов пользовательских функций.

  • Yul Optimizer: удалить избыточные операции mload/sload.

  • Yul Optimizer: использовать тот факт, что условия ветвления имеют определённое значение внутри ветви.

Исправления ошибок:

  • Генератор кода: исправить внутреннюю ошибку при извлечении динамического массива сопоставлений.
  • Разрешитель имён: исправить неправильное исходное местоположение при предупреждении о затенённых псевдонимах в объявлениях импорта.
  • Сканер: исправить анализ многострочных комментариев natspec с тройными косыми чертами, когда файл закодирован с помощью CRLF вместо LF.
  • Система типов: исправить массивы рекурсивных структур.
  • Yul Optimizer: исправить ошибку переупорядочения в связи со сдвинутыми инструкциями one и mul/div в условиях цикла for.

0.5.11 (2019-08-12)

Особенности языка:

  • Встроенная сборка: поддержка прямых констант типа значения во встроенной сборке.

Функции компилятора:

  • ABI: дополнительная внутренняя информация о типе в поле «internalType».
  • eWasm: высокоэкспериментальный вывод eWasm с использованием «--ewasm» в интерфейсе командной строки или выбор вывода «ewasm.wast» в стандартном json.
  • Метаданные: обновить хэш роя до текущей спецификации, изменить «bzzr0» на «bzzr1» и использовать URL-адреса «bzz-raw://».
  • Стандартный интерфейс JSON: компилировать только выбранные источники и контракты.
  • Стандартный интерфейс JSON: предоставить вторичные местоположения ошибок (например, исходное положение других конфликтующих объявлений).
  • SMTChecker: не стирать знания об указателях хранения, если назначен другой указатель хранения.
  • SMTChecker: поддерживать строковый литеральный тип.
  • SMTChecker: новый алгоритм на основе Horn, который доказывает утверждения с помощью инвариантов многотранзакционных контрактов.
  • Стандартный интерфейс JSON: предоставлять AST даже при ошибках, если установлен переключатель командной строки «--error-recovery» или StandardCompiler settings.parserErrorRecovery имеет значение true.
  • Yul Optimizer: не встраивать функцию, если это приведёт к дублированию выражений, которые не являются дешёвыми.

Исправления ошибок:

  • Декодер ABI: гарантировать, что декодированные массивы всегда указывают на отдельные области памяти.
  • Генератор кода: правильно обрабатывать динамически закодированные, но статически заданные размеры массивов и структур в calldata.
  • SMTChecker: исправить внутреннюю ошибку при встраивании функций, содержащих выражения кортежа.
  • SMTChecker: исправить стирание знаний об указателе в циклах.
  • SMTChecker: исправить внутреннюю ошибку при использовании составных побитовых операторов присваивания внутри ветвей.
  • SMTChecker: исправить внутреннюю ошибку при встраивании функции, которая возвращает кортеж, содержащий неподдерживаемый тип внутри ветви.
  • SMTChecker: исправить внутреннюю ошибку при встраивании функций, использующих переменные состояния и принадлежащих другому источнику.
  • SMTChecker: исправить внутреннюю ошибку при сообщении контрпримеров относительно переменных состояния из разных исходных файлов.
  • SMTChecker: исправить несоответствие сортировки SMT при использовании строковых литералов.
  • Просмотр/Проверка чистоты: правильно определить доступ к переменной состояния через базовый класс.
  • Анализатор Yul: проверить доступность объектов данных уже на этапе анализа.
  • Yul Optimizer: исправить проблему, когда код доступа к памяти был удалён, хотя в программе использовался msize.

0.5.10 (2019-06-25)

Важные исправления ошибок:

  • ABIEncoderV2: исправить некорректное кодирование abi массива хранилища данных, занимающего несколько слотов хранилища.
  • Генератор кода: должным образом обнулять старшие биты элементов массива отрицательных чисел при назначении для хранения и одновременном преобразовании типа.

Функции компилятора:

  • Интерфейс командной строки: экспериментальное восстановление после ошибок синтаксического анализа с помощью переключателя командной строки «--error-recovery» или логического значения StandardCompiler settings.parserErrorRecovery.
  • Оптимизатор: добавьте правило для упрощения SUB(~0, X) до NOT(X).
  • Yul Optimizer: заставить оптимизатор работать для всех диалектов Yul, включая eWasm.

Исправления ошибок:

  • Проверка типов: установить изменяемость состояния членов функционального типа «gas» и «value» как чистую (в то время как их возвращаемый тип... Данный текст затрагивает генерацию кода.

  • Система типов: разрешить прямой вызов функций базового класса, имеющих перегрузки.

  • Система типов: предупреждать о затенении встроенных переменных, если пользовательские переменные называются «this» или «super».

  • Yul: правильно регистрировать функции и запрещать затенение между функциональными переменными и переменными во внешней области видимости.

Система сборки:

  • Soltest: добавить параметр командной строки «--test» / «-t» в isoltest, который принимает строку, позволяющую фильтровать модульные тесты.
  • soltest.sh: разрешить использование переменной среды «SOLIDITY_BUILD_DIR» для указания папки сборки и добавить использование «—help».

0.5.7 (2019-03-26)

Важные исправления ошибок:

  • ABIEncoderV2: исправить ошибки, связанные с загрузкой коротких типов значений из хранилища при кодировании массива или структуры из хранилища.
  • ABIEncoderV2: устранить проблему переполнения буфера при кодировании упакованного массива из хранилища.
  • Оптимизатор: исправить неправильный порядок аргументов в правиле оптимизации байтов для констант.

Особенности языка:

  • вызовы функций с именованными аргументами теперь работают с перегруженными функциями.

Возможности компилятора:

  • Ассемблерная вставка: выдавать ошибку при использовании «callvalue()» внутри неплатёжной функции (так же, как это уже делает «msg.value»).
  • Стандартный интерфейс JSON: поддержка «Yul» в качестве входного языка.
  • SMTChecker: показывать стек вызовов вместе с моделью, если применимо.
  • SMTChecker: поддерживать модификаторы.
  • Yul Optimizer: включить оптимизацию распределения стека по умолчанию, если оптимизатор Yul активен (отключить в «yulDetails»).

Исправления ошибок:

  • Генератор кода: защитно дополнять память для «type(Contract).name» до кратного 32.
  • Система типов: обнаруживать и запрещать внутренние указатели на функции в качестве параметров для публичных/внешних библиотечных функций, даже когда они вложены/обёрнуты в структуры, массивы или другие типы.
  • Yul Optimizer: правильно определять, можно ли исключить переменную во время прохода сжатия стека.
  • Парсер Yul / ассемблерной вставки: запретить более одного оператора case с одной и той же меткой внутри переключателя на основе целочисленного значения метки.

Система сборки:

  • Установочные скрипты: исправить URL репозитория boost для CentOS 6.
  • Soltest: исправить шестнадцатеричную строку в soltest.

0.5.6 (2019-03-13)

Важное исправление ошибок:

  • Yul Optimizer: исправить ошибку порядка посещения для структурного упростителя.
  • Оптимизатор: устранить переполнение в правиле оптимизации, которое упрощает двойной сдвиг на константу.

Особенности языка:

  • Разрешить массивы calldata с динамически закодированными базовыми типами с помощью ABIEncoderV2.
  • Разрешить динамически закодированные структуры calldata с помощью ABIEncoderV2.

Возможности компилятора:

  • Оптимизатор: добавить правила для сравнений «lt» с константами.
  • Peephole Optimizer: удалить двойной «iszero» перед «jumpi».
  • SMTChecker: поддержка перечислений без приведения типа.
  • SMTChecker: поддержка одномерных массивов.
  • Type Checker: предоставлять улучшенные сообщения об ошибках для некоторых буквальных преобразований.
  • Yul Optimizer: добавить правило для удаления пустых случаев по умолчанию.
  • Yul Optimizer: добавить правило для удаления пустых случаев, если нет значения по умолчанию.
  • Yul Optimizer: добавить правило замены переключателя без случаев на «pop(expression)».

Исправление ошибок:

  • JSON ABI: описание библиотеки ABIs в формате JSON больше не содержит функций с внутренними типами, такими как структуры хранения.
  • SMTChecker: исправить внутреннюю ошибку компилятора, когда контракт содержит слишком большое рациональное число.
  • Система типов: определить, использует ли базовый контракт типы, требующие экспериментального кодировщика ABI, в то время как контракт всё ещё использует старый кодировщик.

Система сборки:

  • Soltest: добавлена поддержка массивов в сигнатурах функций.
  • Soltest: добавлена поддержка структурных массивов в сигнатуры функций.
  • Soltest: добавлена поддержка выровненных по левому краю, неупакованных шестнадцатеричных строковых литералов.

0.5.5 (2019-03-05)

Особенности языка:

  • Добавить поддержку геттеров отображений с типами ключей «string» или «bytes».
  • Метапрограммирование: предоставить доступ к имени контрактов через «type(C).name».

Возможности компилятора:

  • Поддержка «petersburg» в качестве «evmVersion» и установка по умолчанию.

  • Интерфейс командной строки: опция активации экспериментального оптимизатора Yul с использованием «-optimize-yul».

  • Ассемблерная вставка: рассматривать «extcodehash» как часть Константинополя. Встроенные массивы типа отображения.

  • Проверка типов: рассмотрите абстрактную функцию, которая будет реализована с помощью публичной переменной состояния.

Система сборки:

  • CMake: LLL больше не собирается по умолчанию. Необходимо настроить его с помощью CMake как -DLLL=ON.
  • Docker: включает образы Scratch и Alpine.
  • Emscripten: обновитесь до Emscripten SDK 1.37.21 и boost 1.67.

Solc-Js:

  • Исправьте обработку standard-json в исполняемом файле командной строки.
  • Удалите поддержку nodejs 4.

0.5.0 (2018-11-13)

Как обновить код:

  • Измените каждый .call() на .call("") и каждый .call(signature, a, b, c) на использование .call(abi.encodeWithSignature(signature, a, b, c)) (последний работает только для типов значений).
  • Замените каждый keccak256(a, b, c) на keccak256(abi.encodePacked(a, b, c)).
  • Добавьте public к каждой функции и external к каждой резервной или интерфейсной функции, которая ещё не определяет свою видимость.
  • Сделайте свои резервные функции external.
  • Явно укажите расположение данных для всех переменных типов struct, array или mapping (включая параметры функций), например, измените uint[] x = m_x на uint[] storage x = m_x. Обратите внимание, что для внешних функций требуются параметры с расположением данных calldata.
  • Явно преобразуйте значения контрактного типа в адреса перед использованием члена address. Пример: если c — это контракт, измените c.transfer(...) на address(c).transfer(...).
  • Объявите переменные и особенно аргументы функций как address payable, если вы хотите вызвать transfer для них.

Изменения:

  • ABI Encoder: правильно дополняйте данные из calldata (msg.data и внешние параметры функции). Используйте abi.encodePacked для неупакованного кодирования.

  • C API (libsolc / raw soljson.js): удалены методы version, license, compileSingle, compileJSON, compileJSONCallback и заменены методами solidity_license, solidity_version и solidity_compile.

  • Генератор кода: подписанный сдвиг вправо использует правильный арифметический сдвиг, то есть округление в сторону отрицательной бесконечности. Предупреждение: это может незаметно изменить семантику существующего кода!

  • Генератор кода: возврат во время выполнения, если calldata слишком короткий или указывает за пределы. Это делается внутри декодера ABI и поэтому также применяется к abi.decode().

  • Генератор кода: используйте STATICCALL для функций pure и view. Это уже было в экспериментальном режиме 0.5.0.

  • Интерфейс командной строки: удалите устаревший параметр --formal.

  • Интерфейс командной строки: переименуйте параметр --julia в --yul.

  • Интерфейс командной строки: требуется -, если стандартный ввод используется в качестве источника.

  • Интерфейс командной строки: используйте хэш имени библиотеки вместо самого имени в качестве заполнителя ссылки.

  • Интерфейс компилятора: запретите переназначения с пустым префиксом.

  • Анализатор потока управления: учитывайте сопоставления при проверке неинициализированных возвращаемых значений.

  • Анализатор потока управления: превратите предупреждение о возврате неинициализированного указателя хранилища в ошибку.

  • Общее: continue в цикле do...while переходит к условию (раньше он переходил к телу цикла). Предупреждение: это может незаметно изменить семантику существующего кода.

  • Общее: запретить объявление пустых структур.

  • Общее: запретить необработанный callcode (уже устарел в 0.4.12). Всё ещё можно использовать его через встроенную сборку.

  • Общее: запретить ключевое слово var.

  • Общее: запретить псевдонимы sha3 и suicide.

  • Общее: запретить оператор throw. Это уже имело место в экспериментальном режиме 0.5.0.

  • Общее: запретить единицу измерения years (уже устарело в 0.4.24).

  • Общее: ввести emit в качестве ключевого слова вместо анализа его как идентификатора.

  • Общее: новые ключевые слова: calldata и constructor.

  • Общее: новые зарезервированные ключевые слова: alias, apply, auto, copyof, define, immutable, implements, macro, mutable, override, partial, promise, reference, sealed, sizeof, supports, typedef и unchecked.

  • Общее: удалить сборку. Инструкция aliases «sha3» и «suicide»:

  • Общие правила области видимости в стиле C99 теперь применяются. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Запрещено объединять шестнадцатеричные числа с единицами измерения (например, 0x1e wei). Это уже было реализовано в экспериментальном режиме 0.5.0.

  • JSON AST: удалить поля «constant» и «payable» (информация закодирована в поле «stateMutability»).

  • JSON AST: заменить поле «isConstructor» новым полем «kind», которое может быть «constructor», «fallback» или «function».

  • Интерфейс: удалить функцию «клонировать контракт». Опции командной строки «--clone-bin» и «--combined-json clone-bin» больше не доступны.

  • Решатель имён: не исключать публичные переменные состояния при поиске конфликтующих объявлений.

  • Оптимизатор: удалить последовательность «PUSH1 0 NOT AND», которая не выполняет никаких действий.

  • Парсер: запретить конечные точки, за которыми не следует число.

  • Парсер: удалить «constant» как модификатор изменчивости состояния функции.

  • Парсер: запретить верхний регистр X в литералах шестнадцатеричных чисел.

  • Проверка типов: запретить присваивания между кортежами с разным количеством компонентов. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить значения для констант, которые не являются константами времени компиляции. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить арифметические операции для логических переменных.

  • Проверка типов: запретить плотную упаковку литералов. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить вызов базовых конструкторов без скобок. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить преобразования между «bytesX» и «uintY» разного размера.

  • Проверка типов: запретить преобразования между несвязанными типами контрактов. Явное преобразование через «address» всё ещё возможно.

  • Проверка типов: запретить пустые операторы возврата для функций с одним или несколькими возвращаемыми значениями.

  • Проверка типов: запретить пустые компоненты кортежей. Это частично уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить объявления нескольких переменных с несоответствующим количеством значений. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить многократное указание аргументов базового конструктора в одной иерархии наследования. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить вызов конструктора с неправильным количеством аргументов. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: запретить неинициализированные переменные хранилища. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: обнаружение циклических зависимостей в переменных и структурах ограничено рекурсией до 256.

  • Проверка типов: требовать явное расположение данных для всех переменных, включая параметры функций. Это частично уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: принимать только один тип «bytes» для «.call()» (и семейства), «keccak256()», «sha256()» и «ripemd160()».

  • Проверка типов: функция fallback должна быть внешней. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: интерфейсные функции должны быть объявлены внешними. Это уже было реализовано в экспериментальном режиме 0.5.0.

  • Проверка типов: члены адреса больше не включаются в типы контрактов. Теперь требуется явное преобразование перед вызовом члена «адрес» из контракта.

  • Проверка типов: полностью запретить синтаксис «свободной сборки». Это означает, что метки переходов, переходы и нефункциональные инструкции больше нельзя использовать.

  • Система типов: запретить явные и неявные преобразования десятичных литералов в типы «bytesXX».

  • Система типов: запретить явные и неявные преобразования шестнадцатеричных литералов в типы «bytesXX» разного размера.

  • Система типов: различать оплачиваемые и неоплачиваемые типы адресов.

  • Проверяющий чистоту просмотра: запретить «msg.value» в (или введение его через модификатор) в неоплачиваемую функцию.

  • Удалить устаревший каталог «std» из репозитория Solidity. Доступ к https://github.com/ethereum/solidity/blob/develop/std/*.sol (или https://github.com/ethereum/solidity/std/*.sol в Remix) будет невозможен.

  • Resolver ссылок: Превращать отсутствующие места хранения в ошибку. Это уже имело место в экспериментальном режиме 0.5.0.

  • Проверка синтаксиса: Запретить использование модификаторов функциями без реализации. Это уже было реализовано в экспериментальном режиме версии 0.5.0.

  • Проверка синтаксиса: Именованные возвращаемые значения в типах функций являются ошибкой.

  • Проверка синтаксиса: Строго требовать спецификатора видимости для функций. Это уже имело место в экспериментальном режиме версии 0.5.0.

  • Проверка синтаксиса: Запрещать унарный оператор +. Это уже имело место в экспериментальном режиме версии 0.5.0.

  • Проверка синтаксиса: Запрещать объявление переменной с одним оператором внутри тел if/while/for, которые не являются блоками.

  • Просмотр чистого чекер: Строго обеспечивать изменчивость состояния. Это уже имело место в экспериментальном режиме версии 0.5.0.

Особенности языка:

  • Общие: Добавить staticcall к address.
  • Общие: Разрешить добавление ключевого слова calldata к типам, чтобы явно указать расположение данных для аргументов внешних функций.
  • Общие: Поддержка pop() для массивов хранения.
  • Общие: Правила области видимости теперь соответствуют стилю C99.
  • Общие: Разрешить перечисления в интерфейсах.
  • Общие: Разрешить указатели на хранение mapping в качестве аргументов и возвращаемых значений во всех внутренних функциях.
  • Общие: Разрешить структуры в интерфейсах.
  • Общие: Предоставить доступ к декодеру ABI через abi.decode(bytes memory data, (...)).
  • Общие: Запретить нулевую длину для массивов фиксированного размера.
  • Парсер: Принять тип address payable во время парсинга.

Функции компилятора:

  • Система сборки: Добавлена поддержка версии Mojave для macOS.
  • Генератор кода: Инструкция CREATE2 была обновлена в соответствии с EIP1014 (также известным как «Skinny CREATE2»). Она также принимается как часть Константинополя.
  • Генератор кода: Была добавлена инструкция EXTCODEHASH на основе EIP1052.
  • Проверка типов: Более приятное сообщение об ошибке при попытке сослаться на перегруженные идентификаторы во встроенной сборке.
  • Проверка типов: Показывать именованный аргумент в случае ошибки.
  • Система типов: Тип IntegerType внутренне разделён на IntegerType и AddressType.
  • Тесты: Определять статус транзакции во время вызовов IPC.
  • Генератор кода: Выделение и освобождение локальных переменных в соответствии с их областью действия.
  • Удалено pragma experimental "v0.5.0".
  • Проверка синтаксиса: Улучшено сообщение об ошибке для поиска в типах функций.
  • Имя резолвера: Обновлённая функция поиска имени предложения учитывает длину идентификатора: 1 — поиск не производится, 2–3 — допускается не более одного изменения, 4– — допускается не более двух изменений.
  • SMTChecker: Поддерживать вызовы внутренних функций, которые возвращают ни одного или одно значение.

Исправления ошибок:

  • Система сборки: Поддержка версий CVC4, связанных с CLN вместо GMP. В случае проблем с компиляцией из-за экспериментальной поддержки решателя SMT, решатели можно отключить при настройке проекта с помощью CMake, используя -DUSE_CVC4=OFF или -DUSE_Z3=OFF.

  • Тесты: Исправить параметры цепочки, чтобы тесты IPC работали с более новыми версиями cpp-ethereum.

  • Генератор кода: Исправление выделения байтовых массивов (слишком много памяти обнулялось).

  • Генератор кода: Правильно обрабатывать отрицательные числовые литералы в ABIEncoderV2.

  • Генератор кода: Не падать при использовании длины нуля для многомерных массивов фиксированного размера.

  • Интерфейс командной строки: Правильно обрабатывать пути с обратными косыми чертами в Windows.

  • Анализатор потока управления: Игнорировать не реализованные функции при обнаружении неинициализированных возвратов указателей на хранилище.

  • Исправить вывод NatSpec json для тегов @notice и @dev в определениях контрактов.

  • Оптимизатор: Правильно оценить затраты газа на константы для особых случаев.

  • Оптимизатор: Исправить ошибку инициализации правила упрощения, которая появилась на некоторых платформах emscripten.

  • Резольвер ссылок: Не падать при использовании суффиксов _slot и _offset по отдельности.

  • Резольвер ссылок: Применять storage в качестве расположения данных для отображений.

  • Резольвер ссылок: Правильно обрабатывать недопустимые ссылки, используемые вместе с _slot и _offset. Отчёт об ошибке вместо сбоя утверждения, когда в качестве параметра функции используется необъявленный тип.

  • Ссылки на распознаватель: исправить проблему с высоким использованием процессора при использовании больших имён переменных. Предлагать только похожие имена, если идентификаторы короче 80 символов.

  • Проверка типов: расположение по умолчанию для преобразований типов (например, из литералов) — это память, а не хранилище.

  • Проверка типов: также запретить присваивания отображениям в назначениях кортежей.

  • Проверка типов: запретить упакованное кодирование массивов структур.

  • Проверка типов: разрешить присваивание локальным переменным типов сопоставления.

  • Проверка типов: учитывать массивы фиксированного размера при проверке рекурсивных структур.

  • Проверка типов: исправить сбои в ошибочных назначениях кортежа, в которых тип правой части не может быть определён.

  • Проверка типов: исправить зависание для отрицательных литералов с фиксированной точкой, близких к нулю, таких как -1e-100.

  • Проверка типов: динамические типы в качестве ключа для общедоступных отображений возвращают ошибку вместо сбоя подтверждения.

  • Проверка типов: исправить внутреннюю ошибку, когда значение индекса массива слишком велико.

  • Проверка типов: исправить внутреннюю ошибку, когда массив фиксированного размера слишком велик для кодирования.

  • Проверка типов: исправить внутреннюю ошибку для преобразования типов массивов.

  • Проверка типов: исправить внутреннюю ошибку, когда индекс массива не является беззнаковым.

  • Система типов: разрешать произвольные показатели степени для литералов с нулевой мантиссой.

  • Парсер: исправить неправильное исходное местоположение для безымянных параметров.

  • Интерфейс командной строки: исправить внутреннюю ошибку при компиляции stdin без содержимого и опции --ast.

Важные исправления ошибок:

  • Генератор кода: исправить процедуру инициализации неинициализированных внутренних функциональных указателей в контексте конструктора.

  • Система типов: использовать правильное имя типа для контрактов в параметрах событий при использовании в библиотеках. Это повлияло на генерацию кода.

Исправления ошибок:

  • ABIEncoderV2: отказаться от генерации потенциально ошибочного кода.

  • Общие: разделить список правил таким образом, чтобы среды JavaScript с небольшими стеками могли использовать компилятор.

Примечание: вышеуказанные изменения не включены в версию 0.5.0, поскольку они были перенесены.

Версия 0.4.25 (2018-09-12)

Важные исправления ошибок:

  • Генератор кода: правильно выполнить очистку для возведения в степень и типов, отличных от 256 бит.

  • Проверка типов: сообщить об ошибке при использовании индексированных структур в событиях с экспериментальным ABIEncoderV2. Раньше регистрировались неправильные значения.

  • Проверка типов: сообщить об ошибке при использовании структур в событиях без экспериментального ABIEncoderV2. Ранее это приводило к сбою или регистрации неправильных значений.

  • Парсер: рассмотреть все терминаторы юникод-строк (LF, VF, FF, CR, NEL, LS, PS) для однострочных комментариев и строковых литералов. Они недопустимы в строках и завершат комментарии.

  • Парсер: запретить незавершённые многострочные комментарии в конце ввода.

  • Парсер: рассматривать «/** /» как незавершённый многострочный комментарий.

Версия 0.4.24 (2018-05-16)

Особенности языка:

  • Генератор кода: используйте собственные инструкции сдвига на цели Константинополь.

  • Общие: разрешить объявлять несколько переменных как часть присвоения кортежу, например (uint a, uint b) = ...

  • Общие: удалить устаревший «constant» в качестве модификатора состояния функции из документации и тестов (но всё ещё оставить его как допустимую функцию).

  • Проверка типов: объявить устаревшим обозначение единицы измерения «years» и выдать предупреждение для него (или ошибку в качестве экспериментальной функции версии 0.5.0).

  • Проверка типов: сделать литералы (без явного приведения типов) ошибкой для плотной упаковки в качестве экспериментальной функции версии 0.5.0.

  • Проверка типов: выдавать предупреждение о назначениях с подстановочными знаками (это станет ошибкой в версии 0.5.0).

  • Проверка типов: предупреждать, когда keccak256, sha256 и ripemd160 не используются с одним аргументом байтов (предложить использовать abi.encodePacked(...)). Это станет ошибкой в версии 0.5.0.

Функции компилятора:

  • Система сборки: обновить внутреннюю зависимость jsoncpp до версии 1.8.4, которая обеспечивает большую строгость и снижает использование памяти.

  • Граф потока управления: добавить граф потока управления в качестве структуры анализа.

  • Граф потока управления: предупреждать о возврате неинициализированных указателей хранилища.

  • Оценка газа: исследовать только пути с более высокими затратами на газ. Снижает точность, но значительно повышает скорость оценки газа.

  • Оптимизатор: Убрать ненужную маскировку результата известных коротких инструкций (ADDRESS, CALLER, ORIGIN и COINBASE).

  • Парсер: Отображать более понятные сообщения об ошибках, показывая фактические токены, а не внутренние имена.

  • Парсер: Использовать всё местоположение токена, а не только его начальную позицию в качестве исходного местоположения для ошибок парсера.

  • Проверка SMT: Поддерживать переменные состояния целочисленного и логического типа.

Исправления ошибок:

  • Генератор кода: Исправить revert с причиной, исходящей из состояния или локальной строковой переменной.
  • Проверка типов: Показывать правильную ошибку при попытке emit не-события.
  • Проверка типов: Предупреждать о пустых компонентах кортежа (это превратится в ошибку с версией 0.5.0).
  • Проверка типов: Функции кодирования ABI являются чистыми и поэтому могут использоваться для констант.

0.4.23 (2018-04-19)

Функции:

  • Система сборки: Поддержка Ubuntu Bionic.
  • SMTChecker: Интеграция с CVC4 SMT решателем.
  • Синтаксический анализатор: Предупреждение о функциях с именем «конструктор».

Исправление ошибок:

  • Проверка типов: Улучшить сообщение об ошибке при неудачном разрешении перегрузки функций.
  • Проверка типов: Не жаловаться на новый стиль конструктора и функцию отката, чтобы иметь одно и то же имя.
  • Проверка типов: Обнаружить несколько объявлений конструктора в новом синтаксисе и старом синтаксисе.
  • Проверка типов: Явное преобразование bytesXX в контракт должным образом запрещено.

0.4.22 (2018-04-16)

Функции:

  • Генератор кода: Инициализировать массивы без использования msize().
  • Генератор кода: Более специализированная и, следовательно, оптимизированная реализация для x.push(...).
  • Интерфейс командной строки: Ошибка при обнаружении отсутствующего или недоступного файла. Подавить её с помощью флага --ignore-missing.
  • Постоянный оценщик: Исправить оценку одноэлементных кортежей.
  • Общие: Добавить процедуры кодирования abi.encodePacked, abi.encode, abi.encodeWithSelector и abi.encodeWithSignature.
  • Общие: Добавить глобальную функцию gasleft() и объявить устаревшим msg.gas.
  • Общие: Добавить глобальную функцию blockhash(uint) и объявить устаревшей block.hash(uint).
  • Общие: Разрешить предоставление строки причины для revert() и require().
  • Общие: Ввести новый синтаксис конструктора с использованием ключевого слова constructor в качестве экспериментальной функции версии 0.5.0.
  • Общие: Ограничить количество ошибок, выводимых за один запуск, до 256.
  • Общие: Поддержка доступа к динамическим данным возврата в пост-византийских EVM.
  • Общие: Разрешить использование символов подчёркивания в числовых и шестнадцатеричных литералах для разделения тысяч и квадов.
  • Наследование: Ошибка при использовании пустых скобок для конструкторов базового класса, требующих аргументов, в качестве экспериментальной функции версии 0.5.0.
  • Наследование: Ошибка при использовании круглых скобок в вызовах конструкторов в стиле модификатора в качестве экспериментальной функции версии 0.5.0.
  • Интерфейсы: Разрешить переопределение внешних функций в интерфейсах с public в реализующем контракте.
  • Оптимизация: Оптимизировать SHL и SHR только с участием констант (только Константинополь).
  • Оптимизация: Удалить бесполезную инструкцию SWAP1, предшествующую коммутативной инструкции (например, ADD, MUL и т. д.).
  • Оптимизация: Заменить операторы сравнения (LT, GT и т.д.) на противоположные, если им предшествует SWAP1, например, SWAP1 LT заменяется на GT.
  • Оптимизация: Оптимизировать через mload, если msize() не используется.
  • Статический анализатор: Ошибка при дублировании вызовов суперконструктора в качестве экспериментальной функции версии 0.5.0.
  • Анализатор синтаксиса: Выдать предупреждение для пустых структур (или ошибку в качестве экспериментальной функции версии 0.5.0).
  • Анализатор синтаксиса: Предупредить о модификаторах функций без реализации (это станет ошибкой с версии 0.5.0).
  • Тесты синтаксиса: Добавить исходные местоположения к ожиданиям тестов синтаксиса.
  • Проверка типов: Улучшение документации и предупреждений для доступа к членам контракта, унаследованным от адреса.

Исправление ошибок:

  • Генератор кода: Разрешить block.blockhash без вызова.
  • Генератор кода: Не включать внутренние функции в байт-код времени выполнения, которые упоминаются только в конструкторе.
  • Генератор кода: Правильно пропустить ненужную очистку массива хранения, когда длина не уменьшается. Генератор: исправление ошибки в поиске модификаторов в библиотеках.
  • Генератор кода: реализация упакованного кодирования внешних типов функций.
  • Генератор кода: рассматривать пустой список аргументов базового конструктора как не предоставленный.
  • Генератор кода: правильно принудительно очищать типы bytesXX для сокращения преобразований.
  • Интерфейс командной строки: исправить сообщения об ошибках для импортированных файлов, которые не существуют.
  • Интерфейс командной строки: корректно поддерживать «--evm-version constantinople».
  • Парсер DocString: исправить сообщение об ошибке для пустых описаний.
  • Оценщик газа: правильно игнорировать затраты резервной функции для других функций.
  • AST JSON: удалить квалификатор хранилища для строк типа имени.
  • Анализатор синтаксиса: исправить внутреннюю ошибку компилятора при анализе объявления var без идентификатора.
  • Анализатор синтаксиса: исправить анализ геттеров для переменных типа функции.
  • Стандартный JSON: корректно поддерживать константинополь как evmVersion.
  • Статический анализатор: исправить недетерминированный порядок предупреждений о неиспользуемых переменных.
  • Статический анализатор: недопустимая арифметика с постоянными выражениями вызывает ошибки.
  • Проверка типов: исправить обнаружение рекурсивных структур.
  • Проверка типов: исправить асимметрию ошибки при сравнении с литералами чисел.
  • Система типов: улучшить сообщение об ошибке при попытке сдвинуть дробное количество.
  • Система типов: сделать внешние библиотечные функции доступными.
  • Система типов: предотвратить кодирование странных типов.
  • Система типов: ограничить рациональные числа до 4096 бит.

0.4.21 (2018-03-07)

Особенности:

  • Генератор кода: утверждать, что k != 0 для mulmod(a, b, k) и addmod(a, b, k), как экспериментальная функция версии 0.5.0.
  • Генератор кода: не сохранять газ в вызовах (кроме случаев, когда версия EVM установлена на homestead).
  • Генератор кода: использовать opcode STATICCALL для вызова view и pure функций как экспериментальную функцию версии 0.5.0.
  • Общие: правила области видимости C99/C++ (вместо области видимости функций JavaScript) действуют как экспериментальная функция версии v0.5.0.
  • Общие: улучшенное сообщение при ошибке охватывает несколько строк исходного файла.
  • Общие: поддержка и рекомендация использования emit EventName(); для явного вызова событий.
  • Встроенное ассемблерное программирование: применять строгий режим как экспериментальную функцию версии 0.5.0.
  • Интерфейс: предоставить возможность выбора целевой версии EVM (homestead или byzantium, по умолчанию — byzantium).
  • Стандартный JSON: отклонять плохо отформатированные входные данные недействительного JSON.
  • Проверка типов: запретить неинициализированные указатели хранения как экспериментальную функцию версии 0.5.0.
  • Анализ синтаксиса: не предупреждать об экспериментальных функциях, если они не касаются генерации кода.
  • Анализ синтаксиса: не предупреждать о pragma experimental "v0.5.0" и не устанавливать экспериментальный флаг в байт-коде для этого.
  • Синтаксический анализатор: пометить throw как ошибку как экспериментальную функцию версии 0.5.0.
  • Синтаксический анализатор: выдать ошибку, если видимость не указана для функций контракта как экспериментальной функции версии 0.5.0.
  • Синтаксический анализатор: выдавать предупреждение при использовании перегрузок адреса для экземпляров контрактов.
  • Проверка типов: запрещать объединение шестнадцатеричных чисел и единиц измерения как экспериментальную функцию версии 0.5.0.

Исправления ошибок:

  • Ассемблер: вызывать ошибку при больших числовых литералах в ассемблере.
  • JSON-AST: добавить свойство «документация» к определению функций, событий и модификаторов.
  • Решатель: правильно определять затенение для импорта с псевдонимами.
  • Автономная сборка: не игнорировать ввод после закрывающей фигурной скобки верхнего уровня блока.
  • Стандарт JSON: правильно обрабатывать ошибки при передаче недопустимых источников.
  • Стандарт JSON: гарантировать, что предоставленные адреса библиотек имеют правильную длину и шестнадцатеричный префикс.
  • Проверка типов: правильно определить, какие типы массивов и структур не поддерживаются старым кодировщиком ABI.
  • Проверка типов: правильно предупреждать при использовании _offset и _slot для констант во встроенной сборке.
  • Интерфейс командной строки: выдавать ошибку, если опция неизвестна.

0.4.20 (2018-02-14)

Функции:

  • Генератор кода: предотвращать прямой вызов не являющихся view функций в библиотеках (в отличие от вызова через delegatecall).

  • Интерфейс командной строки: поддерживать строгий режим сборки (запрещающий переходы, операционные коды инструкций и т. д.) с помощью переключателя «--strict-assembly». Экспериментальный ABIEncoderV2.

  • Генератор кода: Частичная поддержка передачи структур в качестве аргументов и возвращаемых параметров (на данный момент требуется прагма experimental ABIEncoderV2).

  • Общее: Поддержка прагмы experimental «v0.5.0» для активации предстоящих критических изменений.

  • Общее: Добавлен член .selector во внешние типы функций для получения их сигнатуры.

  • Оптимизатор: Добавление нового шага оптимизации для удаления неиспользуемых JUMPDEST.

  • Статический анализатор: Предупреждение при использовании устаревших встроенных функций sha3 и suicide (заменены на keccak256 и selfdestruct, введены в 0.4.2 и 0.2.0 соответственно).

  • Синтаксический анализатор: Предупреждение, если видимость не указана для функций контракта.

  • Анализатор типов: Отображение полезного предупреждения для неиспользуемых аргументов функции/возвращаемых параметров.

  • Анализатор типов: Не показывать одну и ту же ошибку несколько раз для событий.

  • Анализатор типов: Значительно уменьшить количество повторяющихся ошибок, отображаемых для повторяющихся конструкторов и функций.

  • Анализатор типов: Предупреждать об использовании литералов в качестве параметров плотной упаковки в keccak256, sha3, sha255 и ripemd160.

  • Анализатор типов: Принудительное применение view и pure.

  • Анализатор типов: Применение view / constant с ошибкой в качестве экспериментальной функции версии 0.5.0.

  • Анализатор типов: Применение fallback-функций как external в качестве экспериментальной функции версии 0.5.0.

Исправления ошибок:

  • ABI JSON: Включить все перегруженные события.

  • Парсер: Исправление сбоя, связанного с parseTypeName.

  • Анализатор типов: Разрешить константные байтовые массивы.

Версия 0.4.16 (2017-08-24)

Новые возможности:

  • ABI JSON: Добавить новое поле stateMutability со значениями pure, view, nonpayable и payable.

  • Анализатор: Экспериментальная частичная поддержка SMT-контролёра Z3 («SMTChecker»).

  • Система сборки: Общие библиотеки (libsolutil, libevmasm, libsolidity и liblll) больше не создаются в процессе сборки.

  • Генератор кода: Экспериментальная новая реализация кодировщика ABI, который может кодировать произвольно вложенные массивы (ABIEncoderV2).

  • Метаданные: Хранить экспериментальный флаг в метаданных CBOR.

  • Парсер: Отображать предыдущий спецификатор видимости в ошибке, если найдено несколько.

  • Парсер: Ввести ключевые слова pure и view для функций, ключевое слово constant остаётся псевдонимом для view, а чистота пока не применяется, поэтому используйте с осторожностью.

  • Статический анализатор: Предупреждения о больших структурах хранения.

  • Синтаксический анализатор: Поддержка pragma experimental для включения экспериментальных функций.

  • Анализатор типов: Более подробное сообщение об ошибке для недопустимых переопределений.

  • Анализатор типов: Предупреждение о сдвиге литерала.

Исправления ошибок:

  • Ассемблерный парсер: Более строго относиться к числовым литералам.

  • Ассемблерный парсер: Ограничить максимальную глубину рекурсии.

  • Парсер: Обеспечить запятые между элементами массива и кортежа.

  • Парсер: Ограничение максимальной глубины рекурсии.

  • Анализатор типов: Исправление сбоя, связанное с using.

  • Анализатор типов: Запретить конструкторы в библиотеках.

  • Анализатор типов: Отклонить создание интерфейсных контрактов с использованием оператора new.

Версия 0.4.15 (2017-08-08)

Новые функции:

  • Анализатор типов: Показывать нереализованную функцию при попытке создать экземпляр абстрактного класса.

Исправления ошибок:

  • Генератор кода: .delegatecall() всегда должен возвращать результат выполнения.

  • Генератор кода: Предоставить «новый счётчик газа» для низкоуровневых callcode и delegatecall.

  • Анализатор типов: Конструкторы должны быть реализованы, если объявлены.

  • Анализатор типов: Запрет модификатора .gas() для ecrecover, sha256 и ripemd160.

  • Анализатор типов: Не отмечать перегруженные функции как затеняющие другие функции.

  • Анализатор типов: Внутренние библиотечные функции должны быть реализованы, если они объявлены.

Версия 0.4.14 (2017-07-31)

Новые функции:

  • C API (jsonCompiler): Экспорт метода license.

  • Генератор кода: Оптимизация резервной функции путём удаления бесполезного перехода.

  • Встроенная сборка: Полезное сообщение об ошибке при попытке доступа к переменным calldata.

  • Встроенная сборка: Поддержка объявления переменных без начального значения (по умолчанию равно 0).

  • Метаданные: Включаются только файлы, которые использовались для компиляции данного контракта.

  • Анализатор типов: Запрещение передачи значений контрактам без * Функция payable fallback.

  • Проверка типов: включение типов в явное сообщение об ошибке преобразования.

  • Проверка типов: выдача соответствующей ошибки для массивов, слишком больших для кодирования ABI.

  • Проверка типов: предупреждение при использовании «this» в конструкторе.

  • Проверка типов: предупреждение о перезаписи существующих символов, включая встроенные.

Исправления ошибок:

  • Генератор кода: правильное освобождение области памяти возврата для ecrecover.
  • Проверка типов: исправление сбоя для некоторых назначений не-lvalue.
  • Проверка типов: устранение недопустимого предупреждения «указать ключевое слово хранения» для ссылочных членов структур.
  • Проверка типов: маркировка модификаторов как внутренних.
  • Проверка типов: повторное разрешение нескольких упоминаний одного и того же модификатора для функции.

0.4.13 (2017-07-06)

Функции:

  • Синтаксический анализатор: замена «throw» на require(), assert() и revert().
  • Проверка типов: предупреждение, если локальная переменная ссылки на хранилище явно не использует ключевое слово «storage».

Исправление ошибок:

  • Генератор кода: правильная отмена регистрации переменных-модификаторов.
  • Интерфейс компилятора: вывод AST только в случае успешного анализа.
  • Вывод ошибок: не опускать тип ошибки.

0.4.12 (2017-07-03)

Функции:

  • Ассемблер: добавление инструкций CREATE2 (EIP86), STATICCALL (EIP214), RETURNDATASIZE и RETURNDATACOPY (EIP211).
  • Ассемблер: отображение вспомогательных данных в выводе ассемблера.
  • Ассемблер: переименование SHA3 в KECCAK256.
  • AST: экспорт всех атрибутов в формат JSON.
  • C API (jsonCompiler): использование стандартного JSON I/O внутри.
  • Генератор кода: добавлена система шаблонов Whiskers.
  • Встроенное ассемблирование: операторы for и switch.
  • Встроенное ассемблирование: определения функций и вызовы функций.
  • Встроенное ассемблирование: введение keccak256 в качестве кода операции. sha3 по-прежнему является допустимым псевдонимом.
  • Встроенное ассемблирование: предоставление соответствующего сообщения об ошибке при недостаточном количестве аргументов для функциональной инструкции.
  • Встроенное ассемблирование: предупреждение при затенении переменных Solidity инструкциями.
  • Встроенное ассемблирование: предупреждение при использовании jump.
  • Удаление устаревшего вывода Why3.
  • Проверка типов: обеспечение строгой проверки UTF-8.
  • Проверка типов: предупреждение о копиях в хранилище, которые могут неожиданно перезаписать данные.
  • Проверка типов: предупреждение об определении типа из буквальных чисел.
  • Статический анализатор: предупреждение об устаревании callcode.

Исправление ошибок:

  • Ассемблер: пометка MLOAD как имеющая побочные эффекты в оптимизаторе.

  • Генератор кода: исправление кодирования ABI пустой литеральной строки.

  • Генератор кода: исправление проверок отрицательного размера стека.

  • Генератор кода: использование REVERT вместо INVALID для сгенерированных процедур проверки ввода.

  • Встроенное ассемблирование: применение аргументов функции при анализе функциональных инструкций.

  • Оптимизатор: запрет оптимизаций, включающих MLOAD, поскольку он изменяет MSIZE.

  • Статический анализатор: больше не выдаются предупреждения о неиспользуемых переменных для переменных, используемых во встроенном ассемблировании.

  • Проверка типов: исправление литералов адресов, не рассматриваемых как константы времени компиляции.

  • Проверка типов: исправлен сбой, связанный с не вызываемыми типами.

  • Проверка типов: устранён segfault с постоянными параметрами функции.

  • Проверка типов: запрещено сравнение между типами сопоставления и внутренними функциями.

  • Проверка типов: запрещён повторный вызов одного и того же модификатора.

  • Проверка типов: не рассматривать строки, похожие на адреса, как адреса.

  • Проверка типов: поддержка действительных, но неправильно отклонённых последовательностей UTF-8. Быть сделано для обновления:

  • Добавить payable ко всем функциям, которые хотят получить эфир (включая конструктор и функцию fallback).

  • Заменить _ на _; в модификаторах.

  • Добавить прагму версии к каждому файлу: pragma solidity ^0.4.0;.

Изменения:

  • Исходные файлы должны указывать версию компилятора, с которой они совместимы, используя, например, pragma solidity ^ 0.4.0; или pragma solidity >=0.4.0 <0.4.8;.

  • Функции, которые хотят получать эфир, должны иметь новый модификатор payable (в противном случае они выдают ошибку).

  • Контракты, которые хотят получать Эфир с помощью простого «send», должны реализовать функцию fallback с модификатором payable. Контракты теперь выдают ошибку, если не определена функция payable fallback и ни одна из функций не соответствует сигнатуре.

  • Создание контракта через «new» приводит к ошибке.

  • Деление / модуль на ноль приводит к ошибке.

  • Вызов функции приводит к ошибке, если целевой контракт не имеет кода.

  • Модификаторы должны содержать _ (используйте if (false) _ в качестве обходного пути, если это необходимо).

  • В модификаторе после _ возврат не пропускает часть.

  • Оператор-заполнитель _ в модификаторе теперь требует явного ;.

  • ecrecover теперь возвращает ноль, если входные данные искажены (ранее он возвращал мусор).

  • Ключевое слово constant нельзя использовать для конструкторов или функции fallback.

  • Удалено --interface (интерфейс Solidity) опция вывода.

  • JSON AST: общая очистка, многие узлы переименованы в соответствии с их именами C++.

  • Вывод JSON: srcmap-runtime переименован в srcmapRuntime.

  • Перемещение (и переработка) стандартных библиотечных контрактов из компилятора в github.com/ethereum/solidity/std (import "std"; или import owned; больше не работают).

  • Убрано запутанное и недокументированное ключевое слово after.

  • Новые зарезервированные слова: abstract, hex, interface, payable, pure, static, view.

Функции:

  • Шестнадцатеричные строковые литералы: hex"ab1248fe".

  • Внутренняя: встроенная сборка, используемая генератором кода.

  • Интерфейс командной строки: использование - в качестве имени файла позволяет читать из stdin.

  • Интерфейсный JSON: функция fallback теперь является частью ABI.

  • Интерфейс: строка версии теперь совместима с SemVer.

  • Генератор кода: не предоставляйте «новый счётчик газа», если мы знаем, что вызываемая учётная запись существует.

Исправления ошибок:

  • JSON AST: узлы были добавлены не к тому родителю.

  • Переводчик Why3: исправление сбоя при возведении в степень.

  • Интерфейс командной строки: связывание библиотек с символами подчёркивания в их именах.

  • Проверка типов: функция fallback больше не может возвращать данные.

  • Генератор кода: исправление сбоя, когда sha3() использовался для неподдерживаемых типов.

  • Генератор кода: вручную установите надбавку за газ для .send(0).

Много изменений в документации, в основном благодаря добровольным внешним участникам.

0.3.6 (2016-08-10)

Функции:

  • Формальная верификация: учитывайте внешние эффекты контракта.

  • Проверка типа: предупреждение о неиспользуемом возвращаемом значении низкоуровневых вызовов и отправки.

  • Выходные данные: исходное местоположение и идентификатор узла как часть выходных данных AST.

  • Выходные данные: сопоставление исходного местоположения для байт-кода.

  • Выходные данные: формальная проверка как часть вывода json компилятора.

Исправление ошибок:

  • Интерфейс командной строки: не сбой, если ввод взят из stdin.

  • Сканер: правильно поддерживает коды Unicode в строках.

  • Вывод JSON: исправить ошибку об относительных / абсолютных именах исходных файлов.

  • Вывод JSON: исправить ошибку о недопустимых строках utf8.

  • Генератор кода: динамическое выделение пустого массива вызвало бесконечный цикл.

  • Генератор кода: правильно рассчитать требования к газу для memcpy precompile.

  • Оптимизатор: очистить известное состояние, если два пути кода объединены.

0.3.5 (2016-06-10)

Функции:

  • Зависимое от контекста переназначение путей (разные модули могут использовать одну и ту же библиотеку в разных версиях).

Исправление ошибок:

  • Проверка типов: динамические типы возврата были удалены при извлечении данных из внешних вызовов, теперь они заменяются «неиспользуемым» типом.

  • Проверка типов: переопределения конструкторами рассматривались как делающие функцию неабстрактной.

0.3.4 (2016-05-31)

Никаких изменений вне документации.

0.3.3 (2016-05-27)

Разрешить внутреннюю библиотеку. Функции, которые должны быть вызваны (путём «встраивания»):

  • Дробные/рациональные константы (используются только с типами с фиксированной точкой, которые всё ещё находятся в разработке).
  • Встроенной сборке доступен доступ к внутренним функциям (как метки перехода).
  • При запуске solc без аргументов на терминале будет выведена справка.
  • Исправление: устранён некоторый недетерминизм в генерации кода.
  • Исправление: исправлено использование not / bnot / iszero во встроенной сборке.
  • Исправление: перед сравнением правильно очищены байты NN.

0.3.2 (2016-04-18)

  • Исправление: парсер встроенной сборки: байт-код операции был непригоден для использования.
  • Исправление: отчёт об ошибках: токены для типов переменного размера не были должным образом преобразованы в строку.
  • Исправление: динамические массивы структур удалялись неправильно.
  • Исправление: статические массивы в списке параметров конструктора декодировались неправильно.

0.3.1 (2016-03-31)

  • Встроенная сборка.
  • Исправление: генерация кода: доступ к массиву с узкими типами не очищал старшие биты.
  • Исправление: отчёты об ошибках: отчёты об ошибках с неизвестным исходным местоположением вызывали сбой.

0.3.0 (2016-03-11)

Изменения:

  • Добавлены новые ключевые слова: assembly, foreign, fixed, ufixed, fixedNxM, ufixedNxM (для различных значений M и N), timestamp.
  • Деление числовых констант не округляется до целого числа, а до типа с фиксированной точкой (например, 1 / 2 != 1, но 1 / 2 == 0,5).
  • Вызовы библиотек теперь по умолчанию используют DELEGATECALL (например, вызываемые библиотечные функции видят то же значение, что и вызывающая функция для msg.value и msg.sender).
  • <адрес>.delegatecall как низкоуровневый интерфейс вызова.

Исправления:

  • Исправлена ошибка оптимизатора, приводившая к неправильным сравнениям.

0.2.2 (2016-02-17)

  • Доступ к индексам для типов bytes1, ..., bytes32 (на данный момент только чтение).
  • Исправление: сбой проверки типов при неправильном количестве базовых параметров конструктора.

0.2.1 (2016-01-30)

  • Встраивание массивов, т. е. var y = [1, x, f()]; если существует общий тип для 1, x и f(). Обратите внимание, что результатом всегда является массив памяти фиксированной длины, и преобразование в массивы памяти динамической длины пока невозможно.
  • Импорт, аналогичный импорту ECMAScript6 (import «abc.sol» as d и import {x, y} from «abc.sol»).
  • Компилятор командной строки solc автоматически разрешает отсутствующие импорты и позволяет использовать «включаемые каталоги».
  • Условное выражение: x ? y : z.
  • Исправления: исправлен ряд ошибок, когда оптимизатор генерировал недопустимый код.
  • Исправления: перечисления и структуры были недоступны другим контрактам.
  • Исправления: устранена ошибка сегментации, связанная с типами параметров функций, возникающая во время оценки газа.
  • Исправления: сбой проверки типов при неправильном количестве основных параметров конструктора.
  • Разрешены перегрузки функций с разными типами массивов.
  • Разрешено присваивание типа (x) = 7.
  • Тип uint176 был недоступен.
  • Сбой проверки типов, связанный с вызовами конструкторов, устранён.
  • Устранён сбой генерации кода, связанный с недопустимыми средствами доступа к типам структур.
  • Устранён сбой генерации кода, связанный с вычислением хэша типа структуры.

0.2.0 (2015-12-02)

  • Изменение: new ContractName.value(10)() должен быть записан как (new ContractName).value(10).
  • Добавлено selfdestruct как псевдоним для suicide.
  • Распределение массивов памяти с использованием new.
  • Связывание библиотечных функций с типами через using x for y.
  • addmod и mulmod (модульное сложение и модульное умножение с произвольной промежуточной точностью).
  • Исправления: параметры конструктора типа фиксированного массива читались неправильно.
  • Исправления: распределение памяти для структур, содержащих массивы или строки.
  • Исправления: расположение данных для явных параметров памяти в библиотеках было установлено в хранилище.

0.1.7 (2015-11-17)

  • Улучшены сообщения об ошибках для неожиданных токенов.

  • Доказательство концепции транскомпиляции в why3 для формальной верификации контрактов.

  • Исправления: массивы (также строки) в качестве индексированных параметров событий.

  • Исправления: запись в элементы байтов или строк перезаписывает другие.

  • Исправления: «Блок-преемник не найден» в Windows.

  • Исправления: использование строковых литералов в кортежах.

  • Исправления: работа с недействительным хеш-кодом фиксации в версии. 0.1.6 (2015-10-16)

  • Исправление ошибки: некоторые исправления в тестовом фреймворке для Windows.

  • Метод .push() для динамических массивов хранения.

  • Выражения кортежей ((1, 2, 3) или return (1, 2, 3);).

  • Объявление и присвоение нескольких переменных (var (x, y,) = (1, 2, 3, 4, 5); или var (x, y) = f();).

  • Деструктурирующее присваивание ((x, y,) = (1, 2, 3)).

  • Исправление ошибки: внутренняя ошибка, связанная с использованием библиотечной функции с недопустимыми типами.

  • Исправление ошибки: корректный анализ Library.structType a на уровне операторов.

  • Исправление ошибки: корректное сообщение о расположении источника выражений в скобках (как часть «кортежной» истории).

0.1.5 (2015-10-07)

  • Критическое изменение в кодировке хранения: кодирование коротких массивов байтов и строк вместе с их длиной в хранилище.
  • Сообщение о предупреждениях.
  • Разрешение типов ссылок на хранилище для публичных функций библиотеки.
  • Доступ к типам, объявленным в других контрактах и библиотеках через ..
  • Версия штампа в начале байт-кода библиотек во время выполнения.
  • Исправление ошибки: проблема с инициализированными строковыми переменными состояния и динамическими данными в конструкторе.
  • Исправление ошибки: автоматическое разрешение зависимостей, связанных с new.
  • Исправление ошибки: разрешение четырёх индексированных аргументов для анонимных событий.
  • Исправление ошибки: обнаружение слишком больших целочисленных констант в функциях, принимающих произвольные параметры.

0.1.4 (2015-09-30)

  • Исправление ошибки: возврат массивов фиксированного размера.
  • Исправление ошибки: комбинированный вывод JSON из solc.
  • Исправление ошибки: доступ к возвращаемым значениям массивов фиксированного размера.
  • Исправление ошибки: запрет присвоения из буквальных строк указателям хранилища.
  • Рефакторинг: перемещение проверки типов в отдельный модуль.

0.1.3 (2015-09-25)

  • Оператор throw.
  • Библиотеки, содержащие функции, вызываемые через CALLCODE.
  • Стадия компоновщика для компилятора для вставки адресов других контрактов (используется для библиотек).
  • Опция компилятора для вывода исполняемой части контрактов.
  • Проверка времени компиляции на выход за границы доступа к массивам фиксированного размера по целочисленным константам.
  • Строка версии включает версию libevmasm/libethereum (содержит оптимизатор).
  • Исправление ошибки: аксессоры для постоянных общедоступных переменных состояния.
  • Исправление ошибки: распространение исключений в клонируемых контрактах.
  • Исправление ошибки: пустые однострочные комментарии теперь обрабатываются правильно.
  • Исправление ошибки: правильная проверка количества индексированных аргументов для событий.
  • Исправление ошибки: строки в конструкторах структур.

0.1.2 (2015-08-20)

  • Улучшенный интерфейс командной строки.
  • Явное преобразование между bytes и string.
  • Исправление ошибки: передача значений, используемых в клонированных контрактах.
  • Исправление ошибки: проблемы со строками в качестве ключей сопоставления.
  • Исправление ошибки: предотвращение использования некоторых операторов.

0.1.1 (2015-08-04)

  • Строки можно использовать в качестве ключей сопоставления.
  • Клонированные контракты.
  • Члены сопоставления пропускаются для структур в памяти.
  • Использование только одного слота стека для ссылок на хранилище.
  • Улучшенное сообщение об ошибке для неправильного количества аргументов. (#2456)
  • Исправление ошибки: исправление сравнения между типами bytesXX. (#2087)
  • Исправление ошибки: не допускать использование чисел с плавающей точкой для целочисленных литералов. (#2078)
  • Исправление ошибки: некоторые проблемы с большим количеством локальных переменных. (#2478)
  • Исправление ошибки: правильная инициализация переменных состояния string и bytes.
  • Исправление ошибки: правильный расчёт требований к газу для callcode.

0.1.0 (2015-07-10)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-ethereum-solidity.git
git@api.gitlife.ru:oschina-mirror/mirrors-ethereum-solidity.git
oschina-mirror
mirrors-ethereum-solidity
mirrors-ethereum-solidity
develop