Solana DokümantasyonuProgram geliştirme

Rust ile Program Geliştirme

Solana programları öncelikle Rust programlama dili kullanılarak geliştirilir. Bu sayfa, Anchor çerçevesini 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 çerçevesini 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 çerçevelere geçmeden önce altta yatan kavramları öğrenmek isteyenler

Yeni başlayanlar için Anchor çerçevesi 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 new komutunu --lib bayrağı ile kullanarak yeni bir Rust projesi oluşturun.

Terminal
$
cargo new hello_world --lib

Proje dizinine gidin. Varsayılan src/lib.rs ve Cargo.toml dosyalarını görmelisiniz

Terminal
$
cd hello_world

Cargo.toml dosyasındaki edition alanını 2021 olarak güncelleyin. Aksi takdirde, programı derlerken bir hatayla karşılaşabilirsiniz.

Solana-program bağımlılığını ekleyin

Sonraki adımda, solana-program bağımlılığını ekleyin. Bu, bir Solana programı oluşturmak için gereken minimum bağımlılıktır.

Terminal
$
cargo add solana-program@2.2.0

Crate-type ekleyin

Şimdi, aşağıdaki kod parçasını Cargo.toml dosyasına ekleyin.

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

Eğer 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:

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

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.

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

Programı derleyin

Şimdi, programı cargo build-sbf komutunu kullanarak derleyin.

Terminal
$
cargo build-sbf

Bu komut, iki önemli dosya içeren bir target/deploy dizini oluşturur:

  1. Bir .so dosyası (örn., hello_world.so): Bu, ağa "akıllı sözleşme" olarak dağıtılacak derlenmiş Solana programıdır.
  2. 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:

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

Örnek çıktı:

4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz

Test bağımlılıklarını ekle

Şimdi, programı litesvm paketi kullanarak test edelim. Aşağıdaki bağımlılıkları Cargo.toml dosyasına ekleyin.

Terminal
$
cargo add litesvm --dev
$
cargo add solana-sdk@2.2.0 --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.

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:#?}");
}
}

Testi cargo test komutunu kullanarak çalıştırın. Program günlüğünde "Hello, world!" görüntülenecektir.

Terminal
$
cargo test -- --no-capture

Örnek çıktı:

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

Programı dağıt

Şimdi programı dağıtalım. Yerel geliştirme yaparken, solana-test-validator kullanabiliriz.

Öncelikle, Solana CLI'yi yerel Solana kümesini kullanacak şekilde yapılandırın.

Terminal
$
solana config set -ul

Örnek çıktı:

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

Yeni bir terminal açın ve yerel validator'ı başlatmak için solana-test-validators komutunu çalıştırın.

Terminal
$
solana-test-validator

Test validator'ı çalışırken, ayrı bir terminalde solana program deploy komutunu çalıştırarak programı yerel validator'a dağıtın.

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

Örnek çıktı:

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
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şturma

Ş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.

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

Aşağıdakileri Cargo.toml dosyasına ekleyin.

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

solana-client ve tokio bağımlılıklarını ekleyin.

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

İstemciyi ekleme

Aşağıdaki kodu examples/client.rs dosyasına ekleyin. Bu, işlem ücretlerini ödemek için yeni bir keypair'i fonlayan ve ardından hello world programını çağıran bir Rust istemci komut dosyasıdır.

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

Program ID'sini değiştirme

İstemci kodunu çalıştırmadan önce, kod parçasındaki program ID'sini kendi programınızın ID'si ile değiştirin.

Program ID'nizi aşağıdaki komutu çalıştırarak alabilirsiniz.

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

Programı çağırma

İstemci komut dosyasını aşağıdaki komutla çalıştırın.

Terminal
$
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!" yazısı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.

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

Güncellenmiş .so dosyasını oluşturmak için cargo build-sbf komutunu çalıştırın.

Terminal
$
cargo build-sbf

cargo test komutunu çalıştırarak güncellenmiş programı test edin.

Terminal
$
cargo test -- --no-capture

Program günlüğünde "Hello, Solana!" yazısını görmelisiniz.

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

Programı yeniden dağıt

Programı aynı solana program deploy komutunu kullanarak yeniden dağıtın.

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

İstemci kodunu tekrar çalıştırın ve Solana Explorer'da işlem imzasını inceleyerek program günlüğünde "Hello, Solana!" yazısını görün.

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

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

Örnek çıktı:

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

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 hata ile sonuçlanacaktır.

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

Kapatılmış bir programı yeniden dağıtma

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:

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

Alternatif olarak, mevcut keypair dosyasını (örn. ./target/deploy/hello_world-keypair.json) silebilir ve cargo build-sbf komutunu tekrar çalıştırabilirsiniz, bu da yeni bir keypair dosyası oluşturacaktır.

Yeni bir program oluşturma

İlk olarak, standart cargo new komutunu --lib bayrağı ile kullanarak yeni bir Rust projesi oluşturun.

Terminal
$
cargo new hello_world --lib

Proje dizinine gidin. Varsayılan src/lib.rs ve Cargo.toml dosyalarını görmelisiniz

Terminal
$
cd hello_world

Cargo.toml dosyasındaki edition alanını 2021 olarak güncelleyin. Aksi takdirde, programı derlerken bir hatayla karşılaşabilirsiniz.

Solana-program bağımlılığını ekleyin

Sonraki adımda, solana-program bağımlılığını ekleyin. Bu, bir Solana programı oluşturmak için gereken minimum bağımlılıktır.

Terminal
$
cargo add solana-program@2.2.0

Crate-type ekleyin

Şimdi, aşağıdaki kod parçasını Cargo.toml dosyasına ekleyin.

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

Eğer 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.

Terminal
$
cargo build-sbf

Bu komut, iki önemli dosya içeren bir target/deploy dizini oluşturur:

  1. Bir .so dosyası (örn., hello_world.so): Bu, ağa "akıllı sözleşme" olarak dağıtılacak derlenmiş Solana programıdır.
  2. 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:

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

Örnek çıktı:

4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz

Test bağımlılıklarını ekle

Şimdi, programı litesvm paketi kullanarak test edelim. Aşağıdaki bağımlılıkları Cargo.toml dosyasına ekleyin.

Terminal
$
cargo add litesvm --dev
$
cargo add solana-sdk@2.2.0 --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 komutunu kullanarak çalıştırın. Program günlüğünde "Hello, world!" görüntülenecektir.

Terminal
$
cargo test -- --no-capture

Örnek çıktı:

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

Programı dağıt

Şimdi programı dağıtalım. Yerel geliştirme yaparken, solana-test-validator kullanabiliriz.

Öncelikle, Solana CLI'yi yerel Solana kümesini kullanacak şekilde yapılandırın.

Terminal
$
solana config set -ul

Örnek çıktı:

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

Yeni bir terminal açın ve yerel validator'ı başlatmak için solana-test-validators komutunu çalıştırın.

Terminal
$
solana-test-validator

Test validator'ı çalışırken, ayrı bir terminalde solana program deploy komutunu çalıştırarak programı yerel validator'a dağıtın.

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

Örnek çıktı:

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
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şturma

Ş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.

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

Aşağıdakileri Cargo.toml dosyasına ekleyin.

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

solana-client ve tokio bağımlılıklarını ekleyin.

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

İstemciyi ekleme

Aşağıdaki kodu examples/client.rs dosyasına ekleyin. Bu, işlem ücretlerini ödemek için yeni bir keypair'i fonlayan ve ardından hello world programını çağıran bir Rust istemci komut dosyasıdır.

Program ID'sini değiştirme

İstemci kodunu çalıştırmadan önce, kod parçasındaki program ID'sini kendi programınızın ID'si ile değiştirin.

Program ID'nizi aşağıdaki komutu çalıştırarak alabilirsiniz.

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

Programı çağırma

İstemci komut dosyasını aşağıdaki komutla çalıştırın.

Terminal
$
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!" yazısı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.

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

Güncellenmiş .so dosyasını oluşturmak için cargo build-sbf komutunu çalıştırın.

Terminal
$
cargo build-sbf

cargo test komutunu çalıştırarak güncellenmiş programı test edin.

Terminal
$
cargo test -- --no-capture

Program günlüğünde "Hello, Solana!" yazısını görmelisiniz.

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

Programı yeniden dağıt

Programı aynı solana program deploy komutunu kullanarak yeniden dağıtın.

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

İstemci kodunu tekrar çalıştırın ve Solana Explorer'da işlem imzasını inceleyerek program günlüğünde "Hello, Solana!" yazısını görün.

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

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

Örnek çıktı:

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

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 hata ile sonuçlanacaktır.

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

Kapatılmış bir programı yeniden dağıtma

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:

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

Alternatif olarak, mevcut keypair dosyasını (örn. ./target/deploy/hello_world-keypair.json) silebilir ve cargo build-sbf komutunu tekrar çalıştırabilirsiniz, bu da yeni bir keypair dosyası oluşturacaktır.

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

Is this page helpful?

İçindekiler

Sayfayı Düzenle