Docs
What a figure on this chain actually rests on.
RATUM reads three things, and they are the same idea three times: something you are shown depends on something you are not. A transaction depends on a window. A token depends on a beacon. A price depends on a market that is mostly shut.
§1 The three readings
A transaction
/trackdepends on a challenge window on Ethereum
eth_getTransactionReceipt, then NodeInterface.getL1Confirmations against Rollup.confirmPeriodBlocks
A tokenised stock
/powersdepends on one beacon, and one role on it
the token's bytecode names the beacon; hasRole(DEFAULT_ADMIN_ROLE) is checked live
Its reference price
/hoursdepends on a market open a fifth of the week
a published exchange timetable and the clock — no price feed
§2 The rule the code enforces
Nothing is called final without the assertion that ratified it. Not a convention — the FINAL arm of the type cannot be constructed without the Ethereum assertion reference, and scripts/check-stage.mjs writes each cheat out as real TypeScript and fails the build if the compiler accepts it. Six cases, one of which must compile.
The same discipline runs through the readers. A failed read is never a zero: it carries the reason and the exact call, so you can run it and find out whether the problem is the endpoint or us. That distinction has already caught a real fault in this codebase — a wallet listing that printed 0 of 45,818 on every row for a call that had reverted.
§3 Read any of it without this site
Every figure here comes from a public endpoint and a published contract. Nothing requires an account, a key, or this site to be running.
# the challenge window, from the Rollup on Ethereum cast call 0x23A19d23e89166adedbDcB432518AB01e4272D94 "confirmPeriodBlocks()(uint64)" \ --rpc-url https://ethereum-rpc.publicnode.com # how far one L2 block has got through it cast call 0x00000000000000000000000000000000000000C8 \ "getL1Confirmations(bytes32)(uint64)" <blockHash> \ --rpc-url https://rpc.mainnet.chain.robinhood.com # which beacon a stock token points at: read its 283 bytes cast code <tokenAddress> --rpc-url https://rpc.mainnet.chain.robinhood.com
On this request: window 45,818 L1 blocks (6d 8h), batches posted 177,637, Robinhood Chain head 52,431,002, Ethereum head 25,888,403. SequencerInbox
§4 What this site cannot do
In the same size type as everything else, because a tool that lists what it cannot see is one you can calibrate against.
It has no price feed
Nothing here reads or shows a price. /hours says the session is shut; it never says a price is stale, because that would be a claim about a number nobody here has read.
It cannot enumerate the chain
Token lists and address histories come from Blockscout, the chain's indexer, and are labelled as such. They are what it returned on that request, not a census.
It does not read per-assertion state
Which assertions are confirmed, and by whom, is not read. The Rollup's ABI for that differs from the one this reader knows, and guessing it would be worse than saying so.
It writes nothing to any chain
There is no contract, no deposit, no transaction for anybody to sign. Connecting a wallet hands over an address and asks for no signature.
A receipt is a citation
Stored readings record what was read and when, plus the calls. If the chain disagrees with a receipt, the chain is right and the receipt is stale.
The holiday list expires
Market holidays are hard-coded. The date the list runs to is printed on /hours rather than left to be discovered when it goes wrong.
§5 None of this is a warning about Robinhood Chain
A challenge window is what makes an optimistic rollup provable, and six days is the price of being able to challenge a fraud. A shared beacon is an ordinary way to run a family of tokens. A closed exchange is a timetable, not a defect.
The narrow point is the one worth stating exactly: these arrangements exist, they are public, and the apps built on top of them do not mention any of it. Not because anybody is hiding — because nobody had read it.