@zofai/zo-sdk 0.1.92

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 (275) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.gitattributes +4 -0
  3. package/.prettierrc.js +9 -0
  4. package/README.md +28 -0
  5. package/dist/abstract/BaseAPI.cjs +206 -0
  6. package/dist/abstract/BaseAPI.cjs.map +1 -0
  7. package/dist/abstract/BaseAPI.d.cts +172 -0
  8. package/dist/abstract/BaseAPI.d.cts.map +1 -0
  9. package/dist/abstract/BaseAPI.d.mts +172 -0
  10. package/dist/abstract/BaseAPI.d.mts.map +1 -0
  11. package/dist/abstract/BaseAPI.mjs +202 -0
  12. package/dist/abstract/BaseAPI.mjs.map +1 -0
  13. package/dist/abstract/BaseDataAPI.cjs +140 -0
  14. package/dist/abstract/BaseDataAPI.cjs.map +1 -0
  15. package/dist/abstract/BaseDataAPI.d.cts +89 -0
  16. package/dist/abstract/BaseDataAPI.d.cts.map +1 -0
  17. package/dist/abstract/BaseDataAPI.d.mts +89 -0
  18. package/dist/abstract/BaseDataAPI.d.mts.map +1 -0
  19. package/dist/abstract/BaseDataAPI.mjs +136 -0
  20. package/dist/abstract/BaseDataAPI.mjs.map +1 -0
  21. package/dist/abstract/index.cjs +12 -0
  22. package/dist/abstract/index.cjs.map +1 -0
  23. package/dist/abstract/index.d.cts +7 -0
  24. package/dist/abstract/index.d.cts.map +1 -0
  25. package/dist/abstract/index.d.mts +7 -0
  26. package/dist/abstract/index.d.mts.map +1 -0
  27. package/dist/abstract/index.mjs +7 -0
  28. package/dist/abstract/index.mjs.map +1 -0
  29. package/dist/api.cjs +779 -0
  30. package/dist/api.cjs.map +1 -0
  31. package/dist/api.d.cts +75 -0
  32. package/dist/api.d.cts.map +1 -0
  33. package/dist/api.d.mts +75 -0
  34. package/dist/api.d.mts.map +1 -0
  35. package/dist/api.mjs +775 -0
  36. package/dist/api.mjs.map +1 -0
  37. package/dist/bcs.cjs +42 -0
  38. package/dist/bcs.cjs.map +1 -0
  39. package/dist/bcs.d.cts +91 -0
  40. package/dist/bcs.d.cts.map +1 -0
  41. package/dist/bcs.d.mts +91 -0
  42. package/dist/bcs.d.mts.map +1 -0
  43. package/dist/bcs.mjs +39 -0
  44. package/dist/bcs.mjs.map +1 -0
  45. package/dist/consts/deployments-shared-mainnet.json +50 -0
  46. package/dist/consts/deployments-shared-testnet.json +45 -0
  47. package/dist/consts/deployments-slp-mainnet.json +600 -0
  48. package/dist/consts/deployments-slp-testnet.json +87 -0
  49. package/dist/consts/deployments-usdz-mainnet.json +494 -0
  50. package/dist/consts/deployments-usdz-testnet.json +98 -0
  51. package/dist/consts/deployments-zbtcvc-mainnet.json +180 -0
  52. package/dist/consts/deployments-zlp-mainnet.json +791 -0
  53. package/dist/consts/deployments-zlp-testnet.json +76 -0
  54. package/dist/consts/index.cjs +200 -0
  55. package/dist/consts/index.cjs.map +1 -0
  56. package/dist/consts/index.d.cts +157 -0
  57. package/dist/consts/index.d.cts.map +1 -0
  58. package/dist/consts/index.d.mts +157 -0
  59. package/dist/consts/index.d.mts.map +1 -0
  60. package/dist/consts/index.mjs +189 -0
  61. package/dist/consts/index.mjs.map +1 -0
  62. package/dist/consts/price_id_to_object_id.mainnet.json +56 -0
  63. package/dist/consts/price_id_to_object_id.testnet.json +17 -0
  64. package/dist/data.cjs +919 -0
  65. package/dist/data.cjs.map +1 -0
  66. package/dist/data.d.cts +235 -0
  67. package/dist/data.d.cts.map +1 -0
  68. package/dist/data.d.mts +235 -0
  69. package/dist/data.d.mts.map +1 -0
  70. package/dist/data.mjs +915 -0
  71. package/dist/data.mjs.map +1 -0
  72. package/dist/factory/SDKFactory.cjs +228 -0
  73. package/dist/factory/SDKFactory.cjs.map +1 -0
  74. package/dist/factory/SDKFactory.d.cts +84 -0
  75. package/dist/factory/SDKFactory.d.cts.map +1 -0
  76. package/dist/factory/SDKFactory.d.mts +84 -0
  77. package/dist/factory/SDKFactory.d.mts.map +1 -0
  78. package/dist/factory/SDKFactory.mjs +222 -0
  79. package/dist/factory/SDKFactory.mjs.map +1 -0
  80. package/dist/implementations/SLPAPI.cjs +1794 -0
  81. package/dist/implementations/SLPAPI.cjs.map +1 -0
  82. package/dist/implementations/SLPAPI.d.cts +183 -0
  83. package/dist/implementations/SLPAPI.d.cts.map +1 -0
  84. package/dist/implementations/SLPAPI.d.mts +183 -0
  85. package/dist/implementations/SLPAPI.d.mts.map +1 -0
  86. package/dist/implementations/SLPAPI.mjs +1790 -0
  87. package/dist/implementations/SLPAPI.mjs.map +1 -0
  88. package/dist/implementations/SLPDataAPI.cjs +1384 -0
  89. package/dist/implementations/SLPDataAPI.cjs.map +1 -0
  90. package/dist/implementations/SLPDataAPI.d.cts +158 -0
  91. package/dist/implementations/SLPDataAPI.d.cts.map +1 -0
  92. package/dist/implementations/SLPDataAPI.d.mts +158 -0
  93. package/dist/implementations/SLPDataAPI.d.mts.map +1 -0
  94. package/dist/implementations/SLPDataAPI.mjs +1380 -0
  95. package/dist/implementations/SLPDataAPI.mjs.map +1 -0
  96. package/dist/implementations/USDZAPI.cjs +1676 -0
  97. package/dist/implementations/USDZAPI.cjs.map +1 -0
  98. package/dist/implementations/USDZAPI.d.cts +180 -0
  99. package/dist/implementations/USDZAPI.d.cts.map +1 -0
  100. package/dist/implementations/USDZAPI.d.mts +180 -0
  101. package/dist/implementations/USDZAPI.d.mts.map +1 -0
  102. package/dist/implementations/USDZAPI.mjs +1672 -0
  103. package/dist/implementations/USDZAPI.mjs.map +1 -0
  104. package/dist/implementations/USDZDataAPI.cjs +1209 -0
  105. package/dist/implementations/USDZDataAPI.cjs.map +1 -0
  106. package/dist/implementations/USDZDataAPI.d.cts +191 -0
  107. package/dist/implementations/USDZDataAPI.d.cts.map +1 -0
  108. package/dist/implementations/USDZDataAPI.d.mts +191 -0
  109. package/dist/implementations/USDZDataAPI.d.mts.map +1 -0
  110. package/dist/implementations/USDZDataAPI.mjs +1205 -0
  111. package/dist/implementations/USDZDataAPI.mjs.map +1 -0
  112. package/dist/implementations/ZBTCVCAPI.cjs +906 -0
  113. package/dist/implementations/ZBTCVCAPI.cjs.map +1 -0
  114. package/dist/implementations/ZBTCVCAPI.d.cts +107 -0
  115. package/dist/implementations/ZBTCVCAPI.d.cts.map +1 -0
  116. package/dist/implementations/ZBTCVCAPI.d.mts +107 -0
  117. package/dist/implementations/ZBTCVCAPI.d.mts.map +1 -0
  118. package/dist/implementations/ZBTCVCAPI.mjs +902 -0
  119. package/dist/implementations/ZBTCVCAPI.mjs.map +1 -0
  120. package/dist/implementations/ZBTCVCDataAPI.cjs +829 -0
  121. package/dist/implementations/ZBTCVCDataAPI.cjs.map +1 -0
  122. package/dist/implementations/ZBTCVCDataAPI.d.cts +94 -0
  123. package/dist/implementations/ZBTCVCDataAPI.d.cts.map +1 -0
  124. package/dist/implementations/ZBTCVCDataAPI.d.mts +94 -0
  125. package/dist/implementations/ZBTCVCDataAPI.d.mts.map +1 -0
  126. package/dist/implementations/ZBTCVCDataAPI.mjs +825 -0
  127. package/dist/implementations/ZBTCVCDataAPI.mjs.map +1 -0
  128. package/dist/implementations/ZLPAPI.cjs +1948 -0
  129. package/dist/implementations/ZLPAPI.cjs.map +1 -0
  130. package/dist/implementations/ZLPAPI.d.cts +192 -0
  131. package/dist/implementations/ZLPAPI.d.cts.map +1 -0
  132. package/dist/implementations/ZLPAPI.d.mts +192 -0
  133. package/dist/implementations/ZLPAPI.d.mts.map +1 -0
  134. package/dist/implementations/ZLPAPI.mjs +1944 -0
  135. package/dist/implementations/ZLPAPI.mjs.map +1 -0
  136. package/dist/implementations/ZLPDataAPI.cjs +1267 -0
  137. package/dist/implementations/ZLPDataAPI.cjs.map +1 -0
  138. package/dist/implementations/ZLPDataAPI.d.cts +193 -0
  139. package/dist/implementations/ZLPDataAPI.d.cts.map +1 -0
  140. package/dist/implementations/ZLPDataAPI.d.mts +193 -0
  141. package/dist/implementations/ZLPDataAPI.d.mts.map +1 -0
  142. package/dist/implementations/ZLPDataAPI.mjs +1263 -0
  143. package/dist/implementations/ZLPDataAPI.mjs.map +1 -0
  144. package/dist/implementations/index.cjs +26 -0
  145. package/dist/implementations/index.cjs.map +1 -0
  146. package/dist/implementations/index.d.cts +13 -0
  147. package/dist/implementations/index.d.cts.map +1 -0
  148. package/dist/implementations/index.d.mts +13 -0
  149. package/dist/implementations/index.d.mts.map +1 -0
  150. package/dist/implementations/index.mjs +15 -0
  151. package/dist/implementations/index.mjs.map +1 -0
  152. package/dist/index.cjs +69 -0
  153. package/dist/index.cjs.map +1 -0
  154. package/dist/index.d.cts +51 -0
  155. package/dist/index.d.cts.map +1 -0
  156. package/dist/index.d.mts +51 -0
  157. package/dist/index.d.mts.map +1 -0
  158. package/dist/index.mjs +51 -0
  159. package/dist/index.mjs.map +1 -0
  160. package/dist/interfaces/base.cjs +7 -0
  161. package/dist/interfaces/base.cjs.map +1 -0
  162. package/dist/interfaces/base.d.cts +346 -0
  163. package/dist/interfaces/base.d.cts.map +1 -0
  164. package/dist/interfaces/base.d.mts +346 -0
  165. package/dist/interfaces/base.d.mts.map +1 -0
  166. package/dist/interfaces/base.mjs +6 -0
  167. package/dist/interfaces/base.mjs.map +1 -0
  168. package/dist/interfaces/index.cjs +31 -0
  169. package/dist/interfaces/index.cjs.map +1 -0
  170. package/dist/interfaces/index.d.cts +15 -0
  171. package/dist/interfaces/index.d.cts.map +1 -0
  172. package/dist/interfaces/index.d.mts +15 -0
  173. package/dist/interfaces/index.d.mts.map +1 -0
  174. package/dist/interfaces/index.mjs +15 -0
  175. package/dist/interfaces/index.mjs.map +1 -0
  176. package/dist/interfaces/slp.cjs +7 -0
  177. package/dist/interfaces/slp.cjs.map +1 -0
  178. package/dist/interfaces/slp.d.cts +179 -0
  179. package/dist/interfaces/slp.d.cts.map +1 -0
  180. package/dist/interfaces/slp.d.mts +179 -0
  181. package/dist/interfaces/slp.d.mts.map +1 -0
  182. package/dist/interfaces/slp.mjs +6 -0
  183. package/dist/interfaces/slp.mjs.map +1 -0
  184. package/dist/interfaces/usdz.cjs +7 -0
  185. package/dist/interfaces/usdz.cjs.map +1 -0
  186. package/dist/interfaces/usdz.d.cts +104 -0
  187. package/dist/interfaces/usdz.d.cts.map +1 -0
  188. package/dist/interfaces/usdz.d.mts +104 -0
  189. package/dist/interfaces/usdz.d.mts.map +1 -0
  190. package/dist/interfaces/usdz.mjs +6 -0
  191. package/dist/interfaces/usdz.mjs.map +1 -0
  192. package/dist/interfaces/zbtcvc.cjs +7 -0
  193. package/dist/interfaces/zbtcvc.cjs.map +1 -0
  194. package/dist/interfaces/zbtcvc.d.cts +64 -0
  195. package/dist/interfaces/zbtcvc.d.cts.map +1 -0
  196. package/dist/interfaces/zbtcvc.d.mts +64 -0
  197. package/dist/interfaces/zbtcvc.d.mts.map +1 -0
  198. package/dist/interfaces/zbtcvc.mjs +6 -0
  199. package/dist/interfaces/zbtcvc.mjs.map +1 -0
  200. package/dist/interfaces/zlp.cjs +7 -0
  201. package/dist/interfaces/zlp.cjs.map +1 -0
  202. package/dist/interfaces/zlp.d.cts +114 -0
  203. package/dist/interfaces/zlp.d.cts.map +1 -0
  204. package/dist/interfaces/zlp.d.mts +114 -0
  205. package/dist/interfaces/zlp.d.mts.map +1 -0
  206. package/dist/interfaces/zlp.mjs +6 -0
  207. package/dist/interfaces/zlp.mjs.map +1 -0
  208. package/dist/oracle.cjs +118 -0
  209. package/dist/oracle.cjs.map +1 -0
  210. package/dist/oracle.d.cts +25 -0
  211. package/dist/oracle.d.cts.map +1 -0
  212. package/dist/oracle.d.mts +25 -0
  213. package/dist/oracle.d.mts.map +1 -0
  214. package/dist/oracle.mjs +114 -0
  215. package/dist/oracle.mjs.map +1 -0
  216. package/dist/utils.cjs +129 -0
  217. package/dist/utils.cjs.map +1 -0
  218. package/dist/utils.d.cts +44 -0
  219. package/dist/utils.d.cts.map +1 -0
  220. package/dist/utils.d.mts +44 -0
  221. package/dist/utils.d.mts.map +1 -0
  222. package/dist/utils.mjs +115 -0
  223. package/dist/utils.mjs.map +1 -0
  224. package/docs/SUMMARY.md +10 -0
  225. package/docs/api-reference.md +32 -0
  226. package/docs/architecture.md +14 -0
  227. package/docs/common-operations.md +52 -0
  228. package/docs/error-handling.md +17 -0
  229. package/docs/getting-started.md +60 -0
  230. package/docs/introduction.md +15 -0
  231. package/docs/lp-specific-features.md +96 -0
  232. package/docs/type-safety.md +29 -0
  233. package/eslint.config.mjs +18 -0
  234. package/package.json +42 -0
  235. package/src/abstract/BaseAPI.ts +575 -0
  236. package/src/abstract/BaseDataAPI.ts +207 -0
  237. package/src/abstract/index.ts +7 -0
  238. package/src/api.ts +1100 -0
  239. package/src/bcs.ts +45 -0
  240. package/src/consts/deployments-shared-mainnet.json +50 -0
  241. package/src/consts/deployments-shared-testnet.json +45 -0
  242. package/src/consts/deployments-slp-mainnet.json +600 -0
  243. package/src/consts/deployments-slp-testnet.json +87 -0
  244. package/src/consts/deployments-usdz-mainnet.json +494 -0
  245. package/src/consts/deployments-usdz-testnet.json +98 -0
  246. package/src/consts/deployments-zbtcvc-mainnet.json +180 -0
  247. package/src/consts/deployments-zlp-mainnet.json +791 -0
  248. package/src/consts/deployments-zlp-testnet.json +76 -0
  249. package/src/consts/index.ts +345 -0
  250. package/src/consts/price_id_to_object_id.mainnet.json +56 -0
  251. package/src/consts/price_id_to_object_id.testnet.json +17 -0
  252. package/src/data.ts +1279 -0
  253. package/src/factory/SDKFactory.ts +340 -0
  254. package/src/implementations/SLPAPI.ts +2722 -0
  255. package/src/implementations/SLPDataAPI.ts +1839 -0
  256. package/src/implementations/USDZAPI.ts +2488 -0
  257. package/src/implementations/USDZDataAPI.ts +1548 -0
  258. package/src/implementations/ZBTCVCAPI.ts +1337 -0
  259. package/src/implementations/ZBTCVCDataAPI.ts +993 -0
  260. package/src/implementations/ZLPAPI.ts +2888 -0
  261. package/src/implementations/ZLPDataAPI.ts +1603 -0
  262. package/src/implementations/index.ts +16 -0
  263. package/src/index.ts +58 -0
  264. package/src/interfaces/base.ts +838 -0
  265. package/src/interfaces/index.ts +50 -0
  266. package/src/interfaces/slp.ts +268 -0
  267. package/src/interfaces/usdz.ts +181 -0
  268. package/src/interfaces/zbtcvc.ts +116 -0
  269. package/src/interfaces/zlp.ts +244 -0
  270. package/src/oracle.ts +153 -0
  271. package/src/utils.ts +168 -0
  272. package/tests/api.test.ts +219 -0
  273. package/tests/data.test.ts +156 -0
  274. package/tests/oracle.test.ts +33 -0
  275. package/tsconfig.json +22 -0
package/dist/api.cjs ADDED
@@ -0,0 +1,779 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _API_instances, _API_processCoins, _API_processSlippage;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.API = void 0;
10
+ const kiosk_1 = require("@mysten/kiosk");
11
+ const transactions_1 = require("@mysten/sui/transactions");
12
+ const utils_1 = require("@mysten/sui/utils");
13
+ const consts_1 = require("./consts/index.cjs");
14
+ const data_1 = require("./data.cjs");
15
+ const utils_2 = require("./utils.cjs");
16
+ class API extends data_1.DataAPI {
17
+ // eslint-disable-next-line @typescript-eslint/no-useless-constructor
18
+ constructor(network, provider, apiEndpoint, connectionURL) {
19
+ super(network, provider, apiEndpoint, connectionURL);
20
+ _API_instances.add(this);
21
+ _API_processCoins.set(this, (tx, coin, coinObjects) => {
22
+ if (coin === 'sui') {
23
+ return tx.gas;
24
+ }
25
+ if (coinObjects.length > 1) {
26
+ tx.mergeCoins(tx.object(coinObjects[0]), coinObjects.slice(1).map(coinObject => tx.object(coinObject)));
27
+ }
28
+ return tx.object(coinObjects[0]);
29
+ });
30
+ this.deposit = async (coin, coinObjects, amount, minAmountOut = 0, referralAddress = '', sender = '') => {
31
+ let tx = new transactions_1.Transaction();
32
+ tx = await this.initOracleTxb(Object.keys(this.consts.pythFeeder.feeder), tx);
33
+ if (referralAddress && !(await this.hasReferral(sender || ''))) {
34
+ tx = await this.addReferral(referralAddress, tx);
35
+ }
36
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, coin, coinObjects);
37
+ const [depositObject] = tx.splitCoins(coinObject, [tx.pure.u64(amount)]);
38
+ const { vaultsValuation, symbolsValuation } = this.valuate(tx);
39
+ tx.moveCall({
40
+ target: `${this.consts.zoCore.upgradedPackage}::market::deposit`,
41
+ typeArguments: [`${this.consts.zoCore.package}::zlp::ZLP`, this.consts.coins[coin].module],
42
+ arguments: [
43
+ tx.object(this.consts.zoCore.market),
44
+ tx.object(this.consts.zoCore.rebaseFeeModel),
45
+ depositObject,
46
+ tx.pure.u64(minAmountOut),
47
+ vaultsValuation,
48
+ symbolsValuation,
49
+ ],
50
+ });
51
+ return tx;
52
+ };
53
+ this.withdraw = async (coin, zlpCoinObjects, amount, minAmountOut = 0) => {
54
+ const tx = await this.initOracleTxb(Object.keys(this.consts.pythFeeder.feeder));
55
+ const zlpCoinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, 'zlp', zlpCoinObjects);
56
+ const [withdrawObject] = tx.splitCoins(zlpCoinObject, [tx.pure.u64(amount)]);
57
+ const { vaultsValuation, symbolsValuation } = this.valuate(tx);
58
+ tx.moveCall({
59
+ target: `${this.consts.zoCore.upgradedPackage}::market::withdraw`,
60
+ typeArguments: [`${this.consts.zoCore.package}::zlp::ZLP`, this.consts.coins[coin].module],
61
+ arguments: [
62
+ tx.object(this.consts.zoCore.market),
63
+ tx.object(this.consts.zoCore.rebaseFeeModel),
64
+ withdrawObject,
65
+ tx.pure.u64(minAmountOut),
66
+ vaultsValuation,
67
+ symbolsValuation,
68
+ ],
69
+ });
70
+ return tx;
71
+ };
72
+ this.openPosition = async (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 = '') => {
73
+ let tx = new transactions_1.Transaction();
74
+ if (referralAddress && !(await this.hasReferral(sender || ''))) {
75
+ tx = await this.addReferral(referralAddress, tx);
76
+ }
77
+ tx = await this.initOracleTxb([collateralToken, indexToken], tx);
78
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, collateralToken, coinObjects);
79
+ const [depositObject, feeObject] = tx.splitCoins(coinObject, [
80
+ tx.pure.u64(collateralAmount),
81
+ tx.pure.u64(relayerFee),
82
+ ]);
83
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
84
+ const adjustPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, indexPrice, long, isLimitOrder ? 0 : pricesSlippage);
85
+ const adjustCollateralPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, collateralPrice, false, collateralSlippage);
86
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
87
+ if (isLimitOrder) {
88
+ allowTrade = isIocOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
89
+ }
90
+ tx.moveCall({
91
+ target: `${this.consts.zoCore.upgradedPackage}::market::open_position`,
92
+ typeArguments: [
93
+ `${this.consts.zoCore.package}::zlp::ZLP`,
94
+ this.consts.coins[collateralToken].module,
95
+ this.consts.coins[indexToken].module,
96
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
97
+ this.consts.coins[collateralToken].module,
98
+ ],
99
+ arguments: [
100
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
101
+ tx.object(this.consts.zoCore.market),
102
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
103
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
104
+ tx.object(this.consts.zoCore.symbols[symbol].positionConfig),
105
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
106
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
107
+ depositObject,
108
+ feeObject,
109
+ tx.pure.u8(allowTrade),
110
+ tx.pure.u64(size),
111
+ tx.pure.u64(reserveAmount),
112
+ tx.pure.u256(adjustCollateralPrice),
113
+ tx.pure.u256(adjustPrice),
114
+ ],
115
+ });
116
+ return tx;
117
+ };
118
+ this.openPositionWithSCard = async (collateralToken, indexToken, size, collateralAmount, coinObjects, long, reserveAmount, indexPrice, collateralPrice, kioskClient, kioskCap, scard, isLimitOrder = false, isIocOrder = false, pricesSlippage = 0.003, collateralSlippage = 0.5, relayerFee = BigInt(0.5), referralAddress = '', sender = '') => {
119
+ let tx = new transactions_1.Transaction();
120
+ if (referralAddress && !(await this.hasReferral(sender || ''))) {
121
+ tx = await this.addReferral(referralAddress, tx);
122
+ }
123
+ tx = await this.initOracleTxb([collateralToken, indexToken], tx);
124
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, collateralToken, coinObjects);
125
+ const [depositObject, feeObject] = tx.splitCoins(coinObject, [
126
+ tx.pure.u64(collateralAmount),
127
+ tx.pure.u64(relayerFee),
128
+ ]);
129
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
130
+ const adjustPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, indexPrice, long, isLimitOrder ? 0 : pricesSlippage);
131
+ const adjustCollateralPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, collateralPrice, false, collateralSlippage);
132
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
133
+ if (isLimitOrder) {
134
+ allowTrade = isIocOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
135
+ }
136
+ const kioskTx = new kiosk_1.KioskTransaction({
137
+ transaction: tx,
138
+ kioskClient,
139
+ cap: kioskCap,
140
+ });
141
+ const [sudoCard, promise] = kioskTx.borrow({
142
+ itemType: `0xe7e651e4974fe367aa2837712d68081efb299c470242a15e2b9c26ea326159ec::card::SudoCard`,
143
+ itemId: scard,
144
+ });
145
+ tx.moveCall({
146
+ target: `${this.consts.zoCore.upgradedPackage}::market::open_position_with_scard`,
147
+ typeArguments: [
148
+ `${this.consts.zoCore.package}::zlp::ZLP`,
149
+ this.consts.coins[collateralToken].module,
150
+ this.consts.coins[indexToken].module,
151
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
152
+ this.consts.coins[collateralToken].module,
153
+ ],
154
+ arguments: [
155
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
156
+ tx.object(this.consts.zoCore.market),
157
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
158
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
159
+ tx.object(this.consts.zoCore.symbols[symbol].positionConfig),
160
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
161
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
162
+ depositObject,
163
+ feeObject,
164
+ tx.pure.u8(allowTrade),
165
+ tx.pure.u64(size),
166
+ tx.pure.u64(reserveAmount),
167
+ tx.pure.u256(adjustCollateralPrice),
168
+ tx.pure.u256(adjustPrice),
169
+ sudoCard,
170
+ ],
171
+ });
172
+ kioskTx
173
+ .return({
174
+ itemType: `0xe7e651e4974fe367aa2837712d68081efb299c470242a15e2b9c26ea326159ec::card::SudoCard`,
175
+ item: sudoCard,
176
+ promise,
177
+ })
178
+ .finalize();
179
+ return tx;
180
+ };
181
+ this.pledgeInPosition = async (pcpId, collateralToken, indexToken, amount, coinObjects, long) => {
182
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
183
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, collateralToken, coinObjects);
184
+ const [depositObject] = tx.splitCoins(coinObject, [tx.pure.u64(amount)]);
185
+ tx.moveCall({
186
+ target: `${this.consts.zoCore.upgradedPackage}::market::pledge_in_position`,
187
+ typeArguments: [
188
+ `${this.consts.zoCore.package}::zlp::ZLP`,
189
+ this.consts.coins[collateralToken].module,
190
+ this.consts.coins[indexToken].module,
191
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
192
+ ],
193
+ arguments: [tx.object(this.consts.zoCore.market), tx.object(pcpId), depositObject],
194
+ });
195
+ return tx;
196
+ };
197
+ this.redeemFromPosition = async (pcpId, collateralToken, indexToken, amount, long) => {
198
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
199
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
200
+ tx.moveCall({
201
+ target: `${this.consts.zoCore.upgradedPackage}::market::redeem_from_position`,
202
+ typeArguments: [
203
+ `${this.consts.zoCore.package}::zlp::ZLP`,
204
+ this.consts.coins[collateralToken].module,
205
+ this.consts.coins[indexToken].module,
206
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
207
+ ],
208
+ arguments: [
209
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
210
+ tx.object(this.consts.zoCore.market),
211
+ tx.object(pcpId),
212
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
213
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
214
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
215
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
216
+ tx.pure.u64(amount),
217
+ ],
218
+ });
219
+ return tx;
220
+ };
221
+ this.decreasePosition = async (pcpId, collateralToken, coinObjects, indexToken, amount, long, indexPrice, collateralPrice, isTriggerOrder = false, isTakeProfitOrder = true, isIocOrder = false, pricesSlippage = 0.003, collateralSlippage = 0.5, relayerFee = BigInt(0.5)) => {
222
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
223
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
224
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, collateralToken, coinObjects);
225
+ const feeObject = tx.splitCoins(coinObject, [tx.pure.u64(relayerFee)]);
226
+ const adjustPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, indexPrice, !long, isTriggerOrder ? 0 : pricesSlippage);
227
+ const adjustCollateralPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, collateralPrice, false, collateralSlippage);
228
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
229
+ if (isTriggerOrder) {
230
+ allowTrade = isIocOrder || !isTakeProfitOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
231
+ }
232
+ else {
233
+ isTakeProfitOrder = true;
234
+ }
235
+ tx.moveCall({
236
+ target: `${this.consts.zoCore.upgradedPackage}::market::decrease_position`,
237
+ typeArguments: [
238
+ `${this.consts.zoCore.package}::zlp::ZLP`,
239
+ this.consts.coins[collateralToken].module,
240
+ this.consts.coins[indexToken].module,
241
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
242
+ this.consts.coins[collateralToken].module,
243
+ ],
244
+ arguments: [
245
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
246
+ tx.object(this.consts.zoCore.market),
247
+ tx.object(pcpId),
248
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
249
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
250
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
251
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
252
+ feeObject,
253
+ tx.pure.u8(allowTrade),
254
+ tx.pure.bool(isTakeProfitOrder),
255
+ tx.pure.u64(amount),
256
+ tx.pure.u256(adjustCollateralPrice),
257
+ tx.pure.u256(adjustPrice),
258
+ ],
259
+ });
260
+ return tx;
261
+ };
262
+ this.decreasePositionWithSCard = async (pcpId, collateralToken, coinObjects, indexToken, amount, long, indexPrice, collateralPrice, kioskClient, kioskCap, scard, isTriggerOrder = false, isTakeProfitOrder = true, isIocOrder = false, pricesSlippage = 0.003, collateralSlippage = 0.5, relayerFee = BigInt(0.5)) => {
263
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
264
+ const kioskTx = new kiosk_1.KioskTransaction({
265
+ transaction: tx,
266
+ kioskClient,
267
+ cap: kioskCap,
268
+ });
269
+ const [sudoCard, promise] = kioskTx.borrow({
270
+ itemType: `0xe7e651e4974fe367aa2837712d68081efb299c470242a15e2b9c26ea326159ec::card::SudoCard`,
271
+ itemId: scard,
272
+ });
273
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
274
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, collateralToken, coinObjects);
275
+ const feeObject = tx.splitCoins(coinObject, [tx.pure.u64(relayerFee)]);
276
+ const adjustPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, indexPrice, !long, isTriggerOrder ? 0 : pricesSlippage);
277
+ const adjustCollateralPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, collateralPrice, false, collateralSlippage);
278
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
279
+ if (isTriggerOrder) {
280
+ allowTrade = isIocOrder || !isTakeProfitOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
281
+ }
282
+ else {
283
+ isTakeProfitOrder = true;
284
+ }
285
+ tx.moveCall({
286
+ target: `${this.consts.zoCore.upgradedPackage}::market::decrease_position_with_scard`,
287
+ typeArguments: [
288
+ `${this.consts.zoCore.package}::zlp::ZLP`,
289
+ this.consts.coins[collateralToken].module,
290
+ this.consts.coins[indexToken].module,
291
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
292
+ this.consts.coins[collateralToken].module,
293
+ ],
294
+ arguments: [
295
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
296
+ tx.object(this.consts.zoCore.market),
297
+ tx.object(pcpId),
298
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
299
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
300
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
301
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
302
+ feeObject,
303
+ tx.pure.u8(allowTrade),
304
+ tx.pure.bool(isTakeProfitOrder),
305
+ tx.pure.u64(amount),
306
+ tx.pure.u256(adjustCollateralPrice),
307
+ tx.pure.u256(adjustPrice),
308
+ sudoCard,
309
+ ],
310
+ });
311
+ kioskTx
312
+ .return({
313
+ itemType: `0xe7e651e4974fe367aa2837712d68081efb299c470242a15e2b9c26ea326159ec::card::SudoCard`,
314
+ item: sudoCard,
315
+ promise,
316
+ })
317
+ .finalize();
318
+ return tx;
319
+ };
320
+ this.decreaseMultiPositions = async (positions, tx) => {
321
+ if (!tx) {
322
+ tx = new transactions_1.Transaction();
323
+ }
324
+ tx = await this.initOracleTxb(positions.flatMap(position => [position.collateralToken, position.indexToken]), tx);
325
+ for (const position of positions) {
326
+ const { pcpId, collateralToken, coinObjects, indexToken, amount, long, indexPrice, collateralPrice, isTriggerOrder, isTakeProfitOrder, isIocOrder, slippage, relayerFee, } = position;
327
+ let innerIsTakeProfitOrder = isTakeProfitOrder;
328
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
329
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, collateralToken, coinObjects);
330
+ const feeObject = tx.splitCoins(coinObject, [tx.pure.u64(relayerFee)]);
331
+ const adjustPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, indexPrice, !long, isTriggerOrder ? 0 : slippage);
332
+ const adjustCollateralPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, collateralPrice, false, 0.5);
333
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
334
+ if (isTriggerOrder) {
335
+ allowTrade = isIocOrder || !innerIsTakeProfitOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
336
+ }
337
+ else {
338
+ innerIsTakeProfitOrder = true;
339
+ }
340
+ tx.moveCall({
341
+ target: `${this.consts.zoCore.upgradedPackage}::market::decrease_position`,
342
+ typeArguments: [
343
+ `${this.consts.zoCore.package}::zlp::ZLP`,
344
+ this.consts.coins[collateralToken].module,
345
+ this.consts.coins[indexToken].module,
346
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
347
+ this.consts.coins[collateralToken].module,
348
+ ],
349
+ arguments: [
350
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
351
+ tx.object(this.consts.zoCore.market),
352
+ tx.object(pcpId),
353
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
354
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
355
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
356
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
357
+ feeObject,
358
+ tx.pure.u8(allowTrade),
359
+ tx.pure.bool(innerIsTakeProfitOrder),
360
+ tx.pure.u64(amount),
361
+ tx.pure.u256(adjustCollateralPrice),
362
+ tx.pure.u256(adjustPrice),
363
+ ],
364
+ });
365
+ }
366
+ return tx;
367
+ };
368
+ this.decreaseMultiPositionsWithSCard = async (positions, kioskClient, kioskCap, scard, tx) => {
369
+ if (!tx) {
370
+ tx = new transactions_1.Transaction();
371
+ }
372
+ tx = await this.initOracleTxb(positions.flatMap(position => [position.collateralToken, position.indexToken]), tx);
373
+ const kioskTx = new kiosk_1.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
+ for (const position of positions) {
383
+ const { pcpId, collateralToken, coinObjects, indexToken, amount, long, indexPrice, collateralPrice, isTriggerOrder, isTakeProfitOrder, isIocOrder, slippage, relayerFee, } = position;
384
+ let innerIsTakeProfitOrder = isTakeProfitOrder;
385
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
386
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, collateralToken, coinObjects);
387
+ const feeObject = tx.splitCoins(coinObject, [tx.pure.u64(relayerFee)]);
388
+ const adjustPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, indexPrice, !long, isTriggerOrder ? 0 : slippage);
389
+ const adjustCollateralPrice = __classPrivateFieldGet(this, _API_instances, "m", _API_processSlippage).call(this, collateralPrice, false, 0.5);
390
+ let allowTrade = consts_1.ALLOW_TRADE_MUST_TRADE;
391
+ if (isTriggerOrder) {
392
+ allowTrade = isIocOrder || !innerIsTakeProfitOrder ? consts_1.ALLOW_TRADE_NO_TRADE : consts_1.ALLOW_TRADE_CAN_TRADE;
393
+ }
394
+ else {
395
+ innerIsTakeProfitOrder = true;
396
+ }
397
+ tx.moveCall({
398
+ target: `${this.consts.zoCore.upgradedPackage}::market::decrease_position_with_scard`,
399
+ typeArguments: [
400
+ `${this.consts.zoCore.package}::zlp::ZLP`,
401
+ this.consts.coins[collateralToken].module,
402
+ this.consts.coins[indexToken].module,
403
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
404
+ this.consts.coins[collateralToken].module,
405
+ ],
406
+ arguments: [
407
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
408
+ tx.object(this.consts.zoCore.market),
409
+ tx.object(pcpId),
410
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
411
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
412
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
413
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
414
+ feeObject,
415
+ tx.pure.u8(allowTrade),
416
+ tx.pure.bool(innerIsTakeProfitOrder),
417
+ tx.pure.u64(amount),
418
+ tx.pure.u256(adjustCollateralPrice),
419
+ tx.pure.u256(adjustPrice),
420
+ sudoCard,
421
+ ],
422
+ });
423
+ }
424
+ kioskTx
425
+ .return({
426
+ itemType: `0xe7e651e4974fe367aa2837712d68081efb299c470242a15e2b9c26ea326159ec::card::SudoCard`,
427
+ item: sudoCard,
428
+ promise,
429
+ })
430
+ .finalize();
431
+ return tx;
432
+ };
433
+ this.cancelOrder = (orderCapId, collateralToken, indexToken, long, type, isV11Order = false) => {
434
+ const tx = new transactions_1.Transaction();
435
+ let functionName = '';
436
+ switch (type) {
437
+ case 'OPEN_POSITION': {
438
+ functionName = isV11Order ? 'clear_open_position_order' : 'clear_open_position_order';
439
+ break;
440
+ }
441
+ case 'DECREASE_POSITION': {
442
+ functionName = isV11Order
443
+ ? 'clear_decrease_position_order'
444
+ : 'clear_decrease_position_order';
445
+ break;
446
+ }
447
+ default: {
448
+ throw new Error('invalid order type');
449
+ }
450
+ }
451
+ tx.moveCall({
452
+ target: `${this.consts.zoCore.upgradedPackage}::market::${functionName}`,
453
+ typeArguments: [
454
+ `${this.consts.zoCore.package}::zlp::ZLP`,
455
+ this.consts.coins[collateralToken].module,
456
+ this.consts.coins[indexToken].module,
457
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
458
+ this.consts.coins[collateralToken].module,
459
+ ],
460
+ arguments: [tx.object(this.consts.zoCore.market), tx.object(orderCapId)],
461
+ });
462
+ return tx;
463
+ };
464
+ this.cancelMultiOrder = (orders, tx) => {
465
+ if (!tx) {
466
+ tx = new transactions_1.Transaction();
467
+ }
468
+ for (const order of orders) {
469
+ const { orderCapId, collateralToken, indexToken, long, type, isV11Order } = order;
470
+ let functionName = '';
471
+ switch (type) {
472
+ case 'OPEN_POSITION': {
473
+ functionName = isV11Order ? 'clear_open_position_order' : 'clear_open_position_order';
474
+ break;
475
+ }
476
+ case 'DECREASE_POSITION': {
477
+ functionName = isV11Order
478
+ ? 'clear_decrease_position_order'
479
+ : 'clear_decrease_position_order';
480
+ break;
481
+ }
482
+ default: {
483
+ throw new Error('invalid order type');
484
+ }
485
+ }
486
+ tx.moveCall({
487
+ target: `${this.consts.zoCore.upgradedPackage}::market::${functionName}`,
488
+ typeArguments: [
489
+ `${this.consts.zoCore.package}::zlp::ZLP`,
490
+ this.consts.coins[collateralToken].module,
491
+ this.consts.coins[indexToken].module,
492
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
493
+ this.consts.coins[collateralToken].module,
494
+ ],
495
+ arguments: [tx.object(this.consts.zoCore.market), tx.object(orderCapId)],
496
+ });
497
+ }
498
+ return tx;
499
+ };
500
+ this.swap = async (fromToken, toToken, fromAmount, fromCoinObjects) => {
501
+ const tx = await this.initOracleTxb(Object.keys(this.consts.zoCore.vaults));
502
+ const fromCoinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, fromToken, fromCoinObjects);
503
+ const [fromDepositObject] = tx.splitCoins(fromCoinObject, [tx.pure.u64(fromAmount)]);
504
+ const vaultsValuation = this.valuateVaults(tx);
505
+ tx.moveCall({
506
+ target: `${this.consts.zoCore.upgradedPackage}::market::swap`,
507
+ typeArguments: [
508
+ `${this.consts.zoCore.package}::zlp::ZLP`,
509
+ this.consts.coins[fromToken].module,
510
+ this.consts.coins[toToken].module,
511
+ ],
512
+ arguments: [
513
+ tx.object(this.consts.zoCore.market),
514
+ tx.object(this.consts.zoCore.rebaseFeeModel),
515
+ fromDepositObject,
516
+ // FIXME: minAmountOut
517
+ tx.pure.u64(0),
518
+ vaultsValuation,
519
+ ],
520
+ });
521
+ return tx;
522
+ };
523
+ this.clearClosedPosition = (pcpId, collateralToken, indexToken, long, tx) => {
524
+ tx.moveCall({
525
+ target: `${this.consts.zoCore.upgradedPackage}::market::clear_closed_position`,
526
+ typeArguments: [
527
+ `${this.consts.zoCore.package}::zlp::ZLP`,
528
+ this.consts.coins[collateralToken].module,
529
+ this.consts.coins[indexToken].module,
530
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
531
+ ],
532
+ arguments: [tx.object(this.consts.zoCore.market), tx.object(pcpId)],
533
+ });
534
+ };
535
+ this.clearOpenPositionOrder = (orderCapId, collateralToken, indexToken, long, tx, isV11Order = false) => {
536
+ const funcName = isV11Order ? 'clear_open_position_order' : 'clear_open_position_order';
537
+ tx.moveCall({
538
+ target: `${this.consts.zoCore.upgradedPackage}::market::${funcName}`,
539
+ typeArguments: [
540
+ `${this.consts.zoCore.package}::zlp::ZLP`,
541
+ this.consts.coins[collateralToken].module,
542
+ this.consts.coins[indexToken].module,
543
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
544
+ this.consts.coins[collateralToken].module,
545
+ ],
546
+ arguments: [tx.object(this.consts.zoCore.market), tx.object(orderCapId)],
547
+ });
548
+ };
549
+ this.clearDecreasePositionOrder = (orderCapId, collateralToken, indexToken, long, tx, isV11Order = false) => {
550
+ const funcName = isV11Order ? 'clear_decrease_position_order' : 'clear_decrease_position_order';
551
+ tx.moveCall({
552
+ target: `${this.consts.zoCore.upgradedPackage}::market::${funcName}`,
553
+ typeArguments: [
554
+ `${this.consts.zoCore.package}::zlp::ZLP`,
555
+ this.consts.coins[collateralToken].module,
556
+ this.consts.coins[indexToken].module,
557
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
558
+ this.consts.coins[collateralToken].module,
559
+ ],
560
+ arguments: [tx.object(this.consts.zoCore.market), tx.object(orderCapId)],
561
+ });
562
+ };
563
+ this.stake = (coinObjects, amount, pool, tx) => {
564
+ if (!tx) {
565
+ tx = new transactions_1.Transaction();
566
+ }
567
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, 'zlp', coinObjects);
568
+ const [depositObject] = tx.splitCoins(coinObject, [tx.pure.u64(amount)]);
569
+ tx.moveCall({
570
+ target: `${this.consts.zoStaking.package}::pool::deposit`,
571
+ typeArguments: [`${this.consts.zoCore.package}::zlp::ZLP`, this.consts.coins.sui.module],
572
+ arguments: [tx.object(pool), tx.object(utils_1.SUI_CLOCK_OBJECT_ID), depositObject],
573
+ });
574
+ return tx;
575
+ };
576
+ this.unstake = (credentials, amount, pool, tx) => {
577
+ if (!tx) {
578
+ tx = new transactions_1.Transaction();
579
+ }
580
+ for (const credential of credentials) {
581
+ // eslint-disable-next-line unicorn/prefer-math-min-max
582
+ const withdrawAmount = amount < credential.amount ? amount : credential.amount;
583
+ amount -= withdrawAmount;
584
+ tx.moveCall({
585
+ target: `0xdb353cb79a88d5ee83b7c0ca0249662a1facab17ba62879080ea3d61b9d21112::pool::withdraw`,
586
+ typeArguments: [`${this.consts.zoCore.package}::zlp::ZLP`, this.consts.coins.sui.module],
587
+ arguments: [
588
+ tx.object(pool),
589
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
590
+ tx.object(credential.id),
591
+ tx.pure.u64(withdrawAmount),
592
+ ],
593
+ });
594
+ if (credential.amount === BigInt(0)) {
595
+ tx.moveCall({
596
+ target: `${this.consts.zoStaking.package}::pool::clear_empty_credential`,
597
+ typeArguments: [`${this.consts.zoCore.package}::zlp::ZLP`, this.consts.coins.sui.module],
598
+ arguments: [tx.object(credential.id)],
599
+ });
600
+ }
601
+ }
602
+ return tx;
603
+ };
604
+ this.addReferral = (referrer, tx) => {
605
+ if (!tx) {
606
+ tx = new transactions_1.Transaction();
607
+ }
608
+ tx.moveCall({
609
+ target: `${this.consts.zoCore.upgradedPackage}::market::add_new_referral`,
610
+ typeArguments: [`${this.consts.zoCore.package}::zlp::ZLP`],
611
+ arguments: [tx.object(this.consts.zoCore.market), tx.object(referrer)],
612
+ });
613
+ return tx;
614
+ };
615
+ // admin methods
616
+ this.adminUpdatePriceFeed = async (collateralToken, indexToken) => {
617
+ const tx = await this.initOracleTxb([collateralToken, indexToken]);
618
+ return tx;
619
+ };
620
+ this.adminSettlePosition = (positionId, owner, collateralToken, indexToken, long) => {
621
+ const tx = new transactions_1.Transaction();
622
+ tx.moveCall({
623
+ target: `${this.consts.zoCore.upgradedPackage}::market::force_settle_position`,
624
+ typeArguments: [
625
+ `${this.consts.zoCore.package}::zlp::ZLP`,
626
+ this.consts.coins[collateralToken].module,
627
+ this.consts.coins[indexToken].module,
628
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
629
+ ],
630
+ arguments: [
631
+ tx.object(this.consts.zoCore.adminCap),
632
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
633
+ tx.object(this.consts.zoCore.market),
634
+ tx.object(owner),
635
+ tx.object(positionId),
636
+ ],
637
+ });
638
+ this.adminClearClosedPosition(positionId, owner, collateralToken, indexToken, long, tx);
639
+ return tx;
640
+ };
641
+ this.adminDecreasePosition = (positionId, owner, collateralToken, indexToken, positionAmount, amount, long) => {
642
+ const tx = new transactions_1.Transaction();
643
+ const symbol = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
644
+ tx.moveCall({
645
+ target: `${this.consts.zoCore.upgradedPackage}::market::force_close_position`,
646
+ typeArguments: [
647
+ `${this.consts.zoCore.package}::zlp::ZLP`,
648
+ this.consts.coins[collateralToken].module,
649
+ this.consts.coins[indexToken].module,
650
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
651
+ ],
652
+ arguments: [
653
+ tx.object(this.consts.zoCore.adminCap),
654
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
655
+ tx.object(this.consts.zoCore.market),
656
+ tx.object(this.consts.zoCore.vaults[collateralToken].reservingFeeModel),
657
+ tx.object(this.consts.zoCore.symbols[symbol].fundingFeeModel),
658
+ tx.object(this.consts.pythFeeder.feeder[collateralToken]),
659
+ tx.object(this.consts.pythFeeder.feeder[indexToken]),
660
+ tx.object(owner),
661
+ tx.object(positionId),
662
+ ],
663
+ });
664
+ if (amount === BigInt(positionAmount)) {
665
+ this.adminClearClosedPosition(positionId, owner, collateralToken, indexToken, long, tx);
666
+ }
667
+ return tx;
668
+ };
669
+ this.adminClearClosedPosition = (positionId, owner, collateralToken, indexToken, long, tx) => {
670
+ tx.moveCall({
671
+ target: `${this.consts.zoCore.upgradedPackage}::market::force_clear_closed_position`,
672
+ typeArguments: [
673
+ `${this.consts.zoCore.package}::zlp::ZLP`,
674
+ this.consts.coins[collateralToken].module,
675
+ this.consts.coins[indexToken].module,
676
+ `${this.consts.zoCore.package}::market::${long ? 'LONG' : 'SHORT'}`,
677
+ ],
678
+ arguments: [
679
+ tx.object(this.consts.zoCore.adminCap),
680
+ tx.object(this.consts.zoCore.market),
681
+ tx.object(positionId),
682
+ tx.object(owner),
683
+ ],
684
+ });
685
+ };
686
+ // ZO Lootbox
687
+ this.adminIssueLootbox = (coin, tiers, beneficiaries, amounts, tx) => {
688
+ let module = `${this.consts.zoCore.package}::zlp::ZLP`;
689
+ if (coin !== 'zlp') {
690
+ module = this.consts.coins[coin].module;
691
+ }
692
+ for (const [i, beneficiary] of beneficiaries.entries()) {
693
+ tx.moveCall({
694
+ target: `${this.consts.zoLootbox.package}::lootbox::admin_issue_lootbox`,
695
+ typeArguments: [module],
696
+ arguments: [
697
+ tx.object(this.consts.zoLootbox.adminCap),
698
+ tx.pure.u8(tiers[i]),
699
+ tx.pure.address(beneficiary),
700
+ tx.pure.u64(amounts[i]),
701
+ tx.pure.bool(amounts[i] > 0),
702
+ tx.object(`${this.consts.zoLootbox.lootboxSettings}`),
703
+ ],
704
+ });
705
+ }
706
+ };
707
+ this.depositToPrizePool = (coin, coinObjects, amount) => {
708
+ const tx = new transactions_1.Transaction();
709
+ const coinObject = __classPrivateFieldGet(this, _API_processCoins, "f").call(this, tx, coin, coinObjects);
710
+ const [depositObject] = tx.splitCoins(coinObject, [tx.pure.u64(amount)]);
711
+ let module = `${this.consts.zoCore.package}::zlp::ZLP`;
712
+ if (coin !== 'zlp') {
713
+ module = this.consts.coins[coin].module;
714
+ }
715
+ tx.moveCall({
716
+ target: `${this.consts.zoLootbox.package}::lootbox::deposit`,
717
+ typeArguments: [module],
718
+ arguments: [
719
+ tx.object(this.consts.zoLootbox.adminCap),
720
+ tx.object(this.consts.zoLootbox.lootboxTreasury),
721
+ depositObject,
722
+ ],
723
+ });
724
+ return tx;
725
+ };
726
+ this.withdrawFromPricePool = (coin, amount) => {
727
+ const tx = new transactions_1.Transaction();
728
+ let module = `${this.consts.zoCore.package}::zlp::ZLP`;
729
+ let metadata = this.consts.zoCore.zlpMetadata;
730
+ if (coin !== 'zlp') {
731
+ module = this.consts.coins[coin].module;
732
+ metadata = this.consts.coins[coin].metadata;
733
+ }
734
+ tx.moveCall({
735
+ target: `${this.consts.zoLootbox.package}::lootbox::withdraw`,
736
+ typeArguments: [module],
737
+ arguments: [
738
+ tx.object(this.consts.zoLootbox.adminCap),
739
+ tx.object(this.consts.zoLootbox.lootboxTreasury),
740
+ tx.object(metadata),
741
+ tx.pure.u64(amount),
742
+ ],
743
+ });
744
+ return tx;
745
+ };
746
+ this.openLootbox = (coin, lootbox) => {
747
+ const tx = new transactions_1.Transaction();
748
+ let module = `${this.consts.zoCore.package}::zlp::ZLP`;
749
+ let metadata = this.consts.zoCore.zlpMetadata;
750
+ if (coin !== 'zlp') {
751
+ module = this.consts.coins[coin].module;
752
+ metadata = this.consts.coins[coin].metadata;
753
+ }
754
+ tx.moveCall({
755
+ target: `${this.consts.zoLootbox.package}::lootbox::open_lootbox`,
756
+ typeArguments: [module],
757
+ arguments: [
758
+ tx.object(`${this.consts.zoLootbox.lootboxTreasury}`),
759
+ tx.object(lootbox),
760
+ tx.object(metadata),
761
+ tx.object(`${this.consts.zoLootbox.lootboxSettings}`),
762
+ ],
763
+ });
764
+ return tx;
765
+ };
766
+ }
767
+ static getInstance(network, provider, apiEndpoint, connectionURL) {
768
+ if (!API.instance) {
769
+ API.instance = new API(network, provider, apiEndpoint, connectionURL);
770
+ }
771
+ return API.instance;
772
+ }
773
+ }
774
+ exports.API = API;
775
+ _API_processCoins = new WeakMap(), _API_instances = new WeakSet(), _API_processSlippage = function _API_processSlippage(indexPrice, long, slippage) {
776
+ const raw = long ? indexPrice * (1 + slippage) : indexPrice * (1 - slippage);
777
+ return BigInt(Math.round(raw * 1e18));
778
+ };
779
+ //# sourceMappingURL=api.cjs.map