教你搭建去中心化交易所(原创)
Posted 锦~鹏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教你搭建去中心化交易所(原创)相关的知识,希望对你有一定的参考价值。
首先我们去github下载一个swap的前端。
uniswap前端地址
下载完成之后,去复制2份合约,一个是uniswap的工厂合约一个是路由合约
工厂合约
路由合约
复制下来之后我们来到remix编辑器 然后将工厂合约粘贴进去。
在这个红色的这里加一段代码方便读取initCode。
a bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(UniswapV2Pair).creationCode));
然后我们开始编译这个合约,注意编译的时候evm要选择istanbul然后勾选第二个。
编译完成之后然后开始部署,在部署的时候,构造函数哪里填写收取手续费的地址。
完成部署之后我们就可以开始部署路由合约了,在构造函数哪里填写工厂合约的地址和WETH的地址。
mainnet:'0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'
ropsten:'0xc778417E063141139Fce010982780140Aa0cD5Ab'
rinkeby:'0xc778417E063141139Fce010982780140Aa0cD5Ab'
goerli:'0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6'
kovan:'0xd0A1E359811322d97991E03f863a0C30C2cF029C'
如果不想用这上面的WETH地址也可以自己部署一个。
pragma solidity ^0.4.18;
contract WETH9 {
string public name = "Wrapped Ether";
string public symbol = "WETH";
uint8 public decimals = 18;
event Approval(address indexed src, address indexed guy, uint wad);
event Transfer(address indexed src, address indexed dst, uint wad);
event Deposit(address indexed dst, uint wad);
event Withdrawal(address indexed src, uint wad);
mapping (address => uint) public balanceOf;
mapping (address => mapping (address => uint)) public allowance;
function() public payable {
deposit();
}
function deposit() public payable {
balanceOf[msg.sender] += msg.value;
Deposit(msg.sender, msg.value);
}
function withdraw(uint wad) public {
require(balanceOf[msg.sender] >= wad);
balanceOf[msg.sender] -= wad;
msg.sender.transfer(wad);
Withdrawal(msg.sender, wad);
}
function totalSupply() public view returns (uint) {
return this.balance;
}
function approve(address guy, uint wad) public returns (bool) {
allowance[msg.sender][guy] = wad;
Approval(msg.sender, guy, wad);
return true;
}
function transfer(address dst, uint wad) public returns (bool) {
return transferFrom(msg.sender, dst, wad);
}
function transferFrom(address src, address dst, uint wad)
public
returns (bool)
{
require(balanceOf[src] >= wad);
if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {
require(allowance[src][msg.sender] >= wad);
allowance[src][msg.sender] -= wad;
}
balanceOf[src] -= wad;
balanceOf[dst] += wad;
Transfer(src, dst, wad);
return true;
}
}
这里我们简单的讲一下WETH合约
deposit()这个函数就是用来进行存款的(也可以说是用来兑换WETH的) 比如你像这个合约打款一个ETH,然后合约会给你的地址铸造一个WETH。
withdraw()这个函数是一个用来换取ETH的函数,比如你的地址上面有一个WETH,调用这个函数之后他会把你的一个WETH销毁,然后给你的地址返还一个ETH。
在部署路由合约之前还要注意很重要的一点那就是要替换initcode。调用工厂合约里面的INIT_CODE_PAIR_HASH()函数来读取initcode值。
复制之后来到路由合约这里将刚才读取的initcode的值粘贴进去。
编译之后开始部署 在构造函数那里填工厂的合约地址和WETH的合约地址。
完成这个之后我们开始部署前端,下载好前端之后我们开始替换前端代码。
1、interface-2.6.0\\node_modules@uniswap\\sdk\\dist\\constants.d.ts
export declare enum ChainId {
MAINNET = 1,
ROPSTEN = 3,
RINKEBY = 4,
GÖRLI = 5,
KOVAN = 42
}
export declare const FACTORY_ADDRESS = "0xE7824a766623AB61b55dB9Ff04CB9632f50D69Aa";
export declare const INIT_CODE_HASH = "0x44b0d405975fcf8284b36e843fceefe22d0ca22cedb0ad7ec35f8b7999946ef6";
替换完这个之后用npm或者是yarn进行安装
然后利用notepad++进行全局替换路由合约地址 工厂合约地址 和initcode。
替换完成之后用yarn start命令运行前端。
可以看见已经搭建完成。
如果要添加自己的代币可以通过修改tokenlist来实现,这里就不做过多的演示了。
以上是关于教你搭建去中心化交易所(原创)的主要内容,如果未能解决你的问题,请参考以下文章