В DeFi депозиты, займы и обмены автоматически выполняются смарт-контрактами: здесь нет ручной проверки и службы поддержки, которая вернёт деньги, отправленные не туда. Если контракт написан правильно, он становится надёжнейшим набором правил; если в нём ошибка, уязвимость с той же точностью будет «исполнена».

Упомянутая в статье монета: $ETH — 2500.87 (+2.6% за 24 ч).

Код — это закон, и уязвимости тоже:

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

Но если кто-то обнаружит уязвимость в коде и воспользуется ею, средства могут быть выведены всего за несколько транзакций, и вернуть их будет крайне сложно. Пример — The DAO в 2016 году: на контракт напали, воспользовавшись уязвимостью повторного входа. Затем Ethereum решил проблему с помощью хардфорка, а исходная цепочка без форка продолжила существование как Ethereum Classic (ETC).

Что именно проверяют при аудите:

Аудит безопасности — это проверка определённой версии кода сторонней командой по безопасности на конкретный момент времени. В отчёте обычно перечислены обнаруженные проблемы, степень серьёзности каждой из них и то, устранил ли их проект.

К типичным объектам проверки относятся уязвимости повторного входа, ошибки контроля доступа, проблемы с точностью вычислений и риск манипуляций с оракулами. Аудит помогает обнаружить и уменьшить вероятность таких распространённых уязвимостей, но его возможности ограничены временем, ресурсами и объёмом проверки.

Почему проблемы возникают даже после аудита:

Во-первых, аудит охватывает только указанный участок кода: контракты за его пределами и функции, добавленные позже, в проверку не входят. Если после аудита код изменили или фактически развёрнутая версия отличается от проверенной, выводы аудита уже нельзя применять напрямую.

Во-вторых, некоторые риски связаны не с самим кодом: сбой оракула или другого протокола, от которого зависит протокол; кража ключа администратора, имеющего право обновления; подмена веб-интерфейса, который побуждает пользователей подписать вредоносную транзакцию, — всё это может привести к потерям.

Что могут сделать обычные пользователи:

Читая отчёт об аудите, обращайте внимание на дату, охват проверки и проблемы, которые ещё не устранены, а не только на слова «аудит пройден». Также можно проверить, допускает ли контракт одностороннее обновление и защищены ли права на обновление мультиподписью и временной блокировкой.

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

И напоследок:

Аудит — это начало обеспечения безопасности, а не конец. Практичнее считать риски смарт-контрактов неизбежной платой за участие в DeFi, чем верить словам «аудит пройден». За любой доходом стоит соответствующий риск — подумайте, сколько вы можете потерять в худшем случае.

О чём поговорить в следующий раз — о DeFi или о чём-то другом?

Это не инвестиционная рекомендация. Не повторяйте за мной.