@nadohq/indexer-client 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +2 -0
  2. package/dist/IndexerBaseClient.cjs +608 -0
  3. package/dist/IndexerBaseClient.cjs.map +1 -0
  4. package/dist/IndexerBaseClient.d.cts +183 -0
  5. package/dist/IndexerBaseClient.d.ts +183 -0
  6. package/dist/IndexerBaseClient.js +605 -0
  7. package/dist/IndexerBaseClient.js.map +1 -0
  8. package/dist/IndexerClient.cjs +368 -0
  9. package/dist/IndexerClient.cjs.map +1 -0
  10. package/dist/IndexerClient.d.cts +50 -0
  11. package/dist/IndexerClient.d.ts +50 -0
  12. package/dist/IndexerClient.js +348 -0
  13. package/dist/IndexerClient.js.map +1 -0
  14. package/dist/dataMappers.cjs +324 -0
  15. package/dist/dataMappers.cjs.map +1 -0
  16. package/dist/dataMappers.d.cts +31 -0
  17. package/dist/dataMappers.d.ts +31 -0
  18. package/dist/dataMappers.js +296 -0
  19. package/dist/dataMappers.js.map +1 -0
  20. package/dist/endpoints.cjs +35 -0
  21. package/dist/endpoints.cjs.map +1 -0
  22. package/dist/endpoints.d.cts +5 -0
  23. package/dist/endpoints.d.ts +5 -0
  24. package/dist/endpoints.js +10 -0
  25. package/dist/endpoints.js.map +1 -0
  26. package/dist/index.cjs +31 -0
  27. package/dist/index.cjs.map +1 -0
  28. package/dist/index.d.cts +18 -0
  29. package/dist/index.d.ts +18 -0
  30. package/dist/index.js +6 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/types/CandlestickPeriod.cjs +42 -0
  33. package/dist/types/CandlestickPeriod.cjs.map +1 -0
  34. package/dist/types/CandlestickPeriod.d.cts +13 -0
  35. package/dist/types/CandlestickPeriod.d.ts +13 -0
  36. package/dist/types/CandlestickPeriod.js +17 -0
  37. package/dist/types/CandlestickPeriod.js.map +1 -0
  38. package/dist/types/IndexerEventType.cjs +19 -0
  39. package/dist/types/IndexerEventType.cjs.map +1 -0
  40. package/dist/types/IndexerEventType.d.cts +3 -0
  41. package/dist/types/IndexerEventType.d.ts +3 -0
  42. package/dist/types/IndexerEventType.js +1 -0
  43. package/dist/types/IndexerEventType.js.map +1 -0
  44. package/dist/types/IndexerLeaderboardType.cjs +19 -0
  45. package/dist/types/IndexerLeaderboardType.cjs.map +1 -0
  46. package/dist/types/IndexerLeaderboardType.d.cts +3 -0
  47. package/dist/types/IndexerLeaderboardType.d.ts +3 -0
  48. package/dist/types/IndexerLeaderboardType.js +1 -0
  49. package/dist/types/IndexerLeaderboardType.js.map +1 -0
  50. package/dist/types/NadoTx.cjs +19 -0
  51. package/dist/types/NadoTx.cjs.map +1 -0
  52. package/dist/types/NadoTx.d.cts +49 -0
  53. package/dist/types/NadoTx.d.ts +49 -0
  54. package/dist/types/NadoTx.js +1 -0
  55. package/dist/types/NadoTx.js.map +1 -0
  56. package/dist/types/clientTypes.cjs +19 -0
  57. package/dist/types/clientTypes.cjs.map +1 -0
  58. package/dist/types/clientTypes.d.cts +467 -0
  59. package/dist/types/clientTypes.d.ts +467 -0
  60. package/dist/types/clientTypes.js +1 -0
  61. package/dist/types/clientTypes.js.map +1 -0
  62. package/dist/types/collateralEventType.cjs +19 -0
  63. package/dist/types/collateralEventType.cjs.map +1 -0
  64. package/dist/types/collateralEventType.d.cts +3 -0
  65. package/dist/types/collateralEventType.d.ts +3 -0
  66. package/dist/types/collateralEventType.js +1 -0
  67. package/dist/types/collateralEventType.js.map +1 -0
  68. package/dist/types/index.cjs +41 -0
  69. package/dist/types/index.cjs.map +1 -0
  70. package/dist/types/index.d.cts +13 -0
  71. package/dist/types/index.d.ts +13 -0
  72. package/dist/types/index.js +11 -0
  73. package/dist/types/index.js.map +1 -0
  74. package/dist/types/paginatedEventsTypes.cjs +19 -0
  75. package/dist/types/paginatedEventsTypes.cjs.map +1 -0
  76. package/dist/types/paginatedEventsTypes.d.cts +115 -0
  77. package/dist/types/paginatedEventsTypes.d.ts +115 -0
  78. package/dist/types/paginatedEventsTypes.js +1 -0
  79. package/dist/types/paginatedEventsTypes.js.map +1 -0
  80. package/dist/types/serverModelTypes.cjs +19 -0
  81. package/dist/types/serverModelTypes.cjs.map +1 -0
  82. package/dist/types/serverModelTypes.d.cts +224 -0
  83. package/dist/types/serverModelTypes.d.ts +224 -0
  84. package/dist/types/serverModelTypes.js +1 -0
  85. package/dist/types/serverModelTypes.js.map +1 -0
  86. package/dist/types/serverTypes.cjs +19 -0
  87. package/dist/types/serverTypes.cjs.map +1 -0
  88. package/dist/types/serverTypes.d.cts +304 -0
  89. package/dist/types/serverTypes.d.ts +304 -0
  90. package/dist/types/serverTypes.js +1 -0
  91. package/dist/types/serverTypes.js.map +1 -0
  92. package/dist/utils/index.cjs +25 -0
  93. package/dist/utils/index.cjs.map +1 -0
  94. package/dist/utils/index.d.cts +12 -0
  95. package/dist/utils/index.d.ts +12 -0
  96. package/dist/utils/index.js +3 -0
  97. package/dist/utils/index.js.map +1 -0
  98. package/dist/utils/indexerBalanceValue.cjs +43 -0
  99. package/dist/utils/indexerBalanceValue.cjs.map +1 -0
  100. package/dist/utils/indexerBalanceValue.d.cts +39 -0
  101. package/dist/utils/indexerBalanceValue.d.ts +39 -0
  102. package/dist/utils/indexerBalanceValue.js +16 -0
  103. package/dist/utils/indexerBalanceValue.js.map +1 -0
  104. package/package.json +53 -0
  105. package/src/IndexerBaseClient.ts +851 -0
  106. package/src/IndexerClient.ts +468 -0
  107. package/src/dataMappers.ts +362 -0
  108. package/src/endpoints.ts +7 -0
  109. package/src/index.ts +4 -0
  110. package/src/types/CandlestickPeriod.ts +11 -0
  111. package/src/types/IndexerEventType.ts +9 -0
  112. package/src/types/IndexerLeaderboardType.ts +2 -0
  113. package/src/types/NadoTx.ts +63 -0
  114. package/src/types/clientTypes.ts +679 -0
  115. package/src/types/collateralEventType.ts +4 -0
  116. package/src/types/index.ts +9 -0
  117. package/src/types/paginatedEventsTypes.ts +194 -0
  118. package/src/types/serverModelTypes.ts +271 -0
  119. package/src/types/serverTypes.ts +427 -0
  120. package/src/utils/index.ts +1 -0
  121. package/src/utils/indexerBalanceValue.ts +46 -0
@@ -0,0 +1,427 @@
1
+ import {
2
+ EIP712LeaderboardAuthenticationValues,
3
+ SignedTx,
4
+ } from '@nadohq/contracts';
5
+ import { IndexerEventType } from './IndexerEventType';
6
+ import { IndexerLeaderboardRankType } from './IndexerLeaderboardType';
7
+ import { NadoWithdrawCollateralTx } from './NadoTx';
8
+ import {
9
+ IndexerServerCandlestick,
10
+ IndexerServerEvent,
11
+ IndexerServerLeaderboardContest,
12
+ IndexerServerLeaderboardPosition,
13
+ IndexerServerLeaderboardRegistration,
14
+ IndexerServerMaker,
15
+ IndexerServerMarketSnapshot,
16
+ IndexerServerMarketSnapshotInterval,
17
+ IndexerServerMatchEvent,
18
+ IndexerServerOraclePrice,
19
+ IndexerServerOrder,
20
+ IndexerServerProductPayment,
21
+ IndexerServerProductSnapshot,
22
+ IndexerServerSnapshotsInterval,
23
+ IndexerServerTx,
24
+ IndexerServerVlpSnapshot,
25
+ } from './serverModelTypes';
26
+
27
+ /**
28
+ * Params
29
+ */
30
+
31
+ export interface IndexerServerListSubaccountsParams {
32
+ // Inclusive, defaults to 0
33
+ start?: number;
34
+ // Defaults to 100
35
+ limit?: number;
36
+ address?: string;
37
+ }
38
+
39
+ export interface IndexerServerMultiSubaccountSnapshotsParams {
40
+ // Subaccount hex identifiers
41
+ subaccounts: string[];
42
+ timestamps: number[];
43
+ // If not given, will return both isolated & non-iso balances
44
+ isolated?: boolean;
45
+ }
46
+
47
+ export interface IndexerServerReferralCodeParams {
48
+ subaccount: string;
49
+ }
50
+
51
+ export interface IndexerServerFundingRateParams {
52
+ product_id: number;
53
+ }
54
+
55
+ export interface IndexerServerFundingRatesParams {
56
+ product_ids: number[];
57
+ }
58
+
59
+ export interface IndexerServerPriceParams {
60
+ product_id: number;
61
+ }
62
+
63
+ export interface IndexerServerPerpPricesParams {
64
+ product_ids: number[];
65
+ }
66
+
67
+ export interface IndexerServerOraclePricesParams {
68
+ product_ids: number[];
69
+ }
70
+
71
+ export interface IndexerServerCandlesticksParams {
72
+ product_id: number;
73
+ granularity: number;
74
+ // Seconds
75
+ max_time?: number;
76
+ limit: number;
77
+ }
78
+
79
+ export type IndexerEdgeServerCandlesticksParams =
80
+ IndexerServerCandlesticksParams;
81
+
82
+ export interface IndexerServerProductsParams {
83
+ product_id: number;
84
+ max_time?: number;
85
+ limit: number;
86
+ // submission_idx for pagination, inclusive
87
+ idx?: string;
88
+ }
89
+
90
+ export interface IndexerServerMultiProductsParams {
91
+ product_ids: number[];
92
+ max_time: number[];
93
+ }
94
+
95
+ export interface IndexerServerEventsParams {
96
+ subaccount?: string;
97
+ product_ids?: number[];
98
+ // If not given, will return both isolated & non-iso events
99
+ isolated?: boolean;
100
+ event_types?: IndexerEventType[];
101
+ // Descending order for idx (time), defaults to true
102
+ desc?: boolean;
103
+ // submission_idx for pagination, inclusive
104
+ idx?: string;
105
+ max_time?: number;
106
+ limit?:
107
+ | {
108
+ raw: number;
109
+ }
110
+ | {
111
+ txs: number;
112
+ };
113
+ }
114
+
115
+ export interface IndexerServerOrdersParams {
116
+ subaccount?: string;
117
+ product_ids?: number[];
118
+ digests?: string[];
119
+ max_time?: number;
120
+ limit?: number;
121
+ // If not given, will return both isolated & non-iso orders
122
+ isolated?: boolean;
123
+ // submission_idx for pagination, inclusive
124
+ idx?: string;
125
+ }
126
+
127
+ export interface IndexerServerMatchEventsParams {
128
+ subaccount?: string;
129
+ product_ids?: number[];
130
+ // If not given, will return both isolated & non-iso events
131
+ isolated?: boolean;
132
+ max_time?: number;
133
+ limit: number;
134
+ // submission_idx for pagination, inclusive
135
+ idx?: string;
136
+ }
137
+
138
+ export interface IndexerServerLinkedSignerParams {
139
+ subaccount: string;
140
+ }
141
+
142
+ export interface IndexerServerMarketSnapshotsParams {
143
+ interval: IndexerServerMarketSnapshotInterval;
144
+ // Defaults to all
145
+ product_ids?: number[];
146
+ }
147
+
148
+ export interface IndexerEdgeServerMarketSnapshotsParams {
149
+ interval: IndexerServerMarketSnapshotInterval;
150
+ }
151
+
152
+ export interface IndexerServerInterestFundingParams {
153
+ subaccount: string;
154
+ product_ids: number[];
155
+ // If not given, defaults to latest
156
+ max_idx?: string;
157
+ max_time?: number;
158
+ limit: number;
159
+ }
160
+
161
+ export interface IndexerServerMakerStatisticsParams {
162
+ product_id: number;
163
+ epoch: number;
164
+ interval: number;
165
+ }
166
+
167
+ export interface IndexerServerLeaderboardParams {
168
+ contest_id: number;
169
+ rank_type: IndexerLeaderboardRankType;
170
+ start?: number | string;
171
+ limit?: number | string;
172
+ }
173
+
174
+ export interface IndexerServerLeaderboardRankParams {
175
+ subaccount: string;
176
+ contest_ids: number[];
177
+ }
178
+
179
+ export interface IndexerServerLeaderboardContestsParams {
180
+ contest_ids: number[];
181
+ }
182
+
183
+ export interface IndexerServerLeaderboardRegistrationParams {
184
+ subaccount: string;
185
+ contest_id: number;
186
+ update_registration: SignedTx<EIP712LeaderboardAuthenticationValues> | null;
187
+ }
188
+
189
+ export interface IndexerServerFastWithdrawalSignatureParams {
190
+ /**
191
+ * The submission index of the WithdrawCollateral tx to be used for fast withdraw.
192
+ */
193
+ idx: number | string;
194
+ }
195
+
196
+ export interface IndexerServerVlpSnapshotsParams {
197
+ interval: IndexerServerSnapshotsInterval;
198
+ }
199
+
200
+ // Request
201
+ export interface IndexerServerQueryRequestByType {
202
+ account_snapshots: IndexerServerMultiSubaccountSnapshotsParams;
203
+ backlog: Record<string, never>;
204
+ candlesticks: IndexerServerCandlesticksParams;
205
+ edge_candlesticks: IndexerEdgeServerCandlesticksParams;
206
+ edge_market_snapshots: IndexerEdgeServerMarketSnapshotsParams;
207
+ events: IndexerServerEventsParams;
208
+ fast_withdrawal_signature: IndexerServerFastWithdrawalSignatureParams;
209
+ funding_rate: IndexerServerFundingRateParams;
210
+ funding_rates: IndexerServerFundingRatesParams;
211
+ interest_and_funding: IndexerServerInterestFundingParams;
212
+ leaderboard: IndexerServerLeaderboardParams;
213
+ leaderboard_contests: IndexerServerLeaderboardContestsParams;
214
+ leaderboard_rank: IndexerServerLeaderboardRankParams;
215
+ leaderboard_registration: IndexerServerLeaderboardRegistrationParams;
216
+ linked_signer_rate_limit: IndexerServerLinkedSignerParams;
217
+ maker_statistics: IndexerServerMakerStatisticsParams;
218
+ market_snapshots: IndexerServerMarketSnapshotsParams;
219
+ matches: IndexerServerMatchEventsParams;
220
+ oracle_price: IndexerServerOraclePricesParams;
221
+ orders: IndexerServerOrdersParams;
222
+ perp_prices: IndexerServerPerpPricesParams;
223
+ price: IndexerServerPriceParams;
224
+ product_snapshots: IndexerServerMultiProductsParams;
225
+ products: IndexerServerProductsParams;
226
+ referral_code: IndexerServerReferralCodeParams;
227
+ subaccounts: IndexerServerListSubaccountsParams;
228
+ usdc_price: Record<string, never>;
229
+ vlp_snapshots: IndexerServerVlpSnapshotsParams;
230
+ }
231
+
232
+ export type IndexerServerQueryRequestType =
233
+ keyof IndexerServerQueryRequestByType;
234
+
235
+ /**
236
+ * Responses
237
+ */
238
+
239
+ export interface IndexerServerListSubaccountsResponse {
240
+ subaccounts: {
241
+ id: string;
242
+ // Hex of subaccount bytes
243
+ subaccount: string;
244
+ }[];
245
+ }
246
+
247
+ export interface IndexerServerMultiSubaccountSnapshotsResponse {
248
+ // Map of subaccount hex -> timestamp requested -> latest events corresponding to each product
249
+ snapshots: Record<string, Record<string, IndexerServerEvent[]>>;
250
+ }
251
+
252
+ export interface IndexerServerReferralCodeResponse {
253
+ referral_code: string | null;
254
+ }
255
+
256
+ export interface IndexerServerFundingRate {
257
+ product_id: number;
258
+ funding_rate_x18: string;
259
+ update_time: number;
260
+ }
261
+
262
+ export type IndexerServerFundingRateResponse = IndexerServerFundingRate;
263
+
264
+ // Map of productId -> IndexerServerFundingRate
265
+ export type IndexerServerFundingRatesResponse = Record<
266
+ string,
267
+ IndexerServerFundingRate
268
+ >;
269
+
270
+ export interface IndexerServerPerpPrices {
271
+ product_id: number;
272
+ index_price_x18: string;
273
+ mark_price_x18: string;
274
+ update_time: number;
275
+ }
276
+
277
+ export type IndexerServerPriceResponse = IndexerServerPerpPrices;
278
+
279
+ // Map of productId -> IndexerServerPerpPrices
280
+ export type IndexerServerPerpPricesResponse = Record<
281
+ string,
282
+ IndexerServerPerpPrices
283
+ >;
284
+
285
+ export interface IndexerServerOraclePricesResponse {
286
+ prices: IndexerServerOraclePrice[];
287
+ }
288
+
289
+ export interface IndexerServerCandlesticksResponse {
290
+ candlesticks: IndexerServerCandlestick[];
291
+ }
292
+
293
+ export type IndexerEdgeServerCandlesticksResponse =
294
+ IndexerServerCandlesticksResponse;
295
+
296
+ export interface IndexerServerProductsResponse {
297
+ products: IndexerServerProductSnapshot[];
298
+ txs: IndexerServerTx[];
299
+ }
300
+
301
+ // Map of timestamp -> (productID -> IndexerServerProductSnapshot)
302
+ export type IndexerServerMultiProductsResponse = Record<
303
+ string,
304
+ Record<string, IndexerServerProductSnapshot>
305
+ >;
306
+
307
+ export interface IndexerServerEventsResponse {
308
+ events: IndexerServerEvent[];
309
+ txs: IndexerServerTx[];
310
+ }
311
+
312
+ export interface IndexerServerOrdersResponse {
313
+ orders: IndexerServerOrder[];
314
+ }
315
+
316
+ export interface IndexerServerMatchEventsResponse {
317
+ matches: IndexerServerMatchEvent[];
318
+ txs: IndexerServerTx[];
319
+ }
320
+
321
+ export interface IndexerServerUsdcPriceResponse {
322
+ price_x18: string;
323
+ }
324
+
325
+ export interface IndexerServerLinkedSignerResponse {
326
+ total_tx_limit: string;
327
+ remaining_tx: string;
328
+ wait_time: string;
329
+ signer: string;
330
+ }
331
+
332
+ export interface IndexerServerMarketSnapshotsResponse {
333
+ snapshots: IndexerServerMarketSnapshot[];
334
+ }
335
+
336
+ export interface IndexerEdgeServerMarketSnapshotsResponse {
337
+ snapshots: Record<number, IndexerServerMarketSnapshot[]>;
338
+ }
339
+
340
+ export interface IndexerServerInterestFundingResponse {
341
+ interest_payments: IndexerServerProductPayment[];
342
+ funding_payments: IndexerServerProductPayment[];
343
+ next_idx: string;
344
+ }
345
+
346
+ export interface IndexerServerMakerStatisticsResponse {
347
+ reward_coefficient: string;
348
+ makers: IndexerServerMaker[];
349
+ }
350
+
351
+ export interface IndexerServerLeaderboardResponse {
352
+ positions: IndexerServerLeaderboardPosition[];
353
+ }
354
+
355
+ export interface IndexerServerLeaderboardRegistrationResponse {
356
+ // For non-tiered contests, null if the user is not registered for the provided contestId.
357
+ // For tiered contests (i.e., related contests), null if the user is not registered for any of the contests in the tier group.
358
+ registration: IndexerServerLeaderboardRegistration | null;
359
+ }
360
+
361
+ export interface IndexerServerLeaderboardRankResponse {
362
+ // If the subaccount is not eligible for a given contest, it would not be included in the response.
363
+ // contestId -> IndexerServerLeaderboardPosition
364
+ positions: Record<string, IndexerServerLeaderboardPosition>;
365
+ }
366
+
367
+ export interface IndexerServerLeaderboardContestsResponse {
368
+ contests: IndexerServerLeaderboardContest[];
369
+ }
370
+
371
+ export interface IndexerServerFastWithdrawalSignatureResponse {
372
+ idx: string;
373
+ tx: NadoWithdrawCollateralTx['withdraw_collateral'];
374
+ tx_bytes: string;
375
+ signatures: string[];
376
+ }
377
+
378
+ export interface IndexerServerVlpSnapshotsResponse {
379
+ snapshots: IndexerServerVlpSnapshot[];
380
+ }
381
+
382
+ export interface IndexerServerBacklogResponse {
383
+ // Total number of transactions stored in the indexer DB
384
+ total_txs: string;
385
+ // Current nSubmissions value from the chain (i.e., number of processed txs)
386
+ total_submissions: string;
387
+ // Number of unprocessed transactions (total_txs - total_submissions)
388
+ backlog_size: string;
389
+ // UNIX timestamp (in seconds) of when the data was last updated
390
+ updated_at: string;
391
+ // Estimated time in seconds (float) to clear the entire backlog (null if unavailable)
392
+ backlog_eta_in_seconds: string | null;
393
+ // Current submission rate in transactions per second (float) (null if unavailable)
394
+ txs_per_second: string | null;
395
+ }
396
+
397
+ // Response
398
+ export interface IndexerServerQueryResponseByType {
399
+ account_snapshots: IndexerServerMultiSubaccountSnapshotsResponse;
400
+ backlog: IndexerServerBacklogResponse;
401
+ candlesticks: IndexerServerCandlesticksResponse;
402
+ edge_candlesticks: IndexerEdgeServerCandlesticksResponse;
403
+ edge_market_snapshots: IndexerEdgeServerMarketSnapshotsResponse;
404
+ events: IndexerServerEventsResponse;
405
+ fast_withdrawal_signature: IndexerServerFastWithdrawalSignatureResponse;
406
+ funding_rate: IndexerServerFundingRateResponse;
407
+ funding_rates: IndexerServerFundingRatesResponse;
408
+ interest_and_funding: IndexerServerInterestFundingResponse;
409
+ leaderboard: IndexerServerLeaderboardResponse;
410
+ leaderboard_contests: IndexerServerLeaderboardContestsResponse;
411
+ leaderboard_rank: IndexerServerLeaderboardRankResponse;
412
+ leaderboard_registration: IndexerServerLeaderboardRegistrationResponse;
413
+ linked_signer_rate_limit: IndexerServerLinkedSignerResponse;
414
+ maker_statistics: IndexerServerMakerStatisticsResponse;
415
+ market_snapshots: IndexerServerMarketSnapshotsResponse;
416
+ matches: IndexerServerMatchEventsResponse;
417
+ oracle_price: IndexerServerOraclePricesResponse;
418
+ orders: IndexerServerOrdersResponse;
419
+ perp_prices: IndexerServerPerpPricesResponse;
420
+ price: IndexerServerPriceResponse;
421
+ product_snapshots: IndexerServerMultiProductsResponse;
422
+ products: IndexerServerProductsResponse;
423
+ referral_code: IndexerServerReferralCodeResponse;
424
+ subaccounts: IndexerServerListSubaccountsResponse;
425
+ usdc_price: IndexerServerUsdcPriceResponse;
426
+ vlp_snapshots: IndexerServerVlpSnapshotsResponse;
427
+ }
@@ -0,0 +1 @@
1
+ export * from './indexerBalanceValue';
@@ -0,0 +1,46 @@
1
+ import { BigDecimal } from '@nadohq/utils';
2
+ import { IndexerPerpBalance, IndexerSpotBalance } from '../types';
3
+
4
+ /**
5
+ * Most of these calculations take oraclePrice as a separate parameter. This allows us to not rely on the Snapshot
6
+ * interfaces to give clients the optionality to pass either the pre or post balance
7
+ */
8
+
9
+ /**
10
+ * Calculates the quote value of an indexer spot balance
11
+ *
12
+ * @param balance
13
+ * @param oraclePrice
14
+ */
15
+ export function calcIndexerSpotBalanceValue(
16
+ balance: IndexerSpotBalance,
17
+ oraclePrice: BigDecimal,
18
+ ): BigDecimal {
19
+ return balance.amount.multipliedBy(oraclePrice);
20
+ }
21
+
22
+ /**
23
+ * Calculates the notional value of an indexer perp balance
24
+ *
25
+ * @param balance
26
+ * @param oraclePrice
27
+ */
28
+ export function calcIndexerPerpBalanceNotionalValue(
29
+ balance: IndexerPerpBalance,
30
+ oraclePrice: BigDecimal,
31
+ ): BigDecimal {
32
+ return balance.amount.multipliedBy(oraclePrice).abs();
33
+ }
34
+
35
+ /**
36
+ * Calculates the true quote value of a indexer perp balance, which is the same as its unrealized pnl / unsettled quote
37
+ *
38
+ * @param balance
39
+ * @param oraclePrice
40
+ */
41
+ export function calcIndexerPerpBalanceValue(
42
+ balance: IndexerPerpBalance,
43
+ oraclePrice: BigDecimal,
44
+ ): BigDecimal {
45
+ return balance.amount.multipliedBy(oraclePrice).plus(balance.vQuoteBalance);
46
+ }