显示软件包…

1 个稳定版本

2.0.1 2021 年 4 月 4 日

#20#tetcore

Apache-2.0

1MB
24K SLoC

高分池模块

该模块维护一个高分成员池。池中的每个实体都可以分配一个 Score。从这个池中构建一个集合 Members。此集合包含得分最高的 MemberCount 个实体。未评分的实体永远不会是 Members 的一部分。

如果实体想成为池的一部分,则需要存款。当实体提款或被有权力的实体移除时,存款将被返还。

每个 Period 块,Members 集合将从池中得分最高的成员刷新,并且无论是否发生变化,都会调用 T::MembershipChanged::set_members_sorted。在首次加载时,使用初始的 Members 集合调用 T::MembershipInitialized::initialize_members

可以在任何时候撤回候选资格/辞职。如果实体目前是成员,则会导致从 PoolMembers 中移除;实体立即被池中下一个最高得分候选者替代,如果有的话。

接口

公共函数

  • 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