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 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() 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:
| Eigenschap | Beschrijving |
|---|---|
client.payer | De TransactionSigner die je hebt geïnstalleerd met de signer()-plugin (ook ingesteld als client.identity) |
client.identity | De wallet-signer die eigenaar is van accounts, tokens en bevoegdheden |
client.svm | Directe LiteSVM-instantie voor accountbeheer, transacties en configuratie |
client.rpc | Kit-compatibele RPC-interface (subset: getAccountInfo, getBalance, getEpochSchedule, getLatestBlockhash, getMinimumBalanceForRentExemption, getMultipleAccounts, getSlot, requestAirdrop) |
client.sendTransaction(s) | Instructies plannen, ondertekenen en verzenden als een transactie |
client.airdrop | SOL aanvragen via de LiteSVM-faucet |
client.getMinimumBalance | Minimum 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 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 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 callconst { value: accounts } = await client.rpc.getMultipleAccounts([addr1, addr2, addr3]).send();// Get latest blockhashconst { 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 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
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 callawait 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 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']
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?