@waterx/sdk 2.1.0 → 2.3.1-dev.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 (231) hide show
  1. package/README.md +75 -169
  2. package/dist/src/client.d.ts +52 -2
  3. package/dist/src/client.js +76 -6
  4. package/dist/src/config.d.ts +57 -3
  5. package/dist/src/config.js +10 -4
  6. package/dist/src/constants.d.ts +6 -0
  7. package/dist/src/constants.js +6 -0
  8. package/dist/src/core/waterx-account.d.ts +31 -0
  9. package/dist/src/core/waterx-account.js +26 -0
  10. package/dist/src/fetch.d.ts +110 -0
  11. package/dist/src/fetch.js +149 -4
  12. package/dist/src/generated/bucket_v2_framework/account.d.ts +5 -5
  13. package/dist/src/generated/bucket_v2_framework/double.d.ts +77 -77
  14. package/dist/src/generated/bucket_v2_framework/float.d.ts +73 -73
  15. package/dist/src/generated/bucket_v2_framework/liability.d.ts +33 -33
  16. package/dist/src/generated/bucket_v2_framework/linked_table.d.ts +5 -5
  17. package/dist/src/generated/bucket_v2_framework/linked_table.js +2 -2
  18. package/dist/src/generated/bucket_v2_framework/sheet.d.ts +57 -57
  19. package/dist/src/generated/bucket_v2_framework/sheet.js +5 -11
  20. package/dist/src/generated/native_custody/custody_vault.d.ts +46 -32
  21. package/dist/src/generated/native_custody/custody_vault.js +19 -10
  22. package/dist/src/generated/native_custody/deps/bucket_v2_framework/sheet.js +1 -3
  23. package/dist/src/generated/native_custody/events.js +1 -2
  24. package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.d.ts +7 -7
  25. package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.js +1 -2
  26. package/dist/src/generated/utils/index.d.ts +7 -7
  27. package/dist/src/generated/utils/index.js +9 -6
  28. package/dist/src/generated/waterx_account/account.d.ts +124 -71
  29. package/dist/src/generated/waterx_account/account.js +64 -29
  30. package/dist/src/generated/waterx_account/deps/bucket_v2_framework/sheet.js +1 -3
  31. package/dist/src/generated/waterx_account/direct_rule.d.ts +5 -5
  32. package/dist/src/generated/waterx_account/events.d.ts +10 -0
  33. package/dist/src/generated/waterx_account/events.js +31 -50
  34. package/dist/src/generated/waterx_constant_rule/constant_rule.d.ts +68 -0
  35. package/dist/src/generated/waterx_constant_rule/constant_rule.js +59 -0
  36. package/dist/src/generated/waterx_constant_rule/deps/bucket_v2_framework/float.d.ts +8 -0
  37. package/dist/src/generated/waterx_constant_rule/deps/bucket_v2_framework/float.js +10 -0
  38. package/dist/src/generated/waterx_constant_rule/deps/sui/vec_map.d.ts +36 -0
  39. package/dist/src/generated/waterx_constant_rule/deps/sui/vec_map.js +27 -0
  40. package/dist/src/generated/waterx_credit/credit_registry.d.ts +9 -9
  41. package/dist/src/generated/waterx_credit/credit_registry.js +1 -2
  42. package/dist/src/generated/waterx_credit/limited_supply.d.ts +17 -17
  43. package/dist/src/generated/waterx_oracle/aggregator.js +1 -2
  44. package/dist/src/generated/waterx_oracle/collector.d.ts +17 -17
  45. package/dist/src/generated/waterx_oracle/collector.js +1 -1
  46. package/dist/src/generated/waterx_oracle/oracle.d.ts +5 -5
  47. package/dist/src/generated/waterx_perp/account_data.d.ts +5 -5
  48. package/dist/src/generated/waterx_perp/account_data.js +1 -2
  49. package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/sheet.js +1 -3
  50. package/dist/src/generated/waterx_perp/events.d.ts +181 -181
  51. package/dist/src/generated/waterx_perp/events.js +87 -173
  52. package/dist/src/generated/waterx_perp/global_config.d.ts +3 -3
  53. package/dist/src/generated/waterx_perp/global_config.js +6 -12
  54. package/dist/src/generated/waterx_perp/keyed_big_vector.d.ts +9 -9
  55. package/dist/src/generated/waterx_perp/keyed_big_vector.js +1 -2
  56. package/dist/src/generated/waterx_perp/lp_pool.d.ts +115 -115
  57. package/dist/src/generated/waterx_perp/lp_pool.js +11 -22
  58. package/dist/src/generated/waterx_perp/market_config.d.ts +61 -43
  59. package/dist/src/generated/waterx_perp/market_config.js +29 -22
  60. package/dist/src/generated/waterx_perp/math.d.ts +7 -7
  61. package/dist/src/generated/waterx_perp/order_book.d.ts +47 -47
  62. package/dist/src/generated/waterx_perp/position.d.ts +99 -99
  63. package/dist/src/generated/waterx_perp/position.js +6 -12
  64. package/dist/src/generated/waterx_perp/request.d.ts +67 -67
  65. package/dist/src/generated/waterx_perp/request.js +2 -3
  66. package/dist/src/generated/waterx_perp/response.d.ts +35 -35
  67. package/dist/src/generated/waterx_perp/response.js +1 -2
  68. package/dist/src/generated/waterx_perp/trading.d.ts +303 -179
  69. package/dist/src/generated/waterx_perp/trading.js +99 -14
  70. package/dist/src/generated/waterx_perp_view/view.js +5 -10
  71. package/dist/src/generated/waterx_pyth_rule/pyth_rule.d.ts +5 -5
  72. package/dist/src/generated/waterx_pyth_rule/pyth_rule.js +1 -2
  73. package/dist/src/generated/waterx_referral/referral_table.d.ts +5 -5
  74. package/dist/src/generated/waterx_referral/referral_table.js +1 -2
  75. package/dist/src/generated/waterx_staking/waterx_staking.d.ts +19 -19
  76. package/dist/src/generated/waterx_staking/waterx_staking.js +10 -20
  77. package/dist/src/generated/waterx_supra_rule/deps/sui/vec_map.d.ts +36 -0
  78. package/dist/src/generated/waterx_supra_rule/deps/sui/vec_map.js +27 -0
  79. package/dist/src/generated/waterx_supra_rule/supra_rule.d.ts +158 -0
  80. package/dist/src/generated/waterx_supra_rule/supra_rule.js +148 -0
  81. package/dist/src/generated/withdrawal_queue/deps/bucket_v2_framework/float.d.ts +8 -0
  82. package/dist/src/generated/withdrawal_queue/deps/bucket_v2_framework/float.js +10 -0
  83. package/dist/src/generated/withdrawal_queue/deps/sui/vec_map.d.ts +36 -0
  84. package/dist/src/generated/withdrawal_queue/deps/sui/vec_map.js +27 -0
  85. package/dist/src/generated/withdrawal_queue/withdrawal_queue.d.ts +444 -4
  86. package/dist/src/generated/withdrawal_queue/withdrawal_queue.js +417 -4
  87. package/dist/src/generated/wormhole_bridge/wormhole_bridge.d.ts +214 -74
  88. package/dist/src/generated/wormhole_bridge/wormhole_bridge.js +158 -29
  89. package/dist/src/index.d.ts +4 -3
  90. package/dist/src/index.js +3 -2
  91. package/dist/src/prediction/account.d.ts +96 -0
  92. package/dist/src/prediction/account.js +230 -0
  93. package/dist/src/prediction/admin.d.ts +47 -0
  94. package/dist/src/prediction/admin.js +105 -0
  95. package/dist/src/prediction/bcs.d.ts +22 -0
  96. package/dist/src/prediction/bcs.js +240 -0
  97. package/dist/src/prediction/client.d.ts +75 -0
  98. package/dist/src/prediction/client.js +164 -0
  99. package/dist/src/prediction/config.d.ts +60 -0
  100. package/dist/src/prediction/config.js +75 -0
  101. package/dist/src/prediction/constants.d.ts +44 -0
  102. package/dist/src/prediction/constants.js +46 -0
  103. package/dist/src/prediction/fetch.d.ts +82 -0
  104. package/dist/src/prediction/fetch.js +270 -0
  105. package/dist/src/prediction/generated/bucket_v2_framework/account.d.ts +100 -0
  106. package/dist/src/prediction/generated/bucket_v2_framework/account.js +129 -0
  107. package/dist/src/prediction/generated/bucket_v2_framework/deps/std/type_name.d.ts +6 -0
  108. package/dist/src/prediction/generated/bucket_v2_framework/deps/std/type_name.js +19 -0
  109. package/dist/src/prediction/generated/bucket_v2_framework/deps/sui/balance.d.ts +10 -0
  110. package/dist/src/prediction/generated/bucket_v2_framework/deps/sui/balance.js +14 -0
  111. package/dist/src/prediction/generated/bucket_v2_framework/deps/sui/vec_map.d.ts +36 -0
  112. package/dist/src/prediction/generated/bucket_v2_framework/deps/sui/vec_map.js +27 -0
  113. package/dist/src/prediction/generated/bucket_v2_framework/deps/sui/vec_set.d.ts +16 -0
  114. package/dist/src/prediction/generated/bucket_v2_framework/deps/sui/vec_set.js +19 -0
  115. package/dist/src/prediction/generated/bucket_v2_framework/double.d.ts +382 -0
  116. package/dist/src/prediction/generated/bucket_v2_framework/double.js +466 -0
  117. package/dist/src/prediction/generated/bucket_v2_framework/float.d.ts +362 -0
  118. package/dist/src/prediction/generated/bucket_v2_framework/float.js +440 -0
  119. package/dist/src/prediction/generated/bucket_v2_framework/liability.d.ts +193 -0
  120. package/dist/src/prediction/generated/bucket_v2_framework/liability.js +205 -0
  121. package/dist/src/prediction/generated/bucket_v2_framework/linked_table.d.ts +384 -0
  122. package/dist/src/prediction/generated/bucket_v2_framework/linked_table.js +382 -0
  123. package/dist/src/prediction/generated/bucket_v2_framework/sheet.d.ts +344 -0
  124. package/dist/src/prediction/generated/bucket_v2_framework/sheet.js +338 -0
  125. package/dist/src/prediction/generated/utils/index.d.ts +30 -0
  126. package/dist/src/prediction/generated/utils/index.js +160 -0
  127. package/dist/src/prediction/generated/waterx_account/account.d.ts +1589 -0
  128. package/dist/src/prediction/generated/waterx_account/account.js +1758 -0
  129. package/dist/src/prediction/generated/waterx_account/deps/bucket_v2_framework/liability.d.ts +7 -0
  130. package/dist/src/prediction/generated/waterx_account/deps/bucket_v2_framework/liability.js +13 -0
  131. package/dist/src/prediction/generated/waterx_account/deps/bucket_v2_framework/sheet.d.ts +7 -0
  132. package/dist/src/prediction/generated/waterx_account/deps/bucket_v2_framework/sheet.js +16 -0
  133. package/dist/src/prediction/generated/waterx_account/deps/std/type_name.d.ts +6 -0
  134. package/dist/src/prediction/generated/waterx_account/deps/std/type_name.js +19 -0
  135. package/dist/src/prediction/generated/waterx_account/deps/sui/balance.d.ts +10 -0
  136. package/dist/src/prediction/generated/waterx_account/deps/sui/balance.js +14 -0
  137. package/dist/src/prediction/generated/waterx_account/deps/sui/object_table.d.ts +12 -0
  138. package/dist/src/prediction/generated/waterx_account/deps/sui/object_table.js +19 -0
  139. package/dist/src/prediction/generated/waterx_account/deps/sui/table.d.ts +24 -0
  140. package/dist/src/prediction/generated/waterx_account/deps/sui/table.js +31 -0
  141. package/dist/src/prediction/generated/waterx_account/deps/sui/vec_map.d.ts +36 -0
  142. package/dist/src/prediction/generated/waterx_account/deps/sui/vec_map.js +27 -0
  143. package/dist/src/prediction/generated/waterx_account/deps/sui/vec_set.d.ts +16 -0
  144. package/dist/src/prediction/generated/waterx_account/deps/sui/vec_set.js +19 -0
  145. package/dist/src/prediction/generated/waterx_account/direct_rule.d.ts +75 -0
  146. package/dist/src/prediction/generated/waterx_account/direct_rule.js +78 -0
  147. package/dist/src/prediction/generated/waterx_account/events.d.ts +33 -0
  148. package/dist/src/prediction/generated/waterx_account/events.js +137 -0
  149. package/dist/src/prediction/generated/waterx_account/version.d.ts +10 -0
  150. package/dist/src/prediction/generated/waterx_account/version.js +8 -0
  151. package/dist/src/prediction/generated/waterx_prediction/account_data.d.ts +327 -0
  152. package/dist/src/prediction/generated/waterx_prediction/account_data.js +405 -0
  153. package/dist/src/prediction/generated/waterx_prediction/admin.d.ts +5 -0
  154. package/dist/src/prediction/generated/waterx_prediction/admin.js +9 -0
  155. package/dist/src/prediction/generated/waterx_prediction/bet_sharing.d.ts +60 -0
  156. package/dist/src/prediction/generated/waterx_prediction/bet_sharing.js +83 -0
  157. package/dist/src/prediction/generated/waterx_prediction/deps/bucket_v2_framework/linked_table.d.ts +8 -0
  158. package/dist/src/prediction/generated/waterx_prediction/deps/bucket_v2_framework/linked_table.js +18 -0
  159. package/dist/src/prediction/generated/waterx_prediction/deps/sui/balance.d.ts +10 -0
  160. package/dist/src/prediction/generated/waterx_prediction/deps/sui/balance.js +14 -0
  161. package/dist/src/prediction/generated/waterx_prediction/deps/sui/table.d.ts +24 -0
  162. package/dist/src/prediction/generated/waterx_prediction/deps/sui/table.js +31 -0
  163. package/dist/src/prediction/generated/waterx_prediction/deps/sui/vec_set.d.ts +16 -0
  164. package/dist/src/prediction/generated/waterx_prediction/deps/sui/vec_set.js +19 -0
  165. package/dist/src/prediction/generated/waterx_prediction/events.d.ts +22 -0
  166. package/dist/src/prediction/generated/waterx_prediction/events.js +179 -0
  167. package/dist/src/prediction/generated/waterx_prediction/global_config.d.ts +116 -0
  168. package/dist/src/prediction/generated/waterx_prediction/global_config.js +141 -0
  169. package/dist/src/prediction/generated/waterx_prediction/order.d.ts +200 -0
  170. package/dist/src/prediction/generated/waterx_prediction/order.js +284 -0
  171. package/dist/src/prediction/generated/waterx_prediction/outcome.d.ts +58 -0
  172. package/dist/src/prediction/generated/waterx_prediction/outcome.js +73 -0
  173. package/dist/src/prediction/generated/waterx_prediction/position.d.ts +160 -0
  174. package/dist/src/prediction/generated/waterx_prediction/position.js +214 -0
  175. package/dist/src/prediction/generated/waterx_prediction/version.d.ts +10 -0
  176. package/dist/src/prediction/generated/waterx_prediction/version.js +8 -0
  177. package/dist/src/prediction/generated/waterx_prediction/view.d.ts +353 -0
  178. package/dist/src/prediction/generated/waterx_prediction/view.js +432 -0
  179. package/dist/src/prediction/generated/waterx_prediction/waterx_prediction.d.ts +1698 -0
  180. package/dist/src/prediction/generated/waterx_prediction/waterx_prediction.js +1733 -0
  181. package/dist/src/prediction/gift-link.d.ts +6 -0
  182. package/dist/src/prediction/gift-link.js +5 -0
  183. package/dist/src/prediction/gift.d.ts +223 -0
  184. package/dist/src/prediction/gift.js +451 -0
  185. package/dist/src/prediction/index.d.ts +29 -0
  186. package/dist/src/prediction/index.js +21 -0
  187. package/dist/src/prediction/prediction.d.ts +104 -0
  188. package/dist/src/prediction/prediction.js +317 -0
  189. package/dist/src/prediction/tx-builders.d.ts +44 -0
  190. package/dist/src/prediction/tx-builders.js +52 -0
  191. package/dist/src/prediction/types.d.ts +93 -0
  192. package/dist/src/prediction/types.js +1 -0
  193. package/dist/src/prediction/user/account.d.ts +2 -0
  194. package/dist/src/prediction/user/account.js +1 -0
  195. package/dist/src/prediction/user/admin.d.ts +6 -0
  196. package/dist/src/prediction/user/admin.js +3 -0
  197. package/dist/src/prediction/user/gift.d.ts +2 -0
  198. package/dist/src/prediction/user/gift.js +1 -0
  199. package/dist/src/prediction/user/index.d.ts +5 -0
  200. package/dist/src/prediction/user/index.js +3 -0
  201. package/dist/src/prediction/user/keeper.d.ts +2 -0
  202. package/dist/src/prediction/user/keeper.js +1 -0
  203. package/dist/src/prediction/user/order.d.ts +2 -0
  204. package/dist/src/prediction/user/order.js +1 -0
  205. package/dist/src/prediction/user/position.d.ts +2 -0
  206. package/dist/src/prediction/user/position.js +1 -0
  207. package/dist/src/prediction/utils/bcs.d.ts +1 -0
  208. package/dist/src/prediction/utils/bcs.js +1 -0
  209. package/dist/src/prediction/utils/index.d.ts +1 -0
  210. package/dist/src/prediction/utils/index.js +1 -0
  211. package/dist/src/prediction/utils.d.ts +30 -0
  212. package/dist/src/prediction/utils.js +177 -0
  213. package/dist/src/sdk.d.ts +18 -0
  214. package/dist/src/sdk.js +17 -0
  215. package/dist/src/tx-builders.d.ts +54 -0
  216. package/dist/src/tx-builders.js +141 -0
  217. package/dist/src/unified-client.d.ts +407 -0
  218. package/dist/src/unified-client.js +123 -0
  219. package/dist/src/user/account.d.ts +27 -0
  220. package/dist/src/user/account.js +34 -8
  221. package/dist/src/user/credit.d.ts +8 -14
  222. package/dist/src/user/credit.js +9 -23
  223. package/dist/src/user/custody.d.ts +4 -18
  224. package/dist/src/user/custody.js +14 -25
  225. package/dist/src/utils/consolidate-balance.d.ts +37 -0
  226. package/dist/src/utils/consolidate-balance.js +89 -0
  227. package/dist/src/utils/math.d.ts +86 -0
  228. package/dist/src/utils/math.js +100 -0
  229. package/dist/src/utils/pyth.d.ts +35 -3
  230. package/dist/src/utils/pyth.js +145 -14
  231. package/package.json +129 -34
@@ -0,0 +1,230 @@
1
+ import { bcs } from "@mysten/sui/bcs";
2
+ import { Transaction } from "@mysten/sui/transactions";
3
+ import { createAccountCall } from "../core/waterx-account.js";
4
+ import { extractReturnBytes } from "./fetch.js";
5
+ import { clockArg, createAccountRequest, idArg, objectArg, receivingCoinArg, resolveAccountRegistry, resolvePackageId, toBigInt, } from "./utils.js";
6
+ function accountPackage(client, packageId) {
7
+ return packageId ?? client.waterxAccountPackageId();
8
+ }
9
+ /**
10
+ * Resolves the registry `0x2::object::ID` used by `request_deposit` / views from an on-chain
11
+ * `Account` object id (e.g. parsed from transaction effects).
12
+ */
13
+ export async function resolveRegistryAccountId(client, accountObjectId, params = {}) {
14
+ const tx = new Transaction();
15
+ tx.moveCall({
16
+ target: `${accountPackage(client, params.accountPackageId)}::account::account_id`,
17
+ arguments: [tx.object(accountObjectId)],
18
+ });
19
+ const result = await client.simulate(tx);
20
+ return bcs.Address.parse(extractReturnBytes(result));
21
+ }
22
+ export function createAccount(client, tx, params) {
23
+ const senderRequest = createAccountRequest(client, tx, params);
24
+ return createAccountCall(tx, {
25
+ packageId: accountPackage(client, params.accountPackageId),
26
+ registry: resolveAccountRegistry(client, params.accountRegistry),
27
+ }, { senderRequest, alias: params.alias });
28
+ }
29
+ export function transferCoinToAccount(client, tx, params) {
30
+ tx.moveCall({
31
+ target: `${accountPackage(client, params.accountPackageId)}::account::transfer_coin`,
32
+ typeArguments: [params.coinType ?? client.settlementCoinType()],
33
+ arguments: [
34
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
35
+ idArg(tx, params.accountId),
36
+ objectArg(tx, params.coin),
37
+ ],
38
+ });
39
+ return tx;
40
+ }
41
+ export function requestDeposit(client, tx, params) {
42
+ const [request] = tx.moveCall({
43
+ target: `${accountPackage(client, params.accountPackageId)}::account::request_deposit`,
44
+ typeArguments: [params.coinType ?? client.settlementCoinType()],
45
+ arguments: [
46
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
47
+ idArg(tx, params.accountId),
48
+ objectArg(tx, params.coin),
49
+ tx.pure.vector("u8", Array.from(params.extraData ?? [])),
50
+ ],
51
+ });
52
+ return request;
53
+ }
54
+ /** Finishes a `request_deposit` hot potato via `direct_rule` (same-coin credit). */
55
+ export function consumeDepositDirect(client, tx, params) {
56
+ tx.moveCall({
57
+ target: `${accountPackage(client, params.accountPackageId)}::direct_rule::consume_deposit_direct`,
58
+ typeArguments: [params.coinType ?? client.settlementCoinType()],
59
+ arguments: [
60
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
61
+ params.depositRequest,
62
+ ],
63
+ });
64
+ return tx;
65
+ }
66
+ /**
67
+ * Full deposit: `request_deposit` + `consume_deposit_direct` in one PTB.
68
+ * Use this for testnet USD unless you implement a custom deposit policy consume path.
69
+ */
70
+ export function deposit(client, tx, params) {
71
+ const request = requestDeposit(client, tx, params);
72
+ consumeDepositDirect(client, tx, {
73
+ accountPackageId: params.accountPackageId,
74
+ accountRegistry: params.accountRegistry,
75
+ depositRequest: request,
76
+ coinType: params.coinType,
77
+ });
78
+ return tx;
79
+ }
80
+ export function requestDepositFromReceivings(client, tx, params) {
81
+ const coinType = params.coinType ?? client.settlementCoinType();
82
+ const receivings = params.coins.map((coin) => receivingCoinArg(tx, coin));
83
+ const [request] = tx.moveCall({
84
+ target: `${accountPackage(client, params.accountPackageId)}::account::request_deposit_from_receivings`,
85
+ typeArguments: [coinType],
86
+ arguments: [
87
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
88
+ idArg(tx, params.accountId),
89
+ tx.makeMoveVec({
90
+ type: `0x2::transfer::Receiving<0x2::coin::Coin<${coinType}>>`,
91
+ elements: receivings,
92
+ }),
93
+ tx.pure.vector("u8", Array.from(params.extraData ?? [])),
94
+ ],
95
+ });
96
+ return request;
97
+ }
98
+ export function requestWithdraw(client, tx, params) {
99
+ const senderRequest = createAccountRequest(client, tx, params);
100
+ const [request] = tx.moveCall({
101
+ target: `${accountPackage(client, params.accountPackageId)}::account::request_withdraw`,
102
+ typeArguments: [params.coinType ?? client.settlementCoinType()],
103
+ arguments: [
104
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
105
+ senderRequest,
106
+ idArg(tx, params.accountId),
107
+ tx.pure.u64(toBigInt(params.amount)),
108
+ tx.pure.address(params.recipient),
109
+ tx.pure.vector("u8", Array.from(params.extraData ?? [])),
110
+ clockArg(tx),
111
+ ],
112
+ });
113
+ return request;
114
+ }
115
+ /** Finishes a `request_withdraw` hot potato via `direct_rule` (same-coin payout). */
116
+ export function consumeWithdrawDirect(client, tx, params) {
117
+ tx.moveCall({
118
+ target: `${accountPackage(client, params.accountPackageId)}::direct_rule::consume_withdraw_direct`,
119
+ typeArguments: [params.coinType ?? client.settlementCoinType()],
120
+ arguments: [
121
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
122
+ params.withdrawRequest,
123
+ ],
124
+ });
125
+ return tx;
126
+ }
127
+ /**
128
+ * Full withdraw: `request_withdraw` + `consume_withdraw_direct` in one PTB.
129
+ * Use this for testnet USD unless you implement a custom withdraw policy consume path.
130
+ */
131
+ export function withdraw(client, tx, params) {
132
+ const request = requestWithdraw(client, tx, params);
133
+ consumeWithdrawDirect(client, tx, {
134
+ accountPackageId: params.accountPackageId,
135
+ accountRegistry: params.accountRegistry,
136
+ withdrawRequest: request,
137
+ coinType: params.coinType,
138
+ });
139
+ return tx;
140
+ }
141
+ export function addDelegate(client, tx, params) {
142
+ const senderRequest = createAccountRequest(client, tx, params);
143
+ tx.moveCall({
144
+ target: `${accountPackage(client, params.accountPackageId)}::account::add_delegate`,
145
+ arguments: [
146
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
147
+ senderRequest,
148
+ idArg(tx, params.accountId),
149
+ tx.pure.address(params.delegate),
150
+ tx.pure.string(params.alias),
151
+ tx.pure.u32(params.permissions),
152
+ tx.pure.option("u64", params.expiresAtMs == null ? null : toBigInt(params.expiresAtMs)),
153
+ clockArg(tx),
154
+ ],
155
+ });
156
+ return tx;
157
+ }
158
+ export function removeDelegate(client, tx, params) {
159
+ const senderRequest = createAccountRequest(client, tx, params);
160
+ tx.moveCall({
161
+ target: `${accountPackage(client, params.accountPackageId)}::account::remove_delegate`,
162
+ arguments: [
163
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
164
+ senderRequest,
165
+ idArg(tx, params.accountId),
166
+ tx.pure.address(params.delegate),
167
+ clockArg(tx),
168
+ ],
169
+ });
170
+ return tx;
171
+ }
172
+ export function setDelegatePredictionPermission(client, tx, params) {
173
+ const senderRequest = createAccountRequest(client, tx, params);
174
+ tx.moveCall({
175
+ target: `${accountPackage(client, params.accountPackageId)}::account::set_delegate_protocol_permission`,
176
+ typeArguments: [
177
+ `${resolvePackageId(client, params.predictionPackageId)}::account_data::WaterXPrediction`,
178
+ ],
179
+ arguments: [
180
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
181
+ senderRequest,
182
+ idArg(tx, params.accountId),
183
+ tx.pure.address(params.delegate),
184
+ tx.pure.u32(params.permissions),
185
+ clockArg(tx),
186
+ ],
187
+ });
188
+ return tx;
189
+ }
190
+ export function whitelistPredictionProtocol(client, tx, params) {
191
+ tx.moveCall({
192
+ target: `${accountPackage(client, params.accountPackageId)}::account::whitelist_protocol`,
193
+ typeArguments: [
194
+ `${resolvePackageId(client, params.predictionPackageId)}::account_data::WaterXPrediction`,
195
+ ],
196
+ arguments: [
197
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
198
+ objectArg(tx, params.adminCap),
199
+ ],
200
+ });
201
+ return tx;
202
+ }
203
+ export function allowPredictionProtocolAsset(client, tx, params) {
204
+ tx.moveCall({
205
+ target: `${accountPackage(client, params.accountPackageId)}::account::allow_protocol_asset`,
206
+ typeArguments: [
207
+ `${resolvePackageId(client, params.predictionPackageId)}::account_data::WaterXPrediction`,
208
+ params.coinType ?? client.settlementCoinType(),
209
+ ],
210
+ arguments: [
211
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
212
+ objectArg(tx, params.adminCap),
213
+ ],
214
+ });
215
+ return tx;
216
+ }
217
+ export function disallowPredictionProtocolAsset(client, tx, params) {
218
+ tx.moveCall({
219
+ target: `${accountPackage(client, params.accountPackageId)}::account::disallow_protocol_asset`,
220
+ typeArguments: [
221
+ `${resolvePackageId(client, params.predictionPackageId)}::account_data::WaterXPrediction`,
222
+ params.coinType ?? client.settlementCoinType(),
223
+ ],
224
+ arguments: [
225
+ tx.object(resolveAccountRegistry(client, params.accountRegistry)),
226
+ objectArg(tx, params.adminCap),
227
+ ],
228
+ });
229
+ return tx;
230
+ }
@@ -0,0 +1,47 @@
1
+ import { Transaction } from "@mysten/sui/transactions";
2
+ import type { PredictClient } from "./client.ts";
3
+ import type { MarketIdInput, ObjectArgument } from "./types.ts";
4
+ export interface AdminBaseParams {
5
+ packageId?: string;
6
+ marketRegistry?: string;
7
+ settlementCoinType?: string;
8
+ }
9
+ export interface CreateMarketRegistryParams extends AdminBaseParams {
10
+ adminCap: ObjectArgument;
11
+ }
12
+ export declare function createMarketRegistry(client: PredictClient, tx: Transaction, params: CreateMarketRegistryParams): Transaction;
13
+ export interface DepositSettlementParams extends AdminBaseParams {
14
+ adminCap: ObjectArgument;
15
+ payment: ObjectArgument;
16
+ }
17
+ export declare function depositSettlement(client: PredictClient, tx: Transaction, params: DepositSettlementParams): Transaction;
18
+ export interface AdminWithdrawParams extends AdminBaseParams {
19
+ adminCap: ObjectArgument;
20
+ amount: bigint | number | string;
21
+ recipient: string;
22
+ }
23
+ export declare function adminWithdraw(client: PredictClient, tx: Transaction, params: AdminWithdrawParams): Transaction;
24
+ export interface SetMinReserveParams extends AdminBaseParams {
25
+ adminCap: ObjectArgument;
26
+ newReserve: bigint | number | string;
27
+ }
28
+ export declare function setMinReserve(client: PredictClient, tx: Transaction, params: SetMinReserveParams): Transaction;
29
+ export interface SetOrderCancelCooldownParams extends AdminBaseParams {
30
+ adminCap: ObjectArgument;
31
+ cooldownMs: bigint | number | string;
32
+ }
33
+ export declare function setOrderCancelCooldownMs(client: PredictClient, tx: Transaction, params: SetOrderCancelCooldownParams): Transaction;
34
+ export interface MarketPauseParams extends AdminBaseParams {
35
+ adminCap: ObjectArgument;
36
+ marketId: MarketIdInput;
37
+ }
38
+ export declare function pauseMarket(client: PredictClient, tx: Transaction, params: MarketPauseParams): Transaction;
39
+ export declare function unpauseMarket(client: PredictClient, tx: Transaction, params: MarketPauseParams): Transaction;
40
+ export interface KeeperAdminParams {
41
+ packageId?: string;
42
+ globalConfig?: string;
43
+ adminCap: ObjectArgument;
44
+ keeper: string;
45
+ }
46
+ export declare function addKeeper(client: PredictClient, tx: Transaction, params: KeeperAdminParams): Transaction;
47
+ export declare function removeKeeper(client: PredictClient, tx: Transaction, params: KeeperAdminParams): Transaction;
@@ -0,0 +1,105 @@
1
+ import { clockArg, marketIdArg, objectArg, resolveGlobalConfig, resolveMarketRegistry, resolvePackageId, resolveSettlementCoinType, toBigInt, } from "./utils.js";
2
+ export function createMarketRegistry(client, tx, params) {
3
+ tx.moveCall({
4
+ target: `${resolvePackageId(client, params.packageId)}::waterx_prediction::create_market_registry`,
5
+ typeArguments: [resolveSettlementCoinType(client, params.settlementCoinType)],
6
+ arguments: [objectArg(tx, params.adminCap)],
7
+ });
8
+ return tx;
9
+ }
10
+ export function depositSettlement(client, tx, params) {
11
+ tx.moveCall({
12
+ target: `${resolvePackageId(client, params.packageId)}::waterx_prediction::deposit_settlement`,
13
+ typeArguments: [resolveSettlementCoinType(client, params.settlementCoinType)],
14
+ arguments: [
15
+ objectArg(tx, params.adminCap),
16
+ tx.object(resolveMarketRegistry(client, params.marketRegistry)),
17
+ objectArg(tx, params.payment),
18
+ ],
19
+ });
20
+ return tx;
21
+ }
22
+ export function adminWithdraw(client, tx, params) {
23
+ tx.moveCall({
24
+ target: `${resolvePackageId(client, params.packageId)}::waterx_prediction::admin_withdraw`,
25
+ typeArguments: [resolveSettlementCoinType(client, params.settlementCoinType)],
26
+ arguments: [
27
+ objectArg(tx, params.adminCap),
28
+ tx.object(resolveMarketRegistry(client, params.marketRegistry)),
29
+ tx.pure.u64(toBigInt(params.amount)),
30
+ tx.pure.address(params.recipient),
31
+ ],
32
+ });
33
+ return tx;
34
+ }
35
+ export function setMinReserve(client, tx, params) {
36
+ tx.moveCall({
37
+ target: `${resolvePackageId(client, params.packageId)}::waterx_prediction::set_min_reserve`,
38
+ typeArguments: [resolveSettlementCoinType(client, params.settlementCoinType)],
39
+ arguments: [
40
+ objectArg(tx, params.adminCap),
41
+ tx.object(resolveMarketRegistry(client, params.marketRegistry)),
42
+ tx.pure.u64(toBigInt(params.newReserve)),
43
+ ],
44
+ });
45
+ return tx;
46
+ }
47
+ export function setOrderCancelCooldownMs(client, tx, params) {
48
+ tx.moveCall({
49
+ target: `${resolvePackageId(client, params.packageId)}::waterx_prediction::set_order_cancel_cooldown_ms`,
50
+ typeArguments: [resolveSettlementCoinType(client, params.settlementCoinType)],
51
+ arguments: [
52
+ objectArg(tx, params.adminCap),
53
+ tx.object(resolveMarketRegistry(client, params.marketRegistry)),
54
+ tx.pure.u64(toBigInt(params.cooldownMs)),
55
+ ],
56
+ });
57
+ return tx;
58
+ }
59
+ export function pauseMarket(client, tx, params) {
60
+ tx.moveCall({
61
+ target: `${resolvePackageId(client, params.packageId)}::waterx_prediction::pause_market`,
62
+ typeArguments: [resolveSettlementCoinType(client, params.settlementCoinType)],
63
+ arguments: [
64
+ objectArg(tx, params.adminCap),
65
+ tx.object(resolveMarketRegistry(client, params.marketRegistry)),
66
+ marketIdArg(tx, params.marketId),
67
+ clockArg(tx),
68
+ ],
69
+ });
70
+ return tx;
71
+ }
72
+ export function unpauseMarket(client, tx, params) {
73
+ tx.moveCall({
74
+ target: `${resolvePackageId(client, params.packageId)}::waterx_prediction::unpause_market`,
75
+ typeArguments: [resolveSettlementCoinType(client, params.settlementCoinType)],
76
+ arguments: [
77
+ objectArg(tx, params.adminCap),
78
+ tx.object(resolveMarketRegistry(client, params.marketRegistry)),
79
+ marketIdArg(tx, params.marketId),
80
+ ],
81
+ });
82
+ return tx;
83
+ }
84
+ export function addKeeper(client, tx, params) {
85
+ tx.moveCall({
86
+ target: `${resolvePackageId(client, params.packageId)}::global_config::add_keeper`,
87
+ arguments: [
88
+ tx.object(resolveGlobalConfig(client, params.globalConfig)),
89
+ objectArg(tx, params.adminCap),
90
+ tx.pure.address(params.keeper),
91
+ ],
92
+ });
93
+ return tx;
94
+ }
95
+ export function removeKeeper(client, tx, params) {
96
+ tx.moveCall({
97
+ target: `${resolvePackageId(client, params.packageId)}::global_config::remove_keeper`,
98
+ arguments: [
99
+ tx.object(resolveGlobalConfig(client, params.globalConfig)),
100
+ objectArg(tx, params.adminCap),
101
+ tx.pure.address(params.keeper),
102
+ ],
103
+ });
104
+ return tx;
105
+ }
@@ -0,0 +1,22 @@
1
+ import type { AccountDataView, CursorView, MarketExposure, MarketView, OrderKind, OrderView, Outcome, PositionStatus, PositionView, RegistryView, Selection } from "./types.ts";
2
+ export declare const OrderKindBcs: any;
3
+ export declare const SelectionBcs: any;
4
+ export declare const StatusBcs: any;
5
+ export declare const OutcomeBcs: any;
6
+ export declare const RegistryViewBcs: any;
7
+ export declare const OrderViewBcs: any;
8
+ export declare const PositionViewBcs: any;
9
+ export declare const MarketViewBcs: any;
10
+ export declare const AccountDataViewBcs: any;
11
+ export declare function decodeEnumVariant(raw: unknown): string;
12
+ export declare function mapSelection(raw: unknown): Selection;
13
+ export declare function mapOutcome(raw: unknown): Outcome;
14
+ export declare function mapOrderKind(raw: unknown): OrderKind;
15
+ export declare function mapStatus(raw: unknown): PositionStatus;
16
+ export declare function mapRegistryView(raw: any): RegistryView;
17
+ export declare function mapOrderView(raw: any): OrderView;
18
+ export declare function mapPositionView(raw: any): PositionView;
19
+ export declare function mapMarketView(raw: any): MarketView;
20
+ export declare function mapMarketExposure(yesShares: unknown, yesCost: unknown, noShares: unknown, noCost: unknown): MarketExposure;
21
+ export declare function mapAccountDataView(raw: any): AccountDataView;
22
+ export declare function mapCursorView(count: unknown, front: unknown, back: unknown): CursorView;
@@ -0,0 +1,240 @@
1
+ import { bcs } from "@mysten/sui/bcs";
2
+ import { bytesToHex, marketIdBytesFromUnknown } from "./utils.js";
3
+ export const OrderKindBcs = bcs.enum("OrderKind", {
4
+ Open: null,
5
+ Close: null,
6
+ });
7
+ export const SelectionBcs = bcs.enum("Selection", {
8
+ No: null,
9
+ Yes: null,
10
+ });
11
+ export const StatusBcs = bcs.enum("Status", {
12
+ Open: null,
13
+ PendingClose: null,
14
+ });
15
+ export const OutcomeBcs = bcs.enum("Outcome", {
16
+ No: null,
17
+ Yes: null,
18
+ Invalid: null,
19
+ });
20
+ export const RegistryViewBcs = bcs.struct("RegistryView", {
21
+ balance: bcs.u64(),
22
+ min_reserve: bcs.u64(),
23
+ order_cancel_cooldown_ms: bcs.u64(),
24
+ next_order_id: bcs.u64(),
25
+ order_count: bcs.u64(),
26
+ position_count: bcs.u64(),
27
+ unresolved_market_count: bcs.u64(),
28
+ resolved_market_count: bcs.u64(),
29
+ });
30
+ export const OrderViewBcs = bcs.struct("OrderView", {
31
+ order_id: bcs.u64(),
32
+ kind: OrderKindBcs,
33
+ account_id: bcs.Address,
34
+ market_id: bcs.vector(bcs.u8()),
35
+ selection: SelectionBcs,
36
+ position_id: bcs.option(bcs.u64()),
37
+ max_spend: bcs.u64(),
38
+ min_shares: bcs.u64(),
39
+ price_cap: bcs.u64(),
40
+ min_proceeds: bcs.u64(),
41
+ expiry_ts: bcs.u64(),
42
+ self_cancel_after_ts: bcs.u64(),
43
+ created_ts: bcs.u64(),
44
+ by_admin: bcs.bool(),
45
+ });
46
+ export const PositionViewBcs = bcs.struct("PositionView", {
47
+ position_id: bcs.u64(),
48
+ account_id: bcs.Address,
49
+ market_id: bcs.vector(bcs.u8()),
50
+ selection: SelectionBcs,
51
+ status: StatusBcs,
52
+ filled_shares: bcs.u64(),
53
+ filled_cost: bcs.u64(),
54
+ opened_ts: bcs.u64(),
55
+ payout: bcs.u64(),
56
+ close_order_id: bcs.option(bcs.u64()),
57
+ close_min_proceeds: bcs.u64(),
58
+ close_expiry_ts: bcs.u64(),
59
+ close_self_cancel_after_ts: bcs.u64(),
60
+ });
61
+ export const MarketViewBcs = bcs.struct("MarketView", {
62
+ market_key: bcs.u64(),
63
+ market_id: bcs.vector(bcs.u8()),
64
+ resolved: bcs.bool(),
65
+ paused: bcs.bool(),
66
+ outcome: bcs.option(OutcomeBcs),
67
+ unclaimed_count: bcs.u64(),
68
+ yes_shares: bcs.u64(),
69
+ yes_cost: bcs.u64(),
70
+ no_shares: bcs.u64(),
71
+ no_cost: bcs.u64(),
72
+ });
73
+ export const AccountDataViewBcs = bcs.struct("AccountDataView", {
74
+ account_id: bcs.Address,
75
+ has_data: bcs.bool(),
76
+ order_count: bcs.u64(),
77
+ position_count: bcs.u64(),
78
+ order_front: bcs.option(bcs.u64()),
79
+ order_back: bcs.option(bcs.u64()),
80
+ position_front: bcs.option(bcs.u64()),
81
+ position_back: bcs.option(bcs.u64()),
82
+ });
83
+ export function decodeEnumVariant(raw) {
84
+ if (typeof raw === "string")
85
+ return raw;
86
+ if (raw && typeof raw === "object") {
87
+ const record = raw;
88
+ if (typeof record.$kind === "string")
89
+ return record.$kind;
90
+ const variant = record["@variant"];
91
+ if (typeof variant === "string")
92
+ return variant;
93
+ if (variant && typeof variant === "object") {
94
+ const innerKey = Object.keys(variant)[0];
95
+ if (innerKey)
96
+ return innerKey;
97
+ }
98
+ const key = Object.keys(record).find((k) => k !== "$kind" && k !== "@variant");
99
+ if (key)
100
+ return key;
101
+ }
102
+ throw new Error(`Unable to decode enum variant: ${JSON.stringify(raw)}`);
103
+ }
104
+ function enumKind(raw) {
105
+ return decodeEnumVariant(raw);
106
+ }
107
+ export function mapSelection(raw) {
108
+ const kind = enumKind(raw).toLowerCase();
109
+ if (kind === "yes")
110
+ return "YES";
111
+ if (kind === "no")
112
+ return "NO";
113
+ throw new Error(`Unknown Selection variant: ${kind}`);
114
+ }
115
+ export function mapOutcome(raw) {
116
+ const kind = enumKind(raw).toLowerCase();
117
+ if (kind === "yes")
118
+ return "YES";
119
+ if (kind === "no")
120
+ return "NO";
121
+ if (kind === "invalid")
122
+ return "INVALID";
123
+ throw new Error(`Unknown Outcome variant: ${kind}`);
124
+ }
125
+ export function mapOrderKind(raw) {
126
+ const kind = enumKind(raw).toLowerCase();
127
+ if (kind === "open")
128
+ return "OPEN";
129
+ if (kind === "close")
130
+ return "CLOSE";
131
+ throw new Error(`Unknown OrderKind variant: ${kind}`);
132
+ }
133
+ export function mapStatus(raw) {
134
+ const kind = enumKind(raw).toLowerCase();
135
+ if (kind === "open")
136
+ return "OPEN";
137
+ if (kind === "pendingclose" || kind === "pending_close")
138
+ return "PENDING_CLOSE";
139
+ throw new Error(`Unknown Status variant: ${kind}`);
140
+ }
141
+ function mapOptionalU64(raw) {
142
+ return raw == null ? null : BigInt(raw);
143
+ }
144
+ function asBytes(raw) {
145
+ return marketIdBytesFromUnknown(raw);
146
+ }
147
+ export function mapRegistryView(raw) {
148
+ return {
149
+ balance: BigInt(raw.balance),
150
+ minReserve: BigInt(raw.min_reserve),
151
+ orderCancelCooldownMs: BigInt(raw.order_cancel_cooldown_ms),
152
+ nextOrderId: BigInt(raw.next_order_id),
153
+ orderCount: BigInt(raw.order_count),
154
+ positionCount: BigInt(raw.position_count),
155
+ unresolvedMarketCount: BigInt(raw.unresolved_market_count),
156
+ resolvedMarketCount: BigInt(raw.resolved_market_count),
157
+ };
158
+ }
159
+ export function mapOrderView(raw) {
160
+ const marketId = asBytes(raw.market_id);
161
+ return {
162
+ orderId: BigInt(raw.order_id),
163
+ kind: mapOrderKind(raw.kind),
164
+ accountId: raw.account_id,
165
+ marketId,
166
+ marketIdHex: bytesToHex(marketId),
167
+ selection: mapSelection(raw.selection),
168
+ positionId: mapOptionalU64(raw.position_id),
169
+ maxSpend: BigInt(raw.max_spend),
170
+ minShares: BigInt(raw.min_shares),
171
+ priceCapBps: BigInt(raw.price_cap),
172
+ minProceeds: BigInt(raw.min_proceeds),
173
+ expiryTs: BigInt(raw.expiry_ts),
174
+ selfCancelAfterTs: BigInt(raw.self_cancel_after_ts),
175
+ createdTs: BigInt(raw.created_ts),
176
+ byAdmin: raw.by_admin,
177
+ };
178
+ }
179
+ export function mapPositionView(raw) {
180
+ const marketId = asBytes(raw.market_id);
181
+ return {
182
+ positionId: BigInt(raw.position_id),
183
+ accountId: raw.account_id,
184
+ marketId,
185
+ marketIdHex: bytesToHex(marketId),
186
+ selection: mapSelection(raw.selection),
187
+ status: mapStatus(raw.status),
188
+ filledShares: BigInt(raw.filled_shares),
189
+ filledCost: BigInt(raw.filled_cost),
190
+ openedTs: BigInt(raw.opened_ts),
191
+ payout: BigInt(raw.payout),
192
+ closeOrderId: mapOptionalU64(raw.close_order_id),
193
+ closeMinProceeds: BigInt(raw.close_min_proceeds),
194
+ closeExpiryTs: BigInt(raw.close_expiry_ts),
195
+ closeSelfCancelAfterTs: BigInt(raw.close_self_cancel_after_ts),
196
+ };
197
+ }
198
+ export function mapMarketView(raw) {
199
+ const marketId = asBytes(raw.market_id);
200
+ return {
201
+ marketKey: BigInt(raw.market_key),
202
+ marketId,
203
+ marketIdHex: bytesToHex(marketId),
204
+ resolved: raw.resolved,
205
+ paused: raw.paused,
206
+ outcome: raw.outcome == null ? null : mapOutcome(raw.outcome),
207
+ unclaimedCount: BigInt(raw.unclaimed_count),
208
+ yesShares: BigInt(raw.yes_shares),
209
+ yesCost: BigInt(raw.yes_cost),
210
+ noShares: BigInt(raw.no_shares),
211
+ noCost: BigInt(raw.no_cost),
212
+ };
213
+ }
214
+ export function mapMarketExposure(yesShares, yesCost, noShares, noCost) {
215
+ return {
216
+ yesShares: BigInt(yesShares),
217
+ yesCost: BigInt(yesCost),
218
+ noShares: BigInt(noShares),
219
+ noCost: BigInt(noCost),
220
+ };
221
+ }
222
+ export function mapAccountDataView(raw) {
223
+ return {
224
+ accountId: raw.account_id,
225
+ hasData: raw.has_data,
226
+ orderCount: BigInt(raw.order_count),
227
+ positionCount: BigInt(raw.position_count),
228
+ orderFront: mapOptionalU64(raw.order_front),
229
+ orderBack: mapOptionalU64(raw.order_back),
230
+ positionFront: mapOptionalU64(raw.position_front),
231
+ positionBack: mapOptionalU64(raw.position_back),
232
+ };
233
+ }
234
+ export function mapCursorView(count, front, back) {
235
+ return {
236
+ count: BigInt(count),
237
+ front: mapOptionalU64(front),
238
+ back: mapOptionalU64(back),
239
+ };
240
+ }