cosmos-sdk/x/distribution/keeper/validator.go

58 lines
1.9 KiB
Go
Raw Normal View History

2018-09-04 23:41:17 -07:00
package keeper
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/distribution/types"
)
// get the validator distribution info
func (k Keeper) GetValidatorDistInfo(ctx sdk.Context,
operatorAddr sdk.ValAddress) (vdi types.ValidatorDistInfo) {
store := ctx.KVStore(k.storeKey)
b := store.Get(GetValidatorDistInfoKey(operatorAddr))
2018-09-04 23:41:17 -07:00
if b == nil {
panic("Stored delegation-distribution info should not have been nil")
}
k.cdc.MustUnmarshalBinary(b, &vdi)
return
}
// set the validator distribution info
func (k Keeper) SetValidatorDistInfo(ctx sdk.Context, vdi types.ValidatorDistInfo) {
store := ctx.KVStore(k.storeKey)
b := k.cdc.MustMarshalBinary(vdi)
store.Set(GetValidatorDistInfoKey(vdi.OperatorAddr), b)
2018-09-04 23:41:17 -07:00
}
2018-09-17 20:02:15 -07:00
// remove a validator distribution info
func (k Keeper) RemoveValidatorDistInfo(ctx sdk.Context, valAddr sdk.ValAddress) {
store := ctx.KVStore(k.storeKey)
store.Delete(GetValidatorDistInfoKey(valAddr))
2018-09-17 20:02:15 -07:00
}
// withdrawal all the validator rewards including the commission
2018-09-18 20:30:00 -07:00
func (k Keeper) WithdrawValidatorRewardsAll(ctx sdk.Context, operatorAddr sdk.ValAddress) {
2018-09-04 23:41:17 -07:00
// withdraw self-delegation
2018-09-10 15:37:58 -07:00
height := ctx.BlockHeight()
validator := k.stakeKeeper.GetValidator(ctx, operatorAddr)
accAddr := sdk.AccAddress(operatorAddr.Bytes())
2018-09-18 09:46:04 -07:00
withdraw := k.GetDelegatorRewardsAll(ctx, accAddr, height)
2018-09-04 23:41:17 -07:00
// withdrawal validator commission rewards
bondedTokens := k.stakeKeeper.TotalPower(ctx)
2018-09-13 23:35:02 -07:00
valInfo := k.GetValidatorDistInfo(ctx, operatorAddr)
2018-09-10 15:37:58 -07:00
feePool := k.GetFeePool(ctx)
valInfo, feePool, commission := valInfo.WithdrawCommission(feePool, height, bondedTokens,
validator.GetTokens(), validator.GetCommission())
withdraw = withdraw.Plus(commission)
k.SetValidatorDistInfo(ctx, valInfo)
k.SetFeePool(ctx, feePool)
withdrawAddr := k.GetDelegatorWithdrawAddr(ctx, accAddr)
k.bankKeeper.AddCoins(ctx, withdrawAddr, withdraw.TruncateDecimal())
2018-09-04 23:41:17 -07:00
}