RATUM

Robinhood Chain · chain 4663 · settles to Ethereum

Confirmed is not
settled.

Robinhood Chain confirms a block every 100 milliseconds. Its own rollup contract on Ethereum requires 45,818 L1 blocks before an assertion can be confirmed. Both numbers are true. Almost nothing shows you both.

A block on Robinhood Chain

100 ms

stated by the chain, visible in consecutive block timestamps

Before an assertion can be confirmed

6.36 days

confirmPeriodBlocks = 45,818, read from the Rollup contract

The three stages

Everything on this chain is in one of these. Most sites show one.

CONFIRMED

In a block. Nowhere else.

A sequencer accepted it and told you so, 100 milliseconds ago. Nothing has reached Ethereum. If the sequencer reordered or dropped it before posting, there is no L1 record to appeal to.

BATCHED

Posted, and still not final.

The batch reached Ethereum, so the data is on L1 and anyone can reconstruct the state from it. It is durable. The assertion covering it can still be challenged, and until that window closes nothing is settled.

RATIFIED

45,818 L1 blocks later.

The challenge window elapsed and the assertion was confirmed on Ethereum. Six and a third days after the 100 milliseconds. This is the only stage this site will call final, and the word ratum means exactly this.

A site on this chain describes its own transfers as “immediate and final — there is no clearing window and no counterparty to wait on.” There is a clearing window. The chain’s own rollup contract states its length, and this page reads it.

The house rule

Nothing is final without the assertion that ratified it.

Not a convention, not a promise to be careful. The type that carries every figure on this site has no arm that holds a value without its stage, and the FINAL arm cannot be constructed without the L1 assertion reference — not a boolean, not a string somebody typed.

There is no markFinal(), no stage = "FINAL", no assumeFinal. Those are the doors an unsettled figure walks through wearing the same font as a settled one.

type Staged<T> =
  | { stage: "CONFIRMED"; value: T; at: L2Block }
  | { stage: "BATCHED";   value: T; at: L2Block;
      batch: Batch }
  | { stage: "FINAL";     value: T; at: L2Block;
      batch: Batch;
      assertion: Assertion }   // ← required
  | { stage: "UNREADABLE"; why: string; tried: string }

scripts/check-stage.mjs writes each cheat out as real TypeScript, runs the compiler over it, and fails the build if the compiler accepts any. Six cases, and one must compile — a checker that only proves failures passes for the wrong reason the moment something unrelated breaks.

Where the answer lives

Not on Robinhood Chain. On Ethereum.

A rollup cannot tell you whether its own batches were accepted — that would be the claim checking itself. These four contracts on Ethereum hold the answer, and every figure on this site is read from them.

Each address links to Etherscan. That is the difference this site is built on: a nearby project answers “how can I verify a transfer?” with a link to the block explorer’s front page, with no address on it.