Programme deployen
Dieser Abschnitt führt durch den grundlegenden Prozess der Bereitstellung eines Solana-Programms mit der Solana CLI.
CLI-Befehlsreferenz
Aufgabe | Befehl |
---|---|
Programm erstellen | cargo build-sbf |
Neues Programm bereitstellen | solana program deploy <path_to_program.so> |
Bestehendes Programm aktualisieren | solana program deploy <path_to_program.so> (gleich wie bereitstellen) |
Programminformationen anzeigen | solana program show <program-id> |
Programmautorität übertragen | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
Programm unveränderlich machen | solana program set-upgrade-authority <program-id> --final |
Programm schließen | solana program close <program-id> --bypass-warning |
Wallet-Guthaben prüfen | solana balance |
Airdrop anfordern (devnet/localhost) | solana airdrop 2 |
Schlüsselkonzepte
Bevor wir beginnen, klären wir einige Begriffe:
- Program ID: Die On-Chain-Adresse deines Programms. Benutzer interagieren mit deinem Programm, indem sie auf die Program ID verweisen.
- Program Account: Das On-Chain-Konto, das die Metadaten deines Programms speichert. Die Adresse des program account ist die Program ID. Der program account speichert auch die Adresse des programdata account.
- ProgramData Account: Das On-Chain-Konto, das den bereitgestellten ausführbaren Code deines Programms speichert.
- Programmautorität: Das Konto, das die Berechtigung hat, das Programm zu aktualisieren oder zu schließen. Standardmäßig ist dies dein CLI-Wallet.
Voraussetzungen
Wallet einrichten
Nach der Installation erstelle ein lokales Keypair-Wallet. Die Adresse dieses Wallets wird bei der Bereitstellung von Programmen als Standard-Programmautorität festgelegt:
$solana-keygen new
Dies erstellt standardmäßig ein Keypair unter ~/.config/solana/id.json
.
Cluster konfigurieren
Wählen Sie, auf welchem Solana-Cluster Sie deployen möchten. Verwenden Sie den
Befehl solana config get
, um Ihre aktuelle Konfiguration zu überprüfen:
$solana config get
Wechseln Sie bei Bedarf zwischen den Clustern:
$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"
Wallet aufladen
Sie benötigen SOL, um für Programm-Deployments zu bezahlen. Die Menge hängt von der Größe Ihres Programms ab.
Für devnet oder localhost können Sie Ihr Wallet mit dem Befehl solana airdrop
aufladen:
$solana airdrop 2
Überprüfen Sie Ihren Wallet-Kontostand:
$solana balance
Grundlegende Operationen
Programm bauen
Um ein Programm zu bauen, verwenden Sie den Befehl cargo build-sbf
:
$cargo build-sbf
Beispielprogramm
Hier ist ein minimales Solana-Programm, das "Hello, Solana!" in die Programm- Logs ausgibt.
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(())}
Build-Ausgabe
Bauen Sie Ihr Programm mit dem Befehl cargo build-sbf
:
$cargo build-sbf
Dies erstellt zwei wichtige Dateien in target/deploy/
:
hello_world-keypair.json
: Eine keypair-Datei, deren öffentlicher Schlüssel als Ihre Programm-ID verwendet wirdhello_world.so
: Die kompilierte Programm-Executable
Programmgröße und -kosten prüfen
Das Deployen eines Programms erfordert SOL, das basierend auf der Größe des Programms dem Programmkonto zugewiesen wird. Größere Programme kosten mehr SOL für das Deployment.
Überprüfen Sie die Größe Ihres Programms:
$wc -c < ./target/deploy/hello_world.so
Berechnen Sie das erforderliche SOL für diese Größe (Bytes):
$solana rent 18504
Sie benötigen etwas mehr SOL als angezeigt, um die Transaktionsgebühren für das Deployment zu decken.
Programm deployen
Verwenden Sie den Befehl solana program deploy
, um Ihr Programm zu deployen:
$solana program deploy ./target/deploy/hello_world.so
Die angezeigte Program Id ist die permanente Adresse Ihres Programms im Netzwerk.
Um mit einer bestimmten Programm-ID zu deployen (anstelle der automatisch generierten), verwenden Sie:
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
Sie können neue keypairs mit dem Befehl solana-keygen
generieren:
$solana-keygen new -o ./custom-keypair.json
Programm aktualisieren
Aktualisieren Sie Ihr Programm mit demselben solana program deploy
Befehl:
- Nehmen Sie Änderungen an Ihrem Programmcode vor
- Erstellen Sie Ihr Programm neu:
cargo build-sbf
- Führen Sie das Deployment des Updates durch:
$solana program deploy ./target/deploy/hello_world.so
Wenn Ihr aktualisiertes Programm mehr Speicherplatz (Bytes) benötigt als derzeit zugewiesen, wird das Deployment automatisch das Programmkonto erweitern. Dies geschieht, wenn Ihr neues Programm größer ist als die vorherige Version. Das Programmkonto benötigt zusätzliche Bytes, um das neue Programm zu speichern. Die CLI berechnet automatisch die erforderlichen SOL und zieht sie von Ihrer Wallet ab.
Sie können ein Programm auch manuell erweitern, um mehr Bytes zuzuweisen:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
Programmverwaltung
Sobald Ihr Programm deployed ist, gibt es mehrere gängige Befehle zur Verwaltung des Programmkontos.
Programm-Metadaten anzeigen
Um Ihre Programm-Metadaten zu überprüfen, verwenden Sie den
solana program show
Befehl:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
Beispielausgabe:
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
Programm-Authority übertragen
Um die Programm-Authority auf ein anderes Konto zu übertragen, verwenden Sie den
Befehl solana program set-upgrade-authority
:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json
Nach der Übertragung der Programm-Authority können Sie das Programm nicht mehr aktualisieren, es sei denn, Sie haben Zugriff auf das neue Authority-keypair.
Ihr Programm unveränderlich machen
Um Ihr Programm unveränderlich zu machen, verwenden Sie den Befehl
solana program set-upgrade-authority
mit der Option --final
, um die
Programm-Authority zu entfernen:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
Sobald ein Programm unveränderlich ist, kann es nie mehr aktualisiert oder geschlossen werden.
Ihr Programm schließen
Um Ihr Programm zu schließen und das dem Programmkonto zugewiesene SOL
zurückzufordern, verwenden Sie den Befehl solana program close
:
$solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
Nach dem Schließen kann die Programm-ID nicht wiederverwendet werden. Sie können kein neues Programm an dieselbe Adresse bereitstellen.
Dienstprogramm-Befehle
Alle Programme auflisten
Zeigen Sie alle Programme an, bei denen Ihre aktuelle Wallet die Authority ist:
$solana program show --programs
Beispielausgabe:
Program Id | Slot | Authority | Balance-------------------------------------------------|------------|------------------------------------------------|-------------7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
Ein Deployed Programm herunterladen
Um ein deployed Programm herunterzuladen, verwenden Sie den Befehl
solana program dump
:
$solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so
Erweiterte Optionen
Deployment-Flags
Wenn das Solana-Netzwerk überlastet ist, verwenden Sie diese Flags, um bei dem Programm-Deployment zu helfen.
Beispielanwendung:
$solana program deploy ./target/deploy/hello_world.so \--with-compute-unit-price 10000 \--max-sign-attempts 10 \--use-rpc
Erklärung der Optionen:
--with-compute-unit-price
: Legt priority fee in Mikro-Lamports (0,000001 SOL) pro Compute-Einheit fest. Prüfen Sie die Helius Priority Fee API für aktuelle Raten. Eine priority fee ist eine zusätzliche Gebühr, die an den aktuellen Leader gezahlt wird, um Ihre Transaktion zu priorisieren.--max-sign-attempts
: Anzahl der Wiederholungsversuche mit einem neuen Blockhash, falls Transaktionen ablaufen. (Standard: 5)--use-rpc
: Sendet Transaktionen an den konfigurierten RPC. Dieses Flag erfordert eine stake-weighted RPC-Verbindung von Anbietern wie Triton oder Helius.
Is this page helpful?