Entwicklung von Programmen in Rust
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:
- Granulare 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.
Ein neues Programm erstellen
Erstellen Sie zunächst ein neues Rust-Projekt mit dem Standard
cargo init
Befehl und der --lib
Flag.
cargo init hello_world --lib
Navigieren Sie zum Projektverzeichnis. Sie sollten die Standard src/lib.rs
und
Cargo.toml
Dateien sehen
cd hello_world
Die solana-program-Abhängigkeit hinzufügen
Fügen Sie als Nächstes die solana-program
Abhängigkeit hinzu. Dies ist die
minimale Abhängigkeit, die zum Erstellen eines Solana-Programms erforderlich
ist.
cargo add solana-program@1.18.26
Fügen Sie als Nächstes den folgenden Codeausschnitt zu Cargo.toml
hinzu. Wenn
Sie diese Konfiguration nicht einschließen, wird das Verzeichnis target/deploy
beim Erstellen des Programms nicht generiert.
Fügen Sie den crate-type hinzu
Fügen Sie als Nächstes den folgenden Codeausschnitt zu Cargo.toml
hinzu.
[lib]crate-type = ["cdylib", "lib"]
Wenn Sie diese Konfiguration nicht einschließen, wird das Verzeichnis
target/deploy
beim Erstellen des Programms nicht generiert.
Ihre Datei Cargo.toml
sollte wie folgt aussehen:
[package]name = "hello_world"version = "0.1.0"edition = "2021"[lib]crate-type = ["cdylib", "lib"][dependencies]solana-program = "1.18.26"
Fügen Sie den Programmcode hinzu
Ersetzen Sie als Nächstes den Inhalt von src/lib.rs
mit dem folgenden Code.
Dies ist ein minimales Solana-Programm, das "Hello, world!" in das
Programmprotokoll druckt, wenn das Programm aufgerufen wird.
Das Makro msg!
wird in Solana-Programmen verwendet, um eine Nachricht in das
Programmprotokoll zu drucken.
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(())}
Erstellen Sie das Programm
Erstellen Sie als Nächstes das Programm mit dem Befehl cargo build-sbf
.
cargo build-sbf
Dieser Befehl generiert ein Verzeichnis target/deploy
, das zwei wichtige
Dateien enthält:
- Eine Datei
.so
(z.B.hello_world.so
): Dies ist das kompilierte Solana-Programm, das als "Smart Contract" im Netzwerk bereitgestellt wird. - Eine keypair-Datei (z.B.
hello_world-keypair.json
): Der öffentliche Schlüssel dieses keypairs wird als Programm-ID bei der Bereitstellung des Programms verwendet.
Um die Programm-ID anzuzeigen, führen Sie den folgenden Befehl in Ihrem Terminal aus. Dieser Befehl gibt den öffentlichen Schlüssel des keypairs am angegebenen Dateipfad aus:
solana address -k ./target/deploy/hello_world-keypair.json
Beispielausgabe:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Testabhängigkeiten hinzufügen
Als Nächstes testen wir das Programm mit dem solana-program-test
Crate. Fügen
Sie die folgenden Abhängigkeiten zu Cargo.toml
hinzu.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
Das Programm testen
Fügen Sie den folgenden Test zu src/lib.rs
hinzu, unterhalb des Programmcodes.
Dies ist ein Test- Modul, das das Hello-World-Programm aufruft.
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 solana_program_test::*;use solana_sdk::{instruction::Instruction, pubkey::Pubkey, signature::Signer, transaction::Transaction,};#[tokio::test]async fn test_hello_world() {let program_id = Pubkey::new_unique();let mut program_test = ProgramTest::default();program_test.add_program("hello_world", program_id, None);let (mut banks_client, payer, recent_blockhash) = program_test.start().await;// Create instructionlet instruction = Instruction {program_id,accounts: vec![],data: vec![],};// Create transaction with instructionlet mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));// Sign transactiontransaction.sign(&[&payer], recent_blockhash);let transaction_result = banks_client.process_transaction(transaction).await;assert!(transaction_result.is_ok());}}
Führen Sie den Test mit dem Befehl cargo test-sbf
aus. Das Programmprotokoll
wird "Hello, world!" anzeigen.
cargo test-sbf
Beispielausgabe:
running 1 test[2024-10-18T21:24:54.889570000Z INFO solana_program_test] "hello_world" SBF program from /hello_world/target/deploy/hello_world.so, modified 35 seconds, 828 ms, 268 µs and 398 ns ago[2024-10-18T21:24:54.974294000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-18T21:24:54.974814000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, world![2024-10-18T21:24:54.976848000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-18T21:24:54.976868000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
Das Programm bereitstellen
Als Nächstes stellen wir das Programm bereit. 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.
solana config set -ul
Beispielausgabe:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
Öffnen Sie ein neues Terminal und führen Sie den Befehl solana-test-validators
aus, um den lokalen Validator zu starten.
solana-test-validator
Während der Test-Validator läuft, führen Sie den Befehl solana program deploy
in einem separaten Terminal aus, um das Programm auf dem lokalen Validator
bereitzustellen.
solana program deploy ./target/deploy/hello_world.so
Beispielausgabe:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
Sie können die Programm-ID und die Transaktionssignatur auf
Solana Explorer
überprüfen. Beachten Sie, dass der Cluster im Solana Explorer ebenfalls
localhost sein muss. Die Option "Custom RPC URL" im Solana Explorer ist
standardmäßig auf http://localhost:8899
eingestellt.
Beispielclient 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.
mkdir -p examplestouch examples/client.rs
Füge Folgendes zu Cargo.toml
hinzu.
[[example]]name = "client"path = "examples/client.rs"
Füge die solana-client
Abhängigkeit hinzu.
cargo add solana-client@1.18.26 --dev
Client hinzufügen
Füge den folgenden Code zu examples/client.rs
hinzu. Dies ist ein
Rust-Client-Skript, das ein neues keypair finanziert, um Transaktions-Fee zu
bezahlen, und dann das Hello-World-Programm aufruft.
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 devnetlet rpc_url = String::from("http://127.0.0.1:8899");let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());// Generate a new keypair for the payerlet payer = Keypair::new();// Request airdroplet airdrop_amount = 1_000_000_000; // 1 SOLlet signature = client.request_airdrop(&payer.pubkey(), airdrop_amount).expect("Failed to request airdrop");// Wait for airdrop confirmationloop {let confirmed = client.confirm_transaction(&signature).unwrap();if confirmed {break;}}// Create the instructionlet instruction = Instruction::new_with_borsh(program_id,&(), // Empty instruction datavec![], // No accounts needed);// Add the instruction to new transactionlet mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));transaction.sign(&[&payer], client.get_latest_blockhash().unwrap());// Send and confirm the transactionmatch client.send_and_confirm_transaction(&transaction) {Ok(signature) => println!("Transaction Signature: {}", signature),Err(err) => eprintln!("Error sending transaction: {}", err),}}
Programm-ID ersetzen
Bevor du das Skript ausführst, ersetze die Programm-ID im obigen Codeausschnitt mit der ID deines Programms.
Du kannst deine Programm-ID mit dem folgenden Befehl abrufen.
solana address -k ./target/deploy/hello_world-keypair.json
Programm aufrufen
Führe das Client-Skript mit dem folgenden Befehl aus.
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.
Aktualisieren des programms
Solana-Programme können durch erneutes Bereitstellen unter derselben Programm-ID
aktualisiert werden. Aktualisiere das Programm in src/lib.rs
, um "Hello,
Solana!" anstelle von "Hello, world!" auszugeben.
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
Teste das aktualisierte Programm, indem du den Befehl cargo test-sbf
ausführst.
cargo test-sbf
Du solltest "Hello, Solana!" im Programmprotokoll sehen.
running 1 test[2024-10-23T19:28:28.842639000Z INFO solana_program_test] "hello_world" SBF program from /code/misc/delete/hello_world/target/deploy/hello_world.so, modified 4 minutes, 31 seconds, 435 ms, 566 µs and 766 ns ago[2024-10-23T19:28:28.934854000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-23T19:28:28.936735000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, Solana![2024-10-23T19:28:28.938774000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-23T19:28:28.938793000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
Erneutes bereitstellen des programms
Führe den Befehl cargo build-sbf
aus, um eine aktualisierte .so
-Datei zu
generieren.
cargo build-sbf
Stelle das Programm erneut bereit, indem du den Befehl solana program deploy
verwendest.
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 Programmprotokoll zu sehen.
cargo run --example client
Schließen des programms
Du kannst dein Solana-Programm schließen, um das den Konten zugewiesene SOL zurückzufordern. Das Schließen eines Programms ist irreversibel und sollte daher mit Vorsicht durchgeführt werden.
Um ein Programm zu schließen, verwende den Befehl
solana program close <PROGRAM_ID>
. Zum Beispiel:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
Beispielausgabe:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
Beachte, dass sobald ein Programm geschlossen ist, seine Programm-ID nicht wiederverwendet werden kann. Der Versuch, ein Programm mit einer zuvor geschlossenen Programm-ID bereitzustellen, führt zu einem Fehler.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
Erneutes bereitstellen eines geschlossenen programms
Wenn du ein Programm mit demselben Quellcode nach dem Schließen eines Programms erneut bereitstellen musst, musst du eine neue Programm-ID generieren. Um ein neues keypair für das Programm zu generieren, führe den folgenden Befehl aus:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
Alternativ können Sie die vorhandene keypair-Datei löschen (z.B.
./target/deploy/hello_world-keypair.json
) und führen Sie cargo build-sbf
erneut aus, was eine neue keypair-Datei generieren wird.
Ein neues Programm erstellen
Erstellen Sie zunächst ein neues Rust-Projekt mit dem Standard
cargo init
Befehl und der --lib
Flag.
cargo init hello_world --lib
Navigieren Sie zum Projektverzeichnis. Sie sollten die Standard src/lib.rs
und
Cargo.toml
Dateien sehen
cd hello_world
Die solana-program-Abhängigkeit hinzufügen
Fügen Sie als Nächstes die solana-program
Abhängigkeit hinzu. Dies ist die
minimale Abhängigkeit, die zum Erstellen eines Solana-Programms erforderlich
ist.
cargo add solana-program@1.18.26
Fügen Sie als Nächstes den folgenden Codeausschnitt zu Cargo.toml
hinzu. Wenn
Sie diese Konfiguration nicht einschließen, wird das Verzeichnis target/deploy
beim Erstellen des Programms nicht generiert.
Fügen Sie den crate-type hinzu
Fügen Sie als Nächstes den folgenden Codeausschnitt zu Cargo.toml
hinzu.
[lib]crate-type = ["cdylib", "lib"]
Wenn Sie diese Konfiguration nicht einschließen, wird das Verzeichnis
target/deploy
beim Erstellen des Programms nicht generiert.
Fügen Sie den Programmcode hinzu
Ersetzen Sie als Nächstes den Inhalt von src/lib.rs
mit dem folgenden Code.
Dies ist ein minimales Solana-Programm, das "Hello, world!" in das
Programmprotokoll druckt, wenn das Programm aufgerufen wird.
Das Makro msg!
wird in Solana-Programmen verwendet, um eine Nachricht in das
Programmprotokoll zu drucken.
Erstellen Sie das Programm
Erstellen Sie als Nächstes das Programm mit dem Befehl cargo build-sbf
.
cargo build-sbf
Dieser Befehl generiert ein Verzeichnis target/deploy
, das zwei wichtige
Dateien enthält:
- Eine Datei
.so
(z.B.hello_world.so
): Dies ist das kompilierte Solana-Programm, das als "Smart Contract" im Netzwerk bereitgestellt wird. - Eine keypair-Datei (z.B.
hello_world-keypair.json
): Der öffentliche Schlüssel dieses keypairs wird als Programm-ID bei der Bereitstellung des Programms verwendet.
Um die Programm-ID anzuzeigen, führen Sie den folgenden Befehl in Ihrem Terminal aus. Dieser Befehl gibt den öffentlichen Schlüssel des keypairs am angegebenen Dateipfad aus:
solana address -k ./target/deploy/hello_world-keypair.json
Beispielausgabe:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Testabhängigkeiten hinzufügen
Als Nächstes testen wir das Programm mit dem solana-program-test
Crate. Fügen
Sie die folgenden Abhängigkeiten zu Cargo.toml
hinzu.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
Das Programm testen
Fügen Sie den folgenden Test zu src/lib.rs
hinzu, unterhalb des Programmcodes.
Dies ist ein Test- Modul, das das Hello-World-Programm aufruft.
Führen Sie den Test mit dem Befehl cargo test-sbf
aus. Das Programmprotokoll
wird "Hello, world!" anzeigen.
cargo test-sbf
Beispielausgabe:
running 1 test[2024-10-18T21:24:54.889570000Z INFO solana_program_test] "hello_world" SBF program from /hello_world/target/deploy/hello_world.so, modified 35 seconds, 828 ms, 268 µs and 398 ns ago[2024-10-18T21:24:54.974294000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-18T21:24:54.974814000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, world![2024-10-18T21:24:54.976848000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-18T21:24:54.976868000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
Das Programm bereitstellen
Als Nächstes stellen wir das Programm bereit. 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.
solana config set -ul
Beispielausgabe:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
Öffnen Sie ein neues Terminal und führen Sie den Befehl solana-test-validators
aus, um den lokalen Validator zu starten.
solana-test-validator
Während der Test-Validator läuft, führen Sie den Befehl solana program deploy
in einem separaten Terminal aus, um das Programm auf dem lokalen Validator
bereitzustellen.
solana program deploy ./target/deploy/hello_world.so
Beispielausgabe:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
Sie können die Programm-ID und die Transaktionssignatur auf
Solana Explorer
überprüfen. Beachten Sie, dass der Cluster im Solana Explorer ebenfalls
localhost sein muss. Die Option "Custom RPC URL" im Solana Explorer ist
standardmäßig auf http://localhost:8899
eingestellt.
Beispielclient 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.
mkdir -p examplestouch examples/client.rs
Füge Folgendes zu Cargo.toml
hinzu.
[[example]]name = "client"path = "examples/client.rs"
Füge die solana-client
Abhängigkeit hinzu.
cargo add solana-client@1.18.26 --dev
Client hinzufügen
Füge den folgenden Code zu examples/client.rs
hinzu. Dies ist ein
Rust-Client-Skript, das ein neues keypair finanziert, um Transaktions-Fee zu
bezahlen, und dann das Hello-World-Programm aufruft.
Programm-ID ersetzen
Bevor du das Skript ausführst, ersetze die Programm-ID im obigen Codeausschnitt mit der ID deines Programms.
Du kannst deine Programm-ID mit dem folgenden Befehl abrufen.
solana address -k ./target/deploy/hello_world-keypair.json
Programm aufrufen
Führe das Client-Skript mit dem folgenden Befehl aus.
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.
Aktualisieren des programms
Solana-Programme können durch erneutes Bereitstellen unter derselben Programm-ID
aktualisiert werden. Aktualisiere das Programm in src/lib.rs
, um "Hello,
Solana!" anstelle von "Hello, world!" auszugeben.
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
Teste das aktualisierte Programm, indem du den Befehl cargo test-sbf
ausführst.
cargo test-sbf
Du solltest "Hello, Solana!" im Programmprotokoll sehen.
running 1 test[2024-10-23T19:28:28.842639000Z INFO solana_program_test] "hello_world" SBF program from /code/misc/delete/hello_world/target/deploy/hello_world.so, modified 4 minutes, 31 seconds, 435 ms, 566 µs and 766 ns ago[2024-10-23T19:28:28.934854000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-23T19:28:28.936735000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, Solana![2024-10-23T19:28:28.938774000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-23T19:28:28.938793000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
Erneutes bereitstellen des programms
Führe den Befehl cargo build-sbf
aus, um eine aktualisierte .so
-Datei zu
generieren.
cargo build-sbf
Stelle das Programm erneut bereit, indem du den Befehl solana program deploy
verwendest.
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 Programmprotokoll zu sehen.
cargo run --example client
Schließen des programms
Du kannst dein Solana-Programm schließen, um das den Konten zugewiesene SOL zurückzufordern. Das Schließen eines Programms ist irreversibel und sollte daher mit Vorsicht durchgeführt werden.
Um ein Programm zu schließen, verwende den Befehl
solana program close <PROGRAM_ID>
. Zum Beispiel:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
Beispielausgabe:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
Beachte, dass sobald ein Programm geschlossen ist, seine Programm-ID nicht wiederverwendet werden kann. Der Versuch, ein Programm mit einer zuvor geschlossenen Programm-ID bereitzustellen, führt zu einem Fehler.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
Erneutes bereitstellen eines geschlossenen programms
Wenn du ein Programm mit demselben Quellcode nach dem Schließen eines Programms erneut bereitstellen musst, musst du eine neue Programm-ID generieren. Um ein neues keypair für das Programm zu generieren, führe den folgenden Befehl aus:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
Alternativ können Sie die vorhandene keypair-Datei löschen (z.B.
./target/deploy/hello_world-keypair.json
) und führen Sie cargo build-sbf
erneut aus, was eine neue keypair-Datei generieren wird.
[package]name = "hello_world"version = "0.1.0"edition = "2021"[dependencies]
Is this page helpful?