العقود الآجلة
وصول إلى مئات العقود الدائمة
TradFi
الذهب
منصّة واحدة للأصول التقليدية العالمية
الخیارات المتاحة
Hot
تداول خيارات الفانيلا على الطريقة الأوروبية
الحساب الموحد
زيادة كفاءة رأس المال إلى أقصى حد
التداول التجريبي
مقدمة حول تداول العقود الآجلة
استعد لتداول العقود الآجلة
أحداث مستقبلية
"انضم إلى الفعاليات لكسب المكافآت "
التداول التجريبي
استخدم الأموال الافتراضية لتجربة التداول بدون مخاطر
إطلاق
CandyDrop
اجمع الحلوى لتحصل على توزيعات مجانية.
منصة الإطلاق
-التخزين السريع، واربح رموزًا مميزة جديدة محتملة!
HODLer Airdrop
احتفظ بـ GT واحصل على توزيعات مجانية ضخمة مجانًا
Pre-IPOs
افتح الوصول الكامل إلى الاكتتابات العامة للأسهم العالمية
نقاط Alpha
تداول الأصول على السلسلة واكسب التوزيعات المجانية
نقاط العقود الآجلة
اكسب نقاط العقود الآجلة وطالب بمكافآت التوزيع المجاني
عروض ترويجية
AI
Gate AI
شريكك الذكي الشامل في الذكاء الاصطناعي
Gate AI Bot
استخدم Gate AI مباشرة في تطبيقك الاجتماعي
GateClaw
Gate الأزرق، جاهز للاستخدام
Gate for AI Agent
البنية التحتية للذكاء الاصطناعي، Gate MCP، Skills و CLI
Gate Skills Hub
أكثر من 10 آلاف مهارة
من المكتب إلى التداول، مكتبة المهارات الشاملة تجعل الذكاء الاصطناعي أكثر فعالية
GateRouter
ختر بذكاء من أكثر من 40 نموذج ذكاء اصطناعي، بدون أي رسوم إضافية 0%
لقد انتهيت للتو من كتابة تحليل حول مشكلة إعادة الدخول - مشكلة أمنية لا يزال العديد من المطورين يتجاهلونها عند بناء العقود الذكية.
ببساطة، إعادة الدخول هي عندما يتم استدعاء عقد ذكي مرات متعددة قبل إكمال الاستدعاء الأول. تخيل الأمر هكذا: ContractA ينفذ وظيفة، ويستدعي ContractB، و ContractB يعيد استدعاء ContractA مرة أخرى بينما لم ينته ContractA بعد. هذه ثغرة يمكن للمهاجم استغلالها.
مثال محدد: EtherStore لديه 10 إيثير، و ContractB أرسل 1 إيثير إليه. عندما يستدعي ContractB وظيفة السحب، يتحقق مما إذا كان الرصيد أكبر من 0، وإذا كان كذلك، يرسل الإيثير مرة أخرى. لكن هنا تكمن الخطورة - تحديث الرصيد إلى 0 يحدث بعد إرسال الإيثير. لذلك، يمكن للمهاجم إنشاء وظيفة رد الفعل (fallback) عند استلام الإيثير، بحيث تعيد استدعاء وظيفة السحب مرة أخرى. ستستمر هذه الحلقة حتى يتم استنفاد كل الإيثير.
سأذكر ثلاث طرق لمكافحة إعادة الدخول:
الأولى هي استخدام معدل nonReentrant. هذه الطريقة تغلق العقد أثناء تنفيذ الوظيفة، بحيث لا يمكن لأحد إعادة الدخول. بسيطة لكنها فعالة لوظيفة واحدة فقط.
الثانية هي تطبيق نمط Checks-Effects-Interactions. بدلاً من تحديث الرصيد بعد إرسال الإيثير، قم بتحديثه قبل ذلك. بهذه الطريقة، حتى لو حدث استدعاء مرة أخرى، سيكون الرصيد قد أصبح 0، وبالتالي ستفشل عملية التحقق.
الثالثة هي إنشاء عقد حماية إعادة دخول عالمية (GlobalReentrancyGuard). تستخدم متغير حالة مشترك للتحكم في إعادة الدخول عبر عدة عقود في آن واحد. مفيد بشكل خاص عندما يكون مشروعك يتضمن العديد من العقود التي تتفاعل مع بعضها. بدلاً من التحقق في كل عقد على حدة، تتحقق من مكان مركزي واحد.
مشكلة إعادة الدخول ليست جديدة، لكنها لا تزال واحدة من أكثر الثغرات شيوعًا. أرى أن العديد من المطورين لم يطبقوا هذه التدابير بشكل متسق. إذا كنت تعمل مع Solidity، تأكد من فهمك العميق لهذه المشكلة وتطبيق واحد على الأقل من الطرق الثلاثة على مشروعك. أمن العقود الذكية ليس خيارًا، إنه ضرورة.