learnmeabitcoin

آموزش ساده مفاهیم مهم در بیت کوین


سختی

سازوکاری برای هماهنگی زمان بین دو بلوک .

فهرست




سختی شبکه چیه؟

سختی شبکه عددیه که اینکه چقدر طول می‌کشه استخراج‌کننده‌ها بلوک جدیدی از تراکنش‌ها رو به زنجیره‌بلوک اضافه کنند، رو تنظیم می‌کنه.





درجه‌ی سختی هر دو هفته بروزرسانی می‌شه تا همیشه افزودن بلوک جدید (میانگین) ده دقیقه طول بکشه.


چرا سختی شبکه مهمه؟

چون تضمین می‌کنه ،حتی وقتی که استخراج‌کننده‌های جدید به شبکه می‌پیوندن، بلوک‌های تراکنش در بازه‌های زمانی یکسان به زنجیره افزوده میشن.

اگه سختی شبکه ثابت می‌بود، با اضافه‌شدن استخراج‌کننده‌ها به شبکه، زمان کمتری طول می‌کشید تا بلوک‌های جدید تولید بشن.


سختی شبکه چه زمانی تغییر می‌کنه؟

سختی شبکه هر ۲۰۱۶ بلوک—کم‌وبیش هر دو هفته یه بار—بازتنظیم می‌شه. </stron></p>

بعد از این بازه، هر گره میاد و زمان مورد انتظار برای استخراج 2016 بلوک (2016*10 دقیقه) رو به زمانی که واقعا طول کشید این 2016 بلوک استخراج بشه (هرچقدر دقیقه که بوده) تقسیم می‌کنه:

زمان پیش اومده / زمان مورد انتظار

20160 / پیش اومده

حالا اگه استخراج‌کننده‌ها جوری تونستن استخراج کنن که میانگین هر بلوک مثلا 9 دقیقه بشه، عددمون می‌شه:

20160/18144 = 1.11


هر گره از روی این عدد بدست اومده سختی جدید برای 2016 بلوک بعد رو تنظیم میکنه:

سختی × 1.11 = سختی جدید

  • اگه عدد بیشتر از یک باشه (به‌این‌معنی که بلوک‌ها سریع‌تر از حالت مورد انتظار (ده دقیقه) استخراج شدن)، سختی شبکه زیاد می‌شه.
  • اگه عدد کمتر از یک باشه (به‌این‌معنی که بلوک‌ها دیرتر از حالت مورد انتظار (ده دقیقه) استخراج شدن)،سختی شبکه کم می‌شه.

همین بود. تمام استخراج‌کننده‌های روی شبکه‌ی بیت‌کوین الان برای 2016 بلوک بعدی با این سختی سروکار دارن.

سختی شبکه نهایت با ضریب 4 بازتنظیم می‌شه (نمی‌تونه کمتر از یک‌چهارم برابر و یا بیشتر از چهار برابر بشه)؛ این بخاطر اینه که از دگرگونی ناگهانی شبکه جلوگیری بشه.

زمان بین بلوک‌ها به چه شکل با سختی شبکه کنترل می‌شه؟

این قسمت رو با یه مثال جلو می‌بریم.

۱. مثال ساده

فرض کنیم یه بازه از اعداد بین ۱ تا ۱۰۰ جلوی شما میذارم.





شما می‌تونید در هر دقیقه یه عدد بین ۱ تا ۱۰۰ به‌صورت تصادفی در بیارید. هدفتون اینه که عددی در بیارید که از عددی که مد نظر منه کمتر باشه.

فرض می‌کنیم من عدد ۵۰ رو درنظر گرفتم.





با توجه به این که در هر دقیقه فقط یک بار قادر به در آوردن شماره‌ای بین ۱ تا ۱۰۰ اید، دو دقیقه زمانتون رو باید بگیره.

اما این خیلی آسونه. پس هدف رو به ۲۰ تغییر می‌دم، که یعنی حالا می‌تونید ۱/۵ دفعه قبل عدد برنده در بیارید، یعنی الان هر پنج دقیقه یه بار برنده می‌شید.





هرجقدر هدف کمتر باشه، در آوردن عدد برنده سخت‌تر میشه.

هر دفعه قرار نیست 5 دقیقه وقت ببره. شاید شما بار اول که عدد در میارید، خوش‌شانس باشید و عددتون برنده باشه. ولی در بلند‌مدت به همون بازه‌های پنج دقیقه‌ای خواهید رسید.

درنتیجه، با توجه به تعداد دفعه‌ای که بر دقیقه می‌تونید عدد در بیارید، من می‌تونم با مقدار هدف این که چقدر طول میکشه عدد برنده در بیارید رو کنترل کنم.


معرفی سختی...

من یه کامپیوترم، و بجای اینکه مستقیم عدد هدف رو بهتون بگم، راحت ترم هدف رو با تقسیم بازه‌ی عددها به یه عدد جدید بهتون بدم.



این عدد جدید می‌تونه سقف هدف رو کنترل کنه.



این عدد جدید همون سختی شبکه‌ست، که یه راه سادست برای منِ کامپیوتر که سقف هدف رو تغییر بدم:

هدف = بیشترین مقدار ممکن برای هدف/سختی

من میتونم از مقدار سختی استفاده کنم که هدف رو روی هر سطحی میخوام بذارم:



هرچه سختی بیشتر، هدف کمتر.



پس از سختی استفاده میکنم تا هدف رو تنظیم کنم و در نتیجه تنظیم کنم که چقدر طول بکشه که تو عدد برنده در بیاری.

۲. مثال بیت‌کوین

سختی در بیت‌کوین، دقیقا همینطوری کار می‌کنه - باهاش هدف تنظیم میشه، و استخراج‌کننده‌ها مدام عدد در میارن ( <a href=./Blocks.md> بلوک کاندیدشون </a> رو هش می‌کنن) به این امید که یه عدد کوچک‌تر از هدف پیدا کنند.



و با توجه به اینکه استخراج‌کننده‌های بیت‌کوین می‌تونن هزاران هزار عدد (مقدار هش) بر دقیقه در بیارن، بیت‌کوین از عددای خیلی خیلی بزرگی استفاده می‌کنه.





عددای بیت‌کوین اصلا تو یه دنیای دیگه‌ست.



ازاونجایی که الائ هزاران استخراج‌کننده در حال تلاش برای به‌دست‌آوردن عدد برنده‌اند، برای اطمینان از اینکه عدد برنده هر 10 دقیقه یکبار پیدا میشه (به جای هر چند ثانیه)، اون بازه عدد برنده به نسبت خیلی خیلی کوچک در میاد.



با وجود اینکه عدد سختی بزرگ بنظر میرسه، خیلی خیلی سخته که عددی زیر هدف در بیاد. مثل لاتاری میمونه.




معرفی اعداد شازنده‌شانزدهی

ازاونجایی‌که اعدادی که ما با اون‌ها در این شبکه سروکار داریم اعداد بزرگی هستن، کامپیوتر ترجیح می‌ده با اون‌ها به شکل شازنده‌شانزدهی کار کنه.





به‌این دلیله که هش هر بلوک یه چیزی شبیه به این می‌شه:

000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506

شازنده‌شانزدهیه.

با اینکه توش حرف انگلیسی داره، بازم یه عدده. پس هدف یه مقدار شانزده‌شانزدهیه و استخراج‌کننده‌ها تلاش می‌کنن تا به مقدار هش شازنده‌شانزدهی زیر هدف در بیارن.

شما به‌راحتی می‌تونید عددهای شازنده‌شانزدهی و «معمولی» (ده‌دهی) رو به هم تبدیل کنید.


شانزده‌شانزدهی 000000000004864c000000000000000000000000000000000000000000000000
ده‌دهی 1861311314983800126815643622927230076368334845814253369901973504
مقدار هدف در بلوک 100,000

شانزده‌شانزدهی 000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506
ده‌دهی 1533267872647776902154320487930659211795065581998445848740226310
هش پیدا شده برای بلوک 100,000

به همین دلیل، معمولاً هش و هدف رو یه دسته عدد و حرف می‌بینید. چون شانزده‌شانزدهی‌اند نه ده‌دهی (که آدما بیشتر باهاش آشنان).

این نکته رو نباید فراموش کرد که این عددای ده‌دهی و شازنده‌شانزدهی مقدار برابر دارن و می‌تونید به‌راحتی اون‌ها رو به همدیگه تبدیل کنید.

خیلی مسخره، سختی شبکه معمولا به شکل ده‌دهی داده می‌شن ولی هش‌ها و هدف‌ها شازنده‌شانزدهی ذخیره میشن. اما همونطور که گفتم، اینا جفت عددن و تا زمانی که به یه شکل یکسان تبدیلشون کنید میتونید باهاشون کار کنید.



سربرگ بلوک 100,000 . هدف شانزده‌شانزدهیه, اما به شکل فشرده در سربرگ ذخیره شده (که بهش میگن بیتس).




سختی فعلی شبکه رو کجا می‌شه پیدا کرد؟

می‌شه با واردکردن دستور getdifficulty در نرم‌افزار مشتری (کلاینت) بیت‌کوین سختی الان شبکه رو دید.

همین‌طور می‌شه سختی شبکه رو کنار بقیه‌ی دانستنی‌های استخراج با دستور getmininginfo دید.





اگه مشتری بیت‌کوین دم دست ندارید، می‌تونید سختی شبکه رو از آدرس زیر ببینید:

http://chainquery.com/bitcoin-api/getdifficulty

همین‌طور اگه علاقه‌مند هستید که بدونید سختی شبکه در طول زمان چطور تغییر کرده، می‌تونید از سایت زیر و نمودارش استفاده کنید:

https://bitcoinwisdom.com/bitcoin/difficulty

منبع

از تکنولوژی لذت ببریم!

</div>