Розкриття таємниці майнінгу

ПочатківецьJul 15, 2024
Ця стаття надає докладне введення до процесу "майнінгу" в блокчейні. Аналогія з традиційною гірничою діяльністю пояснює основну концепцію цифрового майнінгу, який включає в себе використання обчислювальних ресурсів для вирішення математичних задач з метою підтвердження транзакцій та випуску нової валюти.
Розкриття таємниці майнінгу

forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’

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

швидкий огляд вмісту з “звичайного блокчейну 1: вступ до біткоїна (піонер блокчейн-революції та викликач суверенної валюти),” де сатоші накамото розробив валютну систему біткоїна для зв'язку винагород за ведення обліку з емісією валюти. Цей підхід дозволяє автоматизувати емісію валюти через процес ведення обліку, вирішуючи проблему емісії валюти, а також підтримує обліковців у активному участі.

1. що таке майнінг?

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

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

2. чому необхідний майнінг?

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

  1. вибір бухгалтерів: потрібна стратегія для вибору реальних бухгалтерів з численних кандидатів. результат майнінгу використовується як основа для цього вибору, забезпечуючи визнання кожної транзакції всіма учасниками, досягаючи консенсусу в мережі.
  2. підтвердження транзакції: кожна транзакція з біткоїном потребує підтвердження від гірників в мережі. Цей процес підтверджує валідність транзакції, включаючи:
    • забезпечення відповідності формату та розміру транзакції специфікаціям.
    • перевірка правильності підпису кожної транзакції, щоб забезпечити, що вона була ініційована користувачем, який володіє відповідним приватним ключем.
    • перевірка того, що вхідна сума перевищує вихідну суму (з частини суми, взятої як комісія), забезпечення того, що токени, використані для оплати, не були подвійно витрачені.
    • підтверджує, що транзакція раніше не була включена в блок.
  3. емісія нової валюти: майнінг також є способом введення нових біткоїнів в обіг. Коли майнер успішно видобуває новий блок, він отримує певну кількість біткоїнів у винагороду. Цей механізм винагороди не лише стимулює людей брати участь у майнінгу, але й слугує методом емісії біткоїнів. Цей метод емісії валюти забезпечує стабільний та контрольований зріст обігу валюти, допомагаючи управляти інфляцією.
  4. сприяння участі: механізм винагороди мотивує більше людей брати участь у підтримці валютної системи, сприяючи її постійному та міцному розвитку.
  5. поліпшення безпеки мережі та децентралізація: винагороди від майнінгу призводять до великої кількості майнерів, що призводить до розподіленої обчислювальної потужності. ця децентралізація гарантує, що жодна окрема сутність не може контролювати 50% обчислювальної потужності, тим самим підвищуючи прозорість і безпеку системи. дотримання принципу найбільшого ланцюжка подальше покращує безпеку системи.

3. чому майнери готові брати участь в майнінгу?

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

  • Винагороди за блок (нова випущена валюта): Валютна система автоматично видає нову валюту, яка повністю надходить майнеру. Наприклад, у системі Bitcoin наразі майнери отримують 3,125 біткойнів за кожен блок, який вони упаковують. Враховуючи, що кожен біткойн оцінюється приблизно в 65 000 доларів США, упаковка одного блоку може принести понад 200 000 доларів США, приблизно 1,47 мільйона юанів.
  • плата за транзакції, сплачена користувачами: через обмежену можливість блоку утримувати записи транзакцій, деякі користувачі сплачують плату за транзакції, щоб заохотити майнерів віддати перевагу їх транзакціям для швидшого підтвердження. при виборі транзакцій з пулу для включення до блоку майнери тенденційно обирають ті з вищими комісіями. блок може містити тисячі транзакцій, і всі комісії з цих транзакцій йдуть на майнер, що представляє собою ще одне значне джерело доходу. зі зростанням кількості людей, що використовують біткоїн для транзакцій, конкуренція за включення в блоки посилюється, що призводить до зростання комісій, які користувачі готові сплатити.

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

підказки

біткойн генерує новий блок приблизно кожні 10 хвилин. Спочатку кожен новий блок створював 50 біткоїнів. Ця нагорода зменшується вдвічі кожні чотири роки, і до цього часу відбулося чотири таких події зменшення. Наразі кожен блок генерує 3,125 біткоїнів, а останнє зменшення відбулося в квітні 2024 року. Наступне зменшення очікується приблизно в 2028 році. До 2141 року біткойн досягне свого ліміту випуску.

плата за транзакцію впливає не тільки на попит і пропозицію, але й на розмір транзакції, оскільки плата пропорційна простору, який транзакція займає в блоку.

4. як брати участь у майнінгу

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

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

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

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

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

5. конкрети задачі з майнінгу

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

Головоломка майнінгу не є традиційною математичною задачею, а передбачає знаходження випадкового числа, відомого як нон. Цей nonce, об'єднаний з даними в блоці та оброблений через хеш-функцію, повинен дати хеш-значення, яке відповідає певній умові. Як правило, ця умова вимагає, щоб хеш-значення було меншим за цільове значення (або, що еквівалентно, щоб перші n бітів хеш-значення дорівнювали нулю). Рівняння виглядає наступним чином: hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target

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

наприклад, значення хешу sha-256 з першими 30 бітами, які є нулями: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110

перетворення цього в шістнадцятковий формат призводить до значення, яке починається з семи нулів: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90

для спрощення, ймовірність знайти хеш з першими n бітами, які дорівнюють нулю, становить 12n\frac{1}{2^n}2n1​. чим більше n, тим більше бітів дорівнюють нулю, і чим менше ймовірність:

  • n=10n = 10n=10: 1 в 1,024
  • n=20n = 20n=20: 1 у 1,048,576
  • n=30n = 30n=30: 1 у 1,073,741,824
  • n = 40n = 40n = 40: 1 в 1 099 511 627 776
  • n=50n = 50n=50: 1 в 1,125,899,906,842,624

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

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

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

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

6. імітація коду алгоритму майнінгу

наступний код моделює процес видобутку. він починається з рядка даних заголовка блоку “geekbang” та інкрементно шукає зі значенням nonce 10,000, поки не знайде nonce, який відповідає вказаній умові.

ось скрипт на python, який демонструє процес майнінгу:

import hashlibdef main():    base_string = "geekbang"    nonce = 10000    count = 0    while true:        target_string = base_string + str(nonce)        pow_hash = hashlib.sha256(target_string.encode()).hexdigest()        count += 1        if pow_hash.startswith("0000"):  # first 4 hex digits are 0, equivalent to the first 16 bits being 0            print("hash:", pow_hash)            print("nonce:", nonce, "scan times:", count)            break        nonce += 1if __name__ == '__main__':    main()

коли вимога полягає в тому, щоб перші 4 шістнадцяткові цифри результату хешу були нульовими (еквівалентно першим 16 бітам, що дорівнюють нулю), кількість обчислень становить приблизно 58 000. якщо вимога полягає в тому, щоб перші 5 цифр були нульовими, кількість обчислень збільшується до 1,23 мільйона. коли вимога полягає в тому, щоб перші 7 цифр були нульовими, кількість обчислень досягає 160 мільйонів. це демонструє, що кожен додатковий нуль в префіксі хешу збільшує обчислення приблизно в 16 разів.

ось результати для різних цільових умов:

перші 4 шістнадцяткові цифри дорівнюють нулю (16 біт):

імпорт hashlib

def main():

base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" Час сканування:  https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1

якщоім'я == ‘головний‘:

main()

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

7. динамічне налаштування складності

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

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

8. процес виконання алгоритму майнінгу

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

процес виконання основного алгоритму майнінгу біткоїна виглядає наступним чином:

  1. вибір транзакцій: виберіть кілька транзакцій з пам'ятів (зазвичай з пріоритетом тих з вищими комісіями). автоматично генерується спеціальна транзакція (часто називається транзакцією монети), де одержувачем є майнер, а сума транзакції - це блокова винагорода плюс всі обрані комісійні внески. помістіть цю спеціальну транзакцію в початок обраних транзакцій, щоб сформувати набір транзакцій для блоку, що має бути упакований.
  2. побудова дерева Меркла: побудуйте дерево хешу Меркла з набору транзакцій. дерево Меркла - це бінарне дерево, де кожен листок зберігає хеш транзакції, унікально ідентифікуючи й індексуючи її. кожен верхній вузол зберігає комбінований хеш своїх дочірніх вузлів, що завершується в кореневому вузлі. кореневий вузол унікально ідентифікує дерево Меркла і, за розширенням, всі транзакції.
  3. формування заголовка блоку: скласти заголовок блоку зі значення кореня Меркле, nonce, версії блоку, хешу попереднього блоку, мітки часу, цілі складності та nonce. розмір заголовка блоку становить 80 байтів.
  4. Хешування заголовка блоку: Постійно змінюйте значення nonce у заголовку блоку та виконуйте подвійний хеш SHA-256 для вмісту заголовка блоку (тобто SHA256(block_header))). Порівняйте отриманий хеш з поточним цільовим значенням мережі. Якщо результат менший за цільове значення (що вказує на те, що перші n бітів дорівнюють нулю), головоломка розв'язана, а доказ роботи завершено.
  5. трансляція блоку: відправити новий замайнений блок сусіднім вузлам, повідомляючи їх, що блок успішно замайнений.
  6. перевірка та поширення: після отримання нового блоку інші вузли виконують подвійний хеш на заголовку блоку, щоб отримати хеш блоку. вони перевіряють, що перші n бітів хешу блоку дорівнюють нулю, підтверджують блок, припиняють обчислення для цього блоку та розповсюджують його до сусідніх вузлів.

розмір кожного поля в заголовку блоку такий:

https://time.geekbang.org/column/article/5963

alt="">

структура дерева Меркля виглядає наступним чином:

大后端私房菜]. alt="">

9. контроверсії в майнінгу

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

Є дві основні можливості оптимізувати це витрачання ресурсів:

  1. перехід до менш ресурсоємних алгоритмів: наприклад, ethereum перейшов від алгоритму pow до алгоритму proof of stake (pos), що значно зменшує ресурсне відходження.
  2. використання вільних електричних ресурсів: майнінгові вузли експериментують з використанням відновлювальних джерел енергії, таких як вітроенергія, для майнінгових операцій. ще одним значним розвитком є використання інакше втраченого природного газу. крім того, деякі установи досліджують способи переробки надлишкового тепла, що генерується при майнінгу біткоїнів.

10. питань

Яка вартість майнінгу? Здається, що це марнотратство ресурсів і безглузде для суспільства.

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

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

чи зменшаться прибутки від майнінгу до такої міри, що вони стануть нижче витрат, що змусить майнерів припинити майнінг і зупинити транзакції?

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

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

Чи будуть витрати на транзакції компенсувати витрати на майнінг?

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

Що станеться, якщо декілька шахтарів одночасно вирішать головоломку?

Чи ділять кілька майнерів винагороду за майнінг, якщо вони одночасно транслюють свої нові блоки?

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

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

приклад:

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

чому вузли з більш ніж 50% потужності хешу не обманюють?

що таке атака 51% і чому супервузли не обманюють?

Атака 51% відбувається, коли одна організація або група контролює понад 50% обчислювальної потужності мережі. Ось чому суперноди зазвичай не обманюють:

  1. практично неможливо: володіння 51% загальної мережевої хеш-потужності надзвичайно малоймовірно через величезний масштаб і децентралізацію основних криптовалют, таких як Bitcoin.
  2. Перевірка мережі: Навіть якщо супервузол намагається обдурити, всі вузли перевіряють кожен блок незалежно. Недійсні транзакції або спроби подвійних витрат відхиляються мережею, що робить зусилля супервузла марними.
  3. Репутація та економічні стимули: суперноди отримують більше від підтримки цілісності блокчейну, ніж від атаки на нього. Успішні атаки можуть знецінити криптовалюту, завдавши шкоди інвестиціям зловмисника.
  4. типи атак:
    • подвійне витрачання: спроба витратити одні й ті ж монети двічі.
    • блокування транзакцій: уникнення включення певних транзакцій до блоків.
    • себишний майнінг: спроба отримати більше винагороди за майнінг шляхом вибіркового розкриття блоків.
    • маніпуляція часовим позначенням: зміна часових позначень блоків для отримання переваги в майнінгу.
    • атака порожнього блоку: майнінг блоків без транзакцій для сповільнення мережі.

чому блокчейн передбачає відсутність фіксованих бухгалтерів для запобігання шахрайським транзакціям

Як блокчейн запобігає навмисним збоям і шахрайським транзакціям?

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

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

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

Що таке пул транзакцій (Mempool)?

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

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

Джерела доходу в системі Bitcoin

хто бере участь і як вони заробляють: окрім користувачів, три основні учасники системи біткойну - майнери, розробники та оператори вузлів.

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

чому зросли ціни на GPU? чому майнінгові GPU небажані?

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

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

чи потрібно шахтарям зберігати всі дані реєстру?

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

що станеться, коли досягнуто ліміт постачання біткоїну?

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

висота блоку буде продовжувати зростати: навіть після досягнення максимального обсягу в 21 мільйон біткоїнів, висота блоку (загальна кількість блоків) буде продовжувати зростати, поки шахтарі будуть готові добувати та пакувати транзакції в нові блоки. висота блоку не обмежена обмеженням обсягу біткоїнів.

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

як винагороджуються майнери?

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

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

Як розраховується дохід майнера?

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

процес отримання винагороди: коли майнер або пул успішно добуває блок і це підтверджується мережею, вони отримують винагороду за блок та комісійні. Це виконується за допомогою транзакції coinbase, яка перетворює комісійні та винагороди на невикористані вихідні транзакції (UTXO), нараховані на рахунок майнера.

чи блоки створюються послідовно чи паралельно?

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

упаковка транзакцій

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

використання простору блоку

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

Майнінг без транзакцій

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

обробка вілочок блокчейну

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

запобігання подвійного витрачання

рішення подвійного витрати:

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

Детальна обробка подвійних витрат

процес перевірки:

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

як користувачі контролюють суму плати за транзакції, яку вони платять?

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

комісія за транзакцію = загальний вхід −загальний вихід −зміна

Користувачі встановлюють комісію за транзакцію, регулюючи суму введення, суму виходу та суму зміни.

процес майнінгу криптовалюти

  1. підготувати гірниче обладнання: налаштувати гірничий апарат або високопродуктивні обчислювальні пристрої.
  2. забезпечте доступ в інтернет: підключіть гірниче устаткування до мережі.
  3. Завантажити цифровий гаманець: Отримайте цифровий гаманець і згенеруйте свої приватні та публічні ключі.
  4. почати майнінг: натисніть кнопку майнінгу в гаманці, щоб розпочати майнінг.

Майнінг в пулі

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

що таке самозацікавлений майнінг?

Егоїстичний майнінг: Егоїстичний майнінг – це стратегія, коли майнер (або майнінг-пул) знаходить новий блок, але не транслює його відразу. Замість цього вони продовжують майнінг приватно на своєму ланцюжку (hidden chain). Знайшовши додаткові блоки, вони транслюють їх усі відразу. Це може звести нанівець роботу інших майнерів і схилити обчислювальну потужність і винагороду на користь егоїстичного майнера. Біткойн може mitiGate.io вплив егоїстичного майнінгу, покращивши протокол мовлення.

перевірка вузла при отриманні транзакцій та блоків

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

  1. формат транзакції: перевірка правильності структури даних транзакції.
  2. підпис транзакції: перевірка автентичності підпису транзакції.
  3. подвійне витрачання: переконайтеся, що вхід не був раніше витрачений в мемпулі або блокчейні.
  4. Входи та виходи: Переконайтеся, що загальна сума вхідних даних більша або дорівнює загальній кількості вихідних даних.
  5. скриптів транзакції: виконувати та перевіряти скрипти (головним чином у смарт-контрактах).
  6. locktime: перевірте, чи виконується умова блокування (висота блоку або час).
  7. Розмір транзакції та комісії: переконайтеся, що розмір транзакції та комісія є достатніми.

Валідація блоку: Коли вузол-майнер отримує новий блок, він виконує розширену перевірку блоку та його транзакцій:

  1. Валідність транзакції: перевіряйте кожну транзакцію в блоці (ті самі перевірки, що й перевірка транзакції).
  2. перевірки, специфічні для блоку:
    • Розмір блоку: переконайтеся, що розмір блоку знаходиться в допустимих межах.
    • block reward: перевірте, що блокова винагорода (нові намайнені біткоїни та комісії за транзакції) є правильною.
    • Merkle root: обчислити і перевірити кореневий Merkle блока.
    • мітка часу: підтвердіть, що часова мітка блоку знаходиться в межах розумного діапазону.
    • ціль складності: перевірте, що блок відповідає поточній цілі складності.

11. посилання

[1] лекція 12 | глибокий аналіз технології блокчейну (4): доказ роботи (PoW) - глибоке пояснення блокчейну-гікаdisclaimer:

  1. Ця стаття передрукована з[Gate.io навчаннякоманда, і вони оперативно вирішать це.
  2. відмова від відповідальності: погляди та думки, висловлені в цій статті, належать виключно автору і не становлять жодних інвестиційних порад.
  3. переклади статей на інші мови виконуються командою вивчення Gate.io. Якщо не зазначено, заборонено копіювання, поширення або плагіат перекладених статей.

Розкриття таємниці майнінгу

ПочатківецьJul 15, 2024
Ця стаття надає докладне введення до процесу "майнінгу" в блокчейні. Аналогія з традиційною гірничою діяльністю пояснює основну концепцію цифрового майнінгу, який включає в себе використання обчислювальних ресурсів для вирішення математичних задач з метою підтвердження транзакцій та випуску нової валюти.
Розкриття таємниці майнінгу

forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’

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

швидкий огляд вмісту з “звичайного блокчейну 1: вступ до біткоїна (піонер блокчейн-революції та викликач суверенної валюти),” де сатоші накамото розробив валютну систему біткоїна для зв'язку винагород за ведення обліку з емісією валюти. Цей підхід дозволяє автоматизувати емісію валюти через процес ведення обліку, вирішуючи проблему емісії валюти, а також підтримує обліковців у активному участі.

1. що таке майнінг?

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

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

2. чому необхідний майнінг?

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

  1. вибір бухгалтерів: потрібна стратегія для вибору реальних бухгалтерів з численних кандидатів. результат майнінгу використовується як основа для цього вибору, забезпечуючи визнання кожної транзакції всіма учасниками, досягаючи консенсусу в мережі.
  2. підтвердження транзакції: кожна транзакція з біткоїном потребує підтвердження від гірників в мережі. Цей процес підтверджує валідність транзакції, включаючи:
    • забезпечення відповідності формату та розміру транзакції специфікаціям.
    • перевірка правильності підпису кожної транзакції, щоб забезпечити, що вона була ініційована користувачем, який володіє відповідним приватним ключем.
    • перевірка того, що вхідна сума перевищує вихідну суму (з частини суми, взятої як комісія), забезпечення того, що токени, використані для оплати, не були подвійно витрачені.
    • підтверджує, що транзакція раніше не була включена в блок.
  3. емісія нової валюти: майнінг також є способом введення нових біткоїнів в обіг. Коли майнер успішно видобуває новий блок, він отримує певну кількість біткоїнів у винагороду. Цей механізм винагороди не лише стимулює людей брати участь у майнінгу, але й слугує методом емісії біткоїнів. Цей метод емісії валюти забезпечує стабільний та контрольований зріст обігу валюти, допомагаючи управляти інфляцією.
  4. сприяння участі: механізм винагороди мотивує більше людей брати участь у підтримці валютної системи, сприяючи її постійному та міцному розвитку.
  5. поліпшення безпеки мережі та децентралізація: винагороди від майнінгу призводять до великої кількості майнерів, що призводить до розподіленої обчислювальної потужності. ця децентралізація гарантує, що жодна окрема сутність не може контролювати 50% обчислювальної потужності, тим самим підвищуючи прозорість і безпеку системи. дотримання принципу найбільшого ланцюжка подальше покращує безпеку системи.

3. чому майнери готові брати участь в майнінгу?

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

  • Винагороди за блок (нова випущена валюта): Валютна система автоматично видає нову валюту, яка повністю надходить майнеру. Наприклад, у системі Bitcoin наразі майнери отримують 3,125 біткойнів за кожен блок, який вони упаковують. Враховуючи, що кожен біткойн оцінюється приблизно в 65 000 доларів США, упаковка одного блоку може принести понад 200 000 доларів США, приблизно 1,47 мільйона юанів.
  • плата за транзакції, сплачена користувачами: через обмежену можливість блоку утримувати записи транзакцій, деякі користувачі сплачують плату за транзакції, щоб заохотити майнерів віддати перевагу їх транзакціям для швидшого підтвердження. при виборі транзакцій з пулу для включення до блоку майнери тенденційно обирають ті з вищими комісіями. блок може містити тисячі транзакцій, і всі комісії з цих транзакцій йдуть на майнер, що представляє собою ще одне значне джерело доходу. зі зростанням кількості людей, що використовують біткоїн для транзакцій, конкуренція за включення в блоки посилюється, що призводить до зростання комісій, які користувачі готові сплатити.

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

підказки

біткойн генерує новий блок приблизно кожні 10 хвилин. Спочатку кожен новий блок створював 50 біткоїнів. Ця нагорода зменшується вдвічі кожні чотири роки, і до цього часу відбулося чотири таких події зменшення. Наразі кожен блок генерує 3,125 біткоїнів, а останнє зменшення відбулося в квітні 2024 року. Наступне зменшення очікується приблизно в 2028 році. До 2141 року біткойн досягне свого ліміту випуску.

плата за транзакцію впливає не тільки на попит і пропозицію, але й на розмір транзакції, оскільки плата пропорційна простору, який транзакція займає в блоку.

4. як брати участь у майнінгу

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

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

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

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

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

5. конкрети задачі з майнінгу

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

Головоломка майнінгу не є традиційною математичною задачею, а передбачає знаходження випадкового числа, відомого як нон. Цей nonce, об'єднаний з даними в блоці та оброблений через хеш-функцію, повинен дати хеш-значення, яке відповідає певній умові. Як правило, ця умова вимагає, щоб хеш-значення було меншим за цільове значення (або, що еквівалентно, щоб перші n бітів хеш-значення дорівнювали нулю). Рівняння виглядає наступним чином: hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target

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

наприклад, значення хешу sha-256 з першими 30 бітами, які є нулями: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110

перетворення цього в шістнадцятковий формат призводить до значення, яке починається з семи нулів: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90

для спрощення, ймовірність знайти хеш з першими n бітами, які дорівнюють нулю, становить 12n\frac{1}{2^n}2n1​. чим більше n, тим більше бітів дорівнюють нулю, і чим менше ймовірність:

  • n=10n = 10n=10: 1 в 1,024
  • n=20n = 20n=20: 1 у 1,048,576
  • n=30n = 30n=30: 1 у 1,073,741,824
  • n = 40n = 40n = 40: 1 в 1 099 511 627 776
  • n=50n = 50n=50: 1 в 1,125,899,906,842,624

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

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

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

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

6. імітація коду алгоритму майнінгу

наступний код моделює процес видобутку. він починається з рядка даних заголовка блоку “geekbang” та інкрементно шукає зі значенням nonce 10,000, поки не знайде nonce, який відповідає вказаній умові.

ось скрипт на python, який демонструє процес майнінгу:

import hashlibdef main():    base_string = "geekbang"    nonce = 10000    count = 0    while true:        target_string = base_string + str(nonce)        pow_hash = hashlib.sha256(target_string.encode()).hexdigest()        count += 1        if pow_hash.startswith("0000"):  # first 4 hex digits are 0, equivalent to the first 16 bits being 0            print("hash:", pow_hash)            print("nonce:", nonce, "scan times:", count)            break        nonce += 1if __name__ == '__main__':    main()

коли вимога полягає в тому, щоб перші 4 шістнадцяткові цифри результату хешу були нульовими (еквівалентно першим 16 бітам, що дорівнюють нулю), кількість обчислень становить приблизно 58 000. якщо вимога полягає в тому, щоб перші 5 цифр були нульовими, кількість обчислень збільшується до 1,23 мільйона. коли вимога полягає в тому, щоб перші 7 цифр були нульовими, кількість обчислень досягає 160 мільйонів. це демонструє, що кожен додатковий нуль в префіксі хешу збільшує обчислення приблизно в 16 разів.

ось результати для різних цільових умов:

перші 4 шістнадцяткові цифри дорівнюють нулю (16 біт):

імпорт hashlib

def main():

base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # 前4个16进制位是0,相当于前16个比特位是0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" Час сканування:  https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1

якщоім'я == ‘головний‘:

main()

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

7. динамічне налаштування складності

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

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

8. процес виконання алгоритму майнінгу

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

процес виконання основного алгоритму майнінгу біткоїна виглядає наступним чином:

  1. вибір транзакцій: виберіть кілька транзакцій з пам'ятів (зазвичай з пріоритетом тих з вищими комісіями). автоматично генерується спеціальна транзакція (часто називається транзакцією монети), де одержувачем є майнер, а сума транзакції - це блокова винагорода плюс всі обрані комісійні внески. помістіть цю спеціальну транзакцію в початок обраних транзакцій, щоб сформувати набір транзакцій для блоку, що має бути упакований.
  2. побудова дерева Меркла: побудуйте дерево хешу Меркла з набору транзакцій. дерево Меркла - це бінарне дерево, де кожен листок зберігає хеш транзакції, унікально ідентифікуючи й індексуючи її. кожен верхній вузол зберігає комбінований хеш своїх дочірніх вузлів, що завершується в кореневому вузлі. кореневий вузол унікально ідентифікує дерево Меркла і, за розширенням, всі транзакції.
  3. формування заголовка блоку: скласти заголовок блоку зі значення кореня Меркле, nonce, версії блоку, хешу попереднього блоку, мітки часу, цілі складності та nonce. розмір заголовка блоку становить 80 байтів.
  4. Хешування заголовка блоку: Постійно змінюйте значення nonce у заголовку блоку та виконуйте подвійний хеш SHA-256 для вмісту заголовка блоку (тобто SHA256(block_header))). Порівняйте отриманий хеш з поточним цільовим значенням мережі. Якщо результат менший за цільове значення (що вказує на те, що перші n бітів дорівнюють нулю), головоломка розв'язана, а доказ роботи завершено.
  5. трансляція блоку: відправити новий замайнений блок сусіднім вузлам, повідомляючи їх, що блок успішно замайнений.
  6. перевірка та поширення: після отримання нового блоку інші вузли виконують подвійний хеш на заголовку блоку, щоб отримати хеш блоку. вони перевіряють, що перші n бітів хешу блоку дорівнюють нулю, підтверджують блок, припиняють обчислення для цього блоку та розповсюджують його до сусідніх вузлів.

розмір кожного поля в заголовку блоку такий:

https://time.geekbang.org/column/article/5963

alt="">

структура дерева Меркля виглядає наступним чином:

大后端私房菜]. alt="">

9. контроверсії в майнінгу

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

Є дві основні можливості оптимізувати це витрачання ресурсів:

  1. перехід до менш ресурсоємних алгоритмів: наприклад, ethereum перейшов від алгоритму pow до алгоритму proof of stake (pos), що значно зменшує ресурсне відходження.
  2. використання вільних електричних ресурсів: майнінгові вузли експериментують з використанням відновлювальних джерел енергії, таких як вітроенергія, для майнінгових операцій. ще одним значним розвитком є використання інакше втраченого природного газу. крім того, деякі установи досліджують способи переробки надлишкового тепла, що генерується при майнінгу біткоїнів.

10. питань

Яка вартість майнінгу? Здається, що це марнотратство ресурсів і безглузде для суспільства.

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

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

чи зменшаться прибутки від майнінгу до такої міри, що вони стануть нижче витрат, що змусить майнерів припинити майнінг і зупинити транзакції?

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

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

Чи будуть витрати на транзакції компенсувати витрати на майнінг?

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

Що станеться, якщо декілька шахтарів одночасно вирішать головоломку?

Чи ділять кілька майнерів винагороду за майнінг, якщо вони одночасно транслюють свої нові блоки?

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

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

приклад:

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

чому вузли з більш ніж 50% потужності хешу не обманюють?

що таке атака 51% і чому супервузли не обманюють?

Атака 51% відбувається, коли одна організація або група контролює понад 50% обчислювальної потужності мережі. Ось чому суперноди зазвичай не обманюють:

  1. практично неможливо: володіння 51% загальної мережевої хеш-потужності надзвичайно малоймовірно через величезний масштаб і децентралізацію основних криптовалют, таких як Bitcoin.
  2. Перевірка мережі: Навіть якщо супервузол намагається обдурити, всі вузли перевіряють кожен блок незалежно. Недійсні транзакції або спроби подвійних витрат відхиляються мережею, що робить зусилля супервузла марними.
  3. Репутація та економічні стимули: суперноди отримують більше від підтримки цілісності блокчейну, ніж від атаки на нього. Успішні атаки можуть знецінити криптовалюту, завдавши шкоди інвестиціям зловмисника.
  4. типи атак:
    • подвійне витрачання: спроба витратити одні й ті ж монети двічі.
    • блокування транзакцій: уникнення включення певних транзакцій до блоків.
    • себишний майнінг: спроба отримати більше винагороди за майнінг шляхом вибіркового розкриття блоків.
    • маніпуляція часовим позначенням: зміна часових позначень блоків для отримання переваги в майнінгу.
    • атака порожнього блоку: майнінг блоків без транзакцій для сповільнення мережі.

чому блокчейн передбачає відсутність фіксованих бухгалтерів для запобігання шахрайським транзакціям

Як блокчейн запобігає навмисним збоям і шахрайським транзакціям?

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

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

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

Що таке пул транзакцій (Mempool)?

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

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

Джерела доходу в системі Bitcoin

хто бере участь і як вони заробляють: окрім користувачів, три основні учасники системи біткойну - майнери, розробники та оператори вузлів.

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

чому зросли ціни на GPU? чому майнінгові GPU небажані?

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

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

чи потрібно шахтарям зберігати всі дані реєстру?

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

що станеться, коли досягнуто ліміт постачання біткоїну?

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

висота блоку буде продовжувати зростати: навіть після досягнення максимального обсягу в 21 мільйон біткоїнів, висота блоку (загальна кількість блоків) буде продовжувати зростати, поки шахтарі будуть готові добувати та пакувати транзакції в нові блоки. висота блоку не обмежена обмеженням обсягу біткоїнів.

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

як винагороджуються майнери?

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

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

Як розраховується дохід майнера?

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

процес отримання винагороди: коли майнер або пул успішно добуває блок і це підтверджується мережею, вони отримують винагороду за блок та комісійні. Це виконується за допомогою транзакції coinbase, яка перетворює комісійні та винагороди на невикористані вихідні транзакції (UTXO), нараховані на рахунок майнера.

чи блоки створюються послідовно чи паралельно?

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

упаковка транзакцій

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

використання простору блоку

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

Майнінг без транзакцій

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

обробка вілочок блокчейну

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

запобігання подвійного витрачання

рішення подвійного витрати:

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

Детальна обробка подвійних витрат

процес перевірки:

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

як користувачі контролюють суму плати за транзакції, яку вони платять?

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

комісія за транзакцію = загальний вхід −загальний вихід −зміна

Користувачі встановлюють комісію за транзакцію, регулюючи суму введення, суму виходу та суму зміни.

процес майнінгу криптовалюти

  1. підготувати гірниче обладнання: налаштувати гірничий апарат або високопродуктивні обчислювальні пристрої.
  2. забезпечте доступ в інтернет: підключіть гірниче устаткування до мережі.
  3. Завантажити цифровий гаманець: Отримайте цифровий гаманець і згенеруйте свої приватні та публічні ключі.
  4. почати майнінг: натисніть кнопку майнінгу в гаманці, щоб розпочати майнінг.

Майнінг в пулі

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

що таке самозацікавлений майнінг?

Егоїстичний майнінг: Егоїстичний майнінг – це стратегія, коли майнер (або майнінг-пул) знаходить новий блок, але не транслює його відразу. Замість цього вони продовжують майнінг приватно на своєму ланцюжку (hidden chain). Знайшовши додаткові блоки, вони транслюють їх усі відразу. Це може звести нанівець роботу інших майнерів і схилити обчислювальну потужність і винагороду на користь егоїстичного майнера. Біткойн може mitiGate.io вплив егоїстичного майнінгу, покращивши протокол мовлення.

перевірка вузла при отриманні транзакцій та блоків

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

  1. формат транзакції: перевірка правильності структури даних транзакції.
  2. підпис транзакції: перевірка автентичності підпису транзакції.
  3. подвійне витрачання: переконайтеся, що вхід не був раніше витрачений в мемпулі або блокчейні.
  4. Входи та виходи: Переконайтеся, що загальна сума вхідних даних більша або дорівнює загальній кількості вихідних даних.
  5. скриптів транзакції: виконувати та перевіряти скрипти (головним чином у смарт-контрактах).
  6. locktime: перевірте, чи виконується умова блокування (висота блоку або час).
  7. Розмір транзакції та комісії: переконайтеся, що розмір транзакції та комісія є достатніми.

Валідація блоку: Коли вузол-майнер отримує новий блок, він виконує розширену перевірку блоку та його транзакцій:

  1. Валідність транзакції: перевіряйте кожну транзакцію в блоці (ті самі перевірки, що й перевірка транзакції).
  2. перевірки, специфічні для блоку:
    • Розмір блоку: переконайтеся, що розмір блоку знаходиться в допустимих межах.
    • block reward: перевірте, що блокова винагорода (нові намайнені біткоїни та комісії за транзакції) є правильною.
    • Merkle root: обчислити і перевірити кореневий Merkle блока.
    • мітка часу: підтвердіть, що часова мітка блоку знаходиться в межах розумного діапазону.
    • ціль складності: перевірте, що блок відповідає поточній цілі складності.

11. посилання

[1] лекція 12 | глибокий аналіз технології блокчейну (4): доказ роботи (PoW) - глибоке пояснення блокчейну-гікаdisclaimer:

  1. Ця стаття передрукована з[Gate.io навчаннякоманда, і вони оперативно вирішать це.
  2. відмова від відповідальності: погляди та думки, висловлені в цій статті, належать виключно автору і не становлять жодних інвестиційних порад.
  3. переклади статей на інші мови виконуються командою вивчення Gate.io. Якщо не зазначено, заборонено копіювання, поширення або плагіат перекладених статей.
Розпочати зараз
Зареєструйтеся та отримайте ваучер на
$100
!