@sudobility/auctions_contracts 0.1.12 → 0.1.13

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.
Files changed (66) hide show
  1. package/README.md +86 -0
  2. package/dist/react-native/evm/evm-auction-client.d.ts +475 -0
  3. package/dist/react-native/evm/evm-auction-client.d.ts.map +1 -0
  4. package/dist/react-native/evm/evm-auction-client.js +606 -0
  5. package/dist/react-native/evm/evm-auction-client.js.map +1 -0
  6. package/dist/react-native/evm/index.d.ts +2 -0
  7. package/dist/react-native/evm/index.d.ts.map +1 -0
  8. package/dist/react-native/evm/index.js +2 -0
  9. package/dist/react-native/evm/index.js.map +1 -0
  10. package/dist/react-native/solana/index.d.ts +3 -0
  11. package/dist/react-native/solana/index.d.ts.map +1 -0
  12. package/dist/react-native/solana/index.js +3 -0
  13. package/dist/react-native/solana/index.js.map +1 -0
  14. package/dist/react-native/solana/solana-auction-client.d.ts +118 -0
  15. package/dist/react-native/solana/solana-auction-client.d.ts.map +1 -0
  16. package/dist/react-native/solana/solana-auction-client.js +604 -0
  17. package/dist/react-native/solana/solana-auction-client.js.map +1 -0
  18. package/dist/react-native/solana/types.d.ts +19 -0
  19. package/dist/react-native/solana/types.d.ts.map +1 -0
  20. package/dist/react-native/solana/types.js +7 -0
  21. package/dist/react-native/solana/types.js.map +1 -0
  22. package/dist/react-native/types/common.d.ts +181 -0
  23. package/dist/react-native/types/common.d.ts.map +1 -0
  24. package/dist/react-native/types/common.js +222 -0
  25. package/dist/react-native/types/common.js.map +1 -0
  26. package/dist/react-native/unified/index.d.ts +3 -0
  27. package/dist/react-native/unified/index.d.ts.map +1 -0
  28. package/dist/react-native/unified/index.js +3 -0
  29. package/dist/react-native/unified/index.js.map +1 -0
  30. package/dist/react-native/unified/onchain-auction-client.d.ts +90 -0
  31. package/dist/react-native/unified/onchain-auction-client.d.ts.map +1 -0
  32. package/dist/react-native/unified/onchain-auction-client.js +205 -0
  33. package/dist/react-native/unified/onchain-auction-client.js.map +1 -0
  34. package/dist/unified/evm/evm-auction-client.d.ts +475 -0
  35. package/dist/unified/evm/evm-auction-client.d.ts.map +1 -0
  36. package/dist/unified/evm/evm-auction-client.js +606 -0
  37. package/dist/unified/evm/evm-auction-client.js.map +1 -0
  38. package/dist/unified/evm/index.d.ts +2 -0
  39. package/dist/unified/evm/index.d.ts.map +1 -0
  40. package/dist/unified/evm/index.js +2 -0
  41. package/dist/unified/evm/index.js.map +1 -0
  42. package/dist/unified/solana/index.d.ts +3 -0
  43. package/dist/unified/solana/index.d.ts.map +1 -0
  44. package/dist/unified/solana/index.js +3 -0
  45. package/dist/unified/solana/index.js.map +1 -0
  46. package/dist/unified/solana/solana-auction-client.d.ts +118 -0
  47. package/dist/unified/solana/solana-auction-client.d.ts.map +1 -0
  48. package/dist/unified/solana/solana-auction-client.js +604 -0
  49. package/dist/unified/solana/solana-auction-client.js.map +1 -0
  50. package/dist/unified/solana/types.d.ts +19 -0
  51. package/dist/unified/solana/types.d.ts.map +1 -0
  52. package/dist/unified/solana/types.js +7 -0
  53. package/dist/unified/solana/types.js.map +1 -0
  54. package/dist/unified/types/common.d.ts +181 -0
  55. package/dist/unified/types/common.d.ts.map +1 -0
  56. package/dist/unified/types/common.js +222 -0
  57. package/dist/unified/types/common.js.map +1 -0
  58. package/dist/unified/unified/index.d.ts +3 -0
  59. package/dist/unified/unified/index.d.ts.map +1 -0
  60. package/dist/unified/unified/index.js +3 -0
  61. package/dist/unified/unified/index.js.map +1 -0
  62. package/dist/unified/unified/onchain-auction-client.d.ts +90 -0
  63. package/dist/unified/unified/onchain-auction-client.d.ts.map +1 -0
  64. package/dist/unified/unified/onchain-auction-client.js +205 -0
  65. package/dist/unified/unified/onchain-auction-client.js.map +1 -0
  66. package/package.json +1 -1
@@ -0,0 +1,604 @@
1
+ /**
2
+ * Solana Auction Client
3
+ * Stateless client for interacting with the auction program on Solana
4
+ */
5
+ import { PublicKey, Transaction, TransactionInstruction, SystemProgram, SYSVAR_RENT_PUBKEY, } from '@solana/web3.js';
6
+ import { TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from '@solana/spl-token';
7
+ import { ItemType, } from '../types/common.js';
8
+ // PDA version constant (must match Rust program)
9
+ const PDA_VERSION = 1;
10
+ // Seeds for PDAs
11
+ const PROGRAM_STATE_SEED = Buffer.from('auction_state');
12
+ const AUCTION_SEED = Buffer.from('auction');
13
+ const ESCROW_SEED = Buffer.from('escrow');
14
+ const ITEM_SEED = Buffer.from('item');
15
+ const ITEM_VAULT_SEED = Buffer.from('item_vault');
16
+ const FEE_VAULT_SEED = Buffer.from('fee_vault');
17
+ // Instruction discriminators
18
+ var InstructionType;
19
+ (function (InstructionType) {
20
+ InstructionType[InstructionType["Initialize"] = 0] = "Initialize";
21
+ InstructionType[InstructionType["SetPaused"] = 1] = "SetPaused";
22
+ InstructionType[InstructionType["TransferOwnership"] = 2] = "TransferOwnership";
23
+ InstructionType[InstructionType["ClaimFees"] = 3] = "ClaimFees";
24
+ InstructionType[InstructionType["CreateTraditionalAuction"] = 4] = "CreateTraditionalAuction";
25
+ InstructionType[InstructionType["CreateDutchAuction"] = 5] = "CreateDutchAuction";
26
+ InstructionType[InstructionType["CreatePennyAuction"] = 6] = "CreatePennyAuction";
27
+ InstructionType[InstructionType["DepositTokens"] = 7] = "DepositTokens";
28
+ InstructionType[InstructionType["DepositNft"] = 8] = "DepositNft";
29
+ InstructionType[InstructionType["BidTraditional"] = 9] = "BidTraditional";
30
+ InstructionType[InstructionType["BuyDutch"] = 10] = "BuyDutch";
31
+ InstructionType[InstructionType["BidPenny"] = 11] = "BidPenny";
32
+ InstructionType[InstructionType["FinalizeAuction"] = 12] = "FinalizeAuction";
33
+ InstructionType[InstructionType["AcceptBid"] = 13] = "AcceptBid";
34
+ InstructionType[InstructionType["CloseItemVault"] = 14] = "CloseItemVault";
35
+ })(InstructionType || (InstructionType = {}));
36
+ /**
37
+ * Solana Auction Client
38
+ */
39
+ export class SolanaAuctionClient {
40
+ /**
41
+ * Derive PDA for program state
42
+ */
43
+ static deriveProgramStatePDA(programId) {
44
+ return PublicKey.findProgramAddressSync([PROGRAM_STATE_SEED], programId);
45
+ }
46
+ /**
47
+ * Derive PDA for auction account
48
+ */
49
+ static deriveAuctionPDA(programId, auctionId) {
50
+ return PublicKey.findProgramAddressSync([AUCTION_SEED, Buffer.from([PDA_VERSION]), Buffer.from(auctionId)], programId);
51
+ }
52
+ /**
53
+ * Derive PDA for escrow account
54
+ */
55
+ static deriveEscrowPDA(programId, auctionId) {
56
+ return PublicKey.findProgramAddressSync([ESCROW_SEED, Buffer.from([PDA_VERSION]), Buffer.from(auctionId)], programId);
57
+ }
58
+ /**
59
+ * Derive PDA for item account
60
+ */
61
+ static deriveItemPDA(programId, auctionId, itemIndex) {
62
+ return PublicKey.findProgramAddressSync([
63
+ ITEM_SEED,
64
+ Buffer.from([PDA_VERSION]),
65
+ Buffer.from(auctionId),
66
+ Buffer.from([itemIndex]),
67
+ ], programId);
68
+ }
69
+ /**
70
+ * Derive PDA for item vault
71
+ */
72
+ static deriveItemVaultPDA(programId, auctionId, mint) {
73
+ return PublicKey.findProgramAddressSync([
74
+ ITEM_VAULT_SEED,
75
+ Buffer.from([PDA_VERSION]),
76
+ Buffer.from(auctionId),
77
+ mint.toBuffer(),
78
+ ], programId);
79
+ }
80
+ /**
81
+ * Derive PDA for fee vault
82
+ */
83
+ static deriveFeeVaultPDA(programId, paymentMint) {
84
+ return PublicKey.findProgramAddressSync([FEE_VAULT_SEED, Buffer.from([PDA_VERSION]), paymentMint.toBuffer()], programId);
85
+ }
86
+ /**
87
+ * Generate a random auction ID
88
+ */
89
+ static generateAuctionId() {
90
+ const id = new Uint8Array(32);
91
+ crypto.getRandomValues(id);
92
+ return id;
93
+ }
94
+ /**
95
+ * Parse auction data from account
96
+ */
97
+ parseAuction(data) {
98
+ let offset = 0;
99
+ // auction_id: [u8; 32]
100
+ offset += 32;
101
+ // version: u8
102
+ offset += 1;
103
+ // bump: u8
104
+ offset += 1;
105
+ // escrow_bump: u8
106
+ offset += 1;
107
+ // status: u8
108
+ const status = data.readUInt8(offset);
109
+ offset += 1;
110
+ // auction_type_tag: u8
111
+ const auctionTypeTag = data.readUInt8(offset);
112
+ offset += 1;
113
+ // dealer: Pubkey (32 bytes)
114
+ const dealer = new PublicKey(data.subarray(offset, offset + 32)).toBase58();
115
+ offset += 32;
116
+ // current_bidder: Pubkey (32 bytes)
117
+ const highBidder = new PublicKey(data.subarray(offset, offset + 32)).toBase58();
118
+ offset += 32;
119
+ // payment_mint: Pubkey (32 bytes)
120
+ const paymentToken = new PublicKey(data.subarray(offset, offset + 32)).toBase58();
121
+ offset += 32;
122
+ // current_bid: u64
123
+ const currentBid = data.readBigUInt64LE(offset);
124
+ offset += 8;
125
+ // Parse auction_type enum (variable size based on type)
126
+ // This is simplified - actual parsing depends on Borsh serialization
127
+ let params;
128
+ const typeDiscriminator = data.readUInt8(offset);
129
+ offset += 1;
130
+ if (typeDiscriminator === 0) {
131
+ // Traditional
132
+ params = {
133
+ startAmount: data.readBigUInt64LE(offset),
134
+ increment: data.readBigUInt64LE(offset + 8),
135
+ reservePrice: data.readBigUInt64LE(offset + 16),
136
+ acceptanceDeadline: data.readBigInt64LE(offset + 24),
137
+ reserveMet: data.readUInt8(offset + 32) === 1,
138
+ };
139
+ offset += 41;
140
+ }
141
+ else if (typeDiscriminator === 1) {
142
+ // Dutch
143
+ params = {
144
+ startPrice: data.readBigUInt64LE(offset),
145
+ decreaseAmount: data.readBigUInt64LE(offset + 8),
146
+ decreaseInterval: data.readBigInt64LE(offset + 16),
147
+ minimumPrice: data.readBigUInt64LE(offset + 24),
148
+ startTime: data.readBigInt64LE(offset + 32),
149
+ };
150
+ offset += 40;
151
+ }
152
+ else {
153
+ // Penny
154
+ params = {
155
+ incrementAmount: data.readBigUInt64LE(offset),
156
+ timerDuration: data.readBigInt64LE(offset + 8),
157
+ lastBidTime: data.readBigInt64LE(offset + 24),
158
+ totalPaid: data.readBigUInt64LE(offset + 16),
159
+ };
160
+ offset += 40;
161
+ }
162
+ // item_count: u8
163
+ const itemCount = data.readUInt8(offset);
164
+ offset += 1;
165
+ // created_at: i64
166
+ const createdAt = data.readBigInt64LE(offset);
167
+ offset += 8;
168
+ // finalized_at: i64 (skip)
169
+ offset += 8;
170
+ // Get deadline from params
171
+ let deadline;
172
+ if ('deadline' in params) {
173
+ deadline = BigInt(params.deadline);
174
+ }
175
+ else if ('currentDeadline' in params) {
176
+ deadline = BigInt(params.currentDeadline);
177
+ }
178
+ else {
179
+ deadline = 0n;
180
+ }
181
+ const core = {
182
+ dealer,
183
+ auctionType: auctionTypeTag,
184
+ status,
185
+ paymentToken,
186
+ deadline,
187
+ highBidder,
188
+ currentBid,
189
+ createdAt,
190
+ };
191
+ return { core, auctionType: auctionTypeTag, params, itemCount };
192
+ }
193
+ /**
194
+ * Get auction details
195
+ */
196
+ async getAuction(connection, chainInfo, auctionId) {
197
+ const programId = new PublicKey(chainInfo.programId);
198
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
199
+ const accountInfo = await connection.getAccountInfo(auctionPDA);
200
+ if (!accountInfo) {
201
+ throw new Error('Auction not found');
202
+ }
203
+ const { core, itemCount } = this.parseAuction(accountInfo.data);
204
+ // Fetch items
205
+ const items = [];
206
+ for (let i = 0; i < itemCount; i++) {
207
+ const [itemPDA] = SolanaAuctionClient.deriveItemPDA(programId, auctionId, i);
208
+ const itemInfo = await connection.getAccountInfo(itemPDA);
209
+ if (itemInfo) {
210
+ // Parse item data
211
+ const data = itemInfo.data;
212
+ let offset = 32; // skip auction_id
213
+ const mint = new PublicKey(data.subarray(offset, offset + 32)).toBase58();
214
+ offset += 32;
215
+ const amount = data.readBigUInt64LE(offset);
216
+ offset += 8;
217
+ const isNft = data.readUInt8(offset) === 1;
218
+ items.push({
219
+ tokenAddress: mint,
220
+ itemType: isNft ? ItemType.ERC721 : ItemType.ERC20,
221
+ tokenId: 0n, // NFT token ID not tracked in current implementation
222
+ amount,
223
+ });
224
+ }
225
+ }
226
+ return { core, items };
227
+ }
228
+ /**
229
+ * Build instruction data
230
+ */
231
+ buildInstructionData(type, data = Buffer.alloc(0)) {
232
+ // Borsh enum serialization: 4-byte discriminator + data
233
+ const discriminator = Buffer.alloc(1);
234
+ discriminator.writeUInt8(type);
235
+ return Buffer.concat([discriminator, data]);
236
+ }
237
+ /**
238
+ * Create a Traditional auction
239
+ */
240
+ async createTraditionalAuction(wallet, connection, chainInfo, params) {
241
+ const programId = new PublicKey(chainInfo.programId);
242
+ const auctionId = params.auctionId || SolanaAuctionClient.generateAuctionId();
243
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
244
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
245
+ const [escrowPDA] = SolanaAuctionClient.deriveEscrowPDA(programId, auctionId);
246
+ // Build instruction data
247
+ const dataBuffer = Buffer.alloc(32 + 8 + 8 + 8 + 8);
248
+ let offset = 0;
249
+ Buffer.from(auctionId).copy(dataBuffer, offset);
250
+ offset += 32;
251
+ dataBuffer.writeBigUInt64LE(params.startAmount, offset);
252
+ offset += 8;
253
+ dataBuffer.writeBigUInt64LE(params.increment, offset);
254
+ offset += 8;
255
+ dataBuffer.writeBigUInt64LE(params.reservePrice, offset);
256
+ offset += 8;
257
+ dataBuffer.writeBigInt64LE(params.deadline, offset);
258
+ const instruction = new TransactionInstruction({
259
+ programId,
260
+ keys: [
261
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: true },
262
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
263
+ { pubkey: escrowPDA, isSigner: false, isWritable: true },
264
+ { pubkey: statePDA, isSigner: false, isWritable: true },
265
+ { pubkey: params.paymentMint, isSigner: false, isWritable: false },
266
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
267
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
268
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
269
+ ],
270
+ data: this.buildInstructionData(InstructionType.CreateTraditionalAuction, dataBuffer),
271
+ });
272
+ const transaction = new Transaction().add(instruction);
273
+ const { blockhash } = await connection.getLatestBlockhash();
274
+ transaction.recentBlockhash = blockhash;
275
+ transaction.feePayer = wallet.publicKey;
276
+ const signedTx = await wallet.signTransaction(transaction);
277
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
278
+ await connection.confirmTransaction(txHash);
279
+ return {
280
+ txHash,
281
+ solanaAuctionId: auctionId,
282
+ };
283
+ }
284
+ /**
285
+ * Create a Dutch auction
286
+ */
287
+ async createDutchAuction(wallet, connection, chainInfo, params) {
288
+ const programId = new PublicKey(chainInfo.programId);
289
+ const auctionId = params.auctionId || SolanaAuctionClient.generateAuctionId();
290
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
291
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
292
+ const [escrowPDA] = SolanaAuctionClient.deriveEscrowPDA(programId, auctionId);
293
+ // Build instruction data
294
+ const dataBuffer = Buffer.alloc(32 + 8 + 8 + 8 + 8 + 8);
295
+ let offset = 0;
296
+ Buffer.from(auctionId).copy(dataBuffer, offset);
297
+ offset += 32;
298
+ dataBuffer.writeBigUInt64LE(params.startPrice, offset);
299
+ offset += 8;
300
+ dataBuffer.writeBigUInt64LE(params.decreaseAmount, offset);
301
+ offset += 8;
302
+ dataBuffer.writeBigInt64LE(params.interval, offset);
303
+ offset += 8;
304
+ dataBuffer.writeBigUInt64LE(params.minimumPrice, offset);
305
+ offset += 8;
306
+ dataBuffer.writeBigInt64LE(params.deadline, offset);
307
+ const instruction = new TransactionInstruction({
308
+ programId,
309
+ keys: [
310
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: true },
311
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
312
+ { pubkey: escrowPDA, isSigner: false, isWritable: true },
313
+ { pubkey: statePDA, isSigner: false, isWritable: true },
314
+ { pubkey: params.paymentMint, isSigner: false, isWritable: false },
315
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
316
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
317
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
318
+ ],
319
+ data: this.buildInstructionData(InstructionType.CreateDutchAuction, dataBuffer),
320
+ });
321
+ const transaction = new Transaction().add(instruction);
322
+ const { blockhash } = await connection.getLatestBlockhash();
323
+ transaction.recentBlockhash = blockhash;
324
+ transaction.feePayer = wallet.publicKey;
325
+ const signedTx = await wallet.signTransaction(transaction);
326
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
327
+ await connection.confirmTransaction(txHash);
328
+ return {
329
+ txHash,
330
+ solanaAuctionId: auctionId,
331
+ };
332
+ }
333
+ /**
334
+ * Create a Penny auction
335
+ */
336
+ async createPennyAuction(wallet, connection, chainInfo, params) {
337
+ const programId = new PublicKey(chainInfo.programId);
338
+ const auctionId = params.auctionId || SolanaAuctionClient.generateAuctionId();
339
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
340
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
341
+ const [escrowPDA] = SolanaAuctionClient.deriveEscrowPDA(programId, auctionId);
342
+ // Build instruction data
343
+ const dataBuffer = Buffer.alloc(32 + 8 + 8);
344
+ let offset = 0;
345
+ Buffer.from(auctionId).copy(dataBuffer, offset);
346
+ offset += 32;
347
+ dataBuffer.writeBigUInt64LE(params.increment, offset);
348
+ offset += 8;
349
+ dataBuffer.writeBigInt64LE(params.timerDuration, offset);
350
+ const instruction = new TransactionInstruction({
351
+ programId,
352
+ keys: [
353
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: true },
354
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
355
+ { pubkey: escrowPDA, isSigner: false, isWritable: true },
356
+ { pubkey: statePDA, isSigner: false, isWritable: true },
357
+ { pubkey: params.paymentMint, isSigner: false, isWritable: false },
358
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
359
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
360
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
361
+ ],
362
+ data: this.buildInstructionData(InstructionType.CreatePennyAuction, dataBuffer),
363
+ });
364
+ const transaction = new Transaction().add(instruction);
365
+ const { blockhash } = await connection.getLatestBlockhash();
366
+ transaction.recentBlockhash = blockhash;
367
+ transaction.feePayer = wallet.publicKey;
368
+ const signedTx = await wallet.signTransaction(transaction);
369
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
370
+ await connection.confirmTransaction(txHash);
371
+ return {
372
+ txHash,
373
+ solanaAuctionId: auctionId,
374
+ };
375
+ }
376
+ /**
377
+ * Deposit tokens into auction
378
+ */
379
+ async depositTokens(wallet, connection, chainInfo, auctionId, mint, amount, itemIndex) {
380
+ const programId = new PublicKey(chainInfo.programId);
381
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
382
+ const [itemPDA] = SolanaAuctionClient.deriveItemPDA(programId, auctionId, itemIndex);
383
+ const [itemVaultPDA] = SolanaAuctionClient.deriveItemVaultPDA(programId, auctionId, mint);
384
+ const dealerToken = await getAssociatedTokenAddress(mint, wallet.publicKey);
385
+ // Build instruction data
386
+ const dataBuffer = Buffer.alloc(8);
387
+ dataBuffer.writeBigUInt64LE(amount, 0);
388
+ const instruction = new TransactionInstruction({
389
+ programId,
390
+ keys: [
391
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: true },
392
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
393
+ { pubkey: itemPDA, isSigner: false, isWritable: true },
394
+ { pubkey: dealerToken, isSigner: false, isWritable: true },
395
+ { pubkey: itemVaultPDA, isSigner: false, isWritable: true },
396
+ { pubkey: mint, isSigner: false, isWritable: false },
397
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
398
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
399
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
400
+ ],
401
+ data: this.buildInstructionData(InstructionType.DepositTokens, dataBuffer),
402
+ });
403
+ const transaction = new Transaction().add(instruction);
404
+ const { blockhash } = await connection.getLatestBlockhash();
405
+ transaction.recentBlockhash = blockhash;
406
+ transaction.feePayer = wallet.publicKey;
407
+ const signedTx = await wallet.signTransaction(transaction);
408
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
409
+ await connection.confirmTransaction(txHash);
410
+ return { txHash };
411
+ }
412
+ /**
413
+ * Place a bid on a Traditional auction
414
+ */
415
+ async bidTraditional(wallet, connection, chainInfo, auctionId, amount, previousBidderToken) {
416
+ const programId = new PublicKey(chainInfo.programId);
417
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
418
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
419
+ const [escrowPDA] = SolanaAuctionClient.deriveEscrowPDA(programId, auctionId);
420
+ // Get auction to find payment mint
421
+ const { core } = await this.getAuction(connection, chainInfo, auctionId);
422
+ const paymentMint = new PublicKey(core.paymentToken);
423
+ const bidderToken = await getAssociatedTokenAddress(paymentMint, wallet.publicKey);
424
+ // If no previous bidder token provided, use bidder's own token (will be ignored if no refund needed)
425
+ const prevBidderToken = previousBidderToken || bidderToken;
426
+ // Build instruction data
427
+ const dataBuffer = Buffer.alloc(8);
428
+ dataBuffer.writeBigUInt64LE(amount, 0);
429
+ const instruction = new TransactionInstruction({
430
+ programId,
431
+ keys: [
432
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: false },
433
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
434
+ { pubkey: escrowPDA, isSigner: false, isWritable: true },
435
+ { pubkey: bidderToken, isSigner: false, isWritable: true },
436
+ { pubkey: prevBidderToken, isSigner: false, isWritable: true },
437
+ { pubkey: statePDA, isSigner: false, isWritable: false },
438
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
439
+ ],
440
+ data: this.buildInstructionData(InstructionType.BidTraditional, dataBuffer),
441
+ });
442
+ const transaction = new Transaction().add(instruction);
443
+ const { blockhash } = await connection.getLatestBlockhash();
444
+ transaction.recentBlockhash = blockhash;
445
+ transaction.feePayer = wallet.publicKey;
446
+ const signedTx = await wallet.signTransaction(transaction);
447
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
448
+ await connection.confirmTransaction(txHash);
449
+ return { txHash };
450
+ }
451
+ /**
452
+ * Buy at current price in a Dutch auction
453
+ */
454
+ async buyDutch(wallet, connection, chainInfo, auctionId, maxPrice, dealerTokenAccount) {
455
+ const programId = new PublicKey(chainInfo.programId);
456
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
457
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
458
+ // Get auction to find payment mint
459
+ const { core } = await this.getAuction(connection, chainInfo, auctionId);
460
+ const paymentMint = new PublicKey(core.paymentToken);
461
+ const buyerToken = await getAssociatedTokenAddress(paymentMint, wallet.publicKey);
462
+ const [feeVaultPDA] = SolanaAuctionClient.deriveFeeVaultPDA(programId, paymentMint);
463
+ const feeVaultToken = await getAssociatedTokenAddress(paymentMint, feeVaultPDA, true);
464
+ // Build instruction data
465
+ const dataBuffer = Buffer.alloc(8);
466
+ dataBuffer.writeBigUInt64LE(maxPrice, 0);
467
+ const instruction = new TransactionInstruction({
468
+ programId,
469
+ keys: [
470
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: true },
471
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
472
+ { pubkey: buyerToken, isSigner: false, isWritable: true },
473
+ { pubkey: dealerTokenAccount, isSigner: false, isWritable: true },
474
+ { pubkey: feeVaultToken, isSigner: false, isWritable: true },
475
+ { pubkey: feeVaultPDA, isSigner: false, isWritable: true },
476
+ { pubkey: statePDA, isSigner: false, isWritable: false },
477
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
478
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
479
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
480
+ ],
481
+ data: this.buildInstructionData(InstructionType.BuyDutch, dataBuffer),
482
+ });
483
+ const transaction = new Transaction().add(instruction);
484
+ const { blockhash } = await connection.getLatestBlockhash();
485
+ transaction.recentBlockhash = blockhash;
486
+ transaction.feePayer = wallet.publicKey;
487
+ const signedTx = await wallet.signTransaction(transaction);
488
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
489
+ await connection.confirmTransaction(txHash);
490
+ return { txHash };
491
+ }
492
+ /**
493
+ * Place a bid on a Penny auction
494
+ */
495
+ async bidPenny(wallet, connection, chainInfo, auctionId, dealerTokenAccount) {
496
+ const programId = new PublicKey(chainInfo.programId);
497
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
498
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
499
+ // Get auction to find payment mint
500
+ const { core } = await this.getAuction(connection, chainInfo, auctionId);
501
+ const paymentMint = new PublicKey(core.paymentToken);
502
+ const bidderToken = await getAssociatedTokenAddress(paymentMint, wallet.publicKey);
503
+ const [feeVaultPDA] = SolanaAuctionClient.deriveFeeVaultPDA(programId, paymentMint);
504
+ const feeVaultToken = await getAssociatedTokenAddress(paymentMint, feeVaultPDA, true);
505
+ const instruction = new TransactionInstruction({
506
+ programId,
507
+ keys: [
508
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: true },
509
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
510
+ { pubkey: bidderToken, isSigner: false, isWritable: true },
511
+ { pubkey: dealerTokenAccount, isSigner: false, isWritable: true },
512
+ { pubkey: feeVaultToken, isSigner: false, isWritable: true },
513
+ { pubkey: feeVaultPDA, isSigner: false, isWritable: true },
514
+ { pubkey: statePDA, isSigner: false, isWritable: false },
515
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
516
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
517
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
518
+ ],
519
+ data: this.buildInstructionData(InstructionType.BidPenny, Buffer.alloc(0)),
520
+ });
521
+ const transaction = new Transaction().add(instruction);
522
+ const { blockhash } = await connection.getLatestBlockhash();
523
+ transaction.recentBlockhash = blockhash;
524
+ transaction.feePayer = wallet.publicKey;
525
+ const signedTx = await wallet.signTransaction(transaction);
526
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
527
+ await connection.confirmTransaction(txHash);
528
+ return { txHash };
529
+ }
530
+ /**
531
+ * Finalize an auction
532
+ */
533
+ async finalizeAuction(wallet, connection, chainInfo, auctionId, dealerTokenAccount, winnerTokenAccount) {
534
+ const programId = new PublicKey(chainInfo.programId);
535
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
536
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
537
+ const [escrowPDA] = SolanaAuctionClient.deriveEscrowPDA(programId, auctionId);
538
+ // Get auction to find payment mint
539
+ const { core } = await this.getAuction(connection, chainInfo, auctionId);
540
+ const paymentMint = new PublicKey(core.paymentToken);
541
+ const [feeVaultPDA] = SolanaAuctionClient.deriveFeeVaultPDA(programId, paymentMint);
542
+ const feeVaultToken = await getAssociatedTokenAddress(paymentMint, feeVaultPDA, true);
543
+ const instruction = new TransactionInstruction({
544
+ programId,
545
+ keys: [
546
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: false },
547
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
548
+ { pubkey: escrowPDA, isSigner: false, isWritable: true },
549
+ { pubkey: dealerTokenAccount, isSigner: false, isWritable: true },
550
+ { pubkey: winnerTokenAccount, isSigner: false, isWritable: true },
551
+ { pubkey: feeVaultToken, isSigner: false, isWritable: true },
552
+ { pubkey: feeVaultPDA, isSigner: false, isWritable: true },
553
+ { pubkey: statePDA, isSigner: false, isWritable: false },
554
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
555
+ ],
556
+ data: this.buildInstructionData(InstructionType.FinalizeAuction, Buffer.alloc(0)),
557
+ });
558
+ const transaction = new Transaction().add(instruction);
559
+ const { blockhash } = await connection.getLatestBlockhash();
560
+ transaction.recentBlockhash = blockhash;
561
+ transaction.feePayer = wallet.publicKey;
562
+ const signedTx = await wallet.signTransaction(transaction);
563
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
564
+ await connection.confirmTransaction(txHash);
565
+ return { txHash };
566
+ }
567
+ /**
568
+ * Accept bid below reserve (dealer only)
569
+ */
570
+ async acceptBid(wallet, connection, chainInfo, auctionId, dealerTokenAccount) {
571
+ const programId = new PublicKey(chainInfo.programId);
572
+ const [statePDA] = SolanaAuctionClient.deriveProgramStatePDA(programId);
573
+ const [auctionPDA] = SolanaAuctionClient.deriveAuctionPDA(programId, auctionId);
574
+ const [escrowPDA] = SolanaAuctionClient.deriveEscrowPDA(programId, auctionId);
575
+ // Get auction to find payment mint
576
+ const { core } = await this.getAuction(connection, chainInfo, auctionId);
577
+ const paymentMint = new PublicKey(core.paymentToken);
578
+ const [feeVaultPDA] = SolanaAuctionClient.deriveFeeVaultPDA(programId, paymentMint);
579
+ const feeVaultToken = await getAssociatedTokenAddress(paymentMint, feeVaultPDA, true);
580
+ const instruction = new TransactionInstruction({
581
+ programId,
582
+ keys: [
583
+ { pubkey: wallet.publicKey, isSigner: true, isWritable: false },
584
+ { pubkey: auctionPDA, isSigner: false, isWritable: true },
585
+ { pubkey: escrowPDA, isSigner: false, isWritable: true },
586
+ { pubkey: dealerTokenAccount, isSigner: false, isWritable: true },
587
+ { pubkey: feeVaultToken, isSigner: false, isWritable: true },
588
+ { pubkey: feeVaultPDA, isSigner: false, isWritable: true },
589
+ { pubkey: statePDA, isSigner: false, isWritable: false },
590
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
591
+ ],
592
+ data: this.buildInstructionData(InstructionType.AcceptBid, Buffer.alloc(0)),
593
+ });
594
+ const transaction = new Transaction().add(instruction);
595
+ const { blockhash } = await connection.getLatestBlockhash();
596
+ transaction.recentBlockhash = blockhash;
597
+ transaction.feePayer = wallet.publicKey;
598
+ const signedTx = await wallet.signTransaction(transaction);
599
+ const txHash = await connection.sendRawTransaction(signedTx.serialize());
600
+ await connection.confirmTransaction(txHash);
601
+ return { txHash };
602
+ }
603
+ }
604
+ //# sourceMappingURL=solana-auction-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-auction-client.js","sourceRoot":"","sources":["../../../src/solana/solana-auction-client.ts"],"names":[],"mappings":"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"}