虽然 Hook 功能强大且灵活,但安全使用 Hook 同样是一个不小的挑战。
撰文:BlockSec
相信 Uniswap v4 不久就会和大家见面了!
这一次 Uniswap 团队可谓目标宏大,计划引入众多全新功能[1],包括每个交易对支持无限数量的流动性池和动态费用、单例设计、闪电记账、Hook,以及支持 ERC1155 代币标准。利用 EIP-1153 引入的瞬态存储,Uniswap v4 预计将在以太坊坎昆升级之后发布。
在诸多创新中, Hook 机制 因其强大潜力引起了广泛关注。Hook 机制支持在流动性池生命周期中的特定点执行特定代码,大大增强了池子的可扩展性和灵活性。
然而,Hook 机制也可能是一把双刃剑。虽然它功能强大且灵活, 但安全使用 Hook 同样是一个不小的挑战 。Hook 的复杂性不可避免地带来了新的潜在攻击向量。因此,我们希望撰写一个系列文章,来系统介绍与 Hook 机制相关的安全问题与潜在风险,以此推动社区的安全发展,相信这些见解将有助于构建安全的 Uniswap v4 Hook。
作为该系列文章的开篇之作,本文介绍了与 Uniswap v4 中 Hook 机制相关的概念,并概述了 Hook 机制存在的安全风险。
1.Uniswap V4 的机制
在深入探讨之前,我们需要对 Uniswap v4 的机制有一个基本的了解。根据官方公告[1]和白皮书[2], Hook、单例架构和闪电记账 是实现自定义流动性池和跨多个池子实现高效路由的三个重要功能。
1.1 Hook
Hook 指的是在流动性资金池生命周期的不同阶段运行的合约,Uniswap 团队希望通过引入 Hook 使任何人都能做出权衡决策。通过这种方式,可以实现原生支持动态费用、添加链上限价单、或者通过时间加权平均做市商 (TWAMM) 分散大订单。
目前有 八个 Hook 回调,分为四组(每组包含一对回调):
- beforeInitialize/afterInitialize
- beforeModifyPosition/afterModifyPosition
- beforeSwap/afterSwap
- beforeDonate/afterDonate
下文是白皮书[2]中介绍的交换 Hook 的流程。
图 1:交换 Hook 流程
Uniswap 团队用一些示例(例如 TWAMM Hook[3])介绍了操作方法,社区参与者也做出了一些贡献。官方文档[4]还链接到了 Awesome Uniswap v4 Hooks[5] 仓库,该仓库收集了更多的 Hook 示例。
1.2 单例、闪电记账和锁机制
单例(singleton)架构和闪电记账(flash accounting)旨在通过降低成本和确保效率来提高性能。它引入了一种新的 singleton 合约,即所有流动性池都保存在同一个智能合约中。这个单例设计依赖一个 PoolManager 来存储和管理所有池子的状态。
在 Uniswap 协议的早期版本中,兑换或添加流动性等操作涉及直接代币转移,v4 版本则有所不同,在于其引入了闪电记账和锁机制(lock mechanism)。
微信里点“发现”,扫一下二维码便可将本篇文章分享至朋友圈
