@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,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim Transaction Builders
|
|
3
|
+
*
|
|
4
|
+
* Builds unsigned transactions for:
|
|
5
|
+
* - Claiming winnings
|
|
6
|
+
* - Claiming refunds
|
|
7
|
+
* - Claiming affiliate earnings
|
|
8
|
+
* - Claiming creator fees
|
|
9
|
+
*/
|
|
10
|
+
import { Connection, Transaction } from '@solana/web3.js';
|
|
11
|
+
export interface ClaimTransactionResult {
|
|
12
|
+
transaction: Transaction;
|
|
13
|
+
serializedTx: string;
|
|
14
|
+
claimType: 'winnings' | 'refund' | 'affiliate' | 'creator';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build claim_winnings_sol transaction
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildClaimWinningsTransaction(params: {
|
|
20
|
+
marketPda: string;
|
|
21
|
+
positionPda: string;
|
|
22
|
+
userWallet: string;
|
|
23
|
+
connection?: Connection;
|
|
24
|
+
}): Promise<ClaimTransactionResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Build claim_refund_sol transaction
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildClaimRefundTransaction(params: {
|
|
29
|
+
marketPda: string;
|
|
30
|
+
positionPda: string;
|
|
31
|
+
userWallet: string;
|
|
32
|
+
connection?: Connection;
|
|
33
|
+
}): Promise<ClaimTransactionResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Build claim_affiliate_sol transaction
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildClaimAffiliateTransaction(params: {
|
|
38
|
+
affiliateCode: string;
|
|
39
|
+
userWallet: string;
|
|
40
|
+
connection?: Connection;
|
|
41
|
+
}): Promise<ClaimTransactionResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Build batch claim transaction for multiple positions
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildBatchClaimTransaction(params: {
|
|
46
|
+
claims: Array<{
|
|
47
|
+
marketPda: string;
|
|
48
|
+
positionPda: string;
|
|
49
|
+
claimType: 'winnings' | 'refund';
|
|
50
|
+
}>;
|
|
51
|
+
userWallet: string;
|
|
52
|
+
connection?: Connection;
|
|
53
|
+
}): Promise<{
|
|
54
|
+
transaction: Transaction;
|
|
55
|
+
serializedTx: string;
|
|
56
|
+
claimCount: number;
|
|
57
|
+
}>;
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim Transaction Builders
|
|
3
|
+
*
|
|
4
|
+
* Builds unsigned transactions for:
|
|
5
|
+
* - Claiming winnings
|
|
6
|
+
* - Claiming refunds
|
|
7
|
+
* - Claiming affiliate earnings
|
|
8
|
+
* - Claiming creator fees
|
|
9
|
+
*/
|
|
10
|
+
import { Connection, PublicKey, Transaction, TransactionInstruction, SystemProgram, } from '@solana/web3.js';
|
|
11
|
+
import { PROGRAM_ID, CONFIG_PDA, SOL_TREASURY_PDA, SEEDS, RPC_ENDPOINT, } from '../config.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// INSTRUCTION DISCRIMINATORS
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Correct discriminators: sha256("global:<instruction_name>")[0..8]
|
|
16
|
+
const CLAIM_WINNINGS_SOL_DISCRIMINATOR = Buffer.from([64, 158, 207, 116, 128, 129, 169, 76]);
|
|
17
|
+
const CLAIM_REFUND_SOL_DISCRIMINATOR = Buffer.from([8, 82, 5, 144, 194, 114, 255, 20]);
|
|
18
|
+
const CLAIM_AFFILIATE_SOL_DISCRIMINATOR = Buffer.from([125, 18, 164, 112, 216, 207, 197, 201]);
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// CLAIM WINNINGS
|
|
21
|
+
// =============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Build claim_winnings_sol transaction
|
|
24
|
+
*/
|
|
25
|
+
export async function buildClaimWinningsTransaction(params) {
|
|
26
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
27
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
28
|
+
const positionPubkey = new PublicKey(params.positionPda);
|
|
29
|
+
const userPubkey = new PublicKey(params.userWallet);
|
|
30
|
+
// Instruction data: just discriminator
|
|
31
|
+
const data = CLAIM_WINNINGS_SOL_DISCRIMINATOR;
|
|
32
|
+
// Accounts for claim_winnings_sol:
|
|
33
|
+
// config, market, position, sol_treasury, user, system_program
|
|
34
|
+
const keys = [
|
|
35
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
36
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
37
|
+
{ pubkey: positionPubkey, isSigner: false, isWritable: true },
|
|
38
|
+
{ pubkey: SOL_TREASURY_PDA, isSigner: false, isWritable: true },
|
|
39
|
+
{ pubkey: userPubkey, isSigner: true, isWritable: true },
|
|
40
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
41
|
+
];
|
|
42
|
+
const instruction = new TransactionInstruction({
|
|
43
|
+
programId: PROGRAM_ID,
|
|
44
|
+
keys,
|
|
45
|
+
data,
|
|
46
|
+
});
|
|
47
|
+
const transaction = new Transaction();
|
|
48
|
+
transaction.add(instruction);
|
|
49
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
50
|
+
transaction.recentBlockhash = blockhash;
|
|
51
|
+
transaction.feePayer = userPubkey;
|
|
52
|
+
const serializedTx = transaction.serialize({
|
|
53
|
+
requireAllSignatures: false,
|
|
54
|
+
verifySignatures: false,
|
|
55
|
+
}).toString('base64');
|
|
56
|
+
return {
|
|
57
|
+
transaction,
|
|
58
|
+
serializedTx,
|
|
59
|
+
claimType: 'winnings',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// CLAIM REFUND
|
|
64
|
+
// =============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Build claim_refund_sol transaction
|
|
67
|
+
*/
|
|
68
|
+
export async function buildClaimRefundTransaction(params) {
|
|
69
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
70
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
71
|
+
const positionPubkey = new PublicKey(params.positionPda);
|
|
72
|
+
const userPubkey = new PublicKey(params.userWallet);
|
|
73
|
+
const data = CLAIM_REFUND_SOL_DISCRIMINATOR;
|
|
74
|
+
// IDL Accounts for claim_refund_sol: market, position, user, system_program (NO config!)
|
|
75
|
+
const keys = [
|
|
76
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
77
|
+
{ pubkey: positionPubkey, isSigner: false, isWritable: true },
|
|
78
|
+
{ pubkey: userPubkey, isSigner: true, isWritable: true },
|
|
79
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
80
|
+
];
|
|
81
|
+
const instruction = new TransactionInstruction({
|
|
82
|
+
programId: PROGRAM_ID,
|
|
83
|
+
keys,
|
|
84
|
+
data,
|
|
85
|
+
});
|
|
86
|
+
const transaction = new Transaction();
|
|
87
|
+
transaction.add(instruction);
|
|
88
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
89
|
+
transaction.recentBlockhash = blockhash;
|
|
90
|
+
transaction.feePayer = userPubkey;
|
|
91
|
+
const serializedTx = transaction.serialize({
|
|
92
|
+
requireAllSignatures: false,
|
|
93
|
+
verifySignatures: false,
|
|
94
|
+
}).toString('base64');
|
|
95
|
+
return {
|
|
96
|
+
transaction,
|
|
97
|
+
serializedTx,
|
|
98
|
+
claimType: 'refund',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// =============================================================================
|
|
102
|
+
// CLAIM AFFILIATE EARNINGS
|
|
103
|
+
// =============================================================================
|
|
104
|
+
/**
|
|
105
|
+
* Build claim_affiliate_sol transaction
|
|
106
|
+
*/
|
|
107
|
+
export async function buildClaimAffiliateTransaction(params) {
|
|
108
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
109
|
+
const userPubkey = new PublicKey(params.userWallet);
|
|
110
|
+
// Derive affiliate PDA
|
|
111
|
+
const [affiliatePda] = PublicKey.findProgramAddressSync([SEEDS.AFFILIATE, Buffer.from(params.affiliateCode)], PROGRAM_ID);
|
|
112
|
+
const data = CLAIM_AFFILIATE_SOL_DISCRIMINATOR;
|
|
113
|
+
// Accounts for claim_affiliate_sol:
|
|
114
|
+
// config, affiliate, sol_treasury, owner, system_program
|
|
115
|
+
const keys = [
|
|
116
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
117
|
+
{ pubkey: affiliatePda, isSigner: false, isWritable: true },
|
|
118
|
+
{ pubkey: SOL_TREASURY_PDA, isSigner: false, isWritable: true },
|
|
119
|
+
{ pubkey: userPubkey, isSigner: true, isWritable: true },
|
|
120
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
121
|
+
];
|
|
122
|
+
const instruction = new TransactionInstruction({
|
|
123
|
+
programId: PROGRAM_ID,
|
|
124
|
+
keys,
|
|
125
|
+
data,
|
|
126
|
+
});
|
|
127
|
+
const transaction = new Transaction();
|
|
128
|
+
transaction.add(instruction);
|
|
129
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
130
|
+
transaction.recentBlockhash = blockhash;
|
|
131
|
+
transaction.feePayer = userPubkey;
|
|
132
|
+
const serializedTx = transaction.serialize({
|
|
133
|
+
requireAllSignatures: false,
|
|
134
|
+
verifySignatures: false,
|
|
135
|
+
}).toString('base64');
|
|
136
|
+
return {
|
|
137
|
+
transaction,
|
|
138
|
+
serializedTx,
|
|
139
|
+
claimType: 'affiliate',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// NOTE: claim_creator_sol is in creator-transaction.ts, not here
|
|
143
|
+
// =============================================================================
|
|
144
|
+
// BATCH CLAIM (Multiple positions)
|
|
145
|
+
// =============================================================================
|
|
146
|
+
/**
|
|
147
|
+
* Build batch claim transaction for multiple positions
|
|
148
|
+
*/
|
|
149
|
+
export async function buildBatchClaimTransaction(params) {
|
|
150
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
151
|
+
const userPubkey = new PublicKey(params.userWallet);
|
|
152
|
+
const transaction = new Transaction();
|
|
153
|
+
for (const claim of params.claims) {
|
|
154
|
+
const marketPubkey = new PublicKey(claim.marketPda);
|
|
155
|
+
const positionPubkey = new PublicKey(claim.positionPda);
|
|
156
|
+
const discriminator = claim.claimType === 'winnings'
|
|
157
|
+
? CLAIM_WINNINGS_SOL_DISCRIMINATOR
|
|
158
|
+
: CLAIM_REFUND_SOL_DISCRIMINATOR;
|
|
159
|
+
// claim_winnings_sol: config, market, position, sol_treasury, [optional...], user, system
|
|
160
|
+
// claim_refund_sol: market, position, user, system (NO config!)
|
|
161
|
+
const keys = claim.claimType === 'winnings'
|
|
162
|
+
? [
|
|
163
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
164
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
165
|
+
{ pubkey: positionPubkey, isSigner: false, isWritable: true },
|
|
166
|
+
{ pubkey: SOL_TREASURY_PDA, isSigner: false, isWritable: true },
|
|
167
|
+
{ pubkey: userPubkey, isSigner: true, isWritable: true },
|
|
168
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
169
|
+
]
|
|
170
|
+
: [
|
|
171
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
172
|
+
{ pubkey: positionPubkey, isSigner: false, isWritable: true },
|
|
173
|
+
{ pubkey: userPubkey, isSigner: true, isWritable: true },
|
|
174
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
175
|
+
];
|
|
176
|
+
const instruction = new TransactionInstruction({
|
|
177
|
+
programId: PROGRAM_ID,
|
|
178
|
+
keys,
|
|
179
|
+
data: discriminator,
|
|
180
|
+
});
|
|
181
|
+
transaction.add(instruction);
|
|
182
|
+
}
|
|
183
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
184
|
+
transaction.recentBlockhash = blockhash;
|
|
185
|
+
transaction.feePayer = userPubkey;
|
|
186
|
+
const serializedTx = transaction.serialize({
|
|
187
|
+
requireAllSignatures: false,
|
|
188
|
+
verifySignatures: false,
|
|
189
|
+
}).toString('base64');
|
|
190
|
+
return {
|
|
191
|
+
transaction,
|
|
192
|
+
serializedTx,
|
|
193
|
+
claimCount: params.claims.length,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW0tdHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGRlcnMvY2xhaW0tdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsWUFBWSxHQUNiLE1BQU0sY0FBYyxDQUFDO0FBRXRCLGdGQUFnRjtBQUNoRiw2QkFBNkI7QUFDN0IsZ0ZBQWdGO0FBRWhGLG9FQUFvRTtBQUNwRSxNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RixNQUFNLDhCQUE4QixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RixNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQVkvRixnRkFBZ0Y7QUFDaEYsaUJBQWlCO0FBQ2pCLGdGQUFnRjtBQUVoRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsNkJBQTZCLENBQUMsTUFLbkQ7SUFDQyxNQUFNLElBQUksR0FB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SUFBSTtZQUNKLElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRSxXQUFXLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztJQUN4QyxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUVsQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3pDLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXRCLE9BQU87UUFDTCxXQUFXO1FBQ1gsWUFBWTtRQUNaLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07S0FDakMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENsYWltIFRyYW5zYWN0aW9uIEJ1aWxkZXJzXG4gKlxuICogQnVpbGRzIHVuc2lnbmVkIHRyYW5zYWN0aW9ucyBmb3I6XG4gKiAtIENsYWltaW5nIHdpbm5pbmdzXG4gKiAtIENsYWltaW5nIHJlZnVuZHNcbiAqIC0gQ2xhaW1pbmcgYWZmaWxpYXRlIGVhcm5pbmdzXG4gKiAtIENsYWltaW5nIGNyZWF0b3IgZmVlc1xuICovXG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxuICBTeXN0ZW1Qcm9ncmFtLFxufSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuaW1wb3J0IHtcbiAgUFJPR1JBTV9JRCxcbiAgQ09ORklHX1BEQSxcbiAgU09MX1RSRUFTVVJZX1BEQSxcbiAgU0VFRFMsXG4gIFJQQ19FTkRQT0lOVCxcbn0gZnJvbSAnLi4vY29uZmlnLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOU1RSVUNUSU9OIERJU0NSSU1JTkFUT1JTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBDb3JyZWN0IGRpc2NyaW1pbmF0b3JzOiBzaGEyNTYoXCJnbG9iYWw6PGluc3RydWN0aW9uX25hbWU+XCIpWzAuLjhdXG5jb25zdCBDTEFJTV9XSU5OSU5HU19TT0xfRElTQ1JJTUlOQVRPUiA9IEJ1ZmZlci5mcm9tKFs2NCwgMTU4LCAyMDcsIDExNiwgMTI4LCAxMjksIDE2OSwgNzZdKTtcbmNvbnN0IENMQUlNX1JFRlVORF9TT0xfRElTQ1JJTUlOQVRPUiA9IEJ1ZmZlci5mcm9tKFs4LCA4MiwgNSwgMTQ0LCAxOTQsIDExNCwgMjU1LCAyMF0pO1xuY29uc3QgQ0xBSU1fQUZGSUxJQVRFX1NPTF9ESVNDUklNSU5BVE9SID0gQnVmZmVyLmZyb20oWzEyNSwgMTgsIDE2NCwgMTEyLCAyMTYsIDIwNywgMTk3LCAyMDFdKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENsYWltVHJhbnNhY3Rpb25SZXN1bHQge1xuICB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHNlcmlhbGl6ZWRUeDogc3RyaW5nO1xuICBjbGFpbVR5cGU6ICd3aW5uaW5ncycgfCAncmVmdW5kJyB8ICdhZmZpbGlhdGUnIHwgJ2NyZWF0b3InO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ0xBSU0gV0lOTklOR1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQnVpbGQgY2xhaW1fd2lubmluZ3Nfc29sIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsYWltV2lubmluZ3NUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgbWFya2V0UGRhOiBzdHJpbmc7XG4gIHBvc2l0aW9uUGRhOiBzdHJpbmc7XG4gIHVzZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTxDbGFpbVRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGNvbm4gPSBwYXJhbXMuY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcbiAgY29uc3QgbWFya2V0UHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMubWFya2V0UGRhKTtcbiAgY29uc3QgcG9zaXRpb25QdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5wb3NpdGlvblBkYSk7XG4gIGNvbnN0IHVzZXJQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy51c2VyV2FsbGV0KTtcblxuICAvLyBJbnN0cnVjdGlvbiBkYXRhOiBqdXN0IGRpc2NyaW1pbmF0b3JcbiAgY29uc3QgZGF0YSA9IENMQUlNX1dJTk5JTkdTX1NPTF9ESVNDUklNSU5BVE9SO1xuXG4gIC8vIEFjY291bnRzIGZvciBjbGFpbV93aW5uaW5nc19zb2w6XG4gIC8vIGNvbmZpZywgbWFya2V0LCBwb3NpdGlvbiwgc29sX3RyZWFzdXJ5LCB1c2VyLCBzeXN0ZW1fcHJvZ3JhbVxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IG1hcmtldFB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHBvc2l0aW9uUHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogU09MX1RSRUFTVVJZX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHVzZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELFxuICAgIGtleXMsXG4gICAgZGF0YSxcbiAgfSk7XG5cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKTtcbiAgdHJhbnNhY3Rpb24uYWRkKGluc3RydWN0aW9uKTtcblxuICBjb25zdCB7IGJsb2NraGFzaCB9ID0gYXdhaXQgY29ubi5nZXRMYXRlc3RCbG9ja2hhc2goJ2ZpbmFsaXplZCcpO1xuICB0cmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2ggPSBibG9ja2hhc2g7XG4gIHRyYW5zYWN0aW9uLmZlZVBheWVyID0gdXNlclB1YmtleTtcblxuICBjb25zdCBzZXJpYWxpemVkVHggPSB0cmFuc2FjdGlvbi5zZXJpYWxpemUoe1xuICAgIHJlcXVpcmVBbGxTaWduYXR1cmVzOiBmYWxzZSxcbiAgICB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSxcbiAgfSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4LFxuICAgIGNsYWltVHlwZTogJ3dpbm5pbmdzJyxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENMQUlNIFJFRlVORFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCdWlsZCBjbGFpbV9yZWZ1bmRfc29sIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsYWltUmVmdW5kVHJhbnNhY3Rpb24ocGFyYW1zOiB7XG4gIG1hcmtldFBkYTogc3RyaW5nO1xuICBwb3NpdGlvblBkYTogc3RyaW5nO1xuICB1c2VyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8Q2xhaW1UcmFuc2FjdGlvblJlc3VsdD4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IG1hcmtldFB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLm1hcmtldFBkYSk7XG4gIGNvbnN0IHBvc2l0aW9uUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMucG9zaXRpb25QZGEpO1xuICBjb25zdCB1c2VyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMudXNlcldhbGxldCk7XG5cbiAgY29uc3QgZGF0YSA9IENMQUlNX1JFRlVORF9TT0xfRElTQ1JJTUlOQVRPUjtcblxuICAvLyBJREwgQWNjb3VudHMgZm9yIGNsYWltX3JlZnVuZF9zb2w6IG1hcmtldCwgcG9zaXRpb24sIHVzZXIsIHN5c3RlbV9wcm9ncmFtIChOTyBjb25maWchKVxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBtYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBwb3NpdGlvblB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHVzZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELFxuICAgIGtleXMsXG4gICAgZGF0YSxcbiAgfSk7XG5cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKTtcbiAgdHJhbnNhY3Rpb24uYWRkKGluc3RydWN0aW9uKTtcblxuICBjb25zdCB7IGJsb2NraGFzaCB9ID0gYXdhaXQgY29ubi5nZXRMYXRlc3RCbG9ja2hhc2goJ2ZpbmFsaXplZCcpO1xuICB0cmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2ggPSBibG9ja2hhc2g7XG4gIHRyYW5zYWN0aW9uLmZlZVBheWVyID0gdXNlclB1YmtleTtcblxuICBjb25zdCBzZXJpYWxpemVkVHggPSB0cmFuc2FjdGlvbi5zZXJpYWxpemUoe1xuICAgIHJlcXVpcmVBbGxTaWduYXR1cmVzOiBmYWxzZSxcbiAgICB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSxcbiAgfSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4LFxuICAgIGNsYWltVHlwZTogJ3JlZnVuZCcsXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDTEFJTSBBRkZJTElBVEUgRUFSTklOR1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQnVpbGQgY2xhaW1fYWZmaWxpYXRlX3NvbCB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDbGFpbUFmZmlsaWF0ZVRyYW5zYWN0aW9uKHBhcmFtczoge1xuICBhZmZpbGlhdGVDb2RlOiBzdHJpbmc7XG4gIHVzZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTxDbGFpbVRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGNvbm4gPSBwYXJhbXMuY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcbiAgY29uc3QgdXNlclB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLnVzZXJXYWxsZXQpO1xuXG4gIC8vIERlcml2ZSBhZmZpbGlhdGUgUERBXG4gIGNvbnN0IFthZmZpbGlhdGVQZGFdID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW1NFRURTLkFGRklMSUFURSwgQnVmZmVyLmZyb20ocGFyYW1zLmFmZmlsaWF0ZUNvZGUpXSxcbiAgICBQUk9HUkFNX0lEXG4gICk7XG5cbiAgY29uc3QgZGF0YSA9IENMQUlNX0FGRklMSUFURV9TT0xfRElTQ1JJTUlOQVRPUjtcblxuICAvLyBBY2NvdW50cyBmb3IgY2xhaW1fYWZmaWxpYXRlX3NvbDpcbiAgLy8gY29uZmlnLCBhZmZpbGlhdGUsIHNvbF90cmVhc3VyeSwgb3duZXIsIHN5c3RlbV9wcm9ncmFtXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IENPTkZJR19QREEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogYWZmaWxpYXRlUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogU09MX1RSRUFTVVJZX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHVzZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELFxuICAgIGtleXMsXG4gICAgZGF0YSxcbiAgfSk7XG5cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKTtcbiAgdHJhbnNhY3Rpb24uYWRkKGluc3RydWN0aW9uKTtcblxuICBjb25zdCB7IGJsb2NraGFzaCB9ID0gYXdhaXQgY29ubi5nZXRMYXRlc3RCbG9ja2hhc2goJ2ZpbmFsaXplZCcpO1xuICB0cmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2ggPSBibG9ja2hhc2g7XG4gIHRyYW5zYWN0aW9uLmZlZVBheWVyID0gdXNlclB1YmtleTtcblxuICBjb25zdCBzZXJpYWxpemVkVHggPSB0cmFuc2FjdGlvbi5zZXJpYWxpemUoe1xuICAgIHJlcXVpcmVBbGxTaWduYXR1cmVzOiBmYWxzZSxcbiAgICB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSxcbiAgfSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4LFxuICAgIGNsYWltVHlwZTogJ2FmZmlsaWF0ZScsXG4gIH07XG59XG5cbi8vIE5PVEU6IGNsYWltX2NyZWF0b3Jfc29sIGlzIGluIGNyZWF0b3ItdHJhbnNhY3Rpb24udHMsIG5vdCBoZXJlXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCQVRDSCBDTEFJTSAoTXVsdGlwbGUgcG9zaXRpb25zKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCdWlsZCBiYXRjaCBjbGFpbSB0cmFuc2FjdGlvbiBmb3IgbXVsdGlwbGUgcG9zaXRpb25zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEJhdGNoQ2xhaW1UcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgY2xhaW1zOiBBcnJheTx7XG4gICAgbWFya2V0UGRhOiBzdHJpbmc7XG4gICAgcG9zaXRpb25QZGE6IHN0cmluZztcbiAgICBjbGFpbVR5cGU6ICd3aW5uaW5ncycgfCAncmVmdW5kJztcbiAgfT47XG4gIHVzZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7XG4gIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgc2VyaWFsaXplZFR4OiBzdHJpbmc7XG4gIGNsYWltQ291bnQ6IG51bWJlcjtcbn0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCB1c2VyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMudXNlcldhbGxldCk7XG5cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKTtcblxuICBmb3IgKGNvbnN0IGNsYWltIG9mIHBhcmFtcy5jbGFpbXMpIHtcbiAgICBjb25zdCBtYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KGNsYWltLm1hcmtldFBkYSk7XG4gICAgY29uc3QgcG9zaXRpb25QdWJrZXkgPSBuZXcgUHVibGljS2V5KGNsYWltLnBvc2l0aW9uUGRhKTtcblxuICAgIGNvbnN0IGRpc2NyaW1pbmF0b3IgPSBjbGFpbS5jbGFpbVR5cGUgPT09ICd3aW5uaW5ncydcbiAgICAgID8gQ0xBSU1fV0lOTklOR1NfU09MX0RJU0NSSU1JTkFUT1JcbiAgICAgIDogQ0xBSU1fUkVGVU5EX1NPTF9ESVNDUklNSU5BVE9SO1xuXG4gICAgLy8gY2xhaW1fd2lubmluZ3Nfc29sOiBjb25maWcsIG1hcmtldCwgcG9zaXRpb24sIHNvbF90cmVhc3VyeSwgW29wdGlvbmFsLi4uXSwgdXNlciwgc3lzdGVtXG4gICAgLy8gY2xhaW1fcmVmdW5kX3NvbDogbWFya2V0LCBwb3NpdGlvbiwgdXNlciwgc3lzdGVtIChOTyBjb25maWchKVxuICAgIGNvbnN0IGtleXMgPSBjbGFpbS5jbGFpbVR5cGUgPT09ICd3aW5uaW5ncydcbiAgICAgID8gW1xuICAgICAgICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBwdWJrZXk6IG1hcmtldFB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyBwdWJrZXk6IHBvc2l0aW9uUHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgICAgICB7IHB1YmtleTogU09MX1RSRUFTVVJZX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyBwdWJrZXk6IHVzZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyBwdWJrZXk6IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIF1cbiAgICAgIDogW1xuICAgICAgICAgIHsgcHVia2V5OiBtYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgICAgIHsgcHVia2V5OiBwb3NpdGlvblB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyBwdWJrZXk6IHVzZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyBwdWJrZXk6IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIF07XG5cbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICAgIHByb2dyYW1JZDogUFJPR1JBTV9JRCxcbiAgICAgIGtleXMsXG4gICAgICBkYXRhOiBkaXNjcmltaW5hdG9yLFxuICAgIH0pO1xuXG4gICAgdHJhbnNhY3Rpb24uYWRkKGluc3RydWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSBhd2FpdCBjb25uLmdldExhdGVzdEJsb2NraGFzaCgnZmluYWxpemVkJyk7XG4gIHRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCA9IGJsb2NraGFzaDtcbiAgdHJhbnNhY3Rpb24uZmVlUGF5ZXIgPSB1c2VyUHVia2V5O1xuXG4gIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHRyYW5zYWN0aW9uLnNlcmlhbGl6ZSh7XG4gICAgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLFxuICAgIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlLFxuICB9KS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFuc2FjdGlvbixcbiAgICBzZXJpYWxpemVkVHgsXG4gICAgY2xhaW1Db3VudDogcGFyYW1zLmNsYWltcy5sZW5ndGgsXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creator Profile Transaction Builders
|
|
3
|
+
*
|
|
4
|
+
* Builds unsigned transactions for:
|
|
5
|
+
* - Creating creator profiles
|
|
6
|
+
* - Updating creator profiles
|
|
7
|
+
* - Claiming creator fees
|
|
8
|
+
*/
|
|
9
|
+
import { Connection, Transaction } from '@solana/web3.js';
|
|
10
|
+
/**
|
|
11
|
+
* Build create_creator_profile transaction
|
|
12
|
+
* Creates an on-chain creator profile for reputation and fee settings
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildCreateCreatorProfileTransaction(params: {
|
|
15
|
+
displayName: string;
|
|
16
|
+
creatorFeeBps: number;
|
|
17
|
+
creatorWallet: string;
|
|
18
|
+
connection?: Connection;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
transaction: Transaction;
|
|
21
|
+
serializedTx: string;
|
|
22
|
+
creatorProfilePda: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Build update_creator_profile transaction
|
|
26
|
+
* Updates display name and/or fee settings
|
|
27
|
+
* IDL Accounts: creator_profile, owner (NO config!)
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildUpdateCreatorProfileTransaction(params: {
|
|
30
|
+
newDisplayName?: string;
|
|
31
|
+
newCreatorFeeBps?: number;
|
|
32
|
+
creatorWallet: string;
|
|
33
|
+
connection?: Connection;
|
|
34
|
+
}): Promise<{
|
|
35
|
+
transaction: Transaction;
|
|
36
|
+
serializedTx: string;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Build claim_creator_sol transaction
|
|
40
|
+
* Claims accumulated creator fees from sol_treasury
|
|
41
|
+
* IDL Accounts: config, creator_profile, sol_treasury, owner, system_program
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildClaimCreatorTransaction(params: {
|
|
44
|
+
creatorWallet: string;
|
|
45
|
+
connection?: Connection;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
transaction: Transaction;
|
|
48
|
+
serializedTx: string;
|
|
49
|
+
}>;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creator Profile Transaction Builders
|
|
3
|
+
*
|
|
4
|
+
* Builds unsigned transactions for:
|
|
5
|
+
* - Creating creator profiles
|
|
6
|
+
* - Updating creator profiles
|
|
7
|
+
* - Claiming creator fees
|
|
8
|
+
*/
|
|
9
|
+
import { Connection, PublicKey, Transaction, TransactionInstruction, SystemProgram, } from '@solana/web3.js';
|
|
10
|
+
import { PROGRAM_ID, CONFIG_PDA, SOL_TREASURY_PDA, RPC_ENDPOINT, } from '../config.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// DISCRIMINATORS
|
|
13
|
+
// =============================================================================
|
|
14
|
+
const DISCRIMINATORS = {
|
|
15
|
+
create_creator_profile: Buffer.from([139, 244, 127, 145, 95, 172, 140, 154]),
|
|
16
|
+
update_creator_profile: Buffer.from([8, 240, 162, 55, 110, 46, 177, 108]),
|
|
17
|
+
claim_creator_sol: Buffer.from([21, 25, 164, 47, 81, 156, 199, 103]),
|
|
18
|
+
};
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// PDA DERIVATION
|
|
21
|
+
// =============================================================================
|
|
22
|
+
function deriveCreatorProfilePda(creator) {
|
|
23
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from('creator_profile'), creator.toBuffer()], PROGRAM_ID);
|
|
24
|
+
return pda;
|
|
25
|
+
}
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// CREATOR PROFILE OPERATIONS
|
|
28
|
+
// =============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Build create_creator_profile transaction
|
|
31
|
+
* Creates an on-chain creator profile for reputation and fee settings
|
|
32
|
+
*/
|
|
33
|
+
export async function buildCreateCreatorProfileTransaction(params) {
|
|
34
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
35
|
+
const creatorPubkey = new PublicKey(params.creatorWallet);
|
|
36
|
+
const creatorProfilePda = deriveCreatorProfilePda(creatorPubkey);
|
|
37
|
+
// Validate display name (max 32 chars)
|
|
38
|
+
const displayNameBytes = Buffer.from(params.displayName, 'utf8');
|
|
39
|
+
if (displayNameBytes.length > 32) {
|
|
40
|
+
throw new Error('Display name must be 32 bytes or less');
|
|
41
|
+
}
|
|
42
|
+
// Validate fee (max 50 bps = 0.5%)
|
|
43
|
+
if (params.creatorFeeBps > 50) {
|
|
44
|
+
throw new Error('Creator fee cannot exceed 50 bps (0.5%)');
|
|
45
|
+
}
|
|
46
|
+
// Instruction data: discriminator + display_name (String) + creator_fee_bps (u16)
|
|
47
|
+
const nameLen = displayNameBytes.length;
|
|
48
|
+
const data = Buffer.alloc(8 + 4 + nameLen + 2);
|
|
49
|
+
DISCRIMINATORS.create_creator_profile.copy(data, 0);
|
|
50
|
+
data.writeUInt32LE(nameLen, 8);
|
|
51
|
+
displayNameBytes.copy(data, 12);
|
|
52
|
+
data.writeUInt16LE(params.creatorFeeBps, 12 + nameLen);
|
|
53
|
+
// IDL Accounts: creator_profile, owner, system_program (NO config!)
|
|
54
|
+
const keys = [
|
|
55
|
+
{ pubkey: creatorProfilePda, isSigner: false, isWritable: true },
|
|
56
|
+
{ pubkey: creatorPubkey, isSigner: true, isWritable: true },
|
|
57
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
58
|
+
];
|
|
59
|
+
const instruction = new TransactionInstruction({
|
|
60
|
+
programId: PROGRAM_ID,
|
|
61
|
+
keys,
|
|
62
|
+
data,
|
|
63
|
+
});
|
|
64
|
+
const transaction = new Transaction().add(instruction);
|
|
65
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
66
|
+
transaction.recentBlockhash = blockhash;
|
|
67
|
+
transaction.feePayer = creatorPubkey;
|
|
68
|
+
return {
|
|
69
|
+
transaction,
|
|
70
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
71
|
+
creatorProfilePda: creatorProfilePda.toBase58(),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Build update_creator_profile transaction
|
|
76
|
+
* Updates display name and/or fee settings
|
|
77
|
+
* IDL Accounts: creator_profile, owner (NO config!)
|
|
78
|
+
*/
|
|
79
|
+
export async function buildUpdateCreatorProfileTransaction(params) {
|
|
80
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
81
|
+
const creatorPubkey = new PublicKey(params.creatorWallet);
|
|
82
|
+
const creatorProfilePda = deriveCreatorProfilePda(creatorPubkey);
|
|
83
|
+
// Build optional fields
|
|
84
|
+
const displayNameBytes = params.newDisplayName
|
|
85
|
+
? Buffer.from(params.newDisplayName, 'utf8')
|
|
86
|
+
: null;
|
|
87
|
+
if (displayNameBytes && displayNameBytes.length > 32) {
|
|
88
|
+
throw new Error('Display name must be 32 bytes or less');
|
|
89
|
+
}
|
|
90
|
+
if (params.newCreatorFeeBps !== undefined && params.newCreatorFeeBps > 50) {
|
|
91
|
+
throw new Error('Creator fee cannot exceed 50 bps (0.5%)');
|
|
92
|
+
}
|
|
93
|
+
// Instruction data: discriminator + Option<String> + Option<u16>
|
|
94
|
+
// Option<T> in Borsh: 1 byte (0=None, 1=Some) + T if Some
|
|
95
|
+
let dataSize = 8;
|
|
96
|
+
// display_name option
|
|
97
|
+
dataSize += 1 + (displayNameBytes ? 4 + displayNameBytes.length : 0);
|
|
98
|
+
// creator_fee_bps option
|
|
99
|
+
dataSize += 1 + (params.newCreatorFeeBps !== undefined ? 2 : 0);
|
|
100
|
+
const data = Buffer.alloc(dataSize);
|
|
101
|
+
let offset = 0;
|
|
102
|
+
DISCRIMINATORS.update_creator_profile.copy(data, offset);
|
|
103
|
+
offset += 8;
|
|
104
|
+
// Option<String> for display_name
|
|
105
|
+
if (displayNameBytes) {
|
|
106
|
+
data.writeUInt8(1, offset); // Some
|
|
107
|
+
offset += 1;
|
|
108
|
+
data.writeUInt32LE(displayNameBytes.length, offset);
|
|
109
|
+
offset += 4;
|
|
110
|
+
displayNameBytes.copy(data, offset);
|
|
111
|
+
offset += displayNameBytes.length;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
data.writeUInt8(0, offset); // None
|
|
115
|
+
offset += 1;
|
|
116
|
+
}
|
|
117
|
+
// Option<u16> for creator_fee_bps
|
|
118
|
+
if (params.newCreatorFeeBps !== undefined) {
|
|
119
|
+
data.writeUInt8(1, offset); // Some
|
|
120
|
+
offset += 1;
|
|
121
|
+
data.writeUInt16LE(params.newCreatorFeeBps, offset);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
data.writeUInt8(0, offset); // None
|
|
125
|
+
}
|
|
126
|
+
// IDL Accounts: creator_profile, owner (NO config!)
|
|
127
|
+
const keys = [
|
|
128
|
+
{ pubkey: creatorProfilePda, isSigner: false, isWritable: true },
|
|
129
|
+
{ pubkey: creatorPubkey, isSigner: true, isWritable: false },
|
|
130
|
+
];
|
|
131
|
+
const instruction = new TransactionInstruction({
|
|
132
|
+
programId: PROGRAM_ID,
|
|
133
|
+
keys,
|
|
134
|
+
data,
|
|
135
|
+
});
|
|
136
|
+
const transaction = new Transaction().add(instruction);
|
|
137
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
138
|
+
transaction.recentBlockhash = blockhash;
|
|
139
|
+
transaction.feePayer = creatorPubkey;
|
|
140
|
+
return {
|
|
141
|
+
transaction,
|
|
142
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Build claim_creator_sol transaction
|
|
147
|
+
* Claims accumulated creator fees from sol_treasury
|
|
148
|
+
* IDL Accounts: config, creator_profile, sol_treasury, owner, system_program
|
|
149
|
+
*/
|
|
150
|
+
export async function buildClaimCreatorTransaction(params) {
|
|
151
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
152
|
+
const creatorPubkey = new PublicKey(params.creatorWallet);
|
|
153
|
+
const creatorProfilePda = deriveCreatorProfilePda(creatorPubkey);
|
|
154
|
+
const data = DISCRIMINATORS.claim_creator_sol;
|
|
155
|
+
// IDL Accounts: config, creator_profile, sol_treasury, owner, system_program
|
|
156
|
+
const keys = [
|
|
157
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
158
|
+
{ pubkey: creatorProfilePda, isSigner: false, isWritable: true },
|
|
159
|
+
{ pubkey: SOL_TREASURY_PDA, isSigner: false, isWritable: true },
|
|
160
|
+
{ pubkey: creatorPubkey, isSigner: true, isWritable: true },
|
|
161
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
162
|
+
];
|
|
163
|
+
const instruction = new TransactionInstruction({
|
|
164
|
+
programId: PROGRAM_ID,
|
|
165
|
+
keys,
|
|
166
|
+
data,
|
|
167
|
+
});
|
|
168
|
+
const transaction = new Transaction().add(instruction);
|
|
169
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
170
|
+
transaction.recentBlockhash = blockhash;
|
|
171
|
+
transaction.feePayer = creatorPubkey;
|
|
172
|
+
return {
|
|
173
|
+
transaction,
|
|
174
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRvci10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVycy9jcmVhdG9yLXRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixZQUFZLEdBRWIsTUFBTSxjQUFjLENBQUM7QUFFdEIsZ0ZBQWdGO0FBQ2hGLGlCQUFpQjtBQUNqQixnRkFBZ0Y7QUFFaEYsTUFBTSxjQUFjLEdBQUc7SUFDckIsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RSxzQkFBc0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDckUsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRixpQkFBaUI7QUFDakIsZ0ZBQWdGO0FBRWhGLFNBQVMsdUJBQXVCLENBQUMsT0FBa0I7SUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FDNUMsQ0FBQyxNQUFN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b0IsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0tBQ2pILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdG9yIFByb2ZpbGUgVHJhbnNhY3Rpb24gQnVpbGRlcnNcbiAqXG4gKiBCdWlsZHMgdW5zaWduZWQgdHJhbnNhY3Rpb25zIGZvcjpcbiAqIC0gQ3JlYXRpbmcgY3JlYXRvciBwcm9maWxlc1xuICogLSBVcGRhdGluZyBjcmVhdG9yIHByb2ZpbGVzXG4gKiAtIENsYWltaW5nIGNyZWF0b3IgZmVlc1xuICovXG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxuICBTeXN0ZW1Qcm9ncmFtLFxufSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuaW1wb3J0IHtcbiAgUFJPR1JBTV9JRCxcbiAgQ09ORklHX1BEQSxcbiAgU09MX1RSRUFTVVJZX1BEQSxcbiAgUlBDX0VORFBPSU5ULFxuICBTRUVEUyxcbn0gZnJvbSAnLi4vY29uZmlnLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERJU0NSSU1JTkFUT1JTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBESVNDUklNSU5BVE9SUyA9IHtcbiAgY3JlYXRlX2NyZWF0b3JfcHJvZmlsZTogQnVmZmVyLmZyb20oWzEzOSwgMjQ0LCAxMjcsIDE0NSwgOTUsIDE3MiwgMTQwLCAxNTRdKSxcbiAgdXBkYXRlX2NyZWF0b3JfcHJvZmlsZTogQnVmZmVyLmZyb20oWzgsIDI0MCwgMTYyLCA1NSwgMTEwLCA0NiwgMTc3LCAxMDhdKSxcbiAgY2xhaW1fY3JlYXRvcl9zb2w6IEJ1ZmZlci5mcm9tKFsyMSwgMjUsIDE2NCwgNDcsIDgxLCAxNTYsIDE5OSwgMTAzXSksXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUERBIERFUklWQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGRlcml2ZUNyZWF0b3JQcm9maWxlUGRhKGNyZWF0b3I6IFB1YmxpY0tleSk6IFB1YmxpY0tleSB7XG4gIGNvbnN0IFtwZGFdID0gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW0J1ZmZlci5mcm9tKCdjcmVhdG9yX3Byb2ZpbGUnKSwgY3JlYXRvci50b0J1ZmZlcigpXSxcbiAgICBQUk9HUkFNX0lEXG4gICk7XG4gIHJldHVybiBwZGE7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDUkVBVE9SIFBST0ZJTEUgT1BFUkFUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCdWlsZCBjcmVhdGVfY3JlYXRvcl9wcm9maWxlIHRyYW5zYWN0aW9uXG4gKiBDcmVhdGVzIGFuIG9uLWNoYWluIGNyZWF0b3IgcHJvZmlsZSBmb3IgcmVwdXRhdGlvbiBhbmQgZmVlIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENyZWF0ZUNyZWF0b3JQcm9maWxlVHJhbnNhY3Rpb24ocGFyYW1zOiB7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNyZWF0b3JGZWVCcHM6IG51bWJlcjsgLy8gQmFzaXMgcG9pbnRzIChlLmcuLCA1MCA9IDAuNSUpXG4gIGNyZWF0b3JXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmc7IGNyZWF0b3JQcm9maWxlUGRhOiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IGNyZWF0b3JQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5jcmVhdG9yV2FsbGV0KTtcbiAgY29uc3QgY3JlYXRvclByb2ZpbGVQZGEgPSBkZXJpdmVDcmVhdG9yUHJvZmlsZVBkYShjcmVhdG9yUHVia2V5KTtcblxuICAvLyBWYWxpZGF0ZSBkaXNwbGF5IG5hbWUgKG1heCAzMiBjaGFycylcbiAgY29uc3QgZGlzcGxheU5hbWVCeXRlcyA9IEJ1ZmZlci5mcm9tKHBhcmFtcy5kaXNwbGF5TmFtZSwgJ3V0ZjgnKTtcbiAgaWYgKGRpc3BsYXlOYW1lQnl0ZXMubGVuZ3RoID4gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc3BsYXkgbmFtZSBtdXN0IGJlIDMyIGJ5dGVzIG9yIGxlc3MnKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGZlZSAobWF4IDUwIGJwcyA9IDAuNSUpXG4gIGlmIChwYXJhbXMuY3JlYXRvckZlZUJwcyA+IDUwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDcmVhdG9yIGZlZSBjYW5ub3QgZXhjZWVkIDUwIGJwcyAoMC41JSknKTtcbiAgfVxuXG4gIC8vIEluc3RydWN0aW9uIGRhdGE6IGRpc2NyaW1pbmF0b3IgKyBkaXNwbGF5X25hbWUgKFN0cmluZykgKyBjcmVhdG9yX2ZlZV9icHMgKHUxNilcbiAgY29uc3QgbmFtZUxlbiA9IGRpc3BsYXlOYW1lQnl0ZXMubGVuZ3RoO1xuICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDggKyA0ICsgbmFtZUxlbiArIDIpO1xuICBESVNDUklNSU5BVE9SUy5jcmVhdGVfY3JlYXRvcl9wcm9maWxlLmNvcHkoZGF0YSwgMCk7XG4gIGRhdGEud3JpdGVVSW50MzJMRShuYW1lTGVuLCA4KTtcbiAgZGlzcGxheU5hbWVCeXRlcy5jb3B5KGRhdGEsIDEyKTtcbiAgZGF0YS53cml0ZVVJbnQxNkxFKHBhcmFtcy5jcmVhdG9yRmVlQnBzLCAxMiArIG5hbWVMZW4pO1xuXG4gIC8vIElETCBBY2NvdW50czogY3JlYXRvcl9wcm9maWxlLCBvd25lciwgc3lzdGVtX3Byb2dyYW0gKE5PIGNvbmZpZyEpXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IGNyZWF0b3JQcm9maWxlUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogY3JlYXRvclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgXTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsXG4gICAga2V5cyxcbiAgICBkYXRhLFxuICB9KTtcblxuICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChpbnN0cnVjdGlvbik7XG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSBhd2FpdCBjb25uLmdldExhdGVzdEJsb2NraGFzaCgnZmluYWxpemVkJyk7XG4gIHRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCA9IGJsb2NraGFzaDtcbiAgdHJhbnNhY3Rpb24uZmVlUGF5ZXIgPSBjcmVhdG9yUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICBjcmVhdG9yUHJvZmlsZVBkYTogY3JlYXRvclByb2ZpbGVQZGEudG9CYXNlNTgoKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB1cGRhdGVfY3JlYXRvcl9wcm9maWxlIHRyYW5zYWN0aW9uXG4gKiBVcGRhdGVzIGRpc3BsYXkgbmFtZSBhbmQvb3IgZmVlIHNldHRpbmdzXG4gKiBJREwgQWNjb3VudHM6IGNyZWF0b3JfcHJvZmlsZSwgb3duZXIgKE5PIGNvbmZpZyEpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFVwZGF0ZUNyZWF0b3JQcm9maWxlVHJhbnNhY3Rpb24ocGFyYW1zOiB7XG4gIG5ld0Rpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBuZXdDcmVhdG9yRmVlQnBzPzogbnVtYmVyO1xuICBjcmVhdG9yV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCBjcmVhdG9yUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMuY3JlYXRvcldhbGxldCk7XG4gIGNvbnN0IGNyZWF0b3JQcm9maWxlUGRhID0gZGVyaXZlQ3JlYXRvclByb2ZpbGVQZGEoY3JlYXRvclB1YmtleSk7XG5cbiAgLy8gQnVpbGQgb3B0aW9uYWwgZmllbGRzXG4gIGNvbnN0IGRpc3BsYXlOYW1lQnl0ZXMgPSBwYXJhbXMubmV3RGlzcGxheU5hbWVcbiAgICA/IEJ1ZmZlci5mcm9tKHBhcmFtcy5uZXdEaXNwbGF5TmFtZSwgJ3V0ZjgnKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGlzcGxheU5hbWVCeXRlcyAmJiBkaXNwbGF5TmFtZUJ5dGVzLmxlbmd0aCA+IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNwbGF5IG5hbWUgbXVzdCBiZSAzMiBieXRlcyBvciBsZXNzJyk7XG4gIH1cblxuICBpZiAocGFyYW1zLm5ld0NyZWF0b3JGZWVCcHMgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXMubmV3Q3JlYXRvckZlZUJwcyA+IDUwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDcmVhdG9yIGZlZSBjYW5ub3QgZXhjZWVkIDUwIGJwcyAoMC41JSknKTtcbiAgfVxuXG4gIC8vIEluc3RydWN0aW9uIGRhdGE6IGRpc2NyaW1pbmF0b3IgKyBPcHRpb248U3RyaW5nPiArIE9wdGlvbjx1MTY+XG4gIC8vIE9wdGlvbjxUPiBpbiBCb3JzaDogMSBieXRlICgwPU5vbmUsIDE9U29tZSkgKyBUIGlmIFNvbWVcbiAgbGV0IGRhdGFTaXplID0gODtcbiAgLy8gZGlzcGxheV9uYW1lIG9wdGlvblxuICBkYXRhU2l6ZSArPSAxICsgKGRpc3BsYXlOYW1lQnl0ZXMgPyA0ICsgZGlzcGxheU5hbWVCeXRlcy5sZW5ndGggOiAwKTtcbiAgLy8gY3JlYXRvcl9mZWVfYnBzIG9wdGlvblxuICBkYXRhU2l6ZSArPSAxICsgKHBhcmFtcy5uZXdDcmVhdG9yRmVlQnBzICE9PSB1bmRlZmluZWQgPyAyIDogMCk7XG5cbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyhkYXRhU2l6ZSk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBESVNDUklNSU5BVE9SUy51cGRhdGVfY3JlYXRvcl9wcm9maWxlLmNvcHkoZGF0YSwgb2Zmc2V0KTtcbiAgb2Zmc2V0ICs9IDg7XG5cbiAgLy8gT3B0aW9uPFN0cmluZz4gZm9yIGRpc3BsYXlfbmFtZVxuICBpZiAoZGlzcGxheU5hbWVCeXRlcykge1xuICAgIGRhdGEud3JpdGVVSW50OCgxLCBvZmZzZXQpOyAvLyBTb21lXG4gICAgb2Zmc2V0ICs9IDE7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKGRpc3BsYXlOYW1lQnl0ZXMubGVuZ3RoLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSA0O1xuICAgIGRpc3BsYXlOYW1lQnl0ZXMuY29weShkYXRhLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBkaXNwbGF5TmFtZUJ5dGVzLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBkYXRhLndyaXRlVUludDgoMCwgb2Zmc2V0KTsgLy8gTm9uZVxuICAgIG9mZnNldCArPSAxO1xuICB9XG5cbiAgLy8gT3B0aW9uPHUxNj4gZm9yIGNyZWF0b3JfZmVlX2Jwc1xuICBpZiAocGFyYW1zLm5ld0NyZWF0b3JGZWVCcHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGRhdGEud3JpdGVVSW50OCgxLCBvZmZzZXQpOyAvLyBTb21lXG4gICAgb2Zmc2V0ICs9IDE7XG4gICAgZGF0YS53cml0ZVVJbnQxNkxFKHBhcmFtcy5uZXdDcmVhdG9yRmVlQnBzLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIGRhdGEud3JpdGVVSW50OCgwLCBvZmZzZXQpOyAvLyBOb25lXG4gIH1cblxuICAvLyBJREwgQWNjb3VudHM6IGNyZWF0b3JfcHJvZmlsZSwgb3duZXIgKE5PIGNvbmZpZyEpXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IGNyZWF0b3JQcm9maWxlUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogY3JlYXRvclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7XG4gICAgcHJvZ3JhbUlkOiBQUk9HUkFNX0lELFxuICAgIGtleXMsXG4gICAgZGF0YSxcbiAgfSk7XG5cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaW5zdHJ1Y3Rpb24pO1xuICBjb25zdCB7IGJsb2NraGFzaCB9ID0gYXdhaXQgY29ubi5nZXRMYXRlc3RCbG9ja2hhc2goJ2ZpbmFsaXplZCcpO1xuICB0cmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2ggPSBibG9ja2hhc2g7XG4gIHRyYW5zYWN0aW9uLmZlZVBheWVyID0gY3JlYXRvclB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgY2xhaW1fY3JlYXRvcl9zb2wgdHJhbnNhY3Rpb25cbiAqIENsYWltcyBhY2N1bXVsYXRlZCBjcmVhdG9yIGZlZXMgZnJvbSBzb2xfdHJlYXN1cnlcbiAqIElETCBBY2NvdW50czogY29uZmlnLCBjcmVhdG9yX3Byb2ZpbGUsIHNvbF90cmVhc3VyeSwgb3duZXIsIHN5c3RlbV9wcm9ncmFtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsYWltQ3JlYXRvclRyYW5zYWN0aW9uKHBhcmFtczoge1xuICBjcmVhdG9yV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCBjcmVhdG9yUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMuY3JlYXRvcldhbGxldCk7XG4gIGNvbnN0IGNyZWF0b3JQcm9maWxlUGRhID0gZGVyaXZlQ3JlYXRvclByb2ZpbGVQZGEoY3JlYXRvclB1YmtleSk7XG5cbiAgY29uc3QgZGF0YSA9IERJU0NSSU1JTkFUT1JTLmNsYWltX2NyZWF0b3Jfc29sO1xuXG4gIC8vIElETCBBY2NvdW50czogY29uZmlnLCBjcmVhdG9yX3Byb2ZpbGUsIHNvbF90cmVhc3VyeSwgb3duZXIsIHN5c3RlbV9wcm9ncmFtXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IENPTkZJR19QREEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogY3JlYXRvclByb2ZpbGVQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBTT0xfVFJFQVNVUllfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogY3JlYXRvclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgXTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsXG4gICAga2V5cyxcbiAgICBkYXRhLFxuICB9KTtcblxuICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbigpLmFkZChpbnN0cnVjdGlvbik7XG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSBhd2FpdCBjb25uLmdldExhdGVzdEJsb2NraGFzaCgnZmluYWxpemVkJyk7XG4gIHRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCA9IGJsb2NraGFzaDtcbiAgdHJhbnNhY3Rpb24uZmVlUGF5ZXIgPSBjcmVhdG9yUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispute Transaction Builders
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: Account structures verified against IDL v4.7.6
|
|
5
|
+
*/
|
|
6
|
+
import { Connection, Transaction } from '@solana/web3.js';
|
|
7
|
+
/**
|
|
8
|
+
* Build flag_dispute transaction
|
|
9
|
+
* IDL Accounts: config, market, dispute_meta, authority
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildFlagDisputeTransaction(params: {
|
|
12
|
+
marketPda: string;
|
|
13
|
+
disputerWallet: string;
|
|
14
|
+
connection?: Connection;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
transaction: Transaction;
|
|
17
|
+
serializedTx: string;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Build vote_council transaction
|
|
21
|
+
* IDL Accounts: config, market, council_vote, dispute_meta, voter, system_program
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildVoteCouncilTransaction(params: {
|
|
24
|
+
marketPda: string;
|
|
25
|
+
voteYes: boolean;
|
|
26
|
+
voterWallet: string;
|
|
27
|
+
connection?: Connection;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
transaction: Transaction;
|
|
30
|
+
serializedTx: string;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Build change_council_vote transaction
|
|
34
|
+
* IDL Accounts: config, market, council_vote, dispute_meta, voter
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildChangeCouncilVoteTransaction(params: {
|
|
37
|
+
marketPda: string;
|
|
38
|
+
newVoteYes: boolean;
|
|
39
|
+
voterWallet: string;
|
|
40
|
+
connection?: Connection;
|
|
41
|
+
}): Promise<{
|
|
42
|
+
transaction: Transaction;
|
|
43
|
+
serializedTx: string;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Build flag_race_dispute transaction
|
|
47
|
+
* IDL Accounts: config, race_market, dispute_meta, authority
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildFlagRaceDisputeTransaction(params: {
|
|
50
|
+
raceMarketPda: string;
|
|
51
|
+
disputerWallet: string;
|
|
52
|
+
connection?: Connection;
|
|
53
|
+
}): Promise<{
|
|
54
|
+
transaction: Transaction;
|
|
55
|
+
serializedTx: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Build vote_council_race transaction
|
|
59
|
+
* IDL Accounts: config, race_market, vote_record, dispute_meta, voter, system_program
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildVoteCouncilRaceTransaction(params: {
|
|
62
|
+
raceMarketPda: string;
|
|
63
|
+
voteOutcomeIndex: number;
|
|
64
|
+
voterWallet: string;
|
|
65
|
+
connection?: Connection;
|
|
66
|
+
}): Promise<{
|
|
67
|
+
transaction: Transaction;
|
|
68
|
+
serializedTx: string;
|
|
69
|
+
}>;
|
|
70
|
+
/**
|
|
71
|
+
* Build change_council_vote_race transaction
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildChangeCouncilVoteRaceTransaction(params: {
|
|
74
|
+
raceMarketPda: string;
|
|
75
|
+
newVoteOutcomeIndex: number;
|
|
76
|
+
voterWallet: string;
|
|
77
|
+
connection?: Connection;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
transaction: Transaction;
|
|
80
|
+
serializedTx: string;
|
|
81
|
+
}>;
|