当前位置: 首页 > news >正文

Ethereum: 像Uniswap V3贡献者一样开发,克隆、编译与测试v3-core

学习以太坊智能合约开发,最好的参照莫过于Uniswap,直接克隆Uniswap/v3-core仓库并尝试运行其自带的流程,是深入其骨髓的正确姿势。这不仅可行,而且是Uniswap团队推荐的标准开发流程。
让我们一起看看,一个核心贡献者在修改代码前,会如何验证整个系统的稳定性的。在这里插入图片描述

第一步:克隆仓库与环境准备

首先,我们需要将v3-core的代码库完整地复制到本地。

  1. 克隆仓库:打开我们的终端,执行以下命令。

    git clone https://github.com/Uniswap/v3-core.git
    cd v3-core
    
  2. 安装依赖:进入项目目录后,我们会看到一个package.json文件,它定义了项目所需的所有依赖和脚本。v3-core项目使用yarn作为包管理工具(当然,使用npm通常也可以,但遵循官方习惯更佳)。

    yarn install
    

    这个命令会下载Hardhat、Ethers.js、Waffle(一个测试框架)以及其他所有开发和测试所必需的库。

第二步:编译合约

在运行任何操作之前,我们需要先将Solidity合约(.sol文件)编译成以太坊虚拟机(EVM)可以理解的字节码(Bytecode)和应用二进制接口(ABI)。

package.json中,已经为我们定义好了编译脚本。

yarn compile

执行后,Hardhat会启动,并根据hardhat.config.ts中的设置(比如Solidity编译器版本0.7.6),将contracts/目录下的所有合约编译,并将结果输出到artifacts/目录下。如果一切顺利,我们不会看到任何报错信息。

第三步:运行核心测试(关键步骤)

这才是本次探索的核心!v3-core仓库的精髓在于其严谨、全面的测试套件。这些测试不仅验证了代码的正确性,其本身就是一份“活的文档”,精确地描述了每个函数应该如何工作。

要运行测试,只需执行:

yarn test

当我们敲下回车后,背后会发生一系列自动化操作,这正是Hardhat框架的强大之处:

  1. 启动本地网络:Hardhat会在内存中瞬间启动一个临时的、全新的以太坊测试网络。这个网络是纯净的,只为我们这次测试服务,测试结束后即销毁。
  2. 部署合约:测试脚本(位于test/目录下)会自动执行,将编译好的UniswapV3Factory以及测试所需的其他辅助合约部署到这个临时的本地网络上。
  3. 执行测试用例:脚本会逐一调用合约的各种函数,比如创建流动性池(createPool)、模拟价格变动、计算手续费等,并用断言(expect)来检查返回结果是否与预期完全一致。

v3-core的测试主要聚焦于协议的数学正确性和核心逻辑,例如:

  • TickMath库:验证价格与tick索引转换的精度。
  • SwapMath库:确保兑换逻辑和滑点计算的准确性。
  • 流动性管理:测试添加/移除流动性时,代币数量计算的正确性。

下面是yarn test命令的执行流程示意图:
在这里插入图片描述

从上图可以看出,合约的部署是作为测试流程的一部分自动完成的。我们不需要手动编写部署脚本来运行测试。

实用建议:从“核心”走向“外围”

当我们成功在本地跑通v3-core的测试后,你可能会有一个疑问:SwapRouter(路由合约)和NonfungiblePositionManager(NFT仓位管理器)在哪里?为什么这里没有提供流动性和交易的脚本?

这是一个非常关键的问题!答案是:它们不在v3-core

  • v3-core:只包含最基础、最核心的合约,即工厂(UniswapV3Factory)和池子(UniswapV3Pool)以及相关的数学库。它追求的是极致的安全、精简和低Gas。
  • v3-periphery:包含了所有与用户交互的“外围”合约,如SwapRouterNonfungiblePositionManager等。这些合约负责处理用户输入的参数、打包交易、管理NFT等。

因此,我们的下一步,就是以同样的方式去探索v3-periphery仓库:https://github.com/Uniswap/v3-periphery.git。它的测试用例会更贴近用户的实际操作,比如“用1个ETH兑换尽可能多的DAI”。

结论

我们完全可以像贡献者一样,通过克隆v3-core仓库并运行其自带的yarn test命令来部署和测试现有代码。这个过程不仅能验证我们本地环境的正确性,更是深入理解Uniswap V3底层数学和核心逻辑的最佳途径。

记住,v3-core是引擎,而v3-periphery是驾驶舱。探索完核心之后,再去探索外围,我们将对整个Uniswap V3协议有一个完整而深刻的认识。

http://www.dtcms.com/a/319784.html

相关文章:

  • 通过减少回表和增加冗余字段,优化SQL查询效率
  • LSTM 单变量时序预测—pytorch
  • vscode+latex本地英文期刊环境配置
  • VScode使用jupyter notebook,配置内核报错没有torch解决
  • 如何委托第三方检测机构做软件测试?
  • 鸿蒙 - 分享功能
  • 直播预告|鸿蒙生态下的 Flutter 开发实战
  • 非化学冷却塔水处理解决方案:绿色工业时代的革新引擎
  • Elasticsearch 文档分词器
  • 神经网络入门指南:从零理解 PyTorch 的核心思想
  • 2025 五大商旅平台管控力解析:合规要求下的商旅管理新范式
  • Flutter 布局控件使用详解
  • 【java基础|第十六篇】面向对象(六)——抽象和接口
  • Java-JVM探析
  • 参考平面与返回电流
  • BMS保护板测试仪:电池安全管理的“质检卫士”|深圳鑫达能
  • Java爬虫性能优化:多线程抓取JSP动态数据实践
  • 键盘+系统+软件等快捷键大全
  • RK3568笔记九十八:使用Qt实现RTMP拉流显示
  • FluentUI-main的详解
  • MyBatis联合查询
  • windows有一个企业微信安装包,脚本执行并安装到d盘。
  • 我的世界Java版1.21.4的Fabric模组开发教程(十七)自定义维度
  • PCL提取平面上的圆形凸台特征
  • WindowsLinux系统 安装 CUDA 和 cuDNN
  • 从库存一盘货到全域智能铺货:巨益科技全渠道平台助力品牌业财一体化升级
  • 电子基石:硬件工程师的器件手册 (九) - DC-DC拓扑:电能转换的魔术师
  • 线上业务突然流量掉 0 ?一次 DNS 污染排查与自救实录
  • Qt中类提升后不显示问题
  • 纷享销客前端实习一面