美文网首页
亿书DPOS机制(未完)

亿书DPOS机制(未完)

作者: kindol | 来源:发表于2018-09-24 23:31 被阅读0次

    DPOS机制

    DPOS机制是通过资产占比(股权)来投票,更多的加入了社区人的力量,人们为了自身利益的最大化会投票选择相对可靠的节点,相比更加安全和去中心化。

    机制流程

    1. 注册受托人,并接受投票

      用户注册为受托人;接受投票(得票数排行前101位);

    2. 维持循环,调整受托人

      块周期:也称为时段周期(Slot),每个块需要10秒,为一个时段(Slot);

      受托人周期:或叫循环周期(Round),每101个区块为一个循环周期(Round)。这些块均由101个代表随机生成,每个代表生成1个块。一个完整循环周期大概需要1010秒(101x10),约16分钟;每个周期结束,前101名的代表都要重新调整一次;

      奖励周期:根据区块链高度,设置里程碑时间(Milestone),在某个时间点调整区块奖励。

      上述循环,块周期最小(10秒钟),受托人周期其次(16分钟),奖励周期最大(347天)。

    3. 循环产生新区块,广播

    注册受托人

    注册受托人必须使用客户端软件(钱包),因此这项功能需要与节点进行交互,也就是说客户端要调用节点Api。管理受托人的模块是 modules/delegates.js

    该模块提供的API:
    "put /": "addDelegate"
    
    最终API信息:
    put /api/delegates
    

    modules/delegates.js模块的addDelegate()方法。该方法与注册用户别名地址等功能性交易没有区别,注册受托人也是一种交易,类型为“DELEGATE”(受托人)

    投票

    亿书中,有一种交易是“VOTE”,任何普通用户都有投票权利,所以放在帐号管理模块,即“modules/accounts.js”文件里

    块(时段)周期(Slots)

    1. 时间设置

      比特币的块周期为10 min,由工作量证明机制来智能控制,而亿书的块周期为10 s,仅仅是时间上的设置而已,时间处理统一使用UTC标准时间,创世时间beginEpochTime()和getEpochTime(time)两个私有方法定义了首尾两个时间点,其他的方法都是基于这两个方法计算出来的时间段,所以不会出现时间上不统一的错误,源码在helpers/slots.js里。

    2. 编码风险

      getEpochTime(time)方法上,new Date()是直接使用系统时间的,可人为改变,可能导致出现分叉行为

      function getEpochTime(time) {
          if (time === undefined) {
            // 16行
            time = (new Date()).getTime();
          }
          var d = beginEpochTime();
          var t = d.getTime();
          return Math.floor((time - t) / 1000);
      }
      

    受托人(循环)周期(Round)

    为了安全,亿书规定受托人每轮都要变更,确保那些不稳定或者做坏事的节点被及时剔除出去。另外,尽管系统会随机找寻受托人产生新块,但是在一个轮次内,每个受托人都有机会产生一个新区块(并获得奖励)并广播,这一点与比特币每个节点都要通过工作量证明机制(PoW)竞争获得广播权相比,要简化很多。

    奖励周期(Milestones)——未

    image

    相关文章

      网友评论

          本文标题:亿书DPOS机制(未完)

          本文链接:https://www.haomeiwen.com/subject/ritkoftx.html