Skip to main content
VOIZ is a prediction market your community can feel. Under the hood it is two pieces:
  1. A complete set — one unit of collateral is always named outcomes + Invalid.
  2. One OutcomeAmm per market — LPs are the book. Named prices satisfy p_i ∝ 1/x_i.
You launch a question. People trade. Settlement stays on-chain.

The peg

Split and merge anytime you hold the full set. After resolve, the winner is 1 and the rest are 0. Until then, that identity is true on Conditional Tokens even as AMM mids move.

The book

Each market clones one OutcomeAmm. Named outcomes trade against that AMM. Invalid is held for split/merge. On-chain OutcomeAmm.prices()[numOutcomes] is always 0; market.prices().rows does not include that slot. Buy/sell of Invalid reverts. Spot prices (1e18) over named outcomes:
x_i is the AMM’s reserve of outcome i. Named prices sum to 1. Invalid is not in that sum. A buy of Yes is not minting a set into the trader’s wallet. The AMM splits collateral, pays out Yes, and keeps the rest of the set as inventory. Yes reserve falls; other named reserves rise. Yes’s price goes up; the others go down. No separate rebalancer is required. How LPs work.

Who gets paid

totalFeeBips = 100 protocol + lpBips + creatorBips + referrerBips. Variable cuts (lp + creator + referrer) cap at 150 bps. SDK defaults: LP 80, creator 50, referrer 20. Same schedule on buy, sell, and redeem. LPs do not get a USDC stream. Their cut is inventory. Mark-to-market vs cost is the LP book. Worked numbers: LP calculator.

From spark to settled

  1. CreatecreateMarket. Pass seedWei + oddsBps for create-and-seed in one factory tx (approve the factory). Omit seedWei for an empty book.
  2. Seed — if you did not seed on create: market.seed (addFunding with opening odds, Invalid = 0).
  3. Trade — people buy / sell one named outcome at a time.
  4. Resolve — payouts are published. Named shares are now 0 or 1.
Trading stops at resolve on purpose. buy / sell revert Resolved once Conditional Tokens has a payout denominator. A live curve quoting 0.62 while redemption is 1 or 0 is free arb on LP inventory. After resolve, /chart pins the winner at 100 and losers at 0. Periodic price snapshots skip resolved markets. Creators can one-way pauseTrading (OpenZeppelin Pausable) before resolve; buy/sell/addFunding stop, removeFunding and redeem stay open. Outcome shares: market.redeem. LP shares after resolve: market.redeemLp (burns pool shares, redeems the basket to collateral). Open-market LP exit is still removeFunding (token basket, not cash).

What this is not

Not one Uniswap pool per outcome. Not PositionManager NFTs. Not a rebalancer that trades complete sets through independent books. Not an order book. Next: liquidity · trade