|
@@ -1055,18 +1055,12 @@ decl_storage! {
|
|
|
pub CuratorExitRationaleText get(curator_exit_rationale_text) config(): InputValidationLengthConstraint;
|
|
|
}
|
|
|
add_extra_genesis {
|
|
|
- config(initial_lead) : Option<(T::MemberId, T::AccountId)>;
|
|
|
config(mint_capacity): minting::BalanceOf<T>;
|
|
|
// config(mint_adjustment): minting::Adjustment<BalanceOf<T>, T::BlockNumber> (add serialize/deserialize derivation for type)
|
|
|
build(|config: &GenesisConfig<T>| {
|
|
|
// create mint
|
|
|
let mint_id = <minting::Module<T>>::add_mint(config.mint_capacity, None).expect("Failed to create a mint for the content working group");
|
|
|
Mint::<T>::put(mint_id);
|
|
|
-
|
|
|
- // create lead
|
|
|
- if let Some((member_id, account_id)) = config.initial_lead.clone() {
|
|
|
- <Module<T>>::do_set_lead(member_id, account_id).expect("Failed to create the lead for the content working group");
|
|
|
- }
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -1864,7 +1858,52 @@ decl_module! {
|
|
|
// Ensure root is origin
|
|
|
ensure_root(origin)?;
|
|
|
|
|
|
- Self::do_set_lead(member, role_account)?;
|
|
|
+ // Ensure there is no current lead
|
|
|
+ ensure!(
|
|
|
+ <CurrentLeadId<T>>::get().is_none(),
|
|
|
+ MSG_CURRENT_LEAD_ALREADY_SET
|
|
|
+ );
|
|
|
+
|
|
|
+ // Ensure that member can actually become lead
|
|
|
+ let new_lead_id = <NextLeadId<T>>::get();
|
|
|
+
|
|
|
+ let new_lead_role =
|
|
|
+ role_types::ActorInRole::new(role_types::Role::CuratorLead, new_lead_id);
|
|
|
+
|
|
|
+ let _profile = <members::Module<T>>::can_register_role_on_member(
|
|
|
+ &member,
|
|
|
+ &role_types::ActorInRole::new(role_types::Role::CuratorLead, new_lead_id),
|
|
|
+ )?;
|
|
|
+
|
|
|
+ //
|
|
|
+ // == MUTATION SAFE ==
|
|
|
+ //
|
|
|
+
|
|
|
+ // Construct lead
|
|
|
+ let new_lead = Lead {
|
|
|
+ role_account: role_account.clone(),
|
|
|
+ reward_relationship: None,
|
|
|
+ inducted: <system::Module<T>>::block_number(),
|
|
|
+ stage: LeadRoleState::Active,
|
|
|
+ };
|
|
|
+
|
|
|
+ // Store lead
|
|
|
+ <LeadById<T>>::insert(new_lead_id, new_lead);
|
|
|
+
|
|
|
+ // Update current lead
|
|
|
+ <CurrentLeadId<T>>::put(new_lead_id); // Some(new_lead_id)
|
|
|
+
|
|
|
+ // Update next lead counter
|
|
|
+ <NextLeadId<T>>::mutate(|id| *id += <LeadId<T> as One>::one());
|
|
|
+
|
|
|
+ // Register in role
|
|
|
+ let registered_role =
|
|
|
+ <members::Module<T>>::register_role_on_member(member, &new_lead_role).is_ok();
|
|
|
+
|
|
|
+ assert!(registered_role);
|
|
|
+
|
|
|
+ // Trigger event
|
|
|
+ Self::deposit_event(RawEvent::LeadSet(new_lead_id));
|
|
|
}
|
|
|
|
|
|
/// Evict the currently unset lead
|
|
@@ -2597,58 +2636,6 @@ impl<T: Trait> Module<T> {
|
|
|
Self::deposit_event(RawEvent::ChannelUpdatedByCurationActor(*channel_id));
|
|
|
}
|
|
|
|
|
|
- /// Introduce a lead when one is not currently set.
|
|
|
- pub fn do_set_lead(member: T::MemberId, role_account: T::AccountId) -> dispatch::Result {
|
|
|
- // Ensure there is no current lead
|
|
|
- ensure!(
|
|
|
- <CurrentLeadId<T>>::get().is_none(),
|
|
|
- MSG_CURRENT_LEAD_ALREADY_SET
|
|
|
- );
|
|
|
-
|
|
|
- // Ensure that member can actually become lead
|
|
|
- let new_lead_id = <NextLeadId<T>>::get();
|
|
|
-
|
|
|
- let new_lead_role =
|
|
|
- role_types::ActorInRole::new(role_types::Role::CuratorLead, new_lead_id);
|
|
|
-
|
|
|
- let _profile = <members::Module<T>>::can_register_role_on_member(
|
|
|
- &member,
|
|
|
- &role_types::ActorInRole::new(role_types::Role::CuratorLead, new_lead_id),
|
|
|
- )?;
|
|
|
-
|
|
|
- //
|
|
|
- // == MUTATION SAFE ==
|
|
|
- //
|
|
|
-
|
|
|
- // Construct lead
|
|
|
- let new_lead = Lead {
|
|
|
- role_account: role_account.clone(),
|
|
|
- reward_relationship: None,
|
|
|
- inducted: <system::Module<T>>::block_number(),
|
|
|
- stage: LeadRoleState::Active,
|
|
|
- };
|
|
|
-
|
|
|
- // Store lead
|
|
|
- <LeadById<T>>::insert(new_lead_id, new_lead);
|
|
|
-
|
|
|
- // Update current lead
|
|
|
- <CurrentLeadId<T>>::put(new_lead_id); // Some(new_lead_id)
|
|
|
-
|
|
|
- // Update next lead counter
|
|
|
- <NextLeadId<T>>::mutate(|id| *id += <LeadId<T> as One>::one());
|
|
|
-
|
|
|
- // Register in role
|
|
|
- let registered_role =
|
|
|
- <members::Module<T>>::register_role_on_member(member, &new_lead_role).is_ok();
|
|
|
-
|
|
|
- assert!(registered_role);
|
|
|
-
|
|
|
- // Trigger event
|
|
|
- Self::deposit_event(RawEvent::LeadSet(new_lead_id));
|
|
|
-
|
|
|
- Ok(())
|
|
|
- }
|
|
|
-
|
|
|
/// The stake, with the given id, was unstaked. Infalliable. Has no side effects if stake_id is not relevant
|
|
|
/// to this module.
|
|
|
pub fn unstaked(stake_id: StakeId<T>) {
|