使用Uniswap V2部署自己的去中心化交易所

Dapp鏈接: https://www.chainpip.com/dapp-view/6724

部署UniswapV2前需要準備的智能合約項目:

l uniswap-v2-core :核心合約

l uniswap-v2-periphery :與核心合約交互的邊緣合約,主要就是路由合約

l uniswap-lib :工具合約

整合以上三個項目到一個項目中:

使用Uniswap V2部署自己的去中心化交易所

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函數:

使用Uniswap V2部署自己的去中心化交易所

init code hashUniswapV2Pairbytecode通過keccak-256計算的值:

使用Uniswap V2部署自己的去中心化交易所

點擊Bytecode按鈕,在彈框中復制**Bytecode,**打開網址http://emn178.github.io/online-tools/keccak_256.html

使用Uniswap V2部署自己的去中心化交易所

記得選擇Input type"Hex",最終得到的"02253df52a97965e4b0f62119b1048e43d71c7e02dd706e7a1d07655ed5f8642" ,就是我們要的init code hash

部署合約

只要部署三個合約:

l UniswapV2Factory

l WETH (可選,也可使用鏈上已有的WETH地址)

l UniswapV2Router01

使用Uniswap V2部署自己的去中心化交易所

UniswapV2Factory參數:

l _feeToSetter:設置手續費的管理員,可任選一個錢包地址

UniswapV2Router01參數:

l _factory: UniswapV2Factory部署後的合約地址

l _WETH: WETH合約地址

添加流動池

l addLiquidity :該接口支持添加兩種ERC20代幣作為流動性

l addLiquidityETH :與上一個接口不同,該接口提供的流動性資產,其中有一個是ETH

添加兩個代幣流動池

使用Uniswap V2部署自己的去中心化交易所

添加代幣與ETH流動池

使用Uniswap V2部署自己的去中心化交易所

代幣授權

在添加流動性時,需要先授權代幣給路由合約地址

可以使用一下授權面板,記得修改底部的合約地址為要授權的代幣地址

使用Uniswap V2部署自己的去中心化交易所

交易

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 ,支持轉賬時扣費

代幣之間交易

使用Uniswap V2部署自己的去中心化交易所

原文鏈接(含可複制代碼): https://www.chainpip.com/dynamic/231