Glossary
Key terms and definitions for the PredictionLabs protocol.
Assertion - A claim about which outcome won a market. Used by UMA-based resolvers (UMAResolver, KalshiResolver). Submitted to UMA's Optimistic Oracle with a bond. If no one disputes within the liveness window, it's accepted as truth. Not used by PolymarketResolver (which reads payouts directly from the CTF).
Bond - USDC deposited when asserting an outcome. Minimum 750 USDC (or UMA's current minimum, whichever is higher). Refunded if correct. Forfeited if disputed and wrong.
CollectionId - CTF internal identifier for a set of outcome tokens. Derived from conditionId and indexSet. Used to compute positionId.
ConditionId - The unique identifier for a market. Derived from CTF.getConditionId(oracle, questionId, outcomeSlotCount). Deterministic - same inputs always produce the same conditionId.
CTF (Conditional Token Framework) - Gnosis protocol for creating and managing outcome tokens. ERC-1155 standard. Handles token minting (via splitPosition), redemption (redeemPositions), and payout reporting (reportPayouts).
DVM (Data Verification Mechanism) - UMA's decentralized voter network. Resolves disputes when an assertion is challenged.
FillAmount - Number of outcome token shares to trade when matching two orders. Uses 6 decimals (same as USDC). 100e6 = 100 shares.
IndexSet - Bitmask identifying which outcome tokens to interact with. For binary markets: 1 (binary 01) = YES tokens, 2 (binary 10) = NO tokens. Used in CTF's splitPosition and redeemPositions.
KalshiResolver - Resolver module that resolves markets using Kalshi event tickers via UMA's Optimistic Oracle. Asserts the Kalshi outcome and settles through UMA's liveness/dispute mechanism.
Liveness Window - The period after an assertion is submitted during which it can be disputed. Duration varies by resolver (e.g., 2 hours for UMAResolver). If undisputed, the assertion settles and the market resolves.
Maker - The address that placed an order. Only the maker can cancel their own order.
NegRisk (Negative Risk) - A pattern for decomposing multi-outcome questions into independent binary markets. "Who wins?" with N candidates becomes N separate "Will X win? YES/NO" markets.
Oracle - Not a single protocol-wide contract. In V2, each market has a resolver that acts as its oracle. The MarketFactory is the CTF oracle (calls reportPayouts), and resolvers call factory.resolveMarket() to trigger it.
OutcomeIndex - Zero-based index identifying an outcome. In binary markets: 0 = YES, 1 = NO.
OutcomeSlotCount - Number of possible outcomes. 2 for binary markets. Up to 255 for markets created directly through MarketFactory, up to 64 for NegRiskAdapter markets.
PolymarketResolver - Resolver module that reads payout data from already-resolved Polymarket conditions and uses it to resolve the corresponding PredictionLabs market.
PositionId - The ERC-1155 token ID for a specific outcome token. Derived from CTF.getPositionId(collateralToken, collectionId). This is what you pass to ctf.balanceOf(user, positionId) to check token holdings.
Price - On the USDC scale. 1e6 = $1.00 = 100% probability. Valid range for orders: 1 to 999999.
PRICE_SCALE - 1e6. The denominator for price calculations. Matches USDC's 6 decimals.
QuestionId - Hash of the market question and market count. keccak256(abi.encodePacked(question, marketCount)). Used with the oracle address and outcome count to derive conditionId.
Resolver - A contract that resolves a specific market. Chosen by the market creator at creation time. Calls factory.resolveMarket(conditionId, payouts) to finalize the outcome. Examples: UMAResolver, KalshiResolver, PolymarketResolver. Cannot be changed after market creation.
Side - Whether an order is a BUY (deposit USDC, want tokens) or SELL (deposit tokens, want USDC).
VOID - A special resolution where no outcome wins. All token holders get equal pro-rata refunds. Triggered by asserting type(uint256).max or by forceVoid after timeout.