Developer Documentation

Build on Hoodlab

Read, trade, and integrate Hoodlab tokens on Robinhood Chain. Every launch ships with locked Uniswap V3 liquidity, immutable taxes, and source-verified contracts.

Overview

Hoodlab lets anyone launch a token in one transaction. Under the hood the launcher mints a fixed supply, opens a Uniswap V3 pool against WETH, and seeds it with one-sided liquidity — the entire token supply, no ETH. Buyers bring the ETH; the price discovers upward along the V3 curve. The liquidity position (an NFT) is held by the launcher forever, so it can never be withdrawn.

Liquidity locked
LP NFT held by the launcher forever — no rug pulls.
Immutable taxes
Buy/sell taxes are fixed at launch. No hidden setters.
Verified source
Token source is published & verified on Blockscout.

Network

Hoodlab runs on Robinhood Chain, an EVM chain with a native ETH gas token. Add it to any wallet:

Network nameRobinhood Chain
Chain ID4663 (0x1237)
RPC URLhttps://rpc.mainnet.chain.robinhood.com
Explorerhttps://robinhoodchain.blockscout.com
CurrencyETH — 18 decimals

Core contracts

Standard Uniswap V3 deployment plus the Hoodlab launcher. Click any address to copy it.

Hoodlab Launcher
launch • claimFees • reads
0xd3EDd6a2ea86371CE0915458f4af100a5867920B
Baby / Stock Launcher
holders rewarded in a chosen token
0xDfee700B1546616e76A6045823b9874F41C2E00A
WETH9
wrapped native ETH — the quote token
0x0bd7d308f8e1639fab988df18a8011f41eacad73
Uniswap V3 Factory
0x1f7d7550b1b028f7571e69a784071f0205fd2efa
SwapRouter02
swaps
0xcaf681a66d020601342297493863e78c959e5cb2
QuoterV2
off-chain price quotes
0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7
NonfungiblePositionManager
LP positions
0x73991a25c818bf1f1128deaab1492d45638de0d3
Multicall3
batch reads (canonical address)
0xcA11bde05977b3631167028862bE2a173976CA11

The public RPC is a non-archive node — batch view reads through Multicall3 rather than fanning out per-call, and pull volume/price history from an indexer.

How a launch works

A creator calls launch(...) with a name, symbol, total supply, virtual ETH, a fee tier, and a token type. The starting price and market cap are set purely by those two numbers:

Starting price
virtualEth / supply
ETH per token at block zero
Launch market cap
= virtualEth
fully-diluted, in ETH

The launcher then, atomically:

  1. Mints the full supply to itself.
  2. Creates (or reuses) the Uniswap V3 pool token / WETH at the chosen fee tier.
  3. Adds one-sided liquidity — the whole supply, zero ETH — so the price only moves up as buyers arrive.
  4. Keeps the LP NFT permanently. Creators can claim trading fees, never the liquidity.

Fee tier is a Uniswap uint24 (e.g. 10000 = 1%). Every launch emits TokenLaunched(token, creator, pool, …) and the token itself emits LaunchedOnHoodlab at mint.

Token types

Every launch picks one of three token contracts. All three use a fixed supply, no owner, no mint, and the safe infinite-approval transferFrom pattern.

Type 0Standard

A minimal ERC-20. No taxes, no privileged roles. What you see is what you get.

Type 1Tax

Charges a buy and/or sell tax in basis points (buyTaxBps / sellTaxBps) routed to a fixed taxRecipient. Both are set at launch and can never change.

Type 2Rewards

Same taxes, but the proceeds are redistributed to holders. Check a holder's claimable amount with pendingRewards(holder) and pull it with claimRewards().

Baby & stock launches

A launch style that pays your holders in another token rather than the token itself. The creator's swap-fee revenue is auto-converted into a chosen rewardToken and streamed pro-rata to holders. It runs on a separate launcher, HoodBabyLauncher (0xDfee700B1546616e76A6045823b9874F41C2E00A), with its own HoodBabyToken contract.

Stock launchReward = a tokenized stock

Holders earn a stock token (e.g. AAPL, NVDA, TSLA) that trades on Robinhood Chain. The reward picker is limited to the stock list.

Baby tokenReward = any v3 token

The same mechanism, but the reward can be any token with a WETH Uniswap V3 pool. On-chain, stock launch and baby token are the identical contract — only the picker differs.

On claimFees, the creator's 70/30 split flows like this:

  • The creator keeps their 70% token share, sent to their chosen recipient.
  • The creator's 70% ETH share is swapped WETH → rewardToken and pushed into the token contract.
  • It is credited across holders through a per-share accumulator — pull-based, so it scales to any number of holders with no on-chain loop.
  • The protocol keeps its usual 30%.

The token itself carries no transfer tax. A holder reads their claimable amount with pendingReward(holder) and pulls it with claimReward(), receiving the reward token directly. The chosen reward is immutable per launch and emitted in TokenLaunched(token, creator, pool, …, rewardToken, rewardPoolFee, …).

Reading on-chain data

Enumerate launches from the launcher, then read the live price from the pool's slot0. Example with ethers v6:

import { ethers } from 'ethers'; const provider = new ethers.JsonRpcProvider('https://rpc.mainnet.chain.robinhood.com', 4663); const LAUNCHER = '0xd3EDd6a2ea86371CE0915458f4af100a5867920B'; const launcher = new ethers.Contract(LAUNCHER, [ 'function launchesCount() view returns (uint256)', 'function launches(uint256) view returns (address token,address pool,address creator,uint256 positionId,uint256 supply,uint256 virtualEth,uint24 fee,uint40 launchedAt,uint8 tokenType,uint16 buyTaxBps,uint16 sellTaxBps,uint16 devAllocBps,string metadataURI)', ], provider); const n = await launcher.launchesCount(); const l = await launcher.launches(n - 1n); console.log(l.token, ethers.formatEther(l.supply), 'tokens');

Turn the pool's sqrtPriceX96 into a price. Uniswap orders token0 < token1 by address, so invert when the token isn't token0:

const WETH = '0x0bd7d308f8e1639fab988df18a8011f41eacad73'; const pool = new ethers.Contract(l.pool, ['function slot0() view returns (uint160 sqrtPriceX96,int24,uint16,uint16,uint16,uint8,bool)'], provider); const { sqrtPriceX96 } = await pool.slot0(); const tokenIs0 = l.token.toLowerCase() < WETH; let priceInEth = (Number(sqrtPriceX96) / 2**96) ** 2; if (!tokenIs0) priceInEth = 1 / priceInEth; const mcapEth = priceInEth * Number(ethers.formatEther(l.supply));

For 24h volume, price history and USD figures, read from a DEX indexer (e.g. DexScreener's /tokens/{addr} endpoint) rather than scanning logs on the public RPC.

Trading

Hoodlab tokens are plain Uniswap V3 pairs, so the standard SwapRouter02 works directly. Buying is WETH → token; quote first with QuoterV2 to set slippage.

const ROUTER = '0xcaf681a66d020601342297493863e78c959e5cb2'; const router = new ethers.Contract(ROUTER, [ 'function exactInputSingle((address tokenIn,address tokenOut,uint24 fee,address recipient,uint256 amountIn,uint256 amountOutMinimum,uint160 sqrtPriceLimitX96)) payable returns (uint256)', ], signer); const amountIn = ethers.parseEther('0.1'); const tx = await router.exactInputSingle({ tokenIn: WETH, tokenOut: l.token, fee: l.fee, recipient: await signer.getAddress(), amountIn, amountOutMinimum: quotedOut * 95n / 100n, sqrtPriceLimitX96: 0, }, { value: amountIn });

Selling reverses the path (token → WETH) and needs an ERC-20 approve on the router first. For Tax and Rewards tokens, remember the buy/sell tax is applied inside the transfer, so set amountOutMinimum accordingly.

Creator fees

The locked LP position accrues Uniswap V3 swap fees on every trade. Creators claim their share directly from the launcher; the liquidity itself always stays locked.

70%
to the creator
30%
to the protocol
Split of the accrued trading fees, paid in ETH + tokens on each claim.
const launcher = new ethers.Contract(LAUNCHER, ['function claimFees(address token,address recipient) returns (uint256 creatorEth,uint256 creatorTokens)'], signer); await launcher.claimFees(tokenAddress, await signer.getAddress());

Each claim emits FeesClaimed with the creator and protocol amounts.

Safety model

Hoodlab is designed so a launch can't turn on its holders after the fact:

Liquidity can't be pulled

The LP NFT is owned by the launcher, not the creator. There is no withdraw path.

No owner, no mint

Token supply is fixed at launch. There is no owner role, no mint, no blacklist.

Taxes are immutable

Buy/sell taxes are constructor args — there are no setters to raise them later.

Verified source

Each token's source is published & verified on Blockscout so anyone can audit it.

On top of the contracts, the app runs an on-chain safe-check against external tokens it lists — flagging wash-trading (one wallet behind most volume), disperse clusters (holders funded by one source), and honeypots (many buyers, no independent sellers) using explorer data. Hoodlab's own launches skip the scan because the guarantees above are enforced by the contracts.

Resources