Implied probability
Market prices represent implied probability. A YES token trading at 45¢ implies roughly a 45% chance the outcome occurs. YES + NO prices should sum to approximately $1.00 (plus the overround fee).
The AMM venue
Most markets today trade through an automated market maker (AMM) — a pool of YES and NO tokens that sets prices based on supply and demand.
| Property | Behavior |
|---|
| Pricing | LS-LMSR cost function; trades priced by ΔC |
| Legacy | Constant-product (CPMM) pools are being phased out |
| Swap fee | 0.3% retained in the pool (LP profit) |
| Slippage | Larger trades move the price more |
When you place a prediction:
- USDC is minted into YES + NO tokens (fees skimmed).
- You swap away the side you do not want.
- The AMM price updates for the next trader.
LS-LMSR in depth
ezpz.fi prices AMM trades with LS-LMSR — liquidity-sensitive Logarithmic Market Scoring Rule (Othman, Sandholm, Pennock, Reeves, EC 2010). It is a cost-function market maker: the pool tracks how many outcome tokens it has sold and charges USDC equal to the change in a convex cost function C(q).
Compared to a static LMSR (fixed liquidity parameter b), LS-LMSR lets depth grow with open interest. More tokens outstanding → larger effective liquidity → smaller price impact per dollar traded. The trade-off is that vig (house edge) is embedded in the pricing rule rather than added as a separate fee on top.
State
Each pool tracks binary quantities (in micro-token units):
q=(qyes, qno)
These are the net YES and NO tokens sold by the pool since inception, including the maker’s seed quantities. There is no reserve-ratio formula like x⋅y=k.
Liquidity parameter
Liquidity scales with total outstanding quantity T=qyes+qno:
b(q)=α(qyes+qno)=αT
where α>0 is fixed at pool creation. When α is larger, the pool is deeper (more vig, less slippage). At uniform prices the total overround is approximately:
pyes+pno=1+2αln2
So a target vig of v cents implies:
α≈2ln2v
(e.g. v=0.05⇒α≈0.036 for a ~5¢ overround at even odds).
Cost function
The pool’s cost function is the LS-LMSR log-sum-exp form:
C(q)=b(q)ln(eqyes/b(q)+eqno/b(q))
Numerically stable equivalent (used on-chain): let m=max(qyes,qno), d=m−min(qyes,qno), and b=αT. Then:
C(q)=m+bln(1+e−d/b)
Only the difference d/b is exponentiated, which keeps fixed-point math safe at large T.
Trade pricing algorithm
Trades are not priced at a displayed marginal quote. The economic rule is always the cost-function difference.
Buy Δ tokens of side i (e.g. YES):
cost=C(qi+Δ, q¬i)−C(qyes,qno)
Sell Δ tokens of side i:
payout=C(qyes,qno)−C(qi−Δ, q¬i)
On-chain, USDC amounts are rounded in the pool’s favor (buys rounded up, sells rounded down).
Because C is convex, ΔC per token rises as you trade more in one direction — that is AMM slippage.
Marginal prices (display only)
The marginal price of side i is the partial derivative:
pi=∂qi∂C
For binary LS-LMSR, the gradient includes an extra α term because b depends on q. In scale-free coordinates u=qmax/T and w=e−d/b:
pmax=u+g+(1−u)1+w1−w,pmin=u+g−u1+w1−w
where g=αln(1+w).
Properties:
pyes+pno=1+v(q)≥1
The excess v(q)≥0 is embedded vig — it accrues to pool NAV, not a separate skim. At heavy skew the favorite’s raw marginal price can exceed $1; charts clamp display to (0,1) but trades still use ΔC.
Implied fair probability
When a maker seeds at “60¢ YES”, that means the vig-free softmax probability, not the vig-inclusive marginal:
σyes=eqyes/b+eqno/beqyes/b=1+e−(qyes−qno)/b1
This σ is what “60% odds” means in the authoring UI. Raw marginals pi sit at or above σi — the spread is the rule’s built-in margin.
Seeding at chosen odds
At pool creation the maker supplies seed USDC S and declared probability p∗ (in basis points). The program derives initial (qyes,qno) so that:
- σyes≈p∗ (within one price tick), and
- Worst-case loss is bounded by the seed.
Let P=max(p∗,1−p∗), logit L=ln(P/(1−P)), and ρ=(1−P)/P. Define:
K=L+ln(1+ρ),T=αKS
Then assign total quantity T across sides with skew αTL=qmax−qmin, putting qmax on YES when p∗≥21.
The worst-case loss at the seed state is:
WCL(q0)=C(q0)−min(qyes,0,qno,0)=αTln1−P1≤S
That is why seed USDC is the maker’s collateral against subsidy — the pool cannot lose more than the seed in the adversarial orthant bound.
Why depth grows with volume
Static LMSR keeps b fixed, so a popular market eventually becomes too shallow — each marginal trade moves prices sharply.
LS-LMSR ties b=αT to open interest. As players buy YES or NO:
T=qyes+qno↑⇒b↑
A larger b flattens the cost curve locally, so the same $ stake moves prices less after the market has absorbed more flow. Depth is endogenous to activity, not a fixed constant set only at launch.
| Quantity | Effect on depth |
|---|
| More trading / higher T | Larger b → less slippage per $ |
| Higher α at creation | Deeper at every T, but more vig (2αln2 at even odds) |
| Maker seed S | Caps worst-case subsidy; does not cap how large T can grow |
What you see in the UI
| Display | Math object | Notes |
|---|
| Current price | Clamped marginal pi or implied σ | Orientation: buying YES raises YES price |
| Trade preview | Exact ΔC for your stake | Includes slippage + embedded vig |
| Fees row | Platform/maker fees on mint path | Separate from LS-LMSR vig in C |
See Architecture for on-chain program layout and Venues for AMM vs CLOB.
Liquidity
Makers seed initial liquidity when publishing a market. The pool holds balanced YES/NO reserves. LP providers earn swap fees from every trade regardless of who wins the market.
If you remove liquidity after a market resolves, tokens on the losing side are worthless. The UI warns before LP exit on resolved markets.
Price display
On market and event pages you see:
- Current price — best available AMM price for each side
- Trade preview — stake, fees, shares received, and potential payout before you confirm
- Charts — price history where available (sports and crypto events)
CLOB pricing (future)
Order-book markets will show bid/ask spreads and depth instead of AMM curves. CLOB trading is not available to players yet. See Venues.