cryptofoundry

Contacter cryptofoundry

Dites-nous ce que vous voulez construire ou automatiser.

Article

Sniper Bot Watcher : Protéger le capital de market making contre les exploits par front-running

Sniper Bot Watcher : Protéger le capital de market making contre les exploits par front-running

Le market making nécessite un équilibre entre fournir de la liquidité et protéger le capital. Le bot ADAMANT mm permet aux émetteurs de jetons et aux exchanges de créer une liquidité dynamique et un volume de trading de manière contrôlée et automatisée. Cependant, à mesure que les marchés évoluent, les adversaires aussi.

Issue #93 introduit une amélioration défensive majeure : le Sniper Bot Watcher. Cela corrige une vulnérabilité structurelle affectant presque toutes les stratégies automatisées de market making — l’exploitation par des bots externes ultra-rapides.

La faiblesse du market making automatisé

Les bots de market making génèrent souvent du volume et maintiennent des spreads en plaçant des ordres des deux côtés du carnet d’ordres. Un mécanisme courant est l’appariement interne : le bot place un ordre au niveau du spread, puis peu après un ordre preneur correspondant pour le remplir, créant ainsi une activité de trading légitime tout en préservant l’équilibre des inventaires.

Le problème réside dans le délai inévitable entre ces deux étapes. Même s’il est extrêmement court, il existe, et sur les marchés électroniques modernes, quelques millisecondes suffisent. Des bots externes à haute vitesse surveillent en temps réel les carnets d’ordres et réagissent instantanément dès qu’une nouvelle liquidité apparaît. Dès que le bot de market making publie son ordre de création, ces bots l’interceptent avant que l’ordre interne d’appariement n’arrive.

Deux schémas d’exploitation principaux émergent. Dans le premier, un tiers prend immédiatement l’ordre d’achat, laissant l’ordre de vente suivant non rempli ou partiellement rempli, et le bot perd des USDT. Dans le second, un tiers place un ordre d’achat supérieur juste au-dessus de l’ordre du bot, de sorte que la vente du bot s’apparie avec le tiers, et le bot perd des TOKEN. Le résultat n’est pas des pertes occasionnelles, mais une exploitation structurelle.

Pourquoi les défenses traditionnelles sont insuffisantes

Il pourrait sembler possible d’éliminer le délai ou d’ajuster le moment d’exécution. En pratique, c’est impossible. Les API des exchanges ont une latence, les communications réseau prennent du temps, et même l’infrastructure la plus rapide ne peut garantir un placement et une exécution atomiques d’ordres sur des systèmes externes. Augmenter les délais rend l’exploitation plus facile ; les réduire aide, mais n’élimine jamais complètement l’écart. Rendre le moment d’exécution aléatoire introduit de l’imprévisibilité, mais les bots sniper s’adaptent et analysent les schémas dans le temps.

Ce dont on a besoin, ce n’est pas d’une exécution plus rapide, mais d’une détection et d’une réponse intelligentes.

Présentation du Sniper Bot Watcher

Le Sniper Bot Watcher est une couche de détection et d’atténuation intégrée au bot ADAMANT mm. Son rôle n’est pas d’empêcher le trading, mais de surveiller les schémas comportementaux et d’identifier quand des bots externes exploitent le système. Lorsque des activités suspectes sont détectées, le bot peut réagir de manière défensive en ajustant son comportement d’exécution, en mettant en pause les stratégies de trading, en modifiant la logique de placement des ordres ou en activant des modes défensifs conçus pour réduire l’exposition.

Le code suivant montre la détection de l’activité d’un sniper bot :

} else if (order1Status === 'filled' && order2Status === 'filled') {
  log.info('Trader: Both maker and taker executeInSpread t-orders are self-filled.');

  order.update({
    coin1AmountFilled: coin1Amount,
    coin2AmountFilled: coin2Amount,
    isExecuted: true,
  });
} else if (order1Status === 'filled' && ['new', 'part_filled'].includes(order2Status)) {
  // Scenario1: After maker order is placed in spread, a third party bot quickly takes it, and the taker order remains unfilled or partially filled
  sniperBotActivity(1, order2Details, coin1Amount);

  await addFillsDbRecord(order2Details, order, false); // Maker order is partially or fully filled by a sniper bot

  order.update({
    coin1AmountFilled: order2Details.amountExecuted, // Self-filled amount, excluding sniper bot fills
    coin2AmountFilled: order2Details.volumeExecuted,
    isExecuted: false, // Not fully executed
  });
}

Lorsque le nombre d’interventions dépasse un seuil, le bot passe en mode sécurisé :

/**
 * Records a sniper-bot intervention for a given scenario.
 * Triggers safe mode when the total interventions reach the threshold.
 * @param {number} scenario Scenario index: 1 or 2
 * @param {OrderInfoResult} orderDetails Exchange order details (e.g., order2Details), for logging only
 * @param {number} coin1Amount Order amount in base coin, for logging only
 * @returns {void}
 */
function sniperBotActivity(scenario, orderDetails, coin1Amount) {
  sbwActivityCounters[scenario]++;

  const fillPercent = (orderDetails.amountExecuted / coin1Amount * 100).toFixed(2);
  log.warn(`Trader: While the maker t-order is filled, the taker is ${orderDetails.status} (${fillPercent}% self-filled). This may be Scenario ${scenario} of third-party bot intervention; incrementing the counters to ${sbwActivityTotalString()} (Safe mode threshold: ${sbwEnabled ? safeModeThreshold : 'Disabled'}).`);

  if (sbwEnabled && sbwActivityTotal() >= safeModeThreshold) {
    sniperBotSafeMode();
    resetSniperBotCounters();
  }
}

Pourquoi cela importe pour les projets de jetons

Le market making est essentiel pour les écosystèmes de jetons, mais si le capital est systématiquement drainé par des bots sniper, les projets font face à des coûts cachés. La liquidité devient coûteuse, les budgets s’épuisent plus vite, et l’efficacité du market making diminue. En introduisant le Sniper Bot Watcher, le bot ADAMANT mm bot aide à garantir que les ressources de market making servent leur objectif initial — construire des marchés, pas alimenter les exploiteurs.