{"content":{"title":"快速了解 uniswap_v4","body":"# 快速了解 uniswap_v4 \r\n\r\n## 备注\r\n时间：2023 年 7 月 29 日\r\n\r\n作者：[33357](https://github.com/33357)\r\n\r\n## 正文\r\nuniswap_v4（以下简称 v4）改进了 uniswap_v3（以下简称 v3）的实现，以下是其中区别的快速介绍（需要对 v3 有一定程度的了解）。\r\n\r\n### Hooks\r\nv4 实现了 8 个回掉函数：\r\n\r\n- beforeInitialize / afterInitialize\r\n- beforeModifyPosition / afterModifyPosition\r\n- beforeSwap / afterSwap\r\n- beforeDonate / afterDonate\r\n\r\n当有人在 v4 上创建一个 pool 时，可以指定一个 hooks 合约。通过 hooks 合约可以对 swap 和 withdrawLiquidity 操作收取费用，并自定义收费策略。或者进行其他操作。\r\n\r\n### Singleton\r\nv4 使用一个 contract 完成所有 token 的保管。在 v4 上创建 pool 会改变 contarct 状态，而不是像 v3 一样新建 contract。这减少了新建 pool 的 gas 费用。\r\n\r\n### Flash Accouting\r\n在 v3 上执行多跳 swap 需要在每个 swap 完成之后执行 transfer。但由于 Singleton，在 v4 中每个 swap 都只会更新内部 balance，仅在全部 swap 结束之后进行 transfer。这减少了多跳 swap 的 gas 费用。\r\n\r\n### Native ETH\r\nv4 支持原生 ETH，相比 v3 使用的 weth 减少了 Gas 的使用。\r\n\r\n### ERC1155 Accounting\r\nv4 使用 ERC1155 用于额外 token 的记账，用户可以将 token 保留在 contract 中，避免将 token 频繁转入或转出，以节约 gas。\r\n\r\n### Oracle\r\nv4 引入 hooks 使得协议内嵌的价格预言机变得不再必要，一些 pool 可以完全放弃预言机，并在每个 pool 在 block 中的第一次 swap 中节省 gas。\r\n\r\n### Donate\r\nv4 允许给特定范围内的流动性提供者支付 token，可以是池中的任意一种或两种代币。\r\n\r\n## 总结\r\nv4 对 v3 的改进主要在提出 hooks 和节约 gas 上，虽然新的使用场景还不明朗，但新协议往往就是新的机会，现在就开始研究是有价值的。\r\n\r\n## 引用\r\n\r\n[whitepaper-v4-draft-zh](https://github.com/33357/v4-core/blob/main/whitepaper-v4-draft-zh.pdf)\r\n[whitepaper-v4-draft](https://github.com/33357/v4-core/blob/main/whitepaper-v4-draft.pdf)\r\n\r\n## 原文发布在 <https://github.com/33357/smartcontract-apps> 这是一个面向中文社区，分析市面上智能合约应用的架构与实现的仓库。欢迎关注开源知识项目！"},"author":{"user":"https://learnblockchain.cn/people/3877","address":"0x1f2479ee1b4aFE789e19D257D2D50810ac90fa59"},"history":"QmQAGPYJNdQM5b23mwJ8LGBiG7Rn7z8v3K1VfusXeKT7LK","timestamp":1693707606,"version":1}