Skip to content

Add Robinhood Chain support (archive mainnet + testnet)#1618

Draft
cranycrane wants to merge 9 commits into
masterfrom
feat/robinhood-chain
Draft

Add Robinhood Chain support (archive mainnet + testnet)#1618
cranycrane wants to merge 9 commits into
masterfrom
feat/robinhood-chain

Conversation

@cranycrane

@cranycrane cranycrane commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

What

Adds Robinhood Chain support: archive mainnet (robinhood_archive, chain ID 4663) and testnet (robinhood_testnet, chain ID 46630). Robinhood Chain is an Arbitrum Orbit (Nitro) L2 with ETH as the native gas token; mainnet settles to Ethereum, testnet to Sepolia.

Production is expected to run against QuickNode via the existing BB_PROD_RPC_URL_* build overrides; backend debs cover self-hosted nodes per Robinhood's node docs.

Changes

  • New EVM shim bchain/coins/robinhood + factory registration (no shared-code changes)
  • Coin configs for both networks, docs/ports.md regenerated (a preceding commit drops already-stale entries)
  • Nitro backend packaging (exec scripts + vendored mainnet genesis)
  • tests.json entries and rpc fixtures built from live on-chain data

Details of the individual pieces are in the commit messages.

Verification

Full unit suite (make test) passes; port registry check and package generation pass for both coins; nitro image digest, layout, and flags verified against the pinned version; fixtures cross-checked against the public RPC.

cranycrane and others added 4 commits July 10, 2026 13:13
The checked-in ports.md had drifted from configs/coins: it still listed
the removed Ethereum Holesky coins, an 8090 http port that no longer
exists in the Tron configs, and rows out of the generator's sort order.
Regenerated with `go run contrib/scripts/check-and-generate-port-registry.go -w`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Robinhood Chain is an Arbitrum Orbit (Nitro) L2 with ETH as the native
gas token: mainnet chain ID 4663 settles to Ethereum, testnet chain ID
46630 settles to Sepolia. The shim follows the Arbitrum/Base pattern and
registers the "Robinhood Archive" and "Robinhood Testnet" factories.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nd packaging

Coin definitions modeled on arbitrum_archive with deliberate deviations
for the 100 ms block cadence (measured over 100k blocks):
- resyncindexdebounce=509 so LastSync stays within the /api in-sync
  freshness window of 12 x averageBlockTimeMs = 1.2 s (Arbitrum's 1509
  would permanently flap the reported sync state)
- block_addresses_to_keep=4500, the same 7.5 min wall-clock rollback
  window as Arbitrum's 1800 x 250 ms
- eip1559Fees without alternative_estimate_fee: the Infura gas API does
  not cover chain 4663; the native eth_feeHistory path takes over
- fiat rates via the CoinGecko `robinhood` asset platform

Backend packaging runs offchainlabs/nitro-node v3.11.2 (image digest
pinned for docker verification). Robinhood Chain is not embedded in the
nitro binary and Robinhood publishes no mainnet chain info, so the
rollup contract addresses (sourced from on-chain discovery, L2BEAT
project `robinhood`) are passed inline via --chain.info-json, with the
chain config taken verbatim from the published genesis. The mainnet
genesis (626 kB) is vendored and shipped through the server_config_file
mechanism; the testnet has an empty genesis alloc (verified via
eth_getCode at block 0) and boots with --init.empty using the chain info
from Robinhood's published testnet node config. Note nitro v3.11 renamed
--execution.tx-lookup-limit to --execution.tx-indexer.tx-lookup-limit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
tests.json keys match the config aliases directly (no base variant
exists, endpoints.go falls back to the alias when test_name is absent).
The archive entry mirrors arbitrum; the testnet entry mirrors sepolia's
fiat-less list. Fixtures are built from live chain data: a settled
mainnet block with 15 txs including a plain ETH transfer, a settled
testnet block, and active ERC-20 contracts (mainnet WETH/USDG/ROBIDY,
testnet WETH/TSLA/AMZN) for the EthCallBatch test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@cranycrane cranycrane marked this pull request as draft July 10, 2026 11:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant