Tài liệu SolanaLiteSVMRustThùng Hàng Bổ Sunglitesvm-loader

Bắt Đầu Nhanh

Cài Đặt

Hãy đảm bảo bạn đã cài đặt tất cả các phụ thuộc cần thiết:

cargo add --dev litesvm litesvm-loader solana-keypair solana-signer

Nếu bài kiểm tra của bạn gọi trực tiếp chương trình đã triển khai, hãy thêm các crate lệnh và giao dịch Solana được sử dụng trong bài kiểm tra của bạn:

cargo add --dev solana-instruction solana-message solana-transaction

litesvm-loader là gì?

Crate litesvm-loader cung cấp các hàm trợ giúp để triển khai chương trình thông qua BPF upgradeable loader bên trong LiteSVM. Sử dụng nó khi bài kiểm tra của bạn cần các program account thuộc sở hữu của loader, programdata account, hoặc hành vi của upgrade authority thay vì chèn trực tiếp một chương trình bằng svm.add_program(...).

Triển Khai Có Thể Nâng Cấp

  • Tạo loader buffer account
  • Ghi các byte chương trình theo từng phần
  • Triển khai program account cuối cùng với BPF upgradeable loader
  • Sử dụng keypair chương trình được cung cấp làm ID chương trình

Quản Lý Upgrade Authority - Thay đổi upgrade authority cho một chương trình đã được triển khai - Hỗ trợ gán một authority mới - Hỗ trợ truyền None để làm cho chương trình không thể thay đổi

Trạng Thái Loader Thực Tế - Thực thi cùng mô hình loader account mà chương trình của bạn thấy trên chuỗi - Cho phép các bài kiểm tra kiểm tra program account và programdata account - Giúp phát hiện các lỗi bị ẩn khi chèn chương trình trực tiếp

Đối với hầu hết các bài kiểm thử, svm.add_program(program_id, program_bytes) vẫn là cách nhanh nhất và đơn giản nhất để tải một chương trình. Hãy sử dụng litesvm-loader khi bố cục tài khoản loader hoặc quyền nâng cấp là một phần trong những gì bạn cần kiểm thử.

Ví dụ nhanh

Dưới đây là một ví dụ hoàn chỉnh triển khai một chương trình thông qua upgradeable loader và sau đó xoay vòng quyền của nó:

use litesvm::LiteSVM;
use litesvm_loader::{deploy_upgradeable_program, set_upgrade_authority};
use solana_keypair::Keypair;
use solana_signer::Signer;
#[test]
fn test_upgradeable_deployment() {
let mut svm = LiteSVM::new();
let payer = Keypair::new();
svm.airdrop(&payer.pubkey(), 10_000_000_000).unwrap();
// Use the keypair that should own the program ID.
// For Anchor programs, this is usually target/deploy/<program>-keypair.json.
let program = Keypair::new();
let program_bytes = include_bytes!("../target/deploy/my_program.so");
deploy_upgradeable_program(&mut svm, &payer, &program, program_bytes).unwrap();
let program_account = svm.get_account(&program.pubkey()).unwrap();
assert!(program_account.executable);
let new_authority = Keypair::new();
set_upgrade_authority(
&mut svm,
&payer,
&program.pubkey(),
&payer,
Some(&new_authority.pubkey()),
)
.unwrap();
}

Chọn keypair cho chương trình

deploy_upgradeable_program sử dụng đối số program_kp làm địa chỉ chương trình. Nếu chương trình của bạn khai báo một ID cố định, hãy tải keypair triển khai đã tạo thay vì tạo một keypair ngẫu nhiên:

use solana_keypair::read_keypair_file;
let program = read_keypair_file("target/deploy/my_program-keypair.json").unwrap();
deploy_upgradeable_program(&mut svm, &payer, &program, program_bytes).unwrap();

Gọi chương trình đã triển khai

Sau khi triển khai, hãy gọi chương trình theo cách tương tự như bạn gọi bất kỳ chương trình được tải qua LiteSVM. Xây dựng một instruction cho chương trình của bạn, ký giao dịch và gửi qua cùng một instance LiteSVM:

use solana_instruction::Instruction;
use solana_message::Message;
use solana_transaction::Transaction;
let instruction = Instruction::new_with_bytes(
program.pubkey(),
&[], // instruction data for your program
vec![], // account metas for your program
);
let message = Message::new(&[instruction], Some(&payer.pubkey()));
let tx = Transaction::new(&[&payer], message, svm.latest_blockhash());
svm.send_transaction(tx).unwrap();

Các thành phần chính

deploy_upgradeable_program

Đối sốMô tả
svmInstance LiteSVM có thể thay đổi nhận chương trình đã triển khai
payer_kpNgười trả phí và quyền nâng cấp ban đầu
program_kpkeypair có khóa công khai trở thành ID chương trình
program_bytesCác byte chương trình SBF đã biên dịch, thường lấy từ target/deploy/*.so

deploy_upgradeable_program tạo một loader buffer, ghi các byte chương trình theo từng đoạn 512 byte và triển khai chương trình với khả năng nâng cấp trong tương lai.

set_upgrade_authority

Đối sốMô tả
svmInstance LiteSVM có thể thay đổi chứa chương trình đã triển khai
from_keypairNgười trả phí và quyền ký cho giao dịch
program_addressID chương trình cần thay đổi quyền
current_authority_keypairkeypair quyền nâng cấp hiện tại
new_authority_addressĐịa chỉ quyền mới, hoặc None để làm cho chương trình không thể thay đổi

Trong triển khai helper hiện tại, giao dịch được tạo ra được ký bởi from_keypair. Truyền authority hiện tại dưới dạng from_keypair, hoặc giữ payer và authority hiện tại giống nhau, khi thay đổi upgrade authority.

Quy Trình Thường Gặp

Triển khai với program ID đã khai báo

use solana_keypair::read_keypair_file;
let program = read_keypair_file("target/deploy/my_program-keypair.json").unwrap();
let program_bytes = include_bytes!("../target/deploy/my_program.so");
deploy_upgradeable_program(&mut svm, &payer, &program, program_bytes).unwrap();

Làm cho program bất biến

set_upgrade_authority(
&mut svm,
&payer,
&program.pubkey(),
&payer,
None,
)
.unwrap();

Khắc Phục Sự Cố

Các Lỗi Thường Gặp

LỗiNguyên nhânGiải pháp
ProgramAccountNotFound hoặc lỗi instruction với ID saiQuá trình triển khai đã sử dụng Keypair ngẫu nhiên trong khi program yêu cầu một ID đã khai báoĐọc target/deploy/<program>-keypair.json và truyền keypair đó vào deploy_upgradeable_program
InsufficientFundsPayer không có đủ lamport cho loader buffer và program accountAirdrop thêm lamport trước khi triển khai
MissingRequiredSignature khi thay đổi authorityAuthority hiện tại chưa ký giao dịchTruyền authority hiện tại dưới dạng from_keypair, hoặc giữ payer và authority hiện tại là cùng một keypair
Triển khai program chậm hơn dự kiếnQuá trình triển khai loader ghi byte thông qua các loader instruction thực tếSử dụng svm.add_program(...) khi bạn không cần trạng thái loader hoặc hành vi upgrade authority

Is this page helpful?