2018-09-19 19:54:46 -07:00
|
|
|
package keeper
|
2018-09-17 20:02:15 -07:00
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
import (
|
2018-09-28 00:29:52 -07:00
|
|
|
"fmt"
|
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
"github.com/cosmos/cosmos-sdk/x/distribution/types"
|
|
|
|
)
|
2018-09-04 13:19:37 -07:00
|
|
|
|
2018-09-13 23:35:02 -07:00
|
|
|
// Create a new validator distribution record
|
2018-09-17 20:02:15 -07:00
|
|
|
func (k Keeper) onValidatorCreated(ctx sdk.Context, addr sdk.ValAddress) {
|
|
|
|
|
|
|
|
height := ctx.BlockHeight()
|
|
|
|
vdi := types.ValidatorDistInfo{
|
2018-09-19 19:54:46 -07:00
|
|
|
OperatorAddr: addr,
|
|
|
|
FeePoolWithdrawalHeight: height,
|
|
|
|
Pool: types.DecCoins{},
|
|
|
|
PoolCommission: types.DecCoins{},
|
|
|
|
DelAccum: types.NewTotalAccum(height),
|
2018-09-17 20:02:15 -07:00
|
|
|
}
|
|
|
|
k.SetValidatorDistInfo(ctx, vdi)
|
|
|
|
}
|
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
// Withdrawal all validator rewards
|
|
|
|
func (k Keeper) onValidatorCommissionChange(ctx sdk.Context, addr sdk.ValAddress) {
|
|
|
|
k.WithdrawValidatorRewardsAll(ctx, addr)
|
2018-09-17 20:02:15 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// Withdrawal all validator distribution rewards and cleanup the distribution record
|
|
|
|
func (k Keeper) onValidatorRemoved(ctx sdk.Context, addr sdk.ValAddress) {
|
|
|
|
k.RemoveValidatorDistInfo(ctx, addr)
|
|
|
|
}
|
|
|
|
|
|
|
|
//_________________________________________________________________________________________
|
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
// Create a new delegator distribution record
|
|
|
|
func (k Keeper) onDelegationCreated(ctx sdk.Context, delAddr sdk.AccAddress,
|
|
|
|
valAddr sdk.ValAddress) {
|
|
|
|
|
2018-10-05 17:32:06 -07:00
|
|
|
ddi := types.DelegationDistInfo{
|
2018-09-18 09:46:04 -07:00
|
|
|
DelegatorAddr: delAddr,
|
|
|
|
ValOperatorAddr: valAddr,
|
|
|
|
WithdrawalHeight: ctx.BlockHeight(),
|
2018-09-13 23:35:02 -07:00
|
|
|
}
|
2018-10-05 17:32:06 -07:00
|
|
|
k.SetDelegationDistInfo(ctx, ddi)
|
2018-09-28 00:29:52 -07:00
|
|
|
ctx.Logger().With("module", "x/distribution").Error(fmt.Sprintf("ddi created: %v", ddi))
|
2018-09-13 23:35:02 -07:00
|
|
|
}
|
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
// Withdrawal all validator rewards
|
|
|
|
func (k Keeper) onDelegationSharesModified(ctx sdk.Context, delAddr sdk.AccAddress,
|
|
|
|
valAddr sdk.ValAddress) {
|
2018-09-13 23:35:02 -07:00
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
k.WithdrawDelegationReward(ctx, delAddr, valAddr)
|
2018-09-13 23:35:02 -07:00
|
|
|
}
|
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
// Withdrawal all validator distribution rewards and cleanup the distribution record
|
|
|
|
func (k Keeper) onDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress,
|
|
|
|
valAddr sdk.ValAddress) {
|
2018-09-13 23:35:02 -07:00
|
|
|
|
2018-10-05 17:32:06 -07:00
|
|
|
k.RemoveDelegationDistInfo(ctx, delAddr, valAddr)
|
2018-09-17 20:02:15 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
//_________________________________________________________________________________________
|
|
|
|
|
2018-09-18 09:46:04 -07:00
|
|
|
// Wrapper struct
|
|
|
|
type Hooks struct {
|
2018-09-17 20:02:15 -07:00
|
|
|
k Keeper
|
|
|
|
}
|
|
|
|
|
2018-10-09 18:59:07 -07:00
|
|
|
var _ sdk.StakingHooks = Hooks{}
|
|
|
|
|
2018-09-18 14:54:28 -07:00
|
|
|
// New Validator Hooks
|
2018-09-19 21:53:48 -07:00
|
|
|
func (k Keeper) Hooks() Hooks { return Hooks{k} }
|
2018-09-18 14:54:28 -07:00
|
|
|
|
2018-09-17 20:02:15 -07:00
|
|
|
// nolint
|
2018-09-19 19:54:46 -07:00
|
|
|
func (h Hooks) OnValidatorCreated(ctx sdk.Context, addr sdk.ValAddress) {
|
|
|
|
h.k.onValidatorCreated(ctx, addr)
|
2018-09-18 09:46:04 -07:00
|
|
|
}
|
|
|
|
func (h Hooks) OnValidatorCommissionChange(ctx sdk.Context, addr sdk.ValAddress) {
|
2018-09-19 19:54:46 -07:00
|
|
|
h.k.onValidatorCommissionChange(ctx, addr)
|
2018-09-18 09:46:04 -07:00
|
|
|
}
|
|
|
|
func (h Hooks) OnValidatorRemoved(ctx sdk.Context, addr sdk.ValAddress) {
|
2018-09-19 19:54:46 -07:00
|
|
|
h.k.onValidatorRemoved(ctx, addr)
|
2018-09-18 09:46:04 -07:00
|
|
|
}
|
|
|
|
func (h Hooks) OnDelegationCreated(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) {
|
|
|
|
h.k.onDelegationCreated(ctx, delAddr, valAddr)
|
2018-09-17 20:02:15 -07:00
|
|
|
}
|
2018-09-18 09:46:04 -07:00
|
|
|
func (h Hooks) OnDelegationSharesModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) {
|
2018-09-19 19:54:46 -07:00
|
|
|
h.k.onDelegationSharesModified(ctx, delAddr, valAddr)
|
2018-09-17 20:02:15 -07:00
|
|
|
}
|
2018-09-18 09:46:04 -07:00
|
|
|
func (h Hooks) OnDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) {
|
|
|
|
h.k.onDelegationRemoved(ctx, delAddr, valAddr)
|
2018-09-13 23:35:02 -07:00
|
|
|
}
|
2018-10-09 18:59:07 -07:00
|
|
|
|
|
|
|
// nolint - unused hooks for interface
|
|
|
|
func (h Hooks) OnValidatorBonded(ctx sdk.Context, addr sdk.ConsAddress) {}
|
|
|
|
func (h Hooks) OnValidatorBeginUnbonding(ctx sdk.Context, addr sdk.ConsAddress) {}
|