Robinhood indexer
Decoded Robinhood Chain activity in ClickHouse SQL: 200M Uniswap v3 and v4 swaps, pool and ERC-20 metadata, and eight launchpads, with the execution envelope on every row.
// updated 2026-09-07
Robinhood Chain decoded into a ClickHouse database you query with SQL. Swaps, pools, tokens and launchpad activity are already parsed out of the logs - you write queries, not decoders.
What's indexed
The robinhood database holds 25 surfaces. These are the ones most work starts from:
| Table | What it holds | Rows | Size |
|---|---|---|---|
uniswap_v3_trades | One row per v3 swap: signed token deltas, post-swap price and liquidity, tick, sender and recipient | 131M | 34.1 GB |
uniswap_v4_trades | One row per v4 swap, plus the per-swap fee that hooks can vary | 69.1M | 16.3 GB |
uniswap_v3_pools | v3 pool creations: token pair, fee tier, tick spacing | 658K | 238 MB |
uniswap_v4_pools | v4 pool initializations: currencies, fee, tick spacing, hooks contract, opening price and tick | 554K | 216 MB |
tokens | ERC-20 identities: name, symbol, decimals, creator, descriptive metadata | 64.4K | 31.4 MB |
Alongside them sit eight launchpads - Pons, Flap, Doppler, Noxa, Nox, Letscash, Varo and Long. Full column lists for all 25 are in the Table reference.
History: from 22 May 2026 to now, continuously refreshed.
Every launchpad reads the same way. A _creations table holds the launch record - deployer, token metadata, and the pool it opened against. A _trading surface holds the swap stream for those pools. Where the launchpad graduates tokens onto a public AMM there is a _migrations table, and where it runs its own bonding curve there is _curve_trades. Learn one and you can read all eight.
How the pieces fit
| From | Column | To | Column |
|---|---|---|---|
uniswap_v3_trades | pool_address | uniswap_v3_pools | pool_address |
uniswap_v4_trades | pool_id | uniswap_v4_pools | pool_id |
uniswap_v3_pools | token0 / token1 | tokens | token_address |
uniswap_v4_pools | currency0 / currency1 | tokens | token_address |
pons_creations | token | pons_migrations | token |
The two Uniswap versions key their pools differently. v3 identifies a pool by its deployed address in pool_address; v4 has no per-pool contract and uses pool_id. Any query spanning both versions has to normalize the two into one column - there is a ready-made pattern in Query examples.
Scale amounts with decimals from tokens. Every amount, value and fee column is a raw integer in base units. Prices arrive as sqrt_price_x96, a Q64.96 fixed-point integer - square it, divide by 2 to the 192nd, then adjust for the decimal difference between the two tokens to get a human price.
What this makes easy
- Cross-version price series for any pair, built straight from v3 and v4 swaps.
- Pool discovery and ranking - which pools carry the volume in a given window, by trades or by unique senders.
- Launchpad funnels - launches, bonding-curve activity, graduations to an AMM, and what happened after.
- Token provenance - who deployed a token, when, and in the same transaction as what.
- Execution-cost analysis - gas used, base fee and priority fee travel with every decoded event.
Interfaces
- ClickHouse SQL - connect with DBeaver, DataGrip, the Python client, or anything speaking the HTTP or native protocol.
- Custom REST endpoints - a recurring query deployed as a stable URL, quoted per scope.
Connection
The database is named robinhood. It is separate from the Solana, Hyperliquid and Polymarket datasets and is provisioned with its own credentials.
Host, port and credentials are provisioned per customer via Telegram @supanode_tgs. Keep them in environment variables or a local .env, never in source.
Python
import os
import clickhouse_connect
client = clickhouse_connect.get_client(
host=os.environ['CH_HOST'],
port=int(os.environ['CH_PORT']),
username=os.environ['CH_USER'],
password=os.environ['CH_PASSWORD'],
database='robinhood',
secure=True,
)
df = client.query_df("""
SELECT block_timestamp,
pool_address,
sender,
toString(amount0) AS amount0_raw,
toString(amount1) AS amount1_raw,
tick
FROM uniswap_v3_trades
PREWHERE block_timestamp >= now() - INTERVAL 1 HOUR
ORDER BY block_number DESC, transaction_index DESC, log_index DESC
LIMIT 100
""")
print(df.head())
Keep 128- and 256-bit integers as strings. amount0, amount1, sqrt_price_x96 and the fee columns exceed what a JSON number or a float64 can hold. Wrap them in toString() before they leave ClickHouse, or you will lose precision silently.
DBeaver
- 1New connection
Create a New Connection and select the ClickHouse driver.
- 2Host and port
Enter the host and port we provisioned for you.
- 3Database
Set the database to
robinhood. - 4Credentials
Enter your username and password, then test the connection.
Filter block_timestamp in PREWHERE on the trade tables. It feeds the partition key toYYYYMMDD(block_timestamp) on uniswap_v3_trades, uniswap_v4_trades, pons_curve_trades and flap_curve_trades. Without it a query scans all 34 GB of the v3 stream.
Access
Provisioning is manual, over Telegram: @supanode_tgs.
Free trial up to 24 hours. Activate it via Telegram before committing to a subscription.
Next steps
All 25 tables, column by column.
Cross-version swap feeds, active pools, launchpad funnels.
How the subscription is quoted, billing, free trial.