goo exchange

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>.

ContractAddress
GOO (Grey Goo)ERC-20, 18 decimals0x6572EADe9Fb17F4027baF92FEAC222B9AA746bd0
WETHRobinhood Chain's wrapped ETH0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
GOO/WETH 1% poolmain pool0x841f00216A273641eD583916e668e24b4A89d1e7
V3 factoryemits PoolCreated, FeeAmountEnabled0x221A6239E40709792b0d4bdc140fA36158CD41C7
Pool deployerCREATE2 parent of every pool0x9eF8bfae948B012EDD9e902Beb0d55F475631396
SwapRouterv3-periphery0x16E5Ec75431AccB65bFcC7aEfFC1d2aeB44069b0
QuoterV2v3-periphery0xc50FFD91B3876bB28557fCd419Bf7405f68a11Eb
TickLenspopulated ticks per word0xB65FCbb1C7964B5Ddd1EF528818Ded9A19EBf959
NonfungiblePositionManagerv3-periphery, LP positions0xdc504c2DE9C26846AfdAC56385673B039c2e27cb
Goo routermulti-hop, ETH in and out; used by the app0x7E2954CE0Eb5062AE6c7f4DD62b486a5CD15f7C8
FactoryControllerowns the factory; collects protocol fees0x189e56e559d0d08F9d582637eFc94f2b1dee5419
FeeJarauctions protocol fees for GOO and burns it0xb82028EBb8254E0Cc349A6D1B633FfD6908f52B1
Multicall3canonical0xcA11bde05977b3631167028862bE2a173976CA11

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

Feefee (uint24)Tick spacing
0.05%50010
0.25% non-standard250050
0.3%300060
0.9% non-standard9000180
1%10000200
10% non-standard1000001000
20% non-standard2000002000

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 calls uniswapV3SwapCallback on 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.sender also works.
  • Quotes. QuoterV2 (quoteExactInputSingle, quoteExactInput and 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 with slot0() and liquidity(), 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 (feeProtocol 4 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.giga is GOO.
  • /robinhood/deployment.json: every contract address the app uses.