بلاک چین خود را بسازید
📖 12 دقیقه خواندن · 🐍 Python
Quick Answer
بهترین راه برای درک یک بلاک چین، ساختن آن است. در حدود 50 خط پایتون میتوانید یک بلاکچین اسباببازی با هش، زنجیرهای از بلوکها، استخراج اثبات کار، و تشخیص دستکاری ایجاد کنید - همان ایدههای اصلی که بیتکوین را ایمن میکند. نیازی به دانش قبلی در مورد بلاک چین نیست.
⚠️ این یک مدل یادگیری است، نه کد تولید. این ساختار داده پشت بیت کوین را آموزش می دهد – این پول امن نیست و هرگز نباید ارزش واقعی داشته باشد.
مرحله 1 - یک بلوک و اثر انگشت آن
یک بلوک برخی از داده ها (تراکنش ها)، پیوندی به بلوک قبلی و یک "nonce" (عددی که می توانیم تغییر دهیم) را در خود جای می دهد. هویت آن یک هش SHA-256 از تمام محتویات آن است - یک کاراکتر را تغییر دهید و هش کاملاً تغییر می کند. آن هش، اثر انگشت بدون دستکاری بلوک است.
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()مرحله 2 - استخراج (اثبات کار)
ماینینگ به معنای یافتن هش است که با یک قانون مطابقت دارد - در اینجا، با تعداد مجموعه ای از صفر شروع می شود. هیچ فرمولی وجود ندارد؛ شما brute-force nonce را تا زمانی که هش جا بیفتد. بررسی یک راه حل فوری است، اما یافتن راه حل نیاز به کار دارد. این عدم تقارن قلب اثبات کار است.
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()مرحله 3 - زنجیر کردن بلوک ها
هر بلوک جدید هش بلوک قبلی را ذخیره میکند و آنها را به زنجیرهای جوش میدهد که با یک بلوک سخت کدگذاری شده «تولید» شروع میشود. از آنجا که هر بلوک به بلوک قبل از خود متعهد می شود، ترتیب ثابت می شود و تاریخچه به هم مرتبط می شود.
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مرحله 4 - اعتبار سنجی زنجیره
برای اعتماد به یک زنجیره، آن را دوباره بررسی کنید: هر بلوک باید به هش واقعی بلوک قبلی اشاره کند و هر بلوک باید قانون اثبات کار را برآورده کند. اگر هر یک از چک ها در جایی با شکست مواجه شود، زنجیره نامعتبر است.
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مرحله 5 - آن را اجرا کنید و سعی کنید تقلب کنید
حالا چند بلوک اضافه کنید و سپس یک تراکنش قدیمی را دستکاری کنید. لحظهای که دادههای گذشته را تغییر میدهید، هش آن بلوک دیگر با آنچه بلوک بعدی انتظار دارد مطابقت ندارد - و اعتبارسنجی فوراً False را برمیگرداند. به همین دلیل است که نمی توانید بی سر و صدا تاریخ بیت کوین را بازنویسی کنید.
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!🔑 غذای کلیدی
یک بلاک چین فقط ساختارهای داده به اضافه قوانین است: هر بلوک را هش کنید، آن را به آخرین بلوک پیوند دهید، و اضافه کردن بلوک ها را از طریق اثبات کار پرهزینه کنید. دستکاری زنجیره هشها را میشکند – این دقیقاً همان چیزی است که بیتکوین بدون وجود یک مرجع مرکزی کاملاً آشکار میماند.
بیت کوین واقعی چه چیزی اضافه می کند
زنجیره اسباب بازی ما اسکلت را آموزش می دهد. بیت کوین واقعی یک شبکه جهانی همتا به همتا از گره ها، امضاهای دیجیتالی که ثابت می کند چه کسی می تواند سکه ها را خرج کند، تنظیم خودکار سختی، مدل UTXO، بلاک پاداش ها و نصف کردن، و قوانین اجماع که به افراد غریبه اجازه می دهد بدون اعتماد توافق کنند، اضافه می کند. هر کدام را در توضیح دهنده های ما در زیر کاوش کنید.
سوالات متداول
آیا این یک بلاک چین واقعی مانند بیت کوین است؟▼
این یک مدل آموزشی سادهشده است که ایدههای اصلی بیتکوین - هش کردن، زنجیرهسازی و اثبات کار - را به اشتراک میگذارد، اما شبکه، امضای دیجیتال و انگیزههای اقتصادی را که بیتکوین را در مقیاس جهانی ایمن میکنند، کنار گذاشته است. این برای یادگیری است، نه برای پول درآوردن.
آیا باید برنامه نویس باشم؟▼
آشنایی اولیه با پایتون کمک می کند، اما توضیحات نوشته شده است تا هر کسی بتواند منطق را دنبال کند. شما می توانید آن را برای درک مفاهیم حتی بدون اجرای کد بخوانید.
چرا ماینینگ فقط صفر اضافه می کند؟▼
نیاز به هش برای شروع با تعدادی صفر شرطی است که بررسی آن آسان است اما یافتن آن سخت است. تنها راه برای یافتن یک هش معتبر، ادامه حدس زدن (تغییر nonce) است، به همین دلیل است که استخراج واقعی انرژی هزینه دارد.
در مقایسه با بیت کوین واقعی چه چیزی کم است؟▼
یک شبکه واقعی از گره ها، امضاهای دیجیتال اثبات مالکیت، یک پروتکل همتا به همتا، تنظیم سختی، مدل UTXO و پاداش های بلوک. این آموزش ساختار داده را آموزش می دهد. برای مشاهده سیستم کامل به توضیح دهندگان ما مراجعه کنید.