Investments (Farm Miner) и TIP tiers

В текущей системе (как это работает сейчас)

1) Базовые правила создания инвестиции

  • Инвестиция создается только если в системе есть активные assets:
    • USDT (BSC) и USDO (Internal)
  • У пользователя должен быть referredByUserId (то есть регистрация по invite code).
  • Для инвестиции нужен investmentInviteCode (8 символов, A-Z/0-9) — это placement code для Yield tree.
  • Минимальная инвестиция: 10 USDT.

2) TIP-классификация (TIP1/TIP2/TIP3)

TIP рассчитывается по сумме инвестиции на основе Block settings:

  • tier1MaxBase (по умолчанию: 480 USDT)
  • tier2MaxBase (по умолчанию: 975 USDT)

Если:

  • amount ≤ tier1Max → TIP1
  • amount ≤ tier2Max → TIP2
  • иначе → TIP3

Важно: общий programTier пользователя считается по сумме principal всех ACTIVE farm miners (а не по одной инвестиции). Это дает возможность TIP-upgrade через несколько инвестиций.

3) Срок/доходность Farm Miner и hourly mint

После инвестиции создается FarmMiner со следующей логикой:

  • termMonths и returnMinPercent/returnMaxPercent берутся из настроек по TIP.
  • returnPercent имеет два слоя:
    • При создании ставится стартовый returnPercent (random в диапазоне [min, max]).
    • Earn worker может пересчитывать returnPercent при каждом mint/credit и сохраняет последнее использованное значение.
  • profitBase = principal * returnPercent / 100
  • totalMintBase = principal + profitBase
  • Интервал mint берется из farmMinerMintIntervalMinutes (по умолчанию: 60 минут).

Earn/mint считается prorata по прошедшему времени:

  • Worker рассчитывает mintedTarget по прошедшим часам (или минутам, если интервал < 60) и totalMintBase.
  • Затем начисляет mintDue = mintedTarget - mintedBase в USDO balance (ledger entry).
  • Когда срок заканчивается или mintedBase >= totalMintBase, miner становится COMPLETED.

4) Investment placement (LEFT/RIGHT)

investmentInviteCode должен принадлежать какому-то пользователю:

  • Если он равен inviteCodeLeft этого пользователя → placementSide=LEFT
  • Если равен inviteCodeRightplacementSide=RIGHT

В UI это обычно отображается как USDOL (LEFT) и USDOR (RIGHT).

5) Investment invite code блокируется после первой инвестиции

  • Если у пользователя уже есть инвестиция и investmentInviteCodeLocked=true, для следующих инвестиций должен использоваться тот же investmentInviteCode.
  • После первой инвестиции backend фиксирует выбранный placement code.

6) Referral bonus

В текущей системе referral commission идет marketing inviter (referredByUserId) — человеку, чей invite code был использован при регистрации:

  • Referral percent берется из настроек (referralPercent, по умолчанию: 10%).
  • Eligibility зависит от TIP получателя:
    • TIP1 → 0% (не получает)
    • TIP2/TIP3 → получает, но с максимальным cap (tip2ReferralMaxBase / tip3ReferralMaxBase).

7) Несколько miners и upgrade

  • У пользователя может быть несколько farm miners.
  • В текущем API можно увеличить principal существующего miner (upgrade). В этом случае:
    • principal увеличивается
    • TIP может измениться
    • срок и returnPercent пересчитываются
    • miner перезапускается с текущего момента (mintedBase=0, accruedHours=0, endsAt пересчитывается)