Uniswap
Uniswap V3:使用solidity創建LP(ETH-ERC20對)
我正在嘗試使用帶有 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