賣單觸發代幣銷毀 BNB Chain 上 TENDRIL 流動性池遭抽空
據 CoinDesk 報道,2026 年 11 月 4 日,一筆賣單觸發代幣銷毀,令 BNB Chain 上 TENDRIL 流動性池的 TENDRIL 一側幾乎被清空,並促成一次抽走近 442 萬 USDT 的兌換。該筆交易的淨流出較小,為 555,670.538752928908475139 USDT,原因是同一交易之前已有大量 USDT 流入。賣出如何觸發銷毀?賣方的剩餘 TENDRIL 進入流動性池前,控制器先被調用。16:02:45 UTC,路由器的 transferFrom 調用啟動出售 39,053,180,124.060957132414461269 TENDRIL,觸發代幣的手續費及控制器邏輯。轉入主池的轉賬須繳 30% 賣出稅,惟由 _poolControl 及 _markControl 兩個已配置地址發出的轉賬可獲豁免。執行該交易的合約不符合任何一項豁免,代幣先向 _poolControl 發送 11,715,954,037.218287139724338380 TENDRIL。其後,代幣調用控制器的 sellToken 函數,傳入的是原始賣出數量,而非僅稅額。該調用在代幣將餘下 70% 記入池前完成。歷史調用軌跡顯示次序為 transferFrom、sellToken、controlburn、sync,最後是兌換。控制器的操作碼軌跡確認,其將原始賣出數量乘以 2,以確定隨後從池中移除的精確數量。controlburn 會從池中移除代幣,卻不減少總供應量。該函數把 TENDRIL 由池餘額轉至死地址,但不減少代幣記錄的總供應量,也不銷毀流動性提供者代幣。權限檢查要求調用者與 _poolControl 匹配。獲授權後,函數使用 _basicTransfer 從池餘額扣減代幣,並記入死地址。此處不涉及池授權或提取流動性:代幣合約直接控制自身的餘額記錄。Log 28 記錄移除 78,106,360,248.121914264828922538 TENDRIL,池內僅餘 6,678 個最小單位。按 TENDRIL 的 18 位小數計算,剩餘數量僅為 0.000000000000006678 TENDRIL。此次銷毀並未同步移除 USDT。幾乎所有 TENDRIL 餘額消失,池內 USDT 仍可供下一次兌換使用。放棄所有權並未關閉此路徑。在事發前的區塊 131653426,owner() 返回零地址。controlburn 檢查的是已配置控制器,而非 owner(),該訪問路徑仍然有效。函數並非開放給所有人;任何調用者都會在授權檢查中失敗。儲備重置令幾乎所有 USDT 可被提取。控制器在銷毀後立即調用 sync(),在剩餘待售代幣到帳前,記錄代幣餘額被清空後的狀態。Log 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。經兩個公共 BNB Chain RPC 端點核驗的交易收據一致,並於 2026 年 11 月 6 日覆核時,地址層面的 USDT 流向完全吻合。本文由人工智能協助生成,並經編輯團隊審核。