Instalasi
Pastikan Anda memiliki semua dependensi yang diperlukan:
cargo add --dev litesvm litesvm-utils
Apa itu litesvm-utils?
Crate litesvm-utils menyediakan trait pembantu dan utilitas penting yang
menyederhanakan pengujian program Solana. Crate ini mengurangi boilerplate
pengujian yang umum dari 30+ baris menjadi kode yang ringkas dan mudah dibaca
melalui API yang ergonomis.
Trait TestHelpers
- Buat akun yang didanai dengan satu pemanggilan metode
- Siapkan mint token dan token account dengan mudah
- Turunkan PDA tanpa boilerplate
- Kelola slot untuk pengujian berbasis waktu
Trait AssertionHelpers - Periksa status akun (ada, ditutup, pemilik) - Verifikasi saldo token dan suplai mint - Periksa saldo SOL - Validasi panjang data akun
Trait TransactionHelpers - Jalankan instruksi dengan penanganan hasil yang lengkap - Pastikan keberhasilan atau kegagalan transaksi - Periksa kode error tertentu - Inspeksi log transaksi dan unit komputasi
LiteSVMBuilder - Pola builder yang fluent untuk pengaturan lingkungan pengujian - Deploy program dengan method chaining - Metode factory statis yang praktis
Contoh Cepat
Berikut adalah contoh lengkap yang menunjukkan kekuatan litesvm-utils:
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers, TransactionHelpers};use solana_sdk::{native_token::LAMPORTS_PER_SOL, system_instruction};#[test]fn test_with_utils() {let mut svm = LiteSVM::new();// Create funded accounts in one linelet alice = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();let bob = svm.create_funded_account(0).unwrap();// Create a token mint easilylet mint = svm.create_token_mint(&alice, 9).unwrap();// Create associated token accounts (returns Pubkey)let alice_ata = svm.create_associated_token_account(&mint.pubkey(), &alice).unwrap();let bob_ata = svm.create_associated_token_account(&mint.pubkey(), &bob).unwrap();// Mint tokenssvm.mint_to(&mint.pubkey(), &alice_ata, &alice, 1000).unwrap();// Assert balancessvm.assert_token_balance(&alice_ata, 1000);svm.assert_token_balance(&bob_ata, 0);// Execute a SOL transfer with rich result handlinglet transfer_ix = system_instruction::transfer(&alice.pubkey(),&bob.pubkey(),LAMPORTS_PER_SOL,);let result = svm.send_instruction(transfer_ix, &[&alice]).unwrap();result.assert_success();// Verify the transfersvm.assert_sol_balance(&bob.pubkey(), LAMPORTS_PER_SOL);}
Manfaat Utama
Sebelum litesvm-utils
// Creating a funded account manuallylet keypair = Keypair::new();let airdrop_tx = Transaction::new_signed_with_payer(&[system_instruction::transfer(&payer.pubkey(),&keypair.pubkey(),lamports,)],Some(&payer.pubkey()),&[&payer],svm.latest_blockhash(),);svm.send_transaction(airdrop_tx).unwrap();
Setelah litesvm-utils
// One line to create a funded accountlet keypair = svm.create_funded_account(lamports).unwrap();
Ringkasan Trait
TestHelpers
| Method | Returns | Description |
|---|---|---|
create_funded_account(lamports) | Result<Keypair> | Membuat keypair dan mendanainya |
create_funded_accounts(count, lamports) | Result<Vec<Keypair>> | Membuat beberapa keypair yang didanai |
create_token_mint(authority, decimals) | Result<Keypair> | Membuat mint token SPL |
create_token_account(mint, owner) | Result<Keypair> | Membuat token account biasa |
create_associated_token_account(mint, owner) | Result<Pubkey> | Membuat ATA, mengembalikan alamatnya |
mint_to(mint, account, authority, amount) | Result<()> | Mencetak token ke suatu akun |
derive_pda(seeds, program_id) | (Pubkey, u8) | Menurunkan PDA dengan bump seed |
get_pda(seeds, program_id) | Pubkey | Mendapatkan hanya alamat PDA |
get_pda_with_bump(seeds, program_id) | (Pubkey, u8) | Alias untuk derive_pda |
get_current_slot() | u64 | Mengembalikan slot saat ini |
advance_slot(slots) | () | Memajukan waktu sebanyak N slot |
AssertionHelpers
| Method | Description |
|---|---|
assert_account_exists(pubkey) | Panik jika akun tidak ada |
assert_account_closed(pubkey) | Panik jika akun ada dan memiliki data/lamports |
assert_token_balance(account, amount) | Memverifikasi saldo token |
assert_sol_balance(pubkey, lamports) | Memverifikasi saldo SOL |
assert_mint_supply(mint, supply) | Memverifikasi total suplai mint |
assert_account_owner(pubkey, owner) | Memverifikasi pemilik akun |
assert_account_data_len(pubkey, len) | Memverifikasi panjang data |
TransactionHelpers
| Method | Returns | Description |
|---|---|---|
send_instruction(ix, signers) | Result<TransactionResult, TransactionError> | Mengirim satu instruksi |
send_instructions(ixs, signers) | Result<TransactionResult, TransactionError> | Mengirim beberapa instruksi dalam satu tx |
send_transaction_result(tx) | Result<TransactionResult, TransactionError> | Mengirim Transaction mentah |
Pemecahan Masalah
Kesalahan Umum
| Kesalahan | Penyebab | Solusi |
|---|---|---|
AccountNotFound | Mencoba menggunakan akun yang tidak ada | Gunakan create_funded_account terlebih dahulu |
InsufficientFunds | Lamport tidak cukup untuk transaksi | Tingkatkan jumlah pendanaan awal |
OwnerMismatch | Akun dimiliki oleh program yang salah | Verifikasi ID program yang benar |
AssertionFailed | Saldo atau status tidak sesuai yang diharapkan | Periksa logika pengujian Anda |
Is this page helpful?