Tài liệu SolanaLiteSVMTypeScriptVí dụ

Kiểm Thử Chương Trình

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 testing
client.svm
.withSigverify(false)
.withBlockhashCheck(false)
.withSysvars()
.withBuiltins();
// Load program from .so file
const 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 account
const 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 program
const 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 accounts
const 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 transaction
await client.myProgram.testInstruction({..}).sendTransaction();
// Verify state changes
const 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:

  1. 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
  2. Cấu Hình: Kích hoạt các sysvar, builtin và precompile khi cần thiết
  3. 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
  4. 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
  5. 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?

Mục lục

Chỉnh sửa trang