一姥卢、主要方法
- 設(shè)置議員
- 代碼:
fn set_members(origin, new_members: Vec<T::AccountId>, prime: Option<T::AccountId>, old_count: MemberCount, )
- 參數(shù):
- new_members: 新的議員隊列
- prime: 有特殊權(quán)限的人
- old_count: 這個參數(shù)不重要
- 邏輯:
- root權(quán)限
- 排序并更新
- 代碼:
-
執(zhí)行某個方法
- 代碼:
fn execute(origin, proposal: Box<<T as Config<I>>::Proposal>, #[compact] length_bound: u32, )
- 參數(shù):
- proposal 要執(zhí)行的方法
- 邏輯:
- 是議員
- 對執(zhí)行的方法的長度有限制(字節(jié)數(shù))
- 把這個方法丟到執(zhí)行隊列
這個方法是用在需要議員權(quán)限但是又不需要按照比例執(zhí)行的情況
- 代碼:
- 提一個議案
- 代碼:
fn propose(origin, #[compact] threshold: MemberCount, proposal: Box<<T as Config<I>>::Proposal>, #[compact] length_bound: u32 )
- 參數(shù):
- threshold: 通過的閥值(多少票能通過)
- proposal: 執(zhí)行的方法
- length_bound: 這個方法的最大字節(jié)數(shù)
- 邏輯:
- 議員權(quán)限
- 執(zhí)行的方法字節(jié)數(shù)有限制
- 之前如果提過的議案屡限,還在隊列的不能再提
- 如果閥值小于二卑硫, 那么直接執(zhí)行
- 添加到議案隊列
- 議案有過期時間
- 給議案設(shè)置id, 也就是index
- 代碼:
- 給議案投票
- 代碼:
fn vote(origin, proposal: T::Hash, #[compact] index: ProposalIndex, approve: bool, )
- 參數(shù):
- proposal: 投票的議案的hash值
- index: 議案的索引(id)
- approve: 贊成與否
- 邏輯:
- 是議會成員
- 議案id輸入值正確
- 把結(jié)果加入voting隊列
問題: 為什么這里不直接判斷是否結(jié)束 結(jié)束就執(zhí)行?
- 代碼:
- 關(guān)閉議案
- 代碼:
fn close(origin, proposal_hash: T::Hash, #[compact] index: ProposalIndex, #[compact] proposal_weight_bound: Weight, #[compact] length_bound: u32 )
- 參數(shù):
- proposal_hash: 要執(zhí)行的議案的hash值
- index: 議案的id
- proposal_weight_bound: 議案的最大weight值
- length_bound:議案的最大長度
- 邏輯
在投票隊列
議案id正確
-
判斷議案贊成或是反對票通過
- 贊成就執(zhí)行
- 反對就刪除數(shù)據(jù)
如果都不通過, 那么執(zhí)行下面的操作
如果還沒有到投票結(jié)束的時間斩萌,那么就不給執(zhí)行
如果存在prime,那么沒有投票的都加到他存在的一方屏轰, 重新計算是否結(jié)束
結(jié)束就執(zhí)行相應(yīng)的操作
- 代碼:
二颊郎、一些補充
- 打印日志
log::error!( target: "runtime::collective", "New members count ({}) exceeds maximum amount of members expected ({}).", new_members.len(), T::MaxMembers::get(), );
log::warn!( target: "runtime::collective", "Wrong count used to estimate set_members weight. expected ({}) vs actual ({})", old_count, old.len(), );
- 排序AccountId
new_members.sort()
- 是否包含在vec中
- members.contains(&who)
三、問題
- proposal.dispatch(RawOrigin::Member(who).into()) 這個是直接執(zhí)行霎苗?