Sports data on Solana: how TxODDS puts verifiable odds on-chain and what you can build
TxODDS anchors every odds update, score, and settlement figure to Solana via Merkle proofs. Their TxLINE product lets you pay for sports data on-chain with TxL tokens, then access it via a credentialed API. Here is how the architecture works and what the World Cup hackathon opens up.
devrels.xyz/a/120short linkSports data has a trust problem. A sportsbook's API tells you the score. A settlement contract reads the score. If the score is wrong or manipulated, you have no recourse — you took the oracle at its word. This is why prediction markets, automated settlement, and agent-driven betting tools have been slow to appear on-chain despite obvious demand: the data layer underneath them is not verifiable.
TxODDS has been providing sports odds data to sportsbooks since 2002. Their TxLINE product is a new layer on top of that feed: every data update is cryptographically hashed and its Merkle root is published to Solana. The result is a tamper-evident audit trail where anyone can verify that a specific odds figure or score was published at an exact timestamp and has not been altered since. Developers access the data through a credentialed REST API activated by an on-chain subscription.
How the on-chain anchoring works
TxLINE does not put raw odds data on-chain — Solana accounts are not a database. Instead, it publishes Merkle roots: compact cryptographic commitments that bind a batch of data updates to a specific point in time. Each root is written to Solana, creating an immutable timestamp.
The data categories anchored are:
- Fixtures — competition schedules and matchups
- Odds figures — pricing data with timestamps
- Scores — live and final match results
- Settlement data — final outcomes for contract resolution
// Verification flow: prove a specific odds figure was published
// at a given timestamp and hasn't changed
// 1. Fetch the Merkle root from Solana for the relevant block
const solanaRpc = new Connection("https://api.mainnet-beta.solana.com");
const txlineAccount = await solanaRpc.getAccountInfo(TXLINE_PROGRAM_ID);
// Root is written here on each data batch
// 2. Request the Merkle proof for your specific data point from TxLINE API
const proof = await fetch(
`https://txline.txodds.com/api/proof?fixture=${fixtureId}×tamp=${ts}`,
{ headers: { Authorization: `Bearer ${apiToken}` } }
).then(r => r.json());
// { root, leaf, path: [...siblings], timestamp }
// 3. Recompute the root from the proof — if it matches Solana, data is genuine
function verifyMerkleProof(leaf: string, path: string[], root: string): boolean {
let current = leaf;
for (const sibling of path) {
current = sha256(current < sibling ? current + sibling : sibling + current);
}
return current === root;
}
const valid = verifyMerkleProof(proof.leaf, proof.path, proof.root);
// true → data is tamper-evident, matches on-chain commitmentThe subscription model: paying on-chain for data access
TxLINE's access model is itself on-chain. To get API credentials, you subscribe by paying TxL tokens into a Solana program — not by entering a credit card number. This means subscription state is on-chain, auditable, and controllable by a smart contract.
# Step 1: acquire TxL tokens (USDT → TxL via on-chain swap)
# Request a quote, then sign and broadcast the purchase transaction
# Step 2: subscribe on-chain
# Option A: standard bundle (predefined league set)
# Option B: custom — select specific league IDs
# Step 3: activate your API token
# Sign a message: txSignature + leagueSelection + credentials
# POST to activation endpoint → receive API token + JWT
# Free tier — no payment required:
# World Cup 2026 (all 104 games) + International Friendlies
# Access the quickstart at: txline-docs.txodds.comThe two-credential system (guest JWT + API token) means you can explore the API structure and available endpoints before committing on-chain. The free World Cup tier gives immediate access to live match data for all 104 games without any token purchase.
What is in the data feed
TxODDS has five product lines accessible through TxLINE:
- Tx FUSION ODDS — aggregated odds from multiple books, the primary feed for pricing prediction market contracts
- Tx SCORES — live in-play scores and match stats
- Tx LAB — historical data for model training and backtesting
- Tx SOCCER ELITE — deep football data (lineups, expected goals, possession, shots on target)
- Tx ALL SPORTED — broad multi-sport coverage
// Fetching live World Cup odds (free tier, no token required)
const jwt = await fetch("https://txline.txodds.com/auth/guest/start")
.then(r => r.json())
.then(d => d.token);
// Get current fixtures
const fixtures = await fetch(
"https://txline.txodds.com/api/fixtures?competition=FIFA_WC_2026",
{ headers: { Authorization: `Bearer ${jwt}` } }
).then(r => r.json());
// Live odds for a fixture
const odds = await fetch(
`https://txline.txodds.com/api/odds?fixtureId=${fixtures[0].id}&market=1x2`,
{ headers: { Authorization: `Bearer ${jwt}` } }
).then(r => r.json());
// { home: 1.85, draw: 3.40, away: 4.50, timestamp: 1751155200000, merkleRoot: "..." }What you can build: three tracks
The World Cup hackathon (June 24 – July 19, $50K prize pool) maps directly to the three most compelling things a verified sports data oracle enables on Solana:
1. Prediction markets and settlement
The hard part of on-chain prediction markets has always been trusted settlement. With TxLINE, a Solana program can verify settlement data permissionlessly: fetch the Merkle root from the TxLINE account, verify the proof for the final score, and resolve the market in the same transaction. No multisig dispute process, no trusted admin.
// Simplified settlement instruction
// In a real program: read TxLINE account, verify Merkle proof, resolve pool
pub fn settle_market(
ctx: Context<SettleMarket>,
fixture_id: u64,
home_score: u8,
away_score: u8,
merkle_proof: Vec<[u8; 32]>,
) -> Result<()> {
let txline = &ctx.accounts.txline_data;
// Verify the proof against the on-chain Merkle root
let leaf = hash_score(fixture_id, home_score, away_score);
require!(
verify_merkle_proof(leaf, &merkle_proof, txline.root),
ErrorCode::InvalidProof
);
// Data verified — settle positions based on outcome
let outcome = if home_score > away_score { Home } else if away_score > home_score { Away } else { Draw };
resolve_positions(&ctx, outcome)?;
Ok(())
}2. Trading agents
An AI agent with access to real-time odds and score data through the pay MCP or a direct TxLINE API integration can place and close positions on prediction markets automatically. The combination of verified data + 400ms Solana finality means an agent can react to in-play events (goal scored, red card, half-time) in near real-time.
// Agent loop: monitor live scores, close positions on goals
const eventSource = new EventSource(
"https://txline.txodds.com/stream/live?fixtureId=123",
{ headers: { Authorization: `Bearer ${token}` } }
);
eventSource.onmessage = async (event) => {
const update = JSON.parse(event.data);
if (update.type === "GOAL") {
// Score changed — re-evaluate open positions
const currentOdds = update.odds["1x2"];
// If odds moved enough, close or adjust position
await adjustPosition(currentOdds, update.score);
}
};3. Fan experiences
Live score widgets, on-chain trophy NFTs minted on qualifying wins, bracket challenges settled without a central authority, social wagering pools between friend groups. The verifiability is a feature — you can show a user the on-chain proof that their team scored at that timestamp, not just assert it.
Getting started
# Free World Cup access — start immediately, no payment
# 1. Get a guest JWT
curl -X POST https://txline.txodds.com/auth/guest/start
# 2. List available World Cup fixtures
curl https://txline.txodds.com/api/fixtures?competition=FIFA_WC_2026 \
-H "Authorization: Bearer <jwt>"
# 3. Fetch live odds for a match
curl "https://txline.txodds.com/api/odds?fixtureId=<id>&market=1x2" \
-H "Authorization: Bearer <jwt>"
# Full docs: txline-docs.txodds.com
# Developer hub: txodds.net/developer-hub
# Hackathon: superteam.fun/earn/hackathon/world-cup/For paid access beyond the free tier, the on-chain subscription path starts with acquiring TxL tokens on Solana. The subscription state written to the program is the source of truth for your API access — no account dashboard, no support ticket to get a key rotated.
Keep reading
polymarket-rs gives you a typed Rust interface to Polymarket's order book — ClobClient for unauthenticated market data, TradingClient for placing and managing orders, WebSocket clients for real-time streaming. No panics, newtype IDs, alloy-backed EIP-712 signing. Here's the full API surface and how to go from Cargo.toml to a live order.
Polymarket is not a betting site. It's the closest thing to a global consensus machine the internet has produced. When millions of dollars are behind a probability estimate, that estimate is load-bearing in a way no poll or pundit can match. The API exposes it. Here are 10 things you can build with it.
Top Ledger is the data layer behind a lot of Solana analytics. Its API serves decoded protocol data across DEX, lending, perps, LP, staking, and yield — and it ships two ways to call it: an API-key MCP/REST tier, and a keyless x402 endpoint that any agent can pay per call. A look at the surface and the two access models.
Get new articles in your inbox
Technical deep-dives on Solana tooling, infrastructure, and ecosystem. No noise.