Networks & addresses
One canonical address on all 23 networks — and why the address itself is the permission.
The hook and its linked library live at the same canonical addresses on every network, source-verified on each chain's explorer. Integrate once; the same bytes run everywhere.
| network | hook | env |
|---|---|---|
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | mainnet | |
| 0xb216…60C8 | testnet | |
| 0xb216…60C8 | testnet | |
| 0xb216…60C8 | testnet | |
| 0xb216…60C8 | testnet | |
| 0xb216…60C8 | testnet |
The address IS the permission
Uniswap V4 encodes a hook's permissions in the low 14 bits of its address. The hook's address carries exactly the four flags it needs:
The deployer key was mined so that its second-ever transaction (nonce 1) lands on an address with those bits, and the constructor asserts its own address — a mis-deployment fails at deploy time. Plain CREATE (not CREATE2) is what makes the address identical on every chain: it commits only to (deployer, nonce), never to the init code, so the per-chain PoolManager constructor argument doesn't change the address.
The same deployer key deploys there whenever its PoolManager exists, and the addresses still match — the deployment is repeatable by construction.
Verifying you're talking to the real hook
0xb216070c3509047ea597E2E626A29cea427a60C8 — on every network.0x20C8.FAQ
Why is the address the same on every chain?+
The contracts are deployed from a dedicated deployer key's first-ever transactions (nonce 0 and 1), so the CREATE addresses are identical by construction. Same bytecode, same address, every network.
Why does the address itself matter for V4?+
Uniswap V4 reads a hook's permissions from the low bits of its address. The canonical address carries exactly the flag bits the machine needs — an address mismatch simply couldn't run these callbacks.
Can you deploy to a chain that isn't listed?+
When a chain ships a canonical V4 PoolManager, the same deployer can repeat the deployment there with the same resulting address. Watch the repository or ask — the process is repeatable by design.
Are testnets supported?+
Yes — Sepolia, Base Sepolia, Unichain Sepolia, Arbitrum Sepolia and Robinhood Testnet run the same contracts at the same address, so a testnet integration ports to mainnet unchanged.
Is the source verified?+
On every network: Etherscan-family explorers, Blockscout instances, and Sourcify (full creation + runtime match). The docs' networks table links each explorer page directly.