Investments (Farm Miner) and TIP tiers

In the current system (how it works now)

1) Core rules for creating an investment

  • An investment is created only if the system has active assets:
    • USDT (BSC) and USDO (Internal)
  • The investing user must have referredByUserId (i.e., they must have registered with an invite code).
  • The investment requires an investmentInviteCode (8 characters, A-Z/0-9) — this is the placement code for the Yield tree.
  • Minimum investment: 10 USDT.

2) TIP classification (TIP1/TIP2/TIP3)

TIP is calculated from the investment amount based on Block settings:

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

If:

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

Important: the user’s overall programTier is calculated by summing the principal of all ACTIVE farm miners (not just one investment). This allows TIP upgrades through multiple investments.

3) Farm Miner term/return and “hourly mint”

After investing, a FarmMiner is created with the following logic:

  • termMonths and returnMinPercent/returnMaxPercent come from settings based on TIP.
  • returnPercent has two layers:
    • At investment time, an initial returnPercent is set (random in [min, max]).
    • The earn worker may re-randomize returnPercent on each mint/credit and stores the last used value.
  • profitBase = principal * returnPercent / 100
  • totalMintBase = principal + profitBase
  • Mint interval comes from farmMinerMintIntervalMinutes (default: 60 minutes).

Earn/mint is calculated prorata based on elapsed time:

  • The worker computes mintedTarget from elapsed hours (or minutes if interval < 60) and totalMintBase.
  • Then it credits mintDue = mintedTarget - mintedBase to the user’s USDO balance (ledger entry).
  • When the term ends or mintedBase >= totalMintBase, the miner becomes COMPLETED.

4) Investment placement (LEFT/RIGHT)

investmentInviteCode must belong to some user:

  • If it equals that user’s inviteCodeLeftplacementSide=LEFT
  • If it equals inviteCodeRightplacementSide=RIGHT

In the UI this is usually shown as USDOL (LEFT) and USDOR (RIGHT).

5) Investment invite code is locked after the first investment

  • If a user already has an investment and investmentInviteCodeLocked=true, then for subsequent investments the same investmentInviteCode must be used.
  • After the first investment, the backend always stores/locks the chosen placement code.

6) Referral (direct/word-of-mouth) bonus

In the current system, referral commission goes to the marketing inviter (referredByUserId) — i.e., the person whose invite code the user used at registration:

  • Referral percent comes from settings (referralPercent, default: 10%).
  • Eligibility depends on the recipient’s TIP:
    • TIP1 → 0% (does not receive)
    • TIP2/TIP3 → receives, but there is a maximum cap (tip2ReferralMaxBase / tip3ReferralMaxBase).

7) Multiple miners and “upgrade” (increase-only)

  • A user can have multiple farm miners (multiple investments).
  • In the current API, it is possible to increase an existing miner’s principal (upgrade). In that case:
    • principal increases
    • TIP can change based on the new principal
    • term and returnPercent are recalculated (returnPercent becomes random again)
    • the miner restarts “from now” (mintedBase=0, accruedHours=0, endsAt recalculated)