部署最经典的区块链defi应用Uniswap V2教程
介绍了在Polkadot Hub上部署Uniswap V2智能合约的完整流程。教程涵盖环境配置、项目初始化、合约编译、架构理解以及测试部署等关键步骤。Uniswap V2采用自动化做市商(AMM)模型,通过Factory和Pair合约实现代币交易功能。开发者需要具备Solidity和JavaScript基础,并配置Hardhat开发环境。
原文作者:PaperMoon团队
具备以太坊兼容性的 PolkaVM 智能合约仍处于早期开发阶段,可能存在不稳定或功能不完整的情况。
简介
去中心化交易所(DEX)是 DeFi 生态系统的基石,它允许用户在无需中介的情况下进行许可式的代币交换。Uniswap V2 通过其自动做市商(AMM)模型彻底改变了 DEX 的设计,使任何 ERC-20 代币对都可以进行流动性提供和交易。
本教程将带你理解 Uniswap V2 的工作原理,并展示如何将其部署到 Polkadot Hub 上的项目中。通过学习这些合约,你将获得对最具影响力的 DeFi 协议之一的实践经验,并理解它如何在不同区块链生态中运行。
前置条件
在开始之前,请确保你具备以下条件:
• 已安装 Node.js(v16.0.0 或更高版本) 和 npm
• 对 Solidity 和 JavaScript 有基本了解
• 熟悉 hardhat-polkadot 开发环境
• 拥有一些 PAS 测试代币(用于支付交易手续费,可从 Polkadot 水龙头获取)
• 对 AMM 与流动性池机制有基本理解
项目初始化
克隆 Uniswap V2 项目
git clone https://github.com/polkadot-developers/polkavm-hardhat-examples.git -b v0.0.6
cd polkavm-hardhat-examples/uniswap-v2-polkadot/
安装依赖
npm install
更新 Hardhat 配置
请更新 hardhat.config.js,确保 Substrate 节点与 ETH-RPC 适配器的路径与你本地机器一致。
hardhat: {
polkavm: true,
nodeConfig: {
nodeBinaryPath: '../bin/substrate-node',
rpcPort: 8000,
dev: true,
},
adapterConfig: {
adapterBinaryPath: '../bin/eth-rpc',
dev: true,
},
},
配置私钥
在项目根目录创建 .env 文件(可参考 env.example):
LOCAL_PRIV_KEY="INSERT_LOCAL_PRIVATE_KEY"
AH_PRIV_KEY="INSERT_AH_PRIVATE_KEY"
• LOCAL_PRIV_KEY:用于本地环境的私钥(可从示例文件中获取)
• AH_PRIV_KEY:用于部署合约的账户私钥(例如从 MetaMask 导出)
编译合约
npx hardhat compile
如果编译成功,你将看到如下输出:
Compiling 12 Solidity files
Successfully compiled 12 Solidity files
编译完成后,合约产物会生成在 artifacts-pvm 目录中,其中包含 ABI 与字节码。
理解 Uniswap V2 架构
在与合约交互之前,理解 Uniswap V2 的核心架构非常重要。该模型构成了几乎所有现代 DEX 的基础,核心理念包括:
• 自动化做市(AMM)
• 基于代币对的流动性池
• 确定性的定价机制
Uniswap V2 的核心由两个主要合约组成:
Factory 合约
Factory 负责 创建与管理交易对。
当两个 ERC-20 代币需要进行交易时,Factory 会创建一个新的 Pair 合约来管理该代币对的流动性池。
其关键职责包括:
• 记录所有已部署的交易对
• 确保同一代币组合只存在一个交易池(避免重复池)
Pair 合约
每一个 Pair 合约都是一个 去中心化的流动性池,内部持有两种 ERC-20 代币的储备。
Pair 合约实现了 AMM 的核心逻辑:
• 维持 恒定乘积公式(x × y = k)
• 负责交易执行与价格计算
• 允许用户存入代币以获取 LP(流动性提供者)代币,代表其在池中的份额
这种极简而模块化的架构,使 Uniswap 具备高度的可组合性、无需信任的特性以及强扩展性,也使其非常适合在 Polkadot Hub 等多链环境中复用。
项目结构
uniswap-V2-polkadot
├── bin/
├── contracts/
│ ├── interfaces/
│ │ ├── IERC20.sol
│ │ ├── IUniswapV2Callee.sol
│ │ ├── IUniswapV2ERC20.sol
│ │ ├── IUniswapV2Factory.sol
│ │ └── IUniswapV2Pair.sol
│ ├── libraries/
│ │ ├── Math.sol
│ │ ├── SafeMath.sol
│ │ └── UQ112x112.sol
│ ├── test/
│ │ └── ERC20.sol
│ ├── UniswapV2ERC20.sol
│ ├── UniswapV2Factory.sol
│ └── UniswapV2Pair.sol
├── ignition/
├── scripts/
│ └── deploy.js
├── node_modules/
├── test/
│ ├── shared/
│ │ ├── fixtures.js
│ │ └── utilities.js
│ ├── UniswapV2ERC20.js
│ ├── UniswapV2Factory.js
│ └── UniswapV2Pair.js
├── .env.example
├── .gitignore
├── hardhat.config.js
├── package.json
└── README.md
测试合约
你可以运行项目中提供的测试套件,以验证合约是否按预期工作。测试内容涵盖:
• 创建交易对
• 添加流动性
• 执行代币交换
启动本地节点
npx hardhat node
该命令会启动:
• 本地 Substrate 节点:ws://127.0.0.1:8000
• ETH-RPC 适配器:http://localhost:8545
运行测试
在新的终端中执行:
npx hardhat test --network localNode
若一切正常,你将看到类似以下输出(节选):
28 passing (12m)
部署合约
在测试成功后,你可以将合约部署到本地节点或 Polkadot Hub。部署脚本位于 scripts/deploy.js,负责部署 Factory 和 Pair 合约。
部署到本地节点
npx hardhat run scripts/deploy.js --network localNode
部署到 Polkadot Hub 测试网
npx hardhat run scripts/deploy.js --network passetHub
该命令会将合约部署到 Polkadot 测试网,需要 PAS 测试代币,并在真实网络环境下运行,部署结果会被永久记录。
部署完成后,脚本会输出合约地址,例如:
Factory deployed to : 0x85b108660f47caDfAB9e0503104C08C1c96e0DA9
Pair deployed to : 0xF0e46847c8bFD122C4b5EEE1D4494FF7C5FC5104
请妥善保存这些地址,后续交互将会用到。
总结
本教程展示了如何将 Uniswap V2 合约部署到 Polkadot Hub,将成熟的 AMM 架构引入 Polkadot 生态,为 ERC-20 代币的去中心化交易奠定基础。
通过本指南,你已经掌握了:
• 在 Polkadot Hub 上配置 Hardhat 开发环境
• 理解 Uniswap V2 的核心架构
• 在本地环境中测试 Uniswap V2 合约
• 将合约部署到本地网络与测试网
在此基础上,你可以进一步扩展:
• 创建流动性池
• 执行代币交换
• 构建前端界面与合约交互
这些能力可以用于构建更复杂的 DeFi 应用,或将 Uniswap V2 功能整合进你现有的 Polkadot 项目中。
原文链接:https://docs.polkadot.com/tutorials/smart-contracts/demo-aplications/deploying-uniswap-v2/
更多推荐



所有评论(0)