add ValidatorSet, remove methods
This commit is contained in:
parent
37156ad192
commit
79fdbe2f3a
@ -2,15 +2,29 @@ package types
|
||||
|
||||
import (
|
||||
abci "github.com/tendermint/abci/types"
|
||||
"github.com/tendermint/go-crypto"
|
||||
)
|
||||
|
||||
type Validator = abci.Validator
|
||||
type Validator interface {
|
||||
GetAddress() Address
|
||||
GetPubKey() crypto.PubKey
|
||||
GetPower() Rat
|
||||
}
|
||||
|
||||
func ABCIValidator(v Validator) abci.Validator {
|
||||
return abci.Validator{
|
||||
PubKey: v.GetPubKey().Bytes(),
|
||||
Power: v.GetPower().Evaluate(),
|
||||
}
|
||||
}
|
||||
|
||||
type ValidatorSet interface {
|
||||
Iterate(func(int, Validator))
|
||||
Size() int
|
||||
}
|
||||
|
||||
type ValidatorSetKeeper interface {
|
||||
Validators(Context) []*Validator
|
||||
Size(Context) int
|
||||
IsValidator(Context, Address) bool
|
||||
GetByAddress(Context, Address) (int, *Validator)
|
||||
GetByIndex(Context, int) *Validator
|
||||
ValidatorSet(Context) ValidatorSet
|
||||
GetByAddress(Context, Address) Validator
|
||||
TotalPower(Context) Rat
|
||||
}
|
||||
|
||||
@ -505,50 +505,20 @@ func (k Keeper) setPool(ctx sdk.Context, p Pool) {
|
||||
|
||||
var _ sdk.ValidatorSetKeeper = Keeper{}
|
||||
|
||||
func (k Keeper) Validators(ctx sdk.Context) []*sdk.Validator {
|
||||
func (k Keeper) ValidatorSet(ctx sdk.Context) sdk.ValidatorSet {
|
||||
vals := k.GetValidators(ctx)
|
||||
res := make([]*sdk.Validator, len(vals))
|
||||
|
||||
for i, val := range vals {
|
||||
abcival := val.abciValidator(k.cdc)
|
||||
res[i] = &abcival
|
||||
}
|
||||
|
||||
return res
|
||||
return ValidatorSet(vals)
|
||||
}
|
||||
|
||||
func (k Keeper) Size(ctx sdk.Context) int {
|
||||
return len(k.GetValidators(ctx))
|
||||
}
|
||||
|
||||
func (k Keeper) IsValidator(ctx sdk.Context, addr sdk.Address) bool {
|
||||
for _, v := range k.GetValidators(ctx) {
|
||||
if bytes.Equal(v.Address, addr) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (k Keeper) GetByAddress(ctx sdk.Context, addr sdk.Address) (int, *sdk.Validator) {
|
||||
for i, v := range k.GetValidators(ctx) {
|
||||
if bytes.Equal(v.Address, addr) {
|
||||
val := v.abciValidator(k.cdc)
|
||||
return i, &val
|
||||
}
|
||||
}
|
||||
return -1, nil
|
||||
}
|
||||
|
||||
func (k Keeper) GetByIndex(ctx sdk.Context, index int) *sdk.Validator {
|
||||
valset := k.GetValidators(ctx)
|
||||
|
||||
if index < 0 || index >= len(valset) {
|
||||
func (k Keeper) GetByAddress(ctx sdk.Context, addr sdk.Address) sdk.Validator {
|
||||
can, ok := k.GetCandidate(ctx, addr)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
val := valset[index].abciValidator(k.cdc)
|
||||
return &val
|
||||
if can.Status != Bonded {
|
||||
return nil
|
||||
}
|
||||
return can.validator()
|
||||
}
|
||||
|
||||
func (k Keeper) TotalPower(ctx sdk.Context) sdk.Rat {
|
||||
|
||||
@ -4,9 +4,9 @@ import (
|
||||
"bytes"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
crypto "github.com/tendermint/go-crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/wire"
|
||||
abci "github.com/tendermint/abci/types"
|
||||
crypto "github.com/tendermint/go-crypto"
|
||||
)
|
||||
|
||||
// GenesisState - all staking state that must be provided at genesis
|
||||
@ -292,8 +292,8 @@ func (v Validator) equal(v2 Validator) bool {
|
||||
}
|
||||
|
||||
// abci validator from stake validator type
|
||||
func (v Validator) abciValidator(cdc *wire.Codec) sdk.Validator {
|
||||
return sdk.Validator{
|
||||
func (v Validator) abciValidator(cdc *wire.Codec) abci.Validator {
|
||||
return abci.Validator{
|
||||
PubKey: v.PubKey.Bytes(),
|
||||
Power: v.Power.Evaluate(),
|
||||
}
|
||||
@ -301,19 +301,40 @@ func (v Validator) abciValidator(cdc *wire.Codec) sdk.Validator {
|
||||
|
||||
// abci validator from stake validator type
|
||||
// with zero power used for validator updates
|
||||
func (v Validator) abciValidatorZero(cdc *wire.Codec) sdk.Validator {
|
||||
return sdk.Validator{
|
||||
func (v Validator) abciValidatorZero(cdc *wire.Codec) abci.Validator {
|
||||
return abci.Validator{
|
||||
PubKey: v.PubKey.Bytes(),
|
||||
Power: 0,
|
||||
}
|
||||
}
|
||||
|
||||
// sortable validator list for testing
|
||||
type validators []Validator
|
||||
var _ sdk.Validator = Validator{}
|
||||
|
||||
func (v validators) Len() int { return len(v) }
|
||||
func (v validators) Swap(i, j int) { v[i], v[j] = v[j], v[i] }
|
||||
func (v validators) Less(i, j int) bool { return v[i].Power.LT(v[j].Power) }
|
||||
func (v Validator) GetAddress() sdk.Address {
|
||||
return v.Address
|
||||
}
|
||||
|
||||
func (v Validator) GetPubKey() crypto.PubKey {
|
||||
return v.PubKey
|
||||
}
|
||||
|
||||
func (v Validator) GetPower() sdk.Rat {
|
||||
return v.Power
|
||||
}
|
||||
|
||||
type ValidatorSet []Validator
|
||||
|
||||
var _ sdk.ValidatorSet = ValidatorSet{}
|
||||
|
||||
func (vs ValidatorSet) Iterate(fn func(int, sdk.Validator)) {
|
||||
for i, v := range vs {
|
||||
fn(i, v)
|
||||
}
|
||||
}
|
||||
|
||||
func (vs ValidatorSet) Size() int {
|
||||
return len(vs)
|
||||
}
|
||||
|
||||
//_________________________________________________________________________
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user