Browse Source

runtime: Add membership working group.

Shamil Gadelshin 4 years ago
parent
commit
aa21877d4e

+ 1 - 0
Cargo.lock

@@ -3884,6 +3884,7 @@ dependencies = [
  "pallet-balances",
  "pallet-common",
  "pallet-timestamp",
+ "pallet-working-group",
  "parity-scale-codec",
  "serde",
  "sp-arithmetic",

+ 3 - 1
runtime-modules/common/src/working_group.rs

@@ -12,6 +12,8 @@ pub enum WorkingGroup {
     Forum,
     /// Storage working group: working_group::Instance2.
     Storage,
-    /// Storage working group: working_group::Instance3.
+    /// Content directory working group: working_group::Instance3.
     Content,
+    /// Membership working group: working_group::Instance3.
+    Membership,
 }

+ 4 - 2
runtime-modules/membership/Cargo.toml

@@ -13,8 +13,9 @@ frame-system = { package = 'frame-system', default-features = false, git = 'http
 sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
 sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
 pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
-common = { package = 'pallet-common', default-features = false, path = '../common'}
 balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
+common = { package = 'pallet-common', default-features = false, path = '../common'}
+working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group'}
 
 [dev-dependencies]
 sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
@@ -31,6 +32,7 @@ std = [
 	'sp-arithmetic/std',
 	'sp-runtime/std',
 	'pallet-timestamp/std',
-	'common/std',
 	'balances/std',
+	'common/std',
+	'working-group/std',
 ]

+ 7 - 3
runtime-modules/membership/src/lib.rs

@@ -13,14 +13,18 @@ use sp_arithmetic::traits::One;
 use sp_std::borrow::ToOwned;
 use sp_std::vec::Vec;
 
-// The storage working group instance alias.
-//pub type StorageWorkingGroupInstance = working_group::Instance2;
+// The membership working group instance alias.
+pub type MembershipWorkingGroupInstance = working_group::Instance4;
 
 // Balance type alias
 type BalanceOf<T> = <T as balances::Trait>::Balance;
 
 pub trait Trait:
-    frame_system::Trait + balances::Trait + pallet_timestamp::Trait + common::Trait
+    frame_system::Trait
+    + balances::Trait
+    + pallet_timestamp::Trait
+    + common::Trait
+    + working_group::Trait<MembershipWorkingGroupInstance>
 {
     type Event: From<Event<Self>> + Into<<Self as frame_system::Trait>::Event>;
 

+ 2 - 2
runtime-modules/service-discovery/src/lib.rs

@@ -51,8 +51,8 @@ pub type IPNSIdentity = Vec<u8>;
 /// HTTP Url string to a discovery service endpoint
 pub type Url = Vec<u8>;
 
-// The storage working group instance alias.
-pub(crate) type StorageWorkingGroupInstance = working_group::Instance2;
+/// The storage working group instance alias.
+pub type StorageWorkingGroupInstance = working_group::Instance2;
 
 /// Storage provider is a worker from the  working_group module.
 pub type StorageProviderId<T> = working_group::WorkerId<T>;

+ 0 - 3
runtime-modules/service-discovery/src/mock.rs

@@ -10,9 +10,6 @@ use sp_runtime::{
     Perbill,
 };
 
-// The storage working group instance alias.
-pub type StorageWorkingGroupInstance = working_group::Instance2;
-
 mod working_group_mod {
     pub use super::StorageWorkingGroupInstance;
     pub use working_group::Event;

+ 1 - 0
runtime/src/integration/proposals/proposal_encoder.rs

@@ -22,6 +22,7 @@ macro_rules! wrap_working_group_call {
             }
             WorkingGroup::Storage => Call::StorageWorkingGroup($working_group_instance_call),
             WorkingGroup::Forum => Call::ForumWorkingGroup($working_group_instance_call),
+            WorkingGroup::Membership => Call::MembershipWorkingGroup($working_group_instance_call),
         }
     }};
 }

+ 18 - 1
runtime/src/lib.rs

@@ -593,20 +593,25 @@ impl forum::Trait for Runtime {
 pub type ForumWorkingGroupInstance = working_group::Instance1;
 
 // The storage working group instance alias.
-pub type StorageWorkingGroupInstance = working_group::Instance2;
+pub type StorageWorkingGroupInstance = storage::StorageWorkingGroupInstance;
 
 // The content directory working group instance alias.
 pub type ContentDirectoryWorkingGroupInstance = working_group::Instance3;
 
+// The membership working group instance alias.
+pub type MembershipWorkingGroupInstance = membership::MembershipWorkingGroupInstance;
+
 parameter_types! {
     pub const MaxWorkerNumberLimit: u32 = 100;
     pub const MinUnstakingPeriodLimit: u32 = 43200;
     pub const ForumWorkingGroupRewardPeriod: u32 = 14400 + 10;
     pub const StorageWorkingGroupRewardPeriod: u32 = 14400 + 20;
     pub const ContentWorkingGroupRewardPeriod: u32 = 14400 + 30;
+    pub const MembershipRewardPeriod: u32 = 14400 + 40;
     pub const StorageWorkingGroupLockId: LockIdentifier = [6; 8];
     pub const ContentWorkingGroupLockId: LockIdentifier = [7; 8];
     pub const ForumGroupLockId: LockIdentifier = [8; 8];
+    pub const MembershipWorkingGroupLockId: LockIdentifier = [9; 8];
 }
 
 // Staking managers type aliases.
@@ -616,6 +621,8 @@ pub type ContentDirectoryWorkingGroupStakingManager =
     staking_handler::StakingManager<Runtime, ContentWorkingGroupLockId>;
 pub type StorageWorkingGroupStakingManager =
     staking_handler::StakingManager<Runtime, StorageWorkingGroupLockId>;
+pub type MembershipWorkingGroupStakingManager =
+    staking_handler::StakingManager<Runtime, MembershipWorkingGroupLockId>;
 
 impl working_group::Trait<ForumWorkingGroupInstance> for Runtime {
     type Event = Event;
@@ -644,6 +651,15 @@ impl working_group::Trait<ContentDirectoryWorkingGroupInstance> for Runtime {
     type RewardPeriod = ContentWorkingGroupRewardPeriod;
 }
 
+impl working_group::Trait<MembershipWorkingGroupInstance> for Runtime {
+    type Event = Event;
+    type MaxWorkerNumberLimit = MaxWorkerNumberLimit;
+    type StakingHandler = MembershipWorkingGroupStakingManager;
+    type MemberOriginValidator = MembershipOriginValidator<Self>;
+    type MinUnstakingPeriodLimit = MinUnstakingPeriodLimit;
+    type RewardPeriod = MembershipRewardPeriod;
+}
+
 impl service_discovery::Trait for Runtime {
     type Event = Event;
 }
@@ -804,5 +820,6 @@ construct_runtime!(
         ForumWorkingGroup: working_group::<Instance1>::{Module, Call, Storage, Event<T>},
         StorageWorkingGroup: working_group::<Instance2>::{Module, Call, Storage, Event<T>},
         ContentDirectoryWorkingGroup: working_group::<Instance3>::{Module, Call, Storage, Event<T>},
+        MembershipWorkingGroup: working_group::<Instance4>::{Module, Call, Storage, Event<T>},
     }
 );