• 注册
  • 墨客科普 墨客科普 关注:32 内容:75

    详解MOAC子链

  • 查看作者
  • 打赏作者
  • 拉黑名单
    • 墨客科普
    • 大版主
      墨客战士

      MOAC子链是什么?

      子链指的是在母链的平台上面派生出来的,具有独立功能的区块链。但子链是不能单独存在的,必须通过母链提供基础设施才能运行。MOAC子链兼具低成本、去中心化、安全、高效等特点。

      MOAC被称为“众链之母”,它的核心价值是从技术上面解决了区块链应用所需要的处理速度、状态的存储、外部环境,包括其他子链和外部区块链,甚至是其他网络之间的跨链的技术问题。我们可以把子链看成是一个服务service,这样一个子链可以为其他子链进行服务,在这个基础上,MOAC上面的众多子链相当于整体合在一起,用户可以使用这些多个区块链来构建一个功能强大的应用。

      MOAC平台使用子链将任务分别处理,并为每个单独的智能合约提供从业务逻辑中分离出来的区块链功能。 通过为每个智能合约提供单独的子链,使得智能合约能够自定义共识机制,在潜在业务逻辑下有更广泛的使用场景。

      开发人员可以自由选择最适合其业务场景的共识机制,并自主决定分配给特定智能合约的子链节点数量。 智能合约的所有状态都保存在本地子链中,并可根据需要将数据写入主链。 

      详解MOAC子链

      子链不能单独存在,必须通过主链提供的基础设施才能运行,并且免费获得主链的全部用户。不同于侧链与主链的平行运行,MOAC子链与主链母子同心共体,单独攻击子链毫无作用,而MOAC主链使用上万节点并经过长时间检验的POW共识机制,安全性稳如泰山。MOAC子链在免费获得主链全部用户的同时,其安全性也受主链保护。子链通常只需要选取少量的节点,比如一百个节点。按统计来讲,它们所能达到的安全性跟选取所有的上万个节点的处理是一样的,可以通过子链选取少量的节点来实现,通过增加并行度,这个并行度是一百、一千甚至上万,取决于所能提供服务的节点数的多少。子链的技术路径不仅解决了侧链的安全性问题,而且提供了一系列强大的功能。


      为什么要使用MOAC子链?


      首先,子链实现了区块链系统的可扩展性,提供了一种解决区块链分片的切实可行的方案在单一区块链上解决分片是一个非常困难的问题,而MOAC区块链采用子链完美地实现了分片。

      对于一个智能合约来讲,我们把它部署为一个子链,只在子链内部保存合约的状态,不需要把合约应用特定的信息存储在主链上,大大缓解主链的存储压力,同时,通过子链实现高并行性的处理,极大地缓解了主链的处理瓶颈。

      详解MOAC子链

      其次,子链提供了巨大的灵活性。

      MOAC子链自带激励机制,其节点从MOAC公共矿池随机选取,众多企业在免除部署和维护节点巨大成本的同时,有效地保障了区块链的安全性。项目方仅需提供少量维护费用,即可轻松实现用户上链、商品上链、机构上链、流程上链等。

      一是共识方式的灵活性。单一区块链的共识方式在部署完成后就是固定的,例如比特币的共识方式是POW,在此基础上部署应用(DAPP)时,就不能选择其他的共识方式。

      如果新的应用场景想用快速的POS共识方式,因底层公链的共识方式已经固定,这个问题是无法解决的。但是MOAC区块链的子链功能可以根据DAPP的需求选择不同的共识模块,除系统当前提供的基本共识方式(POW、POS、PBFT、IPFS、DPOS)以外,还支持自定义编写新的共识方式。

      另外,子链上面出块速度不受公链的限制,是独立存在的,可以自定义出块速度,10秒或者几分钟甚至一个小时都是可以的。

      这样做的优势在于:

      1、部署子链的复杂度大大降低,可以直接采用现有的共识方式或者只需要编写子链的共识以及执行模块。

      2、可以快速灵活的部署子链,从参与系统的众多SCS节点池中选取一定数量的节点,免去自己维护共识节点的麻烦。

      3、普通用户的SCS节点可以很方便的参与共识并获得收益,实现共赢。

      二是费用的灵活性。子链在部署时可以根据应用场景的不同,在调用子链的功能时,不再收取手续费,大大降低了用户使用DAPP的门槛,使得海量的用户可以方便快捷地使用DAPP,体验区块链技术带来的改变,而不是像现在的区块链应用只能局限于加密货币的发烧友。

      详解MOAC子链

      再次,轻松跨链,实现万物互联。MOAC区块链的子链功能可以实现MOAC链与其他区块链之间的跨链交易,例如MOAC与以太坊之间,MOAC与比特币之间;以及在更广泛意义上的,实现区块链与其他网络之间的通讯,例如MOAC区块链和IPFS去中心化的文件存储网络的跨链也可轻松实现。

      此外,子链服务能够提供强大的功能,构建复杂的DAPP。子链不仅仅可以作为一个DAPP的支撑平台,还可以部署成为一个公共的服务,为其他的子链或者DAPP提供特定的服务。

      这些服务可以是去中心化的文件存储、完全随机的随机数生成器、专业处理功能比如为AI服务的深度学习等。在多样的子链服务支撑下,可以构建功能强大的DAPP,或者是去中心化的云服务等。这样的革命性的应用模式将撼动现有的云运营方式,必将带来深远的影响。


      如何部署MOAC子链?

      1、美女小姐姐珍妮,用三小段视频详细给大家讲解如何部署墨客子链,快来看视频吧~

      2、子链多合约部署教程

      注:测试环境:64位Windows 10 中文版;

      版本号:1.0.8;

      网络:testnet

      按照以上视频教程,使用版本1.0.8搭建子链。

      部署子链矿池SubChainProtocolBase.sol;

      部署三个scs,并注册到子链矿池;

      部署Vnode矿池VnodeProtocolBase.sol并将本机vnode节点注册到矿池;

      部署erc20合约erc20.sol;

      部署子链合约SubChainBase.sol;

      此处请注意,部署SubChainBase.sol的时候,对参与子链的SCS个数及刷新周期有要求,在合约里这么规定的:

      //限定条件在此处

      function SubChainBase(address proto, address vnodeProtocolBaseAddr, address ercAddr,  uint ercRate, uint min, uint max, uint thousandth, uint flushRound) public {

              require(min == 1 || min == 3 || min == 5 || min == 7);                 //最小scs数量

              require(max == 11 || max == 21 || max == 31 || max == 51 || max == 99);//最大scs数量,与最小数量对应

              require(flushRound >= 40  && flushRound <= 500);                       //刷新周期


      本文实验实际部署SubChainBase.sol的参数如下:

       详解MOAC子链


      部署scs开始出块,加入scs monitor并同步到最新,子链即部署成功。


      部署基础业务合约

      DAPP智能合约也通过主链的sendTransaction发送交易到 proxy vnode 的方式进行部署。

      参数:

      to: 子链控制合约subchainbase的地址

      gas: 不需要消耗gas费用,传值:0

      shardingflag:表示操作子链,传值:0x3,请注意,多合约版本部署任何合约shardingflag都为0x3

      via: 对应proxy vnode的收益地址

      在子链上部署多合约基础合约 dappbase.sol, 部署示例:

      chain3 = require('chain3')

      solc = require('solc')

      chain3 = new chain3();

      chain3.setProvider(new chain3.providers.HttpProvider('http://localhost:8545'));

      solfile = 'deorder.sol';

      contract = fs.readFileSync(solfile, 'utf8');

      output = solc.compile(contract, 1);

      abi = output.contracts[':DeOrder'].interface;

      bin = output.contracts[':DeOrder'].bytecode;

      subchainaddr = '0x1195cd9769692a69220312e95192e0dcb6a4ec09';

      via = '0xf103bc1c054babcecd13e7ac1cf34f029647b08c';

      chain3.personal.unlockAccount(chain3.mc.accounts[0], '123456');

      chain3.mc.sendTransaction({from: chain3.mc.accounts[0], value:0, to: subchainaddr, gas:0, shardingFlag: "0x3", data: '0x' + bin, nonce: 0, via: via, });

      本文使用http://wallet.moac.io/deploy-contract钱包工具部署

      验证:

      合约部署成功后,Nonce值应该是1,可调用monitor的rpc接口ScsRPCMethod.GetNonce进行检查。



      MOAC开发者文档:(复制链接到浏览器打开)

      https://moacdocs-chn.readthedocs.io/zh_CN/latest/index.html

      请登录之后再进行评论

      登录