技术解析 Uniswap 运行机制与核心功能

通过代码理解 Uniswap 的智能合约构成与核心逻辑。

原文标题:《Code Review 回顾:去中心化交易所 Uniswap》

撰文:要飞的 Harry

这次 Code Review 的项目是去中心化交易所 Uniswap,领读员是 Tiny 熊。

视频回顾在 这里。

Uniswap 介绍

Uniswap 的核心原理利用了一个简单的常量乘积模型:K = x * y,其中 x,y 为代币数量。在交易的过程中,需要保持 K 值不变,所以 x 和 y 的变化方向是相反的。可以参考下面的三幅图来理解如何在 Uniswap 中交易和增加流动性。

智能合约

智能合约

智能合约

代码解读

智能合约

Uniswap 有两个核心的项目:

  • 用来托管 Uniswap 的资产
  • 用来与 Uniswap 进行交互

uniswap-v2-core 项目

这个项目中的代码通常不会被用户直接调用,而是被 uniswap-v2-periphery 项目中的路由合约调用,因为路由合约的接口更友好。

合约:UniswapV2Factory.sol

核心方法:

createPair:用来创建一个交易对。接收两个 token 的地址作为参数,然后调用汇编方法 create2 创建 pair,之后 调用 IUniswapV2Pair 的 initialize 方法初始化 pair。创建成功后发出 PairCreated 事件。

合约:UniswapV2Pair.sol

这个合约相当于

核心方法:

  1. mint:给指定的地址 mint LP token。
  2. burn:burn 掉 LP token,发送给用户对应的 token0 和 token1。
  3. swap:交易。

uniswap-v2-periphery 项目

这个项目会被前端直接调用,之后会调用进 uniswap-v2-core 项目中的对应方法。

合约:UniswapV2Router02.sol

核心方法:

  1. addLiquidity:提供两种 ERC-20 token,给 ERC-20⇄ERC-20 池子添加流动性
  2. removeLiquidity:移除 ERC-20⇄ERC-20 池子的流动性,接收两种 ERC-20 token
  3. removeLiquidityWithPermit:让用户提前签好名授权(approve)合约,这样就省去了 approve 交易,只需要一笔交易就可以完成 approve + transferFrom 的操作。
  4. swapExactTokensForTokens:交易。指定发送 (in) 的 token0 数量,让合约计算得到 (out) 的 token1 数量
  5. swapTokensForExactTokens:交易。指定想要得到 (out) 的 token1 数量,让合约计算需要发送 (in) 的 token0 数量

更多的关于合约方法的描述,可以参考 Uniswap 的 文档。

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(1)
打赏 微信扫一扫 微信扫一扫
上一篇 2021年1月15日 下午12:42
下一篇 2021年1月15日 下午12:42

相关推荐

技术解析 Uniswap 运行机制与核心功能

星期五 2021-01-15 12:42:36

原文标题:《Code Review 回顾:去中心化交易所 Uniswap》

撰文:要飞的 Harry

这次 Code Review 的项目是去中心化交易所 Uniswap,领读员是 Tiny 熊。

视频回顾在 这里。

Uniswap 介绍

Uniswap 的核心原理利用了一个简单的常量乘积模型:K = x * y,其中 x,y 为代币数量。在交易的过程中,需要保持 K 值不变,所以 x 和 y 的变化方向是相反的。可以参考下面的三幅图来理解如何在 Uniswap 中交易和增加流动性。

智能合约

智能合约

智能合约

代码解读

智能合约

Uniswap 有两个核心的项目:

  • 用来托管 Uniswap 的资产
  • 用来与 Uniswap 进行交互

uniswap-v2-core 项目

这个项目中的代码通常不会被用户直接调用,而是被 uniswap-v2-periphery 项目中的路由合约调用,因为路由合约的接口更友好。

合约:UniswapV2Factory.sol

核心方法:

createPair:用来创建一个交易对。接收两个 token 的地址作为参数,然后调用汇编方法 create2 创建 pair,之后 调用 IUniswapV2Pair 的 initialize 方法初始化 pair。创建成功后发出 PairCreated 事件。

合约:UniswapV2Pair.sol

这个合约相当于

核心方法:

  1. mint:给指定的地址 mint LP token。
  2. burn:burn 掉 LP token,发送给用户对应的 token0 和 token1。
  3. swap:交易。

uniswap-v2-periphery 项目

这个项目会被前端直接调用,之后会调用进 uniswap-v2-core 项目中的对应方法。

合约:UniswapV2Router02.sol

核心方法:

  1. addLiquidity:提供两种 ERC-20 token,给 ERC-20⇄ERC-20 池子添加流动性
  2. removeLiquidity:移除 ERC-20⇄ERC-20 池子的流动性,接收两种 ERC-20 token
  3. removeLiquidityWithPermit:让用户提前签好名授权(approve)合约,这样就省去了 approve 交易,只需要一笔交易就可以完成 approve + transferFrom 的操作。
  4. swapExactTokensForTokens:交易。指定发送 (in) 的 token0 数量,让合约计算得到 (out) 的 token1 数量
  5. swapTokensForExactTokens:交易。指定想要得到 (out) 的 token1 数量,让合约计算需要发送 (in) 的 token0 数量

更多的关于合约方法的描述,可以参考 Uniswap 的 文档。