Solana-dokumentaatioLiteSVMRustLisälaatikotlitesvm-loader

Pikaopas

Asennus

Varmista, että sinulla on kaikki tarvittavat riippuvuudet:

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

Jos testisi kutsuu käyttöönotettua ohjelmaa suoraan, lisää myös testissäsi käytetyt Solana-käsky- ja transaktiopaketit:

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

Mikä on litesvm-loader?

litesvm-loader-paketti tarjoaa apuvälineitä ohjelmien käyttöönottoon BPF-päivitettävän lataajan kautta LiteSVM:ssä. Käytä sitä, kun testisi tarvitsee lataajan omistamia program accounts -tilejä, program data accounts -tilejä tai päivitysvaltuuden hallintaa sen sijaan, että lisäisit ohjelman suoraan svm.add_program(...)-komennolla.

Päivitettävä käyttöönotto

  • Luo lataajan puskuritilin
  • Kirjoittaa ohjelmatavut osissa
  • Ottaa lopullisen program account -tilin käyttöön BPF-päivitettävällä lataajalla
  • Käyttää annettua program keypair -avariparia ohjelmatunnuksena

Päivitysvaltuuden hallinta - Muuttaa jo käyttöönotetun ohjelman päivitysvaltuuden - Tukee uuden valtuuden määrittämistä - Tukee None-arvon välittämistä ohjelman tekemiseksi muuttumattomaksi

Todellinen lataajan tila - Käyttää samaa lataajan tilirakennetta, jonka ohjelma näkee ketjussa - Mahdollistaa program account- ja program data account -tilien tarkastelun testeissä - Auttaa havaitsemaan virheet, jotka peittyisivät suorassa ohjelman lisäämisessä

Useimmissa testeissä svm.add_program(program_id, program_bytes) on edelleen nopein ja yksinkertaisin tapa ladata ohjelma. Käytä litesvm-loader kun loader-tilin rakenne tai päivitysvaltuus on osa testattavaa toiminnallisuutta.

Nopea esimerkki

Tässä on täydellinen esimerkki, joka ottaa käyttöön ohjelman päivitettävän loaderin kautta ja vaihtaa sen valtuuden:

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

Ohjelman keypair-valinnan tekeminen

deploy_upgradeable_program käyttää program_kp-argumenttia ohjelman osoitteena. Jos ohjelmasi ilmoittaa kiinteän tunnuksen, lataa generoitu käyttöönotto-keypair satunnaisen keypair-luomisen sijaan:

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

Käyttöönotetun ohjelman kutsuminen

Käyttöönoton jälkeen kutsu ohjelmaa samalla tavalla kuin mitä tahansa LiteSVM:llä ladattua ohjelmaa. Luo instruktio ohjelmaasi varten, allekirjoita transaktio ja lähetä se saman LiteSVM-instanssin kautta:

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

Keskeiset komponentit

deploy_upgradeable_program

ArgumenttiKuvaus
svmMuuttuva LiteSVM-instanssi, joka vastaanottaa käyttöönotetun ohjelman
payer_kpMaksunmaksaja ja alkuperäinen päivitysvaltuus
program_kpkeypair, jonka julkinen avain toimii ohjelmatunnuksena
program_bytesKäännetyt SBF-ohjelmatavut, yleensä haettu target/deploy/*.so:stä

deploy_upgradeable_program luo loader-puskurin, kirjoittaa ohjelmatavut 512 tavun lohkoissa ja ottaa ohjelman käyttöön siten, että tulevat päivitykset ovat mahdollisia.

set_upgrade_authority

ArgumenttiKuvaus
svmMuuttuva LiteSVM-instanssi, joka sisältää käyttöönotetun ohjelman
from_keypairMaksunmaksaja ja transaktion allekirjoitusvaltuus
program_addressSen ohjelman tunnus, jonka valtuuden tulisi muuttua
current_authority_keypairNykyinen päivitysvaltuuden keypair
new_authority_addressUusi valtuusosoite tai None, jotta ohjelma muuttuu muuttumattomaksi

Nykyisessä apumetodien toteutuksessa luotu transaktio allekirjoitetaan from_keypair:llä. Välitä nykyinen auktoriteetti muodossa from_keypair, tai pidä maksaja ja nykyinen auktoriteetti samana, kun vaihdat päivitysauktoriteettia.

Yleiset työnkulut

Ota käyttöön määritetyllä ohjelmatunnuksella

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

Tee ohjelmasta muuttumaton

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

Vianmääritys

Yleiset virheet

VirheSyyRatkaisu
ProgramAccountNotFound tai ohjetoimintojen epäonnistumiset väärää tunnusta vastaanKäyttöönotossa käytettiin satunnaista Keypair:ää, vaikka ohjelma odottaa määritettyä tunnustaLue target/deploy/<program>-keypair.json ja välitä kyseinen keypair deploy_upgradeable_program:lle
InsufficientFundsMaksajalla ei ole tarpeeksi lamporteja loader-puskurin ja program account -tilien käyttöönAirdrop lisää lamporteja ennen käyttöönottoa
MissingRequiredSignature auktoriteettia vaihdettaessaNykyinen auktoriteetti ei allekirjoittanut transaktiotaVälitä nykyinen auktoriteetti muodossa from_keypair, tai pidä maksaja ja nykyinen auktoriteetti samana keypair-avaimena
Ohjelman käyttöönotto on odotettua hitaampaaLoader-käyttöönotto kirjoittaa tavuja todellisten loader-ohjeiden kauttaKäytä svm.add_program(...), kun et tarvitse loader-tilaa tai päivitysauktoriteettikäyttäytymistä

Is this page helpful?

© 2026 Solana Foundation. Kaikki oikeudet pidätetään.