Documentation SolanaLiteSVMRustCrates supplémentaireslitesvm-loader

Démarrage rapide

Installation

Assurez-vous d'avoir toutes les dépendances nécessaires :

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

Si votre test invoque directement le programme déployé, ajoutez également les crates d'instructions et de transactions Solana utilisés par votre test :

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

Qu'est-ce que litesvm-loader ?

Le crate litesvm-loader fournit des utilitaires pour déployer des programmes via le chargeur BPF évolutif dans LiteSVM. Utilisez-le lorsque votre test nécessite des program accounts appartenant au chargeur, des program data accounts, ou un comportement d'autorité de mise à niveau plutôt que d'insérer directement un programme avec svm.add_program(...).

Déploiement évolutif

  • Crée le compte tampon du chargeur
  • Écrit les octets du programme par blocs
  • Déploie le program account final avec le chargeur BPF évolutif
  • Utilise le keypair de programme fourni comme identifiant de programme

Gestion de l'autorité de mise à niveau - Modifie l'autorité de mise à niveau d'un programme déjà déployé - Prend en charge l'attribution d'une nouvelle autorité - Prend en charge le passage de None pour rendre le programme immuable

État réel du chargeur - Exerce le même modèle de compte de chargeur que votre programme voit on-chain - Permet aux tests d'inspecter les program accounts et les program data accounts - Aide à détecter les erreurs masquées par l'insertion directe de programme

Pour la plupart des tests, svm.add_program(program_id, program_bytes) reste la méthode la plus rapide et la plus simple pour charger un programme. Utilisez litesvm-loader lorsque la structure du loader account ou l'autorité de mise à jour fait partie de ce que vous devez tester.

Exemple rapide

Voici un exemple complet qui déploie un programme via le loader évolutif et effectue ensuite une rotation de son autorité :

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

Choisir le keypair du programme

deploy_upgradeable_program utilise l'argument program_kp comme adresse du programme. Si votre programme déclare un ID fixe, chargez le keypair de déploiement généré au lieu de créer un keypair aléatoire :

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

Invoquer le programme déployé

Après le déploiement, appelez le programme de la même manière que vous appelleriez tout programme chargé via LiteSVM. Construisez une instruction pour votre programme, signez la transaction et envoyez-la via la même 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();

Composants clés

deploy_upgradeable_program

ArgumentDescription
svmInstance LiteSVM mutable qui reçoit le programme déployé
payer_kpPayeur des frais et autorité de mise à jour initiale
program_kpkeypair dont la clé publique devient l'ID du programme
program_bytesOctets du programme SBF compilé, généralement issus de target/deploy/*.so

deploy_upgradeable_program crée un tampon de loader, écrit les octets du programme par blocs de 512 octets et déploie le programme en prévoyant la possibilité de futures mises à jour.

set_upgrade_authority

ArgumentDescription
svmInstance LiteSVM mutable contenant le programme déployé
from_keypairPayeur des frais et autorité de signature pour la transaction
program_addressID du programme dont l'autorité doit être modifiée
current_authority_keypairkeypair de l'autorité de mise à jour actuelle
new_authority_addressNouvelle adresse d'autorité, ou None pour rendre le programme immuable

Dans l'implémentation actuelle du helper, la transaction générée est signée par from_keypair. Passez l'autorité actuelle en tant que from_keypair, ou conservez le payeur et l'autorité actuelle identiques, lors du changement d'autorité de mise à niveau.

Workflows courants

Déployer avec l'ID de programme déclaré

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

Rendre un programme immuable

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

Dépannage

Erreurs courantes

ErreurCauseSolution
ProgramAccountNotFound ou échecs d'instruction sur un mauvais IDLe déploiement a utilisé un Keypair aléatoire alors que le programme attend un ID déclaréLisez target/deploy/<program>-keypair.json et passez ce keypair à deploy_upgradeable_program
InsufficientFundsLe payeur ne dispose pas de suffisamment de lamports pour le buffer du chargeur et les program accountsEffectuez un airdrop de lamports supplémentaires avant le déploiement
MissingRequiredSignature lors du changement d'autoritéL'autorité actuelle n'a pas signé la transactionPassez l'autorité actuelle en tant que from_keypair, ou conservez le payeur et l'autorité actuelle avec le même keypair
Le déploiement du programme est plus lent que prévuLe déploiement du chargeur écrit les octets via de vraies instructions de chargeurUtilisez svm.add_program(...) si vous n'avez pas besoin du comportement d'état du chargeur ou d'autorité de mise à niveau

Is this page helpful?

© 2026 Fondation Solana. Tous droits réservés.