Rails documentation

Everything that decides a result, written down: the track, the two sides, the model that prices them, the vault that pays, and the ledger you can replay.

Overview

Rails is a platform for skill-based markets on crypto and tokenized stocks. These docs cover how it works, from your first track to the engine that settles it.

On Rails you trade the path a price takes. You lay a track on a live chart: a center line that can lean up or down, with a rail on each side. Then you pick a side. Hold wins if the price stays between the rails for the whole run. Derail wins if the price touches a rail first.

One number prices both sides: the chance your track holds. Each multiplier is the inverse of its side's chance, less a published 3% spread, and you see both before you commit. A neutral vault takes the other side of every position and pays the winners when the track resolves.

Where to start

Vision

A market where your read of the chart is the edge, the odds sit in plain view and anyone can check every result.

Rails builds a new kind of market: skill-based, open to inspection and fun to play. You trade the path of a price across crypto and tokenized stocks, on live prices, with one engine under every product. The platform grows by adding markets and products to that engine.

Your read of the market is the edge. A neutral vault is your counterparty, your multiplier is the inverse of your chance to win less a published spread, and every price, position and payout goes into a ledger anyone can replay. Tracks is the first product on the engine and Predict the second. Future products reuse the same core.

What Rails stands for

The principles behind the platform. Where a principle is a rule, the code enforces it and the ledger lets you check it.

Crypto and stocks

Eight crypto markets and eight tokenized stocks on one venue, priced and settled by the same engine.

Trade the path

A track pays on how the price travels during the run. Reading volatility and trend is the skill.

Social by design

Every track has a public link. Back a player's track with Hold or fade it with Derail.

One engine

One vault, one ledger and one pricing model sit under every product, so liquidity pools once.

Live prices

Prices stream from Hyperliquid's L1 in real time. The keeper settles on the same public bars.

No order book

The vault quotes any shape on any market as you draw it, so you never wait for a match.

No hidden edge

Your multiplier is the inverse of your win chance less a 3% spread printed beside it.

Always liquid

Close an open position any time before its run ends, for an amount you see before you confirm.

Open books

The keeper chains every event by hash into a public ledger you can re-verify from genesis.

Built for agents

Every action is a JSON call. Anything a player does in the terminal, a program can do.

Skill ranks

The leaderboard ranks net score: profit and loss plus royalties. Volume breaks ties.

Honest status

Testnet is labeled testnet. Anything that is not live yet says soon.

One engine, every product

The hard parts live in one core: pricing, the vault, settlement, identity, the ledger and the token. A new product is a new front end on that core. An order-book venue has to bootstrap liquidity market by market. Rails solves it once, and every product feeds the same vault. See The engine for how the pieces fit.

Roadmap

Where Rails stands and where it goes next. Items under Now are live on the testnet; everything after that is a plan that can change.

The roadmap has three phases. Now covers what runs on the public testnet today. Next covers the token launch and the move to contracts. Later covers what the engine grows into. Testing and audits set the timing, so the phases carry no dates.

Now: public testnet (2026)

  • The terminal: live charts for 16 markets and a ticket that prices both sides before you commit.
  • Tracks: lay a track with gauge, grade and run, and back it to Hold or Derail.
  • Predict: back or fade any live track at odds priced from where the price sits now.
  • Dashboard: balance, open positions, history, equity curve and platform stats.
  • Leaderboard: players ranked by net score, filtered by period, market and product.
  • Public ledger: every event chained by hash, with an endpoint that re-verifies the whole chain.
  • Faucet: 10,000 tRAIL every 6 hours for any wallet.

Next: launch and contracts

  • $RAIL launch on Robinhood Chain.
  • Contracts on chain: TrackEngine, RailsVault, ModelRegistry and TestRail deploy to Robinhood Chain testnet, then mainnet.
  • Audits: an independent review of the contract suite before mainnet.
  • Vault seed: 15% of the $RAIL supply seeds the settlement vault at mainnet, under a timelock.
  • Staking: stake $RAIL to back the vault and earn a share of fees.

Later

  • More markets across crypto and tokenized stocks.
  • Multi-asset tracks that settle on more than one price.
  • Longer runs past the 24-hour limit.
  • Agent SDK: typed clients and examples for programs that trade.
  • New products on the same engine, vault and ledger.

Tracks

The first product on Rails. Lay a track on a live price and take a side: Hold if the price stays between the rails to the end, Derail if it touches a rail first.

A track has a center line that starts at your entry price and a rail on each side of it, at equal distance. You set three things: the gauge (how far each rail sits from the center line), the grade (how much the track leans) and the run (how long it lasts). The ticket prices both sides from that shape before you open.

Hold

Pays stake × M if the price stays inside the rails, touching neither, until the run ends. You back calm, trend and pace.

Derail

Pays stake × M the moment the price touches either rail. You back a breakout, a reversal or a spike.

A track ends in one of three ways. It holds to the end and Hold gets paid. The price touches a rail, Derail gets paid and Hold settles at zero. Or you close early for an amount the ticket shows before you confirm. The vault pays every outcome, and the keeper writes each step to the public ledger.

Predict runs on the same tracks: anyone can back or fade a live track you laid, and you earn a royalty when they profit. To play, follow the quick start. For the math behind your multiplier, read Opening a position.

Quick start

From a connected wallet to your first settled track in five steps.

  1. 1
    Connect a wallet

    Open the terminal and connect an EVM wallet on Robinhood Chain, through Privy or with a direct wallet signature. You sign one free message that proves you own the wallet. It sends no transaction and costs no gas.

  2. 2
    Claim tRAIL

    Claim 10,000 tRAIL from the faucet. You can claim again every 6 hours. tRAIL is the testnet play unit and has no market value.

  3. 3
    Pick a market and shape a track

    Choose one of the 16 markets, then set gauge, grade and run. The ticket shows the Hold and Derail multipliers for that exact shape as you change it.

  4. 4
    Take a side and open

    Pick Hold or Derail and a deposit from 1 to 50,000 tRAIL. The open fee comes off the deposit, the rest becomes your stake, and your entry binds to the live price when the keeper accepts the open.

  5. 5
    Watch it settle

    The keeper judges your track from public one-minute bars. When the track resolves, the vault credits the winning side. You can also close early for the amount the ticket shows.

Opening a position

Gauge, grade and run shape your track. One probability prices both sides, and your multiplier locks the moment your entry binds.

You enter at the live mid price. Hold wins if the price stays inside your rails to the end. Derail wins if it touches a rail first.

The track you lay

Every track starts at your entry price. The center line leans from there at your grade, and each rail sits one gauge away from it. Rails measures gauge and grade in range, the asset's typical one-hour move, so the same shape carries the same odds on BTC and on TSLA.

Track geometry
center(t) = entry + grade × range × hours since bind
upper rail(t) = center(t) + gauge × range
lower rail(t) = center(t) - gauge × range

Range freezes at bind. From then on the rails follow the grade you chose, and no one can move them.

Gauge, grade and run

KnobLimitsWhat it does
Gauge±0.25 to ±6 rangeDistance from the center line to each rail. A tighter gauge is harder to hold.
Grade-2.5 to +2.5 range per hourThe lean of the track. The price has to keep pace with it, so a steeper grade is harder to hold.
Run15 minutes to 24 hoursHow long the track lasts. A longer run gives the price more time to reach a rail.

Tighter, steeper and longer all make Hold harder, so Hold pays more and Derail pays less. On a flat track, gauge and run trade off: a ±1 gauge over one hour, a ±0.5 gauge over 15 minutes and a ±2 gauge over 4 hours all carry the same P of 0.409.

Your multiplier

The keeper reads your shape and the asset's range and computes P, the probability that the price stays inside the rails for the whole run. Each side pays the inverse of its own chance to win, less the published spread δ:

Multiplier
Hold: M = (1 - δ) / P
Derail: M = (1 - δ) / (1 - P)
δ = 3%, ceiling ×50, floor ×1.05

A side priced above ×50 pays ×50. The keeper does not offer a side priced below ×1.05. As a rough anchor, a Hold with a 25% chance pays ×3.88.

Sample quotes from the live model. P depends on the shape alone, so these numbers match on every market. Leaning down prices the same as leaning up by the same grade.

GaugeGradeRunPHoldDerail
±1.5030 min0.909×1.07×10.70
±1.501 hour0.728×1.33×3.56
±1.5+11 hour0.544×1.78×2.13
±101 hour0.409×2.37×1.64
±102 hours0.165×5.87×1.16
±1.5+2.51 hour0.091×10.63×1.07
±0.25015 min0.038×25.41Not offered

The model behind P is described in The engine.

Your entry binds on open

Opening takes one step. The keeper checks your shape against the limits, reads the live mid price and the asset's range, prices your side, confirms the vault can reserve the payout and binds your entry. The entry price and your multiplier lock at that moment and stay fixed for the life of the position.

Prices move while you decide. Send a minimum multiplier with your open and the keeper refuses the open if the fresh quote lands below it, so you never accept worse odds than the ones you saw.

The open fee is the greater of 1% of your deposit and 0.5 tRAIL. The keeper takes it from the deposit at open, win or lose. The rest is your stake, the amount every payout formula multiplies. The vault then reserves stake × (M - 1), so your full payout is covered before your track starts.

Example open
deposit = 1,000 tRAIL
open fee = max(1% × 1,000, 0.5) = 10
stake = 1,000 - 10 = 990
at ×2.00: gross payout = 1,980, vault reserve = 990

Then you choose how to leave. See Closing a position.

Closing a position

Your multiplier locks at bind. Your side and the moment you leave decide how much of it you collect.

ExitYou collectWhen
Your side winsstake × M, less the profit feeHold: the track holds to the end. Derail: the price touches a rail first.
Close earlystake × M × P_win(now) × 0.95, less the profit feeYou cash out before the track resolves.
Your side loses0Hold: the price touches a rail. Derail: the track holds to the end.

The profit fee is 10% of the profit on any payout above your stake. When the position is a Predict position from another player, 15% of that fee goes to the track's creator as a royalty and the rest stays with the vault as revenue. See Parameters and limits.

Hold to the end

When the final one-minute bar of the run closes with no touch, the track holds. Hold positions collect stake × M and Derail positions settle at zero. The keeper resolves a held track five seconds after that final bar closes.

Close early

You can close an open position any time before its run ends. The keeper values it at your side's current chance to win, from the live price, the time left and the range frozen at bind, then applies the 5% early-close penalty:

Early close
value = stake × M × P_win(now) × (1 - 0.05)
payout = value - 10% × max(0, value - stake)

For Hold, P_win stays high while the price sits near the center line and falls as it drifts toward a rail. For Derail it moves the other way. A confirmed close is final. If the price sits on a rail when you ask, the keeper refuses the close because the track is derailing. Once the run is over, the track settles on its own within a minute.

Touch a rail

A touch resolves the whole track at once. Every Derail position on it collects stake × M, and every Hold position settles at zero. One verdict settles the creator's position and every Predict position on the track, whichever side each took.

The keeper proves the touch with the one-minute bar that crossed the rail and stores that bar in the ledger. You can fetch the same public bar and check it. The exact judging rules are in Price feed.

Parameters and limits

Every knob, fee and limit in one place. The engine serves these values at /api/model with a fingerprint hash, so you can confirm the numbers behind any quote.

ParameterValueWhat it means
Gauge±0.25 to ±6 rangeDistance from the center line to each rail
Grade-2.5 to +2.5 range per hourLean of the center line
Run15 minutes to 24 hoursHow long a track lasts
Deposit1 to 50,000 tRAILSize of one position, open fee included
Open positionsNo capNo limit on live positions per wallet
Hold probability P0 to 1The model's chance the price stays inside the rails to the end
Spread δ3%Published margin on both sides' odds
Ceiling×50Highest multiplier either side can pay
Floor×1.05The keeper does not offer a side priced below this
Volatility uncertainty ν25%Lognormal spread in volatility the model averages over
Open feemax(1%, 0.5 tRAIL)Taken from the deposit at open, win or lose
Profit fee10% of profitCharged on any payout above the stake
Creator royalty15% of the profit feePaid to the track's creator on profitable Predict positions from other players
Early-close penalty5%Discount on the value of an early close
Predict cutoff2 minutesA track stops taking Predict positions when less than 2 minutes remain
Vault utilization60% maxReserved payouts can never exceed 60% of vault capital
Faucet10,000 tRAIL per 6 hoursFree testnet balance per wallet
Model idrails-dbm-1Recorded with every open in the ledger

Range: the volatility unit

Range is the asset's one-sigma move over one hour, in price units. It makes a ±2 gauge the same difficulty on BTC as on TSLA. The keeper blends two estimates of it: 60% weight on the last 6 hours of one-minute bars and 40% on the last 3 days of 15-minute bars.

Each estimate caps outlier returns at six times the median move and weights recent bars more, with half-lives of 90 minutes and 24 hours. The blend follows the current regime without jumping on one spiky minute. A floor of 0.005% per √minute keeps quiet off-hours markets from pricing near-zero volatility, and each market's range refreshes once a minute at most.

Range sizes your track at open and then freezes into your rails. The price against those rails decides every outcome.

Markets

Eight crypto markets and eight tokenized stocks, all on the same rules and the same payout math.

SymbolNameClass
BTCBitcoinCrypto
ETHEthereumCrypto
SOLSolanaCrypto
XRPXRPCrypto
DOGEDogecoinCrypto
HYPEHyperliquidCrypto
BNBBNBCrypto
LINKChainlinkCrypto
HOODRobinhoodTokenized stock
NVDANvidiaTokenized stock
TSLATeslaTokenized stock
AAPLAppleTokenized stock
AMZNAmazonTokenized stock
METAMetaTokenized stock
PLTRPalantirTokenized stock
COINCoinbaseTokenized stock

Every market trades around the clock. Crypto prices come from Hyperliquid's perpetual markets, and tokenized stocks come from 24/7 stock perpetuals on its xyz market. Each stock carries a session flag that shows whether the regular US session is open (weekdays, 9:30 a.m. to 4:00 p.m. New York time). Outside that window the perp keeps trading while the underlying exchange is shut.

Rails measures every track in range, so a shape carries the same odds on every market. New markets need no new rules: any market the feed prices, the vault can take.

Predict

Every live track is a two-sided market. Back a track to Hold or fade it to Derail, at odds priced from where the price sits right now.

Back it: Hold

Pays stake × M if the track holds to the end. You back the creator's read.

Fade it: Derail

Pays stake × M the moment the price touches a rail. You bet against the creator's read.

You draw nothing. Pick a live track from the terminal, a track link or a player's profile, choose a side and a deposit, and your position joins the track. It settles with the track, on the same verdict as the creator's own position.

A track takes Predict positions while it is live and more than 2 minutes remain. When you profit, the creator earns a royalty out of your profit fee, which costs you nothing extra. See Predict odds and Settling and closing.

Predict odds

Both sides of a live track come from one number, so they cannot drift apart and no one can arbitrage one side against the other.

When you predict, the keeper prices the track as it stands now: the live price, its distance to each rail, the time left and the range frozen at bind. From those it computes P, the chance the track holds for the rest of its run. Each side pays the inverse of its own chance, less the spread:

Predict odds
Hold: M = (1 - δ) / P_now
Derail: M = (1 - δ) / (1 - P_now)
δ = 3%, ceiling ×50, floor ×1.05

The odds move as it plays

Time spent inside the rails pushes P up, and a price drifting toward a rail pulls it down. One flat track with a ±1.5 gauge and a 60-minute run, priced at five moments:

MomentPrice vs center linePHoldDerail
At bind, 60 min leftOn the center line0.728×1.33×3.56
30 min leftOn the center line0.909×1.07×10.70
30 min left1.0 range above0.537×1.81×2.10
10 min left1.3 range above0.395×2.46×1.60
10 min leftOn the center line0.995Not offered×50 (ceiling)

The creator's multiplier stays where it locked. Yours locks when the keeper accepts your position. The ledger records the terms it used (the price's distance to the center line and the minutes left), so you can recompute your multiplier with /api/model. See The engine.

Guards

Send a minimum multiplier with your request and the keeper refuses the position if the odds moved below it. The keeper also refuses a prediction while the price sits on a rail, because the track is derailing.

Settling and closing

A Predict position resolves with the track it backs. You can also leave early for a known amount.

ExitYou collectWhen
Your side winsstake × M, less the profit feeHold: the track holds to the end. Derail: the price touches a rail first.
Close earlystake × M × P_win(now) × 0.95, less the profit feeYou cash out before the track resolves.
Your side loses0The track resolves the other way.

How it settles

One verdict settles every position on a track. If the price touches a rail, Derail wins and Hold settles at zero. If the track holds to the end, Hold wins. The creator's own position settles on the same verdict at the same moment.

Creator royalties

When a Predict position from another player pays out above its stake, through a win or a profitable early close, the track's creator receives 15% of that position's profit fee. The royalty comes out of the fee, so the predictor pays nothing extra. A track that draws Predict volume pays its creator on top of their own position.

Royalty example
predictor's profit = 1,000 tRAIL
profit fee = 10% × 1,000 = 100
creator royalty = 15% × 100 = 15
vault revenue = 100 - 15 = 85

Close early

You can close a Predict position before the run ends at its current win chance less the 5% penalty, the same way a creator closes. See Closing a position.

The terminal

Where you lay tracks and trade: a live chart, your track on it and a ticket that prices both sides before you commit.

Open the terminal and pick a market to start.

The chart

The chart streams live prices for the market you pick. Your track appears on it as you shape it: the center line from the live price, a rail on each side and the end of the run. Open tracks play out on the same chart, so you watch the price move against your rails in real time.

Market list

All 16 markets sit in one list, grouped into crypto and tokenized stocks, each with its live price and 24-hour change. A stock outside its regular US session carries a flag. See Markets.

The ticket

The ticket holds the three controls (gauge, grade and run), the two sides with their live multipliers, your deposit and a summary of the fee, stake and full payout. Both multipliers reprice as you change the shape or the price moves. You fund positions from your tRAIL balance; the quick start shows how to claim it.

Your positions

Your open positions stay on the chart and in a list, where you can close any of them. Settled positions move to the History tab and to your public profile.

Dashboard

Your account and the whole platform in one place.

Open the dashboard from anywhere in the app.

Your account

The account view shows your tRAIL balance, the faucet timer, your open positions and your settled history. Each settled position lists its payout, fees and the price that settled it, and an equity curve plots your running profit and loss.

Platform stats

Platform stats cover the whole venue: players, positions, open positions, average multiplier, 24-hour volume, tracks held and derailed, the most popular markets and the biggest wins. The vault panel shows capital against the 150,000,000 tRAIL seed, escrow, reserved payouts, revenue, royalties paid and seven days of hourly capital and volume.

Leaderboard

The leaderboard ranks players by net score: settled payouts minus deposits, with fees counted, plus royalties earned as a creator. Filter by period (24 hours, 7 days, 30 days or all time), by market and by product (Tracks or Predict). When two scores tie, the player with more volume ranks higher.

Profile and identity

Your wallet is your account. You need nothing else to play.

Wallet login

You sign in with an EVM wallet on Robinhood Chain, through Privy or with a direct wallet signature. The sign-in message is free, sends no transaction and expires after 10 minutes. It carries a one-time nonce, so no one can replay a captured signature. Smart-contract wallets work too: Rails checks their signatures on Robinhood Chain.

Your session lasts 7 days in an HttpOnly cookie. Sign out any time to end it.

No email, no account

Rails has no email login, no password and no social sign-in. The identity data it keeps is your address, your optional display name, the wallet that referred you (if any) and your app preferences.

Display name

You can set an optional display name of 3 to 20 letters, digits, dots or underscores. It replaces your short address on the leaderboard, your profile and track pages. Each name belongs to one wallet at a time.

Public profiles

Every wallet has a public profile at /profile/<address>: rank, net score, open positions, settled history, an equity curve and top markets. Anyone can open yours, and you can open anyone's from the leaderboard or a track page. See Dashboard.

Sharing and referrals

Every track and every profile has a link you can post anywhere.

Referrals

A referral link carries your wallet address: any Rails link ending in ?ref=<your address>, which Copy invite link in the account menu builds for you. When a new wallet signs in through it for the first time, Rails records you as its referrer. Attribution happens once, at that first sign-in, and no wallet can refer itself.

Getting access

The testnet is open to everyone: no invite code, no allowlist.

Open the terminal, connect a wallet and claim tRAIL from the faucet. You can play every product end to end at no cost, on live prices, and the keeper records every result in the public ledger.

  • An EVM wallet, as a browser extension or through Privy.
  • No ETH: signing in and trading on the testnet send no transactions.
  • A few minutes to claim tRAIL and lay your first track.

tRAIL is a testnet unit with no market value. The draft tokenomics includes testnet players in the community and airdrop allocation.

The $RAIL token

$RAIL is the single asset every Rails product runs on. It has not launched; the testnet runs on tRAIL.

At launch, every position on every product opens and settles in $RAIL, paid from the vault. The platform and the token form one system: you play in $RAIL, you win $RAIL, and the vault that settles your wins holds $RAIL.

The loop

The design ties usage to the token in a loop. The staking part of it arrives with mainnet.

Positions

Every track and every Predict position is volume through the engine.

Fees

The open fee and the profit fee are the platform's revenue, published beside the odds.

Stakers

Stakers back the vault and share in fee revenue. More revenue draws more stake.

Capacity

More capital behind the vault lets it reserve larger payouts, which draws more volume.

The loop
more volume → more fee revenue → more rewards for stakers
more stake → deeper vault → larger payouts → more volume

Published fees fund the loop, with no inflationary emissions behind it. The vault's average edge is the 3% spread plus fees, as long as the model's probabilities match how prices move. The model is public, so you can judge that yourself. See Vault architecture and Utility.

Launch

$RAIL launches on Robinhood Chain. Tracks is the first product and Predict the second, and future products plug into the same vault, ledger and token. The draft supply and allocation are on Tokenomics.

Tokenomics

A fixed supply of 1,000,000,000 $RAIL. The allocation below is a draft and can change before launch.

AllocationShare$RAILRole
Settlement vault seed15%150,000,000Timelocked. Seeds the settlement vault at mainnet.
Launch liquidity25%250,000,000Trading liquidity when $RAIL launches.
Community and airdrop20%200,000,000Community rewards and the airdrop, testnet players included.
Ecosystem and creators15%150,000,000Grants and creator royalty programs.
Team15%150,000,00012-month cliff, then 24-month linear vesting.
Treasury10%100,000,000Audits, listings and infrastructure.

The testnet vault already follows this plan: it started with 150,000,000 tRAIL, the same 15% share the mainnet vault will receive. The genesis entry of the public ledger records that seed.

Team tokens release nothing at launch. They sit behind a 12-month cliff, followed by linear vesting over 24 months. The vault seed stays under a timelock until it goes into the settlement vault at mainnet.

Utility

What $RAIL does: one asset, three jobs.

Play

Every position on every product opens and pays out in $RAIL. Demand grows with play.

Back

The vault that pays winners holds $RAIL. Its depth sets how large a payout it can reserve.

Stake

Planned for mainnet: stake $RAIL behind the vault and earn a share of platform fees.

Play requires holding and moving $RAIL. The vault seed and any staked $RAIL sit out of circulation while they back payouts, so heavier play raises demand while more of the supply works inside the vault.

Vault architecture

One vault is the counterparty to every position on every market. It reserves each payout in full before a track starts.

You trade against a neutral vault. It takes the other side of every position and pays winners on its own, with no order book to fill and no match to wait for. If the feed prices a market, the vault quotes it, within its capacity limits. Its margin is the published spread and the fees beside your odds.

Full reserve

When you open, the vault moves your stake into escrow and reserves stake × (M - 1) from its capital, the most your position can win beyond the stake. It accepts a new position while total reserved payouts stay within 60% of vault capital. If a new reserve would cross that line, the keeper refuses the open and asks you to size down or widen the rails.

Reserve rule
reserve = stake × (M - 1)
open accepted if reserved + reserve ≤ 60% × capital

Settlement books

Every settlement balances to the micro-tRAIL. Capital pays gross - stake on a win and gains the stake on a loss, escrow releases the stake, and the fees land in revenue and royalties:

Books identity
deposit + fromCapital = player + revenue + royalty
fromCapital = gross - stake
revenue = open fee + profit fee - royalty
Example: a winning Predict position from another player
deposit 1,000, open fee 10, stake 990, M = ×2.00
gross 1,980, profit 990, profit fee 99, royalty 14.85
player 1,881, revenue 94.15, fromCapital 990
1,000 + 990 = 1,881 + 94.15 + 14.85 = 1,990

The keeper writes these numbers into the public ledger for every settlement, so you can check the identity on any position.

Solvency by rule

The vault bears losses. Over a short window players can win more than they stake. The vault stays solvent through rules anyone can read: odds are the inverse of probability less the spread, every payout sits in reserve before its track starts, the ×50 ceiling caps any single position, and the 60% utilization cap bounds what the vault can owe at once.

The testnet vault started with 150,000,000 tRAIL. Its live capital, escrow, reserves, revenue and royalties are public at /api/stats. The setup works like the liquidity pool behind a perp venue: a counterparty whose size and limits follow public rules.

Where fees go

On the testnet, the vault books open fees and profit fees as revenue, and the keeper credits royalties to creators' balances at settlement.

Staking

Planned for mainnet: stake $RAIL to back the vault and earn a share of platform fees.

Stakers will supply part of the capital the vault settles from. A busier platform earns more fees, and stakers share in them. Staked $RAIL sits out of circulation while it backs payouts.

Backing the vault means sharing its results. The staking contract will define lock terms, the fee share and how stakers carry the vault's gains and drawdowns, and this page will describe it before launch.

The engine

One engine runs every product: a pricing model anyone can rerun, a neutral vault and a settlement rule that works from public price bars.

Today the engine runs server-side. Live prices, pricing, settlement and payouts all work end to end, and every event goes into a public, hash-chained ledger that anyone can re-verify. The Solidity contracts that carry these rules on chain are written and move to Robinhood Chain in the next phase.

Priced by probability

One hold probability prices both sides of every track. Each multiplier is the inverse of its side's chance less the 3% spread.

A neutral vault

One vault takes the other side of every position and reserves each payout in full before the track starts.

Settled from public bars

The keeper judges every track from public one-minute bars. Anyone can rerun the same rules on the same bars.

The model

The model treats the price over a run as a random walk with no trend of its own, with volatility set by range. Your track's center line leans at your grade, so the gap between the price and the center line drifts at minus the grade. The track holds while that gap stays within one gauge of the center line on either side. P is the chance a drifting random walk stays between two barriers for the whole run: a double-barrier survival probability with drift.

Model inputs
σ = range / √60 (volatility per √minute)
h = gauge × range (distance to each rail)
μ = -grade × range / 60 (drift of the gap, per minute)
T = run in minutes
P = Pr( |gap(t)| < h for all t ≤ T )

The keeper solves this with an eigenfunction series when the rails sit close relative to the move expected over the run, and with closed-form single-barrier formulas when they sit far apart. The switch comes where the track's full width reaches 6 × σ√T. The keeper then averages the result over a 25% lognormal uncertainty in volatility with 7-point Gauss-Hermite quadrature, so the odds account for the chance that range is off.

The pricing code is pure math shared by the server and the browser, so the ticket's preview and the keeper's quote run the same function. /api/model serves every parameter with a SHA-256 fingerprint, and each open records the model id rails-dbm-1 in the ledger.

Open, judge, settle

An open is one database transaction: the keeper validates the shape, reads the live mid and range, prices your side, checks that the vault can reserve the payout, debits your deposit and writes the open to the ledger.

From there the keeper judges the track against public one-minute bars. It runs on the API's reads of tracks, positions, the feed, stats, the leaderboard and profiles, on every close and prediction, and from a cron entry point. Every run reaches the same verdict for the same bars, so it does not matter which request triggers it. One verdict settles every position on the track, and the proof goes into the ledger: the deciding bar for a derail, the last close for a hold.

The price layer is covered in Price feed and the record in Public ledger.

Price feed

Every price on Rails comes from Hyperliquid's L1, streamed live. The keeper settles on the same public bars you can fetch yourself.

Rails reads public oracle and mid prices plus one-minute bars from Hyperliquid's L1: its crypto perpetuals and the 24/7 tokenized-stock perpetuals on its xyz market. The terminal streams them in real time. Your entry binds to the live mid, and settlement runs on one-minute bars.

How the keeper judges a track

  • The bind bar, the minute your entry falls in, counts by its close alone, checked against the rails at the end of that minute.
  • Every later bar counts by its high and low, checked against the rails at the bar's midpoint (or at the end of the run, if that comes first). A high at or above the upper rail, or a low at or below the lower rail, is a touch.
  • The final bar, the minute the run ends in, counts in full.
  • Both rails in one bar: the rail crossed by the larger margin counts as the touch.
  • A held track resolves once the final bar has closed, after a 5-second grace.
  • Missing bars never create a derail. A minute with no trades has no bar, and nothing crossed.

On a derail, the settle price is the rail's level at the touch, and the ledger stores the deciding bar with its feed and interval. On a hold, the ledger stores the last close. Anyone can pull the same candles from the public feed and rerun the check.

Gaps and old tracks

No data, no verdict. If the feed returns no bars, the keeper leaves the track live and retries on its next pass, so a feed outage can delay a settlement without causing a derail.

The feed keeps about 3.4 days of one-minute bars. If a track still has no verdict 3.3 days after its bind, the keeper judges it on 15-minute bars under the same rules.

Public ledger

Every event on Rails lands in an append-only ledger where each entry commits to the one before it.

The keeper writes every event to the ledger: the vault's genesis seed, faucet claims, opens, Predict positions, wins, losses, early closes, royalties and each held or derailed verdict. Every entry stores its time, kind, address, amount, a reference and a data object with the full terms, plus a SHA-256 hash that commits to the previous entry's hash.

Entry hash
hash = SHA-256( prev_hash + '|' + canonical({ ts, kind, address, amount, ref, data }) )
prev_hash of the first entry = 64 zeros
canonical = JSON with keys sorted and undefined fields dropped

Edit, drop or reorder one entry and every hash after it breaks. The ledger page lists the entries, /api/ledger exports them, and /api/ledger/verify recomputes the whole chain from genesis and reports the head.

Verify it yourself

  1. 1
    Export

    Call /api/ledger?after=0&limit=500, then pass the last seq you received as the next after. Rows come in ascending order, each with prevHash and hash.

  2. 2
    Rebuild each entry

    Take ts, kind, address, ref and data as returned. Convert amount from tRAIL back to micro units (multiply by 1,000,000), since the hash commits to the integer amount.

  3. 3
    Hash and compare

    Hash the canonical JSON with the previous hash and compare the result to hash. The first mismatch marks the first altered entry.

A chain that checks out proves the history is consistent with itself. To catch a rewrite of the whole chain, keep a head hash you trust or compare against an anchor on Robinhood Chain.

Anchors on Robinhood Chain

When an operator key is configured, the keeper anchors the ledger head on Robinhood Chain at most once every 15 minutes. Each anchor is a zero-value transaction from the operator address to itself, with calldata that reads RAILS:<seq>:<hash>. /api/ledger/verify lists the latest anchors, so you can match a head hash to a transaction on the explorer.

Security

What protects the testnet today, what changes when the contracts deploy and the risks that remain.

The status first. On the public testnet the engine runs server-side and plays with tRAIL, a unit with no market value. The keeper holds the books in a database and publishes every event to the hash-chained ledger. The Solidity contracts (TrackEngine, RailsVault, ModelRegistry and TestRail) are written and move to Robinhood Chain in the next phase, followed by an independent audit.

Wallet-only login

One-time nonces that expire in 10 minutes, signature checks that cover smart-contract wallets and an HttpOnly session cookie.

Guarded writes

Every trade, claim and profile change needs a session and passes an origin check, and SameSite cookies block cross-site requests.

Public math

The model, fees and limits are public at /api/model with a fingerprint hash. Anyone can recompute a multiplier.

Tamper-evident books

Every balance change is a ledger entry chained by SHA-256, with optional anchors on Robinhood Chain.

Residual risks

  • Server trust today. Until the contracts deploy, you rely on the keeper to run the published rules. The ledger exposes a bad write after the fact and cannot block one.
  • Price source. Outcomes follow Hyperliquid's public prices and one-minute bars. A wick on that venue counts as a touch.
  • Model risk. Odds come from a volatility estimate. If prices move in ways the model does not expect, the vault can gain or lose more than the spread suggests.
  • Vault drawdowns. The vault bears losses. Full reserves and the 60% utilization cap bound what it can owe, and a run of player wins can still draw it down.

Contracts and addresses

Networks, contracts and where to verify them. Until each contract deploys, its address reads Launching soon.

Status today: the engine runs server-side on the public testnet, and the public ledger records every event. An operator key can anchor the ledger head on Robinhood Chain. The Solidity contracts below are written and deploy to Robinhood Chain in the next phase, testnet first.

NetworkTestnetMainnet
ChainRobinhood Chain TestnetRobinhood Chain
TypeArbitrum-based L2Arbitrum-based L2
Chain ID466304663
RPChttps://rpc.testnet.chain.robinhood.com/rpchttps://rpc.mainnet.chain.robinhood.com/rpc
Explorerhttps://explorer.testnet.chain.robinhood.comhttps://explorer.chain.robinhood.com
Gas faucethttps://faucet.testnet.chain.robinhood.comNone
ContractRoleTestnetMainnet
$RAILThe platform token, fixed supply of 1,000,000,000Launching soonLaunching soon
TestRailtRAIL, the testnet play unitLaunching soonTestnet unit
TrackEngineOpens tracks and positions, judges and settles themLaunching soonLaunching soon
RailsVaultHolds stakes, reserves payouts, pays winners, books fees and royaltiesLaunching soonLaunching soon
ModelRegistryPins the pricing model and its parameters by hashLaunching soonLaunching soon

Developers and agents

The terminal runs on a public JSON API. Anything a player can do, a program can do.

Reads are public and need no key. Writes need a wallet session. Amounts are in tRAIL, times are Unix milliseconds, and errors come back as { error, message } with an HTTP status.

Public reads

EndpointReturns
GET /api/marketsAll 16 markets with price, 24-hour change, volume, range and session state
GET /api/modelModel, fees, limits, faucet and vault seed, plus a SHA-256 fingerprint
GET /api/quote?market=&gauge=&grade=&run=Live P and both multipliers for a shape (defaults: gauge 1.5, grade 0, run 60)
GET /api/tracks?market=&sort=hot|new|ending&limit=Live tracks with more than 2 minutes left (up to 100)
GET /api/tracks?status=recent&market=&limit=Settled tracks, newest first (up to 50)
GET /api/tracks/{id}One track with its positions, status and settlement proof
GET /api/positions?owner=&status=open|closed&limit=Positions for an address; owner=me uses your session (up to 200)
GET /api/positions/{id}One position with its track
GET /api/feed?limit=&before=&address=Recent trading events from the ledger
GET /api/ledger?after=&before=&address=&limit=Raw ledger rows with hashes (up to 500 per call)
GET /api/ledger/verifyRecomputes the chain from genesis: ok, entry count, head and latest anchors
GET /api/leaderboard?period=24h|7d|30d|all&market=&product=lay|predictPlayers ranked by net score
GET /api/stats?series=1Platform and vault stats; series=1 adds 7 days of hourly capital and volume
GET /api/profile/{address}Rank, stats, open positions, history, equity curve and top markets
GET /api/chainActive network, chain ID, explorer and latest block

Sign in from code

  1. 1
    Request a nonce

    POST /api/auth/nonce with { address }. The response holds a nonce and the sign-in message.

  2. 2
    Sign

    Sign the message with the wallet key (personal_sign). Signing is free and sends no transaction.

  3. 3
    Verify

    POST /api/auth/verify with { message, signature }. The response sets an HttpOnly session cookie that lasts 7 days. Send it with every write.

Authenticated calls

EndpointBodyDoes
POST /api/tracks{ market, grade, gauge, runMinutes, side, deposit, minMultiplier? }Lays a track and opens your position on it
POST /api/tracks/{id}/predict{ side, deposit, minMultiplier? }Opens a Predict position on a live track
POST /api/positions/{id}/closenoneCloses your open position early
POST /api/faucetnoneClaims 10,000 tRAIL, once every 6 hours
GET /api/menoneYour balance, faucet timer and settings
PATCH /api/me{ name?, settings? }Sets your display name or preferences
POST /api/auth/logoutnoneEnds the session

side is hold or derail. Positions carry a kind: lay for the creator's position, predict for a Predict position. A request that fails a guard returns a code that names it: requote when the multiplier fell below your minMultiplier, side_not_offered under the ×1.05 floor, vault_capacity when the vault cannot reserve the payout, on_rail while a track is derailing.

Example

A quote for a flat ±1.5 track over one hour on BTC, trimmed for reading. Price and range change with the market; P and the multipliers depend on the shape alone.

GET /api/quote?market=BTC&gauge=1.5&grade=0&run=60

200 OK
{
  "market": "BTC",
  "price": 97250.5,
  "range": 540.2,
  "gauge": 1.5,
  "grade": 0,
  "run": 60,
  "pHold": 0.727739,
  "hold": { "p": 0.727739, "m": 1.33289, "offered": true },
  "derail": { "p": 0.272261, "m": 3.56276, "offered": true },
  "ts": 1789761600000
}

An agent can price shapes with /api/quote, open with POST /api/tracks and a minMultiplier guard, follow its track with /api/tracks/{id} and check every result against /api/model and the ledger. The engine documents the model, so an agent can recompute P on its own and compare it with the keeper's quote.

FAQ

Short answers to the questions players ask most.

What can I trade?

Eight crypto markets (BTC, ETH, SOL, XRP, DOGE, HYPE, BNB, LINK) and eight tokenized stocks (HOOD, NVDA, TSLA, AAPL, AMZN, META, PLTR, COIN). The same rules and payout math apply to all of them. See Markets.

Do I need the price to go up to win?

No. You pick a side. Hold wins if the price stays between your rails to the end, whichever way the track leans. Derail wins if the price touches a rail first. Gauge, grade and run set the shape.

Can I bet on someone else's track?

Yes. With Predict you can back any live track to Hold or fade it to Derail, at odds priced from where the price sits now. A track takes predictions until 2 minutes before its end. See Predict.

Who is my counterparty?

A neutral vault takes the other side of every position. Its margin is the published 3% spread plus fees, shown beside your odds. The price against your rails decides every outcome. See Vault architecture.

What are the fees?

Rails charges two fees. The open fee is 1% of your deposit (0.5 tRAIL minimum), taken at open, win or lose. The profit fee is 10% of the profit on any payout above your stake. An early close also carries a 5% penalty on its value. On Predict positions from other players, 15% of the profit fee goes to the track's creator.

How is my multiplier set?

The keeper computes P, the chance your track holds for the whole run, from your shape and the asset's range. Hold pays (1 - δ) / P and Derail pays (1 - δ) / (1 - P), with δ = 3% and a ×50 ceiling. The keeper does not offer a side below ×1.05. See Opening a position.

When do I get paid?

When the track resolves. A derail settles on the keeper's first pass after the touch, and a hold settles five seconds after the final one-minute bar of the run closes. The payout lands in your tRAIL balance in the same step.

What happens if the price touches a rail?

The track resolves at that moment. Every Derail position on it collects stake × M, and every Hold position settles at zero, the creator's included. Positions you closed earlier keep what they paid.

Can I close early?

Yes, any time before the run ends, unless the price sits on a rail at that moment. You receive stake × M × P_win(now) × 0.95, less the profit fee on any profit. See Closing a position.

How many positions can I hold?

As many as you like. Rails sets no cap on open positions per wallet. Each position takes a deposit from 1 to 50,000 tRAIL, and the vault needs room to reserve its payout.

Why did the keeper refuse my open?

The keeper refuses an open when your side prices below ×1.05, when the fresh multiplier falls under the minimum you sent, when your balance runs short or when the vault cannot reserve the payout. The error message names the reason and the fix.

What chain is Rails on?

Robinhood Chain, an Arbitrum-based L2. The testnet chain ID is 46630 and the mainnet chain ID is 4663. See Contracts and addresses.

Are the contracts deployed?

Not yet. The engine runs server-side on the public testnet and records every event in a hash-chained public ledger. The Solidity contracts are written and move to Robinhood Chain in the next phase.

Do I need to verify my identity?

No. You need a wallet and nothing else: no email, no password, no identity check. Signing in is a free signature that sends no transaction.

Do I need ETH for gas?

Not on the testnet. Signing in and trading send no transactions, so you pay no gas.

What is tRAIL?

The testnet play unit. Claim 10,000 tRAIL from the faucet every 6 hours. It has no market value.

Is $RAIL live?

Not yet. $RAIL launches on Robinhood Chain, and until then every contract address reads Launching soon. The draft supply plan is on Tokenomics.

Are the contracts audited?

Not yet. An independent audit comes before mainnet, and the report will be linked from Security.

Can AI agents trade?

Yes. Every action is a JSON call with a wallet session, and every read is public. See Developers and agents.

How do I check a result?

Open the public ledger or call /api/ledger/verify. Each settlement stores its terms and the proof that decided it, and you can recompute the multiplier from /api/model and the terms the ledger recorded at open.

What is net score?

Your settled payouts minus your deposits, fees included, plus the royalties you earned as a creator. The leaderboard ranks by it.

Where do I follow Rails?

On X, the one social account Rails runs. The handle is not public yet.

Glossary

Every Rails term in one table.

TermMeaning
TrackA center line and two rails laid on a live price for a set run. The unit every product trades.
RailOne of a track's two boundaries: the upper rail or the lower rail.
Center lineThe line a track leans along. It starts at the entry price and moves at the grade.
GaugeDistance from the center line to each rail, in range (±0.25 to ±6).
GradeHow much a track leans, in range per hour (-2.5 to +2.5).
RunHow long a track lasts (15 minutes to 24 hours).
RangeAn asset's one-sigma move over one hour, in price units. It sizes a track at open, then freezes.
HoldThe side that wins if the price stays between the rails for the whole run.
DerailThe side that wins if the price touches a rail before the run ends.
TouchA one-minute bar whose high reaches the upper rail or whose low reaches the lower rail.
LayTo open a new track and take a side on it. The creator's position.
PredictThe product for taking a side on someone else's live track.
Back and fadeBacking a track means taking Hold on it. Fading it means taking Derail.
BindThe moment the keeper accepts your open and locks your entry price and multiplier.
EntryThe live mid price your position binds to.
Hold probability (P)The model's chance the price stays inside the rails to the end. It prices both sides.
Multiplier (M)Your payout factor, locked at bind: (1 - δ) / P for Hold, (1 - δ) / (1 - P) for Derail.
Spread (δ)The published 3% margin on both sides' odds.
Ceiling and floorNo multiplier pays above ×50. The keeper does not offer a side priced below ×1.05.
DepositWhat you put into a position, open fee included (1 to 50,000 tRAIL).
StakeThe deposit minus the open fee. Every payout formula multiplies it.
Open feeThe greater of 1% of the deposit and 0.5 tRAIL, taken at open.
Profit fee10% of the profit on any payout above the stake.
Royalty15% of the profit fee on profitable Predict positions from other players, paid to the track's creator.
Early closeCashing out before the track resolves, at stake × M × P_win(now) × 0.95.
VaultThe neutral counterparty that reserves and pays every position.
Reservestake × (M - 1), set aside from vault capital when a position opens.
KeeperThe service that quotes, binds, judges tracks from one-minute bars and settles them. Every open, verdict and payout it makes lands in the ledger.
LedgerThe append-only, hash-chained record of every event on Rails.
AnchorA Robinhood Chain transaction that records the ledger head's sequence number and hash.
Net scoreSettled payouts minus deposits, plus royalties earned. The leaderboard ranks by it.
tRAILThe testnet play unit from the faucet. It has no market value.
$RAILThe Rails token, with a fixed supply of 1,000,000,000. Not launched yet.

Changelog

Dated notes on what shipped, newest first.

DateChange
Sep 18, 2026Public testnet opens with the terminal, Tracks, Predict, the dashboard, the leaderboard, the docs and the public ledger.