Fully on-chain prediction market on Robinhood Chain. AI observes live traffic cameras. Users bet ETH on real outcomes. Winners split 95% of the pool; 5% goes to Series 1 tile holders.
1. Watch — Live traffic camera streams 24/7
2. Predict — Bet ETH on Over or Under the vehicle threshold
3. AI Counts — Proprietary vision system counts every vehicle crossing
4. Settle — 95% to winners (proportional), 5% to Series 1 tile holders
Bet with native ETH. Winners receive 95% of the pool, split proportionally to their stake. The 5% fee flows to Series 1 tile holders. Zero protocol take — the house never wins.
Bets (ETH) -> Pool -> Resolve
├── 95% -> Winners (proportional to bet)
└── 5% -> Series 1 tile holdersPari-mutuel pools. The protocol never bets against you — all ETH in each round is returned to the market (winners + tile holders). Fee is hardcoded in the contract and cannot be changed.
The Crosshood oracle is the bridge between the physical world and the blockchain. A computer-vision pipeline runs 24/7 on a GPU, watching a live traffic camera and counting every vehicle that crosses a calibrated line. When a round ends, the final count is submitted on-chain, the contract picks the winning range, and winners are paid automatically.
Every resolved round carries a verifiable trail. During the counting window, the oracle saves annotated JPEG frames every 30 seconds plus a final frame at round close. Each frame is hashed with SHA-256and stored alongside the market record. Anyone can fetch them via the public endpoint /api/evidence/[market] and recompute the hashes to confirm nothing was swapped after the fact.
The oracle operates under a single trusted signer today. A multi-oracle stack — stake & slashing, commit-reveal, median consensus, disputes — is already deployed on-chain as dormant infrastructure (OracleRegistry,DataAttestation, ConsensusEngine,DisputeManager). It is wired to be activated without a redeploy when the protocol moves past a single operator.
Every round lasts 5 minutes. The betting window is short on purpose: pools fill fast, the outcome is close to the bet, and the next round starts almost immediately.
| Phase | Duration | What Happens |
|---|---|---|
| Betting | 2:30 | Market is OPEN. Place placeBet(side) with ETH. Live count is already streaming. |
| Locked | 0:00 | lockMarket() is called on-chain. lockTime was set at creation — no new bets accepted. |
| Counting | 2:30 | Oracle keeps counting. Evidence frames captured every 30s and hashed. |
| Resolved | — | resolveMarket(count). 5% fee leaves the pool, 95% becomes the prize pool. |
| Distributed | — | distributeAll() sweeps payouts to every winner in one tx — no manual claim. |
If a round has no bets on one side, the oracle cancels it viacancelMarket() and refundAll() returns every wei. Nobody can win a one-sided pool; nobody loses gas to a broken market.
Crosshood is not just a set of contracts — it is a set of long-running bots that keep the protocol live and balanced. All three operate from known wallets and every action they take is an on-chain transaction you can inspect on Robinscan.
Creates each round, watches the camera, submits the count, and auto-pays winners. Operates the lifecycle functions on MarketFactory and every deployed PredictionMarket — createMarket, lockMarket,resolveMarket, distributeAll, cancelMarket.
Provides two-sided liquidity so pools never resolve one-sided. Places small bets on whichever side is thinner, then lets real bettors set the odds. Funded by the protocol and operates at a loss on purpose — its P&L is public on the Transparency page and the deficit is the cost of keeping markets tradeable.
Every wager the housebot places is an on-chain placeBet tx from a dedicated wallet. No hidden matching — what you see in the pool is what is actually bet.
Supervises the oracle and the detection engine. Heartbeat every 30s, exponential-backoff restart on crash, alerts on rapid restarts, and orphan-market recovery on boot — if a crash left a market OPENor LOCKED without a resolution, watchdog cancels it so bettors get refunded instead of stuck.
Full, audited activity for all three bots (bets, fees, net P&L, foreclosures) is published on the Transparency page.
Premium ownership tier with 5x revenue weight and permanent buyout protection. Founders cannot be forced out — your position is yours as long as you maintain the tax deposit.
Standard tile with 1 share of revenue. Can be bought out at your declared price. Lower entry cost, same Harberger mechanics.
The original 100 tiles. Each tile = 1 equal share of ETH market fees. Harberger tax model: declare a price, pay 5%/week tax, anyone can force-buy at your price.
| Parameter | Value |
|---|---|
| Tiles | 100 (10x10 grid) |
| Max per wallet | 5 |
| Shares per tile | 1 |
| Min price | 0.01 ETH |
| Weekly tax | 5% of declared price |
| Buyout fee | 10% |
| Price increase tax | 30% of appreciation |
| Price decay | 20% per 2 weeks (floor 10%) |
Both Series 1 and Series 2 tiles operate under a pure Harberger tax regime. This is not a subscription — it is a self-enforced property tax written into the contract. Failing to keep your tile solvent results in permanent foreclosure.
Every tile carries a weekly tax equal to 5% of its declared price, charged against the tile's on-chain deposit. The tax accrues continuously from the moment you claim the tile. If the accrued tax ever exceeds your remaining deposit, the contract consumes the entire deposit and revokes your ownership the next time any function touches the tile (buyoutTile, setPrice, addDeposit, abandonTile, or pokeTax).
pokeTax is permissionless. Anyone — any wallet on Robinhood Chain — can call it on any tile at any time. If your tile is insolvent when they do, you lose the tile and the deposit in the same transaction. There is no grace period, no warning, no refund.
The deposit on a tile can appear unchanged in explorer snapshots because the contract uses lazy collection: tax only decrements the deposit when the tile is interacted with. This does not mean the tax is waived — it means the debt is accumulating silently. The balance you see is a pre-settlement view, not a solvency check.
To keep a tile alive indefinitely, top up its deposit before it runs dry by calling addDeposit(tileIndex). A useful rule of thumb: keep at least 2–3 weeks of tax on deposit, and refill monthly. If you cannot or do not want to maintain a tile, you can abandonTile(tileIndex) at any time to recover whatever deposit remains.
This is the Harberger design working as intended: holders either pay for the right to hold, or the position returns to the market. The rules are hardcoded in the RushTiles V1 and RushTiles V2 contracts and can be independently verified on Robinscan. See the _applyTax function for the exact foreclosure logic.