Solana-DokumentationProgramme entwickeln

Programme deployen

Dieser Abschnitt führt durch den grundlegenden Prozess der Bereitstellung eines Solana-Programms mit der Solana CLI.

CLI-Befehlsreferenz

AufgabeBefehl
Programm erstellencargo build-sbf
Neues Programm bereitstellensolana program deploy <path_to_program.so>
Bestehendes Programm aktualisierensolana program deploy <path_to_program.so> (gleich wie bereitstellen)
Programminformationen anzeigensolana program show <program-id>
Programmautorität übertragensolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
Programm unveränderlich machensolana program set-upgrade-authority <program-id> --final
Programm schließensolana program close <program-id> --bypass-warning
Wallet-Guthaben prüfensolana 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:

Terminal
$
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:

Terminal
$
solana config get

Wechseln Sie bei Bedarf zwischen den Clustern:

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"

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:

Terminal
$
solana airdrop 2

Überprüfen Sie Ihren Wallet-Kontostand:

Terminal
$
solana balance

Grundlegende Operationen

Programm bauen

Um ein Programm zu bauen, verwenden Sie den Befehl cargo build-sbf:

Terminal
$
cargo build-sbf

Beispielprogramm

Hier ist ein minimales Solana-Programm, das "Hello, Solana!" in die Programm- Logs ausgibt.

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

Build-Ausgabe

Bauen Sie Ihr Programm mit dem Befehl cargo build-sbf:

Terminal
$
cargo build-sbf

Dies erstellt zwei wichtige Dateien in target/deploy/:

  1. hello_world-keypair.json: Eine keypair-Datei, deren öffentlicher Schlüssel als Ihre Programm-ID verwendet wird
  2. hello_world.so: Die kompilierte Programm-Executable

Beispielprogramm

Hier ist ein minimales Solana-Programm, das "Hello, Solana!" in die Programm- Logs ausgibt.

Build-Ausgabe

Bauen Sie Ihr Programm mit dem Befehl cargo build-sbf:

Terminal
$
cargo build-sbf

Dies erstellt zwei wichtige Dateien in target/deploy/:

  1. hello_world-keypair.json: Eine keypair-Datei, deren öffentlicher Schlüssel als Ihre Programm-ID verwendet wird
  2. hello_world.so: Die kompilierte Programm-Executable
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(())
}

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:

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

Berechnen Sie das erforderliche SOL für diese Größe (Bytes):

Terminal
$
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:

Terminal
$
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:

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

Sie können neue keypairs mit dem Befehl solana-keygen generieren:

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

Programm aktualisieren

Aktualisieren Sie Ihr Programm mit demselben solana program deploy Befehl:

  1. Nehmen Sie Änderungen an Ihrem Programmcode vor
  2. Erstellen Sie Ihr Programm neu: cargo build-sbf
  3. Führen Sie das Deployment des Updates durch:
Terminal
$
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:

Terminal
$
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:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

Beispielausgabe:

$ 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

Programm-Authority übertragen

Um die Programm-Authority auf ein anderes Konto zu übertragen, verwenden Sie den Befehl solana program set-upgrade-authority:

Terminal
$
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:

Terminal
$
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:

Terminal
$
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:

Terminal
$
solana program show --programs

Beispielausgabe:

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

Ein Deployed Programm herunterladen

Um ein deployed Programm herunterzuladen, verwenden Sie den Befehl solana program dump:

Terminal
$
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:

Terminal
$
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?