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.
Overview of Costs
Section titled “Overview of Costs”When a borrower takes a loan, the total cost consists of several components:
| Component | Description |
|---|---|
| LP Interest | Interest paid to liquidity providers, determined by tick rates and loan duration |
| Shared Interest | Additional protocol-wide interest surcharge distributed to all participating ticks |
| Protocol Fee | Fee charged by the protocol for each launch |
| Migration Reserve | SOL reserved for potential DEX migration |
| Launch Overhead | Refundable overhead to cover transaction costs |
Loan Parameters
Section titled “Loan Parameters”| Parameter | Value |
|---|---|
| Minimum loan amount | 0.1 SOL |
| Maximum loan amount | 2500 SOL |
| Minimum loan duration | 1 hour |
| Maximum loan duration | 336 hours |
Protocol Fee
Section titled “Protocol Fee”A fee is charged on every loan:
Protocol Fee = 0.01 SOLThis fee goes to the protocol treasury.
Migration Reserve
Section titled “Migration Reserve”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 SOLMigration Reserve Examples
Section titled “Migration Reserve Examples”| Loan Amount | Migration Reserve |
|---|---|
| 0.1 SOL | 0.0012 SOL |
| 0.5 SOL | 0.0059 SOL |
| 1 SOL | 0.0118 SOL |
| 5 SOL | 0.0588 SOL |
| 10 SOL | 0.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.
Launch Overhead (Refundable)
Section titled “Launch Overhead (Refundable)”A small refundable overhead is charged to cover Solana transaction fees and rent:
Launch Overhead = 0.05 SOLThis amount is returned to the borrower when the loan is closed (repaid or liquidated).
Interest Model
Section titled “Interest Model”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.
How Ticks Work
Section titled “How Ticks Work”- 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
Per-Tick Interest Rate
Section titled “Per-Tick Interest Rate”Each tick has an hourly rate expressed in parts per million (ppm):
tick_hourly_rate_ppm = min(2048, 2 + tick_index × 2)| Tick Index | Hourly Rate (ppm) | Hourly Rate (%) | Rate for 1 SOL per hour |
|---|---|---|---|
| 0 | 2 | 0.0002% | 0.000000 SOL |
| 10 | 22 | 0.0022% | 0.000000 SOL |
| 50 | 102 | 0.0102% | 0.000000 SOL |
| 100 | 202 | 0.0202% | 0.000000 SOL |
| 250 | 502 | 0.0502% | 0.000001 SOL |
| 500 | 1002 | 0.1002% | 0.000001 SOL |
| 1023 (max) | 2048 | 0.2048% | 0.000002 SOL |
Per-Tick LP Interest Calculation
Section titled “Per-Tick LP Interest Calculation”For each tick that contributes to funding a loan:
tick_lp_interest = (tick_borrow_amount × tick_hourly_rate_ppm × loan_duration_hours) / 1,000,000Example: 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 SOLShared Interest (Protocol Surcharge)
Section titled “Shared Interest (Protocol Surcharge)”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 = 2fpppm_min = 50,000interval_min = 1 hourinterval_max = 720 hours
shared_ppm = 2 × interval + (50,000 - 2 × 1) × (720 - interval) / (720 - 1)Then:
shared_interest = (loan_amount × shared_ppm) / 1,000,000Shared Interest by Duration
Section titled “Shared Interest by Duration”| Duration | shared_ppm | Shared Interest (per 1 SOL) |
|---|---|---|
| 1 hour | 50,000 | 0.0500 SOL |
| 2 hours | 49,932 | 0.0499 SOL |
| 6 hours | 49,662 | 0.0497 SOL |
| 12 hours | 49,257 | 0.0493 SOL |
| 24 hours | 48,446 | 0.0484 SOL |
Total Interest
Section titled “Total Interest”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_interestThe 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_partComplete Cost Examples
Section titled “Complete Cost Examples”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:
| Component | Calculation | Amount |
|---|---|---|
| Protocol Fee | Fixed | 0.0100 SOL |
| Migration Reserve | 0.5 × 1 / 85 | 0.0059 SOL |
| Launch Overhead | Fixed (refundable) | 0.0625 SOL |
| LP Interest (tick 0) | 0.5 × 2 × 6 / 1,000,000 | 0.0000 SOL |
| Shared Interest | 0.5 × 49,662 / 1,000,000 | 0.0248 SOL |
| Total Cost | 0.1032 SOL | |
| Non-refundable Cost | 0.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:
| Component | Calculation | Amount |
|---|---|---|
| Protocol Fee | Fixed | 0.0100 SOL |
| Migration Reserve | 2 × 1 / 85 | 0.0235 SOL |
| Launch Overhead | Fixed (refundable) | 0.1000 SOL |
| LP Interest (avg tick ~25) | 2 × 52 × 12 / 1,000,000 | 0.0012 SOL |
| Shared Interest | 2 × 49,257 / 1,000,000 | 0.0985 SOL |
| Total Cost | 0.2333 SOL | |
| Non-refundable Cost | 0.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:
| Component | Calculation | Amount |
|---|---|---|
| Protocol Fee | Fixed | 0.0100 SOL |
| Migration Reserve | 10 × 1 / 85 | 0.1176 SOL |
| Launch Overhead | Fixed (refundable) | 0.3000 SOL |
| LP Interest (avg tick ~100) | 10 × 202 × 24 / 1,000,000 | 0.0485 SOL |
| Shared Interest | 10 × 48,446 / 1,000,000 | 0.4845 SOL |
| Total Cost | 0.9606 SOL | |
| Non-refundable Cost | 0.6606 SOL |
What Happens to Each Fee Component
Section titled “What Happens to Each Fee Component”| Component | Destination |
|---|---|
| LP Interest | Distributed to the specific LPs whose ticks funded the loan |
| Shared Interest | Distributed proportionally across all participating ticks |
| Protocol Fee | Protocol treasury |
| Migration Reserve | Held in escrow; used for DEX migration or returned on repayment |
| Launch Overhead | Returned to borrower on loan closure |
Liquidation Economics
Section titled “Liquidation Economics”A loan can be liquidated by the borrower (at any time) or by the protocol admin (after expiration). On liquidation:
- All initial-buy collateral is sold (on the pump.fun bonding curve or on PumpSwap, depending on the curve’s state)
- The SOL proceeds are used to repay the borrowed amount to the liquidity pool
- The migration reserve covers any shortfall if the token price dropped
- Any surplus (proceeds beyond the borrowed amount) is split three ways — see below
Liquidation Surplus Split
Section titled “Liquidation Surplus Split”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:
| Share | Coefficient (ppm) | Percent of surplus |
|---|---|---|
| LP | 0 | 0.00% |
| Platform | 0 | 0.00% |
| Borrower | 1,000,000 | 100.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 interestsurplus_platform = surplus × surplus_share_platform_ppm / 1_000_000 → routed to quote_vault.protocol_feessurplus_borrower = surplus - surplus_lp - surplus_platform → paid to borrower's WSOL ATALiquidation Scenarios
Section titled “Liquidation Scenarios”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 Model
Section titled “LP Earnings Model”LP earnings come from three sources:
- Direct LP interest — earned based on the tick rate and loan duration (paid upfront at
launch_0) - Shared interest — the protocol surcharge, distributed proportionally
- Liquidation surplus share — when a loan is liquidated above the borrowed amount, 0.00% of the surplus accrues to the ticks that funded the loan (see Liquidation Surplus Split)
Share Valuation
Section titled “Share Valuation”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_sharesAs 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.
LP Withdrawal Constraints
Section titled “LP Withdrawal Constraints”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.
Configuration Parameters Reference
Section titled “Configuration Parameters Reference”Global Protocol Config
Section titled “Global Protocol Config”| Parameter | Value | Description |
|---|---|---|
hpppm_min | 2 | Minimum hourly rate in ppm per tick |
hpppm_max | 2048 | Maximum hourly rate in ppm (rate cap) |
hpppm_step | 2 | Rate increment per tick index |
fpppm_min | 50,000 | Minimum fixed ppm for shared interest calculation |
fpppm_max | 70,000 | Maximum fixed ppm (reserved for future use) |
interval_min | 1 | Minimum loan duration in hours |
interval_max | 720 | Maximum loan duration in hours (used in formula) |
registration_fee | 0.01 SOL | One-time user profile registration fee |
Pump.fun + WSOL Launch Configuration
Section titled “Pump.fun + WSOL Launch Configuration”| Parameter | Value | Description |
|---|---|---|
quote_amount_min | 0.1 SOL | Minimum loan amount |
quote_amount_max | 2500 SOL | Maximum loan amount |
loan_interval_min | 1 hour | Minimum loan duration |
loan_interval_max | 336 hours | Maximum loan duration |
quote_launch_fixed_cost | 0.01 SOL | Protocol fee (fixed component) |
quote_launch_ppm_cost | 0 | Protocol fee (ppm component) |
quote_launch_fixed_overhead_refundable | 0.05 SOL | Refundable launch overhead |
quote_migration_fixed_cost | 1 SOL | Migration reserve (fixed component) |
quote_migration_ppm_cost | 0 | Migration reserve (ppm component) |
quote_migration_threshold | 85 SOL | Migration threshold |
surplus_share_lp_ppm | 0 (0.00%) | LP share of liquidation surplus |
surplus_share_platform_ppm | 0 (0.00%) | Platform share of liquidation surplus |