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 }