Kiểm thử một chương trình Solana tùy chỉnh có nghĩa là tải tệp .so đã biên dịch vào
SVM, thiết lập các tài khoản mà nó yêu cầu, và gửi các lệnh đến nó.
LiteSVM xử lý tất cả những điều này trong tiến trình — không cần validator. Chúng tôi khuyến nghị
tạo các client cho chương trình bằng
Codama JS Renderer để bạn có thể
truy cập vào một Kit Plugin tương thích.
Tải Một Chương Trình
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");}
Thiết Lập Kiểm Thử Chương Trình Hoàn Chỉnh
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
Sử Dụng Các Chương Trình Mặc Định
Để kiểm thử yêu cầu các chương trình chuẩn:
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
Biên dịch chương trình Solana của bạn bằng cargo build-sbf để tạo tệp .so.
Quy trình luôn giống nhau:
- Tải Chương Trình: Sử dụng
addProgramFromFileđể tải các chương trình đã biên dịch và import myProgramPlugin() từ client của bạn - Cấu Hình: Kích hoạt các sysvar, builtin và precompile khi cần thiết
- Thiết Lập Tài Khoản: Khởi tạo sẵn các tài khoản dữ liệu bằng
setAccount - Gửi Lệnh: Sử dụng
client.myProgram.testInstruction({..}).sendTransaction()— không cần xây dựng giao dịch thủ công - Xác Minh: Kiểm tra trạng thái tài khoản sau khi thực thi
(
client.myProgram.myAccount.fetch)
Khi bạn đã có bộ khung này hoạt động, bạn có thể xây dựng một bộ kiểm thử đầy đủ bằng cách thêm nhiều lệnh và các xác nhận hơn.
Is this page helpful?