Kendi Blockchain'inizi Oluşturun

📖 12 dk okuma · 🐍 Python

✍️ Yazan ve inceleyen Karel HavlíčekGüncellendi 2026🛡️ Editoryal olarak bağımsız

Quick Answer

Bir blockchaini anlamanın en iyi yolu onu inşa etmektir. Yaklaşık 50 satırlık Python'da, karma, blok zinciri, iş kanıtı madenciliği ve kurcalama tespiti ile çalışan bir oyuncak blok zinciri oluşturabilirsiniz; bunlar Bitcoin'i güvence altına alan aynı temel fikirlerdir. Önceden blockchain bilgisine gerek yok.

⚠️ Bu bir öğrenme modelidir, üretim kodu değil. Bitcoin'in arkasındaki veri yapısını öğretir; güvenli para değildir ve asla gerçek değeri taşımamalıdır.

Adım 1 – Bir blok ve parmak izi

Bir blok, bazı verileri (işlemleri), önceki bloğa bir bağlantıyı ve bir "nonce" (değiştirebileceğimiz bir sayı) içerir. Kimliği, tüm içeriğinin bir SHA-256 karmasıdır; bir karakteri değiştirdiğinizde karma tamamen değişir. Bu karma, bloğun kurcalanmaya açık parmak izidir.

import hashlib, json, time

class Block:
    def __init__(self, index, transactions, previous_hash, nonce=0):
        self.index = index
        self.timestamp = time.time()
        self.transactions = transactions
        self.previous_hash = previous_hash
        self.nonce = nonce

    def hash(self):
        # A block's fingerprint = SHA-256 of all its contents.
        payload = json.dumps({
            "index": self.index,
            "timestamp": self.timestamp,
            "transactions": self.transactions,
            "previous_hash": self.previous_hash,
            "nonce": self.nonce,
        }, sort_keys=True).encode()
        return hashlib.sha256(payload).hexdigest()

Adım 2 — Madencilik (İş Kanıtı)

Madencilik, belirli sayıda sıfırla başlayan bir kuralı karşılayan bir karma bulmak anlamına gelir. Formül yok; karma uygun olana kadar bir kez kaba kuvvet uygularsınız. Bir çözümü kontrol etmek anında gerçekleşir, ancak bulmak iş gerektirir. Bu asimetri Proof of Work'ün kalbidir.

DIFFICULTY = 4  # require this many leading zeros

def mine(block):
    # Proof of Work: keep changing the nonce until the hash
    # starts with DIFFICULTY zeros. There is no shortcut —
    # you just have to guess, which is what costs energy.
    target = "0" * DIFFICULTY
    while not block.hash().startswith(target):
        block.nonce += 1
    return block.hash()

Adım 3 — Blokları zincirlemek

Her yeni blok bir öncekinin hashini saklıyor ve bunları sabit kodlu bir "genesis" bloğuyla başlayan bir zincire birleştiriyor. Her blok bir öncekine bağlı olduğundan sıra sabittir ve geçmiş birbirine bağlıdır.

class Blockchain:
    def __init__(self):
        # The genesis block — the very first, hard-coded block.
        genesis = Block(0, [{"note": "genesis"}], "0")
        mine(genesis)
        self.chain = [genesis]

    def add_block(self, transactions):
        prev = self.chain[-1]
        block = Block(len(self.chain), transactions, prev.hash())
        mine(block)            # do the work
        self.chain.append(block)
        return block

Adım 4 — Zincirin doğrulanması

Bir zincire güvenmek için onu yeniden kontrol edersiniz: her blok bir önceki bloğun gerçek karmasına işaret etmelidir ve her blok iş kanıtı kuralını karşılamalıdır. Her iki kontrol de herhangi bir yerde başarısız olursa zincir geçersizdir.

def is_valid(chain):
    for i in range(1, len(chain)):
        current, previous = chain[i], chain[i - 1]
        # 1) Each block must point to the real hash of the one before it.
        if current.previous_hash != previous.hash():
            return False
        # 2) Each block must satisfy the proof-of-work rule.
        if not current.hash().startswith("0" * DIFFICULTY):
            return False
    return True

Adım 5 — Çalıştırın ve hile yapmayı deneyin

Şimdi birkaç blok ekleyin ve ardından eski bir işleme müdahale edin. Geçmiş verileri değiştirdiğiniz anda, o bloğun karması artık bir sonraki bloğun beklediğiyle eşleşmez ve doğrulama anında False değerini döndürür. Bitcoin'in tarihini sessizce yeniden yazamamanızın nedeni budur.

bc = Blockchain()
bc.add_block([{"from": "Alice", "to": "Bob", "amount": 5}])
bc.add_block([{"from": "Bob", "to": "Carol", "amount": 2}])

print("Chain valid?", is_valid(bc.chain))   # True

# Now try to cheat: tamper with an old transaction.
bc.chain[1].transactions[0]["amount"] = 5000
print("Chain valid?", is_valid(bc.chain))   # False — tampering is caught!

🔑 Anahtar paket servisi

Bir blockchain yalnızca veri yapıları artı kurallardan oluşur: her bloğa hash işlemi uygulayın, onu sonuncuya bağlayın ve iş kanıtı yoluyla blok eklemeyi maliyetli hale getirin. Kurcalama hash zincirini kırar; bu da Bitcoin'in merkezi bir otorite olmadan kurcalanmaya karşı korunmasını sağlar.

Gerçek Bitcoin neler katıyor?

Oyuncak zincirimiz iskeleti öğretiyor. Gerçek Bitcoin, küresel bir eşler arası düğüm ağı, madeni paraları kimin harcayabileceğini kanıtlayan dijital imzalar, otomatik zorluk ayarlaması, UTXO modeli, blok ödülleri ve yarıya indirme ve yabancıların güven olmadan anlaşmalarına izin veren fikir birliği kuralları ekler. Her birini aşağıdaki açıklayıcılarımızda keşfedin.

Sık sorulan sorular

Bu Bitcoin gibi gerçek bir blockchain mi?

Bitcoin'in temel fikirlerini (karma, zincirleme ve iş kanıtı) paylaşan, ancak Bitcoin'i küresel ölçekte güvenli kılan ağ oluşturmayı, dijital imzaları ve ekonomik teşvikleri dışarıda bırakan basitleştirilmiş bir öğretim modelidir. Öğrenmek içindir, para kazanmak için değil.

Programcı olmam gerekiyor mu?

Python'a temel düzeyde aşina olmak yardımcı olur, ancak açıklamalar herkesin mantığı takip edebilmesi için yazılmıştır. Kodu çalıştırmadan bile kavramları anlamak için okuyabilirsiniz.

Madencilik neden sadece sıfır ekliyor?

Hash'in birkaç sıfırla başlamasını zorunlu kılmak, kontrol edilmesi kolay ancak bulunması zor bir durumdur. Geçerli bir hash bulmanın tek yolu tahmin etmeye devam etmektir (tek seferliği değiştirmek), gerçek madenciliğin enerjiye mal olmasının nedeni tam olarak budur.

Gerçek Bitcoin ile karşılaştırıldığında eksik olan ne?

Gerçek bir düğüm ağı, sahipliği kanıtlayan dijital imzalar, eşler arası protokol, zorluk ayarı, UTXO modeli ve blok ödülleri. Bu eğitim veri yapısını öğretir; Sistemin tamamı için açıklayıcılarımıza bakın.

Öğrenmeye devam et