SolanaドキュメントLiteSVMRust追加クレートlitesvm-utils

クイックスタート

インストール

必要な依存関係がすべて揃っていることを確認してください:

cargo add --dev litesvm litesvm-utils

litesvm-utilsとは?

litesvm-utils クレートは、Solanaプログラムのテストを簡素化するための重要なヘルパートレイトとユーティリティを提供します。人間工学に基づいたAPIにより、30行以上にわたる一般的なテストの定型コードを最小限の読みやすいコードに削減します。

TestHelpers トレイト

  • 1回のメソッド呼び出しで資金付きアカウントを作成
  • token mintとtoken accountを簡単にセットアップ
  • 定型コードなしでPDAを導出
  • 時間ベースのテスト用にslotを管理

AssertionHelpers トレイト - アカウントの状態を検証(存在確認、クローズ確認、オーナー確認) - token残高とmint供給量を検証 - SOL残高を確認 - アカウントデータ長を検証

TransactionHelpers トレイト - 豊富な結果ハンドリングでinstructionsを実行 - トランザクションの成功または失敗をアサート - 特定のエラーコードを確認 - トランザクションログとコンピュートユニットを検査

LiteSVMBuilder - テスト環境セットアップのためのフルエントビルダーパターン - メソッドチェーンによるプログラムのデプロイ - 便利な静的ファクトリーメソッド

クイック例

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

トレイトの概要

TestHelpers

メソッド戻り値説明
create_funded_account(lamports)Result<Keypair>keypairを作成し、資金を付与する
create_funded_accounts(count, lamports)Result<Vec<Keypair>>複数の資金付きkeypairを作成する
create_token_mint(authority, decimals)Result<Keypair>SPLトークンミントを作成する
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<()>アカウントにトークンをミントする
derive_pda(seeds, program_id)(Pubkey, u8)bump seedを使ってPDAを導出する
get_pda(seeds, program_id)PubkeyPDAアドレスのみを取得する
get_pda_with_bump(seeds, program_id)(Pubkey, u8)derive_pdaのエイリアス
get_current_slot()u64現在のslotを返す
advance_slot(slots)()N slotだけ時間を進める

AssertionHelpers

メソッド説明
assert_account_exists(pubkey)アカウントが存在しない場合にパニックする
assert_account_closed(pubkey)アカウントが存在し、データ/ランポートを持つ場合にパニックする
assert_token_balance(account, amount)トークン残高を検証する
assert_sol_balance(pubkey, lamports)SOL残高を検証する
assert_mint_supply(mint, supply)ミントの総供給量を検証する
assert_account_owner(pubkey, owner)アカウントオーナーを検証する
assert_account_data_len(pubkey, len)データ長を検証する

TransactionHelpers

メソッド戻り値説明
send_instruction(ix, signers)Result<TransactionResult, TransactionError>単一のinstructionsを送信する
send_instructions(ixs, signers)Result<TransactionResult, TransactionError>1つのトランザクションで複数のinstructionsを送信する
send_transaction_result(tx)Result<TransactionResult, TransactionError>生のTransactionを送信する

トラブルシューティング

よくあるエラー

エラー原因解決策
AccountNotFound存在しないアカウントを使用しようとしているまずcreate_funded_accountを使用してください
InsufficientFundsトランザクションのlamportが不足している初期資金額を増やしてください
OwnerMismatchアカウントが間違ったプログラムによって所有されている正しいプログラムIDを確認してください
AssertionFailed残高または状態が期待値と一致しないテストロジックを確認してください

Is this page helpful?

目次

ページを編集
© 2026 Solana Foundation. 無断転載を禁じます。