作者 | 焦臻桢博士(中国科学院计算技术研究所副研究员 硕士生导师)
近年来唱衰区块链 (尤其是公链) 的声音中, 提得最多的是它的交易处理效率太差, TPS (每秒交易次数)太低的问题, 比如 "比特币每秒只能处理个位数的交易, 以太坊也不过 20 多笔每秒, 甚至不具备支持一个普通规模应用的能力, 还想 C 位出道成为下一代分布式社会的底层平台?" 这类问题不仅区块链唱衰者常挂嘴边, 也常常是国内外区块链团队在讲述自己的工作的聚焦所在. 然而, 很多团队常在 "研发" 短短数月内就号称已经研发出 TPS 高达十万甚至百万的区块链底层系统, 噱头十足, 然而真真假假, 颇难分辨.
为了更好理解这个有着持续热度的问题, 今天我们从技术视角出发, 讲讲目前能够带来 TPS 提升的 "靠谱" 方法和技术路线. 希望在阅读这篇文章后, 大家再看到类似 "百万 TPS" 之类宣传时, 就能够理解他们到底在讲什么:
首先, 区块链有一个著名的 "三难问题", 也常称为 "不可能三角", 即区块链系统无法同时在可扩展性 (Scalability, 国内也常译为高效性), 安全性(Security) 和去中心化程度 (Decentralization) 这三项指标上做到最优. 从另一个角度来说, 那就是区块链必须得在这三者之间做出一个优化的权衡.
"不可能三角" 对区块链的重要意义在于: 完全抛开 "三角" 中的其他两者而孤立地去谈其中一者, 那就根本不是区块链. 例如, 支付宝 TPS 很高, 但它是中心化的, 而非区块链所面对的 "多方参与, 共同记账" 的开放环境. 再比如联盟链 (一种面向企业服务领域的区块链方案), 它就是一种 TPS 很高的区块链, 但它在安全和去中心化程度上都有一定的妥协, 仅能用于成员已知且可信的环境, 而非区块链公链所面对的开放成员(Open Membership) 环境. 因此, 当我们听到别人提起高 TPS 的时候, 首先要想一想, 这个高 TPS 背后隐藏了什么, 它究竟是否真的具有价值.
近年来, 很多研究工作都围绕如何在 "不可能三角" 上取得一个优美权衡而努力, 而这些努力大致可分为三个大类: 第一类是从共识机制出发, 第二类是从区块结构出发, 第三类是从系统实现出发.
从共识机制出发是近年来最火热的话题和路线
除了我们耳熟能详的工作量证明 (PoW) 和权益证明 (POS) 之外, 还出现了 DPoS,Algorand,zk-SNARK,Stellar 等, 大概能列出数百种. 虽然花样繁多, 但是我们可以把它们再细分为三个子类:
1. 中本聪原教旨主义者: 这部分人以中本聪的比特币白皮书为圣经, 最多也就是围绕 BIP 的工作方向对以 PoW 为核心的中本聪共识进行小修小补, 在这一派中, 尝试提升 TPS 的举措包括调整区块大小 (甚至这样的行为都会引发巨大争议) 等.
这条战线上往往以传统的比特币矿机矿场为主, 虽然增加区块大小会在互联网上造成更多的传输延迟继而增加分叉风险, 但由于矿场网络的特殊性等原因, 在实际中还是能够获得数倍的 TPS 提升(这一倍数与区块增大倍数直接相关).
2. 在中本聪共识基础上进行较大创新的改良派: 这部分人又可以分为两类, 一类坚信 "计算即正义", 认为只有 PoW 中的计算才是数字世界的真谛; 另一类则务实地认为唯有 PoW 经历过多年的考验且几乎没有出现过大的问题, 所以它仍然应该是首选.
不过在改良派中, 普通认为基于 PoW 的共识协议需要有大的创新才能与时俱进. 早期从网络和分布式系统等角度对区块链进行改良的学术派多在这个方向上有所建树, 代表性工作包括 Bitcoin-NG,Byzcoin 和 Bicomp 等. 这些方法一般对传统中本聪共识过程有较大的改变, 包括改变 PoW 的作用, 改变区块结构, 解耦区块产生和交易打包过程等.
然而, 它们往往也会带来新的问题, 比如, Bitcoin-NG 可以在 PoW 共识下达到很高的 TPS, 但却会造成网络中出现个别节点权力过大的问题. 基于此, Bicomp 提出一种双层区块结构, 让不同节点打包不同功能的区块, 各司其职, 不能越权, 制约了网络中霸权者的产生.
除了以上代表性工作, 在改良派中还有一部分工作显得更为激进, 体现在对区块链的 "链" 式结构都进行了重构, 提出诸如有向无环图 (DAG) 等结构, 代表工作有 IOTA 和 Conflux 等, 详细介绍参见本文的另一个大类 "区块结构" 中的内容. 该类型工作的 TPS 参差不齐, 相差较大, 从数百到数万都有, TPS 越高者在 PoW 安全性和去中心化程度上牺牲越大, 这就或多或少违背了选择 PoW 的初衷. 此外, 该类方法总体还会受限于 PoW 的计算耗时, 区块衔接设计与传播时间, 交易传播时间等.
3. 完全抛弃中本聪共识的颠覆派: 主要代表为旧派网红 PoS,DPoS, 或新贵如 zk-SNARK,Algorand 等. 最著名, 也是最饱受争议的代表性人物之一可能是 EOS 的提出人 BM.PoS 等共识完全抛弃了传统 "挖矿" 的概念, 在 PoS 的支持者看来:"矿工听起来太土了, 埋头计算又辛苦又浪费资源, 都商业社会了, 金钱才是最大的正义".PoS 的理论依据是 "掌握了系统中最多钱的人不会去做伤害系统的事情". 妥妥的资本主义! PoS 共识无须挖矿且没有繁重的哈希计算过程, 可以非常快速地产生区块, 因此其 TPS 方面的表现自然能够高出 PoW 一大截.
然而, 实践才是检验真理的唯一标准, EOS 等公链上线后曾爆出使用成本过高等问题, 各种非议也是接连不断. PoS 体系尚未经受过长时间且大范围的考验, 不像 PoW 一样已经扛过了大批黑客一轮又一轮的攻击. 因此, 很难下断言说 PoS 是解决 "不可能三角" 的完美之道. 而且, PoS 的理论基础必然会带来资源分配的不均, 并会随着时间的推移不断放大, 产生更大的不公, 这恰恰是牺牲了去中心化的一个表现.
一些新的工作采用随机选择出块者或验证者的方式来代替 "有钱说了算", 例如 Algorand, 但 Algorand 饱受争议之处又在于它放弃了经济激励, 这又降低了网络节点参与的热情度. 干活了不给钱, 那还继续留下来干活的很可能就会有越来越多的不良动机者. 但不管怎样, 越来越多的新工作诞生在这一领域, 连以太坊也在严肃思考向 PoS 迁移, 并已基本确定了 Casper 协议.
这一大类的方法往往计算耗时较少, 且由于打包过程中没有传统中本聪共识的不确定性, 区块尺寸可以更大以容纳更多交易. 这个类型的工作以高 TPS 著称, 部分宣称可达百万. 但考虑到打包节点的处理能力, 其周围网络潜在的拥塞和延迟, 打包节点遴选耗时等, 真实的 T PS 很难达到对外宣称的量级. 此外, 该类工作所经历的现实环境下的考验仍不足以证明其安全性和可靠性, 还需我们拭目以待.
从区块结构出发, 也是当前的研究和实践的热点
区块链, 顾名思义, 以链的形式串连区块, 这就是区块链的基本结构. 然而, 有些做法颠覆了这个结构, 就是我们上文提到的 DAG.DAG 不是链, 更像一个网. 最著名的 DAG 结构如 IOTA, 甚至连区块都没有, 直接把海量的交易通过单向引用连结成了一张网, 如下图所示.
DAG 的出现来源于以下两点思考:
一是在有限 TPS 的条件下, 如何记录尽可能多的数据?
二是如何解决传统链式结构下 PoW 共识易分叉所带来的隐患?
分叉问题是因为网络规模过大时, 不同节点可能同时产生不同的区块并在周围延续, 形成不同的分支链. 当不同分支链相遇时, 就必须面临仅可选择其一的窘境, 而另一条会被直接丢弃, 上面所有的交易也随之消失. PoW 区块链的易分叉问题会带来很多不良影响, 包括潜在的自私挖矿攻击, 算力浪费, 以及众所周知的 51% 攻击等. 由此可见, 链式结构存在一定顽疾, 这也给了 DAG 一派立足的基础.
采用 DAG 的方案在近段时间里大量涌现, 并常以区块链 3.0 自诩, 俨然已稳居区块链新一代接班人地位. 然而, DAG 也有其顽疾. 首先是交易确认时间: DAG 的非链式结构牺牲了稳定性和交易的固定时间序, 交易或区块的提交相对链式而言更为随意, 因此更难被最终确认, 会带来很大的不稳定性, 而不能被最终确认的交易, 也就谈不上有什么高的 TPS.
为解决这个问题, IOTA 引入了协调器的角色, 被协调器确认的交易即是被确认的交易. 然而, 协调器的出现背离了 IOTA 最初的理论基础, 这个类中心化形态的存在, 也让 IOTA 团队在解释 "是否去中心" 这个问题上动更多脑筋自圆其说了. 与之相比, Conflux 引入了一种类似于基准链的设计来解决 DAG 的高动态问题, 可以看成 Conflux 在链和 DAG 结构之间进行了融合, 用链结构来锚定 DAG 的时序.
然而, DAG 还存在另一个大的问题: 缺乏可行的激励机制. 虽然采用 PoW, 却无法激励矿工挖矿, 甚至无法结算交易的手续费, 这还是因为 DAG 结构中写入区块过于随意而导致的.
需要说明的是, 正如我们上文提到的, 严谨地说, DAG 类型的工作应该归入我们上文提到的中本聪共识改良派中进行介绍. 然而, 对区块结构变化的探讨并不仅限于 DAG, 一些团队也开始在这个方向上有了新的思考和尝试. 尤其是随着区块链在物联网等场景的继续深入, 在链式结构或 DAG 结构之外, 还会有新的高效结构来满足更多的业务场景. 因此, 我们将其作为一个独立的大类, 并会在后续进行更多介绍.
从系统实现的工程角度提升区块链 TPS
系统实现流派奉行 "少谈理论, 多讲算法, 务求快速且实用" 的理念. 系统实现派可以在不改动现有共识机制的基础上提高 TPS, 其做法也可细分三个子类.
1. 多链并行
古语有云,"三个臭皮匠顶个诸葛亮". 多链并行的做法显然受到了这一思想的影响. 一条链
TPS 低, 同时运行多条链一起记账总能提升 TPS 吧? 然而, 多链会带来跨链的问题, 随着交易量的增加, 跨链数据的互通可能十分频繁, 资金可能在多个链上流转, 一个账户可能同时在多个链上产生交易, 这些会带来管理和效率的问题. 多链并行的实现中, 计算 TPS 往往是简单累加, 于是, 商业宣传想要多高的 TPS, 就并行多少条链. 这样做宣传可行, 实际实施和管理却不现实.
2. 侧链技术
侧链技术是在用户间临时搭建交易链路, 解决同一对用户的多次频繁交易给系统带来的 TPS 压力, 其代表项目是闪电网络. 比如有两个商户一天内多次互相交易, 但是当一天结束时, 却发现双方你来我往了 2000 多次交易, 但来往金额却刚好相抵归零, 正是侧链技术最适合运用的场景. 侧链让双方先在链下交易, 一段时间后, 将最终结算金额记录在链上, 减少直接作用在链上的交易数量.
但是, 侧链的实现借助了中心化的方法, 它的 TPS 数量不应该计入区块链的 TPS. 因此, 侧链技术也常被称为链下扩展. 不过, 很多项目在宣传中故意无视这之间的差异, 混淆大众视听. 侧链技术除了无法提升区块链本身的 TPS 之外, 另一个大问题是, 中心化的管理方式不论安全还是效率都存在瓶颈.
3. 分片技术
分片技术是将数据处理分散在不同的系统分片内, 也是目前较为热门的技术之一. 分片技术源于分布式数据存储, 与多链技术类似, 属于并行化解决方案. 它与多链技术最大的区别在于, 所有分片仍然基于一条链, 因此, 在不同的分片间高效协同以保持共识的有序性和正确性极具挑战.
分片条件下的 TPS 计算, 应以交易的终局状态达成为准. 将各分片瞬时 TPS 累加进行宣传是常见做法, 但缺乏实际意义. 分片是目前的热点方向, 在前述工作如 Bicomp 中也采用了分片的架构. 未来我们也会对这一技术进行更为详细的介绍.
可以看到, 提高 TPS 的技术路线各有利弊与挑战. 希望读完本文后, 当我们再听到诸如百万 TPS 的宣传时, 能够理性判断个中虚实.
我们身边常充斥着虚假的技术进步和宣传, 总以为技术已一日千里. 但吹嘘出来的泡沫, 就像沙滩上盖不起高楼, 不可能在实践中展现出真正的进步. 于是, 每当现实不能满足期待, 大众的信心就被消磨, 大众也会迅速从期待转化为失望, 继而转变为唾骂.
但技术的发展一定需要严谨的探讨, 更需要长时间, 科学有序地实践, 演进和完善. 我们往往因为缺乏对技术本身的理解和对技术发展规律的必要尊重, 对包括区块链在内的技术操之过急, 对现状有过高期待, 这样的心态无益于新兴技术的发展. 而从业者则更应该在这样的环境压力下苦练内功, 务实创新, 用实际行动为行业营造良性的环境和发展动能.
来源: http://www.tuicool.com/articles/Z7VnEzz