Станьте свидетелем истории сегодня. Известный протокол DEX CurveFinance был атакован, в результате чего была истощена ликвидность нескольких пулов. Предварительное расследование показало, что виноват компилятор смарт-контрактов Vyper. Это было настолько возмутительно, что люди не могли не назвать его хорошим парнем! Предварительная статистика показывает, что убытки превысили 50 миллионов долларов США, а мгновенная цена токена платформы CRV была близка к нулю!
Чтобы кратко объяснить друзьям, не разбирающимся в технических вопросах, когда мы используем блокчейн, мы часто имеем дело с кодами, работающими на блокчейне. Эти коды называются «смарт-контрактами».
Для публичной сети, такой как Ethereum, которая фокусируется на смарт-контрактах, у нее есть набор стандартных кодов для смарт-контрактов для тех, кто разрабатывает на ней приложения (также называемые dApp, децентрализованное приложение) для написания и запуска приложений. Например, Uniswap и Curve — это приложения dApp, работающие на Ethereum.
Поскольку компьютер должен быть простым в использовании и экономить место для хранения, стандартный код, хранящийся в цепочке, представляет собой очень компактное двоичное число, близкое к машинному языку, которое людям неудобно читать и писать напрямую.
Чтобы сделать открытие приложений более удобным, для написания программ было изобретено множество «языков высокого уровня», удобных для чтения и записи человеком. Раньше в Ethereum было три типа. Один и тот же синтаксис похож на язык LISP и не стал популярным. Другой похож на язык Python, потому что его продвигал Виталик (основатель Ethereum), под названием Vyper. синтаксис аналогичен языку Javascript, называемому Solidity.
После того, как программисты напишут программы смарт-контрактов на этих языках высокого уровня, им необходимо использовать инструмент, называемый «компилятор», для «перевода» их на «машинный язык», который может работать на блокчейне Ethereum, то есть в стандартный код.
Очевидно, что разные языки высокого уровня имеют разные компиляторы. Это легко понять. Японский перевод и английский перевод определенно отличаются. Ошибка лежит в компиляторе/переводчике.
На этот раз Curve подверглась атаке из-за ошибки в конкретной версии компилятора Vyper, используемой некоторыми пулами Curve (предположительно, все еще находится на стадии дальнейшего расследования). Это все равно, что сказать «Я хочу пить» на японском языке, и переводчик переводит это на японский язык. На китайском это было переведено как «Я хочу есть крабов». Это возмутительно
К счастью, популярность Vyper невелика. В настоящее время Solidity является наиболее используемым в Ethereum и совместимых цепочках. Английский переводчик понятнее и ошибок перевода нет, слава богу
На заре существования Uniswap, лидер DEX и основатель Хейден использовал язык Vyper для написания кода. К счастью, позже Хайден нанял профессионального технического директора и изменил код на Solidity. Итак, на этот раз из-за проблемы с компилятором Vyper Uniswap цел и невредим. Пострадала компания Curve Finance, которая широко использует язык Vyper.
Проблема, вызванная этим дефектом, является классической «проблемой повторного входа». Если вспомнить тот год, то в 2015 году инцидент с DAO напрямую привел к хард-форку Ethereum, разделившему его на ETH и ETC. Эта проблема повторного входа на самом деле является проклятием истории!
Но проблема с повторным входом в The DAO произошла на уровне языка высокого уровня. То есть вы неправильно говорили по-английски. Вы изначально хотели пить, но вместо этого сказали, что хотите съесть крабов. Переводчик не ошибся. перевод.
Что касается этого инцидента с Curve, то самое страшное в том, что вы поняли это правильно, но переводчик понял это неправильно, и вы не смогли этого понять (аудиторская компания не будет проверять скомпилированный двоичный код), поэтому это было введено без чьего-либо участия. заметил фатальную ошибку! Это также прозвучало тревожным звонком для всей сегодняшней индустрии DeFi и даже для всей индустрии блокчейнов!
Сегодня все, от авторов кода до рецензентов кода и сторонних аудиторов, не будут смотреть на скомпилированный двоичный код. Все полагают, что с компилятором проблем не будет. Пока они видят, что язык высокого уровня написан правильно, они думают, что проблем не будет.
Почему Сатоши Накамото не добавил в скрипт BTC слишком мощные функции смарт-контрактов? Это делается для того, чтобы избежать непростительных ошибок, вызванных повышенной сложностью. Некоторые люди критикуют BTC за консервативность, но перед лицом активов стоимостью в миллионы, десятки или даже миллиарды долларов осторожность и консерватизм никогда не бывают лишними. Большинство людей по-прежнему остаются обычными людьми. Потеря десятков или миллионов долларов станет смертельным ударом для того, кто на нее обрушится.
Это также подчеркивает предупреждение закона Мерфи: любая ссылка, которая может пойти не так, обязательно будет работать неправильно, пока пройдет достаточно времени. На этот раз это был Вайпер, и ему действительно повезло. А что, если в Solidity есть фатальная уязвимость? Весь DeFi с тысячами протоколов, десятками миллиардов активов и блестящими зданиями был построен на зыбучих песках. и они все рухнули. Разве это не ужасно?
Почему трудно путешествовать по циклам? Прежде чем преследовать ту или иную цель мечты, вам следует сначала проверить, сможете ли вы «дожить до этого дня». Во многих случаях выживание — победитель, а остаток — король.