Economics
Curtain is parimutuel: every stake goes into one pot per market, and the winning side splits it by stake. There is no market maker and no price you trade against. The odds on the board are simply the two pools.
The odds
| Quantity | Formula |
|---|---|
| Yes price shown on the board | yes_pool / (yes_pool + no_pool) |
| Payout per 1 USDC on Yes, if Yes wins | (yes_pool + no_pool) x (1 - fee) / yes_pool |
The board changes only when a batch is published, so the odds move in steps, never per bet.
Settlement math
From math.rs, at settlement with the winning side known:
pot = yes_pool + no_pool
fee = floor(pot x fee_bps / 10000)
ratio = (pot - fee) / winning_pool stored as ratio_int + ratio_frac / 2^64, rounded down
payout(stake) = floor(stake x ratio) computed inside Arcium for each winning position
Losing positions are paid zero into their purse. Rounding is always down, so the sum of all payouts never exceeds the pot after fee. The engine's tests fuzz this against the exact rational payout.
Worked example
A market closes with 41,600 USDC on Yes and 38,400 USDC on No, and the fee is 1%.
| Step | Value |
|---|---|
| Pot | 80,000 USDC |
| Fee at 1% | 800 USDC |
| Pot after fee | 79,200 USDC |
| Yes wins: ratio | 79,200 / 41,600 = 1.9038 |
| A 2,500 USDC Yes stake receives | 4,759.61 USDC |
Refunds
When a market is refunded (one side empty, a degraded or late print, or no print submitted within 7 days), every stake goes back in full and no fee is taken. Tickets in a final batch that never reached 5 bettors are refunded too, even when the market itself settles.
The fee
| Parameter | Launch value | Hard ceiling |
|---|---|---|
| Fee | 1% of the pot | 5% (MAX_FEE_BPS = 500) |
Fees accrue in public (Config.fees_accrued) and are swept to the treasury account fixed when the program was initialized.