How to deploy a Uniswap v4 hook: address mining, verifying and getting listed
11 November 2026
You wrote a Uniswap v4 hook and the tests pass. Deploying it is where most people get stuck, because a hook can't go on just any address.
1. Why the address matters
Uniswap v4 reads a hook's permissions from the last 14 bits of its address. Each bit stands for one moment the hook runs at, such as beforeSwap or afterAddLiquidity. If the address bits don't match what getHookPermissions() says, the PoolManager refuses to create a pool with it.
So a normal "Deploy" button, which puts the contract on a random address, won't work.
2. Mine a salt
With CREATE2, the address is fixed by three things: the deployer, a salt and the contract's creation code (including its constructor arguments). Try salts one by one until the resulting address ends in the right bits. Tools like the HookMiner helper in Uniswap's v4 periphery do this in a script, and it usually takes seconds.
The salt only works with the exact same creation code and deployer. Change a constructor argument and you have to mine again.
3. Deploy with CREATE2
Send the salt and creation code through a CREATE2 factory, for example the public one at 0x4e59b44847b379578588920cA78FbF26c0B4956C, which exists on most chains. In a Foundry script, new MyHook{salt: SALT}(...) does the same. Check that the deployed address is exactly the one you mined.
4. Verify the source code
Publish the source on the chain's block explorer (Etherscan, Basescan, Arbiscan and others). Unverified hooks look suspicious to traders, can't be reviewed, and get a worse safety score on explorers like UniHooks.
5. Create a pool and add liquidity
Initialize a pool through the PoolManager with your hook's address in the pool key, then add liquidity. Your hook appears on UniHooks within a minute of its first pool.
6. Get it into Uniswap's app
Uniswap's app only routes trades through hooks it trusts. Hooks that change trade amounts or set their own fees need Uniswap Labs to review them first. Until then, people see "This trade cannot be completed right now". To get listed:
- Add your hook to Uniswap's public hook registry on GitHub.
- Submit it for routing through Uniswap's hook allowlist form, with your verified code and any audit.
The shortcut
UniHooks Advanced does steps 2 to 4 for you: it mines the address, deploys from your wallet in one transaction and publishes the source automatically. Your hook's page then helps you with the registry submission. If you only need pool rules, Create skips deploying altogether.