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 payerclient.svm.airdrop(client.payer.address, lamports(5_000_000_000n));// Check the balanceconst balance = client.svm.getBalance(client.payer.address);console.log("Balance:", balance, "lamports");
createClient()は空のシェルを返します――各.use(plugin)がその上に機能を積み重ねます。signer()プラグインはlitesvm()より前に配置する必要があります。トランスポートプラグインが紐付けるpayerを必要とするためです。signer(mySigner)は、同じkeypairをpayerとidentityの両方としてインストールする省略記法です――それらの役割を分けたい場合は、同じパッケージのpayer()またはidentity()を使用してください。この順序は、実際のネットワーク上でsolanaRpc()を使う場合も同様です。
素早い実験のためにワンライン設定を好む場合は、litesvm()バンドルにエアドロップが含まれているため、@solana/kit-plugin-signerの.use(generatedPayerWithSol(lamports(10_000_000_000n)))をチェーンすることで、payerを自動生成・資金調達できます。
クライアントの理解
.use(signer(...)).use(litesvm())の後、クライアントは以下を公開します:
| プロパティ | 説明 |
|---|---|
client.payer | signer()プラグインでインストールしたTransactionSigner(client.identityとしても設定されます) |
client.identity | アカウント、トークン、および権限を所有するウォレット署名者 |
client.svm | アカウント管理、トランザクション、および設定のための直接的なLiteSVMインスタンス |
client.rpc | Kit互換のRPCインターフェース(サポートするサブセット: getAccountInfo、getBalance、getEpochSchedule、getLatestBlockhash、getMinimumBalanceForRentExemption、getMultipleAccounts、getSlot、requestAirdrop) |
client.sendTransaction(s) | instructions を計画・署名・送信してトランザクションとして実行する |
client.airdrop | LiteSVMフォーセットからSOLをリクエストする |
client.getMinimumBalance | rent免除のための最小lamport数を計算する |
client.svmの使用
LiteSVMへの直接アクセスで実現できること:
- アカウント管理(
setAccount、getAccount、airdrop) - トランザクション実行(
sendTransaction、simulateTransaction) - 設定(
withSigverify、withBlockhashCheckなど) - 時間操作(
warpToSlot、getClock)
import { address, lamports } from "@solana/kit";// Fund an accountclient.svm.airdrop(address, lamports(1_000_000_000n));// Set account state directlyclient.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 blockhashconst 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 callconst { value: accounts } = await client.rpc.getMultipleAccounts([addr1, addr2, addr3]).send();// Get latest blockhashconst { value: blockhash } = await client.rpc.getLatestBlockhash().send();
RPCレイヤーはbase64エンコードのみをサポートしています。他のエンコードをリクエストするとエラーが発生します。
設定
client.svmのビルダーメソッドを使用してLiteSVMを設定します:
const client = createClient().use(signer(mySigner)).use(litesvm());// Configure for testingclient.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 callawait 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 SVMclient.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?