Portability is for people who cannot write new programs. – Linus Torvalds
Uniswap V4 协议
相比较Uniswap V3版本,Uniswap v4的新版本协议中提出了一系列的改进措施,主要包含了俩个核心设计改进:可定制性化和 gas 效率升级,当然其中最重大的创新莫过于开放交易池Pool的自定义开发能力。具体来说,对于交易者和流动性提供者来说,可以主要关注以下4点新方案的提议。
- 钩子合约(Hooks Contract)
- 闪电记账(Flash Accounting)
- ERC-1155记账
- 单例合约(Singleton)

V4 – Hooks 合约
基本设计理念
Uniswap v4 允许任何人使用自定义功能部署新的集中流动性池。对于每个池,创建 者可以定义一个Hooks 合约,该合约在调用的生命周期的关键点执行逻辑。Uniswap v4 目前支持 八个此类 Hooks 回调:
- beforeInitialize/afterInitialize
- beforeModifyPosition/afterModifyPosition
- beforeSwap/afterSwap
- beforeDonate/afterDonate
Hooks 合约的地址决定了哪些 Hooks 回调会被执行,具体的执行逻辑如下:

Hooks 开发框架
有了Hooks 合约的开放功能, Uniswap将会从诺基亚时代升级跨越到IOS操作系统阶段,新的自定义功能不再需要等待新版本升级或者分叉复制。官方同时给出了四个Demo来说明如何基于Hooks实现定制化Pool功能,比如Deomean预言机、限价订单、TWAMM等。本文将通过简单的限价订单代码解析来说明V4 Hooks开发模式。

1 重写Hooks合约入口函数
根据代码分析,主要逻辑触发在afterInitialize 和afterSwap阶段。
function getHooksCalls() public pure override returns (Hooks.Calls memory) {
return Hooks.Calls({
beforeInitialize: false,
afterInitialize: true,
beforeModifyPosition: false,
afterModifyPosition: false,
beforeSwap: false,
afterSwap: true,
beforeDonate: false,
afterDonate: false
});
}
2 定义限价合约的核心操作
- Place – 放置订单
- Fill – 执行限价单
- Kill – 撤销限价单
- withdraw – 提取资金
event Place(
address indexed owner, Epoch indexed epoch, PoolKey key, int24 tickLower, bool zeroForOne, uint128 liquidity
);
event Fill(Epoch indexed epoch, PoolKey key, int24 tickLower, bool zeroForOne);
event Kill(
address indexed owner, Epoch indexed epoch, PoolKey key, int24 tickLower, bool zeroForOne, uint128 liquidity
);
event Withdraw(address indexed owner, Epoch indexed epoch, uint128 liquidity);
下一代DeFi流动性开发者展望
除了以上提到的限价订单,基于Hook的合约的设计和能力,交易池开发者可以实现更多场景化的功能。

根据官网说明,Uniswap V4上线将依赖EIP-1153协议(主要实现闪电记账功能),而EIP-1153包含在下一次以太坊坎昆升级中,所以Uniswap V4预计上线时间是2023年年底左右。坎昆升级除了EIP-1153,EIP-4844将大幅的降低L2的存储成本,对于Uniswap 高频操作场景也是重要的支持。
ZenFox Labs将会持续的跟踪Uniswap V4的开发生态进展,共同见证“DeFi IOS”开发者机遇的到来。