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 * SDK
* [stake] \#2513 Validator power type from Dec -> Int * [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. * [\#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 * 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]) 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) { switch viper.Get(cli.OutputFlag) {
case "text": case "text":
@ -81,8 +81,7 @@ func GetCmdQueryValidators(storeName string, cdc *codec.Codec) *cobra.Command {
// parse out the validators // parse out the validators
var validators []stake.Validator var validators []stake.Validator
for _, kv := range resKVs { for _, kv := range resKVs {
addr := kv.Key[1:] validator := types.MustUnmarshalValidator(cdc, kv.Value)
validator := types.MustUnmarshalValidator(cdc, addr, kv.Value)
validators = append(validators, validator) validators = append(validators, validator)
} }
@ -209,8 +208,7 @@ func GetCmdQueryDelegation(storeName string, cdc *codec.Codec) *cobra.Command {
} }
// parse out the delegation // parse out the delegation
delegation, err := types.UnmarshalDelegation(cdc, res)
delegation, err := types.UnmarshalDelegation(cdc, key, res)
if err != nil { if err != nil {
return err return err
} }
@ -267,7 +265,7 @@ func GetCmdQueryDelegations(storeName string, cdc *codec.Codec) *cobra.Command {
// parse out the validators // parse out the validators
var delegations []stake.Delegation var delegations []stake.Delegation
for _, kv := range resKVs { for _, kv := range resKVs {
delegation := types.MustUnmarshalDelegation(cdc, kv.Key, kv.Value) delegation := types.MustUnmarshalDelegation(cdc, kv.Value)
delegations = append(delegations, delegation) delegations = append(delegations, delegation)
} }
@ -347,7 +345,7 @@ func GetCmdQueryUnbondingDelegation(storeName string, cdc *codec.Codec) *cobra.C
} }
// parse out the unbonding delegation // parse out the unbonding delegation
ubd := types.MustUnmarshalUBD(cdc, key, res) ubd := types.MustUnmarshalUBD(cdc, res)
switch viper.Get(cli.OutputFlag) { switch viper.Get(cli.OutputFlag) {
case "text": case "text":
@ -401,7 +399,7 @@ func GetCmdQueryUnbondingDelegations(storeName string, cdc *codec.Codec) *cobra.
// parse out the unbonding delegations // parse out the unbonding delegations
var ubds []stake.UnbondingDelegation var ubds []stake.UnbondingDelegation
for _, kv := range resKVs { for _, kv := range resKVs {
ubd := types.MustUnmarshalUBD(cdc, kv.Key, kv.Value) ubd := types.MustUnmarshalUBD(cdc, kv.Value)
ubds = append(ubds, ubd) ubds = append(ubds, ubd)
} }
@ -451,7 +449,7 @@ func GetCmdQueryRedelegation(storeName string, cdc *codec.Codec) *cobra.Command
} }
// parse out the unbonding delegation // parse out the unbonding delegation
red := types.MustUnmarshalRED(cdc, key, res) red := types.MustUnmarshalRED(cdc, res)
switch viper.Get(cli.OutputFlag) { switch viper.Get(cli.OutputFlag) {
case "text": case "text":
@ -505,7 +503,7 @@ func GetCmdQueryRedelegations(storeName string, cdc *codec.Codec) *cobra.Command
// parse out the validators // parse out the validators
var reds []stake.Redelegation var reds []stake.Redelegation
for _, kv := range resKVs { for _, kv := range resKVs {
red := types.MustUnmarshalRED(cdc, kv.Key, kv.Value) red := types.MustUnmarshalRED(cdc, kv.Value)
reds = append(reds, red) 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) 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 { if err != nil {
return sdk.ZeroDec(), err return sdk.ZeroDec(), err
} }

View File

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

View File

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

View File

@ -16,8 +16,7 @@ func (k Keeper) IterateValidators(ctx sdk.Context, fn func(index int64, validato
iterator := sdk.KVStorePrefixIterator(store, ValidatorsKey) iterator := sdk.KVStorePrefixIterator(store, ValidatorsKey)
i := int64(0) i := int64(0)
for ; iterator.Valid(); iterator.Next() { for ; iterator.Valid(); iterator.Next() {
addr := iterator.Key()[1:] validator := types.MustUnmarshalValidator(k.cdc, iterator.Value())
validator := types.MustUnmarshalValidator(k.cdc, addr, iterator.Value())
stop := fn(i, validator) // XXX is this safe will the validator unexposed fields be able to get written to? stop := fn(i, validator) // XXX is this safe will the validator unexposed fields be able to get written to?
if stop { if stop {
break break
@ -136,7 +135,7 @@ func (k Keeper) IterateDelegations(ctx sdk.Context, delAddr sdk.AccAddress,
delegatorPrefixKey := GetDelegationsKey(delAddr) delegatorPrefixKey := GetDelegationsKey(delAddr)
iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) //smallest to largest iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) //smallest to largest
for i := int64(0); iterator.Valid(); iterator.Next() { 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) stop := fn(i, del)
if stop { if stop {
break 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 // 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} cachedVal := cachedValidator{validator, strValue}
k.validatorCache[strValue] = cachedValidator{validator, strValue} k.validatorCache[strValue] = cachedValidator{validator, strValue}
k.validatorCacheList.PushBack(cachedVal) 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) delete(k.validatorCache, valToRemove.marshalled)
} }
validator = types.MustUnmarshalValidator(k.cdc, addr, value) validator = types.MustUnmarshalValidator(k.cdc, value)
return validator, true return validator, true
} }
@ -217,8 +217,7 @@ func (k Keeper) GetAllValidators(ctx sdk.Context) (validators []types.Validator)
defer iterator.Close() defer iterator.Close()
for ; iterator.Valid(); iterator.Next() { for ; iterator.Valid(); iterator.Next() {
addr := iterator.Key()[1:] validator := types.MustUnmarshalValidator(k.cdc, iterator.Value())
validator := types.MustUnmarshalValidator(k.cdc, addr, iterator.Value())
validators = append(validators, validator) validators = append(validators, validator)
} }
return validators return validators
@ -234,8 +233,7 @@ func (k Keeper) GetValidators(ctx sdk.Context, maxRetrieve uint16) (validators [
i := 0 i := 0
for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() { for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {
addr := iterator.Key()[1:] validator := types.MustUnmarshalValidator(k.cdc, iterator.Value())
validator := types.MustUnmarshalValidator(k.cdc, addr, iterator.Value())
validators[i] = validator validators[i] = validator
i++ i++
} }

View File

@ -35,50 +35,24 @@ type Delegation struct {
Shares sdk.Dec `json:"shares"` Shares sdk.Dec `json:"shares"`
} }
type delegationValue struct { // return the delegation
Shares sdk.Dec
}
// return the delegation without fields contained within the key for the store
func MustMarshalDelegation(cdc *codec.Codec, delegation Delegation) []byte { func MustMarshalDelegation(cdc *codec.Codec, delegation Delegation) []byte {
val := delegationValue{ return cdc.MustMarshalBinaryLengthPrefixed(delegation)
delegation.Shares,
}
return cdc.MustMarshalBinaryLengthPrefixed(val)
} }
// return the delegation without fields contained within the key for the store // return the delegation
func MustUnmarshalDelegation(cdc *codec.Codec, key, value []byte) Delegation { func MustUnmarshalDelegation(cdc *codec.Codec, value []byte) Delegation {
delegation, err := UnmarshalDelegation(cdc, key, value) delegation, err := UnmarshalDelegation(cdc, value)
if err != nil { if err != nil {
panic(err) panic(err)
} }
return delegation return delegation
} }
// return the delegation without fields contained within the key for the store // return the delegation
func UnmarshalDelegation(cdc *codec.Codec, key, value []byte) (delegation Delegation, err error) { func UnmarshalDelegation(cdc *codec.Codec, value []byte) (delegation Delegation, err error) {
var storeValue delegationValue err = cdc.UnmarshalBinaryLengthPrefixed(value, &delegation)
err = cdc.UnmarshalBinaryLengthPrefixed(value, &storeValue) return delegation, err
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
} }
// nolint // nolint
@ -118,57 +92,24 @@ type UnbondingDelegation struct {
Balance sdk.Coin `json:"balance"` // atoms to receive at completion Balance sdk.Coin `json:"balance"` // atoms to receive at completion
} }
type ubdValue struct { // return the unbonding delegation
CreationHeight int64
MinTime time.Time
InitialBalance sdk.Coin
Balance sdk.Coin
}
// return the unbonding delegation without fields contained within the key for the store
func MustMarshalUBD(cdc *codec.Codec, ubd UnbondingDelegation) []byte { func MustMarshalUBD(cdc *codec.Codec, ubd UnbondingDelegation) []byte {
val := ubdValue{ return cdc.MustMarshalBinaryLengthPrefixed(ubd)
ubd.CreationHeight,
ubd.MinTime,
ubd.InitialBalance,
ubd.Balance,
}
return cdc.MustMarshalBinaryLengthPrefixed(val)
} }
// unmarshal a unbonding delegation from a store key and value // unmarshal a unbonding delegation from a store value
func MustUnmarshalUBD(cdc *codec.Codec, key, value []byte) UnbondingDelegation { func MustUnmarshalUBD(cdc *codec.Codec, value []byte) UnbondingDelegation {
ubd, err := UnmarshalUBD(cdc, key, value) ubd, err := UnmarshalUBD(cdc, value)
if err != nil { if err != nil {
panic(err) panic(err)
} }
return ubd return ubd
} }
// unmarshal a unbonding delegation from a store key and value // unmarshal a unbonding delegation from a store value
func UnmarshalUBD(cdc *codec.Codec, key, value []byte) (ubd UnbondingDelegation, err error) { func UnmarshalUBD(cdc *codec.Codec, value []byte) (ubd UnbondingDelegation, err error) {
var storeValue ubdValue err = cdc.UnmarshalBinaryLengthPrefixed(value, &ubd)
err = cdc.UnmarshalBinaryLengthPrefixed(value, &storeValue) return ubd, err
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
} }
// nolint // nolint
@ -206,65 +147,24 @@ type Redelegation struct {
SharesDst sdk.Dec `json:"shares_dst"` // amount of destination shares redelegating SharesDst sdk.Dec `json:"shares_dst"` // amount of destination shares redelegating
} }
type redValue struct { // return the redelegation
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
func MustMarshalRED(cdc *codec.Codec, red Redelegation) []byte { func MustMarshalRED(cdc *codec.Codec, red Redelegation) []byte {
val := redValue{ return cdc.MustMarshalBinaryLengthPrefixed(red)
red.CreationHeight,
red.MinTime,
red.InitialBalance,
red.Balance,
red.SharesSrc,
red.SharesDst,
}
return cdc.MustMarshalBinaryLengthPrefixed(val)
} }
// unmarshal a redelegation from a store key and value // unmarshal a redelegation from a store value
func MustUnmarshalRED(cdc *codec.Codec, key, value []byte) Redelegation { func MustUnmarshalRED(cdc *codec.Codec, value []byte) Redelegation {
red, err := UnmarshalRED(cdc, key, value) red, err := UnmarshalRED(cdc, value)
if err != nil { if err != nil {
panic(err) panic(err)
} }
return red return red
} }
// unmarshal a redelegation from a store key and value // unmarshal a redelegation from a store value
func UnmarshalRED(cdc *codec.Codec, key, value []byte) (red Redelegation, err error) { func UnmarshalRED(cdc *codec.Codec, value []byte) (red Redelegation, err error) {
var storeValue redValue err = cdc.UnmarshalBinaryLengthPrefixed(value, &red)
err = cdc.UnmarshalBinaryLengthPrefixed(value, &storeValue) return red, err
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
} }
// nolint // nolint

View File

@ -55,71 +55,24 @@ func NewValidator(operator sdk.ValAddress, pubKey crypto.PubKey, description Des
} }
} }
// what's kept in the store value // return the redelegation
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
func MustMarshalValidator(cdc *codec.Codec, validator Validator) []byte { func MustMarshalValidator(cdc *codec.Codec, validator Validator) []byte {
val := validatorValue{ return cdc.MustMarshalBinaryLengthPrefixed(validator)
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)
} }
// unmarshal a redelegation from a store key and value // unmarshal a redelegation from a store value
func MustUnmarshalValidator(cdc *codec.Codec, operatorAddr, value []byte) Validator { func MustUnmarshalValidator(cdc *codec.Codec, value []byte) Validator {
validator, err := UnmarshalValidator(cdc, operatorAddr, value) validator, err := UnmarshalValidator(cdc, value)
if err != nil { if err != nil {
panic(err) panic(err)
} }
return validator return validator
} }
// unmarshal a redelegation from a store key and value // unmarshal a redelegation from a store value
func UnmarshalValidator(cdc *codec.Codec, operatorAddr, value []byte) (validator Validator, err error) { func UnmarshalValidator(cdc *codec.Codec, value []byte) (validator Validator, err error) {
if len(operatorAddr) != sdk.AddrLen { err = cdc.UnmarshalBinaryLengthPrefixed(value, &validator)
err = fmt.Errorf("%v", ErrBadValidatorAddr(DefaultCodespace).Data()) return validator, err
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
} }
// HumanReadableString returns a human readable string representation of a // HumanReadableString returns a human readable string representation of a