zo-sdk 0.0.51 → 0.1.0

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 (201) hide show
  1. package/README.md +272 -20
  2. package/dist/abstract/BaseAPI.cjs +117 -0
  3. package/dist/abstract/BaseAPI.cjs.map +1 -0
  4. package/dist/abstract/BaseAPI.d.cts +131 -0
  5. package/dist/abstract/BaseAPI.d.cts.map +1 -0
  6. package/dist/abstract/BaseAPI.d.mts +131 -0
  7. package/dist/abstract/BaseAPI.d.mts.map +1 -0
  8. package/dist/abstract/BaseAPI.mjs +113 -0
  9. package/dist/abstract/BaseAPI.mjs.map +1 -0
  10. package/dist/abstract/BaseDataAPI.cjs +139 -0
  11. package/dist/abstract/BaseDataAPI.cjs.map +1 -0
  12. package/dist/abstract/BaseDataAPI.d.cts +89 -0
  13. package/dist/abstract/BaseDataAPI.d.cts.map +1 -0
  14. package/dist/abstract/BaseDataAPI.d.mts +89 -0
  15. package/dist/abstract/BaseDataAPI.d.mts.map +1 -0
  16. package/dist/abstract/BaseDataAPI.mjs +135 -0
  17. package/dist/abstract/BaseDataAPI.mjs.map +1 -0
  18. package/dist/abstract/index.cjs +12 -0
  19. package/dist/abstract/index.cjs.map +1 -0
  20. package/dist/abstract/index.d.cts +7 -0
  21. package/dist/abstract/index.d.cts.map +1 -0
  22. package/dist/abstract/index.d.mts +7 -0
  23. package/dist/abstract/index.d.mts.map +1 -0
  24. package/dist/abstract/index.mjs +7 -0
  25. package/dist/abstract/index.mjs.map +1 -0
  26. package/dist/bcs.cjs +42 -0
  27. package/dist/bcs.cjs.map +1 -0
  28. package/dist/bcs.d.cts +91 -0
  29. package/dist/bcs.d.cts.map +1 -0
  30. package/dist/bcs.d.mts +91 -0
  31. package/dist/bcs.d.mts.map +1 -0
  32. package/dist/bcs.mjs +39 -0
  33. package/dist/bcs.mjs.map +1 -0
  34. package/dist/consts/deployments-slp-mainnet.json +710 -0
  35. package/dist/consts/deployments-slp-testnet.json +109 -0
  36. package/dist/consts/deployments-usdz-mainnet.json +180 -0
  37. package/dist/consts/deployments-usdz-testnet.json +98 -0
  38. package/dist/consts/{deployments-mainnet.json → deployments-zlp-mainnet.json} +278 -42
  39. package/dist/consts/index.cjs +40 -8
  40. package/dist/consts/index.cjs.map +1 -1
  41. package/dist/consts/index.d.cts +81 -11
  42. package/dist/consts/index.d.cts.map +1 -1
  43. package/dist/consts/index.d.mts +81 -11
  44. package/dist/consts/index.d.mts.map +1 -1
  45. package/dist/consts/index.mjs +39 -7
  46. package/dist/consts/index.mjs.map +1 -1
  47. package/dist/consts/price_id_to_object_id.mainnet.json +9 -1
  48. package/dist/factory/SDKFactory.cjs +185 -0
  49. package/dist/factory/SDKFactory.cjs.map +1 -0
  50. package/dist/factory/SDKFactory.d.cts +74 -0
  51. package/dist/factory/SDKFactory.d.cts.map +1 -0
  52. package/dist/factory/SDKFactory.d.mts +74 -0
  53. package/dist/factory/SDKFactory.d.mts.map +1 -0
  54. package/dist/factory/SDKFactory.mjs +179 -0
  55. package/dist/factory/SDKFactory.mjs.map +1 -0
  56. package/dist/implementations/SLPAPI.cjs +829 -0
  57. package/dist/implementations/SLPAPI.cjs.map +1 -0
  58. package/dist/implementations/SLPAPI.d.cts +120 -0
  59. package/dist/implementations/SLPAPI.d.cts.map +1 -0
  60. package/dist/implementations/SLPAPI.d.mts +120 -0
  61. package/dist/implementations/SLPAPI.d.mts.map +1 -0
  62. package/dist/implementations/SLPAPI.mjs +825 -0
  63. package/dist/implementations/SLPAPI.mjs.map +1 -0
  64. package/dist/implementations/SLPDataAPI.cjs +916 -0
  65. package/dist/implementations/SLPDataAPI.cjs.map +1 -0
  66. package/dist/implementations/SLPDataAPI.d.cts +102 -0
  67. package/dist/implementations/SLPDataAPI.d.cts.map +1 -0
  68. package/dist/implementations/SLPDataAPI.d.mts +102 -0
  69. package/dist/implementations/SLPDataAPI.d.mts.map +1 -0
  70. package/dist/implementations/SLPDataAPI.mjs +912 -0
  71. package/dist/implementations/SLPDataAPI.mjs.map +1 -0
  72. package/dist/implementations/USDZAPI.cjs +522 -0
  73. package/dist/implementations/USDZAPI.cjs.map +1 -0
  74. package/dist/implementations/USDZAPI.d.cts +118 -0
  75. package/dist/implementations/USDZAPI.d.cts.map +1 -0
  76. package/dist/implementations/USDZAPI.d.mts +118 -0
  77. package/dist/implementations/USDZAPI.d.mts.map +1 -0
  78. package/dist/implementations/USDZAPI.mjs +518 -0
  79. package/dist/implementations/USDZAPI.mjs.map +1 -0
  80. package/dist/implementations/USDZDataAPI.cjs +697 -0
  81. package/dist/implementations/USDZDataAPI.cjs.map +1 -0
  82. package/dist/implementations/USDZDataAPI.d.cts +86 -0
  83. package/dist/implementations/USDZDataAPI.d.cts.map +1 -0
  84. package/dist/implementations/USDZDataAPI.d.mts +86 -0
  85. package/dist/implementations/USDZDataAPI.d.mts.map +1 -0
  86. package/dist/implementations/USDZDataAPI.mjs +693 -0
  87. package/dist/implementations/USDZDataAPI.mjs.map +1 -0
  88. package/dist/implementations/ZLPAPI.cjs +809 -0
  89. package/dist/implementations/ZLPAPI.cjs.map +1 -0
  90. package/dist/implementations/ZLPAPI.d.cts +121 -0
  91. package/dist/implementations/ZLPAPI.d.cts.map +1 -0
  92. package/dist/implementations/ZLPAPI.d.mts +121 -0
  93. package/dist/implementations/ZLPAPI.d.mts.map +1 -0
  94. package/dist/implementations/ZLPAPI.mjs +805 -0
  95. package/dist/implementations/ZLPAPI.mjs.map +1 -0
  96. package/dist/implementations/ZLPDataAPI.cjs +724 -0
  97. package/dist/implementations/ZLPDataAPI.cjs.map +1 -0
  98. package/dist/implementations/ZLPDataAPI.d.cts +83 -0
  99. package/dist/implementations/ZLPDataAPI.d.cts.map +1 -0
  100. package/dist/implementations/ZLPDataAPI.d.mts +83 -0
  101. package/dist/implementations/ZLPDataAPI.d.mts.map +1 -0
  102. package/dist/implementations/ZLPDataAPI.mjs +720 -0
  103. package/dist/implementations/ZLPDataAPI.mjs.map +1 -0
  104. package/dist/implementations/index.cjs +22 -0
  105. package/dist/implementations/index.cjs.map +1 -0
  106. package/dist/implementations/index.d.cts +11 -0
  107. package/dist/implementations/index.d.cts.map +1 -0
  108. package/dist/implementations/index.d.mts +11 -0
  109. package/dist/implementations/index.d.mts.map +1 -0
  110. package/dist/implementations/index.mjs +13 -0
  111. package/dist/implementations/index.mjs.map +1 -0
  112. package/dist/index.cjs +47 -0
  113. package/dist/index.cjs.map +1 -1
  114. package/dist/index.d.cts +45 -0
  115. package/dist/index.d.cts.map +1 -1
  116. package/dist/index.d.mts +45 -0
  117. package/dist/index.d.mts.map +1 -1
  118. package/dist/index.mjs +45 -0
  119. package/dist/index.mjs.map +1 -1
  120. package/dist/interfaces/base.cjs +8 -0
  121. package/dist/interfaces/base.cjs.map +1 -0
  122. package/dist/interfaces/base.d.cts +293 -0
  123. package/dist/interfaces/base.d.cts.map +1 -0
  124. package/dist/interfaces/base.d.mts +293 -0
  125. package/dist/interfaces/base.d.mts.map +1 -0
  126. package/dist/interfaces/base.mjs +6 -0
  127. package/dist/interfaces/base.mjs.map +1 -0
  128. package/dist/interfaces/index.cjs +29 -0
  129. package/dist/interfaces/index.cjs.map +1 -0
  130. package/dist/interfaces/index.d.cts +13 -0
  131. package/dist/interfaces/index.d.cts.map +1 -0
  132. package/dist/interfaces/index.d.mts +13 -0
  133. package/dist/interfaces/index.d.mts.map +1 -0
  134. package/dist/interfaces/index.mjs +13 -0
  135. package/dist/interfaces/index.mjs.map +1 -0
  136. package/dist/interfaces/slp.cjs +9 -0
  137. package/dist/interfaces/slp.cjs.map +1 -0
  138. package/dist/interfaces/slp.d.cts +115 -0
  139. package/dist/interfaces/slp.d.cts.map +1 -0
  140. package/dist/interfaces/slp.d.mts +115 -0
  141. package/dist/interfaces/slp.d.mts.map +1 -0
  142. package/dist/interfaces/slp.mjs +7 -0
  143. package/dist/interfaces/slp.mjs.map +1 -0
  144. package/dist/interfaces/usdz.cjs +7 -0
  145. package/dist/interfaces/usdz.cjs.map +1 -0
  146. package/dist/interfaces/usdz.d.cts +40 -0
  147. package/dist/interfaces/usdz.d.cts.map +1 -0
  148. package/dist/interfaces/usdz.d.mts +40 -0
  149. package/dist/interfaces/usdz.d.mts.map +1 -0
  150. package/dist/interfaces/usdz.mjs +6 -0
  151. package/dist/interfaces/usdz.mjs.map +1 -0
  152. package/dist/interfaces/zlp.cjs +7 -0
  153. package/dist/interfaces/zlp.cjs.map +1 -0
  154. package/dist/interfaces/zlp.d.cts +45 -0
  155. package/dist/interfaces/zlp.d.cts.map +1 -0
  156. package/dist/interfaces/zlp.d.mts +45 -0
  157. package/dist/interfaces/zlp.d.mts.map +1 -0
  158. package/dist/interfaces/zlp.mjs +6 -0
  159. package/dist/interfaces/zlp.mjs.map +1 -0
  160. package/dist/oracle.cjs +7 -35
  161. package/dist/oracle.cjs.map +1 -1
  162. package/dist/oracle.d.cts +3 -4
  163. package/dist/oracle.d.cts.map +1 -1
  164. package/dist/oracle.d.mts +3 -4
  165. package/dist/oracle.d.mts.map +1 -1
  166. package/dist/oracle.mjs +8 -32
  167. package/dist/oracle.mjs.map +1 -1
  168. package/package.json +1 -1
  169. package/src/abstract/BaseAPI.ts +429 -0
  170. package/src/abstract/BaseDataAPI.ts +204 -0
  171. package/src/abstract/index.ts +7 -0
  172. package/src/bcs.ts +45 -0
  173. package/src/consts/deployments-slp-mainnet.json +710 -0
  174. package/src/consts/deployments-slp-testnet.json +109 -0
  175. package/src/consts/deployments-usdz-mainnet.json +180 -0
  176. package/src/consts/deployments-usdz-testnet.json +98 -0
  177. package/src/consts/{deployments-mainnet.json → deployments-zlp-mainnet.json} +279 -43
  178. package/src/consts/index.ts +134 -39
  179. package/src/consts/price_id_to_object_id.mainnet.json +10 -2
  180. package/src/factory/SDKFactory.ts +282 -0
  181. package/src/implementations/SLPAPI.ts +1207 -0
  182. package/src/implementations/SLPDataAPI.ts +1188 -0
  183. package/src/implementations/USDZAPI.ts +715 -0
  184. package/src/implementations/USDZDataAPI.ts +826 -0
  185. package/src/implementations/ZLPAPI.ts +1130 -0
  186. package/src/implementations/ZLPDataAPI.ts +856 -0
  187. package/src/implementations/index.ts +14 -0
  188. package/src/index.ts +53 -0
  189. package/src/interfaces/base.ts +556 -0
  190. package/src/interfaces/index.ts +45 -0
  191. package/src/interfaces/slp.ts +156 -0
  192. package/src/interfaces/usdz.ts +71 -0
  193. package/src/interfaces/zlp.ts +96 -0
  194. package/src/oracle.ts +12 -42
  195. package/tsconfig.json +4 -2
  196. package/dist/consts/staking/deployments-mainnet.json +0 -12
  197. package/dist/consts/staking/deployments-testnet.json +0 -11
  198. package/src/consts/staking/deployments-mainnet.json +0 -12
  199. package/src/consts/staking/deployments-testnet.json +0 -11
  200. /package/dist/consts/{deployments-testnet.json → deployments-zlp-testnet.json} +0 -0
  201. /package/src/consts/{deployments-testnet.json → deployments-zlp-testnet.json} +0 -0
@@ -0,0 +1,829 @@
1
+ "use strict";
2
+ /**
3
+ * SLP API implementation
4
+ * Implements SLP-specific trading and transaction methods for Sudo SDK
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SLPAPI = void 0;
8
+ const transactions_1 = require("@mysten/sui/transactions");
9
+ const utils_1 = require("@mysten/sui/utils");
10
+ const consts_1 = require("../consts/index.cjs");
11
+ const abstract_1 = require("../abstract/index.cjs");
12
+ const SLPDataAPI_1 = require("./SLPDataAPI.cjs");
13
+ const utils_2 = require("../utils.cjs");
14
+ const kiosk_1 = require("@mysten/kiosk");
15
+ class SLPAPI extends abstract_1.BaseAPI {
16
+ constructor(network, provider, apiEndpoint, connectionURL) {
17
+ super(network, provider, apiEndpoint, connectionURL, consts_1.LPToken.SLP);
18
+ this.dataAPI = new SLPDataAPI_1.SLPDataAPI(network, provider, apiEndpoint, connectionURL);
19
+ }
20
+ valuateVaults(tx) {
21
+ throw new Error('Method not implemented.');
22
+ }
23
+ valuateSymbols(tx) {
24
+ throw new Error('Method not implemented.');
25
+ }
26
+ valuate(tx) {
27
+ throw new Error('Method not implemented.');
28
+ }
29
+ valuateMarket() {
30
+ throw new Error('Method not implemented.');
31
+ }
32
+ fundingFeeRate(indexToken, long, sender) {
33
+ throw new Error('Method not implemented.');
34
+ }
35
+ rebaseFeeRate(collateralToken, increase, amount, sender) {
36
+ throw new Error('Method not implemented.');
37
+ }
38
+ reservingFeeRate(collateralToken, amount, sender) {
39
+ throw new Error('Method not implemented.');
40
+ }
41
+ calcPositionReserveFeeAmount(position) {
42
+ throw new Error('Method not implemented.');
43
+ }
44
+ calcPositionFundingFeeValue(position) {
45
+ throw new Error('Method not implemented.');
46
+ }
47
+ getMarketInfo() {
48
+ throw new Error('Method not implemented.');
49
+ }
50
+ getVaultInfo(vault) {
51
+ throw new Error('Method not implemented.');
52
+ }
53
+ getSymbolInfo(tokenId, long) {
54
+ throw new Error('Method not implemented.');
55
+ }
56
+ getPositionConfig(indexToken, long) {
57
+ throw new Error('Method not implemented.');
58
+ }
59
+ getRebaseFeeModel() {
60
+ throw new Error('Method not implemented.');
61
+ }
62
+ getOpenPositions() {
63
+ throw new Error('Method not implemented.');
64
+ }
65
+ getPositionCapInfoList(owner) {
66
+ throw new Error('Method not implemented.');
67
+ }
68
+ getPositionInfoList(positionCapInfoList, owner) {
69
+ throw new Error('Method not implemented.');
70
+ }
71
+ getOrderCapInfoList(owner) {
72
+ throw new Error('Method not implemented.');
73
+ }
74
+ getOrderInfoList(orderCapInfoList, owner) {
75
+ throw new Error('Method not implemented.');
76
+ }
77
+ getHistory(trader, page, limit, orderType, symbol) {
78
+ throw new Error('Method not implemented.');
79
+ }
80
+ getStaked(owner) {
81
+ throw new Error('Method not implemented.');
82
+ }
83
+ getStakePool() {
84
+ throw new Error('Method not implemented.');
85
+ }
86
+ hasReferral(referree) {
87
+ throw new Error('Method not implemented.');
88
+ }
89
+ getReferralData(referree) {
90
+ throw new Error('Method not implemented.');
91
+ }
92
+ /**
93
+ * Deposits collateral into SLP vault using Sudo SDK approach
94
+ */
95
+ async deposit(coin, coinObjects, amount, minAmountOut, referralAddress, sender) {
96
+ let tx = new transactions_1.Transaction();
97
+ if (referralAddress && !(await this.dataAPI.hasReferral(sender || ''))) {
98
+ tx = await this.addReferral(referralAddress, tx);
99
+ }
100
+ tx = await this.initOracleTxb(Object.keys(this.consts.pythFeeder.feeder));
101
+ const coinObject = this.processCoins(tx, coin, coinObjects);
102
+ const [depositObject] = tx.splitCoins(coinObject, [tx.pure.u64(amount)]);
103
+ const { vaultsValuation, symbolsValuation } = this.dataAPI.valuate(tx);
104
+ tx.moveCall({
105
+ target: `${this.consts.sudoCore.upgradedPackage}::market::deposit`,
106
+ typeArguments: [
107
+ `${this.consts.sudoCore.package}::slp::SLP`,
108
+ this.consts.coins[coin].module,
109
+ ],
110
+ arguments: [
111
+ tx.object(this.consts.sudoCore.market),
112
+ tx.object(this.consts.sudoCore.rebaseFeeModel),
113
+ depositObject,
114
+ tx.pure.u64(minAmountOut || 0),
115
+ vaultsValuation,
116
+ symbolsValuation,
117
+ ],
118
+ });
119
+ return tx;
120
+ }
121
+ /**
122
+ * Withdraws collateral from SLP vault using Sudo SDK approach
123
+ */
124
+ async withdraw(coin, lpCoinObjects, amount, minAmountOut) {
125
+ const tx = await this.initOracleTxb(Object.keys(this.consts.pythFeeder.feeder));
126
+ const lpCoinObject = this.processCoins(tx, `${this.consts.sudoCore.package}::slp::SLP`, lpCoinObjects);
127
+ const [withdrawObject] = tx.splitCoins(lpCoinObject, [tx.pure.u64(amount)]);
128
+ const { vaultsValuation, symbolsValuation } = this.dataAPI.valuate(tx);
129
+ tx.moveCall({
130
+ target: `${this.consts.sudoCore.upgradedPackage}::market::withdraw`,
131
+ typeArguments: [
132
+ `${this.consts.sudoCore.package}::slp::SLP`,
133
+ this.consts.coins[coin].module,
134
+ ],
135
+ arguments: [
136
+ tx.object(this.consts.sudoCore.market),
137
+ tx.object(this.consts.sudoCore.rebaseFeeModel),
138
+ withdrawObject,
139
+ tx.pure.u64(minAmountOut || 0),
140
+ vaultsValuation,
141
+ symbolsValuation,
142
+ ],
143
+ });
144
+ return tx;
145
+ }
146
+ async swap(fromToken, toToken, fromAmount, fromCoinObjects, minAmountOut) {
147
+ const tx = await this.initOracleTxb(Object.keys(this.consts.sudoCore.vaults));
148
+ const fromCoinObject = this.processCoins(tx, fromToken, fromCoinObjects);
149
+ const [fromDepositObject] = tx.splitCoins(fromCoinObject, [
150
+ tx.pure.u64(fromAmount),
151
+ ]);
152
+ const vaultsValuation = this.dataAPI.valuateVaults(tx);
153
+ tx.moveCall({
154
+ target: `${this.consts.sudoCore.upgradedPackage}::market::swap`,
155
+ typeArguments: [
156
+ `${this.consts.sudoCore.package}::slp::SLP`,
157
+ this.consts.coins[fromToken].module,
158
+ this.consts.coins[toToken].module,
159
+ ],
160
+ arguments: [
161
+ tx.object(this.consts.sudoCore.market),
162
+ tx.object(this.consts.sudoCore.rebaseFeeModel),
163
+ fromDepositObject,
164
+ tx.pure.u64(minAmountOut || 0),
165
+ vaultsValuation,
166
+ ],
167
+ });
168
+ return tx;
169
+ }
170
+ /**
171
+ * Stakes SLP tokens in Sudo staking pools
172
+ */
173
+ async stake(lpCoinObjects, amount, pool) {
174
+ if (!this.consts.sudoStaking) {
175
+ throw new Error('Sudo staking configuration not found');
176
+ }
177
+ const tx = new transactions_1.Transaction();
178
+ const coinObject = this.processCoins(tx, 'slp', lpCoinObjects);
179
+ const [depositObject] = tx.splitCoins(coinObject, [tx.pure.u64(amount)]);
180
+ tx.moveCall({
181
+ target: `${this.consts.sudoStaking.package}::pool::deposit`,
182
+ typeArguments: [
183
+ `${this.consts.sudoCore.package}::slp::SLP`,
184
+ `${this.consts.sudoCore.package}::slp::SLP`,
185
+ ],
186
+ arguments: [
187
+ tx.object(pool),
188
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
189
+ depositObject,
190
+ ],
191
+ });
192
+ return tx;
193
+ }
194
+ /**
195
+ * Unstakes SLP tokens from Sudo staking pools
196
+ */
197
+ async unstake(credentials, amount, pool) {
198
+ if (!this.consts.sudoStaking) {
199
+ throw new Error('Sudo staking configuration not found');
200
+ }
201
+ const tx = new transactions_1.Transaction();
202
+ for (const credential of credentials) {
203
+ // eslint-disable-next-line unicorn/prefer-math-min-max
204
+ const withdrawAmount = amount < credential.amount ? amount : credential.amount;
205
+ amount -= withdrawAmount;
206
+ tx.moveCall({
207
+ target: `${this.consts.sudoStaking.package}::pool::withdraw`,
208
+ typeArguments: [
209
+ `${this.consts.sudoCore.package}::slp::SLP`,
210
+ `${this.consts.sudoCore.package}::slp::SLP`,
211
+ ],
212
+ arguments: [
213
+ tx.object(pool),
214
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
215
+ tx.object(credential.id),
216
+ tx.pure.u64(withdrawAmount),
217
+ ],
218
+ });
219
+ if (credential.amount === BigInt(0)) {
220
+ tx.moveCall({
221
+ target: `${this.consts.sudoStaking.package}::pool::clear_empty_credential`,
222
+ typeArguments: [
223
+ `${this.consts.sudoCore.package}::slp::SLP`,
224
+ `${this.consts.sudoCore.package}::slp::SLP`,
225
+ ],
226
+ arguments: [tx.object(credential.id)],
227
+ });
228
+ }
229
+ }
230
+ return tx;
231
+ }
232
+ /**
233
+ * Opens a position using Sudo SDK approach
234
+ */
235
+ async openPosition(collateralToken, indexToken, size, collateralAmount, coinObjects, long, reserveAmount, indexPrice, collateralPrice, isLimitOrder = false, isIocOrder = false, pricesSlippage = 0.003, collateralSlippage = 0.5, relayerFee = BigInt(0.5), referralAddress, sender) {
236
+ let tx = new transactions_1.Transaction();
237
+ if (referralAddress && !(await this.dataAPI.hasReferral(sender || ''))) {
238
+ tx = await this.addReferral(referralAddress, tx);
239
+ }
240
+ tx = await this.initOracleTxb([collateralToken, indexToken], tx);
241
+ const coinObject = this.processCoins(tx, collateralToken, coinObjects);
242
+ const [depositObject] = tx.splitCoins(coinObject, [
243
+ tx.pure.u64(collateralAmount),
244
+ ]);
245
+ const feeObject = tx.splitCoins(tx.gas, [tx.pure.u64(relayerFee || BigInt(0.5))]); // Sudo contract requires SUI as fee
246
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
247
+ const adjustPrice = this.processSlippage(indexPrice, long, isLimitOrder ? 0 : pricesSlippage || 0.003);
248
+ const adjustCollateralPrice = this.processSlippage(collateralPrice, false, collateralSlippage || 0.5);
249
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
250
+ if (isLimitOrder) {
251
+ allowTrade = isIocOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
252
+ }
253
+ tx.moveCall({
254
+ target: `${this.consts.sudoCore.upgradedPackage}::market::open_position_v1_2`,
255
+ typeArguments: [
256
+ `${this.consts.sudoCore.package}::slp::SLP`,
257
+ this.consts.coins[collateralToken].module,
258
+ this.consts.coins[indexToken].module,
259
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
260
+ this.consts.coins['sui'].module,
261
+ ],
262
+ arguments: [
263
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
264
+ tx.object(this.consts.sudoCore.market),
265
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
266
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
267
+ tx.object(this.consts.sudoCore.symbols[symbol].positionConfig),
268
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
269
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
270
+ depositObject,
271
+ feeObject,
272
+ tx.pure.u8(allowTrade),
273
+ tx.pure.u64(size),
274
+ tx.pure.u64(reserveAmount),
275
+ tx.pure.u256(adjustCollateralPrice),
276
+ tx.pure.u256(adjustPrice),
277
+ tx.pure.bool(isLimitOrder),
278
+ ],
279
+ });
280
+ return tx;
281
+ }
282
+ /**
283
+ * Decreases an existing position in SLP using Sudo SDK approach
284
+ */
285
+ async decreasePosition(pcpId, collateralToken, indexToken, amount, long, indexPrice, collateralPrice, isTriggerOrder = false, isTakeProfitOrder = true, isIocOrder = false, pricesSlippage = 0.003, collateralSlippage = 0.5, relayerFee = BigInt(0.5), coinObjects) {
286
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
287
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
288
+ const feeObject = tx.splitCoins(tx.gas, [tx.pure.u64(relayerFee)]); // Sudo contract requires SUI as fee
289
+ const adjustPrice = this.processSlippage(indexPrice, !long, isTriggerOrder ? 0 : pricesSlippage);
290
+ const adjustCollateralPrice = this.processSlippage(collateralPrice, false, collateralSlippage);
291
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
292
+ if (isTriggerOrder) {
293
+ if (isIocOrder || !isTakeProfitOrder) {
294
+ allowTrade = consts_1.ALLOW_TRADE_NO_TRADE;
295
+ }
296
+ else {
297
+ allowTrade = consts_1.ALLOW_TRADE_CAN_TRADE;
298
+ }
299
+ }
300
+ else {
301
+ isTakeProfitOrder = true;
302
+ }
303
+ tx.moveCall({
304
+ target: `${this.consts.sudoCore.upgradedPackage}::market::decrease_position_v1_2`,
305
+ typeArguments: [
306
+ `${this.consts.sudoCore.package}::slp::SLP`,
307
+ this.consts.coins[collateralToken].module,
308
+ this.consts.coins[indexToken].module,
309
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
310
+ this.consts.coins['sui'].module,
311
+ ],
312
+ arguments: [
313
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
314
+ tx.object(this.consts.sudoCore.market),
315
+ tx.object(pcpId),
316
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
317
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
318
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
319
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
320
+ feeObject,
321
+ tx.pure.u8(allowTrade),
322
+ tx.pure.bool(isTakeProfitOrder),
323
+ tx.pure.u64(amount),
324
+ tx.pure.u256(adjustCollateralPrice),
325
+ tx.pure.u256(adjustPrice),
326
+ tx.pure.bool(isTriggerOrder),
327
+ ],
328
+ });
329
+ return tx;
330
+ }
331
+ async decreaseMultiPositions(positions, tx) {
332
+ if (!tx) {
333
+ tx = new transactions_1.Transaction();
334
+ }
335
+ tx = await this.initOracleTxb(positions.map(position => [position.collateralToken, position.indexToken]).flat(), tx);
336
+ for (const position of positions) {
337
+ const { pcpId, collateralToken, coinObjects, indexToken, amount, long, indexPrice, collateralPrice, isTriggerOrder, isTakeProfitOrder, isIocOrder, slippage, relayerFee } = position;
338
+ let innerIsTakeProfitOrder = isTakeProfitOrder;
339
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
340
+ const coinObject = this.processCoins(tx, collateralToken, coinObjects);
341
+ const feeObject = tx.splitCoins(coinObject, [tx.pure.u64(relayerFee)]);
342
+ const adjustPrice = this.processSlippage(indexPrice, !long, isTriggerOrder ? 0 : slippage);
343
+ const adjustCollateralPrice = this.processSlippage(collateralPrice, false, 0.5);
344
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
345
+ if (isTriggerOrder) {
346
+ allowTrade = isIocOrder || !innerIsTakeProfitOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
347
+ }
348
+ else {
349
+ innerIsTakeProfitOrder = true;
350
+ }
351
+ tx.moveCall({
352
+ target: `${this.consts.sudoCore.upgradedPackage}::market::decrease_position_v1_2`,
353
+ typeArguments: [
354
+ `${this.consts.sudoCore.package}::slp::SLP`,
355
+ this.consts.coins[collateralToken].module,
356
+ this.consts.coins[indexToken].module,
357
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
358
+ this.consts.coins['sui'].module,
359
+ ],
360
+ arguments: [
361
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
362
+ tx.object(this.consts.sudoCore.market),
363
+ tx.object(pcpId),
364
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
365
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
366
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
367
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
368
+ feeObject,
369
+ tx.pure.u8(allowTrade),
370
+ tx.pure.bool(isTakeProfitOrder),
371
+ tx.pure.u64(amount),
372
+ tx.pure.u256(adjustCollateralPrice),
373
+ tx.pure.u256(adjustPrice),
374
+ tx.pure.bool(isTriggerOrder),
375
+ ],
376
+ });
377
+ }
378
+ return tx;
379
+ }
380
+ async pledgeInPosition(pcpId, collateralToken, indexToken, amount, coinObjects, long) {
381
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
382
+ const coinObject = this.processCoins(tx, collateralToken, coinObjects);
383
+ const [depositObject] = tx.splitCoins(coinObject, [tx.pure.u64(amount)]);
384
+ tx.moveCall({
385
+ target: `${this.consts.sudoCore.upgradedPackage}::market::pledge_in_position`,
386
+ typeArguments: [
387
+ `${this.consts.sudoCore.package}::slp::SLP`,
388
+ this.consts.coins[collateralToken].module,
389
+ this.consts.coins[indexToken].module,
390
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
391
+ ],
392
+ arguments: [
393
+ tx.object(this.consts.sudoCore.market),
394
+ tx.object(pcpId),
395
+ depositObject,
396
+ ],
397
+ });
398
+ return tx;
399
+ }
400
+ async redeemFromPosition(pcpId, collateralToken, indexToken, amount, long) {
401
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
402
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
403
+ tx.moveCall({
404
+ target: `${this.consts.sudoCore.upgradedPackage}::market::redeem_from_position_v1_1`,
405
+ typeArguments: [
406
+ `${this.consts.sudoCore.package}::slp::SLP`,
407
+ this.consts.coins[collateralToken].module,
408
+ this.consts.coins[indexToken].module,
409
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
410
+ ],
411
+ arguments: [
412
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
413
+ tx.object(this.consts.sudoCore.market),
414
+ tx.object(pcpId),
415
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
416
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
417
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
418
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
419
+ tx.pure.u64(amount),
420
+ ],
421
+ });
422
+ return tx;
423
+ }
424
+ async cancelOrder(orderCapId, collateralToken, indexToken, long, type, isV11Order) {
425
+ const tx = new transactions_1.Transaction();
426
+ let functionName = '';
427
+ switch (type) {
428
+ case 'OPEN_POSITION':
429
+ functionName = 'clear_open_position_order_v1_1';
430
+ break;
431
+ case 'DECREASE_POSITION':
432
+ functionName = 'clear_decrease_position_order_v1_1';
433
+ break;
434
+ default:
435
+ throw new Error('invalid order type');
436
+ }
437
+ tx.moveCall({
438
+ target: `${this.consts.sudoCore.upgradedPackage}::market::${functionName}`,
439
+ typeArguments: [
440
+ `${this.consts.sudoCore.package}::slp::SLP`,
441
+ this.consts.coins[collateralToken].module,
442
+ this.consts.coins[indexToken].module,
443
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
444
+ this.consts.coins['sui'].module,
445
+ ],
446
+ arguments: [
447
+ tx.object(this.consts.sudoCore.market),
448
+ tx.object(orderCapId),
449
+ ],
450
+ });
451
+ return tx;
452
+ }
453
+ async cancelMultiOrders(orders, tx) {
454
+ if (!tx) {
455
+ tx = new transactions_1.Transaction();
456
+ }
457
+ for (const order of orders) {
458
+ const { orderCapId, collateralToken, indexToken, long, type, isV11Order } = order;
459
+ let functionName = '';
460
+ switch (type) {
461
+ case 'OPEN_POSITION': {
462
+ functionName = isV11Order ? 'clear_open_position_order_v1_1' : 'clear_open_position_order_v1_1';
463
+ break;
464
+ }
465
+ case 'DECREASE_POSITION': {
466
+ functionName = isV11Order
467
+ ? 'clear_decrease_position_order_v1_1'
468
+ : 'clear_decrease_position_order_v1_1';
469
+ break;
470
+ }
471
+ default: {
472
+ throw new Error('invalid order type');
473
+ }
474
+ }
475
+ tx.moveCall({
476
+ target: `${this.consts.sudoCore.upgradedPackage}::market::${functionName}`,
477
+ typeArguments: [
478
+ `${this.consts.sudoCore.package}::slp::SLP`,
479
+ this.consts.coins[collateralToken].module,
480
+ this.consts.coins[indexToken].module,
481
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
482
+ this.consts.coins[collateralToken].module,
483
+ ],
484
+ arguments: [tx.object(this.consts.sudoCore.market), tx.object(orderCapId)],
485
+ });
486
+ }
487
+ return tx;
488
+ }
489
+ clearClosedPosition(pcpId, collateralToken, indexToken, long, tx) {
490
+ tx.moveCall({
491
+ target: `${this.consts.sudoCore.upgradedPackage}::market::clear_closed_position`,
492
+ typeArguments: [
493
+ `${this.consts.sudoCore.package}::slp::SLP`,
494
+ this.consts.coins[collateralToken].module,
495
+ this.consts.coins[indexToken].module,
496
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
497
+ ],
498
+ arguments: [tx.object(this.consts.sudoCore.market), tx.object(pcpId)],
499
+ });
500
+ }
501
+ clearOpenPositionOrder(orderCapId, collateralToken, indexToken, long, tx, isV11Order) {
502
+ tx.moveCall({
503
+ target: `${this.consts.sudoCore.upgradedPackage}::market::clear_open_position_order_v1_1`,
504
+ typeArguments: [
505
+ `${this.consts.sudoCore.package}::slp::SLP`,
506
+ this.consts.coins[collateralToken].module,
507
+ this.consts.coins[indexToken].module,
508
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
509
+ this.consts.coins['sui'].module,
510
+ ],
511
+ arguments: [
512
+ tx.object(this.consts.sudoCore.market),
513
+ tx.object(orderCapId),
514
+ ],
515
+ });
516
+ }
517
+ clearDecreasePositionOrder(orderCapId, collateralToken, indexToken, long, tx) {
518
+ tx.moveCall({
519
+ target: `${this.consts.sudoCore.upgradedPackage}::market::clear_decrease_position_order_v1_1`,
520
+ typeArguments: [
521
+ `${this.consts.sudoCore.package}::slp::SLP`,
522
+ this.consts.coins[collateralToken].module,
523
+ this.consts.coins[indexToken].module,
524
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
525
+ this.consts.coins['sui'].module,
526
+ ],
527
+ arguments: [
528
+ tx.object(this.consts.sudoCore.market),
529
+ tx.object(orderCapId),
530
+ ],
531
+ });
532
+ }
533
+ async openPositionWithSCard(collateralToken, indexToken, size, collateralAmount, coinObjects, long, reserveAmount, indexPrice, collateralPrice, kioskClient, kioskCap, scard, isLimitOrder = false, isIocOrder = false, pricesSlippage, collateralSlippage, relayerFee, referralAddress, sender) {
534
+ let tx = new transactions_1.Transaction();
535
+ if (referralAddress && !(await this.dataAPI.hasReferral(sender || ''))) {
536
+ tx = await this.addReferral(referralAddress, tx);
537
+ }
538
+ tx = await this.initOracleTxb([collateralToken, indexToken], tx);
539
+ const coinObject = this.processCoins(tx, collateralToken, coinObjects);
540
+ const [depositObject] = tx.splitCoins(coinObject, [
541
+ tx.pure.u64(collateralAmount),
542
+ ]);
543
+ const feeObject = tx.splitCoins(tx.gas, [tx.pure.u64(relayerFee || BigInt(0.5))]); // Sudo contract requires SUI as fee
544
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
545
+ const adjustPrice = this.processSlippage(indexPrice, long, isLimitOrder ? 0 : pricesSlippage || 0.003);
546
+ const adjustCollateralPrice = this.processSlippage(collateralPrice, false, collateralSlippage || 0.5);
547
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
548
+ if (isLimitOrder) {
549
+ allowTrade = isIocOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
550
+ }
551
+ const kioskTx = new kiosk_1.KioskTransaction({
552
+ transaction: tx,
553
+ kioskClient,
554
+ cap: kioskCap,
555
+ });
556
+ const [sudoCard, promise] = kioskTx.borrow({
557
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
558
+ itemId: scard,
559
+ });
560
+ tx.moveCall({
561
+ target: `${this.consts.sudoCore.upgradedPackage}::market::open_position_v1_3`,
562
+ typeArguments: [
563
+ `${this.consts.sudoCore.package}::slp::SLP`,
564
+ this.consts.coins[collateralToken].module,
565
+ this.consts.coins[indexToken].module,
566
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
567
+ this.consts.coins['sui'].module,
568
+ ],
569
+ arguments: [
570
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
571
+ tx.object(this.consts.sudoCore.market),
572
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
573
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
574
+ tx.object(this.consts.sudoCore.symbols[symbol].positionConfig),
575
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
576
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
577
+ depositObject,
578
+ feeObject,
579
+ tx.pure.u8(allowTrade),
580
+ tx.pure.u64(size),
581
+ tx.pure.u64(reserveAmount),
582
+ tx.pure.u256(adjustCollateralPrice),
583
+ tx.pure.u256(adjustPrice),
584
+ tx.pure.bool(isLimitOrder),
585
+ sudoCard,
586
+ ],
587
+ });
588
+ kioskTx
589
+ .return({
590
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
591
+ item: sudoCard,
592
+ promise: promise,
593
+ })
594
+ .finalize();
595
+ return tx;
596
+ }
597
+ async decreasePositionWithSCard(pcpId, collateralToken, indexToken, amount, long, indexPrice, collateralPrice, kioskClient, kioskCap, scard, isTriggerOrder = false, isTakeProfitOrder = true, isIocOrder = false, pricesSlippage = 0.003, collateralSlippage = 0.5, relayerFee = BigInt(0.5), coinObjects) {
598
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
599
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
600
+ const feeObject = tx.splitCoins(tx.gas, [tx.pure.u64(relayerFee)]); // Sudo contract requires SUI as fee
601
+ const adjustPrice = this.processSlippage(indexPrice, !long, isTriggerOrder ? 0 : pricesSlippage);
602
+ const adjustCollateralPrice = this.processSlippage(collateralPrice, false, collateralSlippage);
603
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
604
+ if (isTriggerOrder) {
605
+ if (isIocOrder || !isTakeProfitOrder) {
606
+ allowTrade = consts_1.ALLOW_TRADE_NO_TRADE;
607
+ }
608
+ else {
609
+ allowTrade = consts_1.ALLOW_TRADE_CAN_TRADE;
610
+ }
611
+ }
612
+ else {
613
+ isTakeProfitOrder = true;
614
+ }
615
+ const kioskTx = new kiosk_1.KioskTransaction({
616
+ transaction: tx,
617
+ kioskClient,
618
+ cap: kioskCap,
619
+ });
620
+ const [sudoCard, promise] = kioskTx.borrow({
621
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
622
+ itemId: scard,
623
+ });
624
+ tx.moveCall({
625
+ target: `${this.consts.sudoCore.upgradedPackage}::market::decrease_position_v1_3`,
626
+ typeArguments: [
627
+ `${this.consts.sudoCore.package}::slp::SLP`,
628
+ this.consts.coins[collateralToken].module,
629
+ this.consts.coins[indexToken].module,
630
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
631
+ this.consts.coins['sui'].module,
632
+ ],
633
+ arguments: [
634
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
635
+ tx.object(this.consts.sudoCore.market),
636
+ tx.object(pcpId),
637
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
638
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
639
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
640
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
641
+ feeObject,
642
+ tx.pure.u8(allowTrade),
643
+ tx.pure.bool(isTakeProfitOrder),
644
+ tx.pure.u64(amount),
645
+ tx.pure.u256(adjustCollateralPrice),
646
+ tx.pure.u256(adjustPrice),
647
+ tx.pure.bool(isTriggerOrder),
648
+ sudoCard,
649
+ ],
650
+ });
651
+ kioskTx
652
+ .return({
653
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
654
+ item: sudoCard,
655
+ promise: promise,
656
+ })
657
+ .finalize();
658
+ return tx;
659
+ }
660
+ async decreaseMultiPositionsWithSCard(positions, kioskClient, kioskCap, scard, tx) {
661
+ if (!tx) {
662
+ tx = new transactions_1.Transaction();
663
+ }
664
+ tx = await this.initOracleTxb(positions.map(position => [position.collateralToken, position.indexToken]).flat(), tx);
665
+ const kioskTx = new kiosk_1.KioskTransaction({
666
+ transaction: tx,
667
+ kioskClient,
668
+ cap: kioskCap,
669
+ });
670
+ const [sudoCard, promise] = kioskTx.borrow({
671
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
672
+ itemId: scard,
673
+ });
674
+ for (const position of positions) {
675
+ const { pcpId, collateralToken, indexToken, amount, long, indexPrice, collateralPrice, isTriggerOrder, isTakeProfitOrder, isIocOrder, slippage, relayerFee, coinObjects, } = position;
676
+ let innerIsTakeProfitOrder = isTakeProfitOrder;
677
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
678
+ const coinObject = this.processCoins(tx, collateralToken, coinObjects);
679
+ const feeObject = tx.splitCoins(coinObject, [tx.pure.u64(relayerFee)]);
680
+ const adjustPrice = this.processSlippage(indexPrice, !long, isTriggerOrder ? 0 : slippage);
681
+ const adjustCollateralPrice = this.processSlippage(collateralPrice, false, 0.5);
682
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
683
+ if (isTriggerOrder) {
684
+ allowTrade = isIocOrder || !innerIsTakeProfitOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
685
+ }
686
+ else {
687
+ innerIsTakeProfitOrder = true;
688
+ }
689
+ tx.moveCall({
690
+ target: `${this.consts.sudoCore.upgradedPackage}::market::decrease_position_v1_3`,
691
+ typeArguments: [
692
+ `${this.consts.sudoCore.package}::slp::SLP`,
693
+ this.consts.coins[collateralToken].module,
694
+ this.consts.coins[indexToken].module,
695
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
696
+ this.consts.coins['sui'].module,
697
+ ],
698
+ arguments: [
699
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
700
+ tx.object(this.consts.sudoCore.market),
701
+ tx.object(pcpId),
702
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
703
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
704
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
705
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
706
+ feeObject,
707
+ tx.pure.u8(allowTrade),
708
+ tx.pure.bool(isTakeProfitOrder),
709
+ tx.pure.u64(amount),
710
+ tx.pure.u256(adjustCollateralPrice),
711
+ tx.pure.u256(adjustPrice),
712
+ tx.pure.bool(isTriggerOrder),
713
+ sudoCard,
714
+ ],
715
+ });
716
+ }
717
+ kioskTx
718
+ .return({
719
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
720
+ item: sudoCard,
721
+ promise: promise,
722
+ })
723
+ .finalize();
724
+ return tx;
725
+ }
726
+ addReferral(referrer, tx) {
727
+ if (!tx) {
728
+ tx = new transactions_1.Transaction();
729
+ }
730
+ tx.moveCall({
731
+ target: `${this.consts.sudoCore.upgradedPackage}::market::add_new_referral`,
732
+ typeArguments: [`${this.consts.sudoCore.package}::slp::SLP`],
733
+ arguments: [tx.object(this.consts.sudoCore.market), tx.object(referrer)],
734
+ });
735
+ return tx;
736
+ }
737
+ async adminUpdatePriceFeed(collateralToken, indexToken) {
738
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
739
+ return tx;
740
+ }
741
+ async adminSettlePosition(positionId, owner, collateralToken, indexToken, long) {
742
+ // SLP does not support this operation
743
+ throw new Error('Method not implemented.');
744
+ }
745
+ async adminDecreasePosition(positionId, owner, collateralToken, indexToken, positionAmount, amount, long, collateralPrice, collateralSlippage, relayerFee) {
746
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
747
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
748
+ const feeObject = tx.splitCoins(tx.gas, [tx.pure.u64(relayerFee || BigInt(1))]);
749
+ const adjustCollateralPrice = this.processSlippage(collateralPrice || 0, false, collateralSlippage || 0.5);
750
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
751
+ tx.moveCall({
752
+ target: `${this.consts.sudoCore.upgradedPackage}::market::admin_decrease_position_v1_3`,
753
+ typeArguments: [
754
+ `${this.consts.sudoCore.package}::slp::SLP`,
755
+ this.consts.coins[collateralToken].module,
756
+ this.consts.coins[indexToken].module,
757
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
758
+ this.consts.coins['sui'].module,
759
+ ],
760
+ arguments: [
761
+ tx.object(this.consts.sudoCore.adminCap),
762
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
763
+ tx.object(this.consts.sudoCore.market),
764
+ tx.object(positionId),
765
+ tx.object(this.consts.sudoCore.vaults[collateralToken].reservingFeeModel),
766
+ tx.object(this.consts.sudoCore.symbols[symbol].fundingFeeModel),
767
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
768
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
769
+ feeObject,
770
+ tx.pure.u8(allowTrade),
771
+ tx.pure.u64(amount),
772
+ tx.pure.u256(adjustCollateralPrice),
773
+ tx.object(owner),
774
+ ],
775
+ });
776
+ if (amount === BigInt(positionAmount)) {
777
+ this.adminClearClosedPosition(positionId, owner, collateralToken, indexToken, long, tx);
778
+ }
779
+ return tx;
780
+ }
781
+ async adminClearClosedPosition(positionId, owner, collateralToken, indexToken, long, tx) {
782
+ tx.moveCall({
783
+ target: `${this.consts.sudoCore.upgradedPackage}::market::admin_clear_closed_position_v1_1`,
784
+ typeArguments: [
785
+ `${this.consts.sudoCore.package}::slp::SLP`,
786
+ this.consts.coins[collateralToken].module,
787
+ this.consts.coins[indexToken].module,
788
+ `${this.consts.sudoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
789
+ ],
790
+ arguments: [
791
+ tx.object(this.consts.sudoCore.adminCap),
792
+ tx.object(owner),
793
+ tx.object(this.consts.sudoCore.market),
794
+ tx.object(positionId),
795
+ ],
796
+ });
797
+ }
798
+ // SLP Specific APIs
799
+ async claimTokenFromSCard(token, coinObjects, kioskClient, kioskCap, scard) {
800
+ const tx = new transactions_1.Transaction();
801
+ const kioskTx = new kiosk_1.KioskTransaction({
802
+ transaction: tx,
803
+ kioskClient,
804
+ cap: kioskCap,
805
+ });
806
+ const [sudoCard, promise] = kioskTx.borrow({
807
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
808
+ itemId: scard,
809
+ });
810
+ // claim tokens
811
+ coinObjects.forEach(coinObject => {
812
+ return tx.moveCall({
813
+ target: `${this.consts.sudoNft.upgradedPackage}::card::claim_token`,
814
+ typeArguments: [`${this.consts.coins[token].module}`],
815
+ arguments: [sudoCard, tx.object(coinObject)],
816
+ });
817
+ });
818
+ kioskTx
819
+ .return({
820
+ itemType: `${this.consts.sudoNft.package}::card::SudoCard`,
821
+ item: sudoCard,
822
+ promise: promise,
823
+ })
824
+ .finalize();
825
+ return tx;
826
+ }
827
+ }
828
+ exports.SLPAPI = SLPAPI;
829
+ //# sourceMappingURL=SLPAPI.cjs.map