ProtocolEnglish
Trading and pricing
The curve, buys, sells, marginal price vs exit value
The curve
One formula governs every market. N is the number of claims in circulation:
price(N) = N² / 720,000,000 USD for the next claim
reserve(N) = N³ / 2,160,000,000 USD held by the market at that supplyThe constants come from one anchor: one claim costs 5 USD exactly when the reserve holds 100,000 USD, which lands at 60,000 claims. It resolves to an exactly rational constant, c = 1/720,000,000. Nothing is approximated. No fixed-point library, no exponential, no square root in the pricing path. Integer arithmetic only.
A buy of k claims on supply N costs exactly reserve(N+k) − reserve(N). A sale of k claims returns exactly reserve(N) − reserve(N−k). The reserve is always exactly what the curve says it is for the current supply.
What the shape does
Price is quadratic, so reserve is cubic. Early claims are cheap and later claims are not:
| Reserve | Claims outstanding | Next claim costs |
|---|---|---|
| 1 USD | 1,292.6 | 0.0023 USD |
| 1,000 USD | 12,926.6 | 0.232 USD |
| 100,000 USD | 60,000 | 5.00 USD |
| 1,000,000 USD | 129,266 | 23.20 USD |
A position of m dollars opened on an empty market shows 3 × (R/m)^(2/3) times its size at the displayed price once the market reaches reserve R. One dollar shows 6,463 USD at a 100,000 USD reserve. The curve pays out about 6,325 USD for it.
That gap is the next section.
Marginal price and exit value
The price shown for a market is the price of the next claim. It is not the price of your claims.
Selling walks back down the curve: each claim burned lowers the price of the next one. The amount you receive for a whole position is below your claims × displayed price, and the gap widens with your size relative to the market.
Every market publishes both numbers on chain:
marginalPrice(): what the next claim costs.exitValue(account): what this wallet receives by selling everything, right now, fees included.
An interface built on UNPRICED shows both. exitValue exists on chain for exactly this reason.
Buying
buy(claims, maxTotalCost, deadline)You name the claims, a maximum total, and an expiry. The contract re-quotes at execution and reverts on SlippageExceeded above your bound or Expired past your deadline.
totalCost = reserveCost + fee, the fee being 1 % of the reserve cost. The reserve cost enters the reserve. The fee is split. See Fees.
Most traffic goes through the factory:
buyOnMarket(market, claims, maxTotalCost, deadline)Identical economics, identical events, identical guards. The factory routes the payment so a trader approves one contract once instead of approving every market separately. The market re-quotes in the same transaction and applies the minimum, the per-wallet cap and the referral lookup to the real buyer.
Selling
sell(claims, minNetProceeds, deadline)You name the claims to burn, a minimum net amount, and an expiry. netProceeds = grossProceeds − fee, same 1 %.
Selling works at any supply, forever, while the market is not fully paused. No lock-up, no vesting, no window.
The guards
| Guard | Value | Purpose |
|---|---|---|
| Minimum position | 1 USD of reserve cost per buy | A quadratic curve exists so a tiny early ticket wins big. The door is one dollar wide |
| Anti-whale of youth | 1,000 USD of position cost per wallet, while the reserve sits under 20,000 USD | Without it, a 10,000 USD opener holds 46 % of a 100,000 USD market and their exit prints −71 %. With it, the largest early holder sits at 21 % and −38 % |
| Fat-finger ceiling | One buy caps at a very large reserve cost | A typo guard, set far above any real order, crossable in two transactions |
| Slippage bound | Caller-supplied | The contract recomputes the final amount |
| Deadline | Caller-supplied; the interface uses 5 minutes | A signed order does not execute an hour later at a different price |
The anti-whale cap dissolves on its own. Once the reserve touches 20,000 USD there is no limit, forever, and it never returns. It measures net cost basis, so selling gives the room back. A guard that punished someone for changing their mind is a worse guard.
It is a friction, not an impossibility. Splitting across wallets defeats it. It costs gas and effort, and that is the whole of what it costs.
Rounding
One rule, no exception: always in favour of the reserve. A buyer pays the ceiling, a seller receives the floor. Measured dust: 0.0008 USD across 2,000 simulated trades. It makes the reserve safer, never thinner.
This is what makes "the reserve covers every claim ever sold" true by construction.
Pausing
Two levels, held by a pauser role, reversible by the admin alone:
- Buys paused: no new claims mint. Selling stays open. This is the setting for a doubt: holders are never trapped.
- Market paused: buying and selling both stop.
claimFees() is gated by neither. Accrued earnings belong to their recipient, always.