共计 2320 个字符,预计需要花费 6 分钟才能阅读完成。
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…