Blockchain 分布式区块链的客户如何知道共识?

Blockchain 分布式区块链的客户如何知道共识?,blockchain,Blockchain,我写了一个基本的区块链来探索和学习更多关于这项技术的知识。我对他们唯一的真实体验是从客户端到服务器的一对一事务,作为事务记录。我现在对分布式区块链感兴趣 以最简单、最理论的形式,共识是如何管理的?对等方如何知道在下一个块上开始编写事务?您必须知道整个池的>50%何时接受了最后写入的某个块。但是p2p系统本质上是无限的,你不能信任第三方来处理担保,那么这是如何实现的呢 编辑:我现在大致知道比特币是如何处理共识的: 共识决定了可接受的区块链。“最长有效链优先”的典型规则确保只接受一个变体。人们可以在

我写了一个基本的区块链来探索和学习更多关于这项技术的知识。我对他们唯一的真实体验是从客户端到服务器的一对一事务,作为事务记录。我现在对分布式区块链感兴趣

以最简单、最理论的形式,共识是如何管理的?对等方如何知道在下一个块上开始编写事务?您必须知道整个池的>50%何时接受了最后写入的某个块。但是p2p系统本质上是无限的,你不能信任第三方来处理担保,那么这是如何实现的呢

编辑:我现在大致知道比特币是如何处理共识的:

共识决定了可接受的区块链。“最长有效链优先”的典型规则确保只接受一个变体。人们可以在多次确认后接受区块链,通常6次就足以确保明确的赢家

然而,这似乎是一种缓慢且最不谨慎的方法。它确保在网络的某个部分中的节点上存在一定数量的浪费工作,而该网络的某个部分与普遍接受的解决方案几乎同时具有本地有效解决方案


有更好的选择吗?

有趣的问题。我认为区块链技术只能解决概率共识。带着一定的信心,区块链网络在某些方面达成了一致

将区块链视为一个分布式系统,我们可以说区块链的状态是分布式的:区块链作为一个整体保留,但存在许多本地副本的分布式副本。更有趣的是,操作是分布式的:写入或读取可以同时发生在不同的节点上。读取操作可以在区块链的本地副本上本地完成,但如果您的本地副本不是最新的,则此读取当然可能会过时,但是区块链网络中的节点总是有一个激励因素,使其本地副本保持最新,以便在必要时完成新交易

写操作是这里的棘手部分,区块链必须解决。由于写入以分布式方式同时发生,区块链必须确保避免重复支出等不一致,并以某种方式就当前状态达成共识。区块链实现这一点的方式是概率的,首先,他们通过添加要解决的“谜题”来增加写入链的成本,降低了不同分布式写入同时发生的概率,但它们仍然可以发生,但概率较低。此外,由于网络中的节点有保持其状态最新的动机,因此接收到泛洪写入操作的节点将对其进行验证,并将该操作纳入其链中。我认为,始终保持供应链最新的动力是关键,因为这确保了供应链将取得进展。也就是说,作者有一个明确的动机来保持其链的最新,因为它将与“最长链优先”原则竞争其他并发作者。对于非对抗性采矿者,还有一种动机,即中断当前的采矿,接受新的写入块并重新启动采矿过程,从而确保系统的活跃性

那么区块链依赖于概率共识,那么概率是多少?假设没有任何一大群敌对节点接管网络,则两个完全相等的分支同时并行增长的概率接近于0。极有可能一个分支比另一个分支长,并且被接受,网络就该分支达成一致意见,必须重新尝试较短分支中的写入操作。最大的担忧当然是那些敌对的大型矿业集团,他们可能会故意在区块链中创建分支,以执行双重支出攻击。。但只有当他们获得网络中近50%的计算能力时,这才有可能成功

综上所述:由于并发写入的概率原因(由于解谜而降低的概率),区块链中可能发生的自然分支将以几乎100%的概率收敛到单个分支,因为写入操作继续发生,并且网络在单个分支上达成共识

然而,这似乎是一种缓慢且最不谨慎的方法。信息技术 确保用户有一定数量的工作被浪费 恰好位于网络中具有本地 有效的解决方案与普遍接受的解决方案大致相同 解决方案

有更好的选择吗


我想不出,如果系统中的所有对等方都“处于控制之下”,并且您可以让他们遵循某种协议,也许可以指定一位负责人来告知写入顺序并确保达成共识,那么会有更多更有效的解决方案,但在分散的开放系统中,这是不可能的

在事先知道参与者的许可区块链环境中,客户可以获得共识的加密证明(例如,至少有2/3的参与者签署了共识)并对其进行验证。通常可以使用阈值签名来实现。 在公共区块链中,AFAIK,没有办法做到这一点,因为参与者的数量一直是未知的/变化的