我在从事分布式系统相关工作长达五年的过程里头, 是越来越感觉到共识验证这个事儿是被严重低估了。它压根就不是什么玄学性的东西,说白一点呢, 其实就是让一千个相互之间完全不认识的节点同时做出点头的这个动作, 意思就是说这笔账是没有问题的。
共识验证靠什么撑着
我当初的想法是认为共识机制基本上就等于投票活动并且需要达到多数意见才能通过, 可是实际情况却完全不像我想象的那样简单。

在基于工作证明的体系里是靠投入巨大的算力来进行硬性计算, 哪一位参与者能够最先解计算出那个哈希值, 那他就获得了记账的权利;而在基于权益证明的体系中则是看持有者抵押了多少数量的代币, 谁抵押的钱比较多, 谁说的话就更有分量。
这两种方式一个是在比拼电力的消耗, 另一个则是在比拼资金的实力, 它们的根本目的都是非常明确且坚决的, 就是要彻底确定并牢牢固定下到底是由谁来拥有最终的决定权这样一件事。
更让人觉得头大的是拜占庭容错这个问题。在咱们这个网络环境里头, 必然会有那些坏了的节点, 也肯定有那些宕机的节点。所以算法必须得能够容忍一定比例的、不那么可靠的参与者, 这样一来大家才能最终达成一致意见。
军队的通信业务搞了整整二十年的时间, 现在如果把这套东西搬到开放链上面去的话, 还非得再降低一个数量级才算完。这是因为参与者的身份发生了变化, 从原来的有着固定编制的队伍, 变成了全球各地散居在各处的零散人员。
共识验证出分歧咋办
发生了分叉的情况。在2016年那一次51%攻击事件中, 有几个矿池同时产生了新的区块, 导致区块链分裂成了两条不同的链条, 网络节点根据最长链的规则对较短的那一条链进行了丢弃处理, 使得参与挖出的相关矿工之前的劳动成果全部白费。
在我进行测试的环境里曾经由于一次配置信息的错误, 致使三个节点各自为政互不相连, 后来通过执行重启操作才把局面重新整合回来, 当时我的手因为紧张而不停地颤抖。
最终性和安全性永远像是处于一个跷跷板的两端。拜占庭容错机制虽然速度快, 但是它有个前提条件, 就是必须要求各个参与节点的固定身份是不能随意变化或者不能轻易变动的情况之下的那种做法。
公链开放又不能让系统去赌那些参与者中间会不会有人突然变成坏人这种可能性的事, 所以它只能够通过接受概率上的一些不确定性来换取结果上面的一种确定性状态。当确认的区块数量变得越来越多的时候, 反向操作带来的负面风险就会降低很多, 不过对应的转账到账时间也会变得越来越慢。
总而言之这里头就没有所谓的能让所有人满意的完美解决方案存在这一说, 有的只是需要在不同需求之间做一个具体的选择和妥协这个现实。
下次当别人告诉你区块链有共识验证的时候, 你别只点头, 你得问一句你那条链能容得下多少拜占庭故障, 这样得出的答案才是真的。
转载请注明出处:枣强文明网,如有疑问,请联系()。
本文地址:https://www.zqwxw.com/imqb/10758.html
