Skip to content

Commit d5af215

Browse files
Check Leverage On Order Placement (#3141)
1 parent 4adde45 commit d5af215

File tree

39 files changed

+1705
-602
lines changed

39 files changed

+1705
-602
lines changed

indexer/packages/v4-protos/src/codegen/dydxprotocol/bundle.ts

Lines changed: 142 additions & 140 deletions
Large diffs are not rendered by default.

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -299,18 +299,18 @@ export interface QueryLeverageResponseSDKType {
299299
export interface ClobPairLeverageInfo {
300300
/** The clob pair ID. */
301301
clobPairId: number;
302-
/** The leverage amount. */
302+
/** The user selected imf. */
303303

304-
leverage: number;
304+
customImfPpm: number;
305305
}
306306
/** ClobPairLeverageInfo represents the leverage setting for a single clob pair. */
307307

308308
export interface ClobPairLeverageInfoSDKType {
309309
/** The clob pair ID. */
310310
clob_pair_id: number;
311-
/** The leverage amount. */
311+
/** The user selected imf. */
312312

313-
leverage: number;
313+
custom_imf_ppm: number;
314314
}
315315
/**
316316
* StreamOrderbookUpdatesRequest is a request message for the
@@ -1459,7 +1459,7 @@ export const QueryLeverageResponse = {
14591459
function createBaseClobPairLeverageInfo(): ClobPairLeverageInfo {
14601460
return {
14611461
clobPairId: 0,
1462-
leverage: 0
1462+
customImfPpm: 0
14631463
};
14641464
}
14651465

@@ -1469,8 +1469,8 @@ export const ClobPairLeverageInfo = {
14691469
writer.uint32(8).uint32(message.clobPairId);
14701470
}
14711471

1472-
if (message.leverage !== 0) {
1473-
writer.uint32(16).uint32(message.leverage);
1472+
if (message.customImfPpm !== 0) {
1473+
writer.uint32(16).uint32(message.customImfPpm);
14741474
}
14751475

14761476
return writer;
@@ -1490,7 +1490,7 @@ export const ClobPairLeverageInfo = {
14901490
break;
14911491

14921492
case 2:
1493-
message.leverage = reader.uint32();
1493+
message.customImfPpm = reader.uint32();
14941494
break;
14951495

14961496
default:
@@ -1505,7 +1505,7 @@ export const ClobPairLeverageInfo = {
15051505
fromPartial(object: DeepPartial<ClobPairLeverageInfo>): ClobPairLeverageInfo {
15061506
const message = createBaseClobPairLeverageInfo();
15071507
message.clobPairId = object.clobPairId ?? 0;
1508-
message.leverage = object.leverage ?? 0;
1508+
message.customImfPpm = object.customImfPpm ?? 0;
15091509
return message;
15101510
}
15111511

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -387,18 +387,18 @@ export interface MsgUpdateLiquidationsConfigResponseSDKType {}
387387
export interface LeverageEntry {
388388
/** The clob pair ID. */
389389
clobPairId: number;
390-
/** The leverage amount. */
390+
/** The user selected imf. */
391391

392-
leverage: number;
392+
customImfPpm: number;
393393
}
394394
/** LeverageEntry represents a single clob pair leverage setting. */
395395

396396
export interface LeverageEntrySDKType {
397397
/** The clob pair ID. */
398398
clob_pair_id: number;
399-
/** The leverage amount. */
399+
/** The user selected imf. */
400400

401-
leverage: number;
401+
custom_imf_ppm: number;
402402
}
403403
/**
404404
* MsgUpdateLeverage is a request type used for updating leverage for
@@ -1388,7 +1388,7 @@ export const MsgUpdateLiquidationsConfigResponse = {
13881388
function createBaseLeverageEntry(): LeverageEntry {
13891389
return {
13901390
clobPairId: 0,
1391-
leverage: 0
1391+
customImfPpm: 0
13921392
};
13931393
}
13941394

@@ -1398,8 +1398,8 @@ export const LeverageEntry = {
13981398
writer.uint32(8).uint32(message.clobPairId);
13991399
}
14001400

1401-
if (message.leverage !== 0) {
1402-
writer.uint32(16).uint32(message.leverage);
1401+
if (message.customImfPpm !== 0) {
1402+
writer.uint32(16).uint32(message.customImfPpm);
14031403
}
14041404

14051405
return writer;
@@ -1419,7 +1419,7 @@ export const LeverageEntry = {
14191419
break;
14201420

14211421
case 2:
1422-
message.leverage = reader.uint32();
1422+
message.customImfPpm = reader.uint32();
14231423
break;
14241424

14251425
default:
@@ -1434,7 +1434,7 @@ export const LeverageEntry = {
14341434
fromPartial(object: DeepPartial<LeverageEntry>): LeverageEntry {
14351435
const message = createBaseLeverageEntry();
14361436
message.clobPairId = object.clobPairId ?? 0;
1437-
message.leverage = object.leverage ?? 0;
1437+
message.customImfPpm = object.customImfPpm ?? 0;
14381438
return message;
14391439
}
14401440

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import * as _m0 from "protobufjs/minimal";
2+
import { DeepPartial } from "../../helpers";
3+
/**
4+
* PerpetualLeverageEntry represents a single perpetual leverage setting for
5+
* internal storage
6+
*/
7+
8+
export interface PerpetualLeverageEntry {
9+
/** The perpetual ID (internal storage format) */
10+
perpetualId: number;
11+
/** The user selected IMF in parts per million */
12+
13+
customImfPpm: number;
14+
}
15+
/**
16+
* PerpetualLeverageEntry represents a single perpetual leverage setting for
17+
* internal storage
18+
*/
19+
20+
export interface PerpetualLeverageEntrySDKType {
21+
/** The perpetual ID (internal storage format) */
22+
perpetual_id: number;
23+
/** The user selected IMF in parts per million */
24+
25+
custom_imf_ppm: number;
26+
}
27+
/** LeverageData represents the leverage settings for a subaccount */
28+
29+
export interface LeverageData {
30+
/** List of leverage entries for this subaccount */
31+
entries: PerpetualLeverageEntry[];
32+
}
33+
/** LeverageData represents the leverage settings for a subaccount */
34+
35+
export interface LeverageDataSDKType {
36+
/** List of leverage entries for this subaccount */
37+
entries: PerpetualLeverageEntrySDKType[];
38+
}
39+
40+
function createBasePerpetualLeverageEntry(): PerpetualLeverageEntry {
41+
return {
42+
perpetualId: 0,
43+
customImfPpm: 0
44+
};
45+
}
46+
47+
export const PerpetualLeverageEntry = {
48+
encode(message: PerpetualLeverageEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
49+
if (message.perpetualId !== 0) {
50+
writer.uint32(8).uint32(message.perpetualId);
51+
}
52+
53+
if (message.customImfPpm !== 0) {
54+
writer.uint32(16).uint32(message.customImfPpm);
55+
}
56+
57+
return writer;
58+
},
59+
60+
decode(input: _m0.Reader | Uint8Array, length?: number): PerpetualLeverageEntry {
61+
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
62+
let end = length === undefined ? reader.len : reader.pos + length;
63+
const message = createBasePerpetualLeverageEntry();
64+
65+
while (reader.pos < end) {
66+
const tag = reader.uint32();
67+
68+
switch (tag >>> 3) {
69+
case 1:
70+
message.perpetualId = reader.uint32();
71+
break;
72+
73+
case 2:
74+
message.customImfPpm = reader.uint32();
75+
break;
76+
77+
default:
78+
reader.skipType(tag & 7);
79+
break;
80+
}
81+
}
82+
83+
return message;
84+
},
85+
86+
fromPartial(object: DeepPartial<PerpetualLeverageEntry>): PerpetualLeverageEntry {
87+
const message = createBasePerpetualLeverageEntry();
88+
message.perpetualId = object.perpetualId ?? 0;
89+
message.customImfPpm = object.customImfPpm ?? 0;
90+
return message;
91+
}
92+
93+
};
94+
95+
function createBaseLeverageData(): LeverageData {
96+
return {
97+
entries: []
98+
};
99+
}
100+
101+
export const LeverageData = {
102+
encode(message: LeverageData, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
103+
for (const v of message.entries) {
104+
PerpetualLeverageEntry.encode(v!, writer.uint32(10).fork()).ldelim();
105+
}
106+
107+
return writer;
108+
},
109+
110+
decode(input: _m0.Reader | Uint8Array, length?: number): LeverageData {
111+
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
112+
let end = length === undefined ? reader.len : reader.pos + length;
113+
const message = createBaseLeverageData();
114+
115+
while (reader.pos < end) {
116+
const tag = reader.uint32();
117+
118+
switch (tag >>> 3) {
119+
case 1:
120+
message.entries.push(PerpetualLeverageEntry.decode(reader, reader.uint32()));
121+
break;
122+
123+
default:
124+
reader.skipType(tag & 7);
125+
break;
126+
}
127+
}
128+
129+
return message;
130+
},
131+
132+
fromPartial(object: DeepPartial<LeverageData>): LeverageData {
133+
const message = createBaseLeverageData();
134+
message.entries = object.entries?.map(e => PerpetualLeverageEntry.fromPartial(e)) || [];
135+
return message;
136+
}
137+
138+
};
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
import * as _132 from "./gogo";
2-
export const gogoproto = { ..._132
1+
import * as _133 from "./gogo";
2+
export const gogoproto = { ..._133
33
};
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import * as _133 from "./api/annotations";
2-
import * as _134 from "./api/http";
3-
import * as _135 from "./protobuf/descriptor";
4-
import * as _136 from "./protobuf/duration";
5-
import * as _137 from "./protobuf/timestamp";
6-
import * as _138 from "./protobuf/any";
1+
import * as _134 from "./api/annotations";
2+
import * as _135 from "./api/http";
3+
import * as _136 from "./protobuf/descriptor";
4+
import * as _137 from "./protobuf/duration";
5+
import * as _138 from "./protobuf/timestamp";
6+
import * as _139 from "./protobuf/any";
77
export namespace google {
8-
export const api = { ..._133,
9-
..._134
8+
export const api = { ..._134,
9+
..._135
1010
};
11-
export const protobuf = { ..._135,
12-
..._136,
11+
export const protobuf = { ..._136,
1312
..._137,
14-
..._138
13+
..._138,
14+
..._139
1515
};
1616
}

proto/dydxprotocol/clob/query.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,8 @@ message QueryLeverageResponse {
199199
message ClobPairLeverageInfo {
200200
// The clob pair ID.
201201
uint32 clob_pair_id = 1;
202-
// The leverage amount.
203-
uint32 leverage = 2;
202+
// The user selected imf.
203+
uint32 custom_imf_ppm = 2;
204204
}
205205

206206
// StreamOrderbookUpdatesRequest is a request message for the

proto/dydxprotocol/clob/tx.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ message MsgUpdateLiquidationsConfigResponse {}
219219
message LeverageEntry {
220220
// The clob pair ID.
221221
uint32 clob_pair_id = 1;
222-
// The leverage amount.
223-
uint32 leverage = 2;
222+
// The user selected imf.
223+
uint32 custom_imf_ppm = 2;
224224
}
225225

226226
// MsgUpdateLeverage is a request type used for updating leverage for
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
syntax = "proto3";
2+
package dydxprotocol.subaccounts;
3+
4+
option go_package = "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types";
5+
6+
// PerpetualLeverageEntry represents a single perpetual leverage setting for
7+
// internal storage
8+
message PerpetualLeverageEntry {
9+
// The perpetual ID (internal storage format)
10+
uint32 perpetual_id = 1;
11+
// The user selected IMF in parts per million
12+
uint32 custom_imf_ppm = 2;
13+
}
14+
15+
// LeverageData represents the leverage settings for a subaccount
16+
message LeverageData {
17+
// List of leverage entries for this subaccount
18+
repeated PerpetualLeverageEntry entries = 1;
19+
}

protocol/daemons/liquidation/client/sub_task_runner.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ func (c *Client) CheckSubaccountCollateralization(
341341
risk, err := salib.GetRiskForSubaccount(
342342
settledSubaccount,
343343
perpInfos,
344+
nil, // No leverage needed for liquidation calculations
344345
)
345346

346347
return risk.IsLiquidatable(), risk.NC.Sign() < 0, nil

0 commit comments

Comments
 (0)