Home » Майнінг Новачкам Основи » Майнінг і підтвердження транзакцій

Майнінг і підтвердження транзакцій

bit_coin_block_chain

Процес обробки транзакцій в блокчейні:

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

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

3. Майнери, що знаходяться в мережі (іноді звані вузлами або нодами, але це не зовсім те ж саме, що і майнери!), вибирають транзакції з пулів і збирають з них новий “блок”. Блок, по суті, це набір транзакцій (на цей момент часу все ще непідтверджених транзакцій), плюс додаткові метадані. Кожен майнер збирає свій власний блок транзакцій. Одні і ті ж транзакції можуть бути додані різними майнер в свої блоки.

Приклад: розглянемо двох майнерів, майнера А і майнера В. Обидва цих майнери можуть вирішити включити якусь транзакцію Х в свої блоки. У кожному блокчейні встановлені свої обмеження максимального розміру блоку. У BITCOIN-блокчейні максимальний розмір блоку становить 1 мегабайт (Мб) даних. Перш ніж додати транзакцію в блок, майнерам необхідно перевірити чи відповідає транзакція вимогам до виконання, відповідно до історії транзакцій в блокчейні. Якщо на балансі гаманця відправника знаходиться достатньо коштів згідно існуючої історії транзакцій блокчейна, транзакція вважається дійсною і може бути додана в блок. Якщо власник біткойнів захоче прискорити процес обробки своєї транзакції, він може запропонувати більш високу нагороду за майнінг. В цьому випадку, як правило, майнер присвоять більш високий пріоритет цієї транзакції в порівнянні з іншими, в зв’язку з можливістю отримати більшу винагороду за процес майнінгу.

4. Вибираючи транзакції і додаючи їх в свій блок, майнери тим самим створюють блок транзакцій. Для того, щоб блок в подальшому міг бути доданий в блокчейн (що означає, що всі вузли в блокчейні зареєструють транзакції, що знаходяться в цьому блоці), в першу чергу блоку необхідний підпис, так званий “доказ виконання роботи” (англ. Proof-of-work або PoW). Цей підпис створюється шляхом вирішення дуже складної математичної задачі, яка є унікальною для кожного блоку транзакцій. Різним блокам відповідають різні математичні завдання, так що кожен майнер буде працювати над вирішенням своєї задачі, унікальною для сформованого ним блоку. Всі завдання однаково важкі для вирішення. При вирішенні такої математичної проблеми витрачаються великі обчислювальні потужності (а, відповідно, і велика кількість електроенергії). Ви можете порівняти це з виконанням обчислень на калькуляторі, тільки в даному випадку все набагато складніше і робиться на персональному комп’ютері. Цей процес називається майнінгом.

Майнінг, також відомий як хешування (алгоритм консенсусу “доказ виконання роботи” / Proof of Work).

Що таке алгоритми консенсусу, Proof-of-Work (PoW), Proof-of-Stake (PoS)
Чи можна жити з майнінг-фермою?
Атомарні свопи: що це і як це працює?
Blockchain – що це таке простими словами

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

Що таке хеш-функція? Говорячи простою мовою, хеш-функція представляє з себе математичну задачу, яку дуже складно вирішити, але при цьому отриману відповідь дуже просто перевірити.

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

Тепер візьміть до уваги, що дані всередині блоку – це вхідні дані для хешування (той самий рядок даних). В результаті обробки цих вхідних даних хеш-функцією ми отримуємо хеш-суму (32-символьний рядок). Правилами блокчейна біткойнів обумовлюється, що тільки ті блоки можуть бути додані в блокчейн, чиї підписи (хеш-сума) починаються з певної кількості нулів. Однак, згенерований вихідний рядок є завжди випадковим для різних рядків даних на вході. А що якщо рядок даних блоку в результаті обробки хеш-функцією не дає на виході підпис (хеш-суму), що починається з тієї певної кількості нулів? Так це і є причиною того, що майнерам доводиться багаторазово змінювати якийсь фрагмент даних свого блоку, так званий “нонс” (англ. nonce). Кожен раз, коли майнер змінює нонс, це тягне за собою незначну зміну компонування даних блоку. А коли змінюється структура даних всередині блоку (тобто, його вхідні дані), також змінюється і його підпис (або його вихідні дані). Отже, кожен раз, коли змінюється нонс блоку, цей блок отримує новий випадковий підпис.

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

kheshuvannya

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

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

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

6. Інші майнери тепер перевіряють легітимність підпису, беручи рядок даних трансльованого блоку і хешують його, щоб перевірити, чи дійсно отримана хеш-сума в результаті призводить до включеного в блок підпису з правильною кількістю нулів (важко вирішити, але легко перевірити). Якщо підпис дійсний, то всі інші майнери підтвердять його достовірність і прийдуть до згоди, що цей блок може бути доданий в блокчейн (тобто вони досягнуть консенсусу, кажучи іншими словами – всі погодяться один з одним – звідси і термін алгоритм консенсусу. З цього ж виникає термін “доказ виконання роботи/proof-of-work”. Підпис якраз і є необхідним “доказом”, що робота була проведена (були витрачені обчислювальні потужності). Тепер блок може бути доданий в блокчейн і розісланий всім іншим вузлам в мережі. Ті, в свою чергу, приймуть блок і збережуть його, додавши до своїх даних транзакцій, за умови, що всі транзакції всередині цього блоку можуть бути виконані відповідно до історії, записаної в блокчейні.

7. Після того, як блок був доданий в ланцюжок, всі інші блоки, які будуть додані після нього, будуть вважатися “підтвердженням” для цього блоку. Наприклад, якщо моя транзакція включена в блок 502, а довжина блокчейна становить 507 блоків, це означає, що моя транзакція має 5 підтверджень (507-502). Це називається підтвердженням, тому що кожен раз, коли новий блок додається після вашого, блокчейн знову досягає консенсусу з приводу всієї історії скоєних транзакцій, включаючи вашу транзакцію і ваш блок. Можна також сказати, що на даний момент блокчейн підтвердив вашу транзакцію 5 разів. На це ж спирається і Etherscan, коли показує вам докладні деталі вашої транзакції. Чим більше підтверджень буде у вашій транзакції (іншими словами – чим глибше в ланцюжку знаходиться ваш блок), тим складніше буде для зловмисників підмінити її. Після того, як новий блок доданий в блокчейн, всім майнерам потрібно починати заново з кроку 3 і сформувати новий блок транзакцій. Майнери не можуть продовжувати (насправді можуть, але це дещо виходить за рамки теми, обговорюваної в даній статті) майнити той же самий блок, іншими словами – вирішувати задачу  того ж самого блоку, над яким вони працювали раніше з двох причин:

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

 



Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *