Dapp链接:https://www.chainpip.com/dapp... 
部署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/onlin...

 记得抉择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 兑换指定数量的 ERC20l swapExactTokensForTokensSupportingFeeOnTransferTokens:指定数量的 ERC20 兑换 ERC20,反对转账时扣费l swapExactETHForTokensSupportingFeeOnTransferTokens:指定数量的 ETH 兑换 ERC20,反对转账时扣费l swapExactTokensForETHSupportingFeeOnTransferTokens:指定数量的 ERC20 兑换 ETH,反对转账时扣费

代币之间交易


  原文链接(含可复制代码):https://www.chainpip.com/dyna...