BlockChain.bg

Ролята на Bitcoin копаенето

В статията Как работи биткойн? вече разгледахме няколко аспекта на копаенето на биткойни – генерирането на блоковете в блокверигата и емитирането на нови биткойни. Освен това копаенето допринася за защитата на биткойн мрежата срещу манипулации и злоупотреби. Въпреки че процесът изпълнява няколко различни функции едновременно, като цяло под „копаене“ се разбира работата на специализирани машини и софтуер за генериране на следващия блок в блокверигата.

Копаене/добиване на биткойни
Процесът се нарича така, тъй като е един вид състезание между всички, които се опитват да генерират следващия блок. Победителят в това състезание получава биткойните от емитиращата трансакция плюс всички такси от трансакциите в блока. Оттук идва и асоциацията с търсенето на злато от годините на Златната треска. Всички се опитват да намерят златото, но малцина щастливци наистина успяват и получават наградата. Приликата със златото се налага и предвид факта, че количеството биткойни, които някога ще съществуват, е ограничено и че те се появяват в обращение постепенно и на малки количества.

За да разберем защо копаенето за биткойни е състезание, следва да разберем по-добре някои негови аспекти. Както вече изяснихме, блокверигата се състои от блокове, всеки от които съдържа трансакциите за последните 10 минути и сочи към блока преди него. За всеки такъв блок се генерира така нареченият хеш. Без да влизаме в твърде големи подробности, ще кажем, че хешът е едно голямо число, което се генерира на база някакъв произволно дълъг текст. Това число е генерирано по такъв начин, че да идентифицира този текст практически уникално. Генерираният хеш има някои основни характеристики:
- от един и същи текст винаги ще се генерира един и същи хеш;
- от генерирания хеш не може да се генерира обратно входният текст;
- дори и малка промяна във входния текст ще предизвика огромна промяна в генерирания хеш.

Един хеш на биткойн блок изглежда така:
000000000000000011a3e1bf1eddfa44c02d211f95442202083a66b87843cffb. Това е едно 256-битово число, представено в 16-ичен вид (затова и съдържа не само цифри, но и букви).

Генерирането на самия хеш за даден блок не е особено скъпа операция. Съществуват специализирани машини, способни да генерират милиони такива хешове в секунда. Откъде тогава идва състезанието? Защо генерирането на хеша за нов блок става средно за 10 минути, а не за части от секундата? Причината е, че биткойн мрежата не приема произволни хешове. Генерираният хеш трябва да отговаря на точно определени изисквания, за да бъде приет от системата за валиден.

Ако погледнете примерния хеш, представен по-горе, ще забележите, че той започва с няколко водещи нули. Това не е случайно. Биткойн мрежата изисква хешът на блоковете да започва с определен брой водещи нули (може да са повече, но не и по-малко). Генерирането на такъв хеш не е толкова лесно, както генерирането на произволен хеш, затова копачите от цял свят се нуждаят от милиони милиарди генерирани хешове в секунда, за да успеят да „уцелят“ подходящия в рамките на 10 минути. Например към момента копачите от целия свят, взети заедно, генерират около 500 000 000 милиарда хеша в секунда. Единствения начин да се „уцели“ подходящ хеш, е да се генерират нови и нови, докато на копача му излезе късметът. Няма по-лесен начин, няма по-кратък път.

Може би ще се запитате как е възможно да се генерират различни хешове, при положение че по-рано стана ясно, че от един и същи текст винаги се получава един и същи хеш. Отговорът е прост – копачите променят по малко текста на всеки опит. Форматът на биткойн блока е точно установен и трябва да съдържа: 1. версията на биткойн мрежата, спрямо която е генериран блокът;
2. хеша на предишния блок;
3. хеша на трансакциите, които съдържа;
4. пълната дата – година, месец, ден, час, минута, секунда, милисекунда;
5. сложност на системата – колко най-малко трябва да са водещите нули в хеша;
6. нюанс – произволно 32-битово число;

От всички тези параметри копачите могат да променят само два – нюанса и датата. Както казахме, нюансът е произволно число, така че на всеки опит копачите обикновено променят него. Тъй като обаче размерът му е ограничен и е възможно да се мине през всички възможни номера, без да се „уцели“ правилният хеш, копачите могат да актуализират и датата, което автоматично им дава възможност да започнат отново от нюанс 0. Освен това копачите имат право да впишат и свое кратко текстово съобщение в емитиращата трансакция, което прави блока, върху който работят, уникален за целия свят. Например Сатоши Накамото е записал в първия блок, генериран някога (генезис блока) следното съобщение: „The Times 03/Jan/2009 Chancellor on brink of second bailout for banks“ (Таймс 03/Ян/2009 Министърът [на финансите] на ръба да спаси за втори път банките). Това съобщение не само показва датата, на която е генериран блокът, но и до известна степен е препратка към икономическите възгледи на Накамото.

Крайният резултат от този подход на генериране на биткойн блоковете е, че всички копачи по целия свят се опитват паралелно да генерират валиден хеш за настоящия блок. Всеки работи върху малко по-различен вариант на блока, като съответно генерира уникални за своя блок хешове и не се засича с останалите копачи.

„Уцелването“ на правилния хеш зависи изцяло от късмета и целият процес прилича до голяма степен на лотария. Тъй като обаче всеки опит е като нов билет от тази лотария, то тези, които правят повече опити да „уцелят“ правилния хеш, имат по-голям шанс да спечелят. Затова и в днешно време има професионални копачи, които разполагат с огромен брой специализирани машини, които генерират хиляди милиарди хешове в секунда. При такава конкуренция обикновеният човек със своя настолен компютър практически няма никакъв шанс да измъкне дори и един блок преди големите играчи.

След всичко казано дотук естествено възниква въпросът защо е нужно всичко това. Защо системата е изградена по такъв начин, че всички копачи да се състезават помежду си и да харчат милиони долари за електричество само за да задоволят прищявката на системата за водещите нули на хеша? Причините са две – защита на блокверигата от злонамерени манипулации и постоянна скорост на генериране на блоковете.

Скорост на генериране на блоковете
Попълването на блокверигата работи по следния начин – всички копачи се опитват да генерират следващия блок във веригата с правилния хеш. В момента, в които някой от тях успее, той разпространява в мрежата този валиден блок и всички останали копачи го виждат, приемат и започват работа по следващия блок във веригата. Този подход има предимството, че всички в мрежата работят независимо един от друг без централни звена, които да ги синхронизират.

Същевременно обаче при създаването на системата Сатоши е искал да постигне сравнително постоянна скорост, с която да се генерират новите блокове. Това позволява предвидимо ниво на инфлация (на емитиране на биткойни), предвидим растеж на блокверигата като заемано дисково пространство, както и по-добър контрол върху комуникацията вътре в мрежата. Твърде честото генериране на блокове би предизвикало много голяма комуникация и синхронизация между различните участници, което реално би забавило постигането на консенсус в мрежата.

В началото избраното време за генериране на нов блок е било 10 минути. За да се постигне това, е било поставяно условието за броя водещи нули в хеша на блоковете, което изкуствено забавя генерирането на нови блокове.

Проблемът с този подход, е че изчислителната мощност на системата (броят генерирани хешове от всички участници) не е постоянна. Тя варира в зависимост от броя на участниците и от изчислителната мощ на машините – с времето се появяват все по-ефективни машини, способни на много по-голям брой изчисления спрямо своите предшественици.

За да се реши този проблем, периодично биткойн системата се пренастройва и променя изискванията за броя водещи нули на хешовете. На всеки 2 016 блока (приблизително на всеки 2 седмици) се прави анализ на това колко е средното време за генериране на един блок – ако се окаже, че то е по-малко от 10 минути, системата пропорционално увеличава изискванията за сложност на хешовете; ако се окаже, че е по-голямо от 10 минути, сложността се намалява.

Исторически мрежата се развива малко по-бързо от предвиденото. Въпреки че системата се рекалибрира на всеки 2 016 блока, все пак се наблюдава известно избързване в генерирането на блоковете, като през последните няколко години средният период между блоковете е по-скоро 8 минути (а не заложените средно 10). Това не е проблем за системата и като цяло се дължи на бързото увеличаване на популярността на биткойн и на изчислителната мощ на машините, които копаят.

Бъдете в час с актуалните тенденции и развитие на криптовалутите.

Чрез криптобюлетина на BlockChain.bg, ще бъдете винаги в час с актуалните новини и тенденции, около криптовалутите.