Taze Logo
Blockchain Geliştirme10 Mart 2026

Blockchain'de Kod Yazma Sanatı: Sıfırdan Uzmanlığa Adım Adım Rehber

Blockchain'de Kod Yazma Sanatı: Sıfırdan Uzmanlığa Adım Adım Rehber

Blockchain geliştirme dünyasına girmek istiyor ama nereden başlayacağınızı bilmiyor musunuz? Bu dev rehber, akıllı kontratların temellerinden ilk dApp'inizi dağıtmaya kadar tüm süreci; Solidity, Hardhat, Ethers.js araçlarıyla, adım adım ve gerçek kod örnekleriyle anlatıyor.

Giriş: Neden Şimdi Blockchain Geliştirici Olmalısınız?

Web3, internetin bir sonraki evrimi olarak kapımızda ve bu devrimin motoru blockchain teknolojisi. Blockchain geliştiriciliği, şu anda teknolojideki en çok aranan ve en yüksek maaşlı alanlardan biri. Ancak bu dünyaya girmek, geleneksel yazılım geliştirmeden farklı bir düşünce yapısı ve araç seti gerektiriyor. Bu rehber, sizi sıfır noktasından alıp, kendi merkeziyetsiz uygulamanızı (dApp) yazıp dağıtabilecek seviyeye getirmek için tasarlandı. Hazırsanız, geleceği kodlamaya başlayalım.

Bölüm 1: Düşünce Yapısını Değiştirmek - Blockchain'in 4 Altın Kuralı

Kod yazmaya başlamadan önce, blockchain'in getirdiği yeni paradigmaları anlamalıyız. Bu kurallar, yazacağınız her satırı etkileyecek.

  1. Değişmezlik (Immutability): Blockchain'e yazılan bir kod (akıllı kontrat) veya veri (transaction) bir daha asla değiştirilemez veya silinemez. Bu, "bug'ı sonra düzeltirim" lüksünüzün olmadığı anlamına gelir. Kodunuzdaki her hata kalıcıdır.
  2. Merkeziyetsizlik (Decentralization): Kodunuz tek bir sunucuda değil, binlerce bilgisayardan (node) oluşan bir ağda çalışır. Bu, uygulamanızın sansürlenemez ve durdurulamaz olmasını sağlar ama aynı zamanda her işlemin bir maliyeti olduğu anlamına gelir.
  3. Gas Ücretleri ve Optimizasyon: Blockchain üzerinde yapılan her işlem (veri yazma, fonksiyon çağırma) "gas" adı verilen bir işlem ücreti gerektirir. Verimsiz kod, kullanıcılarınıza yüzlerce dolara mal olabilir. Bu yüzden optimizasyon, bir tercih değil, zorunluluktur.
  4. Determinizm (Deterministic Execution): Akıllı kontratınız, aynı girdilerle her zaman ve her node'da tam olarak aynı sonucu üretmelidir. Bu nedenle, API çağırmak veya rastgele sayı üretmek gibi dış kaynaklara bağımlı işlemler doğrudan yapılamaz.

Bölüm 2: Akıllı Kontrat Dilleri - Hangi Silahı Seçmelisiniz?

Akıllı kontratlar, blockchain üzerinde çalışan programlardır. İşte en popüler diller:

  • Solidity: Ethereum'un resmi dilidir ve en büyük ekosisteme sahiptir. C++, Python ve JavaScript karışımı bir söz dizimi vardır. Başlamak için en iyi yerdir.
  • Vyper: Python'a çok benzeyen, daha basit ve güvenliğe odaklanmış bir alternatiftir. Okunabilirliği ve denetlenebilirliği ön planda tutar.
  • Rust: Solana, Near ve Polkadot gibi yeni nesil blockchain'lerin tercihidir. Çok yüksek performans sunar ancak öğrenmesi daha zordur.

Biz bu rehberde Solidity üzerine odaklanacağız.

Bölüm 3: Geliştirme Ortamı ve Araçlar - Savaş Alanınızı Kurun

Profesyonel bir dApp geliştirmek için doğru araçlara ihtiyacınız var.

  • Kod Editörü: VS Code, Solidity için harika eklentilere sahip.
  • Geliştirme Çatısı: Hardhat. Kodunuzu derlemek, test etmek, yerel bir blockchain'de denemek ve ana ağa dağıtmak için kullanılan bir İsviçre çakısıdır.
  • Frontend Kütüphanesi: Ethers.js. Web sitenizin (frontend) blockchain üzerindeki akıllı kontratınızla konuşmasını sağlayan kütüphanedir.
  • Cüzdan: MetaMask. Tarayıcınızda çalışan, test ağları ve ana ağ ile etkileşim kurmanızı sağlayan dijital cüzdanınız.
  • Node Sağlayıcı: Alchemy veya Infura. Uygulamanızın blockchain ağına bağlanabilmesi için gereken altyapıyı sağlayan servislerdir. Ücretsiz planları başlangıç için yeterlidir.

Bölüm 4: Adım Adım İlk dApp'iniz - Merkeziyetsiz Not Defteri

Şimdi öğrendiklerimizi birleştirelim ve basit bir not defteri uygulaması yapalım.

Adım 1: Hardhat Projesi Oluşturma


mkdir MyDApp && cd MyDApp
npm init -y
npm install --save-dev hardhat
npx hardhat
# Çıkan seçeneklerde "Create a basic sample project" seçin.
npm install @nomiclabs/hardhat-ethers ethers
        

Adım 2: Akıllı Kontratı Yazma (contracts/Notebook.sol)


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Notebook {
    string private note;
    address public owner;

    event NoteChanged(string newNote);

    constructor() {
        owner = msg.sender;
    }

    function setNote(string calldata _newNote) public {
        require(msg.sender == owner, "Only owner can change the note.");
        note = _newNote;
        emit NoteChanged(_newNote);
    }

    function getNote() public view returns (string memory) {
        return note;
    }
}
        

Adım 3: Dağıtım Script'i (scripts/deploy.js)


async function main() {
  const Notebook = await ethers.getContractFactory("Notebook");
  const notebook = await Notebook.deploy();
  console.log("Notebook deployed to:", notebook.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });
        

Bu script'i yerel test ağında çalıştırmak için: npx hardhat run scripts/deploy.js --network localhost

Adım 4: Frontend Bağlantısı (Basit Bir React Komponenti)

Bu adımı basitleştirmek için, bir React projeniz olduğunu ve Ethers.js'in kurulu olduğunu varsayıyoruz. Aşağıdaki kod, projenizdeki bir React component dosyasına (örneğin, App.js) yapıştırılmalıdır.


import { useState, useEffect } from 'react';
import { ethers } from 'ethers';
import NotebookArtifact from './artifacts/contracts/Notebook.sol/Notebook.json';

const contractAddress = "DAĞITIM_SONRASI_ADRESİNİZ";

function App() {
    const [note, setNote] = useState("");
    const [inputValue, setInputValue] = useState("");
    const [provider, setProvider] = useState(null);
    const [contract, setContract] = useState(null);

    // Sayfa yüklendiğinde MetaMask'e bağlanıp kontratı başlatan fonksiyon
    useEffect(() => {
        const init = async () => {
            if (typeof window.ethereum !== 'undefined') {
                const web3Provider = new ethers.providers.Web3Provider(window.ethereum);
                setProvider(web3Provider);

                const signer = web3Provider.getSigner();
                const notebookContract = new ethers.Contract(contractAddress, NotebookArtifact.abi, signer);
                setContract(notebookContract);

                // Kontrattan mevcut notu oku
                const currentNote = await notebookContract.getNote();
                setNote(currentNote);
            } else {
                console.log("Lütfen MetaMask'i kurun!");
            }
        };
        init();
    }, []);

    // Notu güncellemek için kontratın setNote fonksiyonunu çağıran fonksiyon
    const handleUpdateNote = async () => {
        if (contract && inputValue) {
            try {
                const tx = await contract.setNote(inputValue);
                await tx.wait(); // İşlemin tamamlanmasını bekle
                const currentNote = await contract.getNote();
                setNote(currentNote);
                setInputValue(""); // Input'u temizle
            } catch (error) {
                console.error("İşlem sırasında hata oluştu:", error);
            }
        }
    };

    return (
        

Merkeziyetsiz Not Defteri

Mevcut Not: {note}

setInputValue(e.target.value)} value={inputValue} // Kontrollü component için value ekledik placeholder="Yeni notunuzu girin" />
); } export default App;

Bölüm 5: Güvenlik 101 - Milyon Dolarlık Hatalardan Kaçının

Akıllı kontrat güvenliği kritiktir. İşte en yaygın zafiyetlerden biri:

  • Re-entrancy (Yeniden Giriş Saldırısı): Bir saldırganın, kontratınızın fonksiyonunu, ilk işlem tamamlanmadan tekrar tekrar çağırmasıdır. Bu, kontratınızdaki tüm paranın çalınmasına neden olabilir. Çözüm: OpenZeppelin kütüphanesinin "ReentrancyGuard" gibi standart ve denetlenmiş güvenlik kalıplarını kullanın. Asla kendi güvenlik mekanizmanızı yazmaya çalışmayın.

Sonuç: Yolculuğunuz Yeni Başlıyor

Tebrikler! Artık bir blockchain uygulamasının nasıl çalıştığını, hangi araçların kullanıldığını ve temel bir dApp'in nasıl yazıldığını biliyorsunuz. Bu sadece başlangıç. Web3 dünyası derin ve sürekli gelişiyor.

Sonraki Adımlarınız Ne Olmalı?

  • CryptoZombies: Solidity'yi eğlenceli bir şekilde öğreten interaktif bir kodlama okulu.
  • Ethernauts: Akıllı kontrat güvenlik zafiyetlerini hackleyerek öğrendiğiniz bir oyun.
  • OpenZeppelin Contracts: Güvenli ve standartlara uygun akıllı kontratlar yazmak için endüstri standardı kütüphane. Mutlaka inceleyin.

Unutmayın, en iyi öğrenme yolu proje yapmaktır. Kendi fikrinizi hayata geçirmeye başlayın ve Web3'ün geleceğini şekillendirenlerden biri olun.