Skip to main content
This page is the mechanism: how a VOIZ market prices answers, takes liquidity, and settles. A market is a question with named answers. For example: “Will ETH be above $5,000 at year end?” with Yes and No. People buy and sell those answers with a collateral token (USDC on Base and Polygon). When the result is published, the winning answer is worth 1 unit of collateral and the others are worth 0. If the question is ruled not to count, Invalid pays instead. Two facts sit under that:
  1. A complete set. One unit of collateral can always be split into one token of every answer, including Invalid, and those tokens can be merged back into collateral.
  2. One market maker per question. Liquidity providers deposit collateral. The contract holds the answer tokens and quotes prices from that inventory. VOIZ calls this contract OutcomeAmm. There is one per market.
Pictures, descriptions, and resolution rules are metadata. They are not this object. Read them separately.

Complete sets and Invalid

Take a Yes / No market. One unit of collateral splits into one Yes, one No, and one Invalid. If you hold all three, you can merge them back into one unit of collateral at any time, including while the market is still open.
Invalid is the outcome for “this question does not count.” It is part of every complete set so the split and merge always close. Traders cannot buy or sell it. Its price on the market maker is always zero, and it is not included in the named prices that sum to 1. If the question is ruled invalid, Invalid pays 1 and the named answers pay 0. Until then it just sits in the inventory. After resolve, the winner is 1 and everything else is 0. Until then, the complete-set identity still holds even while the market maker’s prices move.

How a trade works

There is one market maker for the whole question, not one per answer. Buying Yes does not mint a full set into the trader’s wallet. The contract splits collateral into Yes, No, and Invalid, pays the trader Yes, and keeps the rest as inventory. The market maker now holds less Yes, so Yes is more expensive. It holds more of the other named answers, so those get cheaper. One buy moves every named price. Nothing else has to rebalance the pool. Selling is the reverse: the trader returns Yes, and the contract pays collateral while putting Yes back into inventory. In code you talk to one answer at a time through a pool handle. That handle is not a second market maker. It is how you quote and swap that answer on the same contract.

Prices

Named answer prices sum to 1. Invalid is not in that sum. The price of each named answer is inverse to how much of it the market maker is holding. Scarce inventory is expensive:
x_i is the market maker’s reserve of answer i. On-chain, the extra Invalid slot is always priced at 0. The SDK’s display prices list named answers only. Those display prices can lag. They are for showing a mid, not for sizing a trade. Size a trade with a quote, then send that size.

Starting the market

You create the question on chain. Until someone deposits the first collateral, there is nothing to trade against. That first deposit does two jobs. It stocks the market maker, and it sets how the inventory is split across named answers. More of the favorite stays in the pool so the market maker can sell it. Extra tokens of the less likely answers are returned to the depositor. Invalid is kept in full and is not given an opening weight. You are not placing a bet by choosing that mix. You are deciding how the starting inventory is split. If you pass the deposit when you create the market, both happen in one factory transaction (approve the factory). If you omit it, the market exists and you add the first liquidity afterwards. Later liquidity providers join whatever mix the pool already has. They do not set a new opening mix.

Liquidity providers

A liquidity provider is not picking Yes or No. You deposit collateral. The contract splits a complete set, keeps a mix of answer tokens, and mints you ERC-20 pool shares. Those shares are a claim on the whole inventory. They are not an NFT and not a perpetual. On a skewed pool, later deposits bind on the heaviest reserve. Lighter answers send leftover tokens back to you. Those returned tokens are a share position, not your pool-share lot. While the market is open, leaving means burning pool shares for a basket of every answer, including Invalid. Merge a complete set if you want collateral back. After resolve, you burn the pool shares and redeem the basket at 0 or 1. This is not delta-neutral. As prices move, you hold more of the answer traders are selling. You are the other side of every trade. Worked numbers: LP calculator. How to call it: How liquidity works.

Fees

The same schedule applies to buy, sell, and redeem. Protocol is 1%. The other cuts are configurable and together cap at 1.5%. SDK defaults: Liquidity providers do not receive a cash stream. Their cut is more inventory. Mark it against cost; do not treat the opening mix as a win/lose bet.

Pause, resolve, and redeem

The creator can pause trading once, before resolve. Buys, sells, and new liquidity stop. Existing liquidity can still be withdrawn. Pause is not the result of the question, and it cannot be undone. When the answer is known, the admin publishes it, or a committee reaches its threshold. For Invalid, the outcome index is the number of named answers (the SDK’s admin path calls reportInvalid). Check that you are allowed to resolve first. Trading stops at resolve on purpose. After payouts are set, every named share is worth exactly 1 or 0. If the market maker still quoted 0.62 next to a 1-or-0 redeem, traders would buy the cheap winner or dump the expensive loser and empty the inventory. Buys and sells revert once the result is on chain. Then:
  • Named winning tokens → redeem for collateral.
  • Pool shares → redeem the basket for collateral.
  • Leftover named tokens from liquidity (the ones sent back when you deposited) → redeem as shares, not as pool shares.
While the market is still open there is no 1-for-1 payout on a single answer. Open liquidity exit is the token basket, then merge if you hold a complete set. Fee income from traders only exists between the first deposit and resolve. A market that settles quickly may do almost no volume relative to the inventory you posted. Leaving the market maker open after resolve would be worse: the inventory itself would be picked off.

What this is not

Not one Uniswap pool per answer. Not Position Manager NFTs. Not a rebalancer that trades complete sets through independent pools. Not an order book.

In the SDK

Next

Create a market · How liquidity works · Quote a trade