🐟 تحليل السلسلة 01|لماذا لم يعد لدى العقد الصلاحيات، ومع ذلك ما زال بإمكان الجهة المصدّرة التحرك؟
كثيرون عندما يرون عملة جديدة، أول شيء يفعلونه هو:
“الـ Owner هو 0x000...، لقد فقد الصلاحيات بالفعل، إذن آمن.”
في الواقع هذا واحد من أكثر المفاهيم الخاطئة شيوعًا على السلسلة.
فقدان الـ Owner لا يعني فقدان كل الصلاحيات.
غالبًا ما تقوم دالة renounceOwnership() بالتخلي عن دور الـ Owner فقط.
لكن داخل عقد واحد قد توجد صلاحيات أخرى مثل:
🔹 MINTER_ROLE — ما زال بإمكانه إصدار المزيد
🔹 ADMIN_ROLE — ما زال يمكنه إدارة بعض المعلمات
🔹 operator / manager — صلاحيات تشغيل مستقلة
🔹 ProxyAdmin — ما زال بإمكان عقد الوكيل الترقية
🔹 قوائم العناوين البيضاء / السوداء للتحكم
🔹 عناوين مستقلة للتحكم في الرسوم، ومفاتيح تشغيل/إيقاف التداول… إلخ
🔹 عقود خارجية تمتلك منطق التحكم الفعلي
بل إن بعض العقود لا تضع أصلًا قيود onlyOwner على الوظائف الرئيسية.
لذلك عندما ترى:
✅ تم التخلي عن الـ Ownership
لا يمكنك أن تستنتج مباشرة:
❌ أن العقد لم يعد قابلًا للتعديل تمامًا
❌ أنه لا يمكن إصدار المزيد
❌ أنه لا يمكن تقييد التداول
❌ أن الجهة المصدّرة فقدت السيطرة بالكامل
السؤال الصحيح هو:
“من الذي لا يزال يملك الصلاحيات داخل هذا العقد؟”
وليس:
“هل الـ Owner موجود أم لا؟”
على السلسلة، لا توجد جملة واحدة تقول “تم فقد الصلاحيات” تكفي لإثبات الأمان.
الكود لا يكذب، لكن عليك أن تعرف أين تبحث.
🐟 الحلقة القادمة:
عملة جديدة… كيف تستخرج الصلاحيات المخفية باستخدام 5 دقائق فقط؟
$币安人生 #合约安全