How a Uniswap V3 liquidity lock actually works.
A Uniswap V3 liquidity position is not a token balance. It is one NFT with its own price range, so locking it means handing that NFT to a contract and trusting what the contract can do with it. This page covers the mechanics, the questions to ask any V3 locker, and how HoodLock answers them on Robinhood Chain.
The short answer
A Uniswap V3 liquidity lock is a contract that takes ownership of the position NFT minted by the NonfungiblePositionManager and refuses to hand it back before a set date. The liquidity stays in the pool and keeps earning. Because only the NFT's owner can call decreaseLiquidity, nobody can pull the liquidity while the locker holds it, but the locker can still call collect() and pass the trading fees on.
Why a V3 lock is not an ERC-20 lock
On Uniswap V2, every provider in a pair holds the same fungible LP token, and a share of the pool is just an amount of it. Locking V2 liquidity means locking an amount, which is why an ordinary token locker can do it.
Uniswap V3 dropped the shared LP token. Each deposit picks a price range, two ticks called tickLower and tickUpper, and the NonfungiblePositionManager mints a separate ERC-721 for it. The NFT's tokenId points at that one range, its liquidity and any fees it is owed. Two positions in the same pool are not interchangeable, so there is no amount to lock, only a whole position.
That changes what a lock proves. A V3 lock covers one specific position, not "the liquidity" of a pool. Its value moves with the price, and a narrow range that the price has left holds only one of the two tokens and earns nothing until the price returns. Reading the range is part of reading the lock.
What to read from a V3 position
positions(tokenId)
The position manager returns token0, token1, the fee tier, tickLower, tickUpper, liquidity and tokensOwed0/1. That is the whole position.
The pool
The pool is the V3 factory's getPool(token0, token1, fee). Make sure it is the pool the token actually trades in, not a side pool with almost no volume.
The range
A full-range position sits at the lowest and highest ticks the fee tier allows, for example -887200 and 887200 in a 1% pool. A narrow range can drift out of the price and stop backing trades.
The share
One position can be a small part of a pool. Compare its liquidity with the pool's to see how much of the depth the lock really covers.
How fees are collected from a locked V3 position
V3 fees do not compound into the position. They build up as tokensOwed0 and tokensOwed1, and collect() on the position manager sends them to a recipient. Only the NFT's owner, or an address it approved, can call it.
collect() never changes liquidity. Removing principal takes a separate call, decreaseLiquidity, which the HoodLock Liquidity Locker does not make anywhere in its code. So the locker collects for you: it calls collect() with itself as recipient, keeps 25% of what arrived, and sends the rest to the fee wallet you picked.
Whatever the position was already owed when you lock it, including liquidity you decreased earlier but never collected, is sent back to you in full before the lock starts, with no HoodLock share taken.
Admin and migrator risks in V3 lockers
A locker that holds the NFT is only as safe as the powers around it. OpenZeppelin's audit of the UNCX Uniswap V3 liquidity locker is a good map of what to ask. There the contract owner can add fee options, change the auto collector and the fee destinations, and set the migrator, a contract lock owners can move their lock to. The report points out that a malicious migrator could effectively burn the positions of users who choose to migrate, and that the system relies on UNCX acting in users' interest. It also found that position managers were not restricted at first and that a previous lock owner could keep collecting fees after a transfer, both fixed before release.
None of that makes a migrator wrong, since owners opt in. It is simply a power to know about. Here is how the HoodLock Liquidity Locker on Robinhood Chain handles the same questions.
How HoodLock answers them
No migrator
The contract has no migrate function and no function that lets anyone make arbitrary calls from it. A locked position leaves only through withdraw, by its owner, at or after the unlock date.
Two fixed position managers
It accepts only the Uniswap V3 NonfungiblePositionManager 0x7399…E0D3 and the V4 PositionManager on Robinhood Chain. Both are set at deployment and cannot be changed.
Fees move with the lock
Handing a lock to a new owner moves the fee wallet to them in the same call, so the old owner stops receiving fees at once.
Fee frozen per lock
The collect fee is fixed for each lock when it is created and capped at 30% in the contract. The admin can change it for new locks only.
Admin cannot reach locked positions
The admin's function for returning a stray NFT reverts on any position with an active lock. A keeper can trigger a collect, but it pays only the lock's own fee wallet.
Not upgradeable
No proxy. The source is verified on the explorer, and the admin is a single wallet whose powers are listed in the contract reference.
Check a V3 lock yourself
Who owns the NFT
Call ownerOf(tokenId) on the NonfungiblePositionManager. If it is a wallet, nothing is locked.
Is it locked here
If the owner is the HoodLock Liquidity Locker, lockIdOf(manager, tokenId) returns the lock id. 0 means not locked.
Owner and date
getLock(id) gives the owner who can withdraw and the unlockTime. Dates only move later.
Range and size
Read positions(tokenId) for the ticks and liquidity, and compare it with the pool's total.
The cost on Robinhood Chain
| Amount | When | |
|---|---|---|
| Lock a V3 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
Why can't I lock a V3 position in a normal token locker?
A token locker locks an amount of a fungible ERC-20. A V3 position is an ERC-721 NFT with its own range, so it has no amount to lock. It needs a locker that takes custody of the NFT itself.
Can I still collect fees while my V3 position is locked?
Yes. The locker calls collect() on the position for you, which moves the owed fees without touching liquidity. HoodLock keeps 25% of what you collect.
Does a locked V3 position still earn fees out of range?
No. A V3 position earns only while the price is inside its range. It keeps the liquidity it has, and starts earning again if the price comes back.
Can liquidity be added to a locked V3 position?
Uniswap V3 lets anyone add liquidity to an existing position. Anything added to a locked position is locked with it and comes back to the owner at the unlock date.
Does HoodLock have a migrator like other V3 lockers?
No. There is no migrate function. A locked position can only leave through withdraw, called by the lock owner at or after the unlock date.
Can I lock a Uniswap V3 position on Robinhood Chain?
Yes. HoodLock runs on Robinhood Chain (chain id 4663) and locks positions from the Uniswap V3 NonfungiblePositionManager there. Connect your wallet and your V3 positions are listed.
Does this work for V2 LP tokens?
V2 LP tokens are ordinary tokens, so they go through the token locker instead.
Lock your V3 position
Pick the position, choose the date, sign twice. The contract is verified on the explorer and cannot be upgraded.