From 04d6ce68989e3e270a4c9386361c8c27211143b8 Mon Sep 17 00:00:00 2001 From: mossid Date: Wed, 6 Jun 2018 18:25:00 -0700 Subject: [PATCH] add revoked prefix to key, add condition in getbypower --- x/stake/keeper.go | 6 ++++++ x/stake/keeper_keys.go | 13 ++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/x/stake/keeper.go b/x/stake/keeper.go index 9f554c764f..fad1f86ef1 100644 --- a/x/stake/keeper.go +++ b/x/stake/keeper.go @@ -167,6 +167,12 @@ func (k Keeper) GetValidatorsByPower(ctx sdk.Context) []Validator { if !found { panic(fmt.Sprintf("validator record not found for address: %v\n", address)) } + + // Reached to revoked validators, stop iterating + if validator.Revoked { + iterator.Close() + break + } if validator.Status() == sdk.Bonded { validators[i] = validator i++ diff --git a/x/stake/keeper_keys.go b/x/stake/keeper_keys.go index 632a86ec3c..20062f00e4 100644 --- a/x/stake/keeper_keys.go +++ b/x/stake/keeper_keys.go @@ -51,15 +51,22 @@ func GetValidatorsByPowerKey(validator Validator, pool Pool) []byte { powerBytes := []byte(power.ToLeftPadded(maxDigitsForAccount)) // power big-endian (more powerful validators first) // TODO ensure that the key will be a readable string.. probably should add seperators and have + revokedBytes := make([]byte, 1) + if validator.Revoked { + revokedBytes[0] = byte(0x01) + } else { + revokedBytes[0] = byte(0x00) + } // heightBytes and counterBytes represent strings like powerBytes does heightBytes := make([]byte, binary.MaxVarintLen64) binary.BigEndian.PutUint64(heightBytes, ^uint64(validator.BondHeight)) // invert height (older validators first) counterBytes := make([]byte, 2) binary.BigEndian.PutUint16(counterBytes, ^uint16(validator.BondIntraTxCounter)) // invert counter (first txns have priority) return append(ValidatorsByPowerKey, - append(powerBytes, - append(heightBytes, - append(counterBytes, validator.Owner.Bytes()...)...)...)...) // TODO don't technically need to store owner + append(revokedBytes, + append(powerBytes, + append(heightBytes, + append(counterBytes, validator.Owner.Bytes()...)...)...)...)...) // TODO don't technically need to store owner } // get the key for the accumulated update validators