github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/keeper/hooks.go (about) 1 package keeper 2 3 import ( 4 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 5 6 "github.com/fibonacci-chain/fbc/x/distribution/types" 7 stakingtypes "github.com/fibonacci-chain/fbc/x/staking/types" 8 ) 9 10 // Hooks is struct of keepers from other module 11 type Hooks struct { 12 k Keeper 13 } 14 15 var _ stakingtypes.StakingHooks = Hooks{} 16 17 // Hooks creates new distribution hooks 18 func (k Keeper) Hooks() Hooks { return Hooks{k} } 19 20 // AfterValidatorCreated initializes validator distribution record 21 func (h Hooks) AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress) { 22 val := h.k.stakingKeeper.Validator(ctx, valAddr) 23 h.k.initializeValidator(ctx, val) 24 } 25 26 // AfterValidatorRemoved cleans up for after validator is removed 27 func (h Hooks) AfterValidatorRemoved(ctx sdk.Context, _ sdk.ConsAddress, valAddr sdk.ValAddress) { 28 if h.k.CheckDistributionProposalValid(ctx) { 29 h.afterValidatorRemovedForDistributionProposal(ctx, nil, valAddr) 30 return 31 } 32 33 // force-withdraw commission 34 commission := h.k.GetValidatorAccumulatedCommission(ctx, valAddr) 35 if !commission.IsZero() { 36 // split into integral & remainder 37 coins, remainder := commission.TruncateDecimal() 38 // remainder to community pool 39 if !remainder.IsZero() { 40 feePool := h.k.GetFeePool(ctx) 41 feePool.CommunityPool = feePool.CommunityPool.Add(remainder...) 42 h.k.SetFeePool(ctx, feePool) 43 } 44 // add to validator account 45 if !coins.IsZero() { 46 accAddr := sdk.AccAddress(valAddr) 47 withdrawAddr := h.k.GetDelegatorWithdrawAddr(ctx, accAddr) 48 err := h.k.supplyKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, withdrawAddr, coins) 49 if err != nil { 50 panic(err) 51 } 52 } 53 } 54 55 // remove commission record 56 h.k.deleteValidatorAccumulatedCommission(ctx, valAddr) 57 } 58 59 // AfterValidatorDestroyed nothing to do 60 func (h Hooks) AfterValidatorDestroyed(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) { 61 62 } 63 64 // nolint - unused hooks 65 func (h Hooks) BeforeValidatorModified(_ sdk.Context, _ sdk.ValAddress) {} 66 func (h Hooks) AfterValidatorBonded(_ sdk.Context, _ sdk.ConsAddress, _ sdk.ValAddress) {} 67 func (h Hooks) AfterValidatorBeginUnbonding(_ sdk.Context, _ sdk.ConsAddress, _ sdk.ValAddress) {}