April 21, 2024

Блокчейн за сім кроків: як працює Майнінг і як обробляються транзакції

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

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

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

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

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

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

</ P>

***

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

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

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

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

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

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

</ P>

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

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

***

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

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

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

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

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

&nbsp;

</ P>