去中心化交易系统开发
准备Uniswap合约源码
https://download.****.net/download/yanning1314/12890659
核心合约
周边合约
前端代码
在Uniswap的核心代码中,主要包含3个合约:工厂合约,配对合约,ERC20合约.其中配对合约继承了ERC20合约,我们可以把它们看作一个合约.工厂合约通过create2方法部署配对合约,所以在部署合约时只需要部署工厂合约.
周边合约中包括一些示例代码,例如价格预言机,闪电交换,其中最重要的是路由合约.在周边合约的代码库中,包含两个路由合约:UnsiwapV2Router01,UnsiwapV2Router02.工厂合约和配对合约需要通过路由合约调用才能更好的完成交易所的全部功能,所以我们还要部署路由合约
两个合约大部分相同,有小部分不同,如果将两个合约的差异化合并成一个合约,部署的时候将会出现out of gas,所以才被分成了两个合约.常用功能两个合约中都包括,所以我们部署其中任意一个路由合约都可以
graph TD
A(ERC20合约)
B(配对合约)
C(工厂合约)
D(路由合约)
A–>|继承|B
B–>|引用|C
D–>|调用|C
从浏览器中下载合约源码
如果你对合约代码并不熟悉,也可以跳过上面这部分,接下来我们将从以太坊浏览器中直接拷贝线上版合约源码
工厂合约
路由合约01[可选]
路由合约02
部署合约
准备部署账户
Uniswap的路由合约部署在以太坊的主网和Ropsten,Rinkeby,Goerli,Kovan几个测试网的合约地址都是相同的,这样可以使Uniswap的前端不管切换到任何一个网络,路由地址都不会变.要想实现这个相同地址的部署,我们需要准备一个全新的账户用来部署合约.全新的账户指的是在部署合约之前的nonce值为0.因为合约的地址是根据你的账户地址和nonce值计算出来的,所以在不同网络中,如果nonce值相同,部署出的合约地址也相同.
获取测试币方法
Test Ether Faucet
MateMask 钱包登录,首次进入的时间,可以选择创建新的钱包,或者通过种子导入已有的钱包(这里不再具体介绍)
切换网络目标为我们期望的Ropsten 测试网络,此时会发现我们账户的ETH balance 为0,即使你在 Ganache或者testRpc曾经拥有很多的资产。
切换到目标账户,点击 存入 ,选择测试水管的通道获取 ETH
此时会自动进入 https://faucet.metamask.io/
点击 request 1 ether from faucet,如果网络流畅的话,那么你就会发现你的资产账户已经多了一笔收入。当然,一般情况下,网络都不是很流畅,所以你要有耐心多尝试几次。
耐心的等待一段时间,你的资产就会到账,虽然少了一点,但是已经足够我们发布合约以及测试了。当然,如果不够用的话,你可以多尝试几次。
Ropsten Ethereum Faucet
进入 https://faucet.ropsten.be/
输入你的账户地址,点击 Send me test Ether 即可
准备WETH合约地址
在部署路由合约时,构造函数中需要填入工厂合约的地址和WETH合约的地址,由于WETH合约的地址在主网和测试网的地址都不相同,所以需要找到每个网络中WETH合约的地址.
WETH合约用于将Eth交换为erc20的Eth,由于Eth不是erc20的token,所以我们必须使用WETH作为交换媒介
{
mainnet:‘0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2’,
ropsten:‘0xc778417E063141139Fce010982780140Aa0cD5Ab’,
rinkeby:‘0xc778417E063141139Fce010982780140Aa0cD5Ab’,
goerli:‘0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6’,
kovan:‘0xd0A1E359811322d97991E03f863a0C30C2cF029C’
}
使用remix部署合约
将工厂合约和路由合约的线上版本导入到remix中,在编译合约的选项中,EVM VERSION选择istanbul,COMPILER CONFIGURATION中选择Enable optimization
compile.png
部署顺序和构造函数
部署工厂合约
构造函数的参数是一个自己常用的账户地址
部署路由合约01 [可选], 02
构造函数的参数1是工厂合约的地址
参数2 是当前网络中WETH合约的地址
部署Uniswap前端
https://download.****.net/download/yanning1314/12890659
$ cd uniswap-interface
$ yarn
安装完成后,可以先测试运行一下,在uniswap-interface目录运行命令
$ yarn start
如果运行成功,将会打开一个浏览器,同时打开Uniswap的前端界面
修改路由地址
在Uniswap的前端中以常量的形式定义了Uniswap的路由地址,我们只需要修改路由地址就可以让前端链接到你的路由合约中
修改文件: 项目目录/uniswap-interface/src/constants/index.ts 第6行
import { AbstractConnector } from ‘@web3-react/abstract-connector’
import { ChainId, JSBI, Percent, Token, WETH } from ‘@uniswap/sdk’
import { fortmatic, injected, portis, walletconnect, walletlink } from ‘…/connectors’
export const ROUTER_ADDRESS = ‘0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D’ //修改成你的路由合约地址
如需帮助请联系253319066