声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。
边肖:记得要集中注意力。
来源:连锁学习社区
原标题:一万字长文通过波尔卡多特架构说话
刘一,随机资本合伙人,清华大学硕士,区块链,大数据技术专家。20年各类资本市场投资经验,比特币早期投资人。
刘一老师深入探讨了DApp发展现状、公链的三种扩展思路、从以太坊到宁静的过程、加文伍德的新征程Polkadot、Cosmos by all roads殊途同归、DApp发展对比、网络拓扑对比、“跨链”辨析、下一代DApp开发技术选择。
本次分享的主标题是Polkadot架构分析,副标题是下一代DApp开发技术回顾。其实小标题更能概括这次分享,因为我们不仅会讨论Polkadot,还会对平台型公链做一个相对全面的回顾,包括以太坊2.0,Cosmos等。当然,波尔卡多特是重点。
我希望能解释清楚DApp发展技术的趋势。这是区块链工业发展的核心问题之一。不仅对开发者重要,对其他行业参与者也有影响。所以我尽量讲的直白一点,让非技术背景的听众一般都能理解。
1.为什么DApp很重要?我先从DApp本身说起,因为这说来话长。最后决定简单说一下,不然逻辑不全。
DApp是一个分散的应用程序。比如比特币是DApp,是一种去中心化的价值存储加密货币。权力下放的概念相当复杂。神V有篇文章解释了去中心化有三个维度:架构、治理、逻辑。你可以找找看。
从用户的角度来说,去中心化可以简单理解为一个应用属性,不能被个人或少数参与者所控制,因此是值得信任的。区块链是实现DApp的主流技术手段,或者说区块链是DApp的基础设施。
除非另有说明,本共享中提到的区块链指的是公共链。DApp和普通互联网应用的区别在于d的去中心化,那么去中心化为什么重要呢?为什么值得众多IT互联网从业者参与?是伪需求伪概念吗?
这个问题最明确的答案是a16z的合伙人Chirs Dixon,他在2018年2月发表了一篇题为《Why Decentralization Matters》的文章,这就是为什么去中心化很重要。
要理解他的观点,首先要明白什么是网络效应。网络效应是指产品或服务的效用随着用户的增长而增加的机制。
比如微信用的人越多,它就越强大,越不可或缺。互联网应用的核心是建立和维护网络效应。谷歌、亚马逊、BAT等巨头的业务。都建立了强大的网络效应,让后来者难以逾越。
Chirs认为,互联网平台应该尽一切可能吸引用户、开发者和企业等。为了建立网络效应。但突破关键尺度后,平台的吸引力越来越强,控制力也越来越强。
比如不依靠天猫、JD.COM、微信做电商,几乎不可能成功。因为他们形成了巨大的网络效应,锁定了用户和商家。互联网运营商都是企业,企业的使命就是利润最大化。
当用户和商家都离不开平台的时候,平台和用户商家的关系就会发生变化。我们来看上图。起初,平台吸引了用户。网络效应形成后,开始尽可能从用户身上赚钱。
与平台开发者、内容创作者、商家,逐渐从合作走向竞争。比如我们都知道百度的搜索结果不是按照信息的真实性和重要性来排名的,而是给钱多的排在第一位。
最早的时候,百度广泛接触各种公司,要求大家向他提交资料,方便用户搜索。如果现在不付款,百度上找不到公司官网。为了赚钱,百度把病人分流到莆田系医院。不过国内用户也知道这一点,但还是离不开百度,因为百度的数据最多,最了解用户。想想,是不是很可怕?
DApp可以改变互联网平台的垄断。因为DApp是一个由公开透明的共识维持的分散经济。网络参与者的贡献越大,相应的权利也就越大,但没有一个个体能左右全局。
如果任何参与者想要损害他人的利益,要么行不通,要么就会导致分歧。DApp可以长期保持开放和公平,所以你不必担心过河拆桥。每个人都尽力参与建设,并获得报酬。它类似于各尽所能、按劳分配的社会理想。
这才是真正的开放网络,是互联网不应该忘记的初心。因此,许多互联网大咖都对DApp和区块链科技实现DApp情有独钟,并寄予厚望。
二、DApp去中心化应用的发展困境承载着重塑互联网的伟大理想,但发展现状却十分尴尬。这一点大家也是清楚的。我简单提一下。
首先是极少数用户,比如DApp领域的明星项目Auger,融资数千万,发展历时三年多。上线后,日活用户数十人,奥格并不是个例。
我们来看上图,来自DAppReview,是以太坊DApp日活用户前5,最高的也不过千用户,而互联网顶级应用的日活用户可以达到上亿,相差五个数量级。
为什么DApp处于如此悲惨的境地?主要是因为区块链基础设施不强,使得DApp使用门槛高,用户体验差。就像以太坊是村级道路,收费高,拥堵,当然没人愿意去。
下图是以太坊的使用率。可以看到,以太坊从2017年底开始就已经接近满负荷运行。也就是说,DApp速度慢,费用高,但基础设施已经全力以赴,没有进一步提升的空间。
在这样的困境下,DApp不可能突破关键规模,创造网络效应,与集中式互联网应用竞争,因此有必要升级区块链基础设施。
三。慢而贵的原因3354区块链极度冗余的结构DApp慢而贵的根源是区块链平台的架构限制。这种架构限制可以简单概括为:区块链是一种极度冗余的计算架构。
冗余就是冗余,允许多台计算机重复执行相同的计算和存储相同的数据。冗余是有意的,不是浪费。企业计算和互联网都存在适当的冗余。
最典型的就是主从结构。两台相似的计算机,一台主计算机和一台备用计算机,执行相同的计算并存储相同的数据。当主用机出现故障时,备用机迅速放在最上面。虽然两台机器完成了一台机器的工作,但是系统的可用性得到了提高。
但是为什么区块链是极度多余的呢?因为区块链将冗余推到了极限,网络中的所有计算机,无论是数百台还是数万台。执行相同的计算并存储相同的数据。冗余的程度是无法衡量的。极度冗余意味着极高的成本。成本有多高?
上帝给出了一个估算,即在以太坊上进行计算或存储数据,比在商业云平台上进行同样的计算或存储同样的数据,要贵100万倍。也就是在普通云服务上花100块钱就能完成的计算,放到以太坊上就要花1亿。因此,在考虑什么生意可以进入DApp时,我们必须考虑成本。
不要把所有的猫狗都放在区块链上,只为了讲故事,圈钱,这是巨大的资源浪费。那么花100万倍的成本能得到什么好处呢?高可用性当然不在话下。或者比特币以太坊网络,电脑可以随时加入或者退出,对业务没有影响。
但是,高可用性显然是不够的,因为只有适度的冗余才能达到,没有极度的冗余。极度冗余带来的新属性是去中心化。具体来说,去中心化意味着对用户的无信任、无许可和审查响应,即信任、无许可和反审查。
没有执照很好理解。任何人想要使用比特币或以太坊,都不需要向他人申请。反审查也很明显。没人能阻止你使用区块链。比如维基解密,世界上最强大的国家都很讨厌它,想快点摆脱它,但是维基解密还能得到比特币捐款。
模糊的意思是信任。英语是无信任的,无信任的或最低信任的。我觉得最准确的说法是,信任最小有最小信任。分散应用程序的使用实际上意味着对整个区块链网络的信任。
比如你用比特币和以太坊,你要相信比特币和以太坊不会受到51%的攻击。在使用Cosmos和Polkadot时,要相信恶意验证者不到1/3。因此,去信任的确切含义是,在信任整个区块链网络的前提下,不需要信任个体矿工或验证者,也不需要信任交易对手。
对于一个应用来说,如果用户从去信任、免授权、反审查三个方面得到的收益值得花100万倍的成本,那么这个应用放在区块链上也是合理的。有这样的应用吗?就我个人而言,目前唯一能值这个成本的需求就是价值存储。
著名比特币极大化者吉米宋(Jimmy Song)说,比特币会成功,而法币和所有竞争货币都会失败。原因是中央化的货币永远过不了中央化的货币,而分散化的产品永远过不了中央化的产品。
隐含的逻辑是,同样的互联网服务产品,成本差100万倍,做不到。他的说法有道理,但太死板了。因为100万倍的成本差距不是不可避免的,是可以改变和缩小的。
无法将DApp与集中式互联网应用的成本差距从100万倍缩小到10万倍、1万倍甚至1000倍。同时还保持了去信任、无牌照、反审查三大优势。答案是完全可能的。只要降低冗余度,就可以降低成本。方法有三种,即区块链展开的三种思路:——代表制、分层、碎片化。
四、第一次扩张思想3354代议制第一次扩张思想3354代议制源于人类古老的政治智慧。即民主是好的,但全民直接民主的效率太低。英国退出欧盟由公民投票决定,但显然不是所有问题都可以付诸公民投票。
代议制是人民选举代表,然后代表协商法律或重大决议。代议制度能够提高决策效率的原因有两个。第一,参与共识的人数大大减少。第二,代表通常是全职政治家,他们有更多的资源和知识来协商国家事务。
代表性的方法用于扩展区块链,最典型的是具有DPoS共识的EOS。EOS pass的持有者选择超级节点,21个超级节点轮流挡出。与以太坊相比,参与共识的计算机数量下降了三个数量级。
而且以太坊中节点的计算能力参差不齐,协议参数设置要兼顾低端电脑。但EOS超级节点主机的硬件配置和网络带宽要求同样很高。所以EOS能达到几千tps也就不足为奇了,远高于以太坊。
EOS自诞生以来一直走在前列。加密界有人严厉批评EOS,说它是中心化的,甚至认为它根本不是区块链。支持者认为EOS的去中心化程度已经足够。用户仍然可以享受去信任、无许可和反审查的好处。
那么EOS的去中心化程度够吗?我的看法是:在某些情况下,这就够了,在其他情况下,这就不够了。取决于它是什么应用程序以及谁在使用它。
而且用户差别很大。只按国籍,有美国人,中国人,伊朗人,韩国人等等。还有性别、年龄、种族、地域、职业、宗教等等方面的差异。
另一个特定用户有多样化的需求,比如社交、娱乐、金融、协作等等。大类又分为很多小类。在金融中,只有货币才有价值存储需求、大额转移需求、小额支付需求等等。
如果我的大部分身家使用加密货币进行长期价值储存,我更喜欢比特币。如果是小额支付,或者打麻将或者掷骰子,用EOS当然没问题。在区块链的世界里,从去中心化程度最高的比特币、以太坊,到去中心化程度最低的EOS、波场。
可以看作是去中心化谱,去中心化谱。每一个公链,包括后面重点介绍的Polkadot和Cosmos,都在光谱中占有特定的位置,都有机会被应用到特定的需求中。不可能有一种适合所有人的方法可以适用于全世界。
做建筑设计就是要妥协。如果你选择了什么,你就必须放弃它。这种分享的核心思想是,未来的区块链世界是异质的、多链的。当然我觉得不需要几百上千的公链,因为没有那么多合理的替代位置。在定位相近的情况下,网络效应会淘汰弱者。
动词(verb的缩写)第二个扩展思想3354分层也称为两层扩展或链扩展,这意味着一些交易在区块链之外执行,同时仍然确保交易安全。有两种技术:分层通道和侧链。还有一种两层技术,将计算密集型任务转移到链上执行。这一块和分享话题无关,就不再提了。
状态和侧链是不同的技术隐喻,但在实现的层面上,它们实际上非常相似。Cosmos和侧链有很深的内在联系,所以我在这里花点时间讲讲侧链的原理。
要理解侧链,首先要理解SPV证明。SPV是简化支付验证Simple Payment Verification的缩写。为了让计算和存储能力有限的设备能够使用比特币,就有了SPV,或者说轻客户端或者轻节点。
钱包是一个轻客户端。它不需要同步所有的块,只需要同步块头,传输和存储的数据量减少了1000倍。左图显示了使用梅克尔树进行SPV验证的原理。不懂也没关系,只要记住梅克尔树是区块链最重要的数据结构就行了。
只需要存储很少的数据,就可以用来证明大量的事实已经发生,并且属于某个特定的集合。就区块链而言,只存储块头,将来可以验证某个块中是否存在事务。
侧链方案是锁定主链资产通行证,在侧链上对应创建通行证承兑汇票。票据交易在侧链进行,在侧链拿到票据的人可以兑换主链通行证。见右边以太坊等离子MVP的侧链方案。
首先,在以太坊主链上部署等离子智能合约,假设有两个侧链用户,爱丽丝和鲍勃。爱丽丝发起主链交易将通行证存入血浆契约,通行证被契约锁定。
当侧链的操作员发现Alice存放了通行证时,它会在侧链中创建侧链通行证,这是主链通行证的承兑汇票。请注意,侧链也是一个区块链。它有自己的共识协议和矿工。
在等离子MVP方案中,侧链采用的共识是PoA权限证书,即一个运营商说了算,它占块。PoA当然不是唯一的选择。织机的等离子侧链采用DPoS共识。
存款后,爱丽丝可以使用等离子MVP链中的通行证进行支付或转账。比如她可以和Bob玩游戏,不管输赢,可能很快就会玩很多游戏,产生大量的转会交易。侧链交易只要求侧链的节点达成共识。侧链的规模通常远小于主链,因此交易执行更快,成本更低。
侧链滑车的头部将由操作员提交给主链的血浆合同。无论侧链中的块包含多少事务,无论是1,000还是10,000,只有记录块中的第一个事务发生在主链中。因此,等离子体收缩
比如Alice在侧链上把通行证转让给Bob,Bob可以向血浆契约发送请求,包括侧链交易的SPV证书,表示Alice已经把这些通行证给了我。
血浆合同可以验证侧链中确实存在转账交易,从而满足Bob的取款要求。这个例子说明了分层方案如何将大量交易转移到链或第二层网络。
六、第三次扩张思路3354碎片化第三次扩张思路是碎片化。原理很简单,就是不要让所有节点执行所有事务。将节点分成许多组或许多块。多个段可以并行处理事务,因此提高了整体处理能力。
当然,需要一个特殊的链条来照顾所有的部分。这个一般叫主链,需要做的工作比较多,后面会详细介绍。粗略的解释是,如果没有主链,多块之间没有联系,就是完全独立的多区块链,与产能扩张无关。
碎片化扩展的基本思想很简单,但在实践中却面临着很多复杂的问题。为了理解后面要比较分析的几种常见的链架构,你应该先大致了解这些难题。另外,这个公链采用了PoS共识,所以我们讨论碎片化问题以及基于PoS的解决方案。
七、碎片化问题——验证者选择是先碎片化后,每个碎片化都需要一组验证者。请看看这个示意图。
如果在单个链中有超过一半的恶意验证者,系统就可能被攻击。碎片化后,只要在一个碎片中占据多数,就可以攻击这个碎片。所以分的棋子越多,攻击成本越低,也就是安全性越低。
解决方案是分裂验证器分组不是固定的,而是随机选择的,每隔一段时间就重新分组。这样的恶意验证者无法提前知道自己被分到哪个组,但是贸然发送攻击会受到惩罚,所以系统的安全性不会随着碎片数量的增加而线性下降。
验证随机动态分组的关键是要有可靠的随机数,这一直是计算机科学中一个复杂而有趣的问题。在分散拜占庭容错中产生可靠的随机数非常困难,也是区块链研究的热点问题。
八。碎片问题——跨片事务完整性在碎片方案中,每个碎片上可以运行一个或多个dapp,无论dapp是否在同一个碎片中,它们都必须是可互操作的。首先,什么是跨芯片互通?因为碎片也是区块链,所以交叉碎片相当于交叉链。
众所周知,区块链可以看作是分布式一致性维护的状态机,状态机通过事务执行完成状态转换。跨链互操作应该引起双方的状态转换,即互操作的链都执行了事务,事务后的状态是一致的。
或者一个跨链的事务会引起两个或多个链的状态变化,而这些变化不是成功就是不成功,没有中间状态。这非常类似于企业计算中的分布式事务的概念。
然而,传统分布式事务的参与者通常是多个数据库,而跨链事务的参与者是多个区块链。非技术背景的学生可能不熟悉状态机和分布式事务的概念。因为跨链交易的概念对于理解这篇分享的结论非常重要,所以我就用非技术语言来解释一下。
假设你要从工行账户转1万元到建行账户。这个转账交易实际上是从工行账户减去10000元,在建行账户增加10000元。工行和建行都有自己的数据库来存储账户余额,所以应该有一个机制来保证两个数据库的操作,一加一减,无论如何不是成功就是失败。
如果没有这个保障,工行账户减少,建行账户不加,你就亏了一万块,你肯定不干。工行账户不减,建行账户加,你多拿一万块钱,银行肯定不干。
这被称为分布式事务的完整性或原子性。简单吧?其实很难启动,因为无论工行和建行哪个服务器出现停电、断网、软件崩溃等情况。各种极端条件必须保证交易的完整性。在区块链,转账成为转账卡。
在链A上发出了一个传球,通过跨链向链B传递了10个传球。跨链事务完成后,链A上的10个传递被冻结,链b上的10个传递被添加,这两个状态改变在任何条件下要么成功,要么失败。
因为区块链可能是分叉的,所以跨片事务比传统的分布式事务更复杂。让我们来看图。如果片1上的跨片事务部分被打包在块A中,则它被打包在片2上的块X \’中。两个片段都可能分叉,并且块A和块X’可能成为被放弃的孤立块。即跨片事务可能部分成功,部分失败,完整性会被破坏。
如何解决这个问题?我们来分析一下。跨链事务完整性被破坏的根本原因是,事务的许多部分被打包成块,但链可以重组,块可以成为孤立的块。
说白了,交易进了区块,但是不靠谱,有可能反悔。官方说法是,没有明确的定论。最终,性的终结意味着区块必须包含在区块链中。
在比特币区块链上,跟随一个区块的区块越多,它被逆转或放弃的可能性就越低,但这永远不可能是100%确定的,所以它被称为概率最终性或渐进一致性。这个问题的解决方案是有一个机制使块明确和无歧义。
九、碎片化的难题—— finalization VS activity finalize就是让块final,我翻译成finalization。使街区成为最终的。最简单的方法就是立刻成交。宇宙的终极共识是这样的。但这种做法在特殊情况下会产生问题。
让我们来看图。Tendermint同意的一辆区块链本来是正常出口的。突然海底电缆断了,互联网分成了两部分。两个部分各包含一个通用验证器节点。Tentermint共识要求在发布封锁之前收集超过2/3验证者的签名。
断开连接后,两个网络最多收集到一半验证者的签名,因此阻塞停止,或者区块链失去活性。有人认为这是可以容忍的。这是一个特例。然后停下来等网络恢复正常再继续工作。
海底电缆断了,上网、打电话、视频会议都受影响。为什么区块链不能被停职?还有人觉得不堵不行。我们应该永远保持区块链的活力。那我该怎么办?实现这一点的方法是将提供和完成分开,也称为混合共识。
在刚刚提到的网络中断情况下,节点可以在两个独立的网络中继续封锁,但没有足够的验证者参与,所以无法最终确定。当网络恢复后,我们可以决定哪些块是最终确定的,以便同时具有活动性和最终性。
而且混合共识可以让单个节点轮流快速封锁出去。同时,终结过程可以慢一些,允许大量节点参与,保证去中心化,增加攻击和合谋的难度,也就是保证安全性。因此,混合共识也兼顾了性能和安全性。以太坊2.0和Polkadot都采用混合共识。
X.碎片问题——事务有效性另一个碎片问题是事务有效性。交易有效性问题是为了防止无效交易进入区块,成为区块链维护历史真相的一部分。
以比特币为例。如果我是超级矿工,我掌握了大部分计算能力。我想伪造一笔交易,把别人地址的比特币转给我。我能做到吗?答案是否定的。
因为这个事务在没有对应地址的私钥签名的情况下是无效的,所以包含这个事务的块也是无效的,不会被其他节点接受。即使我已经掌握了大部分的计算能力,可以挖掘出最长的链,但我只构建了一个长叉。
很多比特币钱包和交易所都不会认可我的分叉。所以51%的攻击不可能盗取任何人的btc,也不可能凭空创造比特币。最多是双花攻,就不说了。总而言之,比特币网络不存在交易有效性问题。
那么这样一个十年前就已经完美解决的问题怎么会再次出现呢?原因是btc等公链上的所有节点都有全部数据,可以完全独立地验证交易的有效性。现在变成多个碎片,节点只存储部分数据,无法独立验证事务的有效性。
让我们看看左边的图。有两块碎片。Shard 1已经被恶意验证者控制,无效交易已经被封装在B块中,比如凭空为自己的地址创建了很多pass。在下一个块C中,攻击者发起跨片事务。为了在片2上将通行证传送到DApp,它可以是分散的交换。Block 2看到的Block C中的交易没有问题,Block 2中的Block C之前没有数据,无法验证交易的有效性。
下面介绍一个解决碎片化环境下交易有效性的方案,叫做举报奖励。其实还有其他的方案,不过和主题无关,我就省略了。
看右边的图。尽管切片1由恶意验证者控制,但至少有一个诚实的验证者。片段2无法验证跨链交易的有效性,所以我选择相信片段1,将跨链交易打包。此时,片1中的诚实节点可以跳出来报告块B非法。我有证据。
当系统接受举报时,它将惩罚第1节中的恶意验证者,没收他们的抵押通行证,并向举报人提供奖励。那么,为什么一些区块链和核查员要等几个月才能恢复质押券呢?主要原因是为报告和确认报告留出足够的时间。
我们已经介绍了碎片化的四个难题以及相应的解决方案。其实碎片化扩展的问题还不止这些,因为时间限制我就不再列举了。
XI。以太坊正硕——宁静下一代以太坊lay1拓展的思路是碎片化。关于下一代以太坊,信息非常混乱,甚至连名字都不统一。有以太坊2.0,Serenity,Shasper,Casper以太坊等。我们称之为宁静号。
请看台湾以太坊高级研究员王绍为这位女士绘制的宁静建筑图。从上面往下看,最上面是PoW主链,目前正在运行以太坊。Serenity不会取代PoW链,但会作为侧链部署在网上。
但从长远来看,宁静并不依赖于PoW链,Pow以下的三层都属于宁静,它们正好对应了宁静进化的三个阶段。
一、信标链信标链,主要功能是管理验证器。信标上线后,如果你想成为宁静号的验证者,把eth从战力链转移到信标链。或者以侧链的方式,信标链在PoW的主链上部署智能合约。
以太网到信标链传输是单向的,它不能从信标链传输回电源链。在信标链中有eth,保证和运行节点可以成为验证者。为了实现完全去中心化,做一个宁静号验证者的门槛很低,只需要认捐32个ETH,验证者的集合会很大,可以达到几万到几十万。
信标链还负责生成随机数,这些随机数用于验证人员的分组和贷方的选择。信标链实现PoS共识协议,包括自身共识和所有分段链的共识,并对验证者进行奖惩。还有一个跨片交易的中转站。beacon chain预计将于今年年底或明年年初上线。
目前有几个团队在开发信标链节点软件,也有几个团队已经部署了测试网络。下一阶段将部署一个公共的、长时间运行的测试网络,将各个团队开发的节点放在一起进行测试。
信标链下面是若干分段链,图片显示100段。碎片化被视为Serenity的数据层,负责存储事务数据,维护数据的一致性、可用性和活性,即保证它总是可以被打破,并且会n
链条下面是虚拟机,负责执行智能合约和转移交易,改变状态,也就是读写链条的数据。Serenity的重要设计决策是将数据层碎片链与逻辑执行引擎虚拟机解耦。
解耦带来很多好处,比如单独开发,单独上线或升级等。Serenty虚拟机将使用wasm,可以提高性能,支持多种编程语言。
宁静号,前面说的四个碎片问题怎么样?首先,在信标链上管理验证者池,并为每个片段链随机分配一组验证者。采用混合共识,验证者轮流产生区块,采用卡斯珀FFG最终确定。通过举报奖励方式保证交易的有效性。
十二。加文伍德新征途——波尔卡多特分享到了一半,终于轮到主角出场了。加文伍德是波尔卡多特的灵魂人物,大部分学生已经很了解他了。不知道的话,上网搜一下,我就不介绍了。
加文伍德(Gavin Wood)是web3基金会的创始人和现任主席,Polkadot是Web3基金会的核心项目。类似于以太坊和以太坊基金会的关系。
关于web3,有必要介绍一下。在web3 Foundation、Polkadot等项目文档中,web3 vision的用词是不一样的。但都有两层意思。
第一层:web3是一个无服务器、去中心化的互联网。无服务器也意味着去中心化,因为在web3设想的网络计算架构中,参与者或节点是平等的,服务器和客户端没有区别。所有节点或多或少都参与了网络共识的形成和记录。去中心化的互联网有什么用?
这是web3的第二层含义:每个人都可以掌握自己的身份、资产和数据。
掌握自己的身份,就是不需要其他人或组织给你身份,其他人或组织也无法使用或冻结你的身份。掌握自己的资产,就意味着不会被剥夺资产,可以自由处置。掌握自己的数据,意味着每个人都可以根据自己的意愿生成、保存、隐藏和销毁个人数据。没有他的允许,任何人或任何组织都不能使用他的个人资料。
网络愿景并非web3基金会或Polkadot项目所独有。许多区块链项目,包括比特币和以太坊,都有类似的愿景。有各种各样的名字,包括开放网络,下一代互联网等等。名字是什么并不重要。你应该思考一下web3愿景的内涵。这就是你想要的互联网吗?
甘地说:成为你想在世界上看到的改变。我翻译成:去你想要的世界。如果web3也是你认同的愿景,那就参与进来,为之努力吧。
Polkadot是web3的主干,是web3的基础设施,是Gavin Wood和web3 Foundation指出的web3愿景之路。
Substrate是Polkadot项目开发过程中形成的开源区块链开发框架。它可以用来建造波尔卡多特生态,也可以用来建造区块链做其他用途。
十三。波尔卡多特架构接下来,我们将介绍波尔卡多特架构。这两张图片来自岳翻译的《波尔卡多特白皮书》的中文版。
先看右边的大图。波尔卡多特的基本网络结构是星形的,或者说是轮辐式的。恒星的中心是Polkadot中继副链,周围有许多平行链。
看左边的小图,Polkadot网络的参与者有四个角色:验证者验证者、提名者提名者、整理者收集者或检查者、渔人渔夫或渔夫。
DApp可以是部署在平行链上的智能合约,或者整个平行链只有一个DApp。用户在并行链中发起交易,交易被收集者收集,打包成块,交给一组验证者进行验证。
这组验证器不是来自并行链,而是来自中间链管理的验证器池,通过随机分组的方式分配给并行链。每个并行链都有一个退出队列和一个进入队列。如果用户发起跨链事务,该事务将被放入导入和导出队列中。然后目标并行链的收集器将它放入其入口队列。
并行链的收集器执行事务,生成块,并由验证者组完成它们。Polkadot采用混合共识协议,block协议的缩写为BABE,child敲定协议的缩写是爷爷,爷爷。
刚刚说到混合共识,可能有同学会问:如果块快放慢定,等待定案的块会不会越来越多?不会,爷爷每轮可以定多个块,这样才能赶上进度。所以,孩子活泼好动,走路轻盈;爷爷是大步流星,说话算数。老年人和年轻人相辅相成。
除了并行链,还有两种类型的外围模块链接到主干链中。一种是中转桥,将现有的不能直接连接的区块链接到干线链中,比如以太坊、比特币。从接力链的角度来看,传递桥是一个并联链。
从以太坊或者比特币的角度来看,转账桥就是一个侧链。此外,为了使系统具有无限的可扩展性,还可以有二级中继链。但是二次中继目前只是一个设想,还没有具体的设计。
我们已经在系统中引入了收集者和验证者的角色,那么提名者和渔夫是做什么的呢?提名人是Polkadot基础通dot的持有者,他希望质押DOT获得收益。但要么是因为点数少,要么是缺乏运行维护验证器节点的专业技能。
因此,系统提供了另一种参与方式,即持币者选择自己信任的验证者,通过验证者质押自己的点,分享验证者的收益。这样做的好处是提高了整体质押比例,提高了制度的安全性,同时也使收益分配更加公平。Polkadot的经济模型是一个非常复杂有趣的话题,就不多说了。
刚刚介绍了过度电影结构的交易有效性和举报奖励的解决方法,所以渔夫这个角色就不难理解了。他就是监督举报非法交易,赚取奖金的角色。听起来简单,做起来却极其复杂。
可能有些同学的假想报告是这样的:给web3基金会发邮件:我发现有人打包了一个非法交易。证据见附件。希望你能回复。过几天,web3基金会会回复:你的举报已经确认,肇事者已经绳之以法,奖金会寄到你的地址。非常感谢您对我们工作的支持。
但是关于区块链的报告完全不同。Fisherman是一个软件进程,用于监控互联网上的非法活动,一旦发现,它会向区块链提交一份交易报告。报告也要经过一个共识的过程,要经过2/3以上的审核人审核,打包成块。惩罚和奖励也是区块链交易。
整个过程是自动和分散执行的。这里有很多复杂的问题,比如如何给渔民提供激励。渔民就像警察。你可能认为这很简单。如果你抓到一个坏人,你会得到一笔奖金。
然后就是一堆警察天天盯着互联网。如果没人敢作恶,警察就永远拿不到奖金。对警方来说有运营成本,需要验证和存储大量数据。没有收入,警察也干不下去了。等警察都转行了,坏人就出现了。那你可能会想,给警察发工资,底薪加提成。
好,那我就可以申报当警察,拿底薪了。但是我根本不验证和存储交易数据。成本为0,底薪就是我的利润。当坏人出现时,我说对不起。我没看到,或者我的硬盘坏了。那么系统应该如何惩罚我呢?
还有,不能随便举报。处理举报需要系统付出成本,成为可以被灰尘攻击的漏洞。另外,举报的交易能不能举报,怎么处理等等。因此,在分散的环境中,报告机制非常复杂。目前还没看到Polkadot的渔夫工作机制的具体说明。
在Polkadot网络中,并行链分别承担事务执行和数据存储,同时并行链可以互操作,从而达到碎片化的目的。所以我把Polkadot当做一个零碎的扩展方案。可以和宁静号做个初步对比。你会发现波尔卡多特是techni
Serenity的碎片是同构的,采用相同的共识协议,具有统一的容量。这就像是为DApp提供的标准集装箱,规格相同。开发者可以选择一个切片,把他们自己的DApp放进去。
Polkadot是web3的主干,它不能也不应该要求平行链统一。并行链可以决定使用什么共识协议、经济模型和治理模型、硬件和网络配置等。简而言之,平行链是自治的,Polkadot可以看作是平行链的联盟或联邦。
Polkadot中继链要支持异构并行link-in,然后实现互联,比Serenity信标链复杂。这种技术复杂性的优点是并行链开发的灵活性,可以根据特定的要求和约束来设计和开发最优的并行链。
十四。殊途同归——宇宙。先介绍一下Cosmos,从侧链开始。看左上方的图片。a和B是两条互为侧链的链。也就是说,链A包含了链B的SPV轻客户端,这样链A可以验证链B的交易.反过来,链B还包含链A的SPV轻型客户端,以便链B可以验证链A的交易.
作为侧链的结果,在链A和链B上发行的通行卡可以相互转移。如果将两条链扩展为多条链,A和B变成A/B/C/D/E/F,那么一个外推思路就是仍然使用成对链作为侧链,形成左下结构。
但是,这样做会有很多问题。每个链都得内置其他所有链的轻客户端,并同步其他所有链的blockheads,这当然是一个很大的负担。并且每个额外的链需要在所有其他链上被修改。随着区块链数的增加,复杂度以n*(n-1)/2呈指数增长,这显然是不可行的。
解决方法是改变右上图所示的结构,中间加一个轮毂。集线器也是区块链,它是所有其他链的侧链。也就是说,每条链条上的通行证都可以传递到轮毂上,再通过轮毂传递到其他链条上。网络互连的复杂度与区块链数成线性关系。
这是宇宙的修行。在Cosmos的定义中,到Hub的链接称为区域划分。访问分区中的集线器有两个要求。第一个是符合Cosmos标准的协议,即IBC链间通信协议。第二是要求区域具有即时终结性,以确保整个链的一致性。
而Cosmos可以支持多个hub的互联。对于现有的公共链,可以通过协议适配访问Cosmos Hub。Cosmos调用协议适配网关Peg区域锚分区。最终的结构就是右下方的图片所示。
我们从侧链推断宇宙建筑。但是回过头来看,Cosmos分区负责事务执行和数据存储,同时还可以互操作,从而达到碎片化的目的。所以我也把Cosmos当做一个零碎的扩张方案。
有些人可能不同意这种分类。不过没关系,Cosmos就是Cosmos,分类就是为了更好的理解它。不同的分类方法可以从不同的角度去理解和解释,没有绝对的对错。
Cosmos Hub和其他用Cosmos SDK开发的分区都采用Tentermint共识协议,封锁和终结的过程是一体的。只要做了封底,就要有2/3以上的审核人签字确认。这样做的好处是简单、快捷、秒级甚至次秒级、瞬间终结。
但是,在网络分区的情况下,Tentermint consensus可能会暂停阻塞。Cosmos Hub和partition都有自己的验证者组,不需要动态随机分组验证者。那么Cosmos如何保证跨链交易的有效性呢?根据我的理解,Cosmos回避了这个问题。
Hub无法验证事务的有效性,只能验证其存在。如果一个分区被恶意的验证者控制,那么这个分区中的用户资产是不安全的,并且可能被窃取。但这不应该被视为Cosmos的一个漏洞,而是它的设计选择。
宇宙经常与波尔卡多特相提并论,但实际上波尔卡多特和宁静在建筑上更相似。前几天的橙书文章做了三个村庄的比喻,很贴切。但从DApp发展的角度,尤其是今年和明年的重量级DApp发展,我们将主要从Polkadot和Cosmos中选择一个。
从技术上讲,宇宙比波尔卡多或宁静要简单得多。我这里说的简单不是贬义。在满足需求的前提下,技术方案尽量简单。所以Cosmos也用相对简单的方案达到了碎片化扩张的目的,是不是很棒?
真的很好,所以我也很看好Cosmos,它会非常适合某些类型的DApp。但正如我们一再强调的那样,有得必有失。Cosmos选择了简单,但却牺牲了安全性。PoS区块链的安全级别由总市值和质押率决定。
Polkadot上线后,假设dot的总市值为10亿美元,其中一半质押在网络上,理论上攻击Polkadot的主网络至少需要1.67亿美元,但实际上要多得多。显然是一笔巨款,所以Polkadot网络非常安全,跨链交易安全性高。
宇宙主线上线后,Atom pass也会有很高的市场价值,但是网络质押的Atom只是保证了宇宙枢纽的安全。分部和其他中心将发行自己的通行卡,以建立经济模型并获得安全保障。
但分区通常是具体的去中心化应用,应用规模和市场价值都达不到Cosmos/Polkadot的水平。所以可以预计宇宙分区的安全级别会低于宇宙中枢。
你在宇宙上执行跨链交易。您需要信任事务的发起分区、目标分区和中心。如果跨链交易中间有多个集线器,那么经过的每个集线器都应该是可信的。
一方面,需要信任的区块链更多,其中一些的安全级别可能不高。所以宇宙没有最小化信任。安全等级降低了,但是降低后够用吗?可能够不够,也可能因人而异,因应用而异。
Cosmos当然知道自己的不足,据说会在以后的版本中为分区提供安全保障。但是实现起来会非常困难。为了给分区提供安全性,需要大量的验证器。我们只能修改共识协议,将封锁与最终确定分开。当然,我们还要处理验证者的随机动态分组、交易有效性等问题。有了这个变化,Cosmos和Polkadot的复杂度就差不多了。
十五。DApp支持的比较那么宁静,波尔卡多特和宇宙哪个更适合DApp发展?我们来对比一下。
首先,DApp开发方法,所有三个连锁店可以使用智能合同。Polkadot和Cosmos带来了一种新的DApp开发方式,即针对特定应用开发区块链。Cosmos为应用链提供了工具Cosmos SDK,目前支持Go语言开发。Polkadot针对应用链的工具是Substrate,目前支持Rust语言开发。
Substrate是一个完整的应用链开发工具,有完整的应用链框架。Gavin Wood演示了一个应用链可以在一台全新的计算机上在15分钟内发布。此外,基板的所有模块都可以定制或更换,功能强大且灵活。
相比较而言,Cosmos SDK略显单薄,主要提供了Tendermint共识引擎、IBC链接通信协议、pass-through等核心模块。大部分上层建筑都需要我们自己去开发。
性能方面,Serenity每片100tps左右,依然优先考虑气价高的交易。Polkadot Hub应该可以达到上千个tps,并行链可以自己决定共识算法、硬件和网络。理论上没有性能限制。Cosmos Hub和大部分分区采用Tendermint,可以达到上千tps。
关于互操作性。Serenity和以太坊1.0一样,智能合约可以互相调用。Polkadot并行链通过中继与其他并行链互操作,通过桥与其他链互操作。
Cosmos分区可以通过Hub相互转移,也可以通过anchor分区相互转移。IBC消息也是一个数据字段,就像电子邮件的附件一样。通过扩展数据字段,分区还可以传输除公共卡之外的数据。
Access Serenity和以太坊1.0一样,开发者自己部署智能合约。Polkadot Relay需要拍卖时段进行访问,并抵押大量点。Cosmos类似于Polkadot,是Atom拍卖准入资格的质押。
然后是安全。如前所述,Serenity件就像标准容器。只要把DApp放进去,安全就有系统保障了。另一方面,Cosmos无论应用链是否连接到Hub,都保证了自身的安全性。Substrate开发的应用链有两种选择,一种是连接Relay成为并行链,另一种是由Polkadot进行安全保护;要么独立运行,保证自身安全。
最后,DApp升级了。Serenity和以太坊1.0一样,不支持智能合约升级。可能很多人对此已经习以为常,但我认为不支持升级是一个很大的缺陷,而且可能会带来严重的安全问题。首先,代码不可能没有bug。
Solidity等智能合约开发语言对形式验证并不友好。即使做了形式验证,要实现100%的逻辑路径覆盖也是不现实的。其次,DApp是一个互联网应用,互联网应用应该按需迭代进化。
有人认为智能合约是协议,所以不能更改。事实上,现实世界中的所有合同都有可以通过双方同意取消或修改的条款。想象一下,两家公司签了合同,现在双方都同意修改合同。因此,契约本身限制了不变性。这是多么可笑的情况。
更何况,别说法典,就是法律也不是一成不变的。可以废除和修改,但法典不能。是不是很奇怪?结果很可笑。一方面,DApp有强烈的升级需求;另一方面,平台不支持升级。因此,开发人员自己找到了一种方法,使用delegateCall等基本方法,实现了可升级的设计模式,而没有尴尬。
通过这种方法,开发人员可以在未经用户同意甚至用户不知情的情况下修改智能合约。那么代码成为法律的意义何在?用户怎么知道智能合约能不能升级,哪些逻辑会变,哪些不会变?只能自己看代码。所以也难怪以太坊只有那么几个用户。无论如何,我自己没有资格使用以太坊DApp。我研究过fomo3d的合约,没看出有随机数漏洞。
Parity的多签名钱包合约的一个小bug,锁死了几亿美金,坑了自己和很多人。如果你必须彻底研究代码才能信任和使用DApp,那么全世界可能有成千上万的DApp目标用户。
为了开发能够与集中式互联网应用程序竞争的DApp,有必要进行升级。而且必须是平台支持的规格升级,DApp也不能各显神通。类比安卓平台,手机App经常升级,但用户必须知情同意。新版App增加了权限要求,要展示给用户。
这些都是平台控制的,手机App只能跟随,不能幸免。DApp的升级应该更加规范和严格,因为DApp管理加密资产,没有可信中心。Polkadot和Cosmos都允许应用链升级,Cosmos分区自己处理升级,Polkadot的并行链可以安全升级。
我还没想好Polkadot怎么实现平行链安全升级。几周前,加文伍德去中国讲信任虫洞,我不太懂。谁知道这部分?希望大家给点建议。
总而言之,在去中心化的区块链上实现标准化、安全的应用升级是非常困难的,但是除了支持升级别无选择,而且是平台保证的标准的安全升级。我觉得从扩展性上来说,只有Polkadot的方向选择是正确的。
十六。网络拓扑结构对比我们先来说说区块链三大生态系统Serenity、Polkadot、Cosmos全面开发后会形成什么样的网络拓扑结构。注意逻辑网络,而不是物理网络。此外,网络的全面发展也需要时间。这里讨论的是五年后左右的展望,部分内容是根据架构设计做出的推测。
首先看左侧。宁静网络看起来像一个仪仗队方阵。烽火台是旗手或领队,方队的每一列都是标准件。每一片都可以携带一些DApp。中间的图是波尔卡多特。Polkadot网络是一棵树,它的根是一条中继链,可以连接多条并行链。并行链可能是特殊业务的应用链,也可能是支持智能合约的DApp平台。
其他类型的区块链可以通过网桥接入中继。对Polkadot体系结构的分析表明,由于验证器数量的限制,单个继电器支持的并行链的数量是有限的。大概是几十到几百,很难达到几百。
当然,即使达到几百个,Web3的愿景也无法完全实现。所以Polkadot未来会支持中继级联。即一级中继接入根中继,二级中继接入一级中继,具有无限扩展能力。
右图是宇宙。Cosmos的多个hub可以互联,每个hub连接多个分区。也有锚分区对接其他类型的区块链。Cosmos网络拓扑看起来和Polkadot很像,都是树形结构。然而,在宇宙的中心之间,不存在谁为谁提供安全的问题,所以不存在等级制度。
如果把层级关系看作连接的方向,那么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 的区块链也都可以连接进来,再加上侧链等二层网络,异构区块链的互联网络将会形成。
十七、辨析「跨链」
本次分享已经接近尾声了,我们才开始讨论跨链概念。原因是我认为「跨链」概念有歧义,容易产生误导。至少我自己被误导了很长时间。以前看关于 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 开发技术
我个人认为目前已经落地的 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,在获得验证和反馈之后,再开发功能更完善、使用体验更好的应用链。
十九、开发者如何选择?
后端或者全栈工程师如何选择 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/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 和 Cosmos 设计理念的人,都不会是最大化主义者,也不会认为 Polkadot 的目标是替代以太坊。
至少以太坊基金会和 Parity 公司都不这么认为。Parity 公司一直是以太坊生态的重要支柱之一,他们也在积极参与 Serenity 开发。
前些时候,以太坊基金会向 Parity 公司支付了 500 万美元,即是对 Parity 多年支持以太坊的感谢,也是资助他们继续开发维护以太坊节点软件。我对比特神教已经见怪不怪了,至少我能理解他们为什么那么想那么说。
但是现在以太坊生态里,也开始出现以太神教的趋向,就有点不可理喻。开放是以太坊愿景的基础,以太坊也带领我们看到了去中心化价值互联网的可能性。所以我认为支持以太坊,但是反对其他区块链,是一种自相矛盾。
前面也谈过,人们对去中心化应用的需求是多样化的。Serenity、Polkadot、Cosmos 和 EOS,还有其他 DApp 平台公链,都做了不一样的设计选择,或者说是不同的折中。因此他们会非常适用于某些需求,而不太适用于其他需求。
互联互通是大势所趋,任何一个生态如果选择孤立发展,就会被区块链互联网产生巨大的网络效应所挤压,最终被淘汰。因此我们可以期待,区块链的未来会百花齐放,更加参差多态,希望区块链和去中心化应用成为人类的幸福之源。