Substrate 入门必读:助力开发者打造强大、灵活的区块链

原文:https://medium.com/@brunopgalvao/substrate-cfeb13333f2c

作者:Bruno Galvao

编译:OneBlock+

Substrate是一个基于 Rust 的区块链开发框架。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

Substrate:一个区块链组件的游乐场

Substrate 具有相当大的可塑性。本文中的图表灵感来自荷兰艺术家皮埃特·蒙德里安(Piet Mondrian)的作品。蒙德里安以创立新造型主义艺术运动而闻名。新造型主义以抽象的几何形态和原色为特征。它将视觉元素简化为形式和色彩的基本特征,摒弃了象征性的联系,以达到纯粹、普遍的视觉和谐表达

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

 

 

Substrate 基本介绍

Substrate 代码的位置在Polkadot SDK 存储库中:

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

Substrate 是一个用于构建区块链的Rust 语言框架,目前已经有 100 多个基于 Substrate 的区块链在开发构建中运行

 

 

 

 

 

 

什么是 Substrate?

在 Parity Technologies 担任 Substrate 开发人员两年后,我对 Substrate 的定义是:

Substrate 是一个开源、经过实战考验的 Rust 框架,用于构建针对大多数用例进行优化的具有未来潜力的区块链——这是一个由开发者为开发者而构建的框架。

 

为什么需要区块链框架?

为了回答这个问题,让我们探讨一下 Substrate 的原始创作者的历史:Parity Technologies—— Polkadot 背后的开发工程公司。

当 Parity Technologies 开始构建 Polkadot 网络时,当时构建区块链的典型方法要么是分叉现有的区块链(如 Ethereum),要么是从头开始编写自己的区块链。Parity 的工程创始人想要构建一条没有 Ethereum 约束的创新链,因此他们开始从头构建 Polkadot。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

构建 Polkadot 并不是他们的第一次尝试。早期,Parity 创建了一款热门的 Ethereum 客户端以及一款Bitcoin客户端——这些是生产级的区块链节点。所以可以说,Parity 在创建区块链方面拥有丰富的开发知识

随着项目的发展,他们发现构建 Polkadot 网络所涉及的几个组件可以重新使用来构建其他区块链。这些组件包括网络、存储、交易池和共识等。这些组件在大多数区块链中都很常见,不应该从头开始构建。Parity 相信未来将是多链的,Polkadot 作为一个 Layer0 区块链,在上面可以部署其他链,在此基础上继承 Polkadot 数十亿美元的安全性,并与 Polkadot 网络上部署的其他链无缝交互。未来是多链的未来,以及可以相互进行安全、互操作的专门化区块链,这种情况下就需要一个区块链框架。

 

Polkadot 的简要历史

当时 Polkadot 的想法来自Ethereum 的首席技术官——Dr. Gavin Wood。在分支出去创建 Polkadot 之前,Gavin 是 Ethereum 的首席技术官兼联合创始人。他帮助设计和构建了 Ethereum 并创造了 Solidity 编程语言。根据他的说法,Ethereum 是作为一个原型构建的——这也解释了为什么我们现在看到协议中存在一些固有问题,如可扩展性问题、高昂的 gas 费用、慢速的升级等。Gavin 有一个愿景;他想要将协议提升到下一个层次。但由于 Ethereum 的限制,下一个迭代版本必须单独构建,因此他从 Ethereum 分支出去,创建了 Parity Technologies,并开始了 Polkadot 的工作。

在某种程度上,Bitcoin 是 Ethereum 的概念验证。类似地,也可以说Ethereum 是 Polkadot 的概念验证

 

现在让我们回到 Substrate 通用区块链框架。

Substrate 吸取了我们在构建 Ethereum 和 Polkadot 过程中的所有经验教训,并将其提炼为一组工具,允许您免费获得所有这些奖励。

——Dr. Gavin Wood

当 Parity 工程师开始构建 Polkadot 时,他们将构建和运行区块链涉及的所有组件放入了这个框架所开始的地方 — Substrate。

Substrate 是“一组库,用于完成编写区块链时真正令人烦恼的所有事情。”

——Robert Habermeier

 

Substrate 为开发者抽象出核心组件

从头开始构建区块链是困难且需要大量资源的,它成本高昂,需要时间,并且需要专门的知识:

  • 密码学家

  • 安全研究员

  • 网络工程师

  • Devops人员(协调更新)

  • 老练的工程师

以下是构建区块链涉及的常见组件列表:

  • 存储/数据库

  • 网络 — Peer discovery、区块和交易传播、RPC服务器

  • 交易池

  • 共识 — 权益证明、授权证明、工作证明等

  • 密码学原语

  • 区块格式

  • 轻量级客户端支持

Substrate 为开发者抽象出所有这些组件,但如果需要,可以通过 Rust 泛型(generics)、类型和特性进行定制。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

通过将区块链的核心通用功能抽象出来,开发者可以专注于区块链最常见的创新功能 ——状态转换函数(STF)— 即您的区块链如何执行区块的地方。在 Substrate 中,这被称为 Substrate 区块链的runtime

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

Substrate runtime 是链的用例或应用逻辑。开发者可以在这里定义链上的交易是做什么的,本质上就是他们的区块链做什么。

如果开发者不必花费大量时间来弄清楚 P2P 交易传播的内在细节或如何从头编写密码学原语,而是可以利用这些时间来专注于他们区块链的业务逻辑,那么开发者可以在更快的时间里将创新的区块链解决方案带给世界。这就是 Substrate 的巨大作用。Substrate 为区块链创新打开了全新的设计空间和潜力。

需要注意的是,如果您所在团队的业务解决方案是提出一种新颖的共识算法(Substrate 的共识主要在节点端),那么您可以利用 Substrate 代码的通用性来手动编写自己的共识算法。AlephZero就是这样做的。他们有自定义的最终性(finality),基于 DAG,并且有一秒的区块时间…所有这些都使用了 Substrate 框架。

然而,大多数区块链的用例都是构建为STF 逻辑。Substrate 允许使用FRAME 更快(代码更少)地编写 STF 业务逻辑

 

FRAME

非正式定义:Substrate 框架内的框架。

正式定义:Modularized Entities 的 runtime 聚合框架(FRAME)。

本质上,它是用于构建 runtime 的 Substrate 内的框架。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

Substrate 诞生于开发者在构建和优化区块链时不应该重复造轮子的愿景之上,包括业务逻辑的常见方面。FRAME 包括以下内容

  • 具有业务逻辑的模块(被称之为 pallets)

  • 支持开发的支持库

使用 FRAME,可以更快地构建 runtime。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

这些 pallets 可以在Polkadot SDK > Substrate > FRAME中找到。Pallets 就是 runtime 的构建块。Polkadot SDK 存储库已经预先构建了许多经过审查的 pallets,供开发者放入代码库并立即开始运行。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

 

无分叉升级

Substrate runtime 被编译为WebAssembly(Wasm)并存储在链的数据库中。

Substrate 入门必读:助力开发者打造强大、灵活的区块链

因此,升级链是非常容易,只需要交换链上的 Wasm blob 就可以完成。当开发者使用 Substrate 构建时,由于这个特性,他们构建的链将会是未来可靠的链。

从头开始设计的 Substrate 考虑到了无分叉升级(forkless upgrades)的概念。该 Wasm 被上传,存储在链上,并且是基于运行链的逻辑。数据库用于存储链的状态,其中就包括 Wasm blob。

要更新链的逻辑,只需上传一个新的 Wasm blob,所有节点都会自动与新的链逻辑同步。让我们回顾一下通过传统方式与 Substrate 方式升级链的流程。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

通常情况下,传统升级中会出现分叉

 

更新网络 -> 传统方式

通常,在非 Substrate 世界中,如果想要升级区块链需要:

1. 修改区块链代码以引入新功能(或修复)

2. 运行节点必须替换二进制文件以运行新代码

3. 没有更新的节点将被抛在后面——通常需要长时间计划协调节点升级

4. 根据代码更改,网络可能会永久分叉,创建两个网络

上面执行中需要注意的事项:

  • 网络升级的决策通常发生在链下

  • 由于人工协调,需要很长时间来升级网络

  • 网络协议并非从头开始构建以适应更新

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

 

 

更新网络 -> Substrate 方式

而通过 Substrate 框架,则只需要:

1. 将新功能(或修复)添加到代码中

2. 使用新代码编译的新 runtime 到 Wasm 中

3. 进行链上治理协议,对是否升级 runtime 进行投票

4. 如果链上治理投票通过,升级将无缝进行——所有连接到网络的节点都会自动升级

上面执行中需要注意的事项:

  • 可信任的升级方式

  • 快速、可迭代、链上

  • Substrate 投票机制

通常情况下,在 Web3 精神中,我们不希望创建一个中心化的决策过程,其中决策是链下或限制于中心化实体。Substrate 具有许多预构建的 pallets,提供各种方式让用户可以在他们的链上进行决策。

 

 

去中心化治理

Substrate 提供了许多经过深思熟虑的治理逻辑,可供使用和配置。这是一个可选择的功能,可以简单地使用 pallet 集合和 pallet 成员身份来进行链的决策。

或者可以更进一步,将其与 pallet democracy 结合使用,为链上的投票/提案/公投系统提供更复杂的功能。通过良好的治理设置,诸如对下一次链升级进行投票之类的事情已经内置到链的协议中

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

https://wiki.polkadot.network/docs/learn-governance

上述是 Polkadot 称之为“Governance V1”的示例。上述是由 Substrate FRAME 治理 pallets 构建的。

Substrate 的治理美妙之处在于,它是可迭代的,可以随着时间的推移改进治理系统。Polkadot 就是这样做的,它从 Governance V1 开始,现在已经迭代到使用 Substrate 的全新治理系统 OpenGov。几个基于 Substrate 的链也效仿并升级了他们的链,以适应链上的 OpenGov 治理系统。

回顾一下,到目前为止,许多 Substrate 功能已经涵盖在内。如果有人打算构建 L1 区块链的话,这些功能本身足以成为使用 Substrate 的充分理由。但是,从商业角度来看,为什么应该考虑使用 Substrate?

 

 

为什么使用 Substrate?

一般性答案将会是:项目创始人和开发者可以相信他们的区块链已经为未来做好了准备。他们可以专注于打造使他们的链独特和创新的业务逻辑,并获得灵活性、可升级性、开源许可和经过实战考验的代码等优势。

通过 Substrate,开发人员可以完全控制他们想要构建的应用程序。开发人员可以从大量开源 pallet 和模板库中选择预定义的应用逻辑,以加快他们的开发时间。如果在当前库中找不到所需的内容,那不是问题,反而是构建定制 pallet 的机会。

而我的答案会是,100+ 个基于 Substrate 的平行链正在运行中,这还不包括 Substrate 的独立链(sola-chains)。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

强大的技术和 Web3 精神在 Polkadot 中是无与伦比的,这种精神渗透到了 Substrate 框架中,例如复杂的链上治理、已经经历了无数 runtime 升级的生产性 Substrate 链,以及紧密的、交织在一起的社区。GitHub 上的问题和甲流、PR、Substrate Stack Exchange 上都在进行技术讨论,Polkadot 论坛则已经进行了更长的讨论。

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

https://substrate.stackexchange.com

🔍 这是关于 Assets pallet 和 Balances pallet 之间区别的 Substrate Stack Exchange 讨论:

https://substrate.stackexchange.com/questions/711/when-should-i-use-balances-pallet-and-when-should-i-use-assets-pallet

🔍 这是一个团队讨论如何构建快速 Substrate 区块链以及需要什么的示例:

https://forum.polkadot.network/t/decentralized-futures-proposal-slap-simple-layer-for-accelerated-payments

良好的合作不止于在线讨论,开发者也在全球各地的举办的多个活动中相遇,例如Polkadot Decoded、sub0、Polkadot Summit(这是一个特殊的、仅限邀请的活动,生态系统构建者在其中对 Polkadot 提出反馈并帮助塑造其未来)以及Polkadot Blockchain Academy等。

 

 

如何开始?

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

注意上面的图表。自定义 Substrate 节点,例如自定义共识算法,具有最复杂性;没有使用 FRAME 构建区块链则是第二复杂的。这两者都可以使用 Substrate 的通用性进行构建,但学习曲线更陡峭。

最佳选择是使用 FRAME 构建区块链。然而,构建区块链可能并不适合所有用例,在大多数用例中,编写智能合约就足够了。同时,使用智能合约实现业务用例的开发复杂度最低,并且可以在短时间内完成

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

更重要的是,Substrate 支持智能合约——一种特殊的智能合约:ink! 智能合约。使用 ink!,就可以使用 Rust 编写合约逻辑。

🔍 了解 ink! 详情:https://use.ink/

让你的团队精通 Rust 语言,通过编写 ink! 智能合约来测试业务用例,获得市场适应性,如果需要的话还可以扩展到 Substrate 区块链,前提是你的团队将已经通过使用 ink! 熟悉了 Substrate 和 Rust。

ink! 是一种嵌入式领域特定语言(eDSL)。编写 ink! 智能合约就像涂抹黄油一样简易。ink! 智能合约编译为 Wasm,因此与 Solidity 相比,性能得到了额外的提升。ink! Wasm 合约运行在一个名为 pallet contracts 的 Substrate pallet 上。因此,任何运行 pallet contracts 的基于 Substrate 的链都可以运行 ink! 智能合约。

 

在 Polkadot 上部署ink! 智能合约

当你使用了 ink! 智能合约编写了杰出的 Web3 用例,但是要将其部署到 Polkadot 上就需要Pop Network,一种Polkadot 区块链来进行连接。

通过使用 Pop Network,开发者可以使用 DOT 将 ink! 智能合约部署到 Pop Network。然后,从 Pop Network 开始构建,并通过 Polkadot 的互操作性特性与其他区块链互操作。这是一种高度优化的、专为开发者设计的区块链

ink! 智能合约开发者将能够使用已知的 Rust 编程语言编写他们的合约,并将它们部署到 Substrate 区块链。这是一个新的方式来考虑以太坊智能合约编写和部署的过程,提供了更大的控制权和性能优势

如果你对这个过程感兴趣,可以进一步研究Substrate、ink! 和 Pop Network,这将为你提供更深入的了解,更好地理解如何构建区块链以及如何利用现有的工具和技术来实现您的目标。

 

 

Substrate 入门课第 15 期,火热招募中

在了解 Substrate 的独特优势和开发特性后,你是否也想开启波卡生态的探索之旅?OneBlock+ 与 Parity 联合开办的 Substrate 入门课程第 15 期已经为你准备好了完整的学习路径和专业指导!

第 15 期「Substrate 区块链应用开发入门课」预计将于 5 月底开课,,其中包含 6 节录播课,每周更新 1 节,课程周期将持续近 2 个月。课程押金 99 元,满足毕业要求全额退还学费,优秀学员还将有机会获得奖金池瓜分机会。

📪 课程报名链接:https://meggd.xetlk.com/s/4bog52

 

Substrate 入门必读:助力开发者打造强大、灵活的区块链

 

 

 

About Us关于我们

OneBlock+作为区块链的人才聚集地,是全球领先的 Substrate 开发者社区。我们将提供专业的技术文章和开发课程,并组织研讨会、黑客松创业大赛等交流实践活动,从而帮助开发者掌握 Substrate 技术、深入探索 Web3 领域。同时,OneBlock+ 还为 Web3 优质项目提供技术指导、人才资源等多重创业支持,促使更多开发团队使用 Substrate 技术框架构建未来开放网络。

 

Twitter: https://twitter.com/OneBlock_

Medium: https://medium.com/@OneBlockplus

Telegram: https://t.me/oneblock_dev

Discord:https://discord.gg/fE8deY4UbP

Bilibili: https://space.bilibili.com/1650224419

YouTube: https://www.youtube.com/channel/UCWo2r3wA6brw3ztr-JmzyXA