Kendi Blockchain'inizi Oluşturun
📖 12 dk okuma · 🐍 Python
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 blockAdı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 TrueAdı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.