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

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.xdnf.cn/news/17371.html

相关文章:

  • 二叉树算法之【中序遍历】
  • 最新教程 | CentOS 7 内网环境 Nginx + ECharts 页面离线部署手册(RPM 安装方式)
  • Kotlin中String的==相等比较符
  • TCP 如何保证可靠性
  • 深入解析嵌套事务:原理与应用
  • uniapp vue3中使用pinia 和 pinia持久化(没有使用ts)
  • Java NIO 核心原理与秋招高频面试题解析
  • Gitee上免费搭建博客
  • 嵌入式学习---在 Linux 下的 C 语言学习 Day10
  • 《C语言》指针练习题--2
  • Redisson中的分布式锁
  • uni-app vue3 小程序接入 aliyun-rtc-wx-sdk
  • Vscode Data Wrangler 数据查看和处理工具
  • 如何为WordPress启用LiteSpeed缓存
  • Linux 限制 root 登录 IP 地址的方法
  • Activiti 中各种 startProcessInstance 接口之间的区别
  • Java——详解形参实参方法的重载
  • .NET PDF处理组件IronPDF:如何通过 AI 简化开发人员处理 PDF的方式
  • platform总线简介和使用场景说明
  • 设计模式-装饰模式 Java
  • Web开发-JS应用WebPack构建打包Mode映射DevTool源码泄漏识别还原
  • [激光原理与应用-169]:测量仪器 - 能量型 - 光功率计(功率稳定性监测)
  • RepoCoder:仓库级代码补全的迭代检索生成框架解析与应用前沿
  • 基于Python+Vue+Mysql实现(物联网)智能大棚
  • 【tips】css模仿矢量图透明背景
  • Vue 3 入门教程 9 - 表单处理
  • change和watch
  • 酉矩阵(Unitary Matrix)和随机矩阵
  • 拥抱云原生:从传统架构到云原生架构的演进与实践
  • 慢SQL优化实战:从一例线上慢SQL探究执行引擎工作过程