@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,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolution 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 propose_resolution transaction
|
|
9
|
+
* IDL Accounts: config, market, dispute_meta, authority, system_program
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildProposeResolutionTransaction(params: {
|
|
12
|
+
marketPda: string;
|
|
13
|
+
outcome: boolean;
|
|
14
|
+
proposerWallet: string;
|
|
15
|
+
connection?: Connection;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
transaction: Transaction;
|
|
18
|
+
serializedTx: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Build propose_resolution_host transaction
|
|
22
|
+
* IDL Accounts: config, market, dispute_meta, host, system_program
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildProposeResolutionHostTransaction(params: {
|
|
25
|
+
marketPda: string;
|
|
26
|
+
outcome: boolean;
|
|
27
|
+
oracleWallet: string;
|
|
28
|
+
connection?: Connection;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
transaction: Transaction;
|
|
31
|
+
serializedTx: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Build resolve_market transaction
|
|
35
|
+
* IDL Accounts: config, market, authority
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildResolveMarketTransaction(params: {
|
|
38
|
+
marketPda: string;
|
|
39
|
+
outcome: boolean;
|
|
40
|
+
resolverWallet: string;
|
|
41
|
+
connection?: Connection;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
transaction: Transaction;
|
|
44
|
+
serializedTx: string;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Build resolve_market_host transaction
|
|
48
|
+
* IDL Accounts: config, market, host
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildResolveMarketHostTransaction(params: {
|
|
51
|
+
marketPda: string;
|
|
52
|
+
outcome: boolean;
|
|
53
|
+
oracleWallet: string;
|
|
54
|
+
connection?: Connection;
|
|
55
|
+
}): Promise<{
|
|
56
|
+
transaction: Transaction;
|
|
57
|
+
serializedTx: string;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Build finalize_resolution transaction
|
|
61
|
+
* IDL Accounts: market, dispute_meta, finalizer
|
|
62
|
+
*/
|
|
63
|
+
export declare function buildFinalizeResolutionTransaction(params: {
|
|
64
|
+
marketPda: string;
|
|
65
|
+
callerWallet: string;
|
|
66
|
+
connection?: Connection;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
transaction: Transaction;
|
|
69
|
+
serializedTx: string;
|
|
70
|
+
}>;
|
|
71
|
+
/**
|
|
72
|
+
* Build propose_race_resolution transaction
|
|
73
|
+
* IDL Accounts: config, race_market, dispute_meta, resolver, system_program
|
|
74
|
+
*/
|
|
75
|
+
export declare function buildProposeRaceResolutionTransaction(params: {
|
|
76
|
+
raceMarketPda: string;
|
|
77
|
+
winningOutcomeIndex: number;
|
|
78
|
+
proposerWallet: string;
|
|
79
|
+
connection?: Connection;
|
|
80
|
+
}): Promise<{
|
|
81
|
+
transaction: Transaction;
|
|
82
|
+
serializedTx: string;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Build resolve_race transaction (direct resolve by creator)
|
|
86
|
+
* IDL Accounts: config, race_market, authority
|
|
87
|
+
*/
|
|
88
|
+
export declare function buildResolveRaceTransaction(params: {
|
|
89
|
+
raceMarketPda: string;
|
|
90
|
+
winningOutcomeIndex: number;
|
|
91
|
+
resolverWallet: string;
|
|
92
|
+
connection?: Connection;
|
|
93
|
+
}): Promise<{
|
|
94
|
+
transaction: Transaction;
|
|
95
|
+
serializedTx: string;
|
|
96
|
+
}>;
|
|
97
|
+
/**
|
|
98
|
+
* Build finalize_race_resolution transaction
|
|
99
|
+
* IDL Accounts: race_market, dispute_meta, finalizer
|
|
100
|
+
*/
|
|
101
|
+
export declare function buildFinalizeRaceResolutionTransaction(params: {
|
|
102
|
+
raceMarketPda: string;
|
|
103
|
+
callerWallet: string;
|
|
104
|
+
connection?: Connection;
|
|
105
|
+
}): Promise<{
|
|
106
|
+
transaction: Transaction;
|
|
107
|
+
serializedTx: string;
|
|
108
|
+
}>;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolution 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
|
+
propose_resolution: Buffer.from([19, 68, 181, 23, 194, 146, 152, 252]),
|
|
13
|
+
propose_resolution_host: Buffer.from([116, 231, 75, 185, 127, 129, 46, 124]),
|
|
14
|
+
resolve_market: Buffer.from([155, 23, 80, 173, 46, 74, 23, 239]),
|
|
15
|
+
resolve_market_host: Buffer.from([140, 50, 133, 146, 72, 5, 210, 116]),
|
|
16
|
+
finalize_resolution: Buffer.from([191, 74, 94, 214, 45, 150, 152, 125]),
|
|
17
|
+
propose_race_resolution: Buffer.from([14, 204, 17, 188, 243, 49, 107, 255]),
|
|
18
|
+
resolve_race: Buffer.from([181, 252, 7, 209, 242, 100, 95, 172]),
|
|
19
|
+
finalize_race_resolution: Buffer.from([19, 232, 81, 138, 191, 218, 54, 200]),
|
|
20
|
+
};
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// PDA DERIVATION
|
|
23
|
+
// =============================================================================
|
|
24
|
+
function deriveDisputeMetaPda(marketPda) {
|
|
25
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.DISPUTE_META, marketPda.toBuffer()], PROGRAM_ID);
|
|
26
|
+
return pda;
|
|
27
|
+
}
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// BOOLEAN MARKET RESOLUTION
|
|
30
|
+
// =============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Build propose_resolution transaction
|
|
33
|
+
* IDL Accounts: config, market, dispute_meta, authority, system_program
|
|
34
|
+
*/
|
|
35
|
+
export async function buildProposeResolutionTransaction(params) {
|
|
36
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
37
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
38
|
+
const proposerPubkey = new PublicKey(params.proposerWallet);
|
|
39
|
+
const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
|
|
40
|
+
// Instruction data: discriminator + outcome (bool)
|
|
41
|
+
const data = Buffer.alloc(9);
|
|
42
|
+
DISCRIMINATORS.propose_resolution.copy(data, 0);
|
|
43
|
+
data.writeUInt8(params.outcome ? 1 : 0, 8);
|
|
44
|
+
const keys = [
|
|
45
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
46
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
47
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
48
|
+
{ pubkey: proposerPubkey, isSigner: true, isWritable: true },
|
|
49
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
50
|
+
];
|
|
51
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
52
|
+
const transaction = new Transaction().add(instruction);
|
|
53
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
54
|
+
transaction.recentBlockhash = blockhash;
|
|
55
|
+
transaction.feePayer = proposerPubkey;
|
|
56
|
+
return {
|
|
57
|
+
transaction,
|
|
58
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build propose_resolution_host transaction
|
|
63
|
+
* IDL Accounts: config, market, dispute_meta, host, system_program
|
|
64
|
+
*/
|
|
65
|
+
export async function buildProposeResolutionHostTransaction(params) {
|
|
66
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
67
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
68
|
+
const oraclePubkey = new PublicKey(params.oracleWallet);
|
|
69
|
+
const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
|
|
70
|
+
const data = Buffer.alloc(9);
|
|
71
|
+
DISCRIMINATORS.propose_resolution_host.copy(data, 0);
|
|
72
|
+
data.writeUInt8(params.outcome ? 1 : 0, 8);
|
|
73
|
+
const keys = [
|
|
74
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
75
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
76
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
77
|
+
{ pubkey: oraclePubkey, isSigner: true, isWritable: true },
|
|
78
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
79
|
+
];
|
|
80
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
81
|
+
const transaction = new Transaction().add(instruction);
|
|
82
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
83
|
+
transaction.recentBlockhash = blockhash;
|
|
84
|
+
transaction.feePayer = oraclePubkey;
|
|
85
|
+
return {
|
|
86
|
+
transaction,
|
|
87
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build resolve_market transaction
|
|
92
|
+
* IDL Accounts: config, market, authority
|
|
93
|
+
*/
|
|
94
|
+
export async function buildResolveMarketTransaction(params) {
|
|
95
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
96
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
97
|
+
const resolverPubkey = new PublicKey(params.resolverWallet);
|
|
98
|
+
const data = Buffer.alloc(9);
|
|
99
|
+
DISCRIMINATORS.resolve_market.copy(data, 0);
|
|
100
|
+
data.writeUInt8(params.outcome ? 1 : 0, 8);
|
|
101
|
+
const keys = [
|
|
102
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
103
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
104
|
+
{ pubkey: resolverPubkey, isSigner: true, isWritable: false },
|
|
105
|
+
];
|
|
106
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
107
|
+
const transaction = new Transaction().add(instruction);
|
|
108
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
109
|
+
transaction.recentBlockhash = blockhash;
|
|
110
|
+
transaction.feePayer = resolverPubkey;
|
|
111
|
+
return {
|
|
112
|
+
transaction,
|
|
113
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Build resolve_market_host transaction
|
|
118
|
+
* IDL Accounts: config, market, host
|
|
119
|
+
*/
|
|
120
|
+
export async function buildResolveMarketHostTransaction(params) {
|
|
121
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
122
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
123
|
+
const oraclePubkey = new PublicKey(params.oracleWallet);
|
|
124
|
+
const data = Buffer.alloc(9);
|
|
125
|
+
DISCRIMINATORS.resolve_market_host.copy(data, 0);
|
|
126
|
+
data.writeUInt8(params.outcome ? 1 : 0, 8);
|
|
127
|
+
const keys = [
|
|
128
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
129
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
130
|
+
{ pubkey: oraclePubkey, isSigner: true, isWritable: false },
|
|
131
|
+
];
|
|
132
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
133
|
+
const transaction = new Transaction().add(instruction);
|
|
134
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
135
|
+
transaction.recentBlockhash = blockhash;
|
|
136
|
+
transaction.feePayer = oraclePubkey;
|
|
137
|
+
return {
|
|
138
|
+
transaction,
|
|
139
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Build finalize_resolution transaction
|
|
144
|
+
* IDL Accounts: market, dispute_meta, finalizer
|
|
145
|
+
*/
|
|
146
|
+
export async function buildFinalizeResolutionTransaction(params) {
|
|
147
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
148
|
+
const marketPubkey = new PublicKey(params.marketPda);
|
|
149
|
+
const callerPubkey = new PublicKey(params.callerWallet);
|
|
150
|
+
const disputeMetaPda = deriveDisputeMetaPda(marketPubkey);
|
|
151
|
+
const data = DISCRIMINATORS.finalize_resolution;
|
|
152
|
+
const keys = [
|
|
153
|
+
{ pubkey: marketPubkey, isSigner: false, isWritable: true },
|
|
154
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
155
|
+
{ pubkey: callerPubkey, isSigner: true, isWritable: false },
|
|
156
|
+
];
|
|
157
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
158
|
+
const transaction = new Transaction().add(instruction);
|
|
159
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
160
|
+
transaction.recentBlockhash = blockhash;
|
|
161
|
+
transaction.feePayer = callerPubkey;
|
|
162
|
+
return {
|
|
163
|
+
transaction,
|
|
164
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// =============================================================================
|
|
168
|
+
// RACE MARKET RESOLUTION
|
|
169
|
+
// =============================================================================
|
|
170
|
+
/**
|
|
171
|
+
* Build propose_race_resolution transaction
|
|
172
|
+
* IDL Accounts: config, race_market, dispute_meta, resolver, system_program
|
|
173
|
+
*/
|
|
174
|
+
export async function buildProposeRaceResolutionTransaction(params) {
|
|
175
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
176
|
+
const raceMarketPubkey = new PublicKey(params.raceMarketPda);
|
|
177
|
+
const proposerPubkey = new PublicKey(params.proposerWallet);
|
|
178
|
+
const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
|
|
179
|
+
const data = Buffer.alloc(9);
|
|
180
|
+
DISCRIMINATORS.propose_race_resolution.copy(data, 0);
|
|
181
|
+
data.writeUInt8(params.winningOutcomeIndex, 8);
|
|
182
|
+
const keys = [
|
|
183
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
184
|
+
{ pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
|
|
185
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
186
|
+
{ pubkey: proposerPubkey, isSigner: true, isWritable: true },
|
|
187
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
188
|
+
];
|
|
189
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
190
|
+
const transaction = new Transaction().add(instruction);
|
|
191
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
192
|
+
transaction.recentBlockhash = blockhash;
|
|
193
|
+
transaction.feePayer = proposerPubkey;
|
|
194
|
+
return {
|
|
195
|
+
transaction,
|
|
196
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Build resolve_race transaction (direct resolve by creator)
|
|
201
|
+
* IDL Accounts: config, race_market, authority
|
|
202
|
+
*/
|
|
203
|
+
export async function buildResolveRaceTransaction(params) {
|
|
204
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
205
|
+
const raceMarketPubkey = new PublicKey(params.raceMarketPda);
|
|
206
|
+
const resolverPubkey = new PublicKey(params.resolverWallet);
|
|
207
|
+
const data = Buffer.alloc(9);
|
|
208
|
+
DISCRIMINATORS.resolve_race.copy(data, 0);
|
|
209
|
+
data.writeUInt8(params.winningOutcomeIndex, 8);
|
|
210
|
+
const keys = [
|
|
211
|
+
{ pubkey: CONFIG_PDA, isSigner: false, isWritable: false },
|
|
212
|
+
{ pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
|
|
213
|
+
{ pubkey: resolverPubkey, isSigner: true, isWritable: false },
|
|
214
|
+
];
|
|
215
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
216
|
+
const transaction = new Transaction().add(instruction);
|
|
217
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
218
|
+
transaction.recentBlockhash = blockhash;
|
|
219
|
+
transaction.feePayer = resolverPubkey;
|
|
220
|
+
return {
|
|
221
|
+
transaction,
|
|
222
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Build finalize_race_resolution transaction
|
|
227
|
+
* IDL Accounts: race_market, dispute_meta, finalizer
|
|
228
|
+
*/
|
|
229
|
+
export async function buildFinalizeRaceResolutionTransaction(params) {
|
|
230
|
+
const conn = params.connection || new Connection(RPC_ENDPOINT, 'confirmed');
|
|
231
|
+
const raceMarketPubkey = new PublicKey(params.raceMarketPda);
|
|
232
|
+
const callerPubkey = new PublicKey(params.callerWallet);
|
|
233
|
+
const disputeMetaPda = deriveDisputeMetaPda(raceMarketPubkey);
|
|
234
|
+
const data = DISCRIMINATORS.finalize_race_resolution;
|
|
235
|
+
const keys = [
|
|
236
|
+
{ pubkey: raceMarketPubkey, isSigner: false, isWritable: true },
|
|
237
|
+
{ pubkey: disputeMetaPda, isSigner: false, isWritable: true },
|
|
238
|
+
{ pubkey: callerPubkey, isSigner: true, isWritable: false },
|
|
239
|
+
];
|
|
240
|
+
const instruction = new TransactionInstruction({ programId: PROGRAM_ID, keys, data });
|
|
241
|
+
const transaction = new Transaction().add(instruction);
|
|
242
|
+
const { blockhash } = await conn.getLatestBlockhash('finalized');
|
|
243
|
+
transaction.recentBlockhash = blockhash;
|
|
244
|
+
transaction.feePayer = callerPubkey;
|
|
245
|
+
return {
|
|
246
|
+
transaction,
|
|
247
|
+
serializedTx: transaction.serialize({ requireAllSignatures: false, verifySignatures: false }).toString('base64'),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x1dGlvbi10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVycy9yZXNvbHV0aW9uLXRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEdBQ04sTUFBTSxjQUFjLENBQUM7QUFFdEIsZ0ZBQWdGO0FBQ2hGLDRCQUE0QjtBQUM1QixnRkFBZ0Y7QUFFaEYsTUFBTSxjQUFjLEdBQUc7SUFDckIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0RSx1QkFBdUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEUsbUJBQW1CLEVB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RUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO1FBQy9ELEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7UUFDN0QsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtLQUM1RCxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLFdBQVcsQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ3hDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0lBRXBDLE9BQU87UUFDTCxXQUFXO1FBQ1gsWUFBWSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0tBQ2pILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvbHV0aW9uIFRyYW5zYWN0aW9uIEJ1aWxkZXJzXG4gKlxuICogSU1QT1JUQU5UOiBBY2NvdW50IHN0cnVjdHVyZXMgdmVyaWZpZWQgYWdhaW5zdCBJREwgdjQuNy42XG4gKi9cbmltcG9ydCB7XG4gIENvbm5lY3Rpb24sXG4gIFB1YmxpY0tleSxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sXG4gIFN5c3RlbVByb2dyYW0sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQge1xuICBQUk9HUkFNX0lELFxuICBDT05GSUdfUERBLFxuICBSUENfRU5EUE9JTlQsXG4gIFNFRURTLFxufSBmcm9tICcuLi9jb25maWcuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRElTQ1JJTUlOQVRPUlMgKGZyb20gSURMKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgRElTQ1JJTUlOQVRPUlMgPSB7XG4gIHByb3Bvc2VfcmVzb2x1dGlvbjogQnVmZmVyLmZyb20oWzE5LCA2OCwgMTgxLCAyMywgMTk0LCAxNDYsIDE1MiwgMjUyXSksXG4gIHByb3Bvc2VfcmVzb2x1dGlvbl9ob3N0OiBCdWZmZXIuZnJvbShbMTE2LCAyMzEsIDc1LCAxODUsIDEyNywgMTI5LCA0NiwgMTI0XSksXG4gIHJlc29sdmVfbWFya2V0OiBCdWZmZXIuZnJvbShbMTU1LCAyMywgODAsIDE3MywgNDYsIDc0LCAyMywgMjM5XSksXG4gIHJlc29sdmVfbWFya2V0X2hvc3Q6IEJ1ZmZlci5mcm9tKFsxNDAsIDUwLCAxMzMsIDE0NiwgNzIsIDUsIDIxMCwgMTE2XSksXG4gIGZpbmFsaXplX3Jlc29sdXRpb246IEJ1ZmZlci5mcm9tKFsxOTEsIDc0LCA5NCwgMjE0LCA0NSwgMTUwLCAxNTIsIDEyNV0pLFxuICBwcm9wb3NlX3JhY2VfcmVzb2x1dGlvbjogQnVmZmVyLmZyb20oWzE0LCAyMDQsIDE3LCAxODgsIDI0MywgNDksIDEwNywgMjU1XSksXG4gIHJlc29sdmVfcmFjZTogQnVmZmVyLmZyb20oWzE4MSwgMjUyLCA3LCAyMDksIDI0MiwgMTAwLCA5NSwgMTcyXSksXG4gIGZpbmFsaXplX3JhY2VfcmVzb2x1dGlvbjogQnVmZmVyLmZyb20oWzE5LCAyMzIsIDgxLCAxMzgsIDE5MSwgMjE4LCA1NCwgMjAwXSksXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUERBIERFUklWQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGRlcml2ZURpc3B1dGVNZXRhUGRhKG1hcmtldFBkYTogUHVibGljS2V5KTogUHVibGljS2V5IHtcbiAgY29uc3QgW3BkYV0gPSBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbU0VFRFMuRElTUFVURV9NRVRBLCBtYXJrZXRQZGEudG9CdWZmZXIoKV0sXG4gICAgUFJPR1JBTV9JRFxuICApO1xuICByZXR1cm4gcGRhO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQk9PTEVBTiBNQVJLRVQgUkVTT0xVVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCdWlsZCBwcm9wb3NlX3Jlc29sdXRpb24gdHJhbnNhY3Rpb25cbiAqIElETCBBY2NvdW50czogY29uZmlnLCBtYXJrZXQsIGRpc3B1dGVfbWV0YSwgYXV0aG9yaXR5LCBzeXN0ZW1fcHJvZ3JhbVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQcm9wb3NlUmVzb2x1dGlvblRyYW5zYWN0aW9uKHBhcmFtczoge1xuICBtYXJrZXRQZGE6IHN0cmluZztcbiAgb3V0Y29tZTogYm9vbGVhbjtcbiAgcHJvcG9zZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IG1hcmtldFB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLm1hcmtldFBkYSk7XG4gIGNvbnN0IHByb3Bvc2VyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMucHJvcG9zZXJXYWxsZXQpO1xuICBjb25zdCBkaXNwdXRlTWV0YVBkYSA9IGRlcml2ZURpc3B1dGVNZXRhUGRhKG1hcmtldFB1YmtleSk7XG5cbiAgLy8gSW5zdHJ1Y3Rpb24gZGF0YTogZGlzY3JpbWluYXRvciArIG91dGNvbWUgKGJvb2wpXG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOSk7XG4gIERJU0NSSU1JTkFUT1JTLnByb3Bvc2VfcmVzb2x1dGlvbi5jb3B5KGRhdGEsIDApO1xuICBkYXRhLndyaXRlVUludDgocGFyYW1zLm91dGNvbWUgPyAxIDogMCwgOCk7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogQ09ORklHX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiBtYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlTWV0YVBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHByb3Bvc2VyUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHByb3Bvc2VyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBwcm9wb3NlX3Jlc29sdXRpb25faG9zdCB0cmFuc2FjdGlvblxuICogSURMIEFjY291bnRzOiBjb25maWcsIG1hcmtldCwgZGlzcHV0ZV9tZXRhLCBob3N0LCBzeXN0ZW1fcHJvZ3JhbVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQcm9wb3NlUmVzb2x1dGlvbkhvc3RUcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgbWFya2V0UGRhOiBzdHJpbmc7XG4gIG91dGNvbWU6IGJvb2xlYW47XG4gIG9yYWNsZVdhbGxldDogc3RyaW5nO1xuICBjb25uZWN0aW9uPzogQ29ubmVjdGlvbjtcbn0pOiBQcm9taXNlPHsgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uOyBzZXJpYWxpemVkVHg6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGNvbm4gPSBwYXJhbXMuY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcbiAgY29uc3QgbWFya2V0UHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMubWFya2V0UGRhKTtcbiAgY29uc3Qgb3JhY2xlUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMub3JhY2xlV2FsbGV0KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShtYXJrZXRQdWJrZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOSk7XG4gIERJU0NSSU1JTkFUT1JTLnByb3Bvc2VfcmVzb2x1dGlvbl9ob3N0LmNvcHkoZGF0YSwgMCk7XG4gIGRhdGEud3JpdGVVSW50OChwYXJhbXMub3V0Y29tZSA/IDEgOiAwLCA4KTtcblxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IG1hcmtldFB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IGRpc3B1dGVNZXRhUGRhLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogb3JhY2xlUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IG9yYWNsZVB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgcmVzb2x2ZV9tYXJrZXQgdHJhbnNhY3Rpb25cbiAqIElETCBBY2NvdW50czogY29uZmlnLCBtYXJrZXQsIGF1dGhvcml0eVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXNvbHZlTWFya2V0VHJhbnNhY3Rpb24ocGFyYW1zOiB7XG4gIG1hcmtldFBkYTogc3RyaW5nO1xuICBvdXRjb21lOiBib29sZWFuO1xuICByZXNvbHZlcldhbGxldDogc3RyaW5nO1xuICBjb25uZWN0aW9uPzogQ29ubmVjdGlvbjtcbn0pOiBQcm9taXNlPHsgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uOyBzZXJpYWxpemVkVHg6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGNvbm4gPSBwYXJhbXMuY29ubmVjdGlvbiB8fCBuZXcgQ29ubmVjdGlvbihSUENfRU5EUE9JTlQsICdjb25maXJtZWQnKTtcbiAgY29uc3QgbWFya2V0UHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMubWFya2V0UGRhKTtcbiAgY29uc3QgcmVzb2x2ZXJQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5yZXNvbHZlcldhbGxldCk7XG5cbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMucmVzb2x2ZV9tYXJrZXQuY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy5vdXRjb21lID8gMSA6IDAsIDgpO1xuXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IENPTkZJR19QREEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogbWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogcmVzb2x2ZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHJlc29sdmVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCByZXNvbHZlX21hcmtldF9ob3N0IHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgbWFya2V0LCBob3N0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFJlc29sdmVNYXJrZXRIb3N0VHJhbnNhY3Rpb24ocGFyYW1zOiB7XG4gIG1hcmtldFBkYTogc3RyaW5nO1xuICBvdXRjb21lOiBib29sZWFuO1xuICBvcmFjbGVXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IG1hcmtldFB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLm1hcmtldFBkYSk7XG4gIGNvbnN0IG9yYWNsZVB1YmtleSA9IG5ldyBQdWJsaWNLZXkocGFyYW1zLm9yYWNsZVdhbGxldCk7XG5cbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMucmVzb2x2ZV9tYXJrZXRfaG9zdC5jb3B5KGRhdGEsIDApO1xuICBkYXRhLndyaXRlVUludDgocGFyYW1zLm91dGNvbWUgPyAxIDogMCwgOCk7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogQ09ORklHX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiBtYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBvcmFjbGVQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IG9yYWNsZVB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgZmluYWxpemVfcmVzb2x1dGlvbiB0cmFuc2FjdGlvblxuICogSURMIEFjY291bnRzOiBtYXJrZXQsIGRpc3B1dGVfbWV0YSwgZmluYWxpemVyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEZpbmFsaXplUmVzb2x1dGlvblRyYW5zYWN0aW9uKHBhcmFtczoge1xuICBtYXJrZXRQZGE6IHN0cmluZztcbiAgY2FsbGVyV2FsbGV0OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiBDb25uZWN0aW9uO1xufSk6IFByb21pc2U8eyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247IHNlcmlhbGl6ZWRUeDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29ubiA9IHBhcmFtcy5jb25uZWN0aW9uIHx8IG5ldyBDb25uZWN0aW9uKFJQQ19FTkRQT0lOVCwgJ2NvbmZpcm1lZCcpO1xuICBjb25zdCBtYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5tYXJrZXRQZGEpO1xuICBjb25zdCBjYWxsZXJQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5jYWxsZXJXYWxsZXQpO1xuICBjb25zdCBkaXNwdXRlTWV0YVBkYSA9IGRlcml2ZURpc3B1dGVNZXRhUGRhKG1hcmtldFB1YmtleSk7XG5cbiAgY29uc3QgZGF0YSA9IERJU0NSSU1JTkFUT1JTLmZpbmFsaXplX3Jlc29sdXRpb247XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogbWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogZGlzcHV0ZU1ldGFQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBjYWxsZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IGNhbGxlclB1YmtleTtcblxuICByZXR1cm4ge1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNlcmlhbGl6ZWRUeDogdHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlLCB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSB9KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSQUNFIE1BUktFVCBSRVNPTFVUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEJ1aWxkIHByb3Bvc2VfcmFjZV9yZXNvbHV0aW9uIHRyYW5zYWN0aW9uXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgcmFjZV9tYXJrZXQsIGRpc3B1dGVfbWV0YSwgcmVzb2x2ZXIsIHN5c3RlbV9wcm9ncmFtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFByb3Bvc2VSYWNlUmVzb2x1dGlvblRyYW5zYWN0aW9uKHBhcmFtczoge1xuICByYWNlTWFya2V0UGRhOiBzdHJpbmc7XG4gIHdpbm5pbmdPdXRjb21lSW5kZXg6IG51bWJlcjtcbiAgcHJvcG9zZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IHJhY2VNYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5yYWNlTWFya2V0UGRhKTtcbiAgY29uc3QgcHJvcG9zZXJQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5wcm9wb3NlcldhbGxldCk7XG4gIGNvbnN0IGRpc3B1dGVNZXRhUGRhID0gZGVyaXZlRGlzcHV0ZU1ldGFQZGEocmFjZU1hcmtldFB1YmtleSk7XG5cbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMucHJvcG9zZV9yYWNlX3Jlc29sdXRpb24uY29weShkYXRhLCAwKTtcbiAgZGF0YS53cml0ZVVJbnQ4KHBhcmFtcy53aW5uaW5nT3V0Y29tZUluZGV4LCA4KTtcblxuICBjb25zdCBrZXlzID0gW1xuICAgIHsgcHVia2V5OiBDT05GSUdfUERBLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IHJhY2VNYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlTWV0YVBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IHByb3Bvc2VyUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBTeXN0ZW1Qcm9ncmFtLnByb2dyYW1JZCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHByb3Bvc2VyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCByZXNvbHZlX3JhY2UgdHJhbnNhY3Rpb24gKGRpcmVjdCByZXNvbHZlIGJ5IGNyZWF0b3IpXG4gKiBJREwgQWNjb3VudHM6IGNvbmZpZywgcmFjZV9tYXJrZXQsIGF1dGhvcml0eVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXNvbHZlUmFjZVRyYW5zYWN0aW9uKHBhcmFtczoge1xuICByYWNlTWFya2V0UGRhOiBzdHJpbmc7XG4gIHdpbm5pbmdPdXRjb21lSW5kZXg6IG51bWJlcjtcbiAgcmVzb2x2ZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IHJhY2VNYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5yYWNlTWFya2V0UGRhKTtcbiAgY29uc3QgcmVzb2x2ZXJQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5yZXNvbHZlcldhbGxldCk7XG5cbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyg5KTtcbiAgRElTQ1JJTUlOQVRPUlMucmVzb2x2ZV9yYWNlLmNvcHkoZGF0YSwgMCk7XG4gIGRhdGEud3JpdGVVSW50OChwYXJhbXMud2lubmluZ091dGNvbWVJbmRleCwgOCk7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogQ09ORklHX1BEQSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgcHVia2V5OiByYWNlTWFya2V0UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogcmVzb2x2ZXJQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oeyBwcm9ncmFtSWQ6IFBST0dSQU1fSUQsIGtleXMsIGRhdGEgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCkuYWRkKGluc3RydWN0aW9uKTtcbiAgY29uc3QgeyBibG9ja2hhc2ggfSA9IGF3YWl0IGNvbm4uZ2V0TGF0ZXN0QmxvY2toYXNoKCdmaW5hbGl6ZWQnKTtcbiAgdHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoID0gYmxvY2toYXNoO1xuICB0cmFuc2FjdGlvbi5mZWVQYXllciA9IHJlc29sdmVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBmaW5hbGl6ZV9yYWNlX3Jlc29sdXRpb24gdHJhbnNhY3Rpb25cbiAqIElETCBBY2NvdW50czogcmFjZV9tYXJrZXQsIGRpc3B1dGVfbWV0YSwgZmluYWxpemVyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEZpbmFsaXplUmFjZVJlc29sdXRpb25UcmFuc2FjdGlvbihwYXJhbXM6IHtcbiAgcmFjZU1hcmtldFBkYTogc3RyaW5nO1xuICBjYWxsZXJXYWxsZXQ6IHN0cmluZztcbiAgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG59KTogUHJvbWlzZTx7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjsgc2VyaWFsaXplZFR4OiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25uID0gcGFyYW1zLmNvbm5lY3Rpb24gfHwgbmV3IENvbm5lY3Rpb24oUlBDX0VORFBPSU5ULCAnY29uZmlybWVkJyk7XG4gIGNvbnN0IHJhY2VNYXJrZXRQdWJrZXkgPSBuZXcgUHVibGljS2V5KHBhcmFtcy5yYWNlTWFya2V0UGRhKTtcbiAgY29uc3QgY2FsbGVyUHVia2V5ID0gbmV3IFB1YmxpY0tleShwYXJhbXMuY2FsbGVyV2FsbGV0KTtcbiAgY29uc3QgZGlzcHV0ZU1ldGFQZGEgPSBkZXJpdmVEaXNwdXRlTWV0YVBkYShyYWNlTWFya2V0UHVia2V5KTtcblxuICBjb25zdCBkYXRhID0gRElTQ1JJTUlOQVRPUlMuZmluYWxpemVfcmFjZV9yZXNvbHV0aW9uO1xuXG4gIGNvbnN0IGtleXMgPSBbXG4gICAgeyBwdWJrZXk6IHJhY2VNYXJrZXRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgIHsgcHVia2V5OiBkaXNwdXRlTWV0YVBkYSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgeyBwdWJrZXk6IGNhbGxlclB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbih7IHByb2dyYW1JZDogUFJPR1JBTV9JRCwga2V5cywgZGF0YSB9KTtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oKS5hZGQoaW5zdHJ1Y3Rpb24pO1xuICBjb25zdCB7IGJsb2NraGFzaCB9ID0gYXdhaXQgY29ubi5nZXRMYXRlc3RCbG9ja2hhc2goJ2ZpbmFsaXplZCcpO1xuICB0cmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2ggPSBibG9ja2hhc2g7XG4gIHRyYW5zYWN0aW9uLmZlZVBheWVyID0gY2FsbGVyUHVia2V5O1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2VyaWFsaXplZFR4OiB0cmFuc2FjdGlvbi5zZXJpYWxpemUoeyByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UsIHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlIH0pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whitelist 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 add_to_whitelist transaction
|
|
9
|
+
* IDL Accounts: market, whitelist, creator
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildAddToWhitelistTransaction(params: {
|
|
12
|
+
marketPda: string;
|
|
13
|
+
userToAdd: string;
|
|
14
|
+
creatorWallet: string;
|
|
15
|
+
connection?: Connection;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
transaction: Transaction;
|
|
18
|
+
serializedTx: string;
|
|
19
|
+
whitelistPda: string;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Build remove_from_whitelist transaction
|
|
23
|
+
* IDL Accounts: market, whitelist, creator
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildRemoveFromWhitelistTransaction(params: {
|
|
26
|
+
marketPda: string;
|
|
27
|
+
userToRemove: string;
|
|
28
|
+
creatorWallet: string;
|
|
29
|
+
connection?: Connection;
|
|
30
|
+
}): Promise<{
|
|
31
|
+
transaction: Transaction;
|
|
32
|
+
serializedTx: string;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Build create_race_whitelist transaction
|
|
36
|
+
* IDL Accounts: race_market, whitelist, creator, system_program
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildCreateRaceWhitelistTransaction(params: {
|
|
39
|
+
raceMarketPda: string;
|
|
40
|
+
creatorWallet: string;
|
|
41
|
+
connection?: Connection;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
transaction: Transaction;
|
|
44
|
+
serializedTx: string;
|
|
45
|
+
whitelistPda: string;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Build add_to_race_whitelist transaction
|
|
49
|
+
* IDL Accounts: race_market, whitelist, creator
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildAddToRaceWhitelistTransaction(params: {
|
|
52
|
+
raceMarketPda: string;
|
|
53
|
+
userToAdd: string;
|
|
54
|
+
creatorWallet: string;
|
|
55
|
+
connection?: Connection;
|
|
56
|
+
}): Promise<{
|
|
57
|
+
transaction: Transaction;
|
|
58
|
+
serializedTx: string;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Build remove_from_race_whitelist transaction
|
|
62
|
+
* IDL Accounts: race_market, whitelist, creator
|
|
63
|
+
*/
|
|
64
|
+
export declare function buildRemoveFromRaceWhitelistTransaction(params: {
|
|
65
|
+
raceMarketPda: string;
|
|
66
|
+
userToRemove: string;
|
|
67
|
+
creatorWallet: string;
|
|
68
|
+
connection?: Connection;
|
|
69
|
+
}): Promise<{
|
|
70
|
+
transaction: Transaction;
|
|
71
|
+
serializedTx: string;
|
|
72
|
+
}>;
|