طرق لإدارة الحسابات والأرصدة وتعيين حالة الحساب.
airdrop
airdrop(address: Address, lamports: Lamports): TransactionMetadata | FailedTransactionMetadata | null
تمويل حساب بـ lamport.
import { lamports } from "@solana/kit";// Airdrop 5 SOLconst result = client.svm.airdrop(account.address, lamports(5_000_000_000n));if (result) {// Note: Result properties are getter functionsconsole.log("Compute units:", result.computeUnitsConsumed());}
setAccount
setAccount(account: EncodedAccount): LiteSVM
تعيين حالة الحساب مباشرةً دون معاملة.
import { address, lamports } from "@solana/kit";client.svm.setAccount({address: myAddress,data: new Uint8Array([1, 2, 3, 4]),executable: false,lamports: lamports(1_000_000n),programAddress: address("11111111111111111111111111111111"),space: 4n});
خصائص EncodedAccount
| الخاصية | النوع | الوصف |
|---|---|---|
address | Address | المفتاح العام pubkey للحساب |
data | Uint8Array | بايتات بيانات الحساب |
executable | boolean | ما إذا كان الحساب قابلاً للتنفيذ |
lamports | Lamports | رصيد SOL |
programAddress | Address | البرنامج المالك |
space | bigint | حجم البيانات بالبايت |
getAccount
getAccount(address: Address): MaybeEncodedAccount
استرداد بيانات الحساب.
const account = client.svm.getAccount(myAddress);if (account.exists) {console.log("Address:", account.address);console.log("Lamports:", account.lamports);console.log("Owner:", account.programAddress);console.log("Data:", account.data);console.log("Executable:", account.executable);}
getBalance
getBalance(address: Address): Lamports | null
الحصول على رصيد SOL للحساب. يُعيد null إذا كان الحساب غير موجود.
const balance = client.svm.getBalance(account.address);if (balance !== null) {console.log("Balance:", balance, "lamports");console.log("Balance:", Number(balance) / 1e9, "SOL");} else {console.log("Account does not exist");}
minimumBalanceForRentExemption
minimumBalanceForRentExemption(dataLen: bigint): bigint
احتساب الحد الأدنى من lamport المطلوبة للإعفاء من rent.
const dataSize = 100n;const minBalance = client.svm.minimumBalanceForRentExemption(dataSize);console.log(`Rent-exempt minimum for ${dataSize} bytes:`,minBalance,"lamports");// Use when setting up accountsclient.svm.setAccount({address: myAddress,data: new Uint8Array(Number(dataSize)),executable: false,lamports: lamports(minBalance),programAddress: programId,space: dataSize});
إدارة البرامج
addProgram
addProgram(programId: Address, programBytes: Uint8Array): LiteSVM
تحميل برنامج من بايتات.
const programBytes = fs.readFileSync("path/to/program.so");client.svm.addProgram(programId, programBytes);
addProgramFromFile
addProgramFromFile(programId: Address, path: string): LiteSVM
تحميل برنامج من مسار ملف .so.
import { generateKeyPairSigner } from "@solana/kit";const programId = await generateKeyPairSigner().then((s) => s.address);client.svm.addProgramFromFile(programId,"/path/to/target/deploy/my_program.so");
إعداد الحسابات دفعةً واحدة
لأغراض الاختبار، يمكنك إعداد حسابات متعددة بكفاءة:
// Set up multiple test accountsconst accounts = await Promise.all(Array.from({ length: 10 }, () => generateKeyPairSigner()));for (const [index, account] of accounts.entries()) {client.svm.setAccount({address: account.address,data: new Uint8Array([index]),executable: false,lamports: lamports(1_000_000n),programAddress: address("11111111111111111111111111111111"),space: 1n});}
يُعدّ استخدام setAccount أسرع من airdrop لإعداد الحسابات بالجملة، إذ
لا ينفّذ معاملات.
Is this page helpful?