Ξεκινώντας

Τα test suites του Solana που εκκινούν το solana-test-validator χρειάζονται δευτερόλεπτα ανά δοκιμή — περιμένετε την εκκίνηση της διεργασίας, τις συνδέσεις RPC και τα round-trips δικτύου. Το LiteSVM εκτελεί τις ίδιες δοκιμές σε χιλιοστά του δευτερολέπτου. Χωρίς εξωτερική διεργασία, χωρίς δίκτυο, τα πάντα στη μνήμη μέσα στο test runner σας.

Δοκιμάστηκε με: @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. Αυτά τα πακέτα plugin είναι νέα και εξελίσσονται γρήγορα — αν αντιμετωπίσετε αναντιστοιχία, ελέγξτε το testing/package.json για τις ακριβείς εκδόσεις που χρησιμοποιούν τα έγγραφα και το test suite.

Συναρμολογείτε έναν Kit client από το @solana/kit εγκαθιστώντας plugins με το .use(): ένα plugin υπογραφής (@solana/kit-plugin-signer), το plugin LiteSVM (@solana/kit-plugin-litesvm), και οποιαδήποτε plugins προγράμματος χρειάζεστε. Το αποτέλεσμα εκθέτει το client.sendTransaction(), το client.rpc, και άμεση πρόσβαση στην κατάσταση λογαριασμού, το ρολόι και τα sysvars — όλα χωρίς να εγκαταλείψετε τη διεργασία σας.

Γρήγορη Εκκίνηση

Εγκατάσταση Εξαρτήσεων

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

Δημιουργία του Client σας

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() επιστρέφει ένα κενό κέλυφος — κάθε .use(plugin) προσθέτει δυνατότητες σε αυτό. Το plugin signer() πρέπει να έρχεται πριν από το litesvm() επειδή το plugin μεταφοράς χρειάζεται έναν payer για να συνδεθεί. Το signer(mySigner) είναι συντομογραφία για την εγκατάσταση του ίδιου keypair ως payer και identity — χρησιμοποιήστε payer() ή identity() από το ίδιο πακέτο αν θέλετε να διαχωρίσετε αυτούς τους ρόλους. Αυτή η σειρά ισχύει επίσης για το solanaRpc() όταν βρίσκεστε σε πραγματικό δίκτυο.

Προτιμάτε μια μονόγραμμη ρύθμιση για γρήγορα πειράματα; Το bundle litesvm() περιλαμβάνει ένα airdrop, οπότε μπορείτε να αλυσοδέσετε .use(generatedPayerWithSol(lamports(10_000_000_000n))) από το @solana/kit-plugin-signer για αυτόματη δημιουργία και χρηματοδότηση ενός payer.

Κατανόηση του Client

Μετά το .use(signer(...)).use(litesvm()), ο client εκθέτει:

ΙδιότηταΠεριγραφή
client.payerΤο TransactionSigner που εγκαταστήσατε με το plugin signer() (ορίζεται επίσης ως client.identity)
client.identityΤο signer πορτοφολιού που κατέχει λογαριασμούς, tokens και εξουσιοδοτήσεις
client.svmΆμεσο στιγμιότυπο LiteSVM για διαχείριση λογαριασμών, συναλλαγές και διαμόρφωση
client.rpcΔιεπαφή RPC συμβατή με Kit (υποσύνολο: getAccountInfo, getBalance, getEpochSchedule, getLatestBlockhash, getMinimumBalanceForRentExemption, getMultipleAccounts, getSlot, requestAirdrop)
client.sendTransaction(s)Σχεδιασμός, υπογραφή και αποστολή οδηγιών ως συναλλαγή
client.airdropΑίτηση SOL από τη βρύση LiteSVM
client.getMinimumBalanceΥπολογισμός ελάχιστων lamport για εξαίρεση από rent

Χρήση του client.svm

Άμεση πρόσβαση στο LiteSVM για:

  • Διαχείριση λογαριασμών (setAccount, getAccount, airdrop)
  • Εκτέλεση συναλλαγών (sendTransaction, simulateTransaction)
  • Διαμόρφωση (withSigverify, withBlockhashCheck, κ.λπ.)
  • Χειρισμός χρόνου (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

Διεπαφή RPC συμβατή με Kit για τυπικές λειτουργίες:

// 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 υποστηρίζει μόνο κωδικοποίηση base64. Η αίτηση άλλων κωδικοποιήσεων θα εκτοξεύσει σφάλμα.

Διαμόρφωση

Διαμορφώστε το LiteSVM χρησιμοποιώντας μεθόδους builder στο 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

Αποστολή Συναλλαγών

Προσθέστε plugins προγράμματος μετά τη μεταφορά — κρεμούν builders οδηγιών στον client ώστε να μην χρειάζεται ποτέ να αγγίξετε ένα ακατέργαστο TransactionMessage:

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

Μπορείτε να ορίσετε κατάσταση μέσω SVM και να την διαβάσετε μέσω 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']

Επόμενα Βήματα

Αυτό καλύπτει τον βασικό client — δημιουργία λογαριασμών, αποστολή οδηγιών και ανάγνωση κατάστασης. Αν οι δοκιμές σας αφορούν SPL tokens (mints, ATAs, μεταφορές), ο οδηγός δοκιμών token δείχνει πώς το plugin tokenProgram() συμπτύσσει ~40 γραμμές ρύθμισης σε 3 κλήσεις. Για πλήρη αναφορά API, δείτε τα έγγραφα API.

Is this page helpful?

© 2026 Ίδρυμα Solana. Με επιφύλαξη παντός δικαιώματος.