There is a gap in the market and it is frustratingly obvious. Robinhood Chain has tokenized stocks. You can hold TSLA on-chain. But you cannot bet on where those stocks will be next month using the same on-chain rails. Until now.
What We Built
BlindOracle RWA Markets brings binary prediction markets to tokenized stocks on Robinhood Chain. The mechanics are simple: pick a stock, pick a strike price, pick a date, and trade YES or NO shares.
"Will TSLA close above $300 by March 31, 2026?" Buy YES if you think it will. Buy NO if you don't. When the market expires, Chainlink Data Streams delivers the price, the contract resolves, and winners collect.
Six Solidity contracts. 105 tests. Zero off-chain dependencies for resolution.
The system is not a prototype. It compiles, deploys, and resolves against a live Robinhood Chain fork with gas costs under $0.001 per transaction.
Why Chainlink, Why Three Integrations
The entire system is designed around three Chainlink services, each solving a different problem:
1. ACE (PolicyProtected)
On-chain compliance checks via runPolicy modifier before every fund operation. KYC, sanctions, geographic restrictions enforced at the contract level. You literally cannot call buyShares() without passing the policy check.
2. Data Streams V3
Institutional-grade stock prices via pull-based model. PremiumReport carries median price from the DON, bid/ask spread, timestamps. Resolution is permissionless -- anyone can submit and resolve.
3. BUILD Program
Priority access to new Chainlink services, co-marketing, and dedicated technical support. For a platform dependent on oracle reliability, a direct line to the Chainlink team is infrastructure.
Resolution Flow
Notice: resolution is permissionless. The market operator cannot block it. The outcome is determined entirely by oracle-signed data verified on-chain.
How It Works: Alice and Bob Trade TSLA
Market: "Will TSLA be above $300 by March 31, 2026?"
buyShares(true, 100) -- buying 100 YES shares for 100 USDC. ACE policy engine checks her address, approves, shares minted.
buyShares(false, 100) -- buying 100 NO shares for 100 USDC.
resolve() called. YES wins. Alice gets ~200 USDC minus fees. Bob gets nothing.
Simple. Transparent. Fully on-chain. No one had to trust the operator to report the correct price.
Contract Architecture
| Contract | Purpose | LOC |
|---|---|---|
RWAMarketFactory | Deploys and indexes markets, manages collateral whitelist | ~180 |
RWAPredictionMarket | Core market logic: buy, sell, resolve, claim | ~250 |
DataStreamConsumer | Decodes and stores Chainlink Data Streams reports | ~150 |
CompliancePolicyRules | ACE compliance rule implementation | ~120 |
PolicyProtected | Abstract base for policy-enforced contracts | ~30 |
MockCollateralToken | Test ERC-20 for local development | ~40 |
Supported Assets
| Asset | Symbol | Feed Status |
|---|---|---|
| Tesla | TSLA | Active |
| Amazon | AMZN | Active |
| Robinhood | HOOD | Active |
| Palantir | PLTR | Active |
| AMD | AMD | Active |
Adding a new asset is a single function call: registerFeed(feedId, symbol) on the DataStreamConsumer, then createMarket() on the factory.
Security Model
The fixed pricing model is a deliberate design choice. AMM-based prediction markets enable price discovery but introduce manipulation surfaces. Our model sacrifices price discovery for simplicity and security. No curve to manipulate, no pool to drain, no flash loan attack to execute.
Test Suite
105 tests covering unit, integration, and fork scenarios. All passing. Fork tests deploy against live Robinhood Chain state to validate gas costs, token integration, and chain compatibility.
forge test -vv
# [PASS] testBuyYesShares() (gas: 156789)
# [PASS] testResolveAboveStrike() (gas: 234567)
# [PASS] testClaimWinnings() (gas: 189012)
# ... 105 tests, 0 failures
What's Next
Chainlink Automation for Auto-Resolution
Automated checkUpkeep/performUpkeep to watch for expired markets and trigger resolution. Interface built, awaiting Automation availability on Robinhood Chain.
CCIP for Cross-Chain Markets
Accept collateral from Ethereum mainnet USDC or Arbitrum USDC via Chainlink CCIP. Users on Ethereum can participate in Robinhood Chain markets without manual bridging.
CRE for Workflow Orchestration
Trigger → Read → Compute → Write workflows. Monitor expirations, fetch Data Streams reports, resolve markets -- all within decentralized Chainlink infrastructure.
External Audit
Formal external audit before mainnet deployment. Targeting auditors recommended by Chainlink BUILD. Current static analysis: zero high or medium severity findings.
Try It
git clone https://github.com/craigmbrown/blindoracle-rwa-markets.git
cd blindoracle-rwa-markets
forge build
forge test # 105 tests, all green
From there, the quickstart guide walks you through deploying to a local anvil instance, creating a TSLA market, buying shares, resolving, and claiming -- all in about 5 minutes.
For the full contract API reference, see the on-chain API docs. For the security model and threat analysis, see the FAQ.
BlindOracle is a Chainlink BUILD member building privacy-preserving prediction markets. The RWA Markets module brings ACE-compliant stock prediction markets to Robinhood Chain using Chainlink Data Streams V3 for trustless resolution.