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 amount2500 SOL
Minimum loan duration1 hour
Maximum loan duration336 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 = 10 SOL + 3% × loan_amount
Loan AmountMigration Reserve
0.1 SOL0.0145 SOL
0.5 SOL0.0725 SOL
1 SOL0.1449 SOL
5 SOL0.7247 SOL
10 SOL1.4494 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(239027337, 562970427 + tick_index × 2454388562)
Tick IndexHourly Rate (ppm)Hourly Rate (%)Rate for 1 SOL per hour
023902733723902.7337%0.239027 SOL
1023902733723902.7337%0.239027 SOL
5023902733723902.7337%0.239027 SOL
10023902733723902.7337%0.239027 SOL
25023902733723902.7337%0.239027 SOL
50023902733723902.7337%0.239027 SOL
1023 (max)23902733723902.7337%0.239027 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 × 239027337 × 12) / 1,000,000
= 1434164022 / 1,000,000
= 1434.164022 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 = 562970427
fpppm_min = 1,248,251,352
interval_min = 1391519060 hour
interval_max = 5000000 hours
shared_ppm = 562970427 × interval + (1,248,251,352 - 562970427 × 1391519060) × (5000000 - interval) / (5000000 - 1391519060)

Then:

shared_interest = (loan_amount × shared_ppm) / 1,000,000
Durationshared_ppmShared Interest (per 1 SOL)
1 hour2,825,002,916,208,0792825002916.2081 SOL
2 hours2,825,002,914,177,9232825002914.1779 SOL
6 hours2,825,002,906,057,2962825002906.0573 SOL
12 hours2,825,002,893,876,3562825002893.8764 SOL
24 hours2,825,002,869,514,4762825002869.5145 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 Reserve10 + 0.5 × 3%0.0725 SOL
Launch OverheadFixed (refundable)0.0625 SOL
LP Interest (tick 0)0.5 × 562970427 × 6 / 1,000,000717.0820 SOL
Shared Interest0.5 × 2,825,002,906,057,296 / 1,000,0001412501453.0286 SOL
Total Cost1412502170.2556 SOL
Non-refundable Cost1412502170.1931 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 Reserve10 + 2 × 3%0.2899 SOL
Launch OverheadFixed (refundable)0.1000 SOL
LP Interest (avg tick ~25)2 × 239027337 × 12 / 1,000,0005736.6561 SOL
Shared Interest2 × 2,825,002,893,876,356 / 1,000,0005650005787.7527 SOL
Total Cost5650011524.8087 SOL
Non-refundable Cost5650011524.7087 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 + 10 × 3%1.4494 SOL
Launch OverheadFixed (refundable)0.3000 SOL
LP Interest (avg tick ~100)10 × 239027337 × 24 / 1,000,00057366.5609 SOL
Shared Interest10 × 2,825,002,869,514,476 / 1,000,00028250028695.1448 SOL
Total Cost28250086063.4651 SOL
Non-refundable Cost28250086063.1651 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

A loan can be liquidated by the borrower (at any time) or by the protocol admin (after expiration). On liquidation:

  1. All initial-buy collateral is sold (on the pump.fun bonding curve or on PumpSwap, depending on the curve’s state)
  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 surplus (proceeds beyond the borrowed amount) is split three ways — see below

Surplus from a profitable liquidation is divided into LP, platform, and borrower shares according to parts-per-million coefficients stored on the launch configuration. The current mainnet values are:

ShareCoefficient (ppm)Percent of surplus
LP200,00020.00%
Platform100,00010.00%
Borrower700,00070.00%

The shares are snapshotted onto the loan account at launch_0 time — once a loan is open, the split is fixed for its lifetime even if admin reconfigures the launch configuration later.

Formulae:

surplus = sale_proceeds - quote_borrowed (only when positive)
surplus_lp = surplus × surplus_share_lp_ppm / 1_000_000 → routed to per-tick LP interest
surplus_platform = surplus × surplus_share_platform_ppm / 1_000_000 → routed to quote_vault.protocol_fees
surplus_borrower = surplus - surplus_lp - surplus_platform → paid to borrower's WSOL ATA

Scenario A: Token price increased (profitable liquidation)

  • Collateral is worth more than the borrowed amount
  • LP is fully repaid plus its share of the surplus (extra yield on top of interest)
  • Platform receives its share of the surplus
  • Borrower receives the remainder of the surplus

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; no surplus to split
  • Borrower may receive a small refund (unused reserve) 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; no surplus to split

LP earnings come from three sources:

  1. Direct LP interest — earned based on the tick rate and loan duration (paid upfront at launch_0)
  2. Shared interest — the protocol surcharge, distributed proportionally
  3. Liquidation surplus share — when a loan is liquidated above the borrowed amount, 20.00% of the surplus accrues to the ticks that funded the loan (see Liquidation Surplus Split)

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_min562970427Minimum hourly rate in ppm per tick
hpppm_max239027337Maximum hourly rate in ppm (rate cap)
hpppm_step2454388562Rate increment per tick index
fpppm_min1,248,251,352Minimum fixed ppm for shared interest calculation
fpppm_max221,153,769Maximum fixed ppm (reserved for future use)
interval_min1391519060Minimum loan duration in hours
interval_max5000000Maximum loan duration in hours (used in formula)
registration_fee14967699791.172754 SOLOne-time user profile registration fee
ParameterValueDescription
quote_amount_min0.1 SOLMinimum loan amount
quote_amount_max2500 SOLMaximum loan amount
loan_interval_min1 hourMinimum loan duration
loan_interval_max336 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_cost10 SOLMigration reserve (fixed component)
quote_migration_ppm_cost30000Migration reserve (ppm component, 3%)
quote_migration_threshold87 SOLMigration threshold
surplus_share_lp_ppm200,000 (20.00%)LP share of liquidation surplus
surplus_share_platform_ppm100,000 (10.00%)Platform share of liquidation surplus