文档介绍:一种用于区块链的拜占庭容错算法
张铮文
摘要 3
则𝑓就表示系统所容许的错误节点的最大数量。由于实际上全局账本仅由记账节点来维护,
因此系统中的普通节点不参与共识算法,但可以看到完整的共识过程。
参与共识的节点,需要维护一个状态表,用于记录当前的共识状态。一次共识从开始到结束
所使用的数据集合,称为视图。如果在当前视图内无法达成共识,则需要更换视图。我们为
每一个视图分配一个编号𝑣,编号从 0 开始,并逐渐递增,直到达成共识为止。
我们为每一个参与共识的节点分配一个编号,从 0 开始,最后一个节点的编号为𝑛 − 1。每
一轮共识都需要有一个节点来充当议长,其它节点则为议员。议长的编号𝑝由如下的算法来
决定:假设当前共识的区块高度为ℎ,则 𝑝 = (ℎ − 𝑣) 𝑚𝑜𝑑 𝑛,其中𝑝的取值范围为0 ≤ 𝑝 < 𝑛。
每一次共识产生一个区块,并附有至少𝑛 − 𝑓个记账节点的签名。一旦有新的区块产生,则
立即开始新一轮的共识,同时重置𝑣 = 0。
. 一般流程
假设系统要求每次产生区块的时间间隔为𝑡,则在一切正常的情况下,算法按照以下流程执
行:
1) 任意节点向全网广播交易数据,并附上发送者的签名;
2) 所有记账节点均独立监听全网的交易数据,并记录在内存;
〈 〈 〉 〉
3) 议长在经过时间𝑡后,发送 𝑃𝑒𝑟𝑝𝑎𝑟𝑒𝑅𝑒𝑞𝑢𝑒𝑠𝑡, ℎ, 𝑣, 𝑝, 𝑏𝑙𝑜𝑐𝑘, 𝑏𝑙𝑜𝑐𝑘 𝜎𝑝 ;
〈 〈 〉 〉
4) 议员𝑖在收到提案后,发送 𝑃𝑒𝑟𝑝𝑎𝑟𝑒𝑅𝑒𝑠𝑝𝑜𝑛𝑠𝑒, ℎ, 𝑣, 𝑖, 𝑏𝑙𝑜𝑐𝑘 𝜎𝑖 ;
〈 〉
5) 任意节点在收到至少𝑛 − 𝑓个 𝑏𝑙𝑜𝑐𝑘 𝜎𝑖 后,共识达成并发布完整的区块;
6) 任意节点在收到完整区块后,将包含的交易从内存中删除,并开始下一轮共识;
该算法要求参与共识的节点中,至少有𝑛 − 𝑓个节点具有相同的初始状态:即对于所有的节点𝑖,具有相同的区块高度ℎ和