Solana test paketleri solana-test-validator başlatırken test başına saniyeler harcar —
süreç başlatma, RPC bağlantıları ve ağ gidiş-dönüşlerini bekliyorsunuzdur.
LiteSVM aynı testleri milisaniyeler içinde çalıştırır. Harici süreç yok, ağ yok,
her şey test çalıştırıcınızın içinde bellekte.
Test edildiği sürümler: @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. Bu eklenti paketleri yeni ve hızla gelişiyor
— bir uyumsuzlukla karşılaşırsanız, belgelerin ve test paketinin çalıştığı
tam sürümler için
testing/package.json
dosyasını inceleyin.
.use() ile eklentiler yükleyerek @solana/kit'ten bir Kit istemcisi oluşturursunuz:
bir imzalayıcı eklentisi
(@solana/kit-plugin-signer),
LiteSVM eklentisi
(@solana/kit-plugin-litesvm)
ve ihtiyacınız olan program eklentileri. Sonuç olarak client.sendTransaction(),
client.rpc ve hesap durumuna, saate ve sysvarlara doğrudan erişim sağlanır —
hepsi sürecinizden çıkmadan.
Hızlı Başlangıç
Bağımlılıkları Yükleyin
pnpm add @solana/kit @solana/kit-plugin-litesvm @solana/kit-plugin-signer @solana-program/system
İstemcinizi Oluşturun
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() boş bir kabuk döndürür — her .use(plugin) çağrısı üzerine
yetenekler ekler. signer() eklentisi, litesvm()'den önce gelmelidir
çünkü taşıma eklentisinin bağlanacak bir ödeyiciye ihtiyacı vardır. signer(mySigner),
aynı keypair'i hem payer hem de identity olarak yüklemek için kısayoldur —
bu rolleri ayırmak istiyorsanız aynı paketten payer() veya identity() kullanın.
Bu sıralama, gerçek bir ağda solanaRpc() için de geçerlidir.
Hızlı denemeler için tek satırlık bir kurulum mu tercih edersiniz? litesvm() paketi
bir airdrop içerir; bu nedenle @solana/kit-plugin-signer'dan
.use(generatedPayerWithSol(lamports(10_000_000_000n))) zincirleyerek
otomatik olarak bir ödeyici oluşturup fonlayabilirsiniz.
İstemciyi Anlamak
.use(signer(...)).use(litesvm()) sonrasında istemci şunları sunar:
| Özellik | Açıklama |
|---|---|
client.payer | signer() eklentisiyle yüklediğiniz TransactionSigner (aynı zamanda client.identity olarak da ayarlanır) |
client.identity | Hesaplara, tokenlara ve yetkilere sahip olan cüzdan imzalayıcısı |
client.svm | Hesap yönetimi, işlemler ve yapılandırma için doğrudan LiteSVM örneği |
client.rpc | Kit uyumlu RPC arayüzü (desteklenen alt küme: getAccountInfo, getBalance, getEpochSchedule, getLatestBlockhash, getMinimumBalanceForRentExemption, getMultipleAccounts, getSlot, requestAirdrop) |
client.sendTransaction(s) | Talimatları planlayın, imzalayın ve işlem olarak gönderin |
client.airdrop | LiteSVM musluğundan SOL talep edin |
client.getMinimumBalance | rent muafiyeti için minimum lamport hesaplayın |
client.svm Kullanımı
LiteSVM'ye doğrudan erişim şunlar için kullanılır:
- Hesap yönetimi (
setAccount,getAccount,airdrop) - İşlem yürütme (
sendTransaction,simulateTransaction) - Yapılandırma (
withSigverify,withBlockhashCheck, vb.) - Zaman manipülasyonu (
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 Kullanımı
Standart işlemler için Kit uyumlu RPC arayüzü:
// 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 katmanı yalnızca base64 kodlamasını destekler. Başka kodlamalar talep edilirse hata fırlatılır.
Yapılandırma
client.svm üzerindeki builder metodlarını kullanarak LiteSVM'yi yapılandırın:
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
İşlem Gönderme
Taşıma katmanından sonra program eklentilerini ekleyin — bunlar istemci üzerine
talimat oluşturucuları asar, böylece hiç ham TransactionMessage ile uğraşmazsınız:
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 Akışı
SVM aracılığıyla durum ayarlayıp RPC aracılığıyla okuyabilirsiniz:
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']
Sırada Ne Var
Bu bölüm temel istemciyi kapsar — hesap oluşturma, talimat gönderme ve
durum okuma. Testleriniz SPL tokenlarını (mintler, ATA'lar, transferler) içeriyorsa,
token test kılavuzu tokenProgram() eklentisinin ~40 satırlık
kurulumu nasıl 3 çağrıya indirdiğini gösterir. Tam API referansı için
API belgelerine bakın.
Is this page helpful?