mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 11:41:02 +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:
@@ -1784,7 +1784,7 @@ mod benchmarking {
|
|||||||
let duration = T::BlockNumber::max_value();
|
let duration = T::BlockNumber::max_value();
|
||||||
let lease_period_index = LeasePeriodOf::<T>::max_value();
|
let lease_period_index = LeasePeriodOf::<T>::max_value();
|
||||||
let origin = T::InitiateOrigin::successful_origin();
|
let origin = T::InitiateOrigin::successful_origin();
|
||||||
}: _(RawOrigin::Root, duration, lease_period_index)
|
}: _<T::Origin>(origin, duration, lease_period_index)
|
||||||
verify {
|
verify {
|
||||||
assert_last_event::<T>(Event::<T>::AuctionStarted {
|
assert_last_event::<T>(Event::<T>::AuctionStarted {
|
||||||
auction_index: AuctionCounter::<T>::get(),
|
auction_index: AuctionCounter::<T>::get(),
|
||||||
@@ -1802,7 +1802,8 @@ mod benchmarking {
|
|||||||
// Create a new auction
|
// Create a new auction
|
||||||
let duration = T::BlockNumber::max_value();
|
let duration = T::BlockNumber::max_value();
|
||||||
let lease_period_index = LeasePeriodOf::<T>::zero();
|
let lease_period_index = LeasePeriodOf::<T>::zero();
|
||||||
Auctions::<T>::new_auction(RawOrigin::Root.into(), duration, lease_period_index)?;
|
let origin = T::InitiateOrigin::successful_origin();
|
||||||
|
Auctions::<T>::new_auction(origin, duration, lease_period_index)?;
|
||||||
|
|
||||||
let para = ParaId::from(0);
|
let para = ParaId::from(0);
|
||||||
let new_para = ParaId::from(1_u32);
|
let new_para = ParaId::from(1_u32);
|
||||||
@@ -1853,7 +1854,8 @@ mod benchmarking {
|
|||||||
let duration: T::BlockNumber = lease_length / 2u32.into();
|
let duration: T::BlockNumber = lease_length / 2u32.into();
|
||||||
let lease_period_index = LeasePeriodOf::<T>::zero();
|
let lease_period_index = LeasePeriodOf::<T>::zero();
|
||||||
let now = frame_system::Pallet::<T>::block_number();
|
let now = frame_system::Pallet::<T>::block_number();
|
||||||
Auctions::<T>::new_auction(RawOrigin::Root.into(), duration, lease_period_index)?;
|
let origin = T::InitiateOrigin::successful_origin();
|
||||||
|
Auctions::<T>::new_auction(origin, duration, lease_period_index)?;
|
||||||
|
|
||||||
fill_winners::<T>(lease_period_index);
|
fill_winners::<T>(lease_period_index);
|
||||||
|
|
||||||
@@ -1896,7 +1898,8 @@ mod benchmarking {
|
|||||||
let duration: T::BlockNumber = lease_length / 2u32.into();
|
let duration: T::BlockNumber = lease_length / 2u32.into();
|
||||||
let lease_period_index = LeasePeriodOf::<T>::zero();
|
let lease_period_index = LeasePeriodOf::<T>::zero();
|
||||||
let now = frame_system::Pallet::<T>::block_number();
|
let now = frame_system::Pallet::<T>::block_number();
|
||||||
Auctions::<T>::new_auction(RawOrigin::Root.into(), duration, lease_period_index)?;
|
let origin = T::InitiateOrigin::successful_origin();
|
||||||
|
Auctions::<T>::new_auction(origin, duration, lease_period_index)?;
|
||||||
|
|
||||||
fill_winners::<T>(lease_period_index);
|
fill_winners::<T>(lease_period_index);
|
||||||
|
|
||||||
|
|||||||
@@ -1024,7 +1024,8 @@ mod benchmarking {
|
|||||||
let amount = T::Currency::minimum_balance();
|
let amount = T::Currency::minimum_balance();
|
||||||
let period_begin = 69u32.into();
|
let period_begin = 69u32.into();
|
||||||
let period_count = 3u32.into();
|
let period_count = 3u32.into();
|
||||||
}: _(RawOrigin::Root, para, leaser.clone(), amount, period_begin, period_count)
|
let origin = T::ForceOrigin::successful_origin();
|
||||||
|
}: _<T::Origin>(origin, para, leaser.clone(), amount, period_begin, period_count)
|
||||||
verify {
|
verify {
|
||||||
assert_last_event::<T>(Event::<T>::Leased {
|
assert_last_event::<T>(Event::<T>::Leased {
|
||||||
para_id: para,
|
para_id: para,
|
||||||
@@ -1057,8 +1058,8 @@ mod benchmarking {
|
|||||||
// T parathread are upgrading to parachains
|
// T parathread are upgrading to parachains
|
||||||
for (para, leaser) in paras_info {
|
for (para, leaser) in paras_info {
|
||||||
let amount = T::Currency::minimum_balance();
|
let amount = T::Currency::minimum_balance();
|
||||||
|
let origin = T::ForceOrigin::successful_origin();
|
||||||
Slots::<T>::force_lease(RawOrigin::Root.into(), para, leaser, amount, period_begin, period_count)?;
|
Slots::<T>::force_lease(origin, para, leaser, amount, period_begin, period_count)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
T::Registrar::execute_pending_transitions();
|
T::Registrar::execute_pending_transitions();
|
||||||
@@ -1108,7 +1109,8 @@ mod benchmarking {
|
|||||||
// Average slot has 4 lease periods.
|
// Average slot has 4 lease periods.
|
||||||
let period_count: LeasePeriodOf<T> = 4u32.into();
|
let period_count: LeasePeriodOf<T> = 4u32.into();
|
||||||
let period_begin = period_count * i.into();
|
let period_begin = period_count * i.into();
|
||||||
Slots::<T>::force_lease(RawOrigin::Root.into(), para, leaser, amount, period_begin, period_count)?;
|
let origin = T::ForceOrigin::successful_origin();
|
||||||
|
Slots::<T>::force_lease(origin, para, leaser, amount, period_begin, period_count)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in 0 .. max_people {
|
for i in 0 .. max_people {
|
||||||
@@ -1116,7 +1118,8 @@ mod benchmarking {
|
|||||||
assert_eq!(T::Currency::reserved_balance(&leaser), T::Currency::minimum_balance());
|
assert_eq!(T::Currency::reserved_balance(&leaser), T::Currency::minimum_balance());
|
||||||
}
|
}
|
||||||
|
|
||||||
}: _(RawOrigin::Root, para)
|
let origin = T::ForceOrigin::successful_origin();
|
||||||
|
}: _<T::Origin>(origin, para)
|
||||||
verify {
|
verify {
|
||||||
for i in 0 .. max_people {
|
for i in 0 .. max_people {
|
||||||
let leaser = account("lease_deposit", i, 0);
|
let leaser = account("lease_deposit", i, 0);
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// 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/>.
|
||||||
|
|
||||||
|
//! Governance configurations for the Kusama runtime.
|
||||||
|
|
||||||
|
// Old governance configurations.
|
||||||
|
pub mod old;
|
||||||
@@ -0,0 +1,172 @@
|
|||||||
|
// 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 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub 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>;
|
||||||
|
}
|
||||||
@@ -102,6 +102,10 @@ mod bag_thresholds;
|
|||||||
// XCM configurations.
|
// XCM configurations.
|
||||||
pub mod xcm_config;
|
pub mod xcm_config;
|
||||||
|
|
||||||
|
// Governance configurations.
|
||||||
|
pub mod governance;
|
||||||
|
use governance::old::CouncilCollective;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
@@ -623,158 +627,6 @@ impl pallet_staking::Config for Runtime {
|
|||||||
type WeightInfo = weights::pallet_staking::WeightInfo<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! {
|
parameter_types! {
|
||||||
pub const ProposalBond: Permill = Permill::from_percent(5);
|
pub const ProposalBond: Permill = Permill::from_percent(5);
|
||||||
pub const ProposalBondMinimum: Balance = 2000 * CENTS;
|
pub const ProposalBondMinimum: Balance = 2000 * CENTS;
|
||||||
|
|||||||
@@ -173,10 +173,5 @@ fn era_payout_should_give_sensible_results() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn call_size() {
|
fn call_size() {
|
||||||
assert!(
|
Call::assert_size_under(230);
|
||||||
core::mem::size_of::<Call>() <= 230,
|
|
||||||
"size of Call is more than 230 bytes: some calls have too big arguments, use Box to reduce \
|
|
||||||
the size of Call.
|
|
||||||
If the limit is too strong, maybe consider increase the limit to 300.",
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1517,8 +1517,8 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "runtime-benchmarks")]
|
#[cfg(feature = "runtime-benchmarks")]
|
||||||
fn successful_origin() -> O {
|
fn try_successful_origin() -> Result<O, ()> {
|
||||||
O::from(Origin::Xcm(Here.into()))
|
Ok(O::from(Origin::Xcm(Here.into())))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1542,8 +1542,8 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "runtime-benchmarks")]
|
#[cfg(feature = "runtime-benchmarks")]
|
||||||
fn successful_origin() -> O {
|
fn try_successful_origin() -> Result<O, ()> {
|
||||||
O::from(Origin::Response(Here.into()))
|
Ok(O::from(Origin::Response(Here.into())))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -253,8 +253,8 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "runtime-benchmarks")]
|
#[cfg(feature = "runtime-benchmarks")]
|
||||||
fn successful_origin() -> Origin {
|
fn try_successful_origin() -> Result<Origin, ()> {
|
||||||
Origin::root()
|
Ok(Origin::root())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,9 +47,9 @@ pub trait WeightTrader: Sized {
|
|||||||
/// Create a new trader instance.
|
/// Create a new trader instance.
|
||||||
fn new() -> Self;
|
fn new() -> Self;
|
||||||
|
|
||||||
/// Purchase execution weight credit in return for up to a given `fee`. If less of the fee is required
|
/// Purchase execution weight credit in return for up to a given `payment`. If less of the
|
||||||
/// then the surplus is returned. If the `fee` cannot be used to pay for the `weight`, then an error is
|
/// payment is required then the surplus is returned. If the `payment` cannot be used to pay
|
||||||
/// returned.
|
/// for the `weight`, then an error is returned.
|
||||||
fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError>;
|
fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError>;
|
||||||
|
|
||||||
/// Attempt a refund of `weight` into some asset. The caller does not guarantee that the weight was
|
/// Attempt a refund of `weight` into some asset. The caller does not guarantee that the weight was
|
||||||
|
|||||||
Reference in New Issue
Block a user