Dapp鏈接:https://www.chainpip.com/dapp-view/6724
部署UniswapV2前需要準(zhǔn)備的智能合約項(xiàng)目:
~uniswap-v2-core:核心合約
~uniswap-v2-periphery:與核心合約交互的邊緣合約鄙早,主要就是路由合約
~uniswap-lib:工具合約
整合以上三個(gè)項(xiàng)目到一個(gè)項(xiàng)目中:
uniswap-v2-core
core核心主要有三個(gè)合約文件:
~UniswapV2Factory.sol:工廠合約
~**UniswapV2Pair.sol:**配對(duì)合約
~**UniswapV2ERC20.sol:**LP Token 合約
UniswapV2Pair.sol管理著流動(dòng)性資金池舔箭,不同幣對(duì)有著不同的實(shí)例肤舞,比UniswapV2Pair.sol,如USDT-WETH這一個(gè)幣對(duì),就對(duì)應(yīng)一個(gè)UniswapV2Pair.sol合約地址**,DAI-WETH又對(duì)應(yīng)另一個(gè)UniswapV2Pair.sol**。
UniswapV2ERC20.sol則是用戶往資金池里注入流動(dòng)性的一種憑證悯仙,也稱為流動(dòng)性代幣囱修,其實(shí)也是一種ERC20代幣,同樣支持轉(zhuǎn)賬功能薄声。當(dāng)用戶在Uniswap v2添加兩個(gè)交易對(duì)( 如USDT-WETH)当船,也就是添加流動(dòng)性, Uniswap會(huì)增加對(duì)應(yīng)UniswapV2ERC20.sol實(shí)例(如USDT-WETH LP Token)的余額,Uniswap根據(jù)用戶持有LP Token的額度默辨,計(jì)算手續(xù)費(fèi)收益獎(jiǎng)勵(lì)給用戶德频。
每個(gè)UniswapV2Pair.sol都有對(duì)應(yīng)的一種UniswapV2ERC20.sol與之綁定。其實(shí)缩幸,UniswapV2Pair繼承了?UniswapV2ERC20壹置,所以配對(duì)合約本身其實(shí)也是LP Token合約。
UniswapV2Factory.sol則是用來部署UniswapV2Pair.sol的表谊,通過工廠合約的?createPair()函數(shù)來創(chuàng)建新的配對(duì)合約實(shí)例钞护。
uniswap-v2-periphery
periphery核心有兩個(gè)合約文件:
~UniswapV2Router01.sol:路由合約01版本
~UniswapV2Router02.sol:路由合約02版本,相比 01 版本主要增加了幾個(gè)支持交稅費(fèi)用的函數(shù)
這兩個(gè)合約只要部署一個(gè)就行爆办,本教程只部署UniswapV2Router01.sol
uniswap-lib
提供uniswap-v2-periphery的函數(shù)庫难咕。
開始部署Uniswap V2
在部署Uniswap V2之前,我們需要改下Uniswap V2代碼中init code hash值距辆,否則即便部署成功余佃,也使用不了。位于項(xiàng)目contracts/libraries/UniswapV2Library.sol文件中的pairFor函數(shù):
init code hash是UniswapV2Pair的bytecode通過keccak-256計(jì)算的值:
點(diǎn)擊Bytecode按鈕,在彈框中復(fù)制**Bytecode值,**打開網(wǎng)址 http://emn178.github.io/online-tools/keccak_256.html
記得選擇Input type為"Hex",最終得到的"02253df52a97965e4b0f62119b1048e43d71c7e02dd706e7a1d07655ed5f8642"跨算,就是我們要的init code hash
部署合約
只要部署三個(gè)合約:
~UniswapV2Factory
~WETH (可選, 也可使用鏈上已有的WETH地址)
~UniswapV2Router01
UniswapV2Factory參數(shù):
~_feeToSetter:設(shè)置手續(xù)費(fèi)的管理員爆土,可任選一個(gè)錢包地址
UniswapV2Router01參數(shù):
~_factory: UniswapV2Factory部署后的合約地址
~_WETH: WETH合約地址
添加流動(dòng)池
~addLiquidity:該接口支持添加兩種ERC20代幣作為流動(dòng)性
~addLiquidityETH:與上一個(gè)接口不同,該接口提供的流動(dòng)性資產(chǎn)诸蚕,其中有一個(gè)是ETH
添加兩個(gè)代幣流動(dòng)池
添加代幣與ETH流動(dòng)池
代幣授權(quán)
在添加流動(dòng)性時(shí)步势,需要先授權(quán)代幣給路由合約地址
可以使用一下授權(quán)面板氧猬,記得修改底部的合約地址為要授權(quán)的代幣地址
交易
~swapExactTokensForTokens:用ERC20兌換 ERC20,但支付的數(shù)量是指定的立润,而兌換回的數(shù)量則是未確定的
~swapTokensForExactTokens:也是用ERC20兌換 ERC20狂窑,與上一個(gè)函數(shù)不同,指定的是兌換回的數(shù)量
~swapExactETHForTokens:指定ETH數(shù)量?jī)稉Q ERC20
~swapTokensForExactETH:用ERC20兌換成指定數(shù)量的 ETH
~swapExactTokensForETH:用指定數(shù)量的ERC20兌換 ETH
~swapETHForExactTokens:用ETH兌換指定數(shù)量的 ERC20
~swapExactTokensForTokensSupportingFeeOnTransferTokens:指定數(shù)量的ERC20兌換 ERC20桑腮,支持轉(zhuǎn)賬時(shí)扣費(fèi)
~swapExactETHForTokensSupportingFeeOnTransferTokens:指定數(shù)量的ETH兌換 ERC20泉哈,支持轉(zhuǎn)賬時(shí)扣費(fèi)
~swapExactTokensForETHSupportingFeeOnTransferTokens:指定數(shù)量的ERC20兌換 ETH,支持轉(zhuǎn)賬時(shí)扣費(fèi)
代幣之間交易
原文鏈接(含可復(fù)制代碼):https://www.chainpip.com/dynamic/231