substrate3.0中的democracy模塊

democracy模塊(全民公投)

說明

  • 這個模塊用于公眾投票原献, 凡是substrate中有ensure_root權(quán)限要求的, 都可以通過這個模塊來執(zhí)行展东。
  • 發(fā)起提案 -> 附議 -> 每個周期去查看柜思, 哪個附儀最多 -> 進入公投階段
  • 只有進入Preimages的提案才能執(zhí)行
  • 不能同時是驗證人和提名人

存儲

  • PublicProps 目前的公投
  • ReferendumInfoOf 公投的信息

常量

  • MinimumDeposit 提案需要的最小抵押金額

數(shù)據(jù)結(jié)構(gòu)

/// 投票的參數(shù)
pub enum AccountVote<Balance> {
    /// A standard vote, one-way (approve or reject) with a given amount of conviction.
    /// 只選一方來投
    Standard { vote: Vote, balance: Balance },
    /// A split vote with balances given for both ways, and with no conviction, useful for
    /// parachains when voting.
    /// 兩邊都投
    Split { aye: Balance, nay: Balance },
}
pub struct Vote {
    pub aye: bool,
    pub conviction: Conviction,
}
/// 公投狀態(tài)
pub struct ReferendumStatus<BlockNumber, Hash, Balance> {
    /// When voting on this referendum will end.
    pub(crate) end: BlockNumber,
    /// The hash of the proposal being voted on.
    pub(crate) proposal_hash: Hash,
    /// The thresholding mechanism to determine whether it passed.
    pub(crate) threshold: VoteThreshold,
    /// The delay (in blocks) to wait after a successful referendum before deploying.
    pub(crate) delay: BlockNumber,
    /// The current tally of votes in this referendum.
    /// 這次全民公決目前的計票結(jié)果
    pub(crate) tally: Tally<Balance>,
}
/// A means of determining if a vote is past pass threshold.
#[derive(Clone, Copy, PartialEq, Eq, Encode, Decode, sp_runtime::RuntimeDebug)]
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
pub enum VoteThreshold {
    /// A supermajority of approvals is needed to pass this vote.
    SuperMajorityApprove,
    /// A supermajority of rejects is needed to fail this vote.
    SuperMajorityAgainst,
    /// A simple majority of approvals is needed to pass this vote.
    SimpleMajority,
}

重要方法(對外接口)

  1. 提公投提案

    • 代碼 `pub fn propose(
      origin: OriginFor<T>,
      proposal_hash: T::Hash,

      [pallet::compact] value: BalanceOf<T>,

      )`
    • 參數(shù)
      • proposal_hash 提按hash
      • value 愿意為這個提案抵押的金額
    • 邏輯
      • value要大于最小要求金額
      • 目前的公投列表長度有限制
      • 這個提案的hash如果在黑名單中岩调, 那么必須要到期才能重新提

      問題 為什么沒有重復(fù)提案的查詢???
      ***

  2. 附議

    • 代碼 `pub fn second(
      origin: OriginFor<T>,

      [pallet::compact] proposal: PropIndex,

      [pallet::compact] seconds_upper_bound: u32,

      )`
    • 參數(shù)
      • proposal 提案索引
      • seconds_upper_bound (沒啥卵用的東西 盡量設(shè)置大一點)
    • 邏輯
      • 抵押跟提按發(fā)起人相同的金額(更新相關(guān)存儲DepositOf)

  3. 對提案進行公投

    • 代碼 `pub fn vote(
      origin: OriginFor<T>,

      [pallet::compact] ref_index: ReferendumIndex,

      vote: AccountVote<BalanceOf<T>>,
      )`
    • 參數(shù)
      • ref_index 公投索引
      • vote 投票方式(贊成與反對, 投票金額)
    • 邏輯
      • 投票金額一定要小于等于自己的自由余額
      • 不能是已經(jīng)委托的
      • 鎖倉投票金額

  4. 緊急取消公投

    • 代碼 `pub fn cancel_referendum(
      origin: OriginFor<T>,

      [pallet::compact] ref_index: ReferendumIndex,

      )`
    • 參數(shù)
      • ref_index 公投索引
    • 邏輯
      • 至少2/3議會權(quán)限
      • 不能重復(fù)操作
      • 刪除公投

  5. todo

    • 代碼 fn external_propose(origin: OriginFor<T>, proposal_hash: T::Hash)
    • 參數(shù)
      • proposal_hash 提案hash
    • 邏輯
      • NextExternal不存在
      • 如果在黑名單中赡盘, 那么過期時間到才能操作
      • <NextExternal<T>>::put((proposal_hash, VoteThreshold::SuperMajorityApprove));

    這個可能是用來快速把提案送到公投隊列


  6. todo

    • 代碼 pub fn external_propose_majority( origin: OriginFor<T>, proposal_hash: T::Hash, )
    • 參數(shù)
      • proposal_hash 提案hash
    • 邏輯
      • 3/4議會權(quán)限
      • 強制更改 NextExternal
      • <NextExternal<T>>::put((proposal_hash, VoteThreshold::SimpleMajority));

  7. todo

    • 代碼 pub fn external_propose_default( origin: OriginFor<T>, proposal_hash: T::Hash, )
    • 參數(shù)
      • proposal_hash 提案hash
    • 邏輯
      • 1/1議會權(quán)限
      • 強制更改 NextExternal
      • <NextExternal<T>>::put((proposal_hash, VoteThreshold::SuperMajorityAgainst))

  8. 快速通道(把提案迅速提到公投)

    • 代碼 pub fn fast_track( origin: OriginFor<T>, proposal_hash: T::Hash, voting_period: T::BlockNumber, delay: T::BlockNumber, )
    • 參數(shù)
      • proposal_hash 提案hash
      • voting_period 多久開始
      • delay 開始后多久結(jié)束
    • 邏輯
      • 技術(shù)委員會權(quán)限(至少2/3)
      • NextExternal 存在
      • VoteThreshold::SuperMajorityApprove 這個不能走快速通道
      • <NextExternal<T>>::kill();

  9. 終止外部提案

    • 代碼 pub fn veto_external(origin: OriginFor<T>, proposal_hash: T::Hash)
    • 參數(shù)
      • proposal_hash 提案hash
    • 邏輯
      • 任一技術(shù)委員會成員
      • NextExternal 存在
      • 把提案列入黑名單

  10. 取消一個公投

    • 代碼 `pub fn cancel_referendum(
      origin: OriginFor<T>,

      [pallet::compact] ref_index: ReferendumIndex,

      )`
    • 參數(shù)
      • ref_index 公投索引
    • 邏輯
      • root權(quán)限
      • 刪除公投信息

  11. 取消一個正在等待通過的公投

    • pub fn cancel_queued(origin: OriginFor<T>, which: ReferendumIndex)

輔助方法

  • 執(zhí)行方法(公投通過)
    • 代碼 fn do_enact_proposal(proposal_hash: T::Hash, index: ReferendumIndex) -> DispatchResult
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末号枕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子陨享,更是在濱河造成了極大的恐慌葱淳,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抛姑,死亡現(xiàn)場離奇詭異赞厕,居然都是意外死亡,警方通過查閱死者的電腦和手機定硝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門皿桑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔬啡,你說我怎么就攤上這事诲侮。” “怎么了箱蟆?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵浆西,是天一觀的道長。 經(jīng)常有香客問我顽腾,道長近零,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任抄肖,我火速辦了婚禮久信,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漓摩。我一直安慰自己裙士,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布管毙。 她就那樣靜靜地躺著腿椎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夭咬。 梳的紋絲不亂的頭發(fā)上啃炸,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音卓舵,去河邊找鬼南用。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裹虫。 我是一名探鬼主播肿嘲,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筑公!你這毒婦竟也來了雳窟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤匣屡,失蹤者是張志新(化名)和其女友劉穎封救,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耸采,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡兴泥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年工育,在試婚紗的時候發(fā)現(xiàn)自己被綠了虾宇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡如绸,死狀恐怖嘱朽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怔接,我是刑警寧澤搪泳,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站扼脐,受9級特大地震影響岸军,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓦侮,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一艰赞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肚吏,春花似錦方妖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斋泄,卻和暖如春杯瞻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炫掐。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工又兵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓沛厨,卻偏偏與公主長得像宙地,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逆皮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容