Arbitrage on-chain : cycles atomiques, flash loans et l'enchère que vous devez gagner
Il existe un mythe confortable selon lequel l'arbitrage on-chain est difficile parce que la découverte est difficile — qu'il existe quelque part dans le graphe des prix un cycle caché que seul l'algorithme le plus intelligent peut voir, et que celui qui le calcule le plus rapidement est payé. La vérité est presque l'inverse. Sur une chaîne publique, le cycle rentable est visible par tout le monde au même instant, calculé par des dizaines de bots exécutant un code quasi-identique sur les mêmes réserves. La détection est un problème résolu et banalisé. Ce qui est difficile — ce qui décide réellement qui reçoit l'argent — c'est de gagner l'ordonnancement : faire atterrir votre transaction dans le bon emplacement du bon bloc, avant tous les autres chercheurs qui ont trouvé exactement la même chose. L'arbitrage on-chain est facile à détecter et difficile à gagner, et l'écart entre ces deux verbes est l'endroit où réside toute l'économie de l'activité.
Cet article se place du côté du chercheur. Dans MEV anatomy, nous avons cartographié la forêt sombre du point de vue de la victime et promis un suivi sur l'extraction bénigne — l'arbitrage et le backrunning qui maintiennent l'honnêteté des prix on-chain. Dans on-chain liquidations, nous avons construit un contrat d'exécution de prêt flash et un bundle de backrun d'oracle et avons renvoyé ici pour le traitement général du primitif. Cette pièce paie les deux dettes. Elle suppose que vous savez déjà ce qu'est un mempool, un bundle et des frais de priorité ; sinon, lisez d'abord la pièce sur le MEV. Ici, nous construisons la machine de l'arbitragiste : la transaction atomique qui ne peut pas perdre, le capital emprunté qui supprime la contrainte de capital, la recherche graphique qui est la moitié facile, et l'enchère qui mange presque toute la marge.
Atomicité : le trade qui s'annule en cas de perte
La propriété définissante de l'arbitrage on-chain — ce qui le rend catégoriquement plus sûr que tout trade inter-plateforme qu'un trader CEX peut exécuter — est l'atomicité. Un arbitrage multi-sauts n'est pas une séquence de trades que vous lancez en espérant qu'ils se regroupent. C'est une transaction unique qui exécute chaque étape du cycle, et si le solde final n'est pas strictement supérieur au solde de départ, toute la transaction s'annule : chaque changement d'état est annulé comme s'il n'avait jamais eu lieu, et vous ne perdez que le gaz pour une transaction échouée.
Cela change complètement le profil de risque. Un trader CEX qui achète du BTC sur une bourse pour le vendre sur une autre détient des stocks entre les deux — pendant des secondes, des minutes, quelle que soit la durée du transfert et du deuxième remplissage — et subit ce que le prix fait pendant cette fenêtre. L'arbitragiste on-chain détient des stocks pendant zéro temps dans un sens économiquement significatif : l'achat et la vente sont la même opération indivisible. Il n'y a pas de risque de prix en milieu de cycle car il n'y a pas de milieu de cycle. Soit la boucle entière se ferme de manière rentable en une seule étape atomique, soit elle ne se produit pas du tout.
La garde qui applique cela est une simple comparaison à la fin du chemin d'exécution. Conceptuellement, un contrat d'arbitrage atomique ne fait rien de plus que :
// The whole cycle runs inside one transaction. If the closing balance
// does not clear the opening balance (plus costs), the require() throws,
// and the EVM reverts every trade that came before it.
function executeCycle(bytes calldata path, uint256 minProfit) external {
uint256 start = IERC20(baseToken).balanceOf(address(this));
_hopA(path); // e.g. USDC -> WETH on Uniswap
_hopB(path); // e.g. WETH -> DAI on Sushiswap
_hopC(path); // e.g. DAI -> USDC on Curve
uint256 end = IERC20(baseToken).balanceOf(address(this));
require(end >= start + minProfit, "unprofitable"); // atomic safety net
}
Le require est l'ensemble du modèle de sécurité. Une cotation obsolète, une transaction concurrente qui a déplacé le pool un emplacement avant la vôtre, des frais inattendus — tout ce qui rend le cycle non rentable déclenche simplement la garde et annule la transaction. Vous ne vendez jamais la dernière étape à un prix pire que celui que vous aviez modélisé et ne subissez pas la perte ; le trade qui aurait perdu de l'argent ne s'exécute pas. C'est pourquoi l'arbitrage est la partie bénigne de la taxonomie MEV de la pièce MEV : il n'y a pas de victime dont le remplissage est dégradé, et l'arbitragiste ne porte aucun risque directionnel d'inventaire. Le seul coût réel d'une tentative échouée est le gaz — qui, comme nous le verrons, est exactement le coût que l'enchère concurrentielle est conçue pour gonfler.
Les prêts flash suppriment la contrainte de capital
L'atomicité permet quelque chose de plus fort : l'arbitrage avec aucun capital propre. Un prêt flash vous permet d'emprunter un montant arbitraire auprès d'un pool de prêt avec une seule condition — vous le remboursez, plus des frais, avant la fin de la transaction. Parce que l'emprunt, l'arbitrage et le remboursement vivent tous à l'intérieur d'une transaction atomique, le pool ne fait face à aucun risque de défaut : si vous ne pouvez pas rembourser, toute la transaction est annulée et le prêt est annulé. Le prêteur est protégé par la même annulation qui vous protège.
Le modèle est un rappel. Vous appelez la fonction de prêt flash du pool ; le pool vous envoie les jetons puis vous rappelle ; à l'intérieur de ce rappel, vous exécutez le cycle et devez laisser suffisamment pour rembourser :
// Called by the lending pool in the middle of the flash loan.
function receiveFlashLoan(address token, uint256 amount, uint256 fee, bytes calldata data)
external
{
// 1. buy the asset cheap on venue A with the borrowed `amount`
uint256 bought = _swap(VENUE_A, token, ASSET, amount, data);
// 2. sell it dear on venue B, back into the borrowed token
uint256 repaidIn = _swap(VENUE_B, ASSET, token, bought, data);
// 3. must be able to return principal + fee, or the whole tx reverts
require(repaidIn >= amount + fee, "arb cannot cover loan");
IERC20(token).transfer(msg.sender, amount + fee); // repay in-tx
// whatever remains — repaidIn - amount - fee — is profit, kept here
}
Les frais sont faibles et dépendent de la plateforme : Aave v3 facture 5 points de base (0,05 %) sur un prêt flash, Balancer facturait historiquement 0 point de base, et Uniswap v3 expose la même capacité via des flash swaps où les frais sont simplement les frais de swap normaux du pool. Cinq points de base sont un coût réel qui doit être compensé par la marge du cycle, mais c'est trivial par rapport à l'alternative de bloquer six ou sept chiffres de votre propre inventaire pour capturer une dislocation qui dure un bloc.
La conséquence pour la structure du marché mérite d'être énoncée clairement : les prêts flash découplent le profit d'arbitrage du capital. Le gagnant d'une opportunité donnée n'est pas le chercheur avec le bilan le plus profond — un bot avec quelques dollars de gaz peut emprunter dix millions de dollars pour la durée d'une transaction. Le capital n'est pas le fossé. Tout le monde peut emprunter la même taille contre la même opportunité, ce qui est précisément la raison pour laquelle la concurrence se concentre sur la seule chose qui n'est pas banalisée : être ordonné en premier.
Un cycle inter-DEX travaillé
Les chiffres rendent la mécanique concrète. Prenons deux pools WETH/USDC à produit constant avec des frais de 0,30 % (), et supposons qu'un gros achat vient de pousser le pool B au-dessus du pool A — le genre de dislocation que la section suivante montre être à l'origine des cycles. Utilisons des réserves rondes et clairement illustratives :
- Pool A (bon marché) : WETH, USDC prix USDC/WETH.
- Pool B (cher) : WETH, USDC prix USDC/WETH.
Le cycle est le suivant : emprunter des USDC en flash, acheter du WETH bon marché sur A, le vendre cher sur B, rembourser. Emprunter USDC. Le saut 1 vend des USDC dans le pool A contre du WETH :
Le saut 2 vend ce WETH dans le pool B contre des USDC :
Vous avez emprunté 100 000, reçu 100 723, et devez des frais flash de 5 points de base, soit 50 USDC. Net : environ $673 de profit brut sur une mise de capital nulle, avant le gaz et avant l'offre prioritaire. Deux choses à noter. Premièrement, les deux sauts rapprochent les pools l'un de l'autre — l'achat sur A augmente son prix, la vente sur B diminue son prix — donc le profit n'est pas linéaire en taille : pousser trop loin et l'impact sur les prix mange l'écart, exactement comme dans l'optimisation du sandwich de la pièce MEV. Le chercheur effectue une recherche unidimensionnelle sur pour trouver la taille d'emprunt qui maximise le profit net. Deuxièmement, ce $673 est un nombre déterministe que chaque bot concurrent calcule à la même valeur à partir des mêmes réserves — ce qui est tout le problème, et le sujet de la section sur les enchères ci-dessous.

La détection est la moitié facile
Étant donné le marché comme un graphe — les actifs comme des nœuds, les paires de trading comme des arêtes pondérées — un cycle d'arbitrage est une boucle dont le produit des taux de change dépasse un. Prenez le logarithme de chaque taux, inversez-le, et un cycle rentable devient un cycle à poids négatif ; l'outil classique pour en trouver un est Bellman-Ford, avec SPFA et l'algorithme RICH plus récent comme variantes plus rapides adaptées aux graphes petits et changeant rapidement que les marchés réels produisent. Tout cet ensemble d'outils — la transformation logarithmique, la condition de cycle négatif, les implémentations Rust, les poids d'arêtes ajustés aux frais qui tuent la plupart des cycles théoriques — est le sujet des algorithmes de graphe pour la détection d'arbitrage, et il n'est pas nécessaire de le répéter ici.
Ce qui importe pour cet article est un point comptable unique : les frais doivent être inclus dans le poids de l'arête, sinon le cycle est un mirage. Une boucle à trois étapes paie trois frais de pool plus, si vous avez emprunté, les frais de prêt flash, et le test de cycle négatif doit tous les prendre en compte :
from math import log
def cycle_log_gain(rates, pool_fee=0.003, loan_fee=0.0005):
"""Log-gain around a cycle. > 0 means gross profit before gas and priority bid.
`rates[i]` = units of the next asset per unit of the current one on hop i."""
gross = 1.0
for r in rates:
gross *= r * (1 - pool_fee) # each hop pays the venue's swap fee
gross *= (1 - loan_fee) # one flash-loan fee for the whole cycle
return log(gross) # still ignores gas and the auction bid
Voici l'observation fondamentale. Cette fonction est déterministe. Donnez-lui les réserves on-chain actuelles — que chaque nœud détient de manière identique, car la chaîne est une machine d'état partagée et répliquée — et chaque chercheur calcule le même cycle_log_gain à la même valeur à la même hauteur de bloc. Il n'y a pas de signal privé, pas de jeu de données propriétaire, pas d'avantage informationnel. Lorsqu'un grand swap ou un nouveau bloc réorganise les réserves, des dizaines de bots exécutant un code de détection structurellement identique s'allument tous sur le même cycle en quelques millisecondes. La recherche renvoie la même réponse à tout le monde.
Une note sur la topologie, car elle détermine la difficulté réelle de la recherche. Les cycles les moins chers sont triangulaires et intra-DEX — WETH → USDC → DAI → WETH entièrement au sein d'un seul déploiement Uniswap : trois sauts, trois frais de pool, aucune coordination inter-plateforme. Les cycles inter-DEX (acheter sur Uniswap, vendre sur Sushiswap) ajoutent des plateformes mais laissent la garde atomique identique. Des cycles plus longs et exotiques enchaînent encore plus de sauts — mais chaque saut supplémentaire multiplie un autre facteur dans le produit, de sorte que la condition de cycle négatif ajustée aux frais tue rapidement les cycles longs. C'est exactement pourquoi les chercheurs réels limitent la longueur des cycles à trois à cinq sauts et élaguent agressivement ; c'est la recherche en couches et à longueur limitée que l'algorithme RICH de la pièce sur les algorithmes de graphe est conçu pour exécuter.
Ainsi, la détection ne vous fait pas gagner le trade ; elle ne fait que vous qualifier pour y concourir. Le test log(gross) > 0 vous indique qu'une opportunité existe — il ne dit rien sur le fait que vous serez l'adresse qui la saisira. Cela se décide un niveau plus bas, dans l'ordonnancement, et l'ordonnancement n'est pas quelque chose que votre algorithme calcule. C'est quelque chose pour lequel vous enchérissez. Tout ce qui est difficile dans l'arbitrage on-chain se produit après que le cycle a été trouvé.

Backrunning : la forme bénigne du MEV
D'où viennent ces cycles en premier lieu ? Majoritairement, des transactions d'autres personnes. Un grand swap sur un pool Uniswap éloigne le prix de ce pool du marché plus large ; le pool est maintenant mal évalué par rapport à Binance, par rapport à un pool Curve, par rapport à Sushiswap ; et l'acte de le réaligner est un arbitrage rentable. Le chercheur qui fait cela place sa transaction immédiatement après le swap qui a créé la dislocation. C'est le backrunning, et c'est la forme dominante et bénigne du MEV on-chain.
Rappelons la mécanique du produit constant de la pièce MEV. Un pool détient des réserves avec et un prix spot . Quelqu'un y vend une grande quantité de l'actif de base ; par l'invariant, le pool paie
et le nouveau prix spot est plus bas — le vendeur l'a fait baisser. Si le prix du marché externe est toujours , le pool cote maintenant en dessous de , et le backrun maximisant le profit achète au pool exactement jusqu'à ce que son prix marginal remonte à — c'est-à-dire, jusqu'à ce que les réserves satisfassent à nouveau . L'arbitragiste capture la zone entre la courbe d'exécution du pool et le prix externe plat — la valeur que le grand swap a laissée sur la table en déplaçant le pool.
Le fait structurel critique — celui qui place le backrunning du côté bénin du grand livre — est qu'un backrun pur ne dégrade pas l'exécution de la cible. Il s'exécute strictement après le swap de la victime. Au moment où le backrun s'exécute, le prix du swapper est déjà fixé ; rien de ce que fait le backrunner ne peut revenir en arrière et l'aggraver. Contrastez cela avec le sandwich toxique de la pièce MEV, où un frontrun est inséré avant la victime précisément pour aggraver son remplissage afin que le backrun puisse récolter la dislocation agrandie. Même mécanique de backrun, moralité opposée : le sandwich fabrique le mauvais prix aux dépens de la victime ; le backrun bénin ne fait que nettoyer un mauvais prix que la victime aurait créé de toute façon. L'arbitragiste est le mécanisme par lequel les prix on-chain suivent le monde extérieur — le même rôle qui fait de l'arbitrage inter-plateforme une force stabilisatrice partout dans la finance.
C'est aussi pourquoi la pile de protection MEV moderne essaie de préserver et de redistribuer les backruns tout en supprimant les sandwiches. MEV-Share et les enchères de flux d'ordres de Flashbots permettent à un utilisateur d'exposer des indices partiels sur sa transaction, d'inviter les chercheurs à enchérir pour le droit de la backrunner, et de rembourser la majeure partie du profit résultant à l'utilisateur qui a créé l'opportunité. Le backrun se produit toujours — le prix est toujours réaligné — mais la valeur revient à la transaction qui l'a générée au lieu d'être volée par le plus rapide.
D'où viennent les cycles
Presque tous les cycles rentables sont en aval d'un autre événement on-chain qui a fait bouger un prix. Connaître les sources fait la différence entre interroger aveuglément tout le graphe et surveiller la poignée de déclencheurs qui créent réellement des arêtes :
- Grands swaps. La source canonique, travaillée ci-dessus : tout trade suffisamment important pour éloigner un pool du marché plus large ouvre un backrun pour le réaligner. Plus le swap est important et le pool est mince, plus le cycle est grand.
- Mises à jour d'oracle. Chaque plateforme qui fixe les prix à partir d'un oracle — marchés monétaires, DEX perpétuels — devient arbitrable dès que le flux bouge. Le backrun de mise à jour d'oracle qui entraîne les liquidations, disséqué dans la pièce sur les liquidations, est le même mouvement appliqué à un flux de prix au lieu d'un swap : la mise à jour est le signal de départ, et le chercheur atterrit immédiatement derrière elle.
- Liquidité nouvelle ou supprimée. Une importante émission ou destruction de LP modifie la profondeur d'un pool et peut le laisser momentanément hors de prix ; la liquidité juste-à-temps (JIT) est la version adverse, ajoutant de la profondeur autour d'un seul swap en attente et la retirant immédiatement après.
- Résidus de routage inter-pools. Un routeur qui divise un swap entre plusieurs pools les laisse rarement tous exactement au même prix, et les petits déséquilibres qu'il laisse sont des cycles backrunnables.
La conclusion pratique : un bot d'arbitrage est principalement un écouteur d'événements, pas un solveur de graphes. Il surveille ces déclencheurs, recalcule uniquement le sous-graphe que chacun touche, et déclenche un bundle — c'est pourquoi la conception de mise à jour incrémentielle de la pièce sur les algorithmes de graphe est bien plus importante que la vitesse de recherche brute sur le graphe complet.

L'enchère mange la marge
Maintenant, la partie inconfortable. Vous avez trouvé le cycle. Tout le monde aussi. L'opportunité est déterministe, atomique et sans capital — ce qui signifie que la seule variable restante est de savoir qui atterrit dans l'emplacement gagnant, et cela est réglé par une enchère prioritaire.
Depuis la migration vers la séparation proposant-constructeur et MEV-Boost (la plomberie détaillée dans le prochain MEV supply chain: PBS and MEV-Boost), les chercheurs ne mènent plus de guerres de gaz publiques dans le mempool. Ils soumettent des bundles en privé aux constructeurs de blocs, en y joignant une offre — soit sous forme de frais de priorité élevés, soit sous forme de paiement direct au constructeur. Le constructeur assemble le bloc le plus précieux qu'il peut et le transmet au proposant. Du point de vue du chercheur, il s'agit d'une enchère à l'aveugle pour le droit d'être l'adresse qui exécute un prix connu et déterministe.
Modélisons-le. Soit le profit brut d'arbitrage — les $673 du cycle travaillé ci-dessus, par exemple — et soit le coût de chaque chercheur (gaz, frais de prêt flash) . Pour gagner l'emplacement, vous offrez contre tous les autres chercheurs qui ont calculé le même . Votre net si vous gagnez est
Vous voulez que soit aussi bas que possible ; vous voulez aussi gagner. Mais vos concurrents sont confrontés à la même arithmétique contre le même . Dans une enchère à l'aveugle sur un prix de valeur commune que tout le monde peut calculer exactement, l'offre d'équilibre grimpe jusqu'à ce qu'elle consomme presque tout le surplus : , et le gagnant ne conserve que , la marge très mince par laquelle il a surenchéri le second. Ce $673 ne reste pas à celui qui a trouvé le cycle ; presque tout est directement versé au constructeur et, finalement, au proposant qui a vendu l'ordonnancement. Ce n'est pas une défaillance du marché ; c'est ce qu'une enchère concurrentielle est censée faire.
L'annulation n'est pas gratuite — l'économie des taux d'échec
Il y a un deuxième coût que le modèle naïf omet, et c'est celui qui sépare réellement les opérateurs. Lorsque vous perdez l'enchère, votre bundle ne se dépose tout simplement pas — vous ne payez rien, ce qui est tout l'intérêt de la soumission de bundle par rapport aux anciennes guerres de gaz publiques. Mais lorsque vous gagnez l'enchère avec un bundle dont la simulation était obsolète — les réserves ont bougé entre votre lecture et l'inclusion — votre garde require(end >= start + minProfit) se déclenche et la transaction est annulée on-chain, et vous payez le gaz pour l'annulation. L'atomicité protège votre capital, pas votre gaz.
Ainsi, la valeur attendue réelle du chercheur par opportunité est
où est le gaz brûlé sur un bundle atterri mais annulé. Pousser votre offre plus haut gagne plus de slots mais gagne aussi plus de slots obsolètes, augmentant le terme d'annulation. Les opérateurs qui survivent ne sont pas ceux qui trouvent plus de cycles — tout le monde trouve les mêmes cycles — mais ceux qui ont un plus faible (chemins d'exécution moins chers et plus serrés), une probabilité d'annulation plus faible (simulation plus fraîche, meilleure prédiction d'inclusion), et la discipline de ne pas enchérir sur des opportunités marginales où le coût d'annulation attendu submerge le mince surplus. L'avantage, tel qu'il est, réside entièrement dans ces coûts de second ordre.
La forme empirique correspond au modèle. Lorsque de nombreux bots simulent la même opportunité on-chain pour le même chiffre de profit, le bundle gagnant verse régulièrement la grande majorité du profit brut au constructeur et au validateur — la même fuite de plus de 90 % que nous avons mesurée pour les liquidations, pour la même raison : une information parfaite sur un prix commun plus une enchère à l'aveugle équivaut à des marges réduites au coût du perdant marginal. L'avantage du chercheur n'est pas la taille de , que tout le monde voit. C'est tout avantage privé dans (exécution moins chère, meilleur routage, taux d'échec plus faible) ou dans le fait de voir avant la foule.
Ce qui vous indique exactement où le profit survit encore :
- Chaînes à longue traîne et marchés de constructeurs immatures. Sur les chaînes où peu de chercheurs sophistiqués opèrent et où l'enchère de constructeur est faible ou absente, l'offre reste basse car il n'y a personne pour vous surenchérir. Le même cycle qui rapporte sur le mainnet Ethereum peut rapporter la majeure partie de sur une L2 tranquille ou une alt-L1. L'avantage est la concurrence, pas l'ingéniosité.
- Pools à faible concurrence et actifs exotiques. Les opportunités dont la sortie rentable nécessite de consommer une liquidité DEX mince et dépendante du chemin sont difficiles à simuler correctement. Un chercheur qui modélise l'aller-retour complet — y compris le slippage de sortie sur un jeton illiquide — capture des cycles que les bots naïfs manquent ou sous-évaluent, ce qui entraîne une annulation. Ici, l'avantage est véritablement la qualité d'exécution, pas la latence.
- Arbitrage CEX-DEX. La catégorie la plus importante — et celle qui brise l'atomicité. Elle a sa propre section, ensuite.
Le résumé honnête du jeu atomique on-chain : c'est un excellent moyen d'apprendre les rouages de l'EVM, la plomberie des constructeurs et la théorie des enchères à la dure. C'est un moyen brutal de gagner sa vie, car ce que vous vendez — la capacité à trouver et à exécuter un cycle déterministe — est exactement ce que vos concurrents vendent aussi, et l'enchère le fixe au prix coûtant.

Arbitrage CEX-DEX : la plus grande catégorie, et elle n'est pas atomique
La plus grande source unique de valeur extractible on-chain n'est pas le cycle atomique bien rangé. C'est l'arbitrage CEX-DEX : le prix d'un actif sur une bourse centralisée diverge de son prix sur un DEX, et un chercheur négocie les deux côtés pour combler l'écart. Des études sur l'arbitrage non atomique — plus directement Non-Atomic Arbitrage in Decentralized Finance (2024) de Heimbach, Pahari et Schertenleib — attribuent de l'ordre de centaines de millions de dollars de valeur extraite aux arbitres inter-bourses sur une période de plusieurs années, dépassant les catégories atomiques, purement on-chain. Si vous voulez comprendre où se trouve réellement l'argent dans le MEV, c'est ici.
Et cela viole la propriété qui rendait tout ce qui précède sûr. Une étape du trade se déroule sur une bourse centralisée ; l'autre se déroule on-chain. L'étape on-chain est atomique — elle atterrit dans un bloc ou est annulée — mais l'étape CEX est un ordre distinct sur un moteur de correspondance distinct, se réglant selon son propre calendrier. Les deux étapes ne peuvent pas être enveloppées dans une seule annulation. Il n'y a pas de require(end >= start) couvrant les deux plateformes. Le chercheur backrunne un swap sur Uniswap pour acheter du WETH bon marché on-chain, et séparement vend du WETH sur Binance pour réaliser l'écart — et entre ces deux événements, le prix peut bouger. L'arbitrage CEX-DEX comporte le risque d'inventaire que l'arbitrage atomique élimine.
Ce risque modifie toute la forme de l'entreprise :
- Vous devez pré-positionner l'inventaire sur les deux plateformes. Vous ne pouvez pas utiliser un prêt flash pour la partie CEX. Pour vendre du WETH sur Binance dès que votre achat on-chain est confirmé, vous devez déjà détenir du WETH sur Binance (et de la monnaie de cotation on-chain, et vice versa pour l'autre direction). Le capital, que le prêt flash avait banni de l'arbitrage atomique, revient comme une exigence stricte — un inventaire sur plusieurs bourses, exposé.
- Vous devez couvrir la jambe ouverte. Entre le remplissage on-chain et le remplissage CEX, vous êtes directionnellement long ou court sur l'actif. Les opérateurs CEX-DEX sérieux gèrent cela comme un livre de bord à delta géré en continu : ils couvrent l'exposition sur un futur perpétuel, traitent le coût de financement de cette couverture comme un coût d'exploitation, et gèrent la base entre le spot et le perp. Ce n'est pas un nouveau problème — c'est exactement la mécanique de l'arbitrage de taux de financement inter-bourses, où tout le jeu consiste à détenir des jambes compensatoires sur différentes plateformes et à financer la couverture par le financement. L'arbitrage CEX-DEX est cette discipline avec une jambe épinglée à un bloc.
- L'avantage est en partie informationnel et structurel. Parce que le prix CEX précède le prix DEX (les carnets d'ordres centralisés se mettent à jour en continu ; les cotations AMM ne bougent que lorsque quelqu'un trade), un chercheur qui lit le carnet d'ordres CEX sait dans quelle direction le prochain backrun devrait aller avant que le prix on-chain ne rattrape son retard. Et de plus en plus, les constructeurs eux-mêmes internalisent ce flux : un constructeur qui gère également un bureau CEX-DEX peut ordonner le bloc autour de ses propres trades. Cela brouille la ligne entre le chercheur et le constructeur et est l'une des forces centralisatrices dans la chaîne d'approvisionnement MEV — les entités qui voient le plus de flux d'ordres et contrôlent le plus d'ordonnancement capturent également le plus d'arbitrage non atomique.
Le compromis est donc exactement inversé par rapport au cas atomique. L'arbitrage atomique est sûr (annulation en cas de perte, pas d'inventaire, pas de capital) mais férocement concurrentiel (prix déterministe, l'enchère mange la marge). L'arbitrage CEX-DEX est dangereux (risque d'inventaire réel, capital réel, une couverture à financer et à gérer) mais beaucoup plus important et moins parfaitement contesté, précisément parce que le danger et l'exigence de capital éloignent les bots qui ne peuvent exécuter que la boucle atomique sans risque. Le rendement supplémentaire est une compensation pour le risque supplémentaire — ce qui est le fait le plus ordinaire en finance, se réaffirmant enfin sur une chaîne qui a passé toute une section à prétendre que de l'argent sans risque était sur la table.
Ce qu'il faut retenir
Compressons l'argument à ses points essentiels :
- L'atomicité est le modèle de sécurité complet. Un arbitrage multi-sauts est une transaction avec une garde
require(end >= start + minProfit); tout ce qui le rend non rentable est annulé, de sorte que l'arbitragiste ne détient jamais de risque d'inventaire en milieu de cycle et ne vend jamais la dernière étape à perte. - Les prêts flash découplent le profit du capital. Empruntez, arbitrez et remboursez au sein d'une seule transaction atomique ; le prêteur est protégé par la même annulation que vous. Le gagnant n'est pas le chercheur avec le plus de capital — le capital n'est pas le fossé.
- La détection est la moitié facile et banalisée. La recherche de cycle négatif des algorithmes de graphe pour l'arbitrage est déterministe et identique pour tous ; trouver le cycle ne fait que vous qualifier pour y concourir.
- Le backrunning est la forme bénigne et dominante. Atterrir immédiatement après un grand swap ou une mise à jour d'oracle réaligne un pool mal évalué sans dégrader le remplissage de quiconque — l'opposé du sandwich toxique, et ce que MEV-Share essaie de redistribuer plutôt que de supprimer.
- L'enchère mange la quasi-totalité de la marge. Dans une enchère à l'aveugle de constructeur sur un prix commun et calculable, les offres convergent vers et plus de 90 % des fuites vont au constructeur et au proposant. Le profit ne survit que là où la concurrence est faible : chaînes à longue traîne, pools illiquides et sorties plus difficiles à simuler.
- Le CEX-DEX est la plus grande catégorie et n'est pas atomique. Une étape sur un CEX signifie un risque d'inventaire réel, un capital réel et une couverture à financer — le manuel de financement inter-bourses appliqué avec une étape épinglée à un bloc, et l'une des forces qui tirent la chaîne d'approvisionnement MEV vers les constructeurs qui voient le plus de flux.
L'arbitrage on-chain ressemble, de l'extérieur, à un casse-tête sur la recherche de cycles cachés. De l'intérieur, c'est une enchère — et le casse-tête a été résolu pour tout le monde au même instant. Savoir où se trouve le cycle n'a jamais été l'avantage. Gagner l'emplacement, ou trader là où personne d'autre n'enchérit, l'a toujours été.
Références
- Daian, Goldfeder, Kell, Li, Zhao, Bentov, Breidenbach, Juels (2019), Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges. arXiv:1904.05234.
- Heimbach, Pahari, Schertenleib (2024), Non-Atomic Arbitrage in Decentralized Finance. arXiv:2401.01622 (IEEE S&P 2024).
- Robinson & Konstantopoulos (2020), Ethereum is a Dark Forest.
- Documentation des prêts flash Aave v3 et des flash-swaps Balancer / Uniswap v3 (barèmes de frais).
- Documentation Flashbots : MEV-Boost, MEV-Share, enchères de flux d'ordres (docs.flashbots.net).
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.