公链发展趋势

2022-1-6

# 公链发展趋势

区块链发展已进入全新的区块链 3.0 时代,后续发展要保证区块链系统既满足高并发场景,又不得失去区块链本身的去中心化本质。本文介绍新一代公链平台的特点和发展趋势。

# 区块链需解决的核心问题

区块链需解决的核心问题就是在去信任的条件下执行智能合约,总的来说就是需要解决区块链的可伸缩性、安全性、去中心化治理和满足更广泛的需求。

  • 可伸缩性:随着区块链节点数增加,系统性能也会相应的提高。
  • 安全性:区块链共识规模庞大,且去中心化,可以保证系统安全,不会被某个控制。但是,随着量子计算机的发展,给区块链的两大基础(共识技术和密码学)带来非常大的挑战。
  • 去中心化治理:整个区块链中有不同的角色,构成一个完整的生态系统,为这个生态做贡献的用户都可以获得相应的报酬。同时,需要使用这个平台服务的用户需要付费。这就要求区块链治理规则要民主,并且可以被修改,以求与时俱进。
  • 满足更广泛的需求:区块链作为一个基础设施,自然需要满足非常广泛的需求,适用于更多场景。这就要求区块链系统可编程、可定制,以满足客户的各种特殊需求。

# 共识问题

去中心化、可伸缩性和安全性,一直被认为是区块链的不可能三角问题。不可能三角的本质是在分布式环境下,很难做到高性能,所以这是一个技术难题,并不是真的不可能解决的问题。 目前,区块链行业中的共识算法可分成以下几类:

  • 零通信共识

POW 和 POS 等共识机制,都不需要节点之间互相通信来产生共识,POW 和 POS 的难度保证了全网平均产生区块在某一时间段(比如比特币在 10 分钟内只能产生一个区块),也就是我们不能随便产生一个区块来进行女巫攻击的方法来达成共识。

  • 集体投票共识

BFT 类的共识需要投票产生大多数。这类共识,回滚概率为零,但是在大规模节点情况下达成共识的通信消耗极大,仅适合小规模的集群,基本上节点数量要求小于 50,部分公司可以做到 100~200,但是再增加节点数量就会引起性能急剧下降。
① 一个节点要和所有节点连接。
当节点规模非常大的时候,网络消耗非常大。比如有 1 万个节点,我们发送一条消息就等于要发 1 万条消息,同时其他节点向我们发送消息的时候,也会收到 1 万个节点的消息,即传递 1KB 的内容,理论上需要 10MB 的带宽。
② 区块确定后,不可能出现回滚。
算法确定区块后,因为所有节点都参与共识,所以不会出现回滚的情况。

  • 部分投票共识

区块链行业目前正在探索共识算法的第三种可能性,要求共识本身消耗比较少,同时也能做到快速确认,这样的共识如果有,那么就可以解决区块链的不可能三角问题。

目前,业界这方面探索主要有:

  • algorand 的 BA* 算法:这个算法也是一个随机算法,把集体共识改成了部分共识,并保证安全性。但是 BA* 算法依然有一个问题,不能很快的收敛确认,客户需要等几分钟才能保证交易成功,那么在即时支付领域就不适用了。
  • Avalanche 的雪崩协议,这个协议,比较完美的解决了相关的共识问题。雪崩协议和 BA* 算法都是随机概率算法,但是和 BA* 的随机抽签不同,雪崩协议类似一种病毒传播的模式。

如果你边上的人都感染了 A 病毒,那么你也就感染 A 病毒,然后不断的往外传播,直到所有的人都感染了同一种病毒,这个在计算机世界中传播很快,而且是一种指数级别的感染模式。比如,我们 20 个节点作为一个采样小组,这 20 个节点又会传播给 20*20 个人,也就是 400 个人,这样的算法就迅速收敛,这个过程和区块链交易在系统中传播的原理是非常类似的。

当然,如果某个人搭建了 10000 个节点,这些节点都是恶意节点,会虚假传播,那么系统就会存在问题。为了解决准入的问题,要搭建一个准入的节点,必须抵押一定的币,这个和 POS 是类似的。抵押过币的用户,他不会随便去破坏整个网络,而且如果有一定的收益,那么他会长期的挖矿,这个和 POS 相同,不同的是 POS 没有任何节点之间的通信,而雪崩协议采用的是网状通信模型来达成共识。传统的 pbft 实际上是一个网全图,通信边的个数达到了 N^2, 也就是 100 个节点有 1 万条边。而雪崩协议的边数取决于采样的节点个数,比如我们设置为 20,每个节点从概率上来说连接的个数为 40,20 个连接连接其他节点,20 个连接被其他节点连接。这样 40N 左右的通信连接数就够。如果 100 个节点计算,前者是 10000 个边,雪崩是 4000 个边,好像提高的不多,但是以 10000 个节点计算,前者要 1 亿条边,而后者是 40 万条边,这个就相差 250 倍。这也是这个算法非常高效的原因。

总结上述共识的模式,他们有几个共同点。

  1. 不再使用全网投票这样的模式,这样的模式效率是非常低的。所以,未来 BFT 之类的传统算法都会被淘汰,因为它们无法实现大规模的区块链网络。
  2. POW 和 POS 之类的算法,还有存在空间,因为他们非常成熟。在某些场景中,回滚和确认时间并非非常重要,所以 POW 和 POS 还有他们的市场。
  3. 部分投票的共识,还会出现非常多的算法,他们会更加完善和快速,随着技术的发展,区块链的不可能三角也将会解决,区块链将会迎来大发展。

共识问题是区块链的核心问题,也是区块链区别其他系统的标志,区块链的共识算法要保证分布式并且公开开放的环境下,有恶意节点的情况下,保证系统共识成功,这种成功是原来所有系统所不具备的,他们要么是在封闭环境下、局域网条件下、没有拜占庭节点的情况下实现的,比特币是第一个实现这样特性的软件系统。而区块链的核心就在于这个共识算法,其他的都是区块链的辅助,实现共识安全,那么区块链就 90%安全了。

# 平台架构

总结过去所有的区块链系统,他们的平台架构其实非常明显,主要是两种架构, 一种是传统的单节点版本,还有一种是借鉴了云计算的分片版本。

目前比特币和以太坊之类的都是单节点版本,而且目前的大部分区块链系统也都是这个版本。分片版本非常少,且并没有非常成熟和被大规模的应用。目前非常多的区块链都在追求分片架构,如以太坊 2.0,波卡等各种新的链都要做分片,但是分片还不是架构的全部,下面我们列举一些目前主流的平台架构。

  • 最传统的区块链架构就是比特币和以太坊的传统区块链系统。这类系统的特点是,一个节点拥有所有的功能,保存所有的数据,而且只能在一台计算机上运行。这也是这类系统最大的问题,无论我们用多少机器,多少节点,性能还是和一个节点是一样的,我们可以认为这是一个单机版本的架构。
  • 以太坊 2.0 的分片架构和波卡的平行链架构。从技术角度来说,这两个结构差别并不大,但是表现出了一些不同的设计思路和特点。以太坊 2.0 的分片架构实际上是一个多链结构,也就是说原来我 1 条链性能不行,那我就用 n 条链,这样吞吐量就大;而波卡的平行链也是多链架构,而且思路也是差不多,只是这些链都是不同的 项目方独立去运营,并不像以太坊一样是相同的一套代码,不同链的需求方可以定制自己的平行链,给予每个平行链不同的功能。但是这两个思路实际上都有问题,主要的问题是,我们一个大规模的应用只能跑在一条链上,而这条链本身的性能并没有提升,以太坊 2.0 的单链还是 30 比/s 的速度,只是有 100 条链,才有 3000 比每秒,但是如果我一个应用本身需要 300 比/s 的速度,这个只有以太坊 2.0 吞吐量的 1/10,但是这还是做不到的,因为单个应用的天花板还是 30 比/s。波卡实际上也有相同的问题,把系统分成很多条链,但是链本身的性能并没有做出非常大的优化。而正确的思路是像现在的中心化系统一样,单链可以到 3000/s 这个才是我们的目标,否则根本无法应对高峰期的交易量,支持大规模的系统。

提高链本身的 TPS 只是一方面,我们知道,一个系统还是会有它的瓶颈,我们不能把淘宝、京东、支付宝,都放到一条链上,它总是有它的瓶颈。上海证券交易所和深圳证券交易所,也不能都跑在一条链上,这种大规模的应用应该有自己的独立的链。如果部署一个区块链就像部署一个应用一样简单,并且能和整个生态联通,那么独立的链也是一个非常好的方案,大型应用都可以一个应用一条链。所以,如何保证系统能快速部署、简单维护,并且可以保证安全和互操作性成了问题的关键。目前业界有很多解决方案,比如平行链、零知识证明 zkrollup,而这两者结合起来实际上是一个比较完美的方案。首先主链上有主链节点,也有服务平行链的节点,这样平行链用户可以用托管的方式搭建平行链,不需要自己准备服务器搭建。节点数也可以自己定义,对平行链的验证也会自动由验证节点验证,保证安全性。对链的执行状态做零知识证明,并把 hash 放到主链上去,同时在主链上部署验证器。一个二层链可以自动搭建出来,并且自动实现 zkrollup。二层链和主链基本上独立,主链性能 10000/s, 所有的二层可以到 100 万/s, 同时主链的资产可以无缝转移到平行链,平行链的资产也可以转移到主链,这样资产端也可以联通。目前去中心化的交易所 dydx 已经实现了通过 zkrollup 实现了交易所的功能,但是需要提升系统的公信力,并且提升系统公开透明度还要加强与平行链的结合。

# 智能合约

智能合约实际上已经有它自己的生态,目前大部分合约是用以太坊的 solidity 编写。新的区块链系统如果不能兼容这个生态,那么在推广应用的时候可能就会遇到阻力。 合约实际上还可以做的更加优秀,可参考的研究方向如下:

  • 链下执行,链上验证。目前基于零知识证明技术实现的链下执行,可能是扩展性能非常好的方式,不过,目前只有一些 demo 版本,还没有非常完美的开源方案。
  • 并发执行。不相关交易的判定以及并发的执行是区块链性能提高的一个很重要的瓶颈,现在无法做并发的执行严重限制了合约的性能。实际场景中,大部分交易实际上都不相关,当然有些场景,比如抢购商品,领红包这样的场景,又都是相关的。
  • 提高开发语言新性能。solidity 语言如果引入很多的加密算法,那么对语言执行的性能需要进一步的提高,如果能够提高语言执行性能,我们就可以降低更多的手续费。
  • 拓展开发语言。solidity 开发语言并不是一个完美的语言,缺乏一些类型和安全的数学运算,以及一些基础的类库包管理机制,拓展开发语言也能使合约更加优秀。

# 治理机制

区块链系统是人为设计的规则,有人的参与,就有可能出现意外的情况。 比如,规则本身发现漏洞,此时需要修改规则。但是谁可以修改、谁来买单、谁同意部署,这都会成为一系列的问题。在中心化时代,可以由组织的领导层来做决策;但在去中心化的时候,如果由中心化的方式来做决策,那么整个系统就会非常危险。

对治理机制的设计,应注意以下几点:

  • 重要的系统参数,需要通过全民投票的模式设置。如挖矿回报,共识时间等影响系统的重要参数。
  • 软件的升级不能通过用户下载的模式,而是通过全民投票的方式决定是否需要升级系统。用户下载模式可能出现软件包本身被黑客修改的问题,全民投票决定是否需要升级系统,能提高区块链升级的安全性。系统属于全部持币用户,他们应该对升级有决定权。
  • 系统运行的费用问题,维护整个系统的费用是昂贵的,如何让对这个系统有贡献的人拿到合理的报酬,这是一个治理上的重要问题。
  • 一般事项都由全民投票决定是不现实的,一般事项应该由委员会决定,这样可以保证系统运行的效率。