Uniswap 钩子

一个用于安全和模块化 Uniswap v4 钩子的 Solidity 库。该库包括:

  • 用于自定义会计、异步交换和自定义曲线的基础实现

  • 用于管理和执行的费用相关实现

  • 用于通用场景的即用型钩子,例如三明治保护

  • 用于钩子开发的实用程序和库

概述

安装

目前,该库只能使用 gitmodules 通过 Foundry 安装。对 Hardhat 的支持即将推出。

Foundry (git)

$ forge install OpenZeppelin/uniswap-hooks

注意:请确保在 remappings.txt 中添加 @openzeppelin/uniswap-hooks/=lib/uniswap-hooks/src/

使用

安装完成后,您可以通过导入来使用库中的合约:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

import {BaseDynamicFee, IPoolManager, PoolKey} from "src/fee/BaseDynamicFee.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @dev 一个允许所有者动态更新 LP 费用的钩子。
 */
contract DynamicLPFeeHook is BaseDynamicFee, Ownable {
    uint24 public fee;

    constructor(IPoolManager _poolManager) BaseDynamicFee(_poolManager) Ownable(msg.sender) {}

    /**
     * @inheritdoc BaseDynamicFee
     */
    function _getFee(PoolKey calldata) internal view override returns (uint24) {
        return fee;
    }

    /**
     * @notice 设置 LP 费用,以百分之一的基点表示。
     */
    function setFee(uint24 _fee) external onlyOwner {
        fee = _fee;
    }
}

为了确保您的系统安全,您应该始终按原样使用已安装的代码,既不要从在线来源复制粘贴它,也不要自己修改它。该库的设计使得只部署您使用的合约和函数,因此您无需担心它不必要地增加 Gas 成本。

视频

为了方便理解 Uniswap 钩子并帮助开始使用它们进行构建,我们在 YouTube 频道上发布了这个指南播放列表。

安全

钩子库中的合约按原样提供,不提供任何特定保证,包括向后兼容性。

请直接通过我们的安全 联系方式 报告任何问题。该团队将尽最大努力协助并缓解对该库的任何潜在误用。