Caullit Protocol
Whitepaper
A technical and economic overview of the Caullit peer-to-peer prediction protocol: how predictions are created, matched, settled, and disputed on Ethereum.
Version 1.0 · April 2026 · v1 · Ethereum Sepolia testnet · Mainnet: v2
Introduction
Caullit is a peer-to-peer prediction market built on Ethereum. It allows any two people to settle a prediction directly with each other. No order book, no house, no intermediary taking the other side of the bet.
The core thesis: predictions should be settled between people, not against a platform. When you make a prediction on Caullit, a real counterparty accepts it. The smart contract holds both stakes in escrow. When the outcome is known, the winner collects automatically, on-chain.
Key properties
- USDC only. All stakes are denominated in USDC. No price exposure, no gas token risk.
- Non-custodial. Caullit never holds user funds. The escrow contract does. Caullit cannot unilaterally move funds.
- Three-path resolution. At expiry, the oracle runs the resolution method chosen at creation: deterministic (CoinGecko price), Claude-assisted (AI + evidence, confidence ≥ 0.90), or human submission (both parties submit independently). Most bets resolve with no manual step required.
- Dispute system. Either party can dispute an oracle resolution during the 24-hour window. A jury of eligible users (selected by honour score) reviews the case blind and votes.
How It Works: Prediction Lifecycle
Create
A creator fills in a prediction title, resolution source, category, expiry date, and stake amount. They submit a transaction that approves and transfers USDC into the escrow contract. The prediction is assigned a unique on-chain ID derived from its MongoDB document ID.
Open
The prediction is live and visible to all users. Anyone can browse open predictions and choose to take the other side. The odds field determines how much the challenger must stake relative to the creator.
Matched
A challenger accepts the prediction and locks their USDC in escrow. Both stakes are now held by the contract. The prediction transitions to in_progress status and the expiry clock begins.
Expiry → Three-path oracle
At the expiry date, the backend runs the resolution path that was chosen when the bet was created. Path 1 (crypto above/below bets) fetches the CoinGecko historical price and produces a deterministic binary outcome. Path 2 (structured bets with a resolution source) calls Claude with fetched evidence and auto-resolves if confidence is 0.90 or above. Path 3 (structurally weak bets or oracle fallback) opens a 2-hour submission window where both parties independently submit the claimed outcome.
Resolution → Dispute window or human verdict
Bets resolved via Path 1 or 2 enter a 24-hour dispute window. Either party may dispute by posting a 10% bond. No dispute within 24 hours means the outcome is final and the winner is paid. Bets in Path 3 settle based on the submission logic: both agree → settle immediately; both disagree → jury; one submits and window closes → submitter wins; neither submits → refund.
Settled
The smart contract releases the combined stake (minus the 2.5% platform fee) to the winner's wallet. The prediction is marked as resolved.
Smart Contract Architecture
The core contract is CaullitEscrow, deployed on Ethereum Sepolia at:
0xE8fA428e944B903Fa1fda651042c6faaCD58BcBA
Ethereum Sepolia testnet · Full mainnet deployment pending audit
Escrow model
When a prediction is created, the creator's USDC is transferred from their wallet to the escrow contract via ERC-20 approve + transferFrom. The challenger's stake follows the same pattern when they accept. At no point does Caullit hold custody. Only the contract does.
Settlement
The platform calls resolve() on the contract with the winner's address and the outcome. The contract transfers the net payout (total stake minus fee) to the winner and the fee to the Caullit fee wallet.
Fee structure
- Platform fee: 2.5% (250 BPS) on total winnings
- Dispute bond (v1): 10% of creator's stake, posted by the disputing party. Returned if the dispute is upheld. v2 will introduce asymmetric bonds — 10% of each party's own stake — to remove disproportionate friction on asymmetric-odds bets.
Non-custodial guarantee
The contract owner can only call resolve() after expiry. It cannot withdraw funds to an arbitrary address before resolution. If Caullit ceases to exist, a time-locked emergency withdrawal function allows participants to reclaim funds after a defined waiting period.
The Honour System
Juror
≥ 75
Trusted
50–74
Standard
25–49
Risky
10–24
Every user has an honour score between 0 and 100, initialised at 50. It is the primary reputation signal on Caullit and gates access to the jury system.
Score changes
- Win: +3 points (weighted by odds)
- Loss: −1 point (weighted by odds)
- Score range: 0–100, initialised at 50
- Decay: 1% per week after 7 days of inactivity, floor at 10
Stake multiplier
The stake multiplier scales on a log₁₀ curve. A $20 stake yields a 1× multiplier; stakes above $1,000 are capped at 3×. This prevents large-stake farming from dominating scores.
Repeat counterparty scaling
After three predictions with the same counterparty, the honour change for that pair is reduced to 50%. This discourages coordinated score manipulation between known accounts.
Jury eligibility
Users with an honour score of 75 or above are eligible to serve as jurors. Eligibility is checked at the point of jury selection, not at the time of dispute. If a user's score drops below 75 between selection and the vote, their vote still counts.
Jury System
The jury system is Caullit's primary dispute resolution mechanism. It is designed to be resistant to collusion and bias through three key properties: blind packet delivery, randomised selection, and honour-weighted accountability.
Selection
When a dispute is raised, 3 jurors are selected at random from all users with honour ≥ 75. Jurors who have interacted with either party in the disputed prediction are excluded from the pool for that case.
Blind case packets
Each juror receives a case packet containing: the prediction title, resolution source, both parties' arguments, and any evidence submitted. Wallet addresses are redacted. Jurors cannot see each other's votes while deliberating.
Voting
Jurors have 48 hours to submit a vote. A simple majority determines the outcome. If no majority is reached (e.g. 1-1-1 or a juror fails to vote), the case escalates to 5 jurors.
Juror accountability
- Correct vote (majority side): +3 honour
- Wrong vote (minority side): −5 honour
- Failure to vote within 48h: −2 honour, disqualified from jury pool for 7 days
Version 1 constraints
In v1, disputes are submitted via the in-app "Dispute This Outcome" button visible to both parties during the 24-hour window after an oracle resolution. Human submission bets (Path 3) use the in-app "Creator Won" / "Challenger Won" buttons during the 2-hour window. Full on-chain dispute posting is planned for v2.
Resolution System
Caullit uses a three-path resolution system that selects the most reliable method for each bet based on its category, structure, and available evidence. The goal is deterministic resolution wherever possible, AI-assisted resolution where appropriate, and human judgment as the final fallback.
Path 1 — Deterministic (crypto price bets)
Crypto price bets with a structured above/below template resolve against the CoinGecko historical price API at the exact expiry timestamp. No interpretation is involved. The oracle fetches the asset price at the resolution date, compares it to the target, and produces a binary outcome.
This path applies when: category is crypto, resolution source is CoinGecko, and template is above/below. Confidence is always 1.0 on this path. The result is auditable and repeatable.
Path 2 — Claude-assisted (structured bets)
For bets with a clear resolution rule, a named resolution source, and an objective template, Caullit uses Claude to determine the outcome. The resolver:
- Fetches the resolution source URL (5 second timeout)
- Passes the bet title, resolution rule, expiry date, category, and fetched evidence to Claude
- Claude returns a structured result: outcome, confidence (0–1), reasoning, and sources used
Claude only auto-resolves if confidence is 0.90 or above and the outcome is not inconclusive. Bets below this threshold are routed to the human submission flow. Claude operates under a strict system prompt with seven constraints designed to prevent prompt injection and ensure outcomes are based only on verifiable evidence.
Path 3 — Human submission flow
Bets that are structurally weak at creation, or where the oracle cannot resolve with sufficient confidence, enter a 2-hour submission window. Both parties independently submit their claimed outcome. Resolution logic:
- Both submit the same outcome → settled immediately
- Both submit different outcomes → disputed, escalates to jury
- One submits, window closes → submitter wins
- Neither submits, window closes → refunded
A bet is considered structurally weak if it has no resolution rule, no resolution source (for non-crypto bets), uses a subjective template without an objective rule, or was marked low confidence at creation. Structurally weak bets always go to human flow regardless of oracle availability.
Dispute window
Every bet resolved via Path 1 or Path 2 enters a 24-hour dispute window before settling. Either party may dispute the outcome by posting a bond of 10% of their individual stake. Disputing immediately escalates the bet to jury resolution. If no dispute is filed within 24 hours, the outcome is final and funds are released.
Bond amounts in v1 are calculated on the creator's stake only. A future upgrade will introduce asymmetric bonds — each party's bond calculated as 10% of their own side's stake — to remove disproportionate friction on asymmetric-odds bets.
Jury resolution
Disputed bets are assigned to a pool of qualified jurors selected based on honour score, activity, and category expertise. Jurors review the bet title, resolution rule, evidence, and Claude's reasoning (if applicable) without seeing wallet addresses, stake amounts, or other juror votes. A majority verdict settles the bet.
Resolution status flow
matched → awaiting_resolution → claude_resolved (Path 1 or 2) or submission_open (Path 3) → disputed (if challenged) → jury → settled
Bets that cannot be resolved before the void deadline are cancelled and stakes returned.
Technical Stack
Frontend
- Next.js 14 (App Router), server and client rendering
- Tailwind CSS, utility-first styling
- RainbowKit v2 + wagmi v2, wallet connection and transaction signing
- viem, Ethereum utilities and ABI encoding
Backend
- Next.js API Routes, REST endpoints for bets, users, jury, and oracle
- MongoDB Atlas, persistent storage for predictions, users, and jury cases
- Mongoose, ODM layer with typed schemas
Blockchain
- Ethereum, the leading decentralized smart contract platform
- Ethereum Sepolia, v1 testnet deployment · Ethereum mainnet targeted for v2
- USDC (Circle), settlement currency on Ethereum
Infrastructure
- Vercel, deployment with edge functions and CI/CD via GitHub
- Chainlink Price Feeds, ETH/USD reference for stake multiplier calculations
Roadmap
- Core P2P prediction market on Ethereum Sepolia
- Honour scoring system
- Jury dispute resolution (3 jurors, blind packets, escalates to 5)
- Waitlist and soft launch at caullit.gg
- USDC only
- Ethereum mainnet launch (pending audit)
- Oracle/resolver backend (reads sources at expiry, posts outcome automatically)
- Full 6-layer resolution system in the smart contract
- On-chain dispute submission (currently backend-only)
- USDT support
- Mobile app (React Native)
- Public API
- Enhanced oracle (multi-source consensus)
- Terms of Service and Privacy Policy
- caullit.gg domain setup
- $CALL token launch
- Juror staking
- Governance via token holders
- Institutional integrations
Legal Positioning
Caullit is a peer-to-peer platform for predictions between individuals. It is not a gambling operator, bookmaker, or financial exchange.
Nature of predictions
Predictions on Caullit are agreements between two identified parties about a specific, verifiable future outcome. This is distinct from games of pure chance. All predictions require a defined resolution source, and outcomes are determined by real-world facts, not random draws.
Non-custodial structure
Caullit does not hold user funds at any point. USDC is transferred directly to the smart contract on-chain. Caullit cannot unilaterally withdraw, freeze, or redirect user funds. The platform fee is deducted at settlement by the contract, not collected by Caullit directly.
Smart contract as escrow agent
The CaullitEscrow contract acts as the escrow agent for all predictions. Its logic is deterministic and publicly verifiable on-chain. Resolution is triggered by Caullit's backend, but only according to the conditions set in the contract.
User responsibility
Users are solely responsible for determining whether their use of Caullit complies with the laws of their jurisdiction. Caullit makes no representations regarding the legality of prediction markets in any specific region. By using Caullit, users confirm they are acting in compliance with all applicable local regulations.
This whitepaper is provided for informational purposes only and does not constitute legal, financial, or investment advice. The protocol is in active development and details are subject to change.
© 2026 Caullit · Terms of Service · Privacy Policy