@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,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level transaction builders that compose oracle refresh + the
|
|
3
|
+
* appropriate `*_request` + `execute` for a single user-side action.
|
|
4
|
+
*
|
|
5
|
+
* Each top-level builder:
|
|
6
|
+
* 1. Creates a fresh `Transaction` (or appends to one you pass in).
|
|
7
|
+
* 2. Refreshes the on-chain `Oracle` for the base + collateral tickers
|
|
8
|
+
* via Pyth (uses `utils/pyth.ts`).
|
|
9
|
+
* 3. Calls the request builder.
|
|
10
|
+
* 4. If `useSponsor` (default true on testnet): opens a Fund via
|
|
11
|
+
* `pyth_sponsor_rule::request`, then closes it with `reimburse`
|
|
12
|
+
* which attaches the `PythSponsorRule` witness to the
|
|
13
|
+
* TradingRequest so the market's `request_checklist` is satisfied.
|
|
14
|
+
* 5. Executes the trading request via `trading::execute`.
|
|
15
|
+
*/
|
|
16
|
+
import { Transaction, type TransactionArgument } from "@mysten/sui/transactions";
|
|
17
|
+
import type { WaterXClient } from "./client.ts";
|
|
18
|
+
import { type RedeemVaaParams, type RouteWormholeParams } from "./user/credit.ts";
|
|
19
|
+
import { type AddPreOrderRequestParams, type CancelOrderRequestParams, type CancelPreOrderRequestParams, type PlaceOrderRequestParams, type UpdateOrderRequestParams } from "./user/order.ts";
|
|
20
|
+
import { type ClosePositionRequestParams, type DecreasePositionRequestParams, type DepositCollateralRequestParams, type IncreasePositionRequestParams, type WithdrawCollateralRequestParams } from "./user/trading.ts";
|
|
21
|
+
import { type CancelRedeemWlpParams, type MintWlpParams, type RequestRedeemWlpParams } from "./user/wlp.ts";
|
|
22
|
+
import { openPythSponsorFund, PythCache, refreshOraclePrices, reimbursePythSponsor, updatePythPrices } from "./utils/pyth.ts";
|
|
23
|
+
export interface CommonBuildOpts {
|
|
24
|
+
/** Append to an existing PTB instead of creating a new one. */
|
|
25
|
+
tx?: Transaction;
|
|
26
|
+
/** Skip oracle refresh entirely (caller manages freshness). Default: false. */
|
|
27
|
+
skipOraclePriceRefresh?: boolean;
|
|
28
|
+
/** Share a `PythCache` across builders to avoid redundant pyth_state reads. */
|
|
29
|
+
pythCache?: PythCache;
|
|
30
|
+
/**
|
|
31
|
+
* Wire the `pyth_sponsor_rule` flow:
|
|
32
|
+
* - open a Fund via `pyth_sponsor_rule::request(sponsor)`
|
|
33
|
+
* - pay Pyth update fees from the Fund (instead of `tx.gas`)
|
|
34
|
+
* - reimburse leftover into the sponsor pool + attach
|
|
35
|
+
* `PythSponsorRule` witness to the TradingRequest so markets
|
|
36
|
+
* whose `request_checklist` contains `PythSponsorRule` accept it
|
|
37
|
+
* Default: true (matches the testnet/mainnet checklist config).
|
|
38
|
+
* Pass `false` only when the market checklist is empty.
|
|
39
|
+
*/
|
|
40
|
+
useSponsor?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface BuildClosePositionParams extends ClosePositionRequestParams, CommonBuildOpts {
|
|
43
|
+
collateralTicker?: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function buildClosePositionTx(client: WaterXClient, params: BuildClosePositionParams): Promise<Transaction>;
|
|
46
|
+
export interface BuildIncreasePositionParams extends IncreasePositionRequestParams, CommonBuildOpts {
|
|
47
|
+
collateralTicker?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function buildIncreasePositionTx(client: WaterXClient, params: BuildIncreasePositionParams): Promise<Transaction>;
|
|
50
|
+
export interface BuildDecreasePositionParams extends DecreasePositionRequestParams, CommonBuildOpts {
|
|
51
|
+
collateralTicker?: string;
|
|
52
|
+
}
|
|
53
|
+
export declare function buildDecreasePositionTx(client: WaterXClient, params: BuildDecreasePositionParams): Promise<Transaction>;
|
|
54
|
+
export interface BuildDepositCollateralParams extends DepositCollateralRequestParams, CommonBuildOpts {
|
|
55
|
+
collateralTicker?: string;
|
|
56
|
+
}
|
|
57
|
+
export declare function buildDepositCollateralTx(client: WaterXClient, params: BuildDepositCollateralParams): Promise<Transaction>;
|
|
58
|
+
export interface BuildWithdrawCollateralParams extends WithdrawCollateralRequestParams, CommonBuildOpts {
|
|
59
|
+
collateralTicker?: string;
|
|
60
|
+
}
|
|
61
|
+
export declare function buildWithdrawCollateralTx(client: WaterXClient, params: BuildWithdrawCollateralParams): Promise<Transaction>;
|
|
62
|
+
export interface BuildPlaceOrderParams extends PlaceOrderRequestParams, CommonBuildOpts {
|
|
63
|
+
collateralTicker?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function buildPlaceOrderTx(client: WaterXClient, params: BuildPlaceOrderParams): Promise<Transaction>;
|
|
66
|
+
export interface BuildCancelOrderParams extends CancelOrderRequestParams, CommonBuildOpts {
|
|
67
|
+
collateralTicker?: string;
|
|
68
|
+
}
|
|
69
|
+
export declare function buildCancelOrderTx(client: WaterXClient, params: BuildCancelOrderParams): Promise<Transaction>;
|
|
70
|
+
export interface BuildUpdateOrderParams extends UpdateOrderRequestParams, CommonBuildOpts {
|
|
71
|
+
collateralTicker?: string;
|
|
72
|
+
}
|
|
73
|
+
export declare function buildUpdateOrderTx(client: WaterXClient, params: BuildUpdateOrderParams): Promise<Transaction>;
|
|
74
|
+
export interface BuildCancelPreOrderParams extends CancelPreOrderRequestParams, CommonBuildOpts {
|
|
75
|
+
collateralTicker?: string;
|
|
76
|
+
}
|
|
77
|
+
export declare function buildCancelPreOrderTx(client: WaterXClient, params: BuildCancelPreOrderParams): Promise<Transaction>;
|
|
78
|
+
export interface BuildAddPreOrderParams extends AddPreOrderRequestParams, CommonBuildOpts {
|
|
79
|
+
collateralTicker?: string;
|
|
80
|
+
}
|
|
81
|
+
export declare function buildAddPreOrderTx(client: WaterXClient, params: BuildAddPreOrderParams): Promise<Transaction>;
|
|
82
|
+
export interface BuildMintWlpParams extends MintWlpParams, CommonBuildOpts {
|
|
83
|
+
/** Oracle ticker for the deposited token (must be a registered pool token). */
|
|
84
|
+
depositTicker: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Mints WLP from a deposit asset already in the wxa account's stored
|
|
88
|
+
* balance. Refreshes every pool-token oracle + bumps each pool token's
|
|
89
|
+
* `last_price_refresh_timestamp` so `assert_prices_fresh` inside
|
|
90
|
+
* `mint_wlp` passes.
|
|
91
|
+
*
|
|
92
|
+
* Does NOT use the pyth_sponsor flow — `mint_wlp` produces no
|
|
93
|
+
* `TradingRequest`, so there's nothing for the sponsor to attach its
|
|
94
|
+
* witness to. Pyth update fees come from `tx.gas`.
|
|
95
|
+
*/
|
|
96
|
+
export declare function buildMintWlpTx(client: WaterXClient, params: BuildMintWlpParams): Promise<Transaction>;
|
|
97
|
+
export interface BuildMintAndStakeWlpParams extends BuildMintWlpParams {
|
|
98
|
+
/**
|
|
99
|
+
* Staking pool alias (key into `waterx_staking.pools`). Defaults to `"WLP"`.
|
|
100
|
+
*/
|
|
101
|
+
stakeAlias?: string;
|
|
102
|
+
/**
|
|
103
|
+
* Rewarder coin types to settle on the stake deposit. Order must match the
|
|
104
|
+
* pool's on-chain `rewarder_ids`. Defaults to every rewarder configured for
|
|
105
|
+
* the stake pool in `waterx_staking.rewarders[stakeAlias]`.
|
|
106
|
+
*/
|
|
107
|
+
rewarderTypes?: string[];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Mints WLP and immediately stakes the minted amount into the WLP staking pool
|
|
111
|
+
* in the same PTB. The mint's `lp_amount` return is piped directly into the
|
|
112
|
+
* `stake` call so no precision loss / dust can occur.
|
|
113
|
+
*
|
|
114
|
+
* Use this instead of `buildMintWlpTx` when the product flow is "deposit USD
|
|
115
|
+
* and earn rewards" — un-staked WLP sitting in the wxa account's `Balance<WLP>`
|
|
116
|
+
* slot earns nothing.
|
|
117
|
+
*/
|
|
118
|
+
export declare function buildMintAndStakeWlpTx(client: WaterXClient, params: BuildMintAndStakeWlpParams): Promise<Transaction>;
|
|
119
|
+
export interface BuildUnstakeAndRequestRedeemWlpParams extends Omit<RequestRedeemWlpParams, "lpAmount">, CommonBuildOpts {
|
|
120
|
+
/** Amount of staked WLP to unstake and enqueue for redemption. */
|
|
121
|
+
withdrawalAmount: bigint | number;
|
|
122
|
+
/** Staking pool alias. Defaults to `"WLP"`. */
|
|
123
|
+
stakeAlias?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Rewarder coin types to settle on unstake. Defaults to every rewarder
|
|
126
|
+
* configured for the stake pool in `waterx_staking.rewarders[stakeAlias]`.
|
|
127
|
+
*/
|
|
128
|
+
rewarderTypes?: string[];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Unstakes WLP from the staking pool and immediately enqueues a redeem request
|
|
132
|
+
* in the same PTB. Mirror of `buildMintAndStakeWlpTx` for withdrawals.
|
|
133
|
+
*
|
|
134
|
+
* Refreshes every WLP pool-token oracle by default — `request_redeem` runs
|
|
135
|
+
* `assert_prices_fresh` internally, so a stale oracle would abort the PTB.
|
|
136
|
+
* Pass `skipOraclePriceRefresh: true` only when the caller is composing this
|
|
137
|
+
* into a larger PTB that already pre-pumps prices.
|
|
138
|
+
*/
|
|
139
|
+
export declare function buildUnstakeAndRequestRedeemWlpTx(client: WaterXClient, params: BuildUnstakeAndRequestRedeemWlpParams): Promise<Transaction>;
|
|
140
|
+
export interface BuildCancelRedeemAndStakeWlpParams extends CancelRedeemWlpParams, CommonBuildOpts {
|
|
141
|
+
accountId: string;
|
|
142
|
+
/**
|
|
143
|
+
* WLP amount (base units) that was originally enqueued by `request_redeem`
|
|
144
|
+
* and is being returned to the wxa account by `cancel_redeem` — gets
|
|
145
|
+
* re-staked into the WLP staking pool in the same PTB.
|
|
146
|
+
*/
|
|
147
|
+
stakeAmount: bigint | number;
|
|
148
|
+
/** Staking pool alias. Defaults to `"WLP"`. */
|
|
149
|
+
stakeAlias?: string;
|
|
150
|
+
/**
|
|
151
|
+
* Rewarder coin types to settle on stake. Defaults to every rewarder
|
|
152
|
+
* configured for the stake pool in `waterx_staking.rewarders[stakeAlias]`.
|
|
153
|
+
*/
|
|
154
|
+
rewarderTypes?: string[];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Cancels a pending WLP redeem request and re-stakes the returned WLP in the
|
|
158
|
+
* same PTB. Third partner of `buildMintAndStakeWlpTx` /
|
|
159
|
+
* `buildUnstakeAndRequestRedeemWlpTx`; together they keep the product
|
|
160
|
+
* invariant that user-held WLP is always staked.
|
|
161
|
+
*/
|
|
162
|
+
export declare function buildCancelRedeemAndStakeWlpTx(client: WaterXClient, params: BuildCancelRedeemAndStakeWlpParams): Transaction;
|
|
163
|
+
export interface BuildClaimRewardsToAccountParams extends CommonBuildOpts {
|
|
164
|
+
accountId: string;
|
|
165
|
+
/** Staking pool alias. Defaults to `"WLP"`. */
|
|
166
|
+
stakeAlias?: string;
|
|
167
|
+
/** Fully-qualified stake coin type. Defaults to `client.wlpType()`. */
|
|
168
|
+
stakeType?: string;
|
|
169
|
+
/**
|
|
170
|
+
* Reward coin types to claim. Defaults to every rewarder configured for the
|
|
171
|
+
* stake pool in `waterx_staking.rewarders[stakeAlias]`.
|
|
172
|
+
*/
|
|
173
|
+
rewarderTypes?: string[];
|
|
174
|
+
bucketAccount?: string | TransactionArgument;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Claims every accrued reward for `accountId` on the given stake pool. Each
|
|
178
|
+
* resulting `Coin<R>` is TTO'd to the wxa account's UID address via
|
|
179
|
+
* `wxa_account::transfer_coin<R>` (the default behaviour of the Move
|
|
180
|
+
* `staking::claim` entry — no deposit-policy registration required for the
|
|
181
|
+
* reward token). The account owner collects each coin via
|
|
182
|
+
* `wxa_account::receive` in a separate user action.
|
|
183
|
+
*/
|
|
184
|
+
export declare function buildClaimRewardsToAccountTx(client: WaterXClient, params: BuildClaimRewardsToAccountParams): Transaction;
|
|
185
|
+
export interface BuildRedeemVaaParams extends RedeemVaaParams {
|
|
186
|
+
/** Append to an existing PTB instead of creating a new one. */
|
|
187
|
+
tx?: Transaction;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Mint (EVM → Sui): `redeem_vaa<CREDIT>` + consume the resulting
|
|
191
|
+
* `DepositRequest<CREDIT>` via the configured wxa deposit policy, in one
|
|
192
|
+
* PTB. The recipient wxa account is encoded in the VAA payload.
|
|
193
|
+
*/
|
|
194
|
+
export declare function buildRedeemVaaTx(client: WaterXClient, params: BuildRedeemVaaParams): Transaction;
|
|
195
|
+
export type CreditWithdrawRoute = ({
|
|
196
|
+
kind: "wormhole";
|
|
197
|
+
} & RouteWormholeParams) | {
|
|
198
|
+
kind: "native";
|
|
199
|
+
assetType: string;
|
|
200
|
+
};
|
|
201
|
+
export interface BuildRequestCreditWithdrawParams {
|
|
202
|
+
accountId: string;
|
|
203
|
+
amount: bigint | number;
|
|
204
|
+
/** Sui-side recipient (honored for native payouts; ignored for wormhole). */
|
|
205
|
+
recipient: string;
|
|
206
|
+
route: CreditWithdrawRoute;
|
|
207
|
+
creditType?: string;
|
|
208
|
+
bucketAccount?: string | TransactionArgument;
|
|
209
|
+
tx?: Transaction;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Withdraw (user side): encode the route, `account::request_withdraw<CREDIT>`,
|
|
213
|
+
* then `withdrawal_queue::enqueue<CREDIT>` — all in one PTB. A keeper later
|
|
214
|
+
* drains the parked entry via {@link buildExecuteWithdrawalTx}.
|
|
215
|
+
*/
|
|
216
|
+
export declare function buildRequestCreditWithdrawTx(client: WaterXClient, params: BuildRequestCreditWithdrawParams): Transaction;
|
|
217
|
+
export type ExecuteWithdrawalRoute = {
|
|
218
|
+
kind: "wormhole";
|
|
219
|
+
/**
|
|
220
|
+
* `Coin<SUI>` paying the Wormhole message fee. Omit to mint a zero-value
|
|
221
|
+
* coin via `0x2::coin::zero<SUI>` — sponsor-safe (never touches `tx.gas`,
|
|
222
|
+
* so Shinami-style gas stations don't reject the PTB) and free as long as
|
|
223
|
+
* `WormholeState.message_fee == 0`. Pass an explicit coin (e.g.
|
|
224
|
+
* `tx.object(...)`) once Wormhole raises the message fee.
|
|
225
|
+
*/
|
|
226
|
+
wormholeFeeCoin?: TransactionArgument;
|
|
227
|
+
} | {
|
|
228
|
+
kind: "native";
|
|
229
|
+
assetType: string;
|
|
230
|
+
};
|
|
231
|
+
export interface BuildExecuteWithdrawalParams {
|
|
232
|
+
/** Queue entry key (from the `Enqueued` event). */
|
|
233
|
+
key: bigint | number;
|
|
234
|
+
route: ExecuteWithdrawalRoute;
|
|
235
|
+
creditType?: string;
|
|
236
|
+
/** Executor identity (must be on the queue allowlist). Defaults to tx sender. */
|
|
237
|
+
bucketAccount?: string | TransactionArgument;
|
|
238
|
+
tx?: Transaction;
|
|
239
|
+
}
|
|
240
|
+
/** Keeper: drain one parked queue entry. */
|
|
241
|
+
export declare function buildExecuteWithdrawalTx(client: WaterXClient, params: BuildExecuteWithdrawalParams): Transaction;
|
|
242
|
+
export { openPythSponsorFund, PythCache, refreshOraclePrices, reimbursePythSponsor, updatePythPrices, };
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level transaction builders that compose oracle refresh + the
|
|
3
|
+
* appropriate `*_request` + `execute` for a single user-side action.
|
|
4
|
+
*
|
|
5
|
+
* Each top-level builder:
|
|
6
|
+
* 1. Creates a fresh `Transaction` (or appends to one you pass in).
|
|
7
|
+
* 2. Refreshes the on-chain `Oracle` for the base + collateral tickers
|
|
8
|
+
* via Pyth (uses `utils/pyth.ts`).
|
|
9
|
+
* 3. Calls the request builder.
|
|
10
|
+
* 4. If `useSponsor` (default true on testnet): opens a Fund via
|
|
11
|
+
* `pyth_sponsor_rule::request`, then closes it with `reimburse`
|
|
12
|
+
* which attaches the `PythSponsorRule` witness to the
|
|
13
|
+
* TradingRequest so the market's `request_checklist` is satisfied.
|
|
14
|
+
* 5. Executes the trading request via `trading::execute`.
|
|
15
|
+
*/
|
|
16
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
17
|
+
import { consumeCreditDeposit, enqueueWithdrawal, executeWithdrawalNative, executeWithdrawalWormhole, redeemVaa, requestCreditWithdraw, routeNative, routeWormhole, } from "./user/credit.js";
|
|
18
|
+
import { addPreOrderRequest, cancelOrderRequest, cancelPreOrderRequest, placeOrderRequest, updateOrderRequest, } from "./user/order.js";
|
|
19
|
+
import { claimReward, stake, unstake } from "./user/staking.js";
|
|
20
|
+
import { closePositionRequest, decreasePositionRequest, depositCollateralRequest, executeTrading, increasePositionRequest, withdrawCollateralRequest, } from "./user/trading.js";
|
|
21
|
+
import { cancelRedeemWlp, mintWlp, requestRedeemWlp, updateTokenValue, } from "./user/wlp.js";
|
|
22
|
+
import { getCollateralAssets } from "./utils/config.js";
|
|
23
|
+
import { openPythSponsorFund, PythCache, refreshOraclePrices, reimbursePythSponsor, updatePythPrices, } from "./utils/pyth.js";
|
|
24
|
+
function newTx(opts) {
|
|
25
|
+
return opts?.tx ?? new Transaction();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Refresh every WLP pool-token oracle (+ caller-supplied extra tickers) and
|
|
29
|
+
* bump each pool token's `last_price_refresh_timestamp` so the pool's
|
|
30
|
+
* `assert_prices_fresh` passes when the next `mint_wlp` / `request_redeem` /
|
|
31
|
+
* trading `execute` runs in the same PTB.
|
|
32
|
+
*/
|
|
33
|
+
async function refreshWlpPoolOracles(tx, client, extraTickers, opts) {
|
|
34
|
+
const poolTickers = getCollateralAssets(client.config);
|
|
35
|
+
const oracleTickers = Array.from(new Set([...extraTickers, ...poolTickers]));
|
|
36
|
+
await refreshOraclePrices(tx, client, oracleTickers, {
|
|
37
|
+
cache: opts.cache,
|
|
38
|
+
sponsorFund: opts.sponsorFund,
|
|
39
|
+
});
|
|
40
|
+
for (const tokenType of Object.values(client.config.packages.wlp.pool_tokens)) {
|
|
41
|
+
updateTokenValue(client, tx, { tokenType, lpType: opts.lpType });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build the *Request + execute envelope with optional Pyth sponsor flow:
|
|
46
|
+
*
|
|
47
|
+
* [fund = sponsor.request()]
|
|
48
|
+
* refreshOraclePrices(..., sponsorFund?)
|
|
49
|
+
* req = buildRequest()
|
|
50
|
+
* [sponsor.reimburse(fund, req)]
|
|
51
|
+
* trading::execute(req)
|
|
52
|
+
*/
|
|
53
|
+
async function wrapRequestAndExecute(client, tx, req, collateralTicker, opts, buildRequest) {
|
|
54
|
+
const useSponsor = opts?.useSponsor ?? true;
|
|
55
|
+
let sponsorFund;
|
|
56
|
+
if (useSponsor)
|
|
57
|
+
sponsorFund = openPythSponsorFund(tx, client);
|
|
58
|
+
if (!opts?.skipOraclePriceRefresh) {
|
|
59
|
+
await refreshWlpPoolOracles(tx, client, [req.ticker, collateralTicker], {
|
|
60
|
+
cache: opts?.pythCache,
|
|
61
|
+
sponsorFund,
|
|
62
|
+
lpType: req.lpType,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const tradingReq = buildRequest(sponsorFund);
|
|
66
|
+
if (sponsorFund) {
|
|
67
|
+
reimbursePythSponsor(tx, client, sponsorFund.fund, tradingReq, req.collateralType);
|
|
68
|
+
}
|
|
69
|
+
executeTrading(client, tx, {
|
|
70
|
+
ticker: req.ticker,
|
|
71
|
+
collateralType: req.collateralType,
|
|
72
|
+
lpType: req.lpType,
|
|
73
|
+
request: tradingReq,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export async function buildClosePositionTx(client, params) {
|
|
77
|
+
const tx = newTx(params);
|
|
78
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => closePositionRequest(client, tx, params));
|
|
79
|
+
return tx;
|
|
80
|
+
}
|
|
81
|
+
export async function buildIncreasePositionTx(client, params) {
|
|
82
|
+
const tx = newTx(params);
|
|
83
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => increasePositionRequest(client, tx, params));
|
|
84
|
+
return tx;
|
|
85
|
+
}
|
|
86
|
+
export async function buildDecreasePositionTx(client, params) {
|
|
87
|
+
const tx = newTx(params);
|
|
88
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => decreasePositionRequest(client, tx, params));
|
|
89
|
+
return tx;
|
|
90
|
+
}
|
|
91
|
+
export async function buildDepositCollateralTx(client, params) {
|
|
92
|
+
const tx = newTx(params);
|
|
93
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => depositCollateralRequest(client, tx, params));
|
|
94
|
+
return tx;
|
|
95
|
+
}
|
|
96
|
+
export async function buildWithdrawCollateralTx(client, params) {
|
|
97
|
+
const tx = newTx(params);
|
|
98
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => withdrawCollateralRequest(client, tx, params));
|
|
99
|
+
return tx;
|
|
100
|
+
}
|
|
101
|
+
export async function buildPlaceOrderTx(client, params) {
|
|
102
|
+
const tx = newTx(params);
|
|
103
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => placeOrderRequest(client, tx, params));
|
|
104
|
+
return tx;
|
|
105
|
+
}
|
|
106
|
+
export async function buildCancelOrderTx(client, params) {
|
|
107
|
+
const tx = newTx(params);
|
|
108
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => cancelOrderRequest(client, tx, params));
|
|
109
|
+
return tx;
|
|
110
|
+
}
|
|
111
|
+
export async function buildUpdateOrderTx(client, params) {
|
|
112
|
+
const tx = newTx(params);
|
|
113
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => updateOrderRequest(client, tx, params));
|
|
114
|
+
return tx;
|
|
115
|
+
}
|
|
116
|
+
export async function buildCancelPreOrderTx(client, params) {
|
|
117
|
+
const tx = newTx(params);
|
|
118
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => cancelPreOrderRequest(client, tx, params));
|
|
119
|
+
return tx;
|
|
120
|
+
}
|
|
121
|
+
export async function buildAddPreOrderTx(client, params) {
|
|
122
|
+
const tx = newTx(params);
|
|
123
|
+
await wrapRequestAndExecute(client, tx, params, params.collateralTicker ?? "USDCUSD", params, () => addPreOrderRequest(client, tx, params));
|
|
124
|
+
return tx;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Mints WLP from a deposit asset already in the wxa account's stored
|
|
128
|
+
* balance. Refreshes every pool-token oracle + bumps each pool token's
|
|
129
|
+
* `last_price_refresh_timestamp` so `assert_prices_fresh` inside
|
|
130
|
+
* `mint_wlp` passes.
|
|
131
|
+
*
|
|
132
|
+
* Does NOT use the pyth_sponsor flow — `mint_wlp` produces no
|
|
133
|
+
* `TradingRequest`, so there's nothing for the sponsor to attach its
|
|
134
|
+
* witness to. Pyth update fees come from `tx.gas`.
|
|
135
|
+
*/
|
|
136
|
+
export async function buildMintWlpTx(client, params) {
|
|
137
|
+
const tx = newTx(params);
|
|
138
|
+
if (!params.skipOraclePriceRefresh) {
|
|
139
|
+
await refreshWlpPoolOracles(tx, client, [params.depositTicker], {
|
|
140
|
+
cache: params.pythCache,
|
|
141
|
+
lpType: params.lpType,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
mintWlp(client, tx, params);
|
|
145
|
+
return tx;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Mints WLP and immediately stakes the minted amount into the WLP staking pool
|
|
149
|
+
* in the same PTB. The mint's `lp_amount` return is piped directly into the
|
|
150
|
+
* `stake` call so no precision loss / dust can occur.
|
|
151
|
+
*
|
|
152
|
+
* Use this instead of `buildMintWlpTx` when the product flow is "deposit USD
|
|
153
|
+
* and earn rewards" — un-staked WLP sitting in the wxa account's `Balance<WLP>`
|
|
154
|
+
* slot earns nothing.
|
|
155
|
+
*/
|
|
156
|
+
export async function buildMintAndStakeWlpTx(client, params) {
|
|
157
|
+
const tx = newTx(params);
|
|
158
|
+
if (!params.skipOraclePriceRefresh) {
|
|
159
|
+
await refreshWlpPoolOracles(tx, client, [params.depositTicker], {
|
|
160
|
+
cache: params.pythCache,
|
|
161
|
+
lpType: params.lpType,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
const stakeAlias = params.stakeAlias ?? "WLP";
|
|
165
|
+
const lpAmount = mintWlp(client, tx, params);
|
|
166
|
+
stake(client, tx, {
|
|
167
|
+
accountId: params.accountId,
|
|
168
|
+
stakeAlias,
|
|
169
|
+
stakeType: params.lpType ?? client.wlpType(),
|
|
170
|
+
stakeAmount: lpAmount,
|
|
171
|
+
rewarderTypes: params.rewarderTypes ?? client.getRewarderTypes(stakeAlias),
|
|
172
|
+
bucketAccount: params.bucketAccount,
|
|
173
|
+
});
|
|
174
|
+
return tx;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Unstakes WLP from the staking pool and immediately enqueues a redeem request
|
|
178
|
+
* in the same PTB. Mirror of `buildMintAndStakeWlpTx` for withdrawals.
|
|
179
|
+
*
|
|
180
|
+
* Refreshes every WLP pool-token oracle by default — `request_redeem` runs
|
|
181
|
+
* `assert_prices_fresh` internally, so a stale oracle would abort the PTB.
|
|
182
|
+
* Pass `skipOraclePriceRefresh: true` only when the caller is composing this
|
|
183
|
+
* into a larger PTB that already pre-pumps prices.
|
|
184
|
+
*/
|
|
185
|
+
export async function buildUnstakeAndRequestRedeemWlpTx(client, params) {
|
|
186
|
+
const tx = newTx(params);
|
|
187
|
+
const stakeAlias = params.stakeAlias ?? "WLP";
|
|
188
|
+
if (!params.skipOraclePriceRefresh) {
|
|
189
|
+
await refreshWlpPoolOracles(tx, client, [], {
|
|
190
|
+
cache: params.pythCache,
|
|
191
|
+
lpType: params.lpType,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
unstake(client, tx, {
|
|
195
|
+
accountId: params.accountId,
|
|
196
|
+
stakeAlias,
|
|
197
|
+
stakeType: params.lpType ?? client.wlpType(),
|
|
198
|
+
withdrawalAmount: params.withdrawalAmount,
|
|
199
|
+
rewarderTypes: params.rewarderTypes ?? client.getRewarderTypes(stakeAlias),
|
|
200
|
+
bucketAccount: params.bucketAccount,
|
|
201
|
+
});
|
|
202
|
+
requestRedeemWlp(client, tx, {
|
|
203
|
+
accountId: params.accountId,
|
|
204
|
+
redeemTokenType: params.redeemTokenType,
|
|
205
|
+
lpAmount: params.withdrawalAmount,
|
|
206
|
+
lpType: params.lpType,
|
|
207
|
+
bucketAccount: params.bucketAccount,
|
|
208
|
+
});
|
|
209
|
+
return tx;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Cancels a pending WLP redeem request and re-stakes the returned WLP in the
|
|
213
|
+
* same PTB. Third partner of `buildMintAndStakeWlpTx` /
|
|
214
|
+
* `buildUnstakeAndRequestRedeemWlpTx`; together they keep the product
|
|
215
|
+
* invariant that user-held WLP is always staked.
|
|
216
|
+
*/
|
|
217
|
+
export function buildCancelRedeemAndStakeWlpTx(client, params) {
|
|
218
|
+
const tx = newTx(params);
|
|
219
|
+
const stakeAlias = params.stakeAlias ?? "WLP";
|
|
220
|
+
cancelRedeemWlp(client, tx, {
|
|
221
|
+
requestId: params.requestId,
|
|
222
|
+
lpType: params.lpType,
|
|
223
|
+
bucketAccount: params.bucketAccount,
|
|
224
|
+
});
|
|
225
|
+
stake(client, tx, {
|
|
226
|
+
accountId: params.accountId,
|
|
227
|
+
stakeAlias,
|
|
228
|
+
stakeType: params.lpType ?? client.wlpType(),
|
|
229
|
+
stakeAmount: params.stakeAmount,
|
|
230
|
+
rewarderTypes: params.rewarderTypes ?? client.getRewarderTypes(stakeAlias),
|
|
231
|
+
bucketAccount: params.bucketAccount,
|
|
232
|
+
});
|
|
233
|
+
return tx;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Claims every accrued reward for `accountId` on the given stake pool. Each
|
|
237
|
+
* resulting `Coin<R>` is TTO'd to the wxa account's UID address via
|
|
238
|
+
* `wxa_account::transfer_coin<R>` (the default behaviour of the Move
|
|
239
|
+
* `staking::claim` entry — no deposit-policy registration required for the
|
|
240
|
+
* reward token). The account owner collects each coin via
|
|
241
|
+
* `wxa_account::receive` in a separate user action.
|
|
242
|
+
*/
|
|
243
|
+
export function buildClaimRewardsToAccountTx(client, params) {
|
|
244
|
+
const tx = newTx(params);
|
|
245
|
+
const stakeAlias = params.stakeAlias ?? "WLP";
|
|
246
|
+
const stakeType = params.stakeType ?? client.wlpType();
|
|
247
|
+
const rewarderTypes = params.rewarderTypes ?? client.getRewarderTypes(stakeAlias);
|
|
248
|
+
if (rewarderTypes.length === 0) {
|
|
249
|
+
throw new Error(`buildClaimRewardsToAccountTx: no rewarders configured for stakeAlias=${stakeAlias}`);
|
|
250
|
+
}
|
|
251
|
+
for (const rewardType of rewarderTypes) {
|
|
252
|
+
claimReward(client, tx, {
|
|
253
|
+
accountId: params.accountId,
|
|
254
|
+
stakeAlias,
|
|
255
|
+
stakeType,
|
|
256
|
+
rewardType,
|
|
257
|
+
bucketAccount: params.bucketAccount,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return tx;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Mint (EVM → Sui): `redeem_vaa<CREDIT>` + consume the resulting
|
|
264
|
+
* `DepositRequest<CREDIT>` via the configured wxa deposit policy, in one
|
|
265
|
+
* PTB. The recipient wxa account is encoded in the VAA payload.
|
|
266
|
+
*/
|
|
267
|
+
export function buildRedeemVaaTx(client, params) {
|
|
268
|
+
const tx = params.tx ?? new Transaction();
|
|
269
|
+
const req = redeemVaa(client, tx, params);
|
|
270
|
+
consumeCreditDeposit(client, tx, { depositRequest: req, creditType: params.creditType });
|
|
271
|
+
return tx;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Withdraw (user side): encode the route, `account::request_withdraw<CREDIT>`,
|
|
275
|
+
* then `withdrawal_queue::enqueue<CREDIT>` — all in one PTB. A keeper later
|
|
276
|
+
* drains the parked entry via {@link buildExecuteWithdrawalTx}.
|
|
277
|
+
*/
|
|
278
|
+
export function buildRequestCreditWithdrawTx(client, params) {
|
|
279
|
+
const tx = params.tx ?? new Transaction();
|
|
280
|
+
const route = params.route.kind === "wormhole"
|
|
281
|
+
? routeWormhole(client, tx, params.route)
|
|
282
|
+
: routeNative(client, tx, { assetType: params.route.assetType });
|
|
283
|
+
const wreq = requestCreditWithdraw(client, tx, {
|
|
284
|
+
accountId: params.accountId,
|
|
285
|
+
amount: params.amount,
|
|
286
|
+
recipient: params.recipient,
|
|
287
|
+
route,
|
|
288
|
+
creditType: params.creditType,
|
|
289
|
+
bucketAccount: params.bucketAccount,
|
|
290
|
+
});
|
|
291
|
+
enqueueWithdrawal(client, tx, { withdrawRequest: wreq, creditType: params.creditType });
|
|
292
|
+
return tx;
|
|
293
|
+
}
|
|
294
|
+
/** Keeper: drain one parked queue entry. */
|
|
295
|
+
export function buildExecuteWithdrawalTx(client, params) {
|
|
296
|
+
const tx = params.tx ?? new Transaction();
|
|
297
|
+
if (params.route.kind === "wormhole") {
|
|
298
|
+
const fee = params.route.wormholeFeeCoin ??
|
|
299
|
+
tx.moveCall({ target: "0x2::coin::zero", typeArguments: ["0x2::sui::SUI"] });
|
|
300
|
+
executeWithdrawalWormhole(client, tx, {
|
|
301
|
+
key: params.key,
|
|
302
|
+
wormholeFee: fee,
|
|
303
|
+
creditType: params.creditType,
|
|
304
|
+
bucketAccount: params.bucketAccount,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
executeWithdrawalNative(client, tx, {
|
|
309
|
+
key: params.key,
|
|
310
|
+
assetType: params.route.assetType,
|
|
311
|
+
creditType: params.creditType,
|
|
312
|
+
bucketAccount: params.bucketAccount,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return tx;
|
|
316
|
+
}
|
|
317
|
+
// ============================================================================
|
|
318
|
+
// Re-exports
|
|
319
|
+
// ============================================================================
|
|
320
|
+
export { openPythSponsorFund, PythCache, refreshOraclePrices, reimbursePythSponsor, updatePythPrices, };
|