How to hand your liquidity to the DAO — so nobody, including you, can pull it
To make a DAO's liquidity rug-proof, you transfer the Uniswap position NFT into the DAO's treasury (the timelock contract) with a normal
safeTransferFrom. From that moment the liquidity is DAO-owned: collecting fees, adding or removing liquidity, or moving the position can only happen through an on-chain vote. In this guide I do exactly that with our real DFR/USDC position (NFT #188048), then record the whole thing in the DAO's books so anyone can follow the money.This is the step that turns "trust me, I won't rug you" into something the contracts enforce for me.
Why this step matters more than it looks
In the previous guide I created the DFR/USDC pool and got a position NFT — the token that represents ownership of that liquidity. But there was a problem hiding in plain sight: that NFT was sitting in my wallet. Which means, technically, I could have withdrawn all the liquidity whenever I wanted. That's the classic "rug pull," and no amount of me promising not to do it should make you comfortable.
So instead of promising, I remove my own ability to do it. I send the position NFT to the DAO's treasury — a timelock smart contract that can only act when a governance proposal passes. After the transfer:
- I can't pull the liquidity. Nobody can, alone.
- The only way the LP ever moves — to collect fees, deepen it, migrate it, or close it — is a community vote that passes quorum and clears the timelock delay.
- "The founder can't rug the DAO" stops being a slogan and becomes a fact you can verify on-chain.
Before you start (prerequisites)
- A live pool and its position NFT in your wallet. If you haven't created the pool yet, start there: How to Create a Uniswap V4 Liquidity Pool.
- Your DAO's treasury address — and a way to verify it (I'll show you). For DAOForum the treasury (DAOTimelock) is
0x27c58eeF1f6442b03864c67B08143a067Fa525E8. - The wallet holding the NFT. I used Rabby on my phone.
- A little ETH on Arbitrum for gas. The transfer is one cheap transaction.
Step-by-step: send the position NFT to the DAO treasury
- Find your treasury address — from a source you trust. I open our DAO on OpenBook (typed in myself, never a random link) and go to the Treasury tab. That's where the DAO's address lives.
- Verify it in the block explorer. I open that address on Arbiscan and confirm two things: the balance looks right (about 9,300,000 DFR in the treasury) and the contract name is DAOTimelock. Confirming the contract name matters — it proves you're sending to the real governance treasury and not a look-alike address.
- Unhide the LP NFT in your wallet. In Rabby I open the full-screen extension, go to the NFT tab, and turn off the flag that hides LP NFTs (wallets often hide them by default). Now the Uniswap position NFT shows up.
- Send it to the treasury. Click Send on the NFT, paste the verified treasury address, and confirm. Because the recipient is a smart contract (the timelock), your wallet may ask you to adjust the gas/tick settings before it will let the transfer through — that's expected when sending an ERC-721 to a contract.
- Verify it landed. Refresh the treasury on the explorer. You should see the incoming NFT transfer as the most recent transaction, matching the pool you created. Done — the liquidity now belongs to the DAO.
For DAOForum the on-chain proof is here: NFT transfer tx on Arbiscan →
Wait — is it safe to send an NFT to a contract? (Yes, here's why)
A fair worry: send a token to the wrong kind of contract and it can be stuck forever. Two things make this safe:
- The treasury can receive NFTs. Our timelock is built on OpenZeppelin's
TimelockController, which implementsonERC721Received— the standard "yes, I can accept ERC-721s" handshake. AsafeTransferFrominto it succeeds cleanly. (The "safe" insafeTransferFromis literally this check: it refuses to send to a contract that can't acknowledge the NFT.) - It's not a one-way trip. A timelock can execute any call after a proposal passes — including sending the NFT back out. So the DAO can later vote to move, migrate, or unwind the position. It's locked to governance, not locked forever.
The honest trade-off
I want to be straight about the cost of doing this, because it's real: once the treasury holds the NFT, every LP action becomes a governance action. Collecting the 0.3% swap fees, topping up liquidity, narrowing the range, migrating to a new pool — all of it now needs a proposal, a vote, and a timelock delay. It's slower and less convenient than clicking buttons in my own wallet.
That's not a bug. That's the entire point. The inconvenience is the guarantee. I trade my personal convenience for a liquidity pool that no single person — me included — can ever quietly drain.
Then we write it down: recording it in the DAO's books
Moving the NFT on-chain is only half the job. A DAO isn't a family business with balances scribbled in a notepad — it's a community structure, and asset movements should be transparent enough that anyone can follow them. So I record both events in OpenBook's double-entry ledger. (Important distinction: the ledger is off-chain accounting — a transparent bookkeeping layer. The on-chain transactions above are the source of truth; the ledger just makes them legible.)
Transaction 1 — pool creation (tokens become an LP position). The moment I deposited into Uniswap, I stopped owning "100,000 DFR + $500 USDC" and started owning one LP position. I book that position at its cost:
- DFR side: 100,000 DFR × $0.005 = $500
- USDC side: $500
- Total cost basis = $1,000
So the entry debits account 1070 – LP Position (founder-custodied) by $1,000, and credits the two wallet accounts it came from: 1050 – LP Wallet DFR (100,000 DFR) and 1060 – LP Wallet USDC ($500). Here's the neat part: those lines balance even though 100,000 ≠ 500 in raw units, because OpenBook balances on US-dollar value, not token counts. Each line carries an exchange rate, so $500 + $500 = the $1,000 position. Clean.
Transaction 2 — custody moves to the DAO. Then I record the transfer itself: move the $1,000 from 1070 (founder-custodied) to a new account, 1075 – LP Position (treasury-held). Same currency, same value — the economics don't change, only who controls it does. After this, 1070 reads $0.00 and 1075 reads $1,000.00, with a note that the position is retrievable only by governance. I attach the Arbiscan link as proof.
You can see the live books here: DAOForum ledger →
Verify everything yourself
- NFT transfer tx: 0xa47b51f8…6e8a1fac →
- Position NFT: #188048 (Uniswap V4 PositionManager
0xd88F38F930b7952f2DB2432Cb002E7abbF3dD869) - Treasury (DAOTimelock):
0x27c58eeF1f6442b03864c67B08143a067Fa525E8 - Pool creation tx: 0x3e9a2eb4…6596cbfe →
- DAO books (off-chain): openbook.to ledger →
Key takeaways
- DAO-owned liquidity means the position NFT lives in the DAO's timelock, not a personal wallet — so no one can pull the LP alone.
- You move it with a standard
safeTransferFrom; always verify the treasury address (right balance +DAOTimelockcontract name) before sending. - Sending an NFT to the timelock is safe (it implements
onERC721Received) and reversible by governance (a passed proposal can send it back out). - The trade-off: every LP action now requires a vote. That inconvenience is exactly what makes the liquidity rug-proof.
- Record it in the DAO's off-chain ledger too: book the LP position at its $1,000 cost basis and move custody from account 1070 → 1075 for full transparency.
What's next
With the pool live and the liquidity owned by the DAO, the anti-rug story is now airtight and fully on-chain. Next in the series I'll keep documenting the DAO's real operations — proposals, voting, and treasury moves — step by step. If you want to see how a community-owned treasury actually runs (or you're building your own), come follow along and ask questions at daoforum.org.
DAOForum build-in-public series
- Launch Your Own DAO for Free
- Register a DAO on OpenBook
- Create a DAO Proposal
- Vote on DAO Proposals
- Queue & Execute Proposals
- Record DAO Treasury Transfers
- Create a Uniswap V4 Liquidity Pool
- Transfer the LP Position to the DAO (you're here)
This is a real, on-chain case study of the DAOForum DAO itself. Not financial advice — an honest, verifiable walkthrough of how DeFi and DAO tooling actually work. If you're into blockchain and decentralized governance, come build with us at daoforum.org.
Last edited: