Liquidações on-chain: a mecânica da Aave e da Compound, e o negócio dos bots ao redor delas
Uma liquidação na Aave é uma oferta pública permanente: pague a dívida de outra pessoa e receba o colateral dela com um desconto de 5–15%. A oferta está escrita em um contrato imutável, não exige permissão, não exige KYC, não exige relacionamento com o protocolo — basta ser o primeiro endereço a chamar liquidationCall() no bloco em que uma posição cruza a linha. É a corrida mais pura em crypto: o prêmio é conhecido até o centavo, o gatilho é (na maior parte) previsível, e a única questão é se a sua infraestrutura chega lá antes da de todo mundo.
Este artigo dissseca a máquina de ponta a ponta: a matemática exata que define quando uma posição se torna liquidável, por que a mecânica do oráculo Chainlink torna as liquidações previsíveis em vez de reativas, do que de fato é composto um bot de liquidação competitivo, e por que a economia dessa corrida se comprimiu ao ponto em que a maior parte do bônus hoje vaza para os block builders — e, cada vez mais, volta para os próprios protocolos. No final contrastamos isso com as liquidações de perp-DEX (GMX, Hyperliquid), que parecem superficialmente semelhantes mas são um jogo completamente diferente.
A mecânica: health factor, thresholds, bônus
LTV vs. liquidation threshold
Todo ativo de colateral na Aave v3 carrega dois parâmetros de risco distintos, e confundi-los é o erro mais comum que os tomadores de empréstimo cometem:
- LTV (loan-to-value) — o máximo que você pode tomar emprestado contra o ativo na originação. Para WETH na Aave v3 mainnet isso fica em torno de 80%.
- Liquidation threshold — o nível de colateralização no qual a posição se torna liquidável. Para WETH, em torno de 83%.
O gap entre os dois é uma folga deliberada: você não consegue abrir uma posição que já esteja instantaneamente liquidável. Mas a folga é fina — poucos pontos percentuais de movimento de preço adverso separam "tomado ao máximo" de "disponível para ser liquidado."
O health factor agrega tudo em um único número:
onde é a quantidade do ativo de colateral , seu preço de oráculo, seu liquidation threshold, e o valor de cada posição de dívida. Quando , qualquer pessoa pode liquidar. Não há período de carência, não há chamada de margem, não há notificação. A condição é avaliada de forma preguiçosa — nada acontece até que alguém chame a função.

Close factor e liquidation bonus
Mais dois parâmetros definem o que o liquidador recebe:
- Close factor — a fração da dívida que uma única liquidação pode quitar. O padrão da Aave v3 é 50%. Desde a Aave v3.3, o close factor salta para 100% quando (o
CLOSE_FACTOR_HF_THRESHOLD), ou quando o colateral ou a dívida da posição está abaixo de um limiar de poeira (dust threshold, ~$2.000) — posições pequenas não valem duas transações, e a poeira remanescente cria problemas de contabilização de bad debt. - Liquidation bonus (também chamado de liquidation penalty, dependendo de qual lado você está) — o desconto pelo qual o liquidador compra o colateral. Na Aave é um spread fixo definido por ativo pela governança: aproximadamente 5% para WETH e as principais stablecoins, até 10–15% para colaterais voláteis de cauda longa.
A Compound v2 funciona da mesma forma, com constantes diferentes: liquidateBorrow() com close factor de 50% e um incentivo de liquidação de 8% (o cToken de colateral apreendido vale 1,08× a dívida quitada). A Compound v3 (Comet) redesenhou o fluxo em duas etapas: absorb() puxa a posição underwater para o próprio balanço do protocolo (a dívida é socializada nas reservas, o colateral vira propriedade do protocolo), e buyCollateral() permite que qualquer pessoa compre esse colateral do protocolo com um desconto configurado pela governança, pago no ativo base. Na prática um liquidador chama as duas funções em uma única transação — o absorb em si não paga nada, o lucro está inteiramente no buyCollateral com desconto.
Uma posição concreta, liquidada passo a passo
Tome parâmetros representativos da Aave v3 para WETH: LTV 80%, liquidation threshold 83%, liquidation bonus 5%.
Setup. Você deposita 10 WETH a $3.000 ($30.000 de colateral) e toma emprestado 20.000 USDC.
Preço de liquidação. quando o valor do colateral cai para 20{,}000 / 0.83 = \24{,}096, ou seja, ETH a **\2.410** — um drawdown de 19,7%. Parece seguro. Não é, porque o ETH faz drawdowns de 20% no café da manhã.
A queda. O ETH imprime $2.350 no oráculo. O colateral agora vale $23.500:
, então o close factor de 50% se aplica. Um liquidador quita 10.000 USDC da sua dívida e apreende colateral no valor de 10{,}000 \times 1.05 = \10{,}500$ ao preço de oráculo:
O P&L do liquidador. Ele gastou $10.000 e recebeu $10.500 em ETH: $500 de lucro bruto por uma única chamada de função, antes do gas, dos custos de swap para sair do ETH, e — crucialmente — antes do que ele teve que dar de lance para vencer a corrida (mais sobre isso adiante).
O seu P&L. Dívida caiu para $10.000, colateral caiu para 5,532 WETH ($13.000). Novo health factor:
Note dois fatos desconfortáveis. Primeiro, você pagou $500 pelo privilégio de um desalavancamento forçado — o bônus sai inteiramente do seu equity. Segundo, o novo HF de 1,079 está mal acima da água: mais uma queda de 7% no ETH dispara a liquidação novamente sobre a metade restante. A liquidação de spread fixo restaura solvência, não segurança. Esse padrão de "meia liquidação, ainda frágil, liquidado de novo" é a microestrutura por trás da dinâmica de cascata, que cobrimos no artigo irmão sobre cascatas de liquidação como sinal de trading.
O gatilho: liquidações são previsíveis, não reativas
Aqui está a parte que separa quem entende esse negócio de quem não entende: na Aave e na Compound, as posições não se tornam liquidáveis quando o preço de mercado se move. Elas se tornam liquidáveis quando o oráculo atualiza.
Ambos os protocolos leem preços dos data feeds da Chainlink. Um feed Chainlink na Ethereum mainnet publica um novo preço on-chain quando uma de duas condições dispara:
- Deviation threshold — o preço agregado off-chain se move mais do que um percentual definido em relação ao último valor on-chain: 0,5% para ETH/USD na mainnet, 1–2% para a maioria dos feeds menores.
- Heartbeat — um intervalo máximo (3.600 segundos para ETH/USD) após o qual uma atualização é publicada independentemente do desvio.
Isso tem uma consequência profunda. Entre atualizações, o preço on-chain é obsoleto por construção. Se o ETH na Binance cai 0,6% enquanto o feed on-chain ainda mostra o preço antigo, todo ator sofisticado sabe que uma transação de atualização do oráculo está vindo, sabe (aproximadamente) qual será o novo preço, e consegue calcular — antes de a atualização chegar — exatamente quais posições vão cruzar no momento em que ela chegar.

A estratégia dominante, portanto, não é "observar health factors e reagir", mas sim fazer backrun na atualização do oráculo: construir um bundle no qual seu liquidationCall() executa imediatamente após a transação de transmit da Chainlink, no mesmo bloco. A atualização do oráculo é o tiro de largada, e todo mundo consegue ver o juiz de largada levantando a pistola. A mecânica de bundle — submissão privada a block builders, garantias de ordenação atômica — é a mesma maquinaria que cobrimos no artigo sobre sandwich attacks e frontrunning no mempool; as liquidações são simplesmente o uso mais legítimo dela.
Dois refinamentos importam na prática:
- Você nem precisa ver o transmit no mempool. Como a agregação off-chain é observável (você pode rodar o mesmo cálculo de preço a partir de feeds de exchanges centralizadas), você consegue prever que uma atualização precisa disparar assim que o desvio ultrapassa o threshold, e pré-construir bundles tanto para o caminho de preço para cima quanto para baixo.
- Atualizações de heartbeat são eventos de liquidez agendados. Se um feed não desviou 0,5% em uma hora, uma atualização acontece de qualquer forma — e se o preço se deslocou 0,4% contra uma parede de posições agrupadas perto de , esse heartbeat "inofensivo" é o gatilho. Operadores competitivos monitoram o tempo desde a última atualização por feed como um sinal de primeira classe.
Essa previsibilidade também é o motivo pelo qual os protocolos eventualmente se moveram para recapturar esse valor. Em março de 2025, a Aave integrou o Chainlink SVR (Smart Value Recapture): atualizações de oráculo para feeds participantes são roteadas através do Flashbots MEV-Share, o direito de fazer backrun nelas é leiloado, e o lance vencedor é dividido entre a Aave DAO (65%) e a Chainlink (35%) em vez de vazar inteiramente para searchers e builders. Em poucos meses o sistema já havia processado mais de $32M em liquidações e recapturado mais de $1,1M, capturando mais de 80% do MEV de liquidação elegível. Leia isso como um preço de mercado: a corrida aberta havia se tornado tão eficiente que o protocolo pôde leiloar a linha de chegada.
Construindo o bot: os quatro subsistemas
Um bot de liquidação competitivo não é um script; é uma infraestrutura com o porte de uma pequena firma de trading. Quatro subsistemas, cada um individualmente simples, todos críticos em latência quando somados.

1. Indexação de posições
Você precisa do conjunto completo de tomadores de empréstimo e seus saldos, mantido em tempo real. O bootstrap é um backfill de eventos — todo Supply, Borrow, Repay, Withdraw, LiquidationCall desde o deploy do protocolo — dobrado em saldos atuais por usuário, mantido ativo depois via uma subscrição websocket a novos logs. A função getUserAccountData(address) da Aave retorna o health factor diretamente, mas chamá-la por usuário a cada bloco para mais de 100 mil tomadores é inviável; operadores sérios replicam a contabilidade do protocolo localmente (incluindo a matemática do índice de taxa de juros, já que a dívida cresce a cada segundo) e reservam chamadas de RPC para verificação.
2. Monitoramento de health factor com simulação de oráculo
O loop central não é "calcular o HF nos preços de oráculo atuais." É "calcular o HF no preço que o oráculo está prestes a publicar":
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))
Ordenar as posições por proximidade a (uma fila de prioridade indexada pelo preço que dispararia cada posição) mantém o conjunto quente pequeno. O fator 0.8 é o jogo inteiro: você quer bundles construídos e submetidos antes de a atualização se tornar certa, não depois.
3. Execução financiada por flash loan
Você não precisa de capital para liquidar — precisa dele por aproximadamente 200 milissegundos de tempo de bloco. O contrato de execução canônico faz, atomicamente:
- Flash-borrow do ativo de dívida (Balancer a 0 bps, ou a própria Aave a ~5 bps — o mesmo primitivo que construímos em arbitragem atômica com flash loans).
- Chama
liquidationCall(collateral, debtAsset, user, repayAmount, false)— ofalsefaz com que ele receba o colateral subjacente em vez de aTokens. - Faz o swap do colateral apreendido de volta para o ativo de dívida no venue que cotar melhor (Uniswap v3 / v4, rota do 1inch, ou um fill privado).
- Quita o flash loan; o restante é lucro, verificado com um
require(profit >= minProfit)para que uma simulação obsoleta reverta em vez de executar no prejuízo.
A perna de swap é onde bots descuidados morrem: apreender $10.500 de um token de cauda longa significa comer a liquidez da sua DEX, e o price impact na saída pode superar o liquidation bonus. Operadores competitivos simulam a ida e volta completa — incluindo o swap de saída — e pulam liquidações onde o líquido é negativo, ou seguram o colateral e fazem hedge em um perp em vez de despejá-lo no mercado.
4. Submissão de bundle
A transação final não chega nem perto do mempool público. Ela é submetida como um bundle a block builders (ou no leilão de SVR/OEV onde isso se aplica), afirmando: "coloque minha liquidação imediatamente após este transmit de oráculo; aqui está a minha gorjeta." A gorjeta é o seu lance em um leilão do tipo all-pay-nothing-if-you-lose contra todos os outros bots que rodaram a mesma simulação. O que nos leva à economia desconfortável.
A competição: para onde o bônus realmente vai
A referência acadêmica é Qin, Zhou, Gamito, Jovanovic e Gervais, "An Empirical Study of DeFi Liquidations: Incentives, Risks, and Instabilities" (2021), que mediu o negócio através da Aave, Compound, MakerDAO e dYdX de abril de 2019 a abril de 2021: 28.138 liquidações totalizando $807M, com $63,6M de lucro agregado dos liquidadores. O paper também documentou a ineficiência estrutural da liquidação de spread fixo — o desconto é um instrumento pouco preciso que rotineiramente penaliza os tomadores de empréstimo além do que um leilão cobraria — e mostrou liquidadores deixando dinheiro mensurável na mesa com estratégias ingênuas.
Os lucros daquela era não vão se repetir, por três razões que se somam:
O leilão de gas virou um leilão de builder. Em 2019–2020, os liquidadores competiam em leilões de priority-gas no mempool aberto; o vencedor pagava gas em excesso, os perdedores revertiam, e uma fração relevante do bônus ficava com o liquidador. Depois do MEV-Boost, a competição acontece em leilões selados de builders. Quando N bots simulam a mesma oportunidade determinística chegando ao mesmo valor de lucro, os lances convergem para o prêmio total: o bundle vencedor rotineiramente dá de gorjeta 90%+ do lucro bruto ao builder/validador. A vantagem do liquidador colapsa para quem tem preço de saída marginalmente melhor, custos marginalmente mais baixos, ou oportunidades que os outros não viram.
Backruns de oráculo dominam, e estão sendo cercados. Como quase todas as liquidações de mercados monetários são disparadas por atualizações de oráculo, o espaço de estratégias lucrativas colapsou para um único ponto: vencer o slot logo após o transmit. Mecanismos no estilo SVR formalizam isso — o protocolo leiloa esse slot e fica com a maior parte da receita. A fatia do searcher encolhe de "o bônus menos o gas" para "a margem do vencedor do leilão", que a competição de lances empurra para perto de zero.
A cauda longa é o que sobra. Os nichos realistas para um novo entrante em 2026: chains e L2s onde os mercados de builders ainda são imaturos; forks de lending de cauda longa com parâmetros de bônus mal precificados e poucos bots concorrentes; posições com colateral exótico onde a simulação do swap de saída é genuinamente difícil (vantagem por melhor execução, não por melhor latência); e eventos de estresse, quando picos de gas e falhas de RPC tiram do jogo os operadores marginais — a Black Thursday da MakerDAO (março de 2020), quando leilões com lance zero deixaram liquidadores reivindicarem $8,3M de colateral essencialmente de graça porque a infraestrutura de mais ninguém estava funcionando, continua sendo o exemplo canônico de que a corrida paga melhor precisamente quando é mais difícil de rodar.
Dimensionando a expectativa honesta: hoje isso é um negócio com custos fixos reais (nós, relacionamentos com builders, monitoramento em uma dúzia de deployments) competindo por um pool de prêmios pesadamente reduzido. É uma forma excelente de aprender mais sobre internals da EVM, oráculos e a engenharia de MEV do que qualquer curso vai te ensinar. É uma forma difícil de ganhar a vida.
Liquidações em perp-DEX: mesma palavra, jogo diferente
DEXs de perpétuos também "liquidam", e os números de manchete são maiores — mas o mecanismo, e portanto a oportunidade, é estruturalmente diferente.
GMX (v2): posições operam contra um pool de liquidez a preços de oráculo (Chainlink low-latency Data Streams). A liquidação dispara quando o colateral menos perdas e taxas cai abaixo dos requisitos de manutenção, e é executada por keepers — infraestrutura designada operando sobre preços assinados pelo oráculo, não uma corrida aberta. Não existe uma função pública pagando um bônus de 5% para quem chamar primeiro; o colateral remanescente flui para o pool conforme as regras do protocolo. Do ponto de vista de um searcher, não há nada a ganhar.
Hyperliquid: as liquidações rodam dentro do próprio motor de matching da L1. Quando o equity da conta cai abaixo da margem de manutenção (avaliada a um mark price combinado de feeds de exchanges centralizadas e do book, justamente para resistir aos jogos de oráculo descritos acima), o motor envia ordens de mercado de liquidação para o order book — posições grandes em pedaços parciais para limitar o impacto. Se o equity continuar caindo abaixo de dois terços da margem de manutenção, a posição é assumida ao mark price por um backstop liquidator vault que é uma estratégia dentro da HLP, o vault de market-making de propriedade comunitária do protocolo, com auto-deleveraging como camada final. O P&L da liquidação é acumulado pelos depositantes da HLP — o "lucro do liquidador" é socializado em um vault que qualquer um pode integrar, não disputado evento a evento.
A consequência para um trader: nos mercados monetários, o jogo é ser o liquidador — uma corrida de infraestrutura por um spread fixo. Nas perp-DEXs, o papel de liquidador está fechado, então o jogo se desloca para tradear em torno das liquidações: os preços de liquidação são calculáveis a partir das posições abertas, o fluxo forçado atinge um order book visível, e níveis de liquidação agrupados se tornam tanto um ímã quanto uma fonte de combustível para movimentos de preço. É a mesma lógica que torna as cascatas de liquidação em CEX tradeáveis — a dinâmica que tocamos em funding rates matam sua alavancagem (o custo da alavancagem é o que empurra as posições em direção ao precipício) e em mecânicas de pump-and-dump de shitcoins (empurrões projetados para dentro de clusters de liquidação). O tratamento completo das cascatas como um sinal — detectando sua formação, medindo seu combustível, tradeando o overshoot — é o tema do próximo artigo desta série.
O que levar dessa análise
A liquidação em mercados monetários é o raro canto de crypto onde tudo é legível: a condição de gatilho é uma fórmula, o prêmio é uma constante definida pela governança, o tiro de largada é uma transação de oráculo que você consegue ver chegando. Essa legibilidade construiu um negócio genuinamente aberto em 2019–2021, e depois — exatamente por tudo ser legível — a competição precificou a vantagem para baixo, até o nível da qualidade de infraestrutura, e leiloou o restante de volta para os protocolos. A mecânica continua sendo conhecimento essencial: se você toma emprestado on-chain, essa matemática é o seu modelo de risco; se você tradeia em torno de fluxo forçado, a cadência do oráculo e os close factors dizem quando e quanto; e se você constrói o bot mesmo assim, pelo menos construa sabendo para onde o dinheiro realmente vai.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.