Uniswap V2 核心

半截肥皂發表於2024-06-12

Uniswap V2 核心

  • UniswapV2Factory

  • UniswapV2Pair

  • UniswapV2ERC20

  • IUniswapV2Router02

1. UniswapV2Factory 合約

UniswapV2Factory 是工廠合約,主要負責建立和管理交易對。它是 Uniswap V2 系統的核心管理部分。

主要功能:

  • 建立交易對:工廠合約可以建立新的交易對(流動性池),每個交易對都有一個對應的 UniswapV2Pair 合約。
  • 管理交易對:工廠合約維護一個對映,儲存所有建立的交易對的地址,確保每個交易對的唯一性。
  • 設定費用接收地址:工廠合約可以設定和更改接收交易費用的地址。

重要方法:

  • createPair(address tokenA, address tokenB): 建立一個新的交易對,並返回其地址。
  • getPair(address tokenA, address tokenB): 獲取現有交易對的地址。
  • setFeeTo(address): 設定交易費用的接收地址。
  • setFeeToSetter(address): 設定能夠更改費用接收地址的許可權地址。

類比:

生活中的例子:餐廳經理

  • 餐廳經理負責開設新的自助餐檯(交易對)並記錄這些餐檯的位置(地址)。他還可以設定餐廳的收益接收人(費用接收地址)。

2. UniswapV2Pair 合約

UniswapV2Pair 是每個交易對對應的合約,負責管理流動性池和處理代幣交換。每個交易對都會有一個獨立的 UniswapV2Pair 合約例項。

主要功能:

  • 管理流動性池:儲存流動性提供者(LP)存入的兩種代幣,並管理這些代幣的交換。
  • 處理代幣交換:按照恆定乘積公式進行代幣的交換,並在每次交易時收取一定的交易費用。
  • 發放流動性代幣:向流動性提供者發放流動性代幣,代表他們在流動性池中的份額。

重要方法:

  • mint(address to): 向流動性提供者發放流動性代幣。
  • burn(address to): 燃燒流動性代幣並返回相應份額的基礎代幣。
  • swap(uint amount0Out, uint amount1Out, address to, bytes calldata data): 執行代幣交換。
  • sync(): 更新流動性池中的代幣餘額。

類比:

生活中的例子:自助餐檯

  • 自助餐檯管理顧客(使用者)存放和取用的食物(代幣),並記錄每個顧客在餐檯上的份額(流動性代幣)。餐檯還處理不同食物之間的交換,並收取服務費(交易費)。

3. UniswapV2ERC20 合約

UniswapV2ERC20 實現了流動性代幣的 ERC-20 標準。流動性代幣用於表示流動性提供者在流動性池中的份額。

主要功能:

  • 實現 ERC-20 標準:支援代幣的轉賬、授權和查詢功能。
  • 流動性提供者的份額管理:流動性代幣代表了流動性提供者在特定交易對池中的持有份額。

重要方法:

  • totalSupply(): 返回流動性代幣的總供應量。
  • balanceOf(address account): 返回指定地址持有的流動性代幣數量。
  • transfer(address recipient, uint amount): 將流動性代幣從呼叫者地址轉移到指定地址。
  • approve(address spender, uint amount): 授權第三方地址可以使用呼叫者的流動性代幣。
  • transferFrom(address sender, address recipient, uint amount): 從授權地址轉移流動性代幣到指定地址。

類比:

生活中的例子:餐券

  • 餐券代表顧客在自助餐檯上的用餐份額(流動性份額)。顧客可以轉讓餐券(流動性代幣),餐券的總量和每個顧客持有的數量可以隨時查詢。

4.IUniswapV2Router02

Uniswap V2 的 IUniswapV2Router02 是一個關鍵的智慧合約介面,它提供了一系列方法,用於在 Uniswap 協議上執行代幣交換、增加和移除流動性等操作。IUniswapV2Router02 繼承自 IUniswapV2Router01,並在其基礎上增加了一些額外功能。下面詳細介紹 IUniswapV2Router02 的作用及其包含的方法。

作用

IUniswapV2Router02 主要用於以下操作:

  1. 代幣交換:在 Uniswap 上進行代幣與代幣之間的交換。
  2. 增加流動性:向 Uniswap 池中新增代幣對以提供流動性,並獲得流動性提供者 (LP) 代幣。
  3. 移除流動性:從 Uniswap 池中移除代幣對,贖回 LP 代幣。
  4. 支援複雜的代幣轉換路徑:支援透過多跳交易實現複雜的代幣交換路徑。

方法詳細講解

以下是 IUniswapV2Router02 包含的一些主要方法及其詳細說明:

1. 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);
  • 功能:向指定的代幣對池中新增流動性。
  • 引數
    • tokenAtokenB:要新增流動性的代幣對。
    • amountADesiredamountBDesired:希望新增的代幣數量。
    • amountAMinamountBMin:希望新增的代幣的最小數量(滑點保護)。
    • to:接收流動性代幣的地址。
    • deadline:交易必須完成的時間(時間戳)。
  • 返回值:實際新增的代幣數量和獲得的流動性代幣數量。

2. removeLiquidity

function removeLiquidity(
    address tokenA,
    address tokenB,
    uint liquidity,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
) external returns (uint amountA, uint amountB);
  • 功能:從指定的代幣對池中移除流動性。
  • 引數
    • tokenAtokenB:要移除流動性的代幣對。
    • liquidity:要移除的流動性代幣數量。
    • amountAMinamountBMin:最小可接受的代幣數量(滑點保護)。
    • to:接收代幣的地址。
    • deadline:交易必須完成的時間(時間戳)。
  • 返回值:實際接收的代幣數量。

3. swapExactTokensForTokens

function swapExactTokensForTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
) external returns (uint[] memory amounts);
  • 功能:用指定數量的輸入代幣交換儘可能多的輸出代幣。
  • 引數
    • amountIn:輸入代幣數量。
    • amountOutMin:最小可接受的輸出代幣數量(滑點保護)。
    • path:代幣交換路徑。
    • to:接收輸出代幣的地址。
    • deadline:交易必須完成的時間(時間戳)。
  • 返回值:每個路徑節點的代幣數量。

4. swapTokensForExactTokens

function swapTokensForExactTokens(
    uint amountOut,
    uint amountInMax,
    address[] calldata path,
    address to,
    uint deadline
) external returns (uint[] memory amounts);
  • 功能:用盡可能少的輸入代幣交換指定數量的輸出代幣。
  • 引數
    • amountOut:輸出代幣數量。
    • amountInMax:最大可接受的輸入代幣數量(滑點保護)。
    • path:代幣交換路徑。
    • to:接收輸出代幣的地址。
    • deadline:交易必須完成的時間(時間戳)。
  • 返回值:每個路徑節點的代幣數量。

5. swapExactETHForTokens

function swapExactETHForTokens(
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
) external payable returns (uint[] memory amounts);
  • 功能:用指定數量的 ETH 交換儘可能多的輸出代幣。
  • 引數
    • amountOutMin:最小可接受的輸出代幣數量(滑點保護)。
    • path:代幣交換路徑(第一個地址必須是 WETH)。
    • to:接收輸出代幣的地址。
    • deadline:交易必須完成的時間(時間戳)。
  • 返回值:每個路徑節點的代幣數量。

6. swapTokensForExactETH

function swapTokensForExactETH(
    uint amountOut,
    uint amountInMax,
    address[] calldata path,
    address to,
    uint deadline
) external returns (uint[] memory amounts);
  • 功能:用盡可能少的輸入代幣交換指定數量的 ETH。
  • 引數
    • amountOut:輸出 ETH 數量。
    • amountInMax:最大可接受的輸入代幣數量(滑點保護)。
    • path:代幣交換路徑(最後一個地址必須是 WETH)。
    • to:接收 ETH 的地址。
    • deadline:交易必須完成的時間(時間戳)。
  • 返回值:每個路徑節點的代幣數量。

總結

  • UniswapV2Factory 合約類似於餐廳經理,負責建立和管理所有的交易對(自助餐檯)。
  • UniswapV2Pair 合約類似於具體的自助餐檯,管理存放和交換的代幣(食物),併發放流動性代幣(餐券)。
  • UniswapV2ERC20 合約實現了流動性代幣的 ERC-20 標準,用於表示和管理流動性提供者在池中的份額(餐券的管理)。
  • IUniswapV2Router02 提供了一系列用於代幣交換和流動性管理的功能,使得使用者能夠在去中心化交易所 Uniswap 上方便地進行交易和流動性操作。瞭解這些方法及其引數和返回值,有助於更好地利用 Uniswap 協議進行 DeFi 操作。

相關文章