Browse Source

drop FirstMemberId and NextMemberId, use zero as first id and have MembersCreated instead

Mokhtar Naamani 5 years ago
parent
commit
3cf52da08d

+ 33 - 0
src/example.rs

@@ -0,0 +1,33 @@
+// #![cfg_attr(not(feature = "std"), no_std)]
+
+use srml_support::{decl_module, decl_storage, decl_event};
+use system::{self, ensure_signed};
+use rstd::prelude::*;
+
+pub trait Trait: system::Trait {
+    type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
+}
+
+decl_storage! {
+    trait Store for Module<T: Trait> as Example {
+        pub MyValue get(my_value) : u32 = 4096;
+        pub Owner get(owner) : T::AccountId;
+    }
+}
+
+decl_event! {
+    pub enum Event<T> where <T as system::Trait>::AccountId {
+        MyValueUpdated(AccountId),
+    }
+}
+
+decl_module! {
+    pub struct Module<T: Trait> for enum Call where origin: T::Origin {
+       fn deposit_event<T>() = default;
+
+       fn does_nothing(origin) {
+           let sender = ensure_signed(origin)?;
+           Self::deposit_event(RawEvent::MyValueUpdated(sender));
+       }
+    }
+}

+ 0 - 1
src/governance/mock.rs

@@ -116,7 +116,6 @@ pub fn initial_test_ext() -> runtime_io::TestExternalities<Blake2Hasher> {
         .unwrap();
 
     membership::members::GenesisConfig::<Test> {
-        first_member_id: 1,
         default_paid_membership_fee: 0,
         members: vec![
             (1, "member1".into(), "".into(), "".into()),

+ 0 - 1
src/governance/proposals.rs

@@ -715,7 +715,6 @@ mod tests {
         .unwrap();
 
         membership::members::GenesisConfig::<Test> {
-            first_member_id: 1,
             default_paid_membership_fee: 0,
             members: vec![
                 (PROPOSER1, "alice".into(), "".into(), "".into()),

+ 7 - 12
src/membership/members.rs

@@ -4,7 +4,7 @@ use rstd::collections::btree_map::BTreeMap;
 use rstd::prelude::*;
 #[cfg(feature = "std")]
 use runtime_io::with_storage;
-use runtime_primitives::traits::{MaybeSerializeDebug, Member, SimpleArithmetic};
+use runtime_primitives::traits::{MaybeSerializeDebug, Member, One, SimpleArithmetic};
 use srml_support::traits::{Currency, Get};
 use srml_support::{
     decl_event, decl_module, decl_storage, dispatch, ensure, Parameter, StorageMap, StorageValue,
@@ -46,7 +46,6 @@ pub trait Trait: system::Trait + GovernanceCurrency + timestamp::Trait {
     type InitialMembersBalance: Get<BalanceOf<Self>>;
 }
 
-const DEFAULT_FIRST_MEMBER_ID: u32 = 1;
 const FIRST_PAID_TERMS_ID: u32 = 1;
 
 // Default paid membership terms
@@ -144,11 +143,9 @@ impl<T: Trait> Default for PaidMembershipTerms<T> {
 
 decl_storage! {
     trait Store for Module<T: Trait> as Membership {
-        /// MemberId's start at this value
-        pub FirstMemberId get(first_member_id) config(first_member_id): T::MemberId = T::MemberId::from(DEFAULT_FIRST_MEMBER_ID);
-
-        /// MemberId to assign to next member that is added to the registry
-        pub NextMemberId get(next_member_id) build(|config: &GenesisConfig<T>| config.first_member_id): T::MemberId = T::MemberId::from(DEFAULT_FIRST_MEMBER_ID);
+        /// MemberId to assign to next member that is added to the registry, and is also the
+        /// total number of members created. MemberIds start at Zero.
+        pub MembersCreated get(members_created) : T::MemberId;
 
         /// Mapping of member ids to their corresponding primary account_id
         pub AccountIdByMemberId get(account_id_by_member_id) : map T::MemberId => T::AccountId;
@@ -215,9 +212,9 @@ decl_storage! {
                     // Give member starting balance
                     T::Currency::deposit_creating(&who, T::InitialMembersBalance::get());
                 }
+                <MembersCreated<T>>::put(T::MemberId::from(config.members.len() as u32));
             });
         });
-
     }
 }
 
@@ -501,7 +498,7 @@ impl<T: Trait> Module<T> {
         user_info: &CheckedUserInfo,
         entry_method: EntryMethod<T>,
     ) -> T::MemberId {
-        let new_member_id = Self::next_member_id();
+        let new_member_id = Self::members_created();
 
         let profile: Profile<T> = Profile {
             handle: user_info.handle.clone(),
@@ -521,9 +518,7 @@ impl<T: Trait> Module<T> {
         <AccountIdByMemberId<T>>::insert(new_member_id, who.clone());
         <MemberProfile<T>>::insert(new_member_id, profile);
         <Handles<T>>::insert(user_info.handle.clone(), new_member_id);
-        <NextMemberId<T>>::mutate(|n| {
-            *n += T::MemberId::from(1);
-        });
+        <MembersCreated<T>>::put(new_member_id + One::one());
 
         new_member_id
     }

+ 0 - 7
src/membership/mock.rs

@@ -98,14 +98,12 @@ impl members::Trait for Test {
 }
 
 pub struct ExtBuilder {
-    first_member_id: u32,
     default_paid_membership_fee: u64,
     members: Vec<(u64)>,
 }
 impl Default for ExtBuilder {
     fn default() -> Self {
         Self {
-            first_member_id: 1,
             default_paid_membership_fee: 100,
             members: vec![],
         }
@@ -113,10 +111,6 @@ impl Default for ExtBuilder {
 }
 
 impl ExtBuilder {
-    pub fn first_member_id(mut self, first_member_id: u32) -> Self {
-        self.first_member_id = first_member_id;
-        self
-    }
     pub fn default_paid_membership_fee(mut self, default_paid_membership_fee: u64) -> Self {
         self.default_paid_membership_fee = default_paid_membership_fee;
         self
@@ -131,7 +125,6 @@ impl ExtBuilder {
             .unwrap();
 
         members::GenesisConfig::<Test> {
-            first_member_id: self.first_member_id,
             default_paid_membership_fee: self.default_paid_membership_fee,
             members: self
                 .members

+ 0 - 10
src/membership/tests.rs

@@ -62,22 +62,14 @@ fn set_alice_free_balance(balance: u64) {
 #[test]
 fn initial_state() {
     const DEFAULT_FEE: u64 = 500;
-    const DEFAULT_FIRST_ID: u32 = 1000;
     let initial_members = [1, 2, 3];
 
     with_externalities(
         &mut ExtBuilder::default()
             .default_paid_membership_fee(DEFAULT_FEE)
-            .first_member_id(DEFAULT_FIRST_ID)
             .members(initial_members.to_vec())
             .build(),
         || {
-            assert_eq!(Members::first_member_id(), DEFAULT_FIRST_ID);
-            assert_eq!(
-                Members::next_member_id(),
-                DEFAULT_FIRST_ID + initial_members.len() as u32
-            );
-
             let default_terms = assert_ok_unwrap(
                 Members::paid_membership_terms_by_id(DEFAULT_PAID_TERM_ID),
                 "default terms not initialized",
@@ -97,13 +89,11 @@ fn initial_state() {
 #[test]
 fn buy_membership() {
     const DEFAULT_FEE: u64 = 500;
-    const DEFAULT_FIRST_ID: u32 = 1000;
     const SURPLUS_BALANCE: u64 = 500;
 
     with_externalities(
         &mut ExtBuilder::default()
             .default_paid_membership_fee(DEFAULT_FEE)
-            .first_member_id(DEFAULT_FIRST_ID)
             .build(),
         || {
             let initial_balance = DEFAULT_FEE + SURPLUS_BALANCE;

+ 2 - 2
src/roles/mock.rs

@@ -21,7 +21,7 @@ impl_outer_origin! {
 }
 
 pub fn alice_id() -> u32 {
-    1
+    Members::member_id_by_account_id(alice_account()).unwrap()
 }
 pub fn alice_account() -> u64 {
     1
@@ -120,7 +120,6 @@ pub fn initial_test_ext() -> runtime_io::TestExternalities<Blake2Hasher> {
         .unwrap();
 
     membership::members::GenesisConfig::<Test> {
-        first_member_id: 1,
         default_paid_membership_fee: 0,
         members: vec![(alice_account(), "alice".into(), "".into(), "".into())],
     }
@@ -133,3 +132,4 @@ pub fn initial_test_ext() -> runtime_io::TestExternalities<Blake2Hasher> {
 pub type System = system::Module<Test>;
 pub type Balances = balances::Module<Test>;
 pub type Actors = actors::Module<Test>;
+pub type Members = membership::members::Module<Test>;

+ 0 - 1
src/storage/mock.rs

@@ -259,7 +259,6 @@ impl ExtBuilder {
         .unwrap();
 
         membership::members::GenesisConfig::<Test> {
-            first_member_id: 1,
             default_paid_membership_fee: 0,
             members: vec![(1, "alice".into(), "".into(), "".into())],
         }