Dual-Liquidity Architecture

KUSD and Liquidity

KangarooDeFi separates every KUSD token into either "backed" (minted from real USDT deposits) or "virtual" (protocol-only AMM seed). This separation is what makes oracle-free sentiment markets solvent.

TradersCreatorsDevelopers
Oracle-Free

No external data feed. Markets close on a schedule and archive final sentiment — no oracle dependency, ever.

Dual Liquidity

Virtual KUSD seeds equal initial depth. Backed KUSD from real deposits defines actual exit capacity. The two are always tracked separately.

Hardened Risk Controls

25% max price impact, 50% virtual-seed buy cap, and optional trade cooldowns bound single-actor displacement on-chain.

What KUSD Is

KUSD is the protocol's native stablecoin. It is a simple ERC-20 deployed as KangarooUSD and backed 1:1 by USDT held in the contract. Key properties:

  • Decimals: 6 (same as underlying USDT).
  • Peg: 1 KUSD = 1 USDT, redeemable at any time.
  • Minting: call deposit(usdtAmount) — transfers USDT in, mints KUSD to caller.
  • Burning: call withdraw(kusdAmount) — burns KUSD, returns USDT from backedSupply.
  • Protected pairs: AMM pairs are marked in the KUSD contract; direct KUSD transfers to those pairs are blocked unless routed by the router.

Backed vs. Virtual Supply

KUSD tracks two supply buckets separately:

  • backedSupply — real KUSD minted from USDT deposits. Every unit is withdrawable by its holder for USDT.
  • virtualSupply — KUSD minted by the router exclusively to seed AMM pairs. Never issued to users, never withdrawable, never counted as user collateral.

When a market is created, the router calls kusd.mintVirtual(amount, pair) to seed each answer pool. This increases totalSupply and virtualSupply, but not backedSupply. When the market closes, the virtual amount is burned via kusd.burnVirtual, reducing virtualSupply back.

Solvency guarantee

Because virtual KUSD is tracked separately and its seed is burned at close, users can never redeem more KUSD than was deposited by real participants in that answer pool.

Virtual Liquidity Cap

The owner sets a virtualLiquidityCapKusdPerMarket. Creators cannot request more virtual KUSD than this cap when creating a market. A separate maxVirtualSupply on the KUSD contract limits the total outstanding virtual supply across all live markets.

Larger virtual liquidity = more initial AMM depth = smaller price impact per trade = harder to displace sentiment with a single large trade. Creators choose within the cap, trading off AMM stability against capital efficiency of their virtual seed.

Backed Exit Accounting

For each answer pool, the router tracks:

  • backedKusdIn — total real KUSD received from all user buys of that answer.
  • backedKusdOut — total gross KUSD already paid out through controlled sells.
  • backedAvailable = max(backedKusdIn − backedKusdOut, 0) — the current pool-level backed KUSD that KSwap can pay out.

KSwap checks backedAvailable before executing any sell. If the AMM quote would exceed backedAvailable, a partial execution is offered. This ensures virtual KUSD cannot be drained by sellers — only real KUSD that entered from buyers can leave as sell proceeds.