Як працює блокчейн?
База кожного блокчейна будується на конкретному алгоритмі майнінгу, що формує цей ланцюг блоків. Для наочності, розглянемо один з найвідоміших варіантів - Біткоін. Ланцюг, який утворює його алгоритм називається «SHA-256». Або «Secure hash algorithm 256 bits». Початкові дані можуть бути будь-якими - текстом, послідовністю цифр, файлами різного розміру і дозволу. Але в процесі роботи алгоритму вони все трансформуються в певний «хеш», розмір якого завжди один і той же - 256 біт.
Одна і та ж початкова інформація буде завжди перероблятися в один і той же хеш - але тільки в межах одного ланцюга блоків. Якщо ж зміниться хоча б один біт початкової інформації - результат буде вже іншим.
Крім того, алгоритм працює за принципом однобічної функції. А це означає, що знання підсумкового хеша не дозволяє визначити початкові дані. Їх можна тільки вгадати, виходячи з комбінації нулів і одиниць, що приблизно дорівнює 2 в ступені 256. А шанс цей - неймовірно малий - тому алгоритм вважається безпечним, що відображено в його назві.
Розглянемо конкретний приклад роботи цього алгоритму
Припустимо, є дві людини - Семен і Микола. І Семен збирається перевести свому знайомому 5 біткоінів. Для цього від передає повідомлення про транзакцію всім майнерам мережі біткоін. У цьому повідомленні містяться дані про публічну адресу Миколи, на яку здійснюється переказ, про суму переказу, про особистий цифровий підпис Семена і про його відкритий ключ. Що важливо - цифровий підпис формується на основі закритого ключа Семена, тому кожен учасник мережі може бути впевнений, що запит виходить саме від нього. І що саме йому належать біткоіни , про які йде мова.
Переконавшись, що транзакція реальна (це важливий момент, але про нього - трохи пізніше), майнери поміщають дану інформацію в блок, разом з іншими подібними даними про транзакції. І починають майнити - тобто - реалізовувати алгоритм «SHA-256» і вираховувати хеш. Отриманий результат обов'язково повинен містити деяку кількість нулів у своєму початку. Воно визначається загальною «складністю» мережі, яка прямо залежить від її потужності. Це непостійна величина, що залежить від кількості учасників і їх обчислювальних потужностей.
І для того, щоб отримати в процесі виконання алгоритму потрібну кількість нулів, учасникам мережі доводиться додавати до початкових даними так звані «nonce number». Шматки двійкового коду, одержані в процесі PoW-майнінгу. Але це додавання змінює підсумковий хеш, тому майнерам доводиться підбирати таку комбінацію «nonce number», щоб отримати потрібний.
Як тільки у когось виходить знайти рішення задачі - «добути блок» - він передає його всім іншим учасникам мережі. Там відбувається повторна перевірка і додавання його в загальний ланцюжок. Що важливо - в здобутому блоці міститься ще й інформація про хеш попереднього, що забезпечує логічний зв'язок між ними і формування ланцюжка блоків - той самий блокчейн. Ця перевірка, додавання і відстеження зв'язку формують так зване «доказ виконаної роботи» - критерій достовірності одержаного результату.
Найбільшою довірою користуються найдовші ланцюжки блоків. Тобто - з найбільшою виконаною обчислювальною роботою. І якщо хтось вирішить змінити хоча б один блок ланцюжка - це вплине на весь подальший відрізок, оскільки в змінюваному блоці зміниться хеш , а через це доведеться все перераховувати заново. Що реально, але вимагає більше 50 відсотків обчислювальної потужності всієї мережі. Тому цілеспрямовані хакерські атаки, спрямовані на зміну змісту блоків, називають «51% атаками» - цієї потужності достатньо, щоб створити новий ланцюжок з нібито «достовірною» виконаною роботою.Існує й інший критерій достовірності - так званий Proof-of-Stake (PoS) або «підтвердження частки володіння». Він не настільки вимогливий до обчислювальних потужностей і використовуваної електроенергії, тому дозволяє масштабувати ланцюжки для більшої кількості активних учасників. Більш докладно про це - у відповідній статті.
Ось приблизно так і працює мережа блокчейн Біткоін. Інші мережі можуть використовувати дещо інші принципи, але в цілому - суть залишається такою ж.