solana-token-extension-boost
Version:
SDK for Solana Token Extensions with wallet adapter support
116 lines (115 loc) • 5.16 kB
TypeScript
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[];
}>;
}