docs
five contracts. everything the interface shows is read from them, and everything below is verifiable on-chain.
chain
- network
- Robinhood Chain — Arbitrum Orbit L2
- chain id
- 4663
- rpc
- https://rpc.mainnet.chain.robinhood.com
- explorer
- https://robinhoodchain.blockscout.com
- raise asset
- native ETH
Reads from the browser go through a same-origin proxy at /api/rpc. The upstream endpoint answers browsers with a duplicated Access-Control-Allow-Origin header, which every browser rejects, so a direct call from the page never leaves.
contracts
- Registry
- 0xf771842e52349bF2e5Fa60451Ad73e29cFab6e05
- RoundFactory
- 0xdbfE93A9AfdF2fe8b285D633a4C1A6349B2f075f
- WETH
- 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
Round, Vesting and RoundToken have no fixed address — the factory deploys a fresh set for every round, in one transaction.
- Registry — enumerates every round, so the feed needs no indexer.
- RoundFactory — deploys token, escrow and vesting together and registers them.
- RoundToken — fixed supply, minted once, no mint path afterwards, no owner.
- Round — the escrow. Holds contributions, enforces the caps, refunds or finalizes.
- Vesting — per-wallet schedules with a cliff. Holds the sold tokens after a round closes.
round lifecycle
A round is only ever in one of five states, and the state is derived, not set:
- Upcoming
- created, before
openAt - Open
- accepting eth, up to the hard cap
- Succeeded
- past
closeAtwith the soft cap met - Failed
- past
closeAtwith the soft cap missed — refunds open - Finalized
- raise sent to treasury, sold tokens moved into vesting
finalize() is permissionless. A founder cannot hold a successful round hostage by refusing to close it.
Registering a vesting schedule is pull-based: each backer calls startVesting() once. Writing every schedule inside finalize() would make closing a round cost gas proportional to the number of backers — a popular enough round could not be closed at all.
vesting maths
Accrual measures from the close of the round. The cliff gates release; it does not restart the clock.
vested(t) = 0 while t < start + cliff, otherwise total × (t − start) / duration, capped at total.
So a 7-day cliff on a 30-day term releases roughly 23% the moment the cliff passes, then streams to 100% at day 30. Allocations are stored as uint128, so a round whose supply exceeds that is rejected at creation rather than silently truncating someone's entitlement at claim time.
fees
Venture takes nothing. No fee on contributing, none on finalizing, none on claiming, and no cut of any treasury. There is no address in the contracts that collects one, so it is not a policy that could be changed later — there is nowhere for a fee to go.
A failed round returns the exact amount contributed. You pay gas; that is all.
permanence
Every round parameter is immutable from creation: supply, price, both caps, the treasury address, the cliff and the duration. There is no owner, no pause, and no upgrade path on any contract.
That is the product — a round you can check before you fund it — and it is also the risk. A bug cannot be patched, and a founder who publishes honest terms can still fail to build anything. The contracts are unaudited. Read the disclaimer.