Aan de slag

Solana-testsuites die solana-test-validator opstarten, duren seconden per test — je wacht op het opstarten van het proces, RPC-verbindingen en netwerk-roundtrips. LiteSVM voert dezelfde tests uit in milliseconden. Geen extern proces, geen netwerk, alles in-memory binnen je testrunner.

Getest tegen: @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. Deze pluginpakketten zijn nieuw en ontwikkelen zich snel — als je een versieconflict tegenkomt, controleer dan testing/package.json voor de exacte versies waartegen de documentatie en testsuite draaien.

Je assembleert een Kit-client vanuit @solana/kit door plugins te installeren met .use(): een signer-plugin (@solana/kit-plugin-signer), de LiteSVM-plugin (@solana/kit-plugin-litesvm), en eventuele programma-plugins die je nodig hebt. Het resultaat biedt client.sendTransaction(), client.rpc, en directe toegang tot accountstatus, klok en sysvars — allemaal zonder je proces te verlaten.

Snel aan de slag

Afhankelijkheden installeren

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

Je client aanmaken

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() geeft een lege shell terug — elke .use(plugin) voegt mogelijkheden toe. De signer()-plugin moet vóór litesvm() komen omdat de transport-plugin een betaler nodig heeft om aan te koppelen. signer(mySigner) is een afkorting voor het installeren van hetzelfde keypair als zowel payer als identity — gebruik payer() of identity() uit hetzelfde pakket als je die rollen wilt splitsen. Deze volgorde geldt ook voor solanaRpc() wanneer je op een echt netwerk werkt.

Liever een eenregelige setup voor snelle experimenten? De litesvm()-bundel bevat een airdrop, zodat je .use(generatedPayerWithSol(lamports(10_000_000_000n))) kunt toevoegen vanuit @solana/kit-plugin-signer om automatisch een betaler aan te maken en te financieren.

De client begrijpen

Na .use(signer(...)).use(litesvm()) biedt de client:

EigenschapBeschrijving
client.payerDe TransactionSigner die je hebt geïnstalleerd met de signer()-plugin (ook ingesteld als client.identity)
client.identityDe wallet-signer die eigenaar is van accounts, tokens en bevoegdheden
client.svmDirecte LiteSVM-instantie voor accountbeheer, transacties en configuratie
client.rpcKit-compatibele RPC-interface (subset: getAccountInfo, getBalance, getEpochSchedule, getLatestBlockhash, getMinimumBalanceForRentExemption, getMultipleAccounts, getSlot, requestAirdrop)
client.sendTransaction(s)Instructies plannen, ondertekenen en verzenden als een transactie
client.airdropSOL aanvragen via de LiteSVM-faucet
client.getMinimumBalanceMinimum lamports berekenen voor rent-vrijstelling

client.svm gebruiken

Directe toegang tot LiteSVM voor:

  • Accountbeheer (setAccount, getAccount, airdrop)
  • Transactie-uitvoering (sendTransaction, simulateTransaction)
  • Configuratie (withSigverify, withBlockhashCheck, enz.)
  • Tijdmanipulatie (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 gebruiken

Kit-compatibele RPC-interface voor standaardbewerkingen:

// 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();

De RPC-laag ondersteunt alleen base64-codering. Het aanvragen van andere coderingen zal een foutmelding veroorzaken.

Configuratie

Configureer LiteSVM met behulp van builder-methoden op 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

Transacties verzenden

Voeg programma-plugins toe na het transport — ze hangen instructie-builders aان de client zodat je nooit een ruwe TransactionMessage hoeft aan te raken:

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

Je kunt status instellen via SVM en uitlezen via RPC:

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

Wat nu

Dit behandelt de kern van de client — accounts aanmaken, instructies verzenden en status uitlezen. Als je tests SPL-tokens bevatten (mints, ATA's, overdrachten), laat de handleiding voor token-testen zien hoe de tokenProgram()-plugin ~40 regels setup terugbrengt tot 3 aanroepen. Voor een volledige API-referentie, zie de API-documentatie.

Is this page helpful?

Inhoudsopgave

Pagina Bewerken
© 2026 Solana Foundation. Alle rechten voorbehouden.