
مجموعة من مقتطفات Solidity وسكربتات Foundry لعمليات تدقيق أمان العقود الذكية
evm-audit-helpers هي مجموعة منسقة من مقتطفات Solidity، ونصوص Foundry، وقوالب اختبار مصممة لتسريع عمليات تدقيق أمان العقود الذكية على EVM. يضم المستودع لبنات بناء قابلة لإعادة الاستخدام لاهتمامات التدقيق الشائعة مثل إعادة الدخول (reentrancy)، وعدم تطابق تخطيط التخزين، ومزالق تحسين الغاز، مما يسمح للمدققين والمطورين بالتركيز على المنطق بدلاً من الكود التكراري.
الأهداف الرئيسية:
| الفئة | الوصف | الملفات الأساسية |
|---|---|---|
| فحوصات إعادة الدخول | معدّلات مساعدة، وأنماط nonReentrant، ونصوص اكتشاف وقت التشغيل. | src/helpers/Reentrancy.sol, scripts/reentrancy_check.sol |
| محلل تخطيط التخزين | أدوات لمقارنة فتحات التخزين، وإنشاء مخططات التخطيط، واكتشاف الترقيات غير الآمنة. | src/helpers/StorageLayout.sol, scripts/storage_analyzer.sol |
| قوالب اختبار Foundry | مجموعات اختبار جاهزة تغطي الثغرات الشائعة (التحكم في الوصول، الحسابات، delegatecall، إلخ). | test/templates/* |
| تدقيق الغاز و Opcode | نصوص لتحليل استخدام الغاز وتحديد الـ opcodes المكلفة. | scripts/gas_profiler.sol |
| أدوات إعداد التقارير | مولّدات تقارير JSON/Markdown يمكن ربطها بلوحات تحكم CI. | scripts/report_generator.sol |
| تكامل CI | مثال على سير عمل GitHub Actions لعمليات التدقيق الآلية. | .github/workflows/ci.yml |
جميع الأدوات مكتوبة لـ Solidity ^0.8.20 ومتوافقة مع Foundry (forge, cast).
# 1️⃣ استنساخ المستودع
git clone https://github.com/your-org/evm-audit-helpers.git
cd evm-audit-helpers
# 2️⃣ تثبيت Foundry (إذا لم يكن مثبتاً بالفعل)
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 3️⃣ تثبيت التبعيات
forge install
# 4️⃣ تشغيل مجموعة الاختبار الافتراضية (تشمل فحوصات إعادة الدخول والتخزين والغاز)
forge test
نصيحة: أضف
export FOUNDRY_PROFILE=ciإلى شلّتك لاستخدام إعدادات المحول المُحسّنة لـ CI.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "evm-audit-helpers/src/helpers/Reentrancy.sol";
contract MyVault is ReentrancyGuard {
mapping(address => uint256) private balances;
function deposit() external payable nonReentrant {
balances[msg.sender] += msg.value;
}
function withdraw(uint256 amount) external nonReentrant {
require(balances[msg.sender] >= amount, "Insufficient");
balances[msg.sender] -= amount;
(bool ok,) = msg.sender.call{value: amount}("");
require(ok, "Transfer failed");
}
}
تشغيل كاشف وقت التشغيل على عقد مُجمَّع:
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url $RPC_URL --broadcast
# إنشاء وصف JSON لتخطيط تخزين عقد مُجمَّع
cast abi-storage --contract MyUpgradeable.sol:MyUpgradeable > storage.json
# المقارنة مع تخطيط مرجعي (مثل: من إصدار سابق)
forge script scripts/storage_analyzer.sol:StorageComparator \
--sig "compare(string memory, string memory)" storage.json reference.json
سيقوم النص بإخراج الفتحات غير المتطابقة، والتظليل المحتمل، واقتراحات لتعليقات @custom:oz-upgrades-unsafe-allow.
انسخ قالباً إلى مستودع التدقيق الخاص بك:
cp -r test/templates/reentrancy/ my-audit/tests/
عدّل MyContract.t.sol لاستيراد العقد قيد التدقيق ثم شغّل:
forge test --match-contract MyContract
أضف سير العمل المقدم إلى مستودعك:
# .github/workflows/audit.yml
name: EVM Audit
on:
push:
branches: [main]
pull_request:
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Foundry
run: curl -L https://foundry.paradigm.xyz | bash && foundryup
- name: Run Audit Suite
run: |
forge install
forge test -vv
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url ${{ secrets.RPC_URL }}
forge script scripts/storage_analyzer.sol:StorageComparator --sig "compare(string,string)" storage.json reference.json
سيقوم سير العمل تلقائياً بالإشارة إلى حالات الفشل ونشر تقرير markdown كتعليق على الـ PR.
نرحب بالمساهمات! يرجى اتباع الخطوات التالية:
git checkout -b feat/<name>).forge coverage).npm run lint – تستخدم solhint و prettier).pragma solidity ^0.8.20;snake_case للدوال الداخلية، وcamelCase للدوال العامة/الخارجية.///).# تثبيت أدوات الفحص اللغوي
npm install
# تشغيل solhint
npx solhint 'src/**/*.sol' 'test/**/*.sol'
# تنسيق تلقائي
npx prettier --write '**/*.sol'
evm-audit-helpers مرخّص بموجب رخصة MIT. راجع ملف LICENSE للحصول على التفاصيل.
تدقيق سعيد!