虫洞协议在比特现金网络部署具有无限可扩展性的智能合约层
第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,这对带宽要求非常高,慢一点的带宽是跟不上的。目前以太坊为了维持去中心化,已经无法再提高网络的交易承载量了。
第3章 比特币的纯交易记账层是可扩展性的
比特币(包括BTC和BCH)只有使用私钥和地址控制的“账户”,没有可以托管代码的“合约账户”。用户使用比特币网络,就只能发交易,不能执行像以太坊那样在比特币区块里“部署让节点来执行的代码”。而节点只需要执行和验证交易。
如果我们把比特币交易的验证比喻成一个解锁函数(解锁脚本),那比特币的节点只需要执行一个函数,不需要执行用户自定义的代码。
比特币这样的架构可以实现更高的可扩展性,但BTC因为发展理念的问题,使用1M交易数据区块+3M签名数据区块,限制了交易量的可扩展性。目前BTC网络的实际使用量已经触及到峰值,但整个BTC社区拒绝扩容。BTC的节点可扩展性就现在的水平来说是没有问题的。
而BCH则没有扩容的问题,交易和节点都有非常好的扩展性,但BCH生态还没有起来,导致很少人使用。
比特币的问题是,和以太坊这一类区块链操作系统相比,功能实在是太窄了。区块链操作系统允许用户自定义函数并托管到区块里,让节点来保证运行,这可以实现非常复杂的功能,而不仅仅限于发交易转账。比如以太坊可以搞复杂的FO3D这种资金盘游戏,可以搞以太猫这种游戏。而比特币只能用来做转账。
比特币也有元币协议这些二次扩展协议来实现更复杂的功能,还有侧链协议也可以无限扩展功能,但比特币发展了十年了,都没有普及起来。
比特现金近期复现和扩展了比特币Omni协议,提出的虫洞协议,试图在BCH主链基础上拓展出一个二层网络来实现更复杂的功能。
第4章 比特现金的合约账户层可无限扩展
如上所述,比特现金的交易记账层是有非常好的可扩展性的,因为这一层执行的功能很单一。但现在区块链的发展证明了,特别是以太坊的发展证明了除了交易之外的更复杂的功能是必须的。比特现金推出的虫洞协议试图补充这些复杂的功能。
使用虫洞协议实现智能合约的完整协议还没有发布,但发代币这一部分协议已经实现了。简单的理解是这样的,虫洞协议是在BCH上实现以太坊的合约账户的功能。和以太坊一样,用户也是通过发送交易来部署合约代码,用户构造的是一笔BCH交易,而合约代码是保存在OP_Return(或P2SH的锁定脚本等多种方式也可以保存代码)里。但BCH主链并不执行合约代码,BCH的节点不关心OP_Return的数据,更不需要去执行,BCH主链只是把这笔部署交易当成普通交易来看待。
虫洞协议执行合约是由运行虫洞协议的节点来执行的。虫洞节点又是什么?
虫洞节点就是一台运行着虫洞协议集的电脑,可以将虫洞协议看成是BCH节点的一个外挂,这个外挂程序专门用来解析和运行用户使用虫洞协议部署在BCH主链上的代码。
虫洞节点的外挂部分是一个一个孤立的节点,但BCH节点部分是相互连接的P2P网络。孤立的意思是合约的执行是相互独立的。
以太坊的合约账户是所有的节点都需要执行所有的合约,虫洞协议合约账户是你关心这个合约你才去执行,并不强制所有的节点都去执行这些代码。那安全性如何?
如果一个项目方部署了一个合约A,只有这个项目方自己运行了一个虫洞节点并执行合约A,那是否意味着这个项目方可以造假呢?答案是否定的,因为智能合约的运行结果一定是确定性的,只要你的代码已经部署到了BCH网络,就意味着运行的结果一定是确定性的,这意味着如果任何人都可以去验证合约A。
另外事实上智能合约的运营主要是依赖于项目方,而不是依赖去去中心化的网络。
BCH的智能合约设计思路完全是一个二层网络的设计,并不伤害BCH主链的可扩展性。而因为合约之间是独立的,或者说是“并行的”,这意味着合约是可以无限制的部署,就是说BCH的智能合约层是无限可扩展的。这是以太坊梦寐以求的合约分片,BCH的这种智能合约层天然是分片的。
第5章 分层才是可扩展性的架构
将不同的功能部署到不同的层,这样的设计是更具有可扩展性的。以太坊将纯粹做交易转账的外部账户和部署合约代码类的外部账户部署到同一层的“区块链操作系统”的架构,运行了三年已经面临着极大的可扩展性挑战了。
而BCH将交易转账设计成主链,将合约类账户的代码托管到主链,但主链并不执行代码,链上存储,第二层执行。这样即保证了合约的安全性,又阻碍主链的可扩展性。这样的分层设计更具可扩展性。
第6章 结束语
如果要赌下一个十年,哪条链还能持续保持实际运行上的可扩展性,我站比特现金BCH。