درون یک بلاک چیست: هدر، ارتفاع، اندازه و یارانه
هر بلاک از یک هدر کوچک با اندازه ثابت و یک بدنه شامل تراکنشها تشکیل شده است. دانستن اینکه کدام کدام است توضیح میدهد استخراج واقعاً چه چیزی را هش میکند و چرا.
دو بخش، و فقط یکی از آنها هش میشود
هر بلاک یک هدر (header) و یک بدنه (body) دارد. بدنه همان تراکنشهاست و بسته به میزان شلوغی زنجیره میتواند چند صد بایت یا چند مگابایت باشد. هدر خلاصهای با اندازه ثابت از بلاک است و در بیشتر زنجیرهها دقیقاً 80 بایت است.
استخراج فقط هدر را هش میکند و هیچ چیز دیگری را نه. این مفیدترین نکته این مقاله است، چون چیزی را توضیح میدهد که در غیر این صورت ناممکن به نظر میرسد: یک نرمافزار استخراج در هر ثانیه میلیاردها حالت مختلف را امتحان میکند، و اگر هر تلاش به معنای هش کردن دوباره یک بلاک پر از تراکنش بود، چنین کاری ممکن نبود. اما اینطور نیست. نرمافزار استخراج فقط 80 بایت را دوباره هش میکند.
شش فیلد هدر
هدر شامل نسخه، هش بلاک قبلی، ریشه مرکل (merkle root)، مُهر زمانی، بیتهای سختی و nonce است. هر کدام به دلیلی آنجا هستند و دو تا از آنها بیشتر کار را انجام میدهند.
هش بلاک قبلی چیزی است که آن را به یک زنجیره تبدیل میکند. هر هدر بلاک پیش از خود را نام میبرد، بنابراین بازنویسی یک بلاک قدیمی هش آن را تغییر میدهد، که هدر بعدی را خراب میکند، و هدر بعد از آن را، تا نوک زنجیره. این کل استدلال امنیتی اثبات کار است، در یک فیلد.
ریشه مرکل یک هش واحد است که همه تراکنشهای بدنه را خلاصه میکند. اگر یک تراکنش را حتی به اندازه یک بایت تغییر دهید، ریشه مرکل تغییر میکند، پس هدر تغییر میکند، پس هر هشی که تا آن لحظه امتحان شده بیارزش میشود. به همین دلیل 80 بایت میتواند بهدرستی نماینده بلاکی با هر اندازهای باشد.
بیتهای سختی همان هدفی هستند که هش باید کمتر از آن باشد، به شکلی فشرده. مُهر زمانی تقریباً زمان ساخت بلاک را نشان میدهد و مجاز است تقریبی باشد. nonce فیلدی است که نرمافزار استخراج آزاد است تغییرش دهد، و همین است که جستوجو را اصلاً ممکن میکند.
nonce تمام میشود، و این اشکالی ندارد
nonce یک شمارنده کوچک است و یک نرمافزار استخراج مدرن تقریباً بلافاصله همه مقادیری را که در آن جا میشود امتحان میکند. این به بنبست شبیه است اما بنبست نیست، زیرا nonce فقط راحتترین چیز برای تغییر است، هرگز تنها چیز نیست.
وقتی nonce تمام شود، نرمافزار استخراج چیز دیگری را که در ساخت هدر نقش دارد تغییر میدهد. مُهر زمانی میتواند جابهجا شود. تراکنش coinbase را میتوان کمی تغییر داد، که ریشه مرکل را تغییر میدهد و هدری کاملاً تازه برای جستوجو به دست میدهد. در یک استخر، extranonce دقیقاً برای همین است: به استخر اجازه میدهد به هر نرمافزار استخراج نقطه شروع متفاوتی بدهد تا هیچ دو نرمافزار استخراجی روی اعداد یکسان کار نکنند.
ارتفاع یک موقعیت است، نه یک فیلد
ارتفاع بلاک تعداد بلاکهایی است که پیش از یک بلاک مشخص آمدهاند. بلاک پیدایش (genesis) ارتفاع صفر دارد، بلاک بعدی یک، و به همین ترتیب. این همان عددی است که کنار هر ردیف در صفحه بلاکهای استخر و در هر اکسپلورری میبینید.
خوب است بدانید که ارتفاع در واقع در هدر ذخیره نمیشود. ارتفاع از جایگاه بلاک در زنجیره به دست میآید. در بیشتر زنجیرههای مدرن، ارتفاع در تراکنش coinbase هم نوشته میشود، که قاعدهای است که بعدها اضافه شد تا دو بلاک در ارتفاعهای مختلف هرگز از نظر بایت کاملاً یکسان نباشند، اما پاسخ معتبر به اینکه ارتفاع یک بلاک چقدر است همچنان جایگاه آن است.
به همین دلیل ارتفاع راه طبیعی صحبت درباره تأییدها نیز هست. تراکنشی که شش بلاک عمق دارد، تراکنشی است که ارتفاع بلاکش شش واحد پایینتر از نوک زنجیره است، و هر بلاک بعدی بازنویسی آن را به همان اندازه پرهزینهتر میکند.
اندازه همان بدنه است، و همان چیزی است که پر میشود
اندازه بلاک اساساً اندازه بدنه است، چون هدر در کنار آن ناچیز است. وقتی گفته میشود یک زنجیره محدودیت اندازه بلاک دارد، منظور تعداد تراکنشهایی است که در آن جا میشوند، نه هدر.
یک بلاک پر و یک بلاک خالی دقیقاً به یک اندازه کار استخراج نیاز دارند. سختی تعیین میکند پیدا کردن بلاک چقدر دشوار است؛ اندازه تعیین میکند بلاک چقدر محتوا حمل میکند. این دو به هم ربطی ندارند و اشتباه گرفتن آنها منشأ بسیاری از برداشتهای نادرست درباره کارمزدهاست.
آنچه اندازه بر آن اثر میگذارد، بازار کارمزد است. وقتی تراکنشهای بیشتری از ظرفیت بلاک بخواهند وارد شوند، آنهایی که کارمزد بالاتری پیشنهاد میدهند زودتر وارد میشوند و مجموع کارمزدهای بلاک بالا میرود. این مستقیماً به مبلغی که بلاک پرداخت میکند اضافه میشود.
تراکنش coinbase و یارانه بلاک
نخستین تراکنش هر بلاک خاص است. فرستنده ندارد، ارز را از هیچ ایجاد میکند و آن را به سازنده بلاک پرداخت میکند. به آن تراکنش coinbase میگویند که هیچ ربطی به صرافی همنام آن ندارد.
آنچه این تراکنش پرداخت میکند، یارانه بلاک بهعلاوه کارمزدهای همه تراکنشهای دیگر بلاک است. یارانه بخش تازه منتشرشده است که با برنامه انتشار زنجیره تعیین میشود و در بیشتر ارزها بهمرور کاهش مییابد. کارمزدها مبلغی است که کاربران برای گنجانده شدن تراکنشهایشان به آنها پیوست کردهاند. این دو با هم پاداش بلاک را تشکیل میدهند.
در یک استخر، coinbase به استخر پرداخت میکند و استخر سپس پاداش را میان همه کسانی که در آن دور شیر ارسال کردهاند توزیع میکند. این یک مسیر انحرافی نیست: این همان روشی است که استخر با آن میتواند به افراد زیادی برای پاداشی پرداخت کند که بهصورت یک پرداخت واحد و تقسیمناپذیر میرسد.
چرا همه اینها هنگام استخراج اهمیت دارد
وقتی شکل یک بلاک روشن شود، سه چیز آشکار میشود و هر سه دائماً پیش میآیند.
- چرا یک بلاک جدید کار شما را بلافاصله بیاعتبار میکند. فیلد هش بلاک قبلی تغییر کرده، پس هدری که در حال جستوجوی آن بودید دیگر وجود ندارد. هر چیزی که پس از آن برایش ارسال کنید یک شیر منقضی است و هیچ میزان سرعتی این را جبران نمیکند.
- چرا استخر اینقدر مکرر کار تازه برای شما میفرستد. هر تراکنش جدیدی که استخر بخواهد در بلاک بگنجاند ریشه مرکل را تغییر میدهد، و یک قالب (template) تازهتر کارمزد بیشتری دارد، یعنی پاداش بیشتر برای همان تلاش.
- چرا اندازه بلاک هرگز در برآورد درآمد ظاهر نمیشود. درآمد شما را سختی، یارانه بلاک و کارمزدها تعیین میکنند، نه تعداد بایتهای بدنه.
صفحه بلاکهای این استخر ارتفاع، پاداش و زمان پیدا شدن بلاک را نشان میدهد، که بخش مفید همه موارد بالا است که در یک ردیف خلاصه شده. اکسپلورر بقیه را به شما نشان میدهد، از جمله تراکنش coinbase که پاداش آن را پرداخت کرده است.