美文网首页
Substrate中Collective模块

Substrate中Collective模块

作者: 建怀 | 来源:发表于2019-11-25 20:15 被阅读0次

Substrate中Collective模块

Substrate中议会的功能模块,议员们需要通过发起提案来推动共识达成。议会成员两种方式,一种是直接Root权限的调用set_members,或者间接的,通过民主选举的方法ChangeMembers

发起的提案需要被投票,投票其实很简单,其记录结构如下:

/// Info for keeping track of a motion being voted on.
pub struct Votes<AccountId> {
    /// The proposal's unique index.
    index: ProposalIndex,
    /// The number of approval votes that are needed to pass the motion.
    threshold: MemberCount,
    /// The current set of voters that approved it.
    ayes: Vec<AccountId>,
    /// The current set of voters that rejected it.
    nays: Vec<AccountId>,
}

存储那些数据呢,其实也很简单:

  • Proposals,获取所有提案的Hash。
  • ProposalOf,根据提案Hash来获取提案信息。
  • Voting,某个正在进行投票的提案,获取所有投票人账号地址。
  • ProposalCount,至今为止的提案总数。
  • Members,现在议会中所有的成员账号地址,根据value进行排序。

可以在链初始化的时候,放几个议会成员。

add_extra_genesis {
    config(phantom): rstd::marker::PhantomData<I>;
    config(members): Vec<T::AccountId>;
    build(|config| Module::<T, I>::initialize_members(&config.members))
}

监听链上事件:

  • Proposed:新的提案被提出来
  • Voted:提案被投票
  • Approved:提案被通过
  • Disapproved:提案被否决
  • Executed:提案被执行
  • MemberExecuted:提案被一个成员执行

然后是定义的几个方法了:

  • set_members:给ROOT用户执行的。用来直接指定议会成员。
  • execute:议会成员执行提案。
  • propose:发起提案,如果threshold小于2,提案可以直接执行,否则需要投票。
  • vote:给提案投票。投票人必须为议会成员。

相关文章

网友评论

      本文标题:Substrate中Collective模块

      本文链接:https://www.haomeiwen.com/subject/flzjwctx.html