以前 Peter 提过,搞区块链的人们其实真正想要的是加密经济。但是对于如何更好的去支撑加密经济,不同的团队有不同的理解,所以各个区块链团队的技术架构也非常的不同。2018年11月,我参加了 Nervos 的 Meetup ,会上 Nervos CTO Jan 同学分享了 Nervos 的思路。演讲的完整视频在:https://www.youtube.com/watch?v=f2Gk64UpgD8 ,我这里的内容,是对演讲中 Nervos 宏观运行方式的整理,刻意的简化了一些技术细节的讨论,略去了一些术语,保证没有区块链和密码学基础的读者也能迅速看懂。

分层架构

首先,Nervos 认为真正的公链一定是很慢的,要提高整个系统的运行效率就要采用分层架构。

为何公链一定很慢呢?因为全球范围的共识,一定是比较昂贵的。Jan 一开场就提到一句话

No consensus is faster than no consensus

翻译过来就是“没有共识比无共识更快”。一段数据直接保存到服务器上当然会很快,但是如果我们想让数据保存之前让全球节点都帮我们验证一遍,并且保证大家的意见一致,保存之后也需要全球节点持续保证数据的不可篡改性,也就是说希望数据是全球共识的。这样我们直观上就可以感到,全球共识本来就应该很耗费资源,或者说就是很昂贵的。所以说区块链慢,不是说我们工程上实现的不好,而是客观原理决定的。

那么如何去让系统快起来呢?从区块链本身着手收效甚微,采用分层架构去更高效的利用昂贵的全球共识才是更好的方案。所以,Nervos 系统采用了分层架构,其中第一层是一条公链,名字叫做 Nervos CKB 。CKB 采用跟比特币类似的 POW 共识机制,本身全力保障的是安全,去中心化以及全球共识,性能方面当然也会尽量调优,但是不会因为性能去妥协去中心化。Nervos 认为,公链很慢,这个是客观事实需要去接受,大家应该思考的是如何更高效的利用全球共识这种昂贵的资源。简单来说,Nervos 的解决方案就是把一些不是那么重要的数据转移到第二层上去处理。这样虽然区块链还是那么慢,整个系统的处理能力会有明显提高。同时 CKB 被称为 Layer1 for Layer2 ,为第二层而生的第一层。意思是 CKB 从设计之初,就考虑到了跟第二层的对接。

分层架构的基本运行原理是什么呢?答案就是第一层上去保存一些足以证明第二层作恶的数据。区块链是个信任机器,只要是能保证交易的安全可信进行,目的就达到了。所以 Nervos 认为第二层不一定非要是区块链,可以是独立服务器或者其他方式,保障性能是最重要的,同时双方约定把执行过程中的关键数据保存到第一层。这样如果出现纠纷,第一层就可以去判断是哪一方在作恶了。同时有意思的是,因为有了仲裁机制,实际上第二层的人的作恶就会很罕见了,于是也就不需要反复的请求第一层,从而就不会对第一层的性能提出过高的要求。这个过程可以在现实世界中找到一个类比,那就是我们的司法系统。在淘宝上买一件衣服,其实不需要经过法院。但是由于法院的存在,导致正常情况下没有人会作恶,所以法官的人数不必太多,也能忙的过来。司法体系可以保证合同的执行,但是并不需要法官一直盯着合约双方。只有当真的出现了违法行为,我们才有可能去对付公堂。

这就是 Nervos 的分层架构的基本思路。

CKB 的设计目标

Nervos 的方法论是,所有的业务是通过一个体系来完成的,区块链只是整个体系的一部分。区块链上不是直接支撑买东西,玩游戏这些业务的。具体来讲,Nervos 的区块链 CKB 的设计目标主要有三个。

第一个, Store of Assets ,各种各样的资产的存储。交易各方必须要在 Layere1 上有抵押的资产,这样才能在作恶的时候做出惩罚。因为区块链是数字世界,不能用物理的方式去惩罚,比如把当事人刑事拘留。

第二个,Crypto Court ,加密法庭。因为 CKB 上是保存了第二层上的很多关键数据的,如果有人作恶,那么在 Layer2 提供一些证据的条件下,CKB 就能够判断出到底是谁在作恶,也就是说 CBK 能够根据密码学证据,进行仲裁,必要时对作恶的人进行资产罚没,起到加密法庭的作用。

最后一个,Layer-2 Friendly ,对第二层友好。CKB 的用户是第二层开发者,而非最终用户,所以 CKB 从设计之初就要考虑到为第二层提供各种必要的功能和接口。因为区块链属于基础设施,并不是普通软件,想要升级有时候就会搞的地动山摇。类似互联网的 HTTP 协议还有 JS 语言,设计的时候如果有问题,想要推翻重来就会非常困难。

以上就是 CKB 的三个设计目标了。

第二层上的可能

最后一部分来看看 Nervos 对第二层的思考。Nervos 对第二层不做硬性要求,开发者可以自由选择第二层的解决方案。

首先第二层上可能就是交易的双方,通过状态通道或者使用某个 Web 服务的方式进行沟通。例如,两个人下棋。这时候,你来我往的大部分数据可能都只需要在第二层保存即可,不会涉及第一层的 CKB ,而只有最终结果才保存。

同时,第二层也可能是一条链,例如联盟链。这种情形意味着,第二层自己也维护一个小范围的共识,这样依然能够保证非常良好的性能。关键的一些数据保存到 CKB 上形成全球共识,达成最高程度的安全。于是整个体系就兼顾了安全和性能。

应该说,Nervos 体系下,第二层的可能性是无限的。

总结

以上就是 Nervos 的基本架构思路了,总结起来的特征是:通过已经被反复验证的 POW 共识机制达成第一层的最大化的安全和全球共识,接受全球共识很慢的事实,通过分层架构来提升整个系统的处理业务的效率。注意,本文的介绍还是非常粗略的,例如 CKB 看上去只是一个全球共识数据库了,不能进行任何运算。而实际情况包含更多的细节,智能合约和数据的运算的确都是在第二层来做,但是 CKB 也可以通过自己的 VM 来运行代码,方便用户自定义数据验证的逻辑。更多内容大家可以参考 Jan 的演讲和 CKB 白皮书。

参考