子链要点

概述

子链是在母链之上的独立的区块链系统,子链中的每个节点称为scs,scs的通讯通过母链,并定期向母链进行数据背书。子链上可以单独跑业务逻辑,母链无需知道。

母链上可以跑多条子链,墨客采用分片技术,随机将scs分配给不同的子链。

子链需要依赖于母链来运行,因此,运行一条子链需要M个母链节点(vnode)和N个子链节点(scs)。

普通子链节点scs可以称作子链矿工,其主要负责子链的出块,是维持一条子链稳定安全运行的根本。

子链节点下的母链节点,需要选取一部分注册成vnode代理的节点,vnode代理节点的作用是用于维护子链稳定运行,vnode代理节点同样有一个代理矿工池

部署子链控制合约时需要指定以上两个池子的地址。

子链合约部署完后,即可调用registeropen来召唤池子里的scs注册;当数量达到预期后,就可以调用registerclose来初始化子链区块,让子链开始运行。

子链需要每隔一段时间发起flush操作,将关键状态写入母链进行背书。除此之外,flush还将完成节点收益分配和有币区块链的母子链充提操作。

可以调用子链控制合约里的registerasmonitor来将一个子链节点注册成一个侦听节点。侦听节点只负责信息查询,不参与普通子链节点的服务,适合dapp用户部署来监控子链运行状态。

如果普通子链节点状态不稳定或弄虚作假,在flush的时候,有几率被没收押金,强制退出这条子链的服务。这时,可以调用子链控制合约的registeradd方法,将scs池子里的其他scs作为备用节点来为这条子链服务。

部署子链方可以调用子链控制合约的close方法关闭这条子链。此时会进入清算状态,待所有子链收益结清后,即关闭子链。请注意,子链业务逻辑清算不包含。

子链节点本身可以调用子链控制合约的withdraw方法来结束为某一子链服务,并得到返还的押金。

子链中的MOAC押金和消耗

为了使子链安全稳定的运行,MOAC引入的押金机制,主要体现在以下几个方面:

1、每个子链节点在第一次启动后,将会有一个唯一的墨客钱包地址,在部署子链前,需要在向这个地址打入1个MOAC作为运行费用;

2、每个子链节点注册进入子链矿工池时,需要向矿工池缴纳一定的押金,最小值由子链控制合约设置,最大值不限。子链节点每被选中一次,将会扣除一定数额的押金,当押金被扣完后,该节点将不会再参与新的子链,退出子链时,可以调用方法取回押金;

3、当一个子链节点注册成一个监听节点时,需要缴纳一定的押金;当退出子链时可以取回押金;

4、押金一般不会扣除,但在flush时,如果有企图作弊的节点,将会按照规则踢出子链,并扣除押金,不再返还;

子链中的MOAC消耗:

首先,调用子链方法不会消耗任何gas,但是,dapp运营方需要向子链控制合约地址打入一定量的MOAC维持子链运行,这部分MOAC将会消耗在给子链矿工费用和主链充提gas返还上。

子链部署的注意点

1、子链scs的vnode需要互相addPeer以保证通讯畅通。同时,这些vnode建议尽量add外面的节点以保证主链高度一致。

2、子链scs的时钟请同步互联网标准时间。