Только в образовательных целях; это не инвестиционный совет. Инвестиции могут привести к убыткам.
Краткий ответ
Инфляционная атака на первый депозит нацелена на пустое или почти пустое хранилище ERC-4626. Злоумышленник вносит минимальную сумму, чтобы получить первые доли, а затем напрямую переводит базовые активы в хранилище. Это пожертвование увеличивает totalAssets(), не увеличивая totalSupply(), поэтому каждая существующая доля становится дороже.
Если депозит жертвы пересчитывается по манипулируемому курсу, целочисленное деление может округлить результат до очень малого числа долей или до нуля. Активы жертвы остаются в хранилище, а злоумышленник как владелец обращающихся долей может погасить завышенное требование. Это проблема манипуляции обменным курсом и проскальзывания, а не дефект самого интерфейса ERC-4626.
Как это работает
В простом хранилище без комиссий и защитных смещений число выпускаемых за депозит долей примерно равно assets * totalSupply / totalAssets. ERC-4626 требует округлять расчёт долей для заданной суммы активов вниз в пользу хранилища. При обычном обменном курсе потери от округления малы, но после искусственного роста цены доли депозит стоимостью меньше одной доли может потерять 100% из-за округления.
Успех атаки зависит от деталей реализации. Прямой перевод ERC-20 может увеличить учитываемые активы хранилища без выпуска долей, особенно если totalAssets() считывает баланс токенов хранилища. Злоумышленник также должен опередить жертву, пока предложение долей остаётся очень низким. Хранилища с другим методом учёта или явными мерами защиты могут не иметь такой уязвимости.
Пример
Предположим, что уязвимое пустое хранилище начинает с курса 1:1. Злоумышленник вносит 1 единицу актива и получает 1 долю, а затем напрямую жертвует 999 единиц. Теперь в хранилище 1,000 активов, обеспечивающих 1 долю. Жертва вносит 999 единиц, поэтому после целочисленного округления простой расчёт даёт 999 * 1 / 1,000 = 0 долей.
После этого в хранилище находится 1,999 активов, а существует только 1 доля злоумышленника. Если депозит допускает результат в ноль долей и нет комиссий или других ограничений, злоумышленник может погасить эту долю и получить все 1,999 активов: исходный депозит в 1 единицу, пожертвование в 999 единиц и депозит жертвы в 999 единиц. Валовая прибыль злоумышленника до транзакционных издержек равна 999 единицам жертвы.
Риски и защита
Разработчики могут снизить риск, предоставив значимую начальную ликвидность, сжигая или блокируя первоначальные доли, требуя выпуск как минимум одной доли либо используя модель обменного курса с виртуальными активами и виртуальными долями. Реализация OpenZeppelin добавляет виртуальные суммы и повышает точность долей с помощью смещения десятичных знаков; в документированной модели виртуальные доли получают часть каждого пожертвования, делая манипуляцию невыгодной или значительно более дорогой. У каждой меры защиты есть свои допущения, и её следует проверять на прямых переводах, границах округления, комиссиях, убытках и нестандартном поведении токенов.
Пользователям и интеграторам следует считать previewDeposit() котировкой, а не гарантированным минимумом. Отправляйте депозиты через функцию или маршрутизатор, который обеспечивает минимально допустимое число долей и отменяет транзакцию, если граница не достигнута. Перед депозитом в новое хранилище или хранилище с малым предложением долей проверьте totalAssets(), totalSupply(), формулу конвертации реализации и влияние незапрошенных переводов токенов на учёт. Выгодная котировка интерфейса не защищает транзакцию, порядок исполнения которой можно изменить.
Распространённые заблуждения
-
Миф 1: ERC-4626 сам гарантирует безопасный обменный курс. Стандарт определяет общий интерфейс и правила округления, но не защищает любую реализацию от манипуляции обменным курсом.
-
Миф 2: вызов
previewDeposit()непосредственно передdeposit()гарантирует этот результат. Состояние сети может измениться между вызовами или до исполнения. Путь депозита должен обеспечивать минимальную границу числа долей. -
Миф 3: достаточно отклонять только депозиты с нулевым числом долей. Это предотвращает самый крайний исход, но злоумышленник всё равно может оставить депозиту малое число долей и вызвать крупные потери от округления. Защита должна ограничивать допустимое проскальзывание, а не просто требовать ненулевой результат.
Похожие темы
- Стандарт хранилищ ERC-4626
- Доказательство мошенничества
- Захват инициализатора обновляемого контракта
- Смарт-контракт
- Симуляция транзакции
Источники
- ERC-4626: токенизированные хранилища - Ethereum Improvement Proposals (дата обращения: 2026-08-20)
- Стандарт токенизированных хранилищ ERC-4626 - OpenZeppelin (дата обращения: 2026-08-20)
- Реализация ERC4626 от OpenZeppelin - OpenZeppelin (дата обращения: 2026-08-20)