Uniswap V2 — 从代码解释 DeFi 协议
为了理解我们在分析代码时将要经历的不同组件,首先了解哪些是主要概念以及它们的作用是很重要的。所以,和我一起裸露吧,因为这是值得的。
我在 5 个段落中总结了您需要了解的主要重要概念,您将在本文结束时理解这些概念。
Uniswap 是一种去中心化交易协议。该协议是一套持久的、不可升级的智能合约,它们共同创建了一个自动化的做市商。
Uniswap 生态系统由贡献流动性的流动性提供者、交换代币的交易员和与智能合约交互以开发代币新交互的开发人员组成。
每个 Uniswap智能合约或对管理一个由两个 ERC-20 代币储备组成的流动资金池。
每个流动性池重新平衡以保持 50/50 比例的加密货币资产,这反过来又决定了资产的价格。
流动性提供者可以是任何能够向 Uniswap 交易合约提供等值的 ETH 和 ERC-20 代币的人。作为回报,他们从交易合约中获得流动性提供者代币(LP 代币代表流动性提供者拥有的池的份额),可用于随时提取其在流动性池中的比例。
他们存储库中的主要智能合约是:
UniswapV2ERC20
— 用于 LP 令牌的扩展 ERC20 实现。它还实施了 EIP-2612 以支持链下传输批准。UniswapV2Factory
— 与 V1 类似,这是一个工厂合约,它创建配对合约并充当它们的注册表。注册表使用 create2 来生成对地址——我们将详细了解它是如何工作的。UniswapV2Pair
— 负责核心逻辑的主合约。值得注意的是,工厂只允许创建独特的货币对,以免稀释流动性。UniswapV2Router
— Uniswap UI 和其他在 Uniswap 之上工作的网络和去中心化应用程序的主要入口点。UniswapV2Library
— 一组实现重要计算的辅助函数。
在这篇文章中,我们将提及所有这些,但我们将主要关注浏览UniswapV2Router
和UniswapV2Factory
编码,尽管UniswapV2Pair
并且UniswapV2Library
会涉及很多。
UniswapV2Router02.sol
该合约使创建货币对、添加和删除流动性、计算所有可能的掉期变化的价格以及执行实际掉期变得更加容易。路由器适用于通过工厂合约部署的所有对
您需要在合约中创建一个实例才能调用 addLiquidity、removeLiquidity 和 swapExactTokensForTokens 函数
address private constant ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
IUniswapV2Router02 public uniswapV2Router;
uniswapV2Router = IUniswapV2Router02(ROUTER);
现在让我们看看流动性管理:
**函数** addLiquidity():
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
- tokenA和tokenB:是我们需要获取或创建我们想要增加流动性的货币对的代币。
- amountADesired和amountBDesired是我们要存入流动资金池的金额。
- amountAMin和amountBMin是我们要存入的