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 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() 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:
| Ominaisuus | Kuvaus |
|---|---|
client.payer | TransactionSigner, jonka asensit signer()-laajennuksella (asetetaan myös arvoksi client.identity) |
client.identity | Lompakkoallekirjoittaja, joka omistaa tilit, tokenit ja valtuutukset |
client.svm | Suora LiteSVM-instanssi tilienhallintaan, transaktioihin ja konfigurointiin |
client.rpc | Kit-yhteensopiva RPC-rajapinta (osajoukko: getAccountInfo, getBalance, getEpochSchedule, getLatestBlockhash, getMinimumBalanceForRentExemption, getMultipleAccounts, getSlot, requestAirdrop) |
client.sendTransaction(s) | Suunnittele, allekirjoita ja lähetä ohjeet transaktiona |
client.airdrop | Pyydä SOL LiteSVM-hanasta |
client.getMinimumBalance | Laske 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,withBlockhashCheckjne.) - Ajan manipulointi (
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: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 callconst { value: accounts } = await client.rpc.getMultipleAccounts([addr1, addr2, addr3]).send();// Get latest blockhashconst { 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 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
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 callawait 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 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']
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?