GetValidators -> Validators, sdk.Validator=abci.Validator

This commit is contained in:
mossid 2018-04-25 16:38:04 +02:00 committed by rigelrozanski
parent fef5b6a30f
commit 755f79d52d
4 changed files with 32 additions and 65 deletions

View File

@ -16,7 +16,7 @@ func init() {
type Validator = abci.Validator
type ValidatorSetKeeper interface {
GetValidators(Context) []*Validator
Validators(Context) []*Validator
Size(Context) int
IsValidator(Context, Address) bool
GetByAddress(Context, Address) (int, *Validator)

View File

@ -171,7 +171,7 @@ func (k Keeper) setCandidate(ctx sdk.Context, candidate Candidate) {
setAcc = true
}
if setAcc {
bz, err = k.cdc.MarshalBinary(validator.ABCIValidator(k.cdc))
bz, err = k.cdc.MarshalBinary(validator.abciValidator(k.cdc))
if err != nil {
panic(err)
}
@ -200,7 +200,7 @@ func (k Keeper) removeCandidate(ctx sdk.Context, address sdk.Address) {
if store.Get(GetRecentValidatorKey(address)) == nil {
return
}
bz, err := k.cdc.MarshalBinary(candidate.validator().ABCIValidatorZero(k.cdc))
bz, err := k.cdc.MarshalBinary(candidate.validator().abciValidatorZero(k.cdc))
if err != nil {
panic(err)
}
@ -216,7 +216,7 @@ func (k Keeper) removeCandidate(ctx sdk.Context, address sdk.Address) {
// records are updated in store with the RecentValidatorsKey. This store is
// used to determine if a candidate is a validator without needing to iterate
// over the subspace as we do in GetValidators
func (k Keeper) GetValidators(ctx sdk.Context) (validators []sdk.Validator) {
func (k Keeper) GetValidators(ctx sdk.Context) (validators []Validator) {
store := ctx.KVStore(k.storeKey)
// clear the recent validators store, add to the ToKickOut Temp store
@ -233,7 +233,7 @@ func (k Keeper) GetValidators(ctx sdk.Context) (validators []sdk.Validator) {
// add the actual validator power sorted store
maxValidators := k.GetParams(ctx).MaxValidators
iterator = store.ReverseIterator(subspace(ValidatorsKey)) // largest to smallest
validators = make([]sdk.Validator, maxValidators)
validators = make([]Validator, maxValidators)
i := 0
for ; ; i++ {
if !iterator.Valid() || i > int(maxValidators-1) {
@ -241,7 +241,7 @@ func (k Keeper) GetValidators(ctx sdk.Context) (validators []sdk.Validator) {
break
}
bz := iterator.Value()
var validator sdk.Validator
var validator Validator
err := k.cdc.UnmarshalBinary(bz, &validator)
if err != nil {
panic(err)
@ -265,12 +265,12 @@ func (k Keeper) GetValidators(ctx sdk.Context) (validators []sdk.Validator) {
// get the zero abci validator from the ToKickOut iterator value
bz := iterator.Value()
var validator sdk.Validator
var validator Validator
err := k.cdc.UnmarshalBinary(bz, &validator)
if err != nil {
panic(err)
}
bz, err = k.cdc.MarshalBinary(validator.ABCIValidatorZero(k.cdc))
bz, err = k.cdc.MarshalBinary(validator.abciValidatorZero(k.cdc))
if err != nil {
panic(err)
}
@ -296,7 +296,7 @@ func (k Keeper) isNewValidator(ctx sdk.Context, store sdk.KVStore, address sdk.A
break
}
bz := iterator.Value()
var val sdk.Validator
var val Validator
err := k.cdc.UnmarshalBinary(bz, &val)
if err != nil {
panic(err)
@ -496,7 +496,21 @@ func (k Keeper) setPool(ctx sdk.Context, p Pool) {
//__________________________________________________________________________
// Implements sdk.ValidatorSetKeeper
// Implements ValidatorSetKeeper
var _ sdk.ValidatorSetKeeper = Keeper{}
func (k Keeper) Validators(ctx sdk.Context) []*sdk.Validator {
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
}
func (k Keeper) Size(ctx sdk.Context) int {
return len(k.GetValidators(ctx))

View File

@ -474,7 +474,7 @@ func TestGetAccUpdateValidators(t *testing.T) {
assert.True(t, candidates[0].Assets.Equal(sdk.NewRat(600)))
acc = keeper.getAccUpdateValidators(ctx)
require.Equal(t, 1, len(acc))
assert.Equal(t, candidates[0].validator().ABCIValidator(keeper.cdc), acc[0])
assert.Equal(t, candidates[0].validator().abciValidator(keeper.cdc), acc[0])
// test multiple value change
// candidate set: {c1, c3} -> {c1', c3'}
@ -492,8 +492,8 @@ func TestGetAccUpdateValidators(t *testing.T) {
require.Equal(t, 2, len(acc))
candidates = keeper.GetCandidates(ctx, 5)
require.Equal(t, 2, len(candidates))
require.Equal(t, candidates[0].validator().ABCIValidator(keeper.cdc), acc[0])
require.Equal(t, candidates[1].validator().ABCIValidator(keeper.cdc), acc[1])
require.Equal(t, candidates[0].validator().abciValidator(keeper.cdc), acc[0])
require.Equal(t, candidates[1].validator().abciValidator(keeper.cdc), acc[1])
// test validtor added at the beginning
// candidate set: {c1, c3} -> {c0, c1, c3}
@ -507,7 +507,7 @@ func TestGetAccUpdateValidators(t *testing.T) {
require.Equal(t, 1, len(acc))
candidates = keeper.GetCandidates(ctx, 5)
require.Equal(t, 3, len(candidates))
assert.Equal(t, candidates[0].validator().ABCIValidator(keeper.cdc), acc[0])
assert.Equal(t, candidates[0].validator().abciValidator(keeper.cdc), acc[0])
// test validator added at the middle
// candidate set: {c0, c1, c3} -> {c0, c1, c2, c3]
@ -521,7 +521,7 @@ func TestGetAccUpdateValidators(t *testing.T) {
require.Equal(t, 1, len(acc))
candidates = keeper.GetCandidates(ctx, 5)
require.Equal(t, 4, len(candidates))
assert.Equal(t, candidates[2].validator().ABCIValidator(keeper.cdc), acc[0])
assert.Equal(t, candidates[2].validator().abciValidator(keeper.cdc), acc[0])
// test candidate added at the end but not inserted in the valset
// candidate set: {c0, c1, c2, c3} -> {c0, c1, c2, c3, c4}
@ -580,7 +580,7 @@ func TestGetAccUpdateValidators(t *testing.T) {
assert.Equal(t, candidatesIn[0].PubKey.Bytes(), acc[0].PubKey)
assert.Equal(t, int64(0), acc[0].Power)
assert.Equal(t, vals[0].ABCIValidator(keeper.cdc), acc[1])
assert.Equal(t, vals[0].abciValidator(keeper.cdc), acc[1])
// test from something to nothing
// candidate set: {c0, c1, c2, c3, c4} -> {}
@ -732,50 +732,3 @@ func TestValidatorsetKeeper(t *testing.T) {
assert.Equal(t, total, keeper.TotalPower(ctx).Evaluate())
}
func TestValidatorsetKeeper(t *testing.T) {
ctx, _, keeper := createTestInput(t, false, 0)
total := int64(0)
amts := []int64{9, 8, 7}
var candidates [3]Candidate
for i, amt := range amts {
candidates[i] = Candidate{
Address: addrVals[i],
PubKey: pks[i],
Assets: sdk.NewRat(amt),
Liabilities: sdk.NewRat(amt),
}
keeper.setCandidate(ctx, candidates[i])
total += amt
}
assert.Equal(t, 3, keeper.Size(ctx))
for _, addr := range addrVals[:3] {
assert.True(t, keeper.IsValidator(ctx, addr))
}
for _, addr := range addrVals[3:] {
assert.False(t, keeper.IsValidator(ctx, addr))
}
for i, addr := range addrVals[:3] {
index, val := keeper.GetByAddress(ctx, addr)
assert.Equal(t, i, index)
assert.Equal(t, candidates[i].validator(), *val)
}
for _, addr := range addrVals[3:] {
index, val := keeper.GetByAddress(ctx, addr)
assert.Equal(t, -1, index)
assert.Nil(t, val)
}
for i, can := range candidates {
assert.Equal(t, can.validator(), *keeper.GetByIndex(ctx, i))
}
assert.Equal(t, total, keeper.TotalPower(ctx).Evaluate())
}

View File

@ -134,8 +134,8 @@ func (c Candidate) delegatorShareExRate() sdk.Rat {
// Validator returns a copy of the Candidate as a Validator.
// Should only be called when the Candidate qualifies as a validator.
func (c Candidate) validator() sdk.Validator {
return sdk.Validator{
func (c Candidate) validator() Validator {
return Validator{
Address: c.Address,
PubKey: c.PubKey,
Power: c.Assets,