← Retour aux articles
July 19, 2026
5 min de lecture

Liquidations on-chain : mécanique d'Aave et Compound, et le business des bots qui l'entoure

Liquidations on-chain : mécanique d'Aave et Compound, et le business des bots qui l'entoure
#defi
#liquidations
#aave
#compound
#mev
#chainlink
#flash loans
#crypto

Une liquidation sur Aave est une offre publique permanente : rembourser la dette de quelqu'un d'autre et recevoir son collatéral avec une décote de 5 à 15 %. Cette offre est inscrite dans un contrat immuable, ne nécessite aucune permission, aucun KYC, aucune relation avec le protocole — il suffit d'être la première adresse à appeler liquidationCall() dans le bloc où une position franchit la ligne. C'est la course la plus pure de la crypto : le prix est connu au centime près, le déclencheur est (globalement) prévisible, et la seule question est de savoir si votre infrastructure arrivera avant celle de tout le monde.

Cet article dissèque la machine de bout en bout : les mathématiques exactes qui définissent le moment où une position devient liquidable, pourquoi la mécanique des oracles Chainlink rend les liquidations prévisibles plutôt que réactives, ce que contient réellement un bot de liquidation compétitif, et pourquoi l'économie de cette course s'est comprimée au point que la majeure partie du bonus fuit désormais vers les block builders — et, de plus en plus, retourne vers les protocoles eux-mêmes. À la fin, nous comparons cela aux liquidations des DEX de perpétuels (GMX, Hyperliquid), qui semblent superficiellement similaires mais relèvent d'un jeu complètement différent.

La mécanique : health factor, seuils, bonus

LTV vs seuil de liquidation

Chaque actif de collatéral sur Aave v3 porte deux paramètres de risque distincts, et les confondre est l'erreur la plus courante que commettent les emprunteurs :

  • LTV (loan-to-value) — le maximum que vous pouvez emprunter contre l'actif à l'ouverture de la position. Pour le WETH sur Aave v3 mainnet, c'est environ 80 %.
  • Seuil de liquidation — le niveau de collatéralisation à partir duquel la position devient liquidable. Pour le WETH, environ 83 %.

L'écart entre les deux est un tampon délibéré : vous ne pouvez pas ouvrir une position instantanément liquidable. Mais ce tampon est mince — quelques pour cent de mouvement de prix défavorable séparent une position « empruntée au maximum » d'une position « à prendre ».

Le health factor agrège tout en un seul nombre :

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

CiC_i est le montant du collatéral ii, PiP_i son prix d'oracle, LTiLT_i son seuil de liquidation, et DjPjD_j \cdot P_j la valeur de chaque position de dette. Quand HF<1HF < 1, n'importe qui peut liquider. Il n'y a ni délai de grâce, ni appel de marge, ni notification. La condition est évaluée de façon paresseuse — rien ne se passe tant que personne n'appelle la fonction.

Bandes du health factor : zone de sécurité au-dessus de HF 1, liquidation partielle entre 0,95 et 1, liquidation totale en dessous de 0,95

Close factor et bonus de liquidation

Deux paramètres supplémentaires définissent ce que reçoit le liquidateur :

  • Close factor — la fraction de la dette qu'une seule liquidation peut rembourser. Le défaut d'Aave v3 est de 50 %. Depuis Aave v3.3, le close factor passe à 100 % quand HF<0,95HF < 0,95 (le CLOSE_FACTOR_HF_THRESHOLD), ou quand le collatéral ou la dette de la position est en dessous d'un seuil de poussière (dust threshold, ~2 000 $) — les petites positions ne valent pas deux transactions, et la poussière restante crée des problèmes de comptabilité de mauvaise dette.
  • Bonus de liquidation (aussi appelé pénalité de liquidation, selon le camp où l'on se trouve) — la décote à laquelle le liquidateur achète le collatéral. Sur Aave, c'est un spread fixe défini par actif via la gouvernance : environ 5 % pour le WETH et les principaux stablecoins, jusqu'à 10-15 % pour les collatéraux volatils et peu liquides.

Compound v2 fonctionne de la même manière avec des constantes différentes : liquidateBorrow() avec un close factor de 50 % et une incitation à la liquidation de 8 % (le cToken de collatéral saisi vaut 1,08× la dette remboursée). Compound v3 (Comet) a redessiné le flux en deux étapes : absorb() fait passer la position en défaut sur le bilan propre du protocole (la dette est socialisée dans les réserves, le collatéral devient propriété du protocole), et buyCollateral() permet à n'importe qui d'acheter ce collatéral au protocole avec une décote configurée par la gouvernance, payée dans l'actif de base. En pratique, un liquidateur appelle les deux en une seule transaction — absorb ne rapporte rien en soi, le profit est entièrement dans le buyCollateral décoté.

Une position concrète, liquidée étape par étape

Prenons des paramètres WETH représentatifs sur Aave v3 : LTV 80 %, seuil de liquidation 83 %, bonus de liquidation 5 %.

Configuration. Vous déposez 10 WETH à 3 000 (30000(30 000 de collatéral) et empruntez 20 000 USDC.

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

Prix de liquidation. HF=1HF = 1 quand la valeur du collatéral tombe à 20{,}000 / 0.83 = \24{,}096,soitunETHaˋ2410, soit un ETH à **2 410 ** — un repli de 19,7 %. Cela paraît sûr. Ça ne l'est pas, parce que l'ETH fait des replis de 20 % au petit-déjeuner.

La chute. L'ETH affiche 2 350 surloracle.Lecollateˊralvautmaintenant23500sur l'oracle. Le collatéral vaut maintenant 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, donc le close factor de 50 % s'applique. Un liquidateur rembourse 10 000 USDC de votre dette et saisit un collatéral valant 10{,}000 \times 1.05 = \10{,}500$ au prix de l'oracle :

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

Le P&L du liquidateur. Il a dépensé 10 000 etrec\cu10500et reçu 10 500 d'ETH : 500 $ de profit brut pour un seul appel de fonction, avant gas, avant les coûts de swap pour sortir de l'ETH, et — élément critique — avant tout ce qu'il a dû miser pour gagner la course (on y revient plus bas).

Votre P&L. La dette tombe à 10 000 ,lecollateˊraltombeaˋ5,532WETH(13000, le collatéral tombe à 5,532 WETH (13 000 ). Nouveau health factor :

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

Notez deux faits inconfortables. D'abord, vous avez payé 500 $ pour le privilège d'un désendettement forcé — le bonus sort entièrement de votre equity. Ensuite, le nouveau HF de 1,079 est à peine hors de l'eau : une nouvelle baisse de 7 % de l'ETH redéclenche la liquidation sur la moitié restante. La liquidation à spread fixe restaure la solvabilité, pas la sécurité. Ce schéma « demi-liquidation, toujours fragile, reliquidé » est la microstructure derrière la dynamique des cascades, que nous couvrons dans l'article jumeau sur les cascades de liquidation comme signal de trading.

Le déclencheur : les liquidations sont prévisibles, pas réactives

Voici ce qui sépare ceux qui comprennent ce business de ceux qui ne le comprennent pas : sur Aave et Compound, les positions ne deviennent pas liquidables quand le prix de marché bouge. Elles le deviennent quand l'oracle se met à jour.

Les deux protocoles lisent les prix depuis les Chainlink data feeds. Un feed Chainlink sur Ethereum mainnet pousse un nouveau prix on-chain quand l'une de ces deux conditions se déclenche :

  • Seuil de déviation — le prix agrégé off-chain s'écarte de plus d'un certain pourcentage par rapport à la dernière valeur on-chain : 0,5 % pour ETH/USD sur mainnet, 1 à 2 % pour la plupart des feeds plus petits.
  • Heartbeat — un intervalle maximal (3 600 secondes pour ETH/USD) au-delà duquel une mise à jour est poussée quelle que soit la déviation.

Cela a une conséquence profonde. Entre deux mises à jour, le prix on-chain est périmé par construction. Si l'ETH sur Binance baisse de 0,6 % pendant que le feed on-chain affiche encore l'ancien prix, tout acteur sophistiqué sait qu'une transaction de mise à jour de l'oracle arrive, sait quel sera (approximativement) le nouveau prix, et peut calculer — avant même que la mise à jour n'atterrisse — exactement quelles positions vont franchir HF<1HF < 1 au moment où elle le fera.

Chronologie montrant le prix off-chain franchissant le seuil de déviation, la mise à jour de l'oracle en attente, et la liquidation exécutée dans le même bloc que la mise à jour

La stratégie dominante n'est donc pas « surveiller les health factors et réagir » mais backrun de la mise à jour de l'oracle : construire un bundle dans lequel votre liquidationCall() s'exécute immédiatement après la transaction de transmission Chainlink, dans le même bloc. La mise à jour de l'oracle est le coup de feu de départ, et tout le monde peut voir le starter lever son pistolet. La mécanique des bundles — soumission privée aux block builders, garanties d'ordonnancement atomique — est la même machinerie que nous avons couverte dans l'article sur les attaques sandwich et le frontrunning en mempool ; les liquidations en sont simplement l'usage le plus légitime.

Deux raffinements comptent en pratique :

  1. Vous n'avez même pas besoin de voir la transmission dans le mempool. Puisque l'agrégation off-chain est observable (vous pouvez reproduire le même calcul de prix à partir des feeds des CEX), vous pouvez prédire qu'une mise à jour doit se déclencher dès que la déviation dépasse le seuil, et pré-construire des bundles à la fois pour le scénario de hausse et celui de baisse du prix.
  2. Les mises à jour heartbeat sont des événements de liquidité planifiés. Si un feed n'a pas dévié de 0,5 % en une heure, une mise à jour atterrit quand même — et si le prix a dérivé de 0,4 % contre un mur de positions groupées près de HF=1HF = 1, ce heartbeat « inoffensif » devient le déclencheur. Les opérateurs compétitifs suivent le temps écoulé depuis la dernière mise à jour par feed comme un signal à part entière.

Cette prévisibilité explique aussi pourquoi les protocoles ont fini par récupérer cette valeur. En mars 2025, Aave a intégré Chainlink SVR (Smart Value Recapture) : les mises à jour d'oracle pour les feeds participants sont routées via Flashbots MEV-Share, le droit de backrun est mis aux enchères, et l'offre gagnante est partagée entre la DAO Aave (65 %) et Chainlink (35 %) plutôt que de fuir entièrement vers les searchers et les builders. En quelques mois, le système avait traité plus de 32 Mdeliquidationsetreˊcupeˊreˊplusde1,1M de liquidations et récupéré plus de 1,1 M, captant plus de 80 % du MEV de liquidation éligible. Lisez cela comme un prix de marché : la course ouverte était devenue si efficiente que le protocole a pu mettre aux enchères la ligne d'arrivée.

Construire le bot : les quatre sous-systèmes

Un bot de liquidation compétitif n'est pas un script ; c'est une infrastructure digne d'une petite société de trading. Quatre sous-systèmes, chacun individuellement simple, tous critiques en latence une fois assemblés.

Architecture d'un bot de liquidation : indexeur, moniteur de santé avec simulation d'oracle, contrat d'exécution par flash loan, soumission de bundle aux builders

1. Indexation des positions

Vous avez besoin de l'ensemble complet des emprunteurs et de leurs soldes, maintenu en temps réel. Le bootstrap consiste en un backfill d'événements — chaque Supply, Borrow, Repay, Withdraw, LiquidationCall depuis le déploiement du protocole — replié en soldes actuels par utilisateur, puis maintenu à jour via un abonnement websocket aux nouveaux logs. getUserAccountData(address) d'Aave renvoie directement le health factor, mais l'appeler par utilisateur et par bloc pour plus de 100 000 emprunteurs est sans espoir ; les opérateurs sérieux répliquent localement la comptabilité du protocole (y compris les mathématiques de l'indice de taux d'intérêt, puisque la dette croît chaque seconde) et réservent les appels RPC pour la vérification.

2. Surveillance du health factor avec simulation d'oracle

La boucle centrale n'est pas « calculer le HF aux prix d'oracle actuels ». C'est « calculer le HF au prix que l'oracle est sur le point de publier » :

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))

Trier les positions par proximité de HF=1HF = 1 (une file de priorité indexée sur le prix qui déclencherait chaque position) permet de garder l'ensemble « chaud » restreint. Le facteur 0.8 est tout le jeu : vous voulez des bundles construits et soumis avant que la mise à jour ne soit certaine, pas après.

3. Exécution financée par flash loan

Vous n'avez pas besoin de capital pour liquider — vous en avez besoin pendant environ 200 millisecondes de temps de bloc. Le contrat d'exécution canonique fait, de façon atomique :

  1. Emprunter en flash loan l'actif de dette (Balancer à 0 bps, ou Aave lui-même à environ 5 bps — la même primitive que nous avons construite dans l'arbitrage atomique par flash loans).
  2. Appeler liquidationCall(collateral, debtAsset, user, repayAmount, false) — le false fait recevoir le collatéral sous-jacent plutôt que des aTokens.
  3. Swapper le collatéral saisi vers l'actif de dette sur la venue offrant le meilleur prix (Uniswap v3 / v4, route 1inch, ou un fill privé).
  4. Rembourser le flash loan ; le reste est le profit, vérifié par un require(profit >= minProfit) afin qu'une simulation périmée fasse revert plutôt que de s'exécuter à perte.

Le volet swap est là où les bots peu soignés meurent : saisir 10 500 $ d'un token peu liquide signifie absorber sa liquidité DEX, et l'impact de prix à la sortie peut dépasser le bonus de liquidation. Les opérateurs compétitifs simulent l'aller-retour complet — y compris le swap de sortie — et ignorent les liquidations dont le net est négatif, ou conservent le collatéral et se couvrent sur un perp plutôt que de le dumper sur le marché.

4. Soumission du bundle

La transaction finale ne passe nulle part près du mempool public. Elle est soumise comme bundle aux block builders (ou dans l'enchère SVR/OEV le cas échéant), en déclarant : « placez ma liquidation immédiatement après cette transmission d'oracle ; voici mon pourboire. » Le pourboire est votre mise dans une enchère où vous ne payez rien si vous perdez, contre tous les autres bots qui ont fait tourner la même simulation. Ce qui nous amène à l'économie inconfortable du sujet.

La compétition : où va réellement le bonus

La référence académique est Qin, Zhou, Gamito, Jovanovic et Gervais, « An Empirical Study of DeFi Liquidations: Incentives, Risks, and Instabilities » (2021), qui a mesuré ce business sur Aave, Compound, MakerDAO et dYdX d'avril 2019 à avril 2021 : 28 138 liquidations totalisant 807 M,avec63,6M, avec 63,6 M de profit agrégé des liquidateurs. L'article documente aussi l'inefficacité structurelle de la liquidation à spread fixe — la décote est un instrument grossier qui pénalise systématiquement les emprunteurs au-delà de ce qu'une enchère facturerait — et montre des liquidateurs laissant de l'argent mesurable sur la table avec des stratégies naïves.

Les profits de cette époque ne se reproduiront pas, pour trois raisons cumulatives :

L'enchère au gas est devenue une enchère de builders. En 2019-2020, les liquidateurs se livraient concurrence dans des enchères de gas prioritaires en mempool ouvert ; le gagnant surpayait le gas, les perdants faisaient revert, et une fraction significative du bonus restait chez le liquidateur. Après MEV-Boost, la concurrence se joue dans des enchères de builders scellées. Quand N bots simulent la même opportunité déterministe pour arriver au même chiffre de profit, les enchères convergent vers le prix intégral : le bundle gagnant donne en pourboire régulièrement plus de 90 % du profit brut au builder/validateur. L'avantage du liquidateur s'effondre vers celui qui a un pricing de sortie marginalement meilleur, des coûts marginalement plus bas, ou des opportunités que d'autres n'ont pas vues.

Les backruns d'oracle dominent, et ils sont en train d'être enclos. Puisque presque toutes les liquidations de marchés monétaires sont déclenchées par des mises à jour d'oracle, l'espace des stratégies profitables s'est effondré sur un seul point : gagner le créneau juste après la transmission. Les mécanismes de type SVR formalisent cela — le protocole met ce créneau aux enchères et garde l'essentiel des recettes. La part du searcher se réduit de « le bonus moins le gas » à « la marge du gagnant de l'enchère », que la concurrence des offres pousse vers zéro.

Ce qui reste, c'est la longue traîne. Les niches réalistes pour un nouvel entrant en 2026 : les chaînes et L2 où les marchés de builders sont encore immatures ; les forks de lending à longue traîne avec des paramètres de bonus mal calibrés et peu de bots concurrents ; les positions avec un collatéral exotique où la simulation du swap de sortie est réellement difficile (l'avantage vient d'une meilleure exécution, pas d'une meilleure latence) ; et les événements de stress, quand le gas s'envole et que les échecs RPC mettent hors jeu les opérateurs marginaux — le Black Thursday de MakerDAO (mars 2020), où des enchères à zéro ont permis à des liquidateurs de récupérer 8,3 M$ de collatéral essentiellement gratuitement parce que l'infrastructure de personne d'autre ne fonctionnait, reste l'exemple canonique que cette course paie le mieux précisément quand elle est la plus difficile à faire tourner.

Pour calibrer l'attente honnête : c'est désormais un business avec de vrais coûts fixes (nodes, relations avec les builders, monitoring sur une douzaine de déploiements) qui se dispute une cagnotte lourdement ristournée. C'est une excellente façon d'en apprendre plus sur l'EVM, les oracles et la plomberie MEV qu'aucun cours ne vous l'enseignera. C'est une façon difficile de gagner sa vie.

Liquidations sur DEX de perpétuels : même mot, jeu différent

Les DEX de perpétuels « liquident » eux aussi, et les chiffres qui font les gros titres sont plus élevés — mais le mécanisme, et donc l'opportunité, est structurellement différent.

GMX (v2) : les positions se négocient contre un pool de liquidité aux prix d'oracle (Chainlink Data Streams à faible latence). La liquidation se déclenche quand le collatéral moins les pertes et les frais tombe sous les exigences de maintenance, et elle est exécutée par des keepers — une infrastructure désignée opérant sur des prix signés par l'oracle, pas une course ouverte. Il n'existe pas de fonction publique versant un bonus de 5 % au premier appelant ; le collatéral restant reflue vers le pool selon les règles du protocole. Du point de vue d'un searcher, il n'y a rien à gagner.

Hyperliquid : les liquidations s'exécutent à l'intérieur du moteur de matching propre à la L1. Quand l'equity d'un compte tombe sous la marge de maintenance (évaluée à un prix mark mélangeant des feeds CEX et le carnet d'ordres, précisément pour résister aux jeux d'oracle décrits plus haut), le moteur envoie des ordres de marché de liquidation dans le carnet d'ordres — de grandes positions en tranches partielles pour limiter l'impact. Si l'equity continue de descendre sous les deux tiers de la marge de maintenance, la position est reprise au prix mark par un vault liquidateur de secours qui est une stratégie interne à HLP, le vault de market-making détenu par la communauté du protocole, avec le deleveraging automatique comme dernière couche. Le P&L de liquidation revient aux déposants de HLP — le « profit du liquidateur » est socialisé dans un vault que n'importe qui peut rejoindre, et non capté à la course événement par événement.

La conséquence pour un trader : sur les marchés monétaires, le jeu consiste à être le liquidateur — une course d'infrastructure pour un spread fixe. Sur les DEX de perpétuels, le rôle de liquidateur est fermé, donc le jeu bascule vers le trading autour des liquidations : les prix de liquidation sont calculables à partir des positions ouvertes, le flux forcé frappe un carnet d'ordres visible, et les niveaux de liquidation groupés deviennent à la fois un aimant et une source de carburant pour les mouvements de prix. C'est la même logique qui rend les cascades de liquidation des CEX tradables — la dynamique que nous avons abordée dans les funding rates tuent votre levier (le coût du levier est ce qui pousse les positions vers la falaise) et dans la mécanique du pump-and-dump des shitcoins (des poussées orchestrées dans des clusters de liquidation). Le traitement complet des cascades comme signal — les détecter en formation, mesurer leur carburant, trader le dépassement — fait l'objet du prochain article de cette série.

Ce qu'il faut retenir

La liquidation sur marché monétaire est ce coin rare de la crypto où tout est lisible : la condition de déclenchement est une formule, le prix est une constante fixée par la gouvernance, le coup de feu de départ est une transaction d'oracle que l'on peut voir venir. Cette lisibilité a construit un business véritablement ouvert en 2019-2021, puis — exactement parce que tout était lisible — la concurrence a fait baisser le prix de l'avantage jusqu'à la qualité de l'infrastructure et a remis le reste aux enchères au profit des protocoles. La mécanique reste un savoir essentiel : si vous empruntez on-chain, ces mathématiques sont votre modèle de risque ; si vous tradez autour du flux forcé, la cadence de l'oracle et les close factors vous disent quand et combien ; et si malgré tout vous construisez le bot, faites-le au moins en sachant où va réellement l'argent.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Gardez une longueur d'avance sur le marché

Abonnez-vous à notre newsletter pour des insights exclusifs sur le trading IA, des analyses de marché et des mises à jour de la plateforme.

Nous respectons votre vie privée. Désabonnement possible à tout moment.