Terra Classic Market-Module 2.0
A net-deflation engine that can reopen now, throttles itself as supply shrinks, and cannot be trick-printed through stale prices.
Context & Goals
2022 taught two hard lessons:
-
Unlimited capacity kills – raising
base_pool
and shorteningpool_recovery_period (PRP)
let traders mint faster than the market absorbed, destroying LUNC. -
Hard $1 peg is lethal – valuing UST at $1 while it traded at pennies forced hyper-inflation.
Today (28 May 2025) we sit on:
-
6.50T LUNC
-
6B USTC
-
Burns are ≈ 1.3B LUNC/month (0.02%)
The community wants the Market Module (MM) back as soon as possible to restore utility and fee flow — but will only accept continuous net supply decline.
How the Market Module Actually Mints
2.1 base_pool
— the “virtual SDR reserve”
When you swap USTC → LUNC (or vice versa), the module simulates a virtual SDR pool. It does:
-
Converts USTC to SDR using oracle price
-
Balances the virtual constant-product AMM
-
Updates SDR “debt” from the swap
Formula (simplified):
ΔLUNC_out ≈ ( SDR_spent / SDR_pool_after ) × LUNC_pool_before
A larger base_pool
lets a single swap mint more LUNC before the price shifts.
2.2 PRP — the Refill Timer
After a swap, a deficit d
is remembered.
Each block:
d_next = d_current × (1 − 1 / PRP)
-
Short PRP → fast refill → can mint again soon
-
Long PRP → slow refill → minting delayed
Daily Mint Capacity:
mint_cap_day ≈ 2 × base_pool / (PRP / 14,400)
(14,400 ≈ blocks per day on Terra Classic)
Net-Deflation Rule (Hard, Epoch-Based)
At the first block H₀
of every 30-day epoch:
taxburn_30d_token = Σ burns of token [H₀−30d , H₀−1]
allowance_token = min(taxburn_30d_token × 0.80 , 100,000 SDR)
Each token (USTC and LUNC) has:
-
Independent mint limit
-
80% of tax burns re-mintable
-
100k SDR max cap per token
Once allowance_remaining_token
hits 0, minting stops until the next epoch.
Adaptive base_pool
& PRP for the Epoch
4.1 Pick a Burst Factor
Default F = 0.07
→ Max 7% of allowance printed per day
desired_daily_cap = allowance × F
4.2 Solve for base_pool
base_pool_raw = desired_daily_cap × PRP / (2 × 14,400)
4.3 Supply-Scaled PRP
PRP = max(14,400, 14,400 × (S / 1T))
Example:
6.5T supply → PRP ≈ 93,600 blocks (6.5 days)
4.4 Final Clamps
base_pool = min(base_pool_raw, 0.00010 × mcap_in_SDR, 5,000,000 SDR)
Example for the First Epoch (Today)
| Item | Value |
|-------------------------|-----------------------------|
| burns_30d (B₀) | 1.3B LUNC |
| allowance = 0.8 × B₀ | 1.04B LUNC ≈ 81k SDR |
| PRP (6.5T supply) | 93,600 blocks |
| desired_daily_cap (F=0.1) | 0.104B LUNC |
| base_pool_raw | ≈ 8.3k SDR |
| base_pool after clamps | 8.3k SDR |
| theoretical mint/day | ≈ 32M LUNC (2.6k SDR) |
Since 32M < 104M, the PRP clamp is the active brake, not the burst factor F
.
Live Price Input & Anti-Manipulation Guards
| Component | Rule |
|-----------------------|----------------------------------------------------------------------|
| Price vote period | 5 blocks ≈ 30s |
| USTC price | price_uusd(USTC)
= voting-power-weighted median this period |
| Quorum auto-kill | If <50% VP for 25 blocks → MM.enabled = false
until 5 periods OK |
| TWAP sanity clamp | Swap fails if peg price differs >10% from 45-block CEX TWAP |
| Stable→stable route | Hard-disabled in code (ErrStableSwapDisabled
) |
Absolute Brakes & Governance
-
A ⅔ super-majority can close the Market Module (MM) at any time.
-
Caps cannot be raised via governance.
-
MM is inherently capped by:
-
30-day burn stats
-
Base pool clamps
-
Oracle enforcement
Scenarios
7.1 Bull-but-Boring (Utility Returns)
LUNC in Normal Growth Scenario
LUNC burns double to 2B/month by epoch 3.
PRP still >3 days, base_pool limited by allowance.
| Epoch | Burns | Allowance | Mint (≤) | Net Δ | Supply |
|-------|---------|-----------|----------|-----------|------------|
| 1 | 1.3B | 1.04B | 0.78B | –0.52B | 6.4995T |
| 2 | 1.6B | 1.28B | 1.02B | –0.58B | 6.4989T |
| 3 | 2.0B | 1.60B | 1.24B | –0.76B | 6.4981T |
Total LUNC deflation after 3 epochs: 1.9B (0.03%)
USTC in Normal Growth Scenario
| Epoch | Burns | Allowance | Mint (≤) | Net Δ | Supply |
|-------|-------|-----------|----------|--------|--------|
| 1 | 50M | 40M | 30M | –20M | 5.98B |
| 2 | 75M | 60M | 48M | –27M | 5.95B |
| 3 | 100M | 80M | 64M | –36M | 5.91B |
Total USTC deflation after 3 epochs: 83M (1.38%)
7.2 Flash-Crash & Oracle Outage
Event:
USTC dumps to $0.004; two top validators go offline.
Quorum falls below 50% for 30s → MM shuts automatically.
Burns collapse during the next epochs.
LUNC in Crisis
| Epoch | Burns | Allowance | Mint | Net Δ |
|--------|-------|-----------|------|----------|
| crash | 0.2B | 0.16B | 0 | –0.20B |
| +30d | 0.2B | 0.16B | ≤0.16B | –0.04B |
| +60d | 0.2B | 0.16B | ≤0.16B | –0.04B |
USTC in Crisis
| Epoch | Burns | Allowance | Mint | Net Δ |
|--------|-------|-----------|------|--------|
| crash | 10M | 8M | 0 | –10M |
| +30d | 10M | 8M | ≤8M | –2M |
| +60d | 10M | 8M | ≤8M | –2M |
(*) Oracle kill-switch triggered → inflation = 0
Even in a disaster, deflation continues for both tokens.
Spread-Fee Policy for MM Swaps
| Condition | Fee | Notes |
|------------------------------|--------------------------|--------------------------------------------------------|
| MM disabled | — | No swap, no fee, no burn |
| MM enabled & allowance > 0 | 0.35% of notional | Collected in output asset (LUNC or USTC) |
| Allowance exhausted | — | Swap refused |
-
0.35% keeps arbitrage profitable
-
No double tax – replaces the 0.5% chain burn tax
-
Fee split: 50% burn, 50% Oracle Pool
Oracle Module Compatibility
To reactivate MM with live pricing:
-
Add USTC to the oracle vote set
-
Remove $1 peg assumption
-
Add more CEX/aggregator price feeds
-
Validators must update feeders
-
Feeder binary rewrite is recommended
-
Support modern APIs
-
Add fallback logic
-
Improve error handling
These changes must be deployed before reopening MM. Otherwise, price input will be invalid → MM disabled.
Roadmap
-
Code merge & audit (~500–1,000 LOC)
-
Public testnet with simulated price spikes, quorum drops, burn bursts
-
Mainnet upgrade (two-step):
-
Deploy MM in inactive mode
-
Activate at next epoch boundary post-burn stats verification
-
Dashboards/API:
-
Show
taxburn_30d
-
Show
allowance_remaining
-
90-day post-mortem:
-
Adjust 80% coefficient or
F
only via hard fork
What We Gain
-
Immediate reopening — utility & arbitrage from day 1
-
Guaranteed deflation — must shrink supply every epoch
-
Oracle-safe — 30s lag = okay, 75s lag = MM shutdown
-
Elastic throttle — refill slows as supply shrinks
-
Spread fees:
-
50% burn
-
50% to Oracle Pool
The printer is leashed to yesterday’s bonfire — and the leash gets shorter as the fire dies out.
Voluntary Burns
At present, voluntary burns (e.g., Binance, user burns to burn module terra1...anxu
) are a large portion of total burns.
Proposal:
Exclude voluntary burns from taxburn_30d
calculation to:
-
Keep voluntary burners engaged
-
Avoid reducing minting capacity unnecessarily
Any allowance increase should be discussed after testing and deployment.
Important Notes
-
Burn data cannot be predicted
-
MM behavior depends on assumptions and must be tested
-
Adjustments to parameters like
F
and the 80% ratio should be done on testnet first
StrahCole ✰
Vegas