github.com/lino-network/lino@v0.6.11/x/vote/manager/hooks.go (about)

     1  package manager
     2  
     3  import (
     4  	sdk "github.com/cosmos/cosmos-sdk/types"
     5  	linotypes "github.com/lino-network/lino/types"
     6  )
     7  
     8  // Implements StakingHooks interface
     9  var _ StakingHooks = VoteManager{}
    10  var _ StakingHooks = MultiStakingHooks{}
    11  
    12  // combine multiple staking hooks, all hook functions are run in array sequence
    13  type MultiStakingHooks []StakingHooks
    14  
    15  //go:generate mockery -name StakingHooks
    16  // StakingHooks event hooks for staking validator object (noalias)
    17  type StakingHooks interface {
    18  	AfterAddingStake(ctx sdk.Context, username linotypes.AccountKey) sdk.Error
    19  	AfterSubtractingStake(ctx sdk.Context, username linotypes.AccountKey) sdk.Error
    20  	AfterSlashing(ctx sdk.Context, username linotypes.AccountKey) sdk.Error
    21  }
    22  
    23  // AfterAddingStake - call hook if registered
    24  func (vm VoteManager) AfterAddingStake(ctx sdk.Context, username linotypes.AccountKey) sdk.Error {
    25  	if vm.hooks != nil {
    26  		return vm.hooks.AfterAddingStake(ctx, username)
    27  	}
    28  	return nil
    29  }
    30  
    31  // AfterSubtractingStake - call hook if registered
    32  func (vm VoteManager) AfterSubtractingStake(ctx sdk.Context, username linotypes.AccountKey) sdk.Error {
    33  	if vm.hooks != nil {
    34  		return vm.hooks.AfterSubtractingStake(ctx, username)
    35  	}
    36  	return nil
    37  }
    38  
    39  // AfterSubtractingStake - call hook if registered
    40  func (vm VoteManager) AfterSlashing(ctx sdk.Context, username linotypes.AccountKey) sdk.Error {
    41  	if vm.hooks != nil {
    42  		return vm.hooks.AfterSlashing(ctx, username)
    43  	}
    44  	return nil
    45  }
    46  
    47  func NewMultiStakingHooks(hooks ...StakingHooks) MultiStakingHooks {
    48  	return hooks
    49  }
    50  
    51  // nolint
    52  func (h MultiStakingHooks) AfterAddingStake(ctx sdk.Context, username linotypes.AccountKey) sdk.Error {
    53  	for i := range h {
    54  		if err := h[i].AfterAddingStake(ctx, username); err != nil {
    55  			return err
    56  		}
    57  	}
    58  	return nil
    59  }
    60  
    61  func (h MultiStakingHooks) AfterSubtractingStake(ctx sdk.Context, username linotypes.AccountKey) sdk.Error {
    62  	for i := range h {
    63  		if err := h[i].AfterSubtractingStake(ctx, username); err != nil {
    64  			return err
    65  		}
    66  	}
    67  	return nil
    68  }
    69  
    70  func (h MultiStakingHooks) AfterSlashing(ctx sdk.Context, username linotypes.AccountKey) sdk.Error {
    71  	for i := range h {
    72  		if err := h[i].AfterSlashing(ctx, username); err != nil {
    73  			return err
    74  		}
    75  	}
    76  	return nil
    77  }