撰文:Dennis Zoma
编译:OneBlock 社区
本文更新于 2023 年 10 月 3 日,来源:https://wiki.polkadot.network/docs/build-guide
Polkadot 是一个区块链协议,有两个目标:在所有连接的平行链之间提供共享安全性,并允许所有连接的链通过使用 XCM 进行互操作。随着 Substrate 和 Cumulus 等 PDK 的出现,开发和推出新链所需的时间显着缩短。在以前,推出新链需要数年时间,而现在可能只需要几周甚至几天的时间,具体取决于你的目标。
本指南将引导你完成今天就可以采取的步骤,开始使用 Polkadot 构建你的愿景。本文将解释在决定哪种最适合你的架构需求时,平行链和智能合约的区别。
指南提供了四种 build 路线:
-
构建平行链
-
构建托盘(pallet)
-
开发智能合约
-
开发 DApp
💡提醒
请记住,这些路线只是建议性的,有很多方法可以利用 Polkadot、Substrate 及其各种开发组件。要获得更多灵感,请查看 wiki 中的开源项目!
在深入研究这些路线之前,我们鼓励你阅读有关 Polkadot 及其网络的信息,以获得有关制作应用的背景信息。
波卡开发生态系统概述
在深入研究各种路径,以及在 Polkadot 上进行开发之前,了解构成以下部分的关键术语非常重要。即使在构想构建哪种类型的应用之前,也应该谨慎地了解 Polkadot 是什么以及与它的关系,每个开发组件在 Polkadot 生态系统中能为你做什么。
Polkadot 生态系统网络
- 主网:波卡(Polkadot)
- 金丝雀网络(Canary network):Kusama
-Kusama 是一个有价值的金丝雀网络,比 Polkadot 更早获得新功能。期待混乱。 - 官方测试网:
-Westend - 功能与当前 Polkadot 主网相同,可能会不时进行下一代功能测试,最终将迁移到 Polkadot。Perma-testnet(不会重置回创世块)。
-Canvas - 支持基于 Wasm 的智能合约测试网,主要用于 ink! 开发。
-Rococo - 平行链和 XCM 测试网。偶尔重置(使用新的创世块重新开始)。
Polkadot 主网自 2020 年 5 月开始运行,并以多种编程语言(从 Rust 到 JavaScript)实现。主要的实现是用 Rust 构建的,并使用 Substrate 框架。
与网络交互的工具正在迅速发展;有很多方法可以着手!
但在直接进入代码之前,你应该考虑想要创建的去中心化应用是什么类型,并了解想要在 Polkadot 上构建的开发者可以使用各种范例。
构建平行链
规范而言 Polkadot 称为中继链,它也被认为是零层协议,因为实现了多个平行链(第一层协议)的互操作性和共享安全性。平行链使用平行链协议连接到中继链。
💡提醒
在本文档中,你将遇到术语运行时(runtime)或 STF(状态转换函数)。两者都指的是相同的概念,因为它们定义了特定系统(即区块链)应该如何处理外部和内部的状态变化。这两个术语在 Polkadot 以及 Substrate 语境中广泛使用。
平行链开启了构建复杂运行时或 STF(状态转换函数)逻辑的可能性,而使用智能合约执行该逻辑的成本太高。然而,与智能合约不同,平行链完全缺乏强制性的燃料(gas)计量系统,并且可能容易到导致无限循环的错误(智能合约的设计可以防止这种情况)。Substrate 中实现的权重系统可以缓解此漏洞,不过它给平行链开发者带来了更多执行正确基准测试的负担。
📌什么是平行线程(Parathreads)?
平行线程或“按需平行链”类似于平行链,使开发者能够对其应用程序的逻辑进行较低级别的控制。两者之间的主要区别在于经济性,因为平行线程的安全成本比平行链低得多,并且是“按需付费”模型。平行线程的成本较低是因为平行线程只会在需要时生成一个块,这与平行链不同,平行链在中继链的每个块上都有一个插槽来生成一个块。构建平行线程时,你可使用相同的工具(例如 PDK)并获得构建平行链的所有好处,而没有成本缺点。
使用 Substrate 构建 FRAME Runtimes
Polkadot 是使用 Substrate 框架构建的。Substrate 是一个用于构建区块链的高度可配置和动态的框架。在较低级别,Substrate 提供了一组工具和库,涉及区块生产、最终性小工具到点对点网络。Polkadot 和 Kusama 以及大多数平行链都是使用 Substrate 构建的。
从本质上讲,Substrate 可以通过提供关键的功能构建块来分解区块链的开发过程,从而无需重新设计开发区块链时通常涉及的复杂机制。
Substrate 可以作为平行链连接到 Polkadot 或 Kusama 等中继链的基础,甚至可以作为形成传统的第一层独立链的基础。
目前,使用 Substrate 最简化的方法是 FRAME,它可以方便地从一组模块(称为托盘 pallets)。在Substrate 中 Runtimes 是使用 WebAssembly (Wasm) 构建的,代表网络的状态转换函数。FRAME 允许一组面向业务逻辑的模块(称为托盘)来构建 runtime/STF 并定义区块链的确切行为方式。从身份到智能合约,托盘在提供链上功能方面可以相当广泛。
尽管 FRAME 被大量使用,但它并不是使用 Substrate 创建有效 runtime/STF 的唯一方法。Substrate 可用于创建基于 web3 概念的新范例和抽象。
💡提醒
尽管大多数平行链利用 FRAME 和 Substrate 来构建用于连接中继链的runtime/STF,但这并不是偶然的。使用其他工具构建平行链是可能的,只要它们遵循平行链协议即可。作为一般经验法则,Substrate提供了通过相对最小的努力使之成为可能的方法。
使用 Cumulus 构建平行链
进一步深入构建平行链,Cumulus 是另一套工具,有助于为 Polkadot 或 Kusama 构建平行链就绪的区块链。Cumulus 利用 FRAME 和 Substrate 创建一种简单的方法来构建你的第一个平行链,确保链遵循平行链协议。
💡提醒
Cumulus clouds(积云)的形状有点像 dot(点);它们共同构成了一个复杂、美观且实用的系统。
对于大多数开发者来说,最好的起点是独立熟悉 Substrate,然后是 FRAME,最后一步是 Cumulus,以了解整个平行链构建过程。通过这种方式,人们可以查看各种范例的应用方式,并就针对其特定用例集成或使用 Substrate 做出决策。
请参阅平行链开发指南,了解如何开始构建平行链或平行线程。
平行链的好处
平行链包含自己的 runtime/STF 逻辑,并受益于 Polkadot 中继链提供的共享安全性和跨链消息传递。平行链允许高度灵活性和定制化,但随着时间的推移需要更多的努力来创建和维护。由于区块链网络技术和经济方面的复杂性,生产级平行链通常需要更多的创建。
平行链为创建者提供了更多空间来从头开始构建货币系统和其他链方面。与智能合约平台相比,它们允许更简洁、更高效地执行复杂逻辑。平行链还在治理形式上提供了更大的灵活性,并且可以比当前的硬分叉过程以争议较小的方式执行完整的升级。
平行链或平行线程支持的一些功能示例:
- 自定义费用结构(例如,支付固定交易费或按字节付费)。
- 通过中继链(Polkadot 或 Kusama)共享安全性和最终确定。
- 针对原生代币和本地经济定制货币政策。
- 财库将通过状态职能的转变来提供资金。
- 一种治理机制,可以管理负责分配链上金库的 DAO。
构建托盘
虽然平行链是高度可定制的,但它们的开发通常很复杂。如果你想熟悉 FRAME 和 Substrate,一个好的起点是在开发环境中构建托盘。托盘是一个完全可定制的模块,允许你在基本级别上以相对最少的开发时间实现第一层逻辑,同时仍然允许在自定义链中构建高级功能。
要了解如何构建托盘,请遵循 Substrate 文档。
开发智能合约
智能合约是另一种选择,可以实现更简单的开发者体验。下面是构建智能合约与构建平行链的快速比较:
📌智能合约和托盘之间有什么区别?
如果你还记得的话,平行链包含通常构建在 Substrate 上的 runtime/STF,后者通常使用 FRAME,而 FRAME 由托盘组成。托盘是 Substrate runtime/STF 的一部分,而智能合约是托盘的产品(请参阅:pallet_contracts)。托盘需要更多的工程和思考,因为它们可以直接影响链的状态。
ink! 和基于 EVM 的智能合约
从较高的层面来看,智能合约只是存在于链上某个地址并可由外部参与者调用的一些代码。无论是基于 EVM,还是使用 ink!、智能合约沙盒、运行在链上的可执行程序。
💡提醒
Polkadot 中继链不支持智能合约。然而,有几个平行链可以。有关所提供环境的更多信息,请参阅智能合约指南。
智能合约的一个流行选择是 ink!。其他提供以 Solidity 和 ink! 编写的基于 EVM 的合约的平行链也可用。
由于智能合约一次存在于一条链上,因此它们可以与同一条链上的其他智能合约具有平滑的互操作性。然而,它们始终会受到其宿主链固有特性的约束和限制。
作为开发者,你需要考虑智能合约的存储和复杂性,以确保 gas 使用量保持在合理范围内。考虑使用去中心化存储页面上列出的选项来保留数据并仅提交链上的内容地址。
📌构建智能合约
请参阅智能合约指南,了解如何开始构建智能合约。
开发 DApp/uApp
如果你的目标是开发 DApp(去中心化应用)或 uApp(不可阻挡的应用),Polkadot 生态系统包含各种 SDK 来利用中继链和平行链。
对于前端应用,存在多种与基于 Substrate 的链(平行链、中继链等)和智能合约接口的选项。这些通常会与 Substrate 节点的 RPC 交互:
- Polkadot.js
通过 RPC 调用围绕基于 Polkadot 和 Substrate 的链的 Promise 和 RxJS API。它是根据 Substrate 运行时提供的元数据动态生成的。此处提供完整的文档和示例。
有关工具的完整列表,请查看此处:工具、API 和语言
- Subxt
使用 Rust 通过 RPC 查询外部信息(交易)并将其提交到 Substrate 节点。也称为 Rust Parity。此处提供完整的文档和示例。
有关工具的完整列表,请查看此处:工具、API 和语言
- React Hooks for ink!
React hooks 库用于 ink! 抽象 polkadot.js 功能的智能合约。此处提供完整的文档和示例。
有关工具的完整列表,请查看此处:工具、API 和语言
- ink!athon Boilerplate
ink!athon 是一个全栈 DApp 开发的初始工具包,包括 ink! 智能合约和基于 React 的前端,一应俱全。借助方便的帮助脚本和预配置的项目设置,使你快速构建任何 DApp。此处提供了实时示例和完整文档。
有关工具的完整列表,请查看此处:工具、API 和语言