Hashgrapgh的共识机制包括两个部分,Gossip about Gossip和Virtual Voting,以下将分别解释二者的工作流程与总体共识机制的工作流程,并说明Hashgraph的优点和存在的问题。
Gossip about Gossip
Hashgrapgh的核心通信协议是“八卦八卦协议”(Gossip about Gossip),灵感来自办公室八卦,这里的八卦指的是一段我知道但是另一个人不知道的信息,只要两个人之间八卦一下,在有限的时间内,所有的人都会知道该八卦的信息。
在Hashgraph中,每一个节点都在传播经过签名的新交易以及从临近节点接收到的交易信息。当某个节点收到包含新交易信息的数据后,会组合并可能添加自己所知道的交易成为一个新的事件(Event,类似于区块的概念,是一个包含有两个哈希指针的数据结构,并且可以包括0个或若干交易信息)传播出去,并且这个事件包含两个哈希,一个指向该节点上次最新的事件,另一个指向该节点所收到的另一个节点的最新事件,然后对整个事件加上时间戳并签名,整个循环不断进行直到所有节点都获得相同的信息。
如下图所示,当 Bob 随机找到了 Alice 八卦的时候,就会把自己当前所知道的一切都原原本本地告诉 Alice。然后 Alice 这里会出一个新事件(红点),这个新事件里除了加入新的交易事务的同时,还会加上两个指向父事件的 hash 值,一个指向自己的最新事件(深蓝),一个指向 Bob 和自己聊天时候最新的事件(天蓝)。
本质上八卦算法是一个带冗余的容错算法,更进一步,八卦是一个最终一致性算法或提供一致性算法的手段。虽然无法保证在某个时刻所有节点状态一致,但可以保证在最终某个时刻,所有节点一致对某个时间点前的所有历史达成一致。
Hashgraph的节点之间进行八卦的内容还包括节点间互相八卦的历史记录,于是每个节点都可以通过八卦维护一个哈希图,这样在节点计算共识投票的时候就可以发起虚拟投票,也就是计算其他节点在给定的哈希图中会怎么投票,从而不需要在网络上再做大量双向同步通信去进行真实的投票。用Hashgraph发明者的话来说就是:“Hashgraph具备投票算法的一切优点,然而避开了它的最大缺陷。”
由于Gossip协议迅速的收敛性(convergence propperty),每条新的信息能够以更快的方式到达每个节点,让每个节点都维护着所有节点跟其他节点的通信历史。