L'exécution qui était arrangée : lire l'ordre des transactions pour repérer un sandwich MEV

Sécurité des Cryptomonnaies & Blockchain Niveau 4/4 ~7 min 24 septembre 2026

Le défi

Vertex Desk a échangé 40 WETH contre des ORCA sur un routeur public. Le devis affiché annonçait environ 118 000 ORCA. L'exécution est revenue à 104 880, onze pour cent plus bas, et le desk veut savoir qui a pris la différence. Voici les événements de swap du routeur sur quatre blocs consécutifs, dans l'ordre où la chaîne les a exécutés : le bloc d'abord, puis la position dans ce bloc. Le portefeuille du desk est 0x4d81ac9f2b7e61d0cc35a84f19e7b2065da3f7c8. Quelqu'un a payé quinze fois le prix du gaz courant pour se tenir des deux côtés de cette transaction. Donnez son adresse.

Ce que tu vas apprendre

  • Lire le bloc et la position intra-bloc comme l'ordonnancement qui décide le prix d'une transaction
  • Identifier le motif achat, victime, vente d'une attaque sandwich dans des événements de swap bruts
  • Utiliser un prix du gaz anormal comme signal que l'ordonnancement a été acheté
  • Distinguer un sandwich d'un arbitrage ordinaire qui se trouve acheter et vendre
  • Expliquer pourquoi c'est la tolérance de slippage, et non le routeur, qui rend l'attaque rentable

Compétences testées

Analyse de transactions on-chainCorrélation de journaux d'événementsRaisonnement sur le MEV

Prérequis

  • Ce qu'est un swap de token sur un market maker automatisé (AMM)
  • Que les transactions dans un bloc ont un ordre

Comment ça marche

Sur un market maker à produit constant, le prix que vous obtenez est décidé par l'état du pool à l'instant où votre transaction s'exécute, et cet instant est décidé par la position de votre transaction dans un bloc. Ces deux éléments sont publics avant même de se produire. Un swap en attente se trouve dans le mempool, annonçant sa taille et le pire prix qu'il acceptera, ce qui est tout ce dont quelqu'un a besoin pour calculer de combien il peut déplacer le prix contre vous tout en vous laissant aller au bout de la transaction.

Un sandwich, ce sont trois transactions dans un même bloc. L'attaquant achète en premier, ce qui fait monter le prix. Votre ordre s'exécute contre le pool qu'il vient de déplacer, donc vous payez plus et recevez moins. Ensuite il vend dans la demande que votre propre ordre a créée, et le pool revient à peu près à son point de départ. Son profit est la différence, et elle sort de votre exécution.

La position dans le bloc s'achète, elle ne se négocie pas. Payer une forte prime de gaz sur les deux jambes garantit que l'une se place devant vous et l'autre derrière, ce qui explique pourquoi un prix du gaz aberrant à côté d'une transaction ordinaire est le signal le plus flagrant dans ces données. Votre tolérance de slippage fixe le plafond : elle indique à l'attaquant exactement combien il peut prendre avant que votre transaction ne fasse revert et qu'il ne reparte avec rien.

Erreurs fréquentes

  • Répondre 0xa83c15e0. Cette adresse achète et vend dans le même bloc, mais aux positions 06 et 71, sans rien de gros entre les deux et sans prime de gaz. C'est de l'arbitrage, pas un sandwich.
  • Répondre 0xb27f604c. Elle vend puis achète, dans le bloc 21594117. L'ordre est inversé, et un sandwich ne fonctionne que dans un seul sens.
  • Répondre 0x6e0472bd. Elle paie les mêmes 341 gwei dans le bloc 21594119, mais n'a qu'une seule jambe. Un gaz élevé à lui seul ne fait pas l'attaque.
  • Filtrer par expéditeur et s'arrêter là. L'attaquant fait aussi une petite transaction ordinaire dans le bloc 21594116, donc son historique pris isolément a l'air banal.
  • Lire les horodatages. Toutes les transactions d'un bloc partagent un seul horodatage. Seul pos indique ce qui s'est exécuté en premier.

Comment s'en protéger

Le desk ne peut pas empêcher d'autres personnes de réordonner une file d'attente publique, donc la solution consiste à rendre ce réordonnancement non rentable.

  • Réglez le slippage sur la plus petite tolérance que la transaction peut supporter. Un ordre de 40 WETH avec un slippage large est une invitation avec le montant maximum écrit dessus.
  • Répartissez les gros ordres sur plusieurs blocs ou faites-les passer par un agrégateur qui les découpe automatiquement. Un sandwich sur une petite tranche ne vaut pas le gaz qu'il coûte.
  • Envoyez l'ordre via un relais de transactions privé pour qu'il n'apparaisse jamais dans le mempool public avant son exécution.
  • Comparez automatiquement les exécutions aux devis et déclenchez une alerte sur l'écart. Le desk a découvert celle-ci parce que quelqu'un a par hasard regardé le chiffre.

Solution complète

Les membres Pro et Max débloquent la solution complète étape par étape.

Passer Pro

Statistiques de la communauté

159 résolutions
89% taux de réussite
M2F14M3 Premier sang

Hacks du jour associés

32 000+ Hackers Vrais labs Gratuit
Commencer Gratuitement ou résolvez le hack du jour, sans compte