Εγκατάσταση
Βεβαιωθείτε ότι έχετε όλες τις απαραίτητες εξαρτήσεις:
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 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);}
Βασικά Πλεονεκτήματα
Πριν από το 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();
Μετά το litesvm-utils
// One line to create a funded accountlet keypair = svm.create_funded_account(lamports).unwrap();
Επισκόπηση Trait
TestHelpers
| Method | Returns | Description |
|---|---|---|
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
| Method | Description |
|---|---|
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
| Method | Returns | Description |
|---|---|---|
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?