Ana içeriğe geç

Rust Deneyimi ile Solana'ya Başlarken

Rust bilen geliştiricilerin Solana geliştirmesine girmesi için harika bir başlangıç vardır. Rust, Solana Blokzinciri'nde onchain programlar yazmak için resmi olarak desteklenen bir dildir. Ancak, dilin kullanımında bazı önemli farklılıklar kafa karıştırıcı olabilir.

ipucu

Bu rehber, bu farklılıklardan bazılarını, özellikle kurulum detayları, kısıtlamalar, makro değişiklikleri ve hesaplama limitlerini ele alacaktır.

Ayrıca, Solana ile başlamanız için gerekli geliştirme ortamlarını ve çerçeveleri de kapsayacaktır.

Bu rehberin sonunda, Rust geliştiricileri Solana yolculuklarına başlamak için bilmesi gereken farklılıkları anlayacaklar.

Temel Farklılıkları Anlamak

Öncelikle, bu rehberin hedefinin Rust'ın Solana ile çalışırken dil olarak kullanımındaki farklılıkları anlamak olduğunu belirtmek gerekir. Blokzincir veya Solana temelleri üzerinde durmayacaktır.

Ayrıca, Solana'da program yazmak için anlaşılması gereken temel Solana kavramlarını da kapsamayacaktır. Bu kavramlar arasında şunlar bulunmaktadır:

  • Programlar - Solana'nın akıllı sözleşmelere karşılık gelen versiyonu
  • Hesaplar - Solana defterinde verileri (veri hesabı) tutan veya yürütme programı olan bir kayıt
  • Çeşitli ücretler - Temel ücret, öncelik ücreti ve kira gibi
  • İşlemler - Ağ ile etkileşimlerde bulunan ve talimatlar, imzalar ve daha fazlasını içeren etkileşimlerdir.

Bu temel kavramlar hakkında daha fazla bilgi için Solana geliştirici belgelerine bakın.


Proje Kurulumu Üzerindeki Farklar

Şimdi proje kurulumu üzerindeki farklara bakalım.

Ana Kurulum Detayları

Rust'daki Solana için onchain programlar hala Rust programlarıdır. Hala kök dizinde bir /src klasör ve Cargo.toml dosyası ile standart Rust projesini izlerler. Ancak, birkaç önemli farklılık vardır.

Proje Bağımlılıkları

Başlamak için, Rust ile yazılmış her onchain Solana programı için solana-program crate gereklidir. Bu, tüm onchain Rust programları için temel kütüphanedir. Kütüphane, gerekli program giriş noktası (aşağıya bakın), temel veri türleri, günlük makroları ve daha fazlası için makrolar tanımlar.

Program Giriş Noktası

bilgi

Solana programları, main işlevi yerine entrypoint! makrosunu kullanır. Bu simge dışa aktarılır ve program çalıştırıldığında Solana çalışma zamanı tarafından çağrılır.

Giriş noktası makrosu belirli bir işlevi çağırır ve bu işlevin aşağıdaki tür imzasına sahip olması gerekir:

pub fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo],
instruction_data: &[u8], ) -> ProgramResult {

//program kodu buraya yazılır

}

Bu üç parametre her onchain programa geçilir:

  1. program_id, mevcut programın açık anahtarıdır.
  2. accounts, talimatı işlemek için gerekli olan tüm hesaplarıdır.
  3. instruction_data, o talimata özgü veridir.

Her program, talimat üzerinde entrypoint! makrosunu çağırmalıdır:

entrypoint!(process_instruction);

Derleme ve Test

Solana komut satırı araçlarını kurduktan sonra, projeler normal şekilde cargo build ile ana makineleri hedef alacak şekilde derlenebilir.

Ancak, Solana çalışma zamanını hedeflemek için cargo build-bpf veya cargo build-spf kullanmalısınız; bu, programı Solana çalışma zamanında çalıştırmak için gerekli bytecode'a derleyecektir.

not

Birim testi standart #test öznitelikleri ile cargo test kullanılarak yapılabilir. Daha entegre testler için, solana-program-test crate'i, dış testlerin işlemler göndermesine izin veren bir yerel Solana çalışma zamanı örneği sağlar.

Son olarak, solana-test-validator ile tam bir test kümesi başlatılabilir; bu, Solana CLI ile birlikte kurulu olan bir makinede tamamen işlevsel bir test kümesi oluşturur ve programları dağıtıp testler gerçekleştirebilir.


Kısıtlamaları Anlamak

Çoğu standart Rust crate'i Solana çalışma zamanında mevcut olsa da ve üçüncü taraf crate'ler de desteklense de, bazı kısıtlamalar mevcuttur. Solana çalışma zamanının kaynak kısıtlamaları var ve deterministik olarak çalışması gerektiğinden, bilinmesi gereken farklılıklar şunlardır:

Paket Sınırlamaları

Aşağıdaki paketler kullanılamaz:

  • rand
  • std::fs
  • std::net
  • std::future
  • std::process
  • std::sync
  • std::task
  • std::thread
  • std::time

Aşağıdaki paketlerin işlevselliği sınırlıdır:

  • std::hash
  • std::os

Rand Bağımlılıkları

tehlike

Programların deterministik olarak çalışması gerektiğinden rand crate'i mevcut değildir. rand'ya bağımlı olan ek bir crate kullanmak da derleme hatalarına neden olur.

Ancak, kullanılan crate rand'ya bağımlı ancak aslında rastgele sayı üretmiyorsa, programın Cargo.toml dosyasına aşağıdakileri ekleyerek bunun üstesinden gelmek mümkündür:

[dependencies]
getrandom = { version = "0.1.14", features = ["dummy"] }

Makro Değişiklikleri

Bazı standart makrolar değiştirilmiş veya davranışları değiştirilmiştir. İlk olarak, println! makrosu, hesaplaması daha basit olan msg! makrosu ile değiştirilmiştir. msg! makrosu program günlüklerine çıktıyı verir ve aşağıdaki gibi kullanılabilir:

msg!("Mesajınız");
msg!(0_64, 1_64, 2_64);
msg!("Değişkeniniz: {:?}", variable);

panic!, assert! ve dahili panikler de varsayılan olarak program günlüklerine yazılır. Ancak, bu, özel bir panik işleyicisi ile değiştirilebilir.

tehlike

panic! için daha iyi bir alternatif olarak hata yönetimi kullanılmalıdır:

#[error_code]
pub enum MyErrors {
CustomError,
}

#[program]
pub mod anchor_error_test {
use super::*;

pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
//panic!("PANİK");
return Err(MyErrors::CustomError.into());

Ok(())
}
}

Hesaplama Bütçesi

Bir Rust geliştiricisi olarak, verimli hesaplama yeni bir şey değildir. Ancak Solana'da her işlem için geçerli olan sabit bir hesaplama bütçesi olduğunu bilmek önemli olabilir. İşlemler hesaplama bütçesini aştığında, durdurulur ve hata döner.

Programlar, sol_remaining_compute_units sistem çağrısı aracılığıyla kalan hesaplama birimlerinin sayısına erişebilir ve sol_log_compute_units ile kalan hesaplama birimlerinin sayısını günlüğe kaydedebilir.


Geliştirme Ortamını ve Çerçeveleri Öğrenme

Solana CLI ve solana_program crate'i başlamak için gereken her şeydir, ancak öğrenimi hızlandırabilecek birkaç yararlı araç vardır.

Ağ Diyagramı

Solana Playground

Sola Playground geliştiricilerin Solana programlarını geliştirmesine ve dağıtmasına olanak tanıyan tarayıcı tabanlı bir IDE'dir.

Solana Playground

Solana ile geliştirmeye başlamak için en kolay yoldur ve Solana Rust programlarını oluşturma, test etme ve dağıtma desteği sağlar. Ayrıca, öğrenmeye rehberlik edecek bir dizi yerleşik eğitim mevcut.

ipucu

Solana Playground, geliştiricilerin yerel bir ortam kurmadan hemen başlamasına olanak tanır.

Anchor Kullanımı

Anchor güvenli Solana programlarının inşasını hızlandırmayı hedefleyen bir çerçevedir. Standart genel kodu işleyerek geliştirme döngüsünü hızlandırabilir. Ayrıca, varsayılan olarak bazı güvenlik kontrolleri sağlar ve Solana programlarını daha güvenli hale getirir.

Yeni bir program oluşturmak için, sadece Solana playground'da yeni bir Anchor projesi oluşturun.

Alternatif olarak, Anchor CLI'yi yerel olarak kurun ve ardından anchor init komutunu kullanarak yeni bir Anchor projesi oluşturun.


Offchain Programlar Oluşturma

Bu rehber, Rust ile onchain Solana programları geliştirmeye dair temel detayları ele almıştır. Ancak, Rust ile offchain Solana istemcileri geliştirmek de mümkündür. Bu, solana_sdk crate kullanılarak yapılabilir. Bu, Rust programlarının JSON RPC API aracılığıyla bir Solana düğümü ile etkileşimde bulunmasını sağlar.

Diğer bir seçenek, RPC aracılığıyla Anchor'da yazılmış Solana programları ile etkileşimde bulunan anchor_client crate kullanmaktır. Alternatif olarak, Rust'ta onchain programlar yazmayı ve offchain istemcileri JS/TS'de değerlendirmeyi düşünün.

Kapanış

Bu rehber, Solana için Rust ile geliştirme temellerini, kurulum detayları ve kısıtlamalardan geliştirme ortamları ve çerçevelere kadar kapsadı.

Rust ile yazılmış diğer Solana program örnekleri için bu GitHub'daki örneklere göz atın.

Birçok örnek Solana programını görüntülemek için GitHub'daki Solana Program Örneklerine bakın.