@mysten/deepbook-v3 2.6.4 → 2.8.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/CHANGELOG.md +153 -0
- package/PREDICT.md +389 -61
- package/dist/contracts/account/account.d.mts +23 -23
- package/dist/contracts/account/account.d.mts.map +1 -1
- package/dist/contracts/account/account_registry.d.mts +13 -13
- package/dist/contracts/deepbook/account.d.mts +18 -18
- package/dist/contracts/deepbook/balances.d.mts +4 -4
- package/dist/contracts/deepbook/deep_price.d.mts +3 -3
- package/dist/contracts/deepbook/order.d.mts +12 -12
- package/dist/contracts/deepbook_predict/admin.d.mts +4 -4
- package/dist/contracts/deepbook_predict/builder_code.d.mts +11 -11
- package/dist/contracts/deepbook_predict/builder_code_events.d.mts +10 -10
- package/dist/contracts/deepbook_predict/config_events.d.mts +93 -68
- package/dist/contracts/deepbook_predict/config_events.d.mts.map +1 -1
- package/dist/contracts/deepbook_predict/config_events.mjs +45 -1
- package/dist/contracts/deepbook_predict/config_events.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/deps/std/type_name.mjs +17 -0
- package/dist/contracts/deepbook_predict/deps/std/type_name.mjs.map +1 -0
- package/dist/contracts/deepbook_predict/expiry_market.d.mts +652 -235
- package/dist/contracts/deepbook_predict/expiry_market.d.mts.map +1 -1
- package/dist/contracts/deepbook_predict/expiry_market.mjs +652 -186
- package/dist/contracts/deepbook_predict/expiry_market.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/lp_book.mjs +1 -1
- package/dist/contracts/deepbook_predict/market_lifecycle_cap.d.mts +5 -5
- package/dist/contracts/deepbook_predict/market_manager.d.mts +27 -27
- package/dist/contracts/deepbook_predict/order_events.d.mts +50 -50
- package/dist/contracts/deepbook_predict/order_events.d.mts.map +1 -1
- package/dist/contracts/deepbook_predict/order_events.mjs +3 -1
- package/dist/contracts/deepbook_predict/order_events.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/pause_cap.d.mts +5 -5
- package/dist/contracts/deepbook_predict/plp.d.mts +184 -82
- package/dist/contracts/deepbook_predict/plp.d.mts.map +1 -1
- package/dist/contracts/deepbook_predict/plp.mjs +126 -7
- package/dist/contracts/deepbook_predict/plp.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/pool_accounting.mjs +1 -1
- package/dist/contracts/deepbook_predict/pool_valuation_cap.d.mts +5 -5
- package/dist/contracts/deepbook_predict/predict_account.d.mts +14 -14
- package/dist/contracts/deepbook_predict/pricing.d.mts +91 -58
- package/dist/contracts/deepbook_predict/pricing.d.mts.map +1 -1
- package/dist/contracts/deepbook_predict/pricing.mjs +30 -3
- package/dist/contracts/deepbook_predict/pricing.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/pricing_config.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/protocol_config.d.mts +400 -92
- package/dist/contracts/deepbook_predict/protocol_config.d.mts.map +1 -1
- package/dist/contracts/deepbook_predict/protocol_config.mjs +451 -61
- package/dist/contracts/deepbook_predict/protocol_config.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/range_codec.d.mts +2 -2
- package/dist/contracts/deepbook_predict/registry.d.mts +28 -28
- package/dist/contracts/deepbook_predict/strike_exposure.mjs +1 -1
- package/dist/contracts/deepbook_predict/strike_payout_tree.mjs +17 -12
- package/dist/contracts/deepbook_predict/strike_payout_tree.mjs.map +1 -1
- package/dist/contracts/deepbook_predict/vault_events.d.mts +154 -106
- package/dist/contracts/deepbook_predict/vault_events.d.mts.map +1 -1
- package/dist/contracts/deepbook_predict/vault_events.mjs +57 -1
- package/dist/contracts/deepbook_predict/vault_events.mjs.map +1 -1
- package/dist/contracts/deepbook_predict_math/config-arguments.d.mts +10 -0
- package/dist/contracts/deepbook_predict_math/config-arguments.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_math/lazer_price.d.mts +106 -0
- package/dist/contracts/deepbook_predict_math/lazer_price.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_math/lazer_price.mjs +125 -0
- package/dist/contracts/deepbook_predict_math/lazer_price.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_math/math.d.mts +284 -0
- package/dist/contracts/deepbook_predict_math/math.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_math/math.mjs +364 -0
- package/dist/contracts/deepbook_predict_math/math.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/config-arguments.d.mts +13 -0
- package/dist/contracts/deepbook_predict_orders/config-arguments.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_orders/delayed_execution_config.d.mts +215 -0
- package/dist/contracts/deepbook_predict_orders/delayed_execution_config.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_orders/delayed_execution_config.mjs +215 -0
- package/dist/contracts/deepbook_predict_orders/delayed_execution_config.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/deps/deepbook_predict/expiry_market.mjs +87 -0
- package/dist/contracts/deepbook_predict_orders/deps/deepbook_predict/expiry_market.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/deps/deepbook_predict/pricing.mjs +52 -0
- package/dist/contracts/deepbook_predict_orders/deps/deepbook_predict/pricing.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/deps/fixed_math/i64.mjs +25 -0
- package/dist/contracts/deepbook_predict_orders/deps/fixed_math/i64.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/deps/sui/balance.mjs +21 -0
- package/dist/contracts/deepbook_predict_orders/deps/sui/balance.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/deps/sui/table.mjs +39 -0
- package/dist/contracts/deepbook_predict_orders/deps/sui/table.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/desk.d.mts +187 -0
- package/dist/contracts/deepbook_predict_orders/desk.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_orders/desk.mjs +261 -0
- package/dist/contracts/deepbook_predict_orders/desk.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/order_queue.d.mts +1042 -0
- package/dist/contracts/deepbook_predict_orders/order_queue.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_orders/order_queue.mjs +849 -0
- package/dist/contracts/deepbook_predict_orders/order_queue.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/queue.d.mts +683 -0
- package/dist/contracts/deepbook_predict_orders/queue.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_orders/queue.mjs +912 -0
- package/dist/contracts/deepbook_predict_orders/queue.mjs.map +1 -0
- package/dist/contracts/deepbook_predict_orders/queue_events.d.mts +195 -0
- package/dist/contracts/deepbook_predict_orders/queue_events.d.mts.map +1 -0
- package/dist/contracts/deepbook_predict_orders/queue_events.mjs +187 -0
- package/dist/contracts/deepbook_predict_orders/queue_events.mjs.map +1 -0
- package/dist/contracts/deepbook_sessions/session_config.d.mts +8 -8
- package/dist/contracts/deepbook_sessions/sessions.d.mts +163 -28
- package/dist/contracts/deepbook_sessions/sessions.d.mts.map +1 -1
- package/dist/contracts/deepbook_sessions/sessions.mjs +234 -5
- package/dist/contracts/deepbook_sessions/sessions.mjs.map +1 -1
- package/dist/deployments/mainnet.mjs +7 -4
- package/dist/deployments/mainnet.mjs.map +1 -1
- package/dist/deployments/testnet.mjs +7 -4
- package/dist/deployments/testnet.mjs.map +1 -1
- package/dist/predict/bindings/expiry-market.d.mts +77 -0
- package/dist/predict/bindings/expiry-market.d.mts.map +1 -0
- package/dist/predict/bindings/expiry-market.mjs +139 -0
- package/dist/predict/bindings/expiry-market.mjs.map +1 -0
- package/dist/predict/bindings/protocol-config.d.mts +39 -0
- package/dist/predict/bindings/protocol-config.d.mts.map +1 -0
- package/dist/predict/bindings/protocol-config.mjs +90 -0
- package/dist/predict/bindings/protocol-config.mjs.map +1 -0
- package/dist/predict/bindings/rename.mjs +9 -0
- package/dist/predict/bindings/rename.mjs.map +1 -0
- package/dist/predict/client.d.mts +595 -16
- package/dist/predict/client.d.mts.map +1 -1
- package/dist/predict/client.mjs +986 -10
- package/dist/predict/client.mjs.map +1 -1
- package/dist/predict/config/generated.d.mts +22 -1
- package/dist/predict/config/generated.d.mts.map +1 -1
- package/dist/predict/config/generated.mjs +30 -1
- package/dist/predict/config/generated.mjs.map +1 -1
- package/dist/predict/config/mainnet.mjs +11 -3
- package/dist/predict/config/mainnet.mjs.map +1 -1
- package/dist/predict/config/testnet.mjs +11 -3
- package/dist/predict/config/testnet.mjs.map +1 -1
- package/dist/predict/config/types.d.mts +50 -1
- package/dist/predict/config/types.d.mts.map +1 -1
- package/dist/predict/cost.d.mts +38 -11
- package/dist/predict/cost.d.mts.map +1 -1
- package/dist/predict/cost.mjs +37 -11
- package/dist/predict/cost.mjs.map +1 -1
- package/dist/predict/decode.d.mts +251 -1
- package/dist/predict/decode.d.mts.map +1 -1
- package/dist/predict/decode.mjs +342 -4
- package/dist/predict/decode.mjs.map +1 -1
- package/dist/predict/errors.d.mts +69 -6
- package/dist/predict/errors.d.mts.map +1 -1
- package/dist/predict/errors.mjs +277 -4
- package/dist/predict/errors.mjs.map +1 -1
- package/dist/predict/index.d.mts +21 -10
- package/dist/predict/index.mjs +24 -12
- package/dist/predict/queue-id.d.mts +13 -0
- package/dist/predict/queue-id.d.mts.map +1 -0
- package/dist/predict/queue-id.mjs +19 -0
- package/dist/predict/queue-id.mjs.map +1 -0
- package/dist/predict/queue.d.mts +505 -0
- package/dist/predict/queue.d.mts.map +1 -0
- package/dist/predict/queue.mjs +774 -0
- package/dist/predict/queue.mjs.map +1 -0
- package/dist/predict/reads/balances.mjs +1 -1
- package/dist/predict/reads/markets.mjs +46 -5
- package/dist/predict/reads/markets.mjs.map +1 -1
- package/dist/predict/reads/pool.mjs +1 -1
- package/dist/predict/reads/pricing.d.mts +1 -1
- package/dist/predict/reads/queue.d.mts +105 -0
- package/dist/predict/reads/queue.d.mts.map +1 -0
- package/dist/predict/reads/queue.mjs +445 -0
- package/dist/predict/reads/queue.mjs.map +1 -0
- package/dist/predict/ticks.d.mts +9 -1
- package/dist/predict/ticks.d.mts.map +1 -1
- package/dist/predict/ticks.mjs +18 -1
- package/dist/predict/ticks.mjs.map +1 -1
- package/dist/predict/tx/authed.mjs +1 -1
- package/dist/predict/tx/common.d.mts.map +1 -1
- package/dist/predict/tx/common.mjs +12 -1
- package/dist/predict/tx/common.mjs.map +1 -1
- package/dist/predict/tx/queue.d.mts +220 -0
- package/dist/predict/tx/queue.d.mts.map +1 -0
- package/dist/predict/tx/queue.mjs +399 -0
- package/dist/predict/tx/queue.mjs.map +1 -0
- package/dist/predict/tx/trade.d.mts.map +1 -1
- package/dist/predict/tx/trade.mjs +61 -43
- package/dist/predict/tx/trade.mjs.map +1 -1
- package/dist/sessions.d.mts +90 -2
- package/dist/sessions.d.mts.map +1 -1
- package/dist/sessions.mjs +107 -2
- package/dist/sessions.mjs.map +1 -1
- package/dist/transactions/balanceManager.d.mts +12 -12
- package/dist/transactions/balanceManager.d.mts.map +1 -1
- package/dist/transactions/deepbook.d.mts +20 -20
- package/dist/transactions/deepbook.d.mts.map +1 -1
- package/dist/transactions/deepbookAdmin.d.mts +4 -4
- package/dist/transactions/deepbookAdmin.d.mts.map +1 -1
- package/dist/transactions/marginAdmin.d.mts +7 -7
- package/dist/transactions/marginAdmin.d.mts.map +1 -1
- package/dist/transactions/marginLiquidations.d.mts +3 -3
- package/dist/transactions/marginMaintainer.d.mts +5 -5
- package/dist/transactions/marginMaintainer.d.mts.map +1 -1
- package/dist/transactions/marginManager.d.mts +32 -32
- package/dist/transactions/marginManager.d.mts.map +1 -1
- package/dist/transactions/marginPool.d.mts +18 -18
- package/dist/transactions/marginRegistry.d.mts +16 -16
- package/dist/transactions/marginTPSL.d.mts +10 -10
- package/dist/transactions/marginTPSL.d.mts.map +1 -1
- package/dist/transactions/poolProxy.d.mts +8 -8
- package/dist/transactions/poolProxy.d.mts.map +1 -1
- package/package.json +4 -4
- package/src/contracts/deepbook_predict/config_events.ts +39 -0
- package/src/contracts/deepbook_predict/deps/std/type_name.ts +24 -0
- package/src/contracts/deepbook_predict/expiry_market.ts +960 -169
- package/src/contracts/deepbook_predict/order_events.ts +3 -1
- package/src/contracts/deepbook_predict/plp.ts +150 -9
- package/src/contracts/deepbook_predict/pricing.ts +46 -7
- package/src/contracts/deepbook_predict/pricing_config.ts +3 -1
- package/src/contracts/deepbook_predict/protocol_config.ts +648 -33
- package/src/contracts/deepbook_predict/strike_payout_tree.ts +25 -21
- package/src/contracts/deepbook_predict/vault_events.ts +65 -0
- package/src/contracts/deepbook_predict_math/config-arguments.ts +6 -0
- package/src/contracts/deepbook_predict_math/lazer_price.ts +196 -0
- package/src/contracts/deepbook_predict_math/math.ts +553 -0
- package/src/contracts/deepbook_predict_orders/config-arguments.ts +11 -0
- package/src/contracts/deepbook_predict_orders/delayed_execution_config.ts +430 -0
- package/src/contracts/deepbook_predict_orders/deps/deepbook_predict/expiry_market.ts +108 -0
- package/src/contracts/deepbook_predict_orders/deps/deepbook_predict/pricing.ts +58 -0
- package/src/contracts/deepbook_predict_orders/deps/fixed_math/i64.ts +21 -0
- package/src/contracts/deepbook_predict_orders/deps/sui/balance.ts +19 -0
- package/src/contracts/deepbook_predict_orders/deps/sui/table.ts +37 -0
- package/src/contracts/deepbook_predict_orders/desk.ts +419 -0
- package/src/contracts/deepbook_predict_orders/order_flow.ts +19 -0
- package/src/contracts/deepbook_predict_orders/order_queue.ts +1670 -0
- package/src/contracts/deepbook_predict_orders/queue.ts +1394 -0
- package/src/contracts/deepbook_predict_orders/queue_events.ts +189 -0
- package/src/contracts/deepbook_sessions/sessions.ts +355 -4
- package/src/deployments/mainnet.ts +7 -2
- package/src/deployments/testnet.ts +7 -2
- package/src/deployments/types.ts +14 -1
- package/src/predict/bindings/expiry-market.ts +127 -0
- package/src/predict/bindings/protocol-config.ts +59 -0
- package/src/predict/bindings/rename.ts +14 -0
- package/src/predict/client.ts +2076 -13
- package/src/predict/config/generated.ts +50 -0
- package/src/predict/config/mainnet.ts +16 -2
- package/src/predict/config/testnet.ts +16 -2
- package/src/predict/config/types.ts +51 -1
- package/src/predict/cost.ts +62 -14
- package/src/predict/decode.ts +691 -2
- package/src/predict/errors.ts +391 -14
- package/src/predict/index.ts +87 -6
- package/src/predict/queue-id.ts +22 -0
- package/src/predict/queue.ts +1231 -0
- package/src/predict/reads/markets.ts +30 -0
- package/src/predict/reads/queue.ts +606 -0
- package/src/predict/ticks.ts +35 -0
- package/src/predict/tx/common.ts +25 -1
- package/src/predict/tx/queue.ts +525 -0
- package/src/predict/tx/trade.ts +80 -49
- package/src/sessions.ts +206 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.mjs","names":["queue.enqueueExactQuantity","queue.enqueueExactAmount","queue.enqueueExactCost","queue.enqueueRedeemOpen","policy","desk.policy","delayedExecutionConfig.orderFee","plp.rebalanceExpiryCash","queue.createAndShare","queue.refund","queue.adminRefund","queue.cleanup","queue.settleStep","queue.payOpen","queue.claimParked","queue.commit","queue.resolve"],"sources":["../../../src/predict/tx/queue.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// Delayed execution (DBU-885): composable thunks for queued orders. Each is\n// `(config, args) => (tx) => result`, like `tx/trade.ts`, so an app can put several into one\n// PTB. The `PredictClient.tx.enqueue*` facade adds the chain preflight on top.\n//\n// Every queued-order entry point lives in the order-flow companion, `deepbook_predict_orders`\n// (`queue::*`), and runs against one market's `MarketQueue` plus the companion's shared\n// `OrderDesk`. The queue's ID is derived from the companion's `QueueRegistry` and the market, so\n// each thunk takes it as an optional `queueId` and derives it otherwise. The thunks take\n// `OrdersGeneratedConfig` (`toOrdersConfig(cfg)`), which supplies the companion package, the desk,\n// the registry and Predict's shared objects.\n//\n// Every call that can send USDC (`resolve`, `refund`, `admin_refund`, `settle_step`, `pay_open`,\n// `claim_parked`) also reads Sui's shared `DenyList` (0x403), which the generated bindings inject\n// as a read-only shared input. Nothing sends USDC to an address on USDC's deny list, or while USDC\n// is globally paused: a fill for such a receive address is refused (reason 9), a refund or change\n// is parked in its record (`RecordFundsParked`), and a payout is skipped until `pay_open`.\n//\n// Queued orders read the oracle objects directly for their volatility snapshot, so unlike the\n// retired immediate trades there is no `load_live_pricer` command before them.\nimport type { Transaction, TransactionResult } from '@mysten/sui/transactions';\nimport type { GeneratedConfig, OrdersGeneratedConfig } from '../config/generated.js';\nimport { MIN_PREMIUM } from '../cost.js';\nimport { PredictInputError } from '../errors.js';\nimport { deriveQueueId } from '../queue-id.js';\nimport { U64_MAX } from '../units.js';\nimport * as plp from '../../contracts/deepbook_predict/plp.js';\nimport * as delayedExecutionConfig from '../../contracts/deepbook_predict_orders/delayed_execution_config.js';\nimport * as desk from '../../contracts/deepbook_predict_orders/desk.js';\nimport * as queue from '../../contracts/deepbook_predict_orders/queue.js';\nimport { withAuth } from './common.js';\nimport type { MarketFeeds } from './trade.js';\n\nconst FLOAT_SCALING = 1_000_000_000n;\n\n// The queued placements with their `auth` argument already supplied: auth → enqueue.\nconst authed = {\n\tenqueueExactQuantity: withAuth(queue.enqueueExactQuantity),\n\tenqueueExactAmount: withAuth(queue.enqueueExactAmount),\n\tenqueueExactCost: withAuth(queue.enqueueExactCost),\n\tenqueueRedeemOpen: withAuth(queue.enqueueRedeemOpen),\n};\n\n/** One market's queue. */\nexport interface QueueTarget {\n\texpiryMarketId: string;\n\t/**\n\t * The market's `MarketQueue`. Defaults to `deriveQueueId(config.queueRegistry, expiryMarketId)`,\n\t * the ID `queue::create_and_share` gives it, so pass it only to address another registry's\n\t * queue.\n\t */\n\tqueueId?: string;\n}\n\n/** The queue ID a thunk addresses: the given one, or the one derived from the config's registry. */\nexport function queueIdOf(\n\tconfig: Pick<OrdersGeneratedConfig, 'queueRegistry'>,\n\targs: QueueTarget,\n): string {\n\treturn args.queueId ?? deriveQueueId(config.queueRegistry, args.expiryMarketId);\n}\n\n/** The market, queue and account every queued order names. */\ninterface QueuedOrderTarget extends MarketFeeds, QueueTarget {\n\twrapperId: string;\n}\n\n// The leading arguments every placement shares, after `queue` and `market`.\nfunction placement(config: OrdersGeneratedConfig, args: QueuedOrderTarget) {\n\treturn {\n\t\tqueue: queueIdOf(config, args),\n\t\tmarket: args.expiryMarketId,\n\t\twrapper: args.wrapperId,\n\t\tpyth: args.pythFeed,\n\t\tbsValues: args.blockScholesValueStore,\n\t\tbsSvi: args.blockScholesSviStore,\n\t};\n}\n\n// The chain refuses a zero or \"unlimited\" cap (`EMintCostCapRequired`), so a queued mint always\n// carries a real one. Checked here so a bad cap never reaches a PTB.\nfunction assertMaxCost(maxCostRaw: bigint): void {\n\tif (typeof maxCostRaw !== 'bigint' || maxCostRaw <= 0n || maxCostRaw >= U64_MAX) {\n\t\tthrow new PredictInputError(\n\t\t\t`maxCostRaw must be above 0 and below u64::MAX (a queued mint requires a real cap), got ${String(maxCostRaw)}`,\n\t\t);\n\t}\n}\n\nfunction assertU64(value: bigint, name: string): void {\n\tif (typeof value !== 'bigint' || value < 0n || value > U64_MAX) {\n\t\tthrow new PredictInputError(`${name} must be a u64 bigint, got ${String(value)}`);\n\t}\n}\n\n/**\n * Queue a mint of an exact payout quantity, priced at Pyth's signed price for its τ\n * (`queue::enqueue_exact_quantity`). Returns the record ID (u64). `maxCostRaw` (all-in cap) and\n * `maxProbabilityRaw` (entry-probability cap, at most 1e9) are required: there is no \"unlimited\"\n * default on the queued path. Escrows `min(max_cost, quantity, available − fee)` plus the order\n * fee. Command order is auth → enqueue.\n */\nexport function enqueueExactQuantity(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueuedOrderTarget & {\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tquantityRaw: bigint;\n\t\tmaxCostRaw: bigint;\n\t\tmaxProbabilityRaw: bigint;\n\t},\n): (tx: Transaction) => TransactionResult {\n\tassertMaxCost(args.maxCostRaw);\n\tassertU64(args.quantityRaw, 'quantityRaw');\n\tif (\n\t\ttypeof args.maxProbabilityRaw !== 'bigint' ||\n\t\targs.maxProbabilityRaw <= 0n ||\n\t\targs.maxProbabilityRaw > FLOAT_SCALING\n\t) {\n\t\tthrow new PredictInputError(\n\t\t\t`maxProbabilityRaw must be in (0, 1e9], got ${String(args.maxProbabilityRaw)}`,\n\t\t);\n\t}\n\treturn authed.enqueueExactQuantity({\n\t\tconfig,\n\t\targuments: {\n\t\t\t...placement(config, args),\n\t\t\tlowerTick: args.lowerTick,\n\t\t\thigherTick: args.higherTick,\n\t\t\tquantity: args.quantityRaw,\n\t\t\tmaxCost: args.maxCostRaw,\n\t\t\tmaxProbability: args.maxProbabilityRaw,\n\t\t},\n\t});\n}\n\n/**\n * Queue a premium-budget mint (`queue::enqueue_exact_amount`): sized at τ under\n * `maxPremiumRaw`, at least `minQuantityRaw`, with the all-in withdrawal capped by the required\n * `maxCostRaw`. Escrows `min(max_cost, available − fee)` plus the order fee. Returns the record\n * ID. Command order is auth → enqueue. `maxPremiumRaw` below the minimum premium (1 USDC) is\n * refused: the fill could never buy enough premium, so Predict's admission dry run would abort\n * `EOrderFailsLimits`.\n */\nexport function enqueueExactAmount(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueuedOrderTarget & {\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tmaxPremiumRaw: bigint;\n\t\tminQuantityRaw: bigint;\n\t\tmaxCostRaw: bigint;\n\t},\n): (tx: Transaction) => TransactionResult {\n\tassertMaxCost(args.maxCostRaw);\n\tassertU64(args.maxPremiumRaw, 'maxPremiumRaw');\n\tassertU64(args.minQuantityRaw, 'minQuantityRaw');\n\tif (args.maxPremiumRaw < MIN_PREMIUM) {\n\t\tthrow new PredictInputError(\n\t\t\t`maxPremiumRaw ${args.maxPremiumRaw} is below the ${MIN_PREMIUM} minimum premium (EOrderFailsLimits)`,\n\t\t);\n\t}\n\treturn authed.enqueueExactAmount({\n\t\tconfig,\n\t\targuments: {\n\t\t\t...placement(config, args),\n\t\t\tlowerTick: args.lowerTick,\n\t\t\thigherTick: args.higherTick,\n\t\t\tmaxPremium: args.maxPremiumRaw,\n\t\t\tminQuantity: args.minQuantityRaw,\n\t\t\tmaxCost: args.maxCostRaw,\n\t\t},\n\t});\n}\n\n/**\n * Queue an all-in-budget mint (`queue::enqueue_exact_cost`): sized at τ so the all-in cost fits\n * `maxCostRaw`, at least `minQuantityRaw`. `maxCostRaw` is the budget and must be a real cap.\n * Escrows `min(max_cost, available − fee)` plus the order fee. Returns the record ID. Command\n * order is auth → enqueue.\n */\nexport function enqueueExactCost(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueuedOrderTarget & {\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tmaxCostRaw: bigint;\n\t\tminQuantityRaw: bigint;\n\t},\n): (tx: Transaction) => TransactionResult {\n\tassertMaxCost(args.maxCostRaw);\n\tassertU64(args.minQuantityRaw, 'minQuantityRaw');\n\treturn authed.enqueueExactCost({\n\t\tconfig,\n\t\targuments: {\n\t\t\t...placement(config, args),\n\t\t\tlowerTick: args.lowerTick,\n\t\t\thigherTick: args.higherTick,\n\t\t\tmaxCost: args.maxCostRaw,\n\t\t\tminQuantity: args.minQuantityRaw,\n\t\t},\n\t});\n}\n\n/**\n * Queue an early sell of `closeQuantityRaw` from the Open record `recordId`\n * (`queue::enqueue_redeem_open`; the queue record ID, not the position's u256 order ID). The\n * only early sell: a position held in the account can't be sold early. The record must be Open\n * and belong to this account. `minProbabilityRaw` and `minProceedsRaw` are the close-side floors\n * at τ and are required (`0n` disables either, so pass it on purpose). Escrows only the order\n * fee. Returns the new record ID, which holds the position until the sell fills or refunds.\n * Command order is auth → enqueue.\n */\nexport function enqueueRedeemOpen(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueuedOrderTarget & {\n\t\trecordId: bigint;\n\t\tcloseQuantityRaw: bigint;\n\t\tminProbabilityRaw: bigint;\n\t\tminProceedsRaw: bigint;\n\t},\n): (tx: Transaction) => TransactionResult {\n\tassertU64(args.recordId, 'recordId');\n\tassertU64(args.minProbabilityRaw, 'minProbabilityRaw');\n\tassertU64(args.minProceedsRaw, 'minProceedsRaw');\n\tif (typeof args.closeQuantityRaw !== 'bigint' || args.closeQuantityRaw <= 0n) {\n\t\tthrow new PredictInputError(\n\t\t\t`closeQuantityRaw must be above 0, got ${String(args.closeQuantityRaw)}`,\n\t\t);\n\t}\n\treturn authed.enqueueRedeemOpen({\n\t\tconfig,\n\t\targuments: {\n\t\t\t...placement(config, args),\n\t\t\trecordId: args.recordId,\n\t\t\tcloseQuantity: args.closeQuantityRaw,\n\t\t\tminProbability: args.minProbabilityRaw,\n\t\t\tminProceeds: args.minProceedsRaw,\n\t\t},\n\t});\n}\n\n/**\n * Abort the transaction unless the order desk's fee is at most `maxOrderFeeRaw` when it executes.\n * The enqueues charge the desk's fee at execution and take no fee bound, so add this BEFORE an\n * enqueue to hold it to the fee its preview showed. It reads the desk's policy, and\n * `0x1::u64::checked_sub(max, fee)` is none once the fee is above the bound, so\n * `0x1::option::destroy_some` aborts (`option::EOPTION_NOT_SET`, code 0x40001) before the\n * enqueue debits anything. Read-only on the desk.\n */\nexport function assertOrderFeeAtMost(\n\tconfig: OrdersGeneratedConfig,\n\tmaxOrderFeeRaw: bigint,\n): (tx: Transaction) => void {\n\tassertU64(maxOrderFeeRaw, 'maxOrderFeeRaw');\n\treturn (tx) => {\n\t\tconst policy = tx.add(desk.policy({ config }));\n\t\tconst fee = tx.add(delayedExecutionConfig.orderFee({ config, arguments: { policy } }));\n\t\tconst headroom = tx.moveCall({\n\t\t\ttarget: '0x1::u64::checked_sub',\n\t\t\targuments: [tx.pure.u64(maxOrderFeeRaw), fee],\n\t\t});\n\t\ttx.moveCall({\n\t\t\ttarget: '0x1::option::destroy_some',\n\t\t\ttypeArguments: ['u64'],\n\t\t\targuments: [headroom],\n\t\t});\n\t};\n}\n\n/**\n * Fund a live market from the pool vault to `max(required × (1 + rebalance %), initial cash,\n * required + waiting_cash_need)` (Predict's `plp::rebalance_expiry_cash`). Permissionless, and\n * takes no target. Add it AFTER a big sell's enqueue in the same PTB: the enqueue has already\n * added the sell's cash need to Predict's waiting total, so the rebalance funds it at once. It\n * takes the hot `PoolVault`, so add it only when a sell's cash need is above spare cash.\n */\nexport function rebalanceExpiryCash(\n\tconfig: GeneratedConfig,\n\targs: { expiryMarketId: string },\n): (tx: Transaction) => TransactionResult {\n\treturn plp.rebalanceExpiryCash({ config, arguments: { market: args.expiryMarketId } });\n}\n\n/**\n * Create and share a market's `MarketQueue` (`queue::create_and_share(registry, desk, market)`),\n * at the ID `deriveQueueId(config.queueRegistry, expiryMarketId)`. Takes the registry mutably and\n * the desk read-only, so it never contends with trading. Permissionless and once per market (a\n * second call aborts, since the ID is taken); the caller pays its storage. The market-creation\n * keeper sends it after each new `ExpiryMarket`. Returns the queue ID.\n */\nexport function createQueue(\n\tconfig: OrdersGeneratedConfig,\n\targs: { expiryMarketId: string },\n): (tx: Transaction) => TransactionResult {\n\treturn queue.createAndShare({ config, arguments: { market: args.expiryMarketId } });\n}\n\n/**\n * Refund this market's waiting orders at or past their deadline (`queue::refund`, reason 5),\n * visiting at most `maxOrders` records (the chain caps one call at 450). Permissionless: no auth,\n * session or Pyth key, and it works during a freeze. Returns how many it refunded, `0` without\n * aborting when none is due. Send it only from the app's refund button, never prepended to other\n * transactions: keepers refund on their own. Every visited record counts toward Sui's\n * per-transaction object limit.\n */\nexport function refund(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & { maxOrders: bigint | number },\n): (tx: Transaction) => TransactionResult {\n\treturn queue.refund({\n\t\tconfig,\n\t\targuments: {\n\t\t\tqueue: queueIdOf(config, args),\n\t\t\tmarket: args.expiryMarketId,\n\t\t\tmaxOrders: args.maxOrders,\n\t\t},\n\t});\n}\n\n/**\n * Refund the listed waiting orders at once (`queue::admin_refund`, reason 7), wherever they sit\n * in the queue. Takes Predict's `AdminCap`, and works while Predict is frozen. Missing and\n * finished record IDs are skipped.\n */\nexport function adminRefund(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & { adminCapId: string; recordIds: readonly bigint[] },\n): (tx: Transaction) => TransactionResult {\n\treturn queue.adminRefund({\n\t\tconfig,\n\t\targuments: {\n\t\t\tqueue: queueIdOf(config, args),\n\t\t\tmarket: args.expiryMarketId,\n\t\t\tAdminCap: args.adminCapId,\n\t\t\trecordIds: [...args.recordIds],\n\t\t},\n\t});\n}\n\n/**\n * Delete Refunded and Closed records of a settled market (`queue::cleanup`). Permissionless; the\n * storage rebate goes to the sender. Missing IDs, other statuses and records still holding a\n * receipt or funds (parked funds included, until `claimParked`) are skipped. Aborts\n * `EMarketNotSettled` before settlement.\n */\nexport function cleanup(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & { recordIds: readonly bigint[] },\n): (tx: Transaction) => TransactionResult {\n\treturn queue.cleanup({\n\t\tconfig,\n\t\targuments: {\n\t\t\tqueue: queueIdOf(config, args),\n\t\t\tmarket: args.expiryMarketId,\n\t\t\trecordIds: [...args.recordIds],\n\t\t},\n\t});\n}\n\n/**\n * Run one bounded settlement phase on a market's queue (`queue::settle_step`) and return the\n * phase the queue is in afterwards (u8, `queue.SETTLE_PHASE`): `0` DRAIN refunds the waiting\n * orders, `1` PAY pays the Open records once Predict has settled the market, `2` DONE once the\n * payout walk has reached the last record. Send one call per transaction until it returns `2` (or\n * `MarketPayoutsCompleted` is emitted), after Predict's `try_settle`. A record the market couldn't\n * pay stays Open with `OpenRecordPayoutSkipped`, even after DONE. Permissionless. Aborts\n * `EMarketNotExpired` before expiry.\n */\nexport function settleStep(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget,\n): (tx: Transaction) => TransactionResult {\n\treturn queue.settleStep({\n\t\tconfig,\n\t\targuments: { queue: queueIdOf(config, args), market: args.expiryMarketId },\n\t});\n}\n\n/**\n * Pay one Open record of a settled market its settled payout (`queue::pay_open`), at any time\n * after settlement, before or after `settle_step` completes: a record the payout walk skipped\n * because the market was short of cash or its receive address was denied. Permissionless: the\n * payout goes only to the record's own receive address. Emits `OpenRecordSettled`, or\n * `OpenRecordPayoutSkipped` again while the cause persists. A missing or non-Open record is left\n * alone. Aborts `EMarketNotSettled` before Predict settles the market.\n */\nexport function payOpen(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & { recordId: bigint },\n): (tx: Transaction) => TransactionResult {\n\tassertU64(args.recordId, 'recordId');\n\treturn queue.payOpen({\n\t\tconfig,\n\t\targuments: {\n\t\t\tqueue: queueIdOf(config, args),\n\t\t\tmarket: args.expiryMarketId,\n\t\t\trecordId: args.recordId,\n\t\t},\n\t});\n}\n\n/**\n * Send a finished record's parked funds (`queue::claim_parked`): change or a refund its receive\n * address couldn't take while it was on USDC's deny list or USDC was paused. Permissionless: the\n * funds go only to the record's own receive address. Returns the amount sent (u64), or `0` and\n * changes nothing for a missing or unfinished record, one with nothing parked, or an address still\n * denied. Emits `RecordFundsClaimed`. Takes no market: `expiryMarketId` only derives the queue.\n */\nexport function claimParked(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & { recordId: bigint },\n): (tx: Transaction) => TransactionResult {\n\tassertU64(args.recordId, 'recordId');\n\treturn queue.claimParked({\n\t\tconfig,\n\t\targuments: { queue: queueIdOf(config, args), recordId: args.recordId },\n\t});\n}\n\n/** The current Pyth Lazer package and the original ID that types its `Update`. */\nexport interface LazerPackages {\n\t/** Lazer's shared `State`. */\n\tstateId: string;\n\t/** The package to call `parse_and_verify_le_ecdsa_update` on: `State.upgrade_cap.package`. */\n\tpackageId: string;\n\t/** The original package ID, which `update::Update` is typed by. */\n\toriginalId: string;\n}\n\n/**\n * Verify one signed Lazer payload with the current Lazer package. A positional call on purpose:\n * the oracle-construction packages are not generated (see `sui-codegen.config.ts`).\n */\nexport function parseLazerUpdate(\n\tlazer: Pick<LazerPackages, 'stateId' | 'packageId'>,\n\tpayload: Uint8Array,\n): (tx: Transaction) => TransactionResult {\n\treturn (tx) =>\n\t\ttx.moveCall({\n\t\t\ttarget: `${lazer.packageId}::pyth_lazer::parse_and_verify_le_ecdsa_update`,\n\t\t\targuments: [tx.object(lazer.stateId), tx.object.clock(), tx.pure.vector('u8', payload)],\n\t\t});\n}\n\n/**\n * Verify the signed Lazer payloads and commit them to the market's waiting cohorts\n * (`queue::commit`). Permissionless. Pass the payloads for a cohort's exact τ, or a backup tick\n * once τ + gap wait has passed with τ uncommitted (when the policy's price buffer is on). Commit\n * matches each update to its own cohort by τ and skips one that matches nothing, so no\n * head-of-line ordering is assumed. Resolve `lazer` per batch with `read.lazerPackages` and never\n * cache it: a Pyth upgrade retires the old package at once.\n */\nexport function commit(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & { payloads: readonly Uint8Array[]; lazer: LazerPackages },\n): (tx: Transaction) => TransactionResult {\n\tif (args.payloads.length === 0) {\n\t\tthrow new PredictInputError('commit needs at least one signed Lazer payload');\n\t}\n\treturn (tx) => {\n\t\tconst updates = args.payloads.map((payload) => tx.add(parseLazerUpdate(args.lazer, payload)));\n\t\tconst vector = tx.makeMoveVec({\n\t\t\ttype: `${args.lazer.originalId}::update::Update`,\n\t\t\telements: updates,\n\t\t});\n\t\treturn tx.add(\n\t\t\tqueue.commit({\n\t\t\t\tconfig,\n\t\t\t\targuments: { queue: queueIdOf(config, args), market: args.expiryMarketId, updates: vector },\n\t\t\t}),\n\t\t);\n\t};\n}\n\n/**\n * Fill or refund committed orders in τ order (`queue::resolve`), visiting at most `maxOrders`\n * records (the chain caps one call at 450, since a fill emits two events and Sui allows 1,024\n * per transaction). Permissionless. Returns how many orders it finished. An order the market\n * can't cover is refunded with reason 8. Size `maxOrders` against the payout tree\n * (`payoutTreeNodeCount`): about 10 to 15 fills fit one transaction in a full tree.\n */\nexport function resolve(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & { maxOrders: bigint | number },\n): (tx: Transaction) => TransactionResult {\n\treturn queue.resolve({\n\t\tconfig,\n\t\targuments: {\n\t\t\tqueue: queueIdOf(config, args),\n\t\t\tmarket: args.expiryMarketId,\n\t\t\tmaxOrders: args.maxOrders,\n\t\t},\n\t});\n}\n\n/**\n * The open filler (no cap exists): {@link commit} the signed Lazer payloads, then\n * {@link resolve} up to `maxOrders` records. Anyone with Pyth Lazer access can run it. With\n * `refundOverdue`, a final `refund` call sweeps orders past their deadline. Returns the resolve\n * result. Split commit from resolve when the payout tree is large.\n */\nexport function fill(\n\tconfig: OrdersGeneratedConfig,\n\targs: QueueTarget & {\n\t\tpayloads: readonly Uint8Array[];\n\t\tlazer: LazerPackages;\n\t\tmaxOrders: bigint | number;\n\t\trefundOverdue?: boolean;\n\t},\n): (tx: Transaction) => TransactionResult {\n\tif (args.payloads.length === 0) {\n\t\tthrow new PredictInputError('fill needs at least one signed Lazer payload');\n\t}\n\tconst target = { expiryMarketId: args.expiryMarketId, queueId: queueIdOf(config, args) };\n\treturn (tx) => {\n\t\ttx.add(commit(config, { ...target, payloads: args.payloads, lazer: args.lazer }));\n\t\tconst resolved = tx.add(resolve(config, { ...target, maxOrders: args.maxOrders }));\n\t\tif (args.refundOverdue) {\n\t\t\ttx.add(refund(config, { ...target, maxOrders: args.maxOrders }));\n\t\t}\n\t\treturn resolved;\n\t};\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.d.mts","names":[],"sources":["../../../src/predict/tx/trade.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"trade.d.mts","names":[],"sources":["../../../src/predict/tx/trade.ts"],"mappings":";;;;UAkBiB,WAAA;EAChB,QAAA;EACA,sBAAA;EACA,oBAAA;AAAA;AAAA,iBASe,cAAA,CACf,MAAA,EAAQ,eAAA,EACR,IAAA;EAAQ,cAAA;AAAA,IAA2B,WAAA,IAChC,EAAA,EAAI,WAAA,KAAgB,iBAAA"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
+
import { generateAuth } from "../../contracts/account/account.mjs";
|
|
1
2
|
import { U64_MAX } from "../units.mjs";
|
|
2
3
|
import { withAuth } from "./common.mjs";
|
|
3
4
|
import { loadLivePricer as loadLivePricer$1, mintExactAmount as mintExactAmount$1, mintExactCost as mintExactCost$1, mintExactQuantity as mintExactQuantity$1, redeemLive as redeemLive$1, redeemSettled as redeemSettled$1 } from "../../contracts/deepbook_predict/expiry_market.mjs";
|
|
4
5
|
|
|
5
6
|
//#region src/predict/tx/trade.ts
|
|
6
|
-
const authed = {
|
|
7
|
-
mintExactQuantity: withAuth(mintExactQuantity$1),
|
|
8
|
-
mintExactAmount: withAuth(mintExactAmount$1),
|
|
9
|
-
mintExactCost: withAuth(mintExactCost$1),
|
|
10
|
-
redeemLive: withAuth(redeemLive$1),
|
|
11
|
-
redeemSettled: withAuth(redeemSettled$1)
|
|
12
|
-
};
|
|
7
|
+
const authed = { redeemSettled: withAuth(redeemSettled$1) };
|
|
13
8
|
function loadLivePricer(config, args) {
|
|
14
9
|
return (tx) => tx.add(loadLivePricer$1({
|
|
15
10
|
config,
|
|
@@ -24,65 +19,88 @@ function loadLivePricer(config, args) {
|
|
|
24
19
|
function liveTrade(config, args, build) {
|
|
25
20
|
return (tx) => {
|
|
26
21
|
const pricer = tx.add(loadLivePricer(config, args));
|
|
27
|
-
|
|
22
|
+
const auth = tx.add(generateAuth({ config }));
|
|
23
|
+
return tx.add(build(pricer, auth));
|
|
28
24
|
};
|
|
29
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Retired by delayed execution (DBU-885): Predict v4's `mint_exact_quantity` always
|
|
28
|
+
* aborts `EDelayedExecutionRequired`, so this works only while the config's call target is a
|
|
29
|
+
* pre-v4 package. Use `enqueueExactQuantity` from `tx/queue.ts`.
|
|
30
|
+
*/
|
|
30
31
|
function mintExactQuantity(config, args) {
|
|
31
|
-
return liveTrade(config, args, (pricer) =>
|
|
32
|
+
return liveTrade(config, args, (pricer, auth) => mintExactQuantity$1({
|
|
32
33
|
config,
|
|
33
34
|
arguments: {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
Market: args.expiryMarketId,
|
|
36
|
+
Wrapper: args.wrapperId,
|
|
37
|
+
Auth: auth,
|
|
38
|
+
Pricer: pricer,
|
|
39
|
+
LowerTick: args.lowerTick,
|
|
40
|
+
HigherTick: args.higherTick,
|
|
41
|
+
Quantity: args.quantityRaw,
|
|
42
|
+
MaxCost: args.maxCostRaw ?? U64_MAX,
|
|
43
|
+
MaxProbability: args.maxProbabilityRaw ?? U64_MAX
|
|
42
44
|
}
|
|
43
45
|
}));
|
|
44
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated Retired by delayed execution (DBU-885): Predict v4 always aborts it
|
|
49
|
+
* (`EDelayedExecutionRequired`). Use `enqueueExactAmount`.
|
|
50
|
+
*/
|
|
45
51
|
function mintExactAmount(config, args) {
|
|
46
|
-
return liveTrade(config, args, (pricer) =>
|
|
52
|
+
return liveTrade(config, args, (pricer, auth) => mintExactAmount$1({
|
|
47
53
|
config,
|
|
48
54
|
arguments: {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
Market: args.expiryMarketId,
|
|
56
|
+
Wrapper: args.wrapperId,
|
|
57
|
+
Auth: auth,
|
|
58
|
+
Pricer: pricer,
|
|
59
|
+
LowerTick: args.lowerTick,
|
|
60
|
+
HigherTick: args.higherTick,
|
|
61
|
+
MaxPremium: args.maxPremiumRaw,
|
|
62
|
+
MinQuantity: args.minQuantityRaw,
|
|
63
|
+
MaxCost: args.maxCostRaw ?? U64_MAX
|
|
57
64
|
}
|
|
58
65
|
}));
|
|
59
66
|
}
|
|
60
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Mint within an all-in budget, including fees, using the v2 entrypoint.
|
|
69
|
+
* @deprecated Retired by delayed execution (DBU-885): Predict v4 always aborts it
|
|
70
|
+
* (`EDelayedExecutionRequired`). Use `enqueueExactCost`.
|
|
71
|
+
*/
|
|
61
72
|
function mintExactCost(config, args) {
|
|
62
|
-
return liveTrade(config, args, (pricer) =>
|
|
73
|
+
return liveTrade(config, args, (pricer, auth) => mintExactCost$1({
|
|
63
74
|
config,
|
|
64
75
|
arguments: {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
76
|
+
Market: args.expiryMarketId,
|
|
77
|
+
Wrapper: args.wrapperId,
|
|
78
|
+
Auth: auth,
|
|
79
|
+
Pricer: pricer,
|
|
80
|
+
LowerTick: args.lowerTick,
|
|
81
|
+
HigherTick: args.higherTick,
|
|
82
|
+
MaxCost: args.maxCostRaw,
|
|
83
|
+
MinQuantity: args.minQuantityRaw
|
|
72
84
|
}
|
|
73
85
|
}));
|
|
74
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* @deprecated Retired by delayed execution (DBU-885): Predict v4 always aborts it
|
|
89
|
+
* (`EDelayedExecutionRequired`). Account positions then have no early exit; queued fills are Open
|
|
90
|
+
* records sold with `enqueueRedeemOpen`.
|
|
91
|
+
*/
|
|
75
92
|
function redeemLive(config, args) {
|
|
76
|
-
return liveTrade(config, args, (pricer) =>
|
|
93
|
+
return liveTrade(config, args, (pricer, auth) => redeemLive$1({
|
|
77
94
|
config,
|
|
78
95
|
arguments: {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
Market: args.expiryMarketId,
|
|
97
|
+
Wrapper: args.wrapperId,
|
|
98
|
+
Auth: auth,
|
|
99
|
+
Pricer: pricer,
|
|
100
|
+
OrderId: args.orderId,
|
|
101
|
+
CloseQuantity: args.closeQuantityRaw,
|
|
102
|
+
MinProbability: args.minProbabilityRaw ?? 0n,
|
|
103
|
+
MinProceeds: args.minProceedsRaw ?? 0n
|
|
86
104
|
}
|
|
87
105
|
}));
|
|
88
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.mjs","names":["expiryMarket.mintExactQuantity","expiryMarket.mintExactAmount","expiryMarket.mintExactCost","expiryMarket.redeemLive","expiryMarket.redeemSettled","expiryMarket.loadLivePricer"],"sources":["../../../src/predict/tx/trade.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\nimport type { Transaction, TransactionResult } from '@mysten/sui/transactions';\nimport type { GeneratedConfig } from '../config/generated.js';\nimport { U64_MAX } from '../units.js';\nimport * as expiryMarket from '../../contracts/deepbook_predict/expiry_market.js';\nimport { withAuth } from './common.js';\n\n// The trade calls with their `auth` argument already supplied (see `withAuth`): each\n// takes its generated options minus that slot and expands to auth → call.\nconst authed = {\n\tmintExactQuantity: withAuth(expiryMarket.mintExactQuantity),\n\tmintExactAmount: withAuth(expiryMarket.mintExactAmount),\n\tmintExactCost: withAuth(expiryMarket.mintExactCost),\n\tredeemLive: withAuth(expiryMarket.redeemLive),\n\tredeemSettled: withAuth(expiryMarket.redeemSettled),\n};\n\n// The oracle feed object ids a live market's pricer reads. Grouped so callers pass one\n// bundle; the deployment's per-underlying ids live in `cfg.underlyings[symbol]` (see\n// `src/config/testnet.ts`), named to match `deployment.testnet.json`.\nexport interface MarketFeeds {\n\tpythFeed: string;\n\tblockScholesValueStore: string;\n\tblockScholesSviStore: string;\n}\n\n// Load a fresh `Pricer` from the live oracle feeds. Every live-flow trade call\n// (`mint_*`, `redeem_live`) borrows this `&Pricer` and it must be loaded first in the\n// PTB. Deployed sig `load_live_pricer` (expiry_market.move): market, config,\n// propbook_registry (&OracleRegistry), pyth, bs_values, bs_svi, clock (auto-injected).\n// `config` and `propbook_registry` are supplied by the config slice, not named here.\nexport function loadLivePricer(\n\tconfig: GeneratedConfig,\n\targs: { expiryMarketId: string } & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn (tx) =>\n\t\ttx.add(\n\t\t\texpiryMarket.loadLivePricer({\n\t\t\t\tconfig,\n\t\t\t\targuments: {\n\t\t\t\t\tmarket: args.expiryMarketId,\n\t\t\t\t\tpyth: args.pythFeed,\n\t\t\t\t\tbsValues: args.blockScholesValueStore,\n\t\t\t\t\tbsSvi: args.blockScholesSviStore,\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n}\n\n// The three commands every live-flow trade is: load a fresh market-bound `Pricer`, mint\n// owner auth, then the one `expiry_market::*` call that consumes both. Only the pricer is\n// composed here — `build` returns an `authed.*` call, which is the other two commands.\nfunction liveTrade(\n\tconfig: GeneratedConfig,\n\targs: { expiryMarketId: string } & MarketFeeds,\n\tbuild: (pricer: TransactionResult) => (tx: Transaction) => TransactionResult,\n): (tx: Transaction) => TransactionResult {\n\treturn (tx) => {\n\t\tconst pricer = tx.add(loadLivePricer(config, args));\n\t\treturn tx.add(build(pricer));\n\t};\n}\n\n// Mint a position of an exact `quantityRaw`, capped by cost/probability ceilings,\n// returning the new order id (u256). Command order is pricer → auth → mint (auth is a\n// hot potato consumed by this call). `maxCostRaw`/`maxProbabilityRaw` default to\n// `U64_MAX` (no slippage cap). Deployed sig `mint_exact_quantity`.\nexport function mintExactQuantity(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tquantityRaw: bigint;\n\t\tmaxCostRaw?: bigint;\n\t\tmaxProbabilityRaw?: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer) =>\n\t\tauthed.mintExactQuantity({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tmarket: args.expiryMarketId,\n\t\t\t\twrapper: args.wrapperId,\n\t\t\t\tpricer,\n\t\t\t\tlowerTick: args.lowerTick,\n\t\t\t\thigherTick: args.higherTick,\n\t\t\t\tquantity: args.quantityRaw,\n\t\t\t\tmaxCost: args.maxCostRaw ?? U64_MAX,\n\t\t\t\tmaxProbability: args.maxProbabilityRaw ?? U64_MAX,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n// Mint by spending up to `maxPremiumRaw` (raw quote units), enforcing a `minQuantityRaw`\n// floor on the position received and a `maxCostRaw` all-in ceiling, returning the new\n// order id (u256). Command order is pricer → auth → mint. Deployed sig\n// `mint_exact_amount`: …, max_premium, min_quantity, max_cost, root.\nexport function mintExactAmount(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tmaxPremiumRaw: bigint;\n\t\tminQuantityRaw: bigint;\n\t\tmaxCostRaw?: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer) =>\n\t\tauthed.mintExactAmount({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tmarket: args.expiryMarketId,\n\t\t\t\twrapper: args.wrapperId,\n\t\t\t\tpricer,\n\t\t\t\tlowerTick: args.lowerTick,\n\t\t\t\thigherTick: args.higherTick,\n\t\t\t\tmaxPremium: args.maxPremiumRaw,\n\t\t\t\tminQuantity: args.minQuantityRaw,\n\t\t\t\tmaxCost: args.maxCostRaw ?? U64_MAX,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n/** Mint within an all-in budget, including fees, using the v2 entrypoint. */\nexport function mintExactCost(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tmaxCostRaw: bigint;\n\t\tminQuantityRaw: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer) =>\n\t\tauthed.mintExactCost({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tmarket: args.expiryMarketId,\n\t\t\t\twrapper: args.wrapperId,\n\t\t\t\tpricer,\n\t\t\t\tlowerTick: args.lowerTick,\n\t\t\t\thigherTick: args.higherTick,\n\t\t\t\tmaxCost: args.maxCostRaw,\n\t\t\t\tminQuantity: args.minQuantityRaw,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n// Owner-authorized redeem of a live (not-yet-settled) position: close `closeQuantityRaw`\n// of `orderId` at the live pricer's mark, enforcing close-side slippage floors\n// (`minProbabilityRaw`/`minProceedsRaw`, default 0 = uncapped). Returns `Option<u256>`:\n// the replacement order id when a partial close leaves quantity open, else none. Command\n// order is pricer → auth → redeem. Deployed sig `redeem_live`.\nexport function redeemLive(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\torderId: bigint;\n\t\tcloseQuantityRaw: bigint;\n\t\tminProbabilityRaw?: bigint;\n\t\tminProceedsRaw?: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer) =>\n\t\tauthed.redeemLive({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tmarket: args.expiryMarketId,\n\t\t\t\twrapper: args.wrapperId,\n\t\t\t\tpricer,\n\t\t\t\torderId: args.orderId,\n\t\t\t\tcloseQuantity: args.closeQuantityRaw,\n\t\t\t\tminProbability: args.minProbabilityRaw ?? 0n,\n\t\t\t\tminProceeds: args.minProceedsRaw ?? 0n,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n// Owner-authorized redeem of a settled position: closes `orderId` IN FULL against the\n// recorded settlement price (the deployed entrypoint takes no quantity — a settled claim\n// is all-or-nothing). No live pricer (settlement price is fixed); auth is consumed by the\n// call. Deployed sig `redeem_settled` (owner-auth form). The keeper-facing\n// `redeem_settled_permissionless` is a separate entrypoint, out of scope for this SDK.\nexport function redeemSettled(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\torderId: bigint;\n\t},\n): (tx: Transaction) => TransactionResult {\n\treturn authed.redeemSettled({\n\t\tconfig,\n\t\targuments: {\n\t\t\tmarket: args.expiryMarketId,\n\t\t\twrapper: args.wrapperId,\n\t\t\torderId: args.orderId,\n\t\t},\n\t});\n}\n"],"mappings":";;;;;AAUA,MAAM,SAAS;CACd,mBAAmB,SAASA,oBAA+B;CAC3D,iBAAiB,SAASC,kBAA6B;CACvD,eAAe,SAASC,gBAA2B;CACnD,YAAY,SAASC,aAAwB;CAC7C,eAAe,SAASC,gBAA2B;CACnD;AAgBD,SAAgB,eACf,QACA,MACyC;AACzC,SAAQ,OACP,GAAG,IACFC,iBAA4B;EAC3B;EACA,WAAW;GACV,QAAQ,KAAK;GACb,MAAM,KAAK;GACX,UAAU,KAAK;GACf,OAAO,KAAK;GACZ;EACD,CAAC,CACF;;AAMH,SAAS,UACR,QACA,MACA,OACyC;AACzC,SAAQ,OAAO;EACd,MAAM,SAAS,GAAG,IAAI,eAAe,QAAQ,KAAK,CAAC;AACnD,SAAO,GAAG,IAAI,MAAM,OAAO,CAAC;;;AAQ9B,SAAgB,kBACf,QACA,MASyC;AACzC,QAAO,UAAU,QAAQ,OAAO,WAC/B,OAAO,kBAAkB;EACxB;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd;GACA,WAAW,KAAK;GAChB,YAAY,KAAK;GACjB,UAAU,KAAK;GACf,SAAS,KAAK,cAAc;GAC5B,gBAAgB,KAAK,qBAAqB;GAC1C;EACD,CAAC,CACF;;AAOF,SAAgB,gBACf,QACA,MASyC;AACzC,QAAO,UAAU,QAAQ,OAAO,WAC/B,OAAO,gBAAgB;EACtB;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd;GACA,WAAW,KAAK;GAChB,YAAY,KAAK;GACjB,YAAY,KAAK;GACjB,aAAa,KAAK;GAClB,SAAS,KAAK,cAAc;GAC5B;EACD,CAAC,CACF;;;AAIF,SAAgB,cACf,QACA,MAQyC;AACzC,QAAO,UAAU,QAAQ,OAAO,WAC/B,OAAO,cAAc;EACpB;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd;GACA,WAAW,KAAK;GAChB,YAAY,KAAK;GACjB,SAAS,KAAK;GACd,aAAa,KAAK;GAClB;EACD,CAAC,CACF;;AAQF,SAAgB,WACf,QACA,MAQyC;AACzC,QAAO,UAAU,QAAQ,OAAO,WAC/B,OAAO,WAAW;EACjB;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd;GACA,SAAS,KAAK;GACd,eAAe,KAAK;GACpB,gBAAgB,KAAK,qBAAqB;GAC1C,aAAa,KAAK,kBAAkB;GACpC;EACD,CAAC,CACF;;AAQF,SAAgB,cACf,QACA,MAKyC;AACzC,QAAO,OAAO,cAAc;EAC3B;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,SAAS,KAAK;GACd;EACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"trade.mjs","names":["expiryMarket.redeemSettled","expiryMarket.loadLivePricer","account.generateAuth","expiryMarket.mintExactQuantity","expiryMarket.mintExactAmount","expiryMarket.mintExactCost","expiryMarket.redeemLive"],"sources":["../../../src/predict/tx/trade.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\nimport type { Transaction, TransactionResult } from '@mysten/sui/transactions';\nimport type { GeneratedConfig } from '../config/generated.js';\nimport { U64_MAX } from '../units.js';\nimport { accountMoveCalls as account } from '../../account.js';\nimport * as expiryMarket from '../../contracts/deepbook_predict/expiry_market.js';\nimport { withAuth } from './common.js';\n\n// The trade calls with their `auth` argument already supplied (see `withAuth`): each\n// takes its generated options minus that slot and expands to auth → call.\nconst authed = {\n\tredeemSettled: withAuth(expiryMarket.redeemSettled),\n};\n\n// The oracle feed object ids a live market's pricer reads. Grouped so callers pass one\n// bundle; the deployment's per-underlying ids live in `cfg.underlyings[symbol]` (see\n// `src/config/testnet.ts`), named to match `deployment.testnet.json`.\nexport interface MarketFeeds {\n\tpythFeed: string;\n\tblockScholesValueStore: string;\n\tblockScholesSviStore: string;\n}\n\n// Load a fresh `Pricer` from the live oracle feeds. Every live-flow trade call\n// (`mint_*`, `redeem_live`) and every live quote (`quote_mint*`, the queue's `quote_redeem_open`) borrows\n// this `&Pricer` and it must be loaded first in the PTB. Queued orders (`enqueue_*`) don't take\n// one: they read the oracle objects directly. Deployed sig `load_live_pricer` (expiry_market.move): market, config,\n// propbook_registry (&OracleRegistry), pyth, bs_values, bs_svi, clock (auto-injected).\n// `config` and `propbook_registry` are supplied by the config slice, not named here.\nexport function loadLivePricer(\n\tconfig: GeneratedConfig,\n\targs: { expiryMarketId: string } & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn (tx) =>\n\t\ttx.add(\n\t\t\texpiryMarket.loadLivePricer({\n\t\t\t\tconfig,\n\t\t\t\targuments: {\n\t\t\t\t\tmarket: args.expiryMarketId,\n\t\t\t\t\tpyth: args.pythFeed,\n\t\t\t\t\tbsValues: args.blockScholesValueStore,\n\t\t\t\t\tbsSvi: args.blockScholesSviStore,\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n}\n\n// The three commands every live-flow trade is: load a fresh market-bound `Pricer`, mint\n// owner auth, then the one `expiry_market::*` call that consumes both.\n//\n// The live trades are retired: Predict v4 keeps their published signatures but names every\n// parameter with a leading underscore, which codegen renders as a capitalized key (`_market` →\n// `Market`). So the auth is minted here and passed as `Auth`, rather than through `withAuth`.\n// The emitted commands are unchanged, and still reach a pre-v4 package.\nfunction liveTrade(\n\tconfig: GeneratedConfig,\n\targs: { expiryMarketId: string } & MarketFeeds,\n\tbuild: (\n\t\tpricer: TransactionResult,\n\t\tauth: TransactionResult,\n\t) => (tx: Transaction) => TransactionResult,\n): (tx: Transaction) => TransactionResult {\n\treturn (tx) => {\n\t\tconst pricer = tx.add(loadLivePricer(config, args));\n\t\tconst auth = tx.add(account.generateAuth({ config }));\n\t\treturn tx.add(build(pricer, auth));\n\t};\n}\n\n// Mint a position of an exact `quantityRaw`, capped by cost/probability ceilings,\n// returning the new order id (u256). Command order is pricer → auth → mint (auth is a\n// hot potato consumed by this call). `maxCostRaw`/`maxProbabilityRaw` default to\n// `U64_MAX` (no slippage cap). Deployed sig `mint_exact_quantity`.\n/**\n * @deprecated Retired by delayed execution (DBU-885): Predict v4's `mint_exact_quantity` always\n * aborts `EDelayedExecutionRequired`, so this works only while the config's call target is a\n * pre-v4 package. Use `enqueueExactQuantity` from `tx/queue.ts`.\n */\nexport function mintExactQuantity(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tquantityRaw: bigint;\n\t\tmaxCostRaw?: bigint;\n\t\tmaxProbabilityRaw?: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer, auth) =>\n\t\texpiryMarket.mintExactQuantity({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tMarket: args.expiryMarketId,\n\t\t\t\tWrapper: args.wrapperId,\n\t\t\t\tAuth: auth,\n\t\t\t\tPricer: pricer,\n\t\t\t\tLowerTick: args.lowerTick,\n\t\t\t\tHigherTick: args.higherTick,\n\t\t\t\tQuantity: args.quantityRaw,\n\t\t\t\tMaxCost: args.maxCostRaw ?? U64_MAX,\n\t\t\t\tMaxProbability: args.maxProbabilityRaw ?? U64_MAX,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n// Mint by spending up to `maxPremiumRaw` (raw quote units), enforcing a `minQuantityRaw`\n// floor on the position received and a `maxCostRaw` all-in ceiling, returning the new\n// order id (u256). Command order is pricer → auth → mint. Deployed sig\n// `mint_exact_amount`: …, max_premium, min_quantity, max_cost, root.\n/**\n * @deprecated Retired by delayed execution (DBU-885): Predict v4 always aborts it\n * (`EDelayedExecutionRequired`). Use `enqueueExactAmount`.\n */\nexport function mintExactAmount(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tmaxPremiumRaw: bigint;\n\t\tminQuantityRaw: bigint;\n\t\tmaxCostRaw?: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer, auth) =>\n\t\texpiryMarket.mintExactAmount({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tMarket: args.expiryMarketId,\n\t\t\t\tWrapper: args.wrapperId,\n\t\t\t\tAuth: auth,\n\t\t\t\tPricer: pricer,\n\t\t\t\tLowerTick: args.lowerTick,\n\t\t\t\tHigherTick: args.higherTick,\n\t\t\t\tMaxPremium: args.maxPremiumRaw,\n\t\t\t\tMinQuantity: args.minQuantityRaw,\n\t\t\t\tMaxCost: args.maxCostRaw ?? U64_MAX,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n/**\n * Mint within an all-in budget, including fees, using the v2 entrypoint.\n * @deprecated Retired by delayed execution (DBU-885): Predict v4 always aborts it\n * (`EDelayedExecutionRequired`). Use `enqueueExactCost`.\n */\nexport function mintExactCost(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\tlowerTick: bigint;\n\t\thigherTick: bigint;\n\t\tmaxCostRaw: bigint;\n\t\tminQuantityRaw: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer, auth) =>\n\t\texpiryMarket.mintExactCost({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tMarket: args.expiryMarketId,\n\t\t\t\tWrapper: args.wrapperId,\n\t\t\t\tAuth: auth,\n\t\t\t\tPricer: pricer,\n\t\t\t\tLowerTick: args.lowerTick,\n\t\t\t\tHigherTick: args.higherTick,\n\t\t\t\tMaxCost: args.maxCostRaw,\n\t\t\t\tMinQuantity: args.minQuantityRaw,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n// Owner-authorized redeem of a live (not-yet-settled) position: close `closeQuantityRaw`\n// of `orderId` at the live pricer's mark, enforcing close-side slippage floors\n// (`minProbabilityRaw`/`minProceedsRaw`, default 0 = uncapped). Returns `Option<u256>`:\n// the replacement order id when a partial close leaves quantity open, else none. Command\n// order is pricer → auth → redeem. Deployed sig `redeem_live`.\n/**\n * @deprecated Retired by delayed execution (DBU-885): Predict v4 always aborts it\n * (`EDelayedExecutionRequired`). Account positions then have no early exit; queued fills are Open\n * records sold with `enqueueRedeemOpen`.\n */\nexport function redeemLive(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\torderId: bigint;\n\t\tcloseQuantityRaw: bigint;\n\t\tminProbabilityRaw?: bigint;\n\t\tminProceedsRaw?: bigint;\n\t} & MarketFeeds,\n): (tx: Transaction) => TransactionResult {\n\treturn liveTrade(config, args, (pricer, auth) =>\n\t\texpiryMarket.redeemLive({\n\t\t\tconfig,\n\t\t\targuments: {\n\t\t\t\tMarket: args.expiryMarketId,\n\t\t\t\tWrapper: args.wrapperId,\n\t\t\t\tAuth: auth,\n\t\t\t\tPricer: pricer,\n\t\t\t\tOrderId: args.orderId,\n\t\t\t\tCloseQuantity: args.closeQuantityRaw,\n\t\t\t\tMinProbability: args.minProbabilityRaw ?? 0n,\n\t\t\t\tMinProceeds: args.minProceedsRaw ?? 0n,\n\t\t\t},\n\t\t}),\n\t);\n}\n\n// Unchanged by delayed execution: still pays settled positions held in the account. It doesn't\n// pay Open queue records, which the queue's `settle_step` pays at settlement.\n//\n// Owner-authorized redeem of a settled position: closes `orderId` IN FULL against the\n// recorded settlement price (the deployed entrypoint takes no quantity — a settled claim\n// is all-or-nothing). No live pricer (settlement price is fixed); auth is consumed by the\n// call. Deployed sig `redeem_settled` (owner-auth form). The keeper-facing\n// `redeem_settled_permissionless` is a separate entrypoint, out of scope for this SDK.\nexport function redeemSettled(\n\tconfig: GeneratedConfig,\n\targs: {\n\t\texpiryMarketId: string;\n\t\twrapperId: string;\n\t\torderId: bigint;\n\t},\n): (tx: Transaction) => TransactionResult {\n\treturn authed.redeemSettled({\n\t\tconfig,\n\t\targuments: {\n\t\t\tmarket: args.expiryMarketId,\n\t\t\twrapper: args.wrapperId,\n\t\t\torderId: args.orderId,\n\t\t},\n\t});\n}\n"],"mappings":";;;;;;AAWA,MAAM,SAAS,EACd,eAAe,SAASA,gBAA2B,EACnD;AAiBD,SAAgB,eACf,QACA,MACyC;AACzC,SAAQ,OACP,GAAG,IACFC,iBAA4B;EAC3B;EACA,WAAW;GACV,QAAQ,KAAK;GACb,MAAM,KAAK;GACX,UAAU,KAAK;GACf,OAAO,KAAK;GACZ;EACD,CAAC,CACF;;AAUH,SAAS,UACR,QACA,MACA,OAIyC;AACzC,SAAQ,OAAO;EACd,MAAM,SAAS,GAAG,IAAI,eAAe,QAAQ,KAAK,CAAC;EACnD,MAAM,OAAO,GAAG,IAAIC,aAAqB,EAAE,QAAQ,CAAC,CAAC;AACrD,SAAO,GAAG,IAAI,MAAM,QAAQ,KAAK,CAAC;;;;;;;;AAapC,SAAgB,kBACf,QACA,MASyC;AACzC,QAAO,UAAU,QAAQ,OAAO,QAAQ,SACvCC,oBAA+B;EAC9B;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM;GACN,QAAQ;GACR,WAAW,KAAK;GAChB,YAAY,KAAK;GACjB,UAAU,KAAK;GACf,SAAS,KAAK,cAAc;GAC5B,gBAAgB,KAAK,qBAAqB;GAC1C;EACD,CAAC,CACF;;;;;;AAWF,SAAgB,gBACf,QACA,MASyC;AACzC,QAAO,UAAU,QAAQ,OAAO,QAAQ,SACvCC,kBAA6B;EAC5B;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM;GACN,QAAQ;GACR,WAAW,KAAK;GAChB,YAAY,KAAK;GACjB,YAAY,KAAK;GACjB,aAAa,KAAK;GAClB,SAAS,KAAK,cAAc;GAC5B;EACD,CAAC,CACF;;;;;;;AAQF,SAAgB,cACf,QACA,MAQyC;AACzC,QAAO,UAAU,QAAQ,OAAO,QAAQ,SACvCC,gBAA2B;EAC1B;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM;GACN,QAAQ;GACR,WAAW,KAAK;GAChB,YAAY,KAAK;GACjB,SAAS,KAAK;GACd,aAAa,KAAK;GAClB;EACD,CAAC,CACF;;;;;;;AAaF,SAAgB,WACf,QACA,MAQyC;AACzC,QAAO,UAAU,QAAQ,OAAO,QAAQ,SACvCC,aAAwB;EACvB;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM;GACN,QAAQ;GACR,SAAS,KAAK;GACd,eAAe,KAAK;GACpB,gBAAgB,KAAK,qBAAqB;GAC1C,aAAa,KAAK,kBAAkB;GACpC;EACD,CAAC,CACF;;AAWF,SAAgB,cACf,QACA,MAKyC;AACzC,QAAO,OAAO,cAAc;EAC3B;EACA,WAAW;GACV,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,SAAS,KAAK;GACd;EACD,CAAC"}
|
package/dist/sessions.d.mts
CHANGED
|
@@ -52,6 +52,36 @@ interface SessionsPredictIds {
|
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
54
|
declare function getSessionsConfig(network: NetworkArg): SessionsConfig & SessionsSpotIds & SessionsPredictIds;
|
|
55
|
+
/** The market, queue, account and oracle objects every queued Predict session wrapper names. */
|
|
56
|
+
interface SessionsQueuedOrderTarget {
|
|
57
|
+
expiryMarketId: string;
|
|
58
|
+
wrapperId: string;
|
|
59
|
+
/**
|
|
60
|
+
* The order-flow companion's shared `OrderDesk` (`deepbook_predict_orders`). Predict's
|
|
61
|
+
* `PredictConfig.objects.orderDesk`.
|
|
62
|
+
*/
|
|
63
|
+
orderDesk: string;
|
|
64
|
+
/**
|
|
65
|
+
* The order-flow companion's shared `QueueRegistry`, which every market's queue ID derives
|
|
66
|
+
* from. Predict's `PredictConfig.objects.queueRegistry`.
|
|
67
|
+
*/
|
|
68
|
+
queueRegistry: string;
|
|
69
|
+
/**
|
|
70
|
+
* The market's `MarketQueue`. Defaults to the ID derived from `queueRegistry` and the market
|
|
71
|
+
* (`deriveQueueId`), which is where `queue::create_and_share` puts it.
|
|
72
|
+
*/
|
|
73
|
+
queueId?: string;
|
|
74
|
+
/** Predict's `ProtocolConfig`. */
|
|
75
|
+
protocolConfig: string;
|
|
76
|
+
/** Predict's `OracleRegistry` (the propbook registry). */
|
|
77
|
+
oracleRegistry: string;
|
|
78
|
+
/** The market's `PythFeed`. */
|
|
79
|
+
pythFeed: string;
|
|
80
|
+
/** The market's `BlockScholesValueStore`. */
|
|
81
|
+
blockScholesValueStore: string;
|
|
82
|
+
/** The market's `BlockScholesSVIStore`. */
|
|
83
|
+
blockScholesSviStore: string;
|
|
84
|
+
}
|
|
55
85
|
/** The maximum session duration the contract accepts: 30 days, in milliseconds. */
|
|
56
86
|
declare const MAX_SESSION_DURATION_MS: number;
|
|
57
87
|
/** The maximum number of distinct session addresses one Account may store. */
|
|
@@ -158,6 +188,8 @@ declare class SessionsContract {
|
|
|
158
188
|
* effectively unbounded — the chain asserts `value <= cap`, so the max value can never
|
|
159
189
|
* trip. Both are required; there is no default.
|
|
160
190
|
* @returns A function that takes a Transaction object and returns the new order id (u256)
|
|
191
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4
|
|
192
|
+
* (`EDelayedExecutionRequired`). Use {@link SessionsContract.enqueueExactQuantity}.
|
|
161
193
|
*/
|
|
162
194
|
mintExactQuantity(params: {
|
|
163
195
|
expiryMarketId: string;
|
|
@@ -174,6 +206,8 @@ declare class SessionsContract {
|
|
|
174
206
|
* @description Mint by spending up to a premium budget, flooring the quantity received.
|
|
175
207
|
* The chain requires `maxCost > 0`.
|
|
176
208
|
* @returns A function that takes a Transaction object and returns the new order id (u256)
|
|
209
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4.
|
|
210
|
+
* Use {@link SessionsContract.enqueueExactAmount}.
|
|
177
211
|
*/
|
|
178
212
|
mintExactAmount(params: {
|
|
179
213
|
expiryMarketId: string;
|
|
@@ -188,7 +222,9 @@ declare class SessionsContract {
|
|
|
188
222
|
}): (tx: Transaction) => TransactionResult;
|
|
189
223
|
/**
|
|
190
224
|
* Mint within an all-in budget as a session. Amounts are raw Move units.
|
|
191
|
-
* Requires Sessions/Predict v2
|
|
225
|
+
* Requires Sessions/Predict v2 or later.
|
|
226
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4.
|
|
227
|
+
* Use {@link SessionsContract.enqueueExactCost}.
|
|
192
228
|
*/
|
|
193
229
|
mintExactCost(params: {
|
|
194
230
|
expiryMarketId: string;
|
|
@@ -208,6 +244,9 @@ declare class SessionsContract {
|
|
|
208
244
|
* unless you mean to accept whatever the mark gives you.
|
|
209
245
|
* @returns A function that takes a Transaction object and returns `Option<u256>` — the
|
|
210
246
|
* replacement order id when a partial close leaves quantity open
|
|
247
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4.
|
|
248
|
+
* Account positions then have no early exit; queued fills are Open records sold with
|
|
249
|
+
* {@link SessionsContract.enqueueRedeemOpen}.
|
|
211
250
|
*/
|
|
212
251
|
redeemLive(params: {
|
|
213
252
|
expiryMarketId: string;
|
|
@@ -230,6 +269,55 @@ declare class SessionsContract {
|
|
|
230
269
|
protocolConfig: string;
|
|
231
270
|
orderId: bigint;
|
|
232
271
|
}): (tx: Transaction) => void;
|
|
272
|
+
/**
|
|
273
|
+
* @description Queue a mint of an exact payout quantity, as `session`. `maxCost` (all-in cap)
|
|
274
|
+
* and `maxProbability` (at most 1e9) are required, and the chain refuses an "unlimited"
|
|
275
|
+
* `maxCost`.
|
|
276
|
+
* @returns A function that takes a Transaction object and returns the record id (u64)
|
|
277
|
+
*/
|
|
278
|
+
enqueueExactQuantity(params: SessionsQueuedOrderTarget & {
|
|
279
|
+
lowerTick: number | bigint;
|
|
280
|
+
higherTick: number | bigint;
|
|
281
|
+
quantity: number | bigint;
|
|
282
|
+
maxCost: number | bigint;
|
|
283
|
+
maxProbability: number | bigint;
|
|
284
|
+
}): (tx: Transaction) => TransactionResult;
|
|
285
|
+
/**
|
|
286
|
+
* @description Queue a premium-budget mint, as `session`: sized at τ under `maxPremium`, at
|
|
287
|
+
* least `minQuantity`, with the all-in debit capped by the required `maxCost`.
|
|
288
|
+
* @returns A function that takes a Transaction object and returns the record id (u64)
|
|
289
|
+
*/
|
|
290
|
+
enqueueExactAmount(params: SessionsQueuedOrderTarget & {
|
|
291
|
+
lowerTick: number | bigint;
|
|
292
|
+
higherTick: number | bigint;
|
|
293
|
+
maxPremium: number | bigint;
|
|
294
|
+
minQuantity: number | bigint;
|
|
295
|
+
maxCost: number | bigint;
|
|
296
|
+
}): (tx: Transaction) => TransactionResult;
|
|
297
|
+
/**
|
|
298
|
+
* @description Queue an all-in-budget mint, as `session`: sized at τ so the all-in cost fits
|
|
299
|
+
* `maxCost`, at least `minQuantity`.
|
|
300
|
+
* @returns A function that takes a Transaction object and returns the record id (u64)
|
|
301
|
+
*/
|
|
302
|
+
enqueueExactCost(params: SessionsQueuedOrderTarget & {
|
|
303
|
+
lowerTick: number | bigint;
|
|
304
|
+
higherTick: number | bigint;
|
|
305
|
+
maxCost: number | bigint;
|
|
306
|
+
minQuantity: number | bigint;
|
|
307
|
+
}): (tx: Transaction) => TransactionResult;
|
|
308
|
+
/**
|
|
309
|
+
* @description Queue an early sell of the Open record `recordId` (its queue record ID, not
|
|
310
|
+
* the position's order ID), as `session`. `minProbability` and `minProceeds` are the close
|
|
311
|
+
* floors at τ and are required: on a delegated key, `0` closes at any price, so pass it only
|
|
312
|
+
* on purpose.
|
|
313
|
+
* @returns A function that takes a Transaction object and returns the new record id (u64)
|
|
314
|
+
*/
|
|
315
|
+
enqueueRedeemOpen(params: SessionsQueuedOrderTarget & {
|
|
316
|
+
recordId: number | bigint;
|
|
317
|
+
closeQuantity: number | bigint;
|
|
318
|
+
minProbability: number | bigint;
|
|
319
|
+
minProceeds: number | bigint;
|
|
320
|
+
}): (tx: Transaction) => TransactionResult;
|
|
233
321
|
/**
|
|
234
322
|
* @description Decode an Account's stored grants from the raw BCS content of its
|
|
235
323
|
* `DataKey<SessionsApp>` dynamic FIELD object — the whole
|
|
@@ -256,5 +344,5 @@ declare class SessionsContract {
|
|
|
256
344
|
static expiredSessions(grants: readonly SessionGrant[], nowMs: number | bigint): SessionGrant[];
|
|
257
345
|
}
|
|
258
346
|
//#endregion
|
|
259
|
-
export { type DeployedNetwork, MAX_SESSIONS_PER_ACCOUNT, MAX_SESSION_DURATION_MS, type NetworkArg, SessionAuthorized, SessionGrant, SessionRevoked, SessionsApp, SessionsConfig, SessionsContract, SessionsData, SessionsPredictIds, SessionsSpotIds, TESTNET_DEPLOYMENT, TESTNET_UNITS, getDeployment, getSessionsConfig, getUnits, session_config_d_exports as sessionConfigMoveCalls, sessions_d_exports as sessionsMoveCalls };
|
|
347
|
+
export { type DeployedNetwork, MAX_SESSIONS_PER_ACCOUNT, MAX_SESSION_DURATION_MS, type NetworkArg, SessionAuthorized, SessionGrant, SessionRevoked, SessionsApp, SessionsConfig, SessionsContract, SessionsData, SessionsPredictIds, SessionsQueuedOrderTarget, SessionsSpotIds, TESTNET_DEPLOYMENT, TESTNET_UNITS, getDeployment, getSessionsConfig, getUnits, session_config_d_exports as sessionConfigMoveCalls, sessions_d_exports as sessionsMoveCalls };
|
|
260
348
|
//# sourceMappingURL=sessions.d.mts.map
|
package/dist/sessions.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.mts","names":[],"sources":["../src/sessions.ts"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sessions.d.mts","names":[],"sources":["../src/sessions.ts"],"mappings":"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"}
|
package/dist/sessions.mjs
CHANGED
|
@@ -2,7 +2,8 @@ import { MAINNET_SESSIONS } from "./deployments/mainnet.mjs";
|
|
|
2
2
|
import { TESTNET_DEPLOYMENT, TESTNET_SESSIONS, TESTNET_UNITS } from "./deployments/testnet.mjs";
|
|
3
3
|
import { getDeployment, getUnits } from "./deployments/index.mjs";
|
|
4
4
|
import { AccountContract } from "./account.mjs";
|
|
5
|
-
import {
|
|
5
|
+
import { deriveQueueId } from "./predict/queue-id.mjs";
|
|
6
|
+
import { SessionAuthorized, SessionRevoked, SessionsApp, SessionsData, authorizeSession, enqueueExactAmount, enqueueExactCost, enqueueExactQuantity, enqueueRedeemOpen, mintExactAmount, mintExactCost, mintExactQuantity, redeemLive, redeemSettled, revokeSession, sessionExpirationMs, sessions_exports } from "./contracts/deepbook_sessions/sessions.mjs";
|
|
6
7
|
import { session_config_exports } from "./contracts/deepbook_sessions/session_config.mjs";
|
|
7
8
|
import { bcs } from "@mysten/sui/bcs";
|
|
8
9
|
import { deriveDynamicFieldID, deriveObjectID } from "@mysten/sui/utils";
|
|
@@ -23,6 +24,11 @@ function getSessionsConfig(network) {
|
|
|
23
24
|
if (network === "mainnet") return MAINNET_SESSIONS;
|
|
24
25
|
throw new Error(`@mysten/deepbook-v3/sessions: no sessions deployment recorded for network '${network}'. Sessions is recorded for testnet and mainnet; for your own deployment construct a \`SessionsConfig\` and pass it to SessionsContract directly.`);
|
|
25
26
|
}
|
|
27
|
+
const U64_MAX = (1n << 64n) - 1n;
|
|
28
|
+
function assertQueuedMaxCost(maxCost) {
|
|
29
|
+
const value = BigInt(maxCost);
|
|
30
|
+
if (value <= 0n || value >= U64_MAX) throw new Error(`maxCost must be above 0 and below u64::MAX on a queued mint (EMintCostCapRequired), got ${value}`);
|
|
31
|
+
}
|
|
26
32
|
/** The maximum session duration the contract accepts: 30 days, in milliseconds. */
|
|
27
33
|
const MAX_SESSION_DURATION_MS = 720 * 60 * 60 * 1e3;
|
|
28
34
|
/** The maximum number of distinct session addresses one Account may store. */
|
|
@@ -164,6 +170,8 @@ var SessionsContract = class {
|
|
|
164
170
|
* effectively unbounded — the chain asserts `value <= cap`, so the max value can never
|
|
165
171
|
* trip. Both are required; there is no default.
|
|
166
172
|
* @returns A function that takes a Transaction object and returns the new order id (u256)
|
|
173
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4
|
|
174
|
+
* (`EDelayedExecutionRequired`). Use {@link SessionsContract.enqueueExactQuantity}.
|
|
167
175
|
*/
|
|
168
176
|
mintExactQuantity(params) {
|
|
169
177
|
return (tx) => tx.add(mintExactQuantity({
|
|
@@ -186,6 +194,8 @@ var SessionsContract = class {
|
|
|
186
194
|
* @description Mint by spending up to a premium budget, flooring the quantity received.
|
|
187
195
|
* The chain requires `maxCost > 0`.
|
|
188
196
|
* @returns A function that takes a Transaction object and returns the new order id (u256)
|
|
197
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4.
|
|
198
|
+
* Use {@link SessionsContract.enqueueExactAmount}.
|
|
189
199
|
*/
|
|
190
200
|
mintExactAmount(params) {
|
|
191
201
|
return (tx) => tx.add(mintExactAmount({
|
|
@@ -206,7 +216,9 @@ var SessionsContract = class {
|
|
|
206
216
|
}
|
|
207
217
|
/**
|
|
208
218
|
* Mint within an all-in budget as a session. Amounts are raw Move units.
|
|
209
|
-
* Requires Sessions/Predict v2
|
|
219
|
+
* Requires Sessions/Predict v2 or later.
|
|
220
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4.
|
|
221
|
+
* Use {@link SessionsContract.enqueueExactCost}.
|
|
210
222
|
*/
|
|
211
223
|
mintExactCost(params) {
|
|
212
224
|
return (tx) => tx.add(mintExactCost({
|
|
@@ -232,6 +244,9 @@ var SessionsContract = class {
|
|
|
232
244
|
* unless you mean to accept whatever the mark gives you.
|
|
233
245
|
* @returns A function that takes a Transaction object and returns `Option<u256>` — the
|
|
234
246
|
* replacement order id when a partial close leaves quantity open
|
|
247
|
+
* @deprecated Retired by delayed execution (DBU-885): always aborts through Predict v4.
|
|
248
|
+
* Account positions then have no early exit; queued fills are Open records sold with
|
|
249
|
+
* {@link SessionsContract.enqueueRedeemOpen}.
|
|
235
250
|
*/
|
|
236
251
|
redeemLive(params) {
|
|
237
252
|
return (tx) => tx.add(redeemLive({
|
|
@@ -269,6 +284,96 @@ var SessionsContract = class {
|
|
|
269
284
|
};
|
|
270
285
|
}
|
|
271
286
|
/**
|
|
287
|
+
* @description Queue a mint of an exact payout quantity, as `session`. `maxCost` (all-in cap)
|
|
288
|
+
* and `maxProbability` (at most 1e9) are required, and the chain refuses an "unlimited"
|
|
289
|
+
* `maxCost`.
|
|
290
|
+
* @returns A function that takes a Transaction object and returns the record id (u64)
|
|
291
|
+
*/
|
|
292
|
+
enqueueExactQuantity(params) {
|
|
293
|
+
assertQueuedMaxCost(params.maxCost);
|
|
294
|
+
return (tx) => tx.add(enqueueExactQuantity({
|
|
295
|
+
config: this.#generatedConfig,
|
|
296
|
+
arguments: {
|
|
297
|
+
...this.#queuedTarget(params),
|
|
298
|
+
lowerTick: params.lowerTick,
|
|
299
|
+
higherTick: params.higherTick,
|
|
300
|
+
quantity: params.quantity,
|
|
301
|
+
maxCost: params.maxCost,
|
|
302
|
+
maxProbability: params.maxProbability
|
|
303
|
+
}
|
|
304
|
+
}));
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* @description Queue a premium-budget mint, as `session`: sized at τ under `maxPremium`, at
|
|
308
|
+
* least `minQuantity`, with the all-in debit capped by the required `maxCost`.
|
|
309
|
+
* @returns A function that takes a Transaction object and returns the record id (u64)
|
|
310
|
+
*/
|
|
311
|
+
enqueueExactAmount(params) {
|
|
312
|
+
assertQueuedMaxCost(params.maxCost);
|
|
313
|
+
return (tx) => tx.add(enqueueExactAmount({
|
|
314
|
+
config: this.#generatedConfig,
|
|
315
|
+
arguments: {
|
|
316
|
+
...this.#queuedTarget(params),
|
|
317
|
+
lowerTick: params.lowerTick,
|
|
318
|
+
higherTick: params.higherTick,
|
|
319
|
+
maxPremium: params.maxPremium,
|
|
320
|
+
minQuantity: params.minQuantity,
|
|
321
|
+
maxCost: params.maxCost
|
|
322
|
+
}
|
|
323
|
+
}));
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* @description Queue an all-in-budget mint, as `session`: sized at τ so the all-in cost fits
|
|
327
|
+
* `maxCost`, at least `minQuantity`.
|
|
328
|
+
* @returns A function that takes a Transaction object and returns the record id (u64)
|
|
329
|
+
*/
|
|
330
|
+
enqueueExactCost(params) {
|
|
331
|
+
assertQueuedMaxCost(params.maxCost);
|
|
332
|
+
return (tx) => tx.add(enqueueExactCost({
|
|
333
|
+
config: this.#generatedConfig,
|
|
334
|
+
arguments: {
|
|
335
|
+
...this.#queuedTarget(params),
|
|
336
|
+
lowerTick: params.lowerTick,
|
|
337
|
+
higherTick: params.higherTick,
|
|
338
|
+
maxCost: params.maxCost,
|
|
339
|
+
minQuantity: params.minQuantity
|
|
340
|
+
}
|
|
341
|
+
}));
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* @description Queue an early sell of the Open record `recordId` (its queue record ID, not
|
|
345
|
+
* the position's order ID), as `session`. `minProbability` and `minProceeds` are the close
|
|
346
|
+
* floors at τ and are required: on a delegated key, `0` closes at any price, so pass it only
|
|
347
|
+
* on purpose.
|
|
348
|
+
* @returns A function that takes a Transaction object and returns the new record id (u64)
|
|
349
|
+
*/
|
|
350
|
+
enqueueRedeemOpen(params) {
|
|
351
|
+
return (tx) => tx.add(enqueueRedeemOpen({
|
|
352
|
+
config: this.#generatedConfig,
|
|
353
|
+
arguments: {
|
|
354
|
+
...this.#queuedTarget(params),
|
|
355
|
+
recordId: params.recordId,
|
|
356
|
+
closeQuantity: params.closeQuantity,
|
|
357
|
+
minProbability: params.minProbability,
|
|
358
|
+
minProceeds: params.minProceeds
|
|
359
|
+
}
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
362
|
+
#queuedTarget(params) {
|
|
363
|
+
return {
|
|
364
|
+
queue: params.queueId ?? deriveQueueId(params.queueRegistry, params.expiryMarketId),
|
|
365
|
+
market: params.expiryMarketId,
|
|
366
|
+
accountRegistry: this.#config.accountRegistry,
|
|
367
|
+
wrapper: params.wrapperId,
|
|
368
|
+
desk: params.orderDesk,
|
|
369
|
+
config: params.protocolConfig,
|
|
370
|
+
propbookRegistry: params.oracleRegistry,
|
|
371
|
+
pyth: params.pythFeed,
|
|
372
|
+
bsValues: params.blockScholesValueStore,
|
|
373
|
+
bsSvi: params.blockScholesSviStore
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
272
377
|
* @description Decode an Account's stored grants from the raw BCS content of its
|
|
273
378
|
* `DataKey<SessionsApp>` dynamic FIELD object — the whole
|
|
274
379
|
* `Field<DataKey<SessionsApp>, SessionsData>`, as the core API returns it, not the
|