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 }