区块链什么东西,区块链什么时候有的

  

     

  

  区块链所面临的最大挑战是什么?   

  

  我不知道你是否读过这句话,这句话的意思是,今天新区块链面临的最大挑战不是“速度”和“吞吐量”,而是“治理”。   

  

  所谓的第二代区块链已经开发了五六年了。如果回顾一下之前的一些想法,可以看出当时的想法可能并不那么正确。   

  

  几年前,当人们想要制作一个新的区块链时,他们会考虑这样的事情,“如果我解决了区块链的性能问题,我会不会创建一个新一代系统,然后我就可以打败以太坊”。   

  

  然而,近年来区块链行业的发展已经证伪了这种想法,因为虽然我们已经见证了一个新区块链的诞生,它的性能确实不错,但人们普遍认为,我们仍然处于以太坊时代,并没有进入下一个时代。   

  

  有人说我们面临的最大挑战是“治理”,我同意这个观点。“治理”的确是区块链工业目前面临的一个巨大问题,是一个没有答案的“开放性问题”。不同的区块链社区和团队正在讨论如何治理这样一个开放的P2P自治项目,这真的很难。   

  

  但这不是唯一的问题。抽象也很重要。   

  

  如果“治理”所讨论的问题是我们作为一个社区可以决定区块链平台是否应该做一些事情,那么区块链的“抽象”层次就是决定什么可以搬到桌子上来治理和讨论。   

  

  因此,我认为“抽象”对新区块链来说也是一个非常重要的挑战。   

  

  什么是「抽象」?   

  

  这个词本身很抽象。   

  

  抽象本身就是一个比较技术的词,有两种解释。我们只需要关心第一个:所谓抽象就是一个过程,就是从一个系统中去除特殊性,然后从系统中创造出一般性和普遍性。   

  

  这是一个大致的过程。通过摆脱特殊设计,找出共性,系统变得更加通用,可以应用到更多的场景。   

  

  这个解释可能还是很抽象的,但我们只需要记住,关键词是去除“特殊性”,从系统中去除“特殊性”,找到更多“一般性”的东西放在设计中,创造“一般性”。   

  

  用一个不那么区块链的例子来解释它。   

  

  你可能玩过电子游戏,至少我小时候在街机里玩过所谓的街机。如果你了解这些机器,你就会知道每台机器只对应一个游戏。这其实是一个从软件到硬件的系统设计,所有的设计都服务于一个目的,这款游戏就是它。   

  

  当我们需要创建一个新的游戏时,我需要设计一个新的机器,所以游戏厅里有几十个机器,每个机器都加载了不同的游戏。   

  

  游戏行业发展到今天,街机已经不再流行,更多的是XBox这样的通用游戏平台。   

  

  XBox是通用设计。你可以为XBox设计各种游戏,然后在这个系统上运行。   

  

  所以从街机到XBox是一个大致的过程。另一方面,XBox是一个抽象程度更高的设计,可以应用到更多的场景。很少有为每个特定游戏创造的特别的东西,几乎没有。   

  

  因为它没有那些特殊的细节,这个平台上的开发者可以填充细节,使平台适应各种需求。   

  

  当我们考察区块链工业、比特币和以太坊的发展时,这是同样的过程。   

  

  「Bitcoin」想做什么?   

  

  从白皮书中可以看出,比特币最初的目的是实现一个点对点的支付系统,有着非常明确的单一目的,所以它的系统设计也是围绕这个目的进行的。   

  

  以太坊出现之前,比特币的底层是很有价值的,但是我们能做的是专注〖比特币〗代码,而不是用“比特币”代码做任何事情。   

  

  但是以太坊的出现改变了这一切。它将比特币和区块链变成了一个更通用的系统。它去掉了“仅用于支付服务”的特殊设计,找到了那些利用区块链技术的应用需求的共性,创建了一个平台。所以以太坊有虚拟机和运行环境,可以在以太坊上构建各种应用,比如支付、借贷、游戏等等。   

  

  从比特币到以太坊是一个大致的过程。   

  

  换句话说,以太坊比比特币更抽象,就像XBox比街机更抽象一样。   

  

  沿着这条思路审视,我们很容易想到如何做得更好。如果我们真的想创造一个与现在不同的区块链,那么下一代应该是什么样子呢?   

  

  可能不是更好的性能,而是更高的抽象。   

  

  怎样才能让系统更抽象?   

  

  刚才记忆的定义是找出里面特殊的设计和细节,去掉非一般的东西,变成更一般的设计。   

  

  今天的区块链系统有什么特别的设计?我找了几个方面跟大家分享一下:   

  

  (1)特定账户体系   

  

  区块链是一个人与资产交互的系统。既然有了人和用户,就要为每个用户建立一个账号和一个身份来代表它。如何验证账号属于某人?账户的内部数据模型是什么?这些东西在今天的区块链系统中是硬编码的,由区块链的设计师为开发者和用户选择。   

作为用户、开发者,你并没有权利替换它。

  

以账户里的验证来举例,不管是 Bitcoin 还是 Ethereum,都是系统指定的,一旦你想往系统中发一笔请求、构造交易,你就必须要用特定的密码学算法来签名,这是强制性的设计。作为区块链用户,你没有办法更改它,它是写死在系统里的。

  

但是,这样一个强制的设计其实会产生很多问题,其中最明显的就是导致区块链用户门槛非常高。由于历史原因做出的特定选择,和今天在很多互联网场景里用到的密码学算法是不一样的。比如说,现在每个手机里都有安全芯片,用安全芯片来保管私钥是最方便、最安全的,但安全芯片可能用的是 R1 或RSA 算法,而不是区块链选择的加密算法,这就意味着你必须使用助记词技术重新建立账户体系,而不能利用现有的账户体系。

  

其他账户体系还有哪些?邮箱、人脸识别、生物特征识别等等,其实有很多,但是这些跟区块链的账户体系不兼容,这是特定设计带来的障碍。

  

(2)特殊的密码学算法

  


  

比如说,我想在某个区块链上开发一款应用,但又不想用这个平台指定的几个有限选择,怎么办?毫无办法。

  

在以太坊里,有一种Precompiles是写在 EVM 虚拟机里的特定密码学算法,如果你不想用这个算法,你也许可以用 Solidity 重新实现一个,但效率非常低,因为 EVM 本身效率也非常低。

  

这会带来什么问题呢?密码学算法其实是一种标准,不同国家的密码学算法标准不一样,美国有美密,中国有国密,但区块链的选择不是任何一种标准。这意味着如果区块链应用想要走入真实场景,很难兼容现有的标准,这其实是区块链技术推广的障碍。

  

(3)运行时环境

  

现在,几乎所有的区块链平台都支持智能合约,智能合约需要运行在恰当的环境里,包括虚拟机、状态模型等,而运行时环境本身也可以分为计算时、运行时、验证运行时等等,各自都有很多不同的选择。比如说,虚拟机可以用 EVM,也可以用 RISC-V 虚拟机等。但目前的区块链设计都是由区块链设计者帮开发者选定了特定的组合,开发者无法自由选择不同的选项,这会给开发者带来门槛。开发者为了进入区块链体系,可能需要学习一套完全不同于今天工作里用到的东西,这也是个极大的限制。

  

此外,区块链性能、安全等方面也会受到影响。总而言之,区块链系统给你做了选择,你一旦使用了区块链系统,就别无他选。

  

以上三个方面是我现在能够看到的区块链在抽象层次上存在的问题,我们也希望解决这些问题。解决方式说起来也很简单,既然找到了问题,就要对账户做抽象,对密码学做抽象,对运行时做抽象,给用户和开发者更多选择。

  

我们是怎么做的呢?在账户抽象一层,Nervos 推出了新的数据账号模型――Cell model。有了账号抽象之后,能够实现什么样的效果呢?在抽象账户上的应用就可以被不同地方的用户用到。

  

比如说,你只是普通的互联网用户,只有邮箱,那么就可以直接使用区块链上的应用,用邮箱作为账户,而无需下载新的钱包入口,也不需要设置私钥、助记词。

  

我们同样也可以利用手机的安全芯片,安全方便地帮你建立一个账户。如果你的手机芯片和人脸识别是关联的,你可以直接用人脸识别控制账户,在此过程中,你无需额外学习任何区块链技能。

  

Nervos 上已经有不少应用在这样做了,Unipass就是一个基于e-mail的去中心化区块链账户系统,DAS也利用了抽象账户的特性,使得互联网用户、以太坊用户、EOS用户都可以直接操作应用。

  

如何做密码学抽象?

  

密码学抽象的核心在于极为高效的虚拟机。我们自己实现的高效虚拟机是CKB-VM,它采用的是开放指令级RISC-V,得益于RISC-V指令级的特性,CKB-VM允许开发者用C和Rust来实现密码学算法,这不仅高效,而且很多成熟的密码学算法实现可以直接被搬到Nervos上来运行。

  

密码学算法的实现非常困难,如果我们先去实现密码学算法,那么这样会很容易出错。如何判断密码学算法的实现是否安全?最好的检验标准就是它的成熟度和使用时间,使用的人越多,使用的时间越长,就越安全。

  

能够直接移植C和Rust做的密码学的优势在于不需要重新实现一套,如果用Solidity重新实现一套,那么安全性就可能存在问题,因为它是新做的事情,里面可能会有bug,需要时间矫正。

  

通过高性能的EVM,通过支持C和Rust的EVM,可以高效复用现在大部分的密码学算法,因为现在大部分现有的密码学算法就是用C和Rust来实现的。

  

运行时的抽象怎么做?

  

我们想要实现的目标就是开发者不会被迫去使用某一种语言做开发,而是可以使用日常就已经很熟悉的语言,无论是JAVAscript、Ruby、Rust、C等,都可以被用来做开发;而且在写智能合约时,智能合约内部的内存布局、数据布局也并不是规定好的,而是支持灵活的选择。

  

Nervos就是在这样的方向上改进区块链的,我们想要创造的可能不是速度更快的区块链,而是抽象层次更高的区块链;当抽象层次能够做到更高之后,性能、吞吐量等等也会随之提升。

  

当抽象层次更高之后,我们就会把更多事情移到链外,就比如移到Layer 2 去做。Layer 1与Layer 2的分离,或者说计算与验证的分离是抽象变化层次的衍生品,所以我们应该追求的是抽象层次的变化,而不是直接追求性能的变化。

  

就好像我们从XBox变成了PC,XBox虽然是一般化的通用平台,但它还是有诸多限制,我们可以给它做不同的游戏,但是不能改它的硬件。PC把这个限制也去掉了,在硬件层也做了更加一般化的处理,PC允许人们换显卡、CPU、内存、主板、硬盘,所以PC是更加一般化的系统,它是一个标准。从这个角度来讲,PC是比XBox抽象层次更高的系统,能够满足用户更多的需求,给开发者带来更多便利。

相关文章