UPLINK LIVE ROBINHOOD CHAIN · FORK IN HOOD · CENSORSHIP CEILING 96:00 vs 1:00
STAGING BUILD
A FORK OF ROBINHOOD CHAIN · CHAIN ID 36754663 · SETTLES TO 4663

FORK IN HOOD

Same stack. Same speed. Checkable differences.
The only fork whose claims your browser verifies, right now, on this page.
$FORKIN · NATIVE GAS TOKEN
Fork in Hood
LIVE VERIFICATION

We didn't write this table. Your browser did.

On page load, your browser queried Robinhood Chain and Fork in Hood directly over JSON-RPC. Nothing is cached or precomputed; these are eth_call results, rendered as they arrive.

verify.live · direct RPC, zero middlemen
querying…
PROPERTYROBINHOOD CHAINFORK IN HOOD

Green = verified advantage. Red = their weakness, on the record. Amber = rows we don't win, shown anyway, because hiding them would make the rest worthless.

How the numbers above were obtained.

There is no API, no indexer, and no backend of ours anywhere in the path. The page computes its own ABI selectors, opens a JSON-RPC connection to each chain, and decodes the returned words itself.

1 · SELECTOR DERIVATION

A function selector is the first four bytes of the keccak-256 hash of its signature. This page ships keccak-256 and derives every selector at load. Pasting them in would mean a typo could return a wrong-but-plausible number with nothing to catch it.

selector(sig) = keccak256(utf8(sig))[0..4]
SELF-TEST VECTORDIGESTSTATUS
SIGNATUREKECCAK-256 DIGEST (first 8 bytes)SELECTOR

2 · DECODING THE CENSORSHIP BOUND

Worked end to end, from signature to the number in the table.

01hash the signature: keccak256("maxTimeVariation()")
02take the first 4 bytes as the selector →
03eth_call it against SequencerInbox 0xBd0D…ba96 on Ethereum
04the response is 4 words of 32 bytes; word[2] is delaySeconds
05interpret as uint256 → seconds
06divide by 86400 s/day →
tinclude    delaySeconds  =  345 600 s  (theirs)   vs   3 600 s (ours)
ratio = 345600 / 3600 = 96×
The parent chain enforces this. It is not a policy we promise to follow; it is the number past which anyone can force their own transaction in without us.

3 · THE FEE SPLIT, AS ARITHMETIC

Taken verbatim from FeeSplitter.releasable(). Balance-based, because ArbOS credits fee accounts by incrementing state directly and never calls them. A splitter that tallied inside receive() would report zero forever while silently accruing.

releasable(a)  =  received × shares[a] / totalShares    released[a]
where  received = address(this).balance + totalReleased
Integer division leaves dust in the contract; it is not lost, it settles on a later release. There is no function anywhere in the contract that can change shares or totalShares.
// FeeSplitter.sol · the only state-changing function in the contract function release(address account) external { uint256 amount = releasable(account); if (amount == 0) revert NothingToRelease(); released[account] += amount; // effects before interaction: totalReleased += amount; // totalReceived() is invariant across the call, // so reentrancy cannot inflate a claim (bool ok, ) = account.call{value: amount}(""); if (!ok) revert TransferFailed(); }

4 · THE WIRE

Every JSON-RPC call this page made, in order, with raw returndata. Nothing here was prepared in advance.

BOUNDED CENSORSHIP

They can sit on your transaction for 4 days.
We can't. For longer than 1 hour. Provably.

If a sequencer refuses your transaction, the parent chain lets you force it in yourself, after a delay the chain's operators chose. That delay is the real censorship policy, and it's public.

ROBINHOOD CHAIN · forced inclusion after0:00:00
345,600 seconds. Their sequencer screens transactions for compliance, and the protocol makes you wait four days to route around it.
FORK IN HOOD · forced inclusion after0:00:00
3,600 seconds. Enforced by the parent chain, not by our good behavior. 96× tighter.
Read it off their own contract: SequencerInbox 0xBd0D173EEb87D57A09521c24388a12789F33ba96 on Ethereum → maxTimeVariation().delaySeconds = 345600. Ours is set at rollup creation and readable the same way. Check on Etherscan ↗
DON'T TRUST THIS PAGE

Seriously. Verify it yourself.

Every number above resolves to one RPC call. Here are the exact commands. Run them against chains we don't control, from a machine we've never seen.

# Their validator allowlist, straight from the Rollup contract on Ethereum cast call 0x23A19d23e89166adedbDcB432518AB01e4272D94 'validatorWhitelistDisabled()(bool)' --rpc-url https://ethereum-rpc.publicnode.com # → false (allowlisted: two approved validators)
# Their censorship window: 345600 seconds = 4 days cast call 0xBd0D173EEb87D57A09521c24388a12789F33ba96 'maxTimeVariation()(uint256,uint256,uint256,uint256)' --rpc-url https://ethereum-rpc.publicnode.com
# The full comparison, as a script. Derives every selector, self-tests its own keccak, # and refuses to print anything it can't stand behind node verify.mjs

The page you're reading uses hardcoded selectors for speed. verify.mjs is the rigorous version: selectors derived from signatures at runtime via a self-tested keccak-256. If the two ever disagree, trust the script.

OPEN VALIDATION

Anyone can check our work.
Including you. Including against us.

Robinhood Chain's validator set is two allowlisted companies. Ours has no list: validatorWhitelistDisabled() = true. We proved it the only way that counts: a fresh address that appears on no list anywhere staked and posted an assertion.

·

ACTIVE STAKERS

Read live from stakerCount() on the rollup contract. Every one of them staked without anyone's permission.

·

STAKE TO VALIDATE

Deliberately low. Open validation is fake if only institutions can afford the bond.

0

PERMISSION REQUIRED

There is no form to fill in and no allowlist transaction to wait on. Run the node, post the bond, and challenge anything that looks wrong.

# run a validator (full guide in the repo) nitro --conf.file validator.json \ --node.staker.enable --node.staker.strategy MakeNodes \ --node.staker.parent-chain-wallet.private-key $YOUR_KEY # if we ever assert an invalid state, your challenge takes the stake. That's the design.
IMMUTABLE FEE ROUTING

Fee routing with no steering wheel.

Robinhood Chain's fee account is an address its owner can repoint at will. Ours is a contract with 9 functions, exactly 1 of which changes state: release(). It has no owner, no setter and no upgrade path. The split below is read live from the contract, because it can't be anything else.

loading…
·

querying splitter…

To be explicit: none of this pays token holders. $FORKIN is gas, not a security. The claim here is narrower and true: fees flow to a destination that cannot be silently changed.

Why 36754663?

Robinhood Chain's ID is 4663. Dial it on a phone keypad: H-O-O-D. They named their chain in phone digits and told no one.

So we kept the convention. 36754663 spells F-O-R-K-H-O-O-D, and its last four digits are their entire chain ID. The fork carries the original inside it.

You either notice, or you don't. Tell someone who will.

// E.161 keypad mapping F→3 O→6 R→7 K→5 FORK = 3675 H→4 O→6 O→6 D→3 HOOD = 4663 ← their chain id concat: 3675 · 4663 = 36754663 (ours) 36754663 mod 10000 = 4663

Plug in.

Network nameFork in Hood
Chain ID36754663
CurrencyFORKIN
RPC URLpublished at mainnet launch
Parent chainRobinhood Chain (4663)
StackArbitrum Nitro · ArbOS 61 · Stylus
WHAT WE DON'T CLAIM

The rows we lose, and the features we didn't build.

A verification page that only shows wins is a marketing page with extra steps. For the record: