یک برنامه میتواند وضعیت را از دیگران بپرسد یا بخشی از آن را خودش بررسی کند. این بخش روشن میکند گره چه چیزی را میسنجد و چرا دید دو گره ممکن است موقتاً متفاوت باشد.
مفاهیم این بخش: گره کامل، بایگانی و هرس، کشف همتا، همگامسازی اولیه، اعتبارسنجی سادهٔ پرداخت، ممپول، سیاست بازپخش، کار انباشته، بازسازماندهی
هدف توضیح: تشخیص اینکه نرمافزار شما کدام ادعاها را خودش بررسی میکند و برای کدام اطلاعات به دیگران وابسته است.
گره کامل دقیقاً چه چیزی را بررسی میکند؟
گره کامل نرمافزاری است که بلاکها و تراکنشها را با قواعد اجماع بررسی میکند: آیا ورودی قابلخرج است، شرایط خرج رعایت شده، یک خروجی دوباره خرج نشده و مقدار ایجادشده در محدودهٔ مجاز است؟ قدرت استخراجکننده جای این بررسیها را نمیگیرد؛ بلاکی که قواعد را نقض کند، با داشتن اثبات کار هم پذیرفته نمیشود. گره برای معتبر دانستن یک پرداخت، از شمار موافقان رأیگیری نمیکند. اعتبارسنجی در بیتکوین کور
کیف پول و گره دو نقش متفاوت دارند، حتی اگر یک برنامه هر دو را انجام دهد. کیف پول اطلاعات لازم برای دریافت و امضا را مدیریت میکند؛ گره اعتبار تاریخچه را میسنجد. داشتن گره بهتنهایی کلید خصوصی ایجاد نمیکند و پاداش استخراج هم ندارد. فایدهٔ مستقیم آن زمانی به پرداختهای شما میرسد که کیف پول واقعاً از نتیجهٔ اعتبارسنجی همان گره استفاده کند. رابطهٔ کیف پول و سرور اعتبارسنج
گره هرسشده چه تفاوتی با گره بایگانی دارد؟
این تمایز دربارهٔ نگهداری داده است. گره بایگانی دادهٔ بلاکهای تاریخی را نگه میدارد؛ گره هرسشده پس از پردازش، بخشی از فایلهای قدیمی بلاک و دادهٔ بازگردانی را حذف میکند. مجموعهٔ خروجیهای خرجنشده و اطلاعات لازم برای ادامهٔ اعتبارسنجی باقی میماند. بنابراین هرسکردن به معنی پذیرش تراکنشها بدون بررسی یا تبدیلشدن به کیف پول سبک نیست. توضیح هرس در بیتکوین کور
مثلاً خروجیای که سالها پیش ساخته شده و هنوز خرج نشده، در مجموعهٔ خروجیهای خرجنشده حضور دارد؛ قدمت آن مانع بررسی خرج امروزش نیست. محدودیت در خدمات تاریخی ظاهر میشود: گره نمیتواند بلاک حذفشده را به همتایی دیگر بدهد یا بدون بازیابی داده، همهٔ سابقهٔ یک کیف پول قدیمی را دوباره پیمایش کند. هرس فضای نگهداری را کاهش میدهد؛ در همگامسازی معمول از ابتدا، نیاز به دریافت و پردازش تاریخچه را حذف نمیکند. سازوکار هرس
گرهها چگونه یکدیگر را پیدا میکنند و اطلاعات را پخش میکنند؟
گره تازهوارد برای شروع به چند نشانی شبکه نیاز دارد. منابع آغازین میتوانند همتاهای ذخیرهشده، همتای معرفیشده توسط کاربر یا بذرهای دیاناس باشند. پس از اتصال، همتاها نشانی همتاهای دیگر و خبر وجود بلاکها و تراکنشها را مبادله میکنند؛ دادهٔ لازم سپس درخواست میشود. بذر آغازین دفتر مرکزی بیتکوین نیست و اجازهٔ معتبر اعلامکردن تراکنش را ندارد. راهنمای شبکهٔ همتابههمتا
بااینحال، دسترسی به اطلاعات با صحت اطلاعات یکی نیست. اگر همهٔ مسیرهای ارتباطی یک گره زیر کنترل مهاجم باشد، او میتواند رسیدن اطلاعات تازه را متوقف یا منحرف کند؛ این وضعیت را حملهٔ انزوا مینامند. قواعد اعتبارسنجی همچنان بلاک نامعتبر را رد میکنند، ولی بهتنهایی تضمین نمیکنند گره از بهترین زنجیرهٔ موجود خبر دارد. تعداد زیاد اتصال نیز اگر همگی به یک کنترلکننده برسند، تنوع واقعی ایجاد نمیکند. پژوهش حملهٔ انزوا
چرا همگامسازی اولیه زمان میبرد و آیا هر همگامسازی یکسان است؟
گره تازه باید وضعیت خرجپذیر امروز را از تاریخچه بسازد. در مسیر معمول، دادهٔ بلاکها را میگیرد، قواعد لازم را بررسی میکند و با افزودن و حذف خروجیها، وضعیت محلی را جلو میبرد. سرعت اینترنت تنها عامل نیست؛ پردازنده، دیسک و حافظه نیز اثر دارند. دریافت سرآیندها به معنی پایان بررسی بدنهٔ بلاکها نیست. همگامسازی اولیه
دو بهینهسازی را نباید با هرس اشتباه گرفت. گزینهٔ assumevalid میتواند تحت شرایط مشخص، بررسی اسکریپت بعضی اجداد یک بلاک شناختهشده را کنار بگذارد؛ غیرفعالکردن آن امکان بررسی دوبارهٔ آن اسکریپتها را میدهد. در روش AssumeUTXO، گره از تصویر وضعیتِ منطبق با هش موردانتظار شروع میکند و تاریخچهٔ پیشین را در پسزمینه بررسی میکند. پس «قابلاستفادهشدن» و «پایان اعتبارسنجی گذشته» الزاماً یک لحظه نیستند؛ وضعیت و تنظیمات نرمافزار باید روشن باشد. فرض اعتبار تصویر وضعیت و بررسی پسزمینه
اثبات قرارگرفتن تراکنش در بلاک چه چیزی را ثابت نمیکند؟
در اعتبارسنجی سادهٔ پرداخت، یا SPV، نرمافزار سرآیندهای بلاک را بررسی میکند و با مسیر مرکل میسنجد یک تراکنش در بلاک مشخصی قرار دارد. این مدرک، عضویت تراکنش در دادهٔ متعهدشده توسط سرآیند را نشان میدهد؛ بهخودیخود ثابت نمیکند تمام تراکنشهای آن بلاک و تاریخچهٔ پیشین مطابق قواعد معتبرند. گره کامل این بررسی گستردهتر را انجام میدهد. تفاوت اعتبارسنجی کامل و ساده
همچنین همتای پاسخدهنده میتواند اطلاعات مرتبط را نگوید. دریافت پاسخ از چند منبع به کشف برخی اختلافها کمک میکند، اما جای بررسی کامل را نمیگیرد. هر کیف پول سبک نیز لزوماً یک پیادهسازی یکسان از این روش نیست؛ بعضی بیشتر به سرور تکیه دارند. پرسش عملی این است: «کدام مدرک روی دستگاه من بررسی میشود و سرور چه چیزهایی را میتواند پنهان کند؟» مدل امنیتی پرداخت سبک
چرا ممپول دو گره متفاوت است و سیاست چه فرقی با اجماع دارد؟
ممپول مخزن محلی تراکنشهای تأییدنشدهای است که یک گره پذیرفته است؛ صف واحدی برای تمام شبکه وجود ندارد. زمان دریافت، اتصالها، ظرفیت نگهداری و سیاست پذیرش میتوانند باعث شوند دو گره محتوای متفاوتی داشته باشند. در نتیجه «در ممپول دیده نشد» بهتنهایی به معنی نامعتبر بودن یا پاکشدن قطعی تراکنش از همهٔ شبکه نیست. سیاست بازپخش بیتکوین کور
قواعد اجماع تعیین میکنند چه چیزی میتواند در یک بلاک معتبر باشد. سیاست محلی محدودیتهای بیشتری بر پذیرش و بازپخش تراکنشِ هنوز تأییدنشده میگذارد، مثلاً برای مدیریت منابع نود. تراکنشی ممکن است با سیاست یک گره سازگار نباشد، ولی اگر استخراجکننده آن را در بلاکی مطابق اجماع بگذارد، آن گره بلاک را بپذیرد. عکس این رابطه درست نیست: پذیرش در ممپول، نقض قواعد اجماع را مجاز نمیکند و وعدهٔ تأیید هم نیست. مرز سیاست و اجماع
چرا «طولانیترین زنجیره» همیشه تعبیر دقیقی نیست؟
معیار انتخاب، بیشترین کار انباشته میان زنجیرههای معتبرِ شناختهشده است؛ شمار بلاکها بهتنهایی معیار نهایی نیست. سهم کار هر بلاک از هدف دشواری آن محاسبه میشود و سپس در طول زنجیره جمع میشود. منظور شمار واقعی دفعاتی نیست که دستگاهها هش زدهاند؛ آن تلاشهای ناموفق در بلاک ثبت نمیشوند. همچنین هشی که تصادفاً بسیار کوچکتر از هدف باشد، امتیاز اضافهای نسبت به بلاک دیگری با همان هدف نمیگیرد. محاسبهٔ کار در بیتکوین کور
برای تصور موضوع، دو رشته مهر را در نظر بگیرید که وزن هر مهر متفاوت است؛ رشتهٔ پرمهرتر الزاماً سنگینتر نیست. این فقط تشبیه آموزشی است: هدف بلاکها دلخواه نیست و باید قواعد سختی را رعایت کند. افزون بر آن، زنجیرهای با کار بیشتر ولی دارای تراکنش نامعتبر، برنده نمیشود. «بیشترین کار» مرحلهٔ انتخاب پس از احراز اعتبار است. انتخاب زنجیرهٔ معتبر
بازسازماندهی زنجیره چگونه تأیید یک پرداخت را تغییر میدهد؟
ممکن است دو بلاک معتبر تقریباً همزمان بر یک والد ساخته شوند. گرهها موقتاً سرشاخههای متفاوتی ببینند و با رسیدن شاخهٔ معتبرِ دارای کار بیشتر، انتخابشان را عوض کنند. بازسازماندهی یعنی اثر بلاکهای کناررفته از وضعیت محلی بازگردانده و بلاکهای شاخهٔ انتخابشده اعمال شود. بلاک کناررفته الزاماً خراب یا تقلبی نیست؛ ممکن است فقط رقابت گسترش زنجیره را باخته باشد. انشعاب و بلاک کناررفته
اگر تراکنش شما فقط در شاخهٔ کناررفته باشد، تأییدهای آن ممکن است کم یا ناپدید شود. بازگشتش به ممپول به اعتبار فعلی، تعارضها و سیاست گره بستگی دارد؛ تأیید دوباره خودکار و تضمینی نیست. بازگردانی و بازپذیرش تراکنشها تأییدهای بیشتر هزینهٔ بازنویسی تاریخچه را بالا میبرند، اما تعداد معینی از تأییدها «نهاییشدن ریاضی و بیقیدوشرط» نمیسازد. برای پیگیری، باید حضور تراکنش در زنجیرهٔ فعال را بررسی کرد. مدل احتمالی بازنویسی تاریخچه
با چند هش چگونه حضور یک تراکنش را بررسی میکنیم؟
درخت مرکل، هشها را جفتجفت ترکیب میکند تا به یک ریشه برسد. در درخت تراکنشهای بلاک بیتکوین، برگها شناسههای تراکنشاند، با ترتیب همان بلاک و کوینبیس در آغاز. هر جفت، ۶۴ بایت خام میسازد که دو بار با SHA256 هش میشود. متنِ نمایشیِ شناسهها را به هم نمیچسبانیم؛ ترتیب بایت داخلی مهم است. درخت تراکنشهای بلاک
مثال فرضیِ نمادین: چهار برگ را A، B، C و D بنامیم. این حروف جای شناسههای ۳۲بایتیاند، نه ورودی واقعی هش. H را نام کوتاهِ هش دوباره و علامت ∥ را چسباندن بایتها در نظر بگیرید:
- دو برگ اول: P = H(A ∥ B).
- دو برگ بعد: Q = H(C ∥ D).
- ریشه: R = H(P ∥ Q).
شما تراکنشِ مربوط به C و سرآیند بلاک را دارید. برای رسیدن به ریشه، فقط D و P، همراه جایگاهشان، لازماند: اول Q را از C و همسایهاش میسازید؛ سپس P را پیش از Q میگذارید و ریشه را حساب میکنید. اگر با ریشهٔ سرآیند یکسان باشد، مسیر سازگار است. لازم نیست خود تراکنشهای A و B را دریافت کنید. جایگاه مهم است: H(P ∥ Q) را نمیتوان دلخواه به H(Q ∥ P) تبدیل کرد. محاسبهٔ مسیر در پیادهسازی
یک گام بیشتر: در یک درخت فرضیِ متوازن با هشت برگ، سه هش همسایه برای مسیر یک برگ کافی است؛ با شانزده برگ، چهار هش. هر بار دوبرابرشدن تعداد برگها فقط یک سطح میافزاید. اگر در یک سطح تعداد هشها فرد باشد، بیتکوین آخرین هش را برای جفتسازی تکرار میکند؛ این تکرارِ محاسباتی، تراکنش تازهای به بلاک اضافه نمیکند. پیادهسازی همچنین حالتهای تکراریِ مسئلهساز را بررسی میکند. جفتسازی و کنترل تکرار
اکنون فرق دو پرسش روشن است: «آیا این داده به ریشهٔ این سرآیند میرسد؟» با مسیر مرکل بررسی میشود؛ «آیا خرجهای بلاک و تاریخچه معتبرند؟» به بررسیهای بیشتری نیاز دارد. ریشهای که خودِ فرستندهٔ مدرک اختراع کرده باشد، شاهدی دربارهٔ زنجیرهٔ موردنظر شما نیست؛ بررسی سرآیندها و زنجیره نیز لازم است. حدود اعتبارسنجی ساده
ریشهٔ تراکنشها مستقیماً از شناسههای بدون شاهد ساخته میشود. دادهٔ شاهد در سگویت تعهد جداگانهای دارد؛ این مدرک را با اثبات مستقیم تمام بایتهای شاهد یکی نگیرید. شناسهها و تعهد شاهد
اگر پرداخت تأیید شده باشد، بازسازماندهی دقیقاً چه چیزی را عوض میکند؟
دو نسخهٔ ناسازگار از پرداخت فرضی سارا در نظر بگیرید. نسخهٔ «ت» به نرگس میپردازد. نسخهٔ «تِ رقیب» همان دو ورودی را، با امضاهای لازم، به خروجیهای دیگری میبرد. پیش از خرجشدن ورودیها، هرکدام ممکن است جداگانه شرایط لازم را داشته باشند؛ وجود امضای معتبر در هر دو، اجازهٔ مصرف دوباره در یک تاریخچه نیست.
فرض آموزشی: شاخهها تا ارتفاع ۱۰۰ مشترکاند و بلاکهای مورد بحث هدف یکسان و همهٔ شرایط لازم را دارند. پس در همین مثال محدود، مقایسهٔ تعداد بلاکهای تازه با مقایسهٔ کار آنها همجهت است؛ در حالت کلی معیار، کار انباشته است.
| لحظهٔ مشاهده | شاخهٔ دیدهشده | وضعیت پرداخت «ت» نزد گرهٔ نرگس |
|---|---|---|
| نخست | شاخهٔ الف: بلاک ۱۰۱ شامل «ت» | یک تأیید |
| بعد | شاخهٔ الف تا بلاک ۱۰۲ ادامه یافته | دو تأیید |
| سپس | شاخهٔ ب از والد مشترک آمده و تا ۱۰۳ ادامه دارد؛ «تِ رقیب» را در خود دارد | گره، در صورت اعتبار شاخه و کار بیشتر، شاخهٔ ب را فعال میکند. |
| پس از تغییر شاخه | ورودیهای مشترک در شاخهٔ ب مصرف شدهاند | پرداخت «ت» دیگر تأیید فعال ندارد و نمیتواند همان ورودیهای مصرفشده را دوباره خرج کند. |
این یک سناریوی توضیحی است، نه تخمین احتمال وقوع چنین حملهای. بررسی دوبارهٔ وضعیت، اثر بلاکهای کناررفته را از حسابداری فعال برمیدارد؛ لازم نیست فایل تاریخچه از تمام دستگاهها پاک شود. نتیجهٔ عملی برای نرگس این است که تعداد تأییدها به زنجیرهٔ فعال وابسته بود، نه به مهر همیشگی روی شناسهٔ پرداخت. انتخاب شاخه و بازسازماندهی
اگر شاخهٔ ب ورودیهای «ت» را مصرف نکرده بود، سرنوشت متفاوتی ممکن بود: تراکنش میتوانست دوباره برای پذیرش محلی و تأیید آینده بررسی شود. بنابراین «تراکنش کنار رفت» همیشه به معنی یک وضعیت ثابت نیست. فرمان خواندن تراکنش خام نیز تأییدها را نسبت به حضور در زنجیرهٔ فعال گزارش میکند. فیلدهای وضعیت تراکنش
تصویر رسید دو تأیید، مشاهدهٔ یک زمان را ثبت کرده است؛ نمیتواند شاخهٔ فعال فعلی یا اعتبار خرج متعارض را تغییر دهد. به همین دلیل تصویر رسید با گزارش وضعیت فعلی زنجیره یکسان نیست.
مثال توضیحی: سه گزارش، سه محدودهٔ متفاوت دارند: «گره من تراکنش را در ممپول ندارد» فقط وضعیت مخزن محلی را میگوید؛ «مدرک مرکل دارم» عضویت در بلاک را نشان میدهد، نه اعتبار کامل تاریخچه؛ «بلاک در شاخهٔ کناررفته است» یعنی وضعیت تراکنش باید در زنجیرهٔ فعال دوباره بررسی شود. هیچکدام بهتنهایی دریافت قطعی را اثبات نمیکند. سیاست اعتبارسنجی ساده



