The catalogue
What a coin can swear to.
A hook is a small contract that adds a rule to a coin. The hooks a creator picks at launch are the coin's oath, and every hook runs inside limits the coin and the pool enforce themselves.
Token hooks
Run on every transfer
The coin consults them whenever it moves: swaps on the pool and wallet to wallet. Good for taxes, wallet caps and launch protection.
Pool hooks
Run on every pool swap
The coin's Uniswap v4 pool consults them on every swap, from the first trade. They can set the pool fee and take a cut in HYPE, so revenue and buybacks never dump the coin.
What no hook can do
Block a sellA hook that reverts on a sell is skipped. Holders can always exit.
Take more than the capsToken hooks: 10% of a transfer in total. Pool hooks: 5% in HYPE, pool fee up to 5% on sells and 50% on buys.
Move funds or re-enterHooks are called read-only with a fixed gas allowance. They answer a question; they cannot act.
Be rewritten after launchA coin's oath is fixed at launch. The creator can drop a hook from it, never add or swap one.
Token hooks0
Loading hooks…
Pool hooks0
Loading hooks…
Write your own
Deploy a contract with one of these two interfaces and attach it by address on the launch page. No approval needed: unverified hooks carry a warning label, and the limits above still apply to them.
interface ITokenHook {
// called once, when your hook is attached at launch (msg.sender is the token)
function onAttach(address creator, bytes calldata data) external;
// consulted before every transfer; revert to block it, or return a fee to take
function onTransfer(address from, address to, uint256 amount, TransferKind kind)
external view returns (uint256 fee, address feeRecipient);
}interface IPoolHook {
// called once, when your hook is attached at launch (msg.sender is the hub)
function onAttach(address token, address creator, bytes calldata data) external;
// consulted before every swap on the coin's Uniswap v4 pool
function onSwap(SwapContext calldata ctx)
external view returns (uint24 lpFee, uint16 hypeFeeBps, address hypeFeeRecipient);
}