Skip to content

Commit

Permalink
pips: flesh out ensure_signed_by re. committees.
Browse files Browse the repository at this point in the history
Add dummy technical & upgrade committees.
  • Loading branch information
Centril committed Jul 31, 2020
1 parent 1298372 commit a6ddb55
Show file tree
Hide file tree
Showing 5 changed files with 144 additions and 9 deletions.
17 changes: 13 additions & 4 deletions pallets/pips/src/lib.rs
Expand Up @@ -309,6 +309,12 @@ pub trait Trait:
/// Committee
type GovernanceCommittee: GovernanceGroupTrait<<Self as pallet_timestamp::Trait>::Moment>;

/// Voting majority origin for Technical Committee.
type TechnicalCommitteeVMO: EnsureOrigin<Self::Origin>;

/// Voting majority origin for Upgrade Committee.
type UpgradeCommitteeVMO: EnsureOrigin<Self::Origin>;

type Treasury: TreasuryTrait<<Self as CommonTrait>::Balance>;

/// The overarching event type.
Expand Down Expand Up @@ -928,7 +934,7 @@ decl_module! {
// Only keep pending PIPs.
.filter(|pip| matches!(pip.state, ProposalState::Pending))
.map(|pip| pip.id)
// Omit cooling-off community PIPs.
// Only keep community PIPs not cooling-off.
.filter(|id| {
<ProposalMetadata<T>>::get(id)
.filter(|meta| meta.cool_off_until > created_at)
Expand Down Expand Up @@ -1046,9 +1052,12 @@ impl<T: Trait> Module<T> {
Proposer::Community(acc) => {
ensure!(acc == &ensure_signed(origin)?, Error::<T>::BadOrigin)
}
// TODO(centril): add actual checks for committees.
Proposer::Committee(Committee::Technical) => todo!(),
Proposer::Committee(Committee::Upgrade) => todo!(),
Proposer::Committee(Committee::Technical) => {
T::TechnicalCommitteeVMO::ensure_origin(origin)?;
}
Proposer::Committee(Committee::Upgrade) => {
T::UpgradeCommitteeVMO::ensure_origin(origin)?;
}
}
Ok(())
}
Expand Down
4 changes: 4 additions & 0 deletions pallets/runtime/develop/src/lib.rs
Expand Up @@ -35,6 +35,10 @@ pub mod config {
pub type StakingConfig = pallet_staking::GenesisConfig<crate::Runtime>;
pub type PolymeshCommitteeConfig =
committee::GenesisConfig<crate::Runtime, committee::Instance1>;
pub type TechnicalCommitteeConfig =
committee::GenesisConfig<crate::Runtime, committee::Instance3>;
pub type UpgradeCommitteeConfig =
committee::GenesisConfig<crate::Runtime, committee::Instance4>;
pub type PipsConfig = pallet_pips::GenesisConfig<crate::Runtime>;
pub type ContractsConfig = pallet_contracts::GenesisConfig;
pub type IndicesConfig = pallet_indices::GenesisConfig<crate::Runtime>;
Expand Down
44 changes: 41 additions & 3 deletions pallets/runtime/develop/src/runtime.rs
Expand Up @@ -374,6 +374,10 @@ impl pallet_staking::Trait for Runtime {
parameter_types! {
pub const MotionDuration: BlockNumber = 0;
}

/// Voting majority origin for `Instance`.
type VMO<Instance> = committee::EnsureProportionAtLeast<_1, _2, AccountId, Instance>;

type GovernanceCommittee = committee::Instance1;
impl committee::Trait<GovernanceCommittee> for Runtime {
type Origin = Origin;
Expand All @@ -383,7 +387,6 @@ impl committee::Trait<GovernanceCommittee> for Runtime {
type MotionDuration = MotionDuration;
type EnactProposalMaker = Runtime;
}

/// PolymeshCommittee as an instance of group
impl group::Trait<group::Instance1> for Runtime {
type Event = Event;
Expand All @@ -395,12 +398,41 @@ impl group::Trait<group::Instance1> for Runtime {
type MembershipChanged = PolymeshCommittee;
}

macro_rules! committee_config {
($committee:ident, $instance:ident) => {
impl committee::Trait<committee::$instance> for Runtime {
type Origin = Origin;
type Proposal = Call;
// Can act upon itself.
type CommitteeOrigin = VMO<committee::$instance>;
type Event = Event;
type MotionDuration = MotionDuration;
type EnactProposalMaker = Runtime;
}
impl group::Trait<group::$instance> for Runtime {
type Event = Event;
// Can manage its own addition, deletion, and swapping of membership...
type AddOrigin = VMO<committee::$instance>;
type RemoveOrigin = VMO<committee::$instance>;
type SwapOrigin = VMO<committee::$instance>;
// ...but it cannot reset its own membership; GC needs to do that.
type ResetOrigin = VMO<GovernanceCommittee>;
type MembershipInitialized = $committee;
type MembershipChanged = $committee;
}
};
}

committee_config!(TechnicalCommittee, Instance3);
committee_config!(UpgradeCommittee, Instance4);

impl pallet_pips::Trait for Runtime {
type Currency = Balances;
type CommitteeOrigin = frame_system::EnsureRoot<AccountId>;
type VotingMajorityOrigin =
committee::EnsureProportionAtLeast<_1, _2, AccountId, GovernanceCommittee>;
type VotingMajorityOrigin = VMO<GovernanceCommittee>;
type GovernanceCommittee = PolymeshCommittee;
type TechnicalCommitteeVMO = VMO<committee::Instance3>;
type UpgradeCommitteeVMO = VMO<committee::Instance4>;
type Treasury = Treasury;
type Event = Event;
}
Expand Down Expand Up @@ -749,6 +781,12 @@ construct_runtime!(
CommitteeMembership: group::<Instance1>::{Module, Call, Storage, Event<T>, Config<T>},
Pips: pallet_pips::{Module, Call, Storage, Event<T>, Config<T>},

TechnicalCommittee: committee::<Instance3>::{Module, Call, Storage, Origin<T>, Event<T>, Config<T>},
TechnicalCommitteeMembership: group::<Instance3>::{Module, Call, Storage, Event<T>, Config<T>},

UpgradeCommittee: committee::<Instance4>::{Module, Call, Storage, Origin<T>, Event<T>, Config<T>},
UpgradeCommitteeMembership: group::<Instance4>::{Module, Call, Storage, Event<T>, Config<T>},

//Polymesh
Asset: asset::{Module, Call, Storage, Config<T>, Event<T>},
Dividend: dividend::{Module, Call, Storage, Event<T>},
Expand Down
43 changes: 41 additions & 2 deletions pallets/runtime/testnet-v1/src/runtime.rs
Expand Up @@ -373,6 +373,10 @@ impl pallet_staking::Trait for Runtime {
parameter_types! {
pub const MotionDuration: BlockNumber = 0;
}

/// Voting majority origin for `Instance`.
type VMO<Instance> = committee::EnsureProportionAtLeast<_2, _3, AccountId, Instance>;

type GovernanceCommittee = committee::Instance1;
impl committee::Trait<GovernanceCommittee> for Runtime {
type Origin = Origin;
Expand All @@ -394,12 +398,41 @@ impl group::Trait<group::Instance1> for Runtime {
type MembershipChanged = PolymeshCommittee;
}

macro_rules! committee_config {
($committee:ident, $instance:ident) => {
impl committee::Trait<committee::$instance> for Runtime {
type Origin = Origin;
type Proposal = Call;
// Can act upon itself.
type CommitteeOrigin = VMO<committee::$instance>;
type Event = Event;
type MotionDuration = MotionDuration;
type EnactProposalMaker = Runtime;
}
impl group::Trait<group::$instance> for Runtime {
type Event = Event;
// Can manage its own addition, deletion, and swapping of membership...
type AddOrigin = VMO<committee::$instance>;
type RemoveOrigin = VMO<committee::$instance>;
type SwapOrigin = VMO<committee::$instance>;
// ...but it cannot reset its own membership; GC needs to do that.
type ResetOrigin = VMO<GovernanceCommittee>;
type MembershipInitialized = $committee;
type MembershipChanged = $committee;
}
};
}

committee_config!(TechnicalCommittee, Instance3);
committee_config!(UpgradeCommittee, Instance4);

impl pallet_pips::Trait for Runtime {
type Currency = Balances;
type CommitteeOrigin = frame_system::EnsureRoot<AccountId>;
type VotingMajorityOrigin =
committee::EnsureProportionAtLeast<_2, _3, AccountId, GovernanceCommittee>;
type VotingMajorityOrigin = VMO<GovernanceCommittee>;
type GovernanceCommittee = PolymeshCommittee;
type TechnicalCommitteeVMO = VMO<committee::Instance3>;
type UpgradeCommitteeVMO = VMO<committee::Instance4>;
type Treasury = Treasury;
type Event = Event;
}
Expand Down Expand Up @@ -720,6 +753,12 @@ construct_runtime!(
CommitteeMembership: group::<Instance1>::{Module, Call, Storage, Event<T>, Config<T>},
Pips: pallet_pips::{Module, Call, Storage, Event<T>, Config<T>},

TechnicalCommittee: committee::<Instance3>::{Module, Call, Storage, Origin<T>, Event<T>, Config<T>},
TechnicalCommitteeMembership: group::<Instance3>::{Module, Call, Storage, Event<T>, Config<T>},

UpgradeCommittee: committee::<Instance4>::{Module, Call, Storage, Origin<T>, Event<T>, Config<T>},
UpgradeCommitteeMembership: group::<Instance4>::{Module, Call, Storage, Event<T>, Config<T>},

//Polymesh
Asset: asset::{Module, Call, Storage, Config<T>, Event<T>},
Dividend: dividend::{Module, Call, Storage, Event<T>},
Expand Down
45 changes: 45 additions & 0 deletions src/chain_spec.rs
Expand Up @@ -313,6 +313,7 @@ fn general_testnet_genesis(
..Default::default()
},
}),
// Governance Council:
group_Instance1: Some(general::runtime::CommitteeMembershipConfig {
active_members: vec![
IdentityId::from(3),
Expand All @@ -337,6 +338,28 @@ fn general_testnet_genesis(
],
phantom: Default::default(),
}),
// Technical Committee:
group_Instance3: Some(general::runtime::TechnicalCommitteeMembershipConfig {
active_members: vec![IdentityId::from(3)],
phantom: Default::default(),
}),
committee_Instance3: Some(GeneralConfig::TechnicalCommitteeConfig {
vote_threshold: (1, 2),
members: vec![],
release_coordinator: IdentityId::from(3),
phantom: Default::default(),
}),
// Upgrade Committee:
group_Instance4: Some(general::runtime::UpgradeCommitteeMembershipConfig {
active_members: vec![IdentityId::from(4)],
phantom: Default::default(),
}),
committee_Instance4: Some(GeneralConfig::UpgradeCommitteeConfig {
vote_threshold: (1, 2),
members: vec![],
release_coordinator: IdentityId::from(4),
phantom: Default::default(),
}),
protocol_fee: Some(GeneralConfig::ProtocolFeeConfig {
base_fees: vec![
(ProtocolOp::AssetCreateAsset, 10_000 * 1_000_000),
Expand Down Expand Up @@ -783,6 +806,28 @@ fn aldebaran_testnet_genesis(
],
phantom: Default::default(),
}),
// Technical Committee:
group_Instance3: Some(aldebaran::runtime::TechnicalCommitteeMembershipConfig {
active_members: vec![IdentityId::from(4)],
phantom: Default::default(),
}),
committee_Instance3: Some(aldebaran::runtime::TechnicalCommitteeConfig {
vote_threshold: (1, 2),
members: vec![],
release_coordinator: IdentityId::from(4),
phantom: Default::default(),
}),
// Upgrade Committee:
group_Instance4: Some(aldebaran::runtime::UpgradeCommitteeMembershipConfig {
active_members: vec![IdentityId::from(5)],
phantom: Default::default(),
}),
committee_Instance4: Some(aldebaran::runtime::UpgradeCommitteeConfig {
vote_threshold: (1, 2),
members: vec![],
release_coordinator: IdentityId::from(5),
phantom: Default::default(),
}),
protocol_fee: Some(AldebaranConfig::ProtocolFeeConfig {
base_fees: vec![
(ProtocolOp::AssetCreateAsset, 10_000 * 1_000_000),
Expand Down

0 comments on commit a6ddb55

Please sign in to comment.