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 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) {
|
func (k Keeper) GetAllDelegations(ctx sdk.Context) (delegations []types.Delegation) {
|
||||||
store := ctx.KVStore(k.storeKey)
|
store := ctx.KVStore(k.storeKey)
|
||||||
iterator := sdk.KVStorePrefixIterator(store, DelegationKey)
|
iterator := sdk.KVStorePrefixIterator(store, DelegationKey)
|
||||||
|
@ -37,6 +37,21 @@ func (k Keeper) GetAllDelegations(ctx sdk.Context) (delegations []types.Delegati
|
||||||
return delegations
|
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
|
// return a given amount of all the delegations from a delegator
|
||||||
func (k Keeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress,
|
func (k Keeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress,
|
||||||
maxRetrieve uint16) (delegations []types.Delegation) {
|
maxRetrieve uint16) (delegations []types.Delegation) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ const (
|
||||||
QueryDelegatorDelegations = "delegatorDelegations"
|
QueryDelegatorDelegations = "delegatorDelegations"
|
||||||
QueryDelegatorUnbondingDelegations = "delegatorUnbondingDelegations"
|
QueryDelegatorUnbondingDelegations = "delegatorUnbondingDelegations"
|
||||||
QueryDelegatorRedelegations = "delegatorRedelegations"
|
QueryDelegatorRedelegations = "delegatorRedelegations"
|
||||||
|
QueryValidatorDelegations = "validatorDelegations"
|
||||||
QueryValidatorUnbondingDelegations = "validatorUnbondingDelegations"
|
QueryValidatorUnbondingDelegations = "validatorUnbondingDelegations"
|
||||||
QueryValidatorRedelegations = "validatorRedelegations"
|
QueryValidatorRedelegations = "validatorRedelegations"
|
||||||
QueryDelegator = "delegator"
|
QueryDelegator = "delegator"
|
||||||
|
@ -35,6 +36,8 @@ func NewQuerier(k keep.Keeper, cdc *codec.Codec) sdk.Querier {
|
||||||
return queryValidators(ctx, cdc, k)
|
return queryValidators(ctx, cdc, k)
|
||||||
case QueryValidator:
|
case QueryValidator:
|
||||||
return queryValidator(ctx, cdc, req, k)
|
return queryValidator(ctx, cdc, req, k)
|
||||||
|
case QueryValidatorDelegations:
|
||||||
|
return queryValidatorDelegations(ctx, cdc, req, k)
|
||||||
case QueryValidatorUnbondingDelegations:
|
case QueryValidatorUnbondingDelegations:
|
||||||
return queryValidatorUnbondingDelegations(ctx, cdc, req, k)
|
return queryValidatorUnbondingDelegations(ctx, cdc, req, k)
|
||||||
case QueryValidatorRedelegations:
|
case QueryValidatorRedelegations:
|
||||||
|
@ -74,6 +77,7 @@ type QueryDelegatorParams struct {
|
||||||
|
|
||||||
// defines the params for the following queries:
|
// defines the params for the following queries:
|
||||||
// - 'custom/stake/validator'
|
// - 'custom/stake/validator'
|
||||||
|
// - 'custom/stake/validatorDelegations'
|
||||||
// - 'custom/stake/validatorUnbondingDelegations'
|
// - 'custom/stake/validatorUnbondingDelegations'
|
||||||
// - 'custom/stake/validatorRedelegations'
|
// - 'custom/stake/validatorRedelegations'
|
||||||
type QueryValidatorParams struct {
|
type QueryValidatorParams struct {
|
||||||
|
@ -128,6 +132,23 @@ func queryValidator(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k
|
||||||
return res, nil
|
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) {
|
func queryValidatorUnbondingDelegations(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k keep.Keeper) (res []byte, err sdk.Error) {
|
||||||
var params QueryValidatorParams
|
var params QueryValidatorParams
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,9 @@ func TestNewQuerier(t *testing.T) {
|
||||||
_, err = querier(ctx, []string{"validator"}, query)
|
_, err = querier(ctx, []string{"validator"}, query)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
_, err = querier(ctx, []string{"validatorDelegations"}, query)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
_, err = querier(ctx, []string{"validatorUnbondingDelegations"}, query)
|
_, err = querier(ctx, []string{"validatorUnbondingDelegations"}, query)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
@ -301,9 +304,32 @@ func TestQueryDelegation(t *testing.T) {
|
||||||
_, err = queryDelegation(ctx, cdc, query, keeper)
|
_, err = queryDelegation(ctx, cdc, query, keeper)
|
||||||
require.NotNil(t, err)
|
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
|
// Query unbonging delegation
|
||||||
keeper.BeginUnbonding(ctx, addrAcc2, val1.OperatorAddr, sdk.NewDec(10))
|
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{
|
query = abci.RequestQuery{
|
||||||
Path: "/custom/stake/unbondingDelegation",
|
Path: "/custom/stake/unbondingDelegation",
|
||||||
Data: bz,
|
Data: bz,
|
||||||
|
|
Loading…
Reference in New Issue