Поділитись:

Блокчейн зсередини: як влаштований біткоїн

Неділя, 18 лютого 2018, 19:40

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

Основи: навіщо нам блокчейн?

Блокчейн був описаний в статті Сатоши Накамото "Bitcoin: A Peer-to-Peer Electronic Cash System". Там всього на восьми сторінках автор описав основи криптовалюти біткоїн, в основі якої лежав саме алгоритм блокчейна.

Блокчейн з'явився разом з біткоїном, але може використовуватися незалежно від нього і навіть модифікуватися. Будь-хто може зробити свій блокчейн хоч у себе на ноутбуці.

Список, який не можна змінити

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

Розберемо на прикладі.

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

Тепер Олег завжди може підійти до дошки і переконатися, що Макс все повернув, а ось Іван не віддав вже 700 рублів. Одного разу Олег запрошує Івана випити до себе додому. Поки Олег відходить у вбиральню, Іван стирає запис "Зайняв Івану 200 рублів" і вписує замість неї "Іван віддав 500 рублів".

Довіряючи своєму списку, Олег забуває про борг і втрачає 700 рублів. Він вирішує якось з цим боротися.

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

Додавання крапки наприкінці змінило абсолютно підсумковий хеш – цим можна скористатися.

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

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

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

Так в Олега з'являється особистий зв'язний список.

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

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

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

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

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

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

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

Централізація довіри

Ідея вести список "хто кому позичав" сподобалася нашим друзям. Вони теж не хочуть запам'ятовувати, хто за кого заплатив у барі і скільки ще залишився винен – ​​все записано на стіні. Ви обговорили ідею і вирішили, що тепер вам потрібен єдиний список на всіх.

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

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

Децентралізація: ніхто не довіряє нікому

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

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

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

Транзакції

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

Наші записи типу "Зайняв Івану 500 рублів" – теж транзакції. Але у нас немає банку, який авторизує автора транзакцій. Як нам перевірити, що Іван нишком не додав запис "Макс винен Олегу 100 500 рублів"?

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

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

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

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

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

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

Відсутність поняття "балансу"

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

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

Раз у нас немає балансу – це повинні доводити ви. Тому в транзакцію блокчейна входить не тільки ваш підпис і скільки ви хочете витратити, але і посилання на попередні транзакції, в яких ви отримали потрібну кількість грошей. Тобто, якщо ви хочете витратити 400 рублів, ви пробігаєте по всій своїй історії доходів і витрат, і прикріплюєте до своєї транзакції ті доходи, де вам дали 100 + 250 + 50 рублів, тим самим доводячи, що у вас є ці 400 рублів.

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

Такі прикріплені до транзакції доходи в блокчейні називаються інпут (input), а всі отримувачі грошей – аутпут (output). Сума всіх інпут рідко буває такою, скільки ви хочете перевести за раз – тому один з аутпут найчастіше будете ви самі. Іншими словами, транзакція в блокчейні маєвигляд "мені дали 3 і 2 BTC, я хочу з них перевести 4 BTC, а 1 BTC, що залишився, повернути собі назад".

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

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

Проблема подвійної витрати

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

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

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

Як же переконатися, що одна транзакція була раніше від іншої?

Відповідь проста: це неможливо. Немає способу підтвердити час транзакції в децентралізованій мережі. І ось в рішенні цієї проблеми і полягає третя важлива ідея блокчейна, яку вигадав Сатоши, і яка, як не дивно, прописана прямо в назві – блоки.

Блоки - основа блокчейна

Кожен працюючий комп'ютер в мережі вибирає із загального пулу будь-які транзакції, які йому подобаються. Зазвичай просто за найвищою комісією, яку він може на ній заробити. Так він набирає собі транзакції, поки їх сумарний розмір не досягне зазначеного ліміту. У біткоїні цей ліміт на розмір блоку дорівнює 1 Мб (після SegWit2x буде 2 Мб), а в біткоїні-куші - 8 Мб.

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

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

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

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

Решта повинні перевірити, що блок побудований за всіма правилами і що ми не додали туди зайвих транзакцій, а потім додати до себе в ланцюжки. Тепер всі транзакції в ньому підтверджені, блокчейн збільшений на один блок, і все йде добре. Чи не так?

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

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

Як в школі, коли всі вирішували складну контрольну, дуже рідко бувало так, що навіть відмінники здавали відповіді абсолютно одночасно.

Але якщо для людини складне завдання – це спланувати відпустку, щоб і на травневі свята потрапити, і квитки на море недорого придбати, то для комп'ютера – це додати в кінець блоку таке число (nonce), щоб в результаті хеш SHA-256 для всього блоку починався, скажімо, на 10 нулів. Це і є те завдання, яке треба вирішити, щоб додати блок в мережу Bitcoin. Для інших мереж завдання можуть відрізнятися.

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

Майнінг

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

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

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

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

За знаходження відповіді комп'ютер (за даними на 2017 рік) отримує 12.5 BTC - це сума винагороди, яка генерується системою біткоїнів "з повітря" і зменшується кожні чотири роки. Технічно це означає, що кожен майнер завжди додає в свій блок ще одну транзакцію - "створити 12.5 BTC і відправити їх на мій гаманець". Коли ви чуєте "кількість біткоїнів в світі обмежена 21 млн, зараз намайнили вже 16 млн" - це і є такі винагороди, що генеруються мережею.

Будь-який блокчейн існує, поки існує його майнер.

Саме майнер додають транзакції в блокчейн. Тож якщо хтось розповідає вам, що він "зробить блокчейн для ***", перше питання, на який він повинен відповісти: хто і навіщо буде майнити на ньому. Найчастіше правильну відповідь "будуть всі, тому що за майнінг ми даємо наші коїни, які будуть рости, і майнеру це вигідно". Але це може бути застосовано не для всіх проектів. Наприклад, МОЗ завтра створить свій закритий блокчейн для лікарів (а вони хочуть), хто його буде майнити? Терапевти у вихідні?

Але який зиск майнеру буде потім, коли винагороди зникнуть або стануть мізерними?

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

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

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

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

Якщо нагорода в 12.5 BTC вручається лише раз в 10 хвилин і тільки одному, хто знайшов блок, виходить, мені потрібно даремно палити відеокарти кілька років, сподіваючись, що одного разу мені впаде $ 40 000 (за поточним курсом)?

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

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

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

Значить ми так і будемо спалювати тисячі відеокарт даремно і ніякого виходу немає?

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

Але дехто починає робити блокчейни з іншими видами майнінгу. Зараз друга за популярністю концепція - це Proof-of-Stake (доказ частки володіння). У такому вигляді майнінгу, чим більше "коїнів" на рахунку в учасника мережі, тим більше ймовірність вставити в блокчейн свій блок.

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

Блокчейн

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

Тепер у нас є два валідні блоки і знову виникає проблема, кого вважати першим. Як поведе себе мережа в такому випадку?

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

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

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

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

Через це були придумані три правила безпеки хвоста блокчейна (end of chain insecurity):

1. Винагородами за майнінг можна користуватися тільки через ще 20 підтверджених блоків після отримання. Для біткоїнів це близько трьох годин.

2. Якщо вам переслали біткоїни, використовувати їх в якості інпут в нових транзакціях можна тільки через 1-5 блоків.

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

Намагаємося обдурити блокчейн

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

Припустимо, у вас є найпотужніший комп'ютер на Землі. Датацентри Google і Amazon разом узяті – у вашому розпорядженні, і ви намагаєтеся прорахувати такий ланцюжок, який стане найдовшим в мережі блокчейн.

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

Якщо ваша обчислювальна потужність буде складати більше 50 % від потужності всіх учасників мережі, то з імовірністю 50 % ви зможете побудувати більш довгий ланцюжок швидше за всіх інших разом узятих. Це теоретично можливий спосіб обдурити блокчейн, прорахувавши більш довгий ланцюжок транзакцій. Тоді всі транзакції справжньої мережі будуть вважатися неправильними, а ви зберете всі винагороди і почнете нову віху в історії криптовалюти, яка називається "поділ блокчейна". Одного разу через бага в коді так було з Ethereum.

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

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

На цій ймовірності тримається і блокчейн. Чим більше учасників-майнерів – тим більша безпека і довіра мережі. Тому коли в Китаї накривають чергову велику майнінг-ферму, курс і обвалюється. Всі бояться, що десь у світі сидів злий геній, який вже зібрав пул майнерів на ~ 49% потужності.

Висновок:

Блокчейн – не строго визначений набір алгоритмів. Це структура побудови непідробної мережі між учасниками, де ніхто нікому не може довіряти. Під час прочитання, напевно, у вас не разу проскакувала думка, що "можна ж ось так переробити і буде ще корисніше". Це означає, що ви зрозуміли блокчейн, вітаємо!

Надрукувати
мітки:
коментарів
12 січня 2024
03 січня 2024
23 жовтня 2023
03 жовтня 2023
18 вересня 2023
12 липня 2023
25 лютого 2023
06 грудня 2022
17 листопада 2022
15 листопада 2022