Merge PR #3230: Remove KV marshalling split

* remove kv seperation for marshalling

* pending

* cleanup

* cleanup x2
This commit is contained in:
frog power 4000 2019-01-07 15:42:52 -05:00 committed by GitHub
parent e855780df7
commit 20f6ff3e60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 68 additions and 220 deletions

View File

@ -22,6 +22,7 @@ BREAKING CHANGES
* SDK
* [stake] \#2513 Validator power type from Dec -> Int
* [stake] \#3233 key and value now contain duplicate fields to simplify code
* [\#3064](https://github.com/cosmos/cosmos-sdk/issues/3064) Sanitize `sdk.Coin` denom. Coins denoms are now case insensitive, i.e. 100fooToken equals to 100FOOTOKEN.
* Tendermint

View File

@ -36,7 +36,7 @@ func GetCmdQueryValidator(storeName string, cdc *codec.Codec) *cobra.Command {
return fmt.Errorf("No validator found with address %s", args[0])
}
validator := types.MustUnmarshalValidator(cdc, addr, res)
validator := types.MustUnmarshalValidator(cdc, res)
switch viper.Get(cli.OutputFlag) {
case "text":
@ -81,8 +81,7 @@ func GetCmdQueryValidators(storeName string, cdc *codec.Codec) *cobra.Command {
// parse out the validators
var validators []stake.Validator
for _, kv := range resKVs {
addr := kv.Key[1:]
validator := types.MustUnmarshalValidator(cdc, addr, kv.Value)
validator := types.MustUnmarshalValidator(cdc, kv.Value)
validators = append(validators, validator)
}
@ -209,8 +208,7 @@ func GetCmdQueryDelegation(storeName string, cdc *codec.Codec) *cobra.Command {
}
// parse out the delegation
delegation, err := types.UnmarshalDelegation(cdc, key, res)
delegation, err := types.UnmarshalDelegation(cdc, res)
if err != nil {
return err
}
@ -267,7 +265,7 @@ func GetCmdQueryDelegations(storeName string, cdc *codec.Codec) *cobra.Command {
// parse out the validators
var delegations []stake.Delegation
for _, kv := range resKVs {
delegation := types.MustUnmarshalDelegation(cdc, kv.Key, kv.Value)
delegation := types.MustUnmarshalDelegation(cdc, kv.Value)
delegations = append(delegations, delegation)
}
@ -347,7 +345,7 @@ func GetCmdQueryUnbondingDelegation(storeName string, cdc *codec.Codec) *cobra.C
}
// parse out the unbonding delegation
ubd := types.MustUnmarshalUBD(cdc, key, res)
ubd := types.MustUnmarshalUBD(cdc, res)
switch viper.Get(cli.OutputFlag) {
case "text":
@ -401,7 +399,7 @@ func GetCmdQueryUnbondingDelegations(storeName string, cdc *codec.Codec) *cobra.
// parse out the unbonding delegations
var ubds []stake.UnbondingDelegation
for _, kv := range resKVs {
ubd := types.MustUnmarshalUBD(cdc, kv.Key, kv.Value)
ubd := types.MustUnmarshalUBD(cdc, kv.Value)
ubds = append(ubds, ubd)
}
@ -451,7 +449,7 @@ func GetCmdQueryRedelegation(storeName string, cdc *codec.Codec) *cobra.Command
}
// parse out the unbonding delegation
red := types.MustUnmarshalRED(cdc, key, res)
red := types.MustUnmarshalRED(cdc, res)
switch viper.Get(cli.OutputFlag) {
case "text":
@ -505,7 +503,7 @@ func GetCmdQueryRedelegations(storeName string, cdc *codec.Codec) *cobra.Command
// parse out the validators
var reds []stake.Redelegation
for _, kv := range resKVs {
red := types.MustUnmarshalRED(cdc, kv.Key, kv.Value)
red := types.MustUnmarshalRED(cdc, kv.Value)
reds = append(reds, red)
}

View File

@ -52,7 +52,7 @@ func getShares(
return sharesAmount, errors.Errorf("cannot find delegation to determine percent Error: %v", err)
}
delegation, err := types.UnmarshalDelegation(cdc, key, resQuery)
delegation, err := types.UnmarshalDelegation(cdc, resQuery)
if err != nil {
return sdk.ZeroDec(), err
}

View File

@ -20,7 +20,7 @@ func (k Keeper) GetDelegation(ctx sdk.Context,
return delegation, false
}
delegation = types.MustUnmarshalDelegation(k.cdc, key, value)
delegation = types.MustUnmarshalDelegation(k.cdc, value)
return delegation, true
}
@ -31,7 +31,7 @@ func (k Keeper) GetAllDelegations(ctx sdk.Context) (delegations []types.Delegati
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Key(), iterator.Value())
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
delegations = append(delegations, delegation)
}
return delegations
@ -44,7 +44,7 @@ func (k Keeper) GetValidatorDelegations(ctx sdk.Context, valAddr sdk.ValAddress)
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Key(), iterator.Value())
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
if delegation.GetValidatorAddr().Equals(valAddr) {
delegations = append(delegations, delegation)
}
@ -65,7 +65,7 @@ func (k Keeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddres
i := 0
for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Key(), iterator.Value())
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
delegations[i] = delegation
i++
}
@ -101,7 +101,7 @@ func (k Keeper) GetUnbondingDelegations(ctx sdk.Context, delegator sdk.AccAddres
i := 0
for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {
unbondingDelegation := types.MustUnmarshalUBD(k.cdc, iterator.Key(), iterator.Value())
unbondingDelegation := types.MustUnmarshalUBD(k.cdc, iterator.Value())
unbondingDelegations[i] = unbondingDelegation
i++
}
@ -119,7 +119,7 @@ func (k Keeper) GetUnbondingDelegation(ctx sdk.Context,
return ubd, false
}
ubd = types.MustUnmarshalUBD(k.cdc, key, value)
ubd = types.MustUnmarshalUBD(k.cdc, value)
return ubd, true
}
@ -132,7 +132,7 @@ func (k Keeper) GetUnbondingDelegationsFromValidator(ctx sdk.Context, valAddr sd
for ; iterator.Valid(); iterator.Next() {
key := GetUBDKeyFromValIndexKey(iterator.Key())
value := store.Get(key)
ubd := types.MustUnmarshalUBD(k.cdc, key, value)
ubd := types.MustUnmarshalUBD(k.cdc, value)
ubds = append(ubds, ubd)
}
return ubds
@ -145,7 +145,7 @@ func (k Keeper) IterateUnbondingDelegations(ctx sdk.Context, fn func(index int64
defer iterator.Close()
for i := int64(0); iterator.Valid(); iterator.Next() {
ubd := types.MustUnmarshalUBD(k.cdc, iterator.Key(), iterator.Value())
ubd := types.MustUnmarshalUBD(k.cdc, iterator.Value())
if stop := fn(i, ubd); stop {
break
}
@ -235,7 +235,7 @@ func (k Keeper) GetRedelegations(ctx sdk.Context, delegator sdk.AccAddress,
i := 0
for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {
redelegation := types.MustUnmarshalRED(k.cdc, iterator.Key(), iterator.Value())
redelegation := types.MustUnmarshalRED(k.cdc, iterator.Value())
redelegations[i] = redelegation
i++
}
@ -253,7 +253,7 @@ func (k Keeper) GetRedelegation(ctx sdk.Context,
return red, false
}
red = types.MustUnmarshalRED(k.cdc, key, value)
red = types.MustUnmarshalRED(k.cdc, value)
return red, true
}
@ -266,7 +266,7 @@ func (k Keeper) GetRedelegationsFromValidator(ctx sdk.Context, valAddr sdk.ValAd
for ; iterator.Valid(); iterator.Next() {
key := GetREDKeyFromValSrcIndexKey(iterator.Key())
value := store.Get(key)
red := types.MustUnmarshalRED(k.cdc, key, value)
red := types.MustUnmarshalRED(k.cdc, value)
reds = append(reds, red)
}
return reds
@ -305,7 +305,7 @@ func (k Keeper) IterateRedelegations(ctx sdk.Context, fn func(index int64, red t
defer iterator.Close()
for i := int64(0); iterator.Valid(); iterator.Next() {
red := types.MustUnmarshalRED(k.cdc, iterator.Key(), iterator.Value())
red := types.MustUnmarshalRED(k.cdc, iterator.Value())
if stop := fn(i, red); stop {
break
}

View File

@ -17,8 +17,7 @@ func (k Keeper) GetDelegatorValidators(ctx sdk.Context, delegatorAddr sdk.AccAdd
i := 0
for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {
addr := iterator.Key()
delegation := types.MustUnmarshalDelegation(k.cdc, addr, iterator.Value())
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
validator, found := k.GetValidator(ctx, delegation.ValidatorAddr)
if !found {
@ -59,7 +58,7 @@ func (k Keeper) GetAllDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAdd
i := 0
for ; iterator.Valid(); iterator.Next() {
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Key(), iterator.Value())
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
delegations = append(delegations, delegation)
i++
}
@ -77,7 +76,7 @@ func (k Keeper) GetAllUnbondingDelegations(ctx sdk.Context, delegator sdk.AccAdd
i := 0
for ; iterator.Valid(); iterator.Next() {
unbondingDelegation := types.MustUnmarshalUBD(k.cdc, iterator.Key(), iterator.Value())
unbondingDelegation := types.MustUnmarshalUBD(k.cdc, iterator.Value())
unbondingDelegations = append(unbondingDelegations, unbondingDelegation)
i++
}
@ -95,7 +94,7 @@ func (k Keeper) GetAllRedelegations(ctx sdk.Context, delegator sdk.AccAddress, s
dstValFilter := !(dstValAddress.Empty() || dstValAddress == nil)
for ; iterator.Valid(); iterator.Next() {
redelegation := types.MustUnmarshalRED(k.cdc, iterator.Key(), iterator.Value())
redelegation := types.MustUnmarshalRED(k.cdc, iterator.Value())
if srcValFilter && !(srcValAddress.Equals(redelegation.ValidatorSrcAddr)) {
continue
}

View File

@ -16,8 +16,7 @@ func (k Keeper) IterateValidators(ctx sdk.Context, fn func(index int64, validato
iterator := sdk.KVStorePrefixIterator(store, ValidatorsKey)
i := int64(0)
for ; iterator.Valid(); iterator.Next() {
addr := iterator.Key()[1:]
validator := types.MustUnmarshalValidator(k.cdc, addr, iterator.Value())
validator := types.MustUnmarshalValidator(k.cdc, iterator.Value())
stop := fn(i, validator) // XXX is this safe will the validator unexposed fields be able to get written to?
if stop {
break
@ -136,7 +135,7 @@ func (k Keeper) IterateDelegations(ctx sdk.Context, delAddr sdk.AccAddress,
delegatorPrefixKey := GetDelegationsKey(delAddr)
iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) //smallest to largest
for i := int64(0); iterator.Valid(); iterator.Next() {
del := types.MustUnmarshalDelegation(k.cdc, iterator.Key(), iterator.Value())
del := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
stop := fn(i, del)
if stop {
break

View File

@ -36,7 +36,7 @@ func (k Keeper) GetValidator(ctx sdk.Context, addr sdk.ValAddress) (validator ty
}
// amino bytes weren't found in cache, so amino unmarshal and add it to the cache
validator = types.MustUnmarshalValidator(k.cdc, addr, value)
validator = types.MustUnmarshalValidator(k.cdc, value)
cachedVal := cachedValidator{validator, strValue}
k.validatorCache[strValue] = cachedValidator{validator, strValue}
k.validatorCacheList.PushBack(cachedVal)
@ -47,7 +47,7 @@ func (k Keeper) GetValidator(ctx sdk.Context, addr sdk.ValAddress) (validator ty
delete(k.validatorCache, valToRemove.marshalled)
}
validator = types.MustUnmarshalValidator(k.cdc, addr, value)
validator = types.MustUnmarshalValidator(k.cdc, value)
return validator, true
}
@ -217,8 +217,7 @@ func (k Keeper) GetAllValidators(ctx sdk.Context) (validators []types.Validator)
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
addr := iterator.Key()[1:]
validator := types.MustUnmarshalValidator(k.cdc, addr, iterator.Value())
validator := types.MustUnmarshalValidator(k.cdc, iterator.Value())
validators = append(validators, validator)
}
return validators
@ -234,8 +233,7 @@ func (k Keeper) GetValidators(ctx sdk.Context, maxRetrieve uint16) (validators [
i := 0
for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {
addr := iterator.Key()[1:]
validator := types.MustUnmarshalValidator(k.cdc, addr, iterator.Value())
validator := types.MustUnmarshalValidator(k.cdc, iterator.Value())
validators[i] = validator
i++
}

View File

@ -35,50 +35,24 @@ type Delegation struct {
Shares sdk.Dec `json:"shares"`
}
type delegationValue struct {
Shares sdk.Dec
}
// return the delegation without fields contained within the key for the store
// return the delegation
func MustMarshalDelegation(cdc *codec.Codec, delegation Delegation) []byte {
val := delegationValue{
delegation.Shares,
}
return cdc.MustMarshalBinaryLengthPrefixed(val)
return cdc.MustMarshalBinaryLengthPrefixed(delegation)
}
// return the delegation without fields contained within the key for the store
func MustUnmarshalDelegation(cdc *codec.Codec, key, value []byte) Delegation {
delegation, err := UnmarshalDelegation(cdc, key, value)
// return the delegation
func MustUnmarshalDelegation(cdc *codec.Codec, value []byte) Delegation {
delegation, err := UnmarshalDelegation(cdc, value)
if err != nil {
panic(err)
}
return delegation
}
// return the delegation without fields contained within the key for the store
func UnmarshalDelegation(cdc *codec.Codec, key, value []byte) (delegation Delegation, err error) {
var storeValue delegationValue
err = cdc.UnmarshalBinaryLengthPrefixed(value, &storeValue)
if err != nil {
err = fmt.Errorf("%v: %v", ErrNoDelegation(DefaultCodespace).Data(), err)
return
}
addrs := key[1:] // remove prefix bytes
if len(addrs) != 2*sdk.AddrLen {
err = fmt.Errorf("%v", ErrBadDelegationAddr(DefaultCodespace).Data())
return
}
delAddr := sdk.AccAddress(addrs[:sdk.AddrLen])
valAddr := sdk.ValAddress(addrs[sdk.AddrLen:])
return Delegation{
DelegatorAddr: delAddr,
ValidatorAddr: valAddr,
Shares: storeValue.Shares,
}, nil
// return the delegation
func UnmarshalDelegation(cdc *codec.Codec, value []byte) (delegation Delegation, err error) {
err = cdc.UnmarshalBinaryLengthPrefixed(value, &delegation)
return delegation, err
}
// nolint
@ -118,57 +92,24 @@ type UnbondingDelegation struct {
Balance sdk.Coin `json:"balance"` // atoms to receive at completion
}
type ubdValue struct {
CreationHeight int64
MinTime time.Time
InitialBalance sdk.Coin
Balance sdk.Coin
}
// return the unbonding delegation without fields contained within the key for the store
// return the unbonding delegation
func MustMarshalUBD(cdc *codec.Codec, ubd UnbondingDelegation) []byte {
val := ubdValue{
ubd.CreationHeight,
ubd.MinTime,
ubd.InitialBalance,
ubd.Balance,
}
return cdc.MustMarshalBinaryLengthPrefixed(val)
return cdc.MustMarshalBinaryLengthPrefixed(ubd)
}
// unmarshal a unbonding delegation from a store key and value
func MustUnmarshalUBD(cdc *codec.Codec, key, value []byte) UnbondingDelegation {
ubd, err := UnmarshalUBD(cdc, key, value)
// unmarshal a unbonding delegation from a store value
func MustUnmarshalUBD(cdc *codec.Codec, value []byte) UnbondingDelegation {
ubd, err := UnmarshalUBD(cdc, value)
if err != nil {
panic(err)
}
return ubd
}
// unmarshal a unbonding delegation from a store key and value
func UnmarshalUBD(cdc *codec.Codec, key, value []byte) (ubd UnbondingDelegation, err error) {
var storeValue ubdValue
err = cdc.UnmarshalBinaryLengthPrefixed(value, &storeValue)
if err != nil {
return
}
addrs := key[1:] // remove prefix bytes
if len(addrs) != 2*sdk.AddrLen {
err = fmt.Errorf("%v", ErrBadDelegationAddr(DefaultCodespace).Data())
return
}
delAddr := sdk.AccAddress(addrs[:sdk.AddrLen])
valAddr := sdk.ValAddress(addrs[sdk.AddrLen:])
return UnbondingDelegation{
DelegatorAddr: delAddr,
ValidatorAddr: valAddr,
CreationHeight: storeValue.CreationHeight,
MinTime: storeValue.MinTime,
InitialBalance: storeValue.InitialBalance,
Balance: storeValue.Balance,
}, nil
// unmarshal a unbonding delegation from a store value
func UnmarshalUBD(cdc *codec.Codec, value []byte) (ubd UnbondingDelegation, err error) {
err = cdc.UnmarshalBinaryLengthPrefixed(value, &ubd)
return ubd, err
}
// nolint
@ -206,65 +147,24 @@ type Redelegation struct {
SharesDst sdk.Dec `json:"shares_dst"` // amount of destination shares redelegating
}
type redValue struct {
CreationHeight int64
MinTime time.Time
InitialBalance sdk.Coin
Balance sdk.Coin
SharesSrc sdk.Dec
SharesDst sdk.Dec
}
// return the redelegation without fields contained within the key for the store
// return the redelegation
func MustMarshalRED(cdc *codec.Codec, red Redelegation) []byte {
val := redValue{
red.CreationHeight,
red.MinTime,
red.InitialBalance,
red.Balance,
red.SharesSrc,
red.SharesDst,
}
return cdc.MustMarshalBinaryLengthPrefixed(val)
return cdc.MustMarshalBinaryLengthPrefixed(red)
}
// unmarshal a redelegation from a store key and value
func MustUnmarshalRED(cdc *codec.Codec, key, value []byte) Redelegation {
red, err := UnmarshalRED(cdc, key, value)
// unmarshal a redelegation from a store value
func MustUnmarshalRED(cdc *codec.Codec, value []byte) Redelegation {
red, err := UnmarshalRED(cdc, value)
if err != nil {
panic(err)
}
return red
}
// unmarshal a redelegation from a store key and value
func UnmarshalRED(cdc *codec.Codec, key, value []byte) (red Redelegation, err error) {
var storeValue redValue
err = cdc.UnmarshalBinaryLengthPrefixed(value, &storeValue)
if err != nil {
return
}
addrs := key[1:] // remove prefix bytes
if len(addrs) != 3*sdk.AddrLen {
err = fmt.Errorf("%v", ErrBadRedelegationAddr(DefaultCodespace).Data())
return
}
delAddr := sdk.AccAddress(addrs[:sdk.AddrLen])
valSrcAddr := sdk.ValAddress(addrs[sdk.AddrLen : 2*sdk.AddrLen])
valDstAddr := sdk.ValAddress(addrs[2*sdk.AddrLen:])
return Redelegation{
DelegatorAddr: delAddr,
ValidatorSrcAddr: valSrcAddr,
ValidatorDstAddr: valDstAddr,
CreationHeight: storeValue.CreationHeight,
MinTime: storeValue.MinTime,
InitialBalance: storeValue.InitialBalance,
Balance: storeValue.Balance,
SharesSrc: storeValue.SharesSrc,
SharesDst: storeValue.SharesDst,
}, nil
// unmarshal a redelegation from a store value
func UnmarshalRED(cdc *codec.Codec, value []byte) (red Redelegation, err error) {
err = cdc.UnmarshalBinaryLengthPrefixed(value, &red)
return red, err
}
// nolint

View File

@ -55,71 +55,24 @@ func NewValidator(operator sdk.ValAddress, pubKey crypto.PubKey, description Des
}
}
// what's kept in the store value
type validatorValue struct {
ConsPubKey crypto.PubKey
Jailed bool
Status sdk.BondStatus
Tokens sdk.Int
DelegatorShares sdk.Dec
Description Description
BondHeight int64
UnbondingHeight int64
UnbondingMinTime time.Time
Commission Commission
}
// return the redelegation without fields contained within the key for the store
// return the redelegation
func MustMarshalValidator(cdc *codec.Codec, validator Validator) []byte {
val := validatorValue{
ConsPubKey: validator.ConsPubKey,
Jailed: validator.Jailed,
Status: validator.Status,
Tokens: validator.Tokens,
DelegatorShares: validator.DelegatorShares,
Description: validator.Description,
BondHeight: validator.BondHeight,
UnbondingHeight: validator.UnbondingHeight,
UnbondingMinTime: validator.UnbondingMinTime,
Commission: validator.Commission,
}
return cdc.MustMarshalBinaryLengthPrefixed(val)
return cdc.MustMarshalBinaryLengthPrefixed(validator)
}
// unmarshal a redelegation from a store key and value
func MustUnmarshalValidator(cdc *codec.Codec, operatorAddr, value []byte) Validator {
validator, err := UnmarshalValidator(cdc, operatorAddr, value)
// unmarshal a redelegation from a store value
func MustUnmarshalValidator(cdc *codec.Codec, value []byte) Validator {
validator, err := UnmarshalValidator(cdc, value)
if err != nil {
panic(err)
}
return validator
}
// unmarshal a redelegation from a store key and value
func UnmarshalValidator(cdc *codec.Codec, operatorAddr, value []byte) (validator Validator, err error) {
if len(operatorAddr) != sdk.AddrLen {
err = fmt.Errorf("%v", ErrBadValidatorAddr(DefaultCodespace).Data())
return
}
var storeValue validatorValue
err = cdc.UnmarshalBinaryLengthPrefixed(value, &storeValue)
if err != nil {
return
}
return Validator{
OperatorAddr: operatorAddr,
ConsPubKey: storeValue.ConsPubKey,
Jailed: storeValue.Jailed,
Tokens: storeValue.Tokens,
Status: storeValue.Status,
DelegatorShares: storeValue.DelegatorShares,
Description: storeValue.Description,
BondHeight: storeValue.BondHeight,
UnbondingHeight: storeValue.UnbondingHeight,
UnbondingMinTime: storeValue.UnbondingMinTime,
Commission: storeValue.Commission,
}, nil
// unmarshal a redelegation from a store value
func UnmarshalValidator(cdc *codec.Codec, value []byte) (validator Validator, err error) {
err = cdc.UnmarshalBinaryLengthPrefixed(value, &validator)
return validator, err
}
// HumanReadableString returns a human readable string representation of a