密码极客 | 国内最权威的区块链技术创投社群

为什么我们需要Substrate?

VOBCVOBC 2019-04-26 9,559 次 收藏0

image.png

 

Substrate简介

今天我们将给大家介绍Substrate,这是一个可以帮助您构建自定义区块链的库。Substrate由奇偶校验技术(Parity Technologies)创建而来,它充当了Polkadot的基础层。

Subatrate是什么?

某些程序或某些进程中的底层基质 (牛津词典)。

顾名思义,基质意味我们可以在其上扩展和构建东西。比如,我们可以构建区块链,或者以Polkadot为例,构建整个区块链家族。

为什么我需要Subtrate?

软件都是抽象的概念。

计算机科学的历史表明,程序语言正不断地变得越来越抽象:从离散逻辑到集成电路和CPU;从机器码到汇编,到C,再到C++、Rust、Haskell等。

编程API也是如此由来。例如,现在几乎没有人用纯HTML编写web。

“每一个问题都可以通过引入另一抽象层来解决。除了太多抽象层的问题我们无法解决…因此我们发明了框架。”——安德鲁•柯尼格(Andrew Koenig)在富时指数的措辞。

每个抽象层都试图解决特定的问题。那么,创建Substrate是为了解决什么问题呢?事实证明,在你着手实现全新的区块链方案之前,需要考虑很多问题:
·为什么人们还需要另一个区块链?!

· 了解各种加密原语:加密、签名、RNG等。

· 了解共识算法和容错投票。

· 选择浪费证明(Proof of Waste),权益证明,权威证明(Proof of Authority)?或者是完全不同的内容?

· 熟悉区块结构和高效存储,消息序列化。

· 了解P2P网络、对等点发现、区块和交易闲聊。

· 了解状态机,运行时执行,智能合约。

· 了解轻客户端支持

尽管Substrate无法处理上述第一项,但它可以帮助您处理剩下几项。它囊括了我们多年来实现区块链的经验,精心的设计、以及现有的编写和测试实现。

当然,你可以手动执行上述所有任务,但你可能实现的是一个临时的,粗糙的测试且非文件化的方案。通常自己设计或实现加密算法被认为是一个非常糟糕的主意,除非你是一位密码学专家,而且了解自己在做的事情。

因此,Substrate为你提供典型算法的通用实现,可以让您专注于项目的本质:区块链的业务逻辑,即它的状态机。

让我们了解一下区块链最重要的部分,看看Substrate可能会提供什么。

区块链扮演持久存储的角色

区块链的作用是提供一种可验证的、在全球范围内持续的方式来存储和修改数据,这意味着所有各方都以一种零信任的方式来检查,并在任意时间点就哪些为真实的值达成一致。此外,一旦数据被密封,就是持久保存,且根据共识,无法再进行修改。

这是存储账户密钥及账户实际余额的加密货币被广泛应用的一个属性。然而,需要指出的是,加密货币并非唯一可能实现的区块链应用程序。基本上,几乎所有系统需要通过区块链以某种方式实现全局一致、持久存储和可验证交易历史。

Substrate提供了极易使用的高效存储,并且与WebAssembly (Wasm)运行时紧密集成。

区块链扮演函数的角色

如果要根据挂起操作(pending operation)更新区块链状态并更改其存储,我们需要知道操作的时间点。

这种操作点可以表示为一个函数,用于接受当前状态和一组挂起操作,并生成第二个新的链状态。在区块链中,我们称这样的函数为状态转换函数,简称STF。

Substrate可以以一种非常易于管理和移植的方式定义这样的函数。与web页面上执行的JavaScript非常相似,您可以编写一组统称为runtime(运行时)的函数,这些函数充当STF。此外,这样的实现是可移植的,不依赖于处理器体系结构、操作系统、浏览器,也不依赖于任何其他平台。

image.png

事实上,甚至与Substrate的底层技术也是紧密相关。Substrate使用WebAssembly作为其运行时的通用语言,与Mozilla、谷歌和Apple等大公司现在集成的技术完全相同,可以更快地替代JavaScript,但仍兼容web。

安全性和速度

使用Wasm编写区块链逻辑和智能合约,可以快速和可靠地执行逻辑。但Substrate可以更快地执行代码,而且不需要任何虚拟机费用。

Substrate最具革命性的部分之一是,将STF的运行时映像与其他有效负载一起存储在链上。这意味着可以以安全和验证的方式更新运行时和整个链的业务逻辑。甚至,由于Substrate及其运行时模块库是用Rust编程语言编写的,因此它们可以被转换为本机代码和Wasm。

image.png

在任何时候,客户端软件都有两个编译的运行时副本:一个是在软件中本地编译的,另一个是VM执行的Wasm映像。当执行运行时函数时,客户端软件会检查运行时的链上Wasm版本是否与其编译到本机的内置版本匹配。这样,客户端软件将运行时函数的执行委托给本机代码版本。

Forkless升级

当在链上更新运行时映像时,一些客户端却还未更新他们的软件。在这种情况下,它们的节点将在Substrate的Wasm集成虚拟机上解释正确的运行时版本。因此,在任何情况下,网络上的所有节点总能正确地同步链(尽管处于不同的效率级别),从而防止链分叉。

网络

区块链依赖于众多网络参与者进行通信。典型的解决方案是使用点对点技术进行通信,Substrate也是如此。P2P是一组用于创建去中心化网络应用程序的技术通用名称。

其主要思想是拥有一个自我维持的网络环境,在此环境中,每个参与者(通常称为节点)都能够在网络中运行,而无需预先配置或与某个权威机构交互。

为了确保节点可以随时加入或离开网络,而不影响整个网络的连接,Substrate使用了libp2p的Rust实现,这是一个很有潜力的网络堆栈,拥有设置分散网络环境所需的所有内容。

自定义消息

最简单的情况是,您甚至不需要考虑网络,因为Substrate为您完成了所有工作。您只需提供区块链的状态转换函数,并将所有网络交互留给底层处理。但是,如果您的区块链需要发送自定义消息,则可以提供自定义消息及其处理逻辑的网络协议,来专门自定义和扩展网络子系统。

共识

有一个允许您从一个状态移动到另一个状态的状态转换函数很好,但是还不够。您还需要一种方法让所有节点都同意下一个状态的形式。

作为一个银行账户的所有者,你最不希望发生的事情就是你和你的银行就账户金额发生分歧。区块链让各方在不互相信任,即使存在恶意参与者,他们正积极试图破坏系统并窃取您的钱的情况下,达成共识(因此是零信任)。

这是使用一种具有拜占庭容错(BFT)属性的共识算法实现的。如果一个系统是BFT,这意味着节点可以达成一致,即使其中的一些节点行为糟糕,这些行为有勾结、保留消息和离线。BFT共识系统可抵抗不同程度的网络问题,比如消息重新排序或延迟。一些BFT共识系统的设计是这样的:当节点行为不端的时候(例如一次为两个区块投票),它们可能会受到惩罚,并在链上削减股份。

Substrate支持的每个共识引擎,都将设计一个运行时模块来处理错误行为的证明。可以由运行时来评估行为不端证明(proof of misbehavior)的影响。

从数学上已证明,只要网络中2/3的节点是诚实的,并按照协议运行,该协议就是可行的。这就是为什么网络中要很多节点参与的关键原因之一。

共识是所有区块链应用程序的关键部分。幸运的是,Substrate提供了一个现有的BFT 共识实现,几乎开箱即用。

根据使用场景,您可以使用现有的区块创作逻辑,也可以用自己的逻辑。在后一种情况下,您可以使用BFT的通用实现并使其适应您的需要。

Substrate将继续进化,并将更多的共识算法添加到它的库中,包括Web3基金会开发的,基于GRANDPA的(全称: the GHOST-based Recursive Ancestor Deriving Prefix Agreement )终结小工具。

此外,由于Substrate是一个完全可扩展和可定制的框架,所以可以定义自己的共识算法。事实上,Substrate非常灵活,它可能支持那些不基于经典区块链的架构方案。例如,我们正在研究,如何设计一个不基于传统区块概念的共识,从而解决区块链吞吐量问题。

轻客户端支持

早期的区块链实现是这样设计的:网络中的每个节点都在本地维护完整的区块链数据库。现在它被称为完整客户端,这意味着客户端拥有作为网络节点运行所需的一切。

完整客户端(也称为完整节点)对于链安全性非常重要。但是随着区块链的增长,客户端的数据库变得越来越大。目前,主流加密货币拥有数千亿字节的数据库。

初始化完整节点后,第一件事是与网络的剩余部分同步。由于安全原因,这样的节点不能“按原样”从随机节点下载数据库。相反,它需要从头开始构建自己的数据库,重播创世区块(链的第一个区块)以来的所有交易。除了计算开销大之外,这项任务还需要在网络上传输大量数据。

我想每个人都会同意,将5千万亿字节的数据下载到你的手机上,只为了买一个三明治……如果你不觉这荒谬,也是不切实际的。这就是为什么几乎从一开始,区块链开发人员就考虑降低维护节点成本的方法,包括在存储空间和网络吞吐量方面。

最终,轻客户端的概念诞生了。简而言之,轻量级客户端是区块链节点的一种运行模式,只有最重要的数据存储在本地,网络交互被减少到最低限度,同时任何人可能进行的交互保留可接受的安全性。

最终,只需适度的资源,使轻量级客户端节点能够轻松引导,因此可以在移动设备上执行。

但是,将轻量级客户端支持集成到现有的区块链中是一项严肃的工作。如果在区块链的初始设计中集成轻客户端,要容易很多。Substrate是专门设计的轻客户端支持。基于Substrate构建的区块链可以支持轻量级的客户端。

结论

在这篇文章中,我们简要介绍了Substrate框架的主要目标和特性。要涵盖Substrate的所有方面,将需要写一篇更长的文章,但希望您现在已对这些概念有了一个大致的了解。虽然这还不足以开始编写代码,但至少现在您应该知道会发生什么事情。

附加说明

1.RNG代表随机数生成器。并不是所有的RNG都适合区块链应用程序。

2.Substrate本身现在正处于非常活跃的发展阶段。其代码库很不稳定,文档工作正在编辑中。我们正在积极地填充wiki,你可以在上面查找更多细节。

3.运行时模块库是一组可选的Rust包,用于处理常见的任务,比如参数序列化和调用分派,并帮助您以最小的成本构建运行时。这个库是完全可选的,所以从头设计自己的运行时或者使用任何可能编译到Wasm的语言都是非常好的。除了Rust之外,目前只有C和C++支持Wasm作为目标体系结构。

本文系作者个人观点,转载请注明出处!
喜欢 0
支付宝扫码打赏
微信打赏

相关文章

更多

发布评论

共0条评论