Substrate, 一个用于构建区块链的 Rust 框架
一个基于 Rust 的区块链框架。
Substrate:区块链组件的游乐场。
Substrate 代码在 Polkadot SDK 仓库中的位置:
这个视频是本文的简短版本。
在 Parity Technologies 工作了两年作为 Substrate 开发者,我对 Substrate 的定义是:
Substrate 是一个开源的、经过实战检验的 Rust 框架,用于构建面向未来的区块链,优化了大多数用例——由开发者为开发者构建。
为了回答这个问题,让我们探索 Substrate 的原始创建者的历史:
Parity Technologies——Polkadot 背后的工程公司。
当 Parity Technologies 开始构建 Polkadot 区块链网络时,当时构建区块链的典型方法是要么分叉现有的区块链(如以太坊),要么从头开始编写自己的区块链。Parity 的工程创始人希望在没有以太坊限制的情况下构建一个创新链,因此他们开始从零开始构建 Polkadot。
构建 Polkadot 并不是他们的第一次尝试。在早期,Parity 创建了一个流行的以太坊客户端和一个比特币客户端——这些都是生产级区块链节点。可以说,Parity 在创建区块链方面积累了丰富的工程知识。
在短时间内,他们看到构建 Polkadot 区块链网络所涉及的几个组件可以被重用来构建其他区块链。组件如网络、存储、交易队列和共识。这些组件在大多数区块链中是常见的,不应该从头开始构建。Parity 押注未来将是多链的。Polkadot 就是这个赌注,一个可以在其上部署其他链的层 0 链,继承 Polkadot 的十亿美元安全性,并与在 Polkadot 网络上部署的其他链无缝互操作。未来是区块链,许多区块链。可以安全互操作的专用区块链。对区块链框架的需求已经成熟。
当时 Polkadot 的想法来自以太坊的 CTO——Gavin Wood 博士。在分支出去创建 Polkadot 之前,Gav 是以太坊的 CTO 和联合创始人。他帮助设计和构建以太坊,并创建了 Solidity 编程语言。根据他的说法,以太坊是作为一个原型构建的——这就是为什么我们现在看到协议中一些固有问题的原因,例如可扩展性问题、过高的 gas 费用、缓慢的升级。Gav 有一个愿景;他想将协议提升到一个新的水平。但由于以太坊的限制,下一次迭代必须单独构建,因此他分出,创立了 Parity Technologies,并开始了 Polkadot 的工作。
在某种程度上,比特币为以太坊提供了一个概念验证。而以太坊在类似的意义上,可以说为 Polkadot 提供了一个概念验证。
让我们回到 Substrate,这个通用的区块链框架……
Substrate 将我们在构建以太坊和 Polkadot 时学到的所有经验提炼成一套工具,使你可以免费获得所有这些相同的奖励……
— Gavin Wood 博士
当 Parity 工程师开始构建 Polkadot 时,他们将构建和运行区块链所涉及的所有组件放入了一个框架的开端——Substrate。
Substrate 是“一组库,用于处理编写区块链时非常烦人的所有事情。”
— Robert Habermeier
从头开始构建区块链是困难的,并且需要大量资源。
这昂贵,需要时间,并且需要专业知识:
- 密码学家
- 安全研究人员
- 网络工程师
- Devops 人员(协调更新)
- 资深工程师
以下是构建区块链所涉及的常见组件列表:
- 存储/数据库
- 网络
— 节点发现、区块和交易传播、RPC 服务器
- 交易队列
- 共识
— 权益证明、权威证明、工作量证明等
- 加密原语
- 区块格式
- 轻客户端支持
Substrate 为开发者抽象了所有这些,但如果需要,可以通过 Rust 泛型、类型和特征进行自定义。
通过抽象出区块链中的核心公共功能,开发者可以专注于区块链最常见的创新特性——状态转换函数(STF)——你的区块链如何执行区块——在 Substrate 中称为 Substrate 区块链的运行时。
Substrate 运行时是链的业务或应用逻辑。它是开发者定义其链上交易的作用的地方,实质上是他们的区块链所做的事情。
如果开发者不需要投入大量时间去弄清楚 P2P 交易传播的内在细节如何工作,或者如何从头开始编写加密原语,而是可以将时间集中在其区块链的业务逻辑上,那么开发者就可以将创新的区块链解决方案带给世界。这就是 Substrate 的作用。Substrate 开启了区块链创新的全新设计空间和潜力。
需要注意的是,是的,如果你团队的业务解决方案是提出一种新颖的共识算法(Substrate 中的共识主要在节点端),那么你可以利用 Substrate 代码的通用特性来手动编写自己的共识算法。AlephZero 就是这样做的。他们有自定义的最终性,基于 DAG,并且区块时间为 1 秒……所有这些都是使用 Substrate 框架实现的。
然而,大多数区块链商业案例是作为 STF 逻辑构建的。
Substrate 允许使用 FRAME 更快地编写 STF 业务逻辑(代码行数更少)。
非正式定义:
Substrate 框架中的框架。
正式定义:
模块化实体的运行时聚合框架(FRAME)
本质上,它是 Substrate 中构建运行时的框架。
Substrate 的诞生源于开发者在构建和优化区块链时不应重新创造基础的愿景。
这包括业务逻辑的常见方面。
FRAME 由以下部分组成:
- 具有业务逻辑的模块(我们称之为pallets)
- 支持库以帮助开发
使用 FRAME,可以更快速地构建运行时。
这些 pallets 可以在Polkadot SDK > Substrate > FRAME中找到。
Pallets 是你运行时的构建块。
Polkadot SDK 库已经提供了许多预构建的、经过审计的 pallets,供你直接放入代码库并快速启动。
中场休息曲目:
Substrate 运行时被编译为 WebAssembly(Wasm)并存储在链的数据库中。
因此,升级你的链非常简单——只需交换链上的 Wasm blob!
当开发者使用 Substrate 构建时,由于这个特性,他们本质上是在构建一个未来-proof 的链。
Substrate 从一开始就设计了无叉升级的概念。
该 Wasm 被上传、存储在链上,并且它是运行链的逻辑。数据库存储链的状态,包括 Wasm blob。
要更新链的逻辑,只需上传一个新的 Wasm blob,所有节点会自动与新的链逻辑无缝同步。
因此,回顾一下,升级链的传统方式与 Substrate 方式的流程。
传统升级中经常会出现叉
更新网络 -> 旧方式
通常,在非 Substrate 的世界中,如果想要升级他们的区块链,他们需要:
1. 修改区块链代码以引入新功能(或修复)
2. 运行节点必须替换他们的二进制文件以运行新代码
3. 不更新的节点将被抛在后面
— 通常需要进行长时间的计划协调以便节点升级
4. 根据代码更改,网络中可能会出现永久性分叉,形成两个网络
需要注意的是:
- 更新网络的决策通常发生在链外
- 由于人类协调,升级网络需要很长时间
- 网络协议并不是从一开始就构建以适应更新
更新网络 -> Substrate 方式
1. 新功能(或修复)被添加到代码中
2. 使用新代码编译的新运行时被编译为 Wasm
3. 进行链上治理协议投票,决定是否升级运行时
4. 如果链上治理投票通过,升级将无缝发生
— 所有连接到网络的节点会自动升级
需要注意的是:
- 无需信任地可升级
- 快速、可迭代、链上
- Substrate 投票机制
通常,在 Web3 的精神中,人们不希望创建一个中心化的决策过程,决策是在链外进行或仅限于一个集中实体。Substrate 有许多预构建的 pallets,提供各种方式让人们为他们的链创建一个强大的治理系统。
Substrate 提供了一些经过深思熟虑的治理逻辑,可以使用和配置。
这是一个自愿选择的功能。
人们可以简单地使用 pallet collective 与pallet membership,让一个机构为他们的链做决策。
或者
人们可以进一步将其与 pallet democracy 结合,以便为他们的链提供更复杂的投票/提案/公投系统。
通过良好的治理设置,像投票决定下一个链的升级这样的事情被内置到链的协议中。
上述是 Polkadot 所称的“治理 V1”的一个示例。上述是使用 Substrate FRAME 治理 pallets 构建的。
Substrate 上治理的美妙之处在于它是可迭代的,人们可以随着时间的推移改善治理系统。Polkadot 已经这样做了。它从治理 V1 开始,现在已经迭代到一个全新的治理系统,使用 Substrate 称为 OpenGov。几个基于 Substrate 的链也随之升级他们的链,以适应他们链上的 OpenGov 治理系统。
让我们回顾一下,到目前为止已经涵盖了许多 Substrate 功能。
这些功能本身就是使用 Substrate 的一个足够好的理由,如果有人想要构建一个 L1 区块链。然而,从商业角度来看,为什么人们应该考虑使用 Substrate?
一般答案:创始人和开发者可以确信他们的区块链准备好应对未来的挑战。
专注于打造使他们的链独特和创新的业务逻辑,同时享受灵活性、可升级性、开源许可和经过实战检验的代码等额外好处。
使用 Substrate,开发者可以完全控制他们想要构建的应用程序。开发者可以从大量开源 pallets 和模板中选择预定义的应用逻辑,以加快他们的开发时间。如果在当前库中找不到所需的内容?这不是问题——这是构建自定义 pallet 的机会。
我的答案:+100 个基于 Substrate 的平行链在生产中,这还不包括 Substrate 独立链
强大的技术和无与伦比的 Web3 精神在 Polkadot 中渗透到 Substrate 框架中,例如复杂的链上治理、已经经历无数运行时升级的生产 Substrate 链,以及最后但同样重要的社区——紧密交织的社区。
在 GitHub 问题、PR、Substrate Stack Exchange 上进行技术讨论,Polkadot 论坛上进行更长的讨论。
这里是关于资产托盘和余额托盘之间差异的 Substrate Stack Exchange 讨论:
这是一个团队讨论构建快速 Substrate 区块链及其所需条件的示例:
合作不仅仅停留在在线讨论中,开发者们还在全球各地的多个活动中见面,全年都有,例如 Polkadot Decoded、sub0、Polkadot Summit(一个特殊的邀请-only 事件,生态系统建设者在此提供反馈并帮助塑造 Polkadot 的未来)以及 Polkadot Blockchain Academy。
注意上面的图表。自定义 Substrate 节点,例如自定义共识算法,复杂性最高。没有 FRAME 的区块链构建复杂性第二。两者都可以通过 Substrate 的通用特性实现,但学习曲线更高。
最佳选择是在 FRAME 上构建区块链。
然而,构建区块链可能并不适合所有用例。
在大多数用例中,编写智能合约就足够了。
如果你注意到,使用智能合约实现你的业务用例的开发复杂性最低,并且可以在短时间内完成。
更好的是,Substrate 支持智能合约——一种特殊类型的智能合约:ink! smart contracts。使用 ink!,可以用 Rust 编写合约逻辑!
你可以投资于提升团队的 Rust 技能,通过编写 ink! 智能合约测试你的业务用例,达到市场适应性,然后在需要时扩展到 Substrate 区块链。好处在于,你的团队在使用 ink! 时已经对 Substrate 和 Rust 有了初步了解。
ink! 是一种嵌入式领域特定语言(eDSL)。编写 ink! 智能合约就像涂黄油一样简单。
ink! 智能合约编译为 Wasm,因此在性能上优于 Solidity。
ink! Wasm 合约在一个名为 pallet contracts 的 Substrate 托盘上运行。因此,任何运行 pallet contracts 的 Substrate 基础链都可以运行 ink! 智能合约。
在 Polkadot 上部署
好的,你用 ink! 智能合约编写了你的精彩用例,但你要在哪里部署它?
你想在 Polkadot 上部署,对吧?
但 Polkadot 是一个中继链。
通过 Pop Network,开发者可以使用 DOT 将 ink! 智能合约部署到 Polkadot 网络。
Pop Network 是一个 ink! 智能合约平行链,运行在 Polkadot 上。
Pop Network 处于早期开发阶段。
有关一些 alpha 更新,请加入 Pop Network Telegram。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!