Dapp鏈接: https://www.chainpip.com/dapp-view/6724
部署UniswapV2前需要準備的智能合約項目:
l uniswap-v2-core :核心合約
l uniswap-v2-periphery :與核心合約交互的邊緣合約,主要就是路由合約
l uniswap-lib :工具合約
整合以上三個項目到一個項目中:
uniswap-v2-core
core核心主要有三個合約文件:
l UniswapV2Factory.sol :工廠合約
l **UniswapV2Pair.sol : **配對合約
l **UniswapV2ERC20.sol : **LP Token合約
UniswapV2Pair.sol管理著流動性資金池,不同幣對有著不同的實例,比UniswapV2Pair.sol,如USDT-WETH這一個幣對,就對應一個UniswapV2Pair.sol合約地址**, DAI-WETH又對應另一個UniswapV2Pair.sol** 。
UniswapV2ERC20.sol則是用戶往資金池裡註入流動性的一種憑證,也稱為流動性代幣,其實也是一種ERC20代幣,同樣支持轉賬功能。當用戶在Uniswap v2添加兩個交易對(如USDT-WETH) ,也就是添加流動性, Uniswap會增加對應UniswapV2ERC20.sol實例(如USDT-WETH LP Token)的餘額, Uniswap根據用戶持有LP Token的額度,計算手續費收益獎勵給用戶。
每個UniswapV2Pair.sol都有對應的一種UniswapV2ERC20.sol與之綁定。其實, UniswapV2Pair繼承了 UniswapV2ERC20 ,所以配對合約本身其實也是LP Token合約。
UniswapV2Factory.sol則是用來部署UniswapV2Pair.sol的,通過工廠合約的 createPair()函數來創建新的配對合約實例。
uniswap-v2-periphery
periphery核心有兩個合約文件:
l UniswapV2Router01.sol :路由合約01版本
l UniswapV2Router02.sol :路由合約02版本,相比01版本主要增加了幾個支持交稅費用的函數
這兩個合約只要部署一個就行,本教程只部署UniswapV2Router01.sol
uniswap-lib
提供uniswap-v2-periphery的函數庫。
開始部署Uniswap V2
在部署Uniswap V2之前,我們需要改下Uniswap V2代碼中init code hash值,否則即便部署成功,也使用不了。位於項目contracts/libraries/UniswapV2Library.sol文件中的pairFor函數:
init code hash是UniswapV2Pair的bytecode通過keccak-256計算的值:
點擊Bytecode按鈕,在彈框中復制**Bytecode值,**打開網址http://emn178.github.io/online-tools/keccak_256.html
記得選擇Input type為"Hex",最終得到的"02253df52a97965e4b0f62119b1048e43d71c7e02dd706e7a1d07655ed5f8642" ,就是我們要的init code hash
部署合約
只要部署三個合約:
l UniswapV2Factory
l WETH (可選,也可使用鏈上已有的WETH地址)
l UniswapV2Router01
UniswapV2Factory參數:
l _feeToSetter:設置手續費的管理員,可任選一個錢包地址
UniswapV2Router01參數:
l _factory: UniswapV2Factory部署後的合約地址
l _WETH: WETH合約地址
添加流動池
l addLiquidity :該接口支持添加兩種ERC20代幣作為流動性
l addLiquidityETH :與上一個接口不同,該接口提供的流動性資產,其中有一個是ETH
添加兩個代幣流動池
添加代幣與ETH流動池
代幣授權
在添加流動性時,需要先授權代幣給路由合約地址
可以使用一下授權面板,記得修改底部的合約地址為要授權的代幣地址
交易
l swapExactTokensForTokens :用ERC20兌換ERC20 ,但支付的數量是指定的,而兌換回的數量則是未確定的
l swapTokensForExactTokens :也是用ERC20兌換ERC20 ,與上一個函數不同,指定的是兌換回的數量
l swapExactETHForTokens :指定ETH數量兌換ERC20
l swapTokensForExactETH :用ERC20兌換成指定數量的ETH
l swapExactTokensForETH :用指定數量的ERC20兌換ETH
l swapETHForExactTokens :用ETH兌換指定數量的ERC20
l swapExactTokensForTokensSupportingFeeOnTransferTokens :指定數量的ERC20兌換ERC20 ,支持轉賬時扣費
l swapExactETHForTokensSupportingFeeOnTransferTokens :指定數量的ETH兌換ERC20 ,支持轉賬時扣費
l swapExactTokensForETHSupportingFeeOnTransferTokens :指定數量的ERC20兌換ETH ,支持轉賬時扣費
代幣之間交易
原文鏈接(含可複制代碼): https://www.chainpip.com/dynamic/231