Skip to main content
Bags is deployed on Robinhood Chain as a set of public, permissionless smart contracts. Unlike the Solana integration (which is driven by the Bags REST API and SDK), the Robinhood Chain integration is fully on-chain: you launch, trade, and claim fees by calling the contracts directly with a standard EVM library such as viem or ethers. These guides show third-party developers how to integrate launching and trading against those contracts. No API key is required to interact with the chain.
“Robinhood” here means Robinhood Chain, an EVM Layer 2 (Arbitrum Orbit) with chain ID 4663 and ETH as the native gas token. It is a separate chain from Solana and from BNB Chain.

What you can do

  • Launch a token through the BagsFactory (with an optional atomic initial buy). See Launch a Token.
  • Trade a token against its bonding curve before graduation, and against a Uniswap v4 pool after graduation. See Trade Tokens.
  • Read state and discover tokens through BagsLens and the factory registry. See Read State & Discover Tokens.
  • Claim creator fees from a token’s BagsFeeShare. See Claim Creator Fees.
Start with the Environment Setup guide to configure your clients and ABIs.

Token lifecycle

Every Bags token moves through two trading phases. It is created on a bonding curve; once enough ETH has been raised it graduates (migrates) into a Uniswap v4 pool with permanently locked liquidity.
  1. CreationBagsFactory.create (or createAndBuy) deploys a per-token BagsToken, BagsBondingCurve, and BagsFeeShare, mints the fixed supply to the curve, and registers the token.
  2. Bonding curve — trades run against the token’s BagsBondingCurve using a virtual x * y = k AMM. Buys send native ETH; sells return native ETH. 830M of the 1B supply is sold on the curve.
  3. Graduation — when the curve’s real ETH reserves reach thresholdQuote, the next buy triggers migration: the remaining 170M tokens plus the full raise are deposited into a Uniswap v4 pool (with the Bags hook) at the curve’s final price, the LP is locked, and the curve is paused. The curve emits a Migrated event.
  4. Uniswap v4 — after graduation, trades route through the Robinhood-modified UniversalRouter against the token/WETH pool.
Determine the current phase by reading the token’s migrated flag from BagsLens.getTokenState, and route trades accordingly. Never assume a phase.

Fee model

A flat 2% fee is charged on the ETH/WETH leg of every trade, in both phases, split into two halves:
  • On buys, the fee is taken from the ETH input before it enters the curve/pool.
  • On sells, the fee is taken from the ETH output.
  • The creator half goes entirely to the token’s fee claimers, pro-rata by the basis points set at launch. Claim it with BagsFeeShare.claim.
  • The protocol half is split: if the launch has a partner, the partner receives protocolHalf x partnerFeeBps / 10000 (accrued in WETH in BagsFeeShare); the remainder goes to BagsVault. partnerFeeBps is a factory global (default 2500 = 0.25% of volume) snapshotted per launch.
There is also a one-time launch fee (creationFee, default 0.02 ETH) paid to the vault when a token is created.
factory.creationFee(), factory.graduationThreshold(), and factory.partnerFeeBps() are owner-settable globals on the factory and can change; each launch snapshots them at create() time. Each curve exposes its own thresholdQuote() and partnerFeeBps() — the per-launch snapshots. Always read these live from the contracts before rendering or signing — never hardcode.

Chain facts

Because the sequencer is first-come-first-served and blocks are ~100 ms:
  • Use timestamps, not block numbers, for transaction deadlines.
  • The public RPC is rate-limited — batch reads with viem multicall (see Setup).
  • Priority fees buy nothing; gas is negligible.

Contract address book

These are the protocol singletons and shared infrastructure on Robinhood Chain mainnet. BagsFactory and BagsVault are UUPS proxies — the addresses above are stable across upgrades, so always integrate against them (never against implementation addresses).
The UniversalRouter above is a modified fork. Its v4 swap struct carries an extra minHopPriceX36 field, so stock Uniswap SDK calldata will revert. Two other router look-alikes exist on this chain — only this address is correct. See Trade Tokens for the exact encoding.

Per-token contracts

BagsBondingCurve and BagsFeeShare are deployed per launch as beacon proxies, and BagsToken as an immutable EIP-1167 minimal proxy clone. Their addresses are not predictable before launch. Always resolve them from:
  • The TokenCreated event in the launch receipt (returns token, curve, feeShare, partner, poolId), or
  • The factory registry: factory.curveForToken(token) and factory.feeShareForToken(token), or
  • BagsLens.getTokenState(token) (returns curve, feeShare, poolId, and more).
Never hardcode per-token addresses.

Token supply

Every Bags token has a fixed supply of 1,000,000,000 (1e9) tokens, each with 18 decimals (1_000_000_000 * 1e18 base units). Fully diluted valuation (FDV) equals the spot price in ETH per token multiplied by 1e9.

Next steps

Environment Setup

Configure your viem clients and ABIs for Robinhood Chain.

Launch a Token

Create a token through the BagsFactory.

Trade Tokens

Buy and sell across the bonding curve and Uniswap v4.

Contracts Reference

Functions, events, errors, and ABIs.