显示软件包…
1 个稳定版本
2.0.1 | 2021 年 4 月 4 日 |
---|
#20 在 #tetcore
1MB
24K SLoC
高分池模块
该模块维护一个高分成员池。池中的每个实体都可以分配一个 Score
。从这个池中构建一个集合 Members
。此集合包含得分最高的 MemberCount
个实体。未评分的实体永远不会是 Members
的一部分。
如果实体想成为池的一部分,则需要存款。当实体提款或被有权力的实体移除时,存款将被返还。
每个 Period
块,Members
集合将从池中得分最高的成员刷新,并且无论是否发生变化,都会调用 T::MembershipChanged::set_members_sorted
。在首次加载时,使用初始的 Members
集合调用 T::MembershipInitialized::initialize_members
。
可以在任何时候撤回候选资格/辞职。如果实体目前是成员,则会导致从 Pool
和 Members
中移除;实体立即被池中下一个最高得分候选者替代,如果有的话。
接口
公共函数
submit_candidacy
- 提交候选资格以成为成员。需要存款。withdraw_candidacy
- 撤回候选资格。存款将被返还。score
- 为实体分配一个定量评分。kick
- 从池和成员中移除实体。存款将被返还。change_member_count
- 改变进入Members
的候选人数。
用法
use fabric_support::{decl_module, dispatch};
use fabric_system::ensure_signed;
use noble_scored_pool::{self as scored_pool};
pub trait Config: scored_pool::Config {}
decl_module! {
pub struct Module<T: Config> for enum Call where origin: T::Origin {
#[weight = 0]
pub fn candidate(origin) -> dispatch::DispatchResult {
let who = ensure_signed(origin)?;
let _ = <scored_pool::Module<T>>::submit_candidacy(
T::Origin::from(Some(who.clone()).into())
);
Ok(())
}
}
}
依赖项
此模块依赖于 系统模块。
许可证:Apache-2.0
依赖项
~3–12MB
~134K SLoC