在我的上一篇文章跟我一起阅读并修复某知名DEX交易所源码(4:部署工程,源码分析)
中我们 使用工程中自带的2_deploy_mdxswap.js成功执行了布署,但在输出提示中,我们并没有看到我们期望的pair ,token,factroy,router等核心合约的地址,所以实际上,我们的部署是没有任何用处的,根本没有完成我们布署完整DEX合约的目的,在本章中我们将,按照一个真正DEX的目标完成所有合约的部署。从业务角度讲,一个DEX至少要有:
1:标准的ERC20TOKEN。
2:一个生成LP合约的工厂。
3:一个描述LP的合约。
4:交换时使用的ROUTER.
5:如有必要,还需要一个可以代理业务(穿透)的RROXY合约。
6:如有必要,一个管理所有合约的ADMIN合约。
打开工程目录,我们可以找到在MDEX中,对应的TOKEN合约MDXTOKENHECO.SOL。如下 图
生成LP的的合约:MdexFactory
一个描述LP的合约:MdexPair
交换时使用的ROUTER:MdexRouter
加入相应的代码:
const MdxToken = artifacts.require("MdxToken");
const CoinChef = artifacts.require("CoinChef");
const MdxConfig = require('../config/config');
const MdexFactory = artifacts.require("MdexFactory");
const MdexPair = artifacts.require("MdexPair");
const MdexRouter = artifacts.require("MdexRouter");
module.exports = function (deployer) {
deployer.deploy(MdexFactory, MdxConfig.mdxswap.dev_address);
deployer.deploy(MdexPair);
MdexFactory.deployed().then((instance)=>{
deployer.deploy(MdexRouter,instance.address , MdxConfig.mdxswap.WHT_address);
}
);
deployer.deploy(MdxToken).then(function() {
return deployer.deploy(
CoinChef,
MdxToken.address,
//MdxConfig.mdxswap.dev_address,
//MdxConfig.mdxswap.mdx_perblock,
MdxConfig.mdxswap.start_block
);
});
};
在布署过程中需要MdexFactory的布署地址做为MdexRouter的参数,还需要MdxConfig.mdxswap.WHT_address,代码如下:
const mdxswap = {
dev_address : "0xef07bf6c341079e4cb1c32237165be8bef97dee7",
mdx_perblock : "500000000",
start_block : "7785700",
WHT_address : "0xef07bf6c341079e4cb1c32237165be8bef97dee7",
}
module.exports = {
mdxswap
}
注意此处的地址是我随意填的,在真正上线的时候,应当填上WHT的布署地址。
此时在命令行中输入truffle migrate -f 1,强制从1开始部署。输出结果如下图:
Starting migrations...
======================
> Network name: 'development'
> Network id: 5777
> Block gas limit: 6721975 (0x6691b7)
1_initial_migration.js
======================
Replacing 'Migrations'
----------------------
> transaction hash: 0x4ff70237cab3bdb81e120ac2b32bed8b37a83cc443df69cbd071e2aec0d9c747
> Blocks: 0 Seconds: 0
> contract address: 0x27C32A4db2c921BEE169bb7686b5C3F923E0D1d2
> block number: 1040
> block timestamp: 1649824366
> account: 0xEF07Bf6C341079e4cB1c32237165bE8bEF97DEE7
> balance: 98.634334612688071691
> gas used: 155006 (0x25d7e)
> gas price: 2.500000008 gwei
> value sent: 0 ETH
> total cost: 0.000387515001240048 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.000387515001240048 ETH
2_deploy_mdxswap.js
===================
Replacing 'MdexFactory'
-----------------------
Replacing 'MdexRouter'
----------------------
> transaction hash: 0xfed468f78c9a7f19d5cd0be93ffaf52c80fddbeaae8b19d706c4ccf73647a739
⠋ Blocks: 0 Seconds: 0 > transaction hash: 0xebbd2cd92c0b823583517ba50b63fcc10f1649eeae64965fc81a81f715e4da2f
> Blocks: 0 Seconds: 0
> contract address: 0xbd2183Fd4832d5C6F5D7ecB4c02A506f95eDA1b8
> block number: 1042
> block timestamp: 1649824369
> account: 0xEF07Bf6C341079e4cB1c32237165bE8bEF97DEE7
> balance: 98.613995852619307688
> gas used: 4409878 (0x434a16)
> gas price: 2.500000008 gwei
> value sent: 0 ETH
> total cost: 0.011024695035279024 ETH
> Blocks: 0 Seconds: 0
> contract address: 0x1e7BD4BC65aD9F8e3b7CCE7130D83FFb52e785cc
> block number: 1043
> block timestamp: 1649824369
> account: 0xEF07Bf6C341079e4cB1c32237165bE8bEF97DEE7
> balance: 98.613995852619307688
> gas used: 3679971 (0x3826e3)
> gas price: 2.500000009 gwei
> value sent: 0 ETH
> total cost: 0.009199927533119739 ETH
⠙ Blocks: 0 Seconds: 0
Replacing 'MdexPair'
--------------------
> transaction hash: 0xd4301bc991f9b3207551edfd6674d07592edf18ffcd10108d7dbaff7bb70211d
> Blocks: 0 Seconds: 0
> contract address: 0x126bE0AA2FEfa283bb067297996AFf21CCc84376
> block number: 1044
> block timestamp: 1649824369
> account: 0xEF07Bf6C341079e4cB1c32237165bE8bEF97DEE7
> balance: 98.608268890096399838
> gas used: 2290785 (0x22f461)
> gas price: 2.50000001 gwei
> value sent: 0 ETH
> total cost: 0.00572696252290785 ETH
Replacing 'MdxToken'
--------------------
⠸ Blocks: 0 Seconds: 0 > transaction hash: 0x9ef749002b0373e02e1911230c83f935eeea9224a2301bcadde828d89fccca43
> Blocks: 0 Seconds: 0
> contract address: 0x503A16f419dB0dd505D6fEB7Df83D0DB2B1F2A89
> block number: 1045
> block timestamp: 1649824369
> account: 0xEF07Bf6C341079e4cB1c32237165bE8bEF97DEE7
> balance: 98.603299985076524218
> gas used: 1987562 (0x1e53ea)
> gas price: 2.50000001 gwei
> value sent: 0 ETH
> total cost: 0.00496890501987562 ETH
Replacing 'CoinChef'
--------------------
⠼ Blocks: 0 Seconds: 0 > transaction hash: 0xd3ab11dd837e6fb8d987bb5fce04b56b18885f1d0f74b38b4d035e55210ca2ba
> Blocks: 0 Seconds: 0
> contract address: 0x749491127FdbF5F16E9279f6F58547382e3401f1
> block number: 1046
> block timestamp: 1649824369
> account: 0xEF07Bf6C341079e4cB1c32237165bE8bEF97DEE7
> balance: 98.596628597549838668
> gas used: 2668555 (0x28b80b)
> gas price: 2.50000001 gwei
> value sent: 0 ETH
> total cost: 0.00667138752668555 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.037591877637867783 ETH
Summary
=======
> Total deployments: 6
> Final cost: 0.037979392639107831 ETH
所有6个合约已经成功部署。
5:如有必要,还需要一个可以代理业务(穿透)的RROXY合约。
6:如有必要,一个管理所有合约的ADMIN合约
这两种类型的合约,在MDEX源码里并无体现。
到此,MDEX的源码已经在本地布署完成,本系列文章也将告一段落。在我的下一系列(solidity教程)使用solidity与web3创作一个在线小游戏之一:proxy合约,call, delegatecall与callcode_lixiaodog的博客-CSDN博客中,我们实践将第5,6种类型的合约,并将完成一个运行在EVM上的娱乐小游戏,敬请期待。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)