链化未来共识黄皮书(2)

链化未来公众号将分三篇文章来阐述链化未来的共识协议的理论设计,后续还会推出一系列文章来详细说明链化未来共识协议的工程实现,本文为链化未来共识协议理论设计的第二篇(第4章)。

4、架构

链化未来每一轮,分为如下几步完成

基于可验证延时函数的随机数层每个共识周期提供一个系统随机数。

节点利用随机数结合硬件指纹和代币,在每一轮共识开始,选出一定数目的Proposer和Voter。

由Proposer提议需要成块的消息,由Voter对选中的唯一提议消息相互发送确认。

节点对交易批进行执行,再利用上一个块随机数选出一定数量Voter,通过BA(binary agreement)协议相互同步对交易批的执行后状态。

节点对交易批和执行后状态独立打包成块。

4.1 随机数层

随机数层,为上层提供随机数源,比如共识委员会的选择,dapp 的随机源。基于 VDF 的随机数生成层,对于任何人都可以参与,同时任何人都可以验证随机数的正确性。但是考虑到 VDF 本身的复杂特性,特别是要防范专门的硬件设计厂商,所以需要对随机数的生成过程进行设计。

详细原理如下:

MAIN 委员会的成员 i 基于上个共识周期的随机数randi 进行 VDF 的计算,计算时间跟共识的周期相关,只要共识在持续进行,那么 VDF 就要持续计算。

VDF的计算结果将包含在共识最终形成的块中,所有人都可以对VDF的计算结果和其中包含的随机数进行验证。

每个委员会成员,都应该运行VDF的计算函数。Listener节点不需要运行VDF函数,但是需要验证VDF的计算结果。

本设计的主要目的,在于防止随机数生成过程中,有人拒绝提交,或者可以预测未来的随机数,进而对proposer和validator节点进行预测,进行攻击。同时基于VDF的随机数,也非常方便地可以应用在Dapp中,达到公平的目的。

4.2 身份层

每个自愿参与共识的节点都有一对密钥 (sk,pk) 作为身份标识。设备被选为共识成员的概率依赖以下三个评分的综合结果。

链上代币。所有公钥对应的资产在链上都可以查询到,所以持有代币的百分比作为 wcoin。有的节点可能持有大量代币,但是不愿参与共识,可以代理给其他可靠的硬件厂商对应账户,类似Dpos。或者持有大量代币的节点可能同时分散在多个账户,这不会影响到公平性,因为多个账户的综合被选中概率与一个账户相同(假设其他两个账户对应的硬件设备指标相同)。

硬件特性。根据自愿参与共识的设备硬件指纹信息可以得出硬件特性评分。该评分可能有多个维度,比如 CPU/网卡/硬盘特性,分别适合committee中不同的身份。该权重暂定为whardware。

声誉。根据节点账户对代币的持有寿命(块高度)、设备历史参与记录、成功提交区块的次数,系统自动计算出节点信誉。该权重为wreputation。

每个公钥对应一个权重 w = r1 ∗ wcoin + r2 ∗ whardware + r3 ∗ wreputation,其中r1, r2, r3 为系统常量,用来设置各个权重的比率。

4.3 共识层

共识的详细过程如下

                                                     Figure 1: 共识时序图

propose轮。节点基于上一个block,独立判断是否被选为Proposer或Voter。该轮保证消息确定性地由Proposer到全网大部分节点。

– Proposer在广播PROPOSE消息的同时为了加速传播,广播带交易hash的 ECHO。为了最小化带宽消耗,PROPOSE 消息被冗余编码后,分别传给多个节点。每个Proposer 只能广播一次,多次广播被视为恶意节点。在广播的propose消息中,应该包含VDF的计算结果。

– Voter等待TP ROP时间后,对收到PROPOSE消息校验格式,选择proof最小的广播相应ECHO消息。同时 Voter 需要对proposer发送VDF结果进行验证。

– 节点收到TH1个消息后,即使在未收到 PROPOSE 消息的情况下,也广播 ECHO 消息。

– 节点收到T H2 个ECHO后完成此轮,返回。

– 节点等待T IMEOUT 未收集足够数量ECHO后,判断超时,将交易批设置为空。


执行,所有节点对上一轮的结果执行,并基于原状态state1 计算输出状态的摘要state2。


BA 轮,全网基于上一个block和轮数,独立判断是否被选为Voter。该轮保证大部分节点对执行结果的摘要接受与否达成一致。

– Voter广播包含state2的ECHO消息。消息中同时包含VDF的计算结果和证明。

– 节点收到T H2个ECHO后,验证VDF的计算结果和证明,完成此轮。超时则成空提议,返回。

– 若上轮超时,则新开始一轮,重新判断是否为voter,基于CommonCoin决定是否提起包含state2还是空交易批的ECHO消息,然后广播。

– 节点收到TH2 个ECHO后完成此轮。否则继续利用CommonCoin判断下一轮的 ECHO 消息内容。

– BA中每一轮时间固定为TBar,节点判断超时后返回空。若超出特定BA轮数,则节点将状态回滚到state1,该轮包含空交易批。

成块

– 各个节点利用执行结果状态独立成块。同时,将VDF的计算结果和证明包含在块中。整个共识过程中,Listener会接收到跟Voter和Proposer同样的消息,所以除了传递消息外,Listener同样会校验、处理消息、成块。

具体算法描述如下:

节点每轮对消息的响应如下:


4.4 新节点加入

新节点需要经过如下几个步骤:

观察并接收网络正在传播的消息,确定块高度和共识的轮数,当前块共识结果。为了防止被恶意节点通过网络控制的方式攻击,新节点需要尽量从多个网络地址监听共识消息。

根据当前成块,向网络中其他节点拉取历史区块,并验证链的正确性。考虑到链的单向性,新节点可以保证历史区块的正确性。

新节点要同时对VDF的结果进行验证,假如有多条链同时存在,那么要选VDF累计比较多的链。

你可能感兴趣的:(链化未来共识黄皮书(2))