去信任化节点之间的分布式共识是区块链系统的关键组成部分。无论是PoW还是PoS,由算法搭建的共识能够保证区块链中的数据一致性,比如说,在比特币区块链中,用户和其持有的比特币是对应的。
共识算法本身并不是什么新发明,但其独特的设定以及对区块链系统的贡献使它在比特币出现之后就成为了一个技术“新星”。除了技术层面的共识之外,很多层面的共识都直接涉及人为活动——而对于这些层面的活动我们始终无法推出一个适当的技术解决方案。
这些涉及人为因素的共识层已经带来了不少问题,也是将比特币扩容辩论推往混乱边缘的罪魁祸首。在研究比特币当前存在的混乱之前,我们首先来看看这几个不同的共识层面。毕竟这类情况不只会发生在比特币系统,大多数成熟的系统和社区最终都会面临这类问题,只不过比特币社区首当其冲。
我把这些共识层分成了三种:(1)数据共识,(2)应用和数据有效性共识,以及(3)沟通数据共识。
(1)数据共识由共识算法进行处理,是对“区块链中包含了什么数据?”这一问题的解答,而这一问题是由分布式网络中的矿工或利益相关者提出的。
(2)应用和数据有效性共识用于解答“为什么这些数据是有价值的以及为什么我们要存储这些数据?”等问题。对于比特币来说,他的价值在于货币功能,比如说它可以用来进行交易或者保值。如果对比特币的价值不存在共识,那么比特币的分布式账簿就显得毫无意义。上述问题的答案通常都反映在市场供需差异中,但也可以是其它不同的表现形式。在ETH系统中,以太币的价值就不在于货币功能,而在于帮助网络自动执行合约。
(3)沟通数据共识是至关重要的:每个区块链系统都是一种分布式网络,它需要沟通并执行一种共享算法。为了实现这一目标,网络中需要同一种语言,比如说网络参与者之间信息的传播和接收都要参照同一种数据格式。这一过程涉及琐碎的格式问题(相当于日期排列方式的差异,有人用日月年的格式,也有人用月日年的格式。)以及“什么样的信息是有效的?”、“什么样的信息需要被广播?”或者“区块链数据有效性需要具备什么条件以及如何识别区块链数据的不合法性?”(也就是比特币的双花问题)等重要的问题。
上述问题的答案就在软件开源代码的硬编码中,这些答案预先经过了开发者的设计和部署。这就导致开发者在大多数区块链系统中占据着重要的中心位置。不过大部分代码部署都是开源的。所有人都能够提出改进并且运行改进后的软件。但如果没有其它节点的接受和承认,这种改进是毫无意义的:如果这个改进修改了区块链的数据格式,那么所有运行初始软件的参与者就会丢弃这些新数据;如果改变了网络沟通格式,其它节点可能会误解或者直接丢弃修改后的客户端传播的信息。
有关修改后软件的传播问题:如果大多数参与者都接受了新的软件,它就会继续存在并且能够定义区块链数据以及沟通协议。
客户端修改还可能会导致“分叉”:区块链将一分为二,每条链都只能在创建它的软件中有效。对于比特币来说,这一过程最终会形成两种并行货币。如果你收到了某条链中的货币,那么它在其它链中是不可用的。
说了这么多,跟比特币的问题有什么联系呢?比特币区块链记录用户间的交易信息,也就是货币传输。交易被打包到区块中,每隔约15分钟就有一个矿工解决了PoW难题并给交易区块盖上时间戳。到目前为止一切顺利;但比特币协议中已经规定了每个区块的容量上限,因此,在固定的时间内处理的交易数量也是有限的(目前每秒交易处理量约为7笔)。
比特币越受欢迎就需要处理越多交易,也就有越来越多的数据需要写入区块链。目前比特币几乎达到了容量极限:区块链很难高效地打包并执行所有交易。不久,交易数量就会越来越大,无法及时打包到区块中,最终造成排队中的比特币交易越来越多。
解决这个问题的方案有很多。其中两种最有名的就是隔离验证(SegWit,以下简称SW)和bitcoin unlimited(BU)。但如何在众多方案中进行取舍?比特币开发者承诺会保持中立,不会独立修改比特币核心协议。这样一来,选择权就落到了矿工手中:他们在挖每个区块的同时还能表示自己对某一方案的支持。
如果某个方案得到了绝大多数矿工的支持,那么问题就解决了。但如果矿工的意见最终不能统一,比特币区块链就可能分裂,形成两种不兼容的比特币。但在PoW协议中,矿工不一定是区块链的利益相关者和用户。目前,很多矿池都支持BU,因此BU代表的算力很高。但很多比特币用户却更喜欢SW方案。
区块链系统运作的核心是什么?一旦部署完成,区块链系统就必须不断发展,无论是在某些不可预见的情况或常规系统更新中都是如此。
虽然区块链的本质是去中心化,但系统中单一的语言(在分布式网络中采用同一种沟通协议)等现象会最终造成一个中心点。管理共识以及防止用户、矿工和其它利益相关者之间的冲突是确保区块链信任的要素。
无论一个最好或最正确的方案是否会带来一个中央机构,分布式投票协议会把问题的答案交到矿工和用户手中——或许根本就没有正确答案,就像玩政治一样。