
Uniswap v4 Hooks: Tùy chỉnh logic AMM và pool động

Uniswap v4 (ra mắt 2024) mang đến kiến trúc hoàn toàn mới so với v3: Singleton contract duy nhất quản lý tất cả pool, Hooks cho phép developer tiêm logic tùy chỉnh vào vòng đời swap/add/remove liquidity, và ERC-6909 flash accounting giảm gas đáng kể. Hooks là điểm đột phá nhất — biến AMM từ “cứng nhắc” thành “lập trình được”.
Từ v3 Concentrated Liquidity đến v4 Programmable Liquidity
Uniswap v3 giới thiệu concentrated liquidity: LP cung cấp vốn trong khoảng giá [pa, pb], hiệu quả vốn tăng 4000x. Nhưng logic pool cố định: fee tier 0.01%/0.05%/0.3%/1%, tick spacing cố định, không có dynamic fee, không có TWAP tùy chỉnh, không có limit order native.
Uniswap v4 giải quyết bằng Hooks — smart contract implement interface IHooks, được gọi tại các điểm quan trọng:
beforeInitialize,afterInitialize— khi pool tạobeforeAddLiquidity,afterAddLiquidity— LP thêm vốnbeforeRemoveLiquidity,afterRemoveLiquidity— LP rút vốnbeforeSwap,afterSwap— swap thực thibeforeSwapReturnDelta,afterSwapReturnDelta— tính deltagetHookPermissions— khai báo hook nào enable
Hook Address = Pool Identity
Mỗi pool trong v4 được xác định bởi: (currency0, currency1, fee, tickSpacing, hook). Hook address là một phần của pool key — khác hook = khác pool, dù token pair và fee giống nhau. Điều này cho phép:
- Tạo nhiều pool cùng pair/fee nhưng logic khác (dynamic fee vs fixed fee)
- Hook deploy một lần, gắn vào nhiều pool khác nhau
- Permissionless: ai cũng có thể deploy hook mới, tạo pool mới
Kiểu Hook phổ biến và ứng dụng
| Loại Hook | Mô tả | Use case |
|---|---|---|
| Dynamic Fee | Thay đổi fee theo volatility, volume, time | Bảo vệ LP khi volatility cao (impermanent loss), thu phí cao khi stable |
| Limit Order / TWAP | Cho phép đặt order tại tick cụ thể, execute khi giá chạm | Trader muốn buy/sell tại giá chính xác, không slippage |
| Oracle / TWAP Custom | Cung cấp price feed tùy chỉnh, time-weighted khác mặc định | Lending protocol cần oracle chính xác, chống manipulation |
| MEV Protection | Chặn sandwich, redirect MEV về LP/DAO | Fair trading, redistribute value |
| KYC / Allowlist | Chỉ cho phép address whitelist swap/add LP | RWA pool, institutional DeFi, compliance |
| Automated Strategy | Rebalance LP position tự động (gamma strategy) | LP passive muốn auto-compound, rebalance range |
| Fee Redistribution | Phân phối fee cho token holder, veToken, DAO | Protocol-owned liquidity, bribe market |
| Custom Accounting | ERC-6909 flash accounting, gas-efficient batch | Multi-hop swap, complex routing, aggregator |
Ví dụ: Dynamic Fee Hook (giản lược)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {IHooks} from "v4-core/contracts/interfaces/IHooks.sol";
import {PoolKey} from "v4-core/contracts/libraries/PoolKey.sol";
import {Hooks} from "v4-core/contracts/libraries/Hooks.sol";
contract DynamicFeeHook is IHooks {
uint24 public baseFee = 3000; // 0.3%
uint24 public maxFee = 10000; // 1%
uint256 public volatilityWindow = 1 hours;
function getHookPermissions() external pure returns (Hooks.Permissions memory) {
return Hooks.Permissions({
beforeSwap: true,
afterAddLiquidity: true,
afterRemoveLiquidity: true
});
}
function beforeSwap(
address sender,
PoolKey calldata key,
IPoolManager.SwapParams calldata params,
Hooks.BeforeSwapDelta memory delta
) external returns (Hooks.BeforeSwapDelta memory, uint24 fee) {
// Tính volatility từ TWAP oracle (giản lược)
uint256 volatility = _getVolatility(key.currency0, key.currency1);
fee = baseFee + (volatility * (maxFee - baseFee) / 10000);
fee = fee > maxFee ? maxFee : fee;
return (delta, fee);
}
function _getVolatility(address token0, address token1) internal view returns (uint256) {
// Implement: đọc TWAP từ pool khác hoặc oracle vấn đề
return 0; // placeholder
}
}
Singleton & Flash Accounting (ERC-6909)
Uniswap v4 dùng PoolManager singleton — một contract quản lý tất cả pool, thay vì deploy pool contract riêng mỗi pair như v2/v3. Lợi ích:
- Gas deploy pool giảm ~90% (chỉ init storage slot, không deploy bytecode)
- Multi-hop swap trong một transaction: không transfer token giữa pool, chỉ update internal balance (ERC-6909)
- Settlement cuối transaction:
settle()một lần, pull/push token net
ERC-6909 cho phép lock() token vào PoolManager, swap nhiều pool, unlock() ra — tiết kiệm gas lớn cho aggregator, router.
So sánh Gas: v3 vs v4
| Thao tác | v3 (estimate) | v4 (estimate) | Cải thiện |
|---|---|---|---|
| Deploy pool mới | ~1.5M gas | ~150k gas (init) | -90% |
| Single swap | ~160k gas | ~140k gas | -12% |
| Multi-hop 3 pool | ~480k gas | ~200k gas | -58% |
| Add liquidity | ~200k gas | ~180k gas | -10% |
Con số tham khảo từ Uniswap Foundation testnet, mainnet có thể khác do blob fee (EIP-4844).
Triển khai Hook: Best Practice
- Audit trước khi deploy: Hook nắm giữ logic tài chính, bug = mất fund. Dùng formal verification, fuzzing (Foundry, Echidna).
- Immutable vs Upgradeable: Hook immutable an toàn hơn. Nếu cần upgrade, dùng proxy pattern nhưng lưu ý pool key chứa hook address — upgrade proxy không đổi pool key.
- Gas optimization: Hook chạy trên mọi swap, code phải tối ưu. Tránh loop, storage read/write nhiều.
- Permissionless discovery: Emit event khi deploy hook, indexer (The Graph, Subsquid) cho frontend discover pool mới.
- Backward compatibility: Hook v4 không tương thích v3. Cần migration tool cho LP di chuyển vị thế.

Hệ sinh thái Hook đang phát triển
- Uniswap Foundation Hook Incubator: Grant cho dynamic fee, limit order, MEV protection hook
- Ambient Finance (v4 fork): Hook cho concentrated liquidity + oracle
- Panoptic: Options protocol dùng hook v4 cho on-chain options
- Gamma Strategies: Auto-rebalance hook cho LP
- Arrakis Finance: Vault + hook quản lý concentrated position
- Hook Registry (EIP-7594): Chuẩn đăng ký/khám phá hook on-chain
Rủi ro và thách thức
- Composability risk: Hook có thể introduce reentrancy, mev, logic error lan truyền qua multi-hop
- Fragmentation liquidity: Quá nhiều hook/pool cùng pair chia nhỏ liquidity, slippage tăng
- Frontend complexity: Aggregator/router cần index tất cả hook/pool, routing phức tạp hơn
- Regulatory: KYC hook có thể bị coi là facilitator, cần legal review
Kết luận
Uniswap v4 Hooks biến AMM thành lớp lập trình (programmable layer) cho DeFi. Từ dynamic fee, limit order, MEV protection đến custom oracle, automated strategy — logic tài chính giờ đây viết bằng Solidity, deploy permissionless, compose tự do. Đây là bước tiến lớn nhất kể từ concentrated liquidity, mở đường cho DeFi “app-specific AMM” thay vì “one-size-fits-all”. Developer, researcher, LP operator nên nghiên cứu Hook architecture ngay hôm nay.
Nguồn tham khảo: Uniswap v4 Docs, v4-core GitHub, ERC-6909
