• 注册
  • 开发教程 开发教程 关注:23 内容:62

    墨客区块链母子链架构-如何使用子链原生通证(上篇)

  • 查看作者
  • 打赏作者
    • 开发教程
    • 大版主
      墨客战士

      母子链架构不同于比特币、以太坊等单链系统,是基于墨客分片技术构建的多链系统。墨客上的项目都可以基于此架构来构建自己的应用系统(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。

      请登录之后再进行评论

      登录
    • 做任务
    • 实时动态
    • 偏好设置
    • 帖子间隔 侧栏位置: