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) {}