UNPKG

jito-distributor-sdk

Version:

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

141 lines (140 loc) 5.69 kB
import { PublicKey } 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>; /** * Claims tokens from the distributor * @param args ClaimArgs * @returns Transaction signature */ claim(args: ClaimArgs): Promise<string>; /** * Claims locked tokens after vesting period * @param args ClaimLockedArgs * @returns Transaction signature */ claimLocked(args: ClaimLockedArgs): Promise<string>; /** * 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>; /** * 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>; /** * 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>; /** * 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>>; }