Uniswap V4 在 2026 年帶來了 DeFi 世界最具顛覆性的升級——鉤子(Hooks)機制。這項創新允許開發者在流動性池的初始化、交換、添加/移除流動性等 8 個關鍵生命週期節點插入自訂合約邏輯,實現動態手續費、時間加權做市、限價單與跨池捆綁交易等進階功能。本文從核心概念出發,帶領已有基礎的讀者深入理解鉤子架構、自訂池設計流程與實戰風險管理,並提供完整教學步驟。
⚡ 重點速覽 — 4 大核心亮點
(Hooks)
動態參數配置
即時調整策略
Solidity + Foundry
在 DeFi 世界裡,流動性池就像城市的地下水管系統——每個人每天都使用它,但很少有人思考背後的基礎設施如何運作。2026 年,Uniswap V4 帶著一套全新的「鉤子」(Hooks)機制登場,徹底改變了這個局面。這不只是一次版本迭代,而是一場讓流動性池從「標準化產品」進化成「可程式化基礎設施」的典範轉移。如果你已經熟悉 AMM 的基本原理與 V3 的集中流動性,那麼 Uniswap V4 的鉤子與自訂池將是你下一個必須掌握的進階技能。
一、什麼是 Uniswap V4 的鉤子機制?
鉤子(Hooks)是 Uniswap V4 最核心的架構創新。簡單來說,它是一種「回呼合約」(Callback Contract),允許開發者在流動性池的特定生命週期節點執行自訂邏輯。在 V3 中,池子的行為是完全固定的——手續費率、報價間隔、流動性分配方式都由官方合約硬編碼。但在 Uniswap V4 中,每個池都可以綁定一個鉤子合約,在以下 8 個時機點插手干預。
這項設計的靈感來自作業系統的「系統呼叫鉤子」與前端框架的「生命週期方法」。想像你在一個標準的交換流程中,能夠在「交換發生前」檢查價格偏離度、調整手續費率,或在「交換完成後」觸發再平衡策略——這些全部變成可能。根據官方白皮書,V4 的鉤子機制預計能將開發者在鏈上部署自訂做市策略的成本降低 60% 以上。
二、Uniswap V4 鉤子的 8 種生命週期
Uniswap V4 總共定義了 8 種鉤子掛載點,涵蓋池子從建立到每一次操作的完整生命週期。這些鉤子可以分為「初始化類」、「交換類」與「流動性類」三大群組,每一種都對應到特定的合約介面。開發者可以選擇只實作其中幾個,不需要全部覆寫,這大幅降低了開發門檻。
| 鉤子名稱 | 觸發時機 | 典型應用場景 |
|---|---|---|
| beforeInitialize | 池初始化之前 | 設置自訂參數、驗證初始條件 |
| afterInitialize | 池初始化完成後 | 記錄初始狀態、發送初始事件 |
| beforeSwap | 交換執行之前 | 動態調整手續費、檢查價格偏離、執行限價邏輯 |
| afterSwap | 交換執行之後 | 更新做市策略、記錄交易數據、觸發再平衡 |
| beforeAddLiquidity | 添加流動性之前 | 驗證流動性提供者資格、檢查最小鎖定期 |
| afterAddLiquidity | 添加流動性之後 | 分發流動性獎勵、更新加權池權重 |
| beforeRemoveLiquidity | 移除流動性之前 | 檢查解鎖條件、計算懲罰費用 |
| afterRemoveLiquidity | 移除流動性之後 | 結算獎勵、更新池狀態 |
▲ 表1:8 種鉤子的觸發時機與應用場景
三、Uniswap V4 自訂流動性池架構
在 Uniswap V4 中,自訂流動性池不再是「一個池一種規則」的靜態設計。透過鉤子合約與 PoolManager 的搭配,開發者可以建立具備動態行為的流動性池。舉例來說,你可以建立一個「時間加權做市池」——在盤中高波動時段提高手續費、在低波動時段降低手續費,以最佳化流動性提供者的收益。
自訂池的架構主要包含三個層級:核心層(PoolManager 統一調度)、鉤子層(自訂邏輯插入點)與前段層(使用者介面與路由)。PoolManager 負責管理所有池子的狀態與清算,而每個池子透過 hooks 地址指向一個獨立的鉤子合約。這種設計讓 Uniswap V4 具備類似「外掛模組」的擴展性,開發者可以像堆疊樂高一樣組合不同功能。
| 參數名稱 | 類型 | 說明 | 範例值 |
|---|---|---|---|
| fee | uint24 | 手續費率(單位為萬分之一) | 3000(0.3%) |
| tickSpacing | int24 | 報價間隔(決定流動性粒度) | 60(0.6%) |
| hooks | address | 鉤子合約地址(可為 0x0) | 0xHooks…1234 |
| poolManager | address | 池管理器合約地址 | 0xPool…5678 |
| sqrtPriceX96 | uint160 | 初始價格(Q64.96 定點數) | 2^96 × sqrt(price) |
▲ 表2:自訂流動性池核心參數
| 功能項目 | Uniswap V3 | Uniswap V4 |
|---|---|---|
| 流動性集中 | 支援(範圍訂單) | 支援 + 可透過鉤子動態調整 |
| 手續費等級 | 固定三級(0.05% / 0.3% / 1%) | 動態調整(透過 beforeSwap 鉤子) |
| 外部預言機 | 需自行整合第三方 | 內建鉤子預言機(afterSwap 記錄價格) |
| 限價單 | 不原生支援 | 可透過鉤子實現 |
| 池建立門檻 | 標準化合約 | 自訂參數 + 鉤子合約 |
| Gas 效率 | 較高(單一池獨立合約) | 更高(PoolManager 統一調度) |
▲ 表3:Uniswap V3 vs V4 功能比較
四、Uniswap V4 實作步驟教學
接下來我們將實際演練如何在 Uniswap V4 上建立一個自訂流動性池,並掛載一個簡單的「動態手續費鉤子」。本教學使用 Foundry 開發框架,這是目前與 V4 相容性最好的工具。
步驟 1:環境準備
安裝 Foundry 並初始化專案:forge init uni-v4-custom-pool && cd uni-v4-custom-pool
接著安裝 V4 核心套件:forge install Uniswap/v4-core
步驟 2:編寫鉤子合約
建立一個繼承 BaseHook 的合約,覆寫 beforeSwap 與 afterSwap 方法。以下是一個根據當前區塊時間調整手續費的範例:
function beforeSwap(address, PoolKey calldata, IPoolManager.SwapParams calldata, bytes calldata)
external override returns (bytes4) {
// 根據時間調整手續費:白天 0.3%,夜間 0.1%
uint256 hour = block.timestamp % 86400 / 3600;
if (hour >= 8 && hour < 20) { dynamicFee = 30; }
else { dynamicFee = 10; }
return BaseHook.beforeSwap.selector;
}步驟 3:部署與測試
使用 Foundry 的 forge script 將鉤子合約部署至測試網,並透過 PoolManager 建立池子,將 hooks 地址指向你的合約。最後用 forge test 驗證鉤子是否在交換過程中被正確調用。



