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

Частые классы ошибок

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

Что снижает риск

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

Что делать пользователю

Смотреть на возраст контракта и объём средств, который он уже пережил без происшествий, — это лучший из доступных сигналов. Не держать в одном протоколе долю, потеря которой недопустима. И проверять, есть ли страхование и что именно оно покрывает.