added querier redelegation
This commit is contained in:
parent
15c209324f
commit
d378db3128
|
@ -20,6 +20,7 @@ const (
|
||||||
QueryDelegator = "delegator"
|
QueryDelegator = "delegator"
|
||||||
QueryDelegation = "delegation"
|
QueryDelegation = "delegation"
|
||||||
QueryUnbondingDelegation = "unbondingDelegation"
|
QueryUnbondingDelegation = "unbondingDelegation"
|
||||||
|
QueryRedelegation = "redelegation"
|
||||||
QueryDelegatorValidators = "delegatorValidators"
|
QueryDelegatorValidators = "delegatorValidators"
|
||||||
QueryDelegatorValidator = "delegatorValidator"
|
QueryDelegatorValidator = "delegatorValidator"
|
||||||
QueryPool = "pool"
|
QueryPool = "pool"
|
||||||
|
@ -88,6 +89,14 @@ type QueryBondsParams struct {
|
||||||
ValidatorAddr sdk.ValAddress
|
ValidatorAddr sdk.ValAddress
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// defines the params for the following queries:
|
||||||
|
// - 'custom/stake/redelegation'
|
||||||
|
type QueryRedelegationParams struct {
|
||||||
|
DelegatorAddr sdk.AccAddress
|
||||||
|
SrcValidatorAddr sdk.ValAddress
|
||||||
|
DstValidatorAddr sdk.ValAddress
|
||||||
|
}
|
||||||
|
|
||||||
func queryValidators(ctx sdk.Context, cdc *codec.Codec, k keep.Keeper) (res []byte, err sdk.Error) {
|
func queryValidators(ctx sdk.Context, cdc *codec.Codec, k keep.Keeper) (res []byte, err sdk.Error) {
|
||||||
stakeParams := k.GetParams(ctx)
|
stakeParams := k.GetParams(ctx)
|
||||||
validators := k.GetValidators(ctx, stakeParams.MaxValidators)
|
validators := k.GetValidators(ctx, stakeParams.MaxValidators)
|
||||||
|
@ -283,6 +292,26 @@ func queryUnbondingDelegation(ctx sdk.Context, cdc *codec.Codec, req abci.Reques
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func queryRedelegation(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, ¶ms)
|
||||||
|
if errRes != nil {
|
||||||
|
return []byte{}, sdk.ErrUnknownRequest(string(req.Data))
|
||||||
|
}
|
||||||
|
|
||||||
|
redel, found := k.GetRedelegation(ctx, params.DelegatorAddr, params.SrcValidatorAddr, params.DstValidatorAddr)
|
||||||
|
if !found {
|
||||||
|
return []byte{}, types.ErrNoRedelegation(types.DefaultCodespace)
|
||||||
|
}
|
||||||
|
|
||||||
|
res, errRes = codec.MarshalJSONIndent(cdc, redel)
|
||||||
|
if errRes != nil {
|
||||||
|
return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", errRes.Error()))
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
func queryPool(ctx sdk.Context, cdc *codec.Codec, k keep.Keeper) (res []byte, err sdk.Error) {
|
func queryPool(ctx sdk.Context, cdc *codec.Codec, k keep.Keeper) (res []byte, err sdk.Error) {
|
||||||
pool := k.GetPool(ctx)
|
pool := k.GetPool(ctx)
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,14 @@ func newTestBondQuery(delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newTestRedelegationQuery(delegatorAddr sdk.AccAddress, srcValidatorAddr sdk.ValAddress, dstValidatorAddr sdk.ValAddress) QueryRedelegationParams {
|
||||||
|
return QueryRedelegationParams{
|
||||||
|
DelegatorAddr: delegatorAddr,
|
||||||
|
SrcValidatorAddr: srcValidatorAddr,
|
||||||
|
DstValidatorAddr: dstValidatorAddr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewQuerier(t *testing.T) {
|
func TestNewQuerier(t *testing.T) {
|
||||||
cdc := codec.New()
|
cdc := codec.New()
|
||||||
ctx, _, keeper := keep.CreateTestInput(t, false, 1000)
|
ctx, _, keeper := keep.CreateTestInput(t, false, 1000)
|
||||||
|
@ -189,6 +197,11 @@ func TestQueryDelegation(t *testing.T) {
|
||||||
pool := keeper.GetPool(ctx)
|
pool := keeper.GetPool(ctx)
|
||||||
keeper.SetValidatorByPowerIndex(ctx, val1, pool)
|
keeper.SetValidatorByPowerIndex(ctx, val1, pool)
|
||||||
|
|
||||||
|
val2 := types.NewValidator(addrVal2, pk2, types.Description{})
|
||||||
|
keeper.SetValidator(ctx, val2)
|
||||||
|
pool = keeper.GetPool(ctx)
|
||||||
|
keeper.SetValidatorByPowerIndex(ctx, val2, pool)
|
||||||
|
|
||||||
keeper.Delegate(ctx, addrAcc2, sdk.NewCoin("steak", sdk.NewInt(20)), val1, true)
|
keeper.Delegate(ctx, addrAcc2, sdk.NewCoin("steak", sdk.NewInt(20)), val1, true)
|
||||||
|
|
||||||
// apply TM updates
|
// apply TM updates
|
||||||
|
@ -334,6 +347,27 @@ func TestQueryDelegation(t *testing.T) {
|
||||||
|
|
||||||
_, err = queryDelegatorUnbondingDelegations(ctx, cdc, query, keeper)
|
_, err = queryDelegatorUnbondingDelegations(ctx, cdc, query, keeper)
|
||||||
require.NotNil(t, err)
|
require.NotNil(t, err)
|
||||||
|
|
||||||
|
// Query redelegation
|
||||||
|
redel, err := keeper.BeginRedelegation(ctx, addrAcc2, val1.OperatorAddr, val2.OperatorAddr, sdk.NewDec(10))
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
bz, errRes = cdc.MarshalJSON(newTestRedelegationQuery(addrAcc2, val1.OperatorAddr, val2.OperatorAddr))
|
||||||
|
require.Nil(t, errRes)
|
||||||
|
|
||||||
|
query = abci.RequestQuery{
|
||||||
|
Path: "/custom/stake/redelegation",
|
||||||
|
Data: bz,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err = queryRedelegation(ctx, cdc, query, keeper)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
var redelRes types.Redelegation
|
||||||
|
errRes = cdc.UnmarshalJSON(res, &redelRes)
|
||||||
|
require.Nil(t, errRes)
|
||||||
|
|
||||||
|
require.Equal(t, redel, redelRes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestQueryRedelegations(t *testing.T) {
|
func TestQueryRedelegations(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue