Substrate是什么

如果你关注了所有Polkadot的发展,你可能会看到“Substrate”被提到很多次。 它是Polkadot的项目的一个重要组成部分,但实际上关于它的信息很少。它不在白皮书或黄皮书上——或者至少,不是“Substrate”的名称——它的规范仍不断变化。在高层次上,它是一个框架,用于创建加密货币和其他分布式系统使用最新的区块链研究技术。不过,这不是很有帮助。至少,这不是对我很有帮助。

我认为理解 Parity Substrate最重要的部分是它不属于Polkadot。即使Polkadot是由Substrate构建的,并且在Polkadot上Substrate构建的项目也可以运行,你现在就可以用Substrate构建你自己的新链,甚至你不需要等待Polkadot完成或者概念验证被公布。

所以Substrate是什么? 你可以把它当Express或另一个web应用程序框架,但是它是为了构建分布式系统,如加密货币或消息总线。正如大多数web应用程序不需要重构自己的HTTP,我们相信这是浪费精力——为每一个团队创建一个新的区块链时,必须从头开始实现所有网络和共识代码。更不用说密码学家、安全研究人员、网络工程师,开发人员(以协调更新)等等需要雇佣和支付,然而真正意义上的业务逻辑是你的产品。如果你想建立一个使用Substrate新项目,所有你需要做的就是实现一个非常小的调用代码,然后就能得到:

  • 共识机制,确定性和投票逻辑。即使你不是建立一个需要区块链的加密货币甚至一个项目,这些也是可用的,因为这意味着你可以得到 拜占庭容错 。所以您的系统仍将继续正常工作,即使有些节点被破坏,禁用或是恶意的;
  • 网络,点对点发现,同步等等。
  • 一个有效的,确定性的,沙盒的 WebAssembly runtime,这可以用于智能合约甚至跑其他基于Substrate的项目。当然,你也可以不需要使用WebAssembly,您可以编写自己的虚拟机翻译器,但我们强烈相信使用WebAssembly runtime的好处,这样做可以让你利用我们的WebAssembly工作成果和全球社区的其他开发人员创建的工具;
  • 节点能够无缝地运行在浏览器中,可以与任何桌面或云节点沟通;
  • 一个跨平台的数据库/文件存储的抽象,甚至浏览器也可以工作;
  • 无缝的客户端更新,任何会影响共识的更新由编译WebAssembly的代码,然后部署它作为另一个网络上的消息。不仅如此,你可以存储多个版本的共识代码编译为本地代码,Substrate处理了确保本机代码和目前部署在WebAssembly上的代码被依序执行的复杂性。你可以得到本地代码的速度,但是因为有WebAssembly回撤机制,你可以以自己的节奏部署本地节点,并且永远确保不会意外得到一个硬分叉或其他共识问题。
  • 在Polkadot被发布的那一刻立即开始运行你的项目的能力。尽管项目由Substrate可以编译为使用单独的客户端(和现有的区块链一样),但是因为Polkadot实现了Substrate API,你可以利用共享Polkadot提供安全性和互操作性。Polkadot本身是使用Substrate构建的,它允许我们快速得到框架中的任何漏洞的反馈,允许我们运行一个Polkadot 测试网络,甚至启动Polkadot的第二个实例本身作为它的侧链。如果你不知道Polkadot,或如果你只是没有足够被宣传到关于它的好处,你可以看看 这篇Polkadot的博客上的文章

那么你还有什么是没有免费得到的呢(还需要做些什么)?本质上它只是你的状态机,包括类似交易的东西。为了使Substrate尽可能通用,它没有交易。相反,我们称之为“外在(extrinsics)”,这仅仅是二进制文件,您可以用它来存储任何你想要的数据。对大多数链,这些外在将包括交易,当然你不需要实现它!你完全可以从网络消除货币的概念,使用Substrate创建一个分散的Erlang式样的actor模型并发系统,和一系列信任机构来验证网络的正确行为。然而,假设你想要货币和交易,实现交易的格式可能是不重要的——只是一个交换格式和一个从您选择的语言访问数据的数据库。甚至比其他分布式架构更容易像微服务——因为它操作的代码和数据是存储在同一个地方,只是为了存储你不需要担保交易向后兼容性 [1] 。链与私人交易的实现可能更复杂。所有的东西都没有完成,所以你会在不同的地方看到不同的描述。但是这里有一个对你为什么需要为得到一个完整区块链的简单解释:

  • 一个函数基于前面的块的头创建一个新的待定块。消息头包括:
    • 块的高度;
    • 一个区块状态的“加密合约”,这对轻客户验证块正确与否是重要的。加密合约是和散列同样的角色,没有使合约失效前您不能改变状态
    • 一种对主体中所有外在部分的加密合约,它阻止外在部分被改变;
    • 一个区块祖先的散列值;
    • 一些额外的任意数据。这些数据的一个用例将供客户更新——因为轻客户仅同步头,如果你想更新它们,你不能作为一个外在实现更新或轻客户不会接受他们。
  • 一个函数,对一个待定块添加了一个外在(比如一个交易)。这也应该更新链的状态(例如,账户余额);
  • 一个函数,它接受一个待定块和生成一个块。这个完成了的块可以传播到整个网络;
  • 一个函数执行现有的块。这是由完整的节点运行的,来确认收到块在接受之前是有效的。例如,在value-bearing链你可以发现没有人试图转移超过其余额的资金。

这种设计的一个缺点是,你必须手动确保状态转换在创建一个块和当执行现有块时的状态转换时,是保持同步的。如果你不这样做,你会得到共识的问题! 这在未来可能会改变,但现在在实践中可能不是大问题,因为你可能会委托一个共有函数来执行外部部分。

此外,您需要提供一个验证人的集合。这一概念涵盖了proof-of-authority和proof-of-stake /委托proof-of-stake链,虽然我们无意支持proof-of-work现在在Substrate的链。验证集是一系列对应私钥的公钥,这些私钥被认为有效地签署一个给定的块。设置可以改变,但是每一块被在块创建时选择的集合所验证。你不必处理验证人的选票难题,甚至他们私有块的“担保”,这是由Substrate自动处理。验证集可以一样大,但有一个权衡。你越少拥有验证人,他们越容易勾结,但你有更多验证人将会需要验证任何给定的块,在它被认为是“完成”(即unrevertable) [2] 之前。

我们不能让Substrate自动为您处理权益证明,因为权益证明依赖于您包括value-bearing通证的项目,而不是所有的项目。 测试网络可能故意让通证没有价值,项目使用Substrate来实现消息总线可能没有通证。然而,在Substrate顶部编写一个库很容易,它强制使用通证,并且自动为你提供交易和权益证明共识 [3] 。一件关于Substrate的事是它相对容易地构建更高级的库在其上。即使你在建立一个新的区块链Substrate时得到很多自由,它仍然是一个相对最小的基本类型,它并不是为了直接使用。相反,它应被视为一个构建块和可以分解成助手库的其他常见功能。尽管细节尚未被证实,但是Polkadot不是唯一基于Substrate构建的链;随着平台的成熟,更多的库可以建立新链和写现代web应用程序一样容易。

我知道“即将”在科技文章中是和政客的承诺一样的信服度,但无论如何我要这样结尾。尽管基于Substrate已经是可能的,但是我们目前缺失学习材料。现在,没有办法,如果你不是Polkdot团队的一员,你真的不可能学会怎么做我刚刚告诉你的所有事情。不过,我们正在努力,所以如果这让你兴奋,请关注马上到来的Substrate教程和文档。


原文链接:https://www.parity.io/what-is-substrate/

本文标题:Substrate是什么

文章作者:木南

发布时间:2019年04月20日 - 10:04

最后更新:2019年09月10日 - 14:09

原始链接:http://munan.tech/2019/04/20/what-is-Substrate/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

点击下方打赏按钮,获得支付宝二维码