SharkTeam:Uniswap V4 Hook最佳安全实践
近期 Uniswap Lab 官宣了下一代 AMM Uniswap V4 的开发进展,并公开了白皮书和代码仓库。这次 V4 的白皮书仅仅只有 3 页,原因是 V4并没有对 AMM 的核心算法逻辑做太多修改,而是在 V3 的基础上,增加了一些新的特性,以满足更多的场景需求。 SharkTeam 将基于目前已开源的代码,来看看 V4 带来了哪些新的特性,并针对V4推出的重要特性 Hook 分析最佳应用实践。
一、V4与V3的差别
1.1 AMM
在 AMM 算法层面,Uniswap V4 并没有对 V3 做修改,依然使用基于恒定乘积 x*y=k 的流动性算法。
在 Uniswap V3,每一个交易对可以有 4 个池子(原本是 3 个,后来增加了一个新的 1 bp pool),分别代表 0.01% , 0.05% , 0.3% , 1% 费率的池子,这些池子对应的 tick space 也各不相同,在创建池子的时候,只能选择这 4 种中的任一个。
在 Uniswap V4,每一个交易对理论上可以有任意数量的 pool,并且每一个 pool 的 fee rate 也可以是任意值,这些 pool 的 tick space 也可以是任意值。
这同时也带来了一个问题:Uniswap V4 中交易对的流动性将被碎片化,因此需要一个更有效的 router/aggregator 来帮助用户找到最优的交易路径。
1.2 Hooks
Hooks 是一组由第三方或者 Uniswap 官方开发的合约,在创建 pool 的时候,pool 可以选择绑定一个 hook. 之后在交易的特定阶段,pool 都会自动调用与之绑定的 Hook 合约。Uniswap V4 一共定义了这些可以执行 hook 合约代码的阶段:
- beforeInitialize
- afterInitialize
- beforeModifyPosition
- afterModifyPosition
- beforeSwap
- afterSwap
- beforeDonate
- afterDonate
分别表示在初始化 pool,添加/移除流动性,交易,捐赠等操作的前后,都可以调用 hook 合约。
Hook 合约需要显式指定在上述的哪些阶段进行执行,而 pool 则需要知道对应的 Hook 在某个阶段是否需要执行,为了节省 gas,这些 flag 都没有在合约中进行存储,而是需要 Hook 使用特定的地址来标明。具体判断的代码如下:
可以看出,Hook 地址的前 8 bit 都别用来标记在特定阶段此 Hook 是否需要执行的 flag.
因此,Hook 的开发者需要在部署合约的时候,产生出满足 Pool
- 星际资讯
免责声明:投资有风险,入市须谨慎。本资讯不作为投资建议。