决定要构建什么

⚠️ Update Notice:

Please read Substrate to Polkadot SDK page first.


在设计应用程序时,您需要做出的第一个决定之一是您要使用的方法。 例如,您需要决定您的项目最适合以智能合约、单个模块、自定义运行时或平行链的形式交付。 关于要构建什么的决定将影响您需要做出的几乎所有其他决定。 为了帮助您做出关于要构建什么的初始决定,本节重点介绍了可用的选项、它们之间的差异以及您可能选择一种方法而不是另一种方法的原因。

智能合约

许多开发人员熟悉智能合约,并且自然倾向于认为他们的项目非常适合智能合约模型。 但是,在确定智能合约方法是否适合您的项目时,需要考虑其优点和缺点。

智能合约必须遵守区块链规则

智能合约是在特定链上部署并在特定链地址上运行的指令。 由于智能合约在它们无法控制的底层区块链上运行,因此它们必须遵守底层链施加的任何规则或限制。 例如,底层区块链可能会限制对存储的访问或阻止某些类型的交易。

此外,接受智能合约的区块链通常将代码视为来自不受信任的来源——可能是恶意行为者或经验不足的开发人员。 为了防止不受信任的代码破坏区块链操作,底层区块链实施了本机安全措施来限制恶意或有缺陷的智能合约可以做的事情。 例如,底层链可能会收取费用或强制执行计量以确保对合约开发人员或用户收取合约消耗的计算和存储费用。 合约执行的费用和规则由底层链自行决定。

智能合约和状态

您可以将智能合约视为在沙箱环境中执行。 它们不会直接修改底层区块链存储或其他合约的存储。 通常,智能合约只修改它们自己的状态,并且不会调用其他合约或运行时函数。 通常,运行智能合约会有一些额外的开销,以确保底层区块链可以回滚交易以防止状态在合约中的错误导致执行失败时被更新。

使用智能合约的场景

尽管智能合约存在限制,但有一些场景可能从使用智能合约中获益。 例如,智能合约的进入门槛较低,并且通常可以在短时间内构建和部署。 减少的开发时间可能会让您在确定产品与市场匹配度和快速迭代方面具有优势。

同样,如果您熟悉使用 Solidity 等语言构建智能合约,则可以减少项目的学习曲线和上市时间。 由于智能合约遵守它们部署的链的功能,因此您可以更专注于实现合约的应用程序逻辑,而无需担心区块链基础设施或经济学。

如果您计划构建平行链,则还可以使用智能合约以隔离的方式对功能进行原型设计,而不会影响底层网络,然后再投资于更全面的解决方案。 如果您是运行时开发人员,则可以合并合约以允许您的社区扩展和开发运行时的功能,而无需授予他们访问底层运行时逻辑的权限。 您还可以使用智能合约来测试未来的运行时更改。

通常,在决定是否使用智能合约构建项目时,应考虑以下特征:

  • 它们对于网络来说本质上更安全,因为安全措施内置于底层链中,但您无法控制这些安全措施施加的任何限制、限制或计算开销。
  • 底层链提供了针对滥用的内置经济激励措施,但费用和计量系统由底层链定义。
  • 它们在代码复杂性和部署时间方面具有较低的进入门槛。
  • 它们可以为原型设计、测试和社区参与提供隔离的环境。
  • 它们具有较低的部署和维护开销,因为您利用了现有网络。

以下示例说明了智能合约的用例:

  • 向现有的去中心化交易所 (DEX) 添加衍生品。
  • 实现自定义交易算法。
  • 定义特定各方之间合约的逻辑。
  • 在将应用程序转换为平行链之前对其进行原型设计和测试。
  • 在现有链上引入第 2 层代币和自定义资产。

探索智能合约

如果您的项目似乎非常适合成为智能合约,则可以查看以下教程中的一些简单示例以帮助您入门:

单个模块

在某些情况下,您可能希望将应用程序逻辑实现为独立模块,并将功能作为库提供给社区,而不是构建自己的自定义运行时。 例如,如果您不想部署和管理特定于应用程序的区块链,则可以构建一个或多个单个模块来提供对所有基于 Substrate 的链来说广泛有用的功能,这些功能可以改进现有功能或定义 Polkadot 生态系统的标准。 单个模块通常易于使用 FRAME 开发,并且易于基于 Substrate 的链集成。

编写正确的代码

值得注意的是,模块本身不会提供智能合约提供的任何类型的保护或安全措施。 使用模块,您可以控制可供运行时开发人员实现的逻辑。 您提供模块所需的存储项、事件和错误。 模块本身不会引入费用或计量系统。 您有责任确保您的模块逻辑不允许不良行为或使您的模块使用的网络容易受到攻击。 这种缺乏内置安全措施意味着您有很大责任编写避免错误的代码。

运行时开发之外的模块

通常,编写模块是通往运行时开发的途径,让您有机会在构建完整的区块链应用程序之前尝试现有的模块和编码模式。 单个模块还提供了一种替代方法,您可以通过这种方法为项目做出贡献,而无需编写自己的应用程序。

尽管编写和测试模块通常是构建更大规模应用程序的垫脚石,但单个模块对整个生态系统来说具有很多价值。

即使您正在构建单个模块,也需要在运行时的上下文中对其进行测试。 开发单个模块的主要缺点是您无法控制它们使用的运行时的任何其他部分。 如果您将模块视为隔离的代码,则可能会错过增强或改进它的机会。 此外,如果您不更新代码以与这些更改保持同步,则 FRAME 或 Substrate 的更改可能会为您的单个模块带来维护问题。

探索构建模块

如果您的项目似乎非常适合成为单个模块,则可以查看以下部分中的一些简单示例以帮助您入门:

自定义运行时

在大多数情况下,决定构建自定义运行时是构建和部署特定于应用程序的平行区块链(平行链)作为 Polkadot 生态系统的一部分的关键步骤。 通过使用 Substrate 和 FRAME,您可以开发完全自定义的运行时。 使用自定义运行时,您可以完全控制应用程序的所有方面,包括经济激励措施、治理、共识和资源管理。

有一些模块提供了许多这些功能的可插拔模块。 但是,您需要决定使用哪些模块、如何根据您的需求修改它们以及需要自定义模块的位置。 由于您控制着网络中每个节点运行的所有底层逻辑,因此与编写智能合约或单个模块相比,代码技能和经验的进入门槛更高。

与单个模块一样,自定义运行时不会提供任何内置安全措施来防止不良行为者或不正确的代码造成损害。 您有责任正确评估资源消耗以及如何在运行时逻辑中应用交易费用以充分保护网络和您的用户社区。

与智能合约或单个模块不同,自定义运行时是一个功能齐全的区块链。 使自定义运行时可供其他人使用并确保其安全涉及获取物理或云计算资源、构建一个发现您的服务有价值的社区以及管理网络基础设施。

使用智能合约,您的应用程序在现有执行模型之上运行,限制了应用程序可以做的事情。 使用自定义运行时,您可以控制该底层执行模型,并且可以选择扩展它以支持其他开发人员执行智能合约。 使用自定义运行时,您还可以提供比智能合约或单个模块可以提供的更复杂的功能和用户交互。

探索构建自定义运行时

如果您想构建更完整的自定义运行时而不是单个模块,则可以从 使用模块收藏品研讨会 中的一些简单示例开始。 但是,如果您想构建自定义运行时作为单链或平行链的概念验证,则需要更广泛和更深入地了解运行时组件和 FRAME 模块。 最相关的主题在 构建测试 下,以及以下部分中:

平行链

自定义运行时可以作为私有网络或单链的业务逻辑独立存在,但如果您希望您的项目成为可行的生产链,则将应用程序的业务逻辑和状态转换功能部署为平行链或平行线程有几个优势。

平行链和平行线程充当独立的第 1 层区块链。 每个平行链都有自己的逻辑,并且与生态系统中的其他链并行运行。 生态系统中的所有链都从网络的共享安全、治理、可扩展性和互操作性中获益。

平行链提供最大的灵活性

通过将项目开发为平行链,您在链的设计和功能方面拥有很大的自由度和灵活性。 您决定构建什么完全取决于您。 例如,您可以定义要在链上或链外存储哪些数据。 您可以定义自己的经济学原语、交易要求、费用策略、治理模型、国库帐户和访问控制规则。 您的平行链可以根据您的决定拥有尽可能少的(或尽可能多的)每笔交易开销,并且您的平行链可以随着时间的推移通过升级和优化而发展。 唯一的要求是您的平行链或平行线程必须与 Polkadot API 兼容。

计划平行链资源要求

作为平行链,您的项目可以以比私有链或单链更安全的方式为更广泛的社区提供功能。 但是,如果您想构建一个生产就绪的平行链,则应牢记以下其他要求:

  • 您将需要一个拥有足够技能和经验的开发团队,无论是精通 Rust 编程还是精通 UX 设计。

    平行链开发可能需要比其他选项更多的资源。

  • 您需要通过营销、外联或生态系统开发计划来构建您的社区。
  • 您将需要为您的基础设施和网络维护提供资源。

    平行链是一个完整的区块链。 尽管中继链为您的项目提供了安全性和共识,但您必须维护您的链和网络基础设施。 除了开发人员操作 (DevOps) 之外,您还需要确保平行链插槽、设计众筹或拍卖策略以及积累足够的资源来扩展插槽。

  • 您将需要足够的时间来测试和验证您的链操作,在沙箱或模拟网络以及功能齐全的测试网络上。

平行链用例

通常,如果您需要复杂的操作,则应将项目构建为平行链,因为平行链提供了更快、更高效的交易执行。 例如,构建平行链可能是以下用例的最佳选择:

  • 去中心化金融 (DeFi) 应用程序
  • 数字钱包
  • 物联网 (IOT) 应用程序
  • 游戏应用程序
  • Web 3.0 基础设施

探索构建平行链

如果您有一个自定义运行时,您希望将其部署为平行链以利用中继链和 Polkadot 或 Kusama 生态系统的安全、治理和互操作性,则可以从在本地构建并设置自己的测试网络以进行初始测试开始。

有关一些帮助您入门的示例,请参阅以下部分:

要了解有关您可以构建什么的更多信息,请探索以下资源: