Τα 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 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() επιστρέφει ένα κενό κέλυφος — κάθε .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 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
Διεπαφή RPC συμβατή με Kit για τυπικές λειτουργίες:
// 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 υποστηρίζει μόνο κωδικοποίηση base64. Η αίτηση άλλων κωδικοποιήσεων θα εκτοξεύσει σφάλμα.
Διαμόρφωση
Διαμορφώστε το LiteSVM χρησιμοποιώντας μεθόδους builder στο 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
Αποστολή Συναλλαγών
Προσθέστε 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 callawait 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 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']
Επόμενα Βήματα
Αυτό καλύπτει τον βασικό client — δημιουργία λογαριασμών, αποστολή οδηγιών και
ανάγνωση κατάστασης. Αν οι δοκιμές σας αφορούν SPL tokens (mints, ATAs, μεταφορές), ο
οδηγός δοκιμών token δείχνει πώς το plugin
tokenProgram() συμπτύσσει ~40 γραμμές ρύθμισης σε 3 κλήσεις. Για πλήρη
αναφορά API, δείτε τα έγγραφα API.
Is this page helpful?