UnyHooks is a chat app for building Uniswap V4 hooks on Robinhood Chain. You describe what your pool should do, UnyHooks writes the hook contract, and you deploy it and create the pool from your own wallet.
Where things stand. The builder is live on Robinhood Chain mainnet: describe a hook, deploy it from your wallet with its source published on Sourcify, create its pool and add liquidity. My hooks keeps your hooks and pools with live prices. Four kinds of hook today: a fee on every swap, dynamic fees, launch protection and trading hours.
From an empty workspace to a live pool with your own hook, in five steps.
What you need
A browser wallet such as MetaMask or Phantom, connected to Robinhood Chain.
A little ETH on Robinhood Chain for gas. Signing in is free; deploying and creating a pool are not.
The two tokens you want to pair. One of them can be ETH.
Steps
Sign in. Open the app, pick your wallet and sign the sign-in message. It costs no gas.
Describe the hook. Write one or two sentences, for example Send 1% of every swap to my wallet. UnyHooks may ask a short question if something changes the contract, such as which token the fee is taken in.
Read it. Open the source tab. Check the fee, the recipient and any limit before going further.
Deploy. Press Deploy. The app searches for an address whose low bits match the hook's permissions, then asks your wallet to sign one transaction.
Create the pool. Pick the pair and a starting price under step 3, for example 1 TOKEN = 0.0001 ETH. Sign, and the pool is live.
Add liquidity. Under step 4, type how much of one token to deposit; the other side follows the pool's price. Sign the approvals (once per token) and the deposit.
Start with a small amount of liquidity. Generated hooks are not audited; see Security.
Hooks
In Uniswap V4 every pool can point at one hook contract. The PoolManager calls that contract at fixed moments in the pool's life, and the hook can read the call, change the outcome or stop it.
The callbacks
Callback
Runs
Typical use
beforeInitialize / afterInitialize
When the pool is created
Lock a pool to one creator, record its start time
beforeAddLiquidity / afterAddLiquidity
When liquidity is added
Allowlists, opening hours
beforeRemoveLiquidity / afterRemoveLiquidity
When liquidity is removed
Lock-ups, exit fees
beforeSwap / afterSwap
Around every swap
Fees, dynamic fees, wallet caps, sniper limits
beforeDonate / afterDonate
When someone donates to LPs
Rarely used
Return deltas
Some callbacks can return a delta: an amount the hook takes or adds to the swap. That is how a hook charges its own fee on top of the pool fee. UnyHooks only turns on a return-delta permission when the hook needs it.
Hook addresses
Uniswap V4 does not ask a hook which callbacks it implements. It reads them from the hook's address: the lowest 14 bits of the address are flags, one per callback. If a flag is set, the PoolManager calls that callback; if not, it skips it.
Finding the address
So a hook has to be deployed at an address whose low bits match its permissions exactly. The app deploys through a CREATE2 deployer and tries salts until the resulting address carries the right flags. This runs in your browser and usually takes a few seconds.
The salt and the predicted address are shown before you sign, and the deployment fails rather than landing at a different address.
Checking one yourself
Take the last four hex digits of the hook address, convert them to binary and compare the low 14 bits with the permissions in the source. The app shows the same breakdown on every hook page.
Pools
A V4 pool is identified by its pool key: the two currencies, the fee, the tick spacing and the hook address. Change any of them and it is a different pool.
The pool key
Field
What it is
currency0, currency1
The two tokens, sorted by address. Native ETH is the zero address.
fee
A fixed fee in hundredths of a bip, or the dynamic-fee flag when the hook sets the fee.
tickSpacing
How finely liquidity can be placed. 60 is a common default.
hooks
Your hook's address.
Starting price
A new pool needs a starting price. Give it in plain terms ("1 TOKEN = 0.0001 ETH") and the app converts it to the sqrtPriceX96 value the PoolManager expects, and shows both before you sign.
Chat
The chat is where you describe hooks, ask for pools and check on them. It keeps the context of the hook you are working on, so follow-ups like "make the fee 0.5% instead" edit the same contract.
Writing a good request
Say who gets paid and in which token.
Give numbers: percentages, time windows, wallet caps.
Say what should happen at the edges: "after 24 hours, remove the cap".
Compiler errors
If a hook does not compile, the error appears under the source with a button to send it back to the chat. The fix arrives as a new version; earlier versions stay in the hook's history.
Hooks in the app
Every hook you deploy from the builder is kept in this browser and listed on My hooks, with what it does, its address and its pools.
Published source
Right after a deploy, the exact compiler input the hook was built from goes to Sourcify, the open contract-verification service. Sourcify recompiles it and checks that it produces the bytes on chain; when it does, anyone can read the hook's code at its address. My hooks shows a Source published mark, or a button to try again if it did not go through.
Following a hook
Paste any hook's address on My hooks to follow it. Hooks made with UnyHooks are recognised by their settings; for any other hook the page still shows its permissions and pools. A pool made elsewhere can be added by its pool ID.
Versions
A deployed hook cannot change. Editing it in the builder makes a new version, which is deployed at a new address and used by a new pool.
Pools in the app
Each hook on My hooks lists its pools with the pair, fee, the current price read from the chain, liquidity and 24-hour volume (in dollars once DexScreener has seen trades), and your positions.
Adding liquidity
Use step 4 in the builder, or Add liquidity under any pool on My hooks. Type how much of one token to deposit and the other follows from the pool's price.
Full range earns fees at every price. It is the usual choice for a new pool.
Custom range concentrates the deposit between two prices. It earns more while the price stays inside and nothing outside.
Uniswap V4 moves tokens through Permit2. The first deposit of a token asks for two approvals, letting Permit2 move it and letting Uniswap's PositionManager use it for 30 days, then the deposit itself. Deposits in ETH need no approval, and any ETH not used comes straight back.
Positions
A deposit is a position NFT from Uniswap's PositionManager, held by your wallet. It shows in the Uniswap app too, where you can collect fees or withdraw.
Launch a token
Launch a token creates a new token and everything it needs to trade, in one transaction from your wallet:
the token: a plain ERC-20 with a fixed supply, no owner, no mint, no taxes and no blocklist;
a launch-protection hook (the Launch protection recipe) at an address that carries its permission bits;
a token/ETH pool on Uniswap V4 with that hook;
a full-range position with the ETH you add and the share of supply you choose;
a liquidity lock holding that position, if you pick one.
The rest of the supply and any unused ETH come back to your wallet in the same transaction. If any part fails, nothing is created.
What you choose
Name, symbol, total supply. The token has 18 decimals.
ETH to pair with and supply in the pool. Together they set the starting price: putting 900M tokens next to 1 ETH starts at 1 ETH = 900M tokens. 100% in the pool is a fair launch; less keeps the rest in your wallet.
Pool fee, 1% or 0.3%. It goes to the liquidity, which is yours.
Protection: how long it lasts, the biggest buy in ETH and the wait between buys per wallet. The page shows how far the biggest buy moves the price at your pool size.
Lock: none, 30 days, 90 days, a year or forever.
How one transaction does all of it
The transaction creates a small contract, UnyLaunch, whose constructor does the work and keeps nothing. Before you sign, the page compiles every contract in your browser, works out the addresses (the launcher's from your wallet's next transaction number, the token's from the launcher, the hook's from a mined salt), and dry-runs the whole launch. If another transaction from your wallet goes first, the numbers no longer match and the launch is refused on chain: nothing is created, and your ETH stays with you.
After the launch, the source of the token, the hook and the lock is published on Sourcify, and the launch appears on My hooks.
Not audited, and this is mainnet. Start with a small amount, and read the contracts: they are on the launch page's Sourcify links.
Liquidity locks
A LiquidityLock holds Uniswap V4 positions until a date. Until then nobody can remove the liquidity, its owner included. That is what buyers look for first: liquidity that cannot be pulled out from under them.
Fees keep flowing. Anyone can call Collect fees, and the fees always go to the lock's owner.
The date only moves later. The owner can extend a lock, never shorten it.
After the date the owner can take the position back. A lock made "forever" never opens.
Locking from the app
A launch can lock its liquidity directly. For any other position you hold, open My hooks, find the position under its pool and press Lock it. It takes two signatures: one creates your lock, the other moves the position into it.
Why the lock can be trusted
The lock has no admin and no upgrade. Every lock has exactly the same code, so the public page compares a lock's code hash with the published one, byte for byte, and checks with Uniswap's PositionManager that the lock really holds the position.
Public pages
Every hook has a page to share: hook.html?a=0x…, or /h/0x… when the site runs on its own server. The launch page and My hooks link to it.
Nothing on it comes from a database. It reads, live:
what the hook does, from the hook's own settings;
whether the hook's source is published on Sourcify;
whether the token is an UnyHooks token (fixed supply, no owner), by its code hash;
how much of the pool's liquidity sits in genuine locks, and until when;
whether launch protection is still on, with a countdown;
the price from the pool, and USD figures from DexScreener once it lists the pool.
Anyone can open it, without a wallet.
A fee on every swap
The most common hook: a token launch where a share of every trade goes to a wallet or a treasury.
Ask for it
I'm launching a token paired with ETH. Send 1% of every swap to my wallet.
How it works
The hook uses afterSwap with a return delta: after each swap it takes 1% of the output side and sends it to the recipient. The recipient is fixed at deploy time unless you ask for a way to change it.
Choices you will be asked about
Which token the fee is taken in: always ETH, or whichever side leaves the pool.
Whether the recipient can be changed later, and by whom.
Dynamic fees
Charge more when the price is moving fast and less when it is calm, so LPs are paid for the risk they carry.
Ask for it
Raise the fee when the market gets volatile, lower it when it's calm. Floor 0.05%, ceiling 1%.
How it works
The pool is created with the dynamic-fee flag. In beforeSwap the hook measures how far the price has moved recently and returns a fee between the floor and the ceiling.
Launch protection
Keep a new token's first hours fair: cap how much one wallet can buy, or slow down snipers and bots that buy in the first blocks.
Ask for it
For the first hour, no wallet can hold more than 1% of supply, and no more than one buy per wallet per block.
How it works
The hook checks each swap in beforeSwap against the limits while the launch window is open, then switches itself off. Routers and aggregators can hide the real buyer, so caps are best effort; the hook page explains which address it checks.
Stock token pairs
Pair your token with a Robinhood stock token such as NVDA, TSLA or SPY, or with ETH and USDG.
Ask for it
Create a TOKEN/NVDA pool with my fee hook, and only open it during US market hours.
Notes
Stock tokens can have their own transfer rules. The app checks the token before creating the pool and tells you if a hook would conflict with them.
Market hours are set in UTC in the hook, and do not follow holidays unless you ask.
Network
UnyHooks works on Robinhood Chain only. Hooks and pools are deployed against the chain's Uniswap V4 PoolManager.
Details
Network
—
Chain ID
—
RPC
—
Explorer
—
PoolManager
—
StateView
—
CREATE2 deployer
—
When you sign in, the app asks your wallet to switch to Robinhood Chain if it is on another network.
Tokens
Any ERC-20 on Robinhood Chain can go in a pool, as can native ETH.
Common pairs
ETH: native, used as the zero address in a pool key.
USDG: the dollar stablecoin on the chain.
Stock tokens: NVDA, TSLA, SPY and the rest of Robinhood's stock tokens.
Your token: paste its address in the chat and the app reads its name, symbol and decimals.
Always check token addresses on the explorer. Anyone can deploy a token with any name.
Hook contract rules
Every hook UnyHooks writes follows the same rules, so they are easier to read and review.
One contract, one file, built on the official V4 periphery BaseHook.
Only the callbacks it uses are enabled, and the address flags match them.
No upgradeable proxies and no selfdestruct.
Any owner or admin power is named in plain words at the top of the file, along with what it can change.
Fees and limits are constants or bounded settings, never unbounded values an owner can raise at will.
Callbacks revert if they are called by anything other than the PoolManager.
Limits
One chain: Robinhood Chain.
One hook per pool, as in Uniswap V4 itself.
Hooks are single contracts; they do not deploy other contracts or call external price oracles unless you ask and name the oracle.
Chat messages are rate limited per wallet to keep the service responsive.
A deployed hook cannot be changed. A new version means a new address and a new pool.
Security
UnyHooks writes code and prepares transactions. Your wallet signs everything, and nothing moves without it.
Keys and signing
Sign-in is a plain-text message. It cannot approve tokens or send funds.
UnyHooks never asks for a seed phrase or private key. Anyone who does is not UnyHooks.
Read every transaction in your wallet before you confirm it.
Audits
Generated hooks are not audited. They follow the contract rules and compile, but a hook that compiles can still be wrong. Have a hook reviewed before it holds real money, and start with small amounts.
Reporting a problem
Found a bug in a generated hook or in the app? Message @UnyHooks on X without posting exploit details publicly.
$UHOOKS
$UHOOKS is the native token of UnyHooks, on Robinhood Chain.
Contract address
Announced at launch
This is the only official $UHOOKS contract. Check every character before you interact with it, and compare it with the website.
$UHOOKS is a crypto token, not an investment product. Nothing in these docs is financial advice.
FAQ
Do I need to know Solidity?
No. You describe the behaviour and UnyHooks writes the contract. The source is always there for you or a reviewer.
What does it cost?
Signing in is free. Deploying a hook and creating a pool cost gas on Robinhood Chain, paid by your wallet.
Who owns the hook?
Your wallet deploys it, so it is yours. It keeps working whether or not you use UnyHooks again.
Where do people trade my pool?
Anywhere that routes Uniswap V4 pools on Robinhood Chain. The pool lives on the PoolManager, not in UnyHooks.