import type { BN } from "@coral-xyz/anchor"; import { AnchorProvider, Program } from "@coral-xyz/anchor"; import type { Wallet } from "@saberhq/solana-contrib"; import type { Connection, PublicKey, Transaction } from "@solana/web3.js"; import { PROJECT_IDL, PROJECT_PROGRAM } from "./constants"; export const adminInitIdentifierInstruction = ( connection: Connection, wallet: Wallet, params: { identifierId: PublicKey; defaultStaticFee: BN; defaultTreasury: PublicKey; defaultSellerFeeBasisPoint: number; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .adminInitIdentifier({ defaultStaticFee: params.defaultStaticFee, defaultTreasury: params.defaultTreasury, defaultSellerFeeBasisPoint: params.defaultSellerFeeBasisPoint, }) .accounts({ payer: wallet.publicKey, }) .transaction(); }; export const adminUpdateIdentifierInstruction = ( connection: Connection, wallet: Wallet, params: { identifierId: PublicKey; defaultStaticFee: BN; defaultTreasury: PublicKey; defaultSellerFeeBasisPoint: number; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .adminUpdateIdentifier({ defaultStaticFee: params.defaultStaticFee, defaultTreasury: params.defaultTreasury, defaultSellerFeeBasisPoint: params.defaultSellerFeeBasisPoint, }) .accounts({ identifier: params.identifierId, payer: wallet.publicKey, }) .transaction(); }; export const initProjectInstruction = ( connection: Connection, wallet: Wallet, params: { identifierId: PublicKey; projectId: PublicKey; name: string; authorities: PublicKey[]; authorizedTokenCreators?: PublicKey[]; public?: boolean; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .initProject({ authorities: params.authorities, name: params.name, authorizedTokenCreators: params.authorizedTokenCreators || [], public: params.public || false, }) .accounts({ identifier: params.identifierId, payer: wallet.publicKey, }) .transaction(); }; export const updateProjectInstruction = ( connection: Connection, wallet: Wallet, params: { projectId: PublicKey; name: string; authorities: PublicKey[]; authorizedTokenCreators: PublicKey[]; public: boolean; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .updateProject({ name: params.name, authorities: params.authorities, authorizedTokenCreators: params.authorizedTokenCreators, public: params.public || false, }) .accounts({ project: params.projectId, payer: wallet.publicKey, }) .transaction(); }; export const adminUpdateProjectInstruction = ( connection: Connection, wallet: Wallet, params: { projectId: PublicKey; name: string; authorities: PublicKey[]; staticFee: BN; treasury: PublicKey; sellerFeeBasisPoint: number; authorizedTokenCreators: PublicKey[]; public: boolean; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .adminUpdateProject({ name: params.name, authorities: params.authorities, staticFee: params.staticFee, treasury: params.treasury, sellerFeeBasisPoint: params.sellerFeeBasisPoint || 0, authorizedTokenCreators: params.authorizedTokenCreators, public: params.public || false, }) .accounts({ project: params.projectId, payer: wallet.publicKey, }) .transaction(); }; export const closeProjectInstruction = ( connection: Connection, wallet: Wallet, params: { projectId: PublicKey; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .closeProject() .accounts({ project: params.projectId, payer: wallet.publicKey, }) .transaction(); }; export const adminCloseProjectInstruction = ( connection: Connection, wallet: Wallet, params: { projectId: PublicKey; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .adminCloseProject() .accounts({ project: params.projectId, payer: wallet.publicKey, }) .transaction(); }; export const adminCloseIdentifierInstruction = ( connection: Connection, wallet: Wallet, params: { identifierId: PublicKey; } ): Promise => { const provider = new AnchorProvider(connection, wallet, {}); const program = new Program(PROJECT_IDL as PROJECT_PROGRAM, provider); return program.methods .adminCloseIdentifier() .accounts({ identifier: params.identifierId, payer: wallet.publicKey, }) .transaction(); };