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