Хуки Uniswap v4 для поставщика ликвидности: 24% пулов и 0,806 свопа в сутки

40 мин. чтения
Bybit
SpaceX за крипту
Дробные доли · 24/7
Открыть рынок →

Коротко (TL;DR)

Хук (hook) — отдельный смарт-контракт, который Uniswap v4 разрешает подключить к пулу и вызывает в заранее описанных точках: перед свопом и после него, при внесении и снятии ликвидности. Для поставщика ликвидности (LP — liquidity provider, тот, кто вносит в пул деньги) это значит одну вещь: между ним и протоколом появляется третья сторона со своим кодом, своей экономикой и своей командой.

  • Хук у пула ровно один, и он выбирается при создании. Заменить его потом нельзя, а один и тот же контракт обслуживает сколько угодно пулов — ошибка в нём бьёт по всем сразу.
  • Хуки уже не эксперимент, но ещё не норма. На 28 августа 2026 года хук стоит у 30 533 из 127 063 пулов v4 на Ethereum (24,03%), и через такие пулы прошло 20,28% свопов за сутки. Годом раньше независимый замер давал 8,28%.
  • Пул с хуком торгуется РЕЖЕ обычного: 0,806 свопа в сутки против 1,002 у пула без хука. Экзотика внутри пула сама по себе оборот не приводит.
  • Главный обещанный сценарий — динамическая комиссия — публично измерен ровно один раз, и сделала это сама команда хука о своём пуле. У пула Bunni неделя апреля 2025 дала +0,193602% скорректированного по TVL маркаута, а после включения в расчёт свопов ребаланса тот же результат превратился в −0,791218%.
  • Цена доверия к чужому коду уже посчитана: Cork — $11–12 млн (28 мая 2025), Bunni — $8,4 млн (2 сентября 2025) и безвозвратное закрытие проекта. Суммарно через хуки v4 потеряно больше $20 млн.
  • Ссылка на аудит есть у 30 записей из 641 в официальном реестре хуков самой Uniswap — 4,7% при верифицированном исходном коде у 100%.

Формула урока: хук меняет не доходность, а список тех, кому вы доверяете.

Хук — это чужой контракт с правами внутри вашего пула

Начнём с определения, потому что от него зависит всё остальное. Документация Uniswap описывает хуки как внешние смарт-контракты, подключаемые к отдельным пулам: «у каждого пула может быть один хук, но один хук способен обслуживать бесконечное количество пулов, перехватывая и меняя ход исполнения в конкретных точках операций с пулом». Слово «внешние» здесь ключевое: код хука не входит в протокол, его пишет и разворачивает кто угодно.

Этот разбор — урок блока «DEX и ликвидность» курса «DeFi: от первой транзакции до профи-стратегий».

Bybit · Rewards Hubдо $30,100Внеси депозит, торгуй 14 дней — и забери награды в Rewards HubЗабрать бонус →

Из этой фразы следуют три вещи, которые вкладчику важнее любых новинок v4. Первая: хук у пула один и задаётся в момент создания пула, в вызове PoolManager.initialize. Второе: один и тот же смарт-контракт обслуживает много пулов, и в моём скане Ethereum 30 533 пула с хуком приходятся всего на 7 165 уникальных адресов — примерно 4,3 пула на контракт. Третье: хук опционален. Пул без хука в v4 — обычный концентрированный AMM, знакомый по v3.

Одна оговорка про архитектуру, дальше к ней не возвращаемся. В v4 все пулы живут внутри одного контракта-синглтона PoolManager, а переводы токенов сведены в конец транзакции (flash accounting: протокол пишет не абсолютные балансы, а изменения — дельты). Практическое следствие ровно одно: создать свой пул со своим хуком стало дёшево, поэтому пулов не сотни, а сотни тысяч, и «пул на Uniswap» перестал быть однородной вещью. Это же объясняет, почему у хука есть законный способ вклиниться в расчёт и переписать итоговые дельты — и свою, и чужую.

Масштаб самой площадки при этом уже не маргинальный: за 30 дней к 28 августа 2026 года через v4 прошло $24,384 млрд против $25,315 млрд у v3 и $0,809 млрд у v2, то есть 48,3% оборота трёх версий Uniswap; за сутки доля v4 составила 55,4%, за неделю — 45,6%, а накопленный объём v4 достиг $419,6 млрд. Если вы кладёте деньги в пул на децентрализованной бирже Uniswap, шанс попасть именно в v4 сегодня примерно равен шансу попасть в v3 — и вопрос «а какой там хук» стал обязательным.

Десять точек, где хук вклинивается в жизнь пула

Хук не «работает всё время». Он вызывается в конкретных местах, и таких мест ровно десять: по паре до и после на каждую из пяти операций пула. Разработчик выбирает, какие из них реализовать: «можно смешивать их как угодно — использовать одну или все».

Момент жизни пулаКолбэкиЧто здесь можно сделать с деньгами LP
Создание пулаbeforeInitialize, afterInitializeзадать стартовую комиссию, привязать пул к своей логике; вызываются один раз за всю жизнь пула
Внесение ликвидностиbeforeAddLiquidity, afterAddLiquidityпроверить адрес вносящего и отказать во входе, начислить или не начислить учётную запись позиции
Снятие ликвидностиbeforeRemoveLiquidity, afterRemoveLiquidityпосчитать штраф за выход, отказать в снятии, уронить транзакцию
СвопbeforeSwap, afterSwapназначить комиссию именно этой сделки, перехватить часть суммы, обойти родное ценообразование
ДонатbeforeDonate, afterDonateраспорядиться прямым переводом токенов действующим LP пула, минуя своп

Документация отдельно отмечает, что колбэки на ликвидность «крайне гранулярны из соображений безопасности»: вход и выход LP разведены нарочно, чтобы хук мог относиться к ним по-разному. Для вкладчика это и хорошая новость (право на вход и право на выход — разные права), и плохая (никто не мешает сделать вход дешёвым, а выход дорогим).

К десяти колбэкам добавляются четыре флага возврата дельты — beforeSwapReturnsDelta, afterSwapReturnsDelta, afterAddLiquidityReturnsDelta, afterRemoveLiquidityReturnsDelta. Это не отдельные точки вызова, а разрешение изменить ИТОГ операции: сколько токенов в конце получит своппер, а сколько — сам хук. Итого 14 бит разрешений, и в коде протокола это записано константой ALL_HOOK_MASK = uint160((1 << 14) - 1). Ходовое в обзорах «восемь типов хуков» — просто неверно.

Именно на возврате дельты держится hook fee — собственный сбор хука. Документация Uniswap описывает его как способ «монетизировать свои хуки»: сбор отдельный от комиссии пула, считается обычно в beforeSwap, а среди штатных сценариев прямо названы «withdrawal penalties» — удержания при выводе ликвидности. Верхнего предела у hook fee в протоколе нет вовсе. Для контраста: сбор самого протокола жёстко ограничен 0,1% (MAX_PROTOCOL_FEE = 1000 при знаменателе 1 000 000).

BYBITВсё ещё смотришь со стороны?Рынок работает без выходных. Счёт на Bybit открывается за 2 минуты.Начать сейчас

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

Права хука видны в его адресе: как прочитать 14 бит

Это единственная проверка хука, доступная вкладчику без чтения исходников, и её не описывает ни один обзорный материал. Комментарий в Hooks.sol говорит прямо: «v4 решает, вызывать ли конкретные хуки, изучая младшие биты адреса, на который развёрнут контракт хука». То есть полномочия не хранятся в отдельном реестре — они зашиты в сам адрес, и разработчик специально подбирает адрес развёртывания под нужный набор прав.

Порядок действий:

  1. Возьмите адрес хука из пула — его показывает эксплорер в событии Initialize или витрина пула.
  2. Отбросьте всё, кроме последних четырёх шестнадцатеричных символов: все значащие разрешения лежат в младших 14 битах.
  3. Переведите эти четыре символа в двоичную запись — получится 16 разрядов, значащие из них младшие 14.
  4. Сопоставьте разряды с таблицей ниже.
БитКонстанта в Hooks.solЧто разрешает хуку
1 << 13BEFORE_INITIALIZE_FLAGвмешаться при создании пула
1 << 12AFTER_INITIALIZE_FLAGто же, сразу после создания
1 << 11BEFORE_ADD_LIQUIDITY_FLAGвмешаться до внесения ликвидности
1 << 10AFTER_ADD_LIQUIDITY_FLAGто же, после внесения
1 << 9BEFORE_REMOVE_LIQUIDITY_FLAGвмешаться до снятия ликвидности
1 << 8AFTER_REMOVE_LIQUIDITY_FLAGто же, после снятия
1 << 7BEFORE_SWAP_FLAGвмешаться до свопа, здесь же назначается комиссия
1 << 6AFTER_SWAP_FLAGвмешаться после свопа
1 << 5BEFORE_DONATE_FLAGвмешаться до доната в пул
1 << 4AFTER_DONATE_FLAGто же, после доната
1 << 3BEFORE_SWAP_RETURNS_DELTA_FLAGпереписать итог свопа, взять свою долю
1 << 2AFTER_SWAP_RETURNS_DELTA_FLAGто же, на выходе из свопа
1 << 1AFTER_ADD_LIQUIDITY_RETURNS_DELTA_FLAGудержать часть денег при ВХОДЕ LP
1 << 0AFTER_REMOVE_LIQUIDITY_RETURNS_DELTA_FLAGудержать часть денег при ВЫХОДЕ LP

Пример разбора приведён в самом коде протокола: контракт по адресу 0x0000000000000000000000000000000000002400 имеет младшие биты 10 0100 0000 0000, и это включает колбэки «до создания пула» и «после внесения ликвидности». Быстрая прикидка без калькулятора: бит 0 — последняя двоичная цифра, а значит, его видно по последнему символу адреса. Последний символ нечётный (1, 3, 5, 7, 9, b, d, f) — у хука есть право удержать часть денег на выходе поставщика ликвидности.

Теперь самое интересное: чего хуки просят на практике. Я разобрал по этой маске адреса всех 30 533 пулов Ethereum с хуком на 28 августа 2026 года и рядом посчитал те же доли по 641 записи официального реестра Uniswap — две независимые выборки, собранные разными способами.

ПравоПулы Ethereum с хукомРеестр Uniswap, 641 запись
beforeSwap — вмешаться в своп86,94%79,6%
afterSwap61,45%79,9%
beforeSwapReturnsDelta — переписать итог свопа79,68%51,2%
beforeAddLiquidity — вмешаться во вход LP21,52%35,1%
beforeRemoveLiquidity — вмешаться в выход LP4,59%14,7%
afterRemoveLiquidityReturnsDelta — удержать на выходе2,00%1,1%
afterAddLiquidityReturnsDelta — удержать на входе0,09%1,1%

Обе выборки говорят одно и то же. Право менять итог свопа (любой из флагов *SwapReturnDelta) есть у 87,68% пулов с хуком на Ethereum. Право вклиниться в добавление или снятие ликвидности — у 27,31%. А право удержать часть денег на входе или выходе LP — только у 2,03%, это 620 пулов из 30 533. Страшилка «хук заберёт мои деньги на выходе» технически возможна и задокументирована, но встречается у двух пулов из сотни, и проверяется одним взглядом на адрес. Реально же хук почти всегда стоит между трейдером и ценой, а не между вкладчиком и его деньгами.

Хуки стоят у 24% пулов, а сделок берут 20%: замер на 28 августа

Цифры принятия хуков, которые кочуют по выдаче, устарели в разы: «2 500 пулов с хуками» до сих пор встречается в обзорах и разборах маркет-мейкеров. Поэтому я посчитал сам — по всем событиям Initialize и Swap контракта PoolManager, через Etherscan V2 с встречной проверкой на независимом провайдере (на контрольном диапазоне блоков множества логов совпали побайтово).

Показатель на 28.08.2026EthereumUnichain
Пулов v4 всего127 0637 585
Из них с хуком30 533 (24,03%)5 397 (71,15%)
Уникальных контрактов-хуков7 1651 227
Пулов с динамической комиссией1 680 (1,32%)2 559 (33,74%)
Право переписать итог свопа87,68%76,88%
Право трогать вход или выход LP2,03%5,26%

Совокупно по двум сетям — 134 648 пулов, из них 35 930 с хуком (26,68%) на 8 383 уникальных адресах. И сразу оговорка о границах замера: Base и Arbitrum посчитать не удалось (у Base бесплатный доступ к логам закрыт, Arbitrum отдаёт пустой ответ), поэтому все ончейн-числа урока относятся только к Ethereum и Unichain. По официальному реестру Base — вторая сеть по числу известных хуков (179 записей), так что реальная картина по всей v4 шире нашей выборки.

Дальше — торговля. За сутки (блоки Ethereum 25844691–25851891) в v4 прошло 121 280 свопов, из них 24 599 через пулы с хуком, то есть 20,28%. Карта «пул — хук» построена по всем событиям создания пулов, свопов с неизвестным пулом ноль, так что дыр в подсчёте нет. Годом раньше независимый замер Auditless давал 8,28% — доля выросла примерно вдвое-втрое, но четыре пятых торговли по-прежнему идёт мимо хуков.

А теперь производная величина, ради которой всё считалось. 24 599 свопов на 30 533 пула — это 0,806 свопа на пул с хуком в сутки. 96 681 своп на 96 530 обычных пулов — 1,002. Пул с хуком получает примерно на пятую часть МЕНЬШЕ сделок, чем пул без хука. Это прямо противоречит рамке большинства обзоров, где хук подаётся как способ сделать пул привлекательнее для торговли.

Причина не мистическая, и она записана в самой документации Uniswap: «то, что вы сделали хук, ещё не значит, что интерфейс Uniswap направит в него ликвидность». Поддержка хуков в стандартной маршрутизации вводится постепенно, а быстрый путь к потоку сделок — самому запустить филлера UniswapX для своих пулов. Есть и отдельный список хуков, допущенных к маршрутизации в интерфейсе; сам список нам открыть не удалось (страницы поддержки Uniswap закрыты защитой от ботов), но факт его существования взят из документации разработчика. Для вкладчика вывод практический: пул с хуком может существовать и не получать ни одной сделки, а LP без оборота зарабатывает ноль и при этом несёт весь рыночный риск позиции.

Распределение внутри самих хуков тоже крайне неровное. Топ-20 хуков собирают 18 834 свопа — 76,56% всей торговли через хуки; крупнейший отдельный хук берёт 3,64% всех свопов v4 на Ethereum. То есть «7 165 контрактов-хуков» — это длинный хвост из мёртвых развёртываний, а работают несколько десятков.

Динамическая комиссия: +0,19% у Bunni и −0,79% после ребаланса

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

Механика в протоколе жёсткая. Пул объявляется динамическим значением комиссии 0x800000 в момент создания, и это свойство неизменяемо: «возможность динамической комиссии определяется при создании пула и не может быть изменена позже». Дальше комиссию обновляет либо сам хук вызовом updateDynamicLPFee, либо она возвращается прямо из beforeSwap для каждой сделки. Потолок при этом — MAX_LP_FEE = 1 000 000 сотых базисного пункта, то есть 100% суммы свопа. Ограничения «разумной» комиссии в протоколе нет.

Как часто это реально используют — уже видно из таблицы выше: 1,32% пулов Ethereum и 33,74% пулов Unichain, суммарно 4 239 пулов из 134 648 (3,15%). Среди заметных хуков доля выше — в официальном реестре свойство dynamicFee стоит у 192 записей из 641, это 30%.

Теперь главный вопрос урока: стал ли LP от этого богаче. Публичное измерение на живых деньгах существует ровно одно — эксперименты команды Bunni, опубликованные в апреле 2025. Мерили маркаут: прибыль или убыток пула от каждого свопа, оценённые по ценам через короткое время после сделки и поделённые на TVL, чтобы сравнивать пулы разного размера. Конфигурация F — максимальная динамическая комиссия 10% и вчетверо более быстрый её рост.

Что считаемПул BunniСравнимый пул Uniswap v3
Маркаут за 10–16.04.2025, без свопов ребаланса+$18,76 / +0,193602%−$11 915,14 / −0,034900%
То же плюс свопы ребаланса (окно 10–17.04.2025)−$17,07 / −0,791218%+$5 557,96 / +0,095429%
То же при НУЛЕВОМ проскальзывании ребаланса+$4,32 / −0,290274%+$5 557,96 / +0,095429%

Первая строка — это то, что команда назвала «джекпот»: хук с агрессивной комиссией обошёл обычный пул. Вторая появилась после того, как Uniswap Foundation указал, что в расчёт надо включить и свопы, которыми хук сам двигает ликвидность. Ребаланс — не бесплатная услуга: пул продаёт активы, чтобы перестроить позицию, и платит за это рынку. С учётом этих сделок результат перевернулся. Третья строка — попытка вычесть стоимость исполнения полностью: даже при идеальном ребалансе относительный итог остался хуже обычного пула v3.

Цена одной операции ребаланса видна на живой транзакции, которую команда привела сама: пул продал ETH справедливой стоимостью 889,94 USDC, а получил 881,04 USDC. Потеря 8,90 USDC, то есть 889,94 − 881,04 = 8,90 и 8,90 / 889,94 = 1,00% за одну операцию. Лимит проскальзывания был выставлен в 1% ради высокой доли исполненных заявок, и исполнитель стабильно забирал почти весь лимит.

Как это читать. Замер сделан командой-разработчиком хука о своём же продукте, окно — одна неделя, один пул ETH/USDC, суммы копеечные ($18,76 итога за неделю). Как доказательство «динамическая комиссия работает» это слабо. Но как доказательство «стоимость собственных операций хука съедает выигрыш» — сильно, потому что свидетельствует против автора замера. Ровно поэтому фраза «динамическая комиссия приносит LP больше» в этом уроке отсутствует: единственная публичная проверка говорит обратное.

Есть и второе наблюдение из того же материала, важное для понимания, за счёт чего хук вообще может выигрывать. Розничный поток составлял более 75% объёма пулов Bunni против 9,3% у сравнимого пула Uniswap v3 — хук притягивал «неинформированные» сделки, на которых LP зарабатывает. Обратная сторона там же: в первом, неудачном пуле свыше 40% объёма давали MEV-боты, и при падении цены ETH на 16,87% стоимость позиции упала на 36,39%. Слишком быстрый сдвиг диапазона фиксировал непостоянные потери, вместо того чтобы их гасить.

Комиссия свопа в v4: 11 тысяч уровней и 58% пулов дороже 1%

У этой темы есть побочный эффект, которого не описал никто. Вместе с приходом хуков v4 отменила фиксированные уровни комиссии: в v3 их было четыре (0,01%, 0,05%, 0,30% и 1,00%), в v4 создатель пула ставит любое значение. Я посчитал поле fee у всех 127 066 событий создания пулов на Ethereum: используется 11 036 различных статических значений, максимальное встреченное — 999 999 сотых базисного пункта, то есть 99,9999%. Самое частое отдельное значение — 0%: 19 664 пула, 15,48% всех. Комиссию выше 1%, то есть выше самого дорогого уровня v3, имеют 74 011 пулов — 58,25%.

Это выглядит пугающе, поэтому я проверил гипотезу вторым замером: сопоставил карту «пул — комиссия» с логами свопов за сутки, снятыми до блока 25852007.

Оговорка про знаменатели, чтобы числа не смущали. Замеры сделаны тремя последовательными сканами с интервалом в несколько минут, поэтому пулов в них слегка разное количество: 127 063 в разделе про хуки, 127 066 и 127 068 здесь; свопов за сутки — 121 280 и 120 960. За время сканирования в сети появлялись новые пулы и сделки, разница составляет сотые доли процента. Доли внутри каждой таблицы посчитаны от её собственного знаменателя, а складывать числа из разных таблиц между собой не нужно.

Комиссия пулаПуловДоля пуловСвопов за суткиДоля сделокСвопов на пул
0%19 66415,48%14 39811,90%0,732
до 0,05%6 9245,45%40 18933,23%5,804
0,05–0,3%11 4409,00%33 07427,34%2,891
0,3–1%13 34710,50%16 98314,04%1,272
1–10%16 26212,80%4 9004,05%0,301
10–50%11 6619,18%8200,68%0,070
дороже 50%46 09036,27%2980,25%0,006
динамическая1 6801,32%10 2988,51%6,130

Первый вывод: дорогие пулы — мёртвый хвост, и это теперь измерено, а не предположено. Пулы дороже 1% занимают 58,25% всех пулов и дают 4,98% сделок; пулы дороже 50% — больше трети всех пулов и 0,25% сделок, то есть 0,006 свопа на пул в сутки. Заградительная комиссия в 88–99% почти наверняка не плата за ликвидность, а механизм: антиснайпинг, сбор в пользу создателя токена, фактический запрет торговли. Но для вкладчика факт остаётся: «пул на Uniswap v4» больше не означает понятную комиссию из четырёх вариантов, и уровень комиссии надо смотреть до депозита ровно так же, как адрес хука.

Второй вывод — единственная цифра во всём замере, которая говорит В ПОЛЬЗУ хуков. Пулы с динамической комиссией при доле в 1,32% пулов забирают 8,51% сделок: 6,130 свопа на пул в сутки против средних 0,952, в 6,4 раза активнее. Там, где хук ставят ради динамической комиссии, оборот действительно есть. Это не то же самое, что «LP там зарабатывает больше» — про доходность говорит предыдущий раздел, — но оборот в таких пулах реальный, а не нарисованный.

Полезно помнить и про изменение в учёте самой комиссии LP. В v4 накопленная комиссия работает как кредит при изменении позиции: увеличение ликвидности превращает заработанное в ликвидность внутри позиции, а уменьшение автоматически требует забрать неполученную комиссию. Плюс появился параметр salt, позволяющий держать несколько независимых позиций в одном диапазоне. Это поведение базового протокола, от хука оно не зависит.

Аукцион права на арбитраж: кому платит am-AMM и что достаётся LP

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

Идея хуков — не бороться с арбитражем, а продавать право на него.

  • am-AMM (auction-managed AMM). Проводится аукцион за право назначать комиссию пула и арбитражить его; плата победителя достаётся поставщикам ликвидности. Модель предложена исследователями Uniswap Labs и Paradigm.
  • Angstrom (Sorella Labs). Поисковики торгуются за право арбитражить пул с нулевой комиссией, а выручка аукциона перенаправляется LP.
  • MEV-налог на Unichain. Через приоритетное упорядочивание транзакций контракт может брать собственную комиссию с той суммы, которую претендент платит за приоритет в блоке.
  • Донат-колбэки. Техническая база для всех схем возврата: beforeDonate и afterDonate позволяют перевести токены действующим LP пула напрямую, минуя своп.

Теперь честный ответ на главный вопрос. Сколько именно такой аукцион возвращает поставщику ликвидности — публично не измерено. Ни в материалах команд, которые эти механизмы строят, ни в независимых разборах нет ни одной цифры отдачи: арбитраж назван крупнейшей формой извлечения стоимости и «ненужными издержками», но во сколько процентов годовых это превращается для вкладчика, не сказано нигде. Единственный найденный публичный замер отдачи LP на живом хуке — тот самый эксперимент Bunni, и он не про аукцион, а про динамическую комиссию.

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

Чем LP платит за хук: Cork на $11–12 млн и Bunni на $8,4 млн

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

Cork ProtocolBunni v2
Дата28 мая 20252 сентября 2025
Потери$11–12 млн$8,4 млн двумя пулами — weETH/ETH на Unichain и USDC/USDT на Ethereum
Что сломалосьу колбэка beforeSwap контракта CorkHook не было модификатора onlyPoolManagerошибка округления в учёте простаивающего баланса BunniHook
Как выглядела атакапрямой вызов колбэка с произвольными параметрами в обход нормального маршрута свопа44 микроснятия, каждое из которых формально проходило проверку расчётов PoolManager
Что было до этогочетыре аудита протоколастатус крупнейшего LP-ориентированного хука v4
Чем закончилосьсумма расходится у аудиторов: $11 млн у Dedaub, $12 млн у Trail of Bits, Cyfrin и Halbornбезвозвратное закрытие проекта 23 октября 2025

Случай Cork ломает главный бытовой критерий вкладчика — «протокол же аудирован». По разбору Dedaub, Cork прошёл ревью у четырёх аудиторских фирм, но трое из четырёх не включали уязвимый контракт CorkHook в область работ. Этот сюжет подтверждён одним источником, поэтому подаём его именно как реконструкцию Dedaub, а не как общеизвестный факт. Вопрос к аудиту в мире хуков звучит иначе, чем раньше: проверен ли САМ ХУК, а не протокол вокруг него, и кем.

История Bunni показывает вторую половину цены. Пул технически остался в PoolManager, но обслуживать его стало некому: команда объявила, что на безопасный перезапуск нужны «6-7 figures in audit & monitoring expenses alone», которых у неё нет. Что стало с деньгами вкладчиков, видно по ряду TVL DeFiLlama: пик $79,83 млн (19 августа 2025), $50,58 млн в день эксплойта (2 сентября 2025), $1,14 млн на следующей доступной точке ряда (30 сентября 2025), $709 746 в день объявления о закрытии (23 октября 2025) и $214 180 на 28 августа 2026 года. Падение от пика к сегодняшнему дню — 99,73%. В ряду DeFiLlama есть разрыв между 2 и 30 сентября, поэтому корректная формулировка — «за месяц после атаки», а не «на следующий день».

Семь классов ошибок Trail of Bits: два риска прямо для вкладчика

В июле 2026 года Trail of Bits свела находки своих аудитов в каталог из семи повторяющихся классов ошибок в хуках: незакрытые колбэки; приём произвольного PoolKey от пользователя; ошибки собственного учёта балансов; логика не в том колбэке; несовпадение битов разрешений с реализованными функциями; отказ в обслуживании из-за падения необязательного кода; изменение состояния хука между вложенными колбэками. Суммарные потери только по Cork и Bunni там же оценены больше чем в $20 млн.

Из этих семи для поставщика ликвидности критичны два.

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

Отдельно стоит помнить, что самые широкие полномочия хука — это не взлом, а штатная функция. В официальном хуке Uniswap для разрешённых пулов (токенизированные и регулируемые активы) инвариантом записано: эмитент актива может остановить торговлю и расформировать позиции ликвидности, а NFT позиции непередаваемы, чтобы нельзя было обойти проверку по списку допущенных адресов. Это документация Uniswap на 28 августа 2026 года, а не гипотетический «злой хук».

Ссылка на аудит есть у 30 хуков из 641 в реестре самой Uniswap

Официальный реестр хуков Uniswap — лучший бесплатный инструмент проверки, который сегодня есть у вкладчика. Файл hooklist.json из репозитория Uniswap я скачал целиком и разобрал кодом.

Что в реестреЗначение на 28.08.2026
Записей641
Уникальных адресов хуков554
Уникальных имён450
Сетей12 (ethereum 198, base 179, robinhood 123, bnb 24, остальные меньше)
Верифицированный исходный код641 из 641 — 100%
Есть ссылка на аудит (auditUrl)30 из 641 — 4,7%
Помечены обновляемыми (upgradeable)22 из 641 — 3,4%
Динамическая комиссия (dynamicFee)192 из 641 — 30%

Разница между двумя строками этой таблицы и есть главная мысль раздела. «Код открыт» и «код проверен» разошлись на порядок: исходники открыты у 100% записей, а ссылка на аудит есть у 4,7%. Обновляемых немного, но и они важны: обновляемый хук значит, что владелец ключа может поменять логику под уже вложенными деньгами.

Ещё одна привычка, которая безопасности не заменяет, — ориентироваться на подборки «хуки, за которыми стоит следить». Cork Protocol стоял в такой подборке у профильной команды за месяцы до взлома. Попадание в обзор говорит о заметности, а не о проверенности кода. Ровно та же логика, что в атаках через доверенную инфраструктуру: доверие переносится на элемент, который никто отдельно не проверял.

И один инструмент, который стоит вычеркнуть из списка. Русскоязычные обзоры называют HookRank «аналогом L2Beat для хуков» — независимым рейтингом безопасности. На деле HookRank это проект хакатона ETHGlobal Brussels с карточкой в шоукейсе, а не работающий отраслевой сервис. Действующего рейтинга безопасности хуков сегодня не существует, и подменять его хакатонным прототипом опаснее, чем не иметь ничего.

Восемь проверок хука до того, как деньги ушли в пул

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

#Что смотретьГде смотретьЧто считать плохим ответом
1Есть ли у пула хук вообщеадрес хука в событии Initialize пула, эксплорерненулевой адрес, о котором вы ничего не знаете
2Права хука по младшим 14 битам адресапоследние четыре символа адреса + таблица флагов вышевыставлены биты 0 или 1 — право удержать деньги на входе или выходе
3Есть ли запись в официальном реестреhooklist.json репозитория Uniswapзаписи нет: описания, флагов и свойств взять неоткуда
4Ссылка на аудит ИМЕННО хукаполе auditUrl записи реестрапусто (так у 95,3% записей) либо аудит протокола без хука в области работ
5Признак upgradeableблок properties записи реестраtrue: логику могут поменять под вашими деньгами
6Оборот пула за последние суткиэксплорер, события Swap по вашему пулуноль или единицы сделок — маршрутизация в пул не гарантирована
7Комиссия пула и её типполе fee события Initializeзначение выше 1% при заявленной «обычной» паре; 0x800000 без понимания, кто и как её ставит
8Кто платит за вызовы хукасложность колбэков хука и ваши прошлые транзакциивход и выход дороже по газу, чем в обычном пуле, а разница нигде не компенсируется

Пункты 2 и 4 — те, ради которых стоит потратить пять минут. Второй закрывает единственный класс полномочий, где хук физически стоит между вами и вашими деньгами; четвёртый отвечает на вопрос, который после Cork звучит иначе, чем раньше. Пункт 6 закрывает самый частый и самый скучный способ потерять на хуке: не взлом, а пустой пул, где позиция несёт рыночный риск и не зарабатывает комиссий.

Когда пул с хуком поставщику ликвидности не нужен

Хук — инструмент, а не улучшение по умолчанию. Есть три ситуации, где обычный пул объективно лучше, и все три следуют из цифр выше.

  • В пуле нет оборота. Средний пул с хуком получает 0,806 свопа в сутки против 1,002 у обычного, маршрутизация из интерфейса Uniswap не гарантирована, а топ-20 хуков забирают 76,56% всей торговли через хуки. Если ваш пул не в этих двадцати, вероятность нулевого оборота высокая, и никакая экзотика её не компенсирует.
  • У хука нет аудита именно хука. В официальном реестре ссылка на аудит есть у 4,7% записей, а история Cork показала, что четыре аудита протокола не означают проверки контракта-хука. Отсутствие аудита не делает хук плохим, но переносит весь риск кода на вкладчика.
  • Экзотика не решает вашу задачу. Динамическая комиссия защищает от арбитража, аукцион права на арбитраж возвращает часть MEV, кастомная кривая меняет ценообразование. Если ваша задача — держать ликвидность в паре стейблкоинов, ни один из этих механизмов вам ничего не даёт, а список тех, кому вы доверяете, всё равно вырастает на одну команду.

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

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

FAQ

Можно ли поменять хук у пула Uniswap v4 после его создания? Нет. Хук задаётся при создании пула, в вызове PoolManager.initialize, и входит в ключ пула. Свойство «динамическая комиссия» тоже фиксируется в этот момент и, по прямой формулировке документации, неизменяемо. Если вас не устраивает хук, единственный выход — перевести ликвидность в другой пул, где стоит другой хук или не стоит никакого.

Может ли хук заблокировать вывод моей ликвидности из пула? Да, двумя способами. Первый — намеренный: флаги beforeRemoveLiquidity и afterRemoveLiquidityReturnsDelta дают хуку право вмешаться в снятие и удержать часть суммы; на Ethereum такое право есть у 4,59% и 2,00% пулов с хуком соответственно. Второй — случайный: Trail of Bits отдельным классом называет отказ, при котором падение кода хука блокирует снятие средств и свопы.

Как узнать, какой хук стоит в пуле, куда я собираюсь зайти? Адрес хука виден в событии Initialize пула на эксплорере — это отдельное поле рядом с парой токенов и комиссией. Дальше адрес ищется в официальном реестре hooklist.json репозитория Uniswap: там есть имя, описание словами, полный разбор 14 флагов разрешений, поле auditUrl и признак обновляемости. Права можно прочитать и без реестра — по младшим 14 битам адреса.

Хук с динамической комиссией — это всегда выгоднее для поставщика ликвидности? Нет, и это не вопрос вкуса. Единственное публичное измерение на живых деньгах — эксперимент F команды Bunni за апрель 2025 — дало +0,193602% скорректированного по TVL маркаута без учёта свопов ребаланса и −0,791218% с их учётом. Даже при нулевом проскальзывании ребаланса результат остался хуже сравнимого пула Uniswap v3.

Что будет с моей позицией, если команда хука закроет проект? Пул останется в контракте PoolManager, и деньги останутся вашими: протокол некастодиален, вывести их себе команда хука не может. Но обслуживать и развивать пул станет некому. Практический масштаб виден по Bunni: после закрытия 23 октября 2025 года TVL протокола к 28 августа 2026 года составил $214 180 против $79,83 млн на пике — минус 99,73%.

Чем сбор хука (hook fee) отличается от комиссии пула, которую платит трейдер? Комиссия пула — плата свопера, которая идёт поставщикам ликвидности; сбор протокола ограничен 0,1%. Hook fee — это третий, отдельный сбор в пользу самого хука, он реализован кодом хука через механизм дельт и потолка в протоколе не имеет. Документация Uniswap прямо называет среди его сценариев удержание при выводе ликвидности.

BYBIT COPY TRADING
Копируй профи
Bybit повторит сделки трейдера за тебя
Начать
Поделиться
Связаться:
Крипто- и data-аналитик, инженер-программист (факультет компьютерных наук ХНУРЭ). В IT с 2008 года: администрировал корпоративный мониторинг в «Vodafone Украина», семь лет разрабатывал и продвигал веб-проекты, пять лет руководил маркетингом на метриках — конверсия, CTR, ROI, LTV.Криптовалютными рынками занимаюсь с 2021 года: ончейн-метрики, токеномика, макроэкономические индикаторы. Разработал собственную data-driven модель анализа рынка на 30+ метрик. Стек — Python (pandas, NumPy, SciPy, matplotlib), математическая статистика и EDA; сбор и сверку данных автоматизирую AI-агентами.Принцип — «Don't trust, verify»: каждая цифра проверена по первоисточнику, ключевые — минимум по двум независимым; прогнозы — только сценарии с условиями. Тезис без данных не публикуется.