Uniswap

Uniswap V3:使用solidity創建LP(ETH-ERC20對)

  • November 8, 2021

我正在嘗試使用帶有 ETH 和我的自定義 ERC20 代幣的solidity 創建一個流動性池。我一直在努力解決這個問題,主要是因為 V3 的範例是 ERC20 到 ERC20 對。

Uniswap 會自動將 ETH 轉換為 WETH,還是我必須在為 ETH/ERC20 代幣創建池之前包裝我的 ETH?

還沒有程式碼,只是想了解 Uniswap V3

我假設您在這裡參考官方 Uniswap V3 範例:https ://docs.uniswap.org/sdk/guides/liquidity/adding並且您的池已初始化

簡短的回答:Uniswap 處理(取消)包裝。

完整答案

增加流動性的主要思想類似於在 V3 中如何執行掉期:

  • 從外圍(可選)“助手”(此處為NonfungiblePositionManager.sol)開始,它繼承LiquidityManagement.sol(來自外圍/基礎)。在這裡您可以找到(內部)addLiquidity 函式,在計算金額(開始和結束報價以及 Struct 打包的價格)後,該函式將…
  • …呼叫池本身的低級薄荷函式。這個函式很短,可以概括為:記錄目前池子餘額-呼叫回調-記錄和比較新的池子餘額。

實際的代幣轉移是在回調中完成的,這必須由呼叫 pool.mint 的合約來實現(這裡,LiquidityManagement會為你做這件事)。回調使用 pay() (來自base/peripheryPayment),您可以在其中輕鬆看到(取消)包裝機制(交換回調也使用支付)。

if (token == WETH9 && address(this).balance >= value) {
       // pay with WETH9
       IWETH9(WETH9).deposit{value: value}(); // wrap only what is needed to pay
       IWETH9(WETH9).transfer(recipient, value);

控制方案:

Periphery                Core
addLiquidity      --->  pool.mint
mintCallback&Pay  <---  
                 --->  pool.mint

引用自:https://ethereum.stackexchange.com/questions/113104