母子链架构不同于比特币、以太坊等单链系统,是基于墨客分片技术构建的多链系统。墨客上的项目都可以基于此架构来构建自己的应用系统(DAPP)。
本文在主链部署标准ERC20合约,通过跨链技术,将主链上的20通证和子链原生通证打通,实现项目方的应用逻辑。
环境:
墨客区块链版本:nuwa1.0.5.win.zip;(mainnet及testnet均使用该版本,本文在testnet进行)
操作系统:64位Windows 10家庭版。
辅助工具:Postman,请读者自行下载安装。
1.准备工作
1.1 启动本地vnode节点
本地vnode节点安装请参考《第三篇 墨客区块链(MOAC BlockChain) 节点安装教程》。
启动命令(mainnet运行时去掉--testnet):
C:\nuwa1.0.5.win\win\vnode>moac --testnet --rpc --rpccorsdomain "http://wallet.moac.io/"--pcapi="db,mc,net,chain3,personal,vnode,debug,scs"
1.2 部署ERC20标准合约
根据实际情况部署标准合约,请参考《第四篇 墨客区块链(MOAC BlockChain) 部署ERC-20合约》。
建议将标准erc20合约的小数点位数设置为18;
本文档测试中新部署了erc20合约,地址:0x0C855a5ED8D86e8F04CfF11b225E3DeD757f2F33。
1.3 启动三个本地出块SCS和一个monitor
三个出块SCS启动命令:
C:\nuwa1.0.5.win\win\scs>scsserver
一个monitor启动命令:
D:\nuwa1.0.5.win\win\scs>scsserver --rpc --rpcaddr 0.0.0.0 --rpcport 2345 --rpccorsdomain "*" --verbosity 4
启动后,给每个SCS id发送1moac,用于scs与vnode之间的通讯(gas费用)。
1.4 部署SCS矿池合约
在官方公布SCS矿池合约地址前,需要用户方自己部署该合约。
到官方:https://github.com/MOACChain/moac-core/releases,或者本博客资源下载SubChainProtocolBase.sol合约。
本文档测试中新部署了SubChainProtocolBase合约,地址:0xFe565703cd89514E977041ca8AD33bF090223791。
1.5 将三个scs注册到scs池子合约
仅将出块scs注册到池子,monitor不用注册。
2.部署子链控制合约
2.1 下载子链控制合约
从本博客资源下载SubChainBase_erc20Tansfer.sol合约。
2.2部署合约
该合约“import SubChainProtocolBase.sol”,为了在“http://wallet.moac.io/”方便地部署该合约,可以将这两个合约合并。
选择部署的合约,“Sub chain Base”,主要参数:
Proto:前面部署的SubChainProtocolBase.sol合约地址,参与子链的scs均为该合约注册的scs;
Vnode protocol base addr:Vnode proxy地址,有官方提供,测试网0xA0A595CD5dBE0eA08b93d67FA2c873795C5557Ee;
Erc addr:前面在主链部署的erc 20 合约地址;
Min:创建子链需要的最少scs数量;
Max:创建子链需要的最多scs数量;
Thousandth:scs千分比,这里填写1000;
Flush round:每次刷新间隔区块个数,比如100。
本文档测试中新部署了SubChainBase_erc20Tansfer合约。
2.3 创建子链
子链控制合约add fund,本例中发送5个moac,用于给scs发放奖励。
操作register open,以让scs过来注册;
scs注册数量合格后,操作register close,开始出块,子链正式建立。
2.4 注册monitor
Monitor:monitor scs id;
Link:monitor主机IP + “:” +monitor port;
3.部署子链业务逻辑
3.1 下载子链业务逻辑合约
从本博客资源下载DappBase.sol合约。
3.2部署合约
INITIAL AMOUNT OF MICROCHAIN DAPP TOKEN:子链coin初始值,也是在子链交易的coin总量,该值不能大于主链部署的erc20的数量(如果需要全部可以在子链交易,应该等于erc20数量)。
MicroChain Base Address :上面部署的SubChainBase_erc20Tansfer合约地址;
SCS Monitor Address:scs monitor所在的主机IP地址;
SCS Monitor Port:scs monitor启动时的端口。
至此,子链及业务逻辑部署全部完成。
如果全部过程无误,会在合约的“WATCH MICROCHAIN CONTRACT”显示子链业务逻辑合约图标,点击后显示如下:
子链业务逻辑合约地址就是子链控制合约地址;
在刷新周期到来后,合约里的moac会减少;
显示子链区块高度,以及monitor的address和port信息。
4.coin查询
按照以上步骤部署完成后,可以查询部署状态及coin数量。
本文查询使用postman,详细代码在下篇文档《第二十六篇 墨客区块链(MOAC BlockChain) 母子链架构-子链RPC接口调用》。
用以下命令启动scs monitor:
D:\nuwa1.0.5.win\win\scs>scsserver --rpcdebug --rpcaddr 0.0.0.0 --rpcport 2356 --rpccorsdomain "*" --verbosity 4
4.1查询子链nonce
结果是1,证明部署成功;如果是0,则没有成功。
4.2 查询coin的余额
先查询主账号的balance:
嗯嗯,有点好奇,主账号的coin,怎么是这个数?接着看下去,马上有解释!
再查合约隐藏账号。
到你的scs(或者monitor)的目录下,C:\nuwa1.0.5.win\win\scs35_monitor\_logs,有一个目录文件moac-scs-[time].log
打开后搜索“created contract address”,如果看到有一条后面跟着有效地址(一串000不是有效地址),如下图:
说明子链业务逻辑合约dapp.sol部署成功,隐含地址:79bceeb5f59a94dce14a19759acbaa31f060dc5b。
拿着这个地址到postman查询余额:
这个隐含地址里有10000个coin。
解释:
部署子链合约SubChainBase_erc20Tansfer的时候,里面定义的erc20合约地址的所有token数量都给了主账号,也就是说在后面部署子链业务逻辑合约的时候,主账号在子链的原生coin是全部数量,本文中是100000000;
在部署子链业务逻辑合约dapp的时候,给了子链coin一个有效初始值,该值表示可以在子链交易的最大coin数量,本文中是10000;
初始的时候,dapp中coin的balance,给了子链的隐含地址,这个地址是可以查询余额的,但是因为没有私钥,因此不能发起交易;同时从主账号的数量里减去了这么多的coin,因此主账号的余额变成了99990000。
如果需要全部可以在子链交易,coin数量应该等于erc20数量,而主账号的初始coin数量会变成0。