Як працює Bitcoin?

· 10 min read

Bitcoin — це концепція цифрової валюти, запропонована легендарним і загадковим Сатоші Накамото у 2009 році, яка використовує технологію блокчейн як інфраструктуру та працює децентралізовано, від людини до людини. Whitepaper, що пояснює цю концепцію й написаний Накамото, — обовʼязкове читання для кожного, хто хоче зрозуміти bitcoin і криптовалюти загалом. Цей документ не лише пояснює bitcoin як концепцію, а й показує, як система візантійської відмовостійкості може працювати в децентралізованому середовищі.

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

Що таке блокчейн?

Блокчейн — це ланцюг блоків, кожен із яких містить певні дані, і який не контролюється й не керується жодним центральним органом. Ці інформаційні ланцюги захищені криптографічно, і завдяки децентралізованій структурі їх неможливо змусити замовкнути. В основі блокчейна лежать дві структури даних: покажчики (pointers) і звʼязані списки (linked lists).

Покажчики

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

Звʼязані списки

Звʼязані списки — одна з найважливіших одиниць у структурах даних, і виглядають вони приблизно так.

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

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

Хеш-покажчик — це покажчик, який містить хеш попереднього блоку.

Хешування — це процес, який бере дані будь-якої довжини та за певною функцією видає результат однакової довжини незалежно від вмісту даних. У випадку Bitcoin транзакція переказу береться як дані та обробляється алгоритмом SHA-256, який видає результат фіксованої довжини. Незалежно від довжини введених даних алгоритм SHA-256 завжди видає результат довжиною 256 бітів.

Блокчейн у найпростішій формі — це звʼязаний список, як показано нижче.

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

Припустімо на мить, що зловмисник хоче атакувати блок 3 і змінити дані в ньому. Через властивості хеш-функції найменша зміна даних відобразиться на результаті неймовірно великою різницею. Найменша зміна даних у блоці 3 змінить хеш-результат, збережений у блоці 2, зміна в блоці 2 вплине на хеш-результат у блоці 1 — тож довелося б змінити весь ланцюг, що неможливо. Саме цей метод робить блокчейни незламними.

Що таке майнінг?

Майнінг — це процес, необхідний для створення нових bitcoin. Майнінг Bitcoin працює за принципом Proof of Work (POW). Простими словами: розвʼязати задачу має бути дуже складно, але щойно ви її розвʼязали, правильність вашого розвʼязку має дуже легко доводитися.

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

До Bitcoin створювалися різні цифрові валюти, але якщо в цифровому середовищі будується децентралізована мережа «від людини до людини», найбільшою проблемою стає логічна задача, відома як задача візантійських генералів. Оскільки Накамото зумів подолати цю проблему в bitcoin за допомогою POW, bitcoin зміг розпочати своє життя і впевнено його продовжує.

Задача візантійських генералів

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

Генерали розташовані дуже далеко один від одного, тому керувати облогою з єдиного центру неможливо.

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

Поки війська оточують місто, кожна армія передає наказ від армії праворуч до армії ліворуч, і звʼязок підтримується саме так. Але проблема в тому, що коли надходить наказ «атакуємо в середу», якась армія може бути не готова і надіслати у відповідь повідомлення «ні, атакуємо в пʼятницю». Або ж солдата, який несе повідомлення, може захопити ворог, або вміст повідомлення можуть змінити. У такому ненадійному середовищі будь-яка атака провалиться, якщо не досягти повної координації.

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

Сатоші Накамото зумів подолати цю логічну проблему, запровадивши протокол proof-of-work. Погляньмо, як він працює:

Коли армія, що веде облогу, хоче передати армії ліворуч повідомлення «атакуємо в понеділок», їй потрібно виконати такі кроки;

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

Потім текст повідомлення з призначеним значенням nonce пропускається через хеш-функцію й отримується результат. У нашій уявній атаці припустімо, що командири домовилися безпечно обмінюватися лише тими результатами хеш-функції, перші 5 цифр яких — нулі.

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

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

Утім, хоча це й малоймовірно, будь-яка хеш-функція може давати колізії. Теоретично, коли A і B — два окремі вхідні значення, імовірність H(A) = H(B) має бути нульовою, але в реальному застосуванні жодна хеш-функція не є повністю захищеною від колізій.

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

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

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

А ось завдання генералів, які отримують повідомлення, просте: їм достатньо додати надане їм значення nonce до хеш-результату й порівняти результати. Цей крок — дуже швидкий і простий процес. Ця ідея і є механізмом роботи принципу proof-of-work.

Пошук значення nonce для відповідного хешу вимагає величезної обчислювальної потужності та часу.

Натомість перевірка результатів і виявлення зловмисних намірів забирає зовсім мало часу.

Саме так майнери реалізують протокол proof-of-work у майнінгу Bitcoin. Вони використовують свою обчислювальну потужність, щоб розвʼязати криптографічну задачу перед собою та створити наступний блок. У блокчейні Bitcoin блоки створюються кожні 10 хвилин.

Як відбуваються перекази в мережі Bitcoin?

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

Є дві речі, які варто знати й на які варто звертати увагу;

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

Якщо поглянути на фіатні валюти, ми не знаємо історії жодної банкноти, що потрапляє нам до рук, і не відстежуємо її. Практичного способу зробити це немає. А от кожна транзакція переказу bitcoin записується в мережі bitcoin.

З огляду на цю інформацію розгляньмо переказ bitcoin між Джоном і Дейвом. Цей переказ має дві частини: вхід і вихід (input-output).

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

Джону потрібно зібрати bitcoin із раніше отриманих переказів із назвами TR(0), TR(1) і TR(2), створити новий переказ із назвою TR(INPUT) і надіслати його Дейву. Тут TR(INPUT) стає вхідними даними для нового переказу.

Приблизно так виглядає переказ bitcoin за входом (Input).

Вихідні дані просто міститимуть кількість bitcoin, яку Дейв має отримати після нового переказу, і решту, яка потім повертається Джону як значення TR(INPUT) для його наступного переказу.

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

Умови, яким мають відповідати перекази:

TR(INPUT) >TR(OUTPUT). Вхідний переказ завжди має бути більшим за вихідний. У кожному переказі різниця між входом і виходом (вихід + решта) сплачується майнерам як комісія. Отже, комісія майнера = TR(INPUT)-(TR(OUTPUT)+РЕШТА).

На вхідній стороні має виконуватися TR(0)+TR(1)+TR(2)=TR(INPUT). Інакше кажучи, Джон повинен мати достатньо bitcoin, щоб надіслати Дейву. Якщо в нього недостатньо bitcoin для проведення транзакції, майнери відхиляють переказ.

Тепер Дейв має довести, що він власник надісланих йому bitcoin. Джон зашифрував свій переказ bitcoin публічним ключем Дейва. Відкрити цей шифр Дейв може лише своїм приватним ключем.

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

Вхідні дані (включно з даними підпису) та вихідні дані додаються разом і пропускаються через хеш-алгоритм SHA-256. Результат роботи цього алгоритму й називається переказом.

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

Це породило принцип replace-by-fee. Працює він просто: навіть якщо Джон надіслав Дейву 5 BTC, переказ ніколи не потрапляє до блоку й залишається в очікуванні, бо комісія майнера була занизькою. Скасувати чи відкликати цю транзакцію неможливо, адже витрачені bitcoin не можна повернути. Але якщо Джон здійснить переказ на ту саму адресу на ту саму кількість BTC із вищою комісією, старий переказ вважатиметься недійсним, а новий чекатиме на обробку.

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

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

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

Сатоші не забув сховати послання в генезис-блоці, який він добув і вписав жорстким кодом. Зазначивши дату 3 січня 2009 року, він додав заголовок із британської Times того дня про банки, відповідальні за світову економічну кризу: «Minister is on the verge of second bailout for banks» («Міністр на порозі другого порятунку банків»). Цими словами він, імовірно, кепкує з федеральної резервної банківської системи. Невідомо, навіщо Сатоші створив цю адресу в стартовому блоці, кошти з якої неможливо витратити. Наразі на цю адресу анонімно надіслано 16 BTC, а отже, загальна пропозиція у 21 мільйон bitcoin насправді ніколи не буде досягнута.

Bitcoin знадобилося лише 9 років, щоб сягнути рівнів, які лякають центральні банки світу, — і попереду в нього ще довгий шлях.

як працює bitcoin блокчейн майнінг bitcoin proof of work сатоші накамото криптовалюти