⛓ دانشکدهٔ ۲ · اجماع و تأیید تراکنش
اجماع، نهاییشدن و چرخهٔ عمر یک تراکنش
Consensus, finality and the life of a transaction
پیشنیازها: اثبات کار (PoW): استخراج، دشواری و حملهٔ ۵۱٪اثبات سهام (PoS): اعتبارسنجها، استیکینگ و اسلشینگامضای دیجیتال: ECDSA و Schnorr
📚 آموزش در سه سطح
از سطح ساده شروع کنید؛ اگر روشن بود، سطح بعد را بخوانید. سطح مناسب شما ذخیره میشود.
🌱 توضیح ساده
وقتی برای کسی بیتکوین میفرستید، تراکنش شما چند مرحله را پشت سر میگذارد: کیف پول آن را میسازد و امضا میکند، برای شبکه میفرستد، تراکنش مدتی در صف انتظار (ممپول) میماند، سپس یک ماینر آن را در بلاک میگذارد. از این لحظه تراکنش «یک تأیید» دارد و با هر بلاکی که بعد از آن ساخته میشود، یک تأیید دیگر اضافه میشود.
«نهاییشدن» یعنی لحظهای که دیگر نگران برگشتن تراکنش نباشید. در بیتکوین هیچ لحظهٔ جادویی وجود ندارد؛ مثل چسبی است که هر چه زمان میگذرد محکمتر میشود. یک تأیید یعنی تراکنش ثبت شده ولی هنوز احتمال کوچکی برای جابهجایی آن هست؛ شش تأیید، که حدود یک ساعت طول میکشد، برای بیشتر کاربردها بسیار مطمئن شمرده میشود. در اتریوم وضعیت فرق دارد و تراکنش پس از حدود ۱۳ دقیقه بهشکل صریح «نهایی» اعلام میشود.
کارمزد تراکنش هم مثل هزینهٔ پست سفارشی است: هر چه بیشتر بپردازید، زودتر در بلاک قرار میگیرید، چون جای هر بلاک محدود است و ماینرها تراکنشهای پرکارمزدتر را ترجیح میدهند. کارمزد بیتکوین به مبلغ ارسالی بستگی ندارد، بلکه به «حجم» تراکنش بر حسب بایت بستگی دارد؛ فرستادن یک میلیارد تومان و صد هزار تومان میتواند کارمزد یکسانی داشته باشد.
📘 توضیح متوسط
بیتکوین از مدل «خروجیهای خرجنشده» (UTXO) استفاده میکند. موجودی شما در واقع مجموعهای از خروجیهای تراکنشهای قبلی است که به آدرسهایتان رسیدهاند. هر «ورودی» تراکنش جدید به یکی از این خروجیها اشاره میکند (با شناسهٔ تراکنش قبلی و شمارهٔ خروجی، به شکل txid:vout) و آن را کامل خرج میکند. چون نمیتوان یک خروجی را نصفه خرج کرد، تراکنش معمولاً دو خروجی دارد: یکی برای گیرنده و یکی «باقیمانده» (change) که به آدرس جدیدی از خود فرستنده برمیگردد.
کارمزد خروجی جداگانهای ندارد؛ تفاوت جمع ورودیها و جمع خروجیهاست که ماینر برمیدارد. مثلاً اگر ورودیها ۰٫۰۱۵ بیتکوین و خروجیها ۰٫۰۱ و ۰٫۰۰۴۹ بیتکوین باشند، کارمزد ۰٫۰۰۰۱ بیتکوین یعنی ۱۰ هزار ساتوشی است (هر بیتکوین ۱۰۰ میلیون ساتوشی). اگر اندازهٔ مجازی تراکنش (vsize) ۲۰۰ بایت مجازی باشد، نرخ کارمزد ۵۰ ساتوشی بر بایت مجازی (sat/vB) است. تعداد تأیید هم از فرمول «ارتفاع آخرین بلاک − ارتفاع بلاک تراکنش + ۱» به دست میآید.
اگر کارمزد کم باشد، تراکنش ممکن است مدتها در ممپول بماند و حتی پس از مدتی (در تنظیم پیشفرض Bitcoin Core دو هفته) از ممپول نودها حذف شود. دو راه برای تسریع وجود دارد: «جایگزینی با کارمزد بیشتر» (RBF) که نسخهٔ تازهای از همان تراکنش با کارمزد بالاتر میفرستد، و «فرزند پول میدهد برای والد» (CPFP) که گیرنده یا فرستنده با خرجکردن یکی از خروجیها در تراکنشی پرکارمزد، ماینر را به برداشتن هر دو تراکنش تشویق میکند. مرورگری مثل mempool.space همهٔ این اطلاعات را نشان میدهد.
🔬 توضیح تخصصی
سازوکارهای اجماع از نظر نهاییشدن در سه دسته جای میگیرند. اجماع ناکاموتو (بیتکوین) نهاییشدن «احتمالاتی» دارد: طبق محاسبهٔ وایتپیپر، اگر مهاجم ۱۰٪ توان شبکه را داشته باشد، احتمال اینکه از ۶ بلاک عقبتر به زنجیرهٔ صادق برسد کمتر از ۰٫۱٪ است، و این احتمال با هر بلاک بهصورت نمایی کم میشود. اجماعهای سبک BFT (مانند Tendermint/CometBFT در شبکههای Cosmos) نهاییشدن «فوری» دارند: بلاکی که دوسوم اعتبارسنجها امضا کنند، دیگر برنمیگردد؛ اما اگر بیش از یکسوم آفلاین شوند، زنجیره متوقف میشود. اتریوم ترکیبی است: تولید بلاک حتی بدون نهاییشدن ادامه مییابد و نهاییشدن اقتصادی جداگانه با Casper FFG میآید.
این تفاوت بازتاب یک بدهبستان بنیادی است: در شبکهٔ توزیعشدهای که ممکن است دچار گسست ارتباطی شود، نمیتوان همزمان «ایمنی» (هرگز دو تاریخچهٔ متناقض نهایی نشود) و «زندهبودن» (همیشه بلاک تازه تولید شود) را در همهٔ شرایط تضمین کرد. بیتکوین زندهبودن را ترجیح میدهد و ایمنی را بهتدریج با عمق بلاک به دست میآورد؛ زنجیرههای BFT ایمنی را ترجیح میدهند و در بحران متوقف میشوند. ریورگهای یکبلاکی در بیتکوین بهطور طبیعی رخ میدهند، وقتی دو ماینر تقریباً همزمان بلاک پیدا کنند؛ بلاک بازنده «کهنه» (stale) میشود و تراکنشهایش معمولاً در بلاک بعدی شاخهٔ برنده دوباره میآیند.
در کالبدشکافی تراکنش، دقت مفهومی مهم است. vsize برابر وزن تقسیم بر ۴ است و دادههای witness در SegWit وزن کمتری دارند؛ به همین دلیل خرج از آدرسهای bc1q و bc1p ارزانتر است. شناسایی «خروجی باقیمانده» فقط حدس است: نشانههایی مانند نوع آدرس یکسان با ورودی یا مبلغ غیرگرد کمک میکنند، اما کیف پولها عمداً این نشانهها را پنهان میکنند. همچنین فرض «مالکیت مشترک ورودیها» (همهٔ ورودیهای یک تراکنش متعلق به یک نفرند) در تراکنشهای CoinJoin نادرست است. در اتریوم مدل «حساب» بهجای UTXO است: هر حساب یک nonce دارد که ترتیب تراکنشها را تعیین میکند و کارمزد از ضرب گس مصرفی در قیمت گس به دست میآید؛ بخش پایهٔ آن از EIP-1559 (اوت ۲۰۲۱) سوزانده میشود.
🌍 مثال واقعی: توقف موقت نهاییشدن در اتریوم (۱۱ و ۱۲ مهٔ ۲۰۲۳)
در ۱۱ مهٔ ۲۰۲۳ و دوباره در ۱۲ مهٔ ۲۰۲۳، زنجیرهٔ بیکن اتریوم برای مدتی نتوانست نقاط بازرسی تازه را نهایی کند؛ بار اول حدود ۲۵ دقیقه و بار دوم حدود یک ساعت. علت، رفتار برخی کلاینتهای اجماع در پردازش رأیهای قدیمی زیر بار سنگین بود که باعث شد سهم کافی از اعتبارسنجها بهموقع رأی ندهند.
نکتهٔ آموزنده این است که در تمام این مدت بلاکها همچنان تولید میشدند و تراکنشهای کاربران در آنها ثبت میشد؛ فقط برچسب «نهایی» به تأخیر افتاد. شبکه بدون مداخلهٔ دستی و پس از جبران عقبماندگی کلاینتها خودبهخود به حالت عادی برگشت و تیمهای کلاینت سپس بهروزرسانی منتشر کردند.
این رویداد تفاوت «زندهبودن» (تولید بلاک) و «نهاییشدن» را در عمل نشان داد و اهمیت تنوع کلاینتها را برجسته کرد. سامانههایی که برای پذیرش واریز منتظر وضعیت finalized میمانند، در این بازه ناچار به صبر بودند؛ رفتاری که از نظر طراحی درست و محتاطانه است، چون در نبود نهاییشدن، احتمال ریورگهای عمیقتر بیشتر است.
🔤 واژگان تخصصی
خروجی تراکنشی که هنوز بهعنوان ورودی در تراکنش دیگری خرج نشده و موجودی قابل خرج را تشکیل میدهد.
مثال: اگر سه بار ۰٫۰۱ بیتکوین دریافت کرده باشید، سه UTXO جدا دارید.
تعداد بلاکهایی که از بلاک حاوی تراکنش تا آخرین بلاک ساخته شده، با احتساب خود آن بلاک.
مثال: تراکنشی در بلاک ۸۷۰۰۰۰ وقتی ارتفاع زنجیره ۸۷۰۰۰۵ است، ۶ تأیید دارد.
کارمزد تقسیم بر اندازهٔ مجازی تراکنش که معیار اولویت ماینرها برای انتخاب تراکنش است.
مثال: کارمزد ۱۰ هزار ساتوشی برای تراکنش ۲۰۰ بایت مجازی، نرخ ۵۰ sat/vB است.
وضعیتی که در آن برگشت تراکنش یا عملاً ناممکن (احتمالاتی) یا بدون ضبط بخش بزرگی از وثیقه ناممکن (اقتصادی) است.
مثال: بیتکوین نهاییشدن احتمالاتی و اتریوم نهاییشدن اقتصادی با Casper FFG دارد.
ارسال نسخهٔ جدیدی از تراکنش تأییدنشده با کارمزد بالاتر که جای نسخهٔ قبلی را در ممپول میگیرد.
مثال: تراکنشی که با ۲ sat/vB گیر کرده، با RBF و ۲۰ sat/vB سریعتر تأیید میشود.
خروجیای که مازاد ورودیها پس از پرداخت به گیرنده و کارمزد را به فرستنده برمیگرداند.
مثال: خرج یک UTXO یک بیتکوینی برای پرداخت ۰٫۲، خروجی باقیماندهای حدود ۰٫۸ بیتکوین میسازد.
🔑 نکات کلیدی
- مسیر تراکنش: ساخت و امضا، انتشار، ممپول، انتخاب توسط تولیدکنندهٔ بلاک، ثبت در بلاک، تأییدهای بعدی.
- کارمزد = جمع ورودیها − جمع خروجیها؛ نرخ کارمزد = کارمزد ÷ vsize و به مبلغ ارسالی بستگی ندارد.
- تعداد تأیید = ارتفاع آخرین بلاک − ارتفاع بلاک تراکنش + ۱.
- بیتکوین نهاییشدن احتمالاتی، زنجیرههای BFT نهاییشدن فوری و اتریوم نهاییشدن اقتصادی جدا از تولید بلاک دارد.
- شناسایی خروجی باقیمانده یا مالک آدرس حدس است، نه واقعیت؛ در گزارش باید از داده جدا شود.
⚠️ اشتباهات رایج
- تصور اینکه کارمزد بیتکوین درصدی از مبلغ است؛ کارمزد به حجم تراکنش و شلوغی شبکه بستگی دارد.
- تحویل کالای گرانقیمت با صفر تأیید؛ تراکنش تأییدنشده ممکن است با RBF یا خرج دوباره جایگزین شود.
- یکیدانستن «در انتظار» با «ناموفق»؛ تراکنش کمکارمزد ممکن است فقط دیر تأیید شود یا با RBF و CPFP تسریع شود.
- فرض اینکه همهٔ ورودیهای یک تراکنش متعلق به یک نفرند؛ در CoinJoin و تراکنشهای چندنفره این فرض نادرست است.
- بهکاربردن عدد تأیید بیتکوین برای همهٔ شبکهها؛ نوع نهاییشدن و امنیت هر شبکه متفاوت است.
🛠 تمرین عملی: پروژهٔ دانشکده: کالبدشکافی یک تراکنش واقعی بیتکوین
- در mempool.space یکی از بلاکهای اخیر را باز کنید و تراکنشی غیرپاداشی با دستکم یک ورودی و دو خروجی انتخاب کنید (یا شناسهٔ آن را در ابزار تراکنش آزمایشگاه آکادمی وارد کنید).
- txid، ارتفاع بلاک و زمان ثبت را یادداشت کنید؛ برای هر ورودی، تراکنش و خروجی قبلیای که خرج شده (txid:vout) و مبلغ آن را بنویسید.
- برای هر خروجی، مبلغ و نوع آدرس (1، 3، bc1q یا bc1p) را ثبت کنید و حدس بزنید کدام خروجی باقیمانده است و چرا (و بنویسید که این فقط حدس است).
- کارمزد را خودتان حساب کنید (جمع ورودیها منهای جمع خروجیها، به ساتوشی) و با تقسیم بر vsize نرخ کارمزد را بر حسب sat/vB به دست آورید.
- ارتفاع آخرین بلاک را ببینید و تعداد تأییدها را با فرمول درس حساب کنید.
- در یک نمودار یا متن کوتاه، مسیر این تراکنش از امضا تا آخرین تأیید را شرح دهید.
✅ معیار درستی: کارمزد و نرخ کارمزد محاسبهشده باید با اعداد mempool.space برابر باشد (اختلاف فقط ناشی از گردکردن)؛ تعداد تأیید شما باید با عدد مرورگر یکی باشد؛ و جمع خروجیها بهاضافهٔ کارمزد باید دقیقاً برابر جمع ورودیها شود.
🔒 در هیچ تمرینی از سرمایهٔ واقعی، عبارت بازیابی (Seed Phrase)، کلید خصوصی یا اتصال کیف پول اصلی استفاده نکنید.
📝 آزمون تطبیقی
هر بار ۵ سؤال از بانک ۱۰ سؤالی این درس انتخاب میشود؛ سؤالهایی که قبلاً اشتباه زدهاید زودتر برمیگردند. حدنصاب قبولی ۸۰٪ (۴ از ۵) است و درس بعد با قبولی باز میشود.
✍️ پرسش تشریحی
مسیر یک تراکنش بیتکوین را از لحظهٔ امضا تا ششمین تأیید شرح دهید و در هر مرحله بگویید کدام سازوکار (امضای دیجیتال، سیاست ممپول، کارمزد، اثبات کار، قاعدهٔ انتخاب زنجیره) امنیت آن را تأمین میکند. سپس توضیح دهید این مسیر در اتریوم پس از ادغام چه تفاوتی دارد.
بعد از نوشتن، پاسخ خود را با این معیارها بسنجید
خودارزیابی: هر نکتهای را که پاسخ شما بهروشنی پوشش داده علامت بزنید.
🤖 دستیار آموزشی
دستیار آفلاین آکادمی: پاسخها فقط از متن درسها و واژگان همین آکادمی پیدا میشوند و منبع هر پاسخ نشان داده میشود. هوش مصنوعی مولد نیست، حدس نمیزند و هیچ سیگنال خرید و فروشی نمیدهد.
📎 منابع مطالعاتی
- Bitcoin Developer Guide — Transactions
- mempool.space — FAQ (fees, confirmations, RBF, CPFP)
- Bitcoin: A Peer-to-Peer Electronic Cash System (section 11: Calculations)
- ethereum.org — Transactions
🏁 معیار تسلط بر این درس: بتوانید برای هر تراکنش واقعی بیتکوین ورودیها، خروجیها، کارمزد، نرخ کارمزد و تعداد تأیید را بدون خطا استخراج کنید و تفاوت سه نوع نهاییشدن را توضیح دهید.