5 月 23 日中午 12:00,ArcBlock 区块基石创始人兼 CEO 冒志鸿参加无涯社区直播访谈活动,为社区开发者和技术爱好者分享介绍“链网”与“去中心化身份(DID)”技术如何成为区块链应用开发的破局关键,以及 20 日正式发布的ABT 钱包

作者: 骡觅鸥、BlockPunk

社区: Ourea 无涯社区

cover

前言

从 2009 年至今,十年间,区块链整体的市值增长了数百万倍,而区块链的性能,却仅仅完成了不到百倍的增长,相比起来实在悬殊。区块链技术就像被《三体》中的智子锁死了一般,大家都在低性能、弱隐私、难易用的“低光速泥潭”中苦苦挣扎。

怀着对新兴技术的宽容,我们依然对区块链满怀希望。但脚踏实地的,从应用落地的角度出发,区块链应用的瓶颈是明显的。

2018 一年,出现了很多试图打破瓶颈的尝试,ArcBlock 便是其中的代表。本期我们请来了 ArcBlock 的创始人冒志鸿,带着刚发布的 DID 钱包,与我们分享链网思路下,区块链应用的破局的关键。

01

区块链的未来是链网

ArcBlock 的核心想法,区块链的未来是链网架构的。未来的区块链要有织“链”成“网”的能力,才能真正得到广泛使用。

1. 什么是链网架构?

所谓链网,就是多个互相连接的区块链形成的网络。

用交通系统来类比区块链世界,公链的思路,就是以一条能够贯穿全世界的大路,理想情况下这条路上的车,能够到达世界上任何一个地方。但如果所有人都在这条大路上驾驶,这条路一定会变得拥堵不堪,这就是公链的性能问题。

如何解决拥堵的问题?一种方法就是给汽车提速,原来跑 60 码现在跑 120 码(缩短出块时间),但这样容易出现安全隐患。另一种典型的想法就是扩容,扩宽原来的车道,但你不可能无休止的扩宽车道。

在现实生活中我们是如何解决交通问题的?现实生活的交通是很多道路与公共交通组成的综合网络。未来的信息社会也是如此,必然是链网架构的,可以根据不同的场景,使用不同特点的区块链,但必须得保证链间是互联互通的。

2. 为什么要使用链网架构?

目前最主流的区块链方案是公链,数数链网方案的项目,其实就三家,Cosmos、Polkadot 还有我们 ArcBlock,ArcBlock 的链网已经在 3 月份上线,跨链已经实现了,欢迎广大开发者来检阅。

可能是因为 EOS 的营销成功导致,从业者普遍认为,必须做一条很大很强的公链,解决所有的问题。

但从现实逻辑的角度出发,公链的观点是存在悖论的:

- 世界上所有的问题,是不可能靠一两条链解决的。就算技术上能搞定,从现实出发,中国和美国至少不可能用同一条链的吧?

- 因为场景领域的不同,必然会出现多条不同的公链,因此它们的互联互通是个必然的结果。

这就是公链的悖论,他的愿景越有可能实现,就越需要跨链互通的链网。

举个例子,针对银行的去中心化金融体系,安全性是放在第一位的,性能的要求就不高了。但是如果是一个去中心化的通讯软件,就已经需要很高的性能,能承载非常多的节点使用,而它对安全性的需求,就没有金融体系那么高了。但我们可能在通讯过程中会进行转账等操作,所以这两个链之间必须是打通的。

因此,根据需求各取所需,多链共存,再利用跨链技术,织“链”成“网”,这才是区块链的未来。

DID 是应用的关键

DID(Decentralized ID),即为分布式身份体系,一直是我们非常重视的一项去中心化技术,最近 ArcBlock 发布的钱包就主要搭载了 DID 功能。

1. 为什么使用区块链实现 DID?

去中心化 ID 这个技术,本身不属于区块链的范畴,但它却和区块链有着非常紧密的联系。实际上,一个用户能自主创建管理的 ID,是远早于区块链的一个去中心化构想。

在基于区块链技术构建 DID 之前,就已经出现了多个解决方案。搞技术的朋友们可能知道过去的 OpenID 技术。但过去的 DID 技术都没有取得成效,有一个永远绕不开的点————没有区块链的时候,任何一种 DID 技术,都需要一个“认证中心“。但一旦到达需要认证中心的时候,就会存在不够去中心化的情况。这是与初衷相悖的,因为涉及到中心的认证,不仅存在隐私和安全问题,多个主体间的 DID 也是互相隔断的。

我们常常讨论一个系统究竟是去中心化还是中心化,其实你可以从不同的角度来看,程度是不同的。比特币系统本身是去中心化运行的,这一点大家没有争议。而正是因为比特币去中心化的特点,全世界就只有一个比特币的共识,从这个角度来看,它又是非常中心化的。

这就恰恰解决了 DID 最大的问题。如果使用区块链技术建立起一个 DID 系统,随着去中心共识的加深,就可以 实现唯一的,人人皆可信的身份系统 ,而这个系统它本身的运作和维护,是非常去中心化的。这就是基于区块链技术实现 DID 的基础。

2. DID 在区块链上意味着什么?

我们一致认为,DID 是个非常重要的事情,ArcBlock 搭建链网体系时,就把去中心化 ID 作为一个非常重要的部件,从底层进行了支持。

这就意味着,在 ArcBlock 的链网中,任何一个身份证明,都是去中心化的。这里的 ID 不仅仅只是一个账户的身份,链网中的每一个账户、每一个节点、每一个服务,乃至使用 DAPP 过程中的,甚至是未来的上链的物联网设备,都可以使用 DID。

这就意味着,在 ArcBlock 的链网体系中,每一个交易的账户,不仅仅是一个没有内容意义的随机地址,同时也是一个 DID,这大大降低了使用门槛。如果当你发某个 DAPP 时,这个应用需要有证明自己的唯一可信性的证据,证明它真的具备它描述的哪些功能和属性,这个证明就可以使用 DID 实现。包括你在使用某个特定服务时,需要创建新的身份时,我们传统的解决方案时单独在中心服务器上注册,这样既不安全,也会因为账户过多难以管理,而在这里,我们就可以针对每一个应用创建一个 DID,快捷方便的使用。

DID 技术,降低了区块链整体的使用门槛,提升了很多的用户体验,这对大范围应用是非常关键的。

迅捷开发,ArcBlock 的区块链应用架构

02

上图是区块链的应用和互联网的应用的比较,可以看出来两者其实有非常高的相似性,区块链的应用的架构并没有大家想象的那么复杂。

我一直认为,区块链本身是计算机科学发展到一定程度的必然的结果,没有什么非常难理的地方。只不过在过去的时间里,整个业界把区块链搞得很神秘,创造了各种莫名其妙的名词和概念,创造了认知障碍,最终大家好像都不知道该区块链到底是什么样子。

1. 传统互联网的应用架构

我们来回顾一下典型的 WEB 应用的系统,这是互联网时代最成功的一种应用的方式,应用是基于互联网搭建的,互联网有标准的 TCP/IP 协议,因此各种各样的应用可以连接在一起,形成现在这样庞大的网络。这些 WEB 应用有一个特点,很多都会用到标准的 WEB 应用节点,比较典型比如 Apache、Nginx。

WEB 服务器它的特点是什么?首先可跨平台部署,Apache、Nginx 既可以跑在 windows 上,也可以跑在 Unix 的不同版本上。其次服务器可以是你自己架设的机器,也可以建立在各种云服务上。一旦建立了标准化的服务器,对用户来说使用起来没有差别,我们所用的站点服务,都是这个基础之上建立的。

直接基于服务器来做的话有一定的复杂性,所以大家本着不重复造轮子的想法,建立了一堆应用框架。这些框架都是为了让开发者能更简单的开发应用,好的框架是能解放开发者的,让大家能更专注于自己要做的事情。

所以在今天你要想开发一个 WEB 应用,相对来讲就比较简单了。正是因为能比较容易的进行开发,才造就了今天的整个互联网生态的巨大的繁荣。

2. ArcBlock 的区块链应用架构

在 ArcBlock 的链网世界里面是什么样子呢?上面右边的图里,我们设想应用整体是基于区块链网络的,而不是单独哪一条公链。在这个区块链网络里,ArcBlock 提供的就是 ABT Network 的标准协议,如果还有其他的链网架构的公司,也可以连接上它的链网协议,比如 Cosmos Hub,共同组合成为应用的最底层。

在这个区块链网络之上,需要建立一个非常标准的部件,称为区块链节点。ArcBlock 提供了 ABT Node,它对应是 WEB 应用里 Apach、Nginx 服务器这类的东西。ABT Node 要成为一个标准件,这个标准件可以部署在不同的硬件上。可以是云服务上,也可以是在自建矿机上,一旦部署好 ABT Node 的节点,在节点之上看来都是没有差别的,标准化的。

在这之上,ArcBlock 还提供了一个区块链的应用框架,让开发者更简单的使用区块链节点的特性与功能,这就不需要自己造轮子了,从底层到上层的东西已经给开发者搞定了。

有了这些相对清晰的架构,我相信在不久的未来,区块链的开发不会再那么神秘。未来的区块链开发者,可以使用自己熟悉的框架,使用自己熟悉标准化区块链节点,快速的搭建自己 DAPP,甚至是一整条写入逻辑的区块链。 同时这些区块链可以非常容易的互联互通。

这就减少了很多的学习成本,让大家术业有专攻,ArcBlock 来专注于底层的技术和框架的实现,让广大的开发者,更好的专注于商业与应用。

3. 未来的展望

互联网刚开始出现的时候,只是电信网上的一个增值业务,但在今天来看,互联网已经是一个比电信网更大更重要的这样网络了。

今天看起来,区块链应用还只是互联网上一种 P2P 类型的新协议,但是我们相信,区块链有一个相当大的未来,未来的区块链网络可能与现在的互联网一样庞大,甚至是远超互联网的体量。

03

社区问答

问:注意到你们钱包里可以添加多个“个人信息”, 我理解相当于可以有多个马甲,能说下多个马甲的使用场景吗? 不同的马甲除了名称不同还有什么其他不同的内容吗?

老冒: 这个问题非常好。DID 技术虽然比较新,但理解起来不难,DID 的身份是由使用者自主维护的,更接近于现实生活中的社交身份。

身份不赐予:在现实生活中,我作为一个人,是不需要其他人来承认,更不需要任何一个人来赐予,是生来就有的。这就是所谓的天赋人权,一个人生下来就获取拥有了自己的身份。

但如果在传统互联网的系统里,想获得一个身份,就必须去申请,把你的信息上传后,系统才会生成一个账户,这个账户在服务器上存着,实际上是借给你用的。而在去中心化的自主 ID 系统里,不需要向任何人申请就可以获得一个身份 ID。

一人千面:在 ABT Walle 钱包里,大家其实是可以添加多个不同的个人信息,这里体现出了在 DID 技术在设计上非常重要的一个思想,那就是支持“一人千面”的多身份。

DID 更像现实生活中我们的身份,每一个人都可以有多个不同身份。工作上的,伦理上的,生活上的等等。并且在不同的场景之下,与不同人打交道的时候,我们可以让自己呈现出不同的身份。

在传统互联网上虽然可以创建多个马甲,但创建马甲的自由程度很低。比如在使用微信的时候,你对微信里所有好友呈现的,都只是一个相同的 ID,虽然你能通过设置隐私来选择新的展示身份,但是用起来是非常繁琐的。很多时候想把工作和生活的微信号分开就非常麻烦,唯一的办法就是创建一大堆小号,这样使用和管理起来非常的麻烦。

在 DID 的设计里,把这样不同身份需要在不同的场合使用的需求,从设计上就实现了。举个例子,一个真正的 DID 系统,即使使用同一个账户,去访问不同的应用的时候,或者当你和不同的人进行交流的时候,DID 会立刻产生出一个专门在这个场景下使用的唯一 ID。

从使用 DAPP 的角度来说,ABT Walle 可以让你自主的去编辑身份,并决定不同场景下分别使用什么样的身份。要注意的是,即使你使用同一个身份,在访问不同应用时,你的每一个身份 ID 都是唯一且不同的。举个例子,里创建的 3 个身份卡片,当你去访问十个不同的应用时,就会产生十个不同的 ID,而这些 ID 是不需要里独自管的,只用维护里的身份信息就好。

问:关于 DID,其实现在已有不少链也支持高级的账户功能了,比如 EOS 的 action 和 owner 账户。DID 的多身份 ID 比起这些,优点在哪里?对开发者来说,意义在哪里?

老冒: 从 ID 设计的角度,我觉得 EOS 的账户体系是一种巨大的倒退,比起最初的比特币来讲,EOS 基本上是按照互联网注册账户那套体系来的。

大家都知道,在比特币、以太坊这些“真正的”区块链所设计的思路里,每个账户都是一个自主的账户。你不需要向任何一个网络上的节点去申请账户,你只要运行区块链给出的算法,就可以直接创建出账户。这个账户只要创建过,无论你声明与否,都是立刻生效的,而不用等待任何人给你批准。

EOS 创建账户必须向超级节点申请内存空间,这在设计上基本是回到了互联网注册体系,所以说是巨大的倒退。

如果按照 W3C 对 DID 的定义,它一定是自主的。身份不是靠任何人给你赐予的,身份就是自我证明的。

所以如何判断一个系统是不是一个真正的 DID?其实最简单的方法,就是获得 ID 的时候,需不需要申请,需要申请的一定不是 DID。

DID 提供了更好的隐私,能更加的符合我们的使用需求,但相比 ID 来说更复杂更难实现,需要的性能更高。因此早期的计算机都会用简化的注册模型。而随着计算能力的高速发展,性能足够了,加上有了区块链技术,去中心化的 DID 才得以实现。

问:看到介绍说 ABT 钱包还可以充当验证人, 这一点不太理解, 它是一个完整的节点能够运算? 还是调用链上的 API 做相关计算?

老冒: 非常的专业的问题!没错,一个好的去中心化的钱包,应该仅效忠于这个钱包的主人。

钱包不仅仅是管理资产,还必须能够帮助钱包的主人,随时随地的进行验证。

这个验证不难理解,大家想一下,一个好的浏览器也是一个非常典型的,去中心化的应用。浏览器并不依靠服务器运行,给它任何一个网址,都能帮你去浏览。比如访问 https 的站点时,浏览器会在背后帮你做一连串的验证,来保证你的上网安全。

那么在 ABT 的钱包里,也需要干类似的事情。举个例子,比如说用 ABT 钱包接受了别人转卖给你的、一张基于区块链实现的电子电影票。当你接受这张电影票的过程中,钱包首先会使用密码学的方法来验证,这是不是一张真正的电影票,这张电影票的签名是不是正确,电影票里的内容是不是和交易中你说的属实等等。

这些计算可能涉及到是一些密码学的验证,也可能会涉及到在各个不同链上去进行验证。一个比较独立的、去中心化的钱包,对用户在将来使用整个区块链网络,是非常重要的,钱包相当于验证人的作用,它随时随地的帮你去扫描,看看你的资产、你的交易是否合法。

钱包的节点不能简单等同于区块链上一个节点,甚至不和轻节点划等号。应该将它理解成链的安全代理人,它熟识很多协议,可以去和底层不同结构的链进行沟通,并忠实的对你的每一个操作,做一系列的检查工作。

问:现在有很多项目在做跨链,比较熟悉的是最近的 Cosmos 和 Polkadot,你们的优势或者说定位是什么?

老冒: Cosmos 和 Polkadot 都是非常值得尊敬的项目。说实在的,真正在链网这个架构下的项目,也就它们俩我们 ArcBlock 这三个项目了。

从架构设计的角度来讲,Cosmos 和 ArcBlock 思路上是最接近的,而 Polkadot 更像以太坊 2.0,像以太坊的一个分片技术。

04

关于这三个项目设计思路的利弊,我就不王婆卖瓜自卖自夸了。但有一个设计理念,我觉得还是非常值得来讲的。ArcBlockt 在整个设计中,我们有一个第一指导原则,是从 Unix 系统的原则里面学到的,“Do one thing and do it well”,我们就做一个简单的事情,并且要把这个事情做得足够的好。

所以在 ArcBlock 链网的架构里,我们为了让这件事情变得简单,让它简单的使用,简单的开发,我愿意为了这个“简单”做一定程度的牺牲。我们是非常注重开发者体验的,大家可以看到我们在开发者不同的 SDK 的支持之上,是做的最全面的。我们的应用开发框架,也是一个全栈的框架,你用了这样一个框架,从前端到后端都可以使用。而不是说我们造了一堆轮子给你自己组装。

所以我觉得如果开发者朋友们像对这三个项目进行比较,有个简单的办法,只需要获取每一个项目的 SDK,大致的看一下文档,然后按照文档开发实践一下,你就会迅速的发现区别。你会发现 ArcBlock 非常的容易上手。

举个例子,Polkadot 在亮相介绍的时候,他告诉大家 15 分钟就能发出来一条链,但实际演示中大概花了 40 分钟,才把环境搭建起来,又花了 15 分钟创建一个类似“Hello World”的链出来。而同样的事情让 ArcBlock 来做的话,差不多十分钟就可以解决。总体来说,我们是非常注重于开发者体验的。

问:我们今天登陆很多应用基本都是通过微信、微博或者 GitHub、Google 一键登录的, 您觉得 ABT 的 DID 和他们最大的不同是什么?

老冒: 今天我们所能见到的账户体系,其实有三种典型的模式:

  1. 互联网传统账户模式,必须去系统中去申请一个账号,然后使用 ID 和密码来使用。前面也有说到。这种模式迅速的出现了一个问题:大家的账户实在太多了。

  2. 第二种就是这位朋友讲的一键登录的模式,它与前一种模式的区别在于,由某一个 ID 系统的提供者,在你的授权下,把你的数据提供给第三方。但仍然需要你把数据上传给这样的一个 ID 提供者的中心系统。这种情况下,问题常出在 ID 数据的提供方这里,他会对第三方软件作出限制,让你不能自由的使用一键登录,同时还有隐私泄漏的风险。

  3. 第三种就是 DID 了。DID 希望让能传统账户模式的优秀用户体验,再实现非常好的易用性,并保护用户的隐私,首先得让用户的身份相关的信息完全都属于用户自己,而不再由任何一个中间人控制。 即使是 DID 的技术供应商,也不拥有用户的数据资料,更不能完全的控制用户数据的使用。相当于是把用户的身份和数据还给了用户。

问:ABT 钱包以后会支持哪些 token 的管理?有什么特别方便的地方可以介绍下?

老冒: ABT 的钱包支持一个叫 Open Wallet Protocol 的开放钱包协议,任何支持开放钱包协议的资产,就可以被 ABT 钱包去管理。这不是由开发者决定的,也不需要任何一个人去批准,钱包的拥有者可以自由的添加。

任何基于 ArcBlock 发出来的数字货币和数字资产,毫无疑问钱包是支持的。任何使用了 ArcBlock 的开放链访问协议,从而能进行映射的第三方链也是支持的。就比如说现在我们已经支持了原生比特币和以太坊的映射,这就意味着 BTC、ETH 以及 ETH 上发行的各种 ERC20 资产,都是可以被 ABT 钱包管理的。

问:如果我记得所有相关的密码, 但是没有做数据备份导出, 那么我再换一台新手机的时候用密码重新恢复, 有哪些数据会丢失?

老冒: 简单来讲,如果你没有进行数据备份,但是仍然记恢复码和初始密码,那么在这种情况之下,所有的链上数据都不会丢失,但是所有的不在链上的数据都没有了。

那么链上数据不会丢失,是不是意味着你利用恢复码找回后,马上就能看见里的所有资产,所有记录?

这是不一定,DID 的原理就是这样子的。你拥有一个主账号,代表着你最基本的自我身份,每当你去访问不同应用时,DID 系统会根据算法,给你创建一个子身份的。那么问题来了,当我知道我的主账号时,我究竟有多少子账户存在呢?

这其实就涉及到隐私的问题了,因为每一个子账号就相当于你使用过某一服务的证据,因此没有任何一个地方会为你做记录的,一但记录就会存在用户行为隐私泄漏的问题,子账户之间的关系也会暴露。

但你的资产都是记录在链上的,还躺在它原有的地方,并不会消失。只要里还记得自己拥有那些资产,就可以添加过后,轻松找回资产。

在后续的版本之中会在数据备份方面做出更好的这种改进,来实现去中心化的,自动的数据备份,钱包会变得更加好用。

问:数字身份管理,总会联想到现实社会,公安局身份证的发放, 假以时日未来会有越来越多的应用有去中心化数字身份认证的需求, 现在问题是, 这个最终的需求会不会变成一个社会的基础设施? 如果真是基础设施, 会不会被政府接管?政府应该不会容许有另一个组织来管几十亿人的身份这么敏感的事情吧!

老冒: 其实在 DID 包含两个部分,ID 本身是一部分,ID 之上的可验证声明也是一个非常重要的部分。

大家都知道身份证吧!我们讲过,现实生活中我们的个人身份比较像 DID,生下来就是客观上存在的,并且是由你自行维护的。那么身份证、护照这些身份证件属于什么呢?

身份证、护照都属于 ID 上的可验证声明。 什么时候我们才需要一本护照?当我们要出国的时候。护照意味我们的政府给了我们一个背书,证明我这个人没犯过罪,是诚实可信的,不会给别国带来麻烦。为了方便验证,政府就发了一个证件给你,这个证件叫做护照。

没错吧?所以这些证件,都是政府机构发给你,可以用来验证某些特性的证明材料。可验证声明就是指一些机构或个人,从你的 ID 里发出一个可以被验证的数据资料。包括说你的身份证、学历证明、资格证书等等,其实都是可以拿到链上实现的。你提供了可验证的声明,有的服务才会为你开启,就像你去银行办理业务,必须要带上身份证一样。

回答第二个疑问。DID 只是一套技术体系,并不是说谁提供用一个 DID 系统,这些身份资料就归谁了。这也是 DID 跟传统互联网 ID 的一个巨大的区别。在传统互联网里,用 ID 登录后发帖,中心化的管理员想封掉你的 ID 都是随时可以的,你没有任何办法,因为这个 ID 本质是他借给你使用的。

但 DID 不一样,它是一套体系。即使是 ArcBlock 提供了 DID 的身份服务,我们本身是不拥有任何人的数据的,仅仅是遵循一套方法实现了这个身份系统而已。而反而从安全和效率的角度来讲,我觉得将来整个社会,是更容易接纳 DID 的身份框架的,反而传统的互联网 ID 框架存在问题了。

我期望,将来政府的公民身份的认证体系里,能逐渐拥抱 DID,走到这种技术的思路上来,从而保护大家的隐私不受侵犯。因为我们都知道,很多的传统互联网巨头,都有靠卖我们的数据赚过钱。想要彻底解决隐私泄露的问题,DID 能提供一个很好的开始,但还是需要完善的法律来保障。

个人自主 ID 这种技术,政府是持比较欢迎态度的。比如说像美国的国土安全部,也就是给大家发放签证部门。它现在的一些方案里面,就有考虑采用区块链 实现的 DID 技术,来管理签证的发放。所以我相信,在将来这些技术最终会被政府接受,并不冲突。

05

原文链接: 无涯价值分享 19 期:ArcBlock 冒志鸿 | 区块链应用破局的关键——“链网+DID”