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 постраждалих протоколів, екстрені призупинення роботи та заходи з усунення проблем, вжиті проєктами, а не сам факт існування проблеми компілятора, для якої вже випущено виправлення. Загалом новина є нейтральною щодо напрямку ринку, але важливою для моніторингу ризиків смартконтрактів.