亿书DPOS机制(未完)

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机制(未完))