XP, Yield matching, وCarry YELD payout
يشرح هذا القسم آلية Yield في backend الحالي (ويُسمى الموديول التقني الداخلي yield).
1) المصطلحات (في النظام الحالي)
- XP: في هذا المستند نسميه XP. في backend الاسم الداخلي هو
xp(models/fields:XPCredit,carryLeftXP,carryRightXP). - USDOL/USDOR: هما فرعا LEFT/RIGHT (جهتا yield).
- Carry YELD: يُخزن في backend باسم
carryYeldUsdo(USDO-base) ويعني payout pool المتراكم من yield matching، والذي يُدفع لاحقًا مع weekly caps.
2) حساب XP من الاستثمار
- لكل استثمار، يتم حساب XP كالتالي:
xpBase = amountBase * xpPercent / 100- تأتي
xpPercentمن Block settings (الافتراضي: 20%)
3) انتقال XP صعودًا في الشجرة
يمتلك الاستثمار placement side (LEFT أو RIGHT) بناءً على investmentInviteCode:
- يمكن لمستخدم placement أن يستلم XP credit على نفس الجهة
- ثم يتحرك XP credit صعودًا عبر سلسلة
referredByUserIdحتى root (max depth guard=100)
4) قيد مهم: فقط مستخدمو TIP3 يستقبلون XP credits
في النظام الحالي:
- يتم إنشاء XP credit فقط إذا كان
programTier === TIP3لدى المستخدم المستلم. - توجد نفس الحماية في yield worker (الموديول الداخلي
yield): إذا لم يكن مستلم credit من TIP3، يتم فقط وضع علامة processed على credit دون تغيير carry.
وهذا يعني:
- مستخدمو TIP1/TIP2 لا يراكمون carryLeft/carryRight (yield carry).
- قد تُنشئ استثمارات TIP1/TIP2 قيمة XP، لكن XP credit الفعلي يستلمه فقط ancestor/placement node الذي هو TIP3.
5) Yield matching (10 XP + 10 XP → 10 USDO)
يعمل yield worker على سجلات XPCredit (الاسم الداخلي: xp).
- كل credit يزيد
carryLeftأوcarryRight. - حجم الزوج ثابت: 10 XP.
- لكل matched pair، يكون payout ثابتًا: 10 USDO.
- بعد matching تنخفض carries وتُضاف قيمة payout إلى
carryYeldUsdo.
6) Weekly payout cap (Reward levels)
carryYeldUsdo لا يتحول مباشرةً إلى balance. يتم الدفع عبر job باسم payoutCarryYeld:
- لكل مستخدم reward level (1..4) في
userRewardStatus. - لكل مستوى weekly max payout (افتراضيًا):
- L1: 2000 USDO/week
- L2: 4000 USDO/week
- L3: 6000 USDO/week
- L4: 8000 USDO/week
- إذا تجاوز carryYeld المتبقي من الحد الأسبوعي، يتم burned للجزء الزائد (لا يُدفع).
- يتم حفظ تقدم weekly payout عبر
yieldAccount.weeklyPayoutUsdo+weekKey.
7) Auto payout schedule
- إذا كانت Block settings تحتوي
yieldAutoPayoutEnabled=true، تتم إضافة repeat job باسمpayoutCarryYeldإلى queue مع cron pattern (dayOfWeek/hour/minute). - إذا كانت معطلة، يتم إزالة repeat job بأسلوب best-effort.
8) تأثير TIP upgrade على carry
عند ارتفاع tier العام للمستخدم:
- يتم تعليم Pending XP credits على أنها processed حتى لا يحدث payout من الحالة القديمة.
- تتم إعادة
yieldAccount.carryLeftXP/carryRightXPإلى 0. - في investment create flow، تتم أيضًا إعادة
carryYeldUsdoإلى 0 (باستثناء upgrade endpoint، حيث تتم إعادة left/right carry فقط).