Skip to content

Commit

Permalink
single endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
sunnya97 committed Nov 4, 2018
1 parent 5544ff1 commit 011e180
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 124 deletions.
39 changes: 16 additions & 23 deletions client/lcd/lcd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -581,23 +581,23 @@ func TestBonding(t *testing.T) {
require.Len(t, delegatorDels, 1)
require.Equal(t, "30.0000000000", delegatorDels[0].GetShares().String())

redelegation := getDelegatorRedelegations(t, port, addr, operAddrs[0], operAddrs[1])
redelegation := getRedelegations(t, port, addr, operAddrs[0], operAddrs[1])
require.Len(t, redelegation, 1)
require.Equal(t, "30", redelegation[0].Balance.Amount.String())

delegatorUbds := getDelegatorUnbondingDelegations(t, port, addr)
require.Len(t, delegatorUbds, 1)
require.Equal(t, "30", delegatorUbds[0].Balance.Amount.String())

delegatorReds := getDelegatorRedelegations(t, port, addr, nil, nil)
delegatorReds := getRedelegations(t, port, addr, nil, nil)
require.Len(t, delegatorReds, 1)
require.Equal(t, "30", delegatorReds[0].Balance.Amount.String())

validatorUbds := getValidatorUnbondingDelegations(t, port, operAddrs[0])
require.Len(t, validatorUbds, 1)
require.Equal(t, "30", validatorUbds[0].Balance.Amount.String())

validatorReds := getValidatorRedelegations(t, port, operAddrs[0])
validatorReds := getRedelegations(t, port, nil, operAddrs[0], nil)
require.Len(t, validatorReds, 1)
require.Equal(t, "30", validatorReds[0].Balance.Amount.String())

Expand Down Expand Up @@ -1021,19 +1021,23 @@ func getDelegatorUnbondingDelegations(t *testing.T, port string, delegatorAddr s
return ubds
}

func getDelegatorRedelegations(t *testing.T, port string, delegatorAddr sdk.AccAddress, srcValidatorAddr sdk.ValAddress, dstValidatorAddr sdk.ValAddress) []stake.Redelegation {
func getRedelegations(t *testing.T, port string, delegatorAddr sdk.AccAddress, srcValidatorAddr sdk.ValAddress, dstValidatorAddr sdk.ValAddress) []stake.Redelegation {
var res *http.Response
var body string

if srcValidatorAddr.Empty() && dstValidatorAddr.Empty() {
res, body = Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/redelegations", delegatorAddr), nil)
} else if !srcValidatorAddr.Empty() && dstValidatorAddr.Empty() {
res, body = Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/redelegations?validator_from=%s", delegatorAddr, srcValidatorAddr), nil)
} else if srcValidatorAddr.Empty() && !dstValidatorAddr.Empty() {
res, body = Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/redelegations?validator_to=%s", delegatorAddr, dstValidatorAddr), nil)
} else {
res, body = Request(t, port, "GET", fmt.Sprintf("/stake/delegators/%s/redelegations?validator_from=%s&validator_to=%s", delegatorAddr, srcValidatorAddr, dstValidatorAddr), nil)
endpoint := "/stake/redelegations?"

if !delegatorAddr.Empty() {
endpoint += fmt.Sprintf("delegator=%s&", delegatorAddr)
}
if !srcValidatorAddr.Empty() {
endpoint += fmt.Sprintf("validator_from=%s&", srcValidatorAddr)
}
if !dstValidatorAddr.Empty() {
endpoint += fmt.Sprintf("validator_to=%s&", dstValidatorAddr)
}

res, body = Request(t, port, "GET", endpoint, nil)

require.Equal(t, http.StatusOK, res.StatusCode, body)

Expand Down Expand Up @@ -1232,17 +1236,6 @@ func getValidatorUnbondingDelegations(t *testing.T, port string, validatorAddr s
return ubds
}

func getValidatorRedelegations(t *testing.T, port string, validatorAddr sdk.ValAddress) []stake.Redelegation {
res, body := Request(t, port, "GET", fmt.Sprintf("/stake/validators/%s/redelegations", validatorAddr.String()), nil)
require.Equal(t, http.StatusOK, res.StatusCode, body)

var reds []stake.Redelegation
err := cdc.UnmarshalJSON([]byte(body), &reds)
require.Nil(t, err)

return reds
}

// ============= Governance Module ================

func getProposal(t *testing.T, port string, proposalID int64) gov.Proposal {
Expand Down
61 changes: 22 additions & 39 deletions x/stake/client/rest/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Co

// Get all redelegations from a delegator
r.HandleFunc(
"/stake/delegators/{delegatorAddr}/redelegations",
delegatorRedelegationsHandlerFn(cliCtx, cdc),
"/stake/redelegations",
redelegationsHandlerFn(cliCtx, cdc),
).Methods("GET")

// Get all staking txs (i.e msgs) from a delegator
Expand Down Expand Up @@ -67,10 +67,10 @@ func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Co
unbondingDelegationHandlerFn(cliCtx, cdc),
).Methods("GET")

// Query all redelegations of delegator
// Query redelegations (filters in query params)
r.HandleFunc(
"/stake/delegators/{delegatorAddr}/redelegations",
redelegationHandlerFn(cliCtx, cdc),
"/stake/redelegations",
redelegationsHandlerFn(cliCtx, cdc),
).Methods("GET")

// Get all validators
Expand All @@ -91,12 +91,6 @@ func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Co
validatorUnbondingDelegationsHandlerFn(cliCtx, cdc),
).Methods("GET")

// Get all outgoing redelegations from a validator
r.HandleFunc(
"/stake/validators/{validatorAddr}/redelegations",
validatorRedelegationsHandlerFn(cliCtx, cdc),
).Methods("GET")

// Get the current state of the staking pool
r.HandleFunc(
"/stake/pool",
Expand All @@ -121,11 +115,6 @@ func delegatorUnbondingDelegationsHandlerFn(cliCtx context.CLIContext, cdc *code
return queryDelegator(cliCtx, cdc, "custom/stake/delegatorUnbondingDelegations")
}

// HTTP request handler to query a delegator redelegations
func delegatorRedelegationsHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) http.HandlerFunc {
return queryDelegator(cliCtx, cdc, "custom/stake/delegatorRedelegations")
}

// HTTP request handler to query all staking txs (msgs) from a delegator
func delegatorTxsHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
Expand Down Expand Up @@ -202,36 +191,35 @@ func unbondingDelegationHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) h
return queryBonds(cliCtx, cdc, "custom/stake/unbondingDelegation")
}

// HTTP request handler to query an redelegation
func redelegationHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) http.HandlerFunc {
// HTTP request handler to query redelegations
func redelegationsHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
bech32delegator := vars["delegatorAddr"]
var params stake.QueryRedelegationParams

delegatorAddr, err := sdk.AccAddressFromBech32(bech32delegator)
if err != nil {
utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
return
}
bechDelegatorAddr := r.URL.Query().Get("delegator")
bechSrcValidatorAddr := r.URL.Query().Get("validator_from")
bechDstValidatorAddr := r.URL.Query().Get("validator_to")

params := stake.QueryRedelegationParams{
DelegatorAddr: delegatorAddr,
if len(bechDelegatorAddr) != 0 {
delegatorAddr, err := sdk.AccAddressFromBech32(bechDelegatorAddr)
if err != nil {
utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
return
}
params.DelegatorAddr = delegatorAddr
}

bechSrcVoterAddr := r.URL.Query().Get("validator_from")
bechDstVoterAddr := r.URL.Query().Get("validator_to")

if len(bechSrcVoterAddr) != 0 {
srcValidatorAddr, err := sdk.ValAddressFromBech32(bechSrcVoterAddr)
if len(bechSrcValidatorAddr) != 0 {
srcValidatorAddr, err := sdk.ValAddressFromBech32(bechSrcValidatorAddr)
if err != nil {
utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
return
}
params.SrcValidatorAddr = srcValidatorAddr
}

if len(bechDstVoterAddr) != 0 {
dstValidatorAddr, err := sdk.ValAddressFromBech32(bechDstVoterAddr)
if len(bechDstValidatorAddr) != 0 {
dstValidatorAddr, err := sdk.ValAddressFromBech32(bechDstValidatorAddr)
if err != nil {
utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
return
Expand Down Expand Up @@ -291,11 +279,6 @@ func validatorUnbondingDelegationsHandlerFn(cliCtx context.CLIContext, cdc *code
return queryValidator(cliCtx, cdc, "custom/stake/validatorUnbondingDelegations")
}

// HTTP request handler to query all redelegations from a source validator
func validatorRedelegationsHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) http.HandlerFunc {
return queryValidator(cliCtx, cdc, "custom/stake/validatorRedelegations")
}

// HTTP request handler to query the pool information
func poolHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
Expand Down
52 changes: 6 additions & 46 deletions x/stake/querier/queryable.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,11 @@ const (
QueryValidator = "validator"
QueryDelegatorDelegations = "delegatorDelegations"
QueryDelegatorUnbondingDelegations = "delegatorUnbondingDelegations"
QueryDelegatorRedelegations = "delegatorRedelegations"
QueryRedelegations = "redelegations"
QueryValidatorUnbondingDelegations = "validatorUnbondingDelegations"
QueryValidatorRedelegations = "validatorRedelegations"
QueryDelegator = "delegator"
QueryDelegation = "delegation"
QueryUnbondingDelegation = "unbondingDelegation"
QueryRedelegation = "redelegation"
QueryDelegatorValidators = "delegatorValidators"
QueryDelegatorValidator = "delegatorValidator"
QueryPool = "pool"
Expand All @@ -37,8 +35,6 @@ func NewQuerier(k keep.Keeper, cdc *codec.Codec) sdk.Querier {
return queryValidator(ctx, cdc, req, k)
case QueryValidatorUnbondingDelegations:
return queryValidatorUnbondingDelegations(ctx, cdc, req, k)
case QueryValidatorRedelegations:
return queryValidatorRedelegations(ctx, cdc, req, k)
case QueryDelegation:
return queryDelegation(ctx, cdc, req, k)
case QueryUnbondingDelegation:
Expand All @@ -47,8 +43,8 @@ func NewQuerier(k keep.Keeper, cdc *codec.Codec) sdk.Querier {
return queryDelegatorDelegations(ctx, cdc, req, k)
case QueryDelegatorUnbondingDelegations:
return queryDelegatorUnbondingDelegations(ctx, cdc, req, k)
case QueryDelegatorRedelegations:
return queryDelegatorRedelegations(ctx, cdc, req, k)
case QueryRedelegations:
return queryRedelegations(ctx, cdc, req, k)
case QueryDelegatorValidators:
return queryDelegatorValidators(ctx, cdc, req, k)
case QueryDelegatorValidator:
Expand Down Expand Up @@ -145,23 +141,6 @@ func queryValidatorUnbondingDelegations(ctx sdk.Context, cdc *codec.Codec, req a
return res, nil
}

func queryValidatorRedelegations(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, &params)
if errRes != nil {
return []byte{}, sdk.ErrUnknownAddress("")
}

redelegations := k.GetRedelegationsFromValidator(ctx, params.ValidatorAddr)

res, errRes = codec.MarshalJSONIndent(cdc, redelegations)
if errRes != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", errRes.Error()))
}
return res, nil
}

func queryDelegatorDelegations(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k keep.Keeper) (res []byte, err sdk.Error) {
var params QueryDelegatorParams

Expand Down Expand Up @@ -196,23 +175,6 @@ func queryDelegatorUnbondingDelegations(ctx sdk.Context, cdc *codec.Codec, req a
return res, nil
}

func queryDelegatorRedelegations(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k keep.Keeper) (res []byte, err sdk.Error) {
var params QueryRedelegationParams

errRes := cdc.UnmarshalJSON(req.Data, &params)
if errRes != nil {
return []byte{}, sdk.ErrUnknownAddress("")
}

redelegations := k.GetAllRedelegations(ctx, params.DelegatorAddr, params.SrcValidatorAddr, params.DstValidatorAddr)

res, errRes = codec.MarshalJSONIndent(cdc, redelegations)
if errRes != nil {
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", errRes.Error()))
}
return res, nil
}

func queryDelegatorValidators(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery, k keep.Keeper) (res []byte, err sdk.Error) {
var params QueryDelegatorParams

Expand Down Expand Up @@ -300,18 +262,16 @@ func queryRedelegations(ctx sdk.Context, cdc *codec.Codec, req abci.RequestQuery
return []byte{}, sdk.ErrUnknownRequest(string(req.Data))
}

if params.DelegatorAddr.Empty() {
return []byte{}, types.ErrBadRedelegationAddr(types.DefaultCodespace)
}

var redels []types.Redelegation

if !params.SrcValidatorAddr.Empty() && !params.DstValidatorAddr.Empty() {
if !params.DelegatorAddr.Empty() && !params.SrcValidatorAddr.Empty() && !params.DstValidatorAddr.Empty() {
redel, found := k.GetRedelegation(ctx, params.DelegatorAddr, params.SrcValidatorAddr, params.DstValidatorAddr)
if !found {
return []byte{}, types.ErrNoRedelegation(types.DefaultCodespace)
}
redels = []types.Redelegation{redel}
} else if params.DelegatorAddr.Empty() && !params.SrcValidatorAddr.Empty() && params.DstValidatorAddr.Empty() {
redels = k.GetRedelegationsFromValidator(ctx, params.SrcValidatorAddr)
} else {
redels = k.GetAllRedelegations(ctx, params.DelegatorAddr, params.SrcValidatorAddr, params.DstValidatorAddr)
}
Expand Down
29 changes: 15 additions & 14 deletions x/stake/querier/queryable_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,6 @@ func TestNewQuerier(t *testing.T) {
_, err = querier(ctx, []string{"validatorUnbondingDelegations"}, query)
require.Nil(t, err)

_, err = querier(ctx, []string{"validatorRedelegations"}, query)
require.Nil(t, err)

queryDelParams := newTestDelegatorQuery(addrAcc2)
bz, errRes = cdc.MarshalJSON(queryDelParams)
require.Nil(t, errRes)
Expand All @@ -109,10 +106,14 @@ func TestNewQuerier(t *testing.T) {
_, err = querier(ctx, []string{"delegatorUnbondingDelegations"}, query)
require.Nil(t, err)

_, err = querier(ctx, []string{"delegatorRedelegations"}, query)
_, err = querier(ctx, []string{"delegatorValidators"}, query)
require.Nil(t, err)

_, err = querier(ctx, []string{"delegatorValidators"}, query)
bz, errRes = cdc.MarshalJSON(newTestRedelegationQuery(nil, nil, nil))
require.Nil(t, errRes)
query.Data = bz

_, err = querier(ctx, []string{"redelegations"}, query)
require.Nil(t, err)
}

Expand Down Expand Up @@ -356,7 +357,7 @@ func TestQueryDelegation(t *testing.T) {
require.Nil(t, errRes)

query = abci.RequestQuery{
Path: "/custom/stake/redelegation",
Path: "/custom/stake/redelegations",
Data: bz,
}

Expand Down Expand Up @@ -390,16 +391,16 @@ func TestQueryRedelegations(t *testing.T) {
require.True(t, found)

// delegator redelegations
queryDelegatorParams := newTestDelegatorQuery(addrAcc2)
bz, errRes := cdc.MarshalJSON(queryDelegatorParams)
queryRedelegationParams := newTestRedelegationQuery(addrAcc2, nil, nil)
bz, errRes := cdc.MarshalJSON(queryRedelegationParams)
require.Nil(t, errRes)

query := abci.RequestQuery{
Path: "/custom/stake/delegatorRedelegations",
Path: "/custom/stake/redelegations",
Data: bz,
}

res, err := queryDelegatorRedelegations(ctx, cdc, query, keeper)
res, err := queryRedelegations(ctx, cdc, query, keeper)
require.Nil(t, err)

var redsRes []types.Redelegation
Expand All @@ -409,16 +410,16 @@ func TestQueryRedelegations(t *testing.T) {
require.Equal(t, redelegation, redsRes[0])

// validator redelegations
queryValidatorParams := newTestValidatorQuery(val1.GetOperator())
bz, errRes = cdc.MarshalJSON(queryValidatorParams)
queryRedelegationParams = newTestRedelegationQuery(nil, val1.GetOperator(), nil)
bz, errRes = cdc.MarshalJSON(queryRedelegationParams)
require.Nil(t, errRes)

query = abci.RequestQuery{
Path: "/custom/stake/validatorRedelegations",
Path: "/custom/stake/redelegations",
Data: bz,
}

res, err = queryValidatorRedelegations(ctx, cdc, query, keeper)
res, err = queryRedelegations(ctx, cdc, query, keeper)
require.Nil(t, err)

errRes = cdc.UnmarshalJSON(res, &redsRes)
Expand Down
3 changes: 1 addition & 2 deletions x/stake/stake.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,11 @@ const (
QueryValidators = querier.QueryValidators
QueryValidator = querier.QueryValidator
QueryValidatorUnbondingDelegations = querier.QueryValidatorUnbondingDelegations
QueryValidatorRedelegations = querier.QueryValidatorRedelegations
QueryDelegation = querier.QueryDelegation
QueryUnbondingDelegation = querier.QueryUnbondingDelegation
QueryDelegatorDelegations = querier.QueryDelegatorDelegations
QueryDelegatorUnbondingDelegations = querier.QueryDelegatorUnbondingDelegations
QueryDelegatorRedelegations = querier.QueryDelegatorRedelegations
QueryRedelegations = querier.QueryRedelegations
QueryDelegatorValidators = querier.QueryDelegatorValidators
QueryDelegatorValidator = querier.QueryDelegatorValidator
QueryPool = querier.QueryPool
Expand Down

0 comments on commit 011e180

Please sign in to comment.