Un burn de tokens déclenché par une vente vide presque le pool de liquidité TENDRIL sur BNB Chain
Selon CoinDesk, un burn de tokens déclenché par un ordre de vente a presque vidé, le 4 novembre 2026, le côté TENDRIL du pool de liquidité TENDRIL sur BNB Chain. L'échange ainsi rendu possible a retiré près de 4,42 millions de USDT. Le flux net sortant de la transaction ressort à 555 670,538752928908475139 USDT, un montant inférieur car d'importants volumes de USDT étaient déjà entrés dans le pool avant cette même transaction. Le mécanisme de burn est activé avant que le solde restant de TENDRIL du vendeur n'entre dans le pool. À 16:02:45 UTC, l'appel transferFrom du routeur a lancé la vente de 39 053 180 124,060957132414461269 TENDRIL, déclenchant la logique de frais et de contrôleur du token. Les transferts vers le pool principal sont soumis à une taxe de vente de 30 %, sauf lorsqu'ils proviennent des deux adresses configurées _poolControl et _markControl. Le contrat à l'origine de la transaction ne bénéficie d'aucune exemption. Le token envoie d'abord 11 715 954 037,218287139724338380 TENDRIL à _poolControl. Il appelle ensuite la fonction sellToken du contrôleur en transmettant le montant initial de la vente, et non seulement la taxe. Cet appel s'achève avant l'enregistrement des 70 % restants dans le pool. La trace historique des appels montre la séquence transferFrom, sellToken, controlburn et sync, puis le swap final. La trace d'opcodes du contrôleur confirme une multiplication du montant initial de la vente par 2 pour déterminer la quantité exacte ensuite retirée du pool. Controlburn retire des tokens du pool sans réduire l'offre totale. La fonction transfère des TENDRIL depuis le solde du pool vers une adresse morte, sans réduire l'offre totale enregistrée du token ni brûler les tokens de liquidité. Son contrôle d'autorisation exige que l'appelant corresponde à _poolControl. Une fois l'autorisation accordée, _basicTransfer déduit les tokens du solde du pool et les crédite à une adresse morte. Aucune autorisation de pool ni retrait de liquidité n'intervient ici : le contrat du token contrôle directement ses propres enregistrements de solde. Le log 28 enregistre le retrait de 78 106 360 248,121914264828922538 TENDRIL, ne laissant que 6 678 unités de base dans le pool. Avec 18 décimales pour TENDRIL, le solde restant atteint 0,000000000000006678 TENDRIL. Ce burn ne retire pas de USDT au même moment. La quasi-totalité des soldes en TENDRIL disparaît, tandis que les USDT du pool restent disponibles pour l'échange suivant. Le renoncement à la propriété n'a pas désactivé cette voie. Dans le bloc 131653426, avant l'incident, owner() renvoyait l'adresse zéro. Controlburn vérifie toutefois le contrôleur configuré, et non owner(), ce qui laisse ce chemin d'accès valide. La fonction n'est pas ouverte à tous : tout appelant échoue au contrôle d'autorisation. La réinitialisation des réserves permet de retirer presque tous les USDT. Le contrôleur appelle sync() immédiatement après la destruction, enregistrant le solde du token après vidage et avant l'arrivée des tokens de vente restants. Le log 29 fixe la réserve à 4 421 023,357469283419586501 USDT et 0,000000000000006678 TENDRIL. Ensuite, 27 337 226 086,842669992690122889 TENDRIL entrent dans le pool. Le swap final retire 4 421 023,357469283419586499 USDT, ne laissant que 0,000000000000000002 USDT. La formule du produit constant explique l'ampleur de la sortie. À titre d'illustration, hors frais et arrondis, la quantité de USDT obtenue s'obtient en multipliant la réserve de USDT par le montant de tokens apporté, puis en divisant par la somme de la réserve de tokens et de ce montant. Lorsque la réserve de tokens enregistrée est proche de zéro, le montant apporté domine le dénominateur et la sortie tend vers la totalité de la réserve de USDT. Le montant finalement retiré ne correspond pas au montant net extrait du pool. Les sorties totales de USDT ont atteint 5 117 517,824288279504509510, contre 4 561 847,285535350596034371 d'entrées. La différence donne un flux net sortant de 555 670,538752928908475139 USDT. Le code du contrat et l'historique ont permis de reconstituer l'ensemble de la séquence. Le burn déclenché par cette vente a été reconstruit à partir du code source vérifié, des appels historiques, des logs d'événements et des traces d'opcodes via un explorateur de blocs. Après recompilation avec Solidity v0.8.24+commit.e11b9ed9, optimisation désactivée, le code d'exécution au bloc 131653426 correspond au bytecode du contrat, hors métadonnées du compilateur. Les paramètres de burn décodés correspondent exactement au montant transféré du pool vers l'adresse morte. Les opérations sur entiers correspondent aussi correctement à la taxe, aux tokens restants à vendre et au solde de réserve. L'offre totale reste inchangée entre les blocs adjacents avant et après la transaction. La transaction événementielle réussie figure dans le bloc 131653427. Les reçus vérifiés via deux points d'accès RPC publics de BNB Chain concordent. Lors d'une revue le 6 novembre 2026, les flux de USDT au niveau des adresses se sont révélés pleinement cohérents. Cet article a été produit avec l'assistance d'une intelligence artificielle et relu par la rédaction.