Skip to content

Commit 9d57fab

Browse files
mergify[bot]jayy04
andauthored
[CT-834] new endpoint for stateful orders (#1501) (#1509)
* [CT-834] new endpoint for stateful orders * fix test * indexer (cherry picked from commit c24be3a) Co-authored-by: jayy04 <103467857+jayy04@users.noreply.github.com>
1 parent 203198f commit 9d57fab

File tree

10 files changed

+955
-86
lines changed

10 files changed

+955
-86
lines changed

indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.rpc.Query.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Rpc } from "../../helpers";
22
import * as _m0 from "protobufjs/minimal";
33
import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate";
4-
import { QueryGetClobPairRequest, QueryClobPairResponse, QueryAllClobPairRequest, QueryClobPairAllResponse, MevNodeToNodeCalculationRequest, MevNodeToNodeCalculationResponse, QueryEquityTierLimitConfigurationRequest, QueryEquityTierLimitConfigurationResponse, QueryBlockRateLimitConfigurationRequest, QueryBlockRateLimitConfigurationResponse, QueryLiquidationsConfigurationRequest, QueryLiquidationsConfigurationResponse, StreamOrderbookUpdatesRequest, StreamOrderbookUpdatesResponse } from "./query";
4+
import { QueryGetClobPairRequest, QueryClobPairResponse, QueryAllClobPairRequest, QueryClobPairAllResponse, MevNodeToNodeCalculationRequest, MevNodeToNodeCalculationResponse, QueryEquityTierLimitConfigurationRequest, QueryEquityTierLimitConfigurationResponse, QueryBlockRateLimitConfigurationRequest, QueryBlockRateLimitConfigurationResponse, QueryLiquidationsConfigurationRequest, QueryLiquidationsConfigurationResponse, QueryStatefulOrderRequest, QueryStatefulOrderResponse, StreamOrderbookUpdatesRequest, StreamOrderbookUpdatesResponse } from "./query";
55
/** Query defines the gRPC querier service. */
66

77
export interface Query {
@@ -22,6 +22,9 @@ export interface Query {
2222
/** Queries LiquidationsConfiguration. */
2323

2424
liquidationsConfiguration(request?: QueryLiquidationsConfigurationRequest): Promise<QueryLiquidationsConfigurationResponse>;
25+
/** Queries the stateful order for a given order id. */
26+
27+
statefulOrder(request: QueryStatefulOrderRequest): Promise<QueryStatefulOrderResponse>;
2528
/** Streams orderbook updates. */
2629

2730
streamOrderbookUpdates(request: StreamOrderbookUpdatesRequest): Promise<StreamOrderbookUpdatesResponse>;
@@ -37,6 +40,7 @@ export class QueryClientImpl implements Query {
3740
this.equityTierLimitConfiguration = this.equityTierLimitConfiguration.bind(this);
3841
this.blockRateLimitConfiguration = this.blockRateLimitConfiguration.bind(this);
3942
this.liquidationsConfiguration = this.liquidationsConfiguration.bind(this);
43+
this.statefulOrder = this.statefulOrder.bind(this);
4044
this.streamOrderbookUpdates = this.streamOrderbookUpdates.bind(this);
4145
}
4246

@@ -78,6 +82,12 @@ export class QueryClientImpl implements Query {
7882
return promise.then(data => QueryLiquidationsConfigurationResponse.decode(new _m0.Reader(data)));
7983
}
8084

85+
statefulOrder(request: QueryStatefulOrderRequest): Promise<QueryStatefulOrderResponse> {
86+
const data = QueryStatefulOrderRequest.encode(request).finish();
87+
const promise = this.rpc.request("dydxprotocol.clob.Query", "StatefulOrder", data);
88+
return promise.then(data => QueryStatefulOrderResponse.decode(new _m0.Reader(data)));
89+
}
90+
8191
streamOrderbookUpdates(request: StreamOrderbookUpdatesRequest): Promise<StreamOrderbookUpdatesResponse> {
8292
const data = StreamOrderbookUpdatesRequest.encode(request).finish();
8393
const promise = this.rpc.request("dydxprotocol.clob.Query", "StreamOrderbookUpdates", data);
@@ -113,6 +123,10 @@ export const createRpcQueryExtension = (base: QueryClient) => {
113123
return queryService.liquidationsConfiguration(request);
114124
},
115125

126+
statefulOrder(request: QueryStatefulOrderRequest): Promise<QueryStatefulOrderResponse> {
127+
return queryService.statefulOrder(request);
128+
},
129+
116130
streamOrderbookUpdates(request: StreamOrderbookUpdatesRequest): Promise<StreamOrderbookUpdatesResponse> {
117131
return queryService.streamOrderbookUpdates(request);
118132
}

indexer/packages/v4-protos/src/codegen/dydxprotocol/clob/query.ts

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { PageRequest, PageRequestSDKType, PageResponse, PageResponseSDKType } from "../../cosmos/base/query/v1beta1/pagination";
22
import { ValidatorMevMatches, ValidatorMevMatchesSDKType, MevNodeToNodeMetrics, MevNodeToNodeMetricsSDKType } from "./mev";
3+
import { OrderId, OrderIdSDKType, LongTermOrderPlacement, LongTermOrderPlacementSDKType } from "./order";
34
import { ClobPair, ClobPairSDKType } from "./clob_pair";
45
import { EquityTierLimitConfiguration, EquityTierLimitConfigurationSDKType } from "./equity_tier_limit_config";
56
import { BlockRateLimitConfiguration, BlockRateLimitConfigurationSDKType } from "./block_rate_limit_config";
@@ -171,6 +172,48 @@ export interface QueryBlockRateLimitConfigurationResponse {
171172
export interface QueryBlockRateLimitConfigurationResponseSDKType {
172173
block_rate_limit_config?: BlockRateLimitConfigurationSDKType;
173174
}
175+
/** QueryStatefulOrderRequest is a request message for StatefulOrder. */
176+
177+
export interface QueryStatefulOrderRequest {
178+
/** Order id to query. */
179+
orderId?: OrderId;
180+
}
181+
/** QueryStatefulOrderRequest is a request message for StatefulOrder. */
182+
183+
export interface QueryStatefulOrderRequestSDKType {
184+
/** Order id to query. */
185+
order_id?: OrderIdSDKType;
186+
}
187+
/**
188+
* QueryStatefulOrderResponse is a response message that contains the stateful
189+
* order.
190+
*/
191+
192+
export interface QueryStatefulOrderResponse {
193+
/** Stateful order placement. */
194+
orderPlacement?: LongTermOrderPlacement;
195+
/** Fill amounts. */
196+
197+
fillAmount: Long;
198+
/** Triggered status. */
199+
200+
triggered: boolean;
201+
}
202+
/**
203+
* QueryStatefulOrderResponse is a response message that contains the stateful
204+
* order.
205+
*/
206+
207+
export interface QueryStatefulOrderResponseSDKType {
208+
/** Stateful order placement. */
209+
order_placement?: LongTermOrderPlacementSDKType;
210+
/** Fill amounts. */
211+
212+
fill_amount: Long;
213+
/** Triggered status. */
214+
215+
triggered: boolean;
216+
}
174217
/**
175218
* QueryLiquidationsConfigurationRequest is a request message for
176219
* LiquidationsConfiguration.
@@ -783,6 +826,116 @@ export const QueryBlockRateLimitConfigurationResponse = {
783826

784827
};
785828

829+
function createBaseQueryStatefulOrderRequest(): QueryStatefulOrderRequest {
830+
return {
831+
orderId: undefined
832+
};
833+
}
834+
835+
export const QueryStatefulOrderRequest = {
836+
encode(message: QueryStatefulOrderRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
837+
if (message.orderId !== undefined) {
838+
OrderId.encode(message.orderId, writer.uint32(10).fork()).ldelim();
839+
}
840+
841+
return writer;
842+
},
843+
844+
decode(input: _m0.Reader | Uint8Array, length?: number): QueryStatefulOrderRequest {
845+
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
846+
let end = length === undefined ? reader.len : reader.pos + length;
847+
const message = createBaseQueryStatefulOrderRequest();
848+
849+
while (reader.pos < end) {
850+
const tag = reader.uint32();
851+
852+
switch (tag >>> 3) {
853+
case 1:
854+
message.orderId = OrderId.decode(reader, reader.uint32());
855+
break;
856+
857+
default:
858+
reader.skipType(tag & 7);
859+
break;
860+
}
861+
}
862+
863+
return message;
864+
},
865+
866+
fromPartial(object: DeepPartial<QueryStatefulOrderRequest>): QueryStatefulOrderRequest {
867+
const message = createBaseQueryStatefulOrderRequest();
868+
message.orderId = object.orderId !== undefined && object.orderId !== null ? OrderId.fromPartial(object.orderId) : undefined;
869+
return message;
870+
}
871+
872+
};
873+
874+
function createBaseQueryStatefulOrderResponse(): QueryStatefulOrderResponse {
875+
return {
876+
orderPlacement: undefined,
877+
fillAmount: Long.UZERO,
878+
triggered: false
879+
};
880+
}
881+
882+
export const QueryStatefulOrderResponse = {
883+
encode(message: QueryStatefulOrderResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
884+
if (message.orderPlacement !== undefined) {
885+
LongTermOrderPlacement.encode(message.orderPlacement, writer.uint32(10).fork()).ldelim();
886+
}
887+
888+
if (!message.fillAmount.isZero()) {
889+
writer.uint32(16).uint64(message.fillAmount);
890+
}
891+
892+
if (message.triggered === true) {
893+
writer.uint32(24).bool(message.triggered);
894+
}
895+
896+
return writer;
897+
},
898+
899+
decode(input: _m0.Reader | Uint8Array, length?: number): QueryStatefulOrderResponse {
900+
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
901+
let end = length === undefined ? reader.len : reader.pos + length;
902+
const message = createBaseQueryStatefulOrderResponse();
903+
904+
while (reader.pos < end) {
905+
const tag = reader.uint32();
906+
907+
switch (tag >>> 3) {
908+
case 1:
909+
message.orderPlacement = LongTermOrderPlacement.decode(reader, reader.uint32());
910+
break;
911+
912+
case 2:
913+
message.fillAmount = (reader.uint64() as Long);
914+
break;
915+
916+
case 3:
917+
message.triggered = reader.bool();
918+
break;
919+
920+
default:
921+
reader.skipType(tag & 7);
922+
break;
923+
}
924+
}
925+
926+
return message;
927+
},
928+
929+
fromPartial(object: DeepPartial<QueryStatefulOrderResponse>): QueryStatefulOrderResponse {
930+
const message = createBaseQueryStatefulOrderResponse();
931+
message.orderPlacement = object.orderPlacement !== undefined && object.orderPlacement !== null ? LongTermOrderPlacement.fromPartial(object.orderPlacement) : undefined;
932+
message.fillAmount = object.fillAmount !== undefined && object.fillAmount !== null ? Long.fromValue(object.fillAmount) : Long.UZERO;
933+
message.triggered = object.triggered ?? false;
934+
return message;
935+
}
936+
937+
};
938+
786939
function createBaseQueryLiquidationsConfigurationRequest(): QueryLiquidationsConfigurationRequest {
787940
return {};
788941
}

proto/dydxprotocol/clob/query.proto

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import "dydxprotocol/clob/clob_pair.proto";
99
import "dydxprotocol/clob/equity_tier_limit_config.proto";
1010
import "dydxprotocol/clob/liquidations_config.proto";
1111
import "dydxprotocol/clob/mev.proto";
12+
import "dydxprotocol/clob/order.proto";
1213
import "dydxprotocol/indexer/off_chain_updates/off_chain_updates.proto";
1314

1415
option go_package = "github.com/dydxprotocol/v4-chain/protocol/x/clob/types";
@@ -52,6 +53,10 @@ service Query {
5253
option (google.api.http).get = "/dydxprotocol/clob/liquidations_config";
5354
}
5455

56+
// Queries the stateful order for a given order id.
57+
rpc StatefulOrder(QueryStatefulOrderRequest)
58+
returns (QueryStatefulOrderResponse) {}
59+
5560
// GRPC Streams
5661

5762
// Streams orderbook updates.
@@ -124,6 +129,25 @@ message QueryBlockRateLimitConfigurationResponse {
124129
[ (gogoproto.nullable) = false ];
125130
}
126131

132+
// QueryStatefulOrderRequest is a request message for StatefulOrder.
133+
message QueryStatefulOrderRequest {
134+
// Order id to query.
135+
OrderId order_id = 1 [ (gogoproto.nullable) = false ];
136+
}
137+
138+
// QueryStatefulOrderResponse is a response message that contains the stateful
139+
// order.
140+
message QueryStatefulOrderResponse {
141+
// Stateful order placement.
142+
LongTermOrderPlacement order_placement = 1 [ (gogoproto.nullable) = false ];
143+
144+
// Fill amounts.
145+
uint64 fill_amount = 2;
146+
147+
// Triggered status.
148+
bool triggered = 3;
149+
}
150+
127151
// QueryLiquidationsConfigurationRequest is a request message for
128152
// LiquidationsConfiguration.
129153
message QueryLiquidationsConfigurationRequest {}

protocol/mocks/QueryClient.go

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

protocol/x/clob/client/cli/query.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func GetQueryCmd(queryRoute string) *cobra.Command {
2626
cmd.AddCommand(CmdGetBlockRateLimitConfiguration())
2727
cmd.AddCommand(CmdGetEquityTierLimitConfig())
2828
cmd.AddCommand(CmdGetLiquidationsConfiguration())
29+
cmd.AddCommand(CmdQueryStatefulOrder())
2930

3031
return cmd
3132
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package cli
2+
3+
import (
4+
"context"
5+
6+
"github.com/cosmos/cosmos-sdk/client"
7+
"github.com/cosmos/cosmos-sdk/client/flags"
8+
"github.com/dydxprotocol/v4-chain/protocol/x/clob/types"
9+
satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types"
10+
"github.com/spf13/cast"
11+
"github.com/spf13/cobra"
12+
)
13+
14+
func CmdQueryStatefulOrder() *cobra.Command {
15+
cmd := &cobra.Command{
16+
Use: "stateful-order subaccount_owner subaccount_number client_id clob_pair_id order_flags",
17+
Short: "queries a stateful order by id",
18+
Args: cobra.ExactArgs(5),
19+
RunE: func(cmd *cobra.Command, args []string) (err error) {
20+
clientCtx := client.GetClientContextFromCmd(cmd)
21+
22+
queryClient := types.NewQueryClient(clientCtx)
23+
24+
owner := args[0]
25+
26+
number, err := cast.ToUint32E(args[1])
27+
if err != nil {
28+
return err
29+
}
30+
31+
clientId, err := cast.ToUint32E(args[2])
32+
if err != nil {
33+
return err
34+
}
35+
36+
clobPairId, err := cast.ToUint32E(args[3])
37+
if err != nil {
38+
return err
39+
}
40+
41+
orderFlag, err := cast.ToUint32E(args[4])
42+
if err != nil {
43+
return err
44+
}
45+
46+
req := &types.QueryStatefulOrderRequest{
47+
OrderId: types.OrderId{
48+
SubaccountId: satypes.SubaccountId{
49+
Owner: owner,
50+
Number: number,
51+
},
52+
ClientId: clientId,
53+
ClobPairId: clobPairId,
54+
OrderFlags: orderFlag,
55+
},
56+
}
57+
58+
res, err := queryClient.StatefulOrder(context.Background(), req)
59+
if err != nil {
60+
return err
61+
}
62+
63+
return clientCtx.PrintProto(res)
64+
},
65+
}
66+
67+
flags.AddQueryFlagsToCmd(cmd)
68+
69+
return cmd
70+
}

0 commit comments

Comments
 (0)