← К списку статей
July 19, 2026
5 мин. чтения

Ончейн-ликвидации: механика Aave и Compound и бизнес ботов вокруг них

Ончейн-ликвидации: механика Aave и Compound и бизнес ботов вокруг них
#defi
#ликвидации
#aave
#compound
#mev
#chainlink
#флеш-займы
#крипто

Ликвидация в Aave — это постоянно действующая публичная оферта: погасите чужой долг и получите его залог со скидкой 5-15%. Оферта прописана в неизменяемом контракте, не требует разрешения, KYC или каких-либо отношений с протоколом — нужно лишь быть первым адресом, который вызовет liquidationCall() в блоке, где позиция пересекает черту. Это самая чистая гонка в крипте: приз известен до цента, триггер (в основном) предсказуем, и единственный вопрос — успеет ли ваша инфраструктура раньше всех остальных.

Эта статья разбирает машину целиком: точную математику, определяющую момент, когда позиция становится ликвидируемой, почему механика оракула Chainlink делает ликвидации предсказуемыми, а не реактивными, из чего на самом деле состоит конкурентоспособный ликвидационный бот, и почему экономика гонки сжалась до такой степени, что большая часть бонуса теперь утекает билдерам блоков — и все чаще возвращается самим протоколам. В конце мы сравним это с ликвидациями на перп-DEX (GMX, Hyperliquid), которые внешне похожи, но представляют собой совершенно другую игру.

Механика: health factor, пороги, бонусы

LTV против порога ликвидации

Каждый залоговый актив в Aave v3 несет два разных параметра риска, и их путаница — самая распространенная ошибка заемщиков:

  • LTV (loan-to-value) — максимум, который можно занять под актив при открытии позиции. Для WETH в Aave v3 mainnet это около 80%.
  • Порог ликвидации (liquidation threshold) — уровень обеспеченности, при котором позиция становится ликвидируемой. Для WETH — около 83%.

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

Health factor агрегирует все в одно число:

HF=iCiPiLTijDjPjHF = \frac{\sum_i C_i \cdot P_i \cdot LT_i}{\sum_j D_j \cdot P_j}

где CiC_i — количество залогового актива ii, PiP_i — его цена по оракулу, LTiLT_i — его порог ликвидации, а DjPjD_j \cdot P_j — стоимость каждой долговой позиции. Когда HF<1HF < 1, ликвидировать может кто угодно. Нет ни льготного периода, ни margin call, ни уведомления. Условие вычисляется лениво — ничего не происходит, пока кто-то не вызовет функцию.

Полосы health factor: безопасная зона выше HF 1, частичная ликвидация между 0.95 и 1, полная ликвидация ниже 0.95

Close factor и ликвидационный бонус

Еще два параметра определяют, что получает ликвидатор:

  • Close factor — доля долга, которую может погасить одна ликвидация. Значение по умолчанию в Aave v3 — 50%. Начиная с Aave v3.3, close factor подскакивает до 100%, когда HF<0.95HF < 0.95 (CLOSE_FACTOR_HF_THRESHOLD), или когда залог либо долг позиции ниже порога пыли (~$2,000) — маленькие позиции не стоят двух транзакций, а остаточная пыль создает проблемы с учетом плохого долга.
  • Ликвидационный бонус (также называемый штрафом за ликвидацию, в зависимости от того, на чьей вы стороне) — скидка, по которой ликвидатор покупает залог. В Aave это фиксированный спред, устанавливаемый по каждому активу голосованием управляющих: примерно 5% для WETH и основных стейблкоинов, до 10-15% для волатильного залога из длинного хвоста.

Compound v2 работает по той же схеме, но с другими константами: liquidateBorrow() с close factor 50% и ликвидационным стимулом 8% (изъятый cToken-залог стоит в 1,08 раза больше погашенного долга). Compound v3 (Comet) переработал процесс в два шага: absorb() переносит позицию с отрицательным капиталом на баланс самого протокола (долг социализируется в резервы, залог становится собственностью протокола), а buyCollateral() позволяет любому купить этот залог у протокола со скидкой, заданной управляющими, оплатив базовым активом. На практике ликвидатор вызывает обе функции в одной транзакции — сам absorb ничего не платит, вся прибыль заключена в скидке buyCollateral.

Конкретная позиция, ликвидированная шаг за шагом

Возьмем типичные параметры WETH в Aave v3: LTV 80%, порог ликвидации 83%, ликвидационный бонус 5%.

Исходные данные. Вы вносите 10 WETH по $3,000 ($30,000 залога) и занимаете 20,000 USDC.

HF=30,000×0.8320,000=1.245HF = \frac{30{,}000 \times 0.83}{20{,}000} = 1.245

Цена ликвидации. HF=1HF = 1, когда стоимость залога падает до 20{,}000 / 0.83 = \24{,}096, то есть ETH по **\2,410** — просадка 19,7%. Кажется безопасным. Это не так, потому что ETH делает просадки на 20% на завтрак.

Падение. Оракул печатает $2,350 по ETH. Залог теперь стоит $23,500:

HF=23,500×0.8320,000=0.975HF = \frac{23{,}500 \times 0.83}{20{,}000} = 0.975

0.95<HF<10.95 < HF < 1, значит применяется close factor 50%. Ликвидатор погашает 10,000 USDC вашего долга и забирает залог стоимостью 10{,}000 \times 1.05 = \10{,}500$ по цене оракула:

10,5002,350=4.468 WETH\frac{10{,}500}{2{,}350} = 4.468 \text{ WETH}

P&L ликвидатора. Он потратил $10,000 и получил $10,500 в ETH: $500 валовой прибыли за один вызов функции, до вычета газа, издержек на обмен ETH обратно и — что критично — до того, сколько пришлось поставить, чтобы выиграть гонку (подробнее об этом ниже).

Ваш P&L. Долг снизился до $10,000, залог — до 5,532 WETH ($13,000). Новый health factor:

HF=13,000×0.8310,000=1.079HF = \frac{13{,}000 \times 0.83}{10{,}000} = 1.079

Обратите внимание на два неприятных факта. Во-первых, вы заплатили $500 за привилегию принудительного делевериджа — бонус целиком вычитается из вашего капитала. Во-вторых, новый HF в 1,079 едва держится над водой: еще 7% падения ETH снова запускает ликвидацию оставшейся половины. Ликвидация с фиксированным спредом восстанавливает платежеспособность, а не безопасность. Этот паттерн "частичная ликвидация, все еще хрупкая позиция, ликвидация снова" — это микроструктура, стоящая за каскадной динамикой, которую мы разбираем в смежной статье про каскады ликвидаций как торговый сигнал.

Триггер: ликвидации предсказуемы, а не реактивны

Вот часть, которая отделяет тех, кто понимает этот бизнес, от тех, кто нет: в Aave и Compound позиции становятся ликвидируемыми не тогда, когда двигается рыночная цена. Они становятся ликвидируемыми, когда обновляется оракул.

Оба протокола берут цены из фидов данных Chainlink. Фид Chainlink в Ethereum mainnet публикует новую ончейн-цену, когда срабатывает одно из двух условий:

  • Порог отклонения — агрегированная офчейн-цена отклоняется от последнего ончейн-значения больше, чем на заданный процент: 0,5% для ETH/USD в mainnet, 1-2% для большинства менее крупных фидов.
  • Heartbeat — максимальный интервал (3,600 секунд для ETH/USD), после которого обновление публикуется независимо от отклонения.

Отсюда глубокое следствие. Между обновлениями ончейн-цена устаревает по конструкции. Если цена ETH на Binance падает на 0,6%, пока ончейн-фид все еще показывает старую цену, каждый продвинутый участник знает, что транзакция обновления оракула вот-вот придет, знает, какой (примерно) будет новая цена, и может вычислить — до того, как обновление придет — какие именно позиции пересекут HF<1HF < 1 в тот момент, когда это случится.

Временная шкала: офчейн-цена пересекает порог отклонения, ожидающееся обновление оракула и ликвидация, исполненная в том же блоке, что и обновление

Поэтому доминирующая стратегия — не "следить за health factor и реагировать", а бэкраннить обновление оракула: собрать бандл, в котором ваш liquidationCall() исполняется сразу после транзакции трансляции Chainlink, в том же блоке. Обновление оракула — стартовый выстрел, и все видят, как стартер поднимает пистолет. Механика бандлов — приватная отправка билдерам блоков, гарантии атомарного порядка — это та же машинерия, которую мы разбирали в статье про сэндвич-атаки и фронтраннинг в мемпуле; ликвидации — это просто самое легитимное ее применение.

На практике важны два уточнения:

  1. Даже не нужно видеть трансляцию в мемпуле. Поскольку офчейн-агрегация наблюдаема (можно запустить то же вычисление цены по фидам с бирж), можно предсказать, что обновление обязательно сработает, как только отклонение превысит порог, и заранее собрать бандлы как на движение цены вверх, так и вниз.
  2. Обновления по heartbeat — это запланированные события ликвидности. Если фид не отклонился на 0,5% за час, обновление все равно приходит — и если цена сдвинулась на 0,4% против стены позиций, скопившихся у HF=1HF = 1, этот "безобидный" heartbeat становится триггером. Конкурентоспособные операторы отслеживают время с последнего обновления по каждому фиду как сигнал первого класса.

Эта предсказуемость — также причина, по которой протоколы в итоге начали возвращать себе эту ценность. В марте 2025 года Aave интегрировала Chainlink SVR (Smart Value Recapture): обновления оракула для участвующих фидов маршрутизируются через Flashbots MEV-Share, право на бэкран аукционируется, а выигрышная ставка делится между Aave DAO (65%) и Chainlink (35%) вместо того, чтобы целиком утекать серчерам и билдерам. За несколько месяцев система обработала более $32M ликвидаций и вернула более $1.1M, захватив более 80% доступного ликвидационного MEV. Это стоит читать как рыночную цену: открытая гонка стала настолько эффективной, что протокол смог выставить финишную черту на аукцион.

Постройка бота: четыре подсистемы

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

Архитектура ликвидационного бота: индексатор, монитор health factor с симуляцией оракула, исполняющий контракт на флеш-займах, отправка бандлов билдерам

1. Индексирование позиций

Нужен полный набор заемщиков и их балансов, поддерживаемый в реальном времени. Старт — это обратное заполнение по событиям: каждый Supply, Borrow, Repay, Withdraw, LiquidationCall с момента деплоя протокола сворачивается в текущие балансы по пользователям, а затем поддерживается в актуальном состоянии через websocket-подписку на новые логи. Функция Aave getUserAccountData(address) возвращает health factor напрямую, но вызывать ее для каждого пользователя в каждом блоке при 100k+ заемщиков — безнадежно; серьезные операторы воспроизводят учет протокола локально (включая математику индекса процентной ставки, поскольку долг растет каждую секунду) и оставляют RPC-вызовы для верификации.

2. Мониторинг health factor с симуляцией оракула

Основной цикл — это не "вычислить HF по текущим ценам оракула". Это "вычислить HF по цене, которую оракул вот-вот опубликует":

def liquidatable_at(positions, feed, candidate_price):
    """Positions that cross HF < 1 if `feed` updates to candidate_price."""
    out = []
    for pos in positions.borrowers_exposed_to(feed):
        hf = pos.health_factor(price_override={feed: candidate_price})
        if hf < 1.0:
            close_factor = 1.0 if hf < 0.95 else 0.5
            repay = pos.debt_value * close_factor
            seized = repay * (1 + pos.liq_bonus)
            gross = seized - repay          # the prize, pre-costs
            out.append((pos, repay, gross))
    return sorted(out, key=lambda x: -x[2])

deviation = abs(offchain_px - onchain_px) / onchain_px
if deviation > FEED_DEVIATION_THRESHOLD * 0.8:   # update imminent
    targets = liquidatable_at(positions, feed, offchain_px)
    for pos, repay, gross in targets:
        prepare_bundle(pos, repay, max_bid=gross - costs(pos))

Сортировка позиций по близости к HF=1HF = 1 (приоритетная очередь, ключом в которой служит цена, запускающая каждую позицию) держит горячий набор небольшим. Коэффициент 0.8 — вся суть игры: нужно, чтобы бандлы были собраны и отправлены до того, как обновление станет неизбежным, а не после.

3. Исполнение на флеш-займах

Капитал для ликвидации не нужен — он нужен примерно на 200 миллисекунд времени блока. Канонический исполняющий контракт атомарно делает следующее:

  1. Берет флеш-займ в долговом активе (Balancer под 0 базисных пунктов, или сама Aave под ~5 базисных пунктов — тот же примитив, что мы разбирали в статье про атомарный арбитраж на флеш-займах).
  2. Вызывает liquidationCall(collateral, debtAsset, user, repayAmount, false)false означает получение базового залога, а не aToken.
  3. Обменивает изъятый залог обратно в долговой актив на той площадке, которая дает лучшую котировку (Uniswap v3 / v4, маршрут 1inch или приватное исполнение).
  4. Погашает флеш-займ; остаток — прибыль, проверяемая через require(profit >= minProfit), чтобы устаревшая симуляция откатывалась, а не исполнялась в убыток.

Этап обмена — это то, на чем гибнут небрежные боты: изъятие $10,500 токена из длинного хвоста означает необходимость "съесть" его ликвидность на DEX, и ценовое воздействие при выходе может превысить ликвидационный бонус. Конкурентоспособные операторы симулируют весь круговой путь — включая выходной своп — и пропускают ликвидации, где чистый результат отрицателен, либо держат залог и хеджируют его на перпе вместо того, чтобы сливать его на рынок.

4. Отправка бандла

Финальная транзакция не проходит рядом с публичным мемпулом. Она отправляется как бандл билдерам блоков (или в аукцион SVR/OEV, где это применимо) с сообщением: "поставь мою ликвидацию сразу после этой трансляции оракула, вот моя чаевая". Чаевая — это ваша ставка в аукционе "платит только победитель" против всех остальных ботов, прогнавших ту же симуляцию. Отсюда неудобная экономика.

Конкуренция: куда на самом деле уходит бонус

Академический бейзлайн — работа Qin, Zhou, Gamito, Jovanovic и Gervais, "An Empirical Study of DeFi Liquidations: Incentives, Risks, and Instabilities" (2021), которая измерила этот бизнес по Aave, Compound, MakerDAO и dYdX с апреля 2019 по апрель 2021 года: 28,138 ликвидаций на общую сумму $807M, с совокупной прибылью ликвидаторов $63.6M. Работа также задокументировала структурную неэффективность ликвидации с фиксированным спредом — скидка является грубым инструментом, который регулярно завышает штраф заемщикам относительно того, что взял бы аукцион — и показала, что ликвидаторы оставляли заметные деньги на столе, используя наивные стратегии.

Прибыли той эпохи не повторятся по трем накладывающимся причинам:

Аукцион газа превратился в аукцион билдеров. В 2019-2020 годах ликвидаторы конкурировали в аукционах приоритетного газа в открытом мемпуле; победитель переплачивал за газ, проигравшие откатывались, и заметная доля бонуса оставалась у ликвидатора. После MEV-Boost конкуренция проходит в закрытых аукционах билдеров. Когда N ботов симулируют одну и ту же детерминированную возможность до одной и той же цифры прибыли, ставки сходятся к полному призу: выигрышный бандл регулярно отдает билдеру/валидатору 90%+ валовой прибыли. Преимущество ликвидатора сжимается до того, у кого чуть лучше цена выхода, чуть ниже издержки или кто заметил возможность, которую пропустили остальные.

Бэкраны оракула доминируют, и их огораживают. Поскольку почти все ликвидации на денежных рынках запускаются обновлениями оракула, пространство прибыльных стратегий схлопнулось в одну точку: выиграть слот сразу после трансляции. Механизмы вроде SVR формализуют это — протокол выставляет этот слот на аукцион и оставляет себе большую часть выручки. Доля серчера сжимается с "бонус минус газ" до "маржа победителя аукциона", которую конкурентные ставки толкают к нулю.

Остается длинный хвост. Реалистичные ниши для нового игрока в 2026 году: сети и L2, где рынки билдеров еще незрелые; форки кредитных протоколов из длинного хвоста с неверно откалиброванными параметрами бонуса и малым числом конкурирующих ботов; позиции с экзотическим залогом, где симуляция выходного свопа действительно сложна (преимущество через лучшее исполнение, а не через задержку); и стрессовые события, когда газ взлетает, а сбои RPC выбивают из игры маргинальных операторов — Черный четверг MakerDAO (март 2020), когда аукционы с нулевыми ставками позволили ликвидаторам забрать $8.3M залога практически бесплатно, потому что ничья другая инфраструктура не работала, остается каноническим примером того, что гонка платит лучше всего именно тогда, когда ее сложнее всего вести.

Оценивая честные ожидания: это теперь бизнес с реальными постоянными издержками (ноды, отношения с билдерами, мониторинг по десятку деплойментов), конкурирующий за призовой фонд с большим дисконтом. Это отличный способ узнать о внутреннем устройстве EVM, оракулах и механике MEV больше, чем даст любой курс. Но это тяжелый способ зарабатывать на жизнь.

Ликвидации на перп-DEX: то же слово, другая игра

Перпетуальные DEX тоже "ликвидируют", и заголовочные цифры там больше — но механизм, а значит и возможность, устроены иначе.

GMX (v2): позиции торгуются против пула ликвидности по ценам оракула (низколатентные Data Streams от Chainlink). Ликвидация срабатывает, когда залог за вычетом убытков и комиссий падает ниже требований поддержания маржи, и исполняют ее киперы — назначенная инфраструктура, работающая по подписанным оракулом ценам, а не открытая гонка. Здесь нет публичной функции, платящей 5% бонуса тому, кто вызовет первым; оставшийся залог утекает в пул по правилам протокола. С точки зрения серчера здесь нечего выигрывать.

Hyperliquid: ликвидации проходят внутри собственного движка сопоставления ордеров L1. Когда капитал аккаунта падает ниже маржи поддержания (оцениваемой по mark-цене, смешанной из фидов CEX и стакана, именно чтобы противостоять играм с оракулом, описанным выше), движок отправляет ликвидационные рыночные ордера в стакан — крупные позиции частями, чтобы ограничить воздействие на цену. Если капитал продолжает падать ниже двух третей маржи поддержания, позицию по mark-цене забирает резервное хранилище-ликвидатор, являющееся стратегией внутри HLP — маркетмейкингового хранилища протокола, принадлежащего сообществу, — с автоделевериджем как последним слоем. P&L от ликвидации начисляется вкладчикам HLP — "прибыль ликвидатора" социализируется в хранилище, в которое может войти кто угодно, а не разыгрывается по каждому событию.

Следствие для трейдера: на денежных рынках игра — это быть ликвидатором, гонка инфраструктур за фиксированный спред. На перп-DEX роль ликвидатора закрыта, поэтому игра смещается в сторону торговли вокруг ликвидаций: цены ликвидации вычисляются из открытых позиций, принудительный поток попадает в видимый стакан, а скопления уровней ликвидации становятся одновременно магнитом и топливом для движений цены. Это та же логика, которая делает каскады ликвидаций на CEX торгуемыми — динамика, которую мы затрагивали в статье про то, как ставки финансирования убивают ваше плечо (стоимость плеча — это то, что толкает позиции к обрыву) и в статье про механику пампов и дампов шиткоинов (инженерные толчки в кластеры ликвидации). Полный разбор каскадов как сигнала — обнаружение их формирования, измерение их топлива, торговля перелетом цены — тема следующей статьи в этой серии.

Что стоит вынести

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

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

Авторы

Eugen Soloviov
Eugen Soloviov

Инженер торговых систем

Разработка торговых ботов с 2017 года: межбиржевой арбитраж (подключал до 30 бирж), парный арбитраж на коинтеграции между спотом и фьючерсами, скальпинг, фронтраннинг, торговля по новостям, сентиментный анализ, трендовые алгоритмы, а также алгоритмы управления и балансировки портфелей. Делает выставление ордеров до 1 мс, warehouse для big data, бэктестинг-движки, AI-агентов и интерфейсы для ботов (в т.ч. open-source profitmaker.cc). Стек: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, архитектура.

Newsletter

Будьте в курсе событий

Подпишитесь на нашу рассылку, чтобы получать эксклюзивную аналитику по AI-трейдингу и обновления платформы.

Мы уважаем вашу конфиденциальность. Отписаться можно в любой момент.