Aloittaminen

Solana-testipaketit, jotka käynnistävät solana-test-validatorin, vievät sekunteja testiä kohden — odotat prosessin käynnistystä, RPC-yhteyksiä ja verkon edestakaisin kulkevia pyyntöjä. LiteSVM suorittaa samat testit millisekunneissa. Ei ulkoista prosessia, ei verkkoa — kaikki muistissa testiajoympäristösi sisällä.

Testattu versioilla: @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. Nämä laajennuspaketit ovat uusia ja kehittyvät nopeasti — jos kohtaat versioristiriidan, tarkista testing/package.json tarkkojen versioiden osalta, joita dokumentaatio ja testipaketti käyttävät.

Kootaan Kit-asiakas @solana/kitistä asentamalla laajennuksia .use()-metodilla: allekirjoittajalaajennuksen (@solana/kit-plugin-signer), LiteSVM-laajennuksen (@solana/kit-plugin-litesvm) sekä tarvitsemasi ohjelmakohtaiset laajennukset. Tuloksena saadaan client.sendTransaction(), client.rpc sekä suora pääsy tilitilaan, kelloon ja sysvareihin — kaikki ilman prosessista poistumista.

Pikaopas

Asenna riippuvuudet

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

Luo asiakkaasi

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() palauttaa tyhjän kuoren — jokainen .use(plugin) lisää siihen uusia ominaisuuksia. signer()-laajennuksen on tultava ennen litesvm()-laajennusta, koska kuljetuslaajennukselle on liitettävä maksaja. signer(mySigner) on lyhenne, joka asentaa saman keypair-arvon sekä payer- että identity-rooliksi — käytä payer()- tai identity()-metodia samasta paketista, jos haluat erottaa nämä roolit toisistaan. Tämä järjestys pätee myös solanaRpc()-metodiin, kun käytät oikeaa verkkoa.

Haluatko yksirivisetupauksen nopeita kokeiluja varten? litesvm()-paketti sisältää airdroppauksen, joten voit ketjuttaa .use(generatedPayerWithSol(lamports(10_000_000_000n))) komennosta @solana/kit-plugin-signer automaattisesti luodaksesi ja rahoittaaksesi maksajan.

Asiakkaan ymmärtäminen

Kutsun .use(signer(...)).use(litesvm()) jälkeen asiakas tarjoaa:

OminaisuusKuvaus
client.payerTransactionSigner, jonka asensit signer()-laajennuksella (asetetaan myös arvoksi client.identity)
client.identityLompakkoallekirjoittaja, joka omistaa tilit, tokenit ja valtuutukset
client.svmSuora LiteSVM-instanssi tilienhallintaan, transaktioihin ja konfigurointiin
client.rpcKit-yhteensopiva RPC-rajapinta (osajoukko: getAccountInfo, getBalance, getEpochSchedule, getLatestBlockhash, getMinimumBalanceForRentExemption, getMultipleAccounts, getSlot, requestAirdrop)
client.sendTransaction(s)Suunnittele, allekirjoita ja lähetä ohjeet transaktiona
client.airdropPyydä SOL LiteSVM-hanasta
client.getMinimumBalanceLaske vähimmäismäärä lamport-yksiköitä rent-vapautusta varten

client.svm:n käyttö

Suora pääsy LiteSVM:ään seuraavia toimintoja varten:

  • Tilienhallinta (setAccount, getAccount, airdrop)
  • Transaktioiden suoritus (sendTransaction, simulateTransaction)
  • Konfigurointi (withSigverify, withBlockhashCheck jne.)
  • Ajan manipulointi (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:n käyttö

Kit-yhteensopiva RPC-rajapinta tavallisiin toimintoihin:

// 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-kerros tukee vain base64-enkoodausta. Muiden enkoodausten pyytäminen aiheuttaa virheen.

Konfigurointi

Konfiguroi LiteSVM käyttämällä rakentajametodeja kohteessa client.svm:

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

Transaktioiden lähettäminen

Lisää ohjelmakohtaiset laajennukset kuljetuksen jälkeen — ne kiinnittävät ohjeiden rakentajia asiakkaaseen, joten sinun ei tarvitse koskaan käsitellä raakaa TransactionMessage-objektia:

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-kulku

Voit asettaa tilan SVM:n kautta ja lukea sen RPC:n kautta:

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']

Mitä seuraavaksi

Tämä kattaa ydinasioihin — tilien luomisen, ohjeiden lähettämisen ja tilan lukemisen. Jos testisi käsittelevät SPL-tokeneja (mintit, ATA:t, siirrot), token-testiopas näyttää, kuinka tokenProgram()-laajennus tiivistää noin 40 rivin asettelun 3 kutsuun. Täydellistä API-viitettä varten katso API-dokumentaatio.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.