How BroveMarkets reads the chain, and where it stops
Every figure in the terminal is labelled by source. This page explains the sources, the refresh intervals, the derivations and the limits of interpretation.
Sources
- Chain (label “chain”). Direct JSON-RPC reads at a pinned block:
StateView.getSlot0/getLiquidityfor price, fees and in-range liquidity;ReservesLens.getPoolTVLfor per-pool core reserves (the official Uniswap lens that walks the pool’s initialized ticks);eth_getCode,eth_getStorageAtand probe calls for the hook inspector;V4Quoterfor simulations. - Index (label “idx”). PoolManager
Initialize,SwapandModifyLiquiditylogs decoded by the BroveMarkets indexer and stored in PostgreSQL, plus launch-protocol events. Rows are keyed by chain, block and log index; windows are written atomically with their cursor. - Provider (label “prov”). GeckoTerminal (24 h USD volume, USD reserves, USD price change) and DefiLlama (USD reference prices). Provider figures are shown with their fetch time and marked stale after 10 minutes; a refused request keeps the last figure as stale instead of showing nothing or zero.
- Verification. Sourcify v2 for source verification, ABI, compiler settings and proxy resolution. “Not verified on Sourcify” is not “unverified everywhere”, and “unavailable” is a transport failure, not a verdict.
Pool identity
A Uniswap v4 pool is not a contract. It is a PoolKey (currency0, currency1, fee, tickSpacing, hooks) hashed into a 32-byte pool id, living inside one PoolManager on one chain. BroveMarkets always shows the chain, the PoolManager and the full key, and never reuses a token address, a hook address or a pool id in another role. The native currency is address(0) and is always currency0.
Prices are displayed in a quote currency chosen for readability (stablecoin, then native, then wrapped native); when that quote is the pool’s currency0, the displayed price is the inverse of the pool’s token1-per-token0 convention and the page says so.
Derived figures and coverage
- Swaps 24 h, token volumes, 24 h change come from indexed Swap logs in the rolling 24 h window. The swap index backfills a bounded depth (by default about 8 hours on Robinhood Chain) and extends forward live. When the index covers less than the window, the figure is marked partial with the covered fraction. A partial window is never presented as full-day volume.
- 24 h change is the change from the first to the last indexed swap price in the window, not an exact 24-hour-ago sample. When no swaps are indexed, the provider’s figure is shown with its label.
- Price history buckets real post-swap prices into OHLC candles. Buckets inside the covered range without swaps are drawn as gaps (no trading); periods outside the coverage are absent and the chart note says so (missing history).
- Timestamps. Robinhood Chain logs carry no timestamp, so times come from block headers. Live rows get exact headers; backfilled rows interpolate between header anchors a few thousand blocks apart and are shown with “≈”.
- Swap participants. “Caller” is the
senderfield of the Swap event: the contract that called the PoolManager, normally a router. “Submitted by” istx.fromwhen resolved. Account-abstraction bundlers and bots mean neither is proven to be the end user; BroveMarkets does not label a router as the trader, does not infer buy/sell without a stated base asset, and does not call any swap a “whale”. - TVL. Per-pool reserves are never derived from the PoolManager’s aggregate token balances. They come from ReservesLens (core amounts; hook-held reserves shown separately when the hook reports them) and are priced in USD only when both token prices are known; otherwise USD reads unavailable.
- Reorgs. The indexer keeps a block-hash trail; when the chain disagrees it rolls back every table above the fork and the swap feed drops those rows.
Hook evidence levels
Verified established from verified source or from a rule the PoolManager enforces (for example the address permission bits). Observed read from chain state, bytecode or indexed transactions at a stated block, including quoter simulations. Heuristic interpretation of names and patterns; can be wrong. Unknown the evidence was not available; this is never a finding of safety.
- Permission bits alone do not prove what the code does.
- Verified source does not imply audited or safe. BroveMarkets names no audit it cannot link.
- A successful simulation does not guarantee a future trade succeeds; it is one block, one amount, one sender context.
- A failed
owner()call does not mean there is no admin. - There is no trust score. Findings are a checklist with severity only where the evidence justifies one.
Supported chains and coverage
| Chain | Status on this host | PoolManager | Providers | Launch adapters |
|---|---|---|---|---|
| Robinhood Chain (4663 · mainnet) | Indexed: screener, feed, launches, history | 0x8366a39CC670B4001A1121B8F6A443A643e40951 | GeckoTerminal, DefiLlama, Sourcify | Pons V2 |
| Ethereum (1 · mainnet) | Read-only: pool pages by id and hook inspection; no index | 0x000000000004444c5dc75cB358380D2e3dE08A90 | GeckoTerminal, DefiLlama, Sourcify | none verified |
| Base (8453 · mainnet) | Read-only: pool pages by id and hook inspection; no index | 0x498581fF718922c3f8e6A244956aF099B2652b2b | GeckoTerminal, DefiLlama, Sourcify | none verified |
| Arbitrum One (42161 · mainnet) | Read-only: pool pages by id and hook inspection; no index | 0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32 | GeckoTerminal, DefiLlama, Sourcify | none verified |
| Unichain (130 · mainnet) | Read-only: pool pages by id and hook inspection; no index | 0x1F98400000000000000000000000000000000004 | GeckoTerminal, DefiLlama, Sourcify | none verified |
Addresses come from the official Uniswap deployment registry and are re-checked against the live chain by pnpm verify:config. Testnets are not listed because no verified v4 deployment and no price feeds exist for Robinhood Chain testnet. Launch discovery lists only protocols with a verified factory and a working adapter (currently Pons V2 on Robinhood Chain); it is discovery of observed launches, not a launch service.
Refresh intervals: index tick every few seconds (in-process) or per cron schedule; list views refresh every 30 s; the swap feed polls every 5 s; provider figures every 2 minutes; hook reports are cached 5 minutes and can be re-analyzed on demand. Live figures on Data status.
What BroveMarkets does not claim
- No chain is “guaranteed safe” and no hook is “rug-proof”.
- No figure is real-time: the index lags the head by the tick interval and provider figures by their fetch time, both shown.
- No partner, integration or audit is claimed beyond the sources named above.
- Execution is not offered; BroveMarkets is a read-only terminal. Where a verified venue exists, links point to the chain explorer, never to an unverified interface.