@waterx/sdk 2.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.
- package/LICENSE +21 -0
- package/README.md +204 -0
- package/dist/src/client.d.ts +109 -0
- package/dist/src/client.js +197 -0
- package/dist/src/config.d.ts +229 -0
- package/dist/src/config.js +107 -0
- package/dist/src/constants.d.ts +64 -0
- package/dist/src/constants.js +71 -0
- package/dist/src/fetch.d.ts +144 -0
- package/dist/src/fetch.js +419 -0
- package/dist/src/generated/bucket_v2_framework/account.d.ts +107 -0
- package/dist/src/generated/bucket_v2_framework/account.js +129 -0
- package/dist/src/generated/bucket_v2_framework/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/bucket_v2_framework/deps/std/type_name.js +19 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/balance.d.ts +12 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/balance.js +14 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/bucket_v2_framework/double.d.ts +384 -0
- package/dist/src/generated/bucket_v2_framework/double.js +466 -0
- package/dist/src/generated/bucket_v2_framework/float.d.ts +364 -0
- package/dist/src/generated/bucket_v2_framework/float.js +440 -0
- package/dist/src/generated/bucket_v2_framework/liability.d.ts +197 -0
- package/dist/src/generated/bucket_v2_framework/liability.js +205 -0
- package/dist/src/generated/bucket_v2_framework/linked_table.d.ts +384 -0
- package/dist/src/generated/bucket_v2_framework/linked_table.js +382 -0
- package/dist/src/generated/bucket_v2_framework/sheet.d.ts +424 -0
- package/dist/src/generated/bucket_v2_framework/sheet.js +344 -0
- package/dist/src/generated/native_custody/custody_vault.d.ts +572 -0
- package/dist/src/generated/native_custody/custody_vault.js +483 -0
- package/dist/src/generated/native_custody/deps/bucket_v2_framework/float.d.ts +8 -0
- package/dist/src/generated/native_custody/deps/bucket_v2_framework/float.js +10 -0
- package/dist/src/generated/native_custody/deps/bucket_v2_framework/liability.d.ts +11 -0
- package/dist/src/generated/native_custody/deps/bucket_v2_framework/liability.js +13 -0
- package/dist/src/generated/native_custody/deps/bucket_v2_framework/sheet.d.ts +49 -0
- package/dist/src/generated/native_custody/deps/bucket_v2_framework/sheet.js +18 -0
- package/dist/src/generated/native_custody/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/native_custody/deps/std/type_name.js +19 -0
- package/dist/src/generated/native_custody/deps/sui/balance.d.ts +12 -0
- package/dist/src/generated/native_custody/deps/sui/balance.js +14 -0
- package/dist/src/generated/native_custody/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/native_custody/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/native_custody/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/native_custody/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/native_custody/events.d.ts +36 -0
- package/dist/src/generated/native_custody/events.js +36 -0
- package/dist/src/generated/pyth_sponsor_rule/deps/sui/balance.d.ts +12 -0
- package/dist/src/generated/pyth_sponsor_rule/deps/sui/balance.js +14 -0
- package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.d.ts +68 -0
- package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.js +74 -0
- package/dist/src/generated/utils/index.d.ts +30 -0
- package/dist/src/generated/utils/index.js +157 -0
- package/dist/src/generated/waterx_account/account.d.ts +1818 -0
- package/dist/src/generated/waterx_account/account.js +1723 -0
- package/dist/src/generated/waterx_account/deps/bucket_v2_framework/liability.d.ts +11 -0
- package/dist/src/generated/waterx_account/deps/bucket_v2_framework/liability.js +13 -0
- package/dist/src/generated/waterx_account/deps/bucket_v2_framework/sheet.d.ts +49 -0
- package/dist/src/generated/waterx_account/deps/bucket_v2_framework/sheet.js +18 -0
- package/dist/src/generated/waterx_account/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/waterx_account/deps/std/type_name.js +19 -0
- package/dist/src/generated/waterx_account/deps/sui/balance.d.ts +12 -0
- package/dist/src/generated/waterx_account/deps/sui/balance.js +14 -0
- package/dist/src/generated/waterx_account/deps/sui/object_table.d.ts +17 -0
- package/dist/src/generated/waterx_account/deps/sui/object_table.js +19 -0
- package/dist/src/generated/waterx_account/deps/sui/table.d.ts +29 -0
- package/dist/src/generated/waterx_account/deps/sui/table.js +31 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_account/direct_rule.d.ts +77 -0
- package/dist/src/generated/waterx_account/direct_rule.js +78 -0
- package/dist/src/generated/waterx_account/events.d.ts +180 -0
- package/dist/src/generated/waterx_account/events.js +156 -0
- package/dist/src/generated/waterx_account/version.d.ts +10 -0
- package/dist/src/generated/waterx_account/version.js +8 -0
- package/dist/src/generated/waterx_credit/credit_registry.d.ts +708 -0
- package/dist/src/generated/waterx_credit/credit_registry.js +658 -0
- package/dist/src/generated/waterx_credit/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/waterx_credit/deps/std/type_name.js +19 -0
- package/dist/src/generated/waterx_credit/deps/sui/table.d.ts +29 -0
- package/dist/src/generated/waterx_credit/deps/sui/table.js +31 -0
- package/dist/src/generated/waterx_credit/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/waterx_credit/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/waterx_credit/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_credit/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_credit/limited_supply.d.ts +107 -0
- package/dist/src/generated/waterx_credit/limited_supply.js +131 -0
- package/dist/src/generated/waterx_oracle/aggregator.d.ts +211 -0
- package/dist/src/generated/waterx_oracle/aggregator.js +213 -0
- package/dist/src/generated/waterx_oracle/collector.d.ts +119 -0
- package/dist/src/generated/waterx_oracle/collector.js +105 -0
- package/dist/src/generated/waterx_oracle/deps/bucket_v2_framework/float.d.ts +8 -0
- package/dist/src/generated/waterx_oracle/deps/bucket_v2_framework/float.js +10 -0
- package/dist/src/generated/waterx_oracle/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/waterx_oracle/deps/std/type_name.js +19 -0
- package/dist/src/generated/waterx_oracle/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/waterx_oracle/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/waterx_oracle/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_oracle/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_oracle/oracle.d.ts +298 -0
- package/dist/src/generated/waterx_oracle/oracle.js +323 -0
- package/dist/src/generated/waterx_oracle/version.d.ts +10 -0
- package/dist/src/generated/waterx_oracle/version.js +8 -0
- package/dist/src/generated/waterx_perp/account_data.d.ts +269 -0
- package/dist/src/generated/waterx_perp/account_data.js +284 -0
- package/dist/src/generated/waterx_perp/admin.d.ts +19 -0
- package/dist/src/generated/waterx_perp/admin.js +22 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/double.d.ts +8 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/double.js +10 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/float.d.ts +8 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/float.js +10 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/liability.d.ts +11 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/liability.js +13 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/linked_table.d.ts +8 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/linked_table.js +18 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/sheet.d.ts +49 -0
- package/dist/src/generated/waterx_perp/deps/bucket_v2_framework/sheet.js +18 -0
- package/dist/src/generated/waterx_perp/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/waterx_perp/deps/std/type_name.js +19 -0
- package/dist/src/generated/waterx_perp/deps/sui/balance.d.ts +15 -0
- package/dist/src/generated/waterx_perp/deps/sui/balance.js +17 -0
- package/dist/src/generated/waterx_perp/deps/sui/coin.d.ts +14 -0
- package/dist/src/generated/waterx_perp/deps/sui/coin.js +15 -0
- package/dist/src/generated/waterx_perp/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/waterx_perp/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/waterx_perp/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_perp/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_perp/events.d.ts +1283 -0
- package/dist/src/generated/waterx_perp/events.js +1018 -0
- package/dist/src/generated/waterx_perp/global_config.d.ts +775 -0
- package/dist/src/generated/waterx_perp/global_config.js +836 -0
- package/dist/src/generated/waterx_perp/keyed_big_vector.d.ts +553 -0
- package/dist/src/generated/waterx_perp/keyed_big_vector.js +554 -0
- package/dist/src/generated/waterx_perp/lp_pool.d.ts +1648 -0
- package/dist/src/generated/waterx_perp/lp_pool.js +1521 -0
- package/dist/src/generated/waterx_perp/market_config.d.ts +715 -0
- package/dist/src/generated/waterx_perp/market_config.js +780 -0
- package/dist/src/generated/waterx_perp/math.d.ts +63 -0
- package/dist/src/generated/waterx_perp/math.js +64 -0
- package/dist/src/generated/waterx_perp/memo.d.ts +251 -0
- package/dist/src/generated/waterx_perp/memo.js +323 -0
- package/dist/src/generated/waterx_perp/order_book.d.ts +290 -0
- package/dist/src/generated/waterx_perp/order_book.js +329 -0
- package/dist/src/generated/waterx_perp/position.d.ts +1005 -0
- package/dist/src/generated/waterx_perp/position.js +1103 -0
- package/dist/src/generated/waterx_perp/request.d.ts +544 -0
- package/dist/src/generated/waterx_perp/request.js +541 -0
- package/dist/src/generated/waterx_perp/response.d.ts +247 -0
- package/dist/src/generated/waterx_perp/response.js +280 -0
- package/dist/src/generated/waterx_perp/trading.d.ts +2821 -0
- package/dist/src/generated/waterx_perp/trading.js +2372 -0
- package/dist/src/generated/waterx_perp/version.d.ts +10 -0
- package/dist/src/generated/waterx_perp/version.js +8 -0
- package/dist/src/generated/waterx_perp/witness.d.ts +18 -0
- package/dist/src/generated/waterx_perp/witness.js +21 -0
- package/dist/src/generated/waterx_perp_view/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/waterx_perp_view/deps/std/type_name.js +19 -0
- package/dist/src/generated/waterx_perp_view/view.d.ts +447 -0
- package/dist/src/generated/waterx_perp_view/view.js +414 -0
- package/dist/src/generated/waterx_pyth_rule/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/waterx_pyth_rule/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/waterx_pyth_rule/pyth_rule.d.ts +90 -0
- package/dist/src/generated/waterx_pyth_rule/pyth_rule.js +72 -0
- package/dist/src/generated/waterx_referral/deps/sui/table.d.ts +29 -0
- package/dist/src/generated/waterx_referral/deps/sui/table.js +31 -0
- package/dist/src/generated/waterx_referral/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_referral/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_referral/referral_table.d.ts +171 -0
- package/dist/src/generated/waterx_referral/referral_table.js +192 -0
- package/dist/src/generated/waterx_staking/deps/bucket_v2_framework/double.d.ts +8 -0
- package/dist/src/generated/waterx_staking/deps/bucket_v2_framework/double.js +10 -0
- package/dist/src/generated/waterx_staking/deps/sui/balance.d.ts +12 -0
- package/dist/src/generated/waterx_staking/deps/sui/balance.js +14 -0
- package/dist/src/generated/waterx_staking/deps/sui/table.d.ts +29 -0
- package/dist/src/generated/waterx_staking/deps/sui/table.js +31 -0
- package/dist/src/generated/waterx_staking/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_staking/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_staking/waterx_staking.d.ts +746 -0
- package/dist/src/generated/waterx_staking/waterx_staking.js +731 -0
- package/dist/src/generated/waterx_staking/witness.d.ts +16 -0
- package/dist/src/generated/waterx_staking/witness.js +18 -0
- package/dist/src/generated/withdrawal_queue/deps/bucket_v2_framework/linked_table.d.ts +8 -0
- package/dist/src/generated/withdrawal_queue/deps/bucket_v2_framework/linked_table.js +18 -0
- package/dist/src/generated/withdrawal_queue/deps/std/type_name.d.ts +17 -0
- package/dist/src/generated/withdrawal_queue/deps/std/type_name.js +19 -0
- package/dist/src/generated/withdrawal_queue/deps/sui/balance.d.ts +12 -0
- package/dist/src/generated/withdrawal_queue/deps/sui/balance.js +14 -0
- package/dist/src/generated/withdrawal_queue/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/withdrawal_queue/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/withdrawal_queue/withdrawal_queue.d.ts +483 -0
- package/dist/src/generated/withdrawal_queue/withdrawal_queue.js +480 -0
- package/dist/src/generated/wlp/wlp.d.ts +28 -0
- package/dist/src/generated/wlp/wlp.js +32 -0
- package/dist/src/generated/wormhole_bridge/deps/sui/table.d.ts +29 -0
- package/dist/src/generated/wormhole_bridge/deps/sui/table.js +31 -0
- package/dist/src/generated/wormhole_bridge/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/wormhole_bridge/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/wormhole_bridge/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/wormhole_bridge/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/wormhole_bridge/deps/wormhole_sdk/consumed_vaas.d.ts +12 -0
- package/dist/src/generated/wormhole_bridge/deps/wormhole_sdk/consumed_vaas.js +9 -0
- package/dist/src/generated/wormhole_bridge/deps/wormhole_sdk/emitter.d.ts +14 -0
- package/dist/src/generated/wormhole_bridge/deps/wormhole_sdk/emitter.js +16 -0
- package/dist/src/generated/wormhole_bridge/deps/wormhole_sdk/set.d.ts +16 -0
- package/dist/src/generated/wormhole_bridge/deps/wormhole_sdk/set.js +15 -0
- package/dist/src/generated/wormhole_bridge/events.d.ts +32 -0
- package/dist/src/generated/wormhole_bridge/events.js +28 -0
- package/dist/src/generated/wormhole_bridge/wormhole_bridge.d.ts +498 -0
- package/dist/src/generated/wormhole_bridge/wormhole_bridge.js +494 -0
- package/dist/src/index.d.ts +28 -0
- package/dist/src/index.js +34 -0
- package/dist/src/tx-builders.d.ts +242 -0
- package/dist/src/tx-builders.js +320 -0
- package/dist/src/user/account.d.ts +129 -0
- package/dist/src/user/account.js +166 -0
- package/dist/src/user/credit.d.ts +135 -0
- package/dist/src/user/credit.js +255 -0
- package/dist/src/user/custody.d.ts +71 -0
- package/dist/src/user/custody.js +112 -0
- package/dist/src/user/index.d.ts +8 -0
- package/dist/src/user/index.js +8 -0
- package/dist/src/user/order.d.ts +89 -0
- package/dist/src/user/order.js +134 -0
- package/dist/src/user/referral.d.ts +21 -0
- package/dist/src/user/referral.js +41 -0
- package/dist/src/user/staking.d.ts +54 -0
- package/dist/src/user/staking.js +109 -0
- package/dist/src/user/trading.d.ts +119 -0
- package/dist/src/user/trading.js +262 -0
- package/dist/src/user/wlp.d.ts +58 -0
- package/dist/src/user/wlp.js +99 -0
- package/dist/src/utils/account-request.d.ts +9 -0
- package/dist/src/utils/account-request.js +17 -0
- package/dist/src/utils/config.d.ts +11 -0
- package/dist/src/utils/config.js +15 -0
- package/dist/src/utils/math.d.ts +201 -0
- package/dist/src/utils/math.js +343 -0
- package/dist/src/utils/pyth.d.ts +89 -0
- package/dist/src/utils/pyth.js +316 -0
- package/dist/src/utils/wormhole.d.ts +86 -0
- package/dist/src/utils/wormhole.js +154 -0
- package/package.json +66 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builders for `native_custody::custody_vault` — the Sui-native PSM that
|
|
3
|
+
* mints the protocol CREDIT CoinType 1:1 against backing stable assets `T`
|
|
4
|
+
* (CCTP USDC, USDT, …) and burns it back the other way.
|
|
5
|
+
*
|
|
6
|
+
* `mintCredit` / `mintCreditFromRequest` return a `DepositRequest<CREDIT>`
|
|
7
|
+
* hot potato — it must be consumed in the same PTB by the deposit policy
|
|
8
|
+
* registered for CREDIT (the canonical policy is `direct_rule::DirectRule`).
|
|
9
|
+
* `mintCreditToAccount` chains that consume for you.
|
|
10
|
+
*
|
|
11
|
+
* `burnCredit` returns the redeemed `Coin<T>`; the caller decides where it
|
|
12
|
+
* goes (transfer, fold back into a wxa account, …).
|
|
13
|
+
*
|
|
14
|
+
* Requires `waterx_credit` + `native_custody` in the loaded config — both
|
|
15
|
+
* are optional in `WaterXConfig` since not every deployment ships the
|
|
16
|
+
* credit pipeline.
|
|
17
|
+
*/
|
|
18
|
+
import type { Transaction, TransactionArgument } from "@mysten/sui/transactions";
|
|
19
|
+
import type { WaterXClient } from "../client.ts";
|
|
20
|
+
export interface MintCreditParams {
|
|
21
|
+
/** wxa account ID the minted CREDIT is deposited into (also the partner-fee key). */
|
|
22
|
+
accountId: string;
|
|
23
|
+
/** `Coin<T>` of the backing asset to convert. */
|
|
24
|
+
assetCoin: TransactionArgument;
|
|
25
|
+
/** Fully-qualified backing-asset Move type `T` (must be registered on the vault). */
|
|
26
|
+
assetType: string;
|
|
27
|
+
/** CREDIT CoinType. Defaults to `client.creditType()`. */
|
|
28
|
+
creditType?: string;
|
|
29
|
+
/** Opaque bytes forwarded onto the returned `DepositRequest<CREDIT>`. */
|
|
30
|
+
extraData?: Uint8Array;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build `custody_vault::mint<T, CREDIT>`. Returns the `DepositRequest<CREDIT>`
|
|
34
|
+
* argument — consume it in the same PTB (see `mintCreditToAccount`).
|
|
35
|
+
*/
|
|
36
|
+
export declare function mintCredit(client: WaterXClient, tx: Transaction, params: MintCreditParams): TransactionArgument;
|
|
37
|
+
export interface MintCreditFromRequestParams {
|
|
38
|
+
/** `DepositRequest<T>` from `account::request_deposit<T>` (T must have `NativeCustody` as its deposit policy). */
|
|
39
|
+
depositRequest: TransactionArgument;
|
|
40
|
+
/** Fully-qualified backing-asset Move type `T`. */
|
|
41
|
+
assetType: string;
|
|
42
|
+
/** CREDIT CoinType. Defaults to `client.creditType()`. */
|
|
43
|
+
creditType?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build `custody_vault::mint_from_request<T, CREDIT>`. The returned
|
|
47
|
+
* `DepositRequest<CREDIT>` inherits the input request's `accountId` /
|
|
48
|
+
* `extraData`. Consume it in the same PTB.
|
|
49
|
+
*/
|
|
50
|
+
export declare function mintCreditFromRequest(client: WaterXClient, tx: Transaction, params: MintCreditFromRequestParams): TransactionArgument;
|
|
51
|
+
/**
|
|
52
|
+
* `mintCredit` followed by `direct_rule::consume_deposit_direct<CREDIT>`, so
|
|
53
|
+
* the freshly minted CREDIT settles straight into `accountId`'s wxa balance.
|
|
54
|
+
* Assumes CREDIT's deposit policy is `DirectRule` (the canonical setup).
|
|
55
|
+
*/
|
|
56
|
+
export declare function mintCreditToAccount(client: WaterXClient, tx: Transaction, params: MintCreditParams): void;
|
|
57
|
+
export interface BurnCreditParams {
|
|
58
|
+
/** wxa account ID the burned CREDIT belongs to (burn-cap + partner-fee key). */
|
|
59
|
+
accountId: string;
|
|
60
|
+
/** `Coin<CREDIT>` to redeem. */
|
|
61
|
+
creditCoin: TransactionArgument;
|
|
62
|
+
/** Fully-qualified backing-asset Move type `T` to redeem into. */
|
|
63
|
+
assetType: string;
|
|
64
|
+
/** CREDIT CoinType. Defaults to `client.creditType()`. */
|
|
65
|
+
creditType?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build `custody_vault::burn<T, CREDIT>`. Returns the redeemed `Coin<T>`
|
|
69
|
+
* argument for the caller to forward.
|
|
70
|
+
*/
|
|
71
|
+
export declare function burnCredit(client: WaterXClient, tx: Transaction, params: BurnCreditParams): TransactionArgument;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builders for `native_custody::custody_vault` — the Sui-native PSM that
|
|
3
|
+
* mints the protocol CREDIT CoinType 1:1 against backing stable assets `T`
|
|
4
|
+
* (CCTP USDC, USDT, …) and burns it back the other way.
|
|
5
|
+
*
|
|
6
|
+
* `mintCredit` / `mintCreditFromRequest` return a `DepositRequest<CREDIT>`
|
|
7
|
+
* hot potato — it must be consumed in the same PTB by the deposit policy
|
|
8
|
+
* registered for CREDIT (the canonical policy is `direct_rule::DirectRule`).
|
|
9
|
+
* `mintCreditToAccount` chains that consume for you.
|
|
10
|
+
*
|
|
11
|
+
* `burnCredit` returns the redeemed `Coin<T>`; the caller decides where it
|
|
12
|
+
* goes (transfer, fold back into a wxa account, …).
|
|
13
|
+
*
|
|
14
|
+
* Requires `waterx_credit` + `native_custody` in the loaded config — both
|
|
15
|
+
* are optional in `WaterXConfig` since not every deployment ships the
|
|
16
|
+
* credit pipeline.
|
|
17
|
+
*/
|
|
18
|
+
import * as custody from "../generated/native_custody/custody_vault.js";
|
|
19
|
+
import { consumeDepositDirect } from "../generated/waterx_account/direct_rule.js";
|
|
20
|
+
function requireCredit(client) {
|
|
21
|
+
const credit = client.config.packages.waterx_credit;
|
|
22
|
+
if (!credit?.credit_registry) {
|
|
23
|
+
throw new Error("waterx_credit is not configured — set packages.waterx_credit.credit_registry");
|
|
24
|
+
}
|
|
25
|
+
return { credit_registry: credit.credit_registry };
|
|
26
|
+
}
|
|
27
|
+
function requireCustody(client) {
|
|
28
|
+
const nc = client.config.packages.native_custody;
|
|
29
|
+
if (!nc?.vault) {
|
|
30
|
+
throw new Error("native_custody is not configured — set packages.native_custody.vault");
|
|
31
|
+
}
|
|
32
|
+
return { published_at: nc.published_at, vault: nc.vault };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build `custody_vault::mint<T, CREDIT>`. Returns the `DepositRequest<CREDIT>`
|
|
36
|
+
* argument — consume it in the same PTB (see `mintCreditToAccount`).
|
|
37
|
+
*/
|
|
38
|
+
export function mintCredit(client, tx, params) {
|
|
39
|
+
const credit = requireCredit(client);
|
|
40
|
+
const nc = requireCustody(client);
|
|
41
|
+
const [req] = custody.mint({
|
|
42
|
+
package: nc.published_at,
|
|
43
|
+
arguments: {
|
|
44
|
+
vault: tx.object(nc.vault),
|
|
45
|
+
registry: tx.object(credit.credit_registry),
|
|
46
|
+
accountRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
47
|
+
accountId: params.accountId,
|
|
48
|
+
assetCoin: params.assetCoin,
|
|
49
|
+
extraData: Array.from(params.extraData ?? new Uint8Array()),
|
|
50
|
+
},
|
|
51
|
+
typeArguments: [params.assetType, params.creditType ?? client.creditType()],
|
|
52
|
+
})(tx);
|
|
53
|
+
return req;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build `custody_vault::mint_from_request<T, CREDIT>`. The returned
|
|
57
|
+
* `DepositRequest<CREDIT>` inherits the input request's `accountId` /
|
|
58
|
+
* `extraData`. Consume it in the same PTB.
|
|
59
|
+
*/
|
|
60
|
+
export function mintCreditFromRequest(client, tx, params) {
|
|
61
|
+
const credit = requireCredit(client);
|
|
62
|
+
const nc = requireCustody(client);
|
|
63
|
+
const [req] = custody.mintFromRequest({
|
|
64
|
+
package: nc.published_at,
|
|
65
|
+
arguments: {
|
|
66
|
+
vault: tx.object(nc.vault),
|
|
67
|
+
registry: tx.object(credit.credit_registry),
|
|
68
|
+
accountRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
69
|
+
depositRequest: params.depositRequest,
|
|
70
|
+
},
|
|
71
|
+
typeArguments: [params.assetType, params.creditType ?? client.creditType()],
|
|
72
|
+
})(tx);
|
|
73
|
+
return req;
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// mint + consume — credit lands directly in the wxa account
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* `mintCredit` followed by `direct_rule::consume_deposit_direct<CREDIT>`, so
|
|
80
|
+
* the freshly minted CREDIT settles straight into `accountId`'s wxa balance.
|
|
81
|
+
* Assumes CREDIT's deposit policy is `DirectRule` (the canonical setup).
|
|
82
|
+
*/
|
|
83
|
+
export function mintCreditToAccount(client, tx, params) {
|
|
84
|
+
const req = mintCredit(client, tx, params);
|
|
85
|
+
consumeDepositDirect({
|
|
86
|
+
package: client.config.packages.waterx_account.published_at,
|
|
87
|
+
arguments: {
|
|
88
|
+
registry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
89
|
+
req: req,
|
|
90
|
+
},
|
|
91
|
+
typeArguments: [params.creditType ?? client.creditType()],
|
|
92
|
+
})(tx);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Build `custody_vault::burn<T, CREDIT>`. Returns the redeemed `Coin<T>`
|
|
96
|
+
* argument for the caller to forward.
|
|
97
|
+
*/
|
|
98
|
+
export function burnCredit(client, tx, params) {
|
|
99
|
+
const credit = requireCredit(client);
|
|
100
|
+
const nc = requireCustody(client);
|
|
101
|
+
const [coin] = custody.burn({
|
|
102
|
+
package: nc.published_at,
|
|
103
|
+
arguments: {
|
|
104
|
+
vault: tx.object(nc.vault),
|
|
105
|
+
registry: tx.object(credit.credit_registry),
|
|
106
|
+
accountId: params.accountId,
|
|
107
|
+
creditCoin: params.creditCoin,
|
|
108
|
+
},
|
|
109
|
+
typeArguments: [params.assetType, params.creditType ?? client.creditType()],
|
|
110
|
+
})(tx);
|
|
111
|
+
return coin;
|
|
112
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order builders for `waterx_perp::trading`.
|
|
3
|
+
*
|
|
4
|
+
* `placeOrderRequest` accepts a main `PlaceOrderArgument` plus an optional
|
|
5
|
+
* `preOrder: PlaceOrderArgument[]` of reduce-only TP/SL legs to reserve
|
|
6
|
+
* against the freshly opened position.
|
|
7
|
+
*
|
|
8
|
+
* Use `triggerPrice === undefined` (market form) to park an order at
|
|
9
|
+
* tick 0 in the limit book; a keeper picks it up via `match_orders`.
|
|
10
|
+
*/
|
|
11
|
+
import type { Transaction, TransactionArgument } from "@mysten/sui/transactions";
|
|
12
|
+
import type { WaterXClient } from "../client.ts";
|
|
13
|
+
export interface PlaceOrderArgumentParams {
|
|
14
|
+
isLong: boolean;
|
|
15
|
+
isStopOrder: boolean;
|
|
16
|
+
reduceOnly: boolean;
|
|
17
|
+
/** Raw 1e9-scaled `Float` size. */
|
|
18
|
+
size: bigint | number;
|
|
19
|
+
/** Raw 1e9-scaled `Float` trigger price. `undefined` = market form. */
|
|
20
|
+
triggerPrice?: bigint | number;
|
|
21
|
+
linkedPositionId?: bigint | number;
|
|
22
|
+
/** Raw 1e9-scaled `Float` slippage cap (only used by market form). */
|
|
23
|
+
acceptablePrice?: bigint | number;
|
|
24
|
+
collateralAmount: bigint | number;
|
|
25
|
+
}
|
|
26
|
+
/** Build a `request::PlaceOrderArgument` Move struct in the PTB. */
|
|
27
|
+
export declare function buildPlaceOrderArgument(client: WaterXClient, tx: Transaction, p: PlaceOrderArgumentParams): TransactionArgument;
|
|
28
|
+
export interface PlaceOrderRequestParams {
|
|
29
|
+
ticker: string;
|
|
30
|
+
accountId: string;
|
|
31
|
+
collateralType: string;
|
|
32
|
+
lpType?: string;
|
|
33
|
+
/** Main order. */
|
|
34
|
+
main: PlaceOrderArgumentParams;
|
|
35
|
+
/** Optional TP/SL legs (length ≤ market.config.max_pre_orders). */
|
|
36
|
+
preOrders?: PlaceOrderArgumentParams[];
|
|
37
|
+
bucketAccount?: string | TransactionArgument;
|
|
38
|
+
}
|
|
39
|
+
/** Build `trading::place_order_request`. Returns the `TradingRequest<C_TOKEN>` argument. */
|
|
40
|
+
export declare function placeOrderRequest(client: WaterXClient, tx: Transaction, params: PlaceOrderRequestParams): TransactionArgument;
|
|
41
|
+
export interface CancelOrderRequestParams {
|
|
42
|
+
ticker: string;
|
|
43
|
+
accountId: string;
|
|
44
|
+
collateralType: string;
|
|
45
|
+
lpType?: string;
|
|
46
|
+
orderId: bigint | number;
|
|
47
|
+
/** Raw 1e9-scaled `Float`. `0n` scans all trigger price buckets in the selected book(s). */
|
|
48
|
+
triggerPrice?: bigint | number;
|
|
49
|
+
/** Defaults to `ORDER_TAG_WILDCARD` (255) — scans all 4 books by `orderId`. */
|
|
50
|
+
orderTypeTag?: number;
|
|
51
|
+
bucketAccount?: string | TransactionArgument;
|
|
52
|
+
}
|
|
53
|
+
export declare function cancelOrderRequest(client: WaterXClient, tx: Transaction, params: CancelOrderRequestParams): TransactionArgument;
|
|
54
|
+
export interface UpdateOrderRequestParams {
|
|
55
|
+
ticker: string;
|
|
56
|
+
accountId: string;
|
|
57
|
+
collateralType: string;
|
|
58
|
+
lpType?: string;
|
|
59
|
+
orderId: bigint | number;
|
|
60
|
+
/** Existing trigger price (raw 1e9-scaled), used to locate the order. */
|
|
61
|
+
currentTriggerPrice: bigint | number;
|
|
62
|
+
orderTypeTag: number;
|
|
63
|
+
/** New raw 1e9-scaled size. */
|
|
64
|
+
newSize: bigint | number;
|
|
65
|
+
/** New raw 1e9-scaled trigger price. */
|
|
66
|
+
newTriggerPrice: bigint | number;
|
|
67
|
+
bucketAccount?: string | TransactionArgument;
|
|
68
|
+
}
|
|
69
|
+
export declare function updateOrderRequest(client: WaterXClient, tx: Transaction, params: UpdateOrderRequestParams): TransactionArgument;
|
|
70
|
+
export interface CancelPreOrderRequestParams {
|
|
71
|
+
ticker: string;
|
|
72
|
+
accountId: string;
|
|
73
|
+
collateralType: string;
|
|
74
|
+
lpType?: string;
|
|
75
|
+
mainOrderId: bigint | number;
|
|
76
|
+
preOrderId: bigint | number;
|
|
77
|
+
bucketAccount?: string | TransactionArgument;
|
|
78
|
+
}
|
|
79
|
+
export declare function cancelPreOrderRequest(client: WaterXClient, tx: Transaction, params: CancelPreOrderRequestParams): TransactionArgument;
|
|
80
|
+
export interface AddPreOrderRequestParams {
|
|
81
|
+
ticker: string;
|
|
82
|
+
accountId: string;
|
|
83
|
+
collateralType: string;
|
|
84
|
+
lpType?: string;
|
|
85
|
+
mainOrderId: bigint | number;
|
|
86
|
+
preOrder: PlaceOrderArgumentParams;
|
|
87
|
+
bucketAccount?: string | TransactionArgument;
|
|
88
|
+
}
|
|
89
|
+
export declare function addPreOrderRequest(client: WaterXClient, tx: Transaction, params: AddPreOrderRequestParams): TransactionArgument;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order builders for `waterx_perp::trading`.
|
|
3
|
+
*
|
|
4
|
+
* `placeOrderRequest` accepts a main `PlaceOrderArgument` plus an optional
|
|
5
|
+
* `preOrder: PlaceOrderArgument[]` of reduce-only TP/SL legs to reserve
|
|
6
|
+
* against the freshly opened position.
|
|
7
|
+
*
|
|
8
|
+
* Use `triggerPrice === undefined` (market form) to park an order at
|
|
9
|
+
* tick 0 in the limit book; a keeper picks it up via `match_orders`.
|
|
10
|
+
*/
|
|
11
|
+
import { ORDER_TAG_WILDCARD } from "../constants.js";
|
|
12
|
+
import { newPlaceOrderArgument } from "../generated/waterx_perp/request.js";
|
|
13
|
+
import * as trading from "../generated/waterx_perp/trading.js";
|
|
14
|
+
import { makeSenderRequest } from "../utils/account-request.js";
|
|
15
|
+
/** Build a `request::PlaceOrderArgument` Move struct in the PTB. */
|
|
16
|
+
export function buildPlaceOrderArgument(client, tx, p) {
|
|
17
|
+
const [arg] = newPlaceOrderArgument({
|
|
18
|
+
package: client.config.packages.waterx_perp.published_at,
|
|
19
|
+
arguments: {
|
|
20
|
+
isLong: p.isLong,
|
|
21
|
+
isStopOrder: p.isStopOrder,
|
|
22
|
+
reduceOnly: p.reduceOnly,
|
|
23
|
+
size: p.size,
|
|
24
|
+
triggerPrice: p.triggerPrice ?? null,
|
|
25
|
+
linkedPositionId: p.linkedPositionId ?? null,
|
|
26
|
+
acceptablePrice: p.acceptablePrice ?? null,
|
|
27
|
+
collateralAmount: p.collateralAmount,
|
|
28
|
+
},
|
|
29
|
+
})(tx);
|
|
30
|
+
return arg;
|
|
31
|
+
}
|
|
32
|
+
/** Build `trading::place_order_request`. Returns the `TradingRequest<C_TOKEN>` argument. */
|
|
33
|
+
export function placeOrderRequest(client, tx, params) {
|
|
34
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
35
|
+
const mainArg = buildPlaceOrderArgument(client, tx, params.main);
|
|
36
|
+
const preArgs = (params.preOrders ?? []).map((p) => buildPlaceOrderArgument(client, tx, p));
|
|
37
|
+
const preOrderType = `${client.config.packages.waterx_perp.published_at}::request::PlaceOrderArgument`;
|
|
38
|
+
const preVec = tx.makeMoveVec({
|
|
39
|
+
type: preOrderType,
|
|
40
|
+
elements: preArgs,
|
|
41
|
+
});
|
|
42
|
+
const [tr] = trading.placeOrderRequest({
|
|
43
|
+
package: client.config.packages.waterx_perp.published_at,
|
|
44
|
+
arguments: {
|
|
45
|
+
globalConfig: tx.object(client.config.packages.waterx_perp.global_config),
|
|
46
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
47
|
+
marketRegistry: tx.object(client.config.packages.waterx_perp.market_registry_wlp),
|
|
48
|
+
ticker: params.ticker,
|
|
49
|
+
senderRequest: req,
|
|
50
|
+
accountId: params.accountId,
|
|
51
|
+
main: mainArg,
|
|
52
|
+
preOrder: preVec,
|
|
53
|
+
},
|
|
54
|
+
typeArguments: [params.collateralType, params.lpType ?? client.wlpType()],
|
|
55
|
+
})(tx);
|
|
56
|
+
return tr;
|
|
57
|
+
}
|
|
58
|
+
export function cancelOrderRequest(client, tx, params) {
|
|
59
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
60
|
+
const [tr] = trading.cancelOrderRequest({
|
|
61
|
+
package: client.config.packages.waterx_perp.published_at,
|
|
62
|
+
arguments: {
|
|
63
|
+
globalConfig: tx.object(client.config.packages.waterx_perp.global_config),
|
|
64
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
65
|
+
marketRegistry: tx.object(client.config.packages.waterx_perp.market_registry_wlp),
|
|
66
|
+
ticker: params.ticker,
|
|
67
|
+
senderRequest: req,
|
|
68
|
+
accountId: params.accountId,
|
|
69
|
+
orderId: params.orderId,
|
|
70
|
+
triggerPrice: params.triggerPrice ?? 0n,
|
|
71
|
+
orderTypeTag: params.orderTypeTag ?? ORDER_TAG_WILDCARD,
|
|
72
|
+
},
|
|
73
|
+
typeArguments: [params.collateralType, params.lpType ?? client.wlpType()],
|
|
74
|
+
})(tx);
|
|
75
|
+
return tr;
|
|
76
|
+
}
|
|
77
|
+
export function updateOrderRequest(client, tx, params) {
|
|
78
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
79
|
+
const [tr] = trading.updateOrderRequest({
|
|
80
|
+
package: client.config.packages.waterx_perp.published_at,
|
|
81
|
+
arguments: {
|
|
82
|
+
globalConfig: tx.object(client.config.packages.waterx_perp.global_config),
|
|
83
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
84
|
+
marketRegistry: tx.object(client.config.packages.waterx_perp.market_registry_wlp),
|
|
85
|
+
ticker: params.ticker,
|
|
86
|
+
senderRequest: req,
|
|
87
|
+
accountId: params.accountId,
|
|
88
|
+
orderId: params.orderId,
|
|
89
|
+
currentTriggerPrice: params.currentTriggerPrice,
|
|
90
|
+
orderTypeTag: params.orderTypeTag,
|
|
91
|
+
newSize: params.newSize,
|
|
92
|
+
newTriggerPrice: params.newTriggerPrice,
|
|
93
|
+
},
|
|
94
|
+
typeArguments: [params.collateralType, params.lpType ?? client.wlpType()],
|
|
95
|
+
})(tx);
|
|
96
|
+
return tr;
|
|
97
|
+
}
|
|
98
|
+
export function cancelPreOrderRequest(client, tx, params) {
|
|
99
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
100
|
+
const [tr] = trading.cancelPreOrderRequest({
|
|
101
|
+
package: client.config.packages.waterx_perp.published_at,
|
|
102
|
+
arguments: {
|
|
103
|
+
globalConfig: tx.object(client.config.packages.waterx_perp.global_config),
|
|
104
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
105
|
+
marketRegistry: tx.object(client.config.packages.waterx_perp.market_registry_wlp),
|
|
106
|
+
ticker: params.ticker,
|
|
107
|
+
senderRequest: req,
|
|
108
|
+
accountId: params.accountId,
|
|
109
|
+
mainOrderId: params.mainOrderId,
|
|
110
|
+
preOrderId: params.preOrderId,
|
|
111
|
+
},
|
|
112
|
+
typeArguments: [params.collateralType, params.lpType ?? client.wlpType()],
|
|
113
|
+
})(tx);
|
|
114
|
+
return tr;
|
|
115
|
+
}
|
|
116
|
+
export function addPreOrderRequest(client, tx, params) {
|
|
117
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
118
|
+
const preArg = buildPlaceOrderArgument(client, tx, params.preOrder);
|
|
119
|
+
const [tr] = trading.addPreOrderRequest({
|
|
120
|
+
package: client.config.packages.waterx_perp.published_at,
|
|
121
|
+
arguments: {
|
|
122
|
+
globalConfig: tx.object(client.config.packages.waterx_perp.global_config),
|
|
123
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
124
|
+
marketRegistry: tx.object(client.config.packages.waterx_perp.market_registry_wlp),
|
|
125
|
+
ticker: params.ticker,
|
|
126
|
+
senderRequest: req,
|
|
127
|
+
accountId: params.accountId,
|
|
128
|
+
mainOrderId: params.mainOrderId,
|
|
129
|
+
preOrder: preArg,
|
|
130
|
+
},
|
|
131
|
+
typeArguments: [params.collateralType, params.lpType ?? client.wlpType()],
|
|
132
|
+
})(tx);
|
|
133
|
+
return tr;
|
|
134
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Referral builders — backed by the standalone `waterx_referral` package.
|
|
3
|
+
* Requires
|
|
4
|
+
* `config.packages.waterx_referral.{published_at,referral_table}` to be
|
|
5
|
+
* populated; otherwise the builder throws so misconfigured deployments fail
|
|
6
|
+
* loudly instead of silently aborting on-chain.
|
|
7
|
+
*/
|
|
8
|
+
import type { Transaction, TransactionArgument } from "@mysten/sui/transactions";
|
|
9
|
+
import type { WaterXClient } from "../client.ts";
|
|
10
|
+
export interface SetReferralCodeParams {
|
|
11
|
+
/** Referral code string the caller wants to claim. */
|
|
12
|
+
code: string;
|
|
13
|
+
bucketAccount?: string | TransactionArgument;
|
|
14
|
+
}
|
|
15
|
+
export declare function setReferralCode(client: WaterXClient, tx: Transaction, params: SetReferralCodeParams): void;
|
|
16
|
+
export interface UseReferralCodeParams {
|
|
17
|
+
/** Referral code to bind to the caller's address. */
|
|
18
|
+
code: string;
|
|
19
|
+
bucketAccount?: string | TransactionArgument;
|
|
20
|
+
}
|
|
21
|
+
export declare function useReferralCode(client: WaterXClient, tx: Transaction, params: UseReferralCodeParams): void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Referral builders — backed by the standalone `waterx_referral` package.
|
|
3
|
+
* Requires
|
|
4
|
+
* `config.packages.waterx_referral.{published_at,referral_table}` to be
|
|
5
|
+
* populated; otherwise the builder throws so misconfigured deployments fail
|
|
6
|
+
* loudly instead of silently aborting on-chain.
|
|
7
|
+
*/
|
|
8
|
+
import * as referral from "../generated/waterx_referral/referral_table.js";
|
|
9
|
+
import { makeSenderRequest } from "../utils/account-request.js";
|
|
10
|
+
function requireReferralConfig(client) {
|
|
11
|
+
const pkg = client.config.packages.waterx_referral?.published_at;
|
|
12
|
+
const table = client.config.packages.waterx_referral?.referral_table;
|
|
13
|
+
if (!pkg || !table) {
|
|
14
|
+
throw new Error("referral package not configured: set config.packages.waterx_referral.{published_at,referral_table}");
|
|
15
|
+
}
|
|
16
|
+
return { pkg, table };
|
|
17
|
+
}
|
|
18
|
+
export function setReferralCode(client, tx, params) {
|
|
19
|
+
const { pkg, table } = requireReferralConfig(client);
|
|
20
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
21
|
+
referral.setReferralCode({
|
|
22
|
+
package: pkg,
|
|
23
|
+
arguments: {
|
|
24
|
+
table: tx.object(table),
|
|
25
|
+
req: req,
|
|
26
|
+
code: params.code,
|
|
27
|
+
},
|
|
28
|
+
})(tx);
|
|
29
|
+
}
|
|
30
|
+
export function useReferralCode(client, tx, params) {
|
|
31
|
+
const { pkg, table } = requireReferralConfig(client);
|
|
32
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
33
|
+
referral.useReferralCode({
|
|
34
|
+
package: pkg,
|
|
35
|
+
arguments: {
|
|
36
|
+
table: tx.object(table),
|
|
37
|
+
req: req,
|
|
38
|
+
code: params.code,
|
|
39
|
+
},
|
|
40
|
+
})(tx);
|
|
41
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Staking builders for `waterx_staking::waterx_staking`.
|
|
3
|
+
*
|
|
4
|
+
* Deposit / redeem produce a "checker" hot potato keyed by the set of
|
|
5
|
+
* rewarders configured on the pool. The PTB shape is:
|
|
6
|
+
*
|
|
7
|
+
* checker = deposit(...) | redeem(...)
|
|
8
|
+
* for each rewarder_R:
|
|
9
|
+
* settle_rewarder_on_<deposit|withdraw><STAKE, R>(checker, pool, clock)
|
|
10
|
+
* destroy_<deposit|withdraw>_checker(checker)
|
|
11
|
+
*
|
|
12
|
+
* `claim<STAKE, R>` is single-call (no checker).
|
|
13
|
+
*
|
|
14
|
+
* Each builder takes a `stakeAlias` (e.g. `"WLP"`) that keys into
|
|
15
|
+
* `config.packages.waterx_staking.pools` to find the actual
|
|
16
|
+
* `StakingPool<STAKE>` shared object.
|
|
17
|
+
*/
|
|
18
|
+
import type { Transaction, TransactionArgument } from "@mysten/sui/transactions";
|
|
19
|
+
import type { WaterXClient } from "../client.ts";
|
|
20
|
+
export interface StakeParams {
|
|
21
|
+
accountId: string;
|
|
22
|
+
/** Stake-type alias (key into `waterx_staking.pools`, e.g. `"WLP"`). */
|
|
23
|
+
stakeAlias: string;
|
|
24
|
+
/** Fully-qualified `STAKE` coin type for the type argument. */
|
|
25
|
+
stakeType: string;
|
|
26
|
+
/**
|
|
27
|
+
* Amount to take from the wxa account into the staking pool. Accepts a
|
|
28
|
+
* `TransactionArgument` so callers can chain it from a previous PTB call
|
|
29
|
+
* (e.g. the `lp_amount` returned by `mintWlp`).
|
|
30
|
+
*/
|
|
31
|
+
stakeAmount: bigint | number | TransactionArgument;
|
|
32
|
+
/** Rewarder types to settle on this deposit. Order matters and must match the pool's `rewarder_ids` set on-chain. */
|
|
33
|
+
rewarderTypes?: string[];
|
|
34
|
+
bucketAccount?: string | TransactionArgument;
|
|
35
|
+
}
|
|
36
|
+
export declare function stake(client: WaterXClient, tx: Transaction, params: StakeParams): void;
|
|
37
|
+
export interface UnstakeParams {
|
|
38
|
+
accountId: string;
|
|
39
|
+
stakeAlias: string;
|
|
40
|
+
stakeType: string;
|
|
41
|
+
withdrawalAmount: bigint | number | TransactionArgument;
|
|
42
|
+
rewarderTypes?: string[];
|
|
43
|
+
bucketAccount?: string | TransactionArgument;
|
|
44
|
+
}
|
|
45
|
+
export declare function unstake(client: WaterXClient, tx: Transaction, params: UnstakeParams): void;
|
|
46
|
+
export interface ClaimRewardParams {
|
|
47
|
+
accountId: string;
|
|
48
|
+
stakeAlias: string;
|
|
49
|
+
stakeType: string;
|
|
50
|
+
/** Reward coin type to claim. */
|
|
51
|
+
rewardType: string;
|
|
52
|
+
bucketAccount?: string | TransactionArgument;
|
|
53
|
+
}
|
|
54
|
+
export declare function claimReward(client: WaterXClient, tx: Transaction, params: ClaimRewardParams): void;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Staking builders for `waterx_staking::waterx_staking`.
|
|
3
|
+
*
|
|
4
|
+
* Deposit / redeem produce a "checker" hot potato keyed by the set of
|
|
5
|
+
* rewarders configured on the pool. The PTB shape is:
|
|
6
|
+
*
|
|
7
|
+
* checker = deposit(...) | redeem(...)
|
|
8
|
+
* for each rewarder_R:
|
|
9
|
+
* settle_rewarder_on_<deposit|withdraw><STAKE, R>(checker, pool, clock)
|
|
10
|
+
* destroy_<deposit|withdraw>_checker(checker)
|
|
11
|
+
*
|
|
12
|
+
* `claim<STAKE, R>` is single-call (no checker).
|
|
13
|
+
*
|
|
14
|
+
* Each builder takes a `stakeAlias` (e.g. `"WLP"`) that keys into
|
|
15
|
+
* `config.packages.waterx_staking.pools` to find the actual
|
|
16
|
+
* `StakingPool<STAKE>` shared object.
|
|
17
|
+
*/
|
|
18
|
+
import * as staking from "../generated/waterx_staking/waterx_staking.js";
|
|
19
|
+
import { makeSenderRequest } from "../utils/account-request.js";
|
|
20
|
+
function pool(client, stakeAlias) {
|
|
21
|
+
const id = client.config.packages.waterx_staking?.pools?.[stakeAlias];
|
|
22
|
+
if (!id) {
|
|
23
|
+
throw new Error(`config.packages.waterx_staking.pools[${stakeAlias}] is not set — staking is not deployed for this stake type`);
|
|
24
|
+
}
|
|
25
|
+
return id;
|
|
26
|
+
}
|
|
27
|
+
function stakingPackage(client) {
|
|
28
|
+
const pkg = client.config.packages.waterx_staking?.published_at;
|
|
29
|
+
if (!pkg)
|
|
30
|
+
throw new Error("config.packages.waterx_staking is not configured");
|
|
31
|
+
return pkg;
|
|
32
|
+
}
|
|
33
|
+
export function stake(client, tx, params) {
|
|
34
|
+
const pkg = stakingPackage(client);
|
|
35
|
+
const poolId = pool(client, params.stakeAlias);
|
|
36
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
37
|
+
const [checker] = staking.deposit({
|
|
38
|
+
package: pkg,
|
|
39
|
+
arguments: {
|
|
40
|
+
self: tx.object(poolId),
|
|
41
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
42
|
+
accountId: params.accountId,
|
|
43
|
+
accReq: req,
|
|
44
|
+
stakeAmount: params.stakeAmount,
|
|
45
|
+
},
|
|
46
|
+
typeArguments: [params.stakeType],
|
|
47
|
+
})(tx);
|
|
48
|
+
for (const r of params.rewarderTypes ?? []) {
|
|
49
|
+
staking.settleRewarderOnDeposit({
|
|
50
|
+
package: pkg,
|
|
51
|
+
arguments: {
|
|
52
|
+
checker: checker,
|
|
53
|
+
self: tx.object(poolId),
|
|
54
|
+
},
|
|
55
|
+
typeArguments: [params.stakeType, r],
|
|
56
|
+
})(tx);
|
|
57
|
+
}
|
|
58
|
+
staking.destroyDepositChecker({
|
|
59
|
+
package: pkg,
|
|
60
|
+
arguments: { checker: checker },
|
|
61
|
+
typeArguments: [params.stakeType],
|
|
62
|
+
})(tx);
|
|
63
|
+
}
|
|
64
|
+
export function unstake(client, tx, params) {
|
|
65
|
+
const pkg = stakingPackage(client);
|
|
66
|
+
const poolId = pool(client, params.stakeAlias);
|
|
67
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
68
|
+
const [checker] = staking.redeem({
|
|
69
|
+
package: pkg,
|
|
70
|
+
arguments: {
|
|
71
|
+
self: tx.object(poolId),
|
|
72
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
73
|
+
accountId: params.accountId,
|
|
74
|
+
accReq: req,
|
|
75
|
+
withdrawalAmount: params.withdrawalAmount,
|
|
76
|
+
},
|
|
77
|
+
typeArguments: [params.stakeType],
|
|
78
|
+
})(tx);
|
|
79
|
+
for (const r of params.rewarderTypes ?? []) {
|
|
80
|
+
staking.settleRewarderOnWithdraw({
|
|
81
|
+
package: pkg,
|
|
82
|
+
arguments: {
|
|
83
|
+
checker: checker,
|
|
84
|
+
self: tx.object(poolId),
|
|
85
|
+
},
|
|
86
|
+
typeArguments: [params.stakeType, r],
|
|
87
|
+
})(tx);
|
|
88
|
+
}
|
|
89
|
+
staking.destroyWithdrawChecker({
|
|
90
|
+
package: pkg,
|
|
91
|
+
arguments: { checker: checker },
|
|
92
|
+
typeArguments: [params.stakeType],
|
|
93
|
+
})(tx);
|
|
94
|
+
}
|
|
95
|
+
export function claimReward(client, tx, params) {
|
|
96
|
+
const pkg = stakingPackage(client);
|
|
97
|
+
const poolId = pool(client, params.stakeAlias);
|
|
98
|
+
const req = makeSenderRequest(client, tx, params.bucketAccount);
|
|
99
|
+
staking.claim({
|
|
100
|
+
package: pkg,
|
|
101
|
+
arguments: {
|
|
102
|
+
self: tx.object(poolId),
|
|
103
|
+
wxaRegistry: tx.object(client.config.packages.waterx_account.account_registry),
|
|
104
|
+
accountId: params.accountId,
|
|
105
|
+
request: req,
|
|
106
|
+
},
|
|
107
|
+
typeArguments: [params.stakeType, params.rewardType],
|
|
108
|
+
})(tx);
|
|
109
|
+
}
|