forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’
Один з найбільш знайомих концепцій, пов'язаних з блокчейном, для всіх, ймовірно, є майнінг. Багато людей можуть чути про майнінг численні рази, але не зовсім впевнені, що він насправді означає. У цьому розділі ми перерветемо наш регулярний програмування, щоб спочатку представити "майнінг."
швидкий огляд вмісту з “звичайного блокчейну 1: вступ до біткоїна (піонер блокчейн-революції та викликач суверенної валюти),” де сатоші накамото розробив валютну систему біткоїна для зв'язку винагород за ведення обліку з емісією валюти. Цей підхід дозволяє автоматизувати емісію валюти через процес ведення обліку, вирішуючи проблему емісії валюти, а також підтримує обліковців у активному участі.
У реальному світі, майнінг полягає в тому, що шахтарі використовують різні інструменти для видобутку дорогоцінних металів, прихованих в каменях у рудниках. Шахтарі видобувають цінність з цих рідкісних металів, прихованих у природі, через фізичну працю.
Для проектів блокчейн з нагородами за ведення обліку (зазвичай проекти цифрової валюти), вузли мережі витрачають обчислювальні ресурси для вирішення проблем. Як тільки вони знаходять рішення, вони упаковують блок і отримують винагороду у вигляді нової емісії валюти. Цей процес аналогічний видобутку дорогоцінних металів, таких як золото з руди, тому його часто називають «майнінгом». Тут відбувається ведення обліку, а майнери конкурують у виробництві блоків за допомогою апаратного забезпечення та електроенергії, що призводить до створення нової валюти.
майнінг має дві основні цілі: підтвердження останніх транзакцій, упаковка їх в блоки та зв'язок їх з блокчейном, а також випуск нової валюти шляхом винагороди бухгалтерам. нижче наведено детальні функції майнінгу:
майнери мають стимул брати участь у майнінгу, оскільки вони отримують суттєві винагороди за успішну упаковку блоку в блокчейн. Ці винагороди надходять з двох основних джерел:
з часом винагорода за блоки буде зменшуватися (наприклад, через механізм зменшення біткоїнових винагород, де винагорода зменшується приблизно кожні чотири роки). в кінцевому підсумку, після видобутку всіх 21 мільйона біткоїнів, очікується близько 2141 року, автоматична винагорода за блоки припинить існування, а оплати транзакцій стануть основним джерелом доходу для майнерів.
біткойн генерує новий блок приблизно кожні 10 хвилин. Спочатку кожен новий блок створював 50 біткоїнів. Ця нагорода зменшується вдвічі кожні чотири роки, і до цього часу відбулося чотири таких події зменшення. Наразі кожен блок генерує 3,125 біткоїнів, а останнє зменшення відбулося в квітні 2024 року. Наступне зменшення очікується приблизно в 2028 році. До 2141 року біткойн досягне свого ліміту випуску.
плата за транзакцію впливає не тільки на попит і пропозицію, але й на розмір транзакції, оскільки плата пропорційна простору, який транзакція займає в блоку.
для шахтерів, участь у майнінгу є простою. Завантажте клієнт гаманця для цифрової валюти, а потім у цьому клієнті клацніть кнопку майнінгу, щоб розпочати майнінг.
для блокчейн-проектів з блок-винагородами, алгоритм майнінгу зазвичай записується в скрипт, який інтегрований у гаманець. майнерам просто потрібно натиснути кнопку, щоб запустити скрипт.
алгоритм видобутку є детерміністичним, що означає, що якщо шахтарі постійно запускають алгоритм, вони в кінці кінців отримають результат. проте через різні обчислювальні ресурси час, необхідний для обчислення цього результату, може відрізнятися серед шахтарів. як тільки вузол розраховує цільове значення, зусилля інших шахтарів протягом цього періоду стають марними, що призводить до негативних результатів через витрачені фізичні ресурси.
щоб уникнути марної зусилля, майнери часто об'єднують свої обчислювальні ресурси, приєднуючись до вузла майнінгового пулу. Цей вузол працює, як будь-який інший вузол, але має значно більше обчислювальної потужності. Коли пул успішно добуває блок, винагороди розподіляються серед учасницьких майнерів, виходячи з їх внесеного обчислювального ресурсу. Важливо зазначити, що в ланцюжку блоків записаний майнер, який упаковує блок, - це вузол майнінгового пулу, тоді як окремі майнери отримують свою частку винагороди, виділеної пулом, а не безпосередньо з валютної системи.
bitmain, компанія, що виробляє спеціалізовані високоефективні майнінгові чіпи, укріпила роль пулів майнінгу, сприяючи централізації сили ведення обліку.
різні проекти блокчейн можуть мати різні головоломки та рівні складності майнінгу. тут ми беремо біткоїн як приклад. алгоритм майнінгу, що використовується біткоїном, називається доказом роботи (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 до 256, знайти таке значення хешу за поточної обчислювальної потужності людини, за виключенням квантових комп'ютерів, майже неможливо до того, як Земля перестане існувати.
Завдяки властивостям SHA-256 єдиним методом є груба сила, яка передбачає безперервні випробування різних нонцесів, поки умова не буде виконана. Ця потреба у високопродуктивному обчислювальному обладнанні є причиною того, що для майнінгу потрібні такі пристрої.
Оскільки ви не можете передбачити хеш-значення, згенероване додаванням NONCE до даних блоку та передачею його через SHA-256, процес є абсолютно випадковим. Наприклад, якщо цільове хеш-значення становить 10 000, ви не можете знати, який NONCE у поєднанні з даними блоку дасть хеш-значення менше 10 000. Ця непередбачувана і випадкова природа означає, що майнери повинні продовжувати перераховувати можливості, поки умова не буде виконана. Якщо умові відповідає кілька значень, вибирається найменше хеш-значення, оскільки менше хеш-значення вказує на вищу складність і меншу ймовірність виникнення.
перевірка того, чи відповідне значення хешу відповідає вимозі, є простою і вимагає лише однієї операції порівняння. проте знайти значення хешу менше або рівне цільовому значенню можливо лише шляхом перебору методом грубої сили. Ця характеристика, де перевірка результату є простою, а знаходження результату є складним, відома як обчислювальна асиметрія.
наступний код моделює процес видобутку. він починається з рядка даних заголовка блоку “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()
як показано, збільшення необхідної кількості провідних нулів в хеші значно збільшує кількість потрібних спроб, що слідує експоненційному зростанню. це демонструє обчислювальну складність та ресурси, необхідні для майнінгу, підкреслюючи потребу в високопродуктивних обчислювальних пристроях у процесі майнінгу.
Щоб гарантувати, що блок генерується приблизно кожні 10 хвилин, система Bitcoin регулює складність майнінгу, змінюючи кількість початкових нулів, необхідних у хеш-значенні. Цей механізм регулювання складності є важливою частиною системи Bitcoin. Він оцінює час, необхідний для генерації останніх блоків 2016 року, який в ідеалі повинен становити близько двох тижнів. Якщо ці блоки були видобуті менш ніж за два тижні, складність зростає за рахунок додавання більшої кількості початкових нулів (зниження цільового значення). І навпаки, якщо це зайняло більше двох тижнів, складність зменшується за рахунок зменшення кількості початкових нулів (підвищення цільового значення). Цей механізм гарантує, що час генерації блоку залишається близько 10 хвилин, навіть якщо загальний хешрейт мережі коливається.
Цей механізм регулювання складності, розроблений творцем біткоїна Сатоші Накамото, був запланований з самого початку для автоматичного адаптування до загальної обчислювальної потужності мережі. Він забезпечує стабільну темп видобутку та запобігає випуску валюти занадто швидко, що може порушити ринкову економіку.
у різних блокчейн-проектах можуть бути різні алгоритми майнінгу. тут ми описуємо найвідоміший з них: алгоритм майнінгу біткоїна.
процес виконання основного алгоритму майнінгу біткоїна виглядає наступним чином:
розмір кожного поля в заголовку блоку такий:
https://time.geekbang.org/column/article/5963
alt="">структура дерева Меркля виглядає наступним чином:
大后端私房菜]. alt="">
основна суперечка, що оточує майнінг, полягає в алгоритмах доказу роботи (pow), які використовуються біткоїном та його похідними. Ці алгоритми вимагають від рударів виділяти значні обчислювальні ресурси для вирішення проблем, з якими мережа погоджується. Багато людей одночасно працюють над цими обчисленнями, але лише перший, хто вирішує проблему, отримує винагороду. Обчислювальні та електричні ресурси інших учасників фактично марнуються, не створюючи додаткової вартості.
Є дві основні можливості оптимізувати це витрачання ресурсів:
Яка вартість майнінгу? Здається, що це марнотратство ресурсів і безглузде для суспільства.
переглядаючи розділ «чому майнінг необхідний?» цієї статті, безпосереднє значення майнінгу полягає в тому, що він підтримує випуск цифрових валют. Винагороди за майнінг стимулюють більше людей брати участь у підтримці цифрових валют, роблячи їх більш стабільними. Крім того, алгоритми майнінгу забезпечують послідовність транзакцій у системах цифрової валюти, роблячи їх більш надійними і менш схильними до внутрішніх і зовнішніх атак.
Непряме значення майнінгу виводиться з самих цифрових валют. Цифрові валюти створюють глобальну грошову систему, що не потребує довіри, де безпечні транзакції можуть відбуватися без необхідності централізованих установ, уникаючи недоліків централізації. Їх глобальний характер також забезпечує ефективні та недорогі транскордонні транзакції.
чи зменшаться прибутки від майнінгу до такої міри, що вони стануть нижче витрат, що змусить майнерів припинити майнінг і зупинити транзакції?
Поширене занепокоєння викликає те, що прибутковість майнінгу залежить виключно від системної винагороди, яка з часом зменшується. Однак майнінг також приносить значний дохід від комісій за транзакції. У міру того, як цифрові валюти отримують все більш широке визнання, ринок транзакцій з цифровою валютою буде розширюватися. Цей збільшений обсяг транзакцій посилить конкуренцію за включення блоків, що призведе до вищих комісій, які користувачі готові платити, щоб визначити пріоритетність своїх транзакцій. Отже, майнери можуть продовжувати заробляти значні комісії за транзакції, забезпечуючи постійну життєздатність обробки транзакцій.
Чи будуть витрати на транзакції компенсувати витрати на майнінг?
Так, комісії за транзакції можуть допомогти компенсувати витрати на майнінг. оскільки винагорода за блоки зменшується з часом, комісії за транзакції стають важливим джерелом доходу для майнерів. Це забезпечує, що навіть якщо витрати на електроенергію великі, майнери все одно можуть забезпечити рентабельність своєї діяльності за рахунок комісій, які користувачі оплачують за обробку транзакцій.
Чи ділять кілька майнерів винагороду за майнінг, якщо вони одночасно транслюють свої нові блоки?
Ні, якщо кілька майнерів вирішують головоломку та транслюють свої нові блоки одночасно, це створює тимчасовий форк у блокчейні. Ось як це працює:
приклад:
що таке атака 51% і чому супервузли не обманюють?
Атака 51% відбувається, коли одна організація або група контролює понад 50% обчислювальної потужності мережі. Ось чому суперноди зазвичай не обманюють:
Як блокчейн запобігає навмисним збоям і шахрайським транзакціям?
запобігання непослідовному розподілу блоків майнерами
визначення та функція: в мережі блокчейн всі трансляції угод, які ще не були включені в блок, тимчасово зберігаються в пулі пам'яті (mempool) вузлів мережі. шахтарі відслідковують свій мемпул, щоб вибрати трансакції для побудови нових блоків.
Стратегія вибору транзакцій: майнери можуть вибирати транзакції з мемпулу на основі своєї стратегії. Як правило, вони віддають перевагу транзакціям з вищими комісіями, але деякі також можуть враховувати інші фактори, такі як вік транзакції (час, який вона провела в мемпулі).
хто бере участь і як вони заробляють: окрім користувачів, три основні учасники системи біткойну - майнери, розробники та оператори вузлів.
зростання цін на графічні процесори: високий попит на графічні процесори з боку майнерів для майнінгу призводить до дефіциту пропозиції, що призводить до зростання цін.
громадяни з великим задоволенням займаються майнінгом. громадяни, які займаються майнінгом, використовують графічні процесори (гп), які раніше використовувалися для майнінгу криптовалюти. ці гп пройшли інтенсивну обчислювальну роботу, що призводить до значного зношування. через зменшену продуктивність багато людей віддають перевагу не купувати вживані гп для майнінгу.
Вимога до повного резервування сховища: Так, майнери повинні зберігати весь реєстр блокчейну, щоб перевірити, чи був токен раніше витрачений, а також забезпечити безпеку та цілісність реєстру. Однак для дуже ранніх блоків майнерам потрібно зберігати лише заголовки блоків, а не весь вміст блоку. Це допомагає підтримувати ефективність блокчейну, зберігаючи його безпеку.
жодних автоматичних винагород понад 21 мільйон біткоїнів: коли загальний обсяг біткоїнів досягне свого ліміту в 21 мільйон, система більше не видаватиме нові біткоїни як винагороди майнерам. якщо користувачі також не бажатимуть платити комісії за транзакції, теоретично, система транзакцій може стикнутися з експлуатаційними проблемами. проте ймовірно, що користувачі будуть готові платити комісії за транзакції, щоб їх транзакції були оброблені, забезпечуючи продовження системи.
висота блоку буде продовжувати зростати: навіть після досягнення максимального обсягу в 21 мільйон біткоїнів, висота блоку (загальна кількість блоків) буде продовжувати зростати, поки шахтарі будуть готові добувати та пакувати транзакції в нові блоки. висота блоку не обмежена обмеженням обсягу біткоїнів.
Потенціал для змін консенсусу: Спільнота може запропонувати зміни до правил консенсусу, такі як збільшення загальної пропозиції біткойнів, щоб дозволити генерацію нових монет, якщо це необхідно.
транзакція монетної бази: в ланцюжку блоків біткойна винагороди для майнерів розподіляються через спеціальну транзакцію, відому як «транзакція монетної бази» або «блокова винагорода». Ця транзакція має унікальні характеристики:
Розрахунок доходу за блок: Дохід майнера розраховується щоразу, коли блок успішно видобувається та підтверджується механізмом консенсусу мережі. Майнер (або майнінг-пул), який видобуває блок, отримує винагороду за блок і сукупну комісію за транзакції з усіх транзакцій, включених у блок.
процес отримання винагороди: коли майнер або пул успішно добуває блок і це підтверджується мережею, вони отримують винагороду за блок та комісійні. Це виконується за допомогою транзакції coinbase, яка перетворює комісійні та винагороди на невикористані вихідні транзакції (UTXO), нараховані на рахунок майнера.
Послідовне створення: блоки створюються послідовно в блокчейні. Новий блок може бути створений тільки після того, як попередній блок буде успішно видобутий і доданий в ланцюжок.
Кілька транзакцій на блок: блоки зазвичай містять кілька транзакцій. Майнери включають якомога більше транзакцій, щоб максимізувати свій прибуток від комісії за транзакції, а не упаковувати транзакції окремо.
Частково заповнені блоки: більшість блоків використовуються не повністю. Майнери починають працювати над наступним блоком, як тільки знаходять дійсний хеш, який відповідає вимогам складності, незалежно від того, чи повністю заповнений блок.
Порожні блоки: блоки можна видобувати, навіть якщо немає транзакцій, які потрібно включити. Ці блоки, які називаються порожніми блоками, все ще забезпечують системну винагороду майнеру.
правило найдовшого ланцюга: коли відбувається розгалуження, мережа слідує ланцюгу з найбільшою накопиченою кількістю доказів роботи, який зазвичай є найдовшим. вузли переходять на довший ланцюг, як тільки стає очевидним, який з них має більше роботи.
рішення подвійного витрати:
процес перевірки:
розрахунок комісії за транзакцію: користувачі можуть контролювати комісію за транзакцію, щоб прискорити підтвердження своїх транзакцій. комісія визначається за допомогою наступної формули:
комісія за транзакцію = загальний вхід −загальний вихід −зміна
Користувачі встановлюють комісію за транзакцію, регулюючи суму введення, суму виходу та суму зміни.
Розподіл прибутку: При майнінгу в пулі вузол пулу отримує винагороду за блок. Потім пул розподіляє заробіток між своїми учасниками на основі їх внесеної обчислювальної потужності. Цей розподіл здійснюється за допомогою переказів на гаманці майнерів.
Егоїстичний майнінг: Егоїстичний майнінг – це стратегія, коли майнер (або майнінг-пул) знаходить новий блок, але не транслює його відразу. Замість цього вони продовжують майнінг приватно на своєму ланцюжку (hidden chain). Знайшовши додаткові блоки, вони транслюють їх усі відразу. Це може звести нанівець роботу інших майнерів і схилити обчислювальну потужність і винагороду на користь егоїстичного майнера. Біткойн може mitiGate.io вплив егоїстичного майнінгу, покращивши протокол мовлення.
Перевірка транзакцій: Коли транзакція транслюється на вузол, вона проходить кілька перевірок, щоб визначити, чи варто її додавати до мемпулу:
Валідація блоку: Коли вузол-майнер отримує новий блок, він виконує розширену перевірку блоку та його транзакцій:
[1] лекція 12 | глибокий аналіз технології блокчейну (4): доказ роботи (PoW) - глибоке пояснення блокчейну-гікаdisclaimer:
forward the original title ‘白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?’
Один з найбільш знайомих концепцій, пов'язаних з блокчейном, для всіх, ймовірно, є майнінг. Багато людей можуть чути про майнінг численні рази, але не зовсім впевнені, що він насправді означає. У цьому розділі ми перерветемо наш регулярний програмування, щоб спочатку представити "майнінг."
швидкий огляд вмісту з “звичайного блокчейну 1: вступ до біткоїна (піонер блокчейн-революції та викликач суверенної валюти),” де сатоші накамото розробив валютну систему біткоїна для зв'язку винагород за ведення обліку з емісією валюти. Цей підхід дозволяє автоматизувати емісію валюти через процес ведення обліку, вирішуючи проблему емісії валюти, а також підтримує обліковців у активному участі.
У реальному світі, майнінг полягає в тому, що шахтарі використовують різні інструменти для видобутку дорогоцінних металів, прихованих в каменях у рудниках. Шахтарі видобувають цінність з цих рідкісних металів, прихованих у природі, через фізичну працю.
Для проектів блокчейн з нагородами за ведення обліку (зазвичай проекти цифрової валюти), вузли мережі витрачають обчислювальні ресурси для вирішення проблем. Як тільки вони знаходять рішення, вони упаковують блок і отримують винагороду у вигляді нової емісії валюти. Цей процес аналогічний видобутку дорогоцінних металів, таких як золото з руди, тому його часто називають «майнінгом». Тут відбувається ведення обліку, а майнери конкурують у виробництві блоків за допомогою апаратного забезпечення та електроенергії, що призводить до створення нової валюти.
майнінг має дві основні цілі: підтвердження останніх транзакцій, упаковка їх в блоки та зв'язок їх з блокчейном, а також випуск нової валюти шляхом винагороди бухгалтерам. нижче наведено детальні функції майнінгу:
майнери мають стимул брати участь у майнінгу, оскільки вони отримують суттєві винагороди за успішну упаковку блоку в блокчейн. Ці винагороди надходять з двох основних джерел:
з часом винагорода за блоки буде зменшуватися (наприклад, через механізм зменшення біткоїнових винагород, де винагорода зменшується приблизно кожні чотири роки). в кінцевому підсумку, після видобутку всіх 21 мільйона біткоїнів, очікується близько 2141 року, автоматична винагорода за блоки припинить існування, а оплати транзакцій стануть основним джерелом доходу для майнерів.
біткойн генерує новий блок приблизно кожні 10 хвилин. Спочатку кожен новий блок створював 50 біткоїнів. Ця нагорода зменшується вдвічі кожні чотири роки, і до цього часу відбулося чотири таких події зменшення. Наразі кожен блок генерує 3,125 біткоїнів, а останнє зменшення відбулося в квітні 2024 року. Наступне зменшення очікується приблизно в 2028 році. До 2141 року біткойн досягне свого ліміту випуску.
плата за транзакцію впливає не тільки на попит і пропозицію, але й на розмір транзакції, оскільки плата пропорційна простору, який транзакція займає в блоку.
для шахтерів, участь у майнінгу є простою. Завантажте клієнт гаманця для цифрової валюти, а потім у цьому клієнті клацніть кнопку майнінгу, щоб розпочати майнінг.
для блокчейн-проектів з блок-винагородами, алгоритм майнінгу зазвичай записується в скрипт, який інтегрований у гаманець. майнерам просто потрібно натиснути кнопку, щоб запустити скрипт.
алгоритм видобутку є детерміністичним, що означає, що якщо шахтарі постійно запускають алгоритм, вони в кінці кінців отримають результат. проте через різні обчислювальні ресурси час, необхідний для обчислення цього результату, може відрізнятися серед шахтарів. як тільки вузол розраховує цільове значення, зусилля інших шахтарів протягом цього періоду стають марними, що призводить до негативних результатів через витрачені фізичні ресурси.
щоб уникнути марної зусилля, майнери часто об'єднують свої обчислювальні ресурси, приєднуючись до вузла майнінгового пулу. Цей вузол працює, як будь-який інший вузол, але має значно більше обчислювальної потужності. Коли пул успішно добуває блок, винагороди розподіляються серед учасницьких майнерів, виходячи з їх внесеного обчислювального ресурсу. Важливо зазначити, що в ланцюжку блоків записаний майнер, який упаковує блок, - це вузол майнінгового пулу, тоді як окремі майнери отримують свою частку винагороди, виділеної пулом, а не безпосередньо з валютної системи.
bitmain, компанія, що виробляє спеціалізовані високоефективні майнінгові чіпи, укріпила роль пулів майнінгу, сприяючи централізації сили ведення обліку.
різні проекти блокчейн можуть мати різні головоломки та рівні складності майнінгу. тут ми беремо біткоїн як приклад. алгоритм майнінгу, що використовується біткоїном, називається доказом роботи (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 до 256, знайти таке значення хешу за поточної обчислювальної потужності людини, за виключенням квантових комп'ютерів, майже неможливо до того, як Земля перестане існувати.
Завдяки властивостям SHA-256 єдиним методом є груба сила, яка передбачає безперервні випробування різних нонцесів, поки умова не буде виконана. Ця потреба у високопродуктивному обчислювальному обладнанні є причиною того, що для майнінгу потрібні такі пристрої.
Оскільки ви не можете передбачити хеш-значення, згенероване додаванням NONCE до даних блоку та передачею його через SHA-256, процес є абсолютно випадковим. Наприклад, якщо цільове хеш-значення становить 10 000, ви не можете знати, який NONCE у поєднанні з даними блоку дасть хеш-значення менше 10 000. Ця непередбачувана і випадкова природа означає, що майнери повинні продовжувати перераховувати можливості, поки умова не буде виконана. Якщо умові відповідає кілька значень, вибирається найменше хеш-значення, оскільки менше хеш-значення вказує на вищу складність і меншу ймовірність виникнення.
перевірка того, чи відповідне значення хешу відповідає вимозі, є простою і вимагає лише однієї операції порівняння. проте знайти значення хешу менше або рівне цільовому значенню можливо лише шляхом перебору методом грубої сили. Ця характеристика, де перевірка результату є простою, а знаходження результату є складним, відома як обчислювальна асиметрія.
наступний код моделює процес видобутку. він починається з рядка даних заголовка блоку “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()
як показано, збільшення необхідної кількості провідних нулів в хеші значно збільшує кількість потрібних спроб, що слідує експоненційному зростанню. це демонструє обчислювальну складність та ресурси, необхідні для майнінгу, підкреслюючи потребу в високопродуктивних обчислювальних пристроях у процесі майнінгу.
Щоб гарантувати, що блок генерується приблизно кожні 10 хвилин, система Bitcoin регулює складність майнінгу, змінюючи кількість початкових нулів, необхідних у хеш-значенні. Цей механізм регулювання складності є важливою частиною системи Bitcoin. Він оцінює час, необхідний для генерації останніх блоків 2016 року, який в ідеалі повинен становити близько двох тижнів. Якщо ці блоки були видобуті менш ніж за два тижні, складність зростає за рахунок додавання більшої кількості початкових нулів (зниження цільового значення). І навпаки, якщо це зайняло більше двох тижнів, складність зменшується за рахунок зменшення кількості початкових нулів (підвищення цільового значення). Цей механізм гарантує, що час генерації блоку залишається близько 10 хвилин, навіть якщо загальний хешрейт мережі коливається.
Цей механізм регулювання складності, розроблений творцем біткоїна Сатоші Накамото, був запланований з самого початку для автоматичного адаптування до загальної обчислювальної потужності мережі. Він забезпечує стабільну темп видобутку та запобігає випуску валюти занадто швидко, що може порушити ринкову економіку.
у різних блокчейн-проектах можуть бути різні алгоритми майнінгу. тут ми описуємо найвідоміший з них: алгоритм майнінгу біткоїна.
процес виконання основного алгоритму майнінгу біткоїна виглядає наступним чином:
розмір кожного поля в заголовку блоку такий:
https://time.geekbang.org/column/article/5963
alt="">структура дерева Меркля виглядає наступним чином:
大后端私房菜]. alt="">
основна суперечка, що оточує майнінг, полягає в алгоритмах доказу роботи (pow), які використовуються біткоїном та його похідними. Ці алгоритми вимагають від рударів виділяти значні обчислювальні ресурси для вирішення проблем, з якими мережа погоджується. Багато людей одночасно працюють над цими обчисленнями, але лише перший, хто вирішує проблему, отримує винагороду. Обчислювальні та електричні ресурси інших учасників фактично марнуються, не створюючи додаткової вартості.
Є дві основні можливості оптимізувати це витрачання ресурсів:
Яка вартість майнінгу? Здається, що це марнотратство ресурсів і безглузде для суспільства.
переглядаючи розділ «чому майнінг необхідний?» цієї статті, безпосереднє значення майнінгу полягає в тому, що він підтримує випуск цифрових валют. Винагороди за майнінг стимулюють більше людей брати участь у підтримці цифрових валют, роблячи їх більш стабільними. Крім того, алгоритми майнінгу забезпечують послідовність транзакцій у системах цифрової валюти, роблячи їх більш надійними і менш схильними до внутрішніх і зовнішніх атак.
Непряме значення майнінгу виводиться з самих цифрових валют. Цифрові валюти створюють глобальну грошову систему, що не потребує довіри, де безпечні транзакції можуть відбуватися без необхідності централізованих установ, уникаючи недоліків централізації. Їх глобальний характер також забезпечує ефективні та недорогі транскордонні транзакції.
чи зменшаться прибутки від майнінгу до такої міри, що вони стануть нижче витрат, що змусить майнерів припинити майнінг і зупинити транзакції?
Поширене занепокоєння викликає те, що прибутковість майнінгу залежить виключно від системної винагороди, яка з часом зменшується. Однак майнінг також приносить значний дохід від комісій за транзакції. У міру того, як цифрові валюти отримують все більш широке визнання, ринок транзакцій з цифровою валютою буде розширюватися. Цей збільшений обсяг транзакцій посилить конкуренцію за включення блоків, що призведе до вищих комісій, які користувачі готові платити, щоб визначити пріоритетність своїх транзакцій. Отже, майнери можуть продовжувати заробляти значні комісії за транзакції, забезпечуючи постійну життєздатність обробки транзакцій.
Чи будуть витрати на транзакції компенсувати витрати на майнінг?
Так, комісії за транзакції можуть допомогти компенсувати витрати на майнінг. оскільки винагорода за блоки зменшується з часом, комісії за транзакції стають важливим джерелом доходу для майнерів. Це забезпечує, що навіть якщо витрати на електроенергію великі, майнери все одно можуть забезпечити рентабельність своєї діяльності за рахунок комісій, які користувачі оплачують за обробку транзакцій.
Чи ділять кілька майнерів винагороду за майнінг, якщо вони одночасно транслюють свої нові блоки?
Ні, якщо кілька майнерів вирішують головоломку та транслюють свої нові блоки одночасно, це створює тимчасовий форк у блокчейні. Ось як це працює:
приклад:
що таке атака 51% і чому супервузли не обманюють?
Атака 51% відбувається, коли одна організація або група контролює понад 50% обчислювальної потужності мережі. Ось чому суперноди зазвичай не обманюють:
Як блокчейн запобігає навмисним збоям і шахрайським транзакціям?
запобігання непослідовному розподілу блоків майнерами
визначення та функція: в мережі блокчейн всі трансляції угод, які ще не були включені в блок, тимчасово зберігаються в пулі пам'яті (mempool) вузлів мережі. шахтарі відслідковують свій мемпул, щоб вибрати трансакції для побудови нових блоків.
Стратегія вибору транзакцій: майнери можуть вибирати транзакції з мемпулу на основі своєї стратегії. Як правило, вони віддають перевагу транзакціям з вищими комісіями, але деякі також можуть враховувати інші фактори, такі як вік транзакції (час, який вона провела в мемпулі).
хто бере участь і як вони заробляють: окрім користувачів, три основні учасники системи біткойну - майнери, розробники та оператори вузлів.
зростання цін на графічні процесори: високий попит на графічні процесори з боку майнерів для майнінгу призводить до дефіциту пропозиції, що призводить до зростання цін.
громадяни з великим задоволенням займаються майнінгом. громадяни, які займаються майнінгом, використовують графічні процесори (гп), які раніше використовувалися для майнінгу криптовалюти. ці гп пройшли інтенсивну обчислювальну роботу, що призводить до значного зношування. через зменшену продуктивність багато людей віддають перевагу не купувати вживані гп для майнінгу.
Вимога до повного резервування сховища: Так, майнери повинні зберігати весь реєстр блокчейну, щоб перевірити, чи був токен раніше витрачений, а також забезпечити безпеку та цілісність реєстру. Однак для дуже ранніх блоків майнерам потрібно зберігати лише заголовки блоків, а не весь вміст блоку. Це допомагає підтримувати ефективність блокчейну, зберігаючи його безпеку.
жодних автоматичних винагород понад 21 мільйон біткоїнів: коли загальний обсяг біткоїнів досягне свого ліміту в 21 мільйон, система більше не видаватиме нові біткоїни як винагороди майнерам. якщо користувачі також не бажатимуть платити комісії за транзакції, теоретично, система транзакцій може стикнутися з експлуатаційними проблемами. проте ймовірно, що користувачі будуть готові платити комісії за транзакції, щоб їх транзакції були оброблені, забезпечуючи продовження системи.
висота блоку буде продовжувати зростати: навіть після досягнення максимального обсягу в 21 мільйон біткоїнів, висота блоку (загальна кількість блоків) буде продовжувати зростати, поки шахтарі будуть готові добувати та пакувати транзакції в нові блоки. висота блоку не обмежена обмеженням обсягу біткоїнів.
Потенціал для змін консенсусу: Спільнота може запропонувати зміни до правил консенсусу, такі як збільшення загальної пропозиції біткойнів, щоб дозволити генерацію нових монет, якщо це необхідно.
транзакція монетної бази: в ланцюжку блоків біткойна винагороди для майнерів розподіляються через спеціальну транзакцію, відому як «транзакція монетної бази» або «блокова винагорода». Ця транзакція має унікальні характеристики:
Розрахунок доходу за блок: Дохід майнера розраховується щоразу, коли блок успішно видобувається та підтверджується механізмом консенсусу мережі. Майнер (або майнінг-пул), який видобуває блок, отримує винагороду за блок і сукупну комісію за транзакції з усіх транзакцій, включених у блок.
процес отримання винагороди: коли майнер або пул успішно добуває блок і це підтверджується мережею, вони отримують винагороду за блок та комісійні. Це виконується за допомогою транзакції coinbase, яка перетворює комісійні та винагороди на невикористані вихідні транзакції (UTXO), нараховані на рахунок майнера.
Послідовне створення: блоки створюються послідовно в блокчейні. Новий блок може бути створений тільки після того, як попередній блок буде успішно видобутий і доданий в ланцюжок.
Кілька транзакцій на блок: блоки зазвичай містять кілька транзакцій. Майнери включають якомога більше транзакцій, щоб максимізувати свій прибуток від комісії за транзакції, а не упаковувати транзакції окремо.
Частково заповнені блоки: більшість блоків використовуються не повністю. Майнери починають працювати над наступним блоком, як тільки знаходять дійсний хеш, який відповідає вимогам складності, незалежно від того, чи повністю заповнений блок.
Порожні блоки: блоки можна видобувати, навіть якщо немає транзакцій, які потрібно включити. Ці блоки, які називаються порожніми блоками, все ще забезпечують системну винагороду майнеру.
правило найдовшого ланцюга: коли відбувається розгалуження, мережа слідує ланцюгу з найбільшою накопиченою кількістю доказів роботи, який зазвичай є найдовшим. вузли переходять на довший ланцюг, як тільки стає очевидним, який з них має більше роботи.
рішення подвійного витрати:
процес перевірки:
розрахунок комісії за транзакцію: користувачі можуть контролювати комісію за транзакцію, щоб прискорити підтвердження своїх транзакцій. комісія визначається за допомогою наступної формули:
комісія за транзакцію = загальний вхід −загальний вихід −зміна
Користувачі встановлюють комісію за транзакцію, регулюючи суму введення, суму виходу та суму зміни.
Розподіл прибутку: При майнінгу в пулі вузол пулу отримує винагороду за блок. Потім пул розподіляє заробіток між своїми учасниками на основі їх внесеної обчислювальної потужності. Цей розподіл здійснюється за допомогою переказів на гаманці майнерів.
Егоїстичний майнінг: Егоїстичний майнінг – це стратегія, коли майнер (або майнінг-пул) знаходить новий блок, але не транслює його відразу. Замість цього вони продовжують майнінг приватно на своєму ланцюжку (hidden chain). Знайшовши додаткові блоки, вони транслюють їх усі відразу. Це може звести нанівець роботу інших майнерів і схилити обчислювальну потужність і винагороду на користь егоїстичного майнера. Біткойн може mitiGate.io вплив егоїстичного майнінгу, покращивши протокол мовлення.
Перевірка транзакцій: Коли транзакція транслюється на вузол, вона проходить кілька перевірок, щоб визначити, чи варто її додавати до мемпулу:
Валідація блоку: Коли вузол-майнер отримує новий блок, він виконує розширену перевірку блоку та його транзакцій:
[1] лекція 12 | глибокий аналіз технології блокчейну (4): доказ роботи (PoW) - глибоке пояснення блокчейну-гікаdisclaimer: