Robinhood Chain: facts and verified addresses

All values below were verified on 2026-09-22 against the live chain (eth_chainId, eth_getCode, on-chain reads) and cited to their source. The code of record is packages/chain/src/addresses/4663.ts and 46630.ts; each address there carries a source comment.

Network

ItemMainnetTestnet
NameRobinhood ChainRobinhood Chain Testnet
Chain id4663 (0x1237)46630 (0xb626)
StackArbitrum Orbit (Nitro) L2, settles to Ethereum mainnetSettles to Sepolia
Gas tokenETHETH (Sepolia)
Public RPChttps://rpc.mainnet.chain.robinhood.com (rate limited)https://rpc.testnet.chain.robinhood.com
WebSocketwss://feed.mainnet.chain.robinhood.com (per docs, not yet probed)wss://feed.testnet.chain.robinhood.com
Managed RPCAlchemy robinhood-mainnet.g.alchemy.com/v2/KEY, QuickNode, Chainstack, dRPC, PublicNodeAlchemy robinhood-testnet, QuickNode, Chainstack
Explorerhttps://robinhoodchain.blockscout.com (official), https://robinscan.iohttps://explorer.testnet.chain.robinhood.com
Docshttps://docs.robinhood.com/chainsame
Block time~100 ms measured~200 ms measured
Bridgehttps://portal.arbitrum.io/bridge?destinationChain=robinhood-chainhttps://portal.arbitrum.io/bridge

Operational note: the mainnet Blockscout /api/v2 sits behind a Cloudflare managed challenge for non-browser clients, so the worker never depends on it. ABIs come from Sourcify (https://sourcify.dev/server/v2/contract/4663/<address>?fields=abi), which supports both chains. The testnet explorer API is open.

Core contracts (4663)

ContractAddressSource
Multicall30xcA11bde05977b3631167028862bE2a173976CA11multicall3.com canonical, bytecode verified
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3Uniswap canonical, bytecode verified on both chains
WETH0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73docs.robinhood.com/chain/contracts
USDG (6 decimals)0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168docs.robinhood.com/chain/contracts, docs.paxos.com

Uniswap v4 (4663)

Source: https://developers.uniswap.org/contracts/v4/deployments (Robinhood Chain). Every address has bytecode on 4663, and the Pons factory's poolManager() returns the same PoolManager.

ContractAddress
PoolManager0x8366a39cc670b4001a1121b8f6a443a643e40951
PositionManager0x58daec3116aae6d93017baaea7749052e8a04fa7
V4Quoter0x8dc178efb8111bb0973dd9d722ebeff267c98f94
StateView0xf3334192d15450cdd385c8b70e03f9a6bd9e673b
UniversalRouter0x8876789976decbfcbbbe364623c63652db8c0904

Smoke test (2026-09-22, block 69713865): quoteExactInputSingle on the ETH/USDG pool (fee 3000, tickSpacing 60, no hook) returned 27.4157 USDG for 0.01 ETH.

Testnet: the PoolManager exists at the same address with identical bytecode. Periphery contracts are not documented for 46630 and are left unset until verified.

Pons V2 (4663 only)

Pons V2 is a bonding-curve launchpad that graduates into a permanently locked Uniswap v4 pool guarded by the PonsV2MemeHook. There is no testnet deployment.

ContractAddressVerified via
PonsV2LaunchFactory0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7eSourcify exact match
PonsV2MemeHook0xe5e702641ea86f4ae6cc3cdaed2b886f976be044factory.memeHook(), Sourcify match
PonsV2LaunchAndBuy0xe33e9e479df8802cb0866d5d05258bec4cf62948Sourcify exact match
Locker0x267444d099b10fb5ed7c3cc7b7c767adca574952factory.locker()
Fee escrow0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9efactory.feeEscrow()
Buyback vault0x42df2a798f82289e177311362e8f5ccc45c1219cfactory.buybackVault()

Two other contracts named PonsV2MemeHook exist on 4663 (0x709f...6044, 0x5738...2044) bound to non-production factories. Only pools whose hooks equals the address above are Pons V2 pools.

Economics (read on-chain)

ParameterValueRead from
Launch fee0.0005 ETHfactory.launchFee()
Launch config id0 (the only enabled config; id 1 reverts)factory.getLaunchConfig(0)
Phantom (virtual) quote, ETH launches1.68 ETHgetLaunchConfig(0).phantomQuote
Graduation threshold, ETH launches4.2 ETHgetLaunchConfig(0).graduationThreshold and TokenLaunched logs
USDG launchesphantom 3,236 USDG, graduation 8,090 USDGfactory.pairTokenEconomics(USDG)
Supply1,000,000,000 tokens, 18 decimalsgetLaunchConfig(0).supply
Curve split5/7 sellable on curve, 2/7 reserved for the poolcurve.sellableTokens(), curve.reservedTokens()
Curve fee1% (100 bps) of the quote legcurve.feeBps()
Creator tax cap10% (1000 bps)factory.maxCreatorTaxBps()
Snipe tax99% decaying to 0 over 3 s after launchcurve.snipeTaxStartBps(), curve.snipeTaxSeconds()
Graduated poolfee 0, tickSpacing 200, full range, LP lockedgetLaunchConfig(0)
Hook fee1% per swap, 30% to protocol, 70% to creator + buybackhook.hookFeeBps(), hook.protocolFeeShareBps()

Curve pricing

The per-token curve is a constant-product AMM over (quoteReserve, tokenReserve) where quoteReserve includes the phantom quote. For a buy of quoteIn:

net       = quoteIn * (10000 - feeBps - creatorTaxBps) / 10000
tokensOut = tokenReserve * net / (quoteReserve + net)

Confirmed by simulating buy(0.01 ETH) on curve 0xa4f4ec601c6326f59527d43176a6fad46dce3e9e with a state override: the formula gives 5,740,671 tokens and the contract returned 5,740,664 (rounding). Sells mirror this on the token side. packages/tools uses an eth_call simulation for buy quotes (it also captures the snipe tax) and the formula for sell quotes.

Curve ABI derivation

The curve contract is not source-verified. Its 46 function selectors were extracted from the runtime bytecode dispatcher and resolved through the OpenChain signature database; packages/chain/test/pons.test.ts asserts every function in ponsV2CurveAbi hashes to one of those live selectors. Event layouts were read from live logs:

  • CurveBuy(address indexed sender, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 feeAmount, uint256 creatorTaxAmount)
  • CurveSell(address indexed sender, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 feeAmount, uint256 creatorTaxAmount)

Launch call

factory.launchToken(params, launchConfigId = 0, pairToken, snipeTaxExemptions) payable with msg.value = launchFee (plus nothing else; use PonsV2LaunchAndBuy.launchAndBuy for a launch with an initial buy). params is:

{ name, symbol, logo, description, socials: { twitter, telegram, discord, website, farcaster },
  creatorFeeRecipient, creatorTaxBps, buybackEnabled, expectedEconomics, salt }

expectedEconomics must equal factory.previewLaunchEconomics(launchConfigId, pairToken) (a bytes32 hash of the current config, so a launch fails closed if Pons changes parameters mid-flight). creatorFeeRecipient is where TALON points the FeeSplitter address. pairToken is address(0) for ETH, or USDG / an approved stock token (factory.approvedPairTokens(token)).

Stock tokens

Source of truth: GET https://api.robinhood.com/rhj/assets (195 assets on 2026-09-22, all on chain 4663, 18 decimals, ERC-20 plus an ERC-8056 uiMultiplier() for splits and dividends). Every stock token has a Chainlink price feed per the official docs; feed addresses are not yet captured (see open items). A curated subset (NVDA, AAPL, TSLA, MSFT, AMZN, GOOGL, META, COIN, MSTR, PLTR, AMD, NFLX, SPY, QQQ) is embedded in addresses/4663.ts; the worker refreshes the full list from the registry. HOOD is not in the registry.

Other launchpads (phase 2)

  • Flap.sh router 0x26605f322f7ff986f381bb9a6e3f5dab0beaeb09
  • Clanker factory 0xD3f2cC1731b7Fd17f28798835C2E02f0a1839A94 (live since 2026-07-08)

Open items

  1. Chainlink feed addresses for stock tokens (docs.robinhood.com/chain/building-with-stock-tokens).
  2. Whether wss://feed.mainnet.chain.robinhood.com is a standard eth_subscribe endpoint. The indexer supports both WebSocket and HTTP polling, so this only affects latency.
  3. Uniswap v4 periphery on testnet 46630.
  4. Uniswap v3 deployment addresses on 4663 (only needed for legacy Pons V1 pools).