mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 08:11:03 +00:00
Governance 2 (Part 1, Non-Controversial Changes) (#5892)
* initial stuff * make copy data from kusama * Update runtime/kusama/src/governance/old.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * Update runtime/kusama/src/governance/mod.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
@@ -102,6 +102,10 @@ mod bag_thresholds;
|
||||
// XCM configurations.
|
||||
pub mod xcm_config;
|
||||
|
||||
// Governance configurations.
|
||||
pub mod governance;
|
||||
use governance::old::CouncilCollective;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
@@ -623,158 +627,6 @@ impl pallet_staking::Config for Runtime {
|
||||
type WeightInfo = weights::pallet_staking::WeightInfo<Runtime>;
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
pub LaunchPeriod: BlockNumber = prod_or_fast!(7 * DAYS, 1, "KSM_LAUNCH_PERIOD");
|
||||
pub VotingPeriod: BlockNumber = prod_or_fast!(7 * DAYS, 1 * MINUTES, "KSM_VOTING_PERIOD");
|
||||
pub FastTrackVotingPeriod: BlockNumber = prod_or_fast!(3 * HOURS, 1 * MINUTES, "KSM_FAST_TRACK_VOTING_PERIOD");
|
||||
pub const MinimumDeposit: Balance = 100 * CENTS;
|
||||
pub EnactmentPeriod: BlockNumber = prod_or_fast!(8 * DAYS, 1, "KSM_ENACTMENT_PERIOD");
|
||||
pub CooloffPeriod: BlockNumber = prod_or_fast!(7 * DAYS, 1 * MINUTES, "KSM_COOLOFF_PERIOD");
|
||||
pub const InstantAllowed: bool = true;
|
||||
pub const MaxVotes: u32 = 100;
|
||||
pub const MaxProposals: u32 = 100;
|
||||
}
|
||||
|
||||
impl pallet_democracy::Config for Runtime {
|
||||
type Proposal = Call;
|
||||
type Event = Event;
|
||||
type Currency = Balances;
|
||||
type EnactmentPeriod = EnactmentPeriod;
|
||||
type VoteLockingPeriod = EnactmentPeriod;
|
||||
type LaunchPeriod = LaunchPeriod;
|
||||
type VotingPeriod = VotingPeriod;
|
||||
type MinimumDeposit = MinimumDeposit;
|
||||
/// A straight majority of the council can decide what their next motion is.
|
||||
type ExternalOrigin =
|
||||
pallet_collective::EnsureProportionAtLeast<AccountId, CouncilCollective, 1, 2>;
|
||||
/// A majority can have the next scheduled referendum be a straight majority-carries vote.
|
||||
type ExternalMajorityOrigin =
|
||||
pallet_collective::EnsureProportionAtLeast<AccountId, CouncilCollective, 1, 2>;
|
||||
/// A unanimous council can have the next scheduled referendum be a straight default-carries
|
||||
/// (NTB) vote.
|
||||
type ExternalDefaultOrigin =
|
||||
pallet_collective::EnsureProportionAtLeast<AccountId, CouncilCollective, 1, 1>;
|
||||
/// Two thirds of the technical committee can have an `ExternalMajority/ExternalDefault` vote
|
||||
/// be tabled immediately and with a shorter voting/enactment period.
|
||||
type FastTrackOrigin =
|
||||
pallet_collective::EnsureProportionAtLeast<AccountId, TechnicalCollective, 2, 3>;
|
||||
type InstantOrigin =
|
||||
pallet_collective::EnsureProportionAtLeast<AccountId, TechnicalCollective, 1, 1>;
|
||||
type InstantAllowed = InstantAllowed;
|
||||
type FastTrackVotingPeriod = FastTrackVotingPeriod;
|
||||
// To cancel a proposal which has been passed, 2/3 of the council must agree to it.
|
||||
type CancellationOrigin = EitherOfDiverse<
|
||||
EnsureRoot<AccountId>,
|
||||
pallet_collective::EnsureProportionAtLeast<AccountId, CouncilCollective, 2, 3>,
|
||||
>;
|
||||
type BlacklistOrigin = EnsureRoot<AccountId>;
|
||||
// To cancel a proposal before it has been passed, the technical committee must be unanimous or
|
||||
// Root must agree.
|
||||
type CancelProposalOrigin = EitherOfDiverse<
|
||||
EnsureRoot<AccountId>,
|
||||
pallet_collective::EnsureProportionAtLeast<AccountId, TechnicalCollective, 1, 1>,
|
||||
>;
|
||||
// Any single technical committee member may veto a coming council proposal, however they can
|
||||
// only do it once and it lasts only for the cooloff period.
|
||||
type VetoOrigin = pallet_collective::EnsureMember<AccountId, TechnicalCollective>;
|
||||
type CooloffPeriod = CooloffPeriod;
|
||||
type PreimageByteDeposit = PreimageByteDeposit;
|
||||
type OperationalPreimageOrigin = pallet_collective::EnsureMember<AccountId, CouncilCollective>;
|
||||
type Slash = Treasury;
|
||||
type Scheduler = Scheduler;
|
||||
type PalletsOrigin = OriginCaller;
|
||||
type MaxVotes = MaxVotes;
|
||||
type WeightInfo = weights::pallet_democracy::WeightInfo<Runtime>;
|
||||
type MaxProposals = MaxProposals;
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
pub CouncilMotionDuration: BlockNumber = prod_or_fast!(3 * DAYS, 2 * MINUTES, "KSM_MOTION_DURATION");
|
||||
pub const CouncilMaxProposals: u32 = 100;
|
||||
pub const CouncilMaxMembers: u32 = 100;
|
||||
}
|
||||
|
||||
type CouncilCollective = pallet_collective::Instance1;
|
||||
impl pallet_collective::Config<CouncilCollective> for Runtime {
|
||||
type Origin = Origin;
|
||||
type Proposal = Call;
|
||||
type Event = Event;
|
||||
type MotionDuration = CouncilMotionDuration;
|
||||
type MaxProposals = CouncilMaxProposals;
|
||||
type MaxMembers = CouncilMaxMembers;
|
||||
type DefaultVote = pallet_collective::PrimeDefaultVote;
|
||||
type WeightInfo = weights::pallet_collective_council::WeightInfo<Runtime>;
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
pub const CandidacyBond: Balance = 100 * CENTS;
|
||||
// 1 storage item created, key size is 32 bytes, value size is 16+16.
|
||||
pub const VotingBondBase: Balance = deposit(1, 64);
|
||||
// additional data per vote is 32 bytes (account id).
|
||||
pub const VotingBondFactor: Balance = deposit(0, 32);
|
||||
/// Daily council elections
|
||||
pub TermDuration: BlockNumber = prod_or_fast!(24 * HOURS, 2 * MINUTES, "KSM_TERM_DURATION");
|
||||
pub const DesiredMembers: u32 = 19;
|
||||
pub const DesiredRunnersUp: u32 = 19;
|
||||
pub const MaxVoters: u32 = 10 * 1000;
|
||||
pub const MaxCandidates: u32 = 1000;
|
||||
pub const PhragmenElectionPalletId: LockIdentifier = *b"phrelect";
|
||||
}
|
||||
|
||||
// Make sure that there are no more than MaxMembers members elected via phragmen.
|
||||
const_assert!(DesiredMembers::get() <= CouncilMaxMembers::get());
|
||||
|
||||
impl pallet_elections_phragmen::Config for Runtime {
|
||||
type Event = Event;
|
||||
type Currency = Balances;
|
||||
type ChangeMembers = Council;
|
||||
type InitializeMembers = Council;
|
||||
type CurrencyToVote = frame_support::traits::U128CurrencyToVote;
|
||||
type CandidacyBond = CandidacyBond;
|
||||
type VotingBondBase = VotingBondBase;
|
||||
type VotingBondFactor = VotingBondFactor;
|
||||
type LoserCandidate = Treasury;
|
||||
type KickedMember = Treasury;
|
||||
type DesiredMembers = DesiredMembers;
|
||||
type DesiredRunnersUp = DesiredRunnersUp;
|
||||
type TermDuration = TermDuration;
|
||||
type MaxVoters = MaxVoters;
|
||||
type MaxCandidates = MaxCandidates;
|
||||
type PalletId = PhragmenElectionPalletId;
|
||||
type WeightInfo = weights::pallet_elections_phragmen::WeightInfo<Runtime>;
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
pub TechnicalMotionDuration: BlockNumber = prod_or_fast!(3 * DAYS, 2 * MINUTES, "KSM_MOTION_DURATION");
|
||||
pub const TechnicalMaxProposals: u32 = 100;
|
||||
pub const TechnicalMaxMembers: u32 = 100;
|
||||
}
|
||||
|
||||
type TechnicalCollective = pallet_collective::Instance2;
|
||||
impl pallet_collective::Config<TechnicalCollective> for Runtime {
|
||||
type Origin = Origin;
|
||||
type Proposal = Call;
|
||||
type Event = Event;
|
||||
type MotionDuration = TechnicalMotionDuration;
|
||||
type MaxProposals = TechnicalMaxProposals;
|
||||
type MaxMembers = TechnicalMaxMembers;
|
||||
type DefaultVote = pallet_collective::PrimeDefaultVote;
|
||||
type WeightInfo = weights::pallet_collective_technical_committee::WeightInfo<Runtime>;
|
||||
}
|
||||
|
||||
impl pallet_membership::Config<pallet_membership::Instance1> for Runtime {
|
||||
type Event = Event;
|
||||
type AddOrigin = MoreThanHalfCouncil;
|
||||
type RemoveOrigin = MoreThanHalfCouncil;
|
||||
type SwapOrigin = MoreThanHalfCouncil;
|
||||
type ResetOrigin = MoreThanHalfCouncil;
|
||||
type PrimeOrigin = MoreThanHalfCouncil;
|
||||
type MembershipInitialized = TechnicalCommittee;
|
||||
type MembershipChanged = TechnicalCommittee;
|
||||
type MaxMembers = TechnicalMaxMembers;
|
||||
type WeightInfo = weights::pallet_membership::WeightInfo<Runtime>;
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
pub const ProposalBond: Permill = Permill::from_percent(5);
|
||||
pub const ProposalBondMinimum: Balance = 2000 * CENTS;
|
||||
|
||||
Reference in New Issue
Block a user