@baozi.bet/mcp-server 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +294 -0
- package/dist/__tests__/full-test.d.ts +1 -0
- package/dist/__tests__/full-test.js +291 -0
- package/dist/builders/affiliate-transaction.d.ts +41 -0
- package/dist/builders/affiliate-transaction.js +123 -0
- package/dist/builders/bet-transaction.d.ts +70 -0
- package/dist/builders/bet-transaction.js +323 -0
- package/dist/builders/claim-transaction.d.ts +57 -0
- package/dist/builders/claim-transaction.js +196 -0
- package/dist/builders/creator-transaction.d.ts +49 -0
- package/dist/builders/creator-transaction.js +177 -0
- package/dist/builders/dispute-transaction.d.ts +81 -0
- package/dist/builders/dispute-transaction.js +215 -0
- package/dist/builders/index.d.ts +14 -0
- package/dist/builders/index.js +15 -0
- package/dist/builders/market-creation-tx.d.ts +65 -0
- package/dist/builders/market-creation-tx.js +362 -0
- package/dist/builders/market-management-transaction.d.ts +85 -0
- package/dist/builders/market-management-transaction.js +239 -0
- package/dist/builders/race-transaction.d.ts +67 -0
- package/dist/builders/race-transaction.js +242 -0
- package/dist/builders/resolution-transaction.d.ts +108 -0
- package/dist/builders/resolution-transaction.js +250 -0
- package/dist/builders/whitelist-transaction.d.ts +72 -0
- package/dist/builders/whitelist-transaction.js +179 -0
- package/dist/config.d.ts +138 -0
- package/dist/config.js +307 -0
- package/dist/handlers/agent-network.d.ts +81 -0
- package/dist/handlers/agent-network.js +332 -0
- package/dist/handlers/claims.d.ts +47 -0
- package/dist/handlers/claims.js +218 -0
- package/dist/handlers/market-creation.d.ts +154 -0
- package/dist/handlers/market-creation.js +290 -0
- package/dist/handlers/markets.d.ts +41 -0
- package/dist/handlers/markets.js +319 -0
- package/dist/handlers/positions.d.ts +40 -0
- package/dist/handlers/positions.js +244 -0
- package/dist/handlers/quote.d.ts +33 -0
- package/dist/handlers/quote.js +144 -0
- package/dist/handlers/race-markets.d.ts +54 -0
- package/dist/handlers/race-markets.js +308 -0
- package/dist/handlers/resolution.d.ts +43 -0
- package/dist/handlers/resolution.js +194 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +109 -0
- package/dist/resources.d.ts +13 -0
- package/dist/resources.js +336 -0
- package/dist/tools.d.ts +3109 -0
- package/dist/tools.js +1956 -0
- package/dist/validation/bet-rules.d.ts +82 -0
- package/dist/validation/bet-rules.js +276 -0
- package/dist/validation/creation-rules.d.ts +69 -0
- package/dist/validation/creation-rules.js +302 -0
- package/dist/validation/index.d.ts +6 -0
- package/dist/validation/index.js +7 -0
- package/dist/validation/market-rules.d.ts +60 -0
- package/dist/validation/market-rules.js +237 -0
- package/dist/validation/parimutuel-rules.d.ts +117 -0
- package/dist/validation/parimutuel-rules.js +270 -0
- package/package.json +52 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispute Transaction Builders
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: Account structures verified against IDL v4.7.6
|
|
5
|
+
*/
|
|
6
|
+
import { Connection, PublicKey, Transaction, TransactionInstruction, SystemProgram, } from '@solana/web3.js';
|
|
7
|
+
import { PROGRAM_ID, CONFIG_PDA, RPC_ENDPOINT, SEEDS, } from '../config.js';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// DISCRIMINATORS (from IDL)
|
|
10
|
+
// =============================================================================
|
|
11
|
+
const DISCRIMINATORS = {
|
|
12
|
+
flag_dispute: Buffer.from([150, 222, 78, 72, 117, 140, 2, 75]),
|
|
13
|
+
flag_race_dispute: Buffer.from([154, 160, 110, 29, 65, 3, 77, 7]),
|
|
14
|
+
vote_council: Buffer.from([252, 167, 165, 182, 221, 242, 174, 249]),
|
|
15
|
+
vote_council_race: Buffer.from([79, 176, 145, 193, 225, 24, 183, 234]),
|
|
16
|
+
change_council_vote: Buffer.from([70, 96, 72, 253, 134, 120, 254, 76]),
|
|
17
|
+
change_council_vote_race: Buffer.from([54, 185, 210, 126, 40, 252, 146, 6]),
|
|
18
|
+
};
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// PDA DERIVATION
|
|
21
|
+
// =============================================================================
|
|
22
|
+
function deriveDisputeMetaPda(marketPda) {
|
|
23
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.DISPUTE_META, marketPda.toBuffer()], PROGRAM_ID);
|
|
24
|
+
return pda;
|
|
25
|
+
}
|
|
26
|
+
function deriveCouncilVotePda(marketPda, voter) {
|
|
27
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from('council_vote'), marketPda.toBuffer(), voter.toBuffer()], PROGRAM_ID);
|
|
28
|
+
return pda;
|
|
29
|
+
}
|
|
30
|
+
function deriveRaceVoteRecordPda(raceMarketPda, voter) {
|
|
31
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from('race_council_vote'), raceMarketPda.toBuffer(), voter.toBuffer()], PROGRAM_ID);
|
|
32
|
+
return pda;
|
|
33
|
+
}
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// BOOLEAN MARKET DISPUTES
|
|
36
|
+
// =============================================================================
|
|
37
|
+
/**
|
|
38
|
+
* Build flag_dispute transaction
|
|
39
|
+
* IDL Accounts: config, market, dispute_meta, authority
|
|
40
|
+
*/
|
|
41
|
+
export async function buildFlagDisputeTransaction(params) {
|
|
42
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
43
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
44
|
+
const disputerPubkey = new PublicKey(params.disputerWallet);
|
|
45
|
+
const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
|
|
46
|
+
const data = DISCRIMINATORS.flag_dispute;
|
|
47
|
+
const keys = [
|
|
48
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
49
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
50
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
51
|
+
{ pubkey: disputerPubkey, isSigner: true, isWritable: false },
|
|
52
|
+
];
|
|
53
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
54
|
+
const transaction = new Transaction().add(instruction);
|
|
55
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
56
|
+
transaction.recentBlockhash = blockhash;
|
|
57
|
+
transaction.feePayer = disputerPubkey;
|
|
58
|
+
return {
|
|
59
|
+
transaction,
|
|
60
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Build vote_council transaction
|
|
65
|
+
* IDL Accounts: config, market, council_vote, dispute_meta, voter, system_program
|
|
66
|
+
*/
|
|
67
|
+
export async function buildVoteCouncilTransaction(params) {
|
|
68
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
69
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
70
|
+
const voterPubkey = new PublicKey(params.voterWallet);
|
|
71
|
+
const councilVotePda = deriveCouncilVotePda(marketPubkey, voterPubkey);
|
|
72
|
+
const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
|
|
73
|
+
// Instruction data: discriminator + vote (bool)
|
|
74
|
+
const data = Buffer.alloc(9);
|
|
75
|
+
DISCRIMINATORS.vote_council.copy(data, 0);
|
|
76
|
+
data.writeUInt8(params.voteYes ? 1 : 0, 8);
|
|
77
|
+
const keys = [
|
|
78
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
79
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
80
|
+
{ pubkey: councilVotePda, isSigner: false, isWritable: true },
|
|
81
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
82
|
+
{ pubkey: voterPubkey, isSigner: true, isWritable: true },
|
|
83
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
84
|
+
];
|
|
85
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
86
|
+
const transaction = new Transaction().add(instruction);
|
|
87
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
88
|
+
transaction.recentBlockhash = blockhash;
|
|
89
|
+
transaction.feePayer = voterPubkey;
|
|
90
|
+
return {
|
|
91
|
+
transaction,
|
|
92
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Build change_council_vote transaction
|
|
97
|
+
* IDL Accounts: config, market, council_vote, dispute_meta, voter
|
|
98
|
+
*/
|
|
99
|
+
export async function buildChangeCouncilVoteTransaction(params) {
|
|
100
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
101
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
102
|
+
const voterPubkey = new PublicKey(params.voterWallet);
|
|
103
|
+
const councilVotePda = deriveCouncilVotePda(marketPubkey, voterPubkey);
|
|
104
|
+
const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
|
|
105
|
+
const data = Buffer.alloc(9);
|
|
106
|
+
DISCRIMINATORS.change_council_vote.copy(data, 0);
|
|
107
|
+
data.writeUInt8(params.newVoteYes ? 1 : 0, 8);
|
|
108
|
+
const keys = [
|
|
109
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
110
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
111
|
+
{ pubkey: councilVotePda, isSigner: false, isWritable: true },
|
|
112
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
113
|
+
{ pubkey: voterPubkey, isSigner: true, isWritable: false },
|
|
114
|
+
];
|
|
115
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
116
|
+
const transaction = new Transaction().add(instruction);
|
|
117
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
118
|
+
transaction.recentBlockhash = blockhash;
|
|
119
|
+
transaction.feePayer = voterPubkey;
|
|
120
|
+
return {
|
|
121
|
+
transaction,
|
|
122
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// =============================================================================
|
|
126
|
+
// RACE MARKET DISPUTES
|
|
127
|
+
// =============================================================================
|
|
128
|
+
/**
|
|
129
|
+
* Build flag_race_dispute transaction
|
|
130
|
+
* IDL Accounts: config, race_market, dispute_meta, authority
|
|
131
|
+
*/
|
|
132
|
+
export async function buildFlagRaceDisputeTransaction(params) {
|
|
133
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
134
|
+
const raceMarketPubkey = new PublicKey(params.raceMarketPda);
|
|
135
|
+
const disputerPubkey = new PublicKey(params.disputerWallet);
|
|
136
|
+
const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
|
|
137
|
+
const data = DISCRIMINATORS.flag_race_dispute;
|
|
138
|
+
const keys = [
|
|
139
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
140
|
+
{ pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
|
|
141
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
142
|
+
{ pubkey: disputerPubkey, isSigner: true, isWritable: false },
|
|
143
|
+
];
|
|
144
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
145
|
+
const transaction = new Transaction().add(instruction);
|
|
146
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
147
|
+
transaction.recentBlockhash = blockhash;
|
|
148
|
+
transaction.feePayer = disputerPubkey;
|
|
149
|
+
return {
|
|
150
|
+
transaction,
|
|
151
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Build vote_council_race transaction
|
|
156
|
+
* IDL Accounts: config, race_market, vote_record, dispute_meta, voter, system_program
|
|
157
|
+
*/
|
|
158
|
+
export async function buildVoteCouncilRaceTransaction(params) {
|
|
159
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
160
|
+
const raceMarketPubkey = new PublicKey(params.raceMarketPda);
|
|
161
|
+
const voterPubkey = new PublicKey(params.voterWallet);
|
|
162
|
+
const voteRecordPda = deriveRaceVoteRecordPda(raceMarketPubkey, voterPubkey);
|
|
163
|
+
const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
|
|
164
|
+
// Instruction data: discriminator + outcome_index (u8)
|
|
165
|
+
const data = Buffer.alloc(9);
|
|
166
|
+
DISCRIMINATORS.vote_council_race.copy(data, 0);
|
|
167
|
+
data.writeUInt8(params.voteOutcomeIndex, 8);
|
|
168
|
+
const keys = [
|
|
169
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
170
|
+
{ pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
|
|
171
|
+
{ pubkey: voteRecordPda, isSigner: false, isWritable: true },
|
|
172
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
173
|
+
{ pubkey: voterPubkey, isSigner: true, isWritable: true },
|
|
174
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
175
|
+
];
|
|
176
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
177
|
+
const transaction = new Transaction().add(instruction);
|
|
178
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
179
|
+
transaction.recentBlockhash = blockhash;
|
|
180
|
+
transaction.feePayer = voterPubkey;
|
|
181
|
+
return {
|
|
182
|
+
transaction,
|
|
183
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Build change_council_vote_race transaction
|
|
188
|
+
*/
|
|
189
|
+
export async function buildChangeCouncilVoteRaceTransaction(params) {
|
|
190
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
191
|
+
const raceMarketPubkey = new PublicKey(params.raceMarketPda);
|
|
192
|
+
const voterPubkey = new PublicKey(params.voterWallet);
|
|
193
|
+
const voteRecordPda = deriveRaceVoteRecordPda(raceMarketPubkey, voterPubkey);
|
|
194
|
+
const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
|
|
195
|
+
const data = Buffer.alloc(9);
|
|
196
|
+
DISCRIMINATORS.change_council_vote_race.copy(data, 0);
|
|
197
|
+
data.writeUInt8(params.newVoteOutcomeIndex, 8);
|
|
198
|
+
const keys = [
|
|
199
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
200
|
+
{ pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
|
|
201
|
+
{ pubkey: voteRecordPda, isSigner: false, isWritable: true },
|
|
202
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
203
|
+
{ pubkey: voterPubkey, isSigner: true, isWritable: false },
|
|
204
|
+
];
|
|
205
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
206
|
+
const transaction = new Transaction().add(instruction);
|
|
207
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
208
|
+
transaction.recentBlockhash = blockhash;
|
|
209
|
+
transaction.feePayer = voterPubkey;
|
|
210
|
+
return {
|
|
211
|
+
transaction,
|
|
212
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcHV0ZS10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVycy9kaXNwdXRlLXRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEdBQ04sTUFBTSxjQUFjLENBQUM7QUFFdEIsZ0ZBQWdGO0FBQ2hGLDRCQUE0QjtBQUM1QixnRkFBZ0Y7QUFFaEYsTUFBTSxjQUFjLEdBQUc7SUFDckIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUQsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRSxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLG1CQUFtQixFQUFFLE1BQU0s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QUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7S0FDakgsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERpc3B1dGUgVHJhbnNhY3Rpb24gQnVpbGRlcnNcbiAqXG4gKiBJTVBPUlRBTlQ6IEFjY291bnQgc3RydWN0dXJlcyB2ZXJpZmllZCBhZ2FpbnN0IElETCB2NC43LjZcbiAqL1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbixcbiAgUHVibGljS2V5LFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbixcbiAgU3lzdGVtUHJvZ3JhbSxcbn0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCB7XG4gIFBST0dSQU1fSUQsXG4gIENPTkZJR19QREEsXG4gIFJQQ19FTkRQT0lOVCxcbiAgU0VFRFMsXG59IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBESVNDUklNSU5BVE9SUyAoZnJvbSBJREwpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBESVNDUklNSU5BVE9SUyA9IHtcbiAgZmxhZ19kaXNwdXRlOiBCdWZmZXIuZnJvbShbMTUwLCAyMjIsIDc4LCA3MiwgMTE3LCAxNDAsIDIsIDc1XSksXG4gIGZsYWdfcmFjZV9kaXNwdXRlOiBCdWZmZXIuZnJvbShbMTU0LCAxNjAsIDExMCwgMjksIDY1LCAzLCA3NywgN10pLFxuICB2b3RlX2NvdW5jaWw6IEJ1ZmZlci5mcm9tKFsyNTIsIDE2NywgMTY1LCAxODIsIDIyMSwgMjQyLCAxNzQsIDI0OV0pLFxuICB2b3RlX2NvdW5jaWxfcmFjZTogQnVmZmVyLmZyb20oWzc5LCAxNzYsIDE0NSwgMTkzLCAyMjUsIDI0LCAxODMsIDIzNF0pLFxuICBjaGFuZ2VfY291bmNpbF92b3RlOiBCdWZmZXIuZnJvbShbNzAsIDk2LCA3MiwgMjUzLCAxMzQsIDEyMCwgMjU0LCA3Nl0pLFxuICBjaGFuZ2VfY291bmNpbF92b3RlX3JhY2U6IEJ1ZmZlci5mcm9tKFs1NCwgMTg1LCAyMTAsIDEyNiwgNDAsIDI1MiwgMTQ2LCA2XSksXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUERBIERFUklWQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGRlcml2ZURpc3B1dGVNZXRhUGRhKG1hcmtldFBkYTogUHVibGljS2V5KTogUHVibGljS2V5IHtcbiAgY29uc3QgW3BkYV0gPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbU0VFRFMuRElTUFVURV9NRVRBLCBtYXJrZXRQZGEudG9CdWZmZXIoKV0sXG4gICAgUFJPR1JBTV9JRFxuICApO1xuICByZXR1cm4gcGRhO1xufVxuXG5mdW5jdGlvbiBkZXJpdmVDb3VuY2lsVm90ZVBkYShtYXJrZXRQZGE6IFB1YmxpY0tleSwgdm90ZXI6IFB1YmxpY0tleSk6IFB1YmxpY0tleSB7XG4gIGNvbnN0IFtwZGFdID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW0J1ZmZlci5mcm9tKCdjb3VuY2lsX3ZvdGUnKSwgbWFya2V0UGRhLnRvQnVmZmVyKCksIHZvdGVyLnRvQnVmZmVyKCldLFxuICAgIFBST0dSQU1fSURcbiAgKTtcbiAgcmV0dXJuIHBkYTtcbn1cblxuZnVuY3Rpb24gZGVyaXZlUmFjZVZvdGVSZWNvcmRQZGEocmFjZU1hcmtldFBkYTogUHVibGljS2V5LCB2b3RlcjogUHVibGljS2V5KTogUHVibGljS2V5IHtcbiAgY29uc3QgW3BkYV0gPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbQnVmZmVyLmZyb20oJ3JhY2VfY291bmNpbF92b3RlJyksIHJhY2VNYXJrZXRQZGEudG9CdWZmZXIoKSwgdm90ZXIudG9CdWZmZXIoKV0sXG4gICAgUFJPR1JBTV9JRFxuICApO1xuICByZXR1cm4gcGRhO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQk9PTEVBTiBNQVJLRVQgRElTUFVURVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQnVpbGQgZmxhZ19kaXNwdXRlIHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgbWFya2V0LCBkaXNwdXRlX21ldGEsIGF1dGhvcml0eVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRGbGFnRGlzcHV0ZVRyYW5zYWN0aW9uKHBhcmFtczoge1xuICBtYXJrZXRQZGE6IHN0cmluZztcbiAgZGlzcHV0ZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IG1hcmtldFB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLm1hcmtldFBkYSk7XG4gIGNvbnN0IGRpc3B1dGVyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMuZGlzcHV0ZXJXYWxsZXQpO1xuICBjb25zdCBkaXNwdXRlTWV0YVBkYSA9IGRlcml2ZURpc3B1dGVNZXRhUGRhKG1hcmtldFB1YmtleSk7XG5cbiAgY29uc3QgZGF0YSA9IERJU0NSSU1JTkFUT1JTLmZsYWdfZGlzcHV0ZTtcblxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IG1hcmtldFB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IGRpc3B1dGVNZXRhUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogZGlzcHV0ZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IGRpc3B1dGVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB2b3RlX2NvdW5jaWwgdHJhbnNhY3Rpb25cbiAqIElETCBBY2NvdW50czogY29uZmlnLCBtYXJrZXQsIGNvdW5jaWxfdm90ZSwgZGlzcHV0ZV9tZXRhLCB2b3Rlciwgc3lzdGVtX3Byb2dyYW1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVm90ZUNvdW5jaWxUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgbWFya2V0UGRhOiBzdHJpbmc7XG4gIHZvdGVZZXM6IGJvb2xlYW47XG4gIHZvdGVyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCBtYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5tYXJrZXRQZGEpO1xuICBjb25zdCB2b3RlclB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLnZvdGVyV2FsbGV0KTtcbiAgY29uc3QgY291bmNpbFZvdGVQZGEgPSBkZXJpdmVDb3VuY2lsVm90ZVBkYShtYXJrZXRQdWJrZXksIHZvdGVyUHVia2V5KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShtYXJrZXRQdWJrZXkpO1xuXG4gIC8vIEluc3RydWN0aW9uIGRhdGE6IGRpc2NyaW1pbmF0b3IgKyB2b3RlIChib29sKVxuICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDkpO1xuICBESVNDUklNSU5BVE9SUy52b3RlX2NvdW5jaWwuY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy52b3RlWWVzID8gMSA6IDAsIDgpO1xuXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IENPTkZJR19QREEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogbWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogY291bmNpbFZvdGVQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlTWV0YVBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHZvdGVyUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHZvdGVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBjaGFuZ2VfY291bmNpbF92b3RlIHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgbWFya2V0LCBjb3VuY2lsX3ZvdGUsIGRpc3B1dGVfbWV0YSwgdm90ZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2hhbmdlQ291bmNpbFZvdGVUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgbWFya2V0UGRhOiBzdHJpbmc7XG4gIG5ld1ZvdGVZZXM6IGJvb2xlYW47XG4gIHZvdGVyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCBtYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5tYXJrZXRQZGEpO1xuICBjb25zdCB2b3RlclB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLnZvdGVyV2FsbGV0KTtcbiAgY29uc3QgY291bmNpbFZvdGVQZGEgPSBkZXJpdmVDb3VuY2lsVm90ZVBkYShtYXJrZXRQdWJrZXksIHZvdGVyUHVia2V5KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShtYXJrZXRQdWJrZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOSk7XG4gIERJU0NSSU1JTkFUT1JTLmNoYW5nZV9jb3VuY2lsX3ZvdGUuY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy5uZXdWb3RlWWVzID8gMSA6IDAsIDgpO1xuXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IENPTkZJR19QREEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogbWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogY291bmNpbFZvdGVQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlTWV0YVBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHZvdGVyUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgXTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHsgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELCBrZXlzLCBkYXRhIH0pO1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChpbnN0cnVjdGlvbik7XG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSBhd2FpdCBjb25uLmdldExhdGVzdEJsb2NraGFzaCgnZmluYWxpemVkJyk7XG4gIHRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCA9IGJsb2NraGFzaDtcbiAgdHJhbnNhY3Rpb24uZmVlUGF5ZXIgPSB2b3RlclB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSQUNFIE1BUktFVCBESVNQVVRFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCdWlsZCBmbGFnX3JhY2VfZGlzcHV0ZSB0cmFuc2FjdGlvblxuICogSURMIEFjY291bnRzOiBjb25maWcsIHJhY2VfbWFya2V0LCBkaXNwdXRlX21ldGEsIGF1dGhvcml0eVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRGbGFnUmFjZURpc3B1dGVUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgcmFjZU1hcmtldFBkYTogc3RyaW5nO1xuICBkaXNwdXRlcldhbGxldDogc3RyaW5nO1xuICBjb25uZWN0aW9uPzogQ29ubmVjdGlvbjtcbn0pOiBQcm9taXNlPHsgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uOyBzZXJpYWxpemVkVHg6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGNvbm4gPSBwYXJhbXMuY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcbiAgY29uc3QgcmFjZU1hcmtldFB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLnJhY2VNYXJrZXRQZGEpO1xuICBjb25zdCBkaXNwdXRlclB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLmRpc3B1dGVyV2FsbGV0KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShyYWNlTWFya2V0UHVia2V5KTtcblxuICBjb25zdCBkYXRhID0gRElTQ1JJTUlOQVRPUlMuZmxhZ19yYWNlX2Rpc3B1dGU7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogQ09ORklHX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiByYWNlTWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogZGlzcHV0ZU1ldGFQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7IHByb2dyYW1JZDogUFJPR1JBTV9JRCwga2V5cywgZGF0YSB9KTtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaW5zdHJ1Y3Rpb24pO1xuICBjb25zdCB7IGJsb2NraGFzaCB9ID0gYXdhaXQgY29ubi5nZXRMYXRlc3RCbG9ja2hhc2goJ2ZpbmFsaXplZCcpO1xuICB0cmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2ggPSBibG9ja2hhc2g7XG4gIHRyYW5zYWN0aW9uLmZlZVBheWVyID0gZGlzcHV0ZXJQdWJrZXk7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFuc2FjdGlvbixcbiAgICBzZXJpYWxpemVkVHg6IHRyYW5zYWN0aW9uLnNlcmlhbGl6ZSh7IHJlcXVpcmVBbGxTaWduYXR1cmVzOiBmYWxzZSwgdmVyaWZ5U2lnbmF0dXJlczogZmFsc2UgfSkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIHZvdGVfY291bmNpbF9yYWNlIHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgcmFjZV9tYXJrZXQsIHZvdGVfcmVjb3JkLCBkaXNwdXRlX21ldGEsIHZvdGVyLCBzeXN0ZW1fcHJvZ3JhbVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRWb3RlQ291bmNpbFJhY2VUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgcmFjZU1hcmtldFBkYTogc3RyaW5nO1xuICB2b3RlT3V0Y29tZUluZGV4OiBudW1iZXI7XG4gIHZvdGVyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCByYWNlTWFya2V0UHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMucmFjZU1hcmtldFBkYSk7XG4gIGNvbnN0IHZvdGVyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMudm90ZXJXYWxsZXQpO1xuICBjb25zdCB2b3RlUmVjb3JkUGRhID0gZGVyaXZlUmFjZVZvdGVSZWNvcmRQZGEocmFjZU1hcmtldFB1YmtleSwgdm90ZXJQdWJrZXkpO1xuICBjb25zdCBkaXNwdXRlTWV0YVBkYSA9IGRlcml2ZURpc3B1dGVNZXRhUGRhKHJhY2VNYXJrZXRQdWJrZXkpO1xuXG4gIC8vIEluc3RydWN0aW9uIGRhdGE6IGRpc2NyaW1pbmF0b3IgKyBvdXRjb21lX2luZGV4ICh1OClcbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMudm90ZV9jb3VuY2lsX3JhY2UuY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy52b3RlT3V0Y29tZUluZGV4LCA4KTtcblxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IHJhY2VNYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiB2b3RlUmVjb3JkUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogZGlzcHV0ZU1ldGFQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiB2b3RlclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgXTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHsgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELCBrZXlzLCBkYXRhIH0pO1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChpbnN0cnVjdGlvbik7XG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSBhd2FpdCBjb25uLmdldExhdGVzdEJsb2NraGFzaCgnZmluYWxpemVkJyk7XG4gIHRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCA9IGJsb2NraGFzaDtcbiAgdHJhbnNhY3Rpb24uZmVlUGF5ZXIgPSB2b3RlclB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgY2hhbmdlX2NvdW5jaWxfdm90ZV9yYWNlIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENoYW5nZUNvdW5jaWxWb3RlUmFjZVRyYW5zYWN0aW9uKHBhcmFtczoge1xuICByYWNlTWFya2V0UGRhOiBzdHJpbmc7XG4gIG5ld1ZvdGVPdXRjb21lSW5kZXg6IG51bWJlcjtcbiAgdm90ZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IHJhY2VNYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5yYWNlTWFya2V0UGRhKTtcbiAgY29uc3Qgdm90ZXJQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy52b3RlcldhbGxldCk7XG4gIGNvbnN0IHZvdGVSZWNvcmRQZGEgPSBkZXJpdmVSYWNlVm90ZVJlY29yZFBkYShyYWNlTWFya2V0UHVia2V5LCB2b3RlclB1YmtleSk7XG4gIGNvbnN0IGRpc3B1dGVNZXRhUGRhID0gZGVyaXZlRGlzcHV0ZU1ldGFQZGEocmFjZU1hcmtldFB1YmtleSk7XG5cbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMuY2hhbmdlX2NvdW5jaWxfdm90ZV9yYWNlLmNvcHkoZGF0YSwgMCk7XG4gIGRhdGEud3JpdGVVSW50OChwYXJhbXMubmV3Vm90ZU91dGNvbWVJbmRleCwgOCk7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogQ09ORklHX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiByYWNlTWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogdm90ZVJlY29yZFBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IGRpc3B1dGVNZXRhUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogdm90ZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHZvdGVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction Builders Index
|
|
3
|
+
* Exports all transaction builder functions
|
|
4
|
+
*/
|
|
5
|
+
export * from './bet-transaction.js';
|
|
6
|
+
export * from './claim-transaction.js';
|
|
7
|
+
export * from './affiliate-transaction.js';
|
|
8
|
+
export * from './market-creation-tx.js';
|
|
9
|
+
export * from './market-management-transaction.js';
|
|
10
|
+
export * from './race-transaction.js';
|
|
11
|
+
export * from './resolution-transaction.js';
|
|
12
|
+
export * from './dispute-transaction.js';
|
|
13
|
+
export * from './whitelist-transaction.js';
|
|
14
|
+
export * from './creator-transaction.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction Builders Index
|
|
3
|
+
* Exports all transaction builder functions
|
|
4
|
+
*/
|
|
5
|
+
export * from './bet-transaction.js';
|
|
6
|
+
export * from './claim-transaction.js';
|
|
7
|
+
export * from './affiliate-transaction.js';
|
|
8
|
+
export * from './market-creation-tx.js';
|
|
9
|
+
export * from './market-management-transaction.js';
|
|
10
|
+
export * from './race-transaction.js';
|
|
11
|
+
export * from './resolution-transaction.js';
|
|
12
|
+
export * from './dispute-transaction.js';
|
|
13
|
+
export * from './whitelist-transaction.js';
|
|
14
|
+
export * from './creator-transaction.js';
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhbnNhY3Rpb24gQnVpbGRlcnMgSW5kZXhcbiAqIEV4cG9ydHMgYWxsIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZnVuY3Rpb25zXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9iZXQtdHJhbnNhY3Rpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFpbS10cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FmZmlsaWF0ZS10cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21hcmtldC1jcmVhdGlvbi10eC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21hcmtldC1tYW5hZ2VtZW50LXRyYW5zYWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmFjZS10cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc29sdXRpb24tdHJhbnNhY3Rpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXNwdXRlLXRyYW5zYWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2hpdGVsaXN0LXRyYW5zYWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRvci10cmFuc2FjdGlvbi5qcyc7XG4iXX0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Market Creation Transaction Builders
|
|
3
|
+
*
|
|
4
|
+
* Builds unsigned transactions for:
|
|
5
|
+
* - create_lab_market_sol (community markets)
|
|
6
|
+
* - create_private_table_sol (invite-only markets)
|
|
7
|
+
* - create_race_market_sol (multi-outcome markets)
|
|
8
|
+
*
|
|
9
|
+
* FIXED: Jan 2026 - Corrected discriminators, offsets, and instruction formats
|
|
10
|
+
*/
|
|
11
|
+
import { Connection, Transaction } from '@solana/web3.js';
|
|
12
|
+
export interface CreateMarketResult {
|
|
13
|
+
transaction: Transaction;
|
|
14
|
+
serializedTx: string;
|
|
15
|
+
marketPda: string;
|
|
16
|
+
marketId: bigint;
|
|
17
|
+
}
|
|
18
|
+
export interface CreateLabMarketParams {
|
|
19
|
+
question: string;
|
|
20
|
+
closingTime: Date;
|
|
21
|
+
resolutionBuffer?: number;
|
|
22
|
+
autoStopBuffer?: number;
|
|
23
|
+
resolutionMode?: number;
|
|
24
|
+
council?: string[];
|
|
25
|
+
councilThreshold?: number;
|
|
26
|
+
creatorWallet: string;
|
|
27
|
+
}
|
|
28
|
+
export interface CreatePrivateMarketParams {
|
|
29
|
+
question: string;
|
|
30
|
+
closingTime: Date;
|
|
31
|
+
resolutionBuffer?: number;
|
|
32
|
+
autoStopBuffer?: number;
|
|
33
|
+
resolutionMode?: number;
|
|
34
|
+
council?: string[];
|
|
35
|
+
councilThreshold?: number;
|
|
36
|
+
creatorWallet: string;
|
|
37
|
+
}
|
|
38
|
+
export interface CreateRaceMarketParams {
|
|
39
|
+
question: string;
|
|
40
|
+
outcomes: string[];
|
|
41
|
+
closingTime: Date;
|
|
42
|
+
resolutionBuffer?: number;
|
|
43
|
+
autoStopBuffer?: number;
|
|
44
|
+
layer?: number;
|
|
45
|
+
resolutionMode?: number;
|
|
46
|
+
accessGate?: number;
|
|
47
|
+
council?: string[];
|
|
48
|
+
councilThreshold?: number;
|
|
49
|
+
creatorWallet: string;
|
|
50
|
+
}
|
|
51
|
+
export declare function getNextMarketId(connection?: Connection): Promise<{
|
|
52
|
+
marketId: bigint;
|
|
53
|
+
raceMarketId: bigint;
|
|
54
|
+
}>;
|
|
55
|
+
export declare function buildCreateLabMarketTransaction(params: CreateLabMarketParams, connection?: Connection): Promise<CreateMarketResult>;
|
|
56
|
+
export declare function buildCreatePrivateMarketTransaction(params: CreatePrivateMarketParams, connection?: Connection): Promise<CreateMarketResult>;
|
|
57
|
+
export declare function buildCreateRaceMarketTransaction(params: CreateRaceMarketParams, connection?: Connection): Promise<CreateMarketResult>;
|
|
58
|
+
export declare function previewMarketPda(marketId: bigint): {
|
|
59
|
+
marketPda: string;
|
|
60
|
+
bump: number;
|
|
61
|
+
};
|
|
62
|
+
export declare function previewRaceMarketPda(marketId: bigint): {
|
|
63
|
+
raceMarketPda: string;
|
|
64
|
+
bump: number;
|
|
65
|
+
};
|