作者闪电HSL
第0章 引言
以太坊的成功,激发了无数的开发者致力于开发“区块链操作系统”。这是一种将“区块链操作链”作为最底层结构,然后在上面构建各种dApp来实现各种业务,的架构。我认为这是一个难于扩展的架构。
比特现金近期复现和扩展了比特币Omni协议,提出的虫洞协议,这是一种更易扩展的架构。
可再高速发展十年的区块链架构——虫洞协议在比特现金网络部署具有无限可扩展性的...
第1章 什么叫可扩展性
区块链的可扩展性主要有两层含义,第一层含义是交易量可扩展,即网络可以承接越来越多的交易。比如现在BTC约3~7tps,ETH约20~30tps,但目前这两个都已经接近极限了,BCH理论值能达到100tps,只不过目前没人用,事实使用量只有0.5~1tps,bts理论值3300tps,EOS理论值则更高,也是实际使用量少。可扩展性就是让这个tps在事实使用值上可持续增长。
可扩展性的第二层含义是节点数量的可持续增长。约束节点数量持续增长的主要是网络硬件设施的性能限制,和成本限制。如果节点运行的成本越高,现实的网络硬件设施性能越差,那那相对来说运行的节点数量就不可持续增长。
目前以太坊节点的运行成本是很高的,在维持一定的去中心化的前提下,已经触及到了网络硬件设施的性能极限,普通用户几乎不会再去运行一个节点了,用户只能运行一个轻钱包。比特币和比特现金的运行成本都还是很低的。BTS和EOS的DPOS共识机制的设计目标并不包含节点的可扩展性。
节点的运行成本可以分为CPU计算成本、硬盘和内存存储成本和网络传输的带宽成本来计算。
实现节点的可扩展性主要目的是为了实现去中心化,如果不考虑去中心化,使用中心化的设计交易量的可扩展性是很容易实现的。
互联网的设计就具有非常成功的可扩展性,我们大部分人都不至一个联网设备。互联网从来不需要担心联网的设备太多了,也不会担心发的信息过载了。
但一个以去中心化为设计目标的区块链产品,要成功实现可扩展性,并不容易。
第2章 以太坊及类的区块链操作系统限制了可扩展性
我们从用户的角度来看区块链操作系统。以太坊有两类账户,外部账户和合约账户。
外部账户是由公钥和私钥组成的。我们绝大多数用户生产的以太坊钱包都属于这一类账户,私钥可以决定这个账户里的币,包括以太坊和ERC20币。
合约账户是由一个地址和对应存储的一些代码组成的。在以太坊上发ERC20币,就是创建了一个合约账户。存储在合约里的代码决定了这个地址里的币的处理方式。合约账户没有私钥。
用户使用钱包发送和接收以太坊,一般就是外部账户的行为。我们发送一笔以太坊,本质上是调用了以太坊的一个“系统合约tranfer”来修改账户的余额。以太坊节点需要执行这个“tranfer函数”。任何用户发交易,如发ERC20代币,就会触发执行一个合约账户里的代码,以太坊节点就需要执行这个合约账户里的代码。所有的节点都要执行这些代码。
任何用户在以太坊上部署代码,只要有用户通过发交易的方式触发了这些代码,节点都要执行并验证,用户支付gas付费触发代码执行。
以太坊是将外部账户和合约账户同时设计在同一层,要求所有的节点共同维护外部账户和合约账户,这导致非常差的可扩展性。
这种架构导致节点的运行成本随着交易量的增长快速增长。以太坊到今天,仅运行了三年,节点需要存储的区块数据达到了600多G,而且区块里托管了大量的代码需要节点运行,这些复杂的代码要耗费大量的计算成本,而且以太坊的区块间隔时间快到了15s,这对带宽要求非常高,慢一点的带宽是跟不上的。目前以太坊为了维持去中心化,已经无法再提高网络的交易承载量了。