Investissements (Farm Miner) et TIP tiers

Dans le système actuel (comment cela fonctionne maintenant)

1) Règles de base pour créer un investissement

  • Un investissement est créé uniquement si le système dispose d'actifs actifs :
    • USDT (BSC) et USDO (Interne)
  • L'utilisateur investisseur doit avoir referredByUserId (c.-à-d. s'être inscrit avec un invite code).
  • L'investissement nécessite un investmentInviteCode (8 caractères, A-Z/0-9) — c'est le placement code pour l'arbre Yield.
  • Investissement minimum : 10 USDT.

2) Classification TIP (TIP1/TIP2/TIP3)

TIP est calculé à partir du montant de l'investissement selon les paramètres Block :

  • tier1MaxBase (par défaut : 480 USDT)
  • tier2MaxBase (par défaut : 975 USDT)

Si :

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

Important : le programTier global de l'utilisateur est calculé en additionnant le principal de tous les farm miners ACTIVE (pas seulement un investissement). Cela permet les upgrades TIP via des investissements multiples.

3) Durée/rendement Farm Miner et “hourly mint”

Après l'investissement, un FarmMiner est créé avec la logique suivante :

  • termMonths et returnMinPercent/returnMaxPercent proviennent des paramètres selon TIP.
  • returnPercent a deux couches :
    • Au moment de l'investissement, un returnPercent initial est défini (aléatoire dans [min, max]).
    • Le worker earn peut re-randomiser returnPercent à chaque mint/crédit et stocke la dernière valeur utilisée.
  • profitBase = principal * returnPercent / 100
  • totalMintBase = principal + profitBase
  • L'intervalle mint provient de farmMinerMintIntervalMinutes (par défaut : 60 minutes).

Earn/mint est calculé au prorata selon le temps écoulé :

  • Le worker calcule mintedTarget à partir des heures écoulées (ou minutes si intervalle < 60) et de totalMintBase.
  • Puis il crédite mintDue = mintedTarget - mintedBase sur le solde USDO de l'utilisateur (entrée ledger).
  • Quand la durée se termine ou mintedBase >= totalMintBase, le miner devient COMPLETED.

4) Placement d'investissement (LEFT/RIGHT)

investmentInviteCode doit appartenir à un utilisateur :

  • S'il est égal à inviteCodeLeft de cet utilisateur → placementSide=LEFT
  • S'il est égal à inviteCodeRightplacementSide=RIGHT

Dans l'UI, cela est généralement affiché comme USDOL (LEFT) et USDOR (RIGHT).

5) Investment invite code verrouillé après le premier investissement

  • Si un utilisateur a déjà un investissement et investmentInviteCodeLocked=true, alors pour les investissements suivants, le même investmentInviteCode doit être utilisé.
  • Après le premier investissement, le backend enregistre/verrouille toujours le placement code choisi.

6) Bonus referral (direct/bouche-à-oreille)

Dans le système actuel, la commission referral va au marketing inviter (referredByUserId) — c.-à-d. la personne dont l'invite code a été utilisé à l'inscription :

  • Le pourcentage referral vient des paramètres (referralPercent, par défaut : 10%).
  • L'éligibilité dépend du TIP du destinataire :
    • TIP1 → 0% (ne reçoit pas)
    • TIP2/TIP3 → reçoit, mais avec un cap maximum (tip2ReferralMaxBase / tip3ReferralMaxBase).

7) Miners multiples et “upgrade” (augmentation uniquement)

  • Un utilisateur peut avoir plusieurs farm miners (investissements multiples).
  • Dans l'API actuelle, il est possible d'augmenter le principal d'un miner existant (upgrade). Dans ce cas :
    • le principal augmente
    • TIP peut changer selon le nouveau principal
    • la durée et returnPercent sont recalculés (returnPercent redevient aléatoire)
    • le miner redémarre “à partir de maintenant” (mintedBase=0, accruedHours=0, endsAt recalculé)