【问题标题】:How do clients of a distributed blockchain know about consensus?分布式区块链的客户如何了解共识?
【发布时间】:2017-11-24 22:39:59
【问题描述】:

我编写了一个基本的区块链来探索和了解有关该技术的更多信息。我与他们的唯一真实世界经验是从客户端到服务器的一对一交易,作为交易记录。我现在对分布式区块链很感兴趣。

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

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

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

但是,这似乎是一种缓慢且最不慎重的方法。它确保在恰好位于网络的一部分中的节点上存在一定量的浪费工作,这些节点具有与普遍接受的解决方案大致相同的本地有效解决方案。

有更好的选择吗?

【问题讨论】:

    标签: blockchain


    【解决方案1】:

    有趣的问题。我想说区块链技术只解决概率共识。有了一定的信心,区块链网络就某些事情达成了一致。

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

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

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

    因此得出结论:由于并发写入的概率原因可能发生的区块链中的自然分支(由于解决难题而降低了概率)随着写入操作的继续发生,几乎 100% 的概率会收敛到单个分支,并且网络就单个分支达成共识。

    但是,这似乎是一种缓慢且最不慎重的方法。它 确保有一定数量的浪费工作 恰好位于网络的一部分中的节点具有本地 与普遍接受的解决方案大致相同的时间 解决方案。

    有更好的选择吗?

    不是我能想到的,如果系统中的所有对等点都“受到控制”并且您可以让它们遵循某种协议并且也许有指定的领导者来告诉写入顺序并确保共识,但这在去中心化的开放系统中是不可能的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-04-10
        • 2020-11-07
        • 1970-01-01
        • 2018-12-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-10
        相关资源
        最近更新 更多