Dokumentacja SolanaLiteSVMRustDodatkowe skrzynielitesvm-utils

Szybki start

Instalacja

Upewnij się, że masz wszystkie wymagane zależności:

cargo add --dev litesvm litesvm-utils

Czym jest litesvm-utils?

Crate litesvm-utils dostarcza niezbędne traity pomocnicze i narzędzia, które upraszczają testowanie programów Solana. Redukuje typowy kod szablonowy testów z ponad 30 linii do minimalnego, czytelnego kodu dzięki ergonomicznym API.

Trait TestHelpers

  • Twórz zasilone konta za pomocą jednego wywołania metody
  • Łatwo konfiguruj minty tokenów i token account
  • Wyprowadzaj PDA bez zbędnego kodu szablonowego
  • Zarządzaj slot dla testów opartych na czasie

Trait AssertionHelpers - Sprawdzaj stany kont (istnieje, zamknięte, właściciel) - Weryfikuj salda tokenów i podaż mintów - Sprawdzaj salda SOL - Waliduj długości danych kont

Trait TransactionHelpers - Wykonuj instrukcje z rozbudowaną obsługą wyników - Asertuj sukces lub niepowodzenie transakcji - Sprawdzaj konkretne kody błędów - Analizuj logi transakcji i jednostki obliczeniowe

LiteSVMBuilder

  • Wzorzec fluent builder do konfiguracji środowiska testowego
  • Wdrażaj programy z łańcuchowaniem metod
  • Wygodne statyczne metody fabryczne

Szybki przykład

Oto kompletny przykład pokazujący możliwości 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);
}

Kluczowe zalety

Przed 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();

Po litesvm-utils

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

Przegląd cech

TestHelpers

MethodReturnsDescription
create_funded_account(lamports)Result<Keypair>Tworzy keypair i zasila go środkami
create_funded_accounts(count, lamports)Result<Vec<Keypair>>Tworzy wiele zasilonych keypairs
create_token_mint(authority, decimals)Result<Keypair>Tworzy mint tokenów SPL
create_token_account(mint, owner)Result<Keypair>Tworzy zwykły token account
create_associated_token_account(mint, owner)Result<Pubkey>Tworzy ATA, zwraca jego adres
mint_to(mint, account, authority, amount)Result<()>Mintuje tokeny na konto
derive_pda(seeds, program_id)(Pubkey, u8)Wyznacza PDA z bump seed
get_pda(seeds, program_id)PubkeyZwraca sam adres PDA
get_pda_with_bump(seeds, program_id)(Pubkey, u8)Alias dla derive_pda
get_current_slot()u64Zwraca bieżący slot
advance_slot(slots)()Przesuwa czas o N slotów

AssertionHelpers

MethodDescription
assert_account_exists(pubkey)Rzuca panic, jeśli konto nie istnieje
assert_account_closed(pubkey)Rzuca panic, jeśli konto istnieje i zawiera dane/lamporty
assert_token_balance(account, amount)Weryfikuje saldo tokenów
assert_sol_balance(pubkey, lamports)Weryfikuje saldo SOL
assert_mint_supply(mint, supply)Weryfikuje całkowity supply mintu
assert_account_owner(pubkey, owner)Weryfikuje właściciela konta
assert_account_data_len(pubkey, len)Weryfikuje długość danych

TransactionHelpers

MethodReturnsDescription
send_instruction(ix, signers)Result<TransactionResult, TransactionError>Wysyła pojedynczą instrukcję
send_instructions(ixs, signers)Result<TransactionResult, TransactionError>Wysyła wiele instrukcji w jednej transakcji
send_transaction_result(tx)Result<TransactionResult, TransactionError>Wysyła surową Transaction

Rozwiązywanie problemów

Typowe błędy

BłądPrzyczynaRozwiązanie
AccountNotFoundPróba użycia konta, które nie istniejeNajpierw użyj create_funded_account
InsufficientFundsNiewystarczająca liczba lamports do wykonania transakcjiZwiększ początkową kwotę dofinansowania
OwnerMismatchKonto należy do niewłaściwego programuSprawdź poprawność ID programu
AssertionFailedSaldo lub stan nie zgadza się z oczekiwanymSprawdź logikę testu

Is this page helpful?

Spis treści

Edytuj stronę