总结|关于波卡和 Substrate 的一切
加入 www.polkaworld.org 社区,共建 Web 3.0!
在 Parity,我们目前主要专注开发三种技术:Parity Ethereum(Eth 1.0 和 Serenity),Parity Substrate 和 Web3 基金会的项目波卡(Polkadot) 。我们的最终目标是希望实现 Web3.0 的愿景,即 “为应用程序开发商提供组件的一套包容性协议。这些组件代替了 HTTP、AJAX 和 MySQL 等传统 Web 技术,而提供了一种创建应用程序的全新方法。这些技术为用户正在接收的信息、正在发送的信息、正在支付的费用以及他们正在接收的回报,提供了强有力且可验证的保证。通过授权用户在低壁垒市场中自主行动,我们可以确保审查制度和垄断地位难以插足(Gavin Wood)。”
想了解更多 Web3 的愿景,请参阅 Gavin 在 2014 年的原创博客文章和在 2017 年的一篇后续文章:
http://gavwood.com/dappsweb3.html
https://medium.com/@gavofyork/why-we-need-web-3-0-5da4f2bf95ab
到目前为止,对于波卡和 Substrate 已经有了非常广泛的知识库。这篇文章将通过这些材料来深入了解这两种技术的发展方向以及原因,同时还将展示以太坊(Ethereum)或 Zcash 等公链网络是如何融入波卡和 Substrate。
起源
Gavin Wood 博士在 2016 年构思了波卡的最初想法,当时他正在等待一个新的以太坊规范,其中包括分片。早在那时,信标链/中继链很显然有必要去连接分片并协调信息传递。
关于波卡是如何诞生的一手信息,可以在 Epicenter 的第 259 集中找到 https://epicenter.tv/ 。
Gavin 再进一步考虑, 设想了一个系统,就是连接到中继链的分片并不是完全一样的,而是允许不同的节点运行不同的应用程序逻辑,使每条链都有自己的平台。
这将增加整个系统的复杂性,并且更难以建立。但在 WebAssembly 中发现实现这一愿景的关键缺失:通用和抽象的机器规范,它可以在不同 runtime(链的应用逻辑) 的链链之间进行调解。
创建一个区块链可以共存和互补的系统,有可能克服链泛滥的问题,在这里链之间互相竞争,争当最好的区块链。
如果一个分片系统中的所有分片都可以有不同的任务,那么它们将能够形成一个非常专业的分片(即区块链)的局面,而不再像往常一样,需要在专业区块链和通用系统间做出取舍。让我们更深入地了解一下这一点。
互操作性是专业化的关键
目前,很多区块链试图成为 “首席大厨兼洗碗工”,将智能合约、货币、治理等所有内容都纳入其中。如果你在其中这些区块链上构建应用程序,将受到平台的限制、瓶颈和治理决策的约束。另一方面,你也可能从这些区块链的用户基础中受益。
通过让专业链与其他专业链交换信息,我们能够恢复网络效应,而网络效应通常被认为会阻碍专业链的发展。
Polkadot 使用中继链,来实现其生态系统中的区块链之间的任意消息传递。中继链的通用性足以让相邻的链(我们称之为平行链)拥有自己的应用逻辑。你可以自由使用任何语言(Rust、C / C ++、C#、Go 等)编写平行链。你只需要实现波卡可以调用的特定功能的接口,来处理传递给链的消息。
波卡连接了从通用链到特定应用链的一系列区块链,以创建支持更高级应用程序的平台。一些利用跨链任意消息传递的此类高级应用程序的示例:
将现实世界的数据上链的预言机(Oracle)服务
在多个应用程序中链接用户身份的身份管理系统
去中心化交易所的 order books 和托管
从其他网络或控制器接收消息的物联网(IoT)网络
跨链智能合约通话
私有链和公有链之间的消息传递
可拓展性
当我们通过引入互操作性,解决专业化 vs 通用化的难题时,我们还消除了可拓展性(scalability)的瓶颈。除了交易吞吐量之外,完全通用的、独立的智能合约平台还存在交易冲突问题。因此,交易通常是按照顺序运行,而不是并行运行。通过将任务委派给不同的平行链,我们能够并行地运行交易,而不必担心冲突。
在波卡的第一个版本中,有数十条区块链可以并行运行,并通过一条中继链连接。开发过程仍在进行中;我们目前估计中继链将能够承载大约 100 个平行链,但是我们也期待卡槽数量能够在 1,000 到 10,000 个之间。如果几十条区块链可以并行运行,那么该系统的可拓展性将是当前 PoS 系统的一百倍。
波卡的第二个版本可能有多个中继链连接到根中继链(零级)。这是非常有可能的,因为考虑到波卡中继链本身是用 Substrate 开发的,大多数平行链也是使用相同的技术堆栈构建的。有了这些一级的中继链,我们希望与当前 PoS 系统相比,扩展性能扩大到 1,000 倍至 10,000 倍。然而,最后的结果只能在以后进行评估。
安全角度
目前来看,克服单个区块链设计的固有局限性看起来是很有希望的,但是我们尚未讨论这种系统中同步和共识的各个方面。波卡可以使确定性的、可理解的消息在平行链之间传递,但是如何确定整个网络中的交易顺序?如何在每个平行链以及整个系统中实现安全?乍一看,这似乎不是问题。如果连接不同的链,则每个链都有自己的验证人节点来维持链的安全,就像众所周知的多链场景(如侧链或 Cosmos )一样。
共享安全性
在代理两个链时,首先想到的问题可能是以下场景。交易从一个 PoS 链发送到另一个 PoS 链。链 1 的最终性的经济安全保障较弱。在攻击中,交易被还原,包含它的区块被放弃。链 1 位于不同的分叉中,相应的区块不再包含此交易。
但是它的实际价值已经转移到了链 B。链 1 的弱安全性直接影响了链 2。实际上,这样就可能导致双花攻击。
想象一下,不是两个,而是一百个相互连接的链,它们各自具有交换价值的安全级别。安全性最弱的链最终定义整个系统的安全性,代表最薄弱的环节。因此,最好让所有平行链具有相同的安全保证。这可以通过共享安全并授权给波卡中继链的来实现。
波卡的安全模型将资源共享化,以解决网络中最弱链问题。
此外,每个验证人只能投入一定数量的资源(PoW 中的计算能力或 PoS 中的财务权益),去加剧最弱链的问题。当验证人开始保护不同的链时,某一部分链(首先是那些缺乏有吸引力的激励结构的链)最终将获得较低的经济安全性,从而更容易成为恶意行为者的目标。
共享安全性的另一个好处是,不必寻找验证人节点来保护你的区块链,而是可以完全专注于链上的任务(比如 runtime ),将安全性的一部分交给波卡中继链。
让区块链开发更容易
到目前为止,我们已经了解到波卡是一种异构多链协议,可实现区块链互操作性和平行链的共享安全性。现在我们来探索如何尽可能简化平行链的实际开发,从而充分利用波卡的可能性。
当我们开始在 Parity 构建波卡时,我们意识到,我们正在重复已经为以太坊和比特币客户端做过的大量开发工作,例如编写 RPC 和数据库组件。即使是最特殊的区块链也具有一些共同点:哈希算法、数据库、网络等。
虽然单个区块链的构想或设计是多功能性和专业性的冲突,但许多不同链的创建过程却导致了另一种权衡。在具有同构分片的系统中,可以通过复制分片来拓展系统。对于波卡中的异构分片,每个分片都必须单独设计和实现,从而使开发过程本身无法扩展。
Substrate:一个高效构建不同区块链的框架
为了高效地构建许多不同的区块链,Parity 开发人员将构建区块链所需的所有功能都放入了叫 Substrate 的框架中。这个想法是在把所有在以太坊和比特币开发过程中学到的东西,尽可能地用来简单轻松地去创建一个区块链。Substrate 是通过模块化方式创建的,以提供技术自由,但也使诸如账户、余额、治理和智能合约之类的功能像插入一个库一样容易。
用波卡联合创始人 Robert Habermeier 的话说,“Substrate 是一组用于处理编写区块链时的所有烦人事情的库。” Substrate 有效地将区块链的各个功能作分离为模块,并将它们进行足够的概括,以便它们可以有效地用于不同的场景,而它们的可管理性使其能够接近即时实现。Substrate 被开发用来创建区块链,并将可以轻松的连接到波卡。
30 分钟内,在一个原装出厂的笔记本电脑上开发出一条功能齐全的区块链 —— Gavin Wood 博士在柏林 2018 Web3 峰会上演示 Substrate。
专为最大程度的技术自由和轻松而设计
Substrate 的多层架构让开发人员可以在开发的方便性和技术的自由之间进行选择。这三层分别是 Substrate Core(具有 Polkadot-Core 集成)、Substrate SRML 和 Substrate Node。
开发者可自由选择使用多少 Substrate 框架
要创建区块链并将其连接到波卡,在技术层面上,你可以从头开始构建自己的区块链,并在 WebAssembly 中为其配备区块验证功能。从头开始意味着您必须实现自己的节点、RPC 同步、网络、加密、数据库、存储、共识以及扩展功能,像轻客户端和 telemetry 。这种简单的方法被称为 Polkadot Core。
如果你不想从头全部创建这些东西,你可以从 Substrate Core 开始。Substrate Core 为你提供了上述所有功能,仅要求你编写自己的 runtime 代码(状态转换功能),而且还提供自定义网络,区块编写和交易排序功能的可能性。
如果决定使用 Substrate Runtime Module Library(SRML),那么你要做的是从库中选择所需的模块,并使用所需的参数进行配置。你的区块链可以使用事件跟踪和区块链浏览器等工具。此外,如果需要你还可以修改现有模块或编写自己的模块。
区块链开发中,方便程度相当于客房服务的是 Substrate Node。在 Substrate Node 上,你只需提供 JSON 配置文件即可获得完整的智能合约区块链。
Substrate 为你提供了快速开发区块链的工具,而无需处理每种功能背后的复杂性。
了解更多 Substrate 的信息:
https://www.parity.io/substrate-has-arrived/
波卡不是 Substrate 不是波卡
尽管 Substrate 可以为波卡非常容易地构建区块链,但波卡网络中的区块链不需要使用 Substrate 也可以。即使你不想把你的区块链连接到波卡,你依然会发现 Substrate 是一个非常好用的框架,它可以用来创建最先进的区块链。
在未来,可能会有一些对底层冗余的框架,它们也经过优化与波卡集成,为开发者提供了另一种选择,或者你也可以从头开始构建平行链。
有关波卡与 Substrate 如何关联的更多信息,请观看 Fabian Gompf 在 Devcon IV Parity&Polkadot meetup 上的演讲。https://www.youtube.com/watch?v=jyieXzflPAk
集成现有的区块链
Substrate 和波卡不打算取代现有的基础设施。相反,它们起到连接的作用,填补了工程可能性的空白。与基于智能合约的 dapp 相比,波卡平行链需要更多的努力,一些应用程序不适合设置一个完整的平行链,有些应用程序则需要。这取决于每个应用程序的范围,必须单独评估。与平行链相比,智能合约代表一个沙盒环境,需要较少的安全措施。有人可能会说,平行链是为互操作性(独立应用程序/链之间的通信)而优化的,而智能合约是为内部操作性(链运行时内的通信)而优化的。
平行链是波卡网络中的区块链,由波卡的中继链保护,因此无法选择自己的共识机制。如果一个区块链想要使用自己的共识机制,它可以把平行链作为 “桥” 去连接波卡网络。
一条桥链(从一万英尺的高空观察波卡架构)
桥接链允许一条独立的区块链(如以太坊)通过其特有的共识机制连接到波卡网络。与共享安全性的平行链不同,像以太坊主网这样的网络将保持独立。
基于 Substrate 链的可能表现
在本例中,共享安全性的平行链功能仅仅扩展到桥,而连接到桥另一侧的以太坊更像是一个侧链,具有相互解释彼此区块头、状态转换和最终性(finality)的能力。
PoS 区块链中的最终性是指一种最终状态,如果还原到以前的状态将导致大量 Staking 的代币被削减,因为大多数验证人已经批准了最终状态。虽然在技术上还原已完成的块是可能的,但那意味着验证人集犯了一个大错误。“还原就意味着绝大多数验证人的错误” 这样的最终性,在 PoW 链中不可能出现,因为验证节点(矿工)理论上是无限的。因此,PoW 链具有 “概率上的” 最终性,因为在某些情况下,还原的概率低到可以忽略不计。
桥接具有概率上的最终性的链也会对延迟产生影响。这意味着对于比如从以太坊到中继链的交易来说,交易的最终确认需要等待适当的时间周期是合理的。而位于波卡网络内部或来自波卡网络的,拥有自适应、渐进的最终性的交易,可以说能更快、几乎是立即最终确认。这导致退出桥接链的交易需要等待一些时间,但在波卡网络中的交易几乎没有等待时间。
无分叉的 runtime 更新
到这里,我们已经强调了波卡互操作性中的可拓展性和安全性的影响。然而,还有一个问题,就是分叉了会发生什么。一旦区块链变得相互依赖,分叉的影响变得大了很多(跟以前一个独立网络分裂为两个独立网络时相比)。对于中继链和平行链来说都是如此,而 Substrate 带来的最令人兴奋的特性之一,就是无分叉 runtime 升级。
通常情况下更新网络
升级区块链网络的常见做法是更改底层协议的规则。这样做是为了引入新的特性或改变现有的规则。如果升级与旧版本不兼容,则会强制节点更新,以便继续参与网络的当前版本。不更新的节点将无法理解新的规则,并将与网络分离,可能形成替代网络。虽然临时分叉是由于网络寻求共识而发生的,但有计划的永久分叉是由于有意的网络更新而发生的。这实际上是通过重置网络来更新网络,这在可互操作的环境中是不实际的。波卡的中继链是一个异构多链生态系统的旋转入口。很容易可以想象到有两个版本的中继链所引起的问题。
通过 Substrate 更新网络
由于波卡是建立在 Substrate 之上的,我们可以利用 Substrate 的特性绕过中继链的分叉,也可以绕过其他基于 Substrate 开发的区块链。那 Substrate 是如何实现链上升级的呢?
如果一个区块产生并通过网络传播,那么在对它执行各种通用检查之后,Substrate 节点将执行该区块。执行一个区块是由 Substrate 节点来完成的,但是这样做的动力是来自于链的 runtime。
执行区块意味着什么?一旦共识确定区块有效,节点将开始执行它包含的状态转换(state transitions)。如果成功,节点将存储区块。在处理状态转换时,节点将有效地访问其 merklised 存储数据库,该数据库基本上是一个密钥-值(key-value)存储。Substrate 在此密钥-值存储器上操作,基本功能为设置状态和获取状态。现在 Substrate 可以提供一个特殊的情况下设置的状态,即用 key:code。在这种情况下,Substrate 需要提供一个 WebAssembly(Wasm)runtime。由于区块链 runtime 在 Wasm 中运行,因此它可以呈现一个新的 Wasm 代码二进制 blob。这段代码将作为状态转换的一部分执行,从而导致 runtime 按照 blob 中的指定进行更新。
每次 Substrate 执行一个区块时,它都会检查其代码版本,从而能够从 native runtime 切换到链上 Wasm runtime,以防节点未运行最新版本。
链上治理将在波卡中发挥重要作用。管理该网络的机制正在设计中,将围绕基于质押的投票方案展开。一些额外的措施,如理事会以及投票权、其他计票方案和授权投票,将确保治理过程是有效的、切实可行的,并充分尊重网络中的少数人意见。但是如果治理应该是绑定的,那么来自引用的决策必须直接在链上执行,这需要波卡 runtime 进行更新。
链的治理机制可以负责 :code key。这意味着 runtime 更新只能由治理决策触发。例如,在投票结果为正的情况下,预定义的密钥会自动输入到状态转换集合中,从而在链上绑定上做出治理决策。
总结
本文介绍了波卡和 Substrate 背后的核心概念,它们是如何形成的,以及它们对整个区块链生态系统的意义。正如我们所看到的,Substrate 和波卡是完美互补的。后者使得连接不同特性的链成为可能,而 Substrate 则使我们能够以一种高效、安全和相对容易的方式创建这些链。
太长不读版
Polkadot 是一种异构多链协议。这意味着连接到中继链的分片并不完全相同,而是允许不同的节点运行不同的应用程序逻辑,从而使每个链成为自己的平台。如果一个分片系统中的所有分片都可以有不同的任务,那么它们将开启专业化分片(即区块链)的局面。
通过让专业链与其他专业链交换消息,我们能够恢复通常会阻碍专业链的网络效应。波卡连接了一系列区块链,从通用到特定 app,以创建一个支持更高级应用程序的平台。
当我们通过引入互操作性来解决专业化与通用化之间的难题时,我们还消除了可拓展性瓶颈。
波卡的安全模型集中了资源,解决了网络中最薄弱环节的问题。平行链是波卡网络中的区块链,由波卡的中继链保护,因此无法选择自己的共识机制。共享安全的另一个好处是,不必寻找验证节点来保护区块链。
如果区块链想要使用自己的共识机制,它可以把平行链作为桥去连接波卡网络。
为了有效地为波卡生态系统构建许多不同(异构)的区块链,Parity 开发人员将构建区块链所需的所有功能放入名为 Substrate 的框架中(https://parity.io/substrate)。Substrate 的多层架构让开发人员可以在开发的方便性和技术的自由性之间做出选择。
尽管 Substrate 让创建适合波卡的区块链变得非常容易,但波卡网络中的区块链也可以不需要使用 Substrate 来构建。
Substrate 具有无分叉 runtime 升级的能力。一旦区块链变得相互依赖,分叉的影响要比一个独立网络分裂为两个独立网络的影响大得多。
下一步
关注波卡的推特获取波卡最新消息。https://twitter.com/polkadotnetwork
如果你想尝试 Substrate,可以从 Substrate Developer Hub 开始。https://substrate.readme.io/
原文:https://www.parity.io/a-brief-summary-of-everything-substrate-polkadot/
翻译:PolkaWorld 社区
更多内容:
波卡周报 | DOT 映射、KSM 首发库币、与万向发布 Web 3 孵化器,接下来嘞?
Parity CTO 介绍 Substrate 生态最新进展
扫码关注公众号,回复 “1” 加入波卡群
关注 PolkaWorld
发现 Web 3.0 时代新机遇
点个 “在看” 再走吧!