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 | 10 SOL |
| Minimum loan duration | 1 hour |
| Maximum loan duration | 24 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”When a loan expires without being repaid, the borrower or protocol admin can liquidate it:
- All collateral tokens (the tokens purchased on pump.fun) are sold on the bonding curve
- 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 excess SOL after full repayment goes to the liquidator as a reward
Liquidation Scenarios
Section titled “Liquidation Scenarios”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 Model
Section titled “LP Earnings Model”LP earnings come from two sources:
- Direct LP interest — earned based on the tick rate and loan duration
- Shared interest — the protocol surcharge, distributed proportionally
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 | 10 SOL | Maximum loan amount |
loan_interval_min | 1 hour | Minimum loan duration |
loan_interval_max | 24 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 |