引言
比特币、以太坊的扩容争议长期以来一直都受到广泛关注,社区内也不断提出各种解决方案来解决这一问题。主流方案有区块扩容、隔离见证+闪电网络、分片等,除此之外,多链架构的Cosmos,提出一种新的扩容思路。本文简单介绍了Cosmos,并和主流的几种的扩容方案做了对比分析。
Cosmos简介
官网的定义是分布式账本的网络。
A Network of Distributed Ledgers
白皮书一开始提到了比特币、以太坊、DApp、闪电网络等等,巴拉巴拉一通它们的成绩,然后总结这些技术不行(白皮书指出的问题主要是可扩展性方面,Cosmos开发者不看好现有的垂直分片技术),Cosmos能解决所有问题。
Here we present Cosmos, a novel blockchain network architecture that addresses all of these problems.
核心概念有Hub、Zone及IBC:
Hub
Cosmos网络里第一条链是Hub,从名字和功能上都可以把它理解为Cosmos的中心链或者管理员链,所有其它区块链的交易都会在Hub记录,一条区块链上的token可以通过Hub转移到另一条区块链。Hub是Cosmos网络的核心,和其余的Zone是不平等的,从严格意义上讲Cosmos网络不是真正的分布式系统,如果Hub发生了单点故障(当然Hub本身是分布式的,发生问题的机率很小),Cosmos网络的很多特性会不可用。
关于这点,白皮书中语焉不详,大致就是Hub必须得到严格保护。
While each zone may be a Tendermint blockchain that is secured by as few as 4 (or even less if BFT consensus is not needed), the Hub must be secured by a globally decentralized set of validators that can withstand the most severe attack scenarios, such as a continental network partition or a nation-state sponsored attack.
Zone
Cosmos网络里其余的链称为Zone,你有什么想法,自己做条链(Zone),你的地盘你做主。Cosmos为Zone提供了一个参考实现。基本上Cosmos开发者的想法是他们来维护Hub,开发者去做Zone,建立一个生态系统。
Zone 的设计思路是隔离应用,推荐一Zone一应用,一个Zone多个应用当然也是可以的。各个Zone自己玩,玩崩了也是自己崩,不会像以太坊一个爆款应用就能拖垮整个网络。只有Zone和Hub交互才会对网络的中心节点造成压力,跨Zone交换token正常情况下频率较低,退一步说,即便Hub堵塞了,也不会影响各个Zone内部的正常运行,可以认为Cosmos网络是高可用的。
IBC
IBC是Zone和Hub间交互的协议,Hub不限制Zone的实现,只要是通过IBC协议和Hub交互就是一个合法的Zone。因为有IBC这个机制,除了按照Cosmos的规范实现一个Zone,现有的区块链也可以通过适配器的方式接入Hub,只要背后的技术团队愿意,比特币、以太坊等等都可以接进来。
性能
性能方面,Cosmos宣称能在64个验证人(分布在五大洲的七个数据中心)的情况下达到每秒数千笔的交易。
Cosmos上线的第一年,验证人数量最多将设置为100,之后十年的增长率将在13%,最终达到300位验证人。验证人数量增加,通信会更复杂,性能相应地会降低,白皮书的应对措施是通过增加内存、带宽、处理能力保证性能。
扩容方案对比
区块扩容
区块扩容要从比特币的区块设计讲起,大家都知道比特币的交易上限大约为每秒7笔,这个每秒7笔是怎么算出来的呢。
首先,比特币区块结构如下图所示,可以看出其中大部分容量用于存储交易信息。
所有的交易信息都存储在区块中且必须存储在区块中,否则不会被承认。目前比特币系统内定义每一个区块的大小是1M,每10分钟产生一个这样的区块,一个基本的比特币交易大小约为250Byte,通过计算即可得出平均每秒大约可以处理7笔交易(实际交易平均大小约为500Byte,每秒可以处理2-3笔交易)。
好比一列火车,只有四千两百个座位,火车的运力大约是每秒运送7个人。当前的火车坐满了,只能等10分钟后的下一趟车。想提高运力,火车头后面多挂车厢呗。从技术人员的角度出发,如果将比特币类比为业务系统中的数据库,随着系统流量不断增长,数据库成为系统的瓶颈,这时怎么办呢,最简单的做法就是升级数据库主机。
对应的扩容方案就是增大比特币区块的容量,但就像火车头不可能无限制加挂车厢、数据库主机不可能无限制提升性能一样,区块容量也不可能无限制增大。
做一个估算,按照VISA在2015年的记录,全年平均每秒2920笔交易,峰值每秒1.4万笔交易,按平均值去设计区块容量,单个区块为900M,一年数据量是47TB,无论是单个块的处理能力、区块的传输带宽、还是全区块的存储容量,都不是普通人的电脑可以支撑的,违背了比特币去中心化的初衷。
比特现金(BCH)是现实中的区块扩容的例子,它Fork了比特币的代码,去掉了对隔离见证的支持,将区块的最大体积提升到了8M,可以简单理解为比特现金的系统容量相对比特币提升了8倍。
区块扩容的优点
- 方案简单,技术风险小
- 实施周期短(目前技术方案中唯一在生产环境中上线)
区块扩容的缺点
- 扩容效果不明显
- 未来系统容量上升空间较低,几乎不可能达到商用支付系统的规模
- 无限制的区块扩容会损害比特币的去中心性
隔离见证+闪电网络
比特币另外一个扩容方案是隔离见证+闪电网络。所谓隔离见证,让我们回到之前的比特币区块结构,比特币区块里含有两种重要信息,一个是交易信息,另一个是见证信息或者叫签名。交易信息和见证信息放在一起会有安全隐患,所以就有研究人员提出把脚本签名信息从基本结构里拿出来,放在一个新的数据结构当中。做验证工作的节点和矿工也会验证这个新的数据结构里的脚本签名,以确保交易是有效的。隔离见证也要求增大比特币的区块容量,相应地增加了比特币的处理能力,虽然其出发点是为了安全性而不是扩容,扩容只是附加效果。
这个改动可以比作给火车加挂行李车厢,原来车厢里的行李全部放到行李车厢里,行李架空出来也可以躺人,一趟列车可以运送多一些的人。
隔离见证虽然没有显著提升比特币的处理能力,但它所做的工作简化了闪电网络的设计,闪电网络对比特币交易性能的提升是颠覆性的。之前我们所提到比特币每秒最多处理7笔交易,并不是说假设全网只有你一个人发起比特币交易,这笔交易会在一秒内处理,理论上最快也要等待10分钟才能处理完成(6 个块的可信更会导致确认1个小时的最终确认时间)。就像平均来看火车的运力是一秒运送了7个人到达目的地,但实际上是一列火车上的4200人中的每一个人都要花费10分钟才能到达目的地。而闪电网络可以将处理延迟缩短到几分之一秒,每秒处理数万笔,更有研究结果宣称能达到毫秒级延迟,每秒处理能力上亿笔,这种用户体验完全可以秒杀现有的任何金融支付系统。
闪电网络的设计思路就是把交易放到链外处理,避开耗时耗力的交易确认过程,简单来说其实现要求参与交易的双方之间存在一个支付通道(资金池)。双方都预存一部分比特币到支付通道里,之后每次交易,就对交易后的资金分配方案共同进行确认,同时签字作废旧的版本。当需要提现时,将最终交易结果写到区块链网络中,最终确认。可以看到,只有在预存和提现时候才需要通过区块链,交易时不会发生拥堵。预存的比特币在n方间的流动通过一种限时哈希密钥的方式,就像大家互相能传递限定有效时间的钥匙,这把钥匙可以拿走自己在支付通道里的比特币,现有计算机的处理能力对哈希密钥的验证完全可以做到毫秒级。
拿业务系统中的数据库做类比,就像把数据库中一部分高频读写的数据,放到内存数据库或者CPU二级缓存里运算,直到有必要时才真正写入数据库,业务处理能力得到指数级提升,同时数据库的压力大大降低。
另外闪电网络还解决了小额比特币交易手续费的问题,比特币交易的手续费是固定金额制,随着全网比特币算力的提升和比特币价值的提高,交易的手续费越来越高,买一杯咖啡需要的比特币远远小于这笔交易所需的手续费。闪电网络仅在预存和提现时才需要缴纳固定手续费,交易时按百分比收费。
当然闪电网络也不是全是优点,闪电网络需要部署智能合约到中介节点,这些中介节点可能会失效或者下线,这时交易的确认可能需要几小时、几天甚至更久,所以闪电网络对交易的金额上限有限制,首个版本的闪电网络协议将支付上限设到了0.04294967296 BTC。
隔离见证+闪电网络的优点
- 降低了小额交易的手续费
- 闪电网络交易处理能力可以达到商用支付系统级别
- 闪电网络内的交易速度极快,甚至超过商用系统
隔离见证+闪电网络的缺点
- 只适用于小额交易
- 没有真正解决比特币自身的容量问题,比特币链上交易容量仍然受限
- 闪电交易的交易不上链,有丢失资产的风险
- 闪电网络的可靠性有待验证
分片
分片(Sharding)方案由以太坊创始人Vitalik提出,用以解决以太坊拥堵的现状。
首先,与比特币不同,因为智能合约的运行需要消耗算力资源亦即gas,限制以太坊链上处理能力的不是区块大小,而是 gas 值上限。目前以太坊每个区块 gas 值的限制约为 670 万,根据每区块大约容纳 200 笔交易、平均出块时间为 15 秒来计算,以太坊的理论交易处理速度可达 13 笔/秒。单纯的提高gas值上限,会增加以太坊网络被DoS攻击的风险,曾经为了提高攻击者作恶的成本,gas值上限一度降低到150万。
分片的思路是以太坊网络以后会有主链和分片链,分片链上的交易处于自己独立的空间中,分片验证人只需要验证他们所关注的分片,各分片链的交易彼此独立,不会相互影响。为了将分片链加入到主链中,在主链上需要有一个叫做验证人管理员合约(VMC)的特殊合约。VMC将分片链的当前块的哈希作为种子,采样出合格的校验块 (Collation),若干个分片链上的校验块最终组成一个在主链上的区块,本质上和现有协议中的区块没有区别,不需要主链做硬分叉;分片链并行运行,提升了整个系统的处理能力;分片链的共识结果仍然需要在主链获得更高层的公识,确保了安全性。
这种设计还有利于未来的继续扩展,整个扩展分为4个阶段,目前处于第一阶段,计划划分100个分片链,相应的交易容量就大约扩大了100倍,分片的数据在这个阶段不能跨分片传输。Vitalik预计需要用2-5年的时间实施以太坊分片方案。
还是用火车来理解,现在一列火车不够用了,我们就修100条完全并行的轨道,100列火车同时发车、同时达到,运力增加至100倍。但是目前有点限制,不管这100列火车是空的、坐了一半人、坐满了人,都必须同时发车,而且不同火车上的人现在不允许串门。
从数据库调优的角度看,分片类似于对数据库进行垂直分库,将业务彼此无关的表放在单独的数据库中,分库后不同库中的表无法进行联合查询等操作,但是可以平摊压力。
分片的优点
- 无需提高gas值上限
- 能逐步扩展到商用支付系统的处理能力
- 安全性高,所有交易都会记录在主链上
分片的缺点
- 系统复杂度高,技术风险大
- 跨分片的通信暂时还未实现
- 实施周期长,2-5年的部署时间可能会让以太坊错失发展良机
多链并行的Cosmos
Cosmos认为未来的世界不可能由一个区块链主导,一定是多链并存,多币并行的世界。把多链和多币整合成一个生态系统,就是Cosmos的理想。Cosmos的理念还有个独特的地方,它认为币和链应该是分离的,在Cosmos的实现里有个技术使得代币可以跨区块链进行转移。
与以太坊的分片不同,Cosmos里的Zone(区块链)是完全独立的,它们不需要采样自己的交易提交给主链以完成更高层的共识(Cosmos里也不存在主链的概念),共识在Zone内完成即可。每个Zone就像一个独立的世界,所有的规则由Zone创建者制定。Hub仅负责记录每个Zone的代币总数;完成代币从一个Zone到另一个Zone的流动。Hub更像一个中介者而不是管理员,它下放了共识的权力,换来了更好的扩展性。
Cosmos的区块链网络就像一个火车网络,大家自己修轨道,只要能通往Hub火车站就加入了Cosmos联运网络,其中有高铁、磁悬浮列车,也有普通火车。各种火车在自己的轨道里自由运行,不受其他火车影响,有的运力高,有的运力低,一条轨道堵塞了完全不影响其他轨道,通过Hub这个中心火车站乘客就能自由换乘其他列车,稍微遗憾的是现在只有Hub这一个火车站。
从技术角度看,这种设计思路好比数据库的水平分片(也叫水平分库),将整体存储在单个数据库中的数据,分摊到多个表结构与其相同的数据库中,这样每个数据库中的数据量就会相对减少很多,并且可以部署在不同物理服务器上,理论上能够实现数据库的无限横向拓展。然后Cosmos还提供了一个中间件供数据库间交换数据。
多链并行的优点
- 设计优雅,架构简单
- 理论上可扩展性最强
- 较好地平衡了区块链的安全性、可扩展性及性能
多链并行的缺点
- 极度依赖中心Hub,跨链交互有中心化的趋势
- 尚未上线,实际性能能否达到白皮书水平尚是未知数
后记
本文写作期间,Telegram的创始人Nikolai Durov发布了Telegram Open Network(TON)的白皮书。TON也采用了多链架构,一链一应用,声称最多支持 2 的 32 次方 种的区块链,也支持区块链上代币的流动,考虑到Telegram背后的技术团队及1.6亿既存用户,多链并行架构未来可期。