将Uniswap V4集成到你的智能合约中:逐步指南

  • BuildBear
  • 发布于 2024-03-02 22:15
  • 阅读 35

Uniswap V4 通过引入 Hooks 特性、单例合约架构、闪电会计系统、无限费用层和直接以 ETH 进行交易等功能,显著提升了去中心化交易所的灵活性和效率。文章详细阐述了 Uniswap V4 的新特性,以及如何将其集成到智能合约中,包括代币交换的具体实现步骤和代码示例。

Uniswap V4 代表了 Uniswap 协议的重要进步,增强了去中心化交易所 (DEXs) 和自动化做市商 (AMMs) 的能力,为用户提供前所未有的灵活性、效率和定制化选项。我们之前已经涵盖了 Uniswap v3 并将其集成到我们的项目中。

Uniswap V4 有什么新变化?

Hook功能 (Hooks Feature): Hook是可以链接到流动性池的智能合约,为池的生命周期的各个阶段(例如交换和流动性的变化)提供了很大的定制空间。这样可以添加特定功能,如限价单、自定义预言机或自定义 AMM 曲线。

单例合约架构 (Singleton Contract Architecture): 在早期版本中,每对代币需要自己的合约。然而,Uniswap V4 使用单例合约模型。这意味着所有池都合并到一个合约中,从而降低了交易和池创建的 gas 成本。这也使得多跳交易更加高效。

闪电会计系统 (Flash Accounting System): 该系统允许用户在一个交易中执行多项操作,诸如交换和添加流动性。它跟踪进出资金的净余额。如果交易结束时还有债务未清,将回滚以确保安全和效率。

无限费用层级 (Unlimited Fee Tiers): 引入无限费用层级后,每个流动池可以拥有自己的费用结构,更精确地匹配不同的资产和交易策略。

与原生ETH的直接交易对 (Direct Trading Pairs with Native ETH): Uniswap V4 允许与普通 ETH 进行直接交易对,而不需要 Wrapped ETH (WETH)。这简化了交易并降低了交易成本。

社区驱动的创新 (Community-Driven Innovation): Uniswap V4 鼓励协作开发。其源代码向社区开放,以便进行贡献,促进对新功能和改进的积极参与和建议。

如何将 Uniswap V4 集成到你的合约中

让我们来看看如何使用 Uniswap v4 进行交换。我们将探索智能合约中的关键功能。

合约初始化 (Contract Initialization): 合约使用 IPoolManager 接口的实例进行初始化,这样可以访问 Uniswap 流动池管理合约。

交换代币 (Swapping Tokens):

SwapTokens 函数负责启动代币交换操作。它接受三个参数:

  • poolKey: 一个包含特定 Uniswap 流动池的详细信息的结构,用于交换,包括代币地址、费用、tick 间隔和Hook。
struct PoolKey {
    Currency currency0;
    Currency currency1;
    uint24 fee;
    int24 tickSpacing;
    IHooks hooks;
}
  • swapParams: 额外参数,指定交换详细信息,如方向(买入或卖出)、交换数量和价格限制。sqrtPriceLimitX96 代表你可以接受的最低价格。它以 x * y 公式的平方根的形式表示。X96 表示这是在小数点右侧以 96 位精度表示的固定点十进制数。
struct SwapParams {
    bool zeroForOne;
    int256 amountSpecified;
    uint160 sqrtPriceLimitX96;
}

锁定和交换执行 (Locking and Swap Execution):

  • 在调用 swapTokens 时,合约在 Uniswap 流动池管理器上调用 lock 函数,有效请求进行交换的权限。
  • 锁定获得后,Uniswap 流动池管理合约自动触发 UniSwapTest 合约上的 lockAcquired 函数。
  • lockAcquired 内,合约验证调用的完整性并检查交换截止日期是否已过。然后,它使用 Uniswap 流动池管理合约的 swap 函数执行交换操作,并相应结算结果代币的余额。

结算代币余额 (Settling Token Balances):

  • _settleCurrencyBalance 函数负责在交换操作后结算代币余额。它区分原生代币 (ETH) 和 ERC20 代币,并相应处理代币转账。
  • 如果增量金额为负,则表示池欠代币,合约调用 take 来回收所欠代币。否则,它通过将 ERC20 代币转账到池管理合约或直接发送原生 ETH 来结算所欠代币。

实现合约 (Implementation Contract)

工作库可以在 这里 找到。

  1. 克隆并安装必要的依赖
git clone https://github.com/sanamummer/Uniswap-v4.git
cd Uniswap-v4
npm install
  1. 创建你的私有测试网
npm run createTestnet

一旦测试网上线,它的 RPC、Explorer 和 Faucet 详细信息将添加到 testnet.json 文件中。

  1. 要部署 PoolManager .sol 智能合约,请运行以下命令:
npx hardhat run scripts/deploy.js

现在将此合约地址传递给交换合约的构造函数参数,并使用以下命令部署它:

npx hardhat run scripts/Swap-tokens.js

点击 Explorer 链接以查看已验证的合约详细信息。

总之,我们已经学习了不同合约在 Uniswap v4 中的角色,以及如何将 Uniswap v3 最优地集成到我们的合约中。

关于 BuildBear:

BuildBear 是一个专为 DApp 开发和测试而设计的平台。开发者可以自由构建一个个性化的私有测试网沙盒,跨各种区块链网络。在 BuildBear 上,可以无限制地铸造原生和 ERC20 代币,加上快速的交易时间(低于 3 秒!),极大地增强了 DApp 开发周期。该平台配备了实时测试和调试的工具,确保开发者能够以无与伦比的简便性跟踪复杂的区块链交易。

与我们联系: Twitter | LinkedIn | Telegram | GitHub

作者:Sana

  • 原文链接: medium.com/buildbear/int...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
BuildBear
BuildBear
https://medium.com/buildbear