mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-17 15:55:42 +00:00
2f6e941caf
* feat: set SubmitOrigin in all affected runtimes
* update lockfile for {"substrate"}
---------
Co-authored-by: parity-processbot <>
178 lines
7.6 KiB
Rust
178 lines
7.6 KiB
Rust
// Copyright 2022 Parity Technologies (UK) Ltd.
|
|
// This file is part of Polkadot.
|
|
|
|
// Polkadot is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Polkadot is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Old governance configurations for the Kusama runtime.
|
|
|
|
use crate::*;
|
|
use frame_support::{parameter_types, traits::EitherOfDiverse};
|
|
|
|
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 RuntimeEvent = RuntimeEvent;
|
|
type Currency = Balances;
|
|
type EnactmentPeriod = EnactmentPeriod;
|
|
type VoteLockingPeriod = EnactmentPeriod;
|
|
type LaunchPeriod = LaunchPeriod;
|
|
type VotingPeriod = VotingPeriod;
|
|
type MinimumDeposit = MinimumDeposit;
|
|
type SubmitOrigin = frame_system::EnsureSigned<AccountId>;
|
|
/// 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 Slash = Treasury;
|
|
type Scheduler = Scheduler;
|
|
type PalletsOrigin = OriginCaller;
|
|
type MaxVotes = MaxVotes;
|
|
type WeightInfo = weights::pallet_democracy::WeightInfo<Runtime>;
|
|
type MaxProposals = MaxProposals;
|
|
type Preimages = Preimage;
|
|
type MaxDeposits = ConstU32<100>;
|
|
type MaxBlacklisted = ConstU32<100>;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
pub type CouncilCollective = pallet_collective::Instance1;
|
|
impl pallet_collective::Config<CouncilCollective> for Runtime {
|
|
type RuntimeOrigin = RuntimeOrigin;
|
|
type Proposal = RuntimeCall;
|
|
type RuntimeEvent = RuntimeEvent;
|
|
type MotionDuration = CouncilMotionDuration;
|
|
type MaxProposals = CouncilMaxProposals;
|
|
type MaxMembers = CouncilMaxMembers;
|
|
type DefaultVote = pallet_collective::PrimeDefaultVote;
|
|
type SetMembersOrigin = EnsureRoot<AccountId>;
|
|
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 MaxVotesPerVoter: u32 = 16;
|
|
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 RuntimeEvent = RuntimeEvent;
|
|
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 MaxVotesPerVoter = MaxVotesPerVoter;
|
|
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;
|
|
}
|
|
|
|
pub type TechnicalCollective = pallet_collective::Instance2;
|
|
impl pallet_collective::Config<TechnicalCollective> for Runtime {
|
|
type RuntimeOrigin = RuntimeOrigin;
|
|
type Proposal = RuntimeCall;
|
|
type RuntimeEvent = RuntimeEvent;
|
|
type MotionDuration = TechnicalMotionDuration;
|
|
type MaxProposals = TechnicalMaxProposals;
|
|
type MaxMembers = TechnicalMaxMembers;
|
|
type DefaultVote = pallet_collective::PrimeDefaultVote;
|
|
type SetMembersOrigin = EnsureRoot<AccountId>;
|
|
type WeightInfo = weights::pallet_collective_technical_committee::WeightInfo<Runtime>;
|
|
}
|
|
|
|
impl pallet_membership::Config<pallet_membership::Instance1> for Runtime {
|
|
type RuntimeEvent = RuntimeEvent;
|
|
type AddOrigin = EnsureRoot<AccountId>;
|
|
type RemoveOrigin = EnsureRoot<AccountId>;
|
|
type SwapOrigin = EnsureRoot<AccountId>;
|
|
type ResetOrigin = EnsureRoot<AccountId>;
|
|
type PrimeOrigin = EnsureRoot<AccountId>;
|
|
type MembershipInitialized = TechnicalCommittee;
|
|
type MembershipChanged = TechnicalCommittee;
|
|
type MaxMembers = TechnicalMaxMembers;
|
|
type WeightInfo = weights::pallet_membership::WeightInfo<Runtime>;
|
|
}
|