Перейти к основному контенту

Ошибка округления на 128 млн долларов: как математический баг стоимостью меньше цента опустошил старейший AMM в DeFi в девяти сетях

· 11 мин чтения
Dora Noda
Software Engineer

Восемь вей (wei). Это примерно 0,000000000000000008 токена — количество настолько малое, что оно не имеет значимой долларовой стоимости. Тем не менее, 3 ноября 2025 года злоумышленник превратил ошибки округления такого масштаба в 128 миллионов долларов похищенных активов, опустошив пулы Composable Stable Pools протокола Balancer в девяти блокчейнах менее чем за тридцать минут.

Эксплойт Balancer V2 теперь является крупнейшим в истории мультичейн-взломом DeFi, вызванным одной уязвимостью. За одну ночь он уничтожил 52% от общего объема заблокированных средств (TVL) Balancer, прошел более десяти аудитов безопасности от ведущих фирм отрасли и вынудил одну сеть — Berachain — провести экстренный хардфорк, чтобы вернуть средства. Уязвимость? Всего одна строка кода, которая выполняла округление в неверном направлении.

Как работают пулы Balancer — и где они сломались

Balancer V2 использует концепцию, заимствованную из модели StableSwap от Curve: математический инвариант под названием D, который представляет общую стоимость активов, заблокированных в пуле. Каждый раз, когда пользователь обменивает токены, протокол пересчитывает D, чтобы гарантировать сбалансированность пула. Цена токенов Balancer Pool Tokens (BPT) — LP-токенов, которые пользователи получают при внесении ликвидности — рассчитывается непосредственно из этого инварианта: Цена BPT = D / totalSupply.

Перед расчетом D протокол должен нормализовать балансы токенов до общей точности с помощью функций масштабирования. Именно здесь крылась фатальная ошибка.

Функция _upscaleArray использовала mulDown (округление вниз) при конвертации необработанных балансов токенов в масштабированные значения. Для балансов обычного размера — тысяч или миллионов токенов — округление вниз на долю вей не имеет значения. Но когда баланс токена прижимается к границе всего в 8–9 вей, целочисленное деление в Solidity превращает эту крошечную ошибку округления в массивное относительное искажение.

При 8 вей округление вниз даже на 1 вей представляет собой потерю точности на 12,5%. Подставьте этот искаженный баланс в расчет инварианта, и D упадет. Когда падает D, падает и цена BPT. Когда цена BPT падает искусственно, злоумышленник может купить их дешево и погасить по полной стоимости.

Атака: 65 микро-обменов в одной транзакции

Система мониторинга блокчейна Check Point Research зафиксировала эксплойт в 07:46 UTC 3 ноября 2025 года. К тому времени смарт-контракт злоумышленника уже выполнял разрушительную последовательность действий.

Атака разворачивалась в три этапа, упакованных в одну транзакцию batchSwap, содержащую 65 операций обмена:

Этап 1 — Прижатие к границе. Злоумышленник обменивал большие объемы BPT на базовые токены, намеренно истощая баланс одного из токенов в пуле до критического порога в 8–9 вей. При таком балансе каждая последующая операция с этим токеном вызывала максимальную потерю точности.

Этап 2 — Накопление ошибки. Когда один токен был зажат у границы округления, злоумышленник совершил серию быстрых мелких обменов. Каждый обмен заставлял функцию _upscaleArray округлять значение вниз при масштабировании, что приводило к систематическому занижению инварианта D. Потеря точности при одном обмене была незначительной. Но в ходе 65 операций в рамках одного вызова batchSwap потери накапливались драматически — достаточно, чтобы искусственно подавить цену BPT значительно ниже ее истинного значения.

Этап 3 — Покупай дешево, продавай дорого. Злоумышленник покупал BPT по заниженной цене, а затем немедленно обменивал эти токены на базовые активы по полной стоимости. Разница между манипулируемой ценой и реальной ценой была чистой прибылью.

Вся последовательность — от первого обмена до окончательного вывода средств — заняла менее тридцати минут. Злоумышленник развернул кастомные смарт-контракты с логикой эксплойта, встроенной в конструктор, что означало автоматическое выполнение атаки сразу после развертывания без необходимости дальнейшего взаимодействия.

Девять сетей, один баг

То, что превратило этот серьезный эксплойт в исторический, — это радиус поражения. Один и тот же уязвимый код работал в каждой сети, где были развернуты пулы Composable Stable Pools протокола Balancer V2:

  • Ethereum — крупнейшие пулы и самые тяжелые потери
  • Arbitrum — значительная ликвидность была выведена
  • Base — L2-сеть от Coinbase подверглась удару
  • Optimism — пулы OP Stack опустошены
  • Polygon — целью стали пулы, существующие долгое время
  • Avalanche — скомпрометированы пулы C-Chain
  • Gnosis — затронуты меньшие объемы, но всё же пострадали
  • Berachain — недавно запущенная сеть сильно пострадала
  • Sonic — новейшее развертывание также оказалось уязвимым

Злоумышленнику не требовалось девять различных эксплойтов. Нужен был всего один, развернутый девять раз. Общая кодовая база Balancer, обеспечивавшая эффективное мультичейн-развертывание, стала вектором для одновременного разрушения в нескольких сетях.

Важно отметить, что другие типы пулов Balancer (Weighted Pools, Managed Pools) и более новый протокол V3 остались совершенно не затронуты. Баг был специфичен для математики пулов Composable Stable Pool.

Крах TVL

До эксплойта объем заблокированных средств (TVL) в Balancer V2 составлял 442 миллиона долларов. В течение 24 часов это число рухнуло до 214 миллионов долларов — падение на 52%. По мере распространения новостей и того, как поставщики ликвидности в спешке выводили средства из незатронутых пулов в целях предосторожности, TVL продолжал снижаться, достигнув примерно 182 миллионов долларов в последующие недели.

Для протокола, который был столпом DeFi с 2020 года, это падение было сокрушительным. Balancer пережил медвежий рынок 2022 года, крах Terra и имплозию FTX. Ошибка округления сделала то, чего не смогли макрокатастрофы.

Восстановление: хардфорки, «белые хакеры» и возврат $33 млн

Последствия инцидента привели к одной из самых драматичных кампаний по спасению средств в истории DeFi.

Экстренный хардфорк Berachain. Недавно запущенная сеть предприняла самые решительные действия: валидаторы скоординировали экстренный хардфорк, который заморозил средства злоумышленника в сети (ончейн). Оператор, назвавший себя «белым хакером» (white-hat), вернул похищенные активы Berachain на сумму $12,8 млн, что позволило полностью возместить ущерб пострадавшим пользователям в этой сети.

Прямое восстановление StakeWise. Протокол ликвидного стейкинга выполнил вызов контракта через свой экстренный мультисиг (multisig) для восстановления примерно 5 041 osETH ($19,3 млн) и 13 495 osGNO ($1,7 млн), что составило 73,5% от похищенных у него osETH.

Усилия сообщества и «белых хакеров». Дополнительные меры по возврату средств увеличили общую сумму восстановленных активов примерно до $33 млн, сократив чистые убытки до $95 млн.

Оставшиеся средства — в основном в сетях Ethereum и Arbitrum — были конвертированы злоумышленником в ETH и остаются на идентифицированных кошельках. Будут ли они возвращены путем переговоров, судебных исков или предложений о вознаграждении за обнаружение ошибок (bug bounty), пока остается неясным.

Десять аудитов, ноль обнаружений

Самая неудобная правда об эксплойте Balancer заключается в следующем: код был проверен более десяти раз самыми уважаемыми фирмами по безопасности в индустрии, включая OpenZeppelin, Trail of Bits и Certora.

В 2022 году компания Certora формально верифицировала ключевые свойства платежеспособности Balancer V2. Но эти формальные доказательства специально не охватывали риски направления округления в функциях масштабирования. Верифицированные свойства доказывали, что пулы не могут быть опустошены при нормальных условиях — но «нормальные условия» не учитывали ситуацию, когда злоумышленник намеренно доводит баланс токенов до 8 вей (wei).

Trail of Bits отметила после эксплойта, что проблемы с округлением фиксировались в предыдущих аудитах, но не были приоритезированы как высокорисковые. В то время логика была понятна: отдельные ошибки округления приносят незначительные убытки. Никто не моделировал ситуацию, когда 65 таких ошибок суммируются в одной атомарной транзакции.

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

Тезис «Спецификация — это закон»

Эксплойт Balancer стал хрестоматийным примером для сторонников формальной спецификации — практики написания математических определений того, как протокол должен вести себя, еще до написания самого кода.

Аргумент, выдвигаемый такими фирмами, как a16z и Certora, прост: если бы Balancer придерживался формальной спецификации, гласящей, что «округление никогда не должно приводить к уменьшению D более чем на X% за операцию» или «кумулятивная ошибка округления при N обменах должна оставаться ограниченной», уязвимость была бы поймана на этапе верификации, а не в продакшене.

Канонический инвариант, используемый в большинстве аудитов DeFi — «округление должно быть в пользу протокола», — оказался недостаточным. Он фиксирует направление округления, но не величину накопленной ошибки в потоках из нескольких операций. Подход, ориентированный на спецификацию (spec-first), заставил бы разработчиков протокола определять и защищать каждый математический инвариант, на который опирается их система, включая пограничные случаи при экстремальных диапазонах баланса.

Масштабируется ли этот подход до темпов разработки DeFi — вопрос открытый. Написание и поддержка формальных спецификаций требует значительных инвестиций. Но, как показал эксплойт Balancer, цена отказа от этого может исчисляться девятизначными суммами.

Что это значит для безопасности DeFi

Эксплойт Balancer кристаллизует несколько тенденций, меняющих представление индустрии о безопасности протоколов:

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

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

Пакетные операции нуждаются в гарантиях ограниченных потерь. Функция batchSwap была разработана для эффективности использования газа (gas efficiency), позволяя совершать несколько обменов в одной транзакции. Но она также позволила ошибкам накапливаться без промежуточной проверки. Будущие реализации должны включать проверки инвариантов между пакетными операциями, а не только в начале и в конце.

Непрерывная безопасность лучше разовых аудитов. В отчете Trail of Bits подчеркивается, что индустрии необходимо переходить от изолированных аудитов к непрерывному партнерству в области безопасности, включая постоянный фаззинг (fuzzing), формальную верификацию развивающихся кодовых баз и мониторинг в реальном времени с возможностью автоматической приостановки.

Инфраструктура восстановления имеет значение. Способность Berachain провести хардфорк и заморозить средства, а также экстренное восстановление StakeWise через мультисиг спасли $33 млн. Протоколы и сети, которые инвестируют в инфраструктуру реагирования на инциденты до того, как она им понадобится, находятся в лучшем положении, когда происходит неизбежный эксплойт.

Вопрос о Balancer V3

Единственным утешением стало подтверждение от Certora того, что архитектура Balancer V3 не подвержена этой уязвимости. Редизайн V3 устраняет несоответствия масштабирования, которые сделали возможным эксплойт, что свидетельствует о том, что команда Balancer уже определила обработку точности как область для улучшения — даже если конкретный вектор атаки не был предусмотрен.

Для поставщиков ликвидности, рассматривающих возможность возврата в Balancer, принятие V3 становится критически важным показателем. Долгосрочная жизнеспособность протокола зависит от того, сможет ли он перенести оставшуюся ликвидность V2 на более безопасную архитектуру до того, как доверие пошатнется еще сильнее.

Урок, который постоянно повторяется

С 2020 года сектор DeFi потерял более 2 миллиардов $ из-за атак с использованием мгновенных займов (flash loans) и математических эксплойтов. Эксплойт Balancer — это самая наглядная иллюстрация паттерна, который индустрия никак не может преодолеть: крошечные арифметические ошибки, невидимые для аудиторов и не замечаемые годами, превращаются в девятизначные катастрофы, когда злоумышленник находит правильную последовательность операций для их извлечения.

Ошибка округления в восемь вей. Похищено 128 миллионов $. Скомпрометировано девять сетей. Десять аудитов пройдено. Тридцать минут от первого свопа до окончательного вывода средств.

Эти цифры рассказывают историю, которую индустрия DeFi больше не может позволить себе игнорировать: в системе, где код — это закон, каждое решение об округлении является решением о безопасности.


BlockEden.xyz предоставляет инфраструктуру RPC и API корпоративного уровня для множества блокчейн-сетей со встроенным мониторингом, предназначенным для обнаружения аномальной ончейн-активности. Поскольку протоколы DeFi сталкиваются с проблемами безопасности в кроссчейн-среде, надежная инфраструктура с возможностью наблюдения в реальном времени становится необходимой. Изучите наш маркетплейс API, чтобы создавать решения на базе платформы, спроектированной с приоритетом безопасности.