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