Skip to content

Commit d288c81

Browse files
authored
pallet-core-fellowship: import an unimported member on approve (#2883)
To align with the documentation of the approve call, we import an unimported member on approval. No changes have been made to the benchmarks as they already cover the worst-case scenario.
1 parent 0ff3f4d commit d288c81

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

prdoc/pr_2883.prdoc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
title: "pallet-core-fellowship: import an unimported on approve"
2+
3+
doc:
4+
- audience: Runtime User
5+
description: |
6+
To align with the documentation of the approve call, we import an untracked member on approval.
7+
8+
crates:
9+
- name: "pallet-core-fellowship"

substrate/frame/core-fellowship/src/lib.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,11 @@ pub mod pallet {
382382
ensure!(at_rank > 0, Error::<T, I>::InvalidRank);
383383
let rank = T::Members::rank_of(&who).ok_or(Error::<T, I>::Unranked)?;
384384
ensure!(rank == at_rank, Error::<T, I>::UnexpectedRank);
385-
let mut member = Member::<T, I>::get(&who).ok_or(Error::<T, I>::NotTracked)?;
385+
let mut member = if let Some(m) = Member::<T, I>::get(&who) {
386+
m
387+
} else {
388+
Self::import_member(who.clone(), rank)
389+
};
386390

387391
member.last_proof = frame_system::Pallet::<T>::block_number();
388392
Member::<T, I>::insert(&who, &member);
@@ -518,13 +522,7 @@ pub mod pallet {
518522
let who = ensure_signed(origin)?;
519523
ensure!(!Member::<T, I>::contains_key(&who), Error::<T, I>::AlreadyInducted);
520524
let rank = T::Members::rank_of(&who).ok_or(Error::<T, I>::Unranked)?;
521-
522-
let now = frame_system::Pallet::<T>::block_number();
523-
Member::<T, I>::insert(
524-
&who,
525-
MemberStatus { is_active: true, last_promotion: 0u32.into(), last_proof: now },
526-
);
527-
Self::deposit_event(Event::<T, I>::Imported { who, rank });
525+
let _ = Self::import_member(who, rank);
528526

529527
Ok(Pays::No.into())
530528
}
@@ -548,6 +546,18 @@ pub mod pallet {
548546
Self::deposit_event(e);
549547
}
550548
}
549+
550+
fn import_member(who: T::AccountId, rank: RankOf<T, I>) -> MemberStatusOf<T> {
551+
let now = frame_system::Pallet::<T>::block_number();
552+
let status = MemberStatus {
553+
is_active: true,
554+
last_promotion: BlockNumberFor::<T>::zero(),
555+
last_proof: now,
556+
};
557+
Member::<T, I>::insert(&who, status.clone());
558+
Self::deposit_event(Event::<T, I>::Imported { who, rank });
559+
status
560+
}
551561
}
552562

553563
impl<T: Config<I>, I: 'static> GetSalary<RankOf<T, I>, T::AccountId, T::Balance> for Pallet<T, I> {

substrate/frame/core-fellowship/src/tests.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,3 +378,11 @@ fn active_changing_get_salary_works() {
378378
}
379379
});
380380
}
381+
382+
#[test]
383+
fn approve_imports_not_tracked_member() {
384+
new_test_ext().execute_with(|| {
385+
set_rank(10, 5);
386+
assert_ok!(CoreFellowship::approve(signed(5), 10, 5));
387+
});
388+
}

0 commit comments

Comments
 (0)