Реентранси в смарт-контрактах

Контракт отправляет средства, затем обновляет баланс. Между этими шагами атакующий вызывает его снова — и выводит ещё раз. Это реентранси.

Как работает реентранси

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

Классика — пул или хранилище с наивным выводом. Это баг, стоящий за несколькими известными девятизначными взломами, и его до сих пор релизят, потому что на первый взгляд паттерн выглядит правильным.

Исправление

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

Что реально покрывает аудит

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

Вопросы

Сколько длится аудит смарт-контракта?

Одна-две недели на один контракт, три-пять на полный протокол с тестами и перепроверкой исправлений.

Вы перепроверяете после исправлений?

Да — каждый аудит включает 30 дней поддержки и бесплатную перепроверку закрытого.

Проверьте контракт до релиза

Пришлите контракт — предложение по аудиту за 48 часов.
Заказать аудит смарт-контракта