Bitcoin(比特币)的技术设计是否支持大规模应用?

以比特币为代表的公有区块链系统一直有一个广为诟病的缺点:交易性能低。

交易性能低包括两方面内容:一是交易吞吐量小,二是交易速度慢。交易吞吐量是指系统在单位时间内处理请求的交易数量;交易速度是指系统对交易从提交请求到确认交易成功的平均时间。在比特币区块链系统中,这两个值低得可怜。交易吞吐量是平均每秒7笔,交易速度是平均1小时能完成交易确认。对比一下一般商业银行的核心系统交易处理能力,交易吞吐量一般都要超过每秒2000笔,交易速度一般要达到实时。

正是由于比特币区块链的交易性能太低了,所以很多人都认为这个性能缺陷导致了比特币无法成为一种用于交易的货币。是什么原因导致了比特币区块链系统的交易性能低呢?

区块链作为一种分布式账本技术,核心功能是要把账目都记下来。通常公有区块链的记账方式相当于每个人都在一页账页上一条一条的记录交易,记录了一定时间后,通过某种竞争办法选出记录的最好的一张纸,大家都复制一份,添到自己的账本上,然后开始新的账页记录和竞争。

这里面有两个限制:账页的大小和记账的周期。账页大小确定了每个区块所能容纳的交易数量,每个区块容纳的交易数量除以记账周期就是交易吞吐量;

而记账周期则直接决定了交易确认时间,记账周期乘以大概率确认区块有效性的区块数(比如比特币里我们通常认为6个区块基本上就能确定交易有效)就是交易确认时间。

要想提升公有区块链的性能,最直接的办法就是增加每个账页内的交易数量(区块扩容)和减少记账周期。(比特币的扩容之争,以及比特币现金(BitCoin Cash)的出现,就是区块扩容引起的。以后我们会详细讲这个问题)对于区块扩容,通常直接影响到区块的传播速度。当然,以现在的网络带宽和速度来看,比特币当初确定的1MB大小的区块确实是比较小,但是小区块也有小区块的好处——可以采用更多的通讯方式进行传播,比如卫星通讯。减小记账周期,则会影响到区块传播的范围。

如果区块过大并且记账周期太短,就会造成去中心化程度的降低。原因很简单,当一个矿工挖到了一个区块后,其他矿工还在下载接收这个区块的时候,他已经开始挖下一个区块了。显然,接收一个区块所占用的时间在一个记账周期中的比例越低,对于全体矿工来说就越公平。否则,先发优势过于明显,导致整个系统的去中心化程度降低。与此同时,整个网络同时挖出块的概率将会大大增加,就会需要更加复杂的机制来解决这个问题。

因此,对于公有链来说,用改变区块链自身的方式来提升区块链的交易性能,想要追赶现在金融系统的交易处理能力,难度还是非常高的。换句话说,我们想提高公有链的链内交易的交易性能,难度极大。

转回头看看传统金融系统的结构。在我国,不同的商业银行通过央行提供的大小额支付系统实现了跨行交易。而普通用户在使用银行系统的时候,很多交易都是在同一个银行内进行的,只有涉及到跨行交易的时候,交易数据才会被提交到央行的系统上进行处理。因此,大小额支付系统上的交易数大大降低了。

区块链上也可以采用类似的办法来解决。我们把这种方式统一叫做链外交易。也就是说,某一个组织或者机构可以提供一些服务,让我们在链外记录这些交易,每隔一定的时间,把这些交易的结果写入区块链即可。举例来说:Alice、Bob、Charlie、Dave 4个人之间发生了一系列交易:一开始每个人都有100美元,然后Alice转给Bob 50,Bob转给Dave 120,Dave转给Alice 50,Dave转给Charlie 100,Charlie转给Bob 80,Bob转给Dave 100。整个转账过程如图所示:

这些交易之间经过清算,结果就是:

尽管转账的过程非常复杂,但是只需要在链上记录下来每个时刻的账户状态(就是每个时间段的清算结果),最终结果与所有交易信息都记到链上效果是一样的。区别在于从链上的数据并不知道交易发生的真实情况。

除了这个区别以外,还有一个重要的区别:在链外交易时,提供这些链外交易服务的组织或机构的信用与整个公有链的信用是有差别的。在链外交易时,这些交易已经不是一个去中心化的交易了,而是一种局部的中心化的交易系统。当然,由于定时会把交易清算结果写回链上,一旦结果写回链上后,我们就能够确认提供链外交易的组织是否存在篡改数据的情况了。

从经济学角度上看,小额交易由于额度较小,对于链外交易的服务商来说,篡改数据带来的利益要小于持续提供服务带来的盈利。因此,小额交易转移到链外进行,从信任角度来讲,没有过于明显的区别。因此,未来公有链的发展趋势很可能最终变成一个类似央行清算中心的一个服务提供者,而实际上大量的小额交易只需要在链外交易中进行即可。