对接 Uniswap V2 兑换代币,并测试验证。
- 原文:https://medium.com/uv-labs/uniswap-testing-1d88ca523bf0
- 译文出自:登链翻译计划
- 译者:翻译小组
- 校对:Tiny 熊
- 本文永久链接:learnblockchain.cn/article…
在上一篇文章中,我们通过 大概 100 行代码,了解了 Uniswap 的运行原理。
在本文中,我们将和正式的 Uniswap V2 交互,实现使用Uniswap进行代币兑换,并通过测试验证兑换功能,通过测试验证智能合约的行为是一个很好的粉丝,测试让你相信代码以我们想要的方式执行,而不是以它不应该的方式执行。
在本文中,我们还将学习到如何 fork 主网,并冒充(模拟)一个链上账号进行交易,并编写测试。
但在深入研究之前,为了本文完整,让我们再次介绍一下 Uniswap,Uniswap是一个去中心化的交易所(DEX),运行在以太坊区块链上(主网和其他一些网络)。顾名思义,Uniswap是用来交易ERC20代币的。
Uniswap有3个主要功能:
在这篇文章中,我们将重点讨论使用fork 主网在不同的代币之间进行兑换。
所以让我们开始吧! 🥳🥳🥳
在命令行(CLI)上使用以下命令来初始化项目。
mkdir uni_swap && cd uni_swap
npm init -y
安装项目所需的依赖项,运行:
npm install --save hardhat @nomiclabs/hardhat-ethers @nomiclabs/hardhat-waffle ethers @uniswap/v2-core dotenv
要初始化你的Hardhat项目,在CLI中运行npx hardhat
命令,并创建一个空的config.js文件。
并定制你的Hardhat配置,因为我们要fork主网来与Uniswap交互。因此,Hardhat配置应该看起来类似于这样:
注意:用你的自己AlchemyAPI密钥替换URL中的<key>
部分。
为合约、脚本和测试创建目录,以便更好地组织代码。
在你的CLI中使用以下代码创建目录:
mkdir contracts && mkdir scripts && mkdir tests
为了编写兑换合约,在合约目录内创建一个文件,命名为testSwap.sol
。
在你的 testSwap.sol
中导入Uniswap 等接口,并创建一个名为testSwap的合约。
它应该看起来像这样:
现在,在testSwap
中,我们需要包括Uniswap Router的地址,我们使用它来完成代币兑换。
使用下面的代码:
//address of the uniswap v2 router
address private constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
现在,定义要用来兑换的函数:
// 兑换函数
function swap(
address _tokenIn,
address _tokenOut,
uint256 _amountIn,
address _to,
uint256 _deadline
) external {}
函数命名为swap,里面有
在兑换函数里面,我们要做的第一件事是在合约里面把所需数量的_tokenIn 转移到合约里,使用msg.sender
:
// 把 token 从用户转移到合约
IERC20(_tokenIn).transferFrom(msg.sender, address(this), _amountIn);
一旦调用执行,_amountIn 数量的 _tokenIn就会转入到testSwap
合约中
接下来,通过调用IERC20 授权,允许Uniswap合约花费testSwap
合约中_amountIn数量的代币。
//by calling IERC20 approve you allow the uniswap contract to spend the tokens in this contract
IERC20(_tokenIn).approve(UNISWAP_V2_ROUTER, _amountIn);
在使用 Uniswap Router 兑换,需要为兑换...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!