天天看點

去中心化交易系統開發

準備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/#/