UNPKG

solana-token-extension-boost

Version:

SDK for Solana Token Extensions with wallet adapter support

116 lines (115 loc) 5.16 kB
import { Connection, Keypair, PublicKey, Transaction, TransactionSignature, TransactionInstruction } from "@solana/web3.js"; import { TokenMetadata } from "@solana/spl-token-metadata"; import { Token } from "../../core/token"; export interface MetadataConfig { name: string; symbol: string; uri: string; additionalMetadata?: Record<string, string>; } export interface NFTMetadataContent { name?: string; description?: string; image?: string; animation_url?: string; external_url?: string; attributes?: Array<{ trait_type: string; value: string | number; }>; properties?: Record<string, unknown>; [key: string]: unknown; } export type MetadataUpdateResult = { signature: TransactionSignature; metadata: TokenMetadata; }; export type MetadataInstructionResult = { instructions: TransactionInstruction[]; metadata?: TokenMetadata; }; export declare class TokenMetadataToken extends Token { private metadata; constructor(connection: Connection, mint: PublicKey, metadata: MetadataConfig); getMintAddress(): PublicKey; static create(connection: Connection, payer: Keypair, params: { decimals: number; mintAuthority: PublicKey; metadata: MetadataConfig; }): Promise<TokenMetadataToken>; static fromMint(connection: Connection, mint: PublicKey): Promise<TokenMetadataToken | null>; getTokenMetadata(): Promise<TokenMetadata>; updateMetadataField(authority: Keypair, field: string, value: string): Promise<MetadataUpdateResult>; createUpdateMetadataFieldInstruction(updateAuthority: PublicKey, field: string, value: string): TransactionInstruction; removeMetadataField(authority: Keypair, key: string): Promise<MetadataUpdateResult>; createRemoveMetadataFieldInstruction(updateAuthority: PublicKey, key: string, idempotent?: boolean): TransactionInstruction; updateMetadataBatch(authority: Keypair, fields: Record<string, string>): Promise<MetadataUpdateResult>; createUpdateMetadataBatchInstructions(updateAuthority: PublicKey, fields: Record<string, string>): TransactionInstruction[]; getNFTMetadata(): Promise<NFTMetadataContent>; getMetadataConfig(): MetadataConfig; updateMetadataAuthority(currentAuthority: Keypair, newAuthority: PublicKey | null): Promise<TransactionSignature>; createUpdateMetadataAuthorityInstruction(currentAuthority: PublicKey, newAuthority: PublicKey | null): TransactionInstruction; /** * Tạo instruction ưu tiên với mức phí thích hợp * @param priorityLevel Mức độ ưu tiên: 'low', 'medium', 'high' * @returns Instruction phí ưu tiên */ static createPriorityFeeInstruction(priorityLevel?: 'low' | 'medium' | 'high'): TransactionInstruction; /** * Calculate and allocate space for metadata * @param connection - Solana connection * @param mint - Mint address * @param fieldName - Name of the field to add or update * @param fieldValue - Value to set for the field * @param payer - Payer public key * @returns Instruction to allocate additional space (or null if not needed) */ private calculateAndAllocateSpaceForField; /** * Calculate and allocate space efficiently for multiple metadata fields * @param connection - Solana connection * @param mint - Mint address * @param fields - Object with field names and values * @param payer - Payer public key * @returns Instruction to allocate additional space (or null if not needed) */ private calculateAndAllocateSpaceForMultipleFields; /** * Cập nhật metadata với tối ưu hóa * @param connection Kết nối Solana * @param wallet Đối tượng wallet-adapter * @param fieldName Tên trường cần cập nhật * @param fieldValue Giá trị mới * @param options Tùy chọn (phí ưu tiên, skipPreflight...) * @returns Thông tin giao dịch */ updateMetadataOptimized(connection: Connection, wallet: { publicKey: PublicKey; signTransaction: (tx: Transaction) => Promise<Transaction>; }, fieldName: string, fieldValue: string, options?: { priorityLevel?: 'low' | 'medium' | 'high'; skipPreflight?: boolean; allocateStorage?: boolean; }): Promise<{ signature: string; }>; /** * Cập nhật nhiều trường metadata với tối ưu hóa * @param connection Kết nối Solana * @param wallet Đối tượng wallet-adapter * @param fields Object chứa các cặp key-value cần cập nhật * @param options Tùy chọn cấu hình * @returns Mảng chữ ký giao dịch */ updateMetadataBatchOptimized(connection: Connection, wallet: { publicKey: PublicKey; signTransaction: (tx: Transaction) => Promise<Transaction>; }, fields: Record<string, string>, options?: { maxFieldsPerTransaction?: number; priorityLevel?: 'low' | 'medium' | 'high'; skipPreflight?: boolean; allocateStorage?: boolean; }): Promise<{ signatures: string[]; }>; }