Solana-DokumentationLiteSVMRustZusätzliche Crateslitesvm-loader

Schnellstart

Installation

Stellen Sie sicher, dass alle erforderlichen Abhängigkeiten vorhanden sind:

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

Falls Ihr Test das bereitgestellte Programm direkt aufruft, fügen Sie außerdem die von Ihrem Test verwendeten Solana- Anweisungen und Transaktions-Crates hinzu:

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

Was ist litesvm-loader?

Die litesvm-loader-Crate stellt Hilfsfunktionen bereit, um Programme über den BPF-Upgradeable-Loader innerhalb von LiteSVM zu deployen. Verwenden Sie sie, wenn Ihr Test loader-eigene program accounts, programdata account oder das Verhalten der Upgrade-Authority benötigt, anstatt ein Programm direkt mit svm.add_program(...) einzufügen.

Upgradefähiges Deployment

  • Erstellt den Loader-Buffer-Account
  • Schreibt Programm-Bytes in Blöcken
  • Stellt den finalen program account mit dem BPF-Upgradeable-Loader bereit
  • Verwendet das angegebene Programm-keypair als Programm-ID

Upgrade-Authority-Verwaltung – Ändert die Upgrade-Authority eines bereits bereitgestellten Programms – Unterstützt die Zuweisung einer neuen Authority – Unterstützt die Übergabe von None, um das Programm unveränderlich zu machen

Echter Loader-Zustand - Verwendet dasselbe Loader-Kontenmodell, das Ihr Programm on-chain sieht - Ermöglicht Tests, program accounts und programdata account zu inspizieren - Hilft dabei, Fehler aufzudecken, die durch das direkte Einfügen von Programmen verborgen bleiben

Für die meisten Tests ist svm.add_program(program_id, program_bytes) nach wie vor der schnellste und einfachste Weg, ein Programm zu laden. Verwende litesvm-loader, wenn das Layout des Loader-Konten oder die Upgrade-Authority Teil dessen ist, was du testen möchtest.

Schnellbeispiel

Hier ist ein vollständiges Beispiel, das ein Programm über den upgradefähigen Loader deployed und anschließend seine Upgrade-Authority rotiert:

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

Das Program keypair auswählen

deploy_upgradeable_program verwendet das Argument program_kp als Programm- Adresse. Wenn dein Programm eine feste ID deklariert, lade das generierte Deploy-keypair anstatt ein zufälliges keypair zu erstellen:

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

Das deployed Programm aufrufen

Nach dem Deployment rufst du das Programm auf dieselbe Weise auf, wie du jedes LiteSVM-geladene Programm aufrufen würdest. Erstelle eine Anweisung für dein Programm, signiere die Transaktion und sende sie über dieselbe LiteSVM-Instanz:

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

Wichtige Komponenten

deploy_upgradeable_program

ArgumentBeschreibung
svmVeränderliche LiteSVM-Instanz, die das deployed Programm empfängt
payer_kpGebührenzahler und initiale Upgrade-Authority
program_kpkeypair, dessen öffentlicher Schlüssel zur Programm-ID wird
program_bytesKompilierte SBF-Programm-Bytes, in der Regel von target/deploy/*.so

deploy_upgradeable_program erstellt einen Loader-Puffer, schreibt die Programm-Bytes in 512-Byte-Blöcken und deployed das Programm mit Spielraum für zukünftige Upgrades.

set_upgrade_authority

ArgumentBeschreibung
svmVeränderliche LiteSVM-Instanz, die das deployed Programm enthält
from_keypairGebührenzahler und Unterzeichnungsbefugnis für die Transaktion
program_addressProgramm-ID, deren Upgrade-Authority geändert werden soll
current_authority_keypairAktuelles keypair der Upgrade-Authority
new_authority_addressNeue Upgrade-Authority-Adresse, oder None, um das Programm unveränderlich zu machen

In der aktuellen Hilfsimplementierung wird die generierte Transaktion von from_keypair signiert. Übergeben Sie die aktuelle Upgrade-Authority als from_keypair, oder halten Sie den Zahler und die aktuelle Upgrade-Authority gleich, wenn Sie die Upgrade-Authority ändern.

Häufige Workflows

Deployment mit der deklarierten Programm-ID

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

Ein Programm unveränderlich machen

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

Fehlerbehebung

Häufige Fehler

FehlerUrsacheLösung
ProgramAccountNotFound oder Anweisungen scheitern an der falschen IDBeim Deployment wurde ein zufälliges Keypair verwendet, während das Programm eine deklarierte ID erwartetLesen Sie target/deploy/<program>-keypair.json und übergeben Sie das keypair an deploy_upgradeable_program
InsufficientFundsDer Zahler verfügt nicht über genügend lamports für Loader-Puffer und program accountVor dem Deployment mehr lamports per Airdrop erhalten
MissingRequiredSignature beim Ändern der Upgrade-AuthorityDie aktuelle Upgrade-Authority hat die Transaktion nicht signiertÜbergeben Sie die aktuelle Upgrade-Authority als from_keypair, oder verwenden Sie Zahler und aktuelle Upgrade-Authority als dasselbe keypair
Das Programm-Deployment ist langsamer als erwartetLoader-Deployment schreibt Bytes über echte Loader- AnweisungenVerwenden Sie svm.add_program(...), wenn Sie kein Loader-State- oder Upgrade-Authority-Verhalten benötigen

Is this page helpful?

© 2026 Solana Foundation. Alle Rechte vorbehalten.