هر هفته با آنتونی؛ میتوانی کد هاوینگ را به من نشان دهی؟
در بخش هر هفته با آنتونی، با ویدیویی تازه از آندرس آنتونوپولوس (Andreas Antonopoulos)، بیتکوینر، نویسنده و مدرس مشهور با شما هستیم. او هر هفته به سوالات مخاطبینش پاسخ میدهد. در ویدیوی این هفته، از او خواسته شد تا کد هاوینگ (Halving) را به بینندگان نشان دهد.
کد هاوینگ در سورس کد بیت کوین
آنتونی این سوال را بسیار جالب توجه مییابد و در پاسخ، کد مربوطه را در سورس کد برنامه بیتکوین کور (Bitcoin Core) نشان میدهد. بیتکوین کور محبوبترین نرمافزار مربوط به کاربران در شبکه Bitcoin است و بیش از هشتاد درصد نودها از این نرمافزار استفاده میکنند.
آنتونی در ادامه از نرمافزارهای مربوط به کاربر (نود) مشابه بیتکوین کور، مانند لیبیتکوین (Libbitcoin) و بیکوین (Bcoin) نام میبرد و البته میافزاید که گرچه ممکن است شکل پیادهسازی فرایند هاوینگ در هر کدام از آنها متفاوت باشد، اما دقیقا کار مشابه را انجام میدهند.
آنتونی سپس کمی در مورد یارانه بلوک (Block Subsidy) توضیح میدهد و نقش کنترلی تابع GetBlockSubsidy را در کد ذکر میکند؛ یارانه بلاک، مقدار جایزهای است که ماینری که موفق به حل بلوک با شرایط هش مورد نظر شبکه شده است، در بخش تراکنش کوین بیس (Coinbase Transaction) بلاک برای خود در نظر میگیرد. این تابع با بررسی کردن این مقدار، تضمین میکند که مقدار درج شده مطابق با سیکل تقریبا چهار ساله هاوینگ بیتکوین است.
در ادامه آنتونی شکل عملکرد کد را بیشتر توضیح میدهد؛ از این که چگونه با در نظر گرفتن ارتفاع بلاک (Block Height) (تعداد بلاکهای موجود در بلاک چین قبل از بلوک مورد نظر یا به عبارت دیگر، تعداد کل بلاکهای زنجیره تاکنون) از زمان بلوک پیدایش (Genesis Block) و پارامترهای شبکه، به ازای گذشت هر ۲۱۰۰۰۰ بلوک مقدار اولیه یارانه بلاک (یا همان جایزه ماینینگ) را نصف میکند. یارانه بلوک ابتدایی ۵۰ بیتکوین بود که توسط خود ساتوشی ناکاموتو استخراج شد.
آنتولوپولوس در ادامه کمی فنیتر مساله را بررسی میکند؛ او توجه بینندگان را به زیبایی روش پیادهسازی Halving جلب میکند. در کدهای برنامه از عملگرهای بیتی شیفت به راست استفاده شده است؛ وقتی شما عددی باینری در اختیار دارید، با شیفت دادن بیتهای آن یک مرتبه به راست، عملا آن را تقسیم بر دو کردهاید. این روش دردسرهای تقسیم معمولی را ندارد و به خاطر ذات بیتی بودن خود، روشی سریع و بهینه محسوب میشود.