二、入门Substrate之Substrate-node-template模板中的pallet-template进行源码分析
其实作为Substrate的开发者们,已经为使用框架者提供了类似八股文一样的宏来简化开发,目前你只需要记住这个配置是干什么用的就够了,如果想要自定义pallet,建议直接把模板中的lib.rs直接复制过去,进行修改即可,后续想要深入了解,可以去看substrate的源码。本文将会分析了pallet-template的文件结构,常用配置的作用,并仿照模板自定义一个交易函数、存储类型、事件、错误。
1.文件结构
首先我们打开Substrate-node-template文件夹看看目录结构
我们找到根目录下的pallets->template
- lib.rs:自定义pallet的主文件,大部分逻辑都在这里
- mock.rs:为测试文件提供一些配置
- test.rs:测试文件
- benchmarking.rs:此文件用于生成发交易使用的weight,在后面的文章中会专门介绍,暂不讨论
2.源码分析
下面我们将lib.rs文件内容复制过来,一行一行进行解释分析
//这个 crate 不应使用 rust 的标准库
#![cfg_attr(not(feature = "std"), no_std)]
pub use pallet::*;
//引入mock
#[cfg(test)]
mod mock;
//引入tests
#[cfg(test)]
mod tests;
//引入benchmarking
#[cfg(feature = "runtime-benchmarks")]
mod benchmarking;
//以下是构建自定义pallet的主体部分
#[frame_support::pallet]
pub mod pallet {
//使用依赖
//frame_support主要提供DispatchResult,其实就是一个Rusult,正确执行返回一个Ok(())即可
//frame_support还定义了一些常用的存储结构,trait
use frame_support::{dispatch::DispatchResult, pallet_prelude::*};
//引入frame_system中的一些常用的宏,例如* ensure_signed、ensure_none、ensure_root
use frame_syste