{"content":{"title":"Uniswap v4: DeFi 五月花号再次启程","body":"# 1. 前言\r\n1620 年，一艘名为五月花号（Mayflower）的英国船只驶离英格兰，五月花号带着 102 名乘客和大约 30 名船员驶向美国，他们离开英格兰的原因是认为英格兰教会不仅抵制改革而且过于腐败，所以决定穿越大西洋来到北美，在那里他们将建立属于自己的新移民社区。\r\n2017 年 7 月，Hayden Adams 被他大学毕业后的第一个雇主西门子解雇，彼时他还是一位毫无区块链开发经验的机械工程师。2018 年 8 月，在 Hayden 失业的第 13 个月时，Hayden 与他的伙伴们完成了 Uniswap v1 的开发并在以太坊主网上线，从此成为 DeFi 世界里最不可或缺的拼图之一。而在本文着笔的 48 小时前，Uniswap 发布了他们的第四版迭代。我们在第一时间内浏览了他们的白皮书和合约代码，试图分析这一酝酿两年之久的更新较于前代有哪些坚持与变革。\r\n# 2. Uniswap 的坚持\r\n坦率地说，目前 v4 的合约还不是一个开发完成的状态，可读性和可参考性都受到了一定的影响。但是我们还是可以确认，v4 保留了很多前代验证为有效的特性：\r\n- 恒定积公式 $$x*y = k$$ 沿用至今；\r\n- 限价流动性依然基于 *tick* 这一刻度体系来搭建；\r\n- 流动性分布依然是水平分布在限价区间内，每个池的流动性深度依然是该市场内所有参与的流动性堆叠的结果；\r\n<!--StartFragment-->\r\n\r\n![](https://internal-api-drive-stream.feishu.cn/space/api/box/stream/download/v2/cover/XJI4blYl3oJGMsxxn0ock9yHneh/?fallback_source=1\\&height=1280\\&mount_node_token=QIkydmlGpoVx3XxTsOzc5kXmn1f\\&mount_point=docx_image\\&policy=equal\\&width=1280)\r\n\r\n<!--EndFragment-->\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/06/SxkrgW4E648dc84b55471.png)\r\n\r\n# 3. Uniswap 的革新\r\n结合白皮书和合约代码，我们欣喜地发现 v4 在上述坚持的基础上完成了诸多创新和改变，而这些革新主要着力于以下四个方面：\r\n- 全新的合约结构\r\n- 巧妙的账本设计\r\n- 更高的开发者自由度\r\n- 对于流动性提供者更多的保护\r\n接下来，我们将从这四个方面入手，详细讨论其设计和工程实现上的巧思：\r\n## 3.1 全新的合约结构\r\n熟悉 Uniswap 过往版本代码的人都知道 factory-pool 这一自其 v1 沿用至今的合约架构，可以说这个架构至今都是目前 DeFi 世界里使用最广泛的合约结构。而 Uniswap 在 v4 中决定弃用，引入了新的单例合约（singleton）结构，旨在最大限度的降低创建流动性池以及跨池（合约）调用中的 gas 消耗。\r\n我们可以看到，[v4-core](https://github.com/Uniswap/v4-core/tree/main) 中仅剩下 PoolManager 一个合约承担着核心的业务逻辑，而 PoolManager 将承担着协议所有流动性汇算的任务，使用 PoolKey 这一字段来索引对应的币对市场，而 AMM 曲线以及流动性的相关计算都抽象到了 libraries 库合约中。\r\n<!--StartFragment-->\r\n\r\n![](https://internal-api-drive-stream.feishu.cn/space/api/box/stream/download/v2/cover/H2Q5bNkvLoWtGKxDutwciY3snWd/?fallback_source=1\\&height=1280\\&mount_node_token=G9DvdRfJbojv39xqxfVchtcmnYc\\&mount_point=docx_image\\&policy=equal\\&width=1280)\r\n\r\n<!--EndFragment-->\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/06/ce9SPv9A648dc8ba67fc6.png)\r\n\r\n在合约结构方面，同样值得一提的是 v4 的流动性仓位数据的存储与封装也产生了巨大改变：\r\n- 在 v2 中，由于流动性全区间分布，协议使用的是同质化流动性代币（ERC-20）作为流动性份额的凭证；\r\n- 在 v3 中，因为限价流动性的引入，仓位之间无法继续使用 ERC-20 来代币化流动性，而是选择在对应的流动性 Id 相关数据外层封装了非同质化代币（ERC-721），并使用 NonfungiblePositionManager 这一合约进行流动性相关操作的管理。\r\n- 而在 v4 中，我们惊讶地发现，流动性仓位不再使用代币化的方法进行封装，而是使用地址进行仓位管理。\r\n可以说 v3 在流动性仓位数据外层进行封装 ERC721 凭证的操作是比较割裂的，而 v4 这种简单直接地将流动性数据与地址绑定，虽然可能会丧失一些流动性代币相关的可组合性，但是无论从 gas 经济性上还是工程美学上都有极大的进步。\r\n\r\n## 3.2 巧妙的账本设计\r\n闪电记账（flash accounting）可以说是 v4 中最具有开创性的设计之一。回顾过往市场中绝大多数流动性协议，它们的交易和流动性相关操作都伴随着代币转移，流程无外乎：安全性检查 -> 根据设定目标计算代币转换的数量 -> 更新账务数据 -> 代币转移。而 v4 中颠覆了这一固有的编码逻辑，利用回调函数（callback function）的特性，构建了一套复式记账账本。\r\n\r\n什么是复式记账法？复式记账法是以资产与权益平衡关系作为记账基础，对于每一笔经济业务，都要以相等的金额在两个或两个以上相互联系的账户中进行登记，系统地反映资金运动变化结果的一种记账方法。举一个简单的例子，Alice 从 Bob 那里借款 1000 USDC，这一笔经济活动将被记录成：\r\n\r\n\r\n![微信截图1.png](https://img.learnblockchain.cn/attachments/2023/06/rkmGTzHQ648dc9f5d6cc5.png)\r\n\r\n从上面的表格中，我们很好理解：资产 = 权益 - 负债。（此处负债为绝对值）\r\n我们把这个例子拓展的更复杂一些：Alice 从 Bob 那里借款 1000 USDC；Bob 从 Carl 那里借款 1 ETH；Carl 又向 Alice 借了 1000 DAI，那么我们的复式记账表格将会是：\r\n\r\n![微信截图_2.png](https://img.learnblockchain.cn/attachments/2023/06/jKJJODmN648dca163ddb3.png)\r\n\r\n显然，Uniswap 的流动性池是交易者进行借贷的对象，**而 swap 交易的本质则是：在交易完成后，流动性池与交易者彼此之间债务两清**。也就是说当 Alice 试图使用 1800 USDC 购买 1 ETH 时，她与流动性池的关系也可以使用复式记账法来记录：\r\n\r\n\r\n![微信截图3.png](https://img.learnblockchain.cn/attachments/2023/06/Kxi8N1fp648dca3b77f84.png)\r\n\r\n如果此刻 ETH-USDC 池中的 ETH 恰好价值 1800 USDC，那么在 swap 交易结束后，Alice 与 pool 互不相欠，交易可以成功执行。而在 v4 中，每个操作都会更新一个称为 [delta] 的内部净余额，而这个内部净余额就可以看作我们上面所说的资产。**每笔交易，无论其跨过多少个交易对，都需要在完成时保证 [delta] 为零**，否则将被驳回。v4 中新增的 take() 和 settle() 函数便可用于借出或存入资金到池中，协议便通过这两个函数来强制执行池的结算和偿付，以保证在调用结束时 PoolManager 与调用者之间互不相欠任何代币。\r\n同时，协议引入了 **ERC-1155 这一半同质化代币，并将协议的债务进行代币化**。也就是说，当交易者或者 LP 在任一操作中导致协议对其产生欠款，他可以不使用 take() 而是使用 mint() 函数来 1：1 的铸造对应资产的 ERC-1155 代币来获得可刚性兑付的权益凭证。**基于该权益凭证的激励或者衍生产品将会有极大的创造空间，而这也意味着，将会有更多流动性被留在流动性池内，为交易者提供更好的流动性深度和交易体验。**\r\n单例合约结构和闪电记账这两个特性的结合使得在多个 v4 池之间更高效地进行路由成为可能，降低了流动性碎片化的成本。\r\n\r\n## 3.3 更高的开发者自由度\r\n在 [v4-periphery](https://github.com/Uniswap/v4-periphery) repo 中引入钩子 hooks 合约， hooks 是在流动性池生命周期的各个时间节点运行的代码片段。开发者可以利用给出的 [BaseHook](https://github.com/Uniswap/v4-periphery/blob/main/contracts/BaseHook.sol) 合约构建属于自己的个性化交易操作。\r\nUniswap v4 目前支持八个这样的钩子回调：\r\n- beforeInitialize / afterInitialize\r\n- beforeModifyPosition / afterModifyPosition\r\n- beforeSwap / afterSwap\r\n- beforeDonate / afterDonate\r\n<!--StartFragment-->\r\n\r\n![](blob:https://sw3vxsr378f.feishu.cn/a2c85827-0139-4456-80f5-c018d90d2435)\r\n\r\n<!--EndFragment-->\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/06/IgI2V6ua648dcb6094adb.png)\r\n\r\n也就是说无论是 LP 还是交易者都可以在流动性池中操作时利用定制化的 hooks 来执行核心逻辑以外的业务逻辑。这无疑为很多原本通过链下中心化服务（**[如 Gelato Network](https://www.gelato.network/)**）才能实现的功能提供了链上操作的可能性：\r\n- 动态手续费\r\n- 基于时间加权平均做市商来进行更低滑点的 swap 拆单\r\n- 链上限价单\r\n- 自定义链上价格预言机，如几何平均预言机（Geomean Oracles）\r\n在此之上，我们可以展开想象，更多场景也有了实现空间：\r\n- 动态手续费可以不是简单地根据时间线性变化，可以根据单笔 swap 产生的 tick 跳跃数量来量化波动率，从而动态改变手续费，实现对于 LP 无常风险的对冲\r\n- 链上量化交易策略和流动性调仓策略\r\n- 自动手续费复投\r\n此外，引入 hook 后，池的数量预计将大幅增加，这也使得单例合约结构和复式记账的新设计有更多的用武之地，即，不同的设计更新之间是互相牵连的。\r\n综上所述，v4 的确继续践行着其作为 DeFi 基础设施的使命，将自己的核心业务逻辑从纷繁的产品需求中抽象出来，将无尽的想象空间交给社区和开发者，引领更多的人参与进来。这一点上，Uniswap v4 做得比前代以及一众竞品更好。\r\n## 3.4 对于流动性提供者更多的激励\r\nv3 被一直诟病的缺乏对于 LP 的激励和保护在 v4 中有所改观。\r\nPoolManager 中内置的 donate() 方法将允许用户、协议外集成者和钩子直接以池中任一代币向在价格范围内的 LP 支付费用。这一新机制可以将 MEV 内化到 LP 的回报中，以便 LP 可以从 MEV 中受益。\r\n## 3.5 其他协议的影子\r\nUniswap 作为 DEX 赛道的龙头，一直站在 AMM 研究的最前沿，但是在 AMM 的研究上其他 AMM 竞品也有各自的创新，在 Uniswap v4 这次的更新上我们也能看到其他协议的影子：\r\n- 如 Uniswap v4 的 Singleton 和 flash accounting 结构与 Balancer v2 的 Vault <-> Pool logic 结构的高度一致，都采用了虚拟账本的形式对多个 Pool 进行统一记账来降低交易路由过程中的gas消耗。\r\n- 在动态手续费、链上原生限价单，以及使用 ERC-1155 来具象化流动性是刚刚上线的 Joe v2.1 中已经实现的功能\r\n- 同时，如 3.4 节所提到的内部化 MEV，LP 们从原本被 bots 获取 MEV 的对手方，因为 hooks 的存在，可以将它们纳入到自己的价值循环体系中，叠加 [Flashbot](https://www.flashbots.net/) 或者 [Eden Network](https://www.edennetwork.io/) 等 MEV 拍卖/分配协议，可以把激励二次分配到提供了有效流动性的 LP 手中。这一点上，尽管 Osmosis 并非 EVM 生态中的产品，但是 Skip Protocol 为其开发设计的 [ProtoRev](https://osmosis.zone/blog/osmosis-protorev-by-skip-protocol-on-chain-app-directed-arbitrage) 也有很多借鉴之处。\r\n<!--StartFragment-->\r\n\r\n![](blob:https://sw3vxsr378f.feishu.cn/8197383f-6e13-468e-8f18-60241401cb12)\r\n\r\n<!--EndFragment-->\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/06/jmHUeLz8648dccc9b4ff3.png)\r\n# 4. 思考\r\n无疑，当下的加密市场处于深熊阶段，流动性萎缩叠加 SEC 监管升级都如同乌云笼罩在整个市场上空。与此同时，Uniswap 的交易量已经连续四个月超过 Coinbase，在监管压力之下，优秀的 DeFi 产品愈发证明其价值。时至今日，我们依然可以毫不吝啬地说，Uniswap 是以太坊上最伟大的用例之一。\r\n<!--StartFragment-->\r\n\r\n![](blob:https://sw3vxsr378f.feishu.cn/50d143ff-2162-46b6-8307-86e37fa75d5c)\r\n\r\n<!--EndFragment-->\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/06/8kv9YUZJ648dccf67a26e.png)\r\n\r\n故事回到本文的最开始，经过 10 周艰苦的海上航行，五月花号抵达美国，1620 年 11 月 21 日在今美国马萨诸塞州科德角附近抛锚靠岸。当他们到达北美以后，1620 年的冬季格外寒冷，102 名乘客中有一半因病去世。但是活下来的 50 人继续在北美新英格兰扎根生活，生养众多，到 21 世纪他们的后裔已经达到 3,500 万人。在他们的后代中有很多美国著名人物，包括大约五分之一的美国总统，例如亚当斯父子总统，小罗斯福总统，布什父子总统等政治、法律界人物，以及许多文艺界、科学界、宗教界人物。而在五月花号前往北美的航程中，这些乘客们在会议中签署了著名《五月花号公约》，这个公约成为 160 年以后美利坚合众国成立时的宪法精神基础。\r\n2017 年，在 Hayden Adams 刚失业的那几个月里，他学习了智能合约的编写，又先后结识了 Vitalik Buterin，Philip Daian，Dan Robinson 等等与他志同道合的朋友，在他们的影响和帮助下，秉持着抗审查和开源的加密精神，Hayden 建造了 Uniswap，这艘 DeFi 世界的五月花号。而今天，它也即将再次启程，继续向着未知之境进发。\r\n# 5. 参考资料\r\n- https://github.com/Uniswap\r\n- https://blog.uniswap.org/uniswap-v4\r\n- https://github.com/Uniswap/v4-core/blob/main/whitepaper-v4-draft.pdf"},"author":{"user":"https://learnblockchain.cn/people/6552","address":null},"history":"QmRuuBNeFoSDH4P9jXnfqdmieLVZNRVDUdvb1oQaUi3iua","timestamp":1687016631,"version":1}