All articles
solanasportsoracleprediction-marketsdefidataapi

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.

Share
devrels.xyz/a/120short link

Sports 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
typescript
// 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}&timestamp=${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 commitment

The 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.

bash
# 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.com

The 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
typescript
// 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.

rust
// 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.

typescript
// 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

bash
# 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

Get new articles in your inbox

Technical deep-dives on Solana tooling, infrastructure, and ecosystem. No noise.

Sports data on Solana: how TxODDS puts verifiable odds on-chain and what you can build | devrels.xyz