【Substrate Collectables教程】【第1章基础】1. 创建 module
2022/5/11 23:14:52
本文主要是介绍【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!
的末尾添加一行定义:
请注意,我们在此定义中添加了三种类型(Module
,Call
,Storage
),所有这些类型都是由模板中定义的宏生成的。
这样,这段代码是有效的,并且应该能编译通过。通过下面的命令试一试:
./scripts/build.sh
cargo build --release
编译后发现出错
因为appletrace被重复定义了
在 construct_runtime!
中应该修改成
上图片的1和2命名应该不同
修改后运行成功
这篇关于【Substrate Collectables教程】【第1章基础】1. 创建 module的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升