What is Strike?
Strike is a peer-to-peer prediction protocol. Two players stake the same amount on a future event and each declares a belief — a confidence percentage. When the outcome is known, the better-calibrated side takes a share of the other's stake.
Everything runs on-chain: EventRegistry holds the catalog of events; WagerHouse holds seats, beliefs, stakes, and settlement.
Event lifecycle
open ──lock──▶ locked ──resolve──▶ resolved ──claim──▶ ✓ │ │ └──void──▶ voided ─────claim────────────────────▶ refund
- open — anyone can take a seat, set a belief.
- locked — cutoff reached; beliefs frozen, awaiting oracle.
- resolved — outcome recorded; payouts computed per seat.
- voided — event cannot resolve; stakes fully refundable.
Seats and beliefs
A seat is a stake plus a belief in basis points (0..10000 = 0..100%). Every seat in the same event stakes the same fixed amount, denominated in the event's asset (native RC or any ERC-20). Belief can be updated freely while the event is open.
How payouts are scored
Strike scores calibration with Brier loss: (belief − outcome)². Lower is better. A player who called 80% on an event that resolved YES scores 0.04; a player who called 30% scores 0.49 — the 80% side wins.
Ties refund both stakes. Winners keep their own stake and receive the counterparty's stake.
Currencies
Each event picks its currency at creation. address(0) is native RC; any ERC-20 (stablecoin, tokenized stock) works with an approve() before taking a seat.
FAQ
- Why beliefs instead of yes/no?
- A percentage carries information a binary can't. Scoring rewards calibration — 100% vs 0% simply reproduces a classic all-or-nothing bet.
- Is this affiliated with Robinhood?
- No. Strike is an independent project deployed on Robinhood Chain.
Contract reference
Function signatures pulled straight from the ABIs used by this observer.
EventRegistry
eventCount() → uint256
getEvent(uint256 id) → Event
createEvent(string title, string uri,
address oracle, address asset,
uint256 stake, uint64 cutoff,
uint64 resolve) → uint256 eventId (payable)
lock(uint256 eventId)
resolve(uint256 eventId, uint8 outcome) // 1=yes 2=no
WagerHouse
takeSeat(uint256 eventId, uint16 bps) → uint256 seatId (payable)
setBelief(uint256 eventId, uint256 seatId, uint16 bps)
claim(uint256 eventId, uint256 seatId) → uint256 payout
seatCount(uint256 eventId) → uint256
getSeat(uint256 eventId, uint256 seatId) → Seat
seatsOf(address player) → SeatRef[]