Skip to main content
The site has no backend of its own. It reads the contracts over JSON-RPC and scans their events from the factory's deployment block, published with the addresses. Anything it shows can be reproduced with the calls below.

What the site reads

Reading the price

Uniswap v4 keeps pool state inside the PoolManager. The site reads it with extsload: the pool's state slot is keccak256(abi.encodePacked(poolId, uint256(6))); that slot packs sqrtPriceX96 in its low 160 bits and the current tick in the next 24, and the slot three positions later holds the pool liquidity in its low 128 bits. Because the coin is currency0 and the pair currency1, the price of one coin in the paired asset is
priceInPair = (sqrtPriceX96 / 2**96) ** 2
priceUsd    = priceInPair * pairUsdPrice(pair) / 1e18
marketCap   = priceUsd * 1_000_000_000
pairUsdPrice returns the oracle's price in USD with 18 decimals per 1e18 base units of the pair, so the formula holds for a 6-decimal pair such as USDC as well (its pairUsdPrice is 1e30); priceInPair is in base units of the pair per base unit of the coin.

Events to index

Decoding a swap

In a Swap event a negative amount is what the trader paid into the pool and a positive one what they received. A buy has amount1 < 0 (pair in) and amount0 > 0 (coins out); a sell the reverse. The amounts are the pool's own; the fee the hook kept is reported by the FeeTaken event in the same transaction, taken before or after the pool swap depending on the direction, so match the two by transaction hash to get a trader's gross cost or net proceeds. The sender is the contract that called the PoolManager (the Liqio router, a Uniswap router or another contract), not necessarily the wallet; the site resolves the wallet from the transaction.

Holders

Sum Transfer events per address. The PoolManager's balance is the unsold part of the supply sitting in the launch position; the hook holds only coins in transit, and the factory holds any takeover stake. Burned coins are transfers to the zero address. For a coin with holder rewards, totalShares() on the coin is the supply held by addresses that can claim, and totalDividends() the total ever recorded for holders.

RPC notes

A first full scan needs an RPC that serves eth_getLogs over the whole range from the deployment block. The official HyperEVM RPC (https://rpc.hyperliquid.xyz/evm) serves 1,000 blocks per call, and at about one block a second that is many calls; the site sends wide scans to HyperLend's RPC (https://rpc.hyperlend.finance), which serves up to a million blocks a call, and falls back to the official one. Later scans are incremental. The site caches trade history in the browser and only fetches new blocks.
Liqio on HyperEVM