什么时候应该构建 Substrate 运行时模块与 Substrate 智能合约?

When should I build a Substrate Runtime Module versus a Substrate Smart Contract?

开发 Substrate 运行时模块和 Substrate 智能合约(例如使用 ink! 语言)之间有什么区别?

哪些应用程序最好以一种或另一种形式编写?

Substrate 运行时模块和 Substrate 智能合约是使用 Substrate 框架构建“去中心化应用程序”的两种不同方法。


智能合约

传统的智能合约平台允许用户在一些核心区块链逻辑之上发布额外的逻辑。由于任何人都可以发布智能合约逻辑,包括恶意行为者和缺乏经验的开发人员,因此围绕智能合约平台构建了许多有意的安全防护措施。一些例子是:

  • 费用:确保合同开发人员为他们在计算机上强制执行的计算和存储付费运行他们的合同,并且不允许滥用块创建者。
  • 沙盒:合约不能直接修改核心区块链存储或其他合约的存储。它的能力仅限于修改它自己的状态,以及对其他合约或运行时间函数进行外部调用的能力。
  • 状态租金:合同在区块链上占用 space,因此应该为简单的存在收取费用。这确保人们不会利用“免费、无限存储”。
  • Revert:合同很容易出现导致逻辑错误的情况。合约开发人员的期望很低,因此增加了额外的开销以支持在交易失败时恢复交易,因此在出现问题时不会更新状态。

这些不同的开销使 运行 宁合同更慢,成本更高,但同样,合同开发的“目标受众”不同于 运行 时间开发人员。

合同可以让您的社区在您的 运行 时间逻辑之上扩展和发展,而无需经历所有疯狂的提议、运行时间升级等......它可能甚至可以用作未来 运行 时间变化的试验场,但这样做的方式可以将您的网络与任何可能发生的成长烦恼或错误隔离开来。

总结,Substrate 智能合约:

  • 本质上对网络更安全。
  • 已经建立了防止滥用的经济激励措施。
  • 有计算开销来支持逻辑中的正常故障。
  • 降低开发门槛。
  • 通过游乐场实现快节奏的社区互动以编写新逻辑。

运行时模块

另一方面,运行时模块提供 none 智能合约为您提供的这些保护或安全防护。作为一名 运行 时间开发人员,编写代码的门槛会大大提高。

您可以完全控制网络上每个节点的底层逻辑 运行。您可以完全访问所有模块中的每个存储项目,您可以修改和控制这些项目。您甚至可以用不正确的逻辑或糟糕的错误处理来破坏您的链。

Substrate Runtime Module 开发的目的是生产精益、高性能和快速的节点。它提供 none 交易恢复的保护或开销,并且不会隐含地引入任何费用系统来计算链上的节点 运行。这意味着当您开发 运行 时间函数时, 需要正确评估并向 运行 时间逻辑的不同部分应用费用,以便它不会被不良行为者滥用并伤害您的网络。

总结,Substrate 运行时模块:

  • 提供对整个区块链的低级别访问。
  • 已移除 built-in 性能安全的开销。
  • 开发人员的进入门槛很高。
    • 不一定要编写工作代码,但要避免编写损坏的代码。
  • 没有抵制不良行为者的内在经济激励。

适合您的工具

Substrate 运行时模块和 Substrate 智能合约是您可以用来解决问题的工具。

每个人都可以解决的问题类型可能有一定的重叠,但也有一组明确的问题只适合两者中的一个。两个在每个类别中仅给出一个示例:

  • 运行时模块:在您的区块链交易之上构建隐私层。
  • 共享:构建像 Cryptokitties 这样的 DApp,可能需要建立用户社区(倾向于智能合约),或者可能需要扩展到每天数百万笔交易(倾向于运行时模块)。
  • 智能合约:将第 2 层代币和自定义资产引入您的网络。

除了上面写的所有内容之外,您还需要考虑使用特定工具设置 DApp 的成本。部署合约是一个相对简单易行的过程,因为您可以利用现有网络。您唯一的成本是您为部署和维护合同支付的费用。

另一方面,建立您自己的区块链需要花费建立社区的成本,这些社区会在您的服务中发现价值,或者建立一个具有云计算系统和一般网络维护开销的私有网络。

我认为现在真的是第一次如此简单易用地构建运行时间逻辑。过去,每个人都使用他们可用的工具智能合约来构建他们的“去中心化应用程序创意”,即使这不是完成这项工作的最佳工具。

随着 Substrate 的推出,有一个新工具可用于构建去中心化应用程序;但同样,认为您所有的想法都应该是 Substrate 运行时模块是错误的。

相反,作为一个社区,我们第一次拥有两种工具,我们需要一起找出最适合每种情况的工具。我不认为这个问题的所有答案今天都存在,但我们可以在此过程中学习并做出一些有根据的猜测。