波卡开发者通关指南:新技术来临之际,如何选择适合的开发路径?

原文:https://blog.kianenigma.nl/posts/tech/polkadot-s-build-horizon/

作者:Kian Paimani

编译:OneBlock+

Rust和 Parity 的核心开发者Kian Paimani发布了一篇面向 Polkadot 开发者的指南,着重介绍了开发者在这个生态系统中可以选择的不同路径,以及它们如何相互关联。

这篇文章反映了 Polkadot 在灵活核心时间及未来的发展新图景,试图探究波卡平台是什么、以及提供了什么的普遍认知。然而,这是在 PolkaJam 的RFC发布之前所撰写,作者将持续更新以纳入发展变化中的技术内容。

OneBlock+ 为你编译了本篇文章,希望波卡生态开发者从中进一步了解更多核心资源和开发指南。

这篇文章以4+1 个不同层次的开发者为目标,介绍了波卡是什么,以及如何在波卡生态中“打怪升级”。

1. Polkadot,作为一个平台

2. 链上开发:Runtime/Parachain/Task 开发

3. 链上开发:智能合约

4. 上述组件之间的消息传递

5.(+1) 与上述任何项目对话的链下应用

对于每个项目,作者列出了其认为是目前或将来在该主题上的最佳“教育资源”。这绝不是没有遗漏的完全版本,希望更多开发者可以评论他们能想到的其他内容。

特别注意的是,作者通常不引用 docs.substrate.io(https://docs.substrate.io/),因为它不是一个被很好维护的资源。这个网站有一个更小但更准确的替代品,比如polkadot-sdk-docs(https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/)。

 

 

 

Polkadot 平台

首先,Polkadot 本身是一个什么样的平台?Polkadot 是一个无处不在的计算机/区块链,具有以下特征:

1.多核心(Core)的异构分片执行,每个分片/核心可以执行不同的任务。

2. 为所有核心和所有在这些核心上运行的任务提供了一层共享的安全性

3. 到目前为止,唯一类型的任务是我们称之为“平行链(Parachain)”的构建,但展望未来,我们期望在 Polkadot 上部署各种类型的任务。

4. 到目前为止,获得核心上的执行时间,即Core-time(核心时间)的唯一方法是赢得平行链拍卖,但很快,通过灵活的核心时间,获得核心时间将变得更加容易和具有颗粒度。

 

相关资源

  • https://education.web3.foundation/docs/introblock

  • https://education.web3.foundation/docs/introdot

  • https://spec.polkadot.network/

  • https://wiki.polkadot.network/

 

 

链上开发 – Runtime / Task

Runtimes是可以在 Polkadot 核心上运行的主要类型任务。它们被表达为WASM blobs。它们的调度时间从一次一个块(以前称为按需平行链,或者是 parathreads)到两年(以前称为平行链)到介于两者之间的任何时间(灵活核心时间)。通常,它使用FRAME进行构建,并且通常表示区块链应用程序逻辑。重要的是,运行时还可以表示任何其他应用程序。

 

相关资源

  • https://education.web3.foundation/docs/introsubstrate

  • https://education.web3.foundation/docs/introparachain

  • polkadot-sdk-docs:https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

  • 所有模板

 

  • Substrate-node-template:https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

  • Cumulus-parachain-template:https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

  • Extended-parachain-template:https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

 

 

链上开发 – 智能合约

在 Polkadot 核心上运行的任务/Runtime 本身可以是智能合约平台,类似于 Ethereum 或 Solana,例如 Moonbeam 和Astar这些平台可以支持多个虚拟机,如 EVM 和 WASM,或者两者兼而有之。

因此,Polkadot 通过其不断发展的平行链生态系统支持智能合约开发作为辅助功能。目前已经讨论/提出了关于 Polkadot 本地智能合约平台的讨论/提案,但到目前还没有落地。

此外,团队可以利用上述技术部署“single dApp chain”。想象一下,当合同在共享环境中(例如 Moonbeam)成功,就可以拥有更多的带宽和更低的费用。这可以通过一个用 FRAME 编写的 Runtime 来实现,它可以执行智能合约,并且只托管这个项目的合约。然后,一些合同可以被重写为 FRAME 模块,以实现更多的带宽和一些较低级别的功能。最后,合约可以升级为完整的 FRAME Runtime。有关下文的详细信息,请参见下面的总结图。

 

相关资源

  • https://use.ink/

  • Frontier docs:https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

  • Frontier-parachain-template:https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

 

 

链上开发 – 互操作性和消息传递

由于 Polkadot 的共享安全性,Runtimes 和智能合约(或者驻留在 Core 上的任何其他任务)可以相互通信,无需担心消息接收者的经济安全性。可以在 Core 之间发送任何消息,尽管生态系统中采用的主要语言是XCM,即跨共识通信。

  • XCM-docs:https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

 

 

链下开发

Polkadot 生态系统提供了一系列 API,用于编写基于前述原语的去中心化应用程序。这些编程 API 允许开发人员连接到并与 Runtime、智能合约或两者进行交互。

  • Rust: Sub-xt

https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/

  • JS/TS: Polkadot-JS-API

https://polkadot.js.org/docs/api/

  • JS/TS: Substrate Connect

https://github.com/paritytech/substrate-connect

  • Substrate 前端模板

https://github.com/substrate-developer-hub/substrate-front-end-template

  • Polkadot 云端资料库

https://polkadot.cloud/

  • py-substrate-interface

https://github.com/polkascan/py-substrate-interface

  • 客户端库的完整列表

https://chat.openai.com/c/43651d3c-d4c7-4389-8561-1f65a75f91b7

 

 

总结

以下图表展现了上述所有的开发类型:

波卡开发者通关指南:新技术来临之际,如何选择适合的开发路径?

  • 此图中的所有 Core 都用于bulk coretime——除了 Core 3,它用于表示瞬时 Coretime。

  • T1 和 T2 是共享一个 Core 的两个 Runtime。这表示了它们轮流使用了广泛的类别,包括使用辅助市场或其他任何东西。

 

  • 有关更多示例,参见RFC#1:https://polkadot-fellows.github.io/RFCs/approved/0001-agile-coretime.html

  • T3 是一个长时间运行的 Runtime,使用 bulk coretime。

  • T4 是一个通用的智能合约平台,类似于 Moonbeam。应用程序可以在 T4 上运行的一个或多个合约。

  • T5 是一种专有的智能合约平台,即“单个 dApp 链(single dApp chain)”,在这里你可以将合约和(自定义)FRAME 合并到一个 Runtime 中。这种 Runtime 最初可以周期性地进行调度,就像 T5 的用例一样。

  • T6 与 T5 相同,但在专用 Core 上进行调度,而不是按需调度。因此,想象一下对于 Polkadot 上的一个项目来说,用户旅程可能是这样的:开始时,你可以作为在现有平行链上运行的一组合约。当扩展到 T5,即“单个 dApp 链”时,你可以在这里运行合约和托盘。一旦需求增加,T5 发展为 T6,这意味着使用更多的带宽。最后,可以消除所有合约,仅使用托盘进行应用逻辑,从而最大程度地发挥对 Runtime 的控制,例如 T3。

  • 在此图中一个 Runtime 内的任何通信(只要您保持在一个绿色框内)都是同步的。要越过绿色框的任何东西都是异步的。在此图中的任何两个组件都可以相互通信,但如果是异步的,可以使用XCM。XCM 中的许多复杂性正是来自于它被设计用于处理跨共识系统的异步通信

  • 从技术上讲,一个 Core 内部的任何通信都可以是同步的,但现在并不是这样实现的。原则上,共同调度在单个 Core 上的两个平行链(T1和T2)也可以具有同步通信。

 

 

参考资源

  • https://education.web3.foundation/docs/introrust

  • https://polkadot-blockchain-academy.github.io/pba-book/frame/index.html

  • https://github.com/Awsmdot/awesome-dot

  • https://github.com/shawntabrizi/rust-state-machine