@vercora-protocol/sdk 0.0.17 → 0.0.19

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 CHANGED
@@ -5,9 +5,25 @@ All notable changes to `@vercora-protocol/sdk` are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
 
8
- ### [0.0.17](https://github.com/vercora/vercora-anchor/compare/v0.0.16...v0.0.17) (2026-04-10)
8
+ ### [0.0.19](https://github.com/vercora/vercora-anchor/compare/v0.0.18...v0.0.19) (2026-04-12)
9
9
 
10
- ### 0.0.16 (2026-04-10)
10
+
11
+ ### Features
12
+
13
+ * **all:** add updates to void market and withdraw surplus ([fd4a496](https://github.com/vercora/vercora-anchor/commit/fd4a49678f11f34be9e5078b87f7e877b49e88c1))
14
+
15
+ ### [0.0.18](https://github.com/vercora/vercora-anchor/compare/v0.0.17...v0.0.18) (2026-04-11)
16
+
17
+
18
+ ### Features
19
+
20
+ * **anchor:** allow void parimutuel and withdraw all stake ([0a8d955](https://github.com/vercora/vercora-anchor/commit/0a8d955639700a9f6fd2a527ec9583b220daed81))
21
+
22
+ ### Changed
23
+
24
+ * **anchor:** market **creator** cannot `void_market` while pari **outcome pools** (active stakes) or complete-set outstanding is non-zero; **global config** authorities can still void (use a platform wallet to cancel live markets).
25
+
26
+ ### 0.0.17 (2026-04-10)
11
27
 
12
28
  ### Features
13
29
 
@@ -25,10 +41,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
25
41
  - **all:** renaming project ([efa79b1](https://github.com/vercora/vercora-anchor/commit/efa79b136475a3c47fdbb215c5ed1708b85d807e))
26
42
  - **all:** update pari mutuel stake calculation ([917f820](https://github.com/vercora/vercora-anchor/commit/917f82039200165148c7d0b77e1a6c7d46dcceef))
27
43
  - **all:** update ui for complete-set implementation ([17575c8](https://github.com/vercora/vercora-anchor/commit/17575c8b02028e9edb4665196ef6bd2c9fc9028f))
28
- - **anchor:** add abandon market methods ([79a348e](https://github.com/vercora/vercora-anchor/commit/79a348ea10a34475aa4ae61043f75f88afb1f5be))
29
- - **anchor:** add new market outcome and max amount per outcome ([d6e7119](https://github.com/vercora/vercora-anchor/commit/d6e71197cdbc821ed3b3c22eef2bf00347b17f8a))
30
- - **anchor:** add platform id and update state size ([37c7229](https://github.com/vercora/vercora-anchor/commit/37c7229d9ba55a035768719454a686bd995e70be))
31
- - **anchor:** crate a key provider ([1e09a71](https://github.com/vercora/vercora-anchor/commit/1e09a71460c1d7d5d798ba7ca535fb88eda5f970))
32
44
  - **sdk:** add changelog to sdk ([dae1319](https://github.com/vercora/vercora-anchor/commit/dae1319467880f14b09f2a37c84dc8e22b32d368))
33
45
  - **sdk:** add creator with platform filter ([73865ba](https://github.com/vercora/vercora-anchor/commit/73865ba947240f967bdb46cd8d5242b2585a1b91))
34
46
  - **sdk:** add fetch markets by platform ([4e9a723](https://github.com/vercora/vercora-anchor/commit/4e9a723f2d9ff730faf3036539187d5260ec73ae))
@@ -46,6 +58,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
46
58
  - **all:** update early withdraw fee ([c16aeb9](https://github.com/vercora/vercora-anchor/commit/c16aeb9b735488d7c73150dfe4a84f2bb19c3167))
47
59
  - **all:** update sdk and anchor test deployment ([bc4cf54](https://github.com/vercora/vercora-anchor/commit/bc4cf54ec1e03ca6de6e1b65028faa541a615a28))
48
60
 
49
- ## [0.0.15] - 2026-04-10
61
+ ## [0.0.16] - 2026-04-10
50
62
 
51
- Baseline entry for automated releases (`standard-version`). Earlier releases are not listed here; add bullets manually if you need a historical record.
63
+ Baseline entry for automated releases (`standard-version`). Earlier releases are not listed here
package/README.md CHANGED
@@ -61,6 +61,8 @@ Public properties: **`program`**, **`connection`**, **`globalConfig`** (PDA).
61
61
  | ----------------------------------- | ---------------------------------------------- |
62
62
  | `initializeConfig(params)` | One-time init; `authority` = connected wallet. |
63
63
  | `updateConfig(params)` | Update fees, treasury, authorities. |
64
+
65
+ **`secondaryAuthority` in `InitializeConfigParams` / `UpdateConfigParams`:** both map to the **instruction data** field `secondary_authority` on-chain (not only the `secondaryAuthority` account meta). Every `updateConfig` **rewrites** `GlobalConfig.secondary_authority` from `params.secondaryAuthority`. When you only change fees or treasury, pass the **existing** secondary pubkey you want to keep (from `fetchGlobalConfig()`); passing the primary key here collapses secondary into primary and removes the backup signer used for platform-only actions (e.g. voiding markets that still hold user liquidity).
64
66
  | `addAllowedCollateralMint(mint)` | Allowlist a collateral mint. |
65
67
  | `removeAllowedCollateralMint(mint)` | Remove from allowlist. |
66
68
 
@@ -84,7 +86,7 @@ Public properties: **`program`**, **`connection`**, **`globalConfig`** (PDA).
84
86
  | `createMarketFull(creator, collateralMint, creatorFeeAccount, resolverPubkeys, params)` | Runs create → outcomes → resolvers (+ mints **or** pari state in one flow). |
85
87
  | `updateParimutuelState(marketPda, params)` | Creator updates penalty split and **`isEarlyWithdrawAllowed`** (open pari pool). |
86
88
 
87
- **`CreateMarketParams` (pari-mutuel):** optional **`isEarlyWithdrawAllowed`** (default **`true`**). **`UpdateParimutuelStateParams`** requires **`isEarlyWithdrawAllowed`** together with penalty fields — creators use **`updateParimutuelState`** to change early-withdraw allowance **after** launch (same instruction as penalty edits; market must still be open and not resolved/voided). When **`false`**, **`parimutuelWithdraw`** fails with **`EarlyWithdrawNotAllowed`** until close or resolution. Ignored for complete-set markets. Read **`fetchMarket(marketPda).isEarlyWithdrawAllowed`**.
89
+ **`CreateMarketParams` (pari-mutuel):** optional **`isEarlyWithdrawAllowed`** (default **`true`**). **`UpdateParimutuelStateParams`** requires **`isEarlyWithdrawAllowed`** together with penalty fields — creators use **`updateParimutuelState`** to change early-withdraw allowance **after** launch (same instruction as penalty edits; market must still be open and not resolved/voided). When **`false`**, early **`parimutuelWithdraw`** fails with **`EarlyWithdrawNotAllowed`** until close or resolution **(voided markets are exempt — full net-stake refunds, no penalty fees).** Ignored for complete-set markets. Read **`fetchMarket(marketPda).isEarlyWithdrawAllowed`**.
88
90
 
89
91
  ### Complete-set trading
90
92
 
@@ -99,7 +101,7 @@ Public properties: **`program`**, **`connection`**, **`globalConfig`** (PDA).
99
101
  | Method | Purpose |
100
102
  | --------------------------------------- | ------------------------------------------------------- |
101
103
  | `parimutuelStake(marketPda, params)` | Stake; signer is **provider wallet** (`user` on-chain). |
102
- | `parimutuelWithdraw(marketPda, params)` | Early exit (penalty may apply). Errors if `Market.isEarlyWithdrawAllowed` is false. |
104
+ | `parimutuelWithdraw(marketPda, params)` | Early exit (penalty may apply) **or**, after **`voidMarket`**, full net-stake refund (no fees). Early path errors if `isEarlyWithdrawAllowed` is false; void path ignores that flag. |
103
105
  | `parimutuelClaim(marketPda, params)` | Claim after resolution. |
104
106
 
105
107
  ### Resolution & lifecycle
@@ -110,7 +112,8 @@ Public properties: **`program`**, **`connection`**, **`globalConfig`** (PDA).
110
112
  | `revokeResolutionVote(marketPda, params)` | Clear vote before changing. |
111
113
  | `finalizeResolution(marketPda, params)` | Anyone, once threshold met. |
112
114
  | `closeMarketEarly(marketPda, params)` | Creator / config authority before `close_at`. |
113
- | `voidMarket(marketPda, params)` | Void market. |
115
+ | `voidMarket(marketPda, params)` | Void market. **Creator** cannot void while pari **outcome pools** (active stakes) or complete-set outstanding is non-zero — use a **global config** authority to cancel live markets. Parimutuel: then **`parimutuelWithdraw`** for full net refunds. |
116
+ | `claimVoidedParimutuelSurplus(marketPda, params)` | **Global config authority only.** After void, if pari **outcome pools** are zero but **`total_pool`** still holds early-exit **pool-keep** (no stakers left), sweeps that amount from the vault to the platform treasury. |
114
117
  | `abandonMarket(marketPda, params)` | Creator abandons empty market (reclaim rent). |
115
118
 
116
119
  ### Discovery & reads
@@ -121,6 +124,8 @@ Public properties: **`program`**, **`connection`**, **`globalConfig`** (PDA).
121
124
  | `fetchMarket(marketPda)` | `Market` account. |
122
125
  | `fetchAllMarkets(platformId?)` | All markets (optional `memcmp` on `platform_id`); includes outcome labels. |
123
126
  | `fetchMarketsByPlatform(platformId)` | Same as `fetchAllMarkets(platformId)`. |
127
+ | `fetchVoidedMarkets()` | `Market` accounts with `is_voided` only (RPC `memcmp` + `dataSize`). |
128
+ | `fetchVoidedParimutuelSurplusCandidates()` | Subset: voided **pari**, not resolved, `sum(outcome_pools)=0`, `total_pool` > 0 (claimable). |
124
129
  | `fetchMarketsByCreator(creator)` | Raw rows `{ pubkey, account }[]`, memcmp on creator. |
125
130
  | `getUsersMarkets(creator, filters?)` | **`ListedMarket[]`** for creator; optional `platformId` (RPC) + `categoryId` (client filter). |
126
131
  | `fetchMarketOutcomeLabels(marketPda, outcomeCount)` | Outcome labels. |
@@ -330,7 +335,11 @@ await client.parimutuelWithdraw(marketPda, {
330
335
  outcomeIndex: 0,
331
336
  amount: new BN(500_000),
332
337
  });
333
- // If Market.isEarlyWithdrawAllowed is false (from create or updateParimutuelState), parimutuelWithdraw throws EarlyWithdrawNotAllowed.
338
+ // If Market.isEarlyWithdrawAllowed is false (from create or updateParimutuelState), parimutuelWithdraw throws EarlyWithdrawNotAllowed — unless the market is voided (then full net stake back, no fees).
339
+
340
+ // After voidMarket on a pari pool, recover stakes (repeat per outcome / until active stake is 0):
341
+ // await client.voidMarket(marketPda, { marketId });
342
+ // await client.parimutuelWithdraw(marketPda, { marketId, outcomeIndex: 0, amount: userActiveStakeBn });
334
343
 
335
344
  await client.parimutuelClaim(marketPda, {
336
345
  marketId,
@@ -423,7 +432,7 @@ Use **`derivePlatformRegistry`**, **`derivePlatformProfile`**, **`deriveMarketCa
423
432
 
424
433
  Use `marketType: 'parimutuel'` or `'completeSet'` at creation; the choice is permanent.
425
434
 
426
- - **Parimutuel** — pooled stakes, no outcome SPLs; good default for prediction apps. **`isEarlyWithdrawAllowed`** is set at create (default **allowed**) and can be changed by the creator via **`updateParimutuelState`**; when disabled, **`parimutuelWithdraw`** is blocked until close or resolution.
435
+ - **Parimutuel** — pooled stakes, no outcome SPLs; good default for prediction apps. **`isEarlyWithdrawAllowed`** is set at create (default **allowed**) and can be changed by the creator via **`updateParimutuelState`**; when disabled, early **`parimutuelWithdraw`** is blocked until close or resolution. After **`voidMarket`**, participants **`parimutuelWithdraw`** full net stakes (no penalty / withdraw fees).
427
436
  - **Complete-set** — outcome SPL tokens; you still need external liquidity for single-leg trading.
428
437
 
429
438
  ## PDA helpers
@@ -459,7 +468,7 @@ const marketPda = deriveMarket(PROGRAM_ID, creatorPubkey, marketId);
459
468
  const vaultPda = deriveVault(PROGRAM_ID, marketPda);
460
469
  ```
461
470
 
462
- Offsets **`MARKET_ACCOUNT_CREATOR_MEMCMP_OFFSET`** and **`MARKET_ACCOUNT_PLATFORM_ID_MEMCMP_OFFSET`** are exported for custom `getProgramAccounts` filters.
471
+ Offsets **`MARKET_ACCOUNT_CREATOR_MEMCMP_OFFSET`**, **`MARKET_ACCOUNT_PLATFORM_ID_MEMCMP_OFFSET`**, and **`MARKET_ACCOUNT_IS_VOIDED_MEMCMP_OFFSET`** are exported for custom `getProgramAccounts` filters. Use **`marketIsVoidedMemcmp(true)`** for the Borsh-encoded `bool` bytes at that offset. **`fetchVoidedMarkets`** / **`fetchVoidedParimutuelSurplusCandidates`** apply the voided filter so listing cost scales with voided markets only.
463
472
 
464
473
  ## `marketUi` helpers
465
474
 
@@ -504,9 +513,9 @@ Start from **`agents/skill.md`** in this package for a stable entrypoint; the fu
504
513
  - Optional: `registerPlatform` → `createMarketCategory` → `createMarket` with ids.
505
514
  - Create: `createMarketFull` **or** `createMarket` + resolver / outcome / mint **or** pari init.
506
515
  - Complete-set: `mintCompleteSet` → `redeemCompleteSet` → `redeemWinning`.
507
- - Parimutuel: `parimutuelStake` → optional `parimutuelWithdraw` (if `fetchMarket` `isEarlyWithdrawAllowed`) → `parimutuelClaim`; creator may toggle early withdraw with `updateParimutuelState` (includes penalty fields).
516
+ - Parimutuel: `parimutuelStake` → optional `parimutuelWithdraw` (if `isEarlyWithdrawAllowed`, or after `voidMarket` for full refunds) → `parimutuelClaim`; creator may toggle early withdraw with `updateParimutuelState` (includes penalty fields).
508
517
  - Resolution: `voteResolution` → `finalizeResolution`.
509
- 4. **Discovery**: `fetchAllMarkets`, `getUsersMarkets`, `fetchMarketsByCreator`.
518
+ 4. **Discovery**: `fetchAllMarkets`, `getUsersMarkets`, `fetchMarketsByCreator`, `fetchVoidedMarkets`, `fetchVoidedParimutuelSurplusCandidates`.
510
519
  5. **Safety**: verify signers, PDAs, ATAs, and RPC limits on `getProgramAccounts`.
511
520
 
512
521
  ## Changelog
package/agents/skill.md CHANGED
@@ -68,5 +68,8 @@ Paths are under `node_modules/@vercora-protocol/sdk/` after install.
68
68
 
69
69
  ## Quick guardrails (parimutuel)
70
70
 
71
- - After `fetchMarket(marketPda)`, read **`isEarlyWithdrawAllowed`**. If `false`, do not propose **`parimutuelWithdraw`** until close/resolution (on-chain error **`EarlyWithdrawNotAllowed`**). Creators may change this with **`updateParimutuelState`** (with penalty bps).
71
+ - **`updateConfig`:** `params.secondaryAuthority` is written to chain on **every** call. When only adjusting fees/treasury, pass the **existing** secondary pubkey to keep (from `fetchGlobalConfig()`). Passing the primary key there removes the backup authority.
72
+ - After `fetchMarket(marketPda)`, read **`isEarlyWithdrawAllowed`**. If `false`, do not propose early-exit **`parimutuelWithdraw`** until close/resolution (**`EarlyWithdrawNotAllowed`**), **unless `isVoided`** — then **`parimutuelWithdraw`** refunds full net stakes (no penalty / withdraw fees). Creators may change early exit with **`updateParimutuelState`** (with penalty bps).
73
+ - **`voidMarket`:** the **creator** cannot void while pari **outcome pools** (active stakes) or complete-set outstanding is non-zero (**`CreatorCannotVoidWithActiveLiquidity`**). Propose a **global config authority** wallet to cancel live markets; SDK passes **`parimutuelState`** for pari markets.
74
+ - **`claimVoidedParimutuelSurplus`:** **global authority only** — if a voided pari market has **zero outcome stakes** but **`total_pool` > 0** (early-exit pool-keep left in the vault), sweep that surplus to the platform treasury. Call after users have finished void refunds.
72
75
  - Use **`isClosedEarly`**, **`isVoided`**, **`winningOutcomeIndex`** for lifecycle — not legacy `closed` / `voided` / `resolvedOutcomeIndex` names.
package/dist/client.d.ts CHANGED
@@ -2,7 +2,7 @@ import * as anchor from '@coral-xyz/anchor';
2
2
  import { Program, BN } from '@coral-xyz/anchor';
3
3
  import { Connection, PublicKey } from '@solana/web3.js';
4
4
  import type { Vercora } from './generated/vercora';
5
- import type { CreateMarketParams, InitializeParimutuelStateParams, ParimutuelStakeParams, ParimutuelWithdrawParams, ParimutuelClaimParams, InitializeConfigParams, UpdateConfigParams, InitializeMarketResolverSlotsParams, InitializeMarketOutcomeSlotsParams, MintCompleteSetParams, RedeemCompleteSetParams, VoteResolutionParams, FinalizeResolutionParams, RevokeResolutionVoteParams, RedeemWinningParams, CloseMarketEarlyParams, VoidMarketParams, AbandonMarketParams, GlobalConfigAccount, MarketAccount, ResolverAccount, UpsertUserProfileParams, VerifyUserProfileParams, UserProfileAccount, UpsertPlatformProfileParams, VerifyPlatformProfileParams, PlatformProfileAccount, ParimutuelStateAccount, ParimutuelPositionAccount, ParimutuelOdds, MarketCategoryAccount, CreateMarketCategoryParams, UpdateMarketCategoryParams, RegisterPlatformParams, UpdateParimutuelStateParams, ResolutionVoteAccount, ListedMarket, GetUsersMarketsFilters } from './types';
5
+ import type { CreateMarketParams, InitializeParimutuelStateParams, ParimutuelStakeParams, ParimutuelWithdrawParams, ParimutuelClaimParams, InitializeConfigParams, UpdateConfigParams, InitializeMarketResolverSlotsParams, InitializeMarketOutcomeSlotsParams, MintCompleteSetParams, RedeemCompleteSetParams, VoteResolutionParams, FinalizeResolutionParams, RevokeResolutionVoteParams, RedeemWinningParams, CloseMarketEarlyParams, VoidMarketParams, ClaimVoidedParimutuelSurplusParams, AbandonMarketParams, GlobalConfigAccount, MarketAccount, ResolverAccount, UpsertUserProfileParams, VerifyUserProfileParams, UserProfileAccount, UpsertPlatformProfileParams, VerifyPlatformProfileParams, PlatformProfileAccount, ParimutuelStateAccount, ParimutuelPositionAccount, ParimutuelOdds, MarketCategoryAccount, CreateMarketCategoryParams, UpdateMarketCategoryParams, RegisterPlatformParams, UpdateParimutuelStateParams, ResolutionVoteAccount, ListedMarket, GetUsersMarketsFilters, VoidedParimutuelSurplusCandidate } from './types';
6
6
  export declare class PredictionMarketClient {
7
7
  readonly program: Program<Vercora>;
8
8
  readonly connection: Connection;
@@ -33,6 +33,8 @@ export declare class PredictionMarketClient {
33
33
  /**
34
34
  * Update global config. Pass `newAuthority` equal to current authority to keep it unchanged.
35
35
  * To rotate the primary authority pass the new pubkey — it must be a valid system account.
36
+ * `params.secondaryAuthority` is the **on-chain** secondary after this tx — pass the intended
37
+ * backup/platform pubkey each time (see `UpdateConfigParams`), not only when rotating secondaries.
36
38
  */
37
39
  updateConfig(params: UpdateConfigParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
38
40
  /**
@@ -58,7 +60,7 @@ export declare class PredictionMarketClient {
58
60
  * Returns the market PDA and the transaction signature.
59
61
  *
60
62
  * For pari-mutuel markets, `params.isEarlyWithdrawAllowed` (default `true`) is stored on-chain.
61
- * When `false`, `parimutuelWithdraw` fails until close/resolution (see `PredictionMarketError::EarlyWithdrawNotAllowed`).
63
+ * When `false`, early `parimutuelWithdraw` fails until close/resolution (`EarlyWithdrawNotAllowed`), except after `voidMarket` (full net-stake refunds).
62
64
  */
63
65
  createMarket(creator: PublicKey, collateralMint: PublicKey, creatorFeeAccount: PublicKey, params: CreateMarketParams, opts?: anchor.web3.ConfirmOptions): Promise<{
64
66
  marketPda: PublicKey;
@@ -98,9 +100,13 @@ export declare class PredictionMarketClient {
98
100
  updateParimutuelState(marketPda: PublicKey, params: UpdateParimutuelStateParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
99
101
  parimutuelStake(marketPda: PublicKey, params: ParimutuelStakeParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
100
102
  /**
101
- * Reduce stake before `close_at` / resolution (early exit). Penalties and platform fees may apply.
102
- * Fails with Anchor error **`EarlyWithdrawNotAllowed`** when `fetchMarket(marketPda).isEarlyWithdrawAllowed === false`
103
- * (set at `createMarket` / `createMarketFull`, or updated by `updateParimutuelState`).
103
+ * Reduce stake before `close_at` / resolution (early exit), **or** after `voidMarket` on a pari market.
104
+ *
105
+ * **Early exit:** penalties and platform fees may apply. Fails with **`EarlyWithdrawNotAllowed`** when
106
+ * `fetchMarket(marketPda).isEarlyWithdrawAllowed === false` (ignored once the market is voided).
107
+ *
108
+ * **Voided pari market:** withdraws the full net **`amount`** from the vault (no penalty, no withdraw
109
+ * platform fee, no per-tx SOL platform fee). Call after `voidMarket` so participants recover stakes.
104
110
  */
105
111
  parimutuelWithdraw(marketPda: PublicKey, params: ParimutuelWithdrawParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
106
112
  parimutuelClaim(marketPda: PublicKey, params: ParimutuelClaimParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
@@ -141,8 +147,21 @@ export declare class PredictionMarketClient {
141
147
  redeemWinning(user: PublicKey, marketPda: PublicKey, collateralMint: PublicKey, userCollateralAccount: PublicKey, params: RedeemWinningParams, opts?: anchor.web3.ConfirmOptions, platformTreasuryWallet?: PublicKey): Promise<string>;
142
148
  /** Market creator or global config authority can close the market before `close_at`. */
143
149
  closeMarketEarly(marketPda: PublicKey, params: CloseMarketEarlyParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
144
- /** Void the market (cancel); enables full-set redemption for all holders. Creator or global authority only. */
150
+ /**
151
+ * Void the market (cancel). Creator or global authority only.
152
+ *
153
+ * **Creator** cannot void while pari **outcome pools** (active stakes) or **complete-set outstanding**
154
+ * is non-zero (`CreatorCannotVoidWithActiveLiquidity`). Use a **global config** wallet to cancel live markets.
155
+ * Passes **`parimutuelState`** for pari markets (`null` for complete-set).
156
+ */
145
157
  voidMarket(marketPda: PublicKey, params: VoidMarketParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
158
+ /**
159
+ * Sweep stranded pari **total_pool** (early-exit pool-keep bonus) on a **voided** market to the
160
+ * platform treasury when **outcome pools are already zero** (no remaining stakes).
161
+ *
162
+ * **Global config primary or secondary authority only** — the connected wallet must be an allowed authority.
163
+ */
164
+ claimVoidedParimutuelSurplus(marketPda: PublicKey, params: ClaimVoidedParimutuelSurplusParams, opts?: anchor.web3.ConfirmOptions): Promise<string>;
146
165
  /**
147
166
  * Abandon an incomplete market and recover all rent (market account + vault).
148
167
  *
@@ -186,6 +205,20 @@ export declare class PredictionMarketClient {
186
205
  * Sorted by `market_id` ascending.
187
206
  */
188
207
  getUsersMarkets(creator: PublicKey, filters?: GetUsersMarketsFilters): Promise<ListedMarket[]>;
208
+ /**
209
+ * List `Market` accounts with `is_voided === true` via RPC `memcmp` + `dataSize`
210
+ * (does **not** scan non-voided markets). Uses {@link marketIsVoidedMemcmp}.
211
+ */
212
+ fetchVoidedMarkets(): Promise<{
213
+ pubkey: PublicKey;
214
+ account: MarketAccount;
215
+ }[]>;
216
+ /**
217
+ * Voided pari markets where every outcome bucket is zero but `total_pool` still holds early-exit
218
+ * pool-keep — claimable via {@link claimVoidedParimutuelSurplus}. Uses {@link fetchVoidedMarkets}
219
+ * so RPC listing cost scales with **voided** markets only (not all markets).
220
+ */
221
+ fetchVoidedParimutuelSurplusCandidates(): Promise<VoidedParimutuelSurplusCandidate[]>;
189
222
  /**
190
223
  * Read `MarketOutcome.label` for each active outcome index (parallel fetches).
191
224
  * Missing accounts yield `Outcome {i+1}` placeholders.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -201,6 +201,8 @@ class PredictionMarketClient {
201
201
  /**
202
202
  * Update global config. Pass `newAuthority` equal to current authority to keep it unchanged.
203
203
  * To rotate the primary authority pass the new pubkey — it must be a valid system account.
204
+ * `params.secondaryAuthority` is the **on-chain** secondary after this tx — pass the intended
205
+ * backup/platform pubkey each time (see `UpdateConfigParams`), not only when rotating secondaries.
204
206
  */
205
207
  async updateConfig(params, opts) {
206
208
  return this.program.methods
@@ -303,7 +305,7 @@ class PredictionMarketClient {
303
305
  * Returns the market PDA and the transaction signature.
304
306
  *
305
307
  * For pari-mutuel markets, `params.isEarlyWithdrawAllowed` (default `true`) is stored on-chain.
306
- * When `false`, `parimutuelWithdraw` fails until close/resolution (see `PredictionMarketError::EarlyWithdrawNotAllowed`).
308
+ * When `false`, early `parimutuelWithdraw` fails until close/resolution (`EarlyWithdrawNotAllowed`), except after `voidMarket` (full net-stake refunds).
307
309
  */
308
310
  async createMarket(creator, collateralMint, creatorFeeAccount, params, opts) {
309
311
  const marketPda = (0, pda_1.deriveMarket)(this.program.programId, creator, params.marketId);
@@ -584,9 +586,13 @@ class PredictionMarketClient {
584
586
  .rpc(opts ?? { skipPreflight: true });
585
587
  }
586
588
  /**
587
- * Reduce stake before `close_at` / resolution (early exit). Penalties and platform fees may apply.
588
- * Fails with Anchor error **`EarlyWithdrawNotAllowed`** when `fetchMarket(marketPda).isEarlyWithdrawAllowed === false`
589
- * (set at `createMarket` / `createMarketFull`, or updated by `updateParimutuelState`).
589
+ * Reduce stake before `close_at` / resolution (early exit), **or** after `voidMarket` on a pari market.
590
+ *
591
+ * **Early exit:** penalties and platform fees may apply. Fails with **`EarlyWithdrawNotAllowed`** when
592
+ * `fetchMarket(marketPda).isEarlyWithdrawAllowed === false` (ignored once the market is voided).
593
+ *
594
+ * **Voided pari market:** withdraws the full net **`amount`** from the vault (no penalty, no withdraw
595
+ * platform fee, no per-tx SOL platform fee). Call after `voidMarket` so participants recover stakes.
590
596
  */
591
597
  async parimutuelWithdraw(marketPda, params, opts) {
592
598
  const parimutuelState = (0, pda_1.deriveParimutuelState)(this.program.programId, marketPda);
@@ -842,14 +848,58 @@ class PredictionMarketClient {
842
848
  })
843
849
  .rpc(opts ?? { skipPreflight: true });
844
850
  }
845
- /** Void the market (cancel); enables full-set redemption for all holders. Creator or global authority only. */
851
+ /**
852
+ * Void the market (cancel). Creator or global authority only.
853
+ *
854
+ * **Creator** cannot void while pari **outcome pools** (active stakes) or **complete-set outstanding**
855
+ * is non-zero (`CreatorCannotVoidWithActiveLiquidity`). Use a **global config** wallet to cancel live markets.
856
+ * Passes **`parimutuelState`** for pari markets (`null` for complete-set).
857
+ */
846
858
  async voidMarket(marketPda, params, opts) {
859
+ const market = await this.fetchMarket(marketPda);
860
+ const isPari = market.marketType &&
861
+ typeof market.marketType === "object" &&
862
+ "parimutuel" in market.marketType;
863
+ const parimutuelState = isPari
864
+ ? (0, pda_1.deriveParimutuelState)(this.program.programId, marketPda)
865
+ : null;
847
866
  return this.program.methods
848
867
  .voidMarket({ marketId: params.marketId })
849
868
  .accounts({
850
869
  signer: this.walletKey,
851
870
  globalConfig: this.globalConfig,
852
871
  market: marketPda,
872
+ parimutuelState,
873
+ })
874
+ .rpc(opts ?? { skipPreflight: true });
875
+ }
876
+ /**
877
+ * Sweep stranded pari **total_pool** (early-exit pool-keep bonus) on a **voided** market to the
878
+ * platform treasury when **outcome pools are already zero** (no remaining stakes).
879
+ *
880
+ * **Global config primary or secondary authority only** — the connected wallet must be an allowed authority.
881
+ */
882
+ async claimVoidedParimutuelSurplus(marketPda, params, opts) {
883
+ const market = await this.fetchMarket(marketPda);
884
+ const collateralMint = market.collateralMint;
885
+ const collateralTokenProgram = await this.collateralTokenProgramForMint(collateralMint);
886
+ const globalConfig = await this.fetchGlobalConfig();
887
+ const platformTreasuryWallet = globalConfig.platformTreasury;
888
+ const platformTreasuryAta = (0, spl_token_1.getAssociatedTokenAddressSync)(collateralMint, platformTreasuryWallet, false, collateralTokenProgram, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
889
+ return this.program.methods
890
+ .claimVoidedParimutuelSurplus({ marketId: params.marketId })
891
+ .accounts({
892
+ authority: this.walletKey,
893
+ globalConfig: this.globalConfig,
894
+ market: marketPda,
895
+ parimutuelState: (0, pda_1.deriveParimutuelState)(this.program.programId, marketPda),
896
+ vault: (0, pda_1.deriveVault)(this.program.programId, marketPda),
897
+ collateralMint,
898
+ platformTreasuryWallet,
899
+ platformTreasuryAta,
900
+ collateralTokenProgram,
901
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
902
+ systemProgram: web3_js_1.SystemProgram.programId,
853
903
  })
854
904
  .rpc(opts ?? { skipPreflight: true });
855
905
  }
@@ -1027,6 +1077,78 @@ class PredictionMarketClient {
1027
1077
  }
1028
1078
  return listed;
1029
1079
  }
1080
+ /**
1081
+ * List `Market` accounts with `is_voided === true` via RPC `memcmp` + `dataSize`
1082
+ * (does **not** scan non-voided markets). Uses {@link marketIsVoidedMemcmp}.
1083
+ */
1084
+ async fetchVoidedMarkets() {
1085
+ const marketClient = this.program.account.market;
1086
+ const filters = [
1087
+ { memcmp: (0, pda_1.marketIsVoidedMemcmp)(true) },
1088
+ { dataSize: marketClient.size },
1089
+ ];
1090
+ const rows = await marketClient.all(filters);
1091
+ return rows.map((r) => ({ pubkey: r.publicKey, account: r.account }));
1092
+ }
1093
+ /**
1094
+ * Voided pari markets where every outcome bucket is zero but `total_pool` still holds early-exit
1095
+ * pool-keep — claimable via {@link claimVoidedParimutuelSurplus}. Uses {@link fetchVoidedMarkets}
1096
+ * so RPC listing cost scales with **voided** markets only (not all markets).
1097
+ */
1098
+ async fetchVoidedParimutuelSurplusCandidates() {
1099
+ const voided = await this.fetchVoidedMarkets();
1100
+ const pariClient = this.program.account.parimutuelState;
1101
+ const narrowed = voided.filter(({ account }) => {
1102
+ const isPari = account.marketType &&
1103
+ typeof account.marketType === 'object' &&
1104
+ 'parimutuel' in account.marketType;
1105
+ if (!isPari)
1106
+ return false;
1107
+ if (account.winningOutcomeIndex != null)
1108
+ return false;
1109
+ return true;
1110
+ });
1111
+ const out = [];
1112
+ const chunkSize = 25;
1113
+ for (let i = 0; i < narrowed.length; i += chunkSize) {
1114
+ const chunk = narrowed.slice(i, i + chunkSize);
1115
+ const pariStates = await Promise.all(chunk.map((c) => pariClient
1116
+ .fetch((0, pda_1.deriveParimutuelState)(this.program.programId, c.pubkey))
1117
+ .catch(() => null)));
1118
+ for (let j = 0; j < chunk.length; j++) {
1119
+ const pari = pariStates[j];
1120
+ if (!pari)
1121
+ continue;
1122
+ const outcomeCount = chunk[j].account.outcomeCount;
1123
+ let sumPools = new anchor_1.BN(0);
1124
+ for (let k = 0; k < outcomeCount; k++) {
1125
+ sumPools = sumPools.add((0, pda_1.bnLike)(pari.outcomePools[k] ?? 0));
1126
+ }
1127
+ const totalPool = (0, pda_1.bnLike)(pari.totalPool);
1128
+ if (sumPools.isZero() && totalPool.gt(new anchor_1.BN(0))) {
1129
+ const a = chunk[j].account;
1130
+ out.push({
1131
+ marketPda: chunk[j].pubkey.toBase58(),
1132
+ title: a.title ?? '',
1133
+ marketId: a.marketId.toString(10),
1134
+ creator: a.creator.toBase58(),
1135
+ surplusBaseUnits: totalPool.toString(10),
1136
+ collateralDecimals: a.collateralDecimals,
1137
+ });
1138
+ }
1139
+ }
1140
+ }
1141
+ out.sort((a, b) => {
1142
+ const ba = BigInt(a.surplusBaseUnits);
1143
+ const bb = BigInt(b.surplusBaseUnits);
1144
+ if (bb > ba)
1145
+ return 1;
1146
+ if (bb < ba)
1147
+ return -1;
1148
+ return 0;
1149
+ });
1150
+ return out;
1151
+ }
1030
1152
  /**
1031
1153
  * Read `MarketOutcome.label` for each active outcome index (parallel fetches).
1032
1154
  * Missing accounts yield `Outcome {i+1}` placeholders.