行走笔记:Nervos 谢晗剑,抽象是当下区块链更需解决的问题
发布:中币网 时间:2021-11-02 00:00:00 加入收藏 打赏
本篇笔记来自万向主办的上海区块链周活动,是10月26日下午Nervos Network 架构师谢晗剑的主题演讲,原标题《区块链抽象与演进》。
以下,Enjoy:
不知道大家有没有看过这样一句话:
目前新的区块链所面临的最大挑战不是速度或者吞吐量,而是治理。
所谓的第二代区块链,新的区块链发展到今天,其实已经有五、六年的时间了。如果大家回顾之前的一些想法,能够发现当时的一些不那么正确的思路。在几年之前,大家想要做一个新的区块链,想的是如果我解决了区块链的性能问题,就能创造出新一代的系统,就可以打败以太坊,就可以怎么怎么样。但是这几年区块链行业发展下来,这个思路已经被证伪了。
我们能够看到有新的区块链出来,它们的性能也确实非常好。但是大家还是认为我们依然处于以太坊的时代,我们并没有进入下一个时代。并没有当年从BTC进入到以太坊的感觉。
虽然今天新的区块链已经有很好的性能,每秒可以处理几千笔交易。所以有人说,我们面临的最大挑战可能是治理。我其实也是同意的。治理确实是整个区块链行业面临的很大的问题,而且这个问题是一个open question,是没有答案的。
不同的区块链的社区,不同区块链的团队都在探讨怎样对开放性的、P2P的自治的项目去做治理。所以治理确实是一个很难的问题。但我想说,治理不是唯一的问题。
抽象也很重要。如果治理讨论的问题是,我们作为一个社区能够决定一个区块链平台是不是应该做某件事情的话,那么abstraction,区块链的抽象层次可能会决定什么东西可以被搬到台面上,被治理、被讨论。也就是说我们到底可以就一些什么样的问题去讨论,我们该做还是不该做。我会认为抽象也是新的区块链所面临的一个非常重要的挑战。
那什么是抽象?
Abstraction这个词本身就很抽象。上图是一个解释。抽象本身是一个很比较技术的词汇,这里有两个解释。我们只要关心第一个:所谓的抽象是一个过程。我们把特殊性从一个系统里去掉,然后从这个系统里创造出一般性、普遍性。
抽象是一个一般化的过程。我们通过去掉特殊的一些设计,把共性找出来,让这个系统可以变得更加一般化,可以适用于更多的场景。
这个解释可能还是很抽象。但大家只要记住其中的关键词:我们要去掉特殊性。我们要把特性从系统里去掉,在这个系统里找到更多共性的、一般性的东西,把它放到设计里面去创造一般性。
用一个不是那么区块链的例子来解释。大家可能有玩过游戏机,特别是戏厅里的大型街机。如果你了解这样的机器会知道,每一台机器只是对应一个游戏。对于街机来说,系统设计是从软件到硬件一体的设计。所有的设计都是围绕一个目的服务的,就是这一款游戏。
当我们需要去创造另一个新的游戏的时候,需要另外设计一台新的机器。所以我们可以看到游戏厅里摆了10台、20台机器,每一台机器是一个不同的游戏。
但是游戏行业发展到今天,最流行的东西已经不是街机了,而是像Xbox这样的通用的游戏平台。X box是一个一般化的设计。你可以为Xbox设计各种各样的游戏。玩家只要购买不同的游戏,就可以在一个系统上去运行、去玩。
从街机到X box就是一个一般化的过程。从另外一个角度上,X box是一个抽象层次更高的设计,它可以适用更多的场景,它里面为每一个特定游戏所打造的特殊的东西,很少很少,几乎没有。正是因为它没有那些特殊的细节,在这个平台上的开发者才能够去填补那些细节,才能够让这个平台适应各种各样的需求。
当我们去考察区块链行业的发展,考察BTC到ETH的进化的时候,其实也是这样的过程。如果大家还记得比特币想要做什么。我们从白皮书的标题里可以看到,BTC一开始的目的是想要实现一个点对点的支付系统,这是一个有非常明确的、单一目的的系统。所以它的系统设计也是围绕这个目的来做的。
在以太坊出现之前的时代——如果大家还有印象——全世界的人都看到了BITCOIN底层的技术是非常有价值的,不管叫它区块链也好,还是叫分布式账本也好。当我们想要用这个技术来做另外事情的时候,你会做什么?你能做的只有Fork BITCOIN的代码,而不是在BITCOIN这个平台之上去做什么事情。
所以在以太坊之前,利用区块链技术的方式,是不停的创造一个又一个新的区块链的项目。但是以太坊的出现就改变了这一切。以太坊不需要这么麻烦,可以把BITCOIN变成一个更加一般化的,或者说把区块链变成一个更加一般化的系统。
以太坊是找到了那些利用区块链技术的应用,它们需求的共性。通过创造一个平台,把只为支付服务的一些特殊的设计去掉。但是要把为各种各样的场景,应对应用需求的共性需求找出来。会为共性的需求去设计一个平台。所以以太坊有虚拟机,有它的运行环境。在以太坊上我们可以去构造各种各样的不同的应用。无论是支付,借贷还是游戏。
从这个角度看,从BITCOIN到以太坊是一个一般化的过程。换句话说:以太坊是一个抽象层次更高的系统。就像X box之于街机一样。
如果沿着这个思路去考察,我们很容易可以想到,我们要怎么样做的更好。如果我们真的要做出一个和现在这一代区块链不一样的区块链,下一代应该是什么样子?它可能不是性能更好,它应该是抽象层次更高。
那我们要怎样把一个系统变得抽象层次更高呢?
回忆一下对“抽象”的定义。我们要找到里面特殊的设计、特殊的细节。如果它不是共性的,我们就把它砍掉。然后想办法把它变成一个更加一般化的设计。
在今天的区块链系统里有哪些是特殊的设计呢?我们找到了几个方面和大家分享一下:
1、特定的账户体系
区块链是人和资产交互的一个系统。这里有人、有用户,就要为每个用户建立一个账户来代表他,或者建立一个身份来代表他。
在账户体系里,账户的标识怎样去验证这个账户是属于某个人的,这个账户内部的数据模型是怎样的?这些东西在今天的区块链系统里都是硬编码。是由区块链的设计者帮开发者、帮用户选定的。作为用户和开发者,并没有权利去替换它。
比如账户里的验证,不管是BTC还是ETH,都指定一旦想要往这个系统中发一笔请求,构造一个交易,都必须用一种特定的密码学算法来签名。这是一个强制性的设计。作为这个区块链的用户,你是没有办法去更改它的,是写死在这个系统里面的。
但是这样一个强制的设计会有很多很多的问题。最明显的是,它造成了区块链的用户门槛非常高。由于历史原因作出的特定的选择,造成了和今天在很多互联网场景里用到的密码学算法是不一样的。
比如手机芯片。现在每个手机里都有安全芯片,用安全芯片来保管私钥是最方便也是最安全的。但是安全芯片用的可能是R1或者RSA的算法,而不是区块链选择的K1。这样的不兼容就导致你必须使用一些像助记词等技术去重新建立一个账户体系,而不能利用现有的账户体系。
我们经常使用的账户体系还包括电子邮箱地址、人脸识别等各种生物特征识别等等很多。但是这些和区块链的账户体系是两分的,是不兼容的。这是特定的设计带来的第一个障碍。
2、特殊的密码学算法
比如在某一个区块链上想要开发一个应用,开发者如果不想用这个平台指定的、有限几种选择,可以怎么办?目前是啥也做不了。比如在以太坊里,密码学算法是写死在EVM虚拟机的特定的密码学算法。如果你不想用这些,也许可以重新实现一个你想要用的算法,但效率会非常低。因为EVM本身效率非常低。它在实际使用中是不可接受的,所以其实你也没得选择。
这会带来一个什么问题呢?大家知道,密码学算法其实是一种标准,不同国家的密码学算法标准是不一样的。美国有美密,中国有国密。但是区块链的选择不是其中任何一种标准。这意味着当区块链的应用想要走入到真实的场景里,它很难去兼容现有的这些标准。这其实是一个区块链技术推广的障碍。
3、运行时环境
现在几乎所有的区块链平台都是支持智能合约的。智能合约需要运行在一个恰当的环境里。这个环境可能包括虚拟机,可能包括状态模型。运行时环境本身也可以分为计算时的运行时,还有验证运行时。
所有左边的4个选项,每个各自都有很多不同的选择。比如虚拟机,可以用EVM,也可以用wozoom,也可以用JavaScript的虚拟机,会有很多的选择。但是今天我们看到每一个区块链系统的设计,都是由区块链的设计者帮开发者选定了一个特定的组合。开发者没有自由去选择不同的选项。
这会给开发者带来门槛。开发者为了进入区块链的体系,可能需要去学习一套完全不同于今天工作里用到的东西。这个限制也很大。当然不只是对开发者会存在学习成本。对于区块链的性能,安全性等各方面都是有影响的,我就不展开了。
总之,区块系统设计者给开发者和用户做了选择,你只要用这个区块链的系统,就不能再做其他的选择。
这三个方面现在区块链在抽象层次上比较大的问题。所以我们也希望去解决这些问题。
解决的方式说起来也很简单。我们要去对账户做抽象,我们要对密码学做抽象,我们要对运行时做抽象,把更多的选择给用户,给开发者。
那么我们是怎么做的呢?
1、抽象账户
在账户抽象这一层,得益于我们提出了一个新的数据模型、状态模型Cell Model。细节不展开了。有了账户抽象之后,能够实现的效果是,在抽象账户上的应用,可以被不同地方的用户用到。比如用户是通常的互联网用户,只有一个电子邮箱地址,可以直接使用区块链上的应用,而不需要下载一个新的钱包入口,不需要去设置私钥和助记词,而是直接用EMAIL账户就好了。
同样也可以利用手机芯片,安全方便的帮你建立一个账户。如果你的手机芯片和人脸识别是关联的话,可以直接用人脸识别来控制你的账户。
整个过程中,用户不需要去学习区块链的特殊东西,只要用现有的东西就可以了。
这一点在Nervos上已经有不少应用在做了,比如说像UniPass这样的应用,是基于EMAIL的去中心化的区块链账户系统;还有像DAS这样的应用,也是利用抽象账户的特性,使得无论互联网的用户,还是以太坊的用户,EOS的用户都可以直接操作它的应用。而不是只有Nervos的用户才可以操作这个应用。这是账户的抽象性带来的互操作性。
2、密码学的抽象
密码学的抽象我们认为很核心的点是,需要有一个非常高效的虚拟机才行。我们自己实现了一个高效的虚拟机CKB-VM,采用的是一个开放指令集,可以与允许开发者用C和Rust来实现密码学算法。
这样的好处不仅仅是非常高效,也可以使很多成熟的密码学算法的实现,可以直接被搬到Nervos上来运行。
大家知道,密码学算法的实现其实是非常困难的。如果新去实现一个密码学算法,其实很容易出错。我们如何去判断一个密码学算法的实现是不是安全的?最好的检验标准是它的成熟度,它的使用时间。使用的人越多,使用的时间越长,它就越安全。
能够直接移植C和Rust做密码学实现的好处是,我们不需要去重新实现一套。重新实现一套,抛开效率问题不谈,它的安全性都是值得考虑的。因为是新做的一个事情,里面可能有bug,这是需要时间去校正的。
所以通过一个高性能的VM,通过一个支持C和Rust的VM,我们可以高效的去复用现在大部分的密码学算法。因为现有的大部分的密码学算法就是用C和Rust去实现的。
3、运行时的抽象
这部分我就不详细解释了。我们想要实现的效果是,对于开发者来说,不是被迫去使用某一种语言做开发。而是可以使用不同的,或者是日常就已经很熟悉的语言来做开发。而且在写智能合约的时候,内部的内存布局、数据布局也不是谁帮你规定的,而是你可以有很灵活的选择。这些是我们想要实现的目标。
Nervos是在这样一个方向上用技术去改进区块链的。我们想要创造的可能不是一个速度更快的区块链,而是一个抽象层次更高的区块链。
当抽象层次能够做到更高之后,能够做的事情会更多。性能也好,吞吐量也好,会是抽象层次变高带来的副作用。因为当抽象层次更高之后,会把更多的事情移到链外,或者移到Layer 2去做。这样一个Layer 1与Layer 2的分离,计算与验证的分离,我们认为是抽象层次变化的副作用。所以我们应该去追求的是抽象层次的变化,而不是直接去追求性能的变化。
如果要用一个比喻,这个过程好像我们从X box回到了PC。Xbox虽然是一个一般化的通用的平台,但是它还有很多的限制。开发者可以做不同的游戏,但是不能改它的硬件。PC把这个限制也去掉了,在硬件层也做了更加一般化的处理。PC允许换显卡、换CPU、换硬盘、换内存、换主板,所以PC是一个更加一般化的系统,它是一个标准。
PC是一个抽象层次更高的系统,它能够做更多的事情,它能够满足用户更多的需求,它能够给开发者带来更多的方便。
以上是笔记的全部内容。
根据央行等部门发布“关于进一步防范和处置虚拟货币交易炒作风险的通知”,请读者严格遵守所在地区法律法规,不参与任何违法违规的投资行为。本文内容仅用于信息分享,不对任何经营与投资活动推广进行背书,请读者提高风险防范意识。
来源:
来源:中币网 https://www.zhongbi.net/news/blocknews/281950.html 声明:登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。 此文如侵犯到您的合法权益,请联系我们3111859717@qq.com,我们将第一时间处理。