@vercora-protocol/sdk 0.0.9 → 0.0.11
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/README.md +326 -102
- package/dist/client.d.ts +13 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +68 -21
- package/dist/client.js.map +1 -1
- package/dist/idl/vercora.json +4692 -0
- package/dist/idl.d.ts +7 -0
- package/dist/idl.d.ts.map +1 -0
- package/dist/idl.js +13 -0
- package/dist/idl.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,94 +14,205 @@ yarn add @vercora-protocol/sdk
|
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
npm install @coral-xyz/anchor @solana/web3.js @solana/spl-token bn.js
|
|
17
|
+
# or
|
|
18
|
+
yarn add @coral-xyz/anchor @solana/web3.js @solana/spl-token bn.js
|
|
17
19
|
```
|
|
18
20
|
|
|
19
21
|
## Quick start
|
|
20
22
|
|
|
21
23
|
```ts
|
|
22
24
|
import * as anchor from "@coral-xyz/anchor";
|
|
23
|
-
import { Program } from "@coral-xyz/anchor";
|
|
24
25
|
import { Connection, clusterApiUrl } from "@solana/web3.js";
|
|
25
|
-
import { PredictionMarketClient } from "@vercora-protocol/sdk";
|
|
26
|
+
import { IDL, PROGRAM_ID, PredictionMarketClient } from "@vercora-protocol/sdk";
|
|
26
27
|
import type { Vercora } from "@vercora-protocol/sdk";
|
|
27
|
-
import { BN } from "bn.js";
|
|
28
28
|
|
|
29
|
-
// 1. Set up an Anchor provider (browser wallet / NodeWallet)
|
|
30
29
|
const connection = new Connection(clusterApiUrl("devnet"));
|
|
31
30
|
const provider = new anchor.AnchorProvider(connection, wallet, {});
|
|
32
31
|
anchor.setProvider(provider);
|
|
33
32
|
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
const program = new anchor.Program<Vercora>(IDL, PROGRAM_ID, provider);
|
|
37
|
-
|
|
38
|
-
// 3. Create the client
|
|
33
|
+
// Bundled IDL — program id is embedded in `IDL.address` (`PROGRAM_ID` matches it)
|
|
34
|
+
const program = new anchor.Program<Vercora>(IDL, provider);
|
|
39
35
|
const client = new PredictionMarketClient(program);
|
|
40
36
|
```
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
Most transaction methods use **`provider.wallet.publicKey`** as the signer (`user`, `authority`, `creator`, etc.). Pass a wallet that can sign; read-only flows can use a read-only provider for fetch helpers only.
|
|
43
39
|
|
|
44
|
-
|
|
40
|
+
## Package exports
|
|
45
41
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
| Export | Description |
|
|
43
|
+
| ------------------------ | -------------------------------------------------------------------------------------------- |
|
|
44
|
+
| `PredictionMarketClient` | High-level program wrapper (see below). |
|
|
45
|
+
| `IDL`, `PROGRAM_ID` | Anchor IDL JSON and `PublicKey` for the deployed program. |
|
|
46
|
+
| `pda` helpers | `deriveMarket`, `deriveVault`, `deriveParimutuelState`, … (see [PDA helpers](#pda-helpers)). |
|
|
47
|
+
| `types` | Params and account shapes (`CreateMarketParams`, `ListedMarket`, …). |
|
|
48
|
+
| `marketUi` | Pure UI helpers (`getMarketLifecycleStatus`, `formatTimeLeft`, …). |
|
|
49
|
+
| `Vercora` (type) | Anchor `Program` generic for `Program<Vercora>`. |
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
---
|
|
51
52
|
|
|
52
|
-
##
|
|
53
|
+
## `PredictionMarketClient` API
|
|
54
|
+
|
|
55
|
+
Public properties: **`program`**, **`connection`**, **`globalConfig`** (PDA).
|
|
56
|
+
|
|
57
|
+
### Global config (authority)
|
|
53
58
|
|
|
54
|
-
|
|
59
|
+
| Method | Purpose |
|
|
60
|
+
| ----------------------------------- | ---------------------------------------------- |
|
|
61
|
+
| `initializeConfig(params)` | One-time init; `authority` = connected wallet. |
|
|
62
|
+
| `updateConfig(params)` | Update fees, treasury, authorities. |
|
|
63
|
+
| `addAllowedCollateralMint(mint)` | Allowlist a collateral mint. |
|
|
64
|
+
| `removeAllowedCollateralMint(mint)` | Remove from allowlist. |
|
|
55
65
|
|
|
56
|
-
###
|
|
66
|
+
### Platforms & categories
|
|
57
67
|
|
|
58
|
-
|
|
68
|
+
| Method | Purpose |
|
|
69
|
+
| ------------------------------ | ------------------------------------------------------------------------ |
|
|
70
|
+
| `registerPlatform(params)` | Next `platform_id` from `GlobalConfig`; returns `{ platformId, sig }`. |
|
|
71
|
+
| `createMarketCategory(params)` | Next category id per `PlatformRegistry` (must match `next_category_id`). |
|
|
72
|
+
| `updateMarketCategory(params)` | Rename / toggle active. |
|
|
59
73
|
|
|
60
|
-
|
|
61
|
-
- **Minimal integration** — stake, withdraw, claim; no outcome-token listings to maintain.
|
|
62
|
-
- Positions are ledger entries, not transferable tokens. Early withdrawal may use a configurable penalty.
|
|
63
|
-
- **Best for:** most prediction-style apps and teams that want live odds and settlement without operating liquidity infrastructure.
|
|
74
|
+
### Market creation
|
|
64
75
|
|
|
65
|
-
|
|
76
|
+
| Method | Purpose |
|
|
77
|
+
| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
78
|
+
| `createMarket(creator, collateralMint, creatorFeeAccount, params)` | Step 1: market + vault. |
|
|
79
|
+
| `initializeMarketResolverSlots(marketPda, params, opts?, parimutuelStateParams?)` | Resolver PDAs; optional `parimutuelStateParams` appends `initializeParimutuelState` in the same tx. |
|
|
80
|
+
| `initializeMarketOutcomeSlots(marketPda, params)` | `MarketOutcome` labels (complete-set & pari). |
|
|
81
|
+
| `initializeMarketMints(marketPda, marketId)` | Mint 8 outcome SPLs (complete-set only). |
|
|
82
|
+
| `initializeParimutuelState(marketPda, params)` | Standalone pari pool + penalty params (if not bundled with resolvers). |
|
|
83
|
+
| `createMarketFull(creator, collateralMint, creatorFeeAccount, resolverPubkeys, params)` | Runs create → outcomes → resolvers (+ mints **or** pari state in one flow). |
|
|
84
|
+
| `updateParimutuelState(marketPda, params)` | Creator updates early-exit penalty (open pari pool). |
|
|
66
85
|
|
|
67
|
-
|
|
86
|
+
### Complete-set trading
|
|
87
|
+
|
|
88
|
+
| Method | Purpose |
|
|
89
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
|
|
90
|
+
| `mintCompleteSet(user, marketPda, collateralMint, userCollateralAta, platformTreasury, creatorFeeAccount, params, opts?, tokenProgram?)` | Mint full set; creates missing outcome ATAs. |
|
|
91
|
+
| `redeemCompleteSet(user, marketPda, collateralMint, userCollateralAta, params)` | Burn full set for collateral. |
|
|
92
|
+
| `redeemWinning(user, marketPda, collateralMint, userCollateralAta, params)` | After resolution, redeem winning outcome tokens. |
|
|
93
|
+
|
|
94
|
+
### Parimutuel trading
|
|
68
95
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
96
|
+
| Method | Purpose |
|
|
97
|
+
| --------------------------------------- | ------------------------------------------------------- |
|
|
98
|
+
| `parimutuelStake(marketPda, params)` | Stake; signer is **provider wallet** (`user` on-chain). |
|
|
99
|
+
| `parimutuelWithdraw(marketPda, params)` | Early exit (penalty may apply). |
|
|
100
|
+
| `parimutuelClaim(marketPda, params)` | Claim after resolution. |
|
|
101
|
+
|
|
102
|
+
### Resolution & lifecycle
|
|
103
|
+
|
|
104
|
+
| Method | Purpose |
|
|
105
|
+
| ----------------------------------------- | --------------------------------------------- |
|
|
106
|
+
| `voteResolution(marketPda, params)` | Resolver vote. |
|
|
107
|
+
| `revokeResolutionVote(marketPda, params)` | Clear vote before changing. |
|
|
108
|
+
| `finalizeResolution(marketPda, params)` | Anyone, once threshold met. |
|
|
109
|
+
| `closeMarketEarly(marketPda, params)` | Creator / config authority before `close_at`. |
|
|
110
|
+
| `voidMarket(marketPda, params)` | Void market. |
|
|
111
|
+
| `abandonMarket(marketPda, params)` | Creator abandons empty market (reclaim rent). |
|
|
112
|
+
|
|
113
|
+
### Discovery & reads
|
|
114
|
+
|
|
115
|
+
| Method | Purpose |
|
|
116
|
+
| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
117
|
+
| `fetchGlobalConfig()` | Global config account. |
|
|
118
|
+
| `fetchMarket(marketPda)` | `Market` account. |
|
|
119
|
+
| `fetchAllMarkets(platformId?)` | All markets (optional `memcmp` on `platform_id`); includes outcome labels. |
|
|
120
|
+
| `fetchMarketsByPlatform(platformId)` | Same as `fetchAllMarkets(platformId)`. |
|
|
121
|
+
| `fetchMarketsByCreator(creator)` | Raw rows `{ pubkey, account }[]`, memcmp on creator. |
|
|
122
|
+
| `getUsersMarkets(creator, filters?)` | **`ListedMarket[]`** for creator; optional `platformId` (RPC) + `categoryId` (client filter). |
|
|
123
|
+
| `fetchMarketOutcomeLabels(marketPda, outcomeCount)` | Outcome labels. |
|
|
124
|
+
| `fetchVaultBalance(marketPda)` | Vault balance (bigint base units). |
|
|
125
|
+
| `fetchOutcomeBalance(marketPda, user, outcomeIndex)` | Single outcome token balance (complete-set). |
|
|
126
|
+
| `fetchAllOutcomeBalances(marketPda, user, outcomeCount)` | All outcome balances for user. |
|
|
127
|
+
| `fetchMarketCategory(categoryPda)` | One category. |
|
|
128
|
+
| `fetchAllMarketCategories()` | All categories (sorted). |
|
|
129
|
+
| `fetchResolutionVote(marketPda, resolverIndex)` | Vote PDA or null. |
|
|
130
|
+
| `fetchMarketOutcomesSnapshot(marketPda, outcomeCount)` | Decoded outcomes + tallies. |
|
|
131
|
+
| `fetchOutcomeTallyCounts(marketPda)` | Quick tally array. |
|
|
132
|
+
| `fetchAllowedCollateralMints()` | Allowlist mints. |
|
|
133
|
+
| `fetchUserProfile(wallet)` | User profile or null. |
|
|
134
|
+
| `fetchPlatformProfile(platformId)` | Platform profile or null. |
|
|
135
|
+
| `fetchParimutuelState(marketPda)` | Pari pool state. |
|
|
136
|
+
| `fetchParimutuelPosition(marketPda, user, outcomeIndex)` | Position or null. |
|
|
137
|
+
| `fetchParimutuelActiveStakesBatch(marketPda, user, outcomeCount)` | Active stakes per outcome. |
|
|
138
|
+
| `computeParimutuelOdds(state, outcomeCount)` | Implied probs + payout multipliers. |
|
|
139
|
+
| `fetchResolver(marketPda, index)` | One resolver account. |
|
|
140
|
+
| `fetchAllResolvers(marketPda, numResolvers)` | Initialized resolver slots. |
|
|
141
|
+
|
|
142
|
+
### Profiles
|
|
143
|
+
|
|
144
|
+
| Method | Purpose |
|
|
145
|
+
| ---------------------------------- | ------------------------------------------- |
|
|
146
|
+
| `upsertUserProfile(params)` | Display name / URL. |
|
|
147
|
+
| `closeUserProfile()` | Close caller’s profile. |
|
|
148
|
+
| `verifyUserProfile(params)` | Verifier marks verified. |
|
|
149
|
+
| `upsertPlatformProfile(params)` | Platform profile (scoped by `platform_id`). |
|
|
150
|
+
| `closePlatformProfile(platformId)` | Close profile. |
|
|
151
|
+
| `verifyPlatformProfile(params)` | Verify platform profile. |
|
|
73
152
|
|
|
74
153
|
---
|
|
75
154
|
|
|
76
|
-
##
|
|
155
|
+
## Examples
|
|
156
|
+
|
|
157
|
+
### Global config (first deploy)
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
import { PublicKey } from "@solana/web3.js";
|
|
161
|
+
import BN from "bn.js";
|
|
162
|
+
|
|
163
|
+
await client.initializeConfig({
|
|
164
|
+
// System program / “none” placeholder — use a real secondary authority pubkey in production
|
|
165
|
+
secondaryAuthority: new PublicKey("11111111111111111111111111111111"),
|
|
166
|
+
depositPlatformFeeBps: 100,
|
|
167
|
+
platformTreasuryWallet: treasuryPubkey,
|
|
168
|
+
platformFeeLamports: new BN(357_000),
|
|
169
|
+
parimutuelWithdrawPlatformFeeBps: 50,
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Register platform & category
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
const { platformId } = await client.registerPlatform({
|
|
177
|
+
profileAuthority: profileSignerPubkey,
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
await client.createMarketCategory({
|
|
181
|
+
platformId,
|
|
182
|
+
name: "Politics",
|
|
183
|
+
});
|
|
184
|
+
```
|
|
77
185
|
|
|
78
|
-
### Create a market
|
|
186
|
+
### Create a market (manual steps, complete-set)
|
|
79
187
|
|
|
80
188
|
```ts
|
|
81
|
-
import
|
|
189
|
+
import BN from "bn.js";
|
|
82
190
|
|
|
83
|
-
const marketId = new BN(Date.now());
|
|
191
|
+
const marketId = new BN(Date.now());
|
|
84
192
|
const { marketPda } = await client.createMarket(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
193
|
+
creatorPubkey,
|
|
194
|
+
collateralMint,
|
|
195
|
+
creatorFeeAta,
|
|
88
196
|
{
|
|
89
197
|
marketId,
|
|
90
198
|
outcomeCount: 2,
|
|
91
199
|
resolutionThreshold: 1,
|
|
92
|
-
closeAt: new BN(Math.floor(Date.now() / 1000) + 86400),
|
|
200
|
+
closeAt: new BN(Math.floor(Date.now() / 1000) + 86400),
|
|
93
201
|
creatorFeeBps: 50,
|
|
94
|
-
depositPlatformFeeBps: 0,
|
|
202
|
+
depositPlatformFeeBps: 0,
|
|
95
203
|
numResolvers: 1,
|
|
204
|
+
maxOutcomeInvestment: new BN(0),
|
|
96
205
|
title: "Will it rain tomorrow?",
|
|
97
|
-
marketType: "completeSet",
|
|
98
|
-
// Optional: scoped market (omit or use new BN(0) for unscoped / uncategorized)
|
|
206
|
+
marketType: "completeSet",
|
|
99
207
|
platformId: new BN(0),
|
|
100
208
|
categoryId: new BN(0),
|
|
101
209
|
},
|
|
102
210
|
);
|
|
103
211
|
|
|
104
|
-
|
|
212
|
+
await client.initializeMarketOutcomeSlots(marketPda, {
|
|
213
|
+
marketId,
|
|
214
|
+
labels: ["Yes", "No"],
|
|
215
|
+
});
|
|
105
216
|
await client.initializeMarketResolverSlots(marketPda, {
|
|
106
217
|
marketId,
|
|
107
218
|
resolverPubkeys: [resolverPubkey],
|
|
@@ -109,98 +220,189 @@ await client.initializeMarketResolverSlots(marketPda, {
|
|
|
109
220
|
await client.initializeMarketMints(marketPda, marketId);
|
|
110
221
|
```
|
|
111
222
|
|
|
112
|
-
###
|
|
223
|
+
### Create market in one call (`createMarketFull`)
|
|
224
|
+
|
|
225
|
+
Complete-set (mints outcome tokens):
|
|
113
226
|
|
|
114
227
|
```ts
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
user,
|
|
118
|
-
marketPda,
|
|
228
|
+
const marketPda = await client.createMarketFull(
|
|
229
|
+
creatorPubkey,
|
|
119
230
|
collateralMint,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
231
|
+
creatorFeeAta,
|
|
232
|
+
[resolverPubkey],
|
|
233
|
+
{
|
|
234
|
+
marketId,
|
|
235
|
+
outcomeCount: 2,
|
|
236
|
+
resolutionThreshold: 1,
|
|
237
|
+
closeAt: new BN(Math.floor(Date.now() / 1000) + 86400),
|
|
238
|
+
creatorFeeBps: 50,
|
|
239
|
+
depositPlatformFeeBps: 0,
|
|
240
|
+
numResolvers: 1,
|
|
241
|
+
maxOutcomeInvestment: new BN(0),
|
|
242
|
+
title: "Two-outcome market",
|
|
243
|
+
marketType: "completeSet",
|
|
244
|
+
outcomeLabels: ["Yes", "No"],
|
|
245
|
+
},
|
|
124
246
|
);
|
|
247
|
+
```
|
|
125
248
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
249
|
+
Parimutuel (resolver tx also initializes pari state; optional `parimutuelInit` overrides defaults):
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
const marketPda = await client.createMarketFull(
|
|
253
|
+
creatorPubkey,
|
|
130
254
|
collateralMint,
|
|
131
|
-
|
|
132
|
-
|
|
255
|
+
creatorFeeAta,
|
|
256
|
+
[resolverPubkey],
|
|
257
|
+
{
|
|
258
|
+
marketId,
|
|
259
|
+
outcomeCount: 2,
|
|
260
|
+
resolutionThreshold: 1,
|
|
261
|
+
closeAt: new BN(Math.floor(Date.now() / 1000) + 86400),
|
|
262
|
+
creatorFeeBps: 50,
|
|
263
|
+
depositPlatformFeeBps: 0,
|
|
264
|
+
numResolvers: 1,
|
|
265
|
+
maxOutcomeInvestment: new BN(0),
|
|
266
|
+
title: "Pari pool",
|
|
267
|
+
marketType: "parimutuel",
|
|
268
|
+
outcomeLabels: ["A", "B"],
|
|
269
|
+
parimutuelInit: {
|
|
270
|
+
earlyWithdrawPenaltyBps: 500,
|
|
271
|
+
penaltyKeptInPoolBps: 8000,
|
|
272
|
+
},
|
|
273
|
+
},
|
|
133
274
|
);
|
|
134
|
-
|
|
135
|
-
// After resolution — redeem the winning outcome tokens
|
|
136
|
-
await client.redeemWinning(user, marketPda, collateralMint, userCollateralAta, {
|
|
137
|
-
marketId,
|
|
138
|
-
amount: winningBalance,
|
|
139
|
-
});
|
|
140
275
|
```
|
|
141
276
|
|
|
142
|
-
###
|
|
277
|
+
### Complete-set trading
|
|
143
278
|
|
|
144
279
|
```ts
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
280
|
+
const treasury = (await client.fetchGlobalConfig()).platformTreasury;
|
|
281
|
+
|
|
282
|
+
await client.mintCompleteSet(
|
|
283
|
+
userPubkey,
|
|
148
284
|
marketPda,
|
|
149
285
|
collateralMint,
|
|
150
286
|
userCollateralAta,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
{ marketId,
|
|
287
|
+
treasury,
|
|
288
|
+
creatorFeeAta,
|
|
289
|
+
{ marketId, amount: new BN(1_000_000) },
|
|
154
290
|
);
|
|
155
291
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
user,
|
|
292
|
+
await client.redeemCompleteSet(
|
|
293
|
+
userPubkey,
|
|
159
294
|
marketPda,
|
|
160
295
|
collateralMint,
|
|
161
296
|
userCollateralAta,
|
|
162
|
-
{ marketId
|
|
297
|
+
{ marketId },
|
|
163
298
|
);
|
|
164
299
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
user,
|
|
300
|
+
await client.redeemWinning(
|
|
301
|
+
userPubkey,
|
|
168
302
|
marketPda,
|
|
169
303
|
collateralMint,
|
|
170
304
|
userCollateralAta,
|
|
171
|
-
{
|
|
305
|
+
{
|
|
306
|
+
marketId,
|
|
307
|
+
amount: winningAmountBn,
|
|
308
|
+
},
|
|
172
309
|
);
|
|
173
310
|
```
|
|
174
311
|
|
|
312
|
+
### Parimutuel trading
|
|
313
|
+
|
|
314
|
+
Signer is always the **connected wallet** (no `user` first argument):
|
|
315
|
+
|
|
316
|
+
```ts
|
|
317
|
+
await client.parimutuelStake(marketPda, {
|
|
318
|
+
marketId,
|
|
319
|
+
outcomeIndex: 0,
|
|
320
|
+
amount: new BN(500_000),
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
await client.parimutuelWithdraw(marketPda, {
|
|
324
|
+
marketId,
|
|
325
|
+
outcomeIndex: 0,
|
|
326
|
+
amount: new BN(500_000),
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
await client.parimutuelClaim(marketPda, {
|
|
330
|
+
marketId,
|
|
331
|
+
outcomeIndex: 0,
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
const state = await client.fetchParimutuelState(marketPda);
|
|
335
|
+
const odds = client.computeParimutuelOdds(state, 2);
|
|
336
|
+
```
|
|
337
|
+
|
|
175
338
|
### Resolution
|
|
176
339
|
|
|
177
340
|
```ts
|
|
178
|
-
// Resolver votes on the winning outcome
|
|
179
341
|
await client.voteResolution(marketPda, {
|
|
180
342
|
marketId,
|
|
181
343
|
resolverIndex: 0,
|
|
182
|
-
outcomeIndex: 1,
|
|
344
|
+
outcomeIndex: 1,
|
|
183
345
|
});
|
|
184
346
|
|
|
185
|
-
// Once the threshold is met, anyone can finalize
|
|
186
347
|
await client.finalizeResolution(marketPda, { marketId });
|
|
187
348
|
```
|
|
188
349
|
|
|
189
|
-
###
|
|
350
|
+
### Discovery
|
|
351
|
+
|
|
352
|
+
```ts
|
|
353
|
+
// Every market (heavy on RPC)
|
|
354
|
+
const all = await client.fetchAllMarkets();
|
|
355
|
+
|
|
356
|
+
// By platform (memcmp)
|
|
357
|
+
const byPlatform = await client.fetchAllMarkets(new BN(1));
|
|
358
|
+
|
|
359
|
+
// Markets created by a wallet — full rows with labels + filters
|
|
360
|
+
const mine = await client.getUsersMarkets(creatorPubkey, {
|
|
361
|
+
platformId: new BN(1), // optional RPC filter
|
|
362
|
+
categoryId: 2, // optional; applied after decode
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
// Raw accounts only (no labels)
|
|
366
|
+
const raw = await client.fetchMarketsByCreator(creatorPubkey);
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### User profile
|
|
190
370
|
|
|
191
371
|
```ts
|
|
192
|
-
|
|
193
|
-
|
|
372
|
+
await client.upsertUserProfile({
|
|
373
|
+
displayName: "Alice",
|
|
374
|
+
url: "https://example.com",
|
|
375
|
+
});
|
|
194
376
|
|
|
195
|
-
const
|
|
377
|
+
const profile = await client.fetchUserProfile(wallet.publicKey);
|
|
196
378
|
```
|
|
197
379
|
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## Platforms and categories
|
|
383
|
+
|
|
384
|
+
On-chain, **`platform_id`** is **`u32`** and **`category_id`** is **`u8`** in `CreateMarketArgs` (not pubkeys).
|
|
385
|
+
|
|
386
|
+
1. **`register_platform`** — assigns the next id from `GlobalConfig.next_platform_id`; PDA `["platform", platform_id le u32]`.
|
|
387
|
+
2. **`create_market_category`** — `category_id` must equal `PlatformRegistry.next_category_id` before bump; PDA `["market-category", platform_id, category_id]`.
|
|
388
|
+
3. **`create_market`** — if `platform_id == 0` then `category_id` must be `0`. If `platform_id > 0`, pass `platform_registry`; if `category_id > 0`, pass `market_category`.
|
|
389
|
+
|
|
390
|
+
Use **`derivePlatformRegistry`**, **`derivePlatformProfile`**, **`deriveMarketCategory`** when building instructions manually.
|
|
391
|
+
|
|
392
|
+
## Market types
|
|
393
|
+
|
|
394
|
+
Use `marketType: 'parimutuel'` or `'completeSet'` at creation; the choice is permanent.
|
|
395
|
+
|
|
396
|
+
- **Parimutuel** — pooled stakes, no outcome SPLs; good default for prediction apps.
|
|
397
|
+
- **Complete-set** — outcome SPL tokens; you still need external liquidity for single-leg trading.
|
|
398
|
+
|
|
198
399
|
## PDA helpers
|
|
199
400
|
|
|
200
|
-
|
|
401
|
+
From `@vercora-protocol/sdk`:
|
|
201
402
|
|
|
202
403
|
```ts
|
|
203
404
|
import {
|
|
405
|
+
PROGRAM_ID,
|
|
204
406
|
deriveGlobalConfig,
|
|
205
407
|
deriveAllowedMint,
|
|
206
408
|
deriveMarket,
|
|
@@ -210,24 +412,48 @@ import {
|
|
|
210
412
|
deriveResolver,
|
|
211
413
|
deriveAllResolvers,
|
|
212
414
|
deriveResolutionVote,
|
|
415
|
+
deriveMarketOutcome,
|
|
416
|
+
deriveAllMarketOutcomes,
|
|
417
|
+
deriveParimutuelState,
|
|
418
|
+
deriveParimutuelPosition,
|
|
213
419
|
deriveUserProfile,
|
|
214
420
|
derivePlatformRegistry,
|
|
215
421
|
derivePlatformProfile,
|
|
216
422
|
deriveMarketCategory,
|
|
423
|
+
bnLike,
|
|
424
|
+
bnToU32,
|
|
425
|
+
bnToU8,
|
|
217
426
|
} from "@vercora-protocol/sdk";
|
|
218
427
|
|
|
219
|
-
const marketPda = deriveMarket(
|
|
220
|
-
const vaultPda = deriveVault(
|
|
221
|
-
const [mint0] = deriveAllOutcomeMints(program.programId, marketPda, 2);
|
|
428
|
+
const marketPda = deriveMarket(PROGRAM_ID, creatorPubkey, marketId);
|
|
429
|
+
const vaultPda = deriveVault(PROGRAM_ID, marketPda);
|
|
222
430
|
```
|
|
223
431
|
|
|
224
|
-
|
|
432
|
+
Offsets **`MARKET_ACCOUNT_CREATOR_MEMCMP_OFFSET`** and **`MARKET_ACCOUNT_PLATFORM_ID_MEMCMP_OFFSET`** are exported for custom `getProgramAccounts` filters.
|
|
433
|
+
|
|
434
|
+
## `marketUi` helpers
|
|
435
|
+
|
|
436
|
+
```ts
|
|
437
|
+
import {
|
|
438
|
+
getMarketLifecycleStatus,
|
|
439
|
+
formatTimeLeft,
|
|
440
|
+
listedMarketFeedTag,
|
|
441
|
+
} from "@vercora-protocol/sdk";
|
|
225
442
|
|
|
226
|
-
|
|
443
|
+
const status = getMarketLifecycleStatus({
|
|
444
|
+
voided: false,
|
|
445
|
+
closed: false,
|
|
446
|
+
closeAt: ts,
|
|
447
|
+
});
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
## TypeScript types
|
|
227
451
|
|
|
228
452
|
```ts
|
|
229
453
|
import type {
|
|
230
454
|
CreateMarketParams,
|
|
455
|
+
ListedMarket,
|
|
456
|
+
GetUsersMarketsFilters,
|
|
231
457
|
MarketAccount,
|
|
232
458
|
ParimutuelStateAccount,
|
|
233
459
|
ParimutuelOdds,
|
|
@@ -238,20 +464,18 @@ import type {
|
|
|
238
464
|
|
|
239
465
|
## AI agent integration
|
|
240
466
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
-
|
|
247
|
-
-
|
|
248
|
-
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
4. **Safety**: verify signer role, derive PDAs with helpers, handle missing ATAs, return tx signatures.
|
|
467
|
+
1. **Bootstrap**: `Connection` → `AnchorProvider` → `Program<Vercora>` from `IDL` → `PredictionMarketClient`.
|
|
468
|
+
2. **Branch**: `fetchMarket` → `market.marketType` (`completeSet` vs `parimutuel`).
|
|
469
|
+
3. **Flows**:
|
|
470
|
+
- Optional: `registerPlatform` → `createMarketCategory` → `createMarket` with ids.
|
|
471
|
+
- Create: `createMarketFull` **or** `createMarket` + resolver / outcome / mint **or** pari init.
|
|
472
|
+
- Complete-set: `mintCompleteSet` → `redeemCompleteSet` → `redeemWinning`.
|
|
473
|
+
- Parimutuel: `parimutuelStake` → `parimutuelWithdraw` → `parimutuelClaim`.
|
|
474
|
+
- Resolution: `voteResolution` → `finalizeResolution`.
|
|
475
|
+
4. **Discovery**: `fetchAllMarkets`, `getUsersMarkets`, `fetchMarketsByCreator`.
|
|
476
|
+
5. **Safety**: verify signers, PDAs, ATAs, and RPC limits on `getProgramAccounts`.
|
|
252
477
|
|
|
253
478
|
## Links
|
|
254
479
|
|
|
255
|
-
- [GitHub source](https://github.com/vercora/vercora-anchor)
|
|
256
480
|
- [Vercora app](https://vercora.xyz)
|
|
257
481
|
- [npm package](https://www.npmjs.com/package/@vercora-protocol/sdk)
|
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 } from './types';
|
|
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';
|
|
6
6
|
export declare class PredictionMarketClient {
|
|
7
7
|
readonly program: Program<Vercora>;
|
|
8
8
|
readonly connection: Connection;
|
|
@@ -143,6 +143,10 @@ export declare class PredictionMarketClient {
|
|
|
143
143
|
fetchGlobalConfig(): Promise<GlobalConfigAccount>;
|
|
144
144
|
fetchMarket(market: PublicKey): Promise<MarketAccount>;
|
|
145
145
|
private bnFieldToListedString;
|
|
146
|
+
/**
|
|
147
|
+
* Map raw `Market` account rows to {@link ListedMarket} (including outcome labels).
|
|
148
|
+
*/
|
|
149
|
+
private buildListedMarketsFromRawRows;
|
|
146
150
|
/**
|
|
147
151
|
* List on-chain `Market` accounts, with outcome labels fetched per market.
|
|
148
152
|
* Uses Anchor `program.account.market.all()`; when `platformId` is set, uses RPC `memcmp` on
|
|
@@ -163,6 +167,14 @@ export declare class PredictionMarketClient {
|
|
|
163
167
|
pubkey: PublicKey;
|
|
164
168
|
account: MarketAccount;
|
|
165
169
|
}[]>;
|
|
170
|
+
/**
|
|
171
|
+
* Markets created by `creator`, as {@link ListedMarket} rows (with outcome labels).
|
|
172
|
+
*
|
|
173
|
+
* Uses RPC `memcmp` on `creator` and optionally on `platform_id` (when `filters.platformId` is set).
|
|
174
|
+
* When `filters.categoryId` is set, results are narrowed after decode (see {@link GetUsersMarketsFilters}).
|
|
175
|
+
* Sorted by `market_id` ascending.
|
|
176
|
+
*/
|
|
177
|
+
getUsersMarkets(creator: PublicKey, filters?: GetUsersMarketsFilters): Promise<ListedMarket[]>;
|
|
166
178
|
/**
|
|
167
179
|
* Read `MarketOutcome.label` for each active outcome index (parallel fetches).
|
|
168
180
|
* Missing accounts yield `Outcome {i+1}` placeholders.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,UAAU,EACV,SAAS,EAOV,MAAM,iBAAiB,CAAC;AASzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AA4BnD,OAAO,KAAK,EACV,kBAAkB,EAClB,+BAA+B,EAC/B,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mCAAmC,EACnC,kCAAkC,EAClC,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EAEd,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,YAAY,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|