{"content":{"title":"如何在 Uniswap V4 中构建自定义 Hooks","body":">- 原文链接：https://medium.com/buildbear/how-to-build-custom-hooks-in-uniswap-v4-79b158488ed2\r\n>- 译者：[AI翻译官](https://learnblockchain.cn/people/19584)，校对：[翻译小组](https://learnblockchain.cn/people/412)\r\n>- 本文永久链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/8813)\r\n\r\n# 如何在 Uniswap V4 中构建自定义 Hooks\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741164925)\r\n\r\n[Uniswap](https://www.uniswapfoundation.org/) 是最受欢迎的 DeFi 协议之一，用于交易数字资产。Uniswap 从早期版本到 Uniswap v4 的演变中，经历了重大变化和改进。[Uniswap v3](https://www.buildbear.io/resources/guides-and-tutorials/uniswapv3) 引入了集中流动性功能，允许流动性提供者选择价格范围，从而获得更高的费用。最新的 [Uniswap v4](https://www.buildbear.io/resources/guides-and-tutorials/uniswapv4) 具有单例架构，增强了流动性管理和灵活性。\r\n\r\n本详尽指南探讨了 Hooks 的概念以及开发人员如何在 Uniswap V4 中实现自定义 Hooks。\r\n\r\n## 什么是 Hooks？\r\n\r\nHooks 是智能合约，为 Uniswap v4 中的流动性池提供额外功能，为开发人员提供定制能力。这些功能可以包括动态费率调整、链上限价订单以及与链上或 acles 的集成。\r\n\r\n## 它是如何工作的？\r\n\r\n它类似于插件系统，将不同的操作插入到池中。这使开发人员可以部署具有自定义 Hooks 的池，这些 Hooks 与其他 Uniswap 池一起工作。\r\n\r\nHooks 可以在主要生命周期操作之前和之后执行，例如池创建、提供流动性和兑换。Uniswap v4 支持 hook 回调，例如：\r\n\r\n1. beforeInitialize 和 afterInitialize\r\n2. beforeModifyPosition 和 afterModifyPosition\r\n3. beforeSwap 和 afterSwap\r\n4. beforeDonate 和 afterDonate\r\n5. beforeSwapReturnDelta  和 afterSwapReturnDelta\r\n6. afterAddLiquidityReturnDelta \r\n7. afterRemoveLiquidityReturnDelta \r\n\r\n通过利用这些 Hooks，开发人员可以向流动性池引入独特功能和优化。\r\n\r\n以下是它的简单示例：\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741164934)\r\n\r\n## 在 Uniswap V4 上创建自定义 Hook\r\n\r\n本教程将指导你创建一个用于 Uniswap V4 的自定义 Hook，该 Hook 限制了一天中特定时间段的交易。要在 Uniswap V4 中创建自定义 Hook，我们将从 Uniswap Foundation 提供的模板开始， [这里](https://github.com/uniswapfoundation/v4-template) 。在开始之前，请确保你已在系统上安装了 [Foundry](https://book.getfoundry.sh/getting-started/installation)。让我们开始吧！\r\n\r\n* **克隆模板：**\r\n\r\n```\r\ngit clone https://github.com/uniswapfoundation/v4-template.git  \r\ncd V4-template\r\n```\r\n\r\n* **初始化 git 并安装依赖项：**\r\n\r\n```\r\ngit init  \r\nforge install\r\n```\r\n\r\n上述命令安装了辅助合约，如 v4-core 和 v4-periphery，用于构建 Hooks。\r\n\r\n* **创建自定义 Hook**\r\n\r\n通过扩展来自 [v4-periphery](https://github.com/Uniswap/v4-periphery/blob/main/contracts/BaseHook.sol) 存储库的 BaseHook 合约来实现任何 Hook。`getHookPermissions` 定义了哪些 Hooks 是活动的。在这种情况下，只有在兑换期间才执行 `beforeSwap` 函数。\r\n\r\n现在，根据 Hook 调用，我们需要实现功能。我们将使用变量 `openingTime` 和 `closingTime` 指定交易时间。在发生任何兑换之前，Hook 将执行基于时间的限制，确保兑换仅在特定时间发生，否则将撤销兑换交易。以下是完整代码：\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741164932)\r\n\r\n* **部署 Hook**\r\n\r\n这一步至关重要，这就是像 **_BuildBear_** 这样的平台的重要性所在。BuildBear 测试网络为开发人员提供了先进的测试功能，具有独特的插件系统。你可以通过将其部署到 BuildBear Sandbox 来测试 Hooks 的整体功能，就像在主网络上一样。\r\n\r\n要部署 Hook 合约，我们需要使用 CEATE2 在预定地址部署，并且 Hook 合约必须在地址中编码特定标志。在环境文件中设置如下：\r\n\r\n```\r\n# Hook Flags\r\n\r\nBEFORE_SWAP=true  \r\nAFTER_SWAP=false  \r\nBEFORE_ADD_LIQUIDITY=false  \r\nAFTER_ADD_LIQUIDITY=false  \r\nBEFORE_REMOVE_LIQUIDITY=false  \r\nAFTER_REMOVE_LIQUIDITY=false  \r\nBEFORE_INITIALIZE=false  \r\nAFTER_INITIALIZE=false  \r\nBEFORE_DONATE=false  \r\nAFTER_DONATE=false\r\n```\r\n\r\n\r\n\r\n部署脚本如下：\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741164929)\r\n\r\n* **创建 BuildBear Sandbox 以部署和验证合约。**\r\n\r\n如果你是 BuildBear 的新手，请查看这个 [快速指南](https://www.buildbear.io/resources/quick-guide)。在这里，我们将在 Sepolia 网络上部署它，请参考 poolManager 的部署地址[这里。](https://uniswap-docs-staging.vercel.app/reference/solidity-contracts/v4/deployment-addresses)\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741164937)\r\n\r\n在你的 BuildBear 仪表板的插件选项中，安装 **SolidityScan 插件**，以检查漏洞并获取详细的安全报告。\r\n\r\n**Sourcify 插件** 是默认安装的，将用于[智能合约验证。](https://www.buildbear.io/resources/guides-and-tutorials/sourcify_verify)\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741165944)\r\n\r\n使用以下命令部署和验证你的 Hook 合约。确保用你的实际 BuildBear RPC URL 和私钥替换占位符。还要确保你的帐户中有足够的代币或从水龙头获取。\r\n\r\n```shell\r\nforge script script/DeployHook.s.sol --rpc-url https://rpc.buildbear.io/sanam  --private-key 0xf09590bd83826abc93ad34f81fabc1dcb739a1b9daa34464e19fa96fbf1e7596 --verify --verifier sourcify --verifier-url \"https://rpc.buildbear.io/verify/sourcify/server/sanam\" -vvvv --broadcast --slow\r\n```\r\n\r\n\r\n\r\n\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741166190)\r\n\r\n转到资源管理器，查看你的 Hook 在概述选项卡中的安全状态和漏洞计数，如下图所示：\r\n\r\n![](https://img.learnblockchain.cn/attachments/migrate/1721741166281)\r\n\r\n## 结论\r\n\r\nUniswap v4 通过优化流动性管理和交易功能推进了 DeFi 领域。新的 Hooks 功能提供了定制性和增强功能，极大地有利于去中心化交易所（DEX）和自动做市商（AMM）。本教程演示了如何使用 BuildBear 在 Uniswap v4 上开发和部署自定义 Hooks，突出了无缝集成和强大功能，使开发人员更容易创建、测试和保护智能合约。\r\n\r\n## 关于 BuildBear：\r\n\r\n[BuildBear](https://www.buildbear.io/) 是专为 DApp 开发和测试量身定制的平台。开发人员可以在各种区块链网络上构建个性化的私人测试网络沙盒。在 BuildBear 上，无限制地铸造原生和 ERC20 代币及快速的交易时间（不到 3 秒！），极大地增强了 DApp 开发生命周期。该平台配备了用于实时测试和调试的工具和插件，确保开发人员可以轻松跟踪复杂的区块链交易。\r\n\r\n**关注我们：** [Twitter](https://twitter.com/_BuildBear) | [LinkedIn](https://www.linkedin.com/company/build-bear/) | [Telegram](https://t.me/Web3_dApp_Developers) | [GitHub](https://github.com/BuildBearLabs)\r\n\r\n> 我是 [AI 翻译官](https://learnblockchain.cn/people/19584)，为大家转译优秀英文文章，如有翻译不通的地方，在[这里](https://github.com/lbc-team/Pioneer/blob/master/translations/8813.md)修改，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/21836","address":null},"history":null,"timestamp":1721742183,"version":1}