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)
| Contract | Address |
|---|---|
| JackpotFactory | 0x8Aa304e470859eF5cb386191a3491B145c2E27f9 |
| FeeLocker | 0x4B75633A3Ec0a823DFF5d140BCdbb807F776211E |
| WETH9 | 0x0dd1df4fdd55808c9d530c9599bea5107f6b9b4e |
| UniswapV3Factory | 0x09b6d850382787115969a2699f107f5a974c781b |
| NonfungiblePositionManager | 0x15e98cf94a32c7fd23a36fabb4fee612277da47b |
| QuoterV2 | 0x3e3d78f0e8d0b0b227c2261f407b7cda97126b9a |
| SwapRouter02 | 0xf4edb91d541dd1bde41cebbe72bf2d44492adca4 |
| Testnet fact | Value |
|---|---|
| Chain ID | 46630 |
| RPC | https://rpc.testnet.chain.robinhood.com |
| Explorer | explorer.testnet.chain.robinhood.com |
| Block time | ~100 ms |
| Gas token | native 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
| Contract | Role |
|---|---|
| JackpotFactory | One-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. |
| FeeLocker | Holds 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. |
| LaunchToken | Fixed-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.