Dokumentasi SolanaLiteSVMRustPeti Tambahanlitesvm-loader

Mulai Cepat

Instalasi

Pastikan Anda memiliki semua dependensi yang diperlukan:

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

Jika pengujian Anda memanggil program yang telah di-deploy secara langsung, tambahkan juga crate instruksi dan transaksi Solana yang digunakan oleh pengujian Anda:

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

Apa itu litesvm-loader?

Crate litesvm-loader menyediakan helper untuk men-deploy program melalui BPF upgradeable loader di dalam LiteSVM. Gunakan ini ketika pengujian Anda membutuhkan program account milik loader, program data account, atau perilaku upgrade authority alih-alih menyisipkan program secara langsung menggunakan svm.add_program(...).

Deployment yang Dapat Diperbarui

  • Membuat buffer account loader
  • Menulis byte program dalam potongan-potongan
  • Men-deploy program account final dengan BPF upgradeable loader
  • Menggunakan program keypair yang diberikan sebagai ID program

Manajemen Upgrade Authority - Mengubah upgrade authority untuk program yang sudah di-deploy - Mendukung penetapan authority baru - Mendukung pemberian None untuk membuat program tidak dapat diubah

Status Loader Nyata - Menjalankan model account loader yang sama seperti yang dilihat program Anda di-chain - Memungkinkan pengujian untuk memeriksa program account dan program data account - Membantu mendeteksi kesalahan yang tersembunyi akibat penyisipan program secara langsung

Untuk sebagian besar pengujian, svm.add_program(program_id, program_bytes) masih merupakan cara tercepat dan termudah untuk memuat program. Gunakan litesvm-loader ketika tata letak loader account atau upgrade authority merupakan bagian dari yang perlu Anda uji.

Contoh Cepat

Berikut adalah contoh lengkap yang men-deploy program melalui upgradeable loader dan kemudian merotasi authority-nya:

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();
}

Memilih Program keypair

deploy_upgradeable_program menggunakan argumen program_kp sebagai alamat program. Jika program Anda mendeklarasikan ID tetap, muat keypair deploy yang dihasilkan alih-alih membuat keypair acak:

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();

Memanggil Program yang Di-deploy

Setelah deployment, panggil program dengan cara yang sama seperti Anda memanggil program yang dimuat oleh LiteSVM. Buat instruksi untuk program Anda, tandatangani transaksi, dan kirimkan melalui instance LiteSVM yang sama:

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();

Komponen Utama

deploy_upgradeable_program

ArgumenDeskripsi
svmInstance LiteSVM yang dapat diubah dan menerima program yang di-deploy
payer_kpPembayar biaya dan upgrade authority awal
program_kpkeypair yang public key-nya menjadi ID program
program_bytesByte program SBF yang telah dikompilasi, biasanya dari target/deploy/*.so

deploy_upgradeable_program membuat loader buffer, menulis byte program dalam potongan 512-byte, dan men-deploy program dengan ruang untuk peningkatan di masa mendatang.

set_upgrade_authority

ArgumenDeskripsi
svmInstance LiteSVM yang dapat diubah yang berisi program yang di-deploy
from_keypairPembayar biaya dan signing authority untuk transaksi
program_addressID program yang authority-nya harus diubah
current_authority_keypairkeypair upgrade authority saat ini
new_authority_addressAlamat authority baru, atau None untuk membuat program tidak dapat diubah

Dalam implementasi helper saat ini, transaksi yang dihasilkan ditandatangani oleh from_keypair. Berikan otoritas saat ini sebagai from_keypair, atau pertahankan payer dan otoritas saat ini tetap sama, saat mengubah upgrade authority.

Alur Kerja Umum

Deploy dengan program ID yang dideklarasikan

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();

Membuat program tidak dapat diubah (immutable)

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

Pemecahan Masalah

Kesalahan Umum

ErrorPenyebabSolusi
ProgramAccountNotFound atau kegagalan instruksi terhadap ID yang salahDeployment menggunakan Keypair acak sementara program mengharapkan ID yang dideklarasikanBaca target/deploy/<program>-keypair.json dan berikan keypair tersebut ke deploy_upgradeable_program
InsufficientFundsPayer tidak memiliki cukup lamport untuk loader buffer dan program accountAirdrop lebih banyak lamport sebelum deployment
MissingRequiredSignature saat mengubah otoritasOtoritas saat ini tidak menandatangani transaksiBerikan otoritas saat ini sebagai from_keypair, atau pertahankan payer dan otoritas saat ini sebagai keypair yang sama
Deployment program lebih lambat dari yang diharapkanDeployment loader menulis byte melalui instruksi loader nyataGunakan svm.add_program(...) jika Anda tidak memerlukan status loader atau perilaku upgrade authority

Is this page helpful?

© 2026 Yayasan Solana. Semua hak dilindungi.