Substrate中Membership模块分析
这样一个membership的管理模块,议会成员管理,当然在一个去中心化系统中,压根就不存在某个节点能对议会进行管理,所以整个模块只是给Root进行管理,同样也是为了开发方便而已。议会成员更多是依赖election模块和election-phragmen模块进行定义和更迭。
Trait
/// The overarching event type.
type Event: From<Event<Self, I>> + Into<<Self as system::Trait>::Event>;
/// 添加一个议会成员时需要的权限,一般是Root权限
type AddOrigin: EnsureOrigin<Self::Origin>;
/// 移除一个议会成员时需要的权限,一般是Root权限
type RemoveOrigin: EnsureOrigin<Self::Origin>;
/// 替换一个议会成员时需要的权限,一般是Root权限
type SwapOrigin: EnsureOrigin<Self::Origin>;
/// 对议会成员集合进行重置时需要的权限
type ResetOrigin: EnsureOrigin<Self::Origin>;
/// 当议会成员被初始化时收到的信号
type MembershipInitialized: InitializeMembers<Self::AccountId>;
/// 当议会成员被更改时收到的信号
type MembershipChanged: ChangeMembers<Self::AccountId>;
Storage
Members get(fn members): Vec<T::AccountId>;
在初始化的时候,可以设置议会成员:
add_extra_genesis {
config(members): Vec<T::AccountId>;
config(phantom): rstd::marker::PhantomData<I>;
build(|config: &Self| {
let mut members = config.members.clone();
members.sort();
T::MembershipInitialized::initialize_members(&members);
<Members<T, I>>::put(members);
})
}
Module
- fn add_membet(origin,who: T::AccountId)
- fn remove_member(origin,who: T::AccountId)
- fn swap_member(origin,remove: T::AccountId, add: T::AccountId)
- fn reset_members(origin, members: Vec<T::AccountId>)
网友评论