OpinionMarketCap.
A Hardened Marketplace
for Opinions.
OpinionMarketCap (OMC) is a decentralized marketplace that lets anyone mint a question and have its current answer continuously discovered by an on-chain market. Where free platforms surface the loudest take, OMC surfaces the one with the most money behind it. Where centralized search ranks by SEO and ads, OMC ranks by economic conviction.
This paper describes the protocol as deployed on Base mainnet in May 2026: a modular 5-contract system, V3 dynamic pricing with market-regime simulation, and V4 exit mechanics (Self-Exit + Vacant Slot Reclaim) that prevent any participant from being permanently trapped in a stale position. Together they create a self-sustaining ecosystem where information providers — not intermediaries — capture the value they create.
Supersedes v2.0 (Jan 2025) and v1.0 (Apr 2025). For the changelog see Chapter 07.
Motivation.
The internet's opinions are free. That's the problem. A free opinion is a noisy opinion — gameable by bots, SEO, engagement farming, and pure social pressure. OMC asks a simpler question: what does a market actually believe?
The $20 bet
My kids couldn’t agree which Harry Potter book was best. The elder said: ‘I’ll give you $20 if you agree with me.’ The younger took the bill. The next day they both agreed on Prisoner of Azkaban. Money settled a debate facts never could. That was the spark.
From spark to protocol
- A $1 economic commitment to an answer is more informative than 10,000 likes — because likes are free and money isn’t.
- A market for opinions doesn’t need oracles, judges, or moderation — the price IS the verdict.
- A perpetual market — one that never resolves — captures the way real arguments live. "Best CRM" gets re-litigated every year for a decade.
- A protocol with exit mechanics — V4 Self-Exit + Vacant Reclaim — ensures no participant is trapped if a market goes stale.
OMC is the operationalisation of that insight: a question is a market, the current answer is its price, and the next person to disagree must pay for the privilege of being heard.
Introduction.
Existing platforms determine information quality through opaque algorithms, centralized moderation, or ad-driven incentives that prioritise engagement over accuracy.
Traditional limitations
- Reliance on algorithmic interpretation of content quality
- Vulnerability to SEO manipulation and content farms
- Misaligned incentives: advertisers — not information providers — capture value
- Centralized control of ranking and visibility
- No mechanism to settle perpetual debates (best CRM, GOAT athlete, best pizza)
What OMC does differently
- Information value is set directly by market forces (price = consensus)
- Question creators earn 3% royalty on every trade — forever
- Answer owners capture 95% of every flip
- Communities can pool funds to acquire high-value answers (PoolManagerV2)
- No platform extraction beyond a 2% fee
- Stuck positions can always exit — V4 introduces a hard guarantee
| Platform | Question | Answer | Ranking | Value Distribution |
|---|---|---|---|---|
| "Best programming language 2025?" | Multiple SEO-driven results | Algorithm + Ads | Ad revenue to Google | |
| OMC | "Best programming language 2025?" | "Python (AI ecosystem)" | Market price · 35 USDC | 95% owner · 3% creator · 2% platform |
2.1 · OMC is not a prediction market
Prediction markets (Polymarket, Kalshi, Augur) and OMC share one ancestor: pricing information via wagers. But they solve different problems and the surface-area gap is three orders of magnitude wide.
| Dimension | Prediction markets | OMC |
|---|---|---|
| Market size | ~500 active markets (curated) | Unbounded — every question is a market |
| Market lifespan | Resolves ONCE, then dies | Perpetual — never resolves |
| Outcome type | Binary Yes/No (or short enum) | Open-text answer; current king is consensus |
| Resolution | External oracle / committee | Market itself (price IS the answer) |
| Creation | Platform-gated | Permissionless — mint in 60s |
| Addressable scale | ~500 questions you can bet on | 100M+ keywords on Google Ads alone |
What that 200,000× gap unlocks: opinion topics that don’t resolve to an event (best CRM, GOAT athlete, best pizza, most overhyped CEO) can have permanent on-chain consensus. Brands can be the answer. Communities can collectively own a take. Creators mint markets and earn royalties forever. None of this works under "binary outcome, expires when the event ends."
System Overview.
OMC is built as a modular 5-contract system on Base. At its core are three primitives: Questions, Answers, and Pools.
The market unit.
Each question has a unique ID, a creator who pays a flat 2 USDC spam fee + locks an initial price (1–100 USDC) as recoverable stake, and a creator address that earns 3% royalty on every future trade — forever.
60 chars question · 60 chars answer · 120 chars description · 1–3 categories
The contested slot.
The current answer is the market-validated consensus. Ownership transfers via purchase at NextPrice — computed dynamically by PriceCalculator. Full history is on-chain. Ownership transfer (gifting) is free and supported.
Collective conviction.
Multiple users co-fund the purchase of an expensive answer. Pool creators pay 5 USDC; contributions are free (no per-contributor fee). Rewards distribute proportionally. V2 adds stale-exit dissolution (Ch. 05).
Modular architecture
OMC is deployed as a 5-contract system + 3 linked libraries. Each contract is UUPS upgradeable, role-gated, and under the 24 KB Base bytecode limit.
| Component | Type | Role |
|---|---|---|
| OpinionCoreV4 | Contract | Markets · trades · self-exit · reclaim |
| PoolManagerV2 | Contract | Pool lifecycle · stale-exit dissolution |
| FeeManager | Contract | Accumulated fees · creator royalties |
| OpinionAdmin | Contract | Parameter governance · moderation |
| OpinionExtensionsV2 | Contract | 40 categories · extension slots |
| SelfExitLib | Library | Exit math + state transitions (V4) |
| PriceCalculator | Library | Market-regime price calculation (V3) |
| ValidationLibrary | Library | Input bound checks |
Economic Model · Dynamic Pricing.
V3 replaced the original fixed +10% pricing with a market-regime simulator. Each trade samples one of four regimes weighted by topic activity, producing realistic price moves that respond to demand.
4.1 · Market regimes
Each new trade calls PriceCalculator.calculateNextPrice which samples one of four regimes:
| Regime | Base prob. | Price move | Behavior |
|---|---|---|---|
| CONSOLIDATION | 25% | −10% → +15% | Range trading, slight bullish bias |
| BULLISH TRENDING | 60% | +5% → +40% | Steady gains, most common regime |
| MILD CORRECTION | 15% | −20% → +5% | Limited pullbacks |
| PARABOLIC | 2% | +40% → +80% | Extreme moves on hot topics (capped at +80%) |
Regime weights adapt to topic activity:
| Activity tier | Threshold | Adjusted weights |
|---|---|---|
| COLD | < 5 trades | 40% Consolidation · 45% Bullish · 2% Parabolic |
| WARM | 5–15 trades | Base weights (above) |
| HOT | 15+ trades | 15% Consolidation · 62% Bullish · 10% Parabolic |
4.2 · Trading is unrestricted
OMC is built to stimulate activity, not throttle it. There are no per-block trade caps, no per-user rate limits, and no minimum trade size. Anyone can submit answers as fast as they want, as often as they want, with any price the contract accepts.
What the protocol does protect is the integrity of the regime detector — so a single bot can’t fake "this market is HOT" by spraying tiny trades. The guards below apply only to how each trade is weighted in the COLD / WARM / HOT calculation; they never block a trade.
| Guard | Value | What it actually does |
|---|---|---|
| MIN_ACTIVITY_VALUE | $10 USDC | Trades below $10 still execute — they just don’t count toward the activity tier |
| MAX_USER_ACTIVITY_PER_DAY | 3 | Only the first 3 trades/user/day weight the activity score (more trades still execute) |
| MAX_USER_ACTIVITY_SHARE | 40% | Any single user contributes at most 40% to a market’s activity score |
| MIN_USERS_FOR_HOT | 1 | Even a 1-on-1 bidding war can trigger the HOT regime — no quorum gate |
| absoluteMaxPriceChange | admin-tunable | Cap on per-trade price delta (admin-set) |
| PARABOLIC_MAX_GAIN | +80% | Parabolic regime ceiling — prevents guaranteed-profit setups |
Entropy. NextPrice mixes 14 sources (block.timestamp, prevrandao, opinionId, sender, balance, nonce, trade history…) — non-deterministic, non-replayable. This is why V4 disables the legacy V1 anti-MEV rate limit and the rapid-trade fee penalty: when the next price is unpredictable, there’s no profitable sandwich attack to defend against (Ch. 08).
4.3 · Fee distribution
On every trade, the buyer pays price. It splits 3 ways:
Worked example — $100 trade. Buyer pays $100. Previous owner receives $95. Question creator gets $3 royalty (claimed via FeeManager.claimAccumulatedFees). Platform fee $2 accrues to treasury. MEV penalty in V4: 0% (admin-tunable).
4.4 · Pool economics
- Pool creation: 5 USDC fee (split: platform + question creator)
- Contribution: free (0 USDC fee)
- Target: NextPrice (set automatically by PriceCalculator at execution time)
- Max pool duration: 60 days
- Pool reward distribution: proportional to contribution at sale time (95% of resale)
- Early exit: 20% penalty (prevents pump-and-dump)
V4 Exit Mechanics. Self-Exit & Vacant Reclaim.
V4 (May 2026) introduces two mechanisms that guarantee no participant is permanently trapped on a stale slot — and that a stale slot doesn't drag a market dead. Both are admin-toggled feature flags.
5.1 · Self-Exit (for the current king)
After the configurable cooldown (production setting: 60 seconds solo · 24 hours pools · 72 hours extended pools), the answer owner can call selfExit(opinionId) to walk away. Refund = 80% of the locked stake; penalty 20% splits 50/50 between creator and platform.
In V4, lockedStake is the bootstrap amount the question creator set at mint (e.g. $5) and stays constant through normal trades — the math balances exactly. Self-Exit therefore refunds 80% of that bootstrap amount, not 80% of what the current owner paid. It’s a recovery floor — not a position refund. Reclaim (5.2) does reset the stake to ~95% of the reclaim price.
5.2 · Vacant Slot Reclaim (for the next bidder)
When the king exits, the slot becomes vacant with currentAnswerOwner = address(0). The next claimant calls reclaimVacantSlot(opinionId, …) and pays the reclaim price = max(50% × lastPrice, $2 floor). 95% of that payment becomes the new lockedStake — so future Self-Exit refunds scale with the reclaim price.
5.3 · Pool stale-exit dissolution (V2)
PoolManagerV2 mirrors the same logic at the pool level. Large holders (≥10% contribution) can trigger a pool exit after 24 hours; any contributor can trigger after 72 hours. Pool funds redistribute proportionally with the same 20% penalty.
5.4 · Parameter table
| Parameter | Production | Bounds |
|---|---|---|
| soloCooldown | 60 s | 60s — 90 days (admin-tunable) |
| poolCooldown | 24 h | 60s — 90 days |
| poolExtendedCooldown | 72 h | ≥ poolCooldown · ≤ 90 days |
| exitPenaltyBps | 2000 (20%) | 500 — 5000 |
| penaltyCreatorShareBps | 5000 (50/50) | 0 — 10000 |
| reclaimDiscountBps | 5000 (50%) | 1000 — 9000 |
| largeHolderThresholdBps | 1000 (10%) | 1 — 5000 (pool-only) |
| minReclaimPrice | 2 USDC | > 0 |
| spamFee | 2 USDC | ≤ 100 USDC |
MIN_COOLDOWN = 60 seconds (constant) is the contract floor — production runs at that floor for solo exits so the 20% penalty (not a multi-day wait) is the anti-grief lever. Pool cooldowns escalate (large-holder window then public window) because pools are a commitment device — a single contributor shouldn't be able to instantly torpedo the rest.
Key Roles.
Four participant roles, each capturing value in different ways.
6.1 · Question Creators
- Earn 3% of every future trade on their question — forever
- Earn 50% of the 20% Self-Exit penalty (= 10% of locked stake) whenever a king exits their question
- Set initial framing through question + initial answer + initial price
- Can attach descriptions and external links (120 char description · URL)
- May enhance with extension content (V2 ExtensionsV2)
6.2 · Answer Owners
- Hold the contested slot — and the narrative; every visitor reads YOUR take first
- Receive 95% of the next purchase price when their answer is bought
- Establish on-chain reputation through ownership history
- Can be EOAs, smart wallets, or pools
- Can Self-Exit after cooldown if the slot goes stale
6.3 · Pool Creators & Contributors
- Coordinate collective conviction at price points individuals can’t reach
- Contributors pay no per-contribution fee (free entry)
- Rewards distribute by contribution percentage at sale time
- Stale pools dissolve through V2 mechanism (10% holder triggers @ 21d · any contributor @ 35d)
6.4 · Governance Roles
- DEFAULT_ADMIN_ROLE — root authority. Rotatable via transferFullAdmin() across all 5 contracts in a single transaction.
- ADMIN_ROLE — parameter updates and contract upgrades (72-hour timelock on upgrades)
- MODERATOR_ROLE — opinion deactivation and answer moderation
- TREASURY_ROLE — treasury rotation (48-hour timelock + confirmation)
- CORE_CONTRACT_ROLE — fee-accrual gateway granted to OpinionCore by FeeManager
Technical Architecture.
The monolithic V1 contract (25.1 KB) exceeded the 24 KB Base bytecode limit. The May 2026 system splits responsibilities across 5 UUPS-upgradeable contracts and 3 linked libraries.
7.1 · Contract sizes
| Contract | Size (KB) | UUPS upgradeable |
|---|---|---|
| OpinionCoreV4 | 19.0 | ✓ |
| PoolManagerV2 | 18.1 | ✓ |
| OpinionExtensionsV2 | 13.2 | ✓ |
| FeeManager | 10.5 | ✓ |
| OpinionAdmin | 9.6 | ✓ |
| ValidationLibrary | 0.02 | — library |
7.2 · Version history
| Version | Date | Changes |
|---|---|---|
| V1 | Jan 7, 2025 | Initial deployment of modular system |
| V2 | Jan 12, 2025 | Fixed fee-transfer bug; added pause/unpause + emergencyWithdraw |
| V2.1 | Jan 14, 2025 | Empty-categories validation fix (ExtensionsV2) |
| V3 | Jan 15, 2025 | Dynamic pricing — PriceCalculator with market regimes |
| V4 | May 6, 2026 | Self-Exit + Vacant Reclaim; PoolManagerV2 stale-exit dissolution |
7.3 · Base Layer 2
- Low transaction costs (sub-cent gas)
- High throughput (thousands of tx/s)
- Ethereum security guarantees via OP Stack fault proofs
- USDC-native; Coinbase on/off-ramp integration
| Chain | Tx (submit answer) | Gas units | Cost (May 2026) |
|---|---|---|---|
| Ethereum | submitAnswer #567 | 120,000 | $3.75 |
| Polygon | submitAnswer #567 | 120,000 | $0.12 |
| Arbitrum | submitAnswer #567 | 120,000 | $0.03 |
| Base | submitAnswer #567 | 120,000 | $0.004 |
Security.
OMC ships with layered protections. V4 hardens against price manipulation, enforces non-custodial fund flows, and gives admins emergency control via pause + role separation.
8.1 · Price manipulation defenses
- 14 entropy sources for NextPrice — block.timestamp, prevrandao, opinionId, sender, balance, nonce, trade history, etc.
- Configurable max price-change (absoluteMaxPriceChange) prevents extreme single-trade moves
- Parabolic regime capped at +80%
- Minimum price floors prevent devaluation below 1 USDC
8.2 · Anti-MEV
Original V1 included a per-block trade limit and a rapid-trade fee penalty. Both are disabled by default in V4 (maxTradesPerBlock = 0 = unlimited; mevPenaltyPercent = 0%) because V3 dynamic pricing — non-deterministic, non-replayable — already neutralizes the value of sandwich attacks. Both remain admin-tunable.
| Parameter | V1 (apr 2025) | V4 (may 2026) | Notes |
|---|---|---|---|
| MAX_TRADES_PER_BLOCK | 3 | 0 (unlimited) | V3 entropy makes MEV unprofitable |
| mevPenaltyPercent | 20% | 0% | Admin-tunable, retained for emergencies |
| Cooldown (Self-Exit) | — | 14d / 21d / 35d | New in V4 — prevents rage-quit |
8.3 · Fund security
- Non-custodial — contract holds only locked stakes and accumulated fees
- Pull pattern — creators withdraw fees via claimAccumulatedFees()
- ReentrancyGuard on every external state-mutating function
- Checks-Effects-Interactions on every transfer
- Emergency pause + emergencyWithdraw (admin-only, only when paused)
- SafeERC20 throughout (no naked transfer / transferFrom)
8.4 · Treasury & governance hardening
- Treasury changes require 48-hour timelock + confirmation
- Contract upgrades require 72-hour timelock
- Role-based access via OpenZeppelin AccessControl
- transferFullAdmin() for single-call admin rotation across all 5 contracts
Community Features.
OMC is designed to make information communities legible, durable, and tradable.
9.1 · Pool coordination
- Shared goals around specific answers
- Transparent contribution tracking on-chain
- Collective ownership of high-value slots
- Proportional reward distribution at resale
- Stale-exit dissolution (V2) — no pool stays trapped
9.2 · Information provenance
Every answer change writes a full history record on-chain: timestamp, owner address, price paid, answer text, description, link.
| # | Date | Answer | Owner | Price |
|---|---|---|---|---|
| 1 | Jan 2025 | "Solidity with formal verification" | security_dev.base.eth | $1.00 |
| 2 | Feb 2025 | "Rust + Solana support" | solana_builder.base.eth | $2.30 |
| 3 | Mar 2025 | "Vyper for EVM contracts" | vyper_expert.base.eth | $8.20 |
| 4 | Apr 2025 | "Move language (Sui / Aptos)" | move_advocate.base.eth | $14.50 |
| 5 | May 2026 | "Solidity + AI auditing" | current_owner.base.eth | $32.10 |
9.3 · Categories
40 categories shipped at launch — covering tech, sports, music, food, crypto, local knowledge, brands, and culture. New categories require ADMIN_ROLE via addCategoryToCategories().
Applications.
A market for opinions is also a market for brand positioning, prediction-style consensus, expert reputation, and creator monetisation.
- Perpetual consensus on expert questions
- Real-time opinion aggregation
- Reputation through ownership history
- Crowd-sourced knowledge curation
Luxury houses competing for “Most prestigious watch?”. Advertising with built-in exit liquidity — a marketing spend becomes a potential investment.
DAOs pooling capital on contested takes. Crypto Twitter backing positions with bags. Collective conviction priced and resolvable on-chain.
Mint questions. Earn royalties forever on every flip. Creator ownership economy — not just a creator economy.
Deployed Contracts.
Everything described in this paper is live on Base mainnet (chain ID 8453) and verified on BaseScan. Addresses below are proxies — readable storage and method ABIs included.
OpinionCoreV4
Main markets · self-exit · reclaim0xAdc44c00dc6A45B8776fDDBB1f977950838EafC1PoolManagerV2
Collaborative pools · stale-exit0x34537a749F4b16E7542a59e5322338372A6a1E3cFeeManager
Fee accumulation · royalty claims0x5dc8502Db4ed7Fb3689703F5B8D4fa1F2bD305AAOpinionAdmin
Parameter governance · moderation0x202Bc4E3aB50147212bee0506bF5f2B544333b5DOpinionExtensionsV2
Categories · extension slots0x2eD0DC454043A768cB3FA7e480c41Be7b8954394SelfExitLib
Library · exit logic (V4)0x30c465f5772dc86555d37fE1376218Cbf79a4D93PriceCalculator
Library · dynamic price (V3)0xb6cEB6F62e929aC99068255AA3E380F01Ed69cB7ValidationLibrary
Library · input validation0x95a60C951BCB6E77644081f0501c9d2dDDfDb681USDC (Base)
Trading currency0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913Treasury: 0x67902d93E37Ab7C1CD016affa797a4AF3b53D1a9 · Admin: 0x9786eDdf2f254d5B582DA45FD332Bf5769DB4D8C