万字长文深度解析 Polkadot 架构(下篇)

本文来自于一块链习资深讲师刘毅在上周的《区块链技术公开课100讲》第24讲中,围绕《Polkadot架构解析——下一代DApp开发技术评述》主题,和大家深入探讨了 DApp 开发的现状、公链的三种扩容思路、以太坊正朔——Serenity、Gavin Wood的新征程——Polkadot、殊途同归——Cosmos、DApp 开发比较、网络拓扑比较、辨析“跨链”、下一代 DApp 开发技术选择等 9 个方面的复盘内容。

刘毅:Random Capital合伙人,清华大学硕士,区块链和大数据技术专家。20年多种资本市场投资经验,比特币早期投资者。


Polkadot 架构

万字长文深度解析 Polkadot 架构(下篇)_第1张图片

接下来我们介绍 Polkadot 架构,这两张图片都来自于岳利鹏翻译的 Polkadot 白皮书中文版。

先看右边的大图,Polkadot 的基本网络结构是星型的,或者称为轮辐型。星型的中心是 Polkadot Relay 中继链,外围是众多的 Parachain 平行链。

再看左侧的小图,Polkadot 网络的参与者有四种角色:Validator 验证人、Nominator 提名人、Collator 收集人或者核对人,Fisherman 钓鱼人或者渔夫。

DApp 可以是部署在平行链上的智能合约,或者整个平行链就一个 DApp。用户在平行链发起交易,交易被收集人收集,打包成区块,交给一组验证人去验证。

这组验证人并不是来自平行链,而是来自中间链统一管理的验证人池,通过随机分组指定给平行链。每条平行链都有一个出口队列和一个入口队列。如果用户发起的是跨链交易,交易就会被放进出口队列。再被目标平行链的收集人放入其入口队列。

目标平行链的收集人执行交易,生成区块,由验证人组敲定。Polkadot 采用混合共识协议,出块协议的英文缩写是 BABE,小孩子;敲定协议的缩写是 GRANDPA,老爷爷。

刚才讲混合共识,有同学可能会问:出块快、敲定慢,那等待敲定的区块会不会越来越多?不会的,GRANDPA 每个轮次可以敲定多个区块,从而追上进度。所以小孩子是活泼好动、步履轻盈;老爷爷是大步流星、一言九鼎。一老一小相得益彰。

除了平行链,还有两类外围区块链接入中继链。一类是转接桥,它把现存的、不能直联的区块链接入中继链,例如以太坊和比特币等。从中继链的角度看,转接桥是一条平行链。

从以太坊或者比特币的角度看,转接桥是一条侧链。此外,为了让系统具有无限的可扩展性,还可以有二级中继链。不过二级中继目前还只是设想,没有具体的设计。

我们已经介绍了收集人和验证人在系统中的作用,那么提名人和渔夫是做什么的呢?提名人是 Polkadot 基础通证 DOT 的持有者,他希望质押 DOT 获得收益。但是要么是因为 DOT 数量少,要么是缺少运行维护验证人节点的专业技能。

因此系统提供了另一个参与途径,就是持币者选择他信任的验证人,把自己的 DOT 通过验证人来质押,分享验证人收益。这样做的好处是,提高整体质押比例,提升系统安全性,同时也使收益分配更加公平。关于 Polkadot 的经济模型,是个很复杂很有趣的话题,我们就不多说了。

刚刚介绍过分片架构的交易有效性问题,以及举报奖励的解决方案,所以渔夫的作用不难理解。他就是监控和举报非法交易,赚取奖金的角色。听起来挺简单,但是做起来极其复杂。

可能有些同学想象中的举报是这样的:给 web3 基金会发邮件:我发现有人打包了非法交易,证据见附件,盼复。过些天 web3 基金会回信:您的举报已被证实,作恶者已伏法,奖金将发到你的地址,非常感谢您对我们工作的支持。

但区块链上的举报完全不是这个样子。渔夫是个软件进程,它监控网络上的非法行为,一旦发现就会向区块链提交举报交易。举报交易也要经过共识过程,通过 2/3 以上验证人验证,打包进区块,惩罚和奖励也都是区块链交易。

整个过程是自动地、去中心化地执行。这里就有很多复杂问题,例如如何对渔夫提供激励。渔夫就像警察,你可能会认为那很简单,抓住一个坏人就发一笔奖金。

那么有一堆警察天天盯着网络,没人敢作恶,警察就一直拿不到奖金。警察有运营成本,要验证并存储大量的数据,没有收入就干不下去了。警察全改行了,坏人就会出现。那你可能会想,给警察发工资吧,底薪加提成。

好,那我可以声明自己做警察,领一份底薪。但是我根本不验证和存储交易数据,成本就是 0,底薪就是我的利润。等坏人出现的时候,我说抱歉哈,我没看到,或者说我硬盘恰好坏了,那么系统应该怎么惩罚我呢?

还有就是不能随便举报,系统处理举报需要成本,随便举报就成了可以粉尘攻击的漏洞。另外能否对举报交易进行举报,应该怎么处理等等。所以在去中心化环境中,举报机制很复杂。Polkadot 的渔夫工作机制,目前我还没看到具体的说明。

在 Polkadot 网络中,平行链各自承担交易执行、数据存储,同时平行链之间能够互操作,也就实现了分片的目标。因此我把 Polkadot 看成是分片扩容方案。可以跟 Serenity 初步比较一下。你会发现 Polkadot 比 Serenity 在技术上更复杂。

Serenity 的分片是同构,采用相同的共识协议,容量也整齐划一。就像是提供给 DApp 使用的标准集装箱,规格都一样,开发者选一个分片,把自己的 DApp 放进去就好了。

Polkadot 是 web3 骨干网,它不能也不应该要求平行链是整齐划一的。平行链可以自行决定使用什么共识协议、什么样的经济模型和治理模型,自己决定硬件和网络配置等等。简而言之平行链是自治的,Polkadot 可以看成是平行链的联盟或者联邦。

Polkadot 中继链要支持异构的平行链接入,进而实现互联互通,复杂度超过 Serenity 的信标链。这一技术复杂度带来的好处是,平行链开发的灵活性,无需千链一面,可以根据具体的需求和约束,设计开发最优的平行链。

殊途同归——Cosmos

万字长文深度解析 Polkadot 架构(下篇)_第2张图片

下面我们来介绍 Cosmos,从侧链开始谈起。看左上方的图,A 和B 是两条链互为侧链。也就是说,A 链包含 B 链的 SPV 轻客户端,从而 A 链能验证 B 链的交易。反过来 B 链也包含 A 链的 SPV 轻客户端,从而 B 链能验证 A 链的交易。

互为侧链的结果是,发行在 A 链和 B 链上的通证可以互转。如果从两条链扩展到多条链,A 和 B 变成 A/B/C/D/E/F,一种外推的想法是仍然沿用两两互为侧链的做法,就形成了左下方的结构。

但是这样做会到来很多问题,每条链都要内置其他所有链的轻客户端,同步其他所有链的区块头,这当然是很大的负担。而且每增加一条链,都需要在其他所有链上做修改。随着区块链数量的增加,复杂度以 n*(n-1)/2,指数型增长,这显然是不可行的。

解决的办法就是改成右上方图片显示的结构,中间放一个 Hub,Hub 本是也是区块链,它跟其他所有链都互为侧链。就是说,每条链上的通证都可以转到 Hub 上,然后通过 Hub 转到其他链上,网络互联的复杂度跟区块链数量是线性关系。

这就是 Cosmos 的做法,在 Cosmos 的定义里,接入 Hub 的链称为 Zone 分区。分区要接入 Hub 需要两个条件,第一是符合 Cosmos 标准协议,即IBC链间通信协议。第二是要求Zone具有即时最终性,以确保跨链的一致性。

而且 Cosmos 可以支持多个 Hub 的互联。对于现存的公链,可以通过协议适配接入 Cosmos Hub,Cosmos 把协议适配网关称为 Peg Zone 锚定分区。最终形成的结构就是右下方图片展示的样子。

我们从侧链出发推演 Cosmos 架构。但是回过头来看,Cosmos 分区各自承担交易执行、数据存储,同时分区之间还能够互操作,也实现了分片的目标。因此我也把 Cosmos 看成是分片扩容方案。

可能有人对会对这样分类不赞同。但是没有关系,Cosmos 就是 Cosmos,分类是为了更好地理解它。从不同角度理解和阐释,可以用不同的分类方法,没有绝对的对和错。

Cosmos Hub 以及其他用 Cosmos SDK 开发的分区都采用 Tentermint 共识协议,出块和敲定过程是合一的,只要出块,就是得到了 2/3 以上验证人的签名验证。这样做的好处是简洁快速,出块时间可以达到秒级甚至亚秒级,而且具有即时最终性。

但是在网络发生分区的情况下,Tentermint共识有可能暂停出块。Cosmos Hub 和分区都有各自的验证人组,不需要验证人动态随机分组。那么 Cosmos 如何保障跨链交易有效性呢?根据我的理解,Cosmos 回避了这个问题。

Hub 并不能验证交易有效性,只能验证存在性。如果某个分区被恶意验证人控制,那么用户在这个分区上的资产是不安全的,可能被盗取。但是这不应该看做是 Cosmos 的漏洞,而是它的设计选择。

Cosmos 经常被拿来跟 Polkadot 比较,但其实 Polkadot 与 Serenity 在架构上更为相似。前几天橙皮书的文章做了三个村庄的比喻,非常贴切。但是从 DApp 开发的角度,尤其是今年和明年的重量级 DApp 开发,主要会从 Polkadot 和 Cosmos 二选一。

从技术上说,Cosmos 要比 Polkadot 或者 Serenity 简单得多。我这里说的简单并非贬义,在满足需求的前提下,技术方案应该是越简单越好。那么 Cosmos 用相对简单的方案也实现了分片扩容的目的,不是很好吗?

确实很好,因此我也很看好 Cosmos,它会非常适合某些类型的 DApp。但是正如我们反复强调的,有所得,必有所失。Cosmos 选择了简洁,但在安全性上有所牺牲。PoS 区块链的安全等级是由总市值和质押比例决定。

Polkadot 上线之后,假设 Dot 总市值是10亿美元,其中一半质押在网络上,那么要对 Polkadot 主网进行双化攻击,理论上最少需要 1.67 亿美元,实际需要的会多得多。显然是一笔巨款,因此 Polkadot 网络非常安全,跨链交易有很高的安全保障。

Cosmos 主网上线之后,Atom 通证也会很高的市值,但是网络质押的

Atom,只保证 Cosmos Hub 的安全。分区和其他 Hub 会发行自己的通证来建立经济模型,获得安全保障。

但是分区通常是特定的去中心化应用,其应用规模和市值达不到 Cosmos/Polkadot 这样的大平台的等级。因此可以预期,Cosmos 分区的安全等级会低于 Cosmos Hub。

你在 Cosmos 上执行跨链交易。需要信任交易的发起分区,目标分区和 Hub,如果跨链交易中间经过多个 Hub,那么经过的每个 Hub 都要值得信任。

一方面是需要信任的区块链变多了,而且其中有些链的安全等级可能不高。所以说 Cosmos 没有做到信任最小化。安全水平降低了,但是降低之后够不够用?也许够也许不够,还是因人而异、因应用而异。

Cosmos 当然了解自身的短板,据说会在未来版本为分区提供安全保障。但是实现难度会很大。要为分区提供安全保障,需要大量的验证人,只能修改共识协议,把出块和敲定分开,当然还要处理验证人随机动态分组、交易有效性等问题。这一番改动下来,Cosmos 和 Polkadot 的复杂度也就差不多了。

对 DApp 的支持对比

万字长文深度解析 Polkadot 架构(下篇)_第3张图片

那么 Serenity、Polkadot 和 Cosmos 哪个更适合做 DApp 开发呢?我们来比较一下。

首先 DApp 开发方式,三个链都可以用智能合约。Polkadot 和 Cosmos 带来了新的 DApp 开发方式,就是开发特定应用的区块链。Cosmos 为应用链提供的工具是 Cosmos SDK,目前支持 Go 语言开发。Polkadot为应用链提供的工具是 Substrate,目前支持 Rust 语言开发。

Substrate 是完整的应用链开发工具,具备完整的应用链框架,Gavin Wood 演示了在一台全新的电脑上,15 分钟发布出一条应用链。另外,Substrate 所有模块都可以定制或者替换,功能强大而且非常灵活。

相比较而言,Cosmos SDK 要单薄一些,它主要提供 Tendermint 共识引擎、IBC 链接通信协议和通证等核心模块,大部分上层建筑需要自行开发。

关于性能,Serenity 每个分片大约是 100tps,仍然是优先处理 gas price 高的交易。Polkadot Hub 应该能达到上千 tps,平行链可以自己决定共识算法、硬件和网络,理论上说没有性能限制。Cosmos Hub 和绝大多数分区都采用 Tendermint,能够达到数千 tps。

关于互操作。Serenity 跟以太坊 1.0 是一样的,智能合约可以相互调用。Polkadot 平行链通过 Relay 与其他平行链互操作,通过 Bridge 与其他链互操作。

Cosmos 分区通过 Hub 可以互转通证,通过锚定分区与其他链互转通证。IBC 消息也数据字段,就像电子邮件的附件,通过扩展数据字段,分区之间也可以传递通证以外的数据。

接入方式 Serenity 跟以太坊 1.0 相同,开发者自行部署智能合约。Polkadot Relay 接入要拍卖插槽,质押数量不菲的 DOT。Cosmos 与 Polkadot  类似,是质押 Atom 拍卖接入资格。

然后是安全性,前面说过 Serenity 的分片就像是标准集装箱,DApp 放进就行了,安全性由系统保障。与之相对的是 Cosmos,应用链不论是否接入 Hub,都是自己保障安全。Substrate 开发的应用链是两个选项,要么接入 Relay 成为平行链,由 Polkadot 保障安全;要么独立运行,自己保障安全。

最后是 DApp 升级,Serenity 和以太坊 1.0 一样,不支持智能合约升级。可能很多人对此已经习惯了,但我认为不支持升级是很大的缺陷,而且可能带来严重的安全问题。首先是代码不可能没有 bug。

Solidity 等智能合约开发语言对形式化验证并不友好,即便做形式化验证,达到 100%的逻辑路径覆盖也不现实。其次 DApp 是互联网应用,互联网应用应该随需应变、迭代进化。

有人会认为智能合约是约定,所以不能改。其实真实世界的合同,都有经双方同意可以取消或者修改的条款。想想两个公司签了合同,现在双方都同意修改合同,结果合同本身限制了不可更改,是多么荒谬的情形。

更不要扯什么代码即法律,法律也不是一成不变,可以废止可以修订,代码反而不行,不是很奇怪吗?结果就是很荒谬,一方面 DApp 有强烈的升级需求;另一方面平台不支持升级。于是开发者自己想办法,用 delegateCall 等 rudimentary 的方法,别别扭扭地实现了可升级,还美其名曰可升级设计模式。

有了这个办法,开发者可以不经过用户同意,甚至在用户不知情的情况下修改智能合约。那么代码即法律还有什么意义?用户怎么才能知道智能合约可升级还是不可升级,哪些逻辑会变哪些不会变?只能自己看代码。所以难怪以太坊只有这么少的用户。反正我自己不够格使用以太坊 DApp。fomo3d 的合约我研究过,就没看出来有随机数漏洞。

Parity 的多重签名钱包合约的一个小 bug,锁住了上亿美元资金,坑了自己和好多人。如果要透彻研究代码才能信赖并使用 DApp,那全世界的 DApp 目标用户,大概也就是数以千计吧。

要开发能够跟中心化互联网应用竞争的 DApp,可升级是必须的。而且必须是平台支持的规范的升级,不能 DApp 各显神通。类比 Android 平台,手机 App 就经常升级,但是用户必须知情并同意,新版本 App 增加了权限需求,要显示给用户。

这些都是平台控制的,手机 App 只能遵循不能饶过。DApp 的升级应该更加规范也更加严格,因为 DApp 管理的是加密资产,而且没有可信任的中心。Polkadot 和 Cosmos 都允许应用链升级,Cosmos 的分区是自己处理升级,Polkadot 的平行链可以安全升级。

Polkadot 如何实现平行链安全升级,我还没搞明白。几周前 Gavin wood 中国行,讲了 Trust Wormhole 可信虫洞,我也没太听懂。谁了解这部分内容希望能指点一下我。

总而言之,在去中心化的区块链上,实现规范的安全的应用升级非常困难,但是没有别的选择,必须支持升级,而且是平台保障的规范的安全的升级。我认为在可升级性方面,只有 Polkadot 的方向选择是正确的。

网络拓扑比较

万字长文深度解析 Polkadot 架构(下篇)_第4张图片

下面来谈谈,Serenity、Polkadot 和 Cosmos 这三个区块链生态在充分发展之后,会形成什么样的网络拓扑。注意逻辑网络,不是物理网络。另外网络充分发展需要时间,这里讨论的是大概 5 年后的图景,有些内容是根据架构设计所做的推测。

首先看左侧,Serenity 网络像是一个仪仗队方阵。信标链是旗手或者领队,方队的每列是一个标准分片。每个分片都可以承载一些 DApp。中间的图是 Polkadot。Polkadot 网络是一颗树,树根是中继链,可连接多个平行链。平行链可能是特别业务的应用链,也可以是支持智能合约的 DApp 平台。

另外其他类型的区块链可通过桥接入中继。分析 Polkadot 架构可知,由于验证人数量等限制,单个中继能支持的平行链数量有限。大概是几十到一百这个量级,很难达到几百个。

当然即便达到几百,也不能充分实现 Web3 愿景。所以 Polkadot 未来会支持中继级联。也就是一级中继接入根中继,二级中继接入一级中继,从而具有无限扩展能力。

右侧图是 Cosmos。Cosmos 的多个 Hub 可以互联,每个 Hub 连接多个分区。还有锚定分区对接其他类型的区块链。Cosmos 网络拓扑与 Polkadot 粗看上去很像,都是树形结构。但是 Cosmos 的 Hub 和 Hub 之间,没有谁向谁提供安全保障的问题,所以没有层级高低。

如果把层级关系看作是连接的方向,那么Polkadot是有向无环图,Cosmos 是则是无向无环图。其实 Cosmos 网络拓扑是可以成环的,应该是为了避免出现跨链消息路由选择问题,选择了无环的设计。

相比较而言,我认为 Serenity 的增长方式和资源分配有点僵化。系统是自上而下式的增长,通过迭代支持更多的分片。DApp 选择哪个分片上,面临一些不确定性。例如某个 DApp 非常成功,它需要的处理能力超出了单一分片的容量上限怎么办?

目前看是没有办法。另外,DApp 上线的时候你选择了一个相对空闲的分片。结果同一分片土壤出现特别受欢迎的D App,那么你的用户就只能忍受高成本和拥堵。

简单概括就是区块链计算资源做不到对 DApp 按需分配。Cosmos 和 Polkadot 的增长是自下而上的,不断有新应用链加入,也会有应用链退出,资源分配也更加灵活。

Cosmos 跟另外两个平台的最大区别是不共享安全性,一定程度上牺牲了信任最小化,这个在前面已经讲过了。这么说 Polkadot 兼具了共享安全和自下而上式地有机增长,是不是就是最好的?Polkadot 确实有这些优点,但是它也有自己的劣势。

最大的问题我认为就是平行链的接入门槛会很高。按照目前公布的拍卖计划,到 2020 年底,只有 24 个接入插槽。你如果开发平行链,希望明年上线,就要跟全球众多团队竞争这 24 个名额。

当然,未来 edgeware 等智能合约平台上线后,能够一定程度上降低 DApp 门槛。相比之下,在 Serenity 上部署 DApp 没有门槛。Cosmos 也会好很多,因为 Cosmos Hub可以支持更多插槽,另外生态系统中会有多个 Hub,形成卖方市场竞争。

从更大的图景上看,Serenity、Polkadot 和 Cosmos 互联是可行的,也一定会发生。EOS 等采用 DPoS 的区块链也都可以连接进来,再加上侧链等二层网络,异构区块链的互联网络将会形成。

辨析“跨链”

万字长文深度解析 Polkadot 架构(下篇)_第5张图片

本次分享已经接近尾声了,我们才开始讨论跨链概念。原因是我认为“跨链”概念有歧义,容易产生误导。至少我自己被误导了很长时间。以前看关于 Cosmos 和 Polkadot的 材料,都是把它们当作跨链方案来介绍。

我就想为什么要跨链?跨链能干什?虽然现在有几百上千公链,但是有几个有用的?比特币算一个,有人会加上以太坊/ EOS,有人会加上 ZCash/Monero,反正也就是三五条吧。

就这么几条有用的链,有什么可跨的?感觉就是脱了裤子放屁——多此一举。所以以前我看到介绍 Cosmos 和 Polkadot 的文章,扫一眼标题就过去了,不点进去看。

直到去年 Gavin Wood 在慕尼黑演示 Substrate,我才弄明白 Polkadot 是分而治之的新一代公链架构,是 DApp 的新形式。从那以后,我才开始关注这个领域。

Polkadot 和 Cosmos 设想的区块链未来图景,不是 one chain fit all 一链打遍天下,也不是 one chain rule them all 一链君临天下,而是由众多异构区块链互链形成的网络。互联就是区块链之间能够跨链交易,所以跨链是异构区块链互联网的基础能力。

比特币、以太坊等公链加入到区块链互联网,是成果之一,而不是跨链的全部内涵。所以我的看法是,跨链概念没有错,但是如果理解成为跨而跨,就没有抓住重点。

把异构区块链实现跨链交易定义为跨链。那么我们来说说什么不是跨链,或者说市面上有哪些所谓的跨链是在挂羊头卖狗肉。首先跨链必须是参与的两条或者多条区块链的状态发生了一致性的改变,都是写操作。

如果一边是读,另一边是写,或者说是根据一个区块链的数据去修改另一个区块链的状态,这不叫跨链。当然从多个链读数据,更加不是跨链。

还有一个要求,不但要实现跨链交易,而且跨链交易应该是去信任的。还是拿 Cosmos 通证跨链转帐举例,从 A 分区经过 Hub 转 10 个通证到 B 分区,你需要相信 A 分区、Hub 和 B 分区三个区块链网络。

这三个网络到底值不值信任呢?你需要自己判断,如果去中心化程度高, PoS 质押通证的总价高,被攻击的难度大,就值得信任。有些所谓的跨链方案,Hub 本身不是区块链,而是个网关,那么网关值得信任吗?

答案是不知道,网关是单一实体运营的计算设备。信任网关的前提是信任运营实体。例如我们把钱存在工商银行,通过支付宝来花钱,也没什么不妥。阿里和工商银行都值得信任,所以他们运营的网关也值得信任。

但是无论网关是否值得信任,都不属于我这里所谈的跨链。我们说的跨链,Hub 要采用分布式账本技术,而且是去中心化的运营,从而实现信任最小化。

以后再看到所谓的跨链项目,可以自行分辨,是不是支持异构区块链的去中心化跨链交易。如果不能支持,那么它所说跨链跟 Cosmos 和 Polkadot不是同一类概念。

下一代 DApp 开发技术

万字长文深度解析 Polkadot 架构(下篇)_第6张图片

我个人认为目前已经落地的 DApp 只有一个,就是比特币。比特币是去中心化的价值存储型货币,或者叫数字黄金。因为是价值存储型的,所以它对性能的要求很低。

在未来几年,去中心化的支付结算型货币和交易所很有可能落地。支付结算型货币的币值,应该跟直接或者间接地跟购买力挂钩。那么现在 usdt、tusd、摩根大通币,以及未来的 facebook 币、央行加密法币,都是中心化的。做不到去信任、无许可和抗审查。

闪电网络和 MakerDAO 是重要的尝试,有可能带来突破。货币、借贷、资产发行、资产交易、保险、衍生品…我们离颠覆传统金融、改变世界也只隔着几个真正落地的 DApp。随着区块链扩容,基础设施给力了,DApp 就可能迎来真正的爆发。

程序员要怎样才能成为 DApp 弄潮儿,我们梳理下一代 DApp 开发技术。注意 DApp 是互联网应用。互联网开发的后端、前端、移动端、浏览器、桌面端技术仍然有效,但不在讨论范围之内,我们只谈实现去中心化的技术。

三个扩容思路,每个都有多种实现,我只列出代表性项目。代议制扩容的代表是 EOS 和波场。分层扩容分为状态通道和侧链两个分支,状态通道的方案有 Celer Network、Counterfactual 等,侧链有 Loom、OmiseGo 等。分片的三个典型方案,Serenity、Polkadot 和 Cosmos 已经逐一介绍过了。

这么看来,下一代 DApp 开发技术似乎有很多中。其实不是,DApp 开发目前只有种,就是智能合约。智能合约有两个主流的方案,EVM 和 Wasm。我们列出的项目,基本都支持 EVM,现在或者未来会支持 Wasm。

EVM 的主力开发语言是 Solidity,围绕 Solidity 已经形成生态,包括 Truffle/Remix/OpenZepplin 等工具、大量的技术资料、实例、社区讨论答疑等等,而且也有相当一批程序员会 Solidity 语言。所以掌握了 Solidity,可以确保在大多数公链上开发 DApp。

目前唯一的例外是 EOS,EOS 不支持 EVM,而是一步到位使用 wasm。wasm 会是未来智能合约开发的标准,可以支持用多种编程语言开发智能合约,包括 java\c++\go\rust 等等。

Cosmos 和 Polkadot 提供了开发 DApp 的第二种方式,就是开发应用区块链。与智能合约相比,应用链的优势是具有极大的灵活性。开发者可以自行选择或者定制共识算法、治理模型、经济模型等等,并根据实际需求配置硬件和网络。

但是另一方面,应用链开发、运营的成本会显著高于智能合约。例如要部署 Cosmos 的分区链,至少需要4台以上的主机,而且要质押相当数量的 Atom 通证,才能接入 Hub。可以预计,达到一定规模的团队,才有足够的资源开发并运营 Cosmos 或者 Polkadot 的应用链。

简单总结就是:下一代 DApp 有两类开发技术,轻量级的智能合约,和重量级的应用链。个人或者小型创业团队会主要使用智能合约。大型企业或者有充裕资源支持的创业项目,会使用应用链。

还有一种合理的做法是,先用智能合约实现 DApp,在获得验证和反馈之后,再开发功能更完善、使用体验更好的应用链。

开发者如何选择?

万字长文深度解析 Polkadot 架构(下篇)_第7张图片

后端或者全栈工程师如何选择 DApp 开发技术呢?我认为未来的区块链世界会是异构区块链互联的网络,多个平台都有会各自的生存空间,不必轻言谁将取代谁。

所以我的建议是:主要考虑当下的条件来选择技术路线,例如当前可用平台的能力,团队成员的技能等等。而不必过于纠结未来的不确定性。

如果项目已经启动,那就沿既定路线继续走下去。如果还未开始,首先明确是开发公链 DApp 还是开发企业解决方案。如果是开发公链 DApp,那么是否需要跟现存 DApp 互操作。如果是,那么应该选择在现存 DApp 相同的公链上开发。

就是说你需要互操作的 DApp 在以太坊上,你就在以太坊上开发。在 EOS上,你就在 EOS 上开发。有人可能会问,不是可以跨链吗?跨链是非常复杂的技术,而且肯定不是免费的。在满足需求的前提下,实现方案应该尽量简单。所以能避免跨链,当然应该避免。

那如果不需要与现有的 DApp 互操作呢?这里隐含了一个问题是,你的 DApp 会不会跟未来的 DApp 互操作?或者别人的 DApp 会不会要跟你的 DApp 互操作。

举个例子,你开发一个通证合约,作为公司业务积分系统。如果你们公司的积分使用范围很大,是不是可以在去中心化交易所进行交易,是不是可以作为资产抵押给贷款 DApp?成功的 DApp 应该尽量融入价值互联网的大生态。所以 DApp 互操作不是一个选项,而是 DApp 的基本需求,只是不一定要跟现存的 DApp 互操作。

下一个问题是:DApp 是不是只需要管理加密通证?如果回答是肯定的,应该优先选择 Cosmos,如果回答是否定的,则应该选择 Substrate。为什么呢?我们前面讲过,Cosmos 能够实现跨链通证转移,而 Polkadot 能实现任意形式的 DApp 互操作。

有人可能会说,Polkadot多强大灵活啊。这个我同意,但是大家应该理解,世界是公平的,没有免费的午餐。强大灵活的代价就是复杂和高成本。

Cosmos 在架构上比 Polkadot 要简单很多。因此我可以有把握地推断,至少在前期 Cosmos 会比 Polkadot 更可靠,而且使用成本更低。所以如果 Cosmos 满足需求,就应该选它。

如果业务需求超出了加密通证的范畴,可以选择 Substrate。另外前面有个分支,就是开发企业区块链应用,或者说开发联盟链应该选什么?我认为也应该选择 Substrate。

为什么不选 Hyperlegder Fabric 或者以太坊呢?因为商业公司推动的技术平台,注定竞争不过主流的开放平台。至于说用以太坊开发联盟链,我认为灵活性不够。

企业业务通常很复杂,对性能、可管理性等有很高的要求,而且常常需要快速迭代。Substrate 是完整的区块链框架,高度模块化和可定制化。Rust 语言侧重安全和性能,也非常适合开发关键业务系统。

Rust 语言

万字长文深度解析 Polkadot 架构(下篇)_第8张图片

做 Polkadot/Substrate 开发,绕不开的问题是 Rust 语言。在我二十多年的开发生涯中,遇到过极少数能快速掌握新语言的程序员。但是绝大多数程序员,包括我自己,掌握一门开发语言,熟悉标准库和开发框架,都需要很长时间。 

所以学习一门新语言,对我来说,是个艰难的决定。近些年涌现出了很多开发语言,其中 Rust 语言以学习曲线陡峭而著称。到底值不值得花大量的时间来学习掌握 Rust 语言呢?作为一名 Rust 语言的初学者,我谈谈自己的看法。

首先是 Rust 语言很棒,但是尚未流行。这不是我个人的看法。2019 年 Stack Overflow 的调查显示,按流行程度排名,Rust 只能排在第 21 名,左边这张图只显示了前 16 名,所以看不到 Rust。

另外 Tiobe 编程语言指数排名,Rust 目前排在第 34 名。再看右边的图,在 Stack Overflow 调查最受程序员喜爱的开发语言排行榜上,Rust 高居第一。而且这是 Rust 第连续四年排名第一,考虑到 Rust1.0 版是 2015 才发布,可以说Rust正式面世以来,一直是最受程序员喜爱的语言。

而且大家知道,一门编程语言,追求高性能,和让开发者轻松惬意,通常不可兼得。比如 Java 和 Python 程序员不需要考虑内存管理,当然降低了学习和开发的负担,但是系统就要处理垃圾回收,带来性能上问题。

反之,c/c++需要程序员自己管理内存,性能可以达到最优,但是前提是要把程序写对,增大了开发的难度。但是 Rust 似乎鱼和熊掌兼得,即达到了跟c/c++相同等级的性能,还能受到程序员的喜爱。

第二个看法是,Rust 语言适合高级程序员开发平台型的项目。Rust 语言非常重视性能和安全,它试图通过语言规范,或者说编译器,来引导程序员写出高效安全的代码。熟悉了 Rust 的用法,能自然而然地开发出高性能和高度可靠的系统,不妨称为Rust 之道。

Rust 之道认为实现某个目的通常有一种最好的方式,Rust 试图在语言级别引导或者强制你采用最好的方式。如果不按照 Rust 之道来编码,它就让你连编译都通不过。不像 Javascript 等语言,总是有很多种选择,可以按自己的习惯,怎么写都可以。

当然代码质量可能良莠不齐,而且可维护性很差。学习并掌握 Rust 之道,需要理解一些重要的编程概念,比如对象的所有权等等。没有坚实的开发经验,很难掌握。这也就是大家认为 Rust 语言学习曲线陡峭的原因。

如果不是开发对性能和安全要求很高的平台级项目,用 Rust 有点杀鸡用牛刀。因为项目在性能和安全上的收益,不一定能抵消采用新开发语言导致的成本。

如果要开发平台级系统或者关键业务系统,Rust 就值得考虑。另外学习Rust 语言可以带动自己加深对内存、线程、异步、闭包、函数式等高级开发概念的理解,对开发能力的提升有莫大好处。

所以简单总结一下,就是如果你有一定的开发经验,未来可能或者有志于开发平台型的系统,当然就包括区块链开发,那么 Rust 语言就值得你投入时间去学习掌握。

万字长文深度解析 Polkadot 架构(下篇)_第9张图片

我用罗素的名言作为本次分享的结束语——须知参差多态,乃幸福本源。真正理解并欣赏 Polkadot 和 Cosmos 设计理念的人,都不会是最大化主义者,也不会认为 Polkadot 的目标是替代以太坊。

至少以太坊基金会和 Parity 公司都不这么认为。Parity公司一直是以太坊生态的重要支柱之一,他们也在积极参与Serenity开发。

前些时候,以太坊基金会向 Parity 公司支付了 500 万美元,即是对 Parity 多年支持以太坊的感谢,也是资助他们继续开发维护以太坊节点软件。我对比特神教已经见怪不怪了,至少我能理解他们为什么那么想那么说。

但是现在以太坊生态里,也开始出现以太神教的趋向,就有点不可理喻。开放是以太坊愿景的基础,以太坊也带领我们看到了去中心化价值互联网的可能性。所以我认为支持以太坊,但是反对其他区块链,是一种自相矛盾。

前面也谈过,人们对去中心化应用的需求是多样化的。Serenity、Polkadot、Cosmos 和 EOS,还有其他 DApp 平台公链,都做了不一样的设计选择,或者说是不同的折中。因此他们会非常适用于某些需求,而不太适用于其他需求。

互联互通是大势所趋,任何一个生态如果选择孤立发展,就会被区块链互联网产生巨大的网络效应所挤压,最终被淘汰。因此我们可以期待,区块链的未来会百花齐放,更加参差多态,希望区块链和去中心化应用成为人类的幸福之源。

全球第一门substrate快速入门与开发实战课

万字长文深度解析 Polkadot 架构(下篇)_第10张图片

最后宣布一个好消息,由一块链习社区打造的 Substrate 线上开发课即将面世。就我所知,这是全球首个 Substrate 线上开发课。

主讲是 Bryan 陈锡亮老师,Bryan 是 Centrality 资深架构师、Polkadot 社区大使、Substrate 和 Polkadot 代码贡献者。

首期课程定于 6 月 2 号开课,招生限 50 人,学费 1299 元。所有按时完成作业的同学将获得一半学费返还。课程评价前 3 名的同学学费全额返还,还有额外奖励。

大概算算账就能知道,课程是不盈利的。这个不多说了,明白的人自然明白。有志于 Polkadot/Substrate 开发的同学,请扫上图左侧的二维码,里面有课程的介绍和报名表。

现在报名,先自己花一个月时间学学 Rust 语言,然后通过课程学习成为国内第一批 substrate 程序员,机会非常好。一块链习社区将挑选五位技术高手,担任首期课程助教,我可能也有幸位列其中,期待跟大家一起学习。

也介绍一下我自己。我叫刘毅,是 Random Capital 随机资本的合伙人。随机资本是不久之前募集成立的区块链孵化基金,重点投资国内 Polkadot 创业项目。

前面介绍过,Polkadot 架构有很多优势,主要缺点是门槛高。但是互联网和区块链的历史反复证明:最颠覆性的创新常常是来自于草根创业团队。我们成立孵化基金,就是对接资本和创新。

只要你能开发出靠谱的 DApp,我们一定有办法,帮你站到 Polkadot 这个大舞台上。

本次分享的 PPT,大部分图片和资料来自于网络,少部分是我自己制作的。我尽量注明资料和图片的出处,但肯定有疏漏,向没有被提到的原作者致歉。Polkadot 架构的来龙去脉非常复杂,即便讲了这么长时间,也难免挂一漏万。谢谢大家!

最后,有志愿共同推动 Polkadot 生态发展的用户,欢迎扫描上图右边二维码,添加刘毅老师的微信号。感谢大家!

你可能感兴趣的:(万字长文深度解析 Polkadot 架构(下篇))