Contracts

Deployed addresses, event topics for indexers, and chain facts. Three contracts, deliberately minimal: everything that can live off-chain does.

Robinhood Chain testnet (chain ID 46630)

ContractAddress
JackpotFactory0x8Aa304e470859eF5cb386191a3491B145c2E27f9
FeeLocker0x4B75633A3Ec0a823DFF5d140BCdbb807F776211E
WETH90x0dd1df4fdd55808c9d530c9599bea5107f6b9b4e
UniswapV3Factory0x09b6d850382787115969a2699f107f5a974c781b
NonfungiblePositionManager0x15e98cf94a32c7fd23a36fabb4fee612277da47b
QuoterV20x3e3d78f0e8d0b0b227c2261f407b7cda97126b9a
SwapRouter020xf4edb91d541dd1bde41cebbe72bf2d44492adca4
Testnet factValue
Chain ID46630
RPChttps://rpc.testnet.chain.robinhood.com
Explorerexplorer.testnet.chain.robinhood.com
Block time~100 ms
Gas tokennative ETH

Robinhood Chain mainnet (chain ID 4663)

Coming. Mainnet contract addresses will be published here at deployment. Chain facts: RPC https://rpc.mainnet.chain.robinhood.com, explorer robinhoodchain.blockscout.com.

What each contract does

ContractRole
JackpotFactoryOne-transaction launch: deploys the fixed-supply token via CREATE2, creates and initializes the Uniswap V3 WETH pool (1% tier), mints the single-sided liquidity position with the full supply, and transfers it to the FeeLocker with the creator/protocol fee split snapshotted. Emits TokenLaunched.
FeeLockerHolds every launch's position NFT permanently. No withdrawal, transfer, or admin path for positions exists in the code. collect(token) is permissionless: it collects accrued pool fees and splits them creator/protocol by the launch-time ratio, in both pool currencies. Funds go only to the recorded creator and the protocol treasury, never to the caller. Emits FeesCollected.
LaunchTokenFixed-supply ERC-20 (1,000,000,000 × 10¹⁸), all supply minted to the factory at construction. On-chain metadata (logo URI, socials). Launch-protection transfer hook constrains buys only during the protection window, then short-circuits forever. No owner, no mint, no pause.

Jackpot logic (pots, tickets, draws, payouts) is deliberately not on-chain; it is served and proven through the API and the draw protocol.

Event topics for indexers

These three events reconstruct the entire platform state. Canonical ordering is (blockNumber, logIndex).

TokenLaunched (JackpotFactory)

TokenLaunched(
  address indexed token,
  address indexed pool,
  address indexed creator,
  uint256 positionId,
  uint16  creatorFeeBps,
  bytes32 salt
)
topic0 = keccak256("TokenLaunched(address,address,address,uint256,uint16,bytes32)")
       = 0xc456eeb5efc0c59405b1ce399bb20b56641979f1fff0119ebabb9c1246f29323

Pool discovery: one event per launch, from the factory address.

Swap (each pool, canonical Uniswap V3)

topic0 = 0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67

Standard Uniswap V3 Swap(address,address,int256,int256,uint160,uint128,int24), emitted by each launch pool. The WETH-side fee of each swap is deterministic from its amounts and the 1% fee tier; this is the ticket-accrual source.

FeesCollected (FeeLocker)

FeesCollected(
  address indexed token,
  uint256 creatorAmount0,
  uint256 creatorAmount1,
  uint256 protocolAmount0,
  uint256 protocolAmount1
)
topic0 = keccak256("FeesCollected(address,uint256,uint256,uint256,uint256)")
       = 0x7169048ac0fa5092b61a37205ccfd5269382afea33491901921d313ebb0d6b8c

One event per collection; amounts are per pool currency (token0/token1 in Uniswap sort order). This event is the authoritative record of claimed fees feeding the pot ledger.

RPC note: the 10,000-log cap

The Robinhood Chain RPC has no block-range cap on eth_getLogs, but a query that matches more than 10,000 logs fails with error -32000 ("logs matched by query exceeds limit of 10000"). Backfill in bounded block chunks and bisect the range when you hit the error.

Prev: FairnessNext: API