XP, Yield matching, Carry YELD payout

Dieser Abschnitt beschreibt die Yield-Mechanik im aktuellen Backend (das interne technische Modul heißt yield).

1) Begriffe (im aktuellen System)

  • XP: In diesem Dokument nennen wir es XP. Im Backend lautet der interne Name xp (models/fields: XPCredit, carryLeftXP, carryRightXP).
  • USDOL/USDOR: Das sind die LEFT/RIGHT branches (yield sides).
  • Carry YELD: Wird im Backend als carryYeldUsdo (USDO-base) gespeichert und bedeutet den payout-Pool, der aus yield matching akkumuliert wird und später mit weekly caps ausgezahlt wird.

2) XP-Berechnung aus einer Investition

  • Für jede Investition wird XP wie folgt berechnet:
    • xpBase = amountBase * xpPercent / 100
    • xpPercent kommt aus den Block settings (Standard: 20%)

3) XP-Ausbreitung nach oben im Baum

Eine Investition hat eine placement side (LEFT oder RIGHT) basierend auf investmentInviteCode:

  • Der placement user kann auf derselben Seite einen XP credit erhalten
  • Danach bewegt sich der XP credit über die referredByUserId-Kette bis zur root nach oben (max depth guard=100)

4) Wichtige Einschränkung: Nur TIP3-Nutzer erhalten XP credits

Im aktuellen System:

  • Ein XP credit wird nur erstellt, wenn programTier === TIP3 beim Empfänger vorliegt.
  • Dieselbe Guard existiert im yield worker (internes Modul yield): Wenn der credit receiver nicht TIP3 ist, wird der credit lediglich als processed markiert, ohne carry zu verändern.

Das bedeutet:

  • TIP1/TIP2-Nutzer akkumulieren kein carryLeft/carryRight (yield carry).
  • TIP1/TIP2-Investitionen können zwar XP „erzeugen“, aber der tatsächliche XP credit wird nur vom ancestor/placement node mit TIP3 erhalten.

5) Yield matching (10 XP + 10 XP → 10 USDO)

Der yield worker arbeitet mit XPCredit-Datensätzen (interner Name: xp).

  • Jeder credit erhöht carryLeft oder carryRight.
  • Die Paargröße ist fest: 10 XP.
  • Für jedes matched pair ist payout fest: 10 USDO.
  • Nach matching sinken die carries und payout wird zu carryYeldUsdo addiert.

6) Weekly payout cap (Reward levels)

carryYeldUsdo wird nicht sofort zum Guthaben. Die Auszahlung erfolgt über den Job payoutCarryYeld:

  • Jeder Nutzer hat ein reward level (1..4) in userRewardStatus.
  • Jedes Level hat einen weekly max payout (Standardwerte):
    • L1: 2000 USDO/week
    • L2: 4000 USDO/week
    • L3: 6000 USDO/week
    • L4: 8000 USDO/week
  • Wenn carryYeld den verbleibenden weekly allowance überschreitet, wird overflow burned (nicht ausgezahlt).
  • Der Fortschritt der weekly payout-Auszahlung wird über yieldAccount.weeklyPayoutUsdo + weekKey gespeichert.

7) Auto payout schedule

  • Wenn in den Block settings yieldAutoPayoutEnabled=true ist, wird ein repeat job payoutCarryYeld mit einem cron pattern (dayOfWeek/hour/minute) zur queue hinzugefügt.
  • Wenn deaktiviert, wird der repeat job auf best-effort-Basis entfernt.

8) Effekt von TIP upgrade auf carry

Wenn sich das gesamte tier eines Nutzers erhöht:

  • Pending XP credits werden als processed markiert, damit payout nicht aus dem alten Zustand erfolgt.
  • yieldAccount.carryLeftXP/carryRightXP werden auf 0 zurückgesetzt.
  • Im investment create flow wird auch carryYeldUsdo auf 0 zurückgesetzt (außer im upgrade endpoint, wo nur left/right carry zurückgesetzt wird).