1. الملخّص
FairDonation عقد ذكي على BNB Smart Chain يستقبل تبرعات BNB، ويوزّعها بالتساوي على مجموعة مستفيدين نشطة، بشرط تحقق عتبتين في آن واحد: رصيد كافٍ في العقد، وعدد كافٍ من المستفيدين في المجموعة النشطة. العضوية والإزالة والتطهير كلها تخضع لتصويت جماعي بين "مشرفين" (Supervisors) يعيّنهم مالك العقد.
2. الأدوار في النظام
| الدور | الصلاحيات |
|---|---|
| المالك (Owner) | تعيين/إزالة مشرفين، إنشاء وتفعيل المجموعات، إضافة مستفيد مباشرة، ضبط العتبات، تحديد محفظة الدعم التطويري |
| المشرف (Supervisor) | اقتراح مستفيدين، التصويت على القبول/الإزالة/التطهير، تنفيذ التوزيع خلال نافذة زمنية محددة |
| المتبرع (Donor) | إرسال BNB للعقد عبر donateBNB() أو التحويل المباشر |
| المستفيد (Beneficiary) | عضو في مجموعة نشطة، يستلم حصته التلقائية عند التوزيع |
3. الثوابت والعتبات (كما في الكود)
عتبتا الأموال وعدد الأعضاء وفترة الانتظار قابلة للتعديل من المالك فقط عبر setFundsThreshold وsetMembersThreshold وsetDistributionDelay، وكل تعديل يصدر حدثًا (Event) علنيًا.
4. دورة حياة المستفيد
- الترشّح: إما ترشّح ذاتي عبر applyForBeneficiary()، أو اقتراح من مشرف عبر proposeApplicant().
- التصويت: يحتاج الطلب 3 موافقات من مشرفين مختلفين (لا يمكن للمقترح أو المتقدّم نفسه التصويت لصالح طلبه).
- القبول التلقائي: عند بلوغ العتبة، يُضاف المتقدم فورًا للمجموعة النشطة ضمن نفس المعاملة.
- الإزالة: تتطلب طلب إزالة من مشرف + 3 موافقات مستقلة قبل التنفيذ.
- تطهير مجموعة كاملة: عملية استثنائية تتطلب 5 موافقات تتضمن إلزاميًا موافقة المالك، وتُفرغ المجموعة بالكامل.
5. آلية التوزيع
التوزيع يُنفَّذ عبر executeDistribution() ولا يعمل إلا إذا: الرصيد المتاح ≥ عتبة الأموال، وعدد أعضاء المجموعة النشطة ≥ عتبة الأعضاء. حصة كل مستفيد = عتبة الأموال ÷ عدد الأعضاء، وتُرسل للجميع في نفس المعاملة.
| الفترة | من يملك صلاحية التنفيذ |
|---|---|
| أول 24 ساعة بعد تحقق الشروط | المالك فقط |
| 24–48 ساعة | المالك أو أي مشرف |
| بعد 48 ساعة | أي شخص (لمنع تعطيل التوزيع) |
6. الدعم التطويري (اختياري)
بمعزل عن مسار التوزيع الرئيسي، يوجد مسار منفصل للتبرع المباشر لدعم تطوير المشروع (BNB أو أي رمز ERC-20)، عبر donateNativeToDevelopment() وdonateToDevelopment()، يذهب مباشرة لمحفظة التطوير المحددة من المالك ولا يدخل في حساب عتبات التوزيع للمستفيدين.
7. حدود معروفة وموثّقة في الكود
- عند إزالة مشرف، أصواته السابقة على طلبات لم تُحسم بعد تبقى محسوبة (لتفادي حلقات تكرار غير محدودة على السلسلة). الحل التشغيلي: إلغاء الطلبات المعلّقة قبل إزالة مشرف صوّت فيها.
- حصة كل مستفيد صحيح عدد صحيح (Integer Division)، وأي كسر متبقٍ من القسمة يبقى في رصيد العقد لدورة التوزيع التالية.
8. الشيفرة المصدرية
الكود بأكمله علني وموثّق. راجعه بنفسه قبل التبرع بأي مبلغ:
| الشبكة | BNB Smart Chain (BSC) |
|---|---|
| عنوان العقد | 0xAB4Cb629038346fD0Dab5B8B4E6809eb7C2ca82F |
| الترخيص | MIT |