はじめに

solana-test-validatorを起動するSolanaテストスイートは、テストごとに数秒かかります――プロセスの起動、RPC接続、ネットワークの往復を待ち続けることになります。LiteSVMは同じテストをミリ秒単位で実行します。外部プロセス不要、ネットワーク不要、すべてがテストランナー内のインメモリで完結します。

動作確認済み: @solana/kit@6.8.0@solana/kit-plugin-litesvm@0.10.0@solana/kit-plugin-signer@0.10.0@solana-program/system@0.12.0@solana-program/token@0.13.0。これらのプラグインパッケージは新しく、急速に進化しています――バージョンの不一致が発生した場合は、ドキュメントとテストスイートが使用する正確なバージョンを testing/package.json で確認してください。

@solana/kitからKitクライアントを組み立てるには、.use()でプラグインをインストールします: signerプラグイン (@solana/kit-plugin-signer)、 LiteSVMプラグイン (@solana/kit-plugin-litesvm)、 そして必要なプログラムプラグイン。結果としてclient.sendTransaction()client.rpc、およびアカウント状態・クロック・syvarsへの直接アクセスが公開されます――すべてプロセスを離れることなく利用できます。

クイックスタート

依存関係のインストール

pnpm add @solana/kit @solana/kit-plugin-litesvm @solana/kit-plugin-signer @solana-program/system

クライアントの作成

import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
// Payer first, then the LiteSVM transport.
const mySigner = await generateKeyPairSigner();
const client = createClient().use(signer(mySigner)).use(litesvm());
// Fund the payer
client.svm.airdrop(client.payer.address, lamports(5_000_000_000n));
// Check the balance
const balance = client.svm.getBalance(client.payer.address);
console.log("Balance:", balance, "lamports");

createClient()は空のシェルを返します――各.use(plugin)がその上に機能を積み重ねます。signer()プラグインはlitesvm()より前に配置する必要があります。トランスポートプラグインが紐付けるpayerを必要とするためです。signer(mySigner)は、同じkeypairをpayeridentityの両方としてインストールする省略記法です――それらの役割を分けたい場合は、同じパッケージのpayer()またはidentity()を使用してください。この順序は、実際のネットワーク上でsolanaRpc()を使う場合も同様です。

素早い実験のためにワンライン設定を好む場合は、litesvm()バンドルにエアドロップが含まれているため、@solana/kit-plugin-signer.use(generatedPayerWithSol(lamports(10_000_000_000n)))をチェーンすることで、payerを自動生成・資金調達できます。

クライアントの理解

.use(signer(...)).use(litesvm())の後、クライアントは以下を公開します:

プロパティ説明
client.payersigner()プラグインでインストールしたTransactionSignerclient.identityとしても設定されます)
client.identityアカウント、トークン、および権限を所有するウォレット署名者
client.svmアカウント管理、トランザクション、および設定のための直接的なLiteSVMインスタンス
client.rpcKit互換のRPCインターフェース(サポートするサブセット: getAccountInfogetBalancegetEpochSchedulegetLatestBlockhashgetMinimumBalanceForRentExemptiongetMultipleAccountsgetSlotrequestAirdrop
client.sendTransaction(s)instructions を計画・署名・送信してトランザクションとして実行する
client.airdropLiteSVMフォーセットからSOLをリクエストする
client.getMinimumBalancerent免除のための最小lamport数を計算する

client.svmの使用

LiteSVMへの直接アクセスで実現できること:

  • アカウント管理(setAccountgetAccountairdrop
  • トランザクション実行(sendTransactionsimulateTransaction
  • 設定(withSigverifywithBlockhashCheckなど)
  • 時間操作(warpToSlotgetClock
import { address, lamports } from "@solana/kit";
// Fund an account
client.svm.airdrop(address, lamports(1_000_000_000n));
// Set account state directly
client.svm.setAccount({
address: myAddress,
data: new Uint8Array([1, 2, 3]),
executable: false,
lamports: lamports(1_000_000n),
programAddress: address("11111111111111111111111111111111"),
space: 3n
});
// Get the latest blockhash
const blockhash = client.svm.latestBlockhash();

client.rpcの使用

標準的な操作のためのKit互換RPCインターフェース:

// Get account info (returns base64-encoded data)
const { value: account } = await client.rpc.getAccountInfo(address).send();
// Get multiple accounts in one call
const { value: accounts } = await client.rpc
.getMultipleAccounts([addr1, addr2, addr3])
.send();
// Get latest blockhash
const { value: blockhash } = await client.rpc.getLatestBlockhash().send();

RPCレイヤーはbase64エンコードのみをサポートしています。他のエンコードをリクエストするとエラーが発生します。

設定

client.svmのビルダーメソッドを使用してLiteSVMを設定します:

const client = createClient().use(signer(mySigner)).use(litesvm());
// Configure for testing
client.svm
.withSigverify(false) // Skip signature verification
.withBlockhashCheck(false) // Skip blockhash validation
.withSysvars() // Enable Clock, Rent, etc.
.withBuiltins() // Enable ed25519, secp256k1
.withTransactionHistory(100n); // Store transaction history

トランザクションの送信

トランスポートの後にプログラムプラグインを追加します――クライアントに instruction ビルダーが付加されるため、生のTransactionMessageを直接扱う必要がありません:

import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
import { systemProgram } from "@solana-program/system";
const mySigner = await generateKeyPairSigner();
const client = createClient()
.use(signer(mySigner))
.use(litesvm())
.use(systemProgram());
client.svm.airdrop(client.payer.address, lamports(10_000_000_000n));
const recipient = await generateKeyPairSigner();
// Build and send in one call
await client.system.instructions
.transferSol({
source: client.payer,
destination: recipient.address,
amount: lamports(1_000_000_000n)
})
.sendTransaction();

SVM → RPCフロー

SVMで状態を設定し、RPCで読み取ることができます:

import { address, lamports } from "@solana/kit";
// Set account directly via SVM
client.svm.setAccount({
address: myAddress,
data: new Uint8Array([0xde, 0xad, 0xbe, 0xef]),
executable: false,
lamports: lamports(1_000_000n),
programAddress: address("11111111111111111111111111111111"),
space: 4n
});
// Read via RPC (returns base64-encoded data)
const { value } = await client.rpc.getAccountInfo(myAddress).send();
console.log("Data:", value?.data); // ['3q2+7w==', 'base64']

次のステップ

ここではクライアントのコアをカバーしました――アカウントの作成、instructions の送信、および状態の読み取りです。テストにSPLトークン(ミント、ATA、転送)が含まれる場合、トークンテストガイドtokenProgram()プラグインが約40行のセットアップをわずか3回の呼び出しに圧縮する方法を確認できます。完全なAPIリファレンスはAPIドキュメントをご覧ください。

Is this page helpful?

目次

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