Browse Source

Move StakingEventsHandler to the runtime

- move StakingEventsHandler to the runtime integration folder from the proposals engine module.
Shamil Gadelshin 5 years ago
parent
commit
d96083329e

+ 2 - 2
runtime-modules/proposals/engine/src/lib.rs

@@ -27,7 +27,7 @@ use types::FinalizedProposalData;
 use types::ProposalStakeManager;
 pub use types::{
     ApprovedProposalStatus, FinalizationData, Proposal, ProposalDecisionStatus, ProposalParameters,
-    ProposalStatus, StakeData, StakingEventsHandler, VotingResults,
+    ProposalStatus, StakeData, VotingResults,
 };
 pub use types::{BalanceOf, CurrencyOf, NegativeImbalance};
 pub use types::{DefaultStakeHandlerProvider, StakeHandler, StakeHandlerProvider};
@@ -619,7 +619,7 @@ impl<T: Trait> Module<T> {
 
     //TODO: candidate for invariant break or error saving to the state
     /// Callback from StakingEventsHandler. Refunds unstaked imbalance back to the source account
-    pub(crate) fn refund_proposal_stake(stake_id: T::StakeId, imbalance: NegativeImbalance<T>) {
+    pub fn refund_proposal_stake(stake_id: T::StakeId, imbalance: NegativeImbalance<T>) {
         if <StakesProposals<T>>::exists(stake_id) {
             //TODO: handle non existence
 

+ 1 - 1
runtime-modules/proposals/engine/src/types/mod.rs

@@ -19,7 +19,7 @@ pub use proposal_statuses::{
 };
 pub(crate) use stakes::ProposalStakeManager;
 pub use stakes::{
-    DefaultStakeHandlerProvider, StakeHandler, StakeHandlerProvider, StakingEventsHandler,
+    DefaultStakeHandlerProvider, StakeHandler, StakeHandlerProvider,
 };
 
 #[cfg(test)]

+ 1 - 36
runtime-modules/proposals/engine/src/types/stakes.rs

@@ -4,8 +4,7 @@ use rstd::convert::From;
 use rstd::marker::PhantomData;
 use rstd::rc::Rc;
 use sr_primitives::traits::Zero;
-use srml_support::traits::{Currency, ExistenceRequirement, Imbalance, WithdrawReasons};
-use srml_support::StorageMap;
+use srml_support::traits::{Currency, ExistenceRequirement, WithdrawReasons};
 
 // Mocking dependencies for testing
 #[cfg(test)]
@@ -13,40 +12,6 @@ use mockall::predicate::*;
 #[cfg(test)]
 use mockall::*;
 
-/// Proposal implementation of the staking event handler from the stake module.
-/// 'marker' responsible for the 'Trait' binding.
-pub struct StakingEventsHandler<T> {
-    pub marker: PhantomData<T>,
-}
-
-impl<T: Trait> stake::StakingEventsHandler<T> for StakingEventsHandler<T> {
-    /// Unstake remaining sum back to the source_account_id
-    fn unstaked(
-        id: &<T as stake::Trait>::StakeId,
-        _unstaked_amount: BalanceOf<T>,
-        remaining_imbalance: NegativeImbalance<T>,
-    ) -> NegativeImbalance<T> {
-        if <crate::StakesProposals<T>>::exists(id) {
-            <crate::Module<T>>::refund_proposal_stake(*id, remaining_imbalance);
-
-            return <NegativeImbalance<T>>::zero(); // imbalance was consumed
-        }
-
-        remaining_imbalance
-    }
-
-    /// Empty handler for slashing
-    fn slashed(
-        _: &<T as stake::Trait>::StakeId,
-        _: &<T as stake::Trait>::SlashId,
-        _: BalanceOf<T>,
-        _: BalanceOf<T>,
-        remaining_imbalance: NegativeImbalance<T>,
-    ) -> NegativeImbalance<T> {
-        remaining_imbalance
-    }
-}
-
 /// Returns registered stake handler. This is scaffolds for the mocking of the stake module.
 pub trait StakeHandlerProvider<T: Trait> {
     /// Returns stake logic handler

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

@@ -59,7 +59,6 @@ mod tests {
     }
 
     type Membership = membership::members::Module<Runtime>;
-    type ProposalsEngine = proposals_engine::Module<Runtime>;
 
     #[test]
     fn council_origin_validator_fails_with_unregistered_member() {

+ 2 - 0
runtime/src/integration/proposals/mod.rs

@@ -1,5 +1,7 @@
 mod council_origin_validator;
 mod membership_origin_validator;
+mod staking_events_handler;
 
 pub use council_origin_validator::CouncilManager;
 pub use membership_origin_validator::{MemberId, MembershipOriginValidator};
+pub use staking_events_handler::StakingEventsHandler;

+ 45 - 0
runtime/src/integration/proposals/staking_events_handler.rs

@@ -0,0 +1,45 @@
+use rstd::marker::PhantomData;
+use srml_support::traits::{Currency, Imbalance};
+use srml_support::StorageMap;
+
+// Balance alias
+type BalanceOf<T> =
+<<T as stake::Trait>::Currency as Currency<<T as system::Trait>::AccountId>>::Balance;
+
+// Balance alias for staking
+type NegativeImbalance<T> =
+<<T as stake::Trait>::Currency as Currency<<T as system::Trait>::AccountId>>::NegativeImbalance;
+
+/// Proposal implementation of the staking event handler from the stake module.
+/// 'marker' responsible for the 'Trait' binding.
+pub struct StakingEventsHandler<T> {
+	pub marker: PhantomData<T>,
+}
+
+impl<T: stake::Trait + proposals_engine::Trait> stake::StakingEventsHandler<T> for StakingEventsHandler<T> {
+	/// Unstake remaining sum back to the source_account_id
+	fn unstaked(
+		id: &<T as stake::Trait>::StakeId,
+		_unstaked_amount: BalanceOf<T>,
+		remaining_imbalance: NegativeImbalance<T>,
+	) -> NegativeImbalance<T> {
+		if <proposals_engine::StakesProposals<T>>::exists(id) {
+			<proposals_engine::Module<T>>::refund_proposal_stake(*id, remaining_imbalance);
+
+			return <NegativeImbalance<T>>::zero(); // imbalance was consumed
+		}
+
+		remaining_imbalance
+	}
+
+	/// Empty handler for slashing
+	fn slashed(
+		_: &<T as stake::Trait>::StakeId,
+		_: &<T as stake::Trait>::SlashId,
+		_: BalanceOf<T>,
+		_: BalanceOf<T>,
+		remaining_imbalance: NegativeImbalance<T>,
+	) -> NegativeImbalance<T> {
+		remaining_imbalance
+	}
+}

+ 1 - 1
runtime/src/lib.rs

@@ -586,7 +586,7 @@ impl stake::Trait for Runtime {
     type StakePoolId = StakePoolId;
     type StakingEventsHandler = (
         ContentWorkingGroupStakingEventHandler,
-        proposals_engine::StakingEventsHandler<Self>,
+        crate::integration::proposals::StakingEventsHandler<Self>,
     );
     type StakeId = u64;
     type SlashId = u64;