# Uniswap v4 Hooks: Volume and Liquidity by Hook

> A sortable list of Uniswap v4 hooks: pools per hook, swap volume, fees, liquidity and hook permissions on each chain, decoded from PoolManager events.

Markdown copy of https://voltfincrypto.com/apps/uniswap-v4-hooks

**Question:** Which Uniswap v4 hooks attract the most volume and liquidity?

- Kind: Table in Voltfin Strata
- Topic: [DeFi](https://voltfincrypto.com/topics/defi)
- Chains: Multi-chain, Ethereum, Unichain, Base, Arbitrum, OP Mainnet, Polygon, BNB Chain, Avalanche, Blast, World Chain, Ink
- Status: Planned. The data is not published yet, so this page states no figure; each figure will open its receipt when it is.

A hook is a contract that a Uniswap v4 pool calls at set points in its life: when the pool is created, around each swap and around each change to its liquidity. Hooks let a pool charge a dynamic fee, run a token launch, rebalance or lend out its liquidity, return MEV to its providers or limit who can trade. A pool picks its hook once, when it is created, so the hook is part of the pool's identity.

This table lists every hook address that pools use, with the pools attached, the volume and fees they earned, the liquidity they hold and which callbacks the hook may run. Permissions are decoded from the hook's address itself, because v4 encodes them in the address's lowest bits, so they cannot be misreported. Sort it to find the hooks that carry the most trading or filter it by chain or permission, then open a row to see its pools and the reads behind it.

Pools without a hook appear as one row per chain, so the share of v4 volume that runs through hooks can be read against plain pools on the same chain and the same day.

## Blueprint

One row: One row per hook address per chain on the latest complete day, plus one row per chain for pools without a hook

- **Hook** (`hook`): The hook contract address, or no hook for the row of plain pools on that chain.
- **Name** (`hook_name`): The hook's name from verified source or its deployer's documentation, where either exists.
- **Chain** (`chain`): The chain this hook is deployed on.
- **Pools** (`pools`): v4 pools initialized with this hook on this chain.
- **Volume, 24 hours** (`volume_24h`, USD): Swap volume of the hook's pools on the latest complete day, valued once per swap.
- **Volume, 30 days** (`volume_30d`, USD): Swap volume of the hook's pools over the last thirty complete days.
- **LP fees, 30 days** (`lp_fees_30d`, USD): Fees paid to the pools' liquidity providers over thirty days, at the fee each Swap event recorded.
- **Hook fees, 30 days** (`hook_fees_30d`, USD): Fees the hook itself took on top of LP fees over thirty days, where its events or balances record them.
- **Liquidity** (`liquidity`, USD): Tokens of the hook's pools held in the PoolManager at the day's last block, plus any the hook exposes as held elsewhere.
- **Share of v4 volume** (`share_of_v4_volume`): The hook's thirty-day volume as a share of all v4 volume on the same chain.
- **Permissions** (`permissions`): The callbacks the hook's address flags allow, such as before swap, after swap and return delta.
- **Receipt** (`receipt`): The blocks and reads behind the row's volume and liquidity.

## How it will be measured

- Every v4 pool is found from the PoolManager's Initialize event, which records its pool id, both currencies, fee setting, tick spacing and hook address.
- Volume and fees come from the PoolManager's Swap events per pool id; the fee in each event is the rate actually charged, which a dynamic-fee hook may change swap by swap.
- Liquidity is rebuilt from ModifyLiquidity events and checked against PoolManager state at the day's last block. Tokens a hook keeps outside the PoolManager, such as liquidity it lends out, are added only where the hook exposes them.
- Permissions are the flags in the lowest bits of the hook address. Names come from verified source code or the deployer's documentation, and a hook with neither is listed by address.

## Data it needs

- `dex_swaps_daily` (to build): Swap counts and volume per DEX, pool and chain per day, decoded from Swap events, valued with stablecoin legs and oracle prices.
- `dex_liquidity_daily` (to build): Liquidity held by each DEX pool at day end, in tokens and valued in USD, with fee tier and pool age.
- `native_prices_daily` (to build): Reference prices of major assets read from on-chain oracle feeds (Chainlink latestRoundData) at each day's last block, with each round's update time.
- Source: Uniswap v4 PoolManager Initialize events: pool id, currency0, currency1, fee, tickSpacing and hooks
- Source: PoolManager Swap events per pool id, including the fee charged
- Source: PoolManager ModifyLiquidity and Donate events
- Source: Hook permission flags decoded from the lowest bits of each hook address
- Source: Hook contract creation transactions, proxy slots and verified source names

## Questions

### What is a Uniswap v4 hook?

A smart contract attached to a v4 pool that the PoolManager calls at defined moments, such as before a swap or after liquidity is added. It can change the fee, run extra logic, hold tokens or, with return-delta permissions, change the amounts a swap settles.

### How can I tell what a hook is allowed to do?

Look at its permissions column. In v4 the hook's address encodes which callbacks it may run, and the PoolManager only calls the ones whose flags are set. A hook with before-swap return-delta rights can alter a swap's amounts, which matters more than one that only reads them.

### Are Uniswap v4 hooks safe?

The table shows what each hook can do, not whether its code is sound. Permissions, upgradeability and whether the source is verified are listed so readers can judge the risk, and no hook is ever marked safe. Hooks have been exploited before, and an upgradeable hook can change its logic after pools attach to it.

### Why can a hooked pool's liquidity look small next to its volume?

Some hooks keep most of a pool's tokens outside the PoolManager, for example lending them out until a swap needs them. The PoolManager then holds less than the pool can trade against, so the table adds the hook's own holdings where the hook exposes them.

### What share of Uniswap v4 volume goes through hooks?

The rows for plain pools make it readable: each chain's hooked volume is compared with its pools without a hook for the latest day and the selected period, so the share always comes from the same day's swaps rather than from a quoted figure.

### Do hooks charge extra fees?

Some do. A hook with return-delta permissions can take its own fee from a swap on top of the pool's fee to liquidity providers. The LP fees column shows what went to providers, and the hook fees column shows what the hook took where its events or balances record it.

## Glossary

- **Hook**: A contract a v4 pool calls at set points in its life, chosen when the pool is created and fixed for that pool.
- **Pool id**: The identifier of a v4 pool, the hash of its two currencies, fee, tick spacing and hook, used in every PoolManager event.
- **Return delta**: A hook permission that lets the hook change the token amounts a swap or liquidity change settles, for example to charge a fee or fill part of a trade itself.
- **Singleton**: v4's design of one PoolManager contract holding every pool, instead of one contract per pool as in v2 and v3.

## Related apps

- [Uniswap Volume, Fees and TVL by Version and Chain](https://voltfincrypto.com/apps/uniswap-volume-fees-tvl)
- [DEX Volume by Chain and Protocol](https://voltfincrypto.com/apps/dex-volume-by-chain)
- [Zora Creator Coins: Launches, Traders and Volume](https://voltfincrypto.com/apps/zora-creator-coins)
- [Sandwich Attack Checker: Was My Swap Front-Run?](https://voltfincrypto.com/apps/sandwich-attack-checker)
- [Uniswap Fee Switch: UNI Burned and Protocol Fees](https://voltfincrypto.com/apps/uniswap-fee-switch-uni-burn)
- [DeFi TVL by Chain: Total Value Locked Rankings](https://voltfincrypto.com/apps/defi-tvl-by-chain)

Build it in Voltfin Studio: https://app.voltfincrypto.com/signup?next=%2F
