@bench.games/conviction-markets 0.1.3 → 0.1.5
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 +0 -292
- package/dist/instructions/buyMarketShares.d.ts.map +1 -1
- package/dist/instructions/buyMarketShares.js +15 -8
- package/dist/instructions/buyMarketShares.js.map +1 -1
- package/dist/instructions/claimVoteTokens.d.ts.map +1 -1
- package/dist/instructions/claimVoteTokens.js +9 -7
- package/dist/instructions/claimVoteTokens.js.map +1 -1
- package/dist/instructions/createMarket.d.ts.map +1 -1
- package/dist/instructions/createMarket.js +9 -7
- package/dist/instructions/createMarket.js.map +1 -1
- package/dist/instructions/initVoteTokenAccount.d.ts.map +1 -1
- package/dist/instructions/initVoteTokenAccount.js +9 -7
- package/dist/instructions/initVoteTokenAccount.js.map +1 -1
- package/dist/instructions/mintVoteTokens.d.ts.map +1 -1
- package/dist/instructions/mintVoteTokens.js +9 -7
- package/dist/instructions/mintVoteTokens.js.map +1 -1
- package/dist/instructions/revealShares.d.ts.map +1 -1
- package/dist/instructions/revealShares.js +11 -8
- package/dist/instructions/revealShares.js.map +1 -1
- package/dist/utils/encryption.d.ts +9 -5
- package/dist/utils/encryption.d.ts.map +1 -1
- package/dist/utils/encryption.js +13 -8
- package/dist/utils/encryption.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,297 +2,5 @@
|
|
|
2
2
|
|
|
3
3
|
TypeScript SDK for Solana Conviction Markets with encrypted votes using Arcium MPC.
|
|
4
4
|
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
Conviction Markets allow users to influence decision-making by staking capital on their preferred option. Vote choices and stake amounts are encrypted on-chain and only revealed when the market creator announces the winning option. Winners can claim yield from the reward pool.
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npm install @bench/conviction-markets @solana/web3.js @coral-xyz/anchor @arcium-hq/client
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
or with Bun:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
bun add @bench/conviction-markets @solana/web3.js @coral-xyz/anchor @arcium-hq/client
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Features
|
|
22
|
-
|
|
23
|
-
- **Encrypted Voting**: User votes and stake amounts remain private using Arcium MPC
|
|
24
|
-
- **Ergonomic API**: Auto-generates computation offsets, nonces, and handles encryption
|
|
25
|
-
- **Type-Safe**: Full TypeScript support with IDL-generated types
|
|
26
|
-
- **Comprehensive**: All program instructions with helper utilities
|
|
27
|
-
|
|
28
|
-
## Quick Start
|
|
29
|
-
|
|
30
|
-
```typescript
|
|
31
|
-
import {
|
|
32
|
-
createMarket,
|
|
33
|
-
addMarketOption,
|
|
34
|
-
openMarket,
|
|
35
|
-
initVoteTokenAccount,
|
|
36
|
-
mintVoteTokens,
|
|
37
|
-
buyMarketShares,
|
|
38
|
-
generateSolanaKeypair,
|
|
39
|
-
generateX25519Keypair,
|
|
40
|
-
PROGRAM_ID,
|
|
41
|
-
} from "@bench/conviction-markets";
|
|
42
|
-
import { Connection } from "@solana/web3.js";
|
|
43
|
-
import { AnchorProvider, Wallet } from "@coral-xyz/anchor";
|
|
44
|
-
|
|
45
|
-
// Setup connection and provider
|
|
46
|
-
const connection = new Connection("https://api.devnet.solana.com");
|
|
47
|
-
const creator = generateSolanaKeypair(); // Or load from file
|
|
48
|
-
const wallet = new Wallet(creator);
|
|
49
|
-
const provider = new AnchorProvider(connection, wallet, {
|
|
50
|
-
commitment: "confirmed",
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
// Create a market
|
|
54
|
-
const { signature, marketPda, computationOffset } = await createMarket(
|
|
55
|
-
provider,
|
|
56
|
-
{
|
|
57
|
-
creator,
|
|
58
|
-
marketIndex: Date.now(), // Use unique index
|
|
59
|
-
maxOptions: 3,
|
|
60
|
-
maxShares: 1000,
|
|
61
|
-
rewardLamports: 1_000_000, // 0.001 SOL
|
|
62
|
-
timeToStake: 3600, // 1 hour
|
|
63
|
-
timeToReveal: 600, // 10 minutes
|
|
64
|
-
}
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
// Wait for MPC computation to finalize
|
|
68
|
-
await awaitComputationFinalization(provider, computationOffset);
|
|
69
|
-
console.log("Market created:", marketPda.toBase58());
|
|
70
|
-
|
|
71
|
-
// Add options
|
|
72
|
-
await addMarketOption(provider, {
|
|
73
|
-
creator,
|
|
74
|
-
market: marketPda,
|
|
75
|
-
optionIndex: 1,
|
|
76
|
-
name: "Option A",
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// Open market for trading
|
|
80
|
-
const now = Math.floor(Date.now() / 1000);
|
|
81
|
-
await openMarket(provider, {
|
|
82
|
-
creator,
|
|
83
|
-
market: marketPda,
|
|
84
|
-
openTimestamp: now + 60, // Opens in 60 seconds
|
|
85
|
-
});
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## User Participation
|
|
89
|
-
|
|
90
|
-
```typescript
|
|
91
|
-
import {
|
|
92
|
-
initVoteTokenAccount,
|
|
93
|
-
mintVoteTokens,
|
|
94
|
-
initShareAccount,
|
|
95
|
-
buyMarketShares,
|
|
96
|
-
awaitComputationFinalization,
|
|
97
|
-
generateSolanaKeypair,
|
|
98
|
-
generateX25519Keypair,
|
|
99
|
-
} from "@bench/conviction-markets";
|
|
100
|
-
|
|
101
|
-
// Create user keypairs
|
|
102
|
-
const user = generateSolanaKeypair();
|
|
103
|
-
const userX25519 = generateX25519Keypair();
|
|
104
|
-
|
|
105
|
-
// Initialize vote token account
|
|
106
|
-
const { computationOffset: initOffset } = await initVoteTokenAccount(provider, {
|
|
107
|
-
signer: user,
|
|
108
|
-
userX25519Keypair: userX25519,
|
|
109
|
-
});
|
|
110
|
-
await awaitComputationFinalization(provider, initOffset);
|
|
111
|
-
|
|
112
|
-
// Buy vote tokens with SOL
|
|
113
|
-
const { computationOffset: mintOffset } = await mintVoteTokens(provider, {
|
|
114
|
-
signer: user,
|
|
115
|
-
userX25519Keypair: userX25519,
|
|
116
|
-
amount: 100, // Buy 100 vote tokens
|
|
117
|
-
});
|
|
118
|
-
await awaitComputationFinalization(provider, mintOffset);
|
|
119
|
-
|
|
120
|
-
// Initialize share account
|
|
121
|
-
await initShareAccount(provider, {
|
|
122
|
-
signer: user,
|
|
123
|
-
market: marketPda,
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
// Buy market shares (amount and option encrypted automatically!)
|
|
127
|
-
const { computationOffset: buyOffset } = await buyMarketShares(provider, {
|
|
128
|
-
signer: user,
|
|
129
|
-
userX25519Keypair: userX25519,
|
|
130
|
-
market: marketPda,
|
|
131
|
-
amount: 50, // Spend 50 vote tokens
|
|
132
|
-
selectedOption: 1, // Vote for option 1
|
|
133
|
-
});
|
|
134
|
-
await awaitComputationFinalization(provider, buyOffset);
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Market Resolution & Claims
|
|
138
|
-
|
|
139
|
-
```typescript
|
|
140
|
-
import {
|
|
141
|
-
selectOption,
|
|
142
|
-
revealShares,
|
|
143
|
-
incrementOptionTally,
|
|
144
|
-
closeShareAccount,
|
|
145
|
-
awaitComputationFinalization,
|
|
146
|
-
} from "@bench/conviction-markets";
|
|
147
|
-
|
|
148
|
-
// Market creator selects winning option
|
|
149
|
-
await selectOption(provider, {
|
|
150
|
-
authority: creator,
|
|
151
|
-
market: marketPda,
|
|
152
|
-
optionIndex: 1,
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
// Anyone can reveal shares (permissionless)
|
|
156
|
-
const { computationOffset: revealOffset } = await revealShares(provider, {
|
|
157
|
-
signer: anyKeypair, // Can be anyone
|
|
158
|
-
owner: user.publicKey,
|
|
159
|
-
market: marketPda,
|
|
160
|
-
ownerX25519Keypair: userX25519,
|
|
161
|
-
});
|
|
162
|
-
await awaitComputationFinalization(provider, revealOffset);
|
|
163
|
-
|
|
164
|
-
// Increment option tally (permissionless)
|
|
165
|
-
await incrementOptionTally(provider, {
|
|
166
|
-
market: marketPda,
|
|
167
|
-
owner: user.publicKey,
|
|
168
|
-
optionIndex: 1,
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
// User claims yield and closes share account
|
|
172
|
-
await closeShareAccount(provider, {
|
|
173
|
-
owner: user,
|
|
174
|
-
market: marketPda,
|
|
175
|
-
optionIndex: 1, // Option they voted for
|
|
176
|
-
});
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
## API Reference
|
|
180
|
-
|
|
181
|
-
### Market Lifecycle
|
|
182
|
-
|
|
183
|
-
- **`createMarket()`** - Creates a new market with encrypted state
|
|
184
|
-
- **`addMarketOption()`** - Adds a named voting option
|
|
185
|
-
- **`openMarket()`** - Opens market for trading at specified timestamp
|
|
186
|
-
- **`selectOption()`** - Selects the winning option (creator or authority)
|
|
187
|
-
|
|
188
|
-
### Vote Tokens
|
|
189
|
-
|
|
190
|
-
- **`initVoteTokenAccount()`** - Initializes encrypted balance account
|
|
191
|
-
- **`mintVoteTokens()`** - Buys vote tokens with SOL (0.001 SOL per token)
|
|
192
|
-
- **`claimVoteTokens()`** - Sells unused vote tokens back for SOL
|
|
193
|
-
|
|
194
|
-
### Market Shares
|
|
195
|
-
|
|
196
|
-
- **`initShareAccount()`** - Initializes share account for a market
|
|
197
|
-
- **`buyMarketShares()`** - Purchases shares with encrypted input
|
|
198
|
-
- **`revealShares()`** - Reveals encrypted shares (after staking ends)
|
|
199
|
-
- **`incrementOptionTally()`** - Increments option tally after reveal
|
|
200
|
-
- **`closeShareAccount()`** - Closes account and claims yield (if winner)
|
|
201
|
-
|
|
202
|
-
### Utilities
|
|
203
|
-
|
|
204
|
-
- **`generateSolanaKeypair()`** - Generates Solana keypair for signing
|
|
205
|
-
- **`generateX25519Keypair()`** - Generates X25519 keypair for encryption
|
|
206
|
-
- **`deriveMarketPda()`** - Derives market PDA
|
|
207
|
-
- **`deriveVoteTokenAccountPda()`** - Derives vote token account PDA
|
|
208
|
-
- **`deriveShareAccountPda()`** - Derives share account PDA
|
|
209
|
-
- **`deriveOptionPda()`** - Derives option PDA
|
|
210
|
-
|
|
211
|
-
## Key Concepts
|
|
212
|
-
|
|
213
|
-
### Two Types of Keypairs
|
|
214
|
-
|
|
215
|
-
1. **Solana Keypair**: Used for transaction signing and account ownership
|
|
216
|
-
```typescript
|
|
217
|
-
const solanaKeypair = generateSolanaKeypair();
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
2. **X25519 Keypair**: Used for MPC encryption with Arcium
|
|
221
|
-
```typescript
|
|
222
|
-
const x25519Keypair = generateX25519Keypair();
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### MPC Instructions
|
|
226
|
-
|
|
227
|
-
Instructions that use encrypted computations return a `computationOffset`. Use the `awaitComputationFinalization` helper to wait for the computation to complete:
|
|
228
|
-
|
|
229
|
-
```typescript
|
|
230
|
-
import { mintVoteTokens, awaitComputationFinalization } from "@bench/conviction-markets";
|
|
231
|
-
|
|
232
|
-
const { signature, computationOffset } = await mintVoteTokens(provider, {
|
|
233
|
-
signer: user,
|
|
234
|
-
userX25519Keypair,
|
|
235
|
-
amount: 100,
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
// Wait for MPC computation to complete
|
|
239
|
-
await awaitComputationFinalization(provider, computationOffset);
|
|
240
|
-
|
|
241
|
-
// With options
|
|
242
|
-
await awaitComputationFinalization(provider, computationOffset, {
|
|
243
|
-
commitment: "finalized",
|
|
244
|
-
programId: customProgramId,
|
|
245
|
-
});
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### Automatic Encryption
|
|
249
|
-
|
|
250
|
-
The SDK handles encryption automatically for `buyMarketShares()`:
|
|
251
|
-
|
|
252
|
-
```typescript
|
|
253
|
-
// Just pass plain values - SDK encrypts them!
|
|
254
|
-
await buyMarketShares(provider, {
|
|
255
|
-
signer: user,
|
|
256
|
-
userX25519Keypair,
|
|
257
|
-
market: marketPda,
|
|
258
|
-
amount: 50, // Plain value
|
|
259
|
-
selectedOption: 1, // Plain value
|
|
260
|
-
});
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
## Program Information
|
|
264
|
-
|
|
265
|
-
- **Devnet Program ID**: `bnchXx34qGANGyEL6MxTYdG8iXmUmSPyQFAGhxj1VKn`
|
|
266
|
-
- **Vote Token Price**: 0.001 SOL per token
|
|
267
|
-
- **Arcium Version**: v0.6.3
|
|
268
|
-
|
|
269
|
-
## Market Flow
|
|
270
|
-
|
|
271
|
-
1. **Create** market with parameters
|
|
272
|
-
2. **Add** named options (1-indexed)
|
|
273
|
-
3. **Fund** market with SOL for rewards
|
|
274
|
-
4. **Open** market at specified timestamp
|
|
275
|
-
5. **Users mint** vote tokens and buy shares
|
|
276
|
-
6. **Creator selects** winning option
|
|
277
|
-
7. **Shares revealed** and tallied
|
|
278
|
-
8. **Winners claim** proportional yield
|
|
279
|
-
|
|
280
|
-
## Examples
|
|
281
|
-
|
|
282
|
-
See the `/scripts` and `/tests` directories in the main repository for complete examples:
|
|
283
|
-
|
|
284
|
-
- `scripts/test-open-market.ts` - Full market creation flow
|
|
285
|
-
- `tests/conviction.ts` - Comprehensive integration tests
|
|
286
|
-
|
|
287
|
-
## License
|
|
288
|
-
|
|
289
|
-
MIT
|
|
290
|
-
|
|
291
|
-
## Contributing
|
|
292
|
-
|
|
293
|
-
Contributions are welcome! Please see the main repository for guidelines.
|
|
294
|
-
|
|
295
|
-
## Links
|
|
296
|
-
|
|
297
5
|
- [GitHub Repository](https://github.com/arcium/solana-conviction-markets)
|
|
298
6
|
- [Arcium](https://arcium.com/)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyMarketShares.d.ts","sourceRoot":"","sources":["../../src/instructions/buyMarketShares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"buyMarketShares.d.ts","sourceRoot":"","sources":["../../src/instructions/buyMarketShares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAqB9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yBAAyB;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,2CAA2C;IAC3C,iBAAiB,EAAE,aAAa,CAAC;IACjC,kCAAkC;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;IACpB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,4BAA4B,CAAC,EAAE,UAAU,CAAC;IAC1C,mDAAmD;IACnD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,+BAA+B;IAC/B,eAAe,EAAE,SAAS,CAAC;IAC3B,gEAAgE;IAChE,iBAAiB,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAqFhC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Program } from "@coral-xyz/anchor";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { getCompDefAccOffset, getMXEAccAddress, getMempoolAccAddress, getExecutingPoolAccAddress, getComputationAccAddress, getCompDefAccAddress, getMXEPublicKey, } from "@arcium-hq/client";
|
|
3
|
+
import { PROGRAM_ID, COMP_DEF_OFFSETS } from "../constants";
|
|
4
|
+
import { deriveShareAccountPda, generateComputationOffset, generateNonce, nonceToU128, createEncryptionContext, encryptBuySharesInput, ARCIUM_CLUSTER_OFFSET, getClusterAddress, } from "../utils";
|
|
4
5
|
import IDL from "../idl/conviction_market.json";
|
|
5
6
|
/**
|
|
6
7
|
* Builds a transaction to buy market shares with encrypted input
|
|
@@ -17,6 +18,12 @@ import IDL from "../idl/conviction_market.json";
|
|
|
17
18
|
export async function buyMarketShares(provider, params) {
|
|
18
19
|
const programId = params.programId ?? PROGRAM_ID;
|
|
19
20
|
const program = new Program(IDL, provider);
|
|
21
|
+
const clusterAccount = getClusterAddress();
|
|
22
|
+
// Get MXE public key for encryption
|
|
23
|
+
const mxePublicKey = await getMXEPublicKey(provider, programId);
|
|
24
|
+
if (!mxePublicKey) {
|
|
25
|
+
throw new Error("Failed to fetch MXE public key");
|
|
26
|
+
}
|
|
20
27
|
// Derive share account
|
|
21
28
|
const [shareAccountPda] = deriveShareAccountPda(params.signer, params.market, programId);
|
|
22
29
|
// Auto-generate computation offset and nonces
|
|
@@ -26,7 +33,7 @@ export async function buyMarketShares(provider, params) {
|
|
|
26
33
|
const disclosureNonce = generateNonce();
|
|
27
34
|
const disclosureNonceBN = nonceToU128(disclosureNonce);
|
|
28
35
|
// Create encryption context and encrypt inputs
|
|
29
|
-
const encryptionContext = createEncryptionContext(params.userX25519Keypair);
|
|
36
|
+
const encryptionContext = createEncryptionContext(params.userX25519Keypair, mxePublicKey);
|
|
30
37
|
const amountBigInt = typeof params.amount === "number"
|
|
31
38
|
? BigInt(params.amount)
|
|
32
39
|
: BigInt(params.amount.toString());
|
|
@@ -38,11 +45,11 @@ export async function buyMarketShares(provider, params) {
|
|
|
38
45
|
.accountsPartial({
|
|
39
46
|
market: params.market,
|
|
40
47
|
computationAccount: getComputationAccAddress(ARCIUM_CLUSTER_OFFSET, computationOffset),
|
|
41
|
-
clusterAccount
|
|
42
|
-
mxeAccount:
|
|
43
|
-
mempoolAccount:
|
|
44
|
-
executingPool:
|
|
45
|
-
compDefAccount:
|
|
48
|
+
clusterAccount,
|
|
49
|
+
mxeAccount: getMXEAccAddress(programId),
|
|
50
|
+
mempoolAccount: getMempoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
51
|
+
executingPool: getExecutingPoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
52
|
+
compDefAccount: getCompDefAccAddress(programId, Buffer.from(getCompDefAccOffset(COMP_DEF_OFFSETS.BUY_CONVICTION_MARKET_SHARES)).readUInt32LE()),
|
|
46
53
|
})
|
|
47
54
|
.transaction();
|
|
48
55
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyMarketShares.js","sourceRoot":"","sources":["../../src/instructions/buyMarketShares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"buyMarketShares.js","sourceRoot":"","sources":["../../src/instructions/buyMarketShares.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimVoteTokens.d.ts","sourceRoot":"","sources":["../../src/instructions/claimVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"claimVoteTokens.d.ts","sourceRoot":"","sources":["../../src/instructions/claimVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgB7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,MAAM,EAAE,SAAS,CAAC;IAClB,2CAA2C;IAC3C,iBAAiB,EAAE,aAAa,CAAC;IACjC,oCAAoC;IACpC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;IACpB,mDAAmD;IACnD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,mBAAmB,EAAE,SAAS,CAAC;IAC/B,gEAAgE;IAChE,iBAAiB,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAsDhC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Program, BN } from "@coral-xyz/anchor";
|
|
2
2
|
import { SystemProgram } from "@solana/web3.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { getCompDefAccOffset, getMXEAccAddress, getMempoolAccAddress, getExecutingPoolAccAddress, getComputationAccAddress, getCompDefAccAddress, } from "@arcium-hq/client";
|
|
4
|
+
import { PROGRAM_ID, COMP_DEF_OFFSETS } from "../constants";
|
|
5
|
+
import { deriveVoteTokenAccountPda, generateComputationOffset, ARCIUM_CLUSTER_OFFSET, getClusterAddress, } from "../utils";
|
|
5
6
|
import IDL from "../idl/conviction_market.json";
|
|
6
7
|
/**
|
|
7
8
|
* Builds a transaction to claim (sell) vote tokens for SOL
|
|
@@ -17,6 +18,7 @@ import IDL from "../idl/conviction_market.json";
|
|
|
17
18
|
export async function claimVoteTokens(provider, params) {
|
|
18
19
|
const programId = params.programId ?? PROGRAM_ID;
|
|
19
20
|
const program = new Program(IDL, provider);
|
|
21
|
+
const clusterAccount = getClusterAddress();
|
|
20
22
|
// Derive vote token account PDA
|
|
21
23
|
const [voteTokenAccountPda] = deriveVoteTokenAccountPda(params.signer, programId);
|
|
22
24
|
// Auto-generate computation offset
|
|
@@ -29,11 +31,11 @@ export async function claimVoteTokens(provider, params) {
|
|
|
29
31
|
signer: params.signer,
|
|
30
32
|
voteTokenAccount: voteTokenAccountPda,
|
|
31
33
|
computationAccount: getComputationAccAddress(ARCIUM_CLUSTER_OFFSET, computationOffset),
|
|
32
|
-
clusterAccount
|
|
33
|
-
mxeAccount:
|
|
34
|
-
mempoolAccount:
|
|
35
|
-
executingPool:
|
|
36
|
-
compDefAccount:
|
|
34
|
+
clusterAccount,
|
|
35
|
+
mxeAccount: getMXEAccAddress(programId),
|
|
36
|
+
mempoolAccount: getMempoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
37
|
+
executingPool: getExecutingPoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
38
|
+
compDefAccount: getCompDefAccAddress(programId, Buffer.from(getCompDefAccOffset(COMP_DEF_OFFSETS.CLAIM_VOTE_TOKENS)).readUInt32LE()),
|
|
37
39
|
systemProgram: SystemProgram.programId,
|
|
38
40
|
})
|
|
39
41
|
.transaction();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimVoteTokens.js","sourceRoot":"","sources":["../../src/instructions/claimVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAuB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"claimVoteTokens.js","sourceRoot":"","sources":["../../src/instructions/claimVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAuB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,GAAG,MAAM,+BAA+B,CAAC;AA6BhD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAwB,EACxB,MAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CACzB,GAAuB,EACvB,QAAQ,CACoB,CAAC;IAE/B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,gCAAgC;IAChC,MAAM,CAAC,mBAAmB,CAAC,GAAG,yBAAyB,CACrD,MAAM,CAAC,MAAM,EACb,SAAS,CACV,CAAC;IAEF,mCAAmC;IACnC,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;IAEtD,uBAAuB;IACvB,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAE5E,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO;SACtC,eAAe,CACd,iBAAiB,EACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAC9C,QAAQ,CACT;SACA,eAAe,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,gBAAgB,EAAE,mBAAmB;QACrC,kBAAkB,EAAE,wBAAwB,CAC1C,qBAAqB,EACrB,iBAAiB,CAClB;QACD,cAAc;QACd,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACvC,cAAc,EAAE,oBAAoB,CAAC,qBAAqB,CAAC;QAC3D,aAAa,EAAE,0BAA0B,CAAC,qBAAqB,CAAC;QAChE,cAAc,EAAE,oBAAoB,CAClC,SAAS,EACT,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CACxD,CAAC,YAAY,EAAE,CACjB;QACD,aAAa,EAAE,aAAa,CAAC,SAAS;KACvC,CAAC;SACD,WAAW,EAAE,CAAC;IAEjB,OAAO;QACL,WAAW;QACX,mBAAmB;QACnB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMarket.d.ts","sourceRoot":"","sources":["../../src/instructions/createMarket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"createMarket.d.ts","sourceRoot":"","sources":["../../src/instructions/createMarket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAqB7E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,OAAO,EAAE,SAAS,CAAC;IACnB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,GAAG,EAAE,CAAC;IACzB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC;IACvB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,GAAG,EAAE,CAAC;IAC5B,4CAA4C;IAC5C,WAAW,EAAE,MAAM,GAAG,EAAE,CAAC;IACzB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;IAC1B,wDAAwD;IACxD,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,mDAAmD;IACnD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,gCAAgC;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,gEAAgE;IAChE,iBAAiB,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAiF7B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Program, BN } from "@coral-xyz/anchor";
|
|
2
2
|
import { SystemProgram } from "@solana/web3.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { getCompDefAccOffset, getMXEAccAddress, getMempoolAccAddress, getExecutingPoolAccAddress, getComputationAccAddress, getCompDefAccAddress, } from "@arcium-hq/client";
|
|
4
|
+
import { PROGRAM_ID, COMP_DEF_OFFSETS } from "../constants";
|
|
5
|
+
import { deriveMarketPda, generateComputationOffset, generateNonce, nonceToU128, ARCIUM_CLUSTER_OFFSET, getClusterAddress, } from "../utils";
|
|
5
6
|
import IDL from "../idl/conviction_market.json";
|
|
6
7
|
/**
|
|
7
8
|
* Builds a transaction to create a new conviction market with encrypted state
|
|
@@ -16,6 +17,7 @@ import IDL from "../idl/conviction_market.json";
|
|
|
16
17
|
export async function createMarket(provider, params) {
|
|
17
18
|
const programId = params.programId ?? PROGRAM_ID;
|
|
18
19
|
const program = new Program(IDL, provider);
|
|
20
|
+
const clusterAccount = getClusterAddress();
|
|
19
21
|
// Convert parameters to BN
|
|
20
22
|
const marketIndexBN = typeof params.marketIndex === "number"
|
|
21
23
|
? new BN(params.marketIndex)
|
|
@@ -44,11 +46,11 @@ export async function createMarket(provider, params) {
|
|
|
44
46
|
creator: params.creator,
|
|
45
47
|
market: marketPda,
|
|
46
48
|
computationAccount: getComputationAccAddress(ARCIUM_CLUSTER_OFFSET, computationOffset),
|
|
47
|
-
clusterAccount
|
|
48
|
-
mxeAccount:
|
|
49
|
-
mempoolAccount:
|
|
50
|
-
executingPool:
|
|
51
|
-
compDefAccount:
|
|
49
|
+
clusterAccount,
|
|
50
|
+
mxeAccount: getMXEAccAddress(programId),
|
|
51
|
+
mempoolAccount: getMempoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
52
|
+
executingPool: getExecutingPoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
53
|
+
compDefAccount: getCompDefAccAddress(programId, Buffer.from(getCompDefAccOffset(COMP_DEF_OFFSETS.INIT_MARKET_SHARES)).readUInt32LE()),
|
|
52
54
|
systemProgram: SystemProgram.programId,
|
|
53
55
|
})
|
|
54
56
|
.transaction();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMarket.js","sourceRoot":"","sources":["../../src/instructions/createMarket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAuB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"createMarket.js","sourceRoot":"","sources":["../../src/instructions/createMarket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initVoteTokenAccount.d.ts","sourceRoot":"","sources":["../../src/instructions/initVoteTokenAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"initVoteTokenAccount.d.ts","sourceRoot":"","sources":["../../src/instructions/initVoteTokenAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkB7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,2CAA2C;IAC3C,MAAM,EAAE,SAAS,CAAC;IAClB,2CAA2C;IAC3C,iBAAiB,EAAE,aAAa,CAAC;IACjC,mDAAmD;IACnD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,mCAAmC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,4CAA4C;IAC5C,mBAAmB,EAAE,SAAS,CAAC;IAC/B,gEAAgE;IAChE,iBAAiB,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,0BAA0B,CAAC,CAoDrC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Program } from "@coral-xyz/anchor";
|
|
2
2
|
import { SystemProgram } from "@solana/web3.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { getCompDefAccOffset, getMXEAccAddress, getMempoolAccAddress, getExecutingPoolAccAddress, getComputationAccAddress, getCompDefAccAddress, } from "@arcium-hq/client";
|
|
4
|
+
import { PROGRAM_ID, COMP_DEF_OFFSETS } from "../constants";
|
|
5
|
+
import { deriveVoteTokenAccountPda, generateComputationOffset, generateNonce, nonceToU128, ARCIUM_CLUSTER_OFFSET, getClusterAddress, } from "../utils";
|
|
5
6
|
import IDL from "../idl/conviction_market.json";
|
|
6
7
|
/**
|
|
7
8
|
* Builds a transaction to initialize a vote token account via encrypted computation
|
|
@@ -16,6 +17,7 @@ import IDL from "../idl/conviction_market.json";
|
|
|
16
17
|
export async function initVoteTokenAccount(provider, params) {
|
|
17
18
|
const programId = params.programId ?? PROGRAM_ID;
|
|
18
19
|
const program = new Program(IDL, provider);
|
|
20
|
+
const clusterAccount = getClusterAddress();
|
|
19
21
|
// Derive vote token account PDA
|
|
20
22
|
const [voteTokenAccountPda] = deriveVoteTokenAccountPda(params.signer, programId);
|
|
21
23
|
// Auto-generate computation offset and nonce
|
|
@@ -28,11 +30,11 @@ export async function initVoteTokenAccount(provider, params) {
|
|
|
28
30
|
signer: params.signer,
|
|
29
31
|
voteTokenAccount: voteTokenAccountPda,
|
|
30
32
|
computationAccount: getComputationAccAddress(ARCIUM_CLUSTER_OFFSET, computationOffset),
|
|
31
|
-
clusterAccount
|
|
32
|
-
mxeAccount:
|
|
33
|
-
mempoolAccount:
|
|
34
|
-
executingPool:
|
|
35
|
-
compDefAccount:
|
|
33
|
+
clusterAccount,
|
|
34
|
+
mxeAccount: getMXEAccAddress(programId),
|
|
35
|
+
mempoolAccount: getMempoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
36
|
+
executingPool: getExecutingPoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
37
|
+
compDefAccount: getCompDefAccAddress(programId, Buffer.from(getCompDefAccOffset(COMP_DEF_OFFSETS.INIT_VOTE_TOKEN_ACCOUNT)).readUInt32LE()),
|
|
36
38
|
systemProgram: SystemProgram.programId,
|
|
37
39
|
})
|
|
38
40
|
.transaction();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initVoteTokenAccount.js","sourceRoot":"","sources":["../../src/instructions/initVoteTokenAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"initVoteTokenAccount.js","sourceRoot":"","sources":["../../src/instructions/initVoteTokenAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,GAAG,MAAM,+BAA+B,CAAC;AA2BhD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAwB,EACxB,MAAkC;IAElC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CACzB,GAAuB,EACvB,QAAQ,CACoB,CAAC;IAE/B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,gCAAgC;IAChC,MAAM,CAAC,mBAAmB,CAAC,GAAG,yBAAyB,CACrD,MAAM,CAAC,MAAM,EACb,SAAS,CACV,CAAC;IAEF,6CAA6C;IAC7C,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO;SACtC,oBAAoB,CACnB,iBAAiB,EACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAC9C,OAAO,CACR;SACA,eAAe,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,gBAAgB,EAAE,mBAAmB;QACrC,kBAAkB,EAAE,wBAAwB,CAC1C,qBAAqB,EACrB,iBAAiB,CAClB;QACD,cAAc;QACd,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACvC,cAAc,EAAE,oBAAoB,CAAC,qBAAqB,CAAC;QAC3D,aAAa,EAAE,0BAA0B,CAAC,qBAAqB,CAAC;QAChE,cAAc,EAAE,oBAAoB,CAClC,SAAS,EACT,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAC9D,CAAC,YAAY,EAAE,CACjB;QACD,aAAa,EAAE,aAAa,CAAC,SAAS;KACvC,CAAC;SACD,WAAW,EAAE,CAAC;IAEjB,OAAO;QACL,WAAW;QACX,mBAAmB;QACnB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintVoteTokens.d.ts","sourceRoot":"","sources":["../../src/instructions/mintVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"mintVoteTokens.d.ts","sourceRoot":"","sources":["../../src/instructions/mintVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAiB,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgB7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,MAAM,EAAE,SAAS,CAAC;IAClB,2CAA2C;IAC3C,iBAAiB,EAAE,aAAa,CAAC;IACjC,oCAAoC;IACpC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;IACpB,mDAAmD;IACnD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,mBAAmB,EAAE,SAAS,CAAC;IAC/B,gEAAgE;IAChE,iBAAiB,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAsD/B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Program, BN } from "@coral-xyz/anchor";
|
|
2
2
|
import { SystemProgram } from "@solana/web3.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { getCompDefAccOffset, getMXEAccAddress, getMempoolAccAddress, getExecutingPoolAccAddress, getComputationAccAddress, getCompDefAccAddress, } from "@arcium-hq/client";
|
|
4
|
+
import { PROGRAM_ID, COMP_DEF_OFFSETS } from "../constants";
|
|
5
|
+
import { deriveVoteTokenAccountPda, generateComputationOffset, ARCIUM_CLUSTER_OFFSET, getClusterAddress, } from "../utils";
|
|
5
6
|
import IDL from "../idl/conviction_market.json";
|
|
6
7
|
/**
|
|
7
8
|
* Builds a transaction to mint vote tokens by paying SOL
|
|
@@ -17,6 +18,7 @@ import IDL from "../idl/conviction_market.json";
|
|
|
17
18
|
export async function mintVoteTokens(provider, params) {
|
|
18
19
|
const programId = params.programId ?? PROGRAM_ID;
|
|
19
20
|
const program = new Program(IDL, provider);
|
|
21
|
+
const clusterAccount = getClusterAddress();
|
|
20
22
|
// Derive vote token account PDA
|
|
21
23
|
const [voteTokenAccountPda] = deriveVoteTokenAccountPda(params.signer, programId);
|
|
22
24
|
// Auto-generate computation offset
|
|
@@ -29,11 +31,11 @@ export async function mintVoteTokens(provider, params) {
|
|
|
29
31
|
signer: params.signer,
|
|
30
32
|
voteTokenAccount: voteTokenAccountPda,
|
|
31
33
|
computationAccount: getComputationAccAddress(ARCIUM_CLUSTER_OFFSET, computationOffset),
|
|
32
|
-
clusterAccount
|
|
33
|
-
mxeAccount:
|
|
34
|
-
mempoolAccount:
|
|
35
|
-
executingPool:
|
|
36
|
-
compDefAccount:
|
|
34
|
+
clusterAccount,
|
|
35
|
+
mxeAccount: getMXEAccAddress(programId),
|
|
36
|
+
mempoolAccount: getMempoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
37
|
+
executingPool: getExecutingPoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
38
|
+
compDefAccount: getCompDefAccAddress(programId, Buffer.from(getCompDefAccOffset(COMP_DEF_OFFSETS.BUY_VOTE_TOKENS)).readUInt32LE()),
|
|
37
39
|
systemProgram: SystemProgram.programId,
|
|
38
40
|
})
|
|
39
41
|
.transaction();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintVoteTokens.js","sourceRoot":"","sources":["../../src/instructions/mintVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAuB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"mintVoteTokens.js","sourceRoot":"","sources":["../../src/instructions/mintVoteTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAuB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,GAAG,MAAM,+BAA+B,CAAC;AA6BhD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAwB,EACxB,MAA4B;IAE5B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CACzB,GAAuB,EACvB,QAAQ,CACoB,CAAC;IAE/B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,gCAAgC;IAChC,MAAM,CAAC,mBAAmB,CAAC,GAAG,yBAAyB,CACrD,MAAM,CAAC,MAAM,EACb,SAAS,CACV,CAAC;IAEF,mCAAmC;IACnC,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;IAEtD,uBAAuB;IACvB,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAE5E,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO;SACtC,cAAc,CACb,iBAAiB,EACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAC9C,QAAQ,CACT;SACA,eAAe,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,gBAAgB,EAAE,mBAAmB;QACrC,kBAAkB,EAAE,wBAAwB,CAC1C,qBAAqB,EACrB,iBAAiB,CAClB;QACD,cAAc;QACd,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACvC,cAAc,EAAE,oBAAoB,CAAC,qBAAqB,CAAC;QAC3D,aAAa,EAAE,0BAA0B,CAAC,qBAAqB,CAAC;QAChE,cAAc,EAAE,oBAAoB,CAClC,SAAS,EACT,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,gBAAgB,CAAC,eAAe,CAAC,CACtD,CAAC,YAAY,EAAE,CACjB;QACD,aAAa,EAAE,aAAa,CAAC,SAAS;KACvC,CAAC;SACD,WAAW,EAAE,CAAC;IAEjB,OAAO;QACL,WAAW;QACX,mBAAmB;QACnB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revealShares.d.ts","sourceRoot":"","sources":["../../src/instructions/revealShares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"revealShares.d.ts","sourceRoot":"","sources":["../../src/instructions/revealShares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiB9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,MAAM,EAAE,SAAS,CAAC;IAClB,2CAA2C;IAC3C,KAAK,EAAE,SAAS,CAAC;IACjB,iBAAiB;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,4CAA4C;IAC5C,kBAAkB,EAAE,aAAa,CAAC;IAClC,mDAAmD;IACnD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,+BAA+B;IAC/B,eAAe,EAAE,SAAS,CAAC;IAC3B,gEAAgE;IAChE,iBAAiB,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAqD7B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Program } from "@coral-xyz/anchor";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { getCompDefAccOffset, getMXEAccAddress, getMempoolAccAddress, getExecutingPoolAccAddress, getComputationAccAddress, getCompDefAccAddress, } from "@arcium-hq/client";
|
|
3
|
+
import { PROGRAM_ID, COMP_DEF_OFFSETS } from "../constants";
|
|
4
|
+
import { deriveVoteTokenAccountPda, deriveShareAccountPda, generateComputationOffset, ARCIUM_CLUSTER_OFFSET, getClusterAddress, } from "../utils";
|
|
4
5
|
import IDL from "../idl/conviction_market.json";
|
|
5
6
|
/**
|
|
6
7
|
* Builds a transaction to reveal a user's encrypted shares after staking ends
|
|
@@ -17,7 +18,9 @@ import IDL from "../idl/conviction_market.json";
|
|
|
17
18
|
export async function revealShares(provider, params) {
|
|
18
19
|
const programId = params.programId ?? PROGRAM_ID;
|
|
19
20
|
const program = new Program(IDL, provider);
|
|
20
|
-
|
|
21
|
+
const clusterAccount = getClusterAddress();
|
|
22
|
+
// Derive accounts
|
|
23
|
+
const [voteTokenAccountPda] = deriveVoteTokenAccountPda(params.owner, programId);
|
|
21
24
|
const [shareAccountPda] = deriveShareAccountPda(params.owner, params.market, programId);
|
|
22
25
|
// Auto-generate computation offset
|
|
23
26
|
const computationOffset = generateComputationOffset();
|
|
@@ -27,11 +30,11 @@ export async function revealShares(provider, params) {
|
|
|
27
30
|
owner: params.owner,
|
|
28
31
|
market: params.market,
|
|
29
32
|
computationAccount: getComputationAccAddress(ARCIUM_CLUSTER_OFFSET, computationOffset),
|
|
30
|
-
clusterAccount
|
|
31
|
-
mxeAccount:
|
|
32
|
-
mempoolAccount:
|
|
33
|
-
executingPool:
|
|
34
|
-
compDefAccount:
|
|
33
|
+
clusterAccount,
|
|
34
|
+
mxeAccount: getMXEAccAddress(programId),
|
|
35
|
+
mempoolAccount: getMempoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
36
|
+
executingPool: getExecutingPoolAccAddress(ARCIUM_CLUSTER_OFFSET),
|
|
37
|
+
compDefAccount: getCompDefAccAddress(programId, Buffer.from(getCompDefAccOffset(COMP_DEF_OFFSETS.REVEAL_SHARES)).readUInt32LE()),
|
|
35
38
|
})
|
|
36
39
|
.transaction();
|
|
37
40
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revealShares.js","sourceRoot":"","sources":["../../src/instructions/revealShares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"revealShares.js","sourceRoot":"","sources":["../../src/instructions/revealShares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAErE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,GAAG,MAAM,+BAA+B,CAAC;AA+BhD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAwB,EACxB,MAA0B;IAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CACzB,GAAuB,EACvB,QAAQ,CACoB,CAAC;IAE/B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,kBAAkB;IAClB,MAAM,CAAC,mBAAmB,CAAC,GAAG,yBAAyB,CACrD,MAAM,CAAC,KAAK,EACZ,SAAS,CACV,CAAC;IACF,MAAM,CAAC,eAAe,CAAC,GAAG,qBAAqB,CAC7C,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,SAAS,CACV,CAAC;IAEF,mCAAmC;IACnC,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;IAEtD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO;SACtC,YAAY,CACX,iBAAiB,EACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAChD;SACA,eAAe,CAAC;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,kBAAkB,EAAE,wBAAwB,CAC1C,qBAAqB,EACrB,iBAAiB,CAClB;QACD,cAAc;QACd,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACvC,cAAc,EAAE,oBAAoB,CAAC,qBAAqB,CAAC;QAC3D,aAAa,EAAE,0BAA0B,CAAC,qBAAqB,CAAC;QAChE,cAAc,EAAE,oBAAoB,CAClC,SAAS,EACT,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,gBAAgB,CAAC,aAAa,CAAC,CACpD,CAAC,YAAY,EAAE,CACjB;KACF,CAAC;SACD,WAAW,EAAE,CAAC;IAEjB,OAAO;QACL,WAAW;QACX,eAAe;QACf,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { RescueCipher } from "@arcium-hq/client";
|
|
2
|
+
import type { AnchorProvider } from "@coral-xyz/anchor";
|
|
3
|
+
import type { PublicKey } from "@solana/web3.js";
|
|
2
4
|
import type { X25519Keypair } from "../types";
|
|
3
5
|
/**
|
|
4
6
|
* Encryption context for working with encrypted data
|
|
@@ -10,11 +12,13 @@ export interface EncryptionContext {
|
|
|
10
12
|
x25519Keypair: X25519Keypair;
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* Fetches the MXE public key from the on-chain program
|
|
16
|
+
*
|
|
17
|
+
* @param provider - Anchor provider
|
|
18
|
+
* @param programId - Program ID
|
|
15
19
|
* @returns The MXE's X25519 public key
|
|
16
20
|
*/
|
|
17
|
-
export declare function fetchMXEPublicKey(): Uint8Array
|
|
21
|
+
export declare function fetchMXEPublicKey(provider: AnchorProvider, programId: PublicKey): Promise<Uint8Array>;
|
|
18
22
|
/**
|
|
19
23
|
* Creates an encryption context for a user
|
|
20
24
|
*
|
|
@@ -22,10 +26,10 @@ export declare function fetchMXEPublicKey(): Uint8Array;
|
|
|
22
26
|
* for encryption/decryption operations.
|
|
23
27
|
*
|
|
24
28
|
* @param x25519Keypair - User's X25519 keypair
|
|
25
|
-
* @param mxePublicKey - MXE's public key (
|
|
29
|
+
* @param mxePublicKey - MXE's public key (fetch with fetchMXEPublicKey)
|
|
26
30
|
* @returns Encryption context with cipher
|
|
27
31
|
*/
|
|
28
|
-
export declare function createEncryptionContext(x25519Keypair: X25519Keypair, mxePublicKey
|
|
32
|
+
export declare function createEncryptionContext(x25519Keypair: X25519Keypair, mxePublicKey: Uint8Array): EncryptionContext;
|
|
29
33
|
/**
|
|
30
34
|
* Encrypts values for buying market shares
|
|
31
35
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/utils/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/utils/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,4BAA4B;IAC5B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,UAAU,GACvB,iBAAiB,CAWnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,UAAU,GAChB;IACD,gBAAgB,EAAE,UAAU,CAAC;IAC7B,wBAAwB,EAAE,UAAU,CAAC;CACtC,CAWA"}
|
package/dist/utils/encryption.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { x25519, RescueCipher } from "@arcium-hq/client";
|
|
2
|
-
import { MXE_X25519_PUBKEY } from "./arcium";
|
|
1
|
+
import { x25519, RescueCipher, getMXEPublicKey } from "@arcium-hq/client";
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Fetches the MXE public key from the on-chain program
|
|
4
|
+
*
|
|
5
|
+
* @param provider - Anchor provider
|
|
6
|
+
* @param programId - Program ID
|
|
6
7
|
* @returns The MXE's X25519 public key
|
|
7
8
|
*/
|
|
8
|
-
export function fetchMXEPublicKey() {
|
|
9
|
-
|
|
9
|
+
export async function fetchMXEPublicKey(provider, programId) {
|
|
10
|
+
const key = await getMXEPublicKey(provider, programId);
|
|
11
|
+
if (!key) {
|
|
12
|
+
throw new Error("Failed to fetch MXE public key");
|
|
13
|
+
}
|
|
14
|
+
return key;
|
|
10
15
|
}
|
|
11
16
|
/**
|
|
12
17
|
* Creates an encryption context for a user
|
|
@@ -15,10 +20,10 @@ export function fetchMXEPublicKey() {
|
|
|
15
20
|
* for encryption/decryption operations.
|
|
16
21
|
*
|
|
17
22
|
* @param x25519Keypair - User's X25519 keypair
|
|
18
|
-
* @param mxePublicKey - MXE's public key (
|
|
23
|
+
* @param mxePublicKey - MXE's public key (fetch with fetchMXEPublicKey)
|
|
19
24
|
* @returns Encryption context with cipher
|
|
20
25
|
*/
|
|
21
|
-
export function createEncryptionContext(x25519Keypair, mxePublicKey
|
|
26
|
+
export function createEncryptionContext(x25519Keypair, mxePublicKey) {
|
|
22
27
|
const sharedSecret = x25519.getSharedSecret(x25519Keypair.secretKey, mxePublicKey);
|
|
23
28
|
const cipher = new RescueCipher(sharedSecret);
|
|
24
29
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/utils/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/utils/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAe1E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAwB,EACxB,SAAoB;IAEpB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACrC,aAA4B,EAC5B,YAAwB;IAExB,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CACzC,aAAa,CAAC,SAAS,EACvB,YAAY,CACb,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;IAE9C,OAAO;QACL,MAAM;QACN,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA0B,EAC1B,MAAc,EACd,cAAsB,EACtB,KAAiB;IAKjB,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;IAE5E,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,OAAO;QACL,gBAAgB,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChD,wBAAwB,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC"}
|