added validatorDelegations querier endpoint
This commit is contained in:
parent
d378db3128
commit
9c6ef3e23c
|
@ -24,7 +24,7 @@ func (k Keeper) GetDelegation(ctx sdk.Context,
|
|||
return delegation, true
|
||||
}
|
||||
|
||||
// return all delegations used during genesis dump
|
||||
// return all delegations to a specific validator. Useful for querier.
|
||||
func (k Keeper) GetAllDelegations(ctx sdk.Context) (delegations []types.Delegation) {
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
iterator := sdk.KVStorePrefixIterator(store, DelegationKey)
|
||||
|
@ -37,6 +37,21 @@ func (k Keeper) GetAllDelegations(ctx sdk.Context) (delegations []types.Delegati
|
|||
return delegations
|
||||
}
|
||||
|
||||
// return all delegations used during genesis dump
|
||||
func (k Keeper) GetAllDelegationsToValidator(ctx sdk.Context, valAddr sdk.ValAddress) (delegations []types.Delegation) {
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
iterator := sdk.KVStorePrefixIterator(store, DelegationKey)
|
||||
defer iterator.Close()
|
||||
|
||||
for ; iterator.Valid(); iterator.Next() {
|
||||
delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Key(), iterator.Value())
|
||||
if delegation.GetValidator().Equals(valAddr) {
|
||||
delegations = append(delegations, delegation)
|
||||
}
|
||||
}
|
||||
return delegations
|
||||
}
|
||||
|
||||
// return a given amount of all the delegations from a delegator
|
||||
func (k Keeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress,
|
||||
maxRetrieve uint16) (delegations []types.Delegation) {
|
||||
|
|
|
@ -15,6 +15,7 @@ const (
|
|||
QueryDelegatorDelegations = "delegatorDelegations"
|
||||
QueryDelegatorUnbondingDelegations = "delegatorUnbondingDelegations"
|
||||
QueryDelegatorRedelegations = "delegatorRedelegations"
|
||||
QueryValidatorDelegations = "validatorDelegations"
|
||||
QueryValidatorUnbondingDelegations = "validatorUnbondingDelegations"
|
||||
QueryValidatorRedelegations = "validatorRedelegations"
|
||||
QueryDelegator = "delegator"
|
||||
|
@ -35,6 +36,8 @@ func NewQuerier(k keep.Keeper, cdc *codec.Codec) sdk.Querier {
|
|||
return queryValidators(ctx, cdc, k)
|
||||
case QueryValidator:
|
||||
return queryValidator(ctx, cdc, req, k)
|
||||
case QueryValidatorDelegations:
|
||||
return queryValidatorDelegations(ctx, cdc, req, k)
|
||||
case QueryValidatorUnbondingDelegations:
|
||||
return queryValidatorUnbondingDelegations(ctx, cdc, req, k)
|
||||
case QueryValidatorRedelegations:
|
||||
|
@ -74,6 +77,7 @@ type QueryDelegatorParams struct {
|
|||
|
||||
// defines the params for the following queries:
|
||||
// - 'custom/stake/validator'
|
||||
// - 'custom/stake/validatorDelegations'
|
||||
// - 'custom/stake/validatorUnbondingDelegations'
|
||||
// - 'custom/stake/validatorRedelegations'
|
||||
type QueryValidatorParams struct {
|
||||
|
@ -128,6 +132,23 @@ func queryValidator(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k
|
|||
return res, nil
|
||||
}
|
||||
|
||||
func queryValidatorDelegations(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k keep.Keeper) (res []byte, err sdk.Error) {
|
||||
var params QueryValidatorParams
|
||||
|
||||
errRes := cdc.UnmarshalJSON(req.Data, ¶ms)
|
||||
if errRes != nil {
|
||||
return []byte{}, sdk.ErrUnknownAddress("")
|
||||
}
|
||||
|
||||
delegations := k.GetAllDelegationsToValidator(ctx, params.ValidatorAddr)
|
||||
|
||||
res, errRes = codec.MarshalJSONIndent(cdc, delegations)
|
||||
if errRes != nil {
|
||||
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", errRes.Error()))
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func queryValidatorUnbondingDelegations(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k keep.Keeper) (res []byte, err sdk.Error) {
|
||||
var params QueryValidatorParams
|
||||
|
||||
|
|
|
@ -90,6 +90,9 @@ func TestNewQuerier(t *testing.T) {
|
|||
_, err = querier(ctx, []string{"validator"}, query)
|
||||
require.Nil(t, err)
|
||||
|
||||
_, err = querier(ctx, []string{"validatorDelegations"}, query)
|
||||
require.Nil(t, err)
|
||||
|
||||
_, err = querier(ctx, []string{"validatorUnbondingDelegations"}, query)
|
||||
require.Nil(t, err)
|
||||
|
||||
|
@ -301,9 +304,32 @@ func TestQueryDelegation(t *testing.T) {
|
|||
_, err = queryDelegation(ctx, cdc, query, keeper)
|
||||
require.NotNil(t, err)
|
||||
|
||||
// Query validator delegations
|
||||
|
||||
bz, errRes = cdc.MarshalJSON(newTestValidatorQuery(addrVal1))
|
||||
require.Nil(t, errRes)
|
||||
|
||||
query = abci.RequestQuery{
|
||||
Path: "custom/stake/validatorDelegations",
|
||||
Data: bz,
|
||||
}
|
||||
|
||||
res, err = queryValidatorDelegations(ctx, cdc, query, keeper)
|
||||
require.Nil(t, err)
|
||||
|
||||
var delegationsRes []types.Delegation
|
||||
errRes = cdc.UnmarshalJSON(res, &delegationsRes)
|
||||
require.Nil(t, errRes)
|
||||
|
||||
require.Equal(t, delegationsRes[0], delegation)
|
||||
|
||||
// Query unbonging delegation
|
||||
keeper.BeginUnbonding(ctx, addrAcc2, val1.OperatorAddr, sdk.NewDec(10))
|
||||
|
||||
queryBondParams = newTestBondQuery(addrAcc2, addrVal1)
|
||||
bz, errRes = cdc.MarshalJSON(queryBondParams)
|
||||
require.Nil(t, errRes)
|
||||
|
||||
query = abci.RequestQuery{
|
||||
Path: "/custom/stake/unbondingDelegation",
|
||||
Data: bz,
|
||||
|
|
Loading…
Reference in New Issue