状态容量之于区块链,就好似内存大小之于一台电脑一样,而扩容状态容量极其困难。

原文标题:《简版 区块链本质论 (4): 性能本质之容量》
作者:王嘉平,中科院计算所博士,曾带领团队在 NSDI 2019 发表高性能并行分片区块链系统的论文

区块链被大家关注是件好事情,但非常不希望看到各种区块链项目盲目上马,造成各种社会资源的浪费。区块链技术本身尚在发展阶段,还有很多核心技术问题有待突破,对区块链技术本质还充斥着各种不同的理解。后面几天我们将就区块链的计算本质,技术难点,业务调整,社会影响等方面和大家分享。

(4) 性能 : 状态容量

状态容量之于区块链,就好似内存大小之于一台电脑一样。但是这一点不像吞吐量的 TPS 被大家所关注。状态容量很少被各种项目拿来大肆吹嘘,是因为这个容量不是太好测定,同时要扩容状态容量极其困难。

状态具体指用区块链中来表示链上每一个地址 (即用户) 和每一个应用的状态,所有需要准备好为验证随时到来的交易的信息的总和就是区块链的状态。典型的,比如,这个状态包含每个地址的账户余额。当链上应用丰富的时候,每个地址将有更多的信息用来表示各个地址在各个应用中的状态。

状态容量就是指一个区块链系统可以具备多大的有效内存空间用来表示整个链上的状态。链上状态是必须随时驻留在内存中,准备用来验证随时到来的交易的,这个部分信息无法放在硬盘上,否则会大大减低交易验证的吞吐量,从而极大地约束区块链整体的吞吐量。那么状态容量具体是多少呢?

第一篇 计算本质中,我们介绍了,区块链网络中,每个参与节点需要随时准备好验证和更新下一个到来的区块,也就是说每个节点都完整地存储了链上每一个地址,每一个应用的状态。那么状态容量本质上受限于每一个参与节点的内存容量。从这个意义上来说,只要提高每个参与节点的内存容量,就可以提升一个区块链网络的有效状态容量。

但是,提高单节点内存容量首先这个提升非常有限,更大的问题是提高了参与者的进入门槛, 严重伤害了一个区块链网络的去中心程度。对于联盟链系统来说,尚可接受;但对于公链系统来说,这种提升状态容量是不可取的。如果要从本质上,提升状态容量,同时又不提高单个节点的内存压力,唯一的出路是全分片,至少是状态分片。不过这还是一个非常前瞻的学术研究方向,有兴趣的同学可以深入阅读下文 :

王嘉平:突破区块链不可能三角 : 异步共识组

这里顺便说一下,另一个涉及存储的信息:交易历史。交易历史是从创始区块开始至今的每一条被确认的交易的总和。这个部分信息会不断积累,只增不减。例如,比特币系统,这个历史已经有 200 多 GB 了。这部分信息,一旦区块和交易被确认和执行,就不再涉及之后的区块验证和确认过程,所以可以完全放在硬盘上,而不占用内存空间。

当然这 200 多 GB 也是个事儿,硬盘容量也不是无限的。就比特币而言,消费级硬盘的发展速度也未必能赶上其历史交易记录的增长 (每年最多约 50GB)。但是已经有两类比较成熟的技术问题解决这个挑战。一个是 checkpoint 技术,可以使得节点丢弃掉陈旧的历史交易记录,另一个是 RSA accumulator 技术,可以使交易记录分散存储,不再要求每个节点都记录完整的全网交易记录。

这一篇的扩展阅读 :

王嘉平:区块链公链如何才能快起来 (一)

来源链接:mp.weixin.qq.com