UNPKG

jito-distributor-sdk

Version:

TypeScript SDK for JITO Merkle Distributor with production-ready versioning and double-hashing support

194 lines (193 loc) 8.19 kB
import { PublicKey, TransactionInstruction, Transaction } from '@solana/web3.js'; import { Program, AnchorProvider } from '@coral-xyz/anchor'; import { MerkleDistributor as MerkleDistributorAccount, ClaimStatus, CreateDistributorArgs, ClaimArgs, ClaimLockedArgs } from './types'; /** * MerkleDistributor SDK class providing a clean interface to the Anchor program */ export declare class MerkleDistributor { readonly program: Program; readonly provider: AnchorProvider; readonly programId: PublicKey; constructor(provider: AnchorProvider, programId?: PublicKey); /** * Creates a new merkle distributor * @param args CreateDistributorArgs * @returns Transaction signature */ createDistributor(args: CreateDistributorArgs): Promise<string>; /** * Creates a transaction instruction for creating a new merkle distributor * @param args CreateDistributorArgs * @returns TransactionInstruction */ createDistributorInstruction(args: CreateDistributorArgs): Promise<TransactionInstruction>; /** * Claims tokens from the distributor * @param args ClaimArgs * @returns Transaction signature */ claim(args: ClaimArgs): Promise<string>; /** * Creates a transaction instruction for claiming tokens * @param args ClaimArgs * @returns TransactionInstruction */ claimInstruction(args: ClaimArgs): Promise<TransactionInstruction>; /** * Claims locked tokens after vesting period * @param args ClaimLockedArgs * @returns Transaction signature */ claimLocked(args: ClaimLockedArgs): Promise<string>; /** * Creates a transaction instruction for claiming locked tokens * @param args ClaimLockedArgs * @returns TransactionInstruction */ claimLockedInstruction(args: ClaimLockedArgs): Promise<TransactionInstruction>; /** * Claws back remaining tokens to the clawback receiver * @param distributor Distributor public key * @param claimant Claimant public key (can be anyone after clawback period) * @returns Transaction signature */ clawback(distributor: PublicKey, claimant: PublicKey): Promise<string>; /** * Creates a transaction instruction for clawing back tokens * @param distributor Distributor public key * @param claimant Claimant public key (can be anyone after clawback period) * @returns TransactionInstruction */ clawbackInstruction(distributor: PublicKey, claimant: PublicKey): Promise<TransactionInstruction>; /** * Sets a new admin for the distributor * @param distributor Distributor public key * @param currentAdmin Current admin public key * @param newAdmin New admin public key * @returns Transaction signature */ setAdmin(distributor: PublicKey, currentAdmin: PublicKey, newAdmin: PublicKey): Promise<string>; /** * Creates a transaction instruction for setting a new admin * @param distributor Distributor public key * @param currentAdmin Current admin public key * @param newAdmin New admin public key * @returns TransactionInstruction */ setAdminInstruction(distributor: PublicKey, currentAdmin: PublicKey, newAdmin: PublicKey): Promise<TransactionInstruction>; /** * Sets a new clawback receiver for the distributor * @param distributor Distributor public key * @param newClawbackReceiver New clawback receiver public key * @param admin Admin public key * @returns Transaction signature */ setClawbackReceiver(distributor: PublicKey, newClawbackReceiver: PublicKey, admin: PublicKey): Promise<string>; /** * Creates a transaction instruction for setting a new clawback receiver * @param distributor Distributor public key * @param newClawbackReceiver New clawback receiver public key * @param admin Admin public key * @returns TransactionInstruction */ setClawbackReceiverInstruction(distributor: PublicKey, newClawbackReceiver: PublicKey, admin: PublicKey): Promise<TransactionInstruction>; /** * Fetches a distributor account * @param distributor Distributor public key * @returns MerkleDistributor account data */ getDistributor(distributor: PublicKey): Promise<MerkleDistributorAccount>; /** * Fetches a claim status account * @param claimStatus Claim status public key * @returns ClaimStatus account data */ getClaimStatus(claimStatus: PublicKey): Promise<ClaimStatus>; /** * Fetches claim status for a specific claimant and distributor * @param claimant Claimant public key * @param distributor Distributor public key * @returns ClaimStatus account data or null if not found */ getClaimStatusForClaimant(claimant: PublicKey, distributor: PublicKey): Promise<ClaimStatus | null>; /** * Checks if a claimant has already claimed * @param claimant Claimant public key * @param distributor Distributor public key * @returns Boolean indicating if tokens have been claimed */ hasClaimed(claimant: PublicKey, distributor: PublicKey): Promise<boolean>; /** * Queries all existing distributors for a given mint * @param mint The mint to query distributors for * @param maxVersion Maximum version to check (default: 100) * @returns Map of version to distributor info */ queryDistributorsForMint(mint: PublicKey, maxVersion?: number): Promise<Map<bigint, { pda: PublicKey; account: MerkleDistributorAccount; version: bigint; }>>; /** * Finds the next available version for a mint * @param mint The mint to find next version for * @param startFrom Starting version to check from (default: 0) * @param maxCheck Maximum version to check (default: 1000) * @returns Next available version number */ findNextAvailableVersion(mint: PublicKey, startFrom?: bigint, maxCheck?: number): Promise<bigint>; /** * Gets a comprehensive overview of distributions for a mint * @param mint The mint to get overview for * @param maxVersion Maximum version to check (default: 100) * @returns Distribution overview with used versions, next available, and stats */ getDistributionOverview(mint: PublicKey, maxVersion?: number): Promise<{ mint: PublicKey; usedVersions: bigint[]; nextAvailableVersion: bigint; totalDistributors: number; totalClaimed: bigint; totalUnclaimed: bigint; distributors: Map<bigint, { pda: PublicKey; account: MerkleDistributorAccount; version: bigint; claimedAmount: bigint; remainingAmount: bigint; }>; }>; /** * Checks if a version is available for a mint * @param mint The mint to check * @param version The version to check * @returns Boolean indicating if version is available */ isVersionAvailable(mint: PublicKey, version: bigint): Promise<boolean>; /** * Gets the PDA for a specific mint and version * @param mint The mint * @param version The version * @returns [PDA, bump] tuple */ getDistributorPDA(mint: PublicKey, version: bigint): [PublicKey, number]; /** * Batch check multiple versions for availability * @param mint The mint to check versions for * @param versions Array of versions to check * @returns Map of version to availability status */ batchCheckVersions(mint: PublicKey, versions: bigint[]): Promise<Map<bigint, boolean>>; /** * Builds a transaction with multiple instructions * @param instructions Array of transaction instructions to bundle * @returns Transaction ready to be signed and sent */ buildTransaction(instructions: TransactionInstruction[]): Transaction; /** * Sends and confirms a transaction with multiple instructions * @param instructions Array of transaction instructions to bundle and send * @returns Transaction signature */ sendTransaction(instructions: TransactionInstruction[]): Promise<string>; }