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
TypeScript
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>;
}