Τεκμηρίωση SolanaLiteSVMRustΕπιπλέον Κιβώτιαlitesvm-utils

Γρήγορη Εκκίνηση

Εγκατάσταση

Βεβαιωθείτε ότι έχετε όλες τις απαραίτητες εξαρτήσεις:

cargo add --dev litesvm litesvm-utils

Τι είναι το litesvm-utils;

Το crate litesvm-utils παρέχει βασικά βοηθητικά traits και εργαλεία που απλοποιούν τον έλεγχο προγραμμάτων Solana. Μειώνει τον κοινό boilerplate κώδικα δοκιμών από 30+ γραμμές σε ελάχιστο, ευανάγνωστο κώδικα μέσω εργονομικών APIs.

Trait TestHelpers

  • Δημιουργήστε χρηματοδοτούμενους λογαριασμούς με μία μόνο κλήση μεθόδου
  • Ρυθμίστε εύκολα token mints και token accounts
  • Εξάγετε PDAs χωρίς boilerplate
  • Διαχειριστείτε slots για δοκιμές βάσει χρόνου

Trait AssertionHelpers - Ελέγξτε καταστάσεις λογαριασμών (ύπαρξη, κλείσιμο, κάτοχος) - Επαληθεύστε υπόλοιπα token και προσφορές mint - Ελέγξτε υπόλοιπα SOL - Επικυρώστε μήκη δεδομένων λογαριασμών

Trait TransactionHelpers - Εκτελέστε εντολές με πλούσιο χειρισμό αποτελεσμάτων - Βεβαιωθείτε για επιτυχία ή αποτυχία συναλλαγής - Ελέγξτε για συγκεκριμένους κωδικούς σφάλματος - Επιθεωρήστε αρχεία καταγραφής συναλλαγών και μονάδες υπολογισμού

LiteSVMBuilder

  • Μοτίβο fluent builder για ρύθμιση περιβάλλοντος δοκιμών
  • Ανάπτυξη προγραμμάτων με αλυσίδωση μεθόδων
  • Εύχρηστες στατικές εργοστασιακές μέθοδοι

Γρήγορο Παράδειγμα

Ακολουθεί ένα πλήρες παράδειγμα που αναδεικνύει τη δύναμη του 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 line
let alice = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();
let bob = svm.create_funded_account(0).unwrap();
// Create a token mint easily
let 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 tokens
svm.mint_to(&mint.pubkey(), &alice_ata, &alice, 1000).unwrap();
// Assert balances
svm.assert_token_balance(&alice_ata, 1000);
svm.assert_token_balance(&bob_ata, 0);
// Execute a SOL transfer with rich result handling
let 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 transfer
svm.assert_sol_balance(&bob.pubkey(), LAMPORTS_PER_SOL);
}

Βασικά Πλεονεκτήματα

Πριν από το litesvm-utils

// Creating a funded account manually
let 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();

Μετά το litesvm-utils

// One line to create a funded account
let keypair = svm.create_funded_account(lamports).unwrap();

Επισκόπηση Trait

TestHelpers

MethodReturnsDescription
create_funded_account(lamports)Result<Keypair>Δημιουργεί ένα keypair και το χρηματοδοτεί
create_funded_accounts(count, lamports)Result<Vec<Keypair>>Δημιουργεί πολλαπλά χρηματοδοτημένα keypairs
create_token_mint(authority, decimals)Result<Keypair>Δημιουργεί ένα SPL token mint
create_token_account(mint, owner)Result<Keypair>Δημιουργεί ένα κανονικό token account
create_associated_token_account(mint, owner)Result<Pubkey>Δημιουργεί ένα ATA, επιστρέφει τη διεύθυνσή του
mint_to(mint, account, authority, amount)Result<()>Κόβει tokens σε έναν λογαριασμό
derive_pda(seeds, program_id)(Pubkey, u8)Παράγει ένα PDA με bump seed
get_pda(seeds, program_id)PubkeyΕπιστρέφει μόνο τη διεύθυνση PDA
get_pda_with_bump(seeds, program_id)(Pubkey, u8)Ψευδώνυμο για derive_pda
get_current_slot()u64Επιστρέφει το τρέχον slot
advance_slot(slots)()Προχωράει τον χρόνο κατά N slots

AssertionHelpers

MethodDescription
assert_account_exists(pubkey)Προκαλεί panic αν ο λογαριασμός δεν υπάρχει
assert_account_closed(pubkey)Προκαλεί panic αν ο λογαριασμός υπάρχει και έχει δεδομένα/lamports
assert_token_balance(account, amount)Επαληθεύει υπόλοιπο token
assert_sol_balance(pubkey, lamports)Επαληθεύει υπόλοιπο SOL
assert_mint_supply(mint, supply)Επαληθεύει τη συνολική προσφορά του mint
assert_account_owner(pubkey, owner)Επαληθεύει τον ιδιοκτήτη λογαριασμού
assert_account_data_len(pubkey, len)Επαληθεύει το μήκος δεδομένων

TransactionHelpers

MethodReturnsDescription
send_instruction(ix, signers)Result<TransactionResult, TransactionError>Αποστέλλει μία μόνο εντολή
send_instructions(ixs, signers)Result<TransactionResult, TransactionError>Αποστέλλει πολλαπλές εντολές σε μία tx
send_transaction_result(tx)Result<TransactionResult, TransactionError>Αποστέλλει ένα ακατέργαστο Transaction

Αντιμετώπιση Προβλημάτων

Συνηθισμένα Σφάλματα

ΣφάλμαΑιτίαΛύση
AccountNotFoundΠροσπάθεια χρήσης λογαριασμού που δεν υπάρχειΧρησιμοποιήστε πρώτα το create_funded_account
InsufficientFundsΔεν υπάρχουν αρκετά lamports για τη συναλλαγήΑυξήστε το αρχικό ποσό χρηματοδότησης
OwnerMismatchΟ λογαριασμός ανήκει σε λάθος πρόγραμμαΕπαληθεύστε το σωστό αναγνωριστικό προγράμματος
AssertionFailedΤο υπόλοιπο ή η κατάσταση δεν αντιστοιχεί στο αναμενόμενοΕλέγξτε τη λογική των δοκιμών σας

Is this page helpful?

© 2026 Ίδρυμα Solana. Με επιφύλαξη παντός δικαιώματος.