上篇我们简单介绍了 Cell 模型,相信大家已经有了一个直观的认识,这篇主要介绍关于 Cell 模型设计初衷的一些个人看法和思考。
我们先简单回顾下区块链的发展历史,Bitcoin 作为一种点对点的支付系统的诞生,而后出现了更通用的去中心化应用平台 Ethereum,现在随着区块链的发展涌现出各种各样的新项目。
然而始终有一座大山横亘在面前:扩展性问题。区块链如果不解决扩展性问题,将严重限制其上层应用的发展。因为安全、扩展性、去中心化的不可能三角问题,在不牺牲安全和去中心化的前提下,Layer1 去直接解决扩展性问题几乎是一个不可能完成的任务,只能绕道分层方案。
而且随着区块链慢慢被更多人使用,必然会面临区块爆炸问题,将所有的信息都存储在区块链上显然也是非常不合理的。
另外一点就是交易费用的问题,在经济学上判断一项技术能否被大规模被使用的标准就是,是否节约了全社会的交易成本。在区块链中所有交易和存储都经过全网共识,必然非常昂贵。所以从这个角度来讲,分层架构也是必然的。
对计算机设计有所了解的朋友肯定知道,在计算机中有各种存储设备,包括寄存器、多级缓存、内存、硬盘,越快的设备价格越高,但是计算机充分利用了分层设计,才使得计算机以更低成本被制造并被大众接受。
在区块链中同样如此,安全和去中心化是非常昂贵的,也必须被分层,才能以更低成本成为一种更普世的基础设施。所以当我们在思考如何去设计一个区块链时,就要设想未来的场景,应该是一个分层的区块链。
现在再来看一下这三种模型的差别。Bitcoin 的 UTXO 模型,由于只能作为数字货币,并非通用的模型,所以我们主要对比 Account 模型和 Cell 模型。
Cell 模型继承了 UTXO 的衣钵,是一种验证模型;而 Account 模型是一种计算模型。关于验证模型和计算模型的论战从来没有停止过,现在我们从另外一个角度来审视这个问题。
对于现有的各种的 Layer2 方案,包括闪电网络,雷电网络,plasma 等各种方案,在将其 Layer2 上的资产退回到 Layer1 时,都采用了提交证明,验证挑战的机制。所以 Layer1 更像一个法院的角色,通过对用户提交的证明来进行各种审判。在这种模式下,Layer1 更多的是担任了验证者的角色,而非计算者。在这一层面上讲,Layer1 更适合采用 Cell 模型,而 Account 模型在计算上更胜一筹。
前面提到了状态保存的问题。在 Ethereum 中状态存储的问题已经非常严重,全节点的数据存储代价已经很高,且其中保存有大量的僵尸账号。
在 Account 模型中,同一合约的所有用户的资产都是保存在一个账号中的,将用户的状态拆分非常困难。在 Ethereum 中,交易采用的一次付费永久保存的方式,显然这种付费方式是非常不合理的。
区块链作为一种公共基础设施,更适合以租用的方式来进行付费,即数据的存储需要持续付费。
-
对于 Account 模型,同一合约所有的用户数据都是存储在一起,在这种情况下对于不同用户按照容量和时间进行收费非常困难。
-
对于 Cell 模型,每个用户的虚拟资产是单独存储在各自的 Cell 中。在这种情况,如果用户不想继续持有其资产,可以将 Cell 中的数据释放,这样就不需要在继续付费,这样 Layer1 就不会保存大量无用的资产, Layer1 的数据存储保持在一个良性的增长状态。
本文主要从验证模型和状态存储两个方面来介绍 Cell 模型更适合分层架构的区块链设计。下一篇将会继续介绍如何在 Cell 模型上进行编程,以及在这种模型下编程的一些限制和优势。