其他分享
首页 > 其他分享> > 【Substrate Collectables教程】【第1章基础】1. 创建 module

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

作者:互联网

前言:

本节中,会通过学习创建自定义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 文件,我们可以在文件顶部附近添加下面这行(用注释 // Add this line 指出):

 

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

 

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

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

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

./scripts/build.sh

cargo build --release

编译后发现出错

 

 因为appletrace被重复定义了

在 construct_runtime! 中应该修改成

 

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

修改后运行成功

 

 

 

标签:Substrate,Trait,Module,module,Collectables,runtime,我们
来源: https://www.cnblogs.com/xiangshigang/p/16251724.html