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

40 хв. читання
BINANCE COPY TRADING
Копіюй профі
Binance повторить угоди трейдера за тебе
Почати

Коротко (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: від першої транзакції до профі-стратегій».

BINANCEДосі дивишся збоку?Ринок працює без вихідних. Рахунок на Binance відкривається за 2 хвилини.Почати зараз

З цієї фрази випливають три речі, важливіші для вкладника за будь-які новинки 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).

BINANCE COPY TRADINGКопітрейдинг на BinanceВідкрита статистика трейдерів, старт з $10, вимкнення одним кліком.Обрати трейдера

І ще одна стаття витрат, про яку в оглядах не пишуть: кожен виклик хука — це додаткове звернення до стороннього контракту всередині вашої транзакції, і оплачує його той, хто транзакцію надіслав. Що більше колбеків реалізовано, то дорожче обходяться вхід, вихід і своп за комісією мережі 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 прямо називає серед його сценаріїв утримання під час виведення ліквідності.

BINANCE · СПОТ І ДЕРИВАТИВИ
Крипта з нуля
Комісія 0,1%, торги 24/7, старт з $10
Відкрити рахунок
Поділитися
Зв'язатися:
Крипто- та data-аналітик, інженер-програміст (факультет комп'ютерних наук ХНУРЕ). В IT з 2008 року: адміністрував корпоративний моніторинг у «Vodafone Україна», сім років розробляв і просував веб-проєкти, п'ять років керував маркетингом на метриках — конверсія, CTR, ROI, LTV.Криптовалютними ринками займаюся з 2021 року: ончейн-метрики, токеноміка, макроекономічні індикатори. Розробив власну data-driven модель аналізу ринку на 30+ метрик. Стек — Python (pandas, NumPy, SciPy, matplotlib), математична статистика та EDA; збір і звірку даних автоматизую AI-агентами.Принцип — «Don't trust, verify»: кожна цифра перевірена за першоджерелом, ключові — щонайменше за двома незалежними; прогнози — лише сценарії з умовами. Теза без даних не публікується.