🚀 Online Kendi Sınavını Oluştur ve Çöz!
avatar
Yazilim_Kurdu
10 puan • 545 soru • 582 cevap
✔️ Cevaplandı • Doğrulandı

Solana (SOL) Programlama: Akıllı Kontrat Geliştirme Rehberi

Solana (SOL) programlama ile akıllı kontrat geliştirmek istiyorum ama nereden başlayacağımı bilemiyorum. Hangi araçları kullanmalıyım, hangi adımları izlemeliyim, bir rehbere ihtiyacım var.
WhatsApp'ta Paylaş
1 CEVAPLARI GÖR
✔️ Doğrulandı
0 kişi beğendi.
avatar
Volkan_Demir
20 puan • 570 soru • 553 cevap

🚀 Solana Programlama: Akıllı Kontrat Geliştirme Rehberi

Solana, yüksek performanslı ve ölçeklenebilir bir blok zinciri platformudur. Bu rehberde, Solana üzerinde akıllı kontrat geliştirme sürecini adım adım inceleyeceğiz.

⚙️ Solana Akıllı Kontrat Geliştirme Ortamı Kurulumu

Akıllı kontrat geliştirmeye başlamadan önce geliştirme ortamımızı kurmamız gerekiyor.
  • 💻 Rust ve Cargo Kurulumu: Solana akıllı kontratları Rust programlama dili ile geliştirilir. Bu nedenle öncelikle Rust ve paket yöneticisi Cargo'yu kurmalıyız. Rust'ı kurmak için resmi Rust kurulum sayfasını ziyaret edebilirsiniz.
  • Anchor Framework Kurulumu: Anchor, Solana üzerinde güvenli ve verimli akıllı kontratlar geliştirmeyi kolaylaştıran bir framework'tür. Anchor'ı kurmak için aşağıdaki komutu kullanabilirsiniz:

    cargo install --git https://github.com/coral-xyz/anchor anchor-cli --locked
  • 💰 Solana Tool Suite Kurulumu: Solana araçları, blok zinciri ile etkileşim kurmak, anahtar çiftleri oluşturmak ve kontratları dağıtmak için gereklidir. Kurulum için:

    sh -c "$(curl -sSfL https://release.solana.com/v1.18.4/install)"

    Komutu çalıştırdıktan sonra, solana --version komutu ile kurulumu doğrulayabilirsiniz.
  • 🔑 Solana Konfigürasyonu: Solana'yı yerel bir ağa veya test ağına bağlamak için yapılandırmamız gerekir. Aşağıdaki komutları kullanarak ağı ayarlayabilir ve bir cüzdan oluşturabilirsiniz:

    solana config set --url devnet

    solana-keygen new

📝 Yeni Bir Anchor Projesi Oluşturma

Geliştirme ortamımız hazır olduğuna göre, yeni bir Anchor projesi oluşturalım.
  • 📂 Proje Oluşturma: Yeni bir proje oluşturmak için aşağıdaki komutu kullanın:

    anchor init myproject

    Bu komut, "myproject" adında bir klasör oluşturacak ve gerekli temel dosyaları içerecektir.
  • 📁 Proje Yapısı: Oluşturulan proje aşağıdaki gibi bir yapıya sahip olacaktır:
    • programs/: Akıllı kontrat kodunu içerir.
    • migrations/: Kontratın blok zincirine dağıtımını yönetir.
    • test/: Kontrat testlerini içerir.
    • Anchor.toml: Proje yapılandırma dosyasıdır.

✍️ Akıllı Kontrat Yazma

Şimdi basit bir akıllı kontrat yazalım. Örnek olarak, bir sayaç kontratı oluşturacağız.
  • 📜 Kontrat Kodu: programs/myproject/src/lib.rs dosyasını açın ve aşağıdaki kodu ekleyin:

    use anchor_lang::prelude::*; declare_id!("Fg6PaFpoGXkYsidMpWTk6W2BeZ7FEfcYkg476zPFsLn"); #[program] pub mod myproject { use super::*; pub fn initialize(ctx: Context) -> Result<()> { let my_account = &mut ctx.accounts.my_account; my_account.count = 0; Ok(()) } pub fn increment(ctx: Context) -> Result<()> { let my_account = &mut ctx.accounts.my_account; my_account.count += 1; Ok(()) } } #[derive(Accounts)] pub struct Initialize<'info> { #[account(init, payer = user, space = 8 + 8, seeds = [b"my-account".as_ref(), user.key().as_ref()], bump)] pub my_account: Account<'info, MyAccount>, #[account(mut)] pub user: Signer<'info>, pub system_program: Program<'info, System>, } #[derive(Accounts)] pub struct Increment<'info> { #[account(mut, seeds = [b"my-account".as_ref(), user.key().as_ref()], bump)] pub my_account: Account<'info, MyAccount>, pub user: Signer<'info>, } #[account] pub struct MyAccount { pub count: u64, }
  • ⚙️ Açıklama:
    • declare_id!: Kontratın benzersiz kimliğini tanımlar.
    • initialize fonksiyonu: Kontratı başlatır ve sayacı 0'a ayarlar.
    • increment fonksiyonu: Sayacı 1 artırır.
    • MyAccount yapısı: Sayacın değerini saklar.

🏗️ Kontratı Derleme ve Dağıtma

Kontratımızı derleyip Solana ağına dağıtalım.
  • 📦 Derleme: Kontratı derlemek için aşağıdaki komutu kullanın:

    anchor build

    Bu komut, target/deploy dizininde kontratın .so dosyasını oluşturacaktır.
  • 🚀 Dağıtım: Kontratı dağıtmak için aşağıdaki komutu kullanın:

    anchor deploy

    Bu komut, kontratı yapılandırılan Solana ağına dağıtacaktır.
  • ✍️ Client Kodu Oluşturma: Kontratla etkileşim kurmak için client kodu oluşturun:

    anchor idl init --filepath target/idl/myproject.json -o app/src/lib.rs

🧪 Kontratı Test Etme

Kontratımızın doğru çalıştığından emin olmak için testler yazalım.
  • ✍️ Test Kodu: test/myproject.ts dosyasını açın ve aşağıdaki kodu ekleyin:

    import * as anchor from "@coral-xyz/anchor"; import { Program } from "@coral-xyz/anchor"; import { Myproject } from "../target/types/myproject"; import { assert } from "chai"; describe("myproject", () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.AnchorProvider.env()); const program = anchor.workspace.Myproject as Program; it("Is initialized!", async () => { // Add your test here. const myAccount = anchor.web3.Keypair.generate(); const tx = await program.methods.initialize() .accounts({ myAccount: myAccount.publicKey, user: program.provider.publicKey, systemProgram: anchor.web3.SystemProgram.programId, }) .signers([myAccount]) .rpc(); console.log("Your transaction signature", tx); const account = await program.account.myAccount.fetch(myAccount.publicKey); assert.ok(account.count.toNumber() === 0); }); it("Is increments!", async () => { // Add your test here. const myAccount = anchor.web3.Keypair.generate(); await program.methods.initialize() .accounts({ myAccount: myAccount.publicKey, user: program.provider.publicKey, systemProgram: anchor.web3.SystemProgram.programId, }) .signers([myAccount]) .rpc(); await program.methods.increment() .accounts({ myAccount: myAccount.publicKey, user: program.provider.publicKey, }) .rpc(); const account = await program.account.myAccount.fetch(myAccount.publicKey); assert.ok(account.count.toNumber() === 1); }); });
  • 🧪 Testleri Çalıştırma: Testleri çalıştırmak için aşağıdaki komutu kullanın:

    anchor test

    Bu komut, testleri çalıştıracak ve sonuçları gösterecektir.

📚 Sonuç

Bu rehberde, Solana üzerinde basit bir akıllı kontrat geliştirme sürecini adım adım inceledik. Solana'nın sunduğu yüksek performans ve ölçeklenebilirlik, blok zinciri uygulamaları için büyük fırsatlar sunmaktadır. Anchor framework'ü kullanarak, güvenli ve verimli kontratlar geliştirebilirsiniz. Başarılar!

Yorumlar