@deserialize/auction-sdk
Version:
An SDK for Auction on SVMs
109 lines (90 loc) • 4.62 kB
text/typescript
import { PublicKey, SystemProgram, Transaction, TransactionInstruction } from "@solana/web3.js";
import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
import * as anchor from "@coral-xyz/anchor";
import ProgramLoader from "./ProgramLoader";
import { AuctionManager as AuctionManagerType } from "../types/auction-manager";
/**
* AuctionManager
*
* @description This is the main contract for the auction. It is responsible for managing the auction, including creating and updating the auction, and executing bids.
*
* - create a new auction manager
* - get an auction manager
* - fetch many auction managers
* - get all auction managers
*/
export default class AuctionManager {
public constructor(
protected readonly programLoader: ProgramLoader
) {
}
/**
* Create a new auction manager
* @param {PublicKey} nft - The NFT to create the auction manager for
* @param {PublicKey} creator - The creator of the auction manager
* @param {PublicKey} tokenProgramId - The program ID of the nft
* @returns {TransactionInstruction} The transaction instruction
*/
public async create(nft: PublicKey, creator: PublicKey, tokenProgramId: PublicKey): Promise<TransactionInstruction> {
try {
// const seeds1 = [anchor.utils.bytes.utf8.encode("deserialize"), Uint8Array.from(this.programLoader.wallet.publicKey.toBuffer())]
// const [applicationState, applicationStateBump] = PublicKey.findProgramAddressSync(seeds1, this.programLoader.program.programId);
// console.log("[*] Application state: ", applicationState);
// console.log("[*] Application state bump: ", applicationStateBump);
const seeds2 = [anchor.utils.bytes.utf8.encode("auction_manager"), Uint8Array.from(nft.toBuffer()), Uint8Array.from(creator.toBuffer())];
const [auctionManager, auctionManagerBump] = PublicKey.findProgramAddressSync(seeds2, this.programLoader.program.programId);
console.log("[*] Auction manager: ", auctionManager);
console.log("[*] Auction manager bump: ", auctionManagerBump);
const inx = await this.programLoader.program.methods
.createAuctionManager()
.accounts({
applicationState: this.programLoader.applicationState,
nft,
systemProgram: SystemProgram.programId,
auctionManager,
tokenProgram: tokenProgramId,
rent: anchor.web3.SYSVAR_RENT_PUBKEY,
user: creator
})
.instruction();
return inx;
} catch (e: any) {
console.error(e);
throw new Error(`Failed to create auction: ${e.message}`);
}
}
/**
* Get an auction manager
* @param {PublicKey} managerPubkey - The public key of the auction manager
* @returns {AuctionManagerType} The auction manager account
*/
public async get(managerPubkey: PublicKey): Promise<AuctionManagerType> {
try {
const auctionManagerAccount: AuctionManagerType = await this.programLoader.program.account.auctionManager.fetch(managerPubkey);
console.log("[*] Auction manager account: ", JSON.stringify(auctionManagerAccount, null, 2));
return auctionManagerAccount;
} catch (e: any) {
console.error(e);
throw new Error(`Failed to get auction manager: ${e.message}`);
}
}
/**
* Get all auction managers
* @returns {AuctionManagerType[]} The auction manager accounts
*/
public async getAll(): Promise<AuctionManagerType[]> {
let auctionManagerAccounts = await this.programLoader.program.account.auctionManager.all();
console.log("[*] Auction manager accounts: ", JSON.stringify(auctionManagerAccounts, null, 2));
return auctionManagerAccounts as unknown as AuctionManagerType[];
}
/**
* Fetch many auction managers
* @param {PublicKey[]} managerPubkeys - The public keys of the auction managers
* @returns {AuctionManagerType[]} The auction manager accounts
*/
public async fetchMany(managerPubkeys: PublicKey[]): Promise<AuctionManagerType[]> {
let auctionManagerAccounts = await this.programLoader.program.account.auctionManager.fetchMultiple(managerPubkeys);
console.log("[*] Auction manager accounts: ", JSON.stringify(auctionManagerAccounts, null, 2));
return auctionManagerAccounts as unknown as AuctionManagerType[];
}
}