بلاکچین چیست؟ توضیح فنی برای برنامهنویسها، از هش تا اجماع
بلاکچین چیست و زیر کاپوت چطور کار میکند؟ توضیح فنی بلاکچین برای برنامهنویسها: هش، درخت مرکل، اجماع، حسابها و یک پیادهسازی کوچک با پایتون.

فهرست مطالب
بلاکچین چیست و چرا اینهمه دربارهاش حرف میزنند؟ اگر برنامهنویس باشید، احتمالاً تعریفهای کلی مثل «دفتر کل توزیعشده» قانعتان نمیکند. در این مقاله بلاکچین را همانطور که یک مهندس نرمافزار میبیند باز میکنیم: ساختار داده، رمزنگاری، مسئله اجماع و محدودیتها؛ همراه با یک پیادهسازی کوچک در پایتون.
بلاکچین چیست؟ تعریف از نگاه یک برنامهنویس
از دید فنی، بلاکچین یک لاگ فقطافزودنی (Append-only Log) است که میان تعداد زیادی نود مستقل تکثیر میشود. هیچ نودی به دیگری اعتماد کامل ندارد و بعضی از آنها ممکن است عمداً دروغ بگویند. با این حال، همه باید درباره یک چیز به توافق برسند: ترتیب تراکنشها.
اگر با سیستمهای توزیعشده آشنا باشید، این همان مسئله تکثیر ماشین حالت (State Machine Replication) است، با این تفاوت که باید در برابر خطای بیزانسی (Byzantine Fault) مقاوم باشد و شرکت در آن برای هر کسی آزاد است. بیتکوین در سال ۲۰۰۸ نخستین راهحل عملی این مسئله را در یک شبکه باز ارائه کرد.
سه جزء اصلی هر بلاکچین:
- ساختار داده: بلاکهایی که با هش به هم زنجیر شدهاند.
- رمزنگاری: امضای دیجیتال برای اثبات مالکیت و هش برای یکپارچگی.
- سازوکار اجماع: قاعدهای که مشخص میکند چه کسی بلاک بعدی را میسازد و کدام نسخه از زنجیره معتبر است.
درون یک بلاک چه خبر است؟
هر بلاک دو بخش دارد: سربرگ (Header) و بدنه (Body). بدنه فهرست تراکنشهاست و سربرگ خلاصهای فشرده از آن بهعلاوه ارجاع به گذشته:
| فیلد سربرگ | کاربرد |
|---|---|
| هش بلاک قبلی | زنجیرکردن بلاک به تاریخچه |
| ریشه مرکل (Merkle Root) | خلاصه رمزنگاریشده همه تراکنشهای بلاک |
| مُهر زمانی (Timestamp) | زمان تقریبی ساخت بلاک |
| نانس (Nonce) و سختی | در اثبات کار، عددی که ماینر برای یافتن هش معتبر تغییر میدهد |
هش: چسب زنجیره
تابع هش رمزنگاریشده مثل SHA-256 ورودی دلخواه را به خروجی ثابت ۲۵۶ بیتی تبدیل میکند؛ کوچکترین تغییر ورودی، خروجی را کاملاً عوض میکند و از روی خروجی نمیتوان به ورودی رسید. چون هر بلاک هش بلاک قبلی را در سربرگ خود دارد، دستکاری در یک تراکنش قدیمی هش آن بلاک را تغییر میدهد و در نتیجه ارجاع همه بلاکهای بعدی نامعتبر میشود.
درخت مرکل
تراکنشها جفتجفت هش میشوند، سپس هشها دوباره جفتجفت هش میشوند تا به یک ریشه برسیم. مزیت این ساختار آن است که برای اثبات وجود یک تراکنش در بلاک، بهجای همه تراکنشها فقط به حدود log₂(n) هش نیاز است. کیف پولهای سبک (Light Client) از همین ایده استفاده میکنند.
یک بلاکچین اسباببازی با پایتون
کد زیر یک زنجیره ساده با اثبات کار ابتدایی میسازد و نشان میدهد چرا دستکاری در تاریخچه فوراً کشف میشود. این کد فقط برای آموزش است و نه شبکه دارد، نه امضا و نه اجماع واقعی:
import hashlib
import json
import time
def sha256(data: str) -> str:
return hashlib.sha256(data.encode()).hexdigest()
class Block:
def __init__(self, index, transactions, prev_hash, difficulty=4):
self.index = index
self.timestamp = time.time()
self.transactions = transactions
self.prev_hash = prev_hash
self.nonce = 0
self.hash = self.mine(difficulty)
def header(self) -> str:
return json.dumps({
"index": self.index,
"timestamp": self.timestamp,
"transactions": self.transactions,
"prev_hash": self.prev_hash,
"nonce": self.nonce,
}, sort_keys=True)
def mine(self, difficulty: int) -> str:
target = "0" * difficulty
while True:
h = sha256(self.header())
if h.startswith(target):
return h
self.nonce += 1
def is_valid(chain) -> bool:
for prev, curr in zip(chain, chain[1:]):
if curr.prev_hash != prev.hash:
return False
if sha256(curr.header()) != curr.hash:
return False
return True
genesis = Block(0, [], "0" * 64)
chain = [genesis]
chain.append(Block(1, [{"from": "ali", "to": "sara", "amount": 5}], chain[-1].hash))
chain.append(Block(2, [{"from": "sara", "to": "reza", "amount": 2}], chain[-1].hash))
print(is_valid(chain)) # True
chain[1].transactions[0]["amount"] = 500 # tamper with history
print(is_valid(chain)) # False
متد mine آنقدر nonce را افزایش میدهد تا هش سربرگ با چهار صفر شروع شود. این همان ایده اثبات کار است: پیدا کردن جواب سخت است، اما بررسیاش فقط یک هش لازم دارد. برای اینکه مهاجم بلاک ۱ را عوض کند، باید آن و همه بلاکهای بعدی را دوباره استخراج کند، آن هم سریعتر از بقیه شبکه.
اجماع: چه کسی بلاک بعدی را میسازد؟
در یک شبکه باز، هر کسی میتواند هزاران هویت جعلی بسازد (حمله Sybil). برای همین، حق پیشنهاد بلاک باید به منبعی کمیاب گره بخورد:
| ویژگی | اثبات کار (PoW) | اثبات سهام (PoS) |
|---|---|---|
| منبع کمیاب | انرژی و سختافزار محاسباتی | رمزارز قفلشده بهعنوان وثیقه |
| نمونه | بیتکوین | اتریوم (از سپتامبر ۲۰۲۲) |
| جریمه رفتار بد | هدررفتن هزینه برق و سختافزار | سوزاندن بخشی از وثیقه (Slashing) |
| زمان بلاک | هدف حدود ۱۰ دقیقه در بیتکوین | اسلاتهای ۱۲ ثانیهای در اتریوم |
در اتریوم، هر اعتبارسنج (Validator) برای فعالشدن ۳۲ اتر سپرده میگذارد، در هر اسلات یک نفر بهصورت تصادفی بلاک را پیشنهاد میدهد و بقیه با رأی (Attestation) آن را تأیید میکنند. پس از گذشت دو دوره (Epoch)، بلاکها نهایی (Finalized) میشوند و بازگرداندنشان مستلزم سوزاندن سهم بزرگی از کل وثیقه شبکه است.
حسابها، تراکنشها و امضای دیجیتال
مالکیت در بلاکچین یعنی داشتن کلید خصوصی. آدرس شما از کلید عمومی مشتق میشود و هر تراکنش با کلید خصوصی امضا میشود؛ بیتکوین و اتریوم هر دو از امضای ECDSA روی منحنی secp256k1 استفاده میکنند. نودها امضا را بررسی میکنند و اگر معتبر نباشد، تراکنش را رد میکنند.
دو مدل رایج برای نگهداری وضعیت وجود دارد:
- مدل UTXO (بیتکوین): موجودی شما مجموع «خروجیهای خرجنشده» است؛ هر تراکنش تعدادی از آنها را مصرف و خروجی تازه تولید میکند.
- مدل حساب (اتریوم): شبیه جدول بانکی؛ هر آدرس موجودی و nonce دارد و قراردادها علاوه بر آن کد و فضای ذخیرهسازی دارند.
نتیجه عملی مهم: هر کسی کلید خصوصی شما را داشته باشد، صاحب دارایی شماست. به همین دلیل امنیت کلید، موضوع راهنمای جداگانه DevNA درباره کیف پولها است.
قرارداد هوشمند: بلاکچین بهعنوان ماشین حالت
اتریوم ایده بلاکچین را از «دفتر ثبت انتقال پول» به «کامپیوتر مشترک جهانی» گسترش داد. قرارداد هوشمند (Smart Contract) برنامهای است که روی ماشین مجازی اتریوم (EVM) اجرا میشود و قواعد تغییر وضعیت را تعریف میکند. هر نود همان کد را با همان ورودی اجرا میکند و باید به همان نتیجه برسد؛ به همین دلیل اجرای قرارداد باید کاملاً قطعی (Deterministic) باشد.
برای جلوگیری از حلقههای بیپایان و سوءاستفاده، هر عملیات هزینهای به نام گس (Gas) دارد. اگر میخواهید اولین قرارداد خودتان را بنویسید، آموزش قدمبهقدم Solidity را دنبال کنید.
محدودیتها: چرا بلاکچین جادو نیست
- مقیاسپذیری: چون همه نودها همه تراکنشها را اجرا میکنند، ظرفیت محدود است. لایههای دوم (Layer 2) و ارتقاهایی مثل گلمستردام در اتریوم برای همین مسئله طراحی شدهاند.
- مسئله اوراکل (Oracle): بلاکچین فقط دادههای درون خودش را میشناسد. قیمت دلار یا نتیجه یک مسابقه باید از بیرون و با اعتماد به یک منبع وارد شود.
- حریم خصوصی: بیشتر بلاکچینهای عمومی شفافاند؛ هر کسی میتواند تاریخچه یک آدرس را ببیند.
- بازگشتناپذیری: اشتباه در آدرس یا باگ در قرارداد معمولاً قابل برگشت نیست.
کی بلاکچین لازم نیست؟
یک قاعده سرانگشتی: اگر یک طرف مورد اعتماد وجود دارد که همه حاضرند داده را از او بپذیرند، یک دیتابیس معمولی تقریباً همیشه سریعتر، ارزانتر و سادهتر است. بلاکچین وقتی ارزش دارد که چند طرف بدون اعتماد به یکدیگر باید روی یک وضعیت مشترک توافق کنند و هیچکدام نخواهد یا نتواند نقش مدیر مرکزی را به دیگری بسپارد.
با این دید، بلاکچین نه راهحل همه مشکلات است و نه یک حباب صرف؛ ابزاری مهندسی با بدهبستانهای مشخص است که شناختن آنها، شما را از هیاهوی بازار جدا میکند.
مطالب مرتبط

ورود ۲٫۴ میلیارد دلار به ETF بیتکوین؛ بزرگترین هفته از اکتبر ۲۰۲۵

ارتقای گلمستردام اتریوم ۶ اکتبر روی تستنت Sepolia فعال میشود

آموزش Solidity: نوشتن اولین قرارداد هوشمند اتریوم قدمبهقدم
