请允许任何人澄清" Completely Asynchronous Agreement Protocol"中的第3步(见下文):
过程P:初始值xp。
r := 1
。(1, r, xp)
发送给所有流程。N - t
类型的(1, r, x)
条消息。如果超过N/2
条消息的值v
相同,则将消息(2, r, v, D)
发送给所有进程。否则将消息(2, r, ?)
发送给所有进程。N - t
的{{1}}条消息到达。
(2, r)
,则设置(2, r, v, D)
。xp := v
条D消息,请确定t
。v
或xp = 1
概率为1/2。0
并转到第1步。我理解这个协议如下。
在第一步,每个节点通知每个其他节点其状态。
在第二步,每个节点决定是否有"看到"足够的信息来确定价值,换句话说,它等待多数。如果多数具有相同的值,它就会开始广播这些信息,例如"我看到多数人认为r := r + 1
"。否则它会发出一条消息,表示它没有下定决心。
最后,在第三步中,我们检查是否有超过v
"决定性的"消息(如果不传递t
个节点的消息,将至少有一个"决定性的消息)。但我不明白为什么只有在收到一个 D-message时才设置t
。接收两个D消息落入3c,在这种情况下,我们将为v分配随机值。为什么?
为什么我们不能描述第三步:
xp := v
或xp = 1
的概率为1/2。0
条D消息,请确定t
。v
。答案 0 :(得分:0)
您链接的论文介绍了Ben-Or共识算法。它提供了两种版本,一种用于简单的概率共识,另一种用于拜占庭协议。您提供的伪代码复制了前者。
请注意,步骤 3(a)的含义可能会引起误解:
pspcoord<-spTransform(plotcoord, CRS('+proj=utm +zone=21'))
这并不意味着“恰好一个”,而是“至少一个”。可以从1998 algorithm's correctness proof推断出这一点,其中第三步略作改写:
If there is one D-message (2, r, v, D) then set xp := v