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 payerclient.svm.airdrop(client.payer.address, lamports(5_000_000_000n));// Check the balanceconst 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:
| Properti | Deskripsi |
|---|---|
client.payer | TransactionSigner yang Anda instal dengan plugin signer() (juga ditetapkan sebagai client.identity) |
client.identity | Signer wallet yang memiliki akun, token, dan otoritas |
client.svm | Instance LiteSVM langsung untuk manajemen akun, transaksi, dan konfigurasi |
client.rpc | Antarmuka 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.airdrop | Minta SOL dari faucet LiteSVM |
client.getMinimumBalance | Hitung 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 accountclient.svm.airdrop(address, lamports(1_000_000_000n));// Set account state directlyclient.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 blockhashconst 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 callconst { value: accounts } = await client.rpc.getMultipleAccounts([addr1, addr2, addr3]).send();// Get latest blockhashconst { 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 testingclient.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 callawait 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 SVMclient.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?