Memulai

Suite pengujian Solana yang menjalankan solana-test-validator membutuhkan waktu beberapa detik per pengujian — Anda menunggu proses startup, koneksi RPC, dan round-trip jaringan. LiteSVM menjalankan pengujian yang sama dalam milidetik. Tanpa proses eksternal, tanpa jaringan, semua dalam memori di dalam test runner Anda.

Diuji terhadap: @solana/kit@6.8.0, @solana/kit-plugin-litesvm@0.10.0, @solana/kit-plugin-signer@0.10.0, @solana-program/system@0.12.0, @solana-program/token@0.13.0. Paket plugin ini masih baru dan berkembang dengan cepat — jika Anda mengalami ketidakcocokan versi, periksa testing/package.json untuk versi persis yang digunakan oleh dokumentasi dan suite pengujian.

Anda merakit klien Kit dari @solana/kit dengan menginstal plugin menggunakan .use(): plugin signer (@solana/kit-plugin-signer), plugin LiteSVM (@solana/kit-plugin-litesvm), dan plugin program apa pun yang Anda butuhkan. Hasilnya mengekspos client.sendTransaction(), client.rpc, dan akses langsung ke status akun, clock, dan sysvar — semua tanpa meninggalkan proses Anda.

Mulai Cepat

Instal Dependensi

pnpm add @solana/kit @solana/kit-plugin-litesvm @solana/kit-plugin-signer @solana-program/system

Buat Klien Anda

import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
// Payer first, then the LiteSVM transport.
const mySigner = await generateKeyPairSigner();
const client = createClient().use(signer(mySigner)).use(litesvm());
// Fund the payer
client.svm.airdrop(client.payer.address, lamports(5_000_000_000n));
// Check the balance
const balance = client.svm.getBalance(client.payer.address);
console.log("Balance:", balance, "lamports");

createClient() mengembalikan shell kosong — setiap .use(plugin) menambahkan kemampuan ke dalamnya. Plugin signer() harus dipasang sebelum litesvm() karena plugin transport memerlukan payer untuk dilampirkan. signer(mySigner) adalah singkatan untuk menginstal keypair yang sama sebagai payer dan identity — gunakan payer() atau identity() dari paket yang sama jika Anda ingin memisahkan peran tersebut. Urutan ini sama berlakunya untuk solanaRpc() saat Anda menggunakan jaringan nyata.

Lebih suka pengaturan satu baris untuk eksperimen cepat? Bundle litesvm() sudah mencakup airdrop, sehingga Anda dapat merangkai .use(generatedPayerWithSol(lamports(10_000_000_000n))) dari @solana/kit-plugin-signer untuk membuat dan mendanai payer secara otomatis.

Memahami Klien

Setelah .use(signer(...)).use(litesvm()), klien mengekspos:

PropertiDeskripsi
client.payerTransactionSigner yang Anda instal dengan plugin signer() (juga ditetapkan sebagai client.identity)
client.identitySigner wallet yang memiliki akun, token, dan otoritas
client.svmInstance LiteSVM langsung untuk manajemen akun, transaksi, dan konfigurasi
client.rpcAntarmuka RPC yang kompatibel dengan Kit (subset: getAccountInfo, getBalance, getEpochSchedule, getLatestBlockhash, getMinimumBalanceForRentExemption, getMultipleAccounts, getSlot, requestAirdrop)
client.sendTransaction(s)Rencanakan, tandatangani, dan kirim instruksi sebagai transaksi
client.airdropMinta SOL dari faucet LiteSVM
client.getMinimumBalanceHitung minimum lamport untuk pembebasan rent

Menggunakan client.svm

Akses langsung ke LiteSVM untuk:

  • Manajemen akun (setAccount, getAccount, airdrop)
  • Eksekusi transaksi (sendTransaction, simulateTransaction)
  • Konfigurasi (withSigverify, withBlockhashCheck, dll.)
  • Manipulasi waktu (warpToSlot, getClock)
import { address, lamports } from "@solana/kit";
// Fund an account
client.svm.airdrop(address, lamports(1_000_000_000n));
// Set account state directly
client.svm.setAccount({
address: myAddress,
data: new Uint8Array([1, 2, 3]),
executable: false,
lamports: lamports(1_000_000n),
programAddress: address("11111111111111111111111111111111"),
space: 3n
});
// Get the latest blockhash
const blockhash = client.svm.latestBlockhash();

Menggunakan client.rpc

Antarmuka RPC yang kompatibel dengan Kit untuk operasi standar:

// Get account info (returns base64-encoded data)
const { value: account } = await client.rpc.getAccountInfo(address).send();
// Get multiple accounts in one call
const { value: accounts } = await client.rpc
.getMultipleAccounts([addr1, addr2, addr3])
.send();
// Get latest blockhash
const { value: blockhash } = await client.rpc.getLatestBlockhash().send();

Lapisan RPC hanya mendukung enkoding base64. Meminta enkoding lain akan menghasilkan error.

Konfigurasi

Konfigurasikan LiteSVM menggunakan metode builder pada client.svm:

const client = createClient().use(signer(mySigner)).use(litesvm());
// Configure for testing
client.svm
.withSigverify(false) // Skip signature verification
.withBlockhashCheck(false) // Skip blockhash validation
.withSysvars() // Enable Clock, Rent, etc.
.withBuiltins() // Enable ed25519, secp256k1
.withTransactionHistory(100n); // Store transaction history

Mengirim Transaksi

Tambahkan plugin program setelah transport — plugin tersebut menggantungkan builder instruksi pada klien sehingga Anda tidak perlu menyentuh TransactionMessage mentah:

import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
import { systemProgram } from "@solana-program/system";
const mySigner = await generateKeyPairSigner();
const client = createClient()
.use(signer(mySigner))
.use(litesvm())
.use(systemProgram());
client.svm.airdrop(client.payer.address, lamports(10_000_000_000n));
const recipient = await generateKeyPairSigner();
// Build and send in one call
await client.system.instructions
.transferSol({
source: client.payer,
destination: recipient.address,
amount: lamports(1_000_000_000n)
})
.sendTransaction();

Alur SVM → RPC

Anda dapat mengatur state melalui SVM dan membacanya melalui RPC:

import { address, lamports } from "@solana/kit";
// Set account directly via SVM
client.svm.setAccount({
address: myAddress,
data: new Uint8Array([0xde, 0xad, 0xbe, 0xef]),
executable: false,
lamports: lamports(1_000_000n),
programAddress: address("11111111111111111111111111111111"),
space: 4n
});
// Read via RPC (returns base64-encoded data)
const { value } = await client.rpc.getAccountInfo(myAddress).send();
console.log("Data:", value?.data); // ['3q2+7w==', 'base64']

Langkah Selanjutnya

Ini mencakup klien inti — membuat akun, mengirim instruksi, dan membaca state. Jika pengujian Anda melibatkan token SPL (mint, ATA, transfer), panduan pengujian token menunjukkan bagaimana plugin tokenProgram() meringkas ~40 baris setup menjadi 3 panggilan. Untuk referensi API lengkap, lihat dokumentasi API.

Is this page helpful?

Daftar Isi

Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.