Solana-DokumentationProgramme entwickeln

Programme in Rust entwickeln

Solana-Programme werden hauptsächlich mit der Programmiersprache Rust entwickelt. Diese Seite konzentriert sich auf das Schreiben von Solana-Programmen in Rust ohne Verwendung des Anchor- Frameworks, ein Ansatz, der oft als Schreiben von "nativem Rust"-Programmen bezeichnet wird.

Die native Rust-Entwicklung bietet Entwicklern direkte Kontrolle über ihre Solana-Programme. Dieser Ansatz erfordert jedoch mehr manuelle Einrichtung und Boilerplate-Code im Vergleich zur Verwendung des Anchor-Frameworks. Diese Methode wird für Entwickler empfohlen, die:

  • Detaillierte Kontrolle über Programmlogik und Optimierungen suchen
  • Die zugrundeliegenden Konzepte verstehen möchten, bevor sie zu höheren Frameworks übergehen

Für Anfänger empfehlen wir, mit dem Anchor-Framework zu beginnen. Weitere Informationen finden Sie im Anchor-Abschnitt.

Voraussetzungen

Detaillierte Installationsanweisungen finden Sie auf der Installationsseite.

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes installiert haben:

  • Rust: Die Programmiersprache zum Erstellen von Solana-Programmen.
  • Solana CLI: Kommandozeilen-Tool für die Solana-Entwicklung.

Erste Schritte

Das folgende Beispiel behandelt die grundlegenden Schritte zur Erstellung Ihres ersten Solana-Programms in Rust. Wir erstellen ein minimales Programm, das "Hello, world!" in das Programmprotokoll schreibt.

Erstellen eines neuen Programms

Erstelle zunächst ein neues Rust-Projekt mit dem Standard-Befehl cargo new und dem Flag --lib.

Terminal
$
cargo new hello_world --lib

Navigiere zum Projektverzeichnis. Du solltest die Standard-Dateien src/lib.rs und Cargo.toml sehen

Terminal
$
cd hello_world

Aktualisiere das Feld edition in Cargo.toml auf 2021. Andernfalls kann beim Erstellen des Programms ein Fehler auftreten.

Füge die solana-program Abhängigkeit hinzu

Füge als Nächstes die Abhängigkeit solana-program hinzu. Dies ist die minimale Abhängigkeit, die zum Erstellen eines Solana-Programms erforderlich ist.

Terminal
$
cargo add solana-program@2.2.0

Füge den crate-type hinzu

Füge als Nächstes den folgenden Ausschnitt zu Cargo.toml hinzu.

Cargo.toml
[lib]
crate-type = ["cdylib", "lib"]

Wenn du diese Konfiguration nicht einbindest, wird das Verzeichnis target/deploy beim Erstellen des Programms nicht generiert.

Deine Datei Cargo.toml sollte wie folgt aussehen:

Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib", "lib"]
[dependencies]
solana-program = "2.2.0"

Füge den Programmcode hinzu

Ersetze als Nächstes den Inhalt von src/lib.rs durch den folgenden Code. Dies ist ein minimales Solana-Programm, das „Hello, world!" im Programmprotokoll ausgibt, wenn das Programm aufgerufen wird.

Das Makro msg! wird in Solana-Programmen verwendet, um eine Nachricht im Programmprotokoll auszugeben.

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, world!");
Ok(())
}

Erstelle das Programm

Erstelle als Nächstes das Programm mit dem Befehl cargo build-sbf.

Terminal
$
cargo build-sbf

Dieser Befehl generiert ein Verzeichnis target/deploy, das zwei wichtige Dateien enthält:

  1. Eine Datei .so (z. B. hello_world.so): Dies ist das kompilierte Solana-Programm, das als „Smart Contract" im Netzwerk bereitgestellt wird.
  2. Eine Keypair-Datei (z. B. hello_world-keypair.json): Der öffentliche Schlüssel dieses Keypairs wird als Programm-ID beim Bereitstellen des Programms verwendet.

Um die Programm-ID anzuzeigen, führe den folgenden Befehl in deinem Terminal aus. Dieser Befehl gibt den öffentlichen Schlüssel des Keypairs am angegebenen Dateipfad aus:

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

Beispielausgabe:

4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz

Testabhängigkeiten hinzufügen

Teste als Nächstes das Programm mit der litesvm-Crate. Füge die folgenden Abhängigkeiten zu Cargo.toml hinzu.

Terminal
$
cargo add litesvm@0.6.1 --dev
$
cargo add solana-sdk@2.2.0 --dev

Das Programm testen

Füge den folgenden Test zu src/lib.rs hinzu, unterhalb des Programmcodes. Dies ist ein Testmodul, das das Hello-World-Programm aufruft.

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, world!");
Ok(())
}
#[cfg(test)]
mod test {
use litesvm::LiteSVM;
use solana_sdk::{
instruction::Instruction,
message::Message,
signature::{Keypair, Signer},
transaction::Transaction,
};
#[test]
fn test_hello_world() {
// Create a new LiteSVM instance
let mut svm = LiteSVM::new();
// Create a keypair for the transaction payer
let payer = Keypair::new();
// Airdrop some lamports to the payer
svm.airdrop(&payer.pubkey(), 1_000_000_000).unwrap();
// Load our program
let program_keypair = Keypair::new();
let program_id = program_keypair.pubkey();
svm.add_program_from_file(program_id, "target/deploy/hello_world.so")
.unwrap();
// Create instruction with no accounts and no data
let instruction = Instruction {
program_id,
accounts: vec![],
data: vec![],
};
// Create transaction
let message = Message::new(&[instruction], Some(&payer.pubkey()));
let transaction = Transaction::new(&[&payer], message, svm.latest_blockhash());
// Send transaction and verify it succeeds
let result = svm.send_transaction(transaction);
assert!(result.is_ok(), "Transaction should succeed");
let logs = result.unwrap().logs;
println!("Logs: {logs:#?}");
}
}

Führe den Test mit dem Befehl cargo test aus. Das Programmlog wird "Hello, world!" anzeigen.

Terminal
$
cargo test -- --no-capture

Beispielausgabe:

Terminal
running 1 test
Logs: [
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk invoke [1]",
"Program log: Hello, world!",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk consumed 211 of 200000 compute units",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s

Das Programm bereitstellen

Deploye als Nächstes das Programm. Bei der lokalen Entwicklung können wir den solana-test-validator verwenden.

Konfigurieren Sie zunächst die Solana CLI für die Verwendung des lokalen Solana-Clusters.

Terminal
$
solana config set -ul

Beispielausgabe:

Config File: /.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /.config/solana/id.json
Commitment: confirmed

Öffne ein neues Terminal und führe den Befehl solana-test-validators aus, um den lokalen Validator zu starten.

Terminal
$
solana-test-validator

Während der Test-Validator läuft, führe den Befehl solana program deploy in einem separaten Terminal aus, um das Programm auf dem lokalen Validator zu deployen.

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

Beispielausgabe:

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH

Du kannst die Programm-ID und die Transaktionssignatur auf dem Solana Explorer überprüfen.

Beachte, dass der Cluster im Solana Explorer ebenfalls auf localhost eingestellt sein muss. Die Option "Custom RPC URL" im Solana Explorer ist standardmäßig auf http://localhost:8899 eingestellt.

Beispiel-Client erstellen

Als Nächstes zeigen wir, wie man das Programm mit einem Rust-Client aufruft.

Erstelle zunächst ein examples-Verzeichnis und eine client.rs-Datei.

Terminal
$
mkdir -p examples && touch examples/client.rs

Füge Folgendes zu Cargo.toml hinzu.

Cargo.toml
[[example]]
name = "client"
path = "examples/client.rs"

Fügen Sie die Abhängigkeiten solana-client und tokio hinzu.

Terminal
$
cargo add solana-client@2.2.0 --dev
$
cargo add tokio --dev

Client hinzufügen

Fügen Sie den folgenden Code zu examples/client.rs hinzu. Dies ist ein Rust-Client-Skript, das ein neues Keypair finanziert, um Transaktionsgebühren zu bezahlen, und dann das Hello-World-Programm aufruft.

examples/client.rs
use solana_client::rpc_client::RpcClient;
use solana_sdk::{
commitment_config::CommitmentConfig,
instruction::Instruction,
pubkey::Pubkey,
signature::{Keypair, Signer},
transaction::Transaction,
};
use std::str::FromStr;
#[tokio::main]
async fn main() {
// Program ID (replace with your actual program ID)
let program_id = Pubkey::from_str("4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz").unwrap();
// Connect to the Solana devnet
let rpc_url = String::from("http://localhost:8899");
let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
// Generate a new keypair for the payer
let payer = Keypair::new();
// Request airdrop
let airdrop_amount = 1_000_000_000; // 1 SOL
let signature = client
.request_airdrop(&payer.pubkey(), airdrop_amount)
.expect("Failed to request airdrop");
// Wait for airdrop confirmation
loop {
let confirmed = client.confirm_transaction(&signature).unwrap();
if confirmed {
break;
}
}
// Create the instruction
let instruction = Instruction::new_with_borsh(
program_id,
&(), // Empty instruction data
vec![], // No accounts needed
);
// Add the instruction to new transaction
let mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));
transaction.sign(&[&payer], client.get_latest_blockhash().unwrap());
// Send and confirm the transaction
match client.send_and_confirm_transaction(&transaction) {
Ok(signature) => println!("Transaction Signature: {}", signature),
Err(err) => eprintln!("Error sending transaction: {}", err),
}
}

Programm-ID ersetzen

Bevor du den Client-Code ausführst, ersetze die Programm-ID im Code-Snippet durch die ID deines Programms.

Du kannst deine Programm-ID mit dem folgenden Befehl abrufen.

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

Programm aufrufen

Führe das Client-Skript mit dem folgenden Befehl aus.

Terminal
$
cargo run --example client

Beispielausgabe:

Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV

Du kannst die Transaktionssignatur im Solana Explorer (lokaler Cluster) überprüfen, um "Hello, world!" im Programmlog zu sehen.

Programm aktualisieren

Solana-Programme können durch erneutes Deployment unter derselben Programm-ID aktualisiert werden. Aktualisieren Sie das Programm in src/lib.rs, um "Hello, Solana!" anstelle von "Hello, world!" auszugeben.

lib.rs
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
-
msg!("Hello, world!");
+
msg!("Hello, Solana!");
Ok(())
}

Führen Sie den Befehl cargo build-sbf aus, um eine aktualisierte .so-Datei zu generieren.

Terminal
$
cargo build-sbf

Testen Sie das aktualisierte Programm, indem Sie den Befehl cargo test ausführen.

Terminal
$
cargo test -- --no-capture

Du solltest "Hello, Solana!" im Programmlog sehen.

Terminal
running 1 test
Logs: [
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV invoke [1]",
"Program log: Hello, Solana!",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV consumed 211 of 200000 compute units",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s

Programm erneut deployen

Deployen Sie das Programm erneut mit demselben Befehl solana program deploy.

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

Führe den Client-Code erneut aus und überprüfe die Transaktionssignatur im Solana Explorer, um "Hello, Solana!" im Programmlog zu sehen.

Terminal
$
cargo run --example client

Programm schließen

Du kannst dein Solana-Programm schließen, um das für das Konto zugewiesene SOL zurückzugewinnen. Das Schließen eines Programms ist irreversibel und sollte daher mit Vorsicht durchgeführt werden.

Um ein Programm zu schließen, verwenden Sie den Befehl solana program close <PROGRAM_ID>. Zum Beispiel:

Terminal
$
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz --bypass-warning

Beispielausgabe:

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

Beachten Sie, dass sobald ein Programm geschlossen ist, seine Programm-ID nicht wiederverwendet werden kann. Der Versuch, ein Programm mit einer zuvor geschlossenen Programm-ID zu deployen, führt zu einem Fehler.

Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, use
a new Program Id

Ein geschlossenes Programm erneut deployen

Wenn Sie ein Programm mit demselben Quellcode nach dem Schließen eines Programms erneut deployen müssen, müssen Sie eine neue Programm-ID generieren. Um ein neues keypair für das Programm zu generieren, führen Sie den folgenden Befehl aus:

Terminal
$
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force

Alternativ können Sie die vorhandene Keypair-Datei (z. B. ./target/deploy/hello_world-keypair.json) löschen und cargo build-sbf erneut ausführen, wodurch eine neue Keypair-Datei generiert wird.

Erstellen eines neuen Programms

Erstelle zunächst ein neues Rust-Projekt mit dem Standard-Befehl cargo new und dem Flag --lib.

Terminal
$
cargo new hello_world --lib

Navigiere zum Projektverzeichnis. Du solltest die Standard-Dateien src/lib.rs und Cargo.toml sehen

Terminal
$
cd hello_world

Aktualisiere das Feld edition in Cargo.toml auf 2021. Andernfalls kann beim Erstellen des Programms ein Fehler auftreten.

Füge die solana-program Abhängigkeit hinzu

Füge als Nächstes die Abhängigkeit solana-program hinzu. Dies ist die minimale Abhängigkeit, die zum Erstellen eines Solana-Programms erforderlich ist.

Terminal
$
cargo add solana-program@2.2.0

Füge den crate-type hinzu

Füge als Nächstes den folgenden Ausschnitt zu Cargo.toml hinzu.

Cargo.toml
[lib]
crate-type = ["cdylib", "lib"]

Wenn du diese Konfiguration nicht einbindest, wird das Verzeichnis target/deploy beim Erstellen des Programms nicht generiert.

Füge den Programmcode hinzu

Ersetze als Nächstes den Inhalt von src/lib.rs durch den folgenden Code. Dies ist ein minimales Solana-Programm, das „Hello, world!" im Programmprotokoll ausgibt, wenn das Programm aufgerufen wird.

Das Makro msg! wird in Solana-Programmen verwendet, um eine Nachricht im Programmprotokoll auszugeben.

Erstelle das Programm

Erstelle als Nächstes das Programm mit dem Befehl cargo build-sbf.

Terminal
$
cargo build-sbf

Dieser Befehl generiert ein Verzeichnis target/deploy, das zwei wichtige Dateien enthält:

  1. Eine Datei .so (z. B. hello_world.so): Dies ist das kompilierte Solana-Programm, das als „Smart Contract" im Netzwerk bereitgestellt wird.
  2. Eine Keypair-Datei (z. B. hello_world-keypair.json): Der öffentliche Schlüssel dieses Keypairs wird als Programm-ID beim Bereitstellen des Programms verwendet.

Um die Programm-ID anzuzeigen, führe den folgenden Befehl in deinem Terminal aus. Dieser Befehl gibt den öffentlichen Schlüssel des Keypairs am angegebenen Dateipfad aus:

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

Beispielausgabe:

4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz

Testabhängigkeiten hinzufügen

Teste als Nächstes das Programm mit der litesvm-Crate. Füge die folgenden Abhängigkeiten zu Cargo.toml hinzu.

Terminal
$
cargo add litesvm@0.6.1 --dev
$
cargo add solana-sdk@2.2.0 --dev

Das Programm testen

Füge den folgenden Test zu src/lib.rs hinzu, unterhalb des Programmcodes. Dies ist ein Testmodul, das das Hello-World-Programm aufruft.

Führe den Test mit dem Befehl cargo test aus. Das Programmlog wird "Hello, world!" anzeigen.

Terminal
$
cargo test -- --no-capture

Beispielausgabe:

Terminal
running 1 test
Logs: [
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk invoke [1]",
"Program log: Hello, world!",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk consumed 211 of 200000 compute units",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s

Das Programm bereitstellen

Deploye als Nächstes das Programm. Bei der lokalen Entwicklung können wir den solana-test-validator verwenden.

Konfigurieren Sie zunächst die Solana CLI für die Verwendung des lokalen Solana-Clusters.

Terminal
$
solana config set -ul

Beispielausgabe:

Config File: /.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /.config/solana/id.json
Commitment: confirmed

Öffne ein neues Terminal und führe den Befehl solana-test-validators aus, um den lokalen Validator zu starten.

Terminal
$
solana-test-validator

Während der Test-Validator läuft, führe den Befehl solana program deploy in einem separaten Terminal aus, um das Programm auf dem lokalen Validator zu deployen.

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

Beispielausgabe:

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH

Du kannst die Programm-ID und die Transaktionssignatur auf dem Solana Explorer überprüfen.

Beachte, dass der Cluster im Solana Explorer ebenfalls auf localhost eingestellt sein muss. Die Option "Custom RPC URL" im Solana Explorer ist standardmäßig auf http://localhost:8899 eingestellt.

Beispiel-Client erstellen

Als Nächstes zeigen wir, wie man das Programm mit einem Rust-Client aufruft.

Erstelle zunächst ein examples-Verzeichnis und eine client.rs-Datei.

Terminal
$
mkdir -p examples && touch examples/client.rs

Füge Folgendes zu Cargo.toml hinzu.

Cargo.toml
[[example]]
name = "client"
path = "examples/client.rs"

Fügen Sie die Abhängigkeiten solana-client und tokio hinzu.

Terminal
$
cargo add solana-client@2.2.0 --dev
$
cargo add tokio --dev

Client hinzufügen

Fügen Sie den folgenden Code zu examples/client.rs hinzu. Dies ist ein Rust-Client-Skript, das ein neues Keypair finanziert, um Transaktionsgebühren zu bezahlen, und dann das Hello-World-Programm aufruft.

Programm-ID ersetzen

Bevor du den Client-Code ausführst, ersetze die Programm-ID im Code-Snippet durch die ID deines Programms.

Du kannst deine Programm-ID mit dem folgenden Befehl abrufen.

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

Programm aufrufen

Führe das Client-Skript mit dem folgenden Befehl aus.

Terminal
$
cargo run --example client

Beispielausgabe:

Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV

Du kannst die Transaktionssignatur im Solana Explorer (lokaler Cluster) überprüfen, um "Hello, world!" im Programmlog zu sehen.

Programm aktualisieren

Solana-Programme können durch erneutes Deployment unter derselben Programm-ID aktualisiert werden. Aktualisieren Sie das Programm in src/lib.rs, um "Hello, Solana!" anstelle von "Hello, world!" auszugeben.

lib.rs
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
-
msg!("Hello, world!");
+
msg!("Hello, Solana!");
Ok(())
}

Führen Sie den Befehl cargo build-sbf aus, um eine aktualisierte .so-Datei zu generieren.

Terminal
$
cargo build-sbf

Testen Sie das aktualisierte Programm, indem Sie den Befehl cargo test ausführen.

Terminal
$
cargo test -- --no-capture

Du solltest "Hello, Solana!" im Programmlog sehen.

Terminal
running 1 test
Logs: [
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV invoke [1]",
"Program log: Hello, Solana!",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV consumed 211 of 200000 compute units",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s

Programm erneut deployen

Deployen Sie das Programm erneut mit demselben Befehl solana program deploy.

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

Führe den Client-Code erneut aus und überprüfe die Transaktionssignatur im Solana Explorer, um "Hello, Solana!" im Programmlog zu sehen.

Terminal
$
cargo run --example client

Programm schließen

Du kannst dein Solana-Programm schließen, um das für das Konto zugewiesene SOL zurückzugewinnen. Das Schließen eines Programms ist irreversibel und sollte daher mit Vorsicht durchgeführt werden.

Um ein Programm zu schließen, verwenden Sie den Befehl solana program close <PROGRAM_ID>. Zum Beispiel:

Terminal
$
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz --bypass-warning

Beispielausgabe:

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

Beachten Sie, dass sobald ein Programm geschlossen ist, seine Programm-ID nicht wiederverwendet werden kann. Der Versuch, ein Programm mit einer zuvor geschlossenen Programm-ID zu deployen, führt zu einem Fehler.

Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, use
a new Program Id

Ein geschlossenes Programm erneut deployen

Wenn Sie ein Programm mit demselben Quellcode nach dem Schließen eines Programms erneut deployen müssen, müssen Sie eine neue Programm-ID generieren. Um ein neues keypair für das Programm zu generieren, führen Sie den folgenden Befehl aus:

Terminal
$
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force

Alternativ können Sie die vorhandene Keypair-Datei (z. B. ./target/deploy/hello_world-keypair.json) löschen und cargo build-sbf erneut ausführen, wodurch eine neue Keypair-Datei generiert wird.

lib.rs
Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
[dependencies]

Is this page helpful?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

© 2026 Solana Foundation.
Alle Rechte vorbehalten.
Verbinden Sie sich