Hoodit Docs
Everything a human — or an AI agent — needs to trade, quote, LP and launch markets on Hoodit.xyz, the #1 DLMM (Dynamic Liquidity Market Maker) exchange on Robinhood Chain. Machine-readable summary: /llms.txt.
What is a DLMM?
A Dynamic Liquidity Market Maker organizes liquidity into discrete price bins(a “liquidity book”). Trades inside a bin execute at that bin's exact price — zero slippage within the bin. Crossing bins moves the price one step at a time.
Fees are dynamic: a base fee (set by the pool's bin step) plus a variable fee that grows with realized volatility — the faster the market moves, the more liquidity providers earn. Hoodit is a Liquidity Book v2.2 deployment (Trader Joe / LFJ lineage, MIT), verified on Blockscout.
LP positions are LBToken shares per bin (ERC-1155-style). Single-sided deposits work as limit orders that earn fees while they wait to fill.
Chain & Contracts
All contracts are verified on Blockscout — full ABIs are on each address page. Router paths use version = 3(V2_2). Every pool is paired against WETH; the router's NATIVE methods wrap/unwrap ETH for you.
Fee Tiers (bin steps)
The bin step is the price gap between adjacent bins in basis points — it is also the base fee. Open presets anyone can create pools with:
| Bin step | Base fee | Intended for |
|---|---|---|
| 10 | 0.10% | majors / correlated pairs |
| 25 | 0.25% | mid-caps, stock tokens |
| 50 | 0.50% | volatile pairs |
| 100 | 1.00% | meme pairs |
| 200 | 2.00% | hyper-volatile, wide bins |
| 500 | 5.00% | extreme moves, widest bins |
On top of the base fee, a variable fee accrues with volatility (capped so total fee stays below 10%). 25% of all swap fees are protocol share; the remaining 75% goes to liquidity providers in the bins that traded.
REST API (indexer)
Free, no auth, CORS-open. Base URL: https://indexer-production-8705.up.railway.app
curl https://indexer-production-8705.up.railway.app/pools curl https://indexer-production-8705.up.railway.app/pools/0x83De75e1794861F1D5d1943F9aC9FE269B500da9/bins?range=40
Swapping (viem)
1) quote with LBQuoter, 2) swap through LBRouter. Path versions are 3 (V2_2) for every Hoodit pool.
import { createWalletClient, createPublicClient, http, parseEther, parseAbi } from "viem";
const chain = {
id: 4663, name: "Robinhood Chain",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
rpcUrls: { default: { http: ["https://rpc.mainnet.chain.robinhood.com"] } },
};
const quoterAbi = parseAbi([
"struct Quote { address[] route; address[] pairs; uint256[] binSteps; uint128[] amounts; uint128[] virtualAmountsWithoutSlippage; uint128[] fees; }",
// versions omitted in this trimmed struct on some ABIs — use the Blockscout ABI in production
"function findBestPathFromAmountIn(address[] route, uint128 amountIn) view returns (Quote)",
]);
const routerAbi = parseAbi([
"function swapExactNATIVEForTokens(uint256 amountOutMin, (uint256[] pairBinSteps, uint8[] versions, address[] tokenPath) path, address to, uint256 deadline) payable returns (uint256)",
"function swapExactTokensForNATIVE(uint256 amountIn, uint256 amountOutMinNATIVE, (uint256[] pairBinSteps, uint8[] versions, address[] tokenPath) path, address to, uint256 deadline) returns (uint256)",
]);
const WETH = "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73";
const TOKEN = "0x…"; // token you're buying
const pub = createPublicClient({ chain, transport: http() });
// quote ETH -> TOKEN
const q = await pub.readContract({
address: "0x5da71dF26891932B59a80588dAf8c13DfB1C684a", abi: quoterAbi,
functionName: "findBestPathFromAmountIn",
args: [[WETH, TOKEN], parseEther("0.01")],
});
const amountOut = q.amounts[q.amounts.length - 1];
// swap with 1% slippage
await wallet.writeContract({
address: "0x138D1111bE8957E3FEbC126385034bdb84B1f93B", abi: routerAbi,
functionName: "swapExactNATIVEForTokens",
args: [
(amountOut * 99n) / 100n,
{ pairBinSteps: q.binSteps, versions: q.binSteps.map(() => 3), tokenPath: [WETH, TOKEN] },
me, BigInt(Math.floor(Date.now() / 1000) + 300),
],
value: parseEther("0.01"),
});Providing Liquidity
Deposits target bins relative to the active bin via deltaIds with per-bin distributionX/Y weights that each sum to 1e18. Token X fills bins above the active price, token Y (WETH) below. Common shapes: uniform (“spot”), gaussian around price (“curve”), or edge-weighted (“bid-ask”).
// addLiquidityNATIVE — 5 bins centered on the active bin, uniform shape
const n = 5, deltaIds = [-2, -1, 0, 1, 2];
const w = 10n ** 18n / BigInt(n);
const params = {
tokenX: TOKEN, tokenY: WETH, binStep: 100n,
amountX, amountY,
amountXMin: amountX * 99n / 100n, amountYMin: amountY * 99n / 100n,
activeIdDesired: BigInt(activeId), idSlippage: 5n,
deltaIds,
distributionX: deltaIds.map(d => (d >= 0 ? w : 0n)), // X above/at price
distributionY: deltaIds.map(d => (d <= 0 ? w : 0n)), // Y at/below price
to: me, refundTo: me,
deadline: BigInt(Math.floor(Date.now() / 1000) + 300),
};
await wallet.writeContract({
address: "0x138D1111bE8957E3FEbC126385034bdb84B1f93B", abi: routerAbi,
functionName: "addLiquidityNATIVE", args: [params], value: amountY,
});
// withdraw: approveForAll(router) on the pair, then removeLiquidityNATIVE
// with your bin ids + LBToken share amounts (balanceOfBatch for live values).Get activeId from GET /pools/:pair/bins or the pair's getActiveId(). A single-sided deposit (only X above price, or only Y below) is a fee-earning limit order.
Creating a Pool
Permissionless for the open bin steps (10, 25, 50, 100, 200, 500). Price is encoded as a bin id: id = 8388608 + log(price) / log(1 + binStep/10000) (price in tokenY-per-tokenX, decimals adjusted).
await wallet.writeContract({
address: "0x22602d966DeFd638ee94E97A92e2Eb0934c3fE1B",
abi: parseAbi(["function createLBPair(address tokenX, address tokenY, uint24 activeId, uint16 binStep) returns (address)"]),
functionName: "createLBPair",
args: [TOKEN, "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73", activeId, 100],
});Or just use the /create page — it resolves the bin id from a human price for you.
Notes for AI Agents
- Machine-readable index at hoodit.xyz/llms.txt; this page is the canonical integration reference.
- Discover markets via
GET https://indexer-production-8705.up.railway.app/pools— no key, no rate card; be polite (≤1 req/s sustained). - All pools quote against WETH (0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73). Prices from the API are human-adjusted floats; on-chain prices are 128.128 fixed point.
- Always quote first (LBQuoter), apply slippage bounds, and set a deadline. Router version code for Hoodit pools is
3. - Verify you are on chain id 4663 before signing. Contract source is verified on Blockscout — fetch ABIs from
https://robinhoodchain.blockscout.com/api.