Rust ile Program Geliştirme
Solana programları öncelikle Rust programlama dili kullanılarak geliştirilir. Bu sayfa, Anchor framework'ünü kullanmadan Rust ile Solana programları yazmaya odaklanır, bu yaklaşım genellikle "native Rust" programları yazma olarak adlandırılır.
Native Rust geliştirme, geliştiricilere Solana programları üzerinde doğrudan kontrol sağlar. Ancak, bu yaklaşım Anchor framework'ünü kullanmaya kıyasla daha fazla manuel kurulum ve şablon kod gerektirir. Bu yöntem şu özelliklere sahip geliştiriciler için önerilir:
- Program mantığı ve optimizasyonlar üzerinde ayrıntılı kontrol isteyenler
- Daha üst düzey framework'lere geçmeden önce altta yatan kavramları öğrenmek isteyenler
Yeni başlayanlar için Anchor framework ile başlamanızı öneririz. Daha fazla bilgi için Anchor bölümüne bakın.
Ön Koşullar
Ayrıntılı kurulum talimatları için kurulum sayfasını ziyaret edin.
Başlamadan önce, aşağıdakilerin kurulu olduğundan emin olun:
- Rust: Solana programları oluşturmak için programlama dili.
- Solana CLI: Solana geliştirme için komut satırı aracı.
Başlarken
Aşağıdaki örnek, Rust ile yazılmış ilk Solana programınızı oluşturmak için temel adımları kapsar. Program günlüğüne "Hello, world!" yazdıran minimal bir program oluşturacağız.
Yeni bir program oluşturma
İlk olarak, standart cargo init
komutunu --lib
bayrağı ile kullanarak yeni
bir Rust projesi oluşturun.
cargo init hello_world --lib
Proje dizinine gidin. Varsayılan src/lib.rs
ve Cargo.toml
dosyalarını
görmelisiniz
cd hello_world
solana-program bağımlılığını ekleme
Sonra, solana-program
bağımlılığını ekleyin. Bu, bir Solana programı
oluşturmak için gereken minimum bağımlılıktır.
cargo add solana-program@1.18.26
Ardından, aşağıdaki kod parçasını Cargo.toml
dosyasına ekleyin. Bu
yapılandırmayı eklemezseniz, programı derlediğinizde target/deploy
dizini
oluşturulmayacaktır.
crate-type ekleyin
Ardından, aşağıdaki kod parçasını Cargo.toml
dosyasına ekleyin.
[lib]crate-type = ["cdylib", "lib"]
Bu yapılandırmayı eklemezseniz, programı derlediğinizde target/deploy
dizini
oluşturulmayacaktır.
Cargo.toml
dosyanız aşağıdaki gibi görünmelidir:
[package]name = "hello_world"version = "0.1.0"edition = "2021"[lib]crate-type = ["cdylib", "lib"][dependencies]solana-program = "1.18.26"
Program kodunu ekleyin
Şimdi, src/lib.rs
dosyasının içeriğini aşağıdaki kodla değiştirin. Bu, program
çağrıldığında program günlüğüne "Hello, world!" yazdıran minimal bir Solana
programıdır.
msg!
makrosu, Solana programlarında program günlüğüne mesaj yazdırmak için
kullanılır.
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(())}
Programı derleyin
Şimdi, programı cargo build-sbf
komutunu kullanarak derleyin.
cargo build-sbf
Bu komut, iki önemli dosya içeren bir target/deploy
dizini oluşturur:
- Bir
.so
dosyası (örn.,hello_world.so
): Bu, "akıllı sözleşme" olarak ağa dağıtılacak derlenmiş Solana programıdır. - Bir keypair dosyası (örn.,
hello_world-keypair.json
): Bu keypair'in açık anahtarı, programı dağıtırken program kimliği olarak kullanılır.
Program kimliğini görüntülemek için terminalinizde aşağıdaki komutu çalıştırın. Bu komut, belirtilen dosya yolundaki keypair'in açık anahtarını yazdırır:
solana address -k ./target/deploy/hello_world-keypair.json
Örnek çıktı:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Test bağımlılıklarını ekle
Sonraki adımda, programı solana-program-test
crate'ini kullanarak test edin.
Aşağıdaki bağımlılıkları Cargo.toml
dosyasına ekleyin.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
Programı test et
Aşağıdaki testi, program kodunun altında olacak şekilde src/lib.rs
dosyasına
ekleyin. Bu, merhaba dünya programını çağıran bir test modülüdür.
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());}}
Testi cargo test-sbf
komutunu kullanarak çalıştırın. Program günlüğünde
"Hello, world!" görüntülenecektir.
cargo test-sbf
Örnek çıktı:
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
Programı dağıt
Şimdi programı dağıtın. Yerel geliştirme yaparken, solana-test-validator
kullanabiliriz.
Öncelikle, Solana CLI'yi yerel Solana kümesini kullanacak şekilde yapılandırın.
solana config set -ul
Örnek çıktı:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
Yeni bir terminal açın ve yerel validator'ı başlatmak için
solana-test-validators
komutunu çalıştırın.
solana-test-validator
Test validator'ı çalışırken, ayrı bir terminalde solana program deploy
komutunu çalıştırarak programı yerel validator'a dağıtın.
solana program deploy ./target/deploy/hello_world.so
Örnek çıktı:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
Program ID'sini ve işlem imzasını
Solana Explorer
üzerinde inceleyebilirsiniz. Solana Explorer'daki kümenin de localhost olması
gerektiğini unutmayın. Solana Explorer'daki "Custom RPC URL" seçeneği varsayılan
olarak http://localhost:8899
değerini kullanır.
Örnek istemci oluştur
Şimdi, bir Rust istemcisi kullanarak programı nasıl çağıracağımızı göstereceğiz.
Önce bir examples
dizini ve bir client.rs
dosyası oluşturun.
mkdir -p examplestouch examples/client.rs
Aşağıdakileri Cargo.toml
dosyasına ekleyin.
[[example]]name = "client"path = "examples/client.rs"
solana-client
bağımlılığını ekleyin.
cargo add solana-client@1.18.26 --dev
İstemciyi ekle
Aşağıdaki kodu examples/client.rs
dosyasına ekleyin. Bu, işlem ücretlerini
ödemek için yeni bir keypair oluşturan ve ardından merhaba dünya programını
çağıran bir Rust istemci komut dosyasıdır.
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://localhost: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),}}
Program kimliğini değiştir
Komut dosyasını çalıştırmadan önce, yukarıdaki kod parçasındaki program kimliğini kendi programınızın kimliği ile değiştirin.
Program kimliğinizi aşağıdaki komutu çalıştırarak alabilirsiniz.
solana address -k ./target/deploy/hello_world-keypair.json
Programı çağır
İstemci komut dosyasını aşağıdaki komutla çalıştırın.
cargo run --example client
Örnek çıktı:
Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV
İşlem imzasını Solana Explorer üzerinde (yerel küme) inceleyerek program günlüğünde "Hello, world!" mesajını görebilirsiniz.
Programı güncelle
Solana programları, aynı program kimliğine yeniden dağıtılarak güncellenebilir.
src/lib.rs
içindeki programı "Hello, world!" yerine "Hello, Solana!"
yazdıracak şekilde güncelleyin.
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
Güncellenmiş programı cargo test-sbf
komutunu çalıştırarak test edin.
cargo test-sbf
Program günlüğünde "Hello, Solana!" ifadesini görmelisiniz.
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
Programı yeniden dağıt
Güncellenmiş bir .so
dosyası oluşturmak için cargo build-sbf
komutunu
çalıştırın.
cargo build-sbf
solana program deploy
komutunu kullanarak programı yeniden dağıtın.
solana program deploy ./target/deploy/hello_world.so
İstemci kodunu tekrar çalıştırın ve program günlüğünde "Hello, Solana!" ifadesini görmek için işlem imzasını Solana Explorer'da inceleyin.
cargo run --example client
Programı kapat
Hesaba tahsis edilen SOL'u geri almak için Solana programınızı kapatabilirsiniz. Bir programı kapatmak geri alınamaz, bu nedenle dikkatle yapılmalıdır.
Bir programı kapatmak için solana program close <PROGRAM_ID>
komutunu
kullanın. Örneğin:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
Örnek çıktı:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
Bir program kapatıldıktan sonra, program kimliğinin yeniden kullanılamayacağını unutmayın. Daha önce kapatılmış bir program kimliği ile program dağıtmaya çalışmak hatayla sonuçlanacaktır.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
Kapatılmış bir programı yeniden dağıt
Bir programı kapattıktan sonra aynı kaynak koduyla yeniden dağıtmanız gerekiyorsa, yeni bir program kimliği oluşturmalısınız. Program için yeni bir keypair oluşturmak için aşağıdaki komutu çalıştırın:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
Alternatif olarak, mevcut keypair dosyasını silebilir (örn.
./target/deploy/hello_world-keypair.json
) ve tekrar cargo build-sbf
komutunu
çalıştırabilirsiniz, bu da yeni bir keypair dosyası oluşturacaktır.
Yeni bir program oluşturma
İlk olarak, standart cargo init
komutunu --lib
bayrağı ile kullanarak yeni
bir Rust projesi oluşturun.
cargo init hello_world --lib
Proje dizinine gidin. Varsayılan src/lib.rs
ve Cargo.toml
dosyalarını
görmelisiniz
cd hello_world
solana-program bağımlılığını ekleme
Sonra, solana-program
bağımlılığını ekleyin. Bu, bir Solana programı
oluşturmak için gereken minimum bağımlılıktır.
cargo add solana-program@1.18.26
Ardından, aşağıdaki kod parçasını Cargo.toml
dosyasına ekleyin. Bu
yapılandırmayı eklemezseniz, programı derlediğinizde target/deploy
dizini
oluşturulmayacaktır.
crate-type ekleyin
Ardından, aşağıdaki kod parçasını Cargo.toml
dosyasına ekleyin.
[lib]crate-type = ["cdylib", "lib"]
Bu yapılandırmayı eklemezseniz, programı derlediğinizde target/deploy
dizini
oluşturulmayacaktır.
Program kodunu ekleyin
Şimdi, src/lib.rs
dosyasının içeriğini aşağıdaki kodla değiştirin. Bu, program
çağrıldığında program günlüğüne "Hello, world!" yazdıran minimal bir Solana
programıdır.
msg!
makrosu, Solana programlarında program günlüğüne mesaj yazdırmak için
kullanılır.
Programı derleyin
Şimdi, programı cargo build-sbf
komutunu kullanarak derleyin.
cargo build-sbf
Bu komut, iki önemli dosya içeren bir target/deploy
dizini oluşturur:
- Bir
.so
dosyası (örn.,hello_world.so
): Bu, "akıllı sözleşme" olarak ağa dağıtılacak derlenmiş Solana programıdır. - Bir keypair dosyası (örn.,
hello_world-keypair.json
): Bu keypair'in açık anahtarı, programı dağıtırken program kimliği olarak kullanılır.
Program kimliğini görüntülemek için terminalinizde aşağıdaki komutu çalıştırın. Bu komut, belirtilen dosya yolundaki keypair'in açık anahtarını yazdırır:
solana address -k ./target/deploy/hello_world-keypair.json
Örnek çıktı:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Test bağımlılıklarını ekle
Sonraki adımda, programı solana-program-test
crate'ini kullanarak test edin.
Aşağıdaki bağımlılıkları Cargo.toml
dosyasına ekleyin.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
Programı test et
Aşağıdaki testi, program kodunun altında olacak şekilde src/lib.rs
dosyasına
ekleyin. Bu, merhaba dünya programını çağıran bir test modülüdür.
Testi cargo test-sbf
komutunu kullanarak çalıştırın. Program günlüğünde
"Hello, world!" görüntülenecektir.
cargo test-sbf
Örnek çıktı:
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
Programı dağıt
Şimdi programı dağıtın. Yerel geliştirme yaparken, solana-test-validator
kullanabiliriz.
Öncelikle, Solana CLI'yi yerel Solana kümesini kullanacak şekilde yapılandırın.
solana config set -ul
Örnek çıktı:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
Yeni bir terminal açın ve yerel validator'ı başlatmak için
solana-test-validators
komutunu çalıştırın.
solana-test-validator
Test validator'ı çalışırken, ayrı bir terminalde solana program deploy
komutunu çalıştırarak programı yerel validator'a dağıtın.
solana program deploy ./target/deploy/hello_world.so
Örnek çıktı:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
Program ID'sini ve işlem imzasını
Solana Explorer
üzerinde inceleyebilirsiniz. Solana Explorer'daki kümenin de localhost olması
gerektiğini unutmayın. Solana Explorer'daki "Custom RPC URL" seçeneği varsayılan
olarak http://localhost:8899
değerini kullanır.
Örnek istemci oluştur
Şimdi, bir Rust istemcisi kullanarak programı nasıl çağıracağımızı göstereceğiz.
Önce bir examples
dizini ve bir client.rs
dosyası oluşturun.
mkdir -p examplestouch examples/client.rs
Aşağıdakileri Cargo.toml
dosyasına ekleyin.
[[example]]name = "client"path = "examples/client.rs"
solana-client
bağımlılığını ekleyin.
cargo add solana-client@1.18.26 --dev
İstemciyi ekle
Aşağıdaki kodu examples/client.rs
dosyasına ekleyin. Bu, işlem ücretlerini
ödemek için yeni bir keypair oluşturan ve ardından merhaba dünya programını
çağıran bir Rust istemci komut dosyasıdır.
Program kimliğini değiştir
Komut dosyasını çalıştırmadan önce, yukarıdaki kod parçasındaki program kimliğini kendi programınızın kimliği ile değiştirin.
Program kimliğinizi aşağıdaki komutu çalıştırarak alabilirsiniz.
solana address -k ./target/deploy/hello_world-keypair.json
Programı çağır
İstemci komut dosyasını aşağıdaki komutla çalıştırın.
cargo run --example client
Örnek çıktı:
Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV
İşlem imzasını Solana Explorer üzerinde (yerel küme) inceleyerek program günlüğünde "Hello, world!" mesajını görebilirsiniz.
Programı güncelle
Solana programları, aynı program kimliğine yeniden dağıtılarak güncellenebilir.
src/lib.rs
içindeki programı "Hello, world!" yerine "Hello, Solana!"
yazdıracak şekilde güncelleyin.
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
Güncellenmiş programı cargo test-sbf
komutunu çalıştırarak test edin.
cargo test-sbf
Program günlüğünde "Hello, Solana!" ifadesini görmelisiniz.
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
Programı yeniden dağıt
Güncellenmiş bir .so
dosyası oluşturmak için cargo build-sbf
komutunu
çalıştırın.
cargo build-sbf
solana program deploy
komutunu kullanarak programı yeniden dağıtın.
solana program deploy ./target/deploy/hello_world.so
İstemci kodunu tekrar çalıştırın ve program günlüğünde "Hello, Solana!" ifadesini görmek için işlem imzasını Solana Explorer'da inceleyin.
cargo run --example client
Programı kapat
Hesaba tahsis edilen SOL'u geri almak için Solana programınızı kapatabilirsiniz. Bir programı kapatmak geri alınamaz, bu nedenle dikkatle yapılmalıdır.
Bir programı kapatmak için solana program close <PROGRAM_ID>
komutunu
kullanın. Örneğin:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
Örnek çıktı:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
Bir program kapatıldıktan sonra, program kimliğinin yeniden kullanılamayacağını unutmayın. Daha önce kapatılmış bir program kimliği ile program dağıtmaya çalışmak hatayla sonuçlanacaktır.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
Kapatılmış bir programı yeniden dağıt
Bir programı kapattıktan sonra aynı kaynak koduyla yeniden dağıtmanız gerekiyorsa, yeni bir program kimliği oluşturmalısınız. Program için yeni bir keypair oluşturmak için aşağıdaki komutu çalıştırın:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
Alternatif olarak, mevcut keypair dosyasını silebilir (örn.
./target/deploy/hello_world-keypair.json
) ve tekrar cargo build-sbf
komutunu
çalıştırabilirsiniz, bu da yeni bir keypair dosyası oluşturacaktır.
[package]name = "hello_world"version = "0.1.0"edition = "2021"[dependencies]
Is this page helpful?