cosmos-sdk/x/distribution/types/delegator_info.go

39 lines
1.4 KiB
Go
Raw Normal View History

package types
import sdk "github.com/cosmos/cosmos-sdk/types"
// distribution info for a delegation
type DelegatorDistInfo struct {
2018-09-17 20:02:15 -07:00
DelegatorAddr sdk.AccAddress `json:"delegator_addr"`
ValOperatorAddr sdk.ValAddress `json:"val_operator_addr"`
WithdrawalHeight int64 `json:"withdrawal_height"` // last time this delegation withdrew rewards
}
// withdraw rewards from delegator
2018-09-19 11:47:25 -07:00
func (di DelegatorDistInfo) WithdrawRewards(fp FeePool, vi ValidatorDistInfo,
2018-09-13 23:35:02 -07:00
height int64, totalBonded, vdTokens, totalDelShares, delegatorShares,
2018-09-19 11:47:25 -07:00
commissionRate sdk.Dec) (DelegatorDistInfo, FeePool, DecCoins) {
vi.UpdateTotalDelAccum(height, totalDelShares)
2018-09-19 16:33:12 -07:00
vi, fp = vi.TakeFeePoolRewards(fp, height, totalBonded, vdTokens, commissionRate)
2018-09-19 16:33:12 -07:00
blocks := height - di.WithdrawalHeight
di.WithdrawalHeight = height
2018-09-13 23:35:02 -07:00
accum := delegatorShares.Mul(sdk.NewDec(blocks))
2018-09-19 16:33:12 -07:00
withdrawalTokens := vi.Pool.Mul(accum.Quo(vi.DelAccum.Accum))
2018-09-19 19:13:12 -07:00
remainingTokens := vi.Pool.Mul(sdk.OneDec().Sub(accum.Quo(vi.DelAccum.Accum)))
2018-09-19 19:13:12 -07:00
vi.Pool = remainingTokens
2018-09-19 16:33:12 -07:00
vi.DelAccum.Accum = vi.DelAccum.Accum.Sub(accum)
2018-09-19 11:47:25 -07:00
return di, fp, withdrawalTokens
}
2018-09-17 20:02:15 -07:00
//_____________________________________________________________________
// withdraw address for the delegation rewards
type DelegatorWithdrawInfo struct {
DelegatorAddr sdk.AccAddress `json:"delegator_addr"`
WithdrawAddr sdk.AccAddress `json:"withdraw_addr"`
}