为什么选择 LiteSVM

概述

将 LiteSVM 视为在你的测试函数内部运行的 Solana 虚拟机。它不是一个独立的进程,也不是网络服务——它只是代码中的一个库调用。

传统测试方式

// Traditional approach - slow and complex
let validator = TestValidator::new().await; // Starts separate process
let client = RpcClient::new(validator.url()); // Network connection
// Every operation is async and goes over network
let balance = client.get_balance(&pubkey).await?;
tokio::time::sleep(Duration::from_secs(1)).await; // Wait for confirmation

LiteSVM 测试方式

// LiteSVM - fast and simple
let mut svm = LiteSVM::new(); // Just a struct in memory
// Everything is synchronous and immediate
let balance = svm.get_balance(&pubkey).unwrap_or(0);

核心原则

1. 一切皆同步

无需 async,无需 await,无需延迟:

// Send transaction and check result immediately
svm.send_transaction(tx).unwrap();
let balance = svm.get_balance(&account).unwrap(); // Already updated!

2. 直接状态操控

// Create any account with any data
svm.set_account(pubkey, Account {
lamports: 1_000_000_000,
data: vec![1, 2, 3, 4],
owner: program_id,
executable: false,
rent_epoch: 0,
}).unwrap();

3. 时间由你掌控

// Jump to any slot instantly
svm.warp_to_slot(1000);
// Expire blockhashes on demand
svm.expire_blockhash();
// Set any sysvar
let mut clock = svm.get_sysvar::<Clock>();
clock.unix_timestamp = 1735689600; // Jan 1, 2025
svm.set_sysvar(&clock);

4. 错误即时且清晰

match svm.send_transaction(tx) {
Ok(meta) => {
// Transaction succeeded
println!("Compute units: {}", meta.compute_units_consumed);
}
Err(e) => {
// Error with full details
println!("Error: {:?}", e.err);
println!("Logs: {:?}", e.meta.logs);
}
}

下一步

测试你的程序 → 了解 如何测试你自己的 Solana 程序
示例 → 查看常见场景的即用代码方案及完整代码库示例
API 参考 → 了解高级功能与自定义 配置

Is this page helpful?

Table of Contents

Edit Page
©️ 2026 Solana 基金会版权所有