Uniswap V4 liquidity locks, explained.
Locking liquidity in Uniswap V4 can mean two different things: a contract that holds the position NFT, or a hook that refuses removals. They fail in different ways. This guide covers both, how fees keep flowing while a position is locked, and the checks a buyer can run on any V4 lock. HoodLock is the NFT kind, on Robinhood Chain.
The short answer
In Uniswap V4 all liquidity sits in one PoolManager contract, and the PositionManager mints an ERC-721 for each position. Whoever owns that NFT decides when liquidity leaves. A V4 liquidity lock moves the NFT into a contract that will not return it before a date, while still using it to claim the position's trading fees.
A V4 position is an NFT
V4 replaced one contract per pool with a single PoolManager. Liquidity inside it is recorded against whoever added it, and for normal positions that is the PositionManager, which mints an NFT per position and tracks it by tokenId. The holder of the NFT is the only one who can tell the PositionManager to remove that liquidity.
Each NFT belongs to one pool, identified by its pool key: currency0, currency1, the fee, the tickSpacing and the hooks address. A zero address as a currency means native ETH, so V4 pairs often hold ETH rather than wrapped ETH. Change any field of the key and it is a different pool.
On Robinhood Chain the PositionManager is 0x58da…4fA7.
NFT locks versus hook-based locks
NFT custody lock
A locker contract owns the position NFT until the unlock date. It works on any pool and can be added at any time after the position exists. You trust the locker's code: who can withdraw, and when.
Hook-based lock
The pool's hook enforces the lock itself, for example by reverting in beforeRemoveLiquidity until a date. The hook is part of the pool key, so it has to be chosen when the pool is created and cannot be added to an existing pool later.
Different failure modes
A hook lock is only as good as the hook: if its code is upgradeable or has an owner, the rule can change. If it is buggy, liquidity can stay stuck after the date too.
Fees under a hook lock
V4 core treats a change of zero liquidity as a removal when it decides which hook to call. A hook that reverts every removal therefore also blocks fee claims, unless it lets zero-size changes through.
Why fees stay claimable while locked
In V4, a position's trading fees are settled whenever its liquidity is modified. Modifying by zero settles the fees without moving any principal, and a take action in the same call sends them out. Only the NFT's owner can ask for that, which is why the locker has to do it for you.
The HoodLock Liquidity Locker collects with an increase of exactly zero liquidity followed by a take of both currencies. It never settles a debt and never sends ETH into the pool, so a hook that tries to take more than the fees makes the whole collect revert instead of drawing on anything else. HoodLock keeps 25% of what arrives and sends the rest to the fee wallet you chose. In an ETH pair the fees arrive as ETH; if your wallet cannot accept it directly, it is held for you to claim.
Collecting and withdrawing are separate. A collect that fails because of a token or a hook cannot stop the withdraw at the unlock date.
What a buyer should verify
The tokenId and its owner
Call ownerOf(tokenId) on the PositionManager. It should be the locker contract, not a wallet.
The pool key
getPoolAndPositionInfo(tokenId) returns currency0, currency1, fee, tickSpacing and hooks. Check it is the pool the token really trades in, and note the hooks address.
The liquidity
getPositionLiquidity(tokenId) must be above zero. Compare it with the pool's depth; a lock on a tiny position proves little.
The unlock date
On HoodLock, lockIdOf(manager, tokenId) gives the lock id and getLock(id) gives unlockTime. Dates can be extended, never shortened.
Who can withdraw
getLock(id).owner is the only address that can withdraw, and only after the date. Look for any migrate or admin path that could move the NFT sooner.
The hook
Read the hook's permissions and its source. hookVerified in getLock shows whether it was on HoodLock's reviewed list when the lock was made.
The risks hooks bring
Permissions live in the address
The lowest 14 bits of a hook's address say which callbacks it runs. They never change, but the code behind them can, if the hook is a proxy or has an owner.
Remove-liquidity callbacks
A hook that acts on removals can block liquidity from leaving the pool after unlock, or take a share of what is removed. A hook that only acts on swaps never runs when liquidity is removed.
Fee-taking hooks
Launchpad hooks, such as those Pons and Clanker use on Robinhood Chain, take their fee on trades. That changes what traders pay, not what a locked position holds.
How HoodLock handles it
A position whose hook is not on the reviewed list can only be locked with an explicit opt-in, and the app warns first. Withdraw is a plain NFT transfer that calls no pool, hook or token.
Built for V4 on Robinhood Chain
Subscribers removed
A V4 position can carry a subscriber contract that is notified when it changes. The locker drops it when the position arrives.
Fee rate frozen
HoodLock takes 25% of collected fees, fixed for each lock at creation and capped in the contract.
Public proof
Every lock gets a page with the pair, amounts, range and unlock date, read from the chain, to share with holders.
Same locker for V3
V3 positions use the same contract. See how a V3 liquidity lock works.
The cost
| Amount | When | |
|---|---|---|
| Lock a V4 position | 0 ETH | Once, when you lock |
| HoodLock fee | 25% of collected fees | Each time fees are collected |
| Extend, move or withdraw | Free | Gas only, withdraw only after lock period |
Common questions
What is a Uniswap V4 liquidity lock?
A contract that holds a V4 position NFT, minted by the PositionManager, until an unlock date. Nobody can remove the liquidity while the contract holds the NFT, but the position keeps earning trading fees.
Is a hook-based lock the same as locking the LP NFT?
No. A hook-based lock is written into the pool's hook and has to exist when the pool is created. An NFT lock works on any pool at any time, and depends on the locker contract instead of the hook.
Can I add a locking hook to an existing V4 pool?
No. The hook address is part of the pool key, so a pool with a different hook is a different pool. Existing liquidity can only be locked by locking the position NFT.
Do I still earn fees while my V4 position is locked?
Yes. The locker claims them with a zero-liquidity modify that leaves the principal untouched. HoodLock keeps 25% of what you collect, and the rest goes to the wallet you chose.
Can a hook stop me from getting my position back?
Not from HoodLock. Withdrawing returns the NFT without calling the pool or its hook. A hook that acts on removals still runs later, when you remove the liquidity from the pool, and the app tells you before you lock.
Can I lock a Uniswap V4 position on Robinhood Chain?
Yes. HoodLock runs on Robinhood Chain (chain id 4663) and locks positions from the Uniswap V4 PositionManager there, including native ETH pairs and pools with hooks such as Pons and Clanker.
Can I move a lock to another wallet?
Yes. The new owner controls the lock, and the fee wallet moves to them at the same time, so the old owner stops receiving fees.
Lock your V4 position
Pick the position, choose the date, sign twice. The contract is verified on the explorer and cannot be upgraded.