Solana DokümantasyonuLiteSVMRustEk Sandıklarlitesvm-loader

Hızlı Başlangıç

Kurulum

Gerekli tüm bağımlılıklara sahip olduğunuzdan emin olun:

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

Testiniz dağıtılan programı doğrudan çağırıyorsa, testinizde kullanılan Solana komut ve işlem crate'lerini de ekleyin:

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

litesvm-loader Nedir?

litesvm-loader crate'i, LiteSVM içinde BPF yükseltilebilir yükleyici aracılığıyla program dağıtımı için yardımcı araçlar sağlar. Testinizin svm.add_program(...) ile programı doğrudan eklemek yerine yükleyiciye ait program accounts, program data accounts veya yükseltme yetkisi davranışına ihtiyaç duyduğu durumlarda kullanın.

Yükseltilebilir Dağıtım

  • Yükleyici arabellek hesabını oluşturur
  • Program baytlarını parçalar hâlinde yazar
  • BPF yükseltilebilir yükleyici ile nihai program account'u dağıtır
  • Sağlanan program keypair'ini program kimliği olarak kullanır

Yükseltme Yetkisi Yönetimi - Zaten dağıtılmış bir programın yükseltme yetkisini değiştirir - Yeni bir yetki atamayı destekler - Programı değiştirilemez hâle getirmek için None geçişini destekler

Gerçek Yükleyici Durumu - Programınızın zincir üzerinde gördüğü aynı yükleyici hesap modelini çalıştırır - Testlerin program ve program data accounts'ları incelemesine olanak tanır - Doğrudan program ekleme ile gizlenen hataları yakalamaya yardımcı olur

Çoğu test için svm.add_program(program_id, program_bytes), bir programı yüklemek için hâlâ en hızlı ve en basit yoldur. Yükleyici hesabı düzeni veya yükseltme yetkisi test etmeniz gereken bir parçaysa litesvm-loader kullanın.

Hızlı Örnek

Aşağıda, yükseltilebilir yükleyici aracılığıyla bir programı dağıtan ve ardından yetkisini değiştiren eksiksiz bir örnek verilmiştir:

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

Program keypair Seçimi

deploy_upgradeable_program, program adresi olarak program_kp argümanını kullanır. Programınız sabit bir kimlik bildiriyorsa, rastgele bir keypair oluşturmak yerine oluşturulan dağıtım keypair'ini yükleyin:

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

Dağıtılan Programı Çağırma

Dağıtımın ardından, programı LiteSVM ile yüklenmiş herhangi bir programı çağırır gibi çağırın. Programınız için bir talimat oluşturun, işlemi imzalayın ve aynı LiteSVM örneği üzerinden gönderin:

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

Temel Bileşenler

deploy_upgradeable_program

ArgümanAçıklama
svmDağıtılan programı alan değiştirilebilir LiteSVM örneği
payer_kpÜcret ödeyici ve ilk yükseltme yetkisi
program_kpGenel anahtarı program kimliği olan keypair
program_bytesDerlenmiş SBF program baytları, genellikle target/deploy/*.so kaynağından

deploy_upgradeable_program bir yükleyici arabelleği oluşturur, program baytlarını 512 baytlık parçalar hâlinde yazar ve programı gelecekteki yükseltmelere yer bırakarak dağıtır.

set_upgrade_authority

ArgümanAçıklama
svmDağıtılan programı içeren değiştirilebilir LiteSVM örneği
from_keypairİşlem için ücret ödeyici ve imzalama yetkisi
program_addressYetkisi değiştirilecek program kimliği
current_authority_keypairMevcut yükseltme yetkisi keypair'i
new_authority_addressYeni yetki adresi veya programı değiştirilemez kılmak için None

Mevcut yardımcı uygulamada, oluşturulan işlem from_keypair tarafından imzalanır. Yükseltme yetkisini değiştirirken mevcut yetkiyi from_keypair olarak geçin ya da ödeyici ile mevcut yetkiyi aynı tutun.

Yaygın İş Akışları

Bildirilen program ID'si ile dağıtım

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

Programı değiştirilemez hale getirme

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

Sorun Giderme

Yaygın Hatalar

HataNedenÇözüm
ProgramAccountNotFound veya yanlış ID'ye karşı yönerge hatalarıDağıtım rastgele bir Keypair kullanırken program bildirilen bir ID bekliyortarget/deploy/<program>-keypair.json dosyasını okuyun ve o keypair'i deploy_upgradeable_program'e geçin
InsufficientFundsÖdeyicinin loader tamponu ve program account'ları için yeterli lamport'u yokDağıtımdan önce daha fazla lamport airdrop edin
Yetki değiştirirken MissingRequiredSignatureMevcut yetki işlemi imzalamadıMevcut yetkiyi from_keypair olarak geçin ya da ödeyici ve mevcut yetkiyi aynı keypair olarak tutun
Program dağıtımı beklenenden yavaşLoader dağıtımı baytları gerçek loader yönergeleri aracılığıyla yazarLoader durumuna veya yükseltme yetkisi davranışına ihtiyaç duymadığınızda svm.add_program(...) kullanın

Is this page helpful?

© 2026 Solana Vakfı. Tüm hakları saklıdır.