查看原文
其他

Substrate 智能合约是什么?

PolkaWorld 2020-11-11

本文是对 Substrate 中智能合约的状态概述。

虚拟机

FRAME 提供了两个智能合约虚拟机,可以添加到 Substrate runtime。

合约模块

FRAME 合约模块(SEAL)为 runtime 提供部署和执行 WebAssembly 智能合约的功能。它旨在迭代现代智能合约平台的设计。

EVM 模块

FRAME EVM 模块[1]提供了 EVM 执行环境,允许未修改的 EVM 代码在基于 Substrate 的区块链中执行。它的设计目的是在 Substrate runtime 上最接近的模拟在以太坊主网上执行合约的功能。

自定义

Substrate 不是一个仅限制于自带模块的平台。

我们鼓励在 Substrate runtime 的基础上进一步开发更多选择的智能合约平台。你可以使用这些预先构建的模块在现有的系统上设计自己的系统或端口,然后去运行了一个基于 Substrate 的链。

智能合约语言

ink!

ink![2] 是一个基于 Rust 的 eDSL,专门用于为合约模块[3]编写 Wasm 智能合约。它设计的目的是为了正确、简洁和高效。

智能合约 vs Runtime 模块

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

智能合约

传统的智能合约平台允许用户在一些核心区块链逻辑的基础上增加额外的逻辑。由于任何人都可以发布智能合约逻辑,包括恶意行为人和缺乏经验的开发人员,因此在这些公共智能合约平台都建立了许多安全卫士。

一些例子:

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

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

合约可以让你的社区在 runtime 逻辑的基础上进行扩展和开发,而无需经历所有疯狂的提议、runtime 升级等等... 它甚至可以用作将来 runtime 更改的测试基础,这种方式可以将你的网络与 “成长带来的痛苦” 或可能发生的错误隔离开来。

总结一下,Substrate 智能合约:

  • 对网络来说本质上更安全。
  • 建立了防止滥用的经济激励机制。
  • 具有计算开销可以去支持逻辑中的正常故障。
  • 开发门槛较低。
  • 通过 playground 实现快速社区互动,以编写新逻辑。

Runtime 模块

Runtime 模块不提供智能合约提供的这些安全保护。所以作为一个 runtime 开发人员,你的开发成本会比较高。

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

Substrate runtime 模块开发的目的是产生精益的、高效的和快速的节点。它不提供交易还原的任何保护或开销,也不会向链上节点运行的计算引入任何收费系统。这意味着,在开发 runtime 函数时,你需要正确评估 runtime 逻辑的不同部分并对其计算费用,这样就不会被坏的参与者滥用,也不会损害你的网络。

总结一下,Substrate Runtime 模块:

  • 提供了对整条区块链的底层访问接口。
  • 移除了内置的安全性开销系统,从而提高了性能。
  • 对开发人员有很高的门槛。
    • 不一定要写工作代码,但要避免写坏代码。
  • 没有内在的经济激励来击退坏的参与者。

适合你的工具

Substrate runtime 模块和 Substrate 智能合约是可以用于解决问题的工具。

这两个方法能解决的问题可能有一定程度的重叠,但也有一些明确的问题只适合其中一个。关于这个,在这里给出一些举例:

  • Runtime Module:在区块链中的交易之上构建隐私层。
  • 共享:构建一个游戏 dApp,它可能需要构建一个用户社区(倾向于使用智能合约),或者可能需要扩展到每天数百万个交易(倾向于使用 runtime 模块)。
  • 智能合约:在你的区块链代币上引入多签名钱包。

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

另一方面,建立你自己的区块链,还需要花费成本去建立一个在你的服务中发现价值的社区,或者用云计算系统和一般网络维护的成本来建立一个私有网络。

在这里很难对每种可能的情况提供直接的指导,但可以使用下面的表格来帮助你对使用不同工具的各种情况做出决定:

下一步

了解更多

  • 请参阅 Substrate 如何使用合约模块(https://substrate.dev/docs/en/knowledgebase/smart-contracts/contracts-pallet)在智能合约区块链上迭代。
  • 查看 EVM 模块(https://substrate.dev/docs/en/knowledgebase/smart-contracts/evm-pallet),看看它是否是你下一个项目所需要的。
  • 了解智能合约语言  ink!https://substrate.dev/docs/en/knowledgebase/smart-contracts/ink-fundamentals

案例

  • 《在 Substrate runtime 上增加一个 runtime 模块》https://substrate.dev/docs/en/tutorials/add-a-pallet-to-your-runtime/
  • 如何使用合约模块和 ink! 进行开发:https://substrate.dev/docs/en/knowledgebase/smart-contracts/ink-development

参考

  • 合约模块:https://crates.parity.io/pallet_contracts/index.html
  • EVM 模块:https://crates.parity.io/pallet_evm/index.html
  • ink! 库:https://github.com/paritytech/ink

原文:https://substrate.dev/docs/en/knowledgebase/smart-contracts/overview

翻译:PolkaWorld 社区

参考资料

[1]

EVM 模块: https://substrate.dev/docs/en/knowledgebase/smart-contracts/evm-pallet

[2]

ink!: https://substrate.dev/docs/en/knowledgebase/smart-contracts/ink-fundamentals

[3]

合约模块: https://substrate.dev/docs/en/knowledgebase/smart-contracts/overview#contracts-module


  • 欢迎学习 Substrate: 

    https://substrate.dev/

  • 关注 Substrate 进展:

    https://github.com/paritytech/substrate

  • 关注 Polkadot 进展:

    https://github.com/paritytech/polkadot



更多 Substrate 文档:

Substrate Runtime 概述|Substrate 文档

Substrate FRAME 是什么?

教程|编写一个 Substrate 模块


扫码关注公众号,回复 “1” 加入波卡群

关注 PolkaWorld

发现 Web 3.0 时代新机遇


点个 “在看” 再走吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存