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