zo-sdk 0.1.2 → 0.1.3

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 (183) hide show
  1. package/dist/abstract/BaseAPI.cjs +3 -4
  2. package/dist/abstract/BaseAPI.cjs.map +1 -1
  3. package/dist/abstract/BaseAPI.d.cts +13 -13
  4. package/dist/abstract/BaseAPI.d.cts.map +1 -1
  5. package/dist/abstract/BaseAPI.d.mts +13 -13
  6. package/dist/abstract/BaseAPI.d.mts.map +1 -1
  7. package/dist/abstract/BaseAPI.mjs +3 -4
  8. package/dist/abstract/BaseAPI.mjs.map +1 -1
  9. package/dist/abstract/BaseDataAPI.cjs +2 -2
  10. package/dist/abstract/BaseDataAPI.cjs.map +1 -1
  11. package/dist/abstract/BaseDataAPI.d.cts +2 -2
  12. package/dist/abstract/BaseDataAPI.d.cts.map +1 -1
  13. package/dist/abstract/BaseDataAPI.d.mts +2 -2
  14. package/dist/abstract/BaseDataAPI.d.mts.map +1 -1
  15. package/dist/abstract/BaseDataAPI.mjs +2 -2
  16. package/dist/abstract/BaseDataAPI.mjs.map +1 -1
  17. package/dist/abstract/index.cjs +3 -3
  18. package/dist/abstract/index.cjs.map +1 -1
  19. package/dist/abstract/index.d.cts +1 -1
  20. package/dist/abstract/index.d.cts.map +1 -1
  21. package/dist/abstract/index.d.mts +1 -1
  22. package/dist/abstract/index.d.mts.map +1 -1
  23. package/dist/abstract/index.mjs +1 -1
  24. package/dist/abstract/index.mjs.map +1 -1
  25. package/dist/api.cjs +2 -1
  26. package/dist/api.cjs.map +1 -1
  27. package/dist/api.d.cts.map +1 -1
  28. package/dist/api.d.mts.map +1 -1
  29. package/dist/api.mjs +2 -1
  30. package/dist/api.mjs.map +1 -1
  31. package/dist/bcs.cjs.map +1 -1
  32. package/dist/bcs.d.cts.map +1 -1
  33. package/dist/bcs.d.mts.map +1 -1
  34. package/dist/bcs.mjs.map +1 -1
  35. package/dist/consts/deployments-slp-mainnet.json +0 -70
  36. package/dist/consts/deployments-usdz-mainnet.json +1 -133
  37. package/dist/consts/index.cjs +21 -14
  38. package/dist/consts/index.cjs.map +1 -1
  39. package/dist/consts/index.d.cts.map +1 -1
  40. package/dist/consts/index.d.mts.map +1 -1
  41. package/dist/consts/index.mjs +21 -14
  42. package/dist/consts/index.mjs.map +1 -1
  43. package/dist/factory/SDKFactory.cjs +21 -14
  44. package/dist/factory/SDKFactory.cjs.map +1 -1
  45. package/dist/factory/SDKFactory.d.cts +4 -4
  46. package/dist/factory/SDKFactory.d.cts.map +1 -1
  47. package/dist/factory/SDKFactory.d.mts +4 -4
  48. package/dist/factory/SDKFactory.d.mts.map +1 -1
  49. package/dist/factory/SDKFactory.mjs +22 -15
  50. package/dist/factory/SDKFactory.mjs.map +1 -1
  51. package/dist/implementations/SLPAPI.cjs +143 -110
  52. package/dist/implementations/SLPAPI.cjs.map +1 -1
  53. package/dist/implementations/SLPAPI.d.cts +49 -47
  54. package/dist/implementations/SLPAPI.d.cts.map +1 -1
  55. package/dist/implementations/SLPAPI.d.mts +49 -47
  56. package/dist/implementations/SLPAPI.d.mts.map +1 -1
  57. package/dist/implementations/SLPAPI.mjs +143 -110
  58. package/dist/implementations/SLPAPI.mjs.map +1 -1
  59. package/dist/implementations/SLPDataAPI.cjs +98 -89
  60. package/dist/implementations/SLPDataAPI.cjs.map +1 -1
  61. package/dist/implementations/SLPDataAPI.d.cts +21 -21
  62. package/dist/implementations/SLPDataAPI.d.cts.map +1 -1
  63. package/dist/implementations/SLPDataAPI.d.mts +21 -21
  64. package/dist/implementations/SLPDataAPI.d.mts.map +1 -1
  65. package/dist/implementations/SLPDataAPI.mjs +98 -89
  66. package/dist/implementations/SLPDataAPI.mjs.map +1 -1
  67. package/dist/implementations/USDZAPI.cjs +128 -84
  68. package/dist/implementations/USDZAPI.cjs.map +1 -1
  69. package/dist/implementations/USDZAPI.d.cts +46 -45
  70. package/dist/implementations/USDZAPI.d.cts.map +1 -1
  71. package/dist/implementations/USDZAPI.d.mts +46 -45
  72. package/dist/implementations/USDZAPI.d.mts.map +1 -1
  73. package/dist/implementations/USDZAPI.mjs +128 -84
  74. package/dist/implementations/USDZAPI.mjs.map +1 -1
  75. package/dist/implementations/USDZDataAPI.cjs +48 -47
  76. package/dist/implementations/USDZDataAPI.cjs.map +1 -1
  77. package/dist/implementations/USDZDataAPI.d.cts +19 -19
  78. package/dist/implementations/USDZDataAPI.d.cts.map +1 -1
  79. package/dist/implementations/USDZDataAPI.d.mts +19 -19
  80. package/dist/implementations/USDZDataAPI.d.mts.map +1 -1
  81. package/dist/implementations/USDZDataAPI.mjs +49 -48
  82. package/dist/implementations/USDZDataAPI.mjs.map +1 -1
  83. package/dist/implementations/ZLPAPI.cjs +137 -89
  84. package/dist/implementations/ZLPAPI.cjs.map +1 -1
  85. package/dist/implementations/ZLPAPI.d.cts +50 -48
  86. package/dist/implementations/ZLPAPI.d.cts.map +1 -1
  87. package/dist/implementations/ZLPAPI.d.mts +50 -48
  88. package/dist/implementations/ZLPAPI.d.mts.map +1 -1
  89. package/dist/implementations/ZLPAPI.mjs +137 -89
  90. package/dist/implementations/ZLPAPI.mjs.map +1 -1
  91. package/dist/implementations/ZLPDataAPI.cjs +62 -63
  92. package/dist/implementations/ZLPDataAPI.cjs.map +1 -1
  93. package/dist/implementations/ZLPDataAPI.d.cts +19 -19
  94. package/dist/implementations/ZLPDataAPI.d.cts.map +1 -1
  95. package/dist/implementations/ZLPDataAPI.d.mts +19 -19
  96. package/dist/implementations/ZLPDataAPI.d.mts.map +1 -1
  97. package/dist/implementations/ZLPDataAPI.mjs +63 -64
  98. package/dist/implementations/ZLPDataAPI.mjs.map +1 -1
  99. package/dist/implementations/index.cjs +5 -5
  100. package/dist/implementations/index.cjs.map +1 -1
  101. package/dist/implementations/index.d.cts +2 -2
  102. package/dist/implementations/index.d.cts.map +1 -1
  103. package/dist/implementations/index.d.mts +2 -2
  104. package/dist/implementations/index.d.mts.map +1 -1
  105. package/dist/implementations/index.mjs +2 -2
  106. package/dist/implementations/index.mjs.map +1 -1
  107. package/dist/index.cjs +9 -9
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.d.cts +6 -6
  110. package/dist/index.d.cts.map +1 -1
  111. package/dist/index.d.mts +6 -6
  112. package/dist/index.d.mts.map +1 -1
  113. package/dist/index.mjs +6 -6
  114. package/dist/index.mjs.map +1 -1
  115. package/dist/interfaces/base.cjs +0 -1
  116. package/dist/interfaces/base.cjs.map +1 -1
  117. package/dist/interfaces/base.d.cts +57 -57
  118. package/dist/interfaces/base.d.cts.map +1 -1
  119. package/dist/interfaces/base.d.mts +57 -57
  120. package/dist/interfaces/base.d.mts.map +1 -1
  121. package/dist/interfaces/base.mjs +1 -1
  122. package/dist/interfaces/base.mjs.map +1 -1
  123. package/dist/interfaces/index.d.cts +4 -4
  124. package/dist/interfaces/index.d.cts.map +1 -1
  125. package/dist/interfaces/index.d.mts +4 -4
  126. package/dist/interfaces/index.d.mts.map +1 -1
  127. package/dist/interfaces/slp.cjs +0 -2
  128. package/dist/interfaces/slp.cjs.map +1 -1
  129. package/dist/interfaces/slp.d.cts +5 -5
  130. package/dist/interfaces/slp.d.cts.map +1 -1
  131. package/dist/interfaces/slp.d.mts +5 -5
  132. package/dist/interfaces/slp.d.mts.map +1 -1
  133. package/dist/interfaces/slp.mjs +1 -2
  134. package/dist/interfaces/slp.mjs.map +1 -1
  135. package/dist/interfaces/usdz.d.cts +1 -1
  136. package/dist/interfaces/usdz.d.cts.map +1 -1
  137. package/dist/interfaces/usdz.d.mts +1 -1
  138. package/dist/interfaces/usdz.d.mts.map +1 -1
  139. package/dist/interfaces/zlp.d.cts +5 -5
  140. package/dist/interfaces/zlp.d.cts.map +1 -1
  141. package/dist/interfaces/zlp.d.mts +5 -5
  142. package/dist/interfaces/zlp.d.mts.map +1 -1
  143. package/dist/oracle.cjs +12 -2
  144. package/dist/oracle.cjs.map +1 -1
  145. package/dist/oracle.d.cts +4 -3
  146. package/dist/oracle.d.cts.map +1 -1
  147. package/dist/oracle.d.mts +4 -3
  148. package/dist/oracle.d.mts.map +1 -1
  149. package/dist/oracle.mjs +13 -3
  150. package/dist/oracle.mjs.map +1 -1
  151. package/dist/utils.cjs +1 -1
  152. package/dist/utils.cjs.map +1 -1
  153. package/dist/utils.d.cts.map +1 -1
  154. package/dist/utils.d.mts.map +1 -1
  155. package/dist/utils.mjs +1 -1
  156. package/dist/utils.mjs.map +1 -1
  157. package/eslint.config.mjs +18 -0
  158. package/package.json +16 -15
  159. package/src/abstract/BaseAPI.ts +55 -49
  160. package/src/abstract/BaseDataAPI.ts +19 -17
  161. package/src/abstract/index.ts +1 -1
  162. package/src/api.ts +3 -1
  163. package/src/bcs.ts +9 -9
  164. package/src/consts/deployments-slp-mainnet.json +0 -70
  165. package/src/consts/deployments-usdz-mainnet.json +1 -133
  166. package/src/consts/index.ts +22 -15
  167. package/src/factory/SDKFactory.ts +49 -41
  168. package/src/implementations/SLPAPI.ts +299 -210
  169. package/src/implementations/SLPDataAPI.ts +163 -146
  170. package/src/implementations/USDZAPI.ts +238 -133
  171. package/src/implementations/USDZDataAPI.ts +79 -74
  172. package/src/implementations/ZLPAPI.ts +296 -174
  173. package/src/implementations/ZLPDataAPI.ts +93 -88
  174. package/src/implementations/index.ts +3 -3
  175. package/src/index.ts +17 -17
  176. package/src/interfaces/base.ts +123 -116
  177. package/src/interfaces/index.ts +14 -17
  178. package/src/interfaces/slp.ts +20 -19
  179. package/src/interfaces/usdz.ts +13 -13
  180. package/src/interfaces/zlp.ts +22 -21
  181. package/src/oracle.ts +25 -5
  182. package/src/utils.ts +9 -9
  183. package/tsconfig.json +1 -1
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-await-in-loop */
1
2
  /**
2
3
  * USDZ DataAPI implementation
3
4
  * Implements USDZ-specific data access methods
@@ -6,44 +7,46 @@
6
7
  import type { DynamicFieldInfo, SuiClient } from '@mysten/sui/client'
7
8
  import type { Transaction } from '@mysten/sui/transactions'
8
9
  import { SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils'
10
+
11
+ import { BaseDataAPI } from '../abstract'
9
12
  import type { Network } from '../consts'
10
- import { LPToken, USDZ_TOKEN_DECIMALS, SECONDS_PER_EIGHT_HOUR } from '../consts'
13
+ import { LPToken, SECONDS_PER_EIGHT_HOUR, USDZ_TOKEN_DECIMALS } from '../consts'
11
14
  import type {
15
+ IBaseHistoryResponse,
16
+ IBaseStaked,
17
+ IBaseStakePool,
12
18
  IUSDZDataAPI,
13
- IUSDZMarketValuationInfo,
19
+ IUSDZFundingFeeModel,
14
20
  IUSDZMarketInfo,
15
- IUSDZVaultInfo,
16
- IUSDZSymbolInfo,
17
- IUSDZPositionInfo,
21
+ IUSDZMarketValuationInfo,
22
+ IUSDZOrderCapInfo,
18
23
  IUSDZOrderInfo,
19
- IUSDZFundingFeeModel,
20
- IUSDZPositionConfig,
21
24
  IUSDZPositionCapInfo,
22
- IUSDZReservingFeeModel,
23
- IUSDZOrderCapInfo,
25
+ IUSDZPositionConfig,
26
+ IUSDZPositionInfo,
24
27
  IUSDZRebaseFeeModel,
25
- IBaseHistoryResponse,
26
- IBaseStaked,
27
- IBaseStakePool
28
+ IUSDZReservingFeeModel,
29
+ IUSDZSymbolInfo,
30
+ IUSDZVaultInfo,
28
31
  } from '../interfaces'
29
- import { BaseDataAPI } from '../abstract'
30
- import { parseSymbolKey, parseValue, suiSymbolToSymbol, joinSymbol } from '../utils'
32
+ import { joinSymbol, parseSymbolKey, parseValue, suiSymbolToSymbol } from '../utils'
31
33
 
32
34
  export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
33
35
  constructor(
34
36
  network: Network,
35
37
  provider: SuiClient,
36
38
  apiEndpoint: string,
37
- connectionURL: string
39
+ connectionURL: string,
38
40
  ) {
39
41
  super(network, provider, apiEndpoint, connectionURL, LPToken.USDZ)
40
42
  }
41
43
 
42
- public getStaked(owner: string): Promise<IBaseStaked> {
43
- throw new Error('Method not implemented.')
44
+ public getStaked(_owner: string): Promise<IBaseStaked> {
45
+ throw new Error(`${this.constructor.name}: Method not implemented.`)
44
46
  }
47
+
45
48
  public getStakePool(): Promise<IBaseStakePool> {
46
- throw new Error('Method not implemented.')
49
+ throw new Error(`${this.constructor.name}: Method not implemented.`)
47
50
  }
48
51
 
49
52
  /**
@@ -133,22 +136,22 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
133
136
 
134
137
  const vaultPromises = Object.keys(this.consts.zoCore.vaults).map(async (vault) => {
135
138
  const vaultInfo = await this.getVaultInfo(vault)
136
- const reservingFeeDelta = this.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
139
+ const reservingFeeDelta = USDZDataAPI.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
137
140
  return (reservingFeeDelta + vaultInfo.liquidity + vaultInfo.reservedAmount) * (await this.getOraclePrice(vault)).getPriceUnchecked().getPriceAsNumberUnchecked() / (10 ** this.consts.coins[vault].decimals)
138
141
  })
139
142
 
140
143
  const symbolPromises = Object.keys(this.consts.zoCore.symbols).map(async (symbol) => {
141
144
  const [direction, tokenId] = parseSymbolKey(symbol)
142
145
  const symbolInfo = await this.getSymbolInfo(tokenId, direction === 'long')
143
- const deltaSize = this.calcDeltaSize(symbolInfo, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked())
144
- const fundingFeeDelta = this.calculateSymbolFundingFee(symbolInfo, symbolInfo.fundingFeeModel, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked(), marketInfo.lpSupplyWithDecimals, Date.now() / 1000)
146
+ const deltaSize = USDZDataAPI.calcDeltaSize(symbolInfo, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked())
147
+ const fundingFeeDelta = USDZDataAPI.calculateSymbolFundingFee(symbolInfo, symbolInfo.fundingFeeModel, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked(), marketInfo.lpSupplyWithDecimals, Date.now() / 1000)
145
148
  return fundingFeeDelta + deltaSize
146
149
  })
147
150
 
148
151
  const [vaultValues, symbolValues] = await Promise.all([Promise.all(vaultPromises), Promise.all(symbolPromises)])
149
152
 
150
- value = vaultValues.reduce((acc, curr) => acc + curr, 0)
151
- value += symbolValues.reduce((acc, curr) => acc + curr, 0)
153
+ value = vaultValues.reduce((acc: number, curr: number) => acc + curr, 0)
154
+ value += symbolValues.reduce((acc: number, curr: number) => acc + curr, 0)
152
155
 
153
156
  usdzPrice = value / marketInfo.lpSupplyWithDecimals
154
157
 
@@ -174,7 +177,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
174
177
  showContent: true,
175
178
  },
176
179
  })
177
- return this.parseMarketInfo(rawData)
180
+ return USDZDataAPI.parseMarketInfo(rawData)
178
181
  }
179
182
 
180
183
  /**
@@ -227,12 +230,12 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
227
230
  showContent: true,
228
231
  },
229
232
  })
230
- return this.parsePositionConfig(rawData)
233
+ return USDZDataAPI.parsePositionConfig(rawData)
231
234
  }
232
235
 
233
236
  public async getPositionCapInfoList(owner: string): Promise<IUSDZPositionCapInfo[]> {
234
237
  const positionCapInfoList: IUSDZPositionCapInfo[] = []
235
- let cursor: string | undefined | null = undefined
238
+ let cursor: string | undefined | null
236
239
  let hasNextPage = true
237
240
 
238
241
  while (hasNextPage) {
@@ -269,7 +272,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
269
272
  return positionCapInfoList
270
273
  }
271
274
 
272
- public async getPositionInfoList(positionCapInfoList: IUSDZPositionCapInfo[], owner: string, batchSize: number = 10) {
275
+ public async getPositionInfoList(positionCapInfoList: IUSDZPositionCapInfo[], owner: string, batchSize = 10) {
273
276
  const positionInfoList: IUSDZPositionInfo[] = []
274
277
 
275
278
  // Process in batches of 10
@@ -289,7 +292,8 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
289
292
  },
290
293
  })
291
294
  positionInfoList.push(await this.parsePositionInfo(positionRaw, positionCapInfo.positionCapId))
292
- } catch (error) {
295
+ }
296
+ catch (error) {
293
297
  // Position might have been deleted after force settlement
294
298
  console.warn(`Failed to parse position info for position cap ID ${positionCapInfo.positionCapId}: ${error}`)
295
299
  // Continue with next position without adding this one to the list
@@ -303,11 +307,11 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
303
307
  public async getOpenPositions(): Promise<IUSDZPositionInfo[]> {
304
308
  let positionDynamicFields: DynamicFieldInfo[] = []
305
309
  let _continue = true
306
- let cursor = undefined
310
+ let cursor
307
311
  while (_continue) {
308
312
  // data here will be a list of dynamic fields containing name and value
309
- const { data, nextCursor, hasNextPage } =
310
- await this.provider.getDynamicFields({
313
+ const { data, nextCursor, hasNextPage }
314
+ = await this.provider.getDynamicFields({
311
315
  parentId: this.consts.zoCore.positionsParent,
312
316
  cursor,
313
317
  })
@@ -320,7 +324,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
320
324
  // then we query by dynamic field names and order by time
321
325
  const positionInfoList: IUSDZPositionInfo[] = []
322
326
  await Promise.all(
323
- positionDynamicFields.map(async positionDynamicField => {
327
+ positionDynamicFields.map(async (positionDynamicField) => {
324
328
  const positionRaw = await this.provider.getDynamicFieldObject({
325
329
  parentId: this.consts.zoCore.positionsParent,
326
330
  name: positionDynamicField.name,
@@ -345,7 +349,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
345
349
 
346
350
  public async getOrderCapInfoList(owner: string): Promise<IUSDZOrderCapInfo[]> {
347
351
  const orderCapInfoList: IUSDZOrderCapInfo[] = []
348
- let cursor: string | undefined | null = undefined
352
+ let cursor: string | undefined | null
349
353
  let hasNextPage = true
350
354
 
351
355
  while (hasNextPage) {
@@ -383,7 +387,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
383
387
  return orderCapInfoList
384
388
  }
385
389
 
386
- public async getOrderInfoList(orderCapInfoList: IUSDZOrderCapInfo[], owner: string, batchSize: number = 10) {
390
+ public async getOrderInfoList(orderCapInfoList: IUSDZOrderCapInfo[], owner: string, batchSize = 10) {
387
391
  const orderInfoList: IUSDZOrderInfo[] = []
388
392
 
389
393
  // Process in batches of 10
@@ -407,7 +411,8 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
407
411
  },
408
412
  })
409
413
  orderInfoList.push(this.parseOrderInfo(orderRaw, orderCapInfo.orderCapId))
410
- } catch (error) {
414
+ }
415
+ catch (error) {
411
416
  // Order might have been deleted
412
417
  console.warn(`Failed to parse order info for order cap ID ${orderCapInfo.orderCapId}: ${error}`)
413
418
  // Continue with next order without adding this one to the list
@@ -437,7 +442,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
437
442
  /**
438
443
  * Gets rebase fee model for USDZ
439
444
  */
440
- public async getRebaseFeeModel(): Promise<{ base: number; multiplier: number }> {
445
+ public async getRebaseFeeModel(): Promise<{ base: number, multiplier: number }> {
441
446
  this.validateCache()
442
447
  if (this.rebaseFeeModelCache) {
443
448
  return this.rebaseFeeModelCache
@@ -448,10 +453,10 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
448
453
  showContent: true,
449
454
  },
450
455
  })
451
- return this.parseRebaseFeeModel(rawData)
456
+ return USDZDataAPI.parseRebaseFeeModel(rawData)
452
457
  }
453
458
 
454
- public async fundingFeeRate(indexToken: string, long: boolean,): Promise<number> {
459
+ public async fundingFeeRate(indexToken: string, long: boolean): Promise<number> {
455
460
  const symbol = await this.getSymbolInfo(indexToken, long)
456
461
  if (symbol.lastUpdate <= 0) {
457
462
  return 0
@@ -461,9 +466,9 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
461
466
  const model = symbol.fundingFeeModel
462
467
  const elapsed = SECONDS_PER_EIGHT_HOUR
463
468
 
464
- const deltaSize = this.calcDeltaSize(symbol, price)
469
+ const deltaSize = USDZDataAPI.calcDeltaSize(symbol, price)
465
470
  const pnlPerLp = (symbol.realisedPnl + symbol.unrealisedFundingFeeValue + deltaSize) / lpSupplyAmount
466
- return this.calcFundingFeeRate(model, pnlPerLp, elapsed)
471
+ return USDZDataAPI.calcFundingFeeRate(model, pnlPerLp, elapsed)
467
472
  }
468
473
 
469
474
  public async rebaseFeeRate(collateralToken: string, increase: boolean, amount: number): Promise<number> {
@@ -474,7 +479,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
474
479
  const value = amount * (await this.getOraclePrice(collateralToken)).getPriceUnchecked().getPriceAsNumberUnchecked() / (10 ** this.consts.coins[collateralToken].decimals)
475
480
  const vaultPromises = Object.keys(this.consts.zoCore.vaults).map(async (vault) => {
476
481
  const vaultInfo = await this.getVaultInfo(vault)
477
- const reservingFeeDelta = this.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
482
+ const reservingFeeDelta = USDZDataAPI.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
478
483
  const res = (reservingFeeDelta + vaultInfo.liquidity + vaultInfo.reservedAmount) * (await this.getOraclePrice(vault)).getPriceUnchecked().getPriceAsNumberUnchecked() / (10 ** this.consts.coins[vault].decimals)
479
484
  if (collateralToken === vault) {
480
485
  vaultValue = res
@@ -491,7 +496,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
491
496
  .map(e => Number.parseInt(e.weight, 10))
492
497
  .reduce((acc, curr) => acc + curr, 0)
493
498
 
494
- return this.calcRebaseFeeRate(
499
+ return USDZDataAPI.calcRebaseFeeRate(
495
500
  await this.getRebaseFeeModel(),
496
501
  increase,
497
502
  (vaultValue + value) / (totalVaultValue + value),
@@ -503,7 +508,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
503
508
  const vaultInfo = await this.getVaultInfo(collateralToken)
504
509
  const vaultSupply = vaultInfo.liquidity + vaultInfo.reservedAmount + vaultInfo.unrealisedReservingFeeAmount + amount
505
510
  const utilization = vaultSupply ? ((vaultInfo.reservedAmount + amount) / vaultSupply) : 0
506
- return this.calcReservingFeeRate(vaultInfo.reservingFeeModel, utilization, SECONDS_PER_EIGHT_HOUR)
511
+ return USDZDataAPI.calcReservingFeeRate(vaultInfo.reservingFeeModel, utilization, SECONDS_PER_EIGHT_HOUR)
507
512
  }
508
513
 
509
514
  public async getHistory(trader: string, page: number, limit: number, orderType?: string, symbol?: string): Promise<IBaseHistoryResponse> {
@@ -542,53 +547,53 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
542
547
  }
543
548
 
544
549
  // Private helper methods
545
- private calcFundingFeeRate(model: IUSDZFundingFeeModel, pnlPerRate: number, elapsed: number): number {
550
+ private static calcFundingFeeRate(model: IUSDZFundingFeeModel, pnlPerRate: number, elapsed: number): number {
546
551
  const dailyRate = Math.min(model.multiplier * Math.abs(pnlPerRate), model.max)
547
552
  const secondsRate = dailyRate * elapsed / SECONDS_PER_EIGHT_HOUR
548
553
  return pnlPerRate >= 0 ? -secondsRate : secondsRate
549
554
  }
550
555
 
551
- private calcAccFundingFeeRate(symbol: IUSDZSymbolInfo, model: IUSDZFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
556
+ private static calcAccFundingFeeRate(symbol: IUSDZSymbolInfo, model: IUSDZFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
552
557
  if (symbol.lastUpdate > 0) {
553
558
  const elapsed = timestamp - symbol.lastUpdate
554
559
  if (elapsed > 0) {
555
- const deltaSize = this.calcDeltaSize(symbol, price)
560
+ const deltaSize = USDZDataAPI.calcDeltaSize(symbol, price)
556
561
  const pnlPerLp = (symbol.realisedPnl + symbol.unrealisedFundingFeeValue + deltaSize) / lpSupplyAmount
557
- return symbol.accFundingRate + this.calcFundingFeeRate(model, pnlPerLp, elapsed)
562
+ return symbol.accFundingRate + USDZDataAPI.calcFundingFeeRate(model, pnlPerLp, elapsed)
558
563
  }
559
564
  }
560
565
  return symbol.accFundingRate
561
566
  }
562
567
 
563
- private calculateSymbolFundingFee(symbol: IUSDZSymbolInfo, model: IUSDZFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
564
- const accFundingRate = this.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
568
+ private static calculateSymbolFundingFee(symbol: IUSDZSymbolInfo, model: IUSDZFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
569
+ const accFundingRate = USDZDataAPI.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
565
570
  return symbol.unrealisedFundingFeeValue + (accFundingRate - symbol.accFundingRate) * symbol.openingSize
566
571
  }
567
572
 
568
- private calculatePositionReserveFee(position: IUSDZPositionInfo, vault: IUSDZVaultInfo, model: IUSDZReservingFeeModel, timestamp: number): number {
569
- const accReservingRate = this.calcAccReservingFeeRate(vault, model, timestamp)
573
+ private static calculatePositionReserveFee(position: IUSDZPositionInfo, vault: IUSDZVaultInfo, model: IUSDZReservingFeeModel, timestamp: number): number {
574
+ const accReservingRate = USDZDataAPI.calcAccReservingFeeRate(vault, model, timestamp)
570
575
  return position.reservingFeeAmount + (accReservingRate - vault.accReservingRate) * position.collateralAmount
571
576
  }
572
577
 
573
- private calcAccReservingFeeRate(vault: IUSDZVaultInfo, model: IUSDZReservingFeeModel, timestamp: number): number {
578
+ private static calcAccReservingFeeRate(vault: IUSDZVaultInfo, model: IUSDZReservingFeeModel, timestamp: number): number {
574
579
  if (vault.lastUpdate > 0) {
575
580
  const elapsed = timestamp - vault.lastUpdate
576
581
  if (elapsed > 0) {
577
- const utilization = this.vaultUtilization(vault)
578
- return vault.accReservingRate + this.calcReservingFeeRate(model, utilization, elapsed)
582
+ const utilization = USDZDataAPI.vaultUtilization(vault)
583
+ return vault.accReservingRate + USDZDataAPI.calcReservingFeeRate(model, utilization, elapsed)
579
584
  }
580
585
  }
581
586
  return vault.accReservingRate
582
587
  }
583
588
 
584
- private calcRebaseFeeRate(model: IUSDZRebaseFeeModel, increase: boolean, ratio: number, targetRatio: number): number {
589
+ private static calcRebaseFeeRate(model: IUSDZRebaseFeeModel, increase: boolean, ratio: number, targetRatio: number): number {
585
590
  if ((increase && ratio <= targetRatio) || (!increase && ratio >= targetRatio)) {
586
591
  return model.base
587
592
  }
588
593
  return model.base + model.multiplier * Math.abs(ratio - targetRatio)
589
594
  }
590
595
 
591
- private vaultUtilization(vault: IUSDZVaultInfo): number {
596
+ private static vaultUtilization(vault: IUSDZVaultInfo): number {
592
597
  const supplyAmount = vault.liquidity + vault.reservedAmount + vault.unrealisedReservingFeeAmount
593
598
  if (supplyAmount === 0) {
594
599
  return 0
@@ -596,16 +601,16 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
596
601
  return vault.reservedAmount / supplyAmount
597
602
  }
598
603
 
599
- private calcReservingFeeRate(model: IUSDZReservingFeeModel, utilization: number, elapsed: number): number {
604
+ private static calcReservingFeeRate(model: IUSDZReservingFeeModel, utilization: number, elapsed: number): number {
600
605
  return model.multiplier * utilization * elapsed / SECONDS_PER_EIGHT_HOUR
601
606
  }
602
607
 
603
- private calcDeltaSize(symbol: IUSDZSymbolInfo, price: number): number {
608
+ private static calcDeltaSize(symbol: IUSDZSymbolInfo, price: number): number {
604
609
  const latestSize = symbol.openingAmount / symbol.priceConfig.precision * price
605
610
  return symbol.long ? symbol.openingSize - latestSize : latestSize - symbol.openingSize
606
611
  }
607
612
 
608
- private parseMarketInfo(raw: any): IUSDZMarketInfo {
613
+ private static parseMarketInfo(raw: any): IUSDZMarketInfo {
609
614
  const content = raw.data.content.fields
610
615
 
611
616
  return {
@@ -629,7 +634,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
629
634
  showContent: true,
630
635
  },
631
636
  })
632
- const reservingFeeModel = this.parseReservingFeeModel(reservingFeeModelRaw)
637
+ const reservingFeeModel = USDZDataAPI.parseReservingFeeModel(reservingFeeModelRaw)
633
638
 
634
639
  return {
635
640
  liquidity: parseValue(vaultFields.liquidity),
@@ -660,7 +665,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
660
665
  showContent: true,
661
666
  },
662
667
  })
663
- const fundingFeeModel = this.parseFundingFeeModel(fundingFeeModelRaw)
668
+ const fundingFeeModel = USDZDataAPI.parseFundingFeeModel(fundingFeeModelRaw)
664
669
 
665
670
  return {
666
671
  openingSize: parseValue(fields.opening_size),
@@ -683,7 +688,7 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
683
688
  }
684
689
  }
685
690
 
686
- private parsePositionConfig(raw: any): IUSDZPositionConfig {
691
+ private static parsePositionConfig(raw: any): IUSDZPositionConfig {
687
692
  const positionConfigFields = raw.data.content.fields.inner.fields
688
693
 
689
694
  return {
@@ -723,18 +728,18 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
723
728
  openTimestamp: parseValue(positionFields.open_timestamp),
724
729
  }
725
730
 
726
- positionInfo.reservingFeeAmount = this.calculatePositionReserveFee(positionInfo, await this.getVaultInfo(positionInfo.collateralToken), (await this.getVaultInfo(positionInfo.collateralToken)).reservingFeeModel, Date.now() / 1000)
727
- positionInfo.fundingFeeValue = this.calculatePositionFundingFee(positionInfo, await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long), (await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long)).fundingFeeModel, (await this.getOraclePrice(positionInfo.indexToken)).getPriceUnchecked().getPriceAsNumberUnchecked(), (await this.getMarketInfo()).lpSupplyWithDecimals, Date.now() / 1000)
731
+ positionInfo.reservingFeeAmount = USDZDataAPI.calculatePositionReserveFee(positionInfo, await this.getVaultInfo(positionInfo.collateralToken), (await this.getVaultInfo(positionInfo.collateralToken)).reservingFeeModel, Date.now() / 1000)
732
+ positionInfo.fundingFeeValue = USDZDataAPI.calculatePositionFundingFee(positionInfo, await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long), (await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long)).fundingFeeModel, (await this.getOraclePrice(positionInfo.indexToken)).getPriceUnchecked().getPriceAsNumberUnchecked(), (await this.getMarketInfo()).lpSupplyWithDecimals, Date.now() / 1000)
728
733
 
729
734
  return positionInfo
730
735
  }
731
736
 
732
- private calculatePositionFundingFee(position: IUSDZPositionInfo, symbol: IUSDZSymbolInfo, model: IUSDZFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
733
- const accFundingRate = this.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
737
+ private static calculatePositionFundingFee(position: IUSDZPositionInfo, symbol: IUSDZSymbolInfo, model: IUSDZFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
738
+ const accFundingRate = USDZDataAPI.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
734
739
  return position.fundingFeeValue + (accFundingRate - symbol.accFundingRate) * position.positionSize
735
740
  }
736
741
 
737
- private parseRebaseFeeModel(raw: any): { base: number; multiplier: number } {
742
+ private static parseRebaseFeeModel(raw: any): { base: number, multiplier: number } {
738
743
  const { fields } = raw.data.content
739
744
 
740
745
  return {
@@ -743,14 +748,14 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
743
748
  }
744
749
  }
745
750
 
746
- private parseReservingFeeModel(raw: any): { multiplier: number } {
751
+ private static parseReservingFeeModel(raw: any): { multiplier: number } {
747
752
  const content = raw.data.content.fields
748
753
  return {
749
754
  multiplier: parseValue(content.multiplier),
750
755
  }
751
756
  }
752
757
 
753
- private parseFundingFeeModel(raw: any): { multiplier: number; max: number } {
758
+ private static parseFundingFeeModel(raw: any): { multiplier: number, max: number } {
754
759
  const content = raw.data.content.fields
755
760
  return {
756
761
  multiplier: parseValue(content.multiplier),
@@ -813,14 +818,14 @@ export class USDZDataAPI extends BaseDataAPI implements IUSDZDataAPI {
813
818
  return Number.parseFloat(await res.text() || '0')
814
819
  }
815
820
 
816
- private calculateVaultReservingFee(
821
+ private static calculateVaultReservingFee(
817
822
  vaultInfo: IUSDZVaultInfo,
818
823
  reservingFeeModel: { multiplier: number },
819
- currentTime: number
824
+ currentTime: number,
820
825
  ): number {
821
826
  const timeDelta = currentTime - vaultInfo.lastUpdate
822
827
  const periods = Math.floor(timeDelta / SECONDS_PER_EIGHT_HOUR)
823
- return vaultInfo.unrealisedReservingFeeAmount +
824
- (vaultInfo.reservedAmount * reservingFeeModel.multiplier * periods) / 1e18
828
+ return vaultInfo.unrealisedReservingFeeAmount
829
+ + (vaultInfo.reservedAmount * reservingFeeModel.multiplier * periods) / 1e18
825
830
  }
826
- }
831
+ }