我应该啥时候构建一个 Substrate 运行时模块而不是一个 Substrate 智能合约?

Posted

技术标签:

【中文标题】我应该啥时候构建一个 Substrate 运行时模块而不是一个 Substrate 智能合约?【英文标题】:When should I build a Substrate Runtime Module versus a Substrate Smart Contract?我应该什么时候构建一个 Substrate 运行时模块而不是一个 Substrate 智能合约? 【发布时间】:2019-09-26 04:33:01 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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


智能合约

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

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

这些不同的开销使运行合约变得更慢且成本更高,但同样,合约开发的“目标受众”与运行时开发人员不同。

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

总结,Substrate 智能合约:

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

运行时模块

另一方面,运行时模块无法提供智能合约为您提供的这些保护或安全防护。作为运行时开发人员,您生成的代码的入口门槛会大幅上升。

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

Substrate 运行时模块开发旨在产生精益、高性能和快速的节点。它不提供交易恢复的任何保护或开销,并且不会隐式地将任何费用系统引入到您链上的节点运行的计算中。这意味着,在您开发运行时功能时, 可以正确评估运行时逻辑的不同部分并将其应用费用,这样它就不会被不良行为者滥用并损害您的网络。

总结,Substrate 运行时模块:

提供对整个区块链的低级别访问。 已消除内置安全系统的开销以提高性能。 对开发人员有很高的准入门槛。 不一定要编写工作代码,但要避免编写损坏的代码。 没有排斥不良行为者的内在经济动机。

适合您的工具

Substrate 运行时模块和 Substrate 智能合约是提供给您解决问题的工具。

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

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

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

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

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

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

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

【讨论】:

以上是关于我应该啥时候构建一个 Substrate 运行时模块而不是一个 Substrate 智能合约?的主要内容,如果未能解决你的问题,请参考以下文章

在 Substrate 中,Babe、Aura 和 Grandpa 有啥区别

我啥时候应该使用 FutureBuilder?

substrate 区块链框架 概述

一入门Substrate之构建你的第一条Substrate chain并与之交互

无标题

我啥时候应该特别使用 .jsx 和 .js?