编者按:本文来自 PolkaWorld(ID:gh_6c4c2038ddba),作者:Shawn Tabrizi,Odaily星球日报经授权转载。
在本篇文章中,我将会以一种让任何拥有哪怕一点点技术经验的人都能理解的方式,来试着解释 Substrate 区块链框架。
你也许已经听说过 Substrate 是一个用来搭建区块链的可扩展的、模块化的以及开源的框架。但这到底是什么意思呢?
Substrate 提供了搭建一个分布式区块链网络所需的全部核心组件:
数据库
网络连接
交易队列
共识
虽然这些层级是可扩展的,Substrate 通常假定一般的区块链开发人员不应该关心这些核心组件的具体实现细节。反之,Substrate 的核心理念是使一个区块链的状态转换功能的开发尽可能的灵活和简便。该层级被称为 Substrate 的运行环境。
然而在我们详细了解所有这些细节之前,首先需要达成一个关于 “区块链是什么” 的共识......
什么是区块链?
从最基本的形式来看,区块链是一个简单的数据结构,其中数据的区块联结在一起形成一个有序的链。区块链的具体细节因链的功能性不同而有所差异。然而,总的来说,所有区块链应该拥有一些共同的属性。
区块
区块链中每个区块都拥有一些能够被用来生成一个对应该区块唯一识别符的数据。这些数据的其中一部分是前一个区块,即 “父块” 的唯一识别符。由于每个区块都有一个指示器连接它的父块,所有的区块都能以一个确定性的方式有序排列。
任何单一区块内数据的细微变化将更改它的唯一ID。由于该区块的ID被更改,在其后生成的区块(子区块)将也被更改。下一个子区块也同样,以及接下来的一个,再下一个...... 事实上,所有在被改进的原始区块之后生成的区块将必须更改它们的唯一ID以维持整条链的稳定。这意味着通过简单检查链上最后一个区块的唯一识别符便能够轻松验证两条区块链是否拥有完全相同的数据。
学习更多关于区块链的基础内容,请访问演示/视频地址:https://anders.com/blockchain/
区块的生成
因为这些特性,区块链系统被普遍用于记录一个共享分类账。该分类账的内容并非通过更改一个现有的区块来更改,而是根据有关如何在块与块之间更改分类账状态的指令说明,通过向区块链中添加新的区块来进行更改。这些指令通常被称为交易。
通常存在与分类账如何进行更改相关的规则,这些规则由一个状态转换功能来定义。对于加密货币系统来说,这些规则非常简单。例如:
规则:用户只能花费他们自己的资金。
这些规则也可以更加复杂,甚至允许区块链系统作为一个图灵完备的计算机,同时分类账作为该台计算机的存储。
一旦收集到一组有效的交易,它们将会被放入一个区块内,然后将该区块置于链的末端。这一区块生成的过程允许区块链的潜在状态随时间变化。
区块的最终确认
现在一个新的区块已经被生成了,它可以与其他趋于搭建相同共享分类账的区块共享数据。然而,由于区块链本质上是去中心化的,有时候会出现两个有差异却仍旧有效的区块在链的末端竞争同一个位置的情况。不同的区块的最终确认机制能够被用来决定哪些区块所属的链是规范化的区块链。对于任何现有的区块链,共享分类账的真实最终状态应该只有一个。任何区块链的可替代状态都被称为“分叉”。
分叉是正常的、可预期的,且一般来说不是威胁。区块的最终确认过程旨在帮助非标准化链重新同步。我们将会在本文后半部分继续讲解分叉的内容。
节点
到了现在,你应该能够了解到区块链具有分布式和去中心化的特点。你希望全世界的多样化用户无需第三方中介机构便能够记录这一共享分类账。通过遵循以上的规则,每个该共享分类账的参与者能够运行一个节点。该节点是一个遵循区块链网络规则,并与其它有着相同目的的节点相连接的计算机程序。所有的节点都无需中心化服务。
区块链系统通常是 “开源” 的系统,这意味着任何人都能够参与。为了阻止恶意行为者,激励良好行为并惩罚不良行为的机制被建立。伴随着以上这些机制的就位,一个区块链系统将成为一台不可阻挡的机器。
Substrate 组件
现在你有了一个对区块链是什么的更高层级的认识,我们可以开始了解 Substrate 是如何作为一个框架来进行搭建工作的。对于 Substrate 框架的第一个解释是可扩展性。这意味着它对如何设计区块链做了尽可能少的假设,并试图尽可能变得通用化。
数据库
就像我们曾梳理的那样,区块链的核心是它的共享分类账,必须对其进行维护和存储。Substrate 不对区块链中数据的内容或结构做出任何假设。底层的数据库使用简单的键值存储,并在其上实现了改进的 Patricia Merkle tree (trie)。这一特殊的存储结构使我们可以轻松地验证某元素是否在该存储中。这对支持轻量级客户端特别重要,轻量级客户端将依据这些存储证明与区块链网络进行轻量级但去信任的交互。
网络连接
为了去中心化的区块链系统能够通信,需要搭建一个点对点的网络连接协议。Substrate 使用 libp2p 作为模块化的点对点网络连接堆栈。通过这一网络连接层,基于 Substrate 的区块链能够共享交易、区块、节点以及其他系统的关键细节而无需中心化的服务器。
遵循 Substrate 的理念,libp2p 的独特性在于它对任何特定的网络协议不带任何假设。因此,你能够在基于 Substrate 的区块链上实现及使用不同的协议。
交易序列
如上所述,交易被收集、形成区块,并最终定义了区块链状态的变化。然而,这些交易的顺序会对分类账的最终状态造成影响。Substrate 使你能够全权控制网络中交易的独立性和队列管理。Substrate 只假定一笔交易具有权重和一组用于创建从属关系图表的先决条件标签。这些从属关系图表在最简单的情况下是线性的,但它们也可能变得更复杂。Substrate 将自动为你处理这些复杂的从属关系。
共识
区块链网络可以通过不同的方式依据链的变化达成共识。传统意义上,这些共识引擎与其它区块链组件紧密耦合。然而,Substrate 花费了额外的精力设计了一个能够在开发期间轻松更改的共识层。实际上,该设计的最终目的是在链上线后能够进行共识的热交换!Substrate 中内建了多种不同的共识引擎比如传统的工作证明机制(POW),Aura (Authority Round),以及 Polkadot 共识。它的独特性在于将区块的生成过程(BABE)与区块的终结过程(GRANDPA)区分开来。
Substrate 运行环境
目前为止,我们已经讲解了所有 Substrate 能够提供的所有核心区块链组件。正如你曾读到的那样,Substrate 已经为保持通用性和可扩展性竭尽所能。然而,可以说 Substrate 最能体现其定制化特点的部分是它的模块化运行环境。运行环境指的是早先提到的 Substrate 的状态转换功能。
Substrate 相信一般的区块链开发人员不需要对以上列出的区块链组件关心得太多。只要这些组件久经沙场且可以投入生产,实现过程的细节常常就没那么重要了。然而,决定一个网络中的内容是否有效的区块链的核心逻辑对于任何链来说通常都是相当重要的。
因此,Substrate 的核心理念是使得区块链运行的开发尽可能的灵活和简易。
Substrate Runtime Module Library (SRML)
一个区块链的运行环境可被分为不同的逻辑化组件,它们被称为运行模块。这些模块将控制区块链管理的链上逻辑的某些部分。你可以将这些模块想象成你系统中的“插件”。作为一名 Substrate 开发者,你可以挑选你希望加入链中的模块和功能。
比如,有个叫做“余额”的模块管理着链上的货币。同时也有一组模块比如“收集”、“民主”以及“选举”处理着链上的决策和治理过程。甚至还有一个被称为“合约”的模块能够将任何基于 Substrate 的链转到一个智能合约平台中。当你在 Substrate 上搭建时,将自动为你提供这些模块。
然而,你并不局限于使用 Substrate 提供的模块。事实上,开发者们可以轻松地搭建他们自己的运行模块,将其作为独立的逻辑化组件,甚至能够与其他运行模块直接进行交互以构建更复杂的逻辑。我们相信长此以往,Substrate 中的模块系统将会变得更像一个“应用商店”,用户在其中可以轻松的挑选想囊括的功能,并以入门级的技术知识部署分布式区块链网络!
无分叉的运行更新
如果我们遵循 Substrate 模块化生态系统与应用商店的类比,那么我们还必须解决如何更新运行环境的问题。无论是漏洞修复,现有模块的常规改进,甚至是添加区块链的新功能,Substrate已经具备了一流的更改运行环境的能力。
然而,链上状态转换功能的更改也会影响网络的共识。如果运行在网络中的某个节点具有一个版本的运行逻辑,同时另一个节点拥有另一个不同的版本的运行逻辑,那么这两个节点将无法达成共识。它们将从根本上否决分布账的真实状态,导致产生我们之前定义过的分叉的结果。这些不可协调的分叉会降低网络的安全性从而造成很坏的影响,导致只有一部分的节点会正确地生成和验证新区块。
Substrate 已经通过让网络就运行逻辑本身达成共识的方式解决了这个问题!通过使用 Wasm 二进制格式,我们能够将 Substrate 运行代码作为共享分类账的一部分放在区块链上。这意味着任何运行一个节点的人都能够验证他们的节点是否拥有最新的逻辑。如果没有,链上的 Wasm 将会被直接执行!这意味着你的区块链的运行环境将能够在即时网络上实时更新,避免了产生分叉的风险!
Substrate 秉承着灵活性的精神,使你根本无需手动启动此功能。如果你想要禁用链上升级,你也可以做到。事实上,Substrate 将预先为你提供你的链所需的全部工具。
免费和开源
Substrate 是一个完全免费且开源的项目。它通过使用 Rust 编程语言来搭建,该语言旨在帮助开发快速和固有安全性的软件。Substrate 的协调和开发通过 Github 和 Riot 等公共社区的超过100多位个人贡献者的帮助来进行。
Substrate 是 Polkadot 中孵化出的项目,Polkadot 是一个拥有许多可互操作区块链的更广阔的世界愿景。Substrate 除了能够帮助大多数成熟的链连接到 Polkadot 上之外,还赋予了生产级区块链项目连接到该网络的能力。当 Polkadot 主网启动,你将因支持你的区块链的技术与为其他多种生产级区块链赋能的技术一致而感到安心。
Substrate 旨在成为区块链革新者的无可反驳的最佳平台和任何考虑搭建一个区块链网络的人的必然选择。
总结
此时此刻,我希望你能够明白为什么我们说 Substrate 是一个搭建区块链系统的可扩展的、模块化的以及开源的平台。Substrate 开发过程中的每个时点都以保持通用性为首要前提。因此,Substrate 将作为一个平台被用于构建未来的技术,甚至是还从未被提及的那些。
翻译者:Silvia(PolkaWorld 超级探员)