Τεκμηρίωση SolanaΑνάπτυξη προγραμμάτων

Ανάπτυξη προγραμμάτων

Αυτή η ενότητα παρουσιάζει τη βασική διαδικασία εγκατάστασης ενός προγράμματος Solana χρησιμοποιώντας το Solana CLI.

Αναφορά εντολών CLI

ΕργασίαΕντολή
Δημιουργία προγράμματοςcargo build-sbf
Εγκατάσταση νέου προγράμματοςsolana program deploy <path_to_program.so>
Ενημέρωση υπάρχοντος προγράμματοςsolana program deploy <path_to_program.so> (ίδιο με την εγκατάσταση)
Εμφάνιση πληροφοριών προγράμματοςsolana program show <program-id>
Μεταφορά εξουσιοδότησης προγράμματοςsolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
Μετατροπή προγράμματος σε αμετάβλητοsolana program set-upgrade-authority <program-id> --final
Κλείσιμο προγράμματοςsolana program close <program-id> --bypass-warning
Έλεγχος υπολοίπου πορτοφολιούsolana balance
Αίτημα airdrop (devnet/localhost)solana airdrop 2

Βασικές έννοιες

Πριν προχωρήσουμε, ας διευκρινίσουμε κάποια ορολογία:

  • Program ID: Η διεύθυνση του προγράμματός σας στο blockchain. Οι χρήστες αλληλεπιδρούν με το πρόγραμμά σας αναφέροντας το Program ID.
  • Program Account: Ο λογαριασμός στο blockchain που αποθηκεύει τα μεταδεδομένα του προγράμματός σας. Η διεύθυνση του program account είναι το Program ID. Το program account επίσης αποθηκεύει τη διεύθυνση του ProgramData Account.
  • ProgramData Account: Ο λογαριασμός στο blockchain που αποθηκεύει τον εκτελέσιμο κώδικα του προγράμματός σας.
  • Program Authority: Ο λογαριασμός που έχει άδεια να ενημερώνει ή να κλείνει το πρόγραμμα. Από προεπιλογή, αυτό είναι το πορτοφόλι του CLI σας.

Προαπαιτούμενα

Ρύθμιση πορτοφολιού

Μετά την εγκατάσταση, δημιουργήστε ένα τοπικό πορτοφόλι keypair. Η διεύθυνση αυτού του πορτοφολιού ορίζεται ως η προεπιλεγμένη εξουσιοδότηση προγράμματος κατά την εγκατάσταση προγραμμάτων:

Terminal
$
solana-keygen new

Αυτό δημιουργεί ένα keypair στο ~/.config/solana/id.json από προεπιλογή.

Διαμόρφωση συστάδας

Επιλέξτε σε ποια συστάδα Solana θα γίνει η ανάπτυξη. Χρησιμοποιήστε την εντολή solana config get για να ελέγξετε την τρέχουσα διαμόρφωσή σας:

Terminal
$
solana config get

Εναλλαγή μεταξύ συστάδων ανάλογα με τις ανάγκες:

Terminal
$
solana config set --url mainnet-beta
$
solana config set --url devnet
$
solana config set --url localhost
$
solana config set --url testnet
$
solana config set --url "https://your-rpc-url.com"

Χρηματοδότηση πορτοφολιού

Θα χρειαστείτε SOL για να πληρώσετε για τις αναπτύξεις προγραμμάτων. Το ποσό εξαρτάται από το μέγεθος του προγράμματός σας.

Για devnet ή localhost, χρηματοδοτήστε το πορτοφόλι σας χρησιμοποιώντας την εντολή solana airdrop:

Terminal
$
solana airdrop 2

Ελέγξτε το υπόλοιπο του πορτοφολιού σας:

Terminal
$
solana balance

Βασικές λειτουργίες

Δημιουργία προγράμματος

Για να δημιουργήσετε ένα πρόγραμμα, χρησιμοποιήστε την εντολή cargo build-sbf:

Terminal
$
cargo build-sbf

Παράδειγμα προγράμματος

Εδώ είναι ένα ελάχιστο πρόγραμμα Solana που εκτυπώνει "Hello, Solana!" στα αρχεία καταγραφής του προγράμματος.

src/lib.rs
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

Έξοδος Κατασκευής

Κατασκευάστε το πρόγραμμά σας χρησιμοποιώντας την εντολή cargo build-sbf:

Terminal
$
cargo build-sbf

Αυτό δημιουργεί δύο σημαντικά αρχεία στο target/deploy/:

  1. hello_world-keypair.json: Ένα αρχείο keypair του οποίου το δημόσιο κλειδί θα χρησιμοποιηθεί ως το Program ID σας
  2. hello_world.so: Το μεταγλωττισμένο εκτελέσιμο πρόγραμμα

Παράδειγμα προγράμματος

Εδώ είναι ένα ελάχιστο πρόγραμμα Solana που εκτυπώνει "Hello, Solana!" στα αρχεία καταγραφής του προγράμματος.

Έξοδος Κατασκευής

Κατασκευάστε το πρόγραμμά σας χρησιμοποιώντας την εντολή cargo build-sbf:

Terminal
$
cargo build-sbf

Αυτό δημιουργεί δύο σημαντικά αρχεία στο target/deploy/:

  1. hello_world-keypair.json: Ένα αρχείο keypair του οποίου το δημόσιο κλειδί θα χρησιμοποιηθεί ως το Program ID σας
  2. hello_world.so: Το μεταγλωττισμένο εκτελέσιμο πρόγραμμα
lib.rs
Cargo.toml
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

Έλεγχος Μεγέθους και Κόστους Προγράμματος

Η ανάπτυξη ενός προγράμματος απαιτεί SOL που θα διατεθεί στον λογαριασμό του προγράμματος με βάση το μέγεθος του προγράμματος. Τα μεγαλύτερα προγράμματα κοστίζουν περισσότερο SOL για ανάπτυξη.

Ελέγξτε το μέγεθος του προγράμματός σας:

Terminal
$
wc -c < ./target/deploy/hello_world.so

Υπολογίστε το απαιτούμενο SOL για αυτό το μέγεθος (bytes):

Terminal
$
solana rent 18504

Θα χρειαστείτε λίγο περισσότερο SOL από αυτό που εμφανίζεται για να καλύψετε τα τέλη συναλλαγής ανάπτυξης.

Ανάπτυξη Προγράμματος

Χρησιμοποιήστε την εντολή solana program deploy για να αναπτύξετε το πρόγραμμά σας:

Terminal
$
solana program deploy ./target/deploy/hello_world.so

Το Program Id που εμφανίζεται είναι η μόνιμη διεύθυνση του προγράμματός σας στο δίκτυο.

Για ανάπτυξη με συγκεκριμένο Program ID (αντί για το αυτόματα δημιουργημένο), χρησιμοποιήστε:

Terminal
$
solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json

Μπορείτε να δημιουργήσετε νέα keypairs χρησιμοποιώντας την εντολή solana-keygen:

Terminal
$
solana-keygen new -o ./custom-keypair.json

Ενημέρωση προγράμματος

Ενημερώστε το πρόγραμμά σας χρησιμοποιώντας την ίδια εντολή solana program deploy:

  1. Κάντε αλλαγές στον κώδικα του προγράμματός σας
  2. Επαναδημιουργήστε το πρόγραμμά σας: cargo build-sbf
  3. Αναπτύξτε την ενημέρωση:
Terminal
$
solana program deploy ./target/deploy/hello_world.so

Εάν το ενημερωμένο πρόγραμμά σας απαιτεί περισσότερο χώρο (bytes) από αυτόν που έχει ήδη διατεθεί, η ανάπτυξη θα επεκτείνει αυτόματα τον λογαριασμό του προγράμματος. Αυτό συμβαίνει όταν το νέο σας πρόγραμμα είναι μεγαλύτερο από την προηγούμενη έκδοση. Ο λογαριασμός του προγράμματος χρειάζεται επιπλέον bytes για την αποθήκευση του νέου προγράμματος. Το CLI θα υπολογίσει το απαιτούμενο SOL και θα το αφαιρέσει αυτόματα από το πορτοφόλι σας.

Μπορείτε επίσης να επεκτείνετε χειροκίνητα ένα πρόγραμμα για να διαθέσετε περισσότερα bytes:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000

Διαχείριση προγράμματος

Μόλις αναπτυχθεί το πρόγραμμά σας, υπάρχουν αρκετές συνηθισμένες εντολές για τη διαχείριση του λογαριασμού του προγράμματος.

Προβολή μεταδεδομένων προγράμματος

Για να ελέγξετε τα μεταδεδομένα του προγράμματός σας, χρησιμοποιήστε την εντολή solana program show:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

Παράδειγμα εξόδου:

$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7c
Authority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1
Last Deployed In Slot: 6573
Data Length: 18504 (0x4848) bytes
Balance: 0.12999192 SOL

Μεταφορά της authority του προγράμματος

Για να μεταφέρετε την authority του προγράμματος σε διαφορετικό λογαριασμό, χρησιμοποιήστε την εντολή solana program set-upgrade-authority:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json

Μετά τη μεταφορά της authority του προγράμματος, δεν μπορείτε πλέον να ενημερώσετε το πρόγραμμα εκτός αν έχετε πρόσβαση στο νέο keypair της authority.

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

Για να κάνετε το πρόγραμμά σας αμετάβλητο, χρησιμοποιήστε την εντολή solana program set-upgrade-authority με τη σημαία --final για να αφαιρέσετε την authority του προγράμματος:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final

Μόλις ένα πρόγραμμα γίνει αμετάβλητο, δεν μπορεί ποτέ να ενημερωθεί ή να κλείσει.

Κλείσιμο του προγράμματός σας

Για να κλείσετε το πρόγραμμά σας και να ανακτήσετε το SOL που έχει κατανεμηθεί στον λογαριασμό του προγράμματος, χρησιμοποιήστε την εντολή solana program close:

Terminal
$
solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning

Μόλις κλείσει, το Program ID δεν μπορεί να επαναχρησιμοποιηθεί. Δεν μπορείτε να αναπτύξετε ένα νέο πρόγραμμα στην ίδια διεύθυνση.

Εντολές βοηθητικών προγραμμάτων

Λίστα όλων των προγραμμάτων

Δείτε όλα τα προγράμματα όπου το τρέχον πορτοφόλι σας είναι η authority:

Terminal
$
solana program show --programs

Παράδειγμα εξόδου:

Program Id | Slot | Authority | Balance
-------------------------------------------------|------------|------------------------------------------------|-------------
7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.12999192
3KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328

Λήψη ενός αναπτυγμένου προγράμματος

Για να κατεβάσετε ένα αναπτυγμένο πρόγραμμα, χρησιμοποιήστε την εντολή solana program dump:

Terminal
$
solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so

Προηγμένες επιλογές

Σημαίες ανάπτυξης

Όταν το δίκτυο Solana είναι συμφορημένο, χρησιμοποιήστε αυτές τις σημαίες για να βοηθήσουν στην ανάπτυξη του προγράμματος.

Παράδειγμα χρήσης:

Terminal
$
solana program deploy ./target/deploy/hello_world.so \
--with-compute-unit-price 10000 \
--max-sign-attempts 10 \
--use-rpc

Επεξήγηση επιλογών:

  • --with-compute-unit-price: Ορίστε το τέλος προτεραιότητας σε μικρο-λάμπορτς (0.000001 SOL) ανά μονάδα υπολογισμού. Ελέγξτε το Helius Priority Fee API για τις τρέχουσες τιμές. Το τέλος προτεραιότητας είναι ένα επιπλέον τέλος που καταβάλλεται στον τρέχοντα ηγέτη για να δώσει προτεραιότητα στη συναλλαγή σας.
  • --max-sign-attempts: Αριθμός επαναλήψεων με νέο blockhash εάν οι συναλλαγές λήξουν. (Προεπιλογή: 5)
  • --use-rpc: Αποστολή συναλλαγών στο διαμορφωμένο RPC. Αυτή η σημαία απαιτεί σύνδεση RPC με στάθμιση συμμετοχής από παρόχους όπως το Triton ή το Helius.

Is this page helpful?