Skip to content

Commit 621d2fb

Browse files
Merge pull request #313 from terra-money/chore/v0.4.x/queries
feat: implement simplified unbonding and rewards queries
2 parents d7fd5df + a77d5aa commit 621d2fb

File tree

13 files changed

+1936
-367
lines changed

13 files changed

+1936
-367
lines changed

docs/proto/proto-docs.md

Lines changed: 78 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,14 @@
5454
- [QueryAllianceDelegationResponse](#alliance.alliance.QueryAllianceDelegationResponse)
5555
- [QueryAllianceDelegationRewardsRequest](#alliance.alliance.QueryAllianceDelegationRewardsRequest)
5656
- [QueryAllianceDelegationRewardsResponse](#alliance.alliance.QueryAllianceDelegationRewardsResponse)
57+
- [QueryAllianceRedelegationsByDelegatorRequest](#alliance.alliance.QueryAllianceRedelegationsByDelegatorRequest)
58+
- [QueryAllianceRedelegationsByDelegatorResponse](#alliance.alliance.QueryAllianceRedelegationsByDelegatorResponse)
5759
- [QueryAllianceRedelegationsRequest](#alliance.alliance.QueryAllianceRedelegationsRequest)
5860
- [QueryAllianceRedelegationsResponse](#alliance.alliance.QueryAllianceRedelegationsResponse)
5961
- [QueryAllianceRequest](#alliance.alliance.QueryAllianceRequest)
6062
- [QueryAllianceResponse](#alliance.alliance.QueryAllianceResponse)
63+
- [QueryAllianceUnbondingsByDelegatorRequest](#alliance.alliance.QueryAllianceUnbondingsByDelegatorRequest)
64+
- [QueryAllianceUnbondingsByDelegatorResponse](#alliance.alliance.QueryAllianceUnbondingsByDelegatorResponse)
6165
- [QueryAllianceUnbondingsByDenomAndDelegatorRequest](#alliance.alliance.QueryAllianceUnbondingsByDenomAndDelegatorRequest)
6266
- [QueryAllianceUnbondingsByDenomAndDelegatorResponse](#alliance.alliance.QueryAllianceUnbondingsByDenomAndDelegatorResponse)
6367
- [QueryAllianceUnbondingsRequest](#alliance.alliance.QueryAllianceUnbondingsRequest)
@@ -675,6 +679,7 @@ UnbondingDelegation defines an unbonding object with relevant metadata.
675679
| `completion_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | completion_time is the unix time for unbonding completion. |
676680
| `validator_address` | [string](#string) | | validator_address is the bech32-encoded address of the validator. |
677681
| `amount` | [string](#string) | | amount defines the tokens to receive at completion. |
682+
| `denom` | [string](#string) | | alliance denom of the unbonding delegation |
678683

679684

680685

@@ -810,6 +815,38 @@ AllianceDelegation
810815

811816

812817

818+
<a name="alliance.alliance.QueryAllianceRedelegationsByDelegatorRequest"></a>
819+
820+
### QueryAllianceRedelegationsByDelegatorRequest
821+
822+
823+
824+
| Field | Type | Label | Description |
825+
| ----- | ---- | ----- | ----------- |
826+
| `delegator_addr` | [string](#string) | | |
827+
| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | |
828+
829+
830+
831+
832+
833+
834+
<a name="alliance.alliance.QueryAllianceRedelegationsByDelegatorResponse"></a>
835+
836+
### QueryAllianceRedelegationsByDelegatorResponse
837+
838+
839+
840+
| Field | Type | Label | Description |
841+
| ----- | ---- | ----- | ----------- |
842+
| `redelegations` | [RedelegationEntry](#alliance.alliance.RedelegationEntry) | repeated | |
843+
| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | |
844+
845+
846+
847+
848+
849+
813850
<a name="alliance.alliance.QueryAllianceRedelegationsRequest"></a>
814851

815852
### QueryAllianceRedelegationsRequest
@@ -873,6 +910,37 @@ Alliance
873910

874911

875912

913+
<a name="alliance.alliance.QueryAllianceUnbondingsByDelegatorRequest"></a>
914+
915+
### QueryAllianceUnbondingsByDelegatorRequest
916+
AllianceDelegation
917+
918+
919+
| Field | Type | Label | Description |
920+
| ----- | ---- | ----- | ----------- |
921+
| `delegator_addr` | [string](#string) | | |
922+
| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | |
923+
924+
925+
926+
927+
928+
929+
<a name="alliance.alliance.QueryAllianceUnbondingsByDelegatorResponse"></a>
930+
931+
### QueryAllianceUnbondingsByDelegatorResponse
932+
933+
934+
935+
| Field | Type | Label | Description |
936+
| ----- | ---- | ----- | ----------- |
937+
| `unbondings` | [UnbondingDelegation](#alliance.alliance.UnbondingDelegation) | repeated | |
938+
939+
940+
941+
942+
943+
876944
<a name="alliance.alliance.QueryAllianceUnbondingsByDenomAndDelegatorRequest"></a>
877945

878946
### QueryAllianceUnbondingsByDenomAndDelegatorRequest
@@ -1107,18 +1175,20 @@ Params
11071175

11081176
| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |
11091177
| ----------- | ------------ | ------------- | ------------| ------- | -------- |
1110-
| `Params` | [QueryParamsRequest](#alliance.alliance.QueryParamsRequest) | [QueryParamsResponse](#alliance.alliance.QueryParamsResponse) | | GET|/terra/alliances/params|
1111-
| `Alliances` | [QueryAlliancesRequest](#alliance.alliance.QueryAlliancesRequest) | [QueryAlliancesResponse](#alliance.alliance.QueryAlliancesResponse) | Query paginated alliances | GET|/terra/alliances|
1112-
| `AllAlliancesDelegations` | [QueryAllAlliancesDelegationsRequest](#alliance.alliance.QueryAllAlliancesDelegationsRequest) | [QueryAlliancesDelegationsResponse](#alliance.alliance.QueryAlliancesDelegationsResponse) | Query all paginated alliance delegations | GET|/terra/alliances/delegations|
1178+
| `Params` | [QueryParamsRequest](#alliance.alliance.QueryParamsRequest) | [QueryParamsResponse](#alliance.alliance.QueryParamsResponse) | Query Alliance module parameters more info about the params https://docs.alliance.money/tech/parameters | GET|/terra/alliances/params|
1179+
| `Alliances` | [QueryAlliancesRequest](#alliance.alliance.QueryAlliancesRequest) | [QueryAlliancesResponse](#alliance.alliance.QueryAlliancesResponse) | Query all alliances with pagination | GET|/terra/alliances|
1180+
| `AllAlliancesDelegations` | [QueryAllAlliancesDelegationsRequest](#alliance.alliance.QueryAllAlliancesDelegationsRequest) | [QueryAlliancesDelegationsResponse](#alliance.alliance.QueryAlliancesDelegationsResponse) | Query all alliances delegations with pagination | GET|/terra/alliances/delegations|
11131181
| `AllianceValidator` | [QueryAllianceValidatorRequest](#alliance.alliance.QueryAllianceValidatorRequest) | [QueryAllianceValidatorResponse](#alliance.alliance.QueryAllianceValidatorResponse) | Query alliance validator | GET|/terra/alliances/validators/{validator_addr}|
11141182
| `AllAllianceValidators` | [QueryAllAllianceValidatorsRequest](#alliance.alliance.QueryAllAllianceValidatorsRequest) | [QueryAllianceValidatorsResponse](#alliance.alliance.QueryAllianceValidatorsResponse) | Query all paginated alliance validators | GET|/terra/alliances/validators|
11151183
| `AlliancesDelegation` | [QueryAlliancesDelegationsRequest](#alliance.alliance.QueryAlliancesDelegationsRequest) | [QueryAlliancesDelegationsResponse](#alliance.alliance.QueryAlliancesDelegationsResponse) | Query all paginated alliance delegations for a delegator addr | GET|/terra/alliances/delegations/{delegator_addr}|
11161184
| `AlliancesDelegationByValidator` | [QueryAlliancesDelegationByValidatorRequest](#alliance.alliance.QueryAlliancesDelegationByValidatorRequest) | [QueryAlliancesDelegationsResponse](#alliance.alliance.QueryAlliancesDelegationsResponse) | Query all paginated alliance delegations for a delegator addr and validator_addr | GET|/terra/alliances/delegations/{delegator_addr}/{validator_addr}|
1117-
| `AllianceDelegation` | [QueryAllianceDelegationRequest](#alliance.alliance.QueryAllianceDelegationRequest) | [QueryAllianceDelegationResponse](#alliance.alliance.QueryAllianceDelegationResponse) | Query a delegation to an alliance by delegator addr, validator_addr and denom | GET|/terra/alliances/delegations/{delegator_addr}/{validator_addr}/{denom}|
1118-
| `AllianceDelegationRewards` | [QueryAllianceDelegationRewardsRequest](#alliance.alliance.QueryAllianceDelegationRewardsRequest) | [QueryAllianceDelegationRewardsResponse](#alliance.alliance.QueryAllianceDelegationRewardsResponse) | Query for rewards by delegator addr, validator_addr and denom | GET|/terra/alliances/rewards/{delegator_addr}/{validator_addr}/{denom}|
1119-
| `AllianceUnbondingsByDenomAndDelegator` | [QueryAllianceUnbondingsByDenomAndDelegatorRequest](#alliance.alliance.QueryAllianceUnbondingsByDenomAndDelegatorRequest) | [QueryAllianceUnbondingsByDenomAndDelegatorResponse](#alliance.alliance.QueryAllianceUnbondingsByDenomAndDelegatorResponse) | Query for rewards by delegator addr, validator_addr and denom | GET|/terra/alliances/unbondings/{denom}/{delegator_addr}|
1120-
| `AllianceUnbondings` | [QueryAllianceUnbondingsRequest](#alliance.alliance.QueryAllianceUnbondingsRequest) | [QueryAllianceUnbondingsResponse](#alliance.alliance.QueryAllianceUnbondingsResponse) | Query for rewards by delegator addr, validator_addr and denom | GET|/terra/alliances/unbondings/{denom}/{delegator_addr}/{validator_addr}|
1121-
| `AllianceRedelegations` | [QueryAllianceRedelegationsRequest](#alliance.alliance.QueryAllianceRedelegationsRequest) | [QueryAllianceRedelegationsResponse](#alliance.alliance.QueryAllianceRedelegationsResponse) | Query redelegations by denom and delegator address | GET|/terra/alliances/redelegations/{denom}/{delegator_addr}|
1185+
| `AllianceDelegation` | [QueryAllianceDelegationRequest](#alliance.alliance.QueryAllianceDelegationRequest) | [QueryAllianceDelegationResponse](#alliance.alliance.QueryAllianceDelegationResponse) | Query a specific delegation by delegator addr, validator addr and denom | GET|/terra/alliances/delegations/{delegator_addr}/{validator_addr}/{denom}|
1186+
| `AllianceDelegationRewards` | [QueryAllianceDelegationRewardsRequest](#alliance.alliance.QueryAllianceDelegationRewardsRequest) | [QueryAllianceDelegationRewardsResponse](#alliance.alliance.QueryAllianceDelegationRewardsResponse) | Query a specific delegation rewards by delegator addr, validator addr and denom | GET|/terra/alliances/rewards/{delegator_addr}/{validator_addr}/{denom}|
1187+
| `AllianceUnbondingsByDelegator` | [QueryAllianceUnbondingsByDelegatorRequest](#alliance.alliance.QueryAllianceUnbondingsByDelegatorRequest) | [QueryAllianceUnbondingsByDelegatorResponse](#alliance.alliance.QueryAllianceUnbondingsByDelegatorResponse) | Query unbondings by delegator address | GET|/terra/alliances/unbondings/{delegator_addr}|
1188+
| `AllianceUnbondingsByDenomAndDelegator` | [QueryAllianceUnbondingsByDenomAndDelegatorRequest](#alliance.alliance.QueryAllianceUnbondingsByDenomAndDelegatorRequest) | [QueryAllianceUnbondingsByDenomAndDelegatorResponse](#alliance.alliance.QueryAllianceUnbondingsByDenomAndDelegatorResponse) | Query unbondings by denom, delegator addr | GET|/terra/alliances/unbondings/{denom}/{delegator_addr}|
1189+
| `AllianceUnbondings` | [QueryAllianceUnbondingsRequest](#alliance.alliance.QueryAllianceUnbondingsRequest) | [QueryAllianceUnbondingsResponse](#alliance.alliance.QueryAllianceUnbondingsResponse) | Query unbondings by denom, delegator addr, validator addr | GET|/terra/alliances/unbondings/{denom}/{delegator_addr}/{validator_addr}|
1190+
| `AllianceRedelegationsByDelegator` | [QueryAllianceRedelegationsByDelegatorRequest](#alliance.alliance.QueryAllianceRedelegationsByDelegatorRequest) | [QueryAllianceRedelegationsByDelegatorResponse](#alliance.alliance.QueryAllianceRedelegationsByDelegatorResponse) | Query paginated redelegations delegator addr | GET|/terra/alliances/redelegations/{delegator_addr}|
1191+
| `AllianceRedelegations` | [QueryAllianceRedelegationsRequest](#alliance.alliance.QueryAllianceRedelegationsRequest) | [QueryAllianceRedelegationsResponse](#alliance.alliance.QueryAllianceRedelegationsResponse) | Query paginated redelegations by denom and delegator addr | GET|/terra/alliances/redelegations/{denom}/{delegator_addr}|
11221192
| `Alliance` | [QueryAllianceRequest](#alliance.alliance.QueryAllianceRequest) | [QueryAllianceResponse](#alliance.alliance.QueryAllianceResponse) | Query a specific alliance by denom | GET|/terra/alliances/{denom}|
11231193

11241194
<!-- end services -->

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module github.com/terra-money/alliance
22

33
go 1.21
44

5-
toolchain go1.21.5
5+
toolchain go1.21.4
66

77
require (
88
cosmossdk.io/core v0.11.0

proto/alliance/alliance/query.proto

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,19 @@ import "alliance/alliance/redelegations.proto";
1414
option go_package = "github.com/terra-money/alliance/x/alliance/types";
1515

1616
service Query {
17+
18+
// Query Alliance module parameters more info about the params
19+
// https://docs.alliance.money/tech/parameters
1720
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
1821
option (google.api.http).get = "/terra/alliances/params";
1922
}
2023

21-
// Query paginated alliances
24+
// Query all alliances with pagination
2225
rpc Alliances(QueryAlliancesRequest) returns (QueryAlliancesResponse) {
2326
option (google.api.http).get = "/terra/alliances";
2427
}
2528

26-
// Query all paginated alliance delegations
29+
// Query all alliances delegations with pagination
2730
rpc AllAlliancesDelegations(QueryAllAlliancesDelegationsRequest) returns (QueryAlliancesDelegationsResponse) {
2831
option (google.api.http).get = "/terra/alliances/delegations";
2932
}
@@ -48,27 +51,37 @@ service Query {
4851
option (google.api.http).get = "/terra/alliances/delegations/{delegator_addr}/{validator_addr}";
4952
}
5053

51-
// Query a delegation to an alliance by delegator addr, validator_addr and denom
54+
// Query a specific delegation by delegator addr, validator addr and denom
5255
rpc AllianceDelegation(QueryAllianceDelegationRequest) returns (QueryAllianceDelegationResponse) {
5356
option (google.api.http).get = "/terra/alliances/delegations/{delegator_addr}/{validator_addr}/{denom}";
5457
}
5558

56-
// Query for rewards by delegator addr, validator_addr and denom
59+
// Query a specific delegation rewards by delegator addr, validator addr and denom
5760
rpc AllianceDelegationRewards(QueryAllianceDelegationRewardsRequest) returns (QueryAllianceDelegationRewardsResponse) {
5861
option (google.api.http).get = "/terra/alliances/rewards/{delegator_addr}/{validator_addr}/{denom}";
5962
}
6063

61-
// Query for rewards by delegator addr, validator_addr and denom
64+
// Query unbondings by delegator address
65+
rpc AllianceUnbondingsByDelegator(QueryAllianceUnbondingsByDelegatorRequest) returns (QueryAllianceUnbondingsByDelegatorResponse) {
66+
option (google.api.http).get = "/terra/alliances/unbondings/{delegator_addr}";
67+
}
68+
69+
// Query unbondings by denom, delegator addr
6270
rpc AllianceUnbondingsByDenomAndDelegator(QueryAllianceUnbondingsByDenomAndDelegatorRequest) returns (QueryAllianceUnbondingsByDenomAndDelegatorResponse) {
6371
option (google.api.http).get = "/terra/alliances/unbondings/{denom}/{delegator_addr}";
6472
}
6573

66-
// Query for rewards by delegator addr, validator_addr and denom
74+
// Query unbondings by denom, delegator addr, validator addr
6775
rpc AllianceUnbondings(QueryAllianceUnbondingsRequest) returns (QueryAllianceUnbondingsResponse) {
6876
option (google.api.http).get = "/terra/alliances/unbondings/{denom}/{delegator_addr}/{validator_addr}";
6977
}
7078

71-
// Query redelegations by denom and delegator address
79+
// Query paginated redelegations delegator addr
80+
rpc AllianceRedelegationsByDelegator(QueryAllianceRedelegationsByDelegatorRequest) returns (QueryAllianceRedelegationsByDelegatorResponse) {
81+
option (google.api.http).get = "/terra/alliances/redelegations/{delegator_addr}";
82+
}
83+
84+
// Query paginated redelegations by denom and delegator addr
7285
rpc AllianceRedelegations(QueryAllianceRedelegationsRequest) returns (QueryAllianceRedelegationsResponse) {
7386
option (google.api.http).get = "/terra/alliances/redelegations/{denom}/{delegator_addr}";
7487
}
@@ -222,6 +235,23 @@ message QueryAllianceValidatorsResponse {
222235
cosmos.base.query.v1beta1.PageResponse pagination = 2;
223236
}
224237

238+
// AllianceDelegation
239+
message QueryAllianceUnbondingsByDelegatorRequest {
240+
option (gogoproto.equal) = false;
241+
option (gogoproto.goproto_getters) = false;
242+
243+
string delegator_addr = 1;
244+
cosmos.base.query.v1beta1.PageRequest pagination = 3;
245+
}
246+
247+
message QueryAllianceUnbondingsByDelegatorResponse {
248+
option (gogoproto.equal) = false;
249+
option (gogoproto.goproto_getters) = false;
250+
251+
repeated UnbondingDelegation unbondings = 1 [(gogoproto.nullable) = false];
252+
}
253+
254+
225255
// AllianceDelegation
226256
message QueryAllianceUnbondingsByDenomAndDelegatorRequest {
227257
option (gogoproto.equal) = false;
@@ -272,6 +302,23 @@ message QueryAllianceRedelegationsResponse {
272302
option (gogoproto.equal) = false;
273303
option (gogoproto.goproto_getters) = false;
274304

305+
repeated RedelegationEntry redelegations = 1 [(gogoproto.nullable) = false];
306+
cosmos.base.query.v1beta1.PageResponse pagination = 2;
307+
}
308+
309+
310+
message QueryAllianceRedelegationsByDelegatorRequest {
311+
option (gogoproto.equal) = false;
312+
option (gogoproto.goproto_getters) = false;
313+
314+
string delegator_addr = 1;
315+
cosmos.base.query.v1beta1.PageRequest pagination = 2;
316+
}
317+
318+
message QueryAllianceRedelegationsByDelegatorResponse {
319+
option (gogoproto.equal) = false;
320+
option (gogoproto.goproto_getters) = false;
321+
275322
repeated RedelegationEntry redelegations = 1 [(gogoproto.nullable) = false];
276323
cosmos.base.query.v1beta1.PageResponse pagination = 2;
277324
}

proto/alliance/alliance/unbonding.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,6 @@ message UnbondingDelegation {
2222
(gogoproto.customtype) = "cosmossdk.io/math.Int",
2323
(gogoproto.nullable) = false
2424
];
25+
// alliance denom of the unbonding delegation
26+
string denom = 4;
2527
}

x/alliance/keeper/grpc_query.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,21 @@ func (k QueryServer) AllianceDelegation(c context.Context, req *types.QueryAllia
430430
}, nil
431431
}
432432

433+
func (k QueryServer) AllianceUnbondingsByDelegator(c context.Context, req *types.QueryAllianceUnbondingsByDelegatorRequest) (*types.QueryAllianceUnbondingsByDelegatorResponse, error) {
434+
ctx := sdk.UnwrapSDKContext(c)
435+
436+
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
437+
if err != nil {
438+
return nil, err
439+
}
440+
441+
res, err := k.GetUnbondingsByDelegator(ctx, delAddr)
442+
443+
return &types.QueryAllianceUnbondingsByDelegatorResponse{
444+
Unbondings: res,
445+
}, err
446+
}
447+
433448
func (k QueryServer) AllianceUnbondingsByDenomAndDelegator(c context.Context, req *types.QueryAllianceUnbondingsByDenomAndDelegatorRequest) (*types.QueryAllianceUnbondingsByDenomAndDelegatorResponse, error) {
434449
ctx := sdk.UnwrapSDKContext(c)
435450

@@ -524,6 +539,51 @@ func (k QueryServer) AllianceRedelegations(c context.Context, req *types.QueryAl
524539
}, err
525540
}
526541

542+
func (k QueryServer) AllianceRedelegationsByDelegator(c context.Context, req *types.QueryAllianceRedelegationsByDelegatorRequest) (*types.QueryAllianceRedelegationsByDelegatorResponse, error) {
543+
ctx := sdk.UnwrapSDKContext(c)
544+
545+
delAddr, err := sdk.AccAddressFromBech32(req.DelegatorAddr)
546+
if err != nil {
547+
return nil, err
548+
}
549+
550+
// Get the key-value module store using the store key
551+
store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx))
552+
553+
// Get the part of the store that keeps assets
554+
redelegationsStore := prefix.NewStore(store, types.GetRedelegationsKeyByDelegator(delAddr))
555+
556+
var redelegationEntries []types.RedelegationEntry
557+
558+
// Paginate the assets store based on PageRequest
559+
pageRes, err := query.Paginate(redelegationsStore, req.Pagination, func(key []byte, value []byte) error {
560+
var redelegation types.Redelegation
561+
k.cdc.MustUnmarshal(value, &redelegation)
562+
// get the completion time from the latest bytes of the key
563+
completionTime := types.ParseRedelegationPaginationKeyTime(key)
564+
565+
redelegationEntry := types.RedelegationEntry{
566+
DelegatorAddress: redelegation.DelegatorAddress,
567+
SrcValidatorAddress: redelegation.SrcValidatorAddress,
568+
DstValidatorAddress: redelegation.DstValidatorAddress,
569+
Balance: redelegation.Balance,
570+
CompletionTime: completionTime,
571+
}
572+
573+
redelegationEntries = append(redelegationEntries, redelegationEntry)
574+
return nil
575+
})
576+
// Throw an error if pagination failed
577+
if err != nil {
578+
return nil, status.Error(codes.Internal, err.Error())
579+
}
580+
581+
return &types.QueryAllianceRedelegationsByDelegatorResponse{
582+
Redelegations: redelegationEntries,
583+
Pagination: pageRes,
584+
}, err
585+
}
586+
527587
func NewQueryServerImpl(keeper Keeper) types.QueryServer {
528588
return &QueryServer{
529589
Keeper: keeper,

0 commit comments

Comments
 (0)