A token destruction triggered by a sale almost emptied the balance on the TENDRIL side of the TENDRIL liquidity pool on BNB Chain on November 4, 2026, and facilitated an exchange that removed nearly 4.42 million USDT. The net outflow from this transaction was smaller, at 555,670.538752928908475139 USDT, as there was already a large inflow of USDT in the same transaction.

How does selling trigger token destruction?
Before the remaining TENDRIL of the seller was added to the liquidity pool, a controller was invoked first. At UTC time 16:02:45, the transferFrom of the router initiated a sale of 39,053,180,124.060957132414461269 TENDRIL, which triggered the taxes and controller logic for that token.
A 30% selling tax will be charged on transfers into the main pool, except when sent from the two configured addresses _poolControl and _markControl. The contract executing this transaction does not meet these exemption conditions. Therefore, the tokens are first sent to _poolControl in the amount of 11,715,954,037.218287139724338380 TENDRIL.
Subsequently, the token calls the controller's sellToken function, passing in the original quantity sold, not just the tax amount. This call is completed before the token records the remaining 70% into the pool.
The order displayed in the historical call trace is: transferFrom, sellToken, controlburn, and sync, followed by the final swap. The controller's opcode trace confirms that it multiplies the original sell quantity by 2 to determine the exact amount that is subsequently removed from the pool.
controlburn Removing tokens from the pool without reducing the total supply
The controlburn function transfers TENDRIL from the pool balance to a dead address, but it does not reduce the total supply of tokens, nor does it destroy the tokens of liquidity providers.
Its permission check requires that the caller must match with _poolControl. Once authorized, it uses _basicTransfer to deduct tokens from the pool's balance and record them as dead addresses. There is no pool authorization or liquidity withdrawal involved here: the token contract directly controls its own balance records.
Log 28 records the removal of 78,106,360,248.121914264828922538 TENDRIL. This leaves only 6,678 original units in the pool. Calculated to 18 decimal places according to TENDRIL, the remaining amount is merely 0.000000000000006678 TENDRIL.
This destruction did not also remove USDT. Almost all of the TENDRIL balances disappeared, while the USDT in the pool can still be used for the next exchange.
Abandoning ownership did not prevent this path from being used. In block 131653426, which precedes the event, owner () returns a zero address. However, controlburn checks for a configured controller, rather than owner (), so the permissions for this path are still valid. This function is not open to everyone; any caller will fail the authorization check.
Reserve reset allows for almost all USDT to be withdrawn.
The controller immediately calls sync () after destruction. Before the remaining sold tokens arrive, it records the token balance after clearance. Log 29 sets the reserve to 4,421,023.357469283419586501 USDT and 0.00000000000006678 TENDRIL.
Subsequently, 27,337,226,086.842669992690122889 TENDRIL entered the pool. In the end, swap transferred out 4,421,023.357469283419586499 USDT, leaving only 0.000000000000000002 USDT.
The constant product formula can explain this output scale. Ignoring transaction fees and rounding for example, the output of USDT can be calculated by multiplying the USDT reserve by the token input, and then dividing by the sum of the token reserve and the token input. When the recorded token reserve is almost zero, the input term dominates the denominator, and the output will be close to the entire USDT reserve.
However, the amount ultimately withdrawn this time is not the net amount of the entire transaction taken from the pool. The total outflow was 5,117,517.824288279504509510, while the total inflow was 4,561,847.285535350596034371. Subtracting the two amounts results in a net outflow of 555,670.538752928908475139.
The contract code and historical trajectory have restored the entire sequence.
The token destruction triggered by this sale was reconstructed through the source code verified by a blockchain browser, historical calls, event logs, and the opcode trail. After using Solidity, v0.8.24, and commit.e11b9ed9 and recompiling without optimization, the executable runtime code obtained on block 131653426 is consistent with the contract bytecode, except for the compiler metadata.
The decoded destruction parameters are exactly consistent with the number of tokens transferred from the pool to dead addresses. Integer calculations also correspond to the tax amount, remaining sellable tokens, and reserve balance. The total supply remains unchanged between adjacent blocks before and after the transaction.
This successful transaction occurred in block 131653427. The receipts, verified through two public BNB Chain RPC endpoints, matched, and upon recheck on November 6, 2026, the flow at the address level indicated by USDT also corresponded perfectly.
This article was generated with the assistance of artificial intelligence and has been reviewed by an editorial team.











