github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/keeper/hooks_distr_proposal.go (about)

     1  package keeper
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types"
     6  	"github.com/fibonacci-chain/fbc/x/distribution/types"
     7  )
     8  
     9  func (h Hooks) afterValidatorRemovedForDistributionProposal(ctx sdk.Context, _ sdk.ConsAddress, valAddr sdk.ValAddress) {
    10  	// fetch outstanding
    11  	outstanding := h.k.GetValidatorOutstandingRewards(ctx, valAddr)
    12  
    13  	// force-withdraw commission
    14  	commission := h.k.GetValidatorAccumulatedCommission(ctx, valAddr)
    15  	if !commission.IsZero() {
    16  		// subtract from outstanding
    17  		outstanding = outstanding.Sub(commission)
    18  
    19  		// split into integral & remainder
    20  		coins, remainder := commission.TruncateDecimal()
    21  		// remainder to community pool
    22  		if !remainder.IsZero() {
    23  			feePool := h.k.GetFeePool(ctx)
    24  			feePool.CommunityPool = feePool.CommunityPool.Add(remainder...)
    25  			h.k.SetFeePool(ctx, feePool)
    26  		}
    27  		// add to validator account
    28  		if !coins.IsZero() {
    29  			accAddr := sdk.AccAddress(valAddr)
    30  			withdrawAddr := h.k.GetDelegatorWithdrawAddr(ctx, accAddr)
    31  			err := h.k.supplyKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, withdrawAddr, coins)
    32  			if err != nil {
    33  				panic(err)
    34  			}
    35  		}
    36  	}
    37  
    38  	// add outstanding to community pool
    39  	feePool := h.k.GetFeePool(ctx)
    40  	feePool.CommunityPool = feePool.CommunityPool.Add(outstanding...)
    41  	h.k.SetFeePool(ctx, feePool)
    42  
    43  	// delete outstanding
    44  	h.k.DeleteValidatorOutstandingRewards(ctx, valAddr)
    45  
    46  	// remove commission record
    47  	h.k.deleteValidatorAccumulatedCommission(ctx, valAddr)
    48  
    49  	// clear slashes
    50  	//h.k.DeleteValidatorSlashEvents(ctx, valAddr)
    51  
    52  	// clear historical rewards
    53  	h.k.DeleteValidatorHistoricalRewards(ctx, valAddr)
    54  
    55  	// clear current rewards
    56  	h.k.DeleteValidatorCurrentRewards(ctx, valAddr)
    57  }
    58  
    59  // increment period
    60  func (h Hooks) BeforeDelegationCreated(ctx sdk.Context, delAddr sdk.AccAddress, valAddrs []sdk.ValAddress) {
    61  	if !h.k.CheckDistributionProposalValid(ctx) {
    62  		return
    63  	}
    64  	for _, valAddr := range valAddrs {
    65  		val := h.k.stakingKeeper.Validator(ctx, valAddr)
    66  		h.k.incrementValidatorPeriod(ctx, val)
    67  	}
    68  }
    69  
    70  // withdraw delegation rewards (which also increments period)
    71  func (h Hooks) BeforeDelegationSharesModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddrs []sdk.ValAddress) {
    72  	if !h.k.CheckDistributionProposalValid(ctx) {
    73  		return
    74  	}
    75  
    76  	for _, valAddr := range valAddrs {
    77  		val := h.k.stakingKeeper.Validator(ctx, valAddr)
    78  		if _, err := h.k.withdrawDelegationRewards(ctx, val, delAddr); err != nil {
    79  			panic(err)
    80  		}
    81  	}
    82  }
    83  
    84  // create new delegation period record
    85  func (h Hooks) AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddrs []sdk.ValAddress) {
    86  	if !h.k.CheckDistributionProposalValid(ctx) {
    87  		return
    88  	}
    89  	for _, valAddr := range valAddrs {
    90  		h.k.initializeDelegation(ctx, valAddr, delAddr)
    91  	}
    92  }
    93  
    94  //// record the slash event
    95  //func (h Hooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) {
    96  //	h.k.updateValidatorSlashFraction(ctx, valAddr, fraction)
    97  //}
    98  
    99  func (h Hooks) BeforeDelegationRemoved(_ sdk.Context, _ sdk.AccAddress, _ sdk.ValAddress) {}
   100  
   101  // check modules enabled
   102  func (h Hooks) CheckEnabled(ctx sdk.Context) bool {
   103  	//can delete this after upgrade venus2
   104  	if !tmtypes.HigherThanVenus2(ctx.BlockHeight()) {
   105  		return true
   106  	}
   107  
   108  	return h.k.GetWithdrawRewardEnabled(ctx)
   109  }