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

    子链多合约部署

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

      近日,在Moac NUWA 1.0.8测试版中做了重大技术升级。此次升级引入了子链多合约概念,本文将会通过以下三个部分加以介绍:


      • 什么是子链,为什么要搭建子链

      • 子链的搭建

      • 部署基础业务合约

       

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

      版本号:1.0.8;

      网络:testnet

       1

      什么是子链

      1.1 子链的概念

      子链是相对于母链而言的,简单理解就是构建在底层母链基础上的区块链,其次,子链和母链有一定的区别,母链可以单独运行,而子链不能单独存在,必须通过主链提供的基础设施才能运行。


      我们可以拿阿里巴巴作为例子,如果说母链是阿里巴巴,那么子链就可比拟为淘宝、猫眼电影、阿里大药房等等;然而假如有一天,阿里巴巴倒闭了,那么阿里旗下的所有项目也会倒闭。


      1.2 为何MOAC要搭建子链


      首先,当前区块链底层技术对于Dapp非常不友好,主要表现在三个方面:


      1.对于区块链的小白来说,想要使用Dapp就需要学习钱包的使用,以及怎么买币,选择哪些交易所等等,这些流程非常繁琐,无形间增加了用户的学习成本,非常不利于公链的发展。

       

      2.维护DAPP运行的成本不公平DAPP的创建者不需要为系统的维护支付任何费用,而是把消耗系统资源的成本转嫁到了DAPP的用户身上;不利于构建DAPP的生态。

       

      3.对于一个区块链网络而言,其终极目标就是希望构建一个去中心化生态,而随着矿工数量激增,挖矿难度越来越高,矿工们的挖矿成本也日益增加。


       2

      子链搭建


      以下按照《视频教程 | 如何部署墨客子链》的步骤,使用版本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的参数如下:

       子链多合约部署


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

       3

      部署基础业务合约

      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进行检查。

      请登录之后再进行评论

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