准备Uniswap合约源码
https://download.csdn.net/download/yanning1314/12890716

核心合约

周边合约

前端代码

在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.csdn.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’ //修改成你的路由合约地址


演示地址 http://120.53.106.253:8001/#/

去中心化交易系统开发相关推荐

  1. 程序员如何切入区块链去中心化应用开发

    前段时间一个以太坊游戏应用:Fomo3D异常火爆,在短短的几天内就吸引了几万的以太币投入游戏,第一轮游戏一个"黑客"用了一个非常巧妙的利用以太坊规则成为了最终赢家,拿走了1万多以太 ...

  2. 以太坊去中心化_开发以太坊去中心化投票应用程序的指南

    以太坊去中心化 by Timothy Ko 蒂莫西·高(Timothy Ko) 开发以太坊去中心化投票应用程序的指南 (A guide to developing an Ethereum decent ...

  3. 基于区块链的去中心化交易系统

    引言: 类似淘宝,京东这些传统的交易平台,是以一个中心化的管理买卖双方交易过程的模式.马云曾说过:不要想着弯道超车,弯道是无法超车的,你直道都超不过,弯道更无法超过.只有走不同的道路,才有可能超过.而 ...

  4. 区块链12-区块链去中心化应用开发5-DAPP实战-使用truffle创建项目

    mkdir pet_shop cd pet_shoptruffle init 创建文件pet_shop,安装,用vscode打开 下载vscode高亮插件后,因为我用的solidity0.5.1,报错 ...

  5. 区块链13-区块链去中心化应用开发6-DAPP实战-宠物领养合约编写

    框架官网 https://www.trufflesuite.com/docs/truffle/getting-started/compiling-contracts 在vscode中[查看-终端]终端 ...

  6. 以太坊学习路线——(五)DApp开发:简易版去中心化微博

    这篇博客演示的基本操作系统环境是CentOS 7,参考书籍:以太坊开发实战--以太坊关键技术与案例分析 第十一章(吴寿鹤.冯翔.刘涛.周广益   著). 项目地址,包含该项目所需大部分文件,前端因为依 ...

  7. Cybex在日本:去中心化交易所5大核心功能解决安全问题

    点击上方 "蓝色字" 可关注我们! 记者:铅笔盒 True Global Ventures主办的Disruption in Financial Services Event于201 ...

  8. 比特币现金是否失去了去中心化

    最近看到了一些对于BCH和BCE的很有趣的看法,一些人认为BCH和BCE最大的差别就是去中心化程度的差别,一些人认为BCH为了提升支付属性而牺牲了部分中心化程度,而BCE发展的重点是保持去中心化程度而 ...

  9. 白皮书 | 以太坊 (Ethereum ):下一代智能合约和去中心化应用平台

    当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念.第一种就是比特币(bitcoin),一种去中心化的点对点的网上货币,在没有任何资产担保.内在价值或者中心发行 ...

最新文章

  1. 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)
  2. spark hbase
  3. neo4j与mysql数据库_Neo4j: 迁移MySQL的数据到Neo4j
  4. JAVA核心技术卷2:高级特征(原书第8版)
  5. Gartner:企业机构需重新定义网络安全领导者角色
  6. vs2012中编译时出现程序集所使用的版本高于所引用的版本
  7. 见过一个一个拉新地推没见过这么多一起推
  8. AJAX 必用的情况(待选........)
  9. 金蝶KIS 11.0专业版账套升级至WISE 13.1版本实施步骤
  10. 2021年危险化学品经营单位安全管理人员考试内容及危险化学品经营单位安全管理人员考试报名
  11. android auto凯迪拉克,凯迪拉克支持Apple CarPlay及Android Auto
  12. XZ_Swift 之HealthKit 获取手机计步统计
  13. html随机背景颜色,javascript实现随机生成DIV背景色
  14. [转载]创建、部署和调试 Apache Geronimo 应用程序
  15. CCF201809-1 卖菜(JAVA)
  16. 购买重疾险是不是都要先去体检?千万不要!
  17. 关于中台,你要想明白这几点(上)(转载)
  18. 2021年最新版Web前端学习路线图-前端小白入门必读-推荐
  19. 案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程。 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下:
  20. c语言自动售货机实验报告,c语言自动售货机实验报告(15页)-原创力文档

热门文章

  1. 上海到底是一座什么样的城市?
  2. Windows MongoDB 安装及配置
  3. golang float转string后去除末尾的0
  4. cad批量选择相同块_在CAD中怎样批量选择同类型的构件
  5. 大学计算机word图文混排,WORD图文混排教学设计
  6. Docker 安装可视化管理工具Portainer
  7. 物联网小课堂之NB-IoT黑科技——长连接方案x2
  8. python数据类型怎么打开_python数据类型详解
  9. appserver安装教程
  10. java容器系列一(java容器Collection概述)