Başlarken

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

ÖzellikAçıklama
client.payersigner() eklentisiyle yüklediğiniz TransactionSigner (aynı zamanda client.identity olarak da ayarlanır)
client.identityHesaplara, tokenlara ve yetkilere sahip olan cüzdan imzalayıcısı
client.svmHesap yönetimi, işlemler ve yapılandırma için doğrudan LiteSVM örneği
client.rpcKit 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.airdropLiteSVM musluğundan SOL talep edin
client.getMinimumBalancerent 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 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 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 call
const { value: accounts } = await client.rpc
.getMultipleAccounts([addr1, addr2, addr3])
.send();
// Get latest blockhash
const { 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 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

İş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 call
await 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 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']

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?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.