Solidity исправляет ошибку оптимизатора Yul, затрагивающую версии 0.8.19–0.8.37
В Solidity в версии 0.8.38 исправлена ошибка низкой степени серьёзности в оптимизаторе Yul. Ошибка затрагивает контракты, скомпилированные с включённым оптимизатором Yul в Solidity 0.8.19–0.8.37. При определённых условиях устаревшие данные учёта могут привести к тому, что оптимизатор Yul сочтёт две области памяти или хранилища разными, хотя на самом деле они перекрываются. Из-за этого контракт может вернуть устаревшее значение или пропустить необходимую запись.
Об ошибке сообщил Daniel Boye, а позднее Surya Prakash Akula показал, что её можно вызвать обычным кодом Solidity без встроенного ассемблера. Контракты, скомпилированные с `--via-ir`, потенциально могут быть затронуты широко; при использовании стандартного конвейера EVM assembly круг уязвимых случаев уже. Ошибка не возникает, если оптимизатор Yul отключён.
Проверка, проведённая Solidity примерно на 283 000 проверенных компиляциях `via-ir` и 607 000 компиляциях EVM assembly, не выявила различий в байткоде при сравнении сборок с исправлением и без него. По словам команды, это указывает на редкость ошибки, но не гарантирует, что ни один развёрнутый контракт не затронут. Разработчикам следует обновиться до Solidity 0.8.38 или более поздней версии и проверить развёрнутые контракты, собранные затронутыми версиями. Для трейдеров это адресное предупреждение о надёжности смарт-контрактов, а не свидетельство масштабных сбоев сети Ethereum или рынка.
Neutral
Это объявление о безопасности и обновлении для разработчиков, а не свидетельство эксплуатации уязвимости, сбоя сети или потери средств. Solidity оценивает серьёзность ошибки как низкую и сообщает, что при проверке почти 890 000 верифицированных компиляций не было обнаружено различий в байткоде между сборками с исправлением и без него. Кроме того, для возникновения проблемы необходимы определённые условия, связанные с оптимизатором и переназначением адресов, что ограничивает её вероятный масштаб. Эти обстоятельства делают маловероятным немедленное масштабное влияние на ETH или цены криптовалютного рынка в целом.
В краткосрочной перспективе трейдеры могут следить за сообщениями проектов, использующих Solidity 0.8.19–0.8.37, особенно если они компилировались с оптимизатором Yul или с параметром `--via-ir`. Если широко используемый протокол сообщит об уязвимых развернутых контрактах или потерях в результате эксплуатации, доверие может ослабнуть, что приведёт к продажам токенов отдельных проектов или временному росту волатильности. В этой статье о подобных инцидентах не сообщается, поэтому широкая негативная трактовка не обоснована.
В долгосрочной перспективе исправление в Solidity 0.8.38 и рекомендованные этапы проверки должны снизить уровень риска по мере того, как команды будут обновлять и тестировать затронутые развёртывания. Как и в случае с другими раскрытиями уязвимостей компиляторов, ключевые рыночные сигналы — подтверждённая эксплуатация, TVL затронутых протоколов, экстренные приостановки работы и меры по устранению проблемы со стороны проектов, а не просто наличие уже исправленной уязвимости компилятора. В целом новость нейтральна с точки зрения направления рынка, но важна для мониторинга рисков смарт-контрактов.