技術解析 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 的 文檔。

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧