Η δοκιμή ενός προσαρμοσμένου προγράμματος Solana σημαίνει φόρτωση του μεταγλωττισμένου αρχείου .so στο
SVM, ρύθμιση των λογαριασμών που αναμένει και αποστολή εντολών σε αυτό.
Το LiteSVM διαχειρίζεται όλα αυτά εντός της διεργασίας — δεν απαιτείται validator. Συνιστούμε
τη δημιουργία clients προγράμματος με τον
Codama JS Renderer ώστε να έχετε
πρόσβαση σε ένα συμβατό Kit Plugin.
Φόρτωση Προγράμματος
import { createClient, address, generateKeyPairSigner } from "@solana/kit";import { litesvm } from "@solana/kit-plugin-litesvm";import { signer } from "@solana/kit-plugin-signer";import { myProgramPlugin } from "@my-program/sdk";import * as fs from "node:fs";const mySigner = await generateKeyPairSigner();const client = createClient().use(signer(mySigner)).use(litesvm()).use(myProgramPlugin());// Configure for program testingclient.svm.withSigverify(false).withBlockhashCheck(false).withSysvars().withBuiltins();// Load program from .so fileconst programId = address("YourProgramId111111111111111111111111111");const soPath = "/path/to/target/deploy/my_program.so";if (fs.existsSync(soPath)) {client.svm.addProgramFromFile(programId, soPath);console.log("Program loaded:", programId);// Verify program accountconst programAccount = client.svm.getAccount(programId);if (programAccount.exists) {console.log(" Executable:", programAccount.executable);console.log(" Data size:", programAccount.data.length, "bytes");}} else {console.log("Program file not found:", soPath);console.log("Build with: cargo build-sbf");}
Πλήρης Ρύθμιση Δοκιμής Προγράμματος
import { createClient, address, generateKeyPairSigner, lamports } from '@solana/kit';import { litesvm } from '@solana/kit-plugin-litesvm';import { signer } from '@solana/kit-plugin-signer';import { myProgramPlugin } from '@my-program/sdk';import * as fs from 'node:fs';const mySigner = await generateKeyPairSigner();const client = createClient().use(signer(mySigner)).use(litesvm()).use(myProgramPlugin());client.svm.withSigverify(false).withBlockhashCheck(false).withSysvars().withBuiltins().withPrecompiles().withTransactionHistory(100n);// Load programconst programId = address('YourProgramId111111111111111111111111111');const soPath = '/path/to/target/deploy/my_program.so';if (fs.existsSync(soPath)) {client.svm.addProgramFromFile(programId, soPath);}// Set up any required data accountsconst dataAccountAddress = address('DataAccount111111111111111111111111111');const minBalance = client.svm.minimumBalanceForRentExemption(100n);client.svm.setAccount({address: dataAccountAddress,data: new Uint8Array(100),executable: false,lamports: lamports(minBalance),programAddress: programId,space: 100n,});// Send the transactionawait client.myProgram.testInstruction({..}).sendTransaction();// Verify state changesconst updatedAccount = client.myProgram.myAccount.fetch(dataAccountAddress);// assert on decoded account
Χρήση Προεπιλεγμένων Προγραμμάτων
Για δοκιμές που απαιτούν τυπικά προγράμματα:
const mySigner = await generateKeyPairSigner();const client = createClient().use(signer(mySigner)).use(litesvm());// Add all default programs (System, BPF Loader, etc.)client.svm.withDefaultPrograms();// Or add specific programs you need// The Token program, Associated Token program, etc. would need// to be added manually via addProgramFromFile if needed
Δημιουργήστε το πρόγραμμά σας Solana με cargo build-sbf για να παράγετε το αρχείο .so.
Το μοτίβο είναι πάντα το ίδιο:
- Φόρτωση Προγράμματος: Χρησιμοποιήστε το
addProgramFromFileγια να φορτώσετε μεταγλωττισμένα προγράμματα και εισαγάγετε το myProgramPlugin() από τον client σας - Διαμόρφωση: Ενεργοποιήστε sysvars, builtins και precompiles όπως απαιτείται
- Ρύθμιση Λογαριασμών: Προ-συμπληρώστε λογαριασμούς δεδομένων με
setAccount - Αποστολή: Χρησιμοποιήστε
client.myProgram.testInstruction({..}).sendTransaction()— χωρίς χειροκίνητη κατασκευή συναλλαγής - Επαλήθευση: Ελέγξτε την κατάσταση του λογαριασμού μετά την εκτέλεση
(
client.myProgram.myAccount.fetch)
Μόλις αυτό το βασικό πλαίσιο λειτουργεί, μπορείτε να δημιουργήσετε μια πλήρη σουίτα δοκιμών προσθέτοντας περισσότερες εντολές και ισχυρισμούς.
Is this page helpful?