PBFT共识算法与双花

PBFT consensus algorithm and double spending

我想弄清楚PBFT共识算法是如何处理双花问题的。我读了很多文献,但似乎找不到答案

pbft 是 Barbara Liskov 和 Miguel Castro 在 1999 年为了防止恶意攻击作为恶意攻击和 软件错误可能导致故障节点表现出拜占庭(即任意)行为。与之前仅在同步系统上工作的 bft 算法相比,pBFT 旨在在异步系统中高效工作。

here 是研究论文,指出

Practical algorithm for state machine replication that tolerates Byzantine faults. The algorithm offers both liveness and safety provided at most ⌊n-1 / 3⌋ out of a total of replicas are simultaneously faulty. This means that clients eventually receive replies to their requests and those replies are correct according to linearizability. The algorithm works in asynchronous systems like the Internet and it incorporates important optimizations that enable it to perform efficiently

双重支出是数字或电子现金方案中的一个潜在缺陷,在这种方案中,同一个数字代币可以被多次使用。与实物现金不同,数字代币由可以复制或伪造的数字文件组成。

双花攻击是一种针对加密货币的潜在攻击,已经发生在多种加密货币上,例如由于 51% 的攻击。

但是使用共识算法和区块链可以避免这个问题

如果两个交易试图花费相同的代币,每个节点将认为它看到的第一个交易有效,而另一个无效。一旦 节点不同意,没有办法确定真正的余额,因为每个节点的观察被认为是同样有效的,使节点恢复同步的一种方法是使用共识算法和区块链,这个系统中的交易在技术上从来都不是 "final"由于冲突的区块链总是会超过当前的规范链,但是由于区块是建立在交易之上的,因此越来越多的 unlikely/costly 另一个链超越它,从而防止双重支出问题。

PBFT 的第一步是让 2f + 1 个节点同意以相同的顺序执行可用交易。这是通过通过分配序列号的主节点路由所有事务来完成的。所有以相同顺序执行交易的节点都将拒绝第二次支出。由于最多 f 个节点可能出现故障,这意味着至少有 2f + 1 - f = f + 1 个节点将接受第一个支出并拒绝第二个支出。当客户端获悉 f + 1 个节点已接受第一笔支出时,可以确定这是共识,因为这些节点中至少有一个是 non-faulty.