【Substrate Collectables教程】【第1章基础】1. 创建 module

前言:

本节中,会通过学习创建自定义runtime的基础知识,学会

  • 1. 如何使用runtime存储
  • 2. 如何公开runtime函数
  • 3. 如何使用Polkadot-JS APPs UI与runtime进行交互

在开始学习之前,了解以下的几个概念:

Runtime: 区块链的执行逻辑,在substrate中是以WebAssembly (一种可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行的技术方案\JS的API)

Module: 模块。区块链runtime由多种特性和功能组成,这些特性和功能可以为区块链提供支撑,如账户管理、Token余额、治理、runtime升级等。上述的这些都是代码库中所提供的模块,包含在runtime中。Substrate提供默认模块集合被称做Substrate Runtime Module Library。

在Substrate中,我们要学习的就是如何在runtime中创建新的module。

Rust: Substrate和Runtime的开发使用Rust编程语言。

ownership和borrowing(待学习): rust中的一种特性,可以保证rust在没有垃圾回收器的情况下,保证内存安全

Trait: Traits 是 Rust 中唯一和 interface 类似的概念

使用 Result 表示 Recoverable Errors:???模块函数必须返回 Result 类型,这允许我们处理函数中的错误。返回结果是 Ok() 时表示成功,是 Err() 时表示失败。

Macros: 宏,编写代码的代码。

 

1.1 创建Module

 首先,我们需要为 runtime 创建一个新 module。为此,我们将使用一个空 module 模板,并把它放在一个新的 appletrace.rs 文件中:

 

 注意: substrate-node-template还提供了一个template.rs文件。通常你可以从这个模板文件开始构建你的模块。这里为了从头开始,我们使用一个新文件。

appletrace.rs的内容如下

复制代码
use support::{decl_storage, decl_module};

pub trait Trait: system::Trait {}

decl_storage! {
    trait Store for Module<T: Trait> as KittyStorage {
        // Declare storage and getter functions here
    }
}

decl_module! {
    pub struct Module<T: Trait> for enum Call where origin: T::Origin {
        // Declare public functions here
    }
}
复制代码

 

 更新我们的 Runtime

如果仔细查看 lib.rs 文件,你会注意到它包含有关构成 runtime 的所有 module 细节。对于每个 module,我们:

  • 导入包含该 module 的 Rust 文件
  • 实现其 Trait
  • 将该 module 包含在 construct_runtime! 宏中

所以我们需要在这里做同样的事情。

要包含我们创建的新 module 文件,我们可以在文件顶部附近添加下面这行(用注释 // Add this line 指出):

 

 由于我们没有在 module 中定义任何内容,因此我们的 Trait 实现也非常简单。我们可以在其他 trait 实现之后包含这一行:

 

 最后,我们可以在 construct_runtime! 的末尾添加一行定义:

请注意,我们在此定义中添加了三种类型(ModuleCallStorage),所有这些类型都是由模板中定义的宏生成的。

这样,这段代码是有效的,并且应该能编译通过。通过下面的命令试一试:

./scripts/build.sh

cargo build --release

编译后发现出错

 

 因为appletrace被重复定义了

在 construct_runtime! 中应该修改成

 

 上图片的1和2命名应该不同

修改后运行成功

 

 

 

posted @   MintMin  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示