aftermath-ts-sdk 1.2.51 → 1.2.52-perps.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 (214) hide show
  1. package/README.md +62 -28
  2. package/dist/general/apiHelpers/eventsApiHelpers.d.ts +1 -1
  3. package/dist/general/apiHelpers/eventsApiHelpers.d.ts.map +1 -1
  4. package/dist/general/apiHelpers/eventsApiHelpers.js +4 -1
  5. package/dist/general/apiHelpers/transactionsApiHelpers.d.ts +6 -0
  6. package/dist/general/apiHelpers/transactionsApiHelpers.d.ts.map +1 -1
  7. package/dist/general/apiHelpers/transactionsApiHelpers.js +46 -0
  8. package/dist/general/dynamicGas/dynamicGas.d.ts +34 -0
  9. package/dist/general/dynamicGas/dynamicGas.d.ts.map +1 -1
  10. package/dist/general/dynamicGas/dynamicGas.js +34 -0
  11. package/dist/general/dynamicGas/dynamicGasTypes.d.ts +25 -0
  12. package/dist/general/dynamicGas/dynamicGasTypes.d.ts.map +1 -1
  13. package/dist/general/prices/coinGeckoTypes.d.ts +2 -0
  14. package/dist/general/prices/coinGeckoTypes.d.ts.map +1 -1
  15. package/dist/general/prices/prices.d.ts +73 -0
  16. package/dist/general/prices/prices.d.ts.map +1 -1
  17. package/dist/general/prices/prices.js +73 -0
  18. package/dist/general/providers/aftermath.d.ts +107 -27
  19. package/dist/general/providers/aftermath.d.ts.map +1 -1
  20. package/dist/general/providers/aftermath.js +110 -30
  21. package/dist/general/providers/aftermathApi.d.ts +128 -10
  22. package/dist/general/providers/aftermathApi.d.ts.map +1 -1
  23. package/dist/general/providers/aftermathApi.js +133 -14
  24. package/dist/general/types/castingTypes.d.ts +15 -7
  25. package/dist/general/types/castingTypes.d.ts.map +1 -1
  26. package/dist/general/types/castingTypes.js +6 -0
  27. package/dist/general/types/configTypes.d.ts +14 -8
  28. package/dist/general/types/configTypes.d.ts.map +1 -1
  29. package/dist/general/types/generalTypes.d.ts +229 -7
  30. package/dist/general/types/generalTypes.d.ts.map +1 -1
  31. package/dist/general/types/moveErrorsInterface.d.ts +1 -1
  32. package/dist/general/types/moveErrorsInterface.d.ts.map +1 -1
  33. package/dist/general/types/suiTypes.d.ts +0 -16
  34. package/dist/general/types/suiTypes.d.ts.map +1 -1
  35. package/dist/general/types/suiTypes.js +3 -25
  36. package/dist/general/utils/caller.d.ts +6 -3
  37. package/dist/general/utils/caller.d.ts.map +1 -1
  38. package/dist/general/utils/caller.js +22 -4
  39. package/dist/general/utils/casting.d.ts +156 -5
  40. package/dist/general/utils/casting.d.ts.map +1 -1
  41. package/dist/general/utils/casting.js +159 -18
  42. package/dist/general/utils/fixedUtils.d.ts +89 -2
  43. package/dist/general/utils/fixedUtils.d.ts.map +1 -1
  44. package/dist/general/utils/fixedUtils.js +81 -4
  45. package/dist/general/utils/helpers.d.ts +327 -10
  46. package/dist/general/utils/helpers.d.ts.map +1 -1
  47. package/dist/general/utils/helpers.js +409 -91
  48. package/dist/general/utils/iFixedUtils.d.ts +64 -0
  49. package/dist/general/utils/iFixedUtils.d.ts.map +1 -1
  50. package/dist/general/utils/iFixedUtils.js +64 -0
  51. package/dist/general/wallet/wallet.d.ts +76 -1
  52. package/dist/general/wallet/wallet.d.ts.map +1 -1
  53. package/dist/general/wallet/wallet.js +75 -5
  54. package/dist/packages/auth/auth.d.ts +113 -4
  55. package/dist/packages/auth/auth.d.ts.map +1 -1
  56. package/dist/packages/auth/auth.js +190 -59
  57. package/dist/packages/auth/authTypes.d.ts +66 -0
  58. package/dist/packages/auth/authTypes.d.ts.map +1 -1
  59. package/dist/packages/coin/api/coinApi.d.ts.map +1 -1
  60. package/dist/packages/coin/api/coinApi.js +29 -20
  61. package/dist/packages/coin/coin.d.ts +256 -1
  62. package/dist/packages/coin/coin.d.ts.map +1 -1
  63. package/dist/packages/coin/coin.js +246 -15
  64. package/dist/packages/coin/coinTypes.d.ts +95 -0
  65. package/dist/packages/coin/coinTypes.d.ts.map +1 -1
  66. package/dist/packages/dca/api/dcaApi.d.ts +2 -0
  67. package/dist/packages/dca/api/dcaApi.d.ts.map +1 -1
  68. package/dist/packages/dca/api/dcaApi.js +6 -3
  69. package/dist/packages/dca/dca.d.ts +125 -35
  70. package/dist/packages/dca/dca.d.ts.map +1 -1
  71. package/dist/packages/dca/dca.js +135 -43
  72. package/dist/packages/dca/dcaTypes.d.ts +217 -42
  73. package/dist/packages/dca/dcaTypes.d.ts.map +1 -1
  74. package/dist/packages/farms/api/farmsApi.d.ts +725 -58
  75. package/dist/packages/farms/api/farmsApi.d.ts.map +1 -1
  76. package/dist/packages/farms/api/farmsApi.js +1149 -153
  77. package/dist/packages/farms/api/farmsApiCasting.d.ts +34 -18
  78. package/dist/packages/farms/api/farmsApiCasting.d.ts.map +1 -1
  79. package/dist/packages/farms/api/farmsApiCasting.js +218 -17
  80. package/dist/packages/farms/api/farmsApiCastingTypes.d.ts +117 -21
  81. package/dist/packages/farms/api/farmsApiCastingTypes.d.ts.map +1 -1
  82. package/dist/packages/farms/farms.d.ts +200 -12
  83. package/dist/packages/farms/farms.d.ts.map +1 -1
  84. package/dist/packages/farms/farms.js +204 -50
  85. package/dist/packages/farms/farmsStakedPosition.d.ts +143 -8
  86. package/dist/packages/farms/farmsStakedPosition.d.ts.map +1 -1
  87. package/dist/packages/farms/farmsStakedPosition.js +243 -137
  88. package/dist/packages/farms/farmsStakingPool.d.ts +171 -3
  89. package/dist/packages/farms/farmsStakingPool.d.ts.map +1 -1
  90. package/dist/packages/farms/farmsStakingPool.js +233 -73
  91. package/dist/packages/farms/farmsTypes.d.ts +310 -2
  92. package/dist/packages/farms/farmsTypes.d.ts.map +1 -1
  93. package/dist/packages/farms/farmsTypes.js +47 -0
  94. package/dist/packages/faucet/api/faucetApi.d.ts +9 -17
  95. package/dist/packages/faucet/api/faucetApi.d.ts.map +1 -1
  96. package/dist/packages/faucet/api/faucetApi.js +44 -49
  97. package/dist/packages/faucet/api/faucetApiCasting.d.ts.map +1 -1
  98. package/dist/packages/faucet/api/faucetApiCasting.js +8 -5
  99. package/dist/packages/faucet/api/faucetApiCastingTypes.d.ts +1 -4
  100. package/dist/packages/faucet/api/faucetApiCastingTypes.d.ts.map +1 -1
  101. package/dist/packages/faucet/faucet.d.ts +1 -1
  102. package/dist/packages/faucet/faucet.d.ts.map +1 -1
  103. package/dist/packages/faucet/faucet.js +1 -1
  104. package/dist/packages/faucet/faucetTypes.d.ts +2 -3
  105. package/dist/packages/faucet/faucetTypes.d.ts.map +1 -1
  106. package/dist/packages/limitOrders/api/limitOrdersApi.d.ts +12 -0
  107. package/dist/packages/limitOrders/api/limitOrdersApi.d.ts.map +1 -0
  108. package/dist/packages/limitOrders/api/limitOrdersApi.js +25 -0
  109. package/dist/packages/limitOrders/index.d.ts +2 -0
  110. package/dist/packages/limitOrders/index.d.ts.map +1 -0
  111. package/dist/packages/limitOrders/index.js +17 -0
  112. package/dist/packages/limitOrders/limitOrders.d.ts +143 -0
  113. package/dist/packages/limitOrders/limitOrders.d.ts.map +1 -0
  114. package/dist/packages/limitOrders/limitOrders.js +190 -0
  115. package/dist/packages/limitOrders/limitOrdersTypes.d.ts +211 -0
  116. package/dist/packages/limitOrders/limitOrdersTypes.d.ts.map +1 -0
  117. package/dist/packages/multisig/multisig.d.ts +34 -5
  118. package/dist/packages/multisig/multisig.d.ts.map +1 -1
  119. package/dist/packages/multisig/multisig.js +33 -4
  120. package/dist/packages/multisig/multisigTypes.d.ts +17 -0
  121. package/dist/packages/multisig/multisigTypes.d.ts.map +1 -1
  122. package/dist/packages/nftAmm/nftAmm.d.ts +1 -1
  123. package/dist/packages/nftAmm/nftAmm.d.ts.map +1 -1
  124. package/dist/packages/perpetuals/api/perpetualsApi.d.ts +38 -23
  125. package/dist/packages/perpetuals/api/perpetualsApi.d.ts.map +1 -1
  126. package/dist/packages/perpetuals/api/perpetualsApi.js +740 -299
  127. package/dist/packages/perpetuals/api/perpetualsApiCasting.d.ts +10 -6
  128. package/dist/packages/perpetuals/api/perpetualsApiCasting.d.ts.map +1 -1
  129. package/dist/packages/perpetuals/api/perpetualsApiCasting.js +112 -42
  130. package/dist/packages/perpetuals/perpetuals.d.ts +33 -4
  131. package/dist/packages/perpetuals/perpetuals.d.ts.map +1 -1
  132. package/dist/packages/perpetuals/perpetuals.js +105 -18
  133. package/dist/packages/perpetuals/perpetualsAccount.d.ts +107 -33
  134. package/dist/packages/perpetuals/perpetualsAccount.d.ts.map +1 -1
  135. package/dist/packages/perpetuals/perpetualsAccount.js +569 -68
  136. package/dist/packages/perpetuals/perpetualsCastingTypes.d.ts +104 -25
  137. package/dist/packages/perpetuals/perpetualsCastingTypes.d.ts.map +1 -1
  138. package/dist/packages/perpetuals/perpetualsMarket.d.ts +31 -9
  139. package/dist/packages/perpetuals/perpetualsMarket.d.ts.map +1 -1
  140. package/dist/packages/perpetuals/perpetualsMarket.js +85 -77
  141. package/dist/packages/perpetuals/perpetualsTypes.d.ts +348 -380
  142. package/dist/packages/perpetuals/perpetualsTypes.d.ts.map +1 -1
  143. package/dist/packages/perpetuals/perpetualsTypes.js +43 -113
  144. package/dist/packages/pools/api/poolsApiCasting.d.ts.map +1 -1
  145. package/dist/packages/pools/api/poolsApiCasting.js +0 -1
  146. package/dist/packages/pools/pool.d.ts +333 -106
  147. package/dist/packages/pools/pool.d.ts.map +1 -1
  148. package/dist/packages/pools/pool.js +347 -119
  149. package/dist/packages/pools/pools.d.ts +307 -39
  150. package/dist/packages/pools/pools.d.ts.map +1 -1
  151. package/dist/packages/pools/pools.js +323 -54
  152. package/dist/packages/pools/poolsTypes.d.ts +267 -2
  153. package/dist/packages/pools/poolsTypes.d.ts.map +1 -1
  154. package/dist/packages/referralVault/referralVault.d.ts +38 -1
  155. package/dist/packages/referralVault/referralVault.d.ts.map +1 -1
  156. package/dist/packages/referralVault/referralVault.js +37 -0
  157. package/dist/packages/router/api/routerApi.d.ts +2 -2
  158. package/dist/packages/router/api/routerApi.d.ts.map +1 -1
  159. package/dist/packages/router/api/routerApi.js +19 -11
  160. package/dist/packages/router/router.d.ts +214 -18
  161. package/dist/packages/router/router.d.ts.map +1 -1
  162. package/dist/packages/router/router.js +216 -20
  163. package/dist/packages/router/routerTypes.d.ts +202 -17
  164. package/dist/packages/router/routerTypes.d.ts.map +1 -1
  165. package/dist/packages/staking/staking.d.ts +306 -45
  166. package/dist/packages/staking/staking.d.ts.map +1 -1
  167. package/dist/packages/staking/staking.js +313 -51
  168. package/dist/packages/staking/stakingTypes.d.ts +431 -6
  169. package/dist/packages/staking/stakingTypes.d.ts.map +1 -1
  170. package/dist/packages/staking/stakingTypes.js +19 -0
  171. package/dist/packages/sui/sui.d.ts +40 -1
  172. package/dist/packages/sui/sui.d.ts.map +1 -1
  173. package/dist/packages/sui/sui.js +39 -0
  174. package/dist/packages/suiFrens/stakedSuiFren.d.ts +1 -1
  175. package/dist/packages/suiFrens/stakedSuiFren.d.ts.map +1 -1
  176. package/dist/packages/suiFrens/suiFren.d.ts +1 -1
  177. package/dist/packages/suiFrens/suiFren.d.ts.map +1 -1
  178. package/dist/packages/suiFrens/suiFrens.d.ts +1 -1
  179. package/dist/packages/suiFrens/suiFrens.d.ts.map +1 -1
  180. package/dist/packages/userData/api/userDataApi.d.ts +6 -0
  181. package/dist/packages/userData/api/userDataApi.d.ts.map +1 -0
  182. package/dist/packages/userData/api/userDataApi.js +12 -0
  183. package/dist/packages/userData/index.d.ts +2 -0
  184. package/dist/packages/userData/index.d.ts.map +1 -0
  185. package/dist/packages/userData/index.js +17 -0
  186. package/dist/packages/userData/userData.d.ts +89 -0
  187. package/dist/packages/userData/userData.d.ts.map +1 -0
  188. package/dist/packages/userData/userData.js +119 -0
  189. package/dist/packages/userData/userDataTypes.d.ts +29 -0
  190. package/dist/packages/userData/userDataTypes.d.ts.map +1 -0
  191. package/dist/types.d.ts.map +1 -1
  192. package/dist/types.js +0 -1
  193. package/package.json +1 -1
  194. package/dist/general/historicalData/historicalData.d.ts +0 -15
  195. package/dist/general/historicalData/historicalData.d.ts.map +0 -1
  196. package/dist/general/historicalData/historicalData.js +0 -45
  197. package/dist/general/historicalData/historicalDataTypes.d.ts +0 -10
  198. package/dist/general/historicalData/historicalDataTypes.d.ts.map +0 -1
  199. package/dist/packages/dca/api/dcaApiCasting.d.ts +0 -11
  200. package/dist/packages/dca/api/dcaApiCasting.d.ts.map +0 -1
  201. package/dist/packages/dca/api/dcaApiCasting.js +0 -186
  202. package/dist/packages/dca/api/dcaApiCastingTypes.d.ts +0 -142
  203. package/dist/packages/dca/api/dcaApiCastingTypes.d.ts.map +0 -1
  204. package/dist/packages/oracle/api/oracleApi.d.ts +0 -13
  205. package/dist/packages/oracle/api/oracleApi.d.ts.map +0 -1
  206. package/dist/packages/oracle/api/oracleApi.js +0 -35
  207. package/dist/packages/oracle/oracle.d.ts +0 -15
  208. package/dist/packages/oracle/oracle.d.ts.map +0 -1
  209. package/dist/packages/oracle/oracle.js +0 -46
  210. package/dist/packages/oracle/oracleTypes.d.ts +0 -2
  211. package/dist/packages/oracle/oracleTypes.d.ts.map +0 -1
  212. package/dist/packages/oracle/oracleTypes.js +0 -2
  213. /package/dist/{general/historicalData/historicalDataTypes.js → packages/limitOrders/limitOrdersTypes.js} +0 -0
  214. /package/dist/packages/{dca/api/dcaApiCastingTypes.js → userData/userDataTypes.js} +0 -0
@@ -8,24 +8,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __rest = (this && this.__rest) || function (s, e) {
12
- var t = {};
13
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
- t[p] = s[p];
15
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
- t[p[i]] = s[p[i]];
19
- }
20
- return t;
21
- };
22
11
  Object.defineProperty(exports, "__esModule", { value: true });
23
12
  exports.PerpetualsApi = void 0;
24
13
  const transactions_1 = require("@mysten/sui/transactions");
25
14
  const utils_1 = require("../../../general/utils");
26
15
  const sui_1 = require("../../sui");
27
- const perpetualsTypes_1 = require("../perpetualsTypes");
28
- const perpetuals_1 = require("../perpetuals");
29
16
  const eventsApiHelpers_1 = require("../../../general/apiHelpers/eventsApiHelpers");
30
17
  const transactionsApiHelpers_1 = require("../../../general/apiHelpers/transactionsApiHelpers");
31
18
  const bcs_1 = require("@mysten/sui/bcs");
@@ -36,12 +23,72 @@ class PerpetualsApi {
36
23
  constructor(Provider) {
37
24
  this.Provider = Provider;
38
25
  // =========================================================================
26
+ // Objects
27
+ // =========================================================================
28
+ // public fetchMarket = async (inputs: {
29
+ // marketId: PerpetualsMarketId;
30
+ // collateralCoinType: CoinType;
31
+ // }): Promise<PerpetualsMarketData> => {
32
+ // const { collateralCoinType } = inputs;
33
+ // return this.Provider.Objects().fetchCastObject({
34
+ // objectId: inputs.marketId,
35
+ // objectFromSuiObjectResponse: (data) =>
36
+ // Casting.perpetuals.clearingHouseFromOnChain(
37
+ // data,
38
+ // collateralCoinType
39
+ // ),
40
+ // });
41
+ // };
42
+ // =========================================================================
43
+ // Inspections
44
+ // =========================================================================
45
+ // public fetchOrderbookPrice = async (inputs: {
46
+ // collateralCoinType: ObjectId;
47
+ // marketId: PerpetualsMarketId;
48
+ // // marketInitialSharedVersion: ObjectVersion;
49
+ // }): Promise<number> => {
50
+ // const {
51
+ // collateralCoinType,
52
+ // marketId,
53
+ // // marketInitialSharedVersion
54
+ // } = inputs;
55
+ // const tx = new Transaction();
56
+ // this.getBookPriceTx({
57
+ // tx,
58
+ // marketId,
59
+ // collateralCoinType,
60
+ // // marketInitialSharedVersion,
61
+ // });
62
+ // const bytes =
63
+ // await this.Provider.Inspections().fetchFirstBytesFromTxOutput({
64
+ // tx,
65
+ // });
66
+ // return PerpetualsApiCasting.orderbookPriceFromBytes(bytes);
67
+ // };
68
+ // public fetchAllMarketIds = async (inputs: {
69
+ // collateralCoinType: CoinType;
70
+ // }): Promise<PerpetualsMarketId[]> => {
71
+ // const { collateralCoinType } = inputs;
72
+ // const marketIdsData = await this.Provider.indexerCaller.fetchIndexer<
73
+ // {
74
+ // marketId: ObjectId;
75
+ // }[]
76
+ // >(
77
+ // `perpetuals/markets/${Helpers.addLeadingZeroesToType(
78
+ // collateralCoinType
79
+ // )}`
80
+ // );
81
+ // return marketIdsData.map((data) =>
82
+ // Helpers.addLeadingZeroesToType(data.marketId)
83
+ // );
84
+ // };
85
+ // =========================================================================
39
86
  // Transaction Commands
40
87
  // =========================================================================
41
88
  this.depositCollateralTx = (inputs) => {
42
89
  const { tx, collateralCoinType, accountCapId } = inputs;
43
90
  return tx.moveCall({
44
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "deposit_collateral"),
91
+ target: utils_1.Helpers.transactions.createTxTarget(this.addresses.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "deposit_collateral"),
45
92
  typeArguments: [collateralCoinType],
46
93
  arguments: [
47
94
  typeof accountCapId === "string"
@@ -58,7 +105,7 @@ class PerpetualsApi {
58
105
  this.allocateCollateralTx = (inputs) => {
59
106
  const { tx, collateralCoinType, accountCapId, marketId, amount } = inputs;
60
107
  return tx.moveCall({
61
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "allocate_collateral"),
108
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "allocate_collateral"),
62
109
  typeArguments: [collateralCoinType],
63
110
  arguments: [
64
111
  tx.sharedObjectRef({
@@ -76,7 +123,7 @@ class PerpetualsApi {
76
123
  this.deallocateCollateralTx = (inputs) => {
77
124
  const { tx, collateralCoinType, accountCapId, marketId, amount } = inputs;
78
125
  return tx.moveCall({
79
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "deallocate_collateral"),
126
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "deallocate_collateral"),
80
127
  typeArguments: [collateralCoinType],
81
128
  arguments: [
82
129
  tx.sharedObjectRef({
@@ -95,7 +142,7 @@ class PerpetualsApi {
95
142
  this.createMarketPositionTx = (inputs) => {
96
143
  const { tx, collateralCoinType, accountCapId, marketId } = inputs;
97
144
  return tx.moveCall({
98
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "create_market_position"),
145
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "create_market_position"),
99
146
  typeArguments: [collateralCoinType],
100
147
  arguments: [
101
148
  tx.sharedObjectRef({
@@ -112,7 +159,7 @@ class PerpetualsApi {
112
159
  this.shareClearingHouseTx = (inputs) => {
113
160
  const { tx, collateralCoinType, marketId } = inputs;
114
161
  return tx.moveCall({
115
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "share_clearing_house"),
162
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "share_clearing_house"),
116
163
  typeArguments: [collateralCoinType],
117
164
  arguments: [
118
165
  typeof marketId === "string" ? tx.object(marketId) : marketId,
@@ -122,7 +169,7 @@ class PerpetualsApi {
122
169
  this.startSessionTx = (inputs) => {
123
170
  const { tx, collateralCoinType, accountCapId, marketId } = inputs;
124
171
  return tx.moveCall({
125
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "start_session"),
172
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "start_session"),
126
173
  typeArguments: [collateralCoinType],
127
174
  arguments: [
128
175
  tx.sharedObjectRef({
@@ -142,7 +189,7 @@ class PerpetualsApi {
142
189
  this.endSessionTx = (inputs) => {
143
190
  const { tx, collateralCoinType, sessionPotatoId } = inputs;
144
191
  return tx.moveCall({
145
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "end_session"),
192
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "end_session"),
146
193
  typeArguments: [collateralCoinType],
147
194
  arguments: [
148
195
  typeof sessionPotatoId === "string"
@@ -154,7 +201,7 @@ class PerpetualsApi {
154
201
  this.placeMarketOrderTx = (inputs) => {
155
202
  const { tx, collateralCoinType, sessionPotatoId, side, size } = inputs;
156
203
  return tx.moveCall({
157
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "place_market_order"),
204
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "place_market_order"),
158
205
  typeArguments: [collateralCoinType],
159
206
  arguments: [
160
207
  typeof sessionPotatoId === "string"
@@ -168,7 +215,7 @@ class PerpetualsApi {
168
215
  this.placeLimitOrderTx = (inputs) => {
169
216
  const { tx, collateralCoinType, sessionPotatoId, side, size, price, orderType, } = inputs;
170
217
  return tx.moveCall({
171
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "place_limit_order"),
218
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "place_limit_order"),
172
219
  typeArguments: [collateralCoinType],
173
220
  arguments: [
174
221
  typeof sessionPotatoId === "string"
@@ -184,7 +231,23 @@ class PerpetualsApi {
184
231
  this.cancelOrdersTx = (inputs) => {
185
232
  const { tx, collateralCoinType, accountCapId, marketId, orderIds } = inputs;
186
233
  return tx.moveCall({
187
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "cancel_orders"),
234
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.interface, "cancel_orders"),
235
+ typeArguments: [collateralCoinType],
236
+ arguments: [
237
+ tx.sharedObjectRef({
238
+ objectId: marketId,
239
+ initialSharedVersion: inputs.marketInitialSharedVersion,
240
+ mutable: true,
241
+ }),
242
+ tx.object(accountCapId),
243
+ tx.pure(bcs_1.bcs.vector(bcs_1.bcs.u128()).serialize(orderIds)),
244
+ ],
245
+ });
246
+ };
247
+ this.reduceOrdersTx = (inputs) => {
248
+ const { tx, packageId, collateralCoinType, accountCapId, marketId, orderIds, sizesToSubtract, } = inputs;
249
+ return tx.moveCall({
250
+ target: utils_1.Helpers.transactions.createTxTarget(packageId, PerpetualsApi.constants.moduleNames.interface, "reduce_orders"),
188
251
  typeArguments: [collateralCoinType],
189
252
  arguments: [
190
253
  tx.sharedObjectRef({
@@ -194,13 +257,14 @@ class PerpetualsApi {
194
257
  }),
195
258
  tx.object(accountCapId),
196
259
  tx.pure(bcs_1.bcs.vector(bcs_1.bcs.u128()).serialize(orderIds)),
260
+ tx.pure(bcs_1.bcs.vector(bcs_1.bcs.u64()).serialize(sizesToSubtract)),
197
261
  ],
198
262
  });
199
263
  };
200
264
  this.withdrawCollateralTx = (inputs) => {
201
265
  const { tx, collateralCoinType, accountCapId, amount } = inputs;
202
266
  return tx.moveCall({
203
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "withdraw_collateral"),
267
+ target: utils_1.Helpers.transactions.createTxTarget(this.addresses.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "withdraw_collateral"),
204
268
  typeArguments: [collateralCoinType],
205
269
  arguments: [
206
270
  typeof accountCapId === "string"
@@ -213,9 +277,9 @@ class PerpetualsApi {
213
277
  this.createAccountTx = (inputs) => {
214
278
  const { tx, collateralCoinType } = inputs;
215
279
  return tx.moveCall({
216
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "create_account"),
280
+ target: utils_1.Helpers.transactions.createTxTarget(this.addresses.packages.perpetuals, PerpetualsApi.constants.moduleNames.interface, "create_account"),
217
281
  typeArguments: [collateralCoinType],
218
- arguments: [tx.object(this.addresses.perpetuals.objects.registry)],
282
+ arguments: [tx.object(this.addresses.objects.registry)],
219
283
  });
220
284
  };
221
285
  // public getHotPotatoFieldsTx = (
@@ -250,7 +314,7 @@ class PerpetualsApi {
250
314
  // const { tx, collateralCoinType, sessionPotatoId } = inputs;
251
315
  // return tx.moveCall({
252
316
  // target: Helpers.transactions.createTxTarget(
253
- // this.addresses.perpetuals.packages.perpetuals,
317
+ // inputs.packageId,
254
318
  // PerpetualsApi.constants.moduleNames.clearingHouse,
255
319
  // "get_hot_potato_fields"
256
320
  // ),
@@ -262,56 +326,10 @@ class PerpetualsApi {
262
326
  // ],
263
327
  // });
264
328
  // };
265
- this.placeSLTPOrderTx = (inputs) => {
266
- throw new Error("TODO");
267
- // const { tx } = inputs;
268
- // if ("price" in inputs) {
269
- // this.placeLimitOrderTx({ ...inputs, tx });
270
- // } else {
271
- // this.placeMarketOrderTx({ ...inputs, tx });
272
- // }
273
- // const orderType = PerpetualsOrderType.PostOnly;
274
- // const side =
275
- // inputs.side === PerpetualsOrderSide.Ask
276
- // ? PerpetualsOrderSide.Bid
277
- // : PerpetualsOrderSide.Ask;
278
- // const orderPrice =
279
- // "price" in inputs ? inputs.price : inputs.marketPrice;
280
- // if (
281
- // "slPrice" in inputs &&
282
- // ((inputs.side === PerpetualsOrderSide.Ask &&
283
- // inputs.slPrice > orderPrice) ||
284
- // (inputs.side === PerpetualsOrderSide.Bid &&
285
- // inputs.slPrice < orderPrice))
286
- // ) {
287
- // this.placeLimitOrderTx({
288
- // ...inputs,
289
- // tx,
290
- // orderType,
291
- // side,
292
- // price: inputs.slPrice,
293
- // });
294
- // }
295
- // if (
296
- // "tpPrice" in inputs &&
297
- // ((inputs.side === PerpetualsOrderSide.Ask &&
298
- // inputs.tpPrice < orderPrice) ||
299
- // (inputs.side === PerpetualsOrderSide.Bid &&
300
- // inputs.tpPrice > orderPrice))
301
- // ) {
302
- // this.placeLimitOrderTx({
303
- // ...inputs,
304
- // tx,
305
- // orderType,
306
- // side,
307
- // price: inputs.tpPrice,
308
- // });
309
- // }
310
- };
311
329
  this.getPositionTx = (inputs) => {
312
330
  const { tx, marketId, collateralCoinType } = inputs;
313
331
  return tx.moveCall({
314
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.clearingHouse, "get_position"),
332
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_position"),
315
333
  typeArguments: [collateralCoinType],
316
334
  arguments: [
317
335
  tx.sharedObjectRef({
@@ -326,7 +344,7 @@ class PerpetualsApi {
326
344
  this.getOrderbookTx = (inputs) => {
327
345
  const { tx, collateralCoinType } = inputs;
328
346
  return tx.moveCall({
329
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.clearingHouse, "get_orderbook"),
347
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_orderbook"),
330
348
  typeArguments: [collateralCoinType],
331
349
  arguments: [tx.object(inputs.marketId)],
332
350
  });
@@ -334,7 +352,7 @@ class PerpetualsApi {
334
352
  this.getBookPriceTx = (inputs) => {
335
353
  const { tx, marketId, collateralCoinType } = inputs;
336
354
  return tx.moveCall({
337
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.clearingHouse, "get_book_price"),
355
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_book_price"),
338
356
  typeArguments: [collateralCoinType],
339
357
  arguments: [
340
358
  tx.object(marketId),
@@ -349,7 +367,7 @@ class PerpetualsApi {
349
367
  this.getBestPriceTx = (inputs) => {
350
368
  const { tx, marketId, collateralCoinType } = inputs;
351
369
  return tx.moveCall({
352
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.clearingHouse, "get_best_price"),
370
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.clearingHouse, "get_best_price"),
353
371
  typeArguments: [collateralCoinType],
354
372
  arguments: [
355
373
  tx.sharedObjectRef({
@@ -364,7 +382,7 @@ class PerpetualsApi {
364
382
  this.inspectOrdersTx = (inputs) => {
365
383
  const { tx, orderbookId } = inputs;
366
384
  return tx.moveCall({
367
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.orderbook, "inspect_orders"),
385
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.orderbook, "inspect_orders"),
368
386
  typeArguments: [],
369
387
  arguments: [
370
388
  typeof orderbookId === "string"
@@ -379,7 +397,7 @@ class PerpetualsApi {
379
397
  this.getOrderSizeTx = (inputs) => {
380
398
  const { tx, orderbookId } = inputs;
381
399
  return tx.moveCall({
382
- target: utils_1.Helpers.transactions.createTxTarget(this.addresses.perpetuals.packages.perpetuals, PerpetualsApi.constants.moduleNames.orderbook, "get_order_size"),
400
+ target: utils_1.Helpers.transactions.createTxTarget(inputs.packageId, PerpetualsApi.constants.moduleNames.orderbook, "get_order_size"),
383
401
  typeArguments: [],
384
402
  arguments: [
385
403
  typeof orderbookId === "string"
@@ -406,57 +424,113 @@ class PerpetualsApi {
406
424
  coinId }, inputs));
407
425
  return tx;
408
426
  });
409
- this.buildCancelOrderTx = (inputs) => {
410
- const { orderId, marketId, marketInitialSharedVersion, collateral, basePriceFeedId, collateralPriceFeedId } = inputs, otherInputs = __rest(inputs, ["orderId", "marketId", "marketInitialSharedVersion", "collateral", "basePriceFeedId", "collateralPriceFeedId"]);
411
- return this.buildCancelOrdersTx(Object.assign(Object.assign({}, otherInputs), { orderDatas: [
412
- {
413
- orderId,
414
- marketId,
415
- marketInitialSharedVersion,
416
- collateral,
417
- basePriceFeedId,
418
- collateralPriceFeedId,
419
- },
420
- ] }));
421
- };
422
- this.buildCancelOrdersTx = (inputs) => {
423
- const { orderDatas, collateralCoinType, accountCapId } = inputs;
424
- if (orderDatas.length <= 0)
425
- throw new Error("cannot have order datas of length zero");
426
- const tx = new transactions_1.Transaction();
427
- tx.setSender(inputs.walletAddress);
428
- const marketIdToOrderIds = orderDatas.reduce((acc, order) => {
429
- if (order.marketId in acc) {
430
- return Object.assign(Object.assign({}, acc), { [order.marketId]: [...acc[order.marketId], order] });
431
- }
432
- return Object.assign(Object.assign({}, acc), { [order.marketId]: [order] });
433
- }, {});
434
- for (const [marketId, orders] of Object.entries(marketIdToOrderIds)) {
435
- if (orders.length <= 0)
436
- continue;
437
- const marketInitialSharedVersion = orders[0].marketInitialSharedVersion;
438
- this.cancelOrdersTx({
439
- tx,
440
- collateralCoinType,
441
- accountCapId,
442
- marketId,
443
- marketInitialSharedVersion,
444
- orderIds: orders.map((order) => order.orderId),
445
- });
446
- // TODO: handle deallocating too much ?
447
- this.deallocateCollateralTx({
448
- tx,
449
- accountCapId,
450
- collateralCoinType,
451
- marketId,
452
- marketInitialSharedVersion,
453
- amount: utils_1.Helpers.sumBigInt(orders.map((order) => order.collateral)),
454
- basePriceFeedId: orders[0].basePriceFeedId,
455
- collateralPriceFeedId: orders[0].collateralPriceFeedId,
456
- });
457
- }
458
- return tx;
459
- };
427
+ // public buildCancelOrderTx = (
428
+ // inputs: ApiPerpetualsCancelOrderBody
429
+ // ): Transaction => {
430
+ // const {
431
+ // packageId,
432
+ // orderId,
433
+ // marketId,
434
+ // marketInitialSharedVersion,
435
+ // collateralChange,
436
+ // basePriceFeedId,
437
+ // collateralPriceFeedId,
438
+ // ...otherInputs
439
+ // } = inputs;
440
+ // return this.buildCancelOrdersTx({
441
+ // ...otherInputs,
442
+ // orderDatas: [
443
+ // {
444
+ // packageId,
445
+ // orderId,
446
+ // marketId,
447
+ // marketInitialSharedVersion,
448
+ // collateralChange,
449
+ // basePriceFeedId,
450
+ // collateralPriceFeedId,
451
+ // },
452
+ // ],
453
+ // });
454
+ // };
455
+ // public buildCancelOrdersTx = (
456
+ // inputs: ApiPerpetualsCancelOrdersBody
457
+ // ): Transaction => {
458
+ // const { orderDatas, collateralCoinType, accountCapId } = inputs;
459
+ // if (orderDatas.length <= 0)
460
+ // throw new Error("cannot have order datas of length zero");
461
+ // const tx = new Transaction();
462
+ // tx.setSender(inputs.walletAddress);
463
+ // const marketIdToOrderIds = orderDatas.reduce(
464
+ // (acc, order) => {
465
+ // if (order.marketId in acc) {
466
+ // return {
467
+ // ...acc,
468
+ // [order.marketId]: [...acc[order.marketId], order],
469
+ // };
470
+ // }
471
+ // return {
472
+ // ...acc,
473
+ // [order.marketId]: [order],
474
+ // };
475
+ // },
476
+ // {} as Record<
477
+ // PerpetualsMarketId,
478
+ // {
479
+ // packageId: PackageId;
480
+ // orderId: PerpetualsOrderId;
481
+ // marketId: PerpetualsMarketId;
482
+ // marketInitialSharedVersion: ObjectVersion;
483
+ // collateralChange: Balance;
484
+ // basePriceFeedId: ObjectId;
485
+ // collateralPriceFeedId: ObjectId;
486
+ // }[]
487
+ // >
488
+ // );
489
+ // for (const [marketId, orders] of Object.entries(marketIdToOrderIds)) {
490
+ // if (orders.length <= 0) continue;
491
+ // const marketInitialSharedVersion =
492
+ // orders[0].marketInitialSharedVersion;
493
+ // const packageId = orders[0].packageId;
494
+ // this.cancelOrdersTx({
495
+ // tx,
496
+ // collateralCoinType,
497
+ // accountCapId,
498
+ // marketId,
499
+ // marketInitialSharedVersion,
500
+ // packageId,
501
+ // orderIds: orders.map((order) => order.orderId),
502
+ // });
503
+ // const netCollateralChange = Helpers.sumBigInt(
504
+ // orders.map((order) => order.collateralChange)
505
+ // );
506
+ // if (netCollateralChange < BigInt(0)) {
507
+ // this.deallocateCollateralTx({
508
+ // tx,
509
+ // accountCapId,
510
+ // collateralCoinType,
511
+ // marketId,
512
+ // marketInitialSharedVersion,
513
+ // packageId,
514
+ // amount: Helpers.absBigInt(netCollateralChange),
515
+ // basePriceFeedId: orders[0].basePriceFeedId,
516
+ // collateralPriceFeedId: orders[0].collateralPriceFeedId,
517
+ // });
518
+ // } else if (netCollateralChange > BigInt(0)) {
519
+ // this.allocateCollateralTx({
520
+ // tx,
521
+ // accountCapId,
522
+ // collateralCoinType,
523
+ // marketId,
524
+ // marketInitialSharedVersion,
525
+ // packageId,
526
+ // amount: netCollateralChange,
527
+ // });
528
+ // } else {
529
+ // // no collateral change
530
+ // }
531
+ // }
532
+ // return tx;
533
+ // };
460
534
  this.buildWithdrawCollateralTx = (inputs) => {
461
535
  const tx = new transactions_1.Transaction();
462
536
  tx.setSender(inputs.walletAddress);
@@ -471,16 +545,6 @@ class PerpetualsApi {
471
545
  tx.transferObjects([accountCap], inputs.walletAddress);
472
546
  return tx;
473
547
  };
474
- this.fetchBuildPlaceSLTPOrderTx = (inputs) => {
475
- throw new Error("TODO");
476
- // const { tx, sessionPotatoId } = this.createTxAndStartSession(inputs);
477
- // this.placeSLTPOrderTx({
478
- // ...inputs,
479
- // tx,
480
- // sessionPotatoId,
481
- // });
482
- // return tx;
483
- };
484
548
  this.buildTransferCollateralTx = (inputs) => {
485
549
  const { walletAddress, collateralCoinType, fromAccountCapId, toAccountCapId, amount, } = inputs;
486
550
  const tx = new transactions_1.Transaction();
@@ -499,28 +563,460 @@ class PerpetualsApi {
499
563
  });
500
564
  return tx;
501
565
  };
502
- // TODO: add to sdk
503
566
  this.buildAllocateCollateralTx = transactionsApiHelpers_1.TransactionsApiHelpers.createBuildTxFunc(this.allocateCollateralTx);
504
- // TODO: add to sdk
505
567
  this.buildDeallocateCollateralTx = transactionsApiHelpers_1.TransactionsApiHelpers.createBuildTxFunc(this.deallocateCollateralTx);
568
+ // public buildReduceOrdersTx = (
569
+ // inputs: ApiPerpetualsReduceOrdersBody
570
+ // ): Transaction => {
571
+ // const {
572
+ // walletAddress,
573
+ // collateralChange,
574
+ // accountCapId,
575
+ // collateralCoinType,
576
+ // marketId,
577
+ // marketInitialSharedVersion,
578
+ // packageId,
579
+ // basePriceFeedId,
580
+ // collateralPriceFeedId,
581
+ // orderIds,
582
+ // sizesToSubtract,
583
+ // } = inputs;
584
+ // const tx = new Transaction();
585
+ // tx.setSender(walletAddress);
586
+ // this.reduceOrdersTx({
587
+ // tx,
588
+ // packageId,
589
+ // collateralCoinType,
590
+ // accountCapId,
591
+ // marketId,
592
+ // marketInitialSharedVersion,
593
+ // orderIds,
594
+ // sizesToSubtract,
595
+ // });
596
+ // if (collateralChange < BigInt(0)) {
597
+ // this.deallocateCollateralTx({
598
+ // tx,
599
+ // accountCapId,
600
+ // collateralCoinType,
601
+ // marketId,
602
+ // marketInitialSharedVersion,
603
+ // packageId,
604
+ // basePriceFeedId,
605
+ // collateralPriceFeedId,
606
+ // amount: Helpers.absBigInt(collateralChange),
607
+ // });
608
+ // } else if (collateralChange > BigInt(0)) {
609
+ // this.allocateCollateralTx({
610
+ // tx,
611
+ // accountCapId,
612
+ // collateralCoinType,
613
+ // marketId,
614
+ // marketInitialSharedVersion,
615
+ // packageId,
616
+ // amount: collateralChange,
617
+ // });
618
+ // } else {
619
+ // // no collateral change
620
+ // }
621
+ // return tx;
622
+ // };
506
623
  // =========================================================================
507
624
  // Helpers
508
625
  // =========================================================================
509
626
  this.getAccountCapType = (inputs) => {
510
- return `${this.addresses.perpetuals.packages.perpetuals}::${PerpetualsApi.constants.moduleNames.account}::Account<${inputs.collateralCoinType}>`;
627
+ return `${this.addresses.packages.events}::${PerpetualsApi.constants.moduleNames.account}::Account<${inputs.collateralCoinType}>`;
511
628
  };
512
629
  // =========================================================================
630
+ // Private Helpers
631
+ // =========================================================================
632
+ // private fetchOrdersSizes = async (inputs: {
633
+ // orderIds: PerpetualsOrderId[];
634
+ // collateralCoinType: ObjectId;
635
+ // marketId: PerpetualsMarketId;
636
+ // }): Promise<bigint[]> => {
637
+ // const { orderIds, marketId, collateralCoinType } = inputs;
638
+ // if (orderIds.length <= 0) return [];
639
+ // const tx = new Transaction();
640
+ // const orderbookId = this.getOrderbookTx({
641
+ // tx,
642
+ // collateralCoinType,
643
+ // marketId,
644
+ // });
645
+ // for (const orderId of orderIds) {
646
+ // this.getOrderSizeTx({
647
+ // tx,
648
+ // orderId,
649
+ // orderbookId,
650
+ // });
651
+ // }
652
+ // const { allBytes } =
653
+ // await this.Provider.Inspections().fetchAllBytesFromTx({
654
+ // tx,
655
+ // });
656
+ // const sizes = allBytes
657
+ // .slice(1)
658
+ // .map((bytes) => Casting.bigIntFromBytes(bytes[0]));
659
+ // return sizes;
660
+ // };
661
+ // private fetchOrderbookOrders = async (inputs: {
662
+ // collateralCoinType: ObjectId;
663
+ // marketId: PerpetualsMarketId;
664
+ // side: PerpetualsOrderSide;
665
+ // fromPrice: PerpetualsOrderPrice;
666
+ // toPrice: PerpetualsOrderPrice;
667
+ // }): Promise<PerpetualsOrderInfo[]> => {
668
+ // const { collateralCoinType, marketId, side, fromPrice, toPrice } =
669
+ // inputs;
670
+ // const tx = new Transaction();
671
+ // const orderbookId = this.getOrderbookTx({
672
+ // tx,
673
+ // collateralCoinType,
674
+ // marketId,
675
+ // });
676
+ // this.inspectOrdersTx({ tx, orderbookId, side, fromPrice, toPrice });
677
+ // const bytes =
678
+ // await this.Provider.Inspections().fetchFirstBytesFromTxOutput({
679
+ // tx,
680
+ // });
681
+ // const orderInfos: any[] = bcs
682
+ // .vector(perpetualsRegistry.OrderInfo)
683
+ // .parse(new Uint8Array(bytes));
684
+ // return orderInfos.map((orderInfo) =>
685
+ // Casting.perpetuals.orderInfoFromRaw(orderInfo)
686
+ // );
687
+ // };
688
+ // public fetchExecutionPrice = async (
689
+ // inputs: ApiPerpetualsExecutionPriceBody & {
690
+ // collateralCoinType: CoinType;
691
+ // marketId: PerpetualsMarketId;
692
+ // }
693
+ // ): Promise<ApiPerpetualsExecutionPriceResponse> => {
694
+ // const {
695
+ // // collateral,
696
+ // collateralCoinType,
697
+ // marketId,
698
+ // side,
699
+ // size,
700
+ // price,
701
+ // lotSize,
702
+ // basePriceFeedId,
703
+ // collateralPriceFeedId,
704
+ // } = inputs;
705
+ // // TODO: change this
706
+ // const collateral = BigInt(1000000000000000);
707
+ // // const accountCapId = perpetualsBcsRegistry
708
+ // // .ser(`Account<${collateralCoinType}>`, {
709
+ // // id: {
710
+ // // id: {
711
+ // // bytes: "0x0000000000000000000000000000000000000000000000000000000000000321",
712
+ // // },
713
+ // // },
714
+ // // accountId: 0,
715
+ // // collateral,
716
+ // // })
717
+ // // .toBytes();
718
+ // const depositCoinBytes = perpetualsRegistry.Coin.serialize({
719
+ // id: "0x0000000000000000000000000000000000000000000000000000000000000123",
720
+ // balance: {
721
+ // value: BigInt(1000000000000000),
722
+ // },
723
+ // }).toBytes();
724
+ // const walletAddress = InspectionsApiHelpers.constants.devInspectSigner;
725
+ // const tx = new Transaction();
726
+ // tx.setSender(walletAddress);
727
+ // const accountCapId = this.createAccountTx({
728
+ // ...inputs,
729
+ // tx,
730
+ // });
731
+ // this.depositCollateralTx({
732
+ // tx,
733
+ // collateralCoinType,
734
+ // accountCapId,
735
+ // coinBytes: depositCoinBytes,
736
+ // });
737
+ // const { sessionPotatoId } = this.createTxAndStartSession({
738
+ // tx,
739
+ // accountCapId,
740
+ // collateralCoinType,
741
+ // marketId,
742
+ // walletAddress,
743
+ // basePriceFeedId,
744
+ // collateralPriceFeedId,
745
+ // collateralChange: collateral,
746
+ // hasPosition: false,
747
+ // });
748
+ // this.placeLimitOrderTx({
749
+ // tx,
750
+ // side,
751
+ // size,
752
+ // collateralCoinType,
753
+ // sessionPotatoId,
754
+ // orderType: PerpetualsOrderType.Standard,
755
+ // price:
756
+ // price ??
757
+ // (side === PerpetualsOrderSide.Bid
758
+ // ? BigInt("0x7FFFFFFFFFFFFFFF") // 2^63 - 1
759
+ // : BigInt(1)),
760
+ // });
761
+ // this.getHotPotatoFieldsTx({
762
+ // tx,
763
+ // collateralCoinType,
764
+ // sessionPotatoId,
765
+ // });
766
+ // this.endSessionAndTransferAccount({
767
+ // ...inputs,
768
+ // tx,
769
+ // sessionPotatoId,
770
+ // walletAddress,
771
+ // collateralChange: BigInt(0),
772
+ // });
773
+ // const { events } =
774
+ // await this.Provider.Inspections().fetchAllBytesFromTx({
775
+ // tx,
776
+ // });
777
+ // const filledTakerEvent = EventsApiHelpers.findCastEventOrUndefined({
778
+ // events,
779
+ // eventType: this.eventTypes.filledTakerOrder,
780
+ // castFunction: Casting.perpetuals.filledTakerOrderEventFromOnChain,
781
+ // });
782
+ // const sizeNum = lotSize * Math.abs(Number(size));
783
+ // if (!filledTakerEvent) {
784
+ // return {
785
+ // executionPrice: 0,
786
+ // sizeFilled: 0,
787
+ // sizePosted: sizeNum,
788
+ // fills: [],
789
+ // };
790
+ // }
791
+ // const filledOrderEvents =
792
+ // Aftermath.helpers.events.findCastEventsOrUndefined({
793
+ // events,
794
+ // eventType: this.eventTypes.filledTakerOrder,
795
+ // castFunction:
796
+ // Casting.perpetuals.filledTakerOrderEventFromOnChain,
797
+ // });
798
+ // const fills: PerpetualsFilledOrderData[] = filledOrderEvents.map(
799
+ // (event) => {
800
+ // const size = Math.abs(
801
+ // Casting.IFixed.numberFromIFixed(event.baseAssetDelta)
802
+ // );
803
+ // const sizeUsd = Math.abs(
804
+ // Casting.IFixed.numberFromIFixed(event.quoteAssetDelta)
805
+ // );
806
+ // const price = sizeUsd / size;
807
+ // return {
808
+ // size,
809
+ // price,
810
+ // };
811
+ // }
812
+ // );
813
+ // const executionPrice = Perpetuals.calcEntryPrice(filledTakerEvent);
814
+ // const sizeFilled = Math.abs(
815
+ // Casting.IFixed.numberFromIFixed(filledTakerEvent.baseAssetDelta)
816
+ // );
817
+ // const sizePosted = sizeNum - sizeFilled;
818
+ // return {
819
+ // executionPrice,
820
+ // sizeFilled,
821
+ // sizePosted,
822
+ // fills,
823
+ // };
824
+ // // const { fillReceipts, postReceipt } =
825
+ // // await this.fetchMarketOrderReceipts(inputs);
826
+ // // const sizePosted = postReceipt !== undefined ? postReceipt.size : 0;
827
+ // // if (fillReceipts.length <= 0)
828
+ // // return price !== undefined
829
+ // // ? // simulating limit order
830
+ // // {
831
+ // // executionPrice: Perpetuals.orderPriceToPrice({
832
+ // // orderPrice: price,
833
+ // // lotSize,
834
+ // // tickSize,
835
+ // // }),
836
+ // // sizeFilled: 0,
837
+ // // sizePosted: Number(sizePosted),
838
+ // // }
839
+ // // : // simulating market order
840
+ // // {
841
+ // // executionPrice: 0,
842
+ // // sizeFilled: 0,
843
+ // // sizePosted: 0,
844
+ // // };
845
+ // // const sizeFilled = Helpers.sumBigInt(
846
+ // // fillReceipts.map((receipt) => receipt.size)
847
+ // // );
848
+ // // const executionPrice = fillReceipts.reduce((acc, receipt) => {
849
+ // // const orderPrice = PerpetualsOrderUtils.price(
850
+ // // receipt.orderId,
851
+ // // inputs.side === PerpetualsOrderSide.Ask
852
+ // // ? PerpetualsOrderSide.Bid
853
+ // // : PerpetualsOrderSide.Ask
854
+ // // );
855
+ // // const orderPriceNum = Perpetuals.orderPriceToPrice({
856
+ // // orderPrice,
857
+ // // lotSize,
858
+ // // tickSize,
859
+ // // });
860
+ // // return (
861
+ // // acc +
862
+ // // orderPriceNum * (Number(receipt.size) / Number(sizeFilled))
863
+ // // );
864
+ // // }, 0);
865
+ // // return {
866
+ // // executionPrice,
867
+ // // sizeFilled: Number(sizeFilled),
868
+ // // sizePosted: Number(sizePosted),
869
+ // // };
870
+ // };
871
+ // private createTxAndStartSession = (inputs: {
872
+ // tx?: Transaction;
873
+ // collateralCoinType: CoinType;
874
+ // accountCapId: ObjectId | TransactionArgument;
875
+ // marketId: PerpetualsMarketId;
876
+ // marketInitialSharedVersion: ObjectVersion;
877
+ // basePriceFeedId: ObjectId;
878
+ // collateralPriceFeedId: ObjectId;
879
+ // walletAddress: SuiAddress;
880
+ // collateralChange: Balance;
881
+ // hasPosition: boolean;
882
+ // }) => {
883
+ // const { collateralChange, walletAddress, hasPosition } = inputs;
884
+ // const { tx: inputsTx, ...nonTxInputs } = inputs;
885
+ // const tx = inputsTx ?? new Transaction();
886
+ // tx.setSender(walletAddress);
887
+ // if (!hasPosition) {
888
+ // this.createMarketPositionTx({
889
+ // ...nonTxInputs,
890
+ // tx,
891
+ // });
892
+ // }
893
+ // if (collateralChange > BigInt(0)) {
894
+ // this.allocateCollateralTx({
895
+ // ...nonTxInputs,
896
+ // tx,
897
+ // amount: collateralChange,
898
+ // });
899
+ // }
900
+ // const sessionPotatoId = this.startSessionTx({
901
+ // ...nonTxInputs,
902
+ // tx,
903
+ // });
904
+ // return { tx, sessionPotatoId };
905
+ // };
906
+ // private endSessionAndShareMarket = (inputs: {
907
+ // tx: Transaction;
908
+ // collateralCoinType: CoinType;
909
+ // sessionPotatoId: ObjectId | TransactionArgument;
910
+ // }) => {
911
+ // const marketId = this.endSessionTx(inputs);
912
+ // this.shareClearingHouseTx({
913
+ // ...inputs,
914
+ // marketId,
915
+ // });
916
+ // };
917
+ // =========================================================================
918
+ // Public Static Helpers
919
+ // =========================================================================
920
+ // public static bucketOrders = (inputs: {
921
+ // orders: PerpetualsOrderInfo[];
922
+ // side: PerpetualsOrderSide;
923
+ // lotSize: number;
924
+ // tickSize: number;
925
+ // priceBucketSize: number;
926
+ // initialBucketedOrders?: OrderbookDataPoint[];
927
+ // }): OrderbookDataPoint[] => {
928
+ // const {
929
+ // orders,
930
+ // side,
931
+ // lotSize,
932
+ // tickSize,
933
+ // priceBucketSize,
934
+ // initialBucketedOrders,
935
+ // } = inputs;
936
+ // let dataPoints: OrderbookDataPoint[] = initialBucketedOrders ?? [];
937
+ // const roundPrice = (price: number, bucketSize: number): number => {
938
+ // return Math.round(price / bucketSize) * bucketSize;
939
+ // };
940
+ // const comparePrices = (
941
+ // price1: number,
942
+ // price2: number,
943
+ // bucketSize: number
944
+ // ): boolean => {
945
+ // return Math.abs(price1 - price2) < bucketSize;
946
+ // };
947
+ // orders.forEach((order) => {
948
+ // const actualPrice = Perpetuals.orderPriceToPrice({
949
+ // lotSize,
950
+ // tickSize: Math.abs(tickSize),
951
+ // orderPrice: order.price,
952
+ // });
953
+ // const roundedPrice = roundPrice(actualPrice, priceBucketSize);
954
+ // const size =
955
+ // lotSize *
956
+ // Math.abs(Number(order.size)) *
957
+ // (tickSize < 0 ? -1 : 1);
958
+ // const sizeUsd = size * actualPrice;
959
+ // const placementIndex = dataPoints.findIndex(
960
+ // (dataPoint: OrderbookDataPoint) =>
961
+ // comparePrices(
962
+ // roundedPrice,
963
+ // dataPoint.price,
964
+ // priceBucketSize
965
+ // )
966
+ // );
967
+ // if (placementIndex < 0) {
968
+ // if (size > 0) {
969
+ // const newDataPoint: OrderbookDataPoint = {
970
+ // size,
971
+ // sizeUsd,
972
+ // totalSize: size,
973
+ // totalSizeUsd: sizeUsd,
974
+ // price: roundedPrice,
975
+ // };
976
+ // const insertIndex = dataPoints.findIndex((dataPoint) =>
977
+ // side === PerpetualsOrderSide.Ask
978
+ // ? roundedPrice < dataPoint.price
979
+ // : roundedPrice > dataPoint.price
980
+ // );
981
+ // if (insertIndex < 0) {
982
+ // dataPoints.push(newDataPoint);
983
+ // } else {
984
+ // dataPoints.splice(insertIndex, 0, newDataPoint);
985
+ // }
986
+ // }
987
+ // } else {
988
+ // dataPoints[placementIndex].size += size;
989
+ // dataPoints[placementIndex].sizeUsd += sizeUsd;
990
+ // dataPoints[placementIndex].totalSize += size;
991
+ // dataPoints[placementIndex].totalSizeUsd += sizeUsd;
992
+ // }
993
+ // });
994
+ // dataPoints = dataPoints.filter((data) => data.size >= lotSize);
995
+ // for (let index = 0; index < dataPoints.length; index++) {
996
+ // if (index > 0) {
997
+ // dataPoints[index].totalSize =
998
+ // dataPoints[index - 1].totalSize + dataPoints[index].size;
999
+ // dataPoints[index].totalSizeUsd =
1000
+ // dataPoints[index - 1].totalSizeUsd +
1001
+ // dataPoints[index].sizeUsd;
1002
+ // } else {
1003
+ // dataPoints[index].totalSize = dataPoints[index].size;
1004
+ // dataPoints[index].totalSizeUsd = dataPoints[index].sizeUsd;
1005
+ // }
1006
+ // }
1007
+ // if (side === PerpetualsOrderSide.Ask) {
1008
+ // dataPoints.reverse();
1009
+ // }
1010
+ // return dataPoints;
1011
+ // };
1012
+ // =========================================================================
513
1013
  // Event Types
514
1014
  // =========================================================================
515
- this.eventType = (eventName) => eventsApiHelpers_1.EventsApiHelpers.createEventType(this.addresses.perpetuals.packages.events, PerpetualsApi.constants.moduleNames.events, eventName);
516
- const perpetuals = this.Provider.addresses.perpetuals;
517
- const oracle = this.Provider.addresses.oracle;
518
- if (!perpetuals || !oracle)
1015
+ this.eventType = (eventName) => eventsApiHelpers_1.EventsApiHelpers.createEventType(this.addresses.packages.events, PerpetualsApi.constants.moduleNames.events, eventName);
1016
+ const addresses = this.Provider.addresses.perpetuals;
1017
+ if (!addresses)
519
1018
  throw new Error("not all required addresses have been set in provider");
520
- this.addresses = {
521
- perpetuals,
522
- oracle,
523
- };
1019
+ this.addresses = addresses;
524
1020
  this.eventTypes = {
525
1021
  // Collateral
526
1022
  withdrewCollateral: this.eventType("WithdrewCollateral"),
@@ -530,101 +1026,112 @@ class PerpetualsApi {
530
1026
  deallocatedCollateral: this.eventType("DeallocatedCollateral"),
531
1027
  // Liquidation
532
1028
  liquidated: this.eventType("LiquidatedPosition"),
1029
+ filledTakerOrderLiquidator: this.eventType("FilledTakerOrderLiquidator"),
533
1030
  // Account
534
1031
  createdAccount: this.eventType("CreatedAccount"),
535
1032
  // Order
536
1033
  canceledOrder: this.eventType("CanceledOrder"),
537
1034
  postedOrder: this.eventType("PostedOrder"),
538
- filledMakerOrder: this.eventType("FilledMakerOrder"),
1035
+ filledMakerOrders: this.eventType("FilledMakerOrders"),
539
1036
  filledTakerOrder: this.eventType("FilledTakerOrder"),
1037
+ reducedOrder: this.eventType("ReducedOrder"),
540
1038
  // Order Receipts
541
1039
  postedOrderReceipt: this.eventType("OrderbookPostReceipt"),
542
1040
  // Twap
543
1041
  updatedPremiumTwap: this.eventType("UpdatedPremiumTwap"),
544
1042
  updatedSpreadTwap: this.eventType("UpdatedSpreadTwap"),
1043
+ // Funding
1044
+ updatedFunding: this.eventType("UpdatedFunding"),
1045
+ // Version
1046
+ updatedMarketVersion: this.eventType("UpdatedClearingHouseVersion"),
1047
+ // Stop Order
1048
+ createdStopOrderTicket: this.eventType("CreatedStopOrderTicket"),
1049
+ deletedStopOrderTicket: this.eventType("DeletedStopOrderTicket"),
545
1050
  };
546
1051
  this.moveErrors = {
547
- [this.addresses.perpetuals.packages.perpetuals]: {
548
- // Clearing House
549
- // Cannot deposit/withdraw zero coins to/from the account's collateral.
550
- 0: "Deposit Or Withdraw Amount Zero",
551
- // Orderbook size or price are invalid values
552
- 1: "Invalid Size Or Price",
553
- // When trying to access a particular insurance fund, but it does not exist.
554
- 2: "Invalid Insurance Fund Id",
555
- // Index price returned from oracle is 0 or invalid value
556
- 3: "Bad Index Price",
557
- // Registry already contains the specified collateral type
558
- 4: "Invalid Collateral Type",
559
- // Order value in USD is too low
560
- 5: "Order Usd Value Too Low",
561
- // Wrong number of sizes passed to liquidation.
562
- // It must match the number of liqee's positions.
563
- 6: "Invalid Number Of Sizes",
564
- // MarketManager
565
- // Tried to create a new market with invalid parameters.
566
- 1000: "Invalid Market Parameters",
567
- // Tried to call `update_funding` before enough time has passed since the
568
- // last update.
569
- 1001: "Updating Funding Too Early",
570
- // Margin ratio update proposal already exists for market
571
- 1002: "Proposal Already Exists",
572
- // Margin ratio update proposal cannot be commited too early
573
- 1003: "Premature Proposal",
574
- // Margin ratio update proposal delay is outside the valid range
575
- 1004: "Invalid Proposal Delay",
576
- // Market does not exist
577
- 1005: "Market Does Not Exist",
578
- // Tried to update a config with a value outside of the allowed range
579
- 1006: "Value Out Of Range",
580
- // Margin ratio update proposal does not exist for market
581
- 1007: "Proposal Does Not Exist",
582
- // Exchange has no available fees to withdraw
583
- 1008: "No Fees Accrued",
584
- // Tried to withdraw more insurance funds than the allowed amount
585
- 1009: "Insufficient Insurance Surplus",
586
- // Cannot create a market for which a price feed does not exist
587
- 1010: "No Price Feed For Market",
588
- // Account Manager
589
- // Tried accessing a nonexistent account.
590
- 2000: "Account Not Found",
591
- // Tried accessing a nonexistent account position.
592
- 2001: "Position Not Found",
593
- // Tried creating a new position when the account already has the maximum
594
- // allowed number of open positions.
595
- 2002: "Max Positions Exceeded",
596
- // An operation brought an account below initial margin requirements.
597
- // 2003: "Initial Margin Requirement Violated",
598
- 2003: "Margin Requirements Violated, Try Lowering Size",
599
- // Account is above MMR, so can't be liquidated.
600
- 2004: "Account Above MMR",
601
- // Cannot realize bad debt via means other than calling 'liquidate'.
602
- 2005: "Account Bad Debt",
603
- // Cannot withdraw more than the account's free collateral.
604
- 2006: "Insufficient Free Collateral",
605
- // Cannot delete a position that is not worthless
606
- 2007: "Position Not Null",
607
- // Tried placing a new pending order when the position already has the maximum
608
- // allowed number of pending orders.
609
- 2008: "Max Pending Orders Exceeded",
610
- // Used for checking both liqee and liqor positions during liquidation
611
- 2009: "Account Below IMR",
612
- // When leaving liqee's account with a margin ratio above tolerance,
613
- // meaning that liqor has overbought position
614
- 2010: "Account Above Tolerance",
615
- // Orderbook & OrderedMap
616
- // While searching for a key, but it doesn't exist.
617
- 3000: "Key Does Not Exist",
618
- // While inserting already existing key.
619
- 3001: "Key Already Exists",
620
- // When attempting to destroy a non-empty map
621
- 3002: "Destroying Not Empty Map",
622
- // Invalid user tries to modify an order
623
- 3003: "Invalid User For Order",
624
- // Orderbook flag requirements violated
625
- 3004: "Flag Requirements Violated",
626
- // Minimum size matched not reached
627
- 3005: "Not Enough Liquidity",
1052
+ [this.addresses.packages.perpetuals]: {
1053
+ ["ANY"]: {
1054
+ // Clearing House
1055
+ // Cannot deposit/withdraw zero coins to/from the account's collateral.
1056
+ 0: "Deposit Or Withdraw Amount Zero",
1057
+ // Orderbook size or price are invalid values
1058
+ 1: "Invalid Size Or Price",
1059
+ // When trying to access a particular insurance fund, but it does not exist.
1060
+ 2: "Invalid Insurance Fund Id",
1061
+ // Index price returned from oracle is 0 or invalid value
1062
+ 3: "Bad Index Price",
1063
+ // Registry already contains the specified collateral type
1064
+ 4: "Invalid Collateral Type",
1065
+ // Order value in USD is too low
1066
+ 5: "Order Usd Value Too Low",
1067
+ // Wrong number of sizes passed to liquidation.
1068
+ // It must match the number of liqee's positions.
1069
+ 6: "Invalid Number Of Sizes",
1070
+ // MarketManager
1071
+ // Tried to create a new market with invalid parameters.
1072
+ 1000: "Invalid Market Parameters",
1073
+ // Tried to call `update_funding` before enough time has passed since the
1074
+ // last update.
1075
+ 1001: "Updating Funding Too Early",
1076
+ // Margin ratio update proposal already exists for market
1077
+ 1002: "Proposal Already Exists",
1078
+ // Margin ratio update proposal cannot be commited too early
1079
+ 1003: "Premature Proposal",
1080
+ // Margin ratio update proposal delay is outside the valid range
1081
+ 1004: "Invalid Proposal Delay",
1082
+ // Market does not exist
1083
+ 1005: "Market Does Not Exist",
1084
+ // Tried to update a config with a value outside of the allowed range
1085
+ 1006: "Value Out Of Range",
1086
+ // Margin ratio update proposal does not exist for market
1087
+ 1007: "Proposal Does Not Exist",
1088
+ // Exchange has no available fees to withdraw
1089
+ 1008: "No Fees Accrued",
1090
+ // Tried to withdraw more insurance funds than the allowed amount
1091
+ 1009: "Insufficient Insurance Surplus",
1092
+ // Cannot create a market for which a price feed does not exist
1093
+ 1010: "No Price Feed For Market",
1094
+ // Account Manager
1095
+ // Tried accessing a nonexistent account.
1096
+ 2000: "Account Not Found",
1097
+ // Tried accessing a nonexistent account position.
1098
+ 2001: "Position Not Found",
1099
+ // Tried creating a new position when the account already has the maximum
1100
+ // allowed number of open positions.
1101
+ 2002: "Max Positions Exceeded",
1102
+ // An operation brought an account below initial margin requirements.
1103
+ // 2003: "Initial Margin Requirement Violated",
1104
+ 2003: "Margin Requirements Violated, Try Lowering Size",
1105
+ // Account is above MMR, so can't be liquidated.
1106
+ 2004: "Account Above MMR",
1107
+ // Cannot realize bad debt via means other than calling 'liquidate'.
1108
+ 2005: "Account Bad Debt",
1109
+ // Cannot withdraw more than the account's free collateral.
1110
+ 2006: "Insufficient Free Collateral",
1111
+ // Cannot delete a position that is not worthless
1112
+ 2007: "Position Not Null",
1113
+ // Tried placing a new pending order when the position already has the maximum
1114
+ // allowed number of pending orders.
1115
+ 2008: "Max Pending Orders Exceeded",
1116
+ // Used for checking both liqee and liqor positions during liquidation
1117
+ 2009: "Account Below IMR",
1118
+ // When leaving liqee's account with a margin ratio above tolerance,
1119
+ // meaning that liqor has overbought position
1120
+ 2010: "Account Above Tolerance",
1121
+ // Orderbook & OrderedMap
1122
+ // While searching for a key, but it doesn't exist.
1123
+ 3000: "Key Does Not Exist",
1124
+ // While inserting already existing key.
1125
+ 3001: "Key Already Exists",
1126
+ // When attempting to destroy a non-empty map
1127
+ 3002: "Destroying Not Empty Map",
1128
+ // Invalid user tries to modify an order
1129
+ 3003: "Invalid User For Order",
1130
+ // Orderbook flag requirements violated
1131
+ 3004: "Flag Requirements Violated",
1132
+ // Minimum size matched not reached
1133
+ 3005: "Not Enough Liquidity",
1134
+ },
628
1135
  },
629
1136
  };
630
1137
  }
@@ -642,69 +1149,3 @@ PerpetualsApi.constants = {
642
1149
  account: "account",
643
1150
  },
644
1151
  };
645
- // =========================================================================
646
- // Public Static Helpers
647
- // =========================================================================
648
- PerpetualsApi.bucketOrders = (inputs) => {
649
- const { orders, side, lotSize, tickSize, priceBucketSize, initialBucketedOrders, } = inputs;
650
- let dataPoints = initialBucketedOrders !== null && initialBucketedOrders !== void 0 ? initialBucketedOrders : [];
651
- const roundPrice = (price, bucketSize) => {
652
- return Math.round(price / bucketSize) * bucketSize;
653
- };
654
- const comparePrices = (price1, price2, bucketSize) => {
655
- return Math.abs(price1 - price2) < bucketSize / 2;
656
- };
657
- orders.forEach((order) => {
658
- const actualPrice = perpetuals_1.Perpetuals.orderPriceToPrice({
659
- lotSize,
660
- tickSize: Math.abs(tickSize),
661
- orderPrice: order.price,
662
- });
663
- const roundedPrice = roundPrice(actualPrice, priceBucketSize);
664
- const size = lotSize * Number(order.size) * (tickSize < 0 ? -1 : 1);
665
- const sizeUsd = size * actualPrice;
666
- const placementIndex = dataPoints.findIndex((dataPoint) => comparePrices(roundedPrice, dataPoint.price, priceBucketSize));
667
- if (placementIndex < 0) {
668
- const newDataPoint = {
669
- size,
670
- sizeUsd,
671
- totalSize: size,
672
- totalSizeUsd: sizeUsd,
673
- price: roundedPrice,
674
- };
675
- const insertIndex = dataPoints.findIndex((dataPoint) => side === perpetualsTypes_1.PerpetualsOrderSide.Ask
676
- ? roundedPrice <= dataPoint.price
677
- : roundedPrice >= dataPoint.price);
678
- if (insertIndex < 0) {
679
- dataPoints.push(newDataPoint);
680
- }
681
- else {
682
- dataPoints.splice(insertIndex, 0, newDataPoint);
683
- }
684
- }
685
- else {
686
- dataPoints[placementIndex].size += size;
687
- dataPoints[placementIndex].sizeUsd += sizeUsd;
688
- dataPoints[placementIndex].totalSize += size;
689
- dataPoints[placementIndex].totalSizeUsd += sizeUsd;
690
- }
691
- });
692
- dataPoints = dataPoints.filter((data) => data.size > 0 && data.sizeUsd > 0);
693
- for (let index = 0; index < dataPoints.length; index++) {
694
- if (index > 0) {
695
- dataPoints[index].totalSize =
696
- dataPoints[index - 1].totalSize + dataPoints[index].size;
697
- dataPoints[index].totalSizeUsd =
698
- dataPoints[index - 1].totalSizeUsd +
699
- dataPoints[index].sizeUsd;
700
- }
701
- else {
702
- dataPoints[index].totalSize = dataPoints[index].size;
703
- dataPoints[index].totalSizeUsd = dataPoints[index].sizeUsd;
704
- }
705
- }
706
- if (side === perpetualsTypes_1.PerpetualsOrderSide.Ask) {
707
- dataPoints.reverse();
708
- }
709
- return dataPoints;
710
- };