Що таке блокчейн та майнінг простими словами

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

Я не поділяю цей підхід. Вважаю, що знання деталей технічної реалізації є запорукою довіри до інструменту загалом, а вміння відтворити щось подібне — найкращий критерій глибокого розуміння. Тому сьогодні з вами гурток «очумілі ручки» і ми будуватимемо свій, найпростіший, концептуальний, проте повністю робочий блокчейн. Прямо у вас на комп'ютері, без початкової підготовки буквально вручну мишкою.

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

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

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

А тепер, щоб стало ще зрозумілішим, продемонструю на практиці.Вбийте в гугле «sha256 онлайн» (саме цю функцію ми будемо використовувати у всіх прикладах). Пограйте із нею, вбиваючи різні дані.

Зроби сам

Всі. Цих знань вже достатньо, щоб створити простий блокчейн. Дивно, правда? Блокчейн - ланцюжок криптографічно зв'язаних блоків.

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

Відкриваємо ваш улюблений блокнот і створюємо перший файл:

Ваня → Ліза :: 20 рублів

Маша → Саша :: 50 рублів

Хеш тут ні для чого рахувати, тому все. Зберігаємо його з ім'ям 1.txt у спеціальній папочці (FYI: у блокчейні криптовалют такий блок називається Genesis block, і так, там його теж прописують вручну). Зберегли? Йдемо на один із раніше наголених сайтів (можна здогадатися, що справжні блокчейни ні на які сайти не ходять, а викликають заздалегідь запрограмовані в них функції, але для нашого найпростішого випадку зробимо все вручну), і вважаємо хеш для цього файлу.

У мене вийшло 7f17d67621afd2a661bc0a552735745b8a2c424cff28e523b94f1d1b4615f591, у вас може вийти інше, залежно від вмісту файлу, кодування, зайвих або відсутніх пробілів. Цілком не важливо, що у вас вийшло, просто збережіть цей рядок.

Тепер створіть наступний файл та назвіть його 2.txt. Запишіть у нього кілька нових «транзакцій»:

Макс → Вітя :: 10 рублів

І останнім рядком додайте результат хешування попереднього файлу. Ось так:

Макс → Вітя :: 10 рублів

Готово? Зберігаємо, і вважаємо хеш вже від цього, нового файлу цілком. У мене вийшлоdb45d94b529fbf8c5fb1decd89f5d0ff62bbca86a02bc4f943eac42ff33dd486.

За аналогією створюємо третій файл:

Жора -> Вася :: 10 рублів

Анна -> Люда :: 60 рублів

І всі наступні. Їх може бути скільки завгодно. У блокчейні біткоїну станом на 27.06.17 знаходиться 473011 блоків, в яких записано інформацію про майже 250 мільйонів транзакцій. Це багато. І знову до наших баранів. Можете створити всі файли самостійно, а можете завантажити мій архів з 10 файлів і контрольного, що містить тільки хеш останнього блоку і нічого більше.

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

Я зробив найпримітивніший скриптик з поясненнями, можете подивитися його за посиланням, а без пояснень він включений до архіву. Написаний він найпопулярнішою в термінах проникнення мовою у світі - баші, а значить у користувачів GNU/Linux, MacOS, Android (оточення Termux) - не виникне проблем із запуском.

Користувачам Windows можна порадити встановити cygwin або Linux subsystem for windows, що з'явився у Windows 10.

Отже, після запуску скрипту маємо отримати щось на кшталт:

chain is flawless

final hash = 23cbc83ca6a2cf2e75ae5ca76fb087ef11ff36fb0065c301557c8152a5bc530f

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

Поверніть все на місце і ланцюг знову проходитиме перевірку. Магія? Магія.

Візьмемо тепер наш ланцюг і ускладнимо його трохи. Додамо в перший рядок кілька випадкових даних: нехай це буде число із десяти цифр. У реалізації блокчейну біткоїну це поле називається Nonce. Ось так:

Маша -> Ваня :: 10 рублів

Ваня -> Ліза :: 20 рублів

Маша -> Саша :: 5 рублів

Тепер йдемо на наш сайт і знову рахуємо хеш. У мене вийшло 361d413d08c614ff63290943bb184aadaaaae84171caef4bfb2344a3223cd104. Але він не підходить. Як так? А ось так. В офіційній документації біткоїну (припустимо) сказано, що для перших десяти блоків приймаються тільки хеші, що починаються з нуля, а решта не підходять, і всі, включаючи саму програму bitcoin core, вважатимуть нас за шахраїв, якщо ми згенеруємо таке.

Ну гаразд, говоримо ми, і додаємо одиначку до нашого числа (ми не можемо передбачити заздалегідь, який хеш вийде на виході, хто зможе - отримає нобелівку, так що найтупіший вихід тут одночасно і єдино вірний). Виходить 0000000001. Ідемо і хешуємо знову. 44364a819eca9616dd56c21f6ba9a570d8a27ca54b95f67585cd36da2e4bf9f6. Чорт. Це може затягтись.

Як добре, що ми знову можемо написати скрипт, що перебирає! У ньому дві головні змінні: LENGTH - кількість цифр поспіль з початку, які повинні відповідати критерію, і GOAL - чому саме ці цифри мають бути рівними. Складність підбору у своїй зростає разом із кількістю символів експоненційно.

Запустіть скрипт: ./block_mine.sh 1.txt, і він відпрацює досить швидко. Змініть LENGTH на 3 і GOAL на000, і ви помітите циферки, що біжать. Замініть LENGTH на 10, і GOAL на 0000000000 - і ви результатів виконання на своєму комп'ютері вже не дочекаєтеся.

До чого тут биткоин

Якщо говорити в термінах зрозумілих аналогій, ідеї блокчейна — електрика, біткоїн та інші криптовалюти — лампочка над головою вашої. Біткоїн всього лише один із безлічі способів застосування ідей блокчейну, і навіть, на мій погляд, не найважливіший. Набагато цікавіша його економічна сутність, і про це варто сказати докладніше. По-перше, запам'ятайте, проаналізуйте, або просто прийміть на віру: на сьогодні це спекулятивна економічна бульбашка. Це дефіцитний товар, який купують/добувають/набувають переважно у розрахунку на швидкий прибуток у короткостроковому періоді. Це не погано і не добре, це звична ситуація для будь-якого фондового ринку та й загалом для економіки. Інтернет був таким самим (гугл: міхур доткомів).

Тобто сприймати як іграшку, а не як засіб накопичення, бути готовим до обвалу в 2-10 разів менше ніж за добу (або аналогічному зльоту, тут як пощастить), згладжувати ризики портфелями, і так далі (та ви все і без мене знаєте, якщо працюєте у сфері фінансів або захоплюєтеся грою на біржі, а якщо не працюєте і не захоплюєтеся, найкраща порада: не лізти, чекати на стабілізацію курсу). Це не піар піару біткоїну, це лікнеп по блокчейну, так що можу собі дозволити сказати все як є.

Навіщо це потрібно

Тут по порядку, інакше зовсім заплутаємось.

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

В: Для того, щоб зручно було знаходити помилки в ланцюзі. Дуже легко визначити, який блок пошкоджено, але неможливо з'ясувати, де саме закралася помилка у величезномуфайл, знаючи тільки, що змінився його хеш.

В: Навіщо взагалі цей хеш? Хіба просто передати дані недостатньо?

В: Гугл: Завдання візантійських генералів. Коротко це коли потрібно переконатися, що дані не пошкоджені і не змінені в умовах скомпрометованого каналу їх передачі. Ще півстоліття тому це завдання вважалося концептуально нерозв'язним, а зараз ЕЦП у парі із секретним ключем — стандарт навіть у консервативній сфері держпослуг. Тобто ці «хеші» давно міцно проникли у наше життя, їм довіряють та ними користуються. Якщо ви ще не знаєте, що воно і як працює, це тільки ваша проблема.

В: Добре-добре, а де використовується блокчейн, крім гучних криптовалют?

Більшість із них помруть (як уже померла краудфандингова платформа Koinify, як з тріском провалилася через знайдену вразливість інвестиційна платформа The DAO, як померла більшість відомих на зорі інтернету сайтів). Однак це перспективна галузь, яка уможливила деякі раніше немислимі речі, і цілком імовірно, блокчейн-лихоманка — новий виток прогресу, схожий на історію згаданого раніше, і сьогодні всіма улюбленого World Wide Web.

П: Навіщо це мені все, я не програміст?