Investimenti (Farm Miner) e TIP tiers

Nel sistema attuale (come funziona ora)

1) Regole principali per creare un investimento

  • Un investimento viene creato solo se il sistema ha asset attivi:
    • USDT (BSC) e USDO (Interno)
  • L'utente che investe deve avere referredByUserId (cioè deve essersi registrato con un invite code).
  • L'investimento richiede un investmentInviteCode (8 caratteri, A-Z/0-9) — questo è il placement code per l'albero Yield.
  • Investimento minimo: 10 USDT.

2) Classificazione TIP (TIP1/TIP2/TIP3)

TIP viene calcolato dall'importo dell'investimento in base alle impostazioni del Block:

  • tier1MaxBase (predefinito: 480 USDT)
  • tier2MaxBase (predefinito: 975 USDT)

Se:

  • amount ≤ tier1Max → TIP1
  • amount ≤ tier2Max → TIP2
  • altrimenti → TIP3

Importante: il programTier complessivo dell'utente è calcolato sommando il principal di tutti i farm miners ACTIVE (non solo un investimento). Questo consente upgrade TIP tramite investimenti multipli.

3) Durata/rendimento Farm Miner e “hourly mint”

Dopo l'investimento, viene creato un FarmMiner con la seguente logica:

  • termMonths e returnMinPercent/returnMaxPercent provengono dalle impostazioni in base al TIP.
  • returnPercent ha due livelli:
    • Al momento dell'investimento, viene impostato un returnPercent iniziale (casuale in [min, max]).
    • L'earn worker può ri-randomizzare returnPercent a ogni mint/credito e memorizza l'ultimo valore usato.
  • profitBase = principal * returnPercent / 100
  • totalMintBase = principal + profitBase
  • L'intervallo mint proviene da farmMinerMintIntervalMinutes (predefinito: 60 minuti).

Earn/mint viene calcolato pro rata in base al tempo trascorso:

  • Il worker calcola mintedTarget da ore trascorse (o minuti se intervallo < 60) e totalMintBase.
  • Poi accredita mintDue = mintedTarget - mintedBase al saldo USDO dell'utente (voce ledger).
  • Quando il termine finisce o mintedBase >= totalMintBase, il miner diventa COMPLETED.

4) Placement investimento (LEFT/RIGHT)

investmentInviteCode deve appartenere a un utente:

  • Se è uguale a inviteCodeLeft di quell'utente → placementSide=LEFT
  • Se è uguale a inviteCodeRightplacementSide=RIGHT

Nella UI questo di solito è mostrato come USDOL (LEFT) e USDOR (RIGHT).

5) Investment invite code bloccato dopo il primo investimento

  • Se un utente ha già un investimento e investmentInviteCodeLocked=true, allora per gli investimenti successivi deve essere usato lo stesso investmentInviteCode.
  • Dopo il primo investimento, il backend salva/blocca sempre il placement code scelto.

6) Bonus referral (diretto/passaparola)

Nel sistema attuale, la commissione referral va al marketing inviter (referredByUserId) — cioè la persona il cui invite code è stato usato dall'utente in registrazione:

  • La percentuale referral proviene dalle impostazioni (referralPercent, predefinito: 10%).
  • L'idoneità dipende dal TIP del destinatario:
    • TIP1 → 0% (non riceve)
    • TIP2/TIP3 → riceve, ma esiste un cap massimo (tip2ReferralMaxBase / tip3ReferralMaxBase).

7) Miners multipli e “upgrade” (solo aumento)

  • Un utente può avere più farm miners (investimenti multipli).
  • Nell'API attuale è possibile aumentare il principal di un miner esistente (upgrade). In quel caso:
    • il principal aumenta
    • TIP può cambiare in base al nuovo principal
    • durata e returnPercent vengono ricalcolati (returnPercent torna casuale)
    • il miner riparte “da ora” (mintedBase=0, accruedHours=0, endsAt ricalcolato)