Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Як SHA256 і Майнінг захищають мережу біткойн

Як біткойн захищається енергією? А що таке одноразовий запис? Відповіді на ці та інші запитання ви знайдете всередині!

Як працює майнінг, вражає. Коли я пояснюю це людям, мені подобається бачити їхнє обличчя в той момент, коли вони вражають. Я поясню це тут, але просто знайте, я уявляю всі ваші обличчя, як ваші розуми бувають!

Мені потрібно почати з хеш-функцій. Без хеш-функцій біткойн був би неможливим. Дозвольте мені спочатку пояснити, що це таке, не тільки для того, щоб ви могли звучати круто на вечірках, але й тому, що це є фундаментальним для розуміння того, як працює біткойн — зокрема майнінг, але й транзакції — під капотом.

Вам не потрібно розуміти, як працює біткойн, щоб отримати від нього вигоду, так само, як вам не потрібно розуміти, як працює TCP/IP, щоб використовувати Інтернет. Але продовжуйте, тому що це досить цікаво, і я зроблю це легким для розуміння, я обіцяю.

Хеш-функції

Давайте почнемо зі схеми, яку я поясню нижче…

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.
(Графіка/@jirols_btc)

Ліворуч – вхід, у центрі – функція, а праворуч – вихід. Вхідними можуть бути будь-які дані, якщо вони цифрові. Він може бути будь-якого розміру, за умови, що ваш комп’ютер може це впоратися. Дані передаються до функції SHA256. Функція бере дані і обчислює випадкове число, але зі спеціальними властивостями (обговорюватимуться пізніше).

Перший безпечний алгоритм хешування (SHA) був спочатку розроблено АНБ і зараз існує багато різних версій (Біткойн використовує SHA256). Це набір інструкцій щодо того, як змішати дані дуже складним, але визначеним способом. Інструкція не є таємницею, це навіть можна зробити вручну, але це дуже втомливо.

Для SHA256 вихідним є 256-бітове число (не випадковість).

256-бітове число означає двійкове число довжиною 256 цифр. Двійковий означає, що значення представлено двома символами, або 0, або 1. Двійкові числа можна перетворити в будь-який інший формат, наприклад, десяткові числа, з якими ми знайомі.

Хоча функція повертає 256-значне двійкове число, значення зазвичай виражається в шістнадцятковому форматі, довжиною 64 цифри.

Шістнадцятковий означає, що замість 10 можливих символів, як ми звикли з десятковим (від 0 до 9), у нас є 16 символів (десять, до яких ми звикли, 0-9, плюс літери a, b, c, d, e, і f, які мають значення від 11 до 15). Як приклад, щоб подати значення десяткового числа 15 у шістнадцятковому, ми просто пишемо «f», і це те саме значення. Існує багато інформації, доступної в Інтернеті за допомогою швидкого пошуку в Google, якщо вам потрібно докладніше.

Щоб продемонструвати SHA256 в дії, я можу взяти число 1 і пропустити його через an онлайн хеш-калькулятор, і отримав такий вихід (у шістнадцятковому):

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Верхнє поле — це вхідні дані, нижнє — підсумковий вихід.

Зауважте, що всі комп’ютери у світі вироблятимуть однаковий вихід за умови, що вхідні дані однакові та використовується функція SHA256.

У разі перетворення шістнадцяткового числа в десяткове число (зверніть увагу, що для запису потрібно більше цифр):

48,635,463,943,209,834,798,109,814,161,294,753,926,839,975,257,569,795,305,637,098,542,720,658,922,315

І перетворений у двійковий це:

11010111000011010110010011100111111111100110100111111001110000110011101011010111000000001001110111111110101101000111111010101110100011110101101101001001110101010100010001011110001110101001001110000000001111001010010110111011011011110000111010110110100101111010111001101011100110101110011010111001101011100110101110011010111001101011100111

Просто заради інтересу, ось таке ж значення в база 64.

1w1k5/5p+cM61wCd/rR+ro9bSdVEXjqTgDylu28OtpY=

Зауважте, що найменше можливе значення, яке може повернути SHA256, дорівнює нулю, але LENGTH все ще становить 256 біт. Ось як представлений нуль:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

А найбільше можливе значення становить:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

У десятковій формі це:

115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935

У шістнадцятковому форматі це:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Зверніть увагу, що є рівно 64 F.

Нуль у шістнадцятковому форматі можна просто записати як один нуль, але для хеш-виводу їх 64, щоб дотримуватись вимоги виведення фіксованого розміру:

0000000000000000000000000000000000000000000000000000000000000000

Ось короткий виклад деяких фактів про хеш-функцію, які важливо оцінити:

  • Вхід не можна визначити з виходу
  • Довжина введення може бути будь-якої
  • Вихід завжди однакової довжини
  • Вихідні дані завжди будуть відтворюватися однаково, якщо ви надасте однакові вхідні дані.
  • Будь-яка зміна вхідних даних, незалежно від того, наскільки вона незначна, призведе до непередбачуваного та надзвичайно відмінного результату
  • Вихід, здавалося б, випадковий, але насправді детермінований (тобто він обчислюється і відтворюється)
  • Вихід не можна передбачити. Його можна лише розрахувати, і це вимагає вимірюваної кількості роботи комп’ютера (і годин з олівцем і папером! Не робіть цього).

Тепер, коли ви зрозуміли основну концепцію того, що таке хеш, ви можете зрозуміти пояснення того, як працює майнінг біткойн.

Але перш ніж йти далі, я рекомендую вам зайти до онлайн-калькулятора хешування, трохи пограти з ним і перевірити на собі те, що я сказав про хеш-функції. Мені подобається цей.

Mining

Я почну з демонстрації концепції роботи, звідки походить «доказ роботи» в біткойнах.

Перейдіть до онлайн-калькулятора хешування і введіть «Я створюю 50 біткойнів і плачу собі цю суму».

Введіть його точно, з урахуванням регістру, включаючи крапку. Ви повинні отримати такий вихід:

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Тепер давайте створимо правило, яке говорить, що для того, щоб це платіжне повідомлення було дійсним, нам потрібен хеш, який починається з одного нуля. Для цього нам потрібно якось змінити введення. Але, як ви вже зрозуміли, не можна передбачити, яким буде результат для даного входу. Яку зміну ми можемо внести, щоб забезпечити хеш, що починається з нуля?

Ми повинні додавати дані методом проб і помилок. Але ми також не хочемо змінювати значення вхідного повідомлення. Отже, давайте створимо поле (виділений розділ) під назвою «nonce», яке міститиме значення безглуздого.

Слово «Nonce» нібито походить від «число, яке використовується лише один раз», але я його не бачу.

Зверніть увагу нижче, як просто додавання «Nonce:» як додаткового заголовка поля змінює вихідний хеш.

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Висновок все ще не починається з «0», тому давайте додамо дурниці (я додав безглузде «х»):

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Все одно не починається з нуля. Я спробував ще кілька символів, поки хеш не починався з нуля:

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Там ми йдемо. Тепер, згідно з довільними правилами, які я встановив для цієї уявної версії біткойна, текст у вікні введення є дійсним блоком з однією транзакцією, яка платить мені 50 біткойнів.

Зауважте, що блоки біткойн – це, по суті, сторінки книги. Кожен блок нумерується і створює новий біткойн, а також перераховує транзакції між користувачами. У цьому рекорді живе біткойн.

Тепер нове правило. Для наступного блоку необхідно включити хеш попереднього блоку. Я додам трохи складності та додам ще кілька полів, щоб наблизитися до того, що має справжній блок Bitcoin.

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Хеш починається з «f», а не з «0», тому мені доведеться спробувати деякі значення в полі одноразового терміну:

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Цього разу мені пощастило більше, і я знайшов відповідний одноразовий варіант лише після чотирьох спроб. Нагадаємо, що для першого блоку знадобилося 22 спроби. Тут є певна випадковість, але загалом знайти дійсний хеш не так вже й складно, якщо все, що ми намагаємося отримати, це один нуль. Існує 16 можливих значень для першої цифри хешування, тому я маю шанс 1 до 16, що будь-яка зміна поля введення призведе до того, що перша хеш-цифра буде «0».

Зауважте, що поля біткойн такі, але я не додав більше деталей. Це лише для того, щоб проілюструвати суть, а не для того, щоб детально розповісти, як саме виглядає блок біткойн.

Я додам поле часу до наступного блоку, оскільки мені це потрібно, щоб пояснити "коригування складності" далі:

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Вгорі блок номер три. Він включає хеш попереднього блоку, а тепер я також почав включати час. Нонс, який я знайшов, успішно розпочав хеш з нуля (я просто продовжував вводити «1», доки мета хешування не була досягнута).

Тут достатньо, щоб я міг почати пояснювати кілька цікавих концепцій про блокчейн і майнінг біткойн.

Виграти блок

Процес видобутку є конкурентним. Той, хто першим створить дійсний блок, отримає собі винагороду за встановлений блок. Майнер, який видає той самий номер блоку трохи пізніше, нічого не отримує — цей блок відхиляється. Пояснення, чому це так, зараз спричинить занадто багато відволікання, тому я поясню це в додатку.

Після того, як блок третій знайдено та транслюється всім (всі вузли біткойн), усі майнери припиняють працювати над тим, що було б їхньою версією третього блоку. Вони починають будувати поверх цього успішного блоку три (перетягуючи хеш його блоку вперед в новий блок) і починають працювати над пошуком відповідного одноразового номера для четвертого блоку. Переможець публікує результат, а потім усі починають працювати над п’ятим блоком тощо.

З кожним блоком створюється новий біткойн, який разом складає загальну пропозицію на даний момент. Якщо майнерів багато, то статистично слід очікувати, що блоки будуть вироблятися швидше, а отже, і біткойн буде створюватися швидше. Проблема, правда?

Шукаючи обмежену кількість біткоїнів з передбачуваною емісією з часом, Сатоші Накамото подумав про цю проблему і ввів негативний цикл зворотного зв’язку, щоб підтримувати виробництво блоків у середньому з 10-хвилинними інтервалами. Як? Подивіться, чи можете ви придумати спосіб. Зробіть паузу на мить і подумайте — подивіться, чи зможете ви придумати таке ж геніальне рішення, і читайте далі, коли здаєтеся.

ВУЗЛИ: Я згадую «дійсні» блоки. І що? Хто перевіряє? Вузли Bitcoin є. Вузол біткойн зберігає копію блокчейну й дотримується набору правил, щоб перевірити, чи нові блоки входять до правил, і відхилити ті, які не є. Де правила? У коді. Комп’ютер, який завантажує біткойн-код, є вузлом.

Коригування складності

Середній час створення нових блоків біткойн розраховується кожним вузлом кожні 2016 блоків (саме тому потрібне поле часу). Це частина протоколу та правил, яким дотримуються вузли. Застосовується формула для регулювання кількості нулів, з яких повинен починатися хеш кожного блоку, щоб бути дійсним.

Власне, коригується не кількість нулів, а цільове значення, нижче якого має бути хеш, але простіше пояснити думку про провідні нулі.

Якщо блоки створюються занадто швидко, мета хешування коригується відповідно до попередньо визначених правил, яким усі вузли дотримуються однаково (це в їх коді).

Простіше для мого прикладу, припустимо, що інші люди змагаються зі мною, блоки відбуваються занадто швидко, і тепер четвертому блоку потрібно два нулі замість одиниці, згідно з уявним розрахунком.

Мені знадобиться трохи більше часу, щоб отримати два нулі, але ми уявляємо, що зі мною змагаються багато інших людей, тому загальний час, необхідний будь-кому, щоб знайти блок, зводиться до мети.

Ось наступний блок:

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Зверніть увагу на час. Після попереднього блоку пройшло більше 10 хвилин (я щойно встиг продемонструвати). 10-хвилинна ціль є імовірнісною; ніколи точно не відомо, коли буде знайдений наступний блок.

Я возився з клавіатурою хвилину, поки не з’явилися два нулі. Це було експоненціально важче, ніж знайти один нуль. Шанс знайти два нулі підряд дорівнює 1 до 162, або шанс 1 до 256.

Якщо більше людей приєднається до видобутку та конкуренції за новий біткойн, то в кінцевому підсумку знадобиться три нулі.

Я щойно переглянув останній справжній блок Bitcoin, який містить хеш попереднього блоку. Хеш був:

000000000000000000084d31772619ee08e21b232f755a506bc5d09f3f1a43a1

Це 19 нулів! Є 1 з 1619 шанс знайти такий блок з кожною спробою. Майнери біткойн роблять багато-багато спроб за секунду разом по всьому світу.

Кількість спроб за секунду відома як «хешрейт». Наразі оціночна світова швидкість хешування становить трохи менше 200 мільйонів терахешів на секунду (один терахеш — це трильйон хешів). При такій кількості спроб в секунду блок із хешем, що починається з 19 нулів, виявляється приблизно кожні 10 хвилин.

У майбутньому, коли до них приєднається все більше майнерів, хешрейт зростатиме, блоки будуть знаходитись швидше, а складність біткойна буде змінюватися на 20 нулів, що зменшить виробництво блоків приблизно до 10 хвилин.

Половинка

Коли біткойн тільки запустився, з кожним блоком вироблялося 50 біткойнів. Правила блокчейну Bitcoin визначають, що після кожні 210,000 10 блоків винагорода скорочується вдвічі. Цей момент відомий як «половина» і відбувається приблизно кожні чотири роки. Зменшення вдвічі, у поєднанні з коригуванням складності, зберігаючи блоки з 2140-хвилинними інтервалами, означає, що приблизно в 0.00000001 році винагорода за блок становитиме 1, або 21 сатоші, найменшу одиницю біткойна, і більше не може бути зменшена вдвічі. Майнінг не припиниться, але винагорода за блок буде нульовою. З цього моменту нові біткоїни не створюватимуться, а кількість біткоїнів можна обчислити математично і досить близько до XNUMX мільйона монет. Так відомий загальний запас — він задається програмно.

Навіть маючи нульову винагороду за блок, майнери все одно матимуть стимул продовжувати працювати, щоб заробляти комісію за транзакції.

Як саме нагорода за блок скорочується вдвічі? Це в коді, який утримують вузли. Вони знають, що відкидають будь-який новий блок після 210,000 25, коли майнер платить собі понад 420,000 біткойнів. А потім відхиляти будь-які блоки після 12.5 XNUMX, коли майнер платить собі понад XNUMX біткойнів, і так далі.

Операційні збори

Поки що я показував лише уявні блоки з однією транзакцією — транзакцією, за яку майнер отримує винагороду. Це називається «транзакція coinbase».

Він не названий на честь компанії Conbase, я маю на увазі Coinbase. Компанія назвала себе на честь транзакції coinbase, а не навпаки. Не заплутайтеся.

Крім транзакції coinbase, існують транзакції людей, які платять один одному. Ось уявний приклад:

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Цього разу я не потрудився знайти справжній хеш (насправді це справжній хеш, зазначений у блоці 200,001 XNUMX). Одноразове повідомлення я вигадав для розваги, але зауважте, що туди можна вставити повідомлення.

Сатошіс, як відомо, включив слова «Канцлер на межі другої допомоги для банків» у перший блок біткойнів (The Genesis Block) після заголовка газети за день.

Як SHA256 і майнінг захищають мережу біткойн PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Справа в тому, що включено 132 транзакції (не всі показані). Подивіться на транзакцію № 132 – 2.3 біткойна з адреси платить 2.1 біткойна на іншу адресу, а також на другу адресу суму 0.1 біткойна (я використовував точки, щоб скоротити довжину адреси).

Отже, джерело в 2.3 біткойна платить загалом 2.2 біткойна (2.2 + 0.1 = 2.2). Чи не вистачає 0.1 біткойна? Ні, різницю заявляє майнер, я поясню.

Майнер може виплатити собі 25 біткойнів як винагороду за блок (оскільки пройшло 210,000 50 блоків, тож винагорода була зменшена вдвічі з 25 до 27.33880022). Але якщо ви подивитеся, транзакція coinbase становить 2.33880022. Додаткові 132 біткойна надходять від інших XNUMX транзакцій у блоці – всі вхідні дані будуть трохи більшими, ніж загальна кількість виходів. Таким чином, майнер може вимагати цей «покинутий» біткойн як плату собі. Вони вважаються комісіями за транзакції, сплаченими майнеру.

Обсяг блоку обмежений. Коли біткойн був новим, користувачі могли надсилати транзакції без комісії, а майнери включали транзакцію в блок. Але тепер стало більше користувачів, і оскільки переход на наступний блок є конкурентним, користувачі включають комісію в транзакцію, щоб спонукати майнера вибрати свою транзакцію над іншими.

Тому, коли винагорода за блок неухильно знижується, зменшуючись вдвічі кожні чотири роки і в кінцевому підсумку до нуля, майнерам все одно платять таким чином.

Деякі припускають, що одного дня винагороди майнерам буде недостатньо і призведе до збою біткойна. Це занепокоєння було повністю розвінчано, і я не буду повторювати його тут.

Чи можна переписати блок?

Це вкрай малоймовірно, і варто зрозуміти, чому. Тоді ви зрозумієте, чому транзакції біткойн незмінні (незмінні).

Раніше я пояснив, що хеш попереднього блоку включається в поточний блок. Це означає, що будь-яке редагування транзакцій у старому блоці змінює хеш цього відредагованого блоку. Але цей хеш записується в наступному блоці, тож це означає, що наступний блок теж потрібно оновити. Але якщо ви зміните хеш, записаний у наступному блоці, його хеш потрібно змінити тощо.

Зауважте, що кожного разу, коли хеш змінюється, ви втрачаєте всі ці чудові нулі і залишаєтеся з випадковим хешем — і вам доведеться виконати всю роботу знову, щоб повернути нулі. Якщо ви робите це для блоку, який ви намагалися редагувати, вам доведеться повторити роботу для наступного блоку, а наступного — аж до останнього блоку. Ви не можете просто зупинитися на старому блоці, тому що правила біткойна такі, що найдовший ланцюжок блоків є справжнім записом біткойна. Якщо ви повернетеся назад і відредагуєте блок 10 блоків тому, у вас більше не буде найдовшого ланцюга. Ви повинні додати ще 10 блоків, а потім трохи більше, тому що, коли ви створювали ці 10 блоків, справжній ланцюжок, ймовірно, став трохи довшим. Ви повинні змагатися, щоб обігнати справжній ланцюг. У разі успіху нова версія стає справжньою версією.

Повторення всього спільного хешування всього світу від відредагованого блоку до останнього блоку є перешкодою для редагування біткойн. Енергія була витрачена на створення цих хешів з усіма цими неймовірними нулями, і ці витрати енергії потрібно повторити, щоб редагувати біткойн. Ось чому енергія, яка використовується для видобутку біткойнів, не «марнається»; він покликаний захистити біткойн від змін, зробити книгу незмінною без необхідності довіряти центральному органу.

Що станеться, якщо два майнера знайдуть блок одночасно?

Насправді це трапляється час від часу, і завжди відбувається так:

Кожен вузол спочатку отримає будь-який з нових майже одночасних блоків і прийме цей блок і відхилить той, який надійде через кілька хвилин. Це призводить до розколу мережі, але це тимчасово.

Для ілюстрації назвемо один з блоків синім, а інший — червоним (у них немає кольору, просто погодьтеся).

Потім майнери працюють над наступним блоком, але буде розділено, з якого блоку вони продовжують ланцюжок.

Скажімо, майнер-переможець знайшов блок за допомогою синього ланцюжка. Вони надішлють новий блок усім вузлам, і буде видно найдовший ланцюжок. Вузли, які прийняли червоний ланцюг, потім відкидають його та приймають синій ланцюг.

Усі шахтарі, які працювали на червоному ланцюжку, зупиняться і тепер працюватимуть на більш довгому ланцюжку, яким є синій ланцюг. Червоний ланцюг мертвий.

Додаток

Чому блок майнера, що зайняв друге місце, є недійсним

Припустимо, що блок 700,000 700,000 щойно видобув MINER-A. Через 30 секунд MINER-B також створив іншу версію блоку 700,001 700,000. Коли MINER-B транслює цю альтернативу, кожен вузол відкине її, оскільки вони вже бачили та прийняли блок MINER-A. Більше того, за ці 700,001 секунд припустимо, що MINER-C знайшов блок XNUMX XNUMX. З огляду на те, що конкуруючий XNUMX XNUMX-й блок MINER-B не розширює поточний ланцюжок (який становить до XNUMX XNUMX), він також відхиляється з цієї причини.

Ще цікавіше те, що якби MINER-B працював над блоком 700,001 700,000 замість конкуруючої версії 700,001 700,000, у них було б стільки ж шансів видобути дійсний блок XNUMX XNUMX, скільки їм довелося б нарешті знайти альтернативний блок XNUMX XNUMX. Тож, як тільки майнер побачить новий блок, він повинен прикласти зусилля до наступного блоку.

Однак якщо Miner-B знайшов блок 700,000 XNUMX через одну секунду після того, як це зробив MINER-A, то можливо, що деякі вузли бачать блок MINER-A першими, а інші бачать блок MINER-B першими, залежно від географічного розташування та швидкості Інтернету. У цьому випадку є тимчасовий форк, і деякі майнери працюватимуть над розширенням однієї версії, а інші майнери працюватимуть над розширенням іншої. Як пояснювалося раніше, використовуючи дескриптори «синій ланцюг» і «червоний ланцюг», в кінцевому підсумку одна з версій розшириться далі перед іншою і стане дійсною версією одноголосно.

Це гостьовий пост від Армана Пармана. Висловлені думки є повністю їх власними і не обов’язково відображають думки BTC Inc або Журнал Bitcoin.

Часова мітка:

Більше від Журнал Bitcoin