Τεκμηρίωση SolanaLiteSVMRustΕπιπλέον Κιβώτιαlitesvm-loader

Γρήγορη Εκκίνηση

Εγκατάσταση

Βεβαιωθείτε ότι έχετε όλες τις απαιτούμενες εξαρτήσεις:

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

Αν το τεστ σας καλεί απευθείας το αναπτυγμένο πρόγραμμα, προσθέστε επίσης τα crates εντολών και συναλλαγών του Solana που χρησιμοποιεί το τεστ σας:

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

Τι είναι το litesvm-loader;

Το crate litesvm-loader παρέχει βοηθητικές συναρτήσεις για την ανάπτυξη προγραμμάτων μέσω του BPF upgradeable loader εντός του LiteSVM. Χρησιμοποιήστε το όταν το τεστ σας χρειάζεται λογαριασμούς προγράμματος υπό την κυριότητα του loader, program data accounts, ή συμπεριφορά αρχής αναβάθμισης, αντί να εισάγετε απευθείας ένα πρόγραμμα με το svm.add_program(...).

Αναβαθμίσιμη Ανάπτυξη

  • Δημιουργεί τον λογαριασμό buffer του loader
  • Γράφει τα bytes του προγράμματος σε τμήματα
  • Αναπτύσσει τον τελικό program account με τον BPF upgradeable loader
  • Χρησιμοποιεί το παρεχόμενο keypair προγράμματος ως αναγνωριστικό προγράμματος

Διαχείριση Αρχής Αναβάθμισης - Αλλάζει την αρχή αναβάθμισης για ένα ήδη αναπτυγμένο πρόγραμμα - Υποστηρίζει την ανάθεση νέας αρχής - Υποστηρίζει τη μεταβίβαση None για να καταστεί το πρόγραμμα μη τροποποιήσιμο

Πραγματική Κατάσταση Loader - Ασκεί το ίδιο μοντέλο λογαριασμών loader που βλέπει το πρόγραμμά σας on-chain - Επιτρέπει στα τεστ να επιθεωρούν program account και program data accounts - Βοηθά στον εντοπισμό σφαλμάτων που κρύβονται από την άμεση εισαγωγή προγράμματος

Για τις περισσότερες δοκιμές, το svm.add_program(program_id, program_bytes) εξακολουθεί να είναι ο πιο γρήγορος και απλός τρόπος φόρτωσης ενός προγράμματος. Χρησιμοποιήστε το litesvm-loader όταν η διάταξη του loader account ή η αρχή αναβάθμισης αποτελεί μέρος αυτού που χρειάζεστε να δοκιμάσετε.

Γρήγορο Παράδειγμα

Ακολουθεί ένα πλήρες παράδειγμα που αναπτύσσει ένα πρόγραμμα μέσω του upgradeable loader και στη συνέχεια εναλλάσσει την αρχή του:

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

Επιλογή του keypair Προγράμματος

Το deploy_upgradeable_program χρησιμοποιεί το όρισμα program_kp ως τη διεύθυνση του προγράμματος. Εάν το πρόγραμμά σας δηλώνει ένα σταθερό ID, φορτώστε το παραγόμενο deploy keypair αντί να δημιουργήσετε ένα τυχαίο keypair:

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

Κλήση του Αναπτυγμένου Προγράμματος

Μετά την ανάπτυξη, καλέστε το πρόγραμμα με τον ίδιο τρόπο που θα καλούσατε οποιοδήποτε πρόγραμμα φορτωμένο από LiteSVM. Δημιουργήστε μια εντολή για το πρόγραμμά σας, υπογράψτε τη συναλλαγή και στείλτε τη μέσω της ίδιας παρουσίας 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();

Βασικά Συστατικά

deploy_upgradeable_program

ΌρισμαΠεριγραφή
svmΜεταβλητή παρουσία LiteSVM που δέχεται το αναπτυγμένο πρόγραμμα
payer_kpΠληρωτής τελών και αρχική αρχή αναβάθμισης
program_kpkeypair του οποίου το δημόσιο κλειδί γίνεται το ID προγράμματος
program_bytesΜεταγλωττισμένα bytes SBF προγράμματος, συνήθως από το target/deploy/*.so

Το deploy_upgradeable_program δημιουργεί ένα buffer loader, γράφει τα bytes του προγράμματος σε τμήματα 512 byte και αναπτύσσει το πρόγραμμα με χώρο για μελλοντικές αναβαθμίσεις.

set_upgrade_authority

ΌρισμαΠεριγραφή
svmΜεταβλητή παρουσία LiteSVM που περιέχει το αναπτυγμένο πρόγραμμα
from_keypairΠληρωτής τελών και αρχή υπογραφής για τη συναλλαγή
program_addressID προγράμματος του οποίου η αρχή πρέπει να αλλάξει
current_authority_keypairΤρέχον keypair αρχής αναβάθμισης
new_authority_addressΝέα διεύθυνση αρχής, ή None για να γίνει το πρόγραμμα αμετάβλητο

Στην τρέχουσα υλοποίηση του βοηθού, η παραγόμενη συναλλαγή υπογράφεται από from_keypair. Περάστε την τρέχουσα αρχή ως from_keypair, ή διατηρήστε τον πληρωτή και την τρέχουσα αρχή ίδιους, κατά την αλλαγή της αρχής αναβάθμισης.

Συνήθεις Ροές Εργασίας

Ανάπτυξη με το δηλωμένο αναγνωριστικό προγράμματος

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

Καταστήστε ένα πρόγραμμα αμετάβλητο

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

Αντιμετώπιση Προβλημάτων

Συνήθη Σφάλματα

ΣφάλμαΑιτίαΛύση
ProgramAccountNotFound ή αποτυχίες εντολών για λάθος αναγνωριστικόΗ ανάπτυξη χρησιμοποίησε τυχαίο Keypair ενώ το πρόγραμμα αναμένει δηλωμένο αναγνωριστικόΔιαβάστε target/deploy/<program>-keypair.json και περάστε αυτό το keypair στο deploy_upgradeable_program
InsufficientFundsΟ πληρωτής δεν έχει αρκετά lamports για το buffer του φορτωτή και τα program accountsΚάντε airdrop περισσότερων lamports πριν από την ανάπτυξη
MissingRequiredSignature κατά την αλλαγή αρχήςΗ τρέχουσα αρχή δεν υπέγραψε τη συναλλαγήΠεράστε την τρέχουσα αρχή ως from_keypair, ή διατηρήστε τον πληρωτή και την τρέχουσα αρχή ως το ίδιο keypair
Η ανάπτυξη του προγράμματος είναι πιο αργή από το αναμενόμενοΗ ανάπτυξη του φορτωτή γράφει bytes μέσω πραγματικών εντολών φορτωτήΧρησιμοποιήστε svm.add_program(...) όταν δεν χρειάζεστε κατάσταση φορτωτή ή συμπεριφορά αρχής αναβάθμισης

Is this page helpful?

© 2026 Ίδρυμα Solana. Με επιφύλαξη παντός δικαιώματος.