Skip to content

Economics

This page explains how Moono Protocol’s economic model works, including all fees, interest rates, and how costs are calculated for borrowers and earnings for liquidity providers.

All values described here are fetched from the current mainnet on-chain configuration.

When a borrower takes a loan, the total cost consists of several components:

ComponentDescription
LP InterestInterest paid to liquidity providers, determined by tick rates and loan duration
Shared InterestAdditional protocol-wide interest surcharge distributed to all participating ticks
Protocol FeeFee charged by the protocol for each launch
Migration ReserveSOL reserved for potential DEX migration
Launch OverheadRefundable overhead to cover transaction costs
ParameterValue
Minimum loan amount0.1 SOL
Maximum loan amount10 SOL
Minimum loan duration1 hour
Maximum loan duration24 hours

A fee is charged on every loan:

Protocol Fee = 0.01 SOL

This fee goes to the protocol treasury.

A portion of the loan is reserved to cover the cost of potential token migration to a DEX (when the bonding curve completes on pump.fun):

Migration Reserve = (min(loan_amount, 85 SOL) × 1 SOL) / 85 SOL
Loan AmountMigration Reserve
0.1 SOL0.0012 SOL
0.5 SOL0.0059 SOL
1 SOL0.0118 SOL
5 SOL0.0588 SOL
10 SOL0.1176 SOL

The migration reserve is used to provide liquidity on a DEX if the token’s bonding curve completes. If the loan is repaid before migration happens, the reserve is returned as part of the settlement.

A small refundable overhead is charged to cover Solana transaction fees and rent:

Launch Overhead = 0.05 SOL

This amount is returned to the borrower when the loan is closed (repaid or liquidated).

Moono Protocol uses a tiered liquidity model with 1,024 ticks (risk tiers). Each tick has its own interest rate, and loans are filled from the lowest tick upward.

  • There are 1,024 ticks, indexed from 0 to 1,023
  • Each tick represents a pool of liquidity at a specific interest rate
  • Lower ticks have lower rates; higher ticks have higher rates
  • When a loan is taken, liquidity is consumed starting from tick 0 and moving upward
  • LPs choose which tick to deposit into based on their desired risk/reward

Each tick has an hourly rate expressed in parts per million (ppm):

tick_hourly_rate_ppm = min(2048, 2 + tick_index × 2)
Tick IndexHourly Rate (ppm)Hourly Rate (%)Rate for 1 SOL per hour
020.0002%0.000000 SOL
10220.0022%0.000000 SOL
501020.0102%0.000000 SOL
1002020.0202%0.000000 SOL
2505020.0502%0.000001 SOL
50010020.1002%0.000001 SOL
1023 (max)20480.2048%0.000002 SOL

For each tick that contributes to funding a loan:

tick_lp_interest = (tick_borrow_amount × tick_hourly_rate_ppm × loan_duration_hours) / 1,000,000

Example: A loan borrows 0.5 SOL from tick 100 for 12 hours:

tick_lp_interest = (0.5 × 202 × 12) / 1,000,000
= 1212 / 1,000,000
= 0.001212 SOL

In addition to per-tick LP interest, there is a shared interest component — a global surcharge that is distributed proportionally across all ticks participating in the loan. The formula uses a linear interpolation:

shared_ppm = hpppm_min × interval + (fpppm_min - hpppm_min × interval_min) × (interval_max - interval) / (interval_max - interval_min)

With current mainnet parameters:

hpppm_min = 2
fpppm_min = 50,000
interval_min = 1 hour
interval_max = 720 hours
shared_ppm = 2 × interval + (50,000 - 2 × 1) × (720 - interval) / (720 - 1)

Then:

shared_interest = (loan_amount × shared_ppm) / 1,000,000
Durationshared_ppmShared Interest (per 1 SOL)
1 hour50,0000.0500 SOL
2 hours49,9320.0499 SOL
6 hours49,6620.0497 SOL
12 hours49,2570.0493 SOL
24 hours48,4460.0484 SOL

The total interest for a loan is the sum of all per-tick LP interest plus the shared interest:

total_interest = Σ(tick_lp_interest for each tick) + shared_interest

The shared interest is distributed to each participating tick proportionally to how much it contributed:

tick_shared_part = shared_interest × (tick_borrow_amount / total_loan_amount)
tick_total_interest = tick_lp_interest + tick_shared_part

Example 1: Small Loan — 0.5 SOL for 6 hours

Section titled “Example 1: Small Loan — 0.5 SOL for 6 hours”

Assuming the loan is fully funded from tick 0:

ComponentCalculationAmount
Protocol FeeFixed0.0100 SOL
Migration Reserve0.5 × 1 / 850.0059 SOL
Launch OverheadFixed (refundable)0.0625 SOL
LP Interest (tick 0)0.5 × 2 × 6 / 1,000,0000.0000 SOL
Shared Interest0.5 × 49,662 / 1,000,0000.0248 SOL
Total Cost0.1032 SOL
Non-refundable Cost0.0407 SOL

Example 2: Medium Loan — 2 SOL for 12 hours

Section titled “Example 2: Medium Loan — 2 SOL for 12 hours”

Assuming the loan is funded from ticks 0–50 evenly:

ComponentCalculationAmount
Protocol FeeFixed0.0100 SOL
Migration Reserve2 × 1 / 850.0235 SOL
Launch OverheadFixed (refundable)0.1000 SOL
LP Interest (avg tick ~25)2 × 52 × 12 / 1,000,0000.0012 SOL
Shared Interest2 × 49,257 / 1,000,0000.0985 SOL
Total Cost0.2333 SOL
Non-refundable Cost0.1333 SOL

Example 3: Maximum Loan — 10 SOL for 24 hours

Section titled “Example 3: Maximum Loan — 10 SOL for 24 hours”

Assuming the loan is funded from ticks 0–200:

ComponentCalculationAmount
Protocol FeeFixed0.0100 SOL
Migration Reserve10 × 1 / 850.1176 SOL
Launch OverheadFixed (refundable)0.3000 SOL
LP Interest (avg tick ~100)10 × 202 × 24 / 1,000,0000.0485 SOL
Shared Interest10 × 48,446 / 1,000,0000.4845 SOL
Total Cost0.9606 SOL
Non-refundable Cost0.6606 SOL
ComponentDestination
LP InterestDistributed to the specific LPs whose ticks funded the loan
Shared InterestDistributed proportionally across all participating ticks
Protocol FeeProtocol treasury
Migration ReserveHeld in escrow; used for DEX migration or returned on repayment
Launch OverheadReturned to borrower on loan closure

When a loan expires without being repaid, the borrower or protocol admin can liquidate it:

  1. All collateral tokens (the tokens purchased on pump.fun) are sold on the bonding curve
  2. The SOL proceeds are used to repay the borrowed amount to the liquidity pool
  3. The migration reserve covers any shortfall if the token price dropped
  4. Any excess SOL after full repayment goes to the liquidator as a reward

Scenario A: Token price increased

  • Collateral is worth more than the borrowed amount
  • LP is fully repaid
  • Excess SOL is refunded to the borrower

Scenario B: Token price decreased, but within reserve

  • Collateral sale doesn’t fully cover the loan
  • Migration reserve covers the shortfall
  • LP is fully repaid
  • Borrower may receive a small refund or nothing

Scenario C: Token price crashed below reserve coverage

  • Collateral + migration reserve don’t cover the full loan
  • LP receives a partial repayment (loss)
  • Borrower receives nothing back

LP earnings come from two sources:

  1. Direct LP interest — earned based on the tick rate and loan duration
  2. Shared interest — the protocol surcharge, distributed proportionally

When you open an LP position, your deposit is converted to shares at the current share price:

shares = deposit_amount × tick_total_shares / (tick_balance + tick_borrowed)

When you withdraw, your shares are converted back to SOL:

withdrawal_amount = shares × (tick_balance + tick_borrowed) / tick_total_shares

As interest accrues from repaid loans, the ratio (tick_balance + tick_borrowed) / tick_total_shares increases, meaning each share is worth more SOL. This is how LPs earn — the value of their shares grows over time as borrowers repay with interest.

You can only withdraw SOL that is not currently lent out:

max_withdrawable_shares = (your_shares × tick_balance) / (tick_balance + tick_borrowed)

If all liquidity in your tick is currently borrowed, you must wait until some loans are repaid or liquidated before you can withdraw.

ParameterValueDescription
hpppm_min2Minimum hourly rate in ppm per tick
hpppm_max2048Maximum hourly rate in ppm (rate cap)
hpppm_step2Rate increment per tick index
fpppm_min50,000Minimum fixed ppm for shared interest calculation
fpppm_max70,000Maximum fixed ppm (reserved for future use)
interval_min1Minimum loan duration in hours
interval_max720Maximum loan duration in hours (used in formula)
registration_fee0.01 SOLOne-time user profile registration fee
ParameterValueDescription
quote_amount_min0.1 SOLMinimum loan amount
quote_amount_max10 SOLMaximum loan amount
loan_interval_min1 hourMinimum loan duration
loan_interval_max24 hoursMaximum loan duration
quote_launch_fixed_cost0.01 SOLProtocol fee (fixed component)
quote_launch_ppm_cost0Protocol fee (ppm component)
quote_launch_fixed_overhead_refundable0.05 SOLRefundable launch overhead
quote_migration_fixed_cost1 SOLMigration reserve (fixed component)
quote_migration_ppm_cost0Migration reserve (ppm component)
quote_migration_threshold85 SOLMigration threshold