Docs · Robinhood Chain · chain id 4663
Goo Exchange
A permissionless concentrated-liquidity DEX on Robinhood Chain. Every pool is a Uniswap V3 pool: the same maths, storage, interface, events and swap callback. Anyone can open a pool for any pair. The main pool is GOO/WETH, and GOO/stock pools pair GOO with Robinhood's tokenized stocks.
For an aggregator, a Goo Exchange pool behaves like any Uniswap V3 pool with one difference: pools are
deployed by a separate pool deployer contract, so an address computed with CREATE2 must use
the pool deployer and our init code hash, not the factory. Everything else, including discovery from the
factory's PoolCreated logs, works unchanged.
Quick reference
- DEX type
- Uniswap V3 fork (v3-core and v3-periphery)
- Chain
- Robinhood Chain, id 4663
- Factory
- 0x221A6239E40709792b0d4bdc140fA36158CD41C7
- Factory deploy block
- 73266708 start log scans here
- Pool deployer
- 0x9eF8bfae948B012EDD9e902Beb0d55F475631396
- Pool init code hash
- 0x361074a657704920539a5187a0873cfbb0bf83771a463c46c98e615554bf9264
- Swap callback
uniswapV3SwapCallback(int256,int256,bytes)- Fee tiers
- 0.05%, 0.25%, 0.3%, 0.9%, 1%, 10%, 20% (tick spacings)
- Main pool
- GOO/WETH 1%: 0x841f00216A273641eD583916e668e24b4A89d1e7
- Public RPC
- https://rpc.mainnet.chain.robinhood.com
- Source
- Verified on Sourcify for every contract and pool
- Explorer
- robinhoodchain.blockscout.com
Contracts
Deployed on Robinhood Chain (4663) on 26 September 2026, factory block 73266708. Every contract below, pools included, has its source verified on Sourcify: repo.sourcify.dev/4663/<address>.
Pools and addresses
Pools are Uniswap V3 pools, unchanged except for where they are created. They are CREATE2 children of the
pool deployer (factory.poolDeployer()), not of the factory, so the address is:
pool = address(keccak256(0xff ++ poolDeployer ++ keccak256(abi.encode(token0, token1, fee)) ++ initCodeHash))[12:]
poolDeployer = 0x9eF8bfae948B012EDD9e902Beb0d55F475631396
initCodeHash = 0x361074a657704920539a5187a0873cfbb0bf83771a463c46c98e615554bf9264
Check your implementation against the main pool:
token0 = 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 // WETH
token1 = 0x6572EADe9Fb17F4027baF92FEAC222B9AA746bd0 // GOO
fee = 10000 // 1%
pool = 0x841f00216A273641eD583916e668e24b4A89d1e7
factory.getPool(tokenA, tokenB, fee)returns the same address, in either token order.pool.factory()returns the factory, as upstream.-
Discovery: scan the factory's
PoolCreated(token0, token1, fee, tickSpacing, pool)logs from block 73266708. The pool address comes from the event, so log-based discovery needs no init code hash.
Fee tiers
| Fee | fee (uint24) | Tick spacing |
|---|---|---|
| 0.05% | 500 | 10 |
| 0.25% non-standard | 2500 | 50 |
| 0.3% | 3000 | 60 |
| 0.9% non-standard | 9000 | 180 |
| 1% | 10000 | 200 |
| 10% non-standard | 100000 | 1000 |
| 20% non-standard | 200000 | 2000 |
Four tiers are not Uniswap's standard ones, so a hard-coded 500/3000/10000 list misses pools. The factory's
FeeAmountEnabled(fee, tickSpacing) events are the source of truth; any tier added later
emits one, after three days' public notice in the FactoryController.
Routing and execution
-
Swaps. Call
pool.swap(recipient, zeroForOne, amountSpecified, sqrtPriceLimitX96, data)directly; the pool callsuniswapV3SwapCallbackon the caller, exactly as upstream. -
Callback checks. If your executor authenticates the callback by recomputing the pool
address, compute it from the pool deployer and the init code hash above. Computing it
from the factory gives the wrong address and the check fails. Checking
factory.getPool(token0, token1, fee) == msg.senderalso works. -
Quotes. QuoterV2 (
quoteExactInputSingle,quoteExactInputand the exact-output variants) quotes against our pools. -
Tick data. There is no subgraph. Read populated ticks with
TickLens.getPopulatedTicksInWord(pool, wordIndex), and pool state withslot0()andliquidity(), batched through Multicall3. - Simulation. Pool maths are upstream's: a Uniswap V3 simulator gives exact outputs. The protocol fee changes nothing in swap amounts (see Fees).
- Tokens. Pools are permissionless and can hold any ERC-20. GOO itself has no transfer fee and no rebase.
Fees
- Swap fee. The pool's fee tier, paid by the trader, as in Uniswap V3.
-
Protocol fee. A quarter of the swap fee (
feeProtocol4 on both sides), charged from each pool's first swap. It comes out of the liquidity providers' share, so swap output is identical to an upstream pool with the same fee tier. - Where protocol fees go. Anyone can collect them through the FactoryController, to two fixed recipients: half to the FeeJar, which auctions it for GOO and burns the GOO, and half to the dev fund.
- Changes. Changing a protocol fee, adding a fee tier or transferring the factory takes three days' public notice in the FactoryController.
The GOO token
- Name, symbol
- Grey Goo, GOO
- Address
- 0x6572EADe9Fb17F4027baF92FEAC222B9AA746bd0
- Decimals
- 18
- Supply
- 1,000,000,000, minted once at deployment. It can only fall, as GOO is burned.
- Behaviour
- A plain ERC-20: no owner, no minting, no rebase, no transfer fee, no blacklist. Transfers move exact amounts.
Machine-readable
-
/docs/integration.json: the integration kit, generated from
the chain: factory, pool deployer, init code hash, deploy block, fee tiers and periphery. Its
tokens.gigais GOO. - /robinhood/deployment.json: every contract address the app uses.