حرق توكنات ناتج عن بيع يستنزف مجمع سيولة TENDRIL على BNB Chain
ذكرت CoinDesk أن عملية حرق توكنات نتيجة أمر بيع كادت تفرغ جانب TENDRIL من مجمع سيولة TENDRIL على BNB Chain في 4 نوفمبر 2026، مما سهّل مبادلة أزالت نحو 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، يليه المبادلة النهائية. ويؤكد تتبع رموز العمليات opcode لدى المتحكم أنه ضاعف مبلغ البيع الأصلي في 2 لتحديد الكمية الدقيقة التي أُزيلت لاحقًا من المجمع.
تزيل controlburn توكنات من المجمع دون خفض إجمالي المعروض. تنقل دالة controlburn TENDRIL من رصيد المجمع إلى عنوان ميت dead address، لكنها لا تخفض إجمالي المعروض المسجل للتوكن ولا تحرق توكنات مزودي السيولة. يشترط فحص الصلاحيات فيها أن يطابق المستدعي _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، بينما بلغ إجمالي تدفق USDT الداخل 4,561,847.285535350596034371. وبطرح الرقمين ينتج صافي تدفق خارج قدره 555,670.538752928908475139 USDT.
أعاد كود العقد والمسار التاريخي بناء التسلسل الكامل. جرى إعادة بناء حرق التوكنات الناتج عن هذا البيع باستخدام كود المصدر الموثق، والاستدعاءات التاريخية، وسجلات الأحداث، وتتبعات رموز العمليات عبر مستكشف الكتل. وبعد إعادة التجميع باستخدام Solidity v0.8.24+commit.e11b9ed9 مع تعطيل التحسين، يطابق كود التنفيذ وقت التشغيل في الكتلة 131653426 البايت كود الخاص بالعقد، باستثناء البيانات الوصفية للمترجم. وتطابق معاملات الحرق المفككة تمامًا المبلغ المنقول من المجمع إلى العنوان الميت. كما تقابل العمليات على الأعداد الصحيحة بشكل صحيح مبلغ الضريبة، والتوكنات المتبقية للبيع، ورصيد الاحتياطي. ظل إجمالي المعروض دون تغيير بين الكتل المتجاورة قبل المعاملة وبعدها. وظهرت معاملة الحدث الناجحة في الكتلة 131653427. وتطابقت الإيصالات التي جرى التحقق منها عبر نقطتي نهاية RPC عامتين لشبكة BNB Chain، وعند المراجعة في 6 نوفمبر 2026 كان تدفق USDT على مستوى العنوان متسقًا بالكامل. أُنتج هذا المقال بمساعدة الذكاء الاصطناعي وراجعه فريق التحرير.