يسمح ماسح الأذونات بمسح بروتوكول DeFi، أو أي نظام عقد ذكي، للحصول على وظائف مرخصة. تقوم بإرجاع قائمة بالعقود الذكية والوظائف المسموح بها ومالكي الأذونات المعنية.
من أجل فحص البروتوكول بحثًا عن الوظائف المسموح بها، يتم تحديد البروتوكول الهدف من حيث السلسلة ومجموعة العناوين لجميع العقود المنشورة. يجب التحقق من جميع هذه العقود في مستكشف الكتلة العام. يمكنك العثور على قائمة بالسلاسل والمستكشفات المدعومة هنا. يقوم ماسح الأذونات بعد ذلك بتنزيل الكود المصدري للعقود من المستكشف، ومسحها بحثًا عن الأذونات، وقراءة مالك الإذن من فتحة التخزين المعنية، وكتابة النتائج في ملف إخراج.
solc
إنشاء وتفعيل بيئة بايثون افتراضية، وتثبيت حزم بايثون المطلوبة بها
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
انسخ ملف .env.example
إلى .env
، واعتمادًا على الشبكة التي تم نشر العقود عليها، قم بملء عنوان URL الخاص بموفر RPC الخاص بك ومفتاح واجهة برمجة تطبيقات مستكشف الكتلة الصالح. ثم قم بتحميل المتغيرات بها
source .env
أكمل الملف ./contracts.json
باسم السلسلة وعناوين جميع عقود البروتوكول. ابحث عن قائمة بالسلاسل المدعومة هنا.
ثم قم بتنفيذ البرنامج النصي للماسح الضوئي باستخدام
python src/main.py
لاحظ أنه إذا لم يكن لديك الإصدار الصحيح من برنامج التحويل solc
، فسيتم تثبيته تلقائيًا بواسطة البرنامج النصي.
سيقوم البرنامج النصي بكتابة نتائج الماسح الضوئي في ملف جديد ./permissions.json
.
بمجرد الانتهاء من التحليل، يمكنك إلغاء تنشيط بيئة Pyhton مرة أخرى باستخدام الأمر التالي
source deactivate
السلاسل المدعومة لجلب العقود وفحصها منها
"mainnet:" : (".etherscan.io", "etherscan.io")
"optim:" : ("-optimistic.etherscan.io", "optimistic.etherscan.io")
"goerli:" : ("-goerli.etherscan.io", "goerli.etherscan.io")
"sepolia:" : ("-sepolia.etherscan.io", "sepolia.etherscan.io")
"tobalaba:" : ("-tobalaba.etherscan.io", "tobalaba.etherscan.io")
"bsc:" : (".bscscan.com", "bscscan.com")
"testnet.bsc:" : ("-testnet.bscscan.com", "testnet.bscscan.com")
"arbi:" : (".arbiscan.io", "arbiscan.io")
"testnet.arbi:" : ("-testnet.arbiscan.io", "testnet.arbiscan.io")
"poly:" : (".polygonscan.com", "polygonscan.com")
"mumbai:" : ("-testnet.polygonscan.com", "testnet.polygonscan.com")
"avax:" : (".snowtrace.io", "snowtrace.io")
"testnet.avax:" : ("-testnet.snowtrace.io", "testnet.snowtrace.io")
"ftm:" : (".ftmscan.com", "ftmscan.com")
"goerli.base:" : ("-goerli.basescan.org", "goerli.basescan.org")
"base:" : (".basescan.org", "basescan.org")
"gno:" : (".gnosisscan.io", "gnosisscan.io")
"polyzk:" : ("-zkevm.polygonscan.com", "zkevm.polygonscan.com")
"blast:" : (".blastscan.io", "blastscan.io")
لا يضمن فاحص الأذونات اكتمال مجموعة عناوين العقود المقدمة، أو أن العقود هي في الواقع جزء من البروتوكول.
يتم تحديد الأذونات من خلال استخدام معدّلات onlyOwner
أو عمليات فحص msg.sender
في وظيفة العقد. قد توجد أشكال أخرى من الأذونات التي لم يتم التقاطها باستخدام هذا الأسلوب.
يحاول ماسح الأذونات قراءة مالكي الأذونات من مخزن العقد مباشرةً. يمكن أن يفشل هذا، خاصة إذا كان العقد يستخدم نمط قابلية الترقية، ويجب التحقق منه يدويًا.
يقوم ماسح الأذونات بتحديد الأذونات وأصحابها فقط ، ولكنه لا يقوم بتقييم تأثير هذه الأذونات أو مخاطرها.
تم تصميم ماسح الأذونات على محلل Slither الثابت. نشكر فريق Trail of Bits على إنشاء هذه الأداة مفتوحة المصدر وكل العمل الذي قاموا به من أجل الأمان في قطاع DeFi.