أوشك حرقٌ للرموز ناجم عن البيع على إفراغ جانب TENDRIL من مجمّع سيولة على BNB Chain في 4 نوفمبر 2026، ممهّدًا لمبادلة أزالت ما يقارب 4.42 مليون USDT. وكان صافي التدفق الخارج من المجمّع في المعاملة أقل من ذلك—555,670.538752928908475139 USDT—لأن كميات كبيرة من USDT دخلت إليه في وقت سابق من المعاملة نفسها.

أهم النقاط

  • أزال متحكّم TENDRIL من مجمّع السيولة ضعفَ كمية البيع الأصلية.

  • لم يسجّل مجمّع السيولة سوى كمية ضئيلة للغاية من TENDRIL قبل تلقي الرموز المتبقية لدى البائع.

  • لم يؤدِّ التنازل عن الملكية إلى تعطيل صلاحية وحدة التحكم في الحرق.

  • يقيس ناتج المبادلة النهائي وصافي التدفق الخارج من المعاملة مقدارين مختلفين.

كيف فعّل البيع حرق الرموز المرتبط بالبيع

استدعى البيع وحدة تحكم قبل وصول ما تبقى من 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، تليها المبادلة النهائية. ويؤكد أثر تعليمات التشغيل لوحدة التحكم أنها ضربت مبلغ البيع الأصلي في اثنين، منتجةً المبلغ نفسه الذي أُزيل لاحقًا من المجمع.

أزالت controlburn رموز المجمع من دون خفض إجمالي المعروض

نقلت الدالة controlburn رصيد TENDRIL من المجمع إلى عنوان ميت. ولم تخفض إجمالي المعروض المسجل للرمز، كما لم تحرق رموز مزوّدي السيولة.

اشترط فحص الصلاحيات أن يطابق المستدعي _poolControl. وبعد التحقق من الصلاحية، استخدمت الدالة _basicTransfer لخصم الرموز من رصيد المجمع وإضافتها إلى العنوان الميت. ولم يتضمن الأمر أي سماح من المجمع أو سحب للسيولة؛ إذ كان عقد الرمز يتحكم في سجلات أرصدته بنفسه.

يسجل السجل 28 إزالة 78,106,360,248.121914264828922538 من TENDRIL. ولم يتبقَّ في المجمع سوى 6,678 وحدة خام. وبما أن TENDRIL يتكون من 18 منزلة عشرية، لم يتجاوز الرصيد المتبقي 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، كما تطابقت تدفقات USDT على مستوى العنوان تمامًا عند إعادة التحقق منها في 6 نوفمبر 2026.

أُنتجت المقالة بمساعدة الذكاء الاصطناعي وراجعها فريق التحرير.