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