Сжигание токенов после продажи опустошило пул ликвидности TENDRIL в сети BNB Chain

CoinDesk сообщает, что сжигание токенов, запущенное ордером на продажу, 4 ноября 2026 года почти полностью опустошило часть пула ликвидности TENDRIL в сети BNB Chain, номинированную в TENDRIL. В ходе обмена из пула было выведено почти 4,42 млн USDT. Чистый отток по транзакции оказался меньше — 555 670,538752928908475139 USDT: значительный объем USDT поступил в пул еще до этой же транзакции. Как продажа запускает сжигание токенов? Перед тем как оставшиеся у продавца TENDRIL поступили в пул, сработал контроллер. В 16:02:45 UTC вызов transferFrom маршрутизатора инициировал продажу 39 053 180 124,060957132414461269 TENDRIL, запустив логику комиссии и контроллера. Переводы в основной пул облагаются 30-процентным налогом на продажу, за исключением переводов с двух настроенных адресов — _poolControl и _markControl. Контракт, исполнявший эту транзакцию, не подпадает ни под одно из исключений. Сначала токен отправляет 11 715 954 037,218287139724338380 TENDRIL на _poolControl. Затем токен вызывает функцию sellToken контроллера и передает исходную сумму продажи, а не только сумму налога. Вызов завершается до того, как токен зачисляет оставшиеся 70% в пул. Историческая трассировка вызовов показывает последовательность transferFrom, sellToken, controlburn и sync, после чего следует финальный своп. Трассировка опкодов контроллера подтверждает, что исходная сумма продажи была умножена на 2 — так определился точный объем, затем выведенный из пула. Controlburn выводит токены из пула, не сокращая общее предложение. Функция controlburn переводит TENDRIL с баланса пула на мертвый адрес, но не уменьшает учтенное общее предложение токена и не сжигает токены поставщиков ликвидности. Проверка прав требует, чтобы вызывающий адрес совпадал с _poolControl. После авторизации функция через _basicTransfer списывает токены с баланса пула и зачисляет их на мертвый адрес. Разрешения пула или вывода ликвидности здесь нет: контракт токена напрямую управляет записями собственного баланса. Лог 28 зафиксировал вывод 78 106 360 248,121914264828922538 TENDRIL, после чего в пуле осталось лишь 6 678 исходных единиц. С учетом 18 десятичных знаков TENDRIL остаток составляет всего 0,000000000000006678 TENDRIL. При этом сжигании USDT не выводились. Почти весь баланс TENDRIL исчез, а USDT в пуле остался доступен для следующего обмена. Отказ от прав владельца не заблокировал этот маршрут. В блоке 131653426, до инцидента, owner() возвращала нулевой адрес. Controlburn проверяет настроенный контроллер, а не owner(); путь доступа остается рабочим. Функция не открыта для всех: любой другой вызывающий не пройдет проверку авторизации. Сброс резервов позволил вывести почти все USDT из пула. Сразу после сжигания контроллер вызывает sync(), фиксируя баланс токена после опустошения и до поступления оставшихся проданных токенов. В логе 29 резерв фиксируется на уровне 4 421 023,357469283419586501 USDT и 0,000000000000006678 TENDRIL. Затем в пул поступило 27 337 226 086,842669992690122889 TENDRIL. Финальный своп вывел 4 421 023,357469283419586499 USDT, оставив только 0,000000000000000002 USDT. Масштаб вывода объясняет формула постоянного произведения. Без учета комиссий и округления объем USDT на выходе рассчитывается как произведение резерва USDT и количества входных токенов, деленное на сумму резерва токенов и входного количества. Когда учтенный резерв токенов близок к нулю, входной объем доминирует в знаменателе, и результат приближается ко всему резерву USDT. При этом итоговая сумма вывода не равна чистому объему, изъятому из пула. Совокупный отток USDT достиг 5 117 517,824288279504509510, совокупный приток составил 4 561 847,285535350596034371. Разница дает чистый отток 555 670,538752928908475139 USDT. Код контракта и исторические данные позволили восстановить всю последовательность. Сжигание токенов, запущенное этой продажей, восстановлено по проверенному исходному коду, историческим вызовам, журналам событий и трассировкам опкодов через обозреватель блоков. После повторной компиляции в Solidity v0.8.24+commit.e11b9ed9 с отключенной оптимизацией исполняемый код на блоке 131653426 совпадает с байткодом контракта без учета метаданных компилятора. Декодированные параметры сжигания точно соответствуют сумме, переведенной из пула на мертвый адрес. Целочисленные операции также корректно соответствуют сумме налога, оставшимся токенам для продажи и балансу резерва. Общее предложение токена не изменилось между соседними блоками до и после транзакции. Успешная транзакция события вошла в блок 131653427. Квитанции, проверенные через два публичных RPC-эндпоинта BNB Chain, совпали; при проверке 6 ноября 2026 года потоки USDT на уровне адресов оказались полностью согласованными. Статья подготовлена с помощью искусственного интеллекта и проверена редакцией.