переслать оригинальное название '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'
Один из самых знакомых концепций, связанных с блокчейном, для всех, вероятно, является майнинг. Многие люди, возможно, много раз слышали о майнинге, но не совсем уверены, в чем он на самом деле заключается. В этом разделе мы прервем наш регулярный режим работы, чтобы сначала представить "майнинг".
краткое повторение содержания из «чистого блокчейна 1: введение в биткойн (пионер блокчейн-революции и вызов суверенной валюте)», где сатоши накамото разработал денежную систему биткойна, связывая вознаграждения за ведение учета с выпуском валюты. Такой подход позволяет автоматизировать выпуск валюты через процесс ведения учета, решая проблему выпуска валюты и одновременно стимулируя ведущих учет.
В реальном мире майнинг предполагает, что шахтеры используют различные инструменты для извлечения драгоценных металлов, спрятанных в горных породах, из шахт. Горняки извлекают ценность из этих редких металлов, скрытых в природе, с помощью физического труда.
Для проектов блокчейн с вознаграждениями за ведение учета (обычно это проекты цифровой валюты), сетевые узлы тратят вычислительные ресурсы для решения задач. Как только они находят решение, они упаковывают блок и получают вознаграждение в виде только что выпущенной валюты. Этот процесс аналогичен извлечению драгоценных металлов, таких как золото, из руды, поэтому его обычно называют «майнингом». Здесь ведущими являются майнеры, которые конкурируют в упаковке блоков с помощью оборудования и электроэнергии, что приводит к созданию новой валюты.
Майнинг выполняет две основные функции: подтверждение недавних транзакций, упаковка их в блоки и привязка к блокчейну, а также выпуск новой валюты в качестве вознаграждения для ведущих бухгалтеров. Ниже приведены подробные функции майнинга:
майнеры стимулируются к участию в майнинге, потому что они получают значительные вознаграждения за успешную упаковку блока в блокчейн. Эти вознаграждения поступают из двух основных источников:
со временем вознаграждения за блок будут уменьшаться (например, из-за механизма половинного сокращения вознаграждения в биткоине, где вознаграждение уменьшается примерно каждые четыре года). В конце концов, после того, как будут добыты все 21 миллион биткоинов, ожидается около 2141 года, автоматическое вознаграждение за блок прекратится существовать, а плата за транзакции станет основным источником дохода для майнеров.
Биткойн генерирует новый блок приблизительно каждые 10 минут. Изначально за каждый новый созданный блок начислялось 50 биткоинов. Эта награда уменьшается вдвое каждые четыре года, и на сегодняшний день уже произошло четыре таких события уменьшения награды. В настоящее время каждый блок генерирует 3,125 биткоинов, и самое последнее уменьшение награды произошло в апреле 2024 года. Следующее уменьшение награды ожидается примерно в 2028 году. К 2141 году биткойн достигнет своего предельного выпуска.
размер комиссии за транзакцию зависит не только от спроса и предложения, но также от размера самой транзакции, поскольку комиссия пропорциональна занимаемому транзакцией месту в блоке.
Для майнеров участие в майнинге просто. Скачайте клиент цифрового кошелька и нажмите кнопку майнинга внутри клиента, чтобы начать майнить.
для блокчейн-проектов с блок-наградами, алгоритм майнинга обычно записывается в сценарий, интегрированный в кошелек. майнерам просто нужно нажать кнопку, чтобы запустить сценарий.
алгоритм майнинга детерминированный, что означает, что при условии непрерывной работы майнеров с алгоритмом они в конечном итоге получат результат. однако из-за различных вычислительных ресурсов время, необходимое для вычисления этого результата, может различаться среди майнеров. как только узел рассчитает целевое значение, усилия других майнеров в течение этого периода оказываются тщетными, что приводит к отрицательным результатам из-за затраченных физических ресурсов.
чтобы избежать бесполезных усилий, майнеры часто объединяют свои вычислительные ресурсы, присоединяясь к узлу майнингового пула. Этот узел работает как любой другой узел, но обладает значительно большей вычислительной мощностью. Когда пул успешно добывает блок, вознаграждения распределяются среди участвующих майнеров в зависимости от их вклада в вычислительные ресурсы. Важно отметить, что в блокчейне майнером, записанным как упаковщик блока, является узел майнингового пула, в то время как отдельные майнеры получают свою долю вознаграждения, выделенную пулом, а не непосредственно из валютной системы.
Компания bitmain, производящая специализированные высокоэффективные майнинг-чипы, укрепила роль майнинг-пулов, способствуя централизации бухгалтерской мощности.
У различных блокчейн-проектов могут быть различные задачи для майнинга и уровни сложности. Возьмем, например, биткойн. Алгоритм майнинга, используемый биткойном, называется доказательство работы (Proof of Work, PoW). Суть этого алгоритма заключается в том, что для получения результата необходимо затратить определенное количество работы, чтобы его доказать.
Головоломка майнинга - это не традиционная математическая проблема, а включает в себя поиск случайного числа, известного как nonce. Этот nonce, когда объединен с данными в блоке и обработан через хэш-функцию, должен произвести хэш-значение, которое соответствует определенному условию. Обычно это условие требует, чтобы значение хэша было меньше целевого значения (или, что первые n битов значения хэша равны нулю). Уравнение выглядит следующим образом: хэш (nonce+block_data)≤цель
Bitcoin использует хэш-функцию sha-256, которая преобразует любую длину входных данных в фиксированную длину выходных данных 256 бит (эквивалентно 64 шестнадцатеричным цифрам или 32 байтам). Выходные данные почти случайны, но гарантированно будут одинаковы для одинаковых входных данных. Майнинг включает непрерывное изменение nonce и хэширование данных заголовка блока с использованием sha-256 до тех пор, пока не будет найдено значение хэша, которое соответствует целевому условию.
например, значение хэша sha-256 с первыми 30 битами, равными нулю: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
преобразование этого в шестнадцатеричное значение приводит к значению, начинающемуся с семи нулей: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
для упрощения, вероятность нахождения хэша с первыми n битами, равными нулю, составляет 12n\frac{1}{2^n}2n1. чем больше n, тем больше битов равны нулю, и тем ниже вероятность:
при n до 256, поиск такого значения хэша с текущей вычислительной мощностью человечества, за исключением квантовых компьютеров, фактически невозможен до тех пор, пока Земля не перестанет существовать.
Из-за свойств sha-256 единственным методом является грубая сила, которая включает непрерывную попытку различных номеров до выполнения условия. Эта необходимость в высокопроизводительном вычислительном оборудовании и есть причина, по которой для майнинга требуются такие устройства.
поскольку вы не можете предсказать значение хэша, сгенерированное добавлением произвольного числа к данным блока и их обработкой с помощью sha-256, процесс является полностью случайным. например, если целевое значение хэша равно 10 000, вы не сможете узнать, какое произвольное число, объединенное с данными блока, приведет к значению хэша, меньшему 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" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
если имя== ‘главный‘:
main()
как видно, увеличение требуемого количества ведущих нулей в хэше значительно увеличивает количество необходимых попыток, следуя экспоненциальному росту. это демонстрирует вычислительную сложность и ресурсы, необходимые для майнинга, подчеркивая необходимость высокопроизводительных вычислительных устройств в процессе майнинга.
для того чтобы гарантировать генерацию блока примерно каждые 10 минут, система биткойна регулирует сложность майнинга, изменяя количество ведущих нулей, необходимых в значении хэша. этот механизм регулирования сложности является важной частью системы биткойна. он оценивает время, затраченное на генерацию последних 2016 блоков, которое в идеале должно составлять около двух недель. если эти блоки были сгенерированы за время меньшее, чем две недели, сложность увеличивается за счет добавления большего количества ведущих нулей (уменьшение целевого значения). наоборот, если это заняло больше двух недель, сложность уменьшается путем уменьшения количества ведущих нулей (увеличение целевого значения). этот механизм обеспечивает, что время на генерацию блока остается примерно 10 минут, даже при изменении общей хэш-скорости сети.
этот механизм регулирования сложности, разработанный создателем биткоина сатоси накамото, был спланирован с самого начала для автоматической адаптации к общей вычислительной мощности сети. он поддерживает стабильный темп майнинга и предотвращает излишне быстрое выпускание валюты, что может нарушить рыночную экономику.
У различных проектов блокчейн могут быть различные алгоритмы майнинга. Здесь мы описываем самый известный: алгоритм майнинга биткойна.
процесс выполнения базового майнингового алгоритма биткойна следующий:
размер каждого поля в заголовке блока следующий:
https://time.geekbang.org/column/article/5963
alt="">структура Merkle-дерева выглядит следующим образом:
Большой "Back-end" в домашних условиях.]. alt="">
Основная контроверсия, связанная с майнингом, заключается в алгоритмах доказательства работы (PoW), используемых в Bitcoin и его производных. Эти алгоритмы требуют, чтобы майнеры выделяли значительные вычислительные ресурсы для решения проблем, на которые согласуется сеть. Многие люди работают над этими вычислениями одновременно, но только первый, кто решит проблему, получает вознаграждение. Вычислительные и электрические ресурсы других участников фактически тратятся впустую, не производя дополнительной стоимости.
существует два основных способа оптимизации этого ресурсного отхода:
Какова ценность майнинга? Кажется, это пустая трата ресурсов и бессмысленно для общества.
Возвращаясь к разделу «Зачем нужен майнинг?» этой статьи, прямое значение майнинга заключается в том, что он поддерживает выпуск цифровых валют. Вознаграждения за майнинг стимулируют больше людей участвовать в обслуживании цифровых валют, делая их более стабильными. Кроме того, алгоритмы майнинга поддерживают согласованность транзакций в системах цифровых валют, что делает их более надежными и менее восприимчивыми к внутренним и внешним атакам.
Косвенное значение майнинга происходит от самой цифровой валюты. Цифровые валюты создают глобальную, ненадежную денежную систему, где безопасные транзакции могут происходить без необходимости централизованных институтов, избегая недостатков централизации. Их глобальная природа также позволяет эффективные и низко затратные международные транзакции.
Уменьшатся ли доходы от майнинга до того уровня, когда они упадут ниже затрат, заставивших майнеров прекратить майнинг и транзакции прекратиться?
Одна из распространенных опасений заключается в том, что доходы от майнинга полностью зависят от наград системы, которые с течением времени уменьшаются. Однако майнинг также приносит значительный доход от комиссий за транзакции. По мере того как цифровые валюты приобретают все большее распространение, рынок цифровых валютных транзакций будет расширяться. Увеличение объема транзакций усилит конкуренцию за включение блоков, что приведет к увеличению комиссий, которые пользователи готовы заплатить, чтобы дать приоритет своим транзакциям. В результате майнеры смогут продолжать зарабатывать значительные комиссии за транзакции, обеспечивая тем самым долгосрочную жизнеспособность обработки транзакций.
компенсируют ли комиссии за транзакции затраты на майнинг?
Да, комиссии за транзакции могут помочь компенсировать затраты на майнинг. По мере того, как вознаграждения за блоки уменьшаются со временем, комиссии за транзакции становятся ключевым источником дохода для майнеров. Это гарантирует, что даже если затраты на электроэнергию высоки, майнеры могут все еще поддерживать свою деятельность за счет комиссий, которые пользователи платят за обработку транзакций.
если несколько майнеров одновременно передают свои новые блоки, разделятся ли майнинговые награды?
нет, если несколько майнеров решают головоломку и одновременно транслируют свои новые блоки, это создает временную ветвь в блокчейне. вот как это работает:
пример:
Что такое атака 51% и почему суперноды не могут обмануть?
атака 51% происходит, когда одно лицо или группа контролирует более 50% вычислительной мощности сети. вот почему суперузлы обычно не обманывают:
как блокчейн предотвращает умышленные нарушения и мошеннические транзакции?
предотвращение несогласованного распределения блоков майнерами
определение и функция: в блокчейн-сети все транзакции, которые еще не были включены в блок, временно хранятся в памяти узлов сети (mempool). Майнеры отслеживают свой mempool, чтобы выбирать транзакции для создания новых блоков.
стратегия выбора транзакции: майнеры могут выбирать транзакции из пула памяти на основе своей стратегии. Обычно они отдают предпочтение транзакциям с более высокими комиссиями, но некоторые также могут учитывать другие факторы, такие как возраст транзакции (время, проведенное в пуле памяти).
кто участвует и как они зарабатывают: кроме пользователей, три основных участника в системе биткоина - майнеры, разработчики и операторы узлов.
рост цен на графические процессоры: высокий спрос на графические процессоры со стороны майнеров для майнинга привел к дефициту предложения, что привело к увеличению цен.
майнинг gpus: майнинг gpus - это те, которые ранее использовались для майнинга криптовалюты. эти gpus подвергаются интенсивным вычислениям, что приводит к значительному износу. из-за сниженной производительности большинство людей предпочитают не покупать использованные майнинг gpus.
требование полного избыточного хранения: да, майнерам необходимо хранить весь блокчейн, чтобы проверить, был ли токен ранее потрачен, и обеспечить безопасность и целостность реестра. однако для очень ранних блоков майнерам достаточно хранить только заголовки блоков, а не полное содержимое блоков. это помогает поддерживать эффективность блокчейна, сохраняя его безопасность.
Никаких автоматических вознаграждений свыше 21 миллиона биткойнов: как только общее предложение биткойнов достигнет своего предела в 21 миллион, система больше не будет выдавать новые биткойны в качестве вознаграждения майнерам. Если пользователи также не хотят платить комиссию за транзакцию, теоретически транзакционная система может столкнуться с операционными проблемами. Тем не менее, вполне вероятно, что пользователи будут готовы платить комиссию за транзакцию, чтобы их транзакции были обработаны, обеспечивая непрерывность системы.
Высота блока будет продолжать увеличиваться: даже после достижения максимального предложения в 21 миллион биткойнов высота блока (общее количество блоков) будет продолжать увеличиваться до тех пор, пока майнеры готовы добывать и упаковывать транзакции в новые блоки. Высота блока не ограничена лимитом предложения биткоина.
потенциал для изменений в консенсусе: сообщество может предложить изменения в правилах консенсуса, такие как увеличение общего предложения биткойнов, чтобы обеспечить генерацию новых монет, если это необходимо.
транзакция coinbase: в блокчейне биткойна вознаграждение майнера распределяется через специальную транзакцию, известную как "транзакция coinbase" или "блок-награда". эта транзакция имеет уникальные характеристики:
расчет выручки за блок: выручка майнера рассчитывается каждый раз, когда блок успешно добыт и подтвержден механизмом консенсуса сети. Майнер (или пул майнеров), который добывает блок, получает вознаграждение за блок и накопленные комиссионные сборы со всех транзакций, включенных в блок.
процесс получения вознаграждения: после того как майнер или майнинг-пул успешно добывают блок и он подтверждается сетью, они получают вознаграждение за блок и комиссии за транзакции. Это осуществляется через транзакцию coinbase, которая преобразует комиссии и вознаграждения в непотраченные выходы транзакций (UTXO), зачисленные на счет майнера.
последовательное создание: блоки создаются последовательно в блокчейне. новый блок может быть создан только после успешного майнинга предыдущего блока и его добавления в цепочку.
несколько транзакций в блоке: обычно блоки содержат несколько транзакций. майнеры включают как можно больше транзакций, чтобы максимизировать свои доходы от комиссий за транзакции, а не упаковывать их по отдельности.
Частично заполненные блоки: большинство блоков не используются полностью. Майнеры начинают работать над следующим блоком, как только они находят действительный хэш, который соответствует требованиям сложности, независимо от того, полностью ли заполнен блок.
пустые блоки: блоки могут быть сгенерированы даже если в них нет транзакций для включения. Эти блоки, называемые пустыми блоками, все равно предоставляют системное вознаграждение майнеру.
правило самой длинной цепи: когда происходит ветвление, сеть следует за цепью с наибольшим накопленным доказательством работы, которое обычно является самой длинной цепью. узлы переключаются на более длинную цепь, как только становится очевидно, в какую из них вложено больше работы.
разрешение двойной траты:
Процесс валидации:
расчет комиссии за транзакцию: пользователи могут контролировать комиссию за транзакцию, чтобы ускорить подтверждение своих транзакций. комиссия определяется следующей формулой:
комиссия за транзакцию=общий вход−общий выход−изменение
пользователи устанавливают комиссию за транзакцию, регулируя сумму ввода, сумму вывода и сумму сдачи.
Распределение доходов: При майнинге в пуле узел пула получает вознаграждение за блок. Затем пул распределяет прибыль между своими участниками в зависимости от внесенной ими вычислительной мощности. Это распределение осуществляется через переводы на кошельки майнеров.
Майнинг эгоистичный: эгоистичный майнинг - это стратегия, при которой майнер (или пул майнеров) находит новый блок, но не транслирует его сразу. Вместо этого они продолжают майнить приватно на своей цепочке (скрытой цепочке). Как только они находят дополнительные блоки, они транслируют их все сразу. Это может аннулировать работу других майнеров и наклонить вычислительную мощность и вознаграждения в пользу эгоистичного майнера. Биткойн может смягчить влияние эгоистичного майнинга, улучшив протокол трансляции.
проверка транзакции: когда транзакция передается узлу, она проходит несколько проверок, чтобы определить, должна ли она быть добавлена в пул памяти:
Проверка блока: когда узел-майнер получает новый блок, он выполняет обширные проверки блока и его транзакций:
[1] Лекция 12 | Углубленное изучение технологии блокчейн (4): Всестороннее объяснение консенсуса PoW для блокчейн-гиков:отказ от ответственности:
переслать оригинальное название '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'
Один из самых знакомых концепций, связанных с блокчейном, для всех, вероятно, является майнинг. Многие люди, возможно, много раз слышали о майнинге, но не совсем уверены, в чем он на самом деле заключается. В этом разделе мы прервем наш регулярный режим работы, чтобы сначала представить "майнинг".
краткое повторение содержания из «чистого блокчейна 1: введение в биткойн (пионер блокчейн-революции и вызов суверенной валюте)», где сатоши накамото разработал денежную систему биткойна, связывая вознаграждения за ведение учета с выпуском валюты. Такой подход позволяет автоматизировать выпуск валюты через процесс ведения учета, решая проблему выпуска валюты и одновременно стимулируя ведущих учет.
В реальном мире майнинг предполагает, что шахтеры используют различные инструменты для извлечения драгоценных металлов, спрятанных в горных породах, из шахт. Горняки извлекают ценность из этих редких металлов, скрытых в природе, с помощью физического труда.
Для проектов блокчейн с вознаграждениями за ведение учета (обычно это проекты цифровой валюты), сетевые узлы тратят вычислительные ресурсы для решения задач. Как только они находят решение, они упаковывают блок и получают вознаграждение в виде только что выпущенной валюты. Этот процесс аналогичен извлечению драгоценных металлов, таких как золото, из руды, поэтому его обычно называют «майнингом». Здесь ведущими являются майнеры, которые конкурируют в упаковке блоков с помощью оборудования и электроэнергии, что приводит к созданию новой валюты.
Майнинг выполняет две основные функции: подтверждение недавних транзакций, упаковка их в блоки и привязка к блокчейну, а также выпуск новой валюты в качестве вознаграждения для ведущих бухгалтеров. Ниже приведены подробные функции майнинга:
майнеры стимулируются к участию в майнинге, потому что они получают значительные вознаграждения за успешную упаковку блока в блокчейн. Эти вознаграждения поступают из двух основных источников:
со временем вознаграждения за блок будут уменьшаться (например, из-за механизма половинного сокращения вознаграждения в биткоине, где вознаграждение уменьшается примерно каждые четыре года). В конце концов, после того, как будут добыты все 21 миллион биткоинов, ожидается около 2141 года, автоматическое вознаграждение за блок прекратится существовать, а плата за транзакции станет основным источником дохода для майнеров.
Биткойн генерирует новый блок приблизительно каждые 10 минут. Изначально за каждый новый созданный блок начислялось 50 биткоинов. Эта награда уменьшается вдвое каждые четыре года, и на сегодняшний день уже произошло четыре таких события уменьшения награды. В настоящее время каждый блок генерирует 3,125 биткоинов, и самое последнее уменьшение награды произошло в апреле 2024 года. Следующее уменьшение награды ожидается примерно в 2028 году. К 2141 году биткойн достигнет своего предельного выпуска.
размер комиссии за транзакцию зависит не только от спроса и предложения, но также от размера самой транзакции, поскольку комиссия пропорциональна занимаемому транзакцией месту в блоке.
Для майнеров участие в майнинге просто. Скачайте клиент цифрового кошелька и нажмите кнопку майнинга внутри клиента, чтобы начать майнить.
для блокчейн-проектов с блок-наградами, алгоритм майнинга обычно записывается в сценарий, интегрированный в кошелек. майнерам просто нужно нажать кнопку, чтобы запустить сценарий.
алгоритм майнинга детерминированный, что означает, что при условии непрерывной работы майнеров с алгоритмом они в конечном итоге получат результат. однако из-за различных вычислительных ресурсов время, необходимое для вычисления этого результата, может различаться среди майнеров. как только узел рассчитает целевое значение, усилия других майнеров в течение этого периода оказываются тщетными, что приводит к отрицательным результатам из-за затраченных физических ресурсов.
чтобы избежать бесполезных усилий, майнеры часто объединяют свои вычислительные ресурсы, присоединяясь к узлу майнингового пула. Этот узел работает как любой другой узел, но обладает значительно большей вычислительной мощностью. Когда пул успешно добывает блок, вознаграждения распределяются среди участвующих майнеров в зависимости от их вклада в вычислительные ресурсы. Важно отметить, что в блокчейне майнером, записанным как упаковщик блока, является узел майнингового пула, в то время как отдельные майнеры получают свою долю вознаграждения, выделенную пулом, а не непосредственно из валютной системы.
Компания bitmain, производящая специализированные высокоэффективные майнинг-чипы, укрепила роль майнинг-пулов, способствуя централизации бухгалтерской мощности.
У различных блокчейн-проектов могут быть различные задачи для майнинга и уровни сложности. Возьмем, например, биткойн. Алгоритм майнинга, используемый биткойном, называется доказательство работы (Proof of Work, PoW). Суть этого алгоритма заключается в том, что для получения результата необходимо затратить определенное количество работы, чтобы его доказать.
Головоломка майнинга - это не традиционная математическая проблема, а включает в себя поиск случайного числа, известного как nonce. Этот nonce, когда объединен с данными в блоке и обработан через хэш-функцию, должен произвести хэш-значение, которое соответствует определенному условию. Обычно это условие требует, чтобы значение хэша было меньше целевого значения (или, что первые n битов значения хэша равны нулю). Уравнение выглядит следующим образом: хэш (nonce+block_data)≤цель
Bitcoin использует хэш-функцию sha-256, которая преобразует любую длину входных данных в фиксированную длину выходных данных 256 бит (эквивалентно 64 шестнадцатеричным цифрам или 32 байтам). Выходные данные почти случайны, но гарантированно будут одинаковы для одинаковых входных данных. Майнинг включает непрерывное изменение nonce и хэширование данных заголовка блока с использованием sha-256 до тех пор, пока не будет найдено значение хэша, которое соответствует целевому условию.
например, значение хэша sha-256 с первыми 30 битами, равными нулю: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
преобразование этого в шестнадцатеричное значение приводит к значению, начинающемуся с семи нулей: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
для упрощения, вероятность нахождения хэша с первыми n битами, равными нулю, составляет 12n\frac{1}{2^n}2n1. чем больше n, тем больше битов равны нулю, и тем ниже вероятность:
при n до 256, поиск такого значения хэша с текущей вычислительной мощностью человечества, за исключением квантовых компьютеров, фактически невозможен до тех пор, пока Земля не перестанет существовать.
Из-за свойств sha-256 единственным методом является грубая сила, которая включает непрерывную попытку различных номеров до выполнения условия. Эта необходимость в высокопроизводительном вычислительном оборудовании и есть причина, по которой для майнинга требуются такие устройства.
поскольку вы не можете предсказать значение хэша, сгенерированное добавлением произвольного числа к данным блока и их обработкой с помощью sha-256, процесс является полностью случайным. например, если целевое значение хэша равно 10 000, вы не сможете узнать, какое произвольное число, объединенное с данными блока, приведет к значению хэша, меньшему 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" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
если имя== ‘главный‘:
main()
как видно, увеличение требуемого количества ведущих нулей в хэше значительно увеличивает количество необходимых попыток, следуя экспоненциальному росту. это демонстрирует вычислительную сложность и ресурсы, необходимые для майнинга, подчеркивая необходимость высокопроизводительных вычислительных устройств в процессе майнинга.
для того чтобы гарантировать генерацию блока примерно каждые 10 минут, система биткойна регулирует сложность майнинга, изменяя количество ведущих нулей, необходимых в значении хэша. этот механизм регулирования сложности является важной частью системы биткойна. он оценивает время, затраченное на генерацию последних 2016 блоков, которое в идеале должно составлять около двух недель. если эти блоки были сгенерированы за время меньшее, чем две недели, сложность увеличивается за счет добавления большего количества ведущих нулей (уменьшение целевого значения). наоборот, если это заняло больше двух недель, сложность уменьшается путем уменьшения количества ведущих нулей (увеличение целевого значения). этот механизм обеспечивает, что время на генерацию блока остается примерно 10 минут, даже при изменении общей хэш-скорости сети.
этот механизм регулирования сложности, разработанный создателем биткоина сатоси накамото, был спланирован с самого начала для автоматической адаптации к общей вычислительной мощности сети. он поддерживает стабильный темп майнинга и предотвращает излишне быстрое выпускание валюты, что может нарушить рыночную экономику.
У различных проектов блокчейн могут быть различные алгоритмы майнинга. Здесь мы описываем самый известный: алгоритм майнинга биткойна.
процесс выполнения базового майнингового алгоритма биткойна следующий:
размер каждого поля в заголовке блока следующий:
https://time.geekbang.org/column/article/5963
alt="">структура Merkle-дерева выглядит следующим образом:
Большой "Back-end" в домашних условиях.]. alt="">
Основная контроверсия, связанная с майнингом, заключается в алгоритмах доказательства работы (PoW), используемых в Bitcoin и его производных. Эти алгоритмы требуют, чтобы майнеры выделяли значительные вычислительные ресурсы для решения проблем, на которые согласуется сеть. Многие люди работают над этими вычислениями одновременно, но только первый, кто решит проблему, получает вознаграждение. Вычислительные и электрические ресурсы других участников фактически тратятся впустую, не производя дополнительной стоимости.
существует два основных способа оптимизации этого ресурсного отхода:
Какова ценность майнинга? Кажется, это пустая трата ресурсов и бессмысленно для общества.
Возвращаясь к разделу «Зачем нужен майнинг?» этой статьи, прямое значение майнинга заключается в том, что он поддерживает выпуск цифровых валют. Вознаграждения за майнинг стимулируют больше людей участвовать в обслуживании цифровых валют, делая их более стабильными. Кроме того, алгоритмы майнинга поддерживают согласованность транзакций в системах цифровых валют, что делает их более надежными и менее восприимчивыми к внутренним и внешним атакам.
Косвенное значение майнинга происходит от самой цифровой валюты. Цифровые валюты создают глобальную, ненадежную денежную систему, где безопасные транзакции могут происходить без необходимости централизованных институтов, избегая недостатков централизации. Их глобальная природа также позволяет эффективные и низко затратные международные транзакции.
Уменьшатся ли доходы от майнинга до того уровня, когда они упадут ниже затрат, заставивших майнеров прекратить майнинг и транзакции прекратиться?
Одна из распространенных опасений заключается в том, что доходы от майнинга полностью зависят от наград системы, которые с течением времени уменьшаются. Однако майнинг также приносит значительный доход от комиссий за транзакции. По мере того как цифровые валюты приобретают все большее распространение, рынок цифровых валютных транзакций будет расширяться. Увеличение объема транзакций усилит конкуренцию за включение блоков, что приведет к увеличению комиссий, которые пользователи готовы заплатить, чтобы дать приоритет своим транзакциям. В результате майнеры смогут продолжать зарабатывать значительные комиссии за транзакции, обеспечивая тем самым долгосрочную жизнеспособность обработки транзакций.
компенсируют ли комиссии за транзакции затраты на майнинг?
Да, комиссии за транзакции могут помочь компенсировать затраты на майнинг. По мере того, как вознаграждения за блоки уменьшаются со временем, комиссии за транзакции становятся ключевым источником дохода для майнеров. Это гарантирует, что даже если затраты на электроэнергию высоки, майнеры могут все еще поддерживать свою деятельность за счет комиссий, которые пользователи платят за обработку транзакций.
если несколько майнеров одновременно передают свои новые блоки, разделятся ли майнинговые награды?
нет, если несколько майнеров решают головоломку и одновременно транслируют свои новые блоки, это создает временную ветвь в блокчейне. вот как это работает:
пример:
Что такое атака 51% и почему суперноды не могут обмануть?
атака 51% происходит, когда одно лицо или группа контролирует более 50% вычислительной мощности сети. вот почему суперузлы обычно не обманывают:
как блокчейн предотвращает умышленные нарушения и мошеннические транзакции?
предотвращение несогласованного распределения блоков майнерами
определение и функция: в блокчейн-сети все транзакции, которые еще не были включены в блок, временно хранятся в памяти узлов сети (mempool). Майнеры отслеживают свой mempool, чтобы выбирать транзакции для создания новых блоков.
стратегия выбора транзакции: майнеры могут выбирать транзакции из пула памяти на основе своей стратегии. Обычно они отдают предпочтение транзакциям с более высокими комиссиями, но некоторые также могут учитывать другие факторы, такие как возраст транзакции (время, проведенное в пуле памяти).
кто участвует и как они зарабатывают: кроме пользователей, три основных участника в системе биткоина - майнеры, разработчики и операторы узлов.
рост цен на графические процессоры: высокий спрос на графические процессоры со стороны майнеров для майнинга привел к дефициту предложения, что привело к увеличению цен.
майнинг gpus: майнинг gpus - это те, которые ранее использовались для майнинга криптовалюты. эти gpus подвергаются интенсивным вычислениям, что приводит к значительному износу. из-за сниженной производительности большинство людей предпочитают не покупать использованные майнинг gpus.
требование полного избыточного хранения: да, майнерам необходимо хранить весь блокчейн, чтобы проверить, был ли токен ранее потрачен, и обеспечить безопасность и целостность реестра. однако для очень ранних блоков майнерам достаточно хранить только заголовки блоков, а не полное содержимое блоков. это помогает поддерживать эффективность блокчейна, сохраняя его безопасность.
Никаких автоматических вознаграждений свыше 21 миллиона биткойнов: как только общее предложение биткойнов достигнет своего предела в 21 миллион, система больше не будет выдавать новые биткойны в качестве вознаграждения майнерам. Если пользователи также не хотят платить комиссию за транзакцию, теоретически транзакционная система может столкнуться с операционными проблемами. Тем не менее, вполне вероятно, что пользователи будут готовы платить комиссию за транзакцию, чтобы их транзакции были обработаны, обеспечивая непрерывность системы.
Высота блока будет продолжать увеличиваться: даже после достижения максимального предложения в 21 миллион биткойнов высота блока (общее количество блоков) будет продолжать увеличиваться до тех пор, пока майнеры готовы добывать и упаковывать транзакции в новые блоки. Высота блока не ограничена лимитом предложения биткоина.
потенциал для изменений в консенсусе: сообщество может предложить изменения в правилах консенсуса, такие как увеличение общего предложения биткойнов, чтобы обеспечить генерацию новых монет, если это необходимо.
транзакция coinbase: в блокчейне биткойна вознаграждение майнера распределяется через специальную транзакцию, известную как "транзакция coinbase" или "блок-награда". эта транзакция имеет уникальные характеристики:
расчет выручки за блок: выручка майнера рассчитывается каждый раз, когда блок успешно добыт и подтвержден механизмом консенсуса сети. Майнер (или пул майнеров), который добывает блок, получает вознаграждение за блок и накопленные комиссионные сборы со всех транзакций, включенных в блок.
процесс получения вознаграждения: после того как майнер или майнинг-пул успешно добывают блок и он подтверждается сетью, они получают вознаграждение за блок и комиссии за транзакции. Это осуществляется через транзакцию coinbase, которая преобразует комиссии и вознаграждения в непотраченные выходы транзакций (UTXO), зачисленные на счет майнера.
последовательное создание: блоки создаются последовательно в блокчейне. новый блок может быть создан только после успешного майнинга предыдущего блока и его добавления в цепочку.
несколько транзакций в блоке: обычно блоки содержат несколько транзакций. майнеры включают как можно больше транзакций, чтобы максимизировать свои доходы от комиссий за транзакции, а не упаковывать их по отдельности.
Частично заполненные блоки: большинство блоков не используются полностью. Майнеры начинают работать над следующим блоком, как только они находят действительный хэш, который соответствует требованиям сложности, независимо от того, полностью ли заполнен блок.
пустые блоки: блоки могут быть сгенерированы даже если в них нет транзакций для включения. Эти блоки, называемые пустыми блоками, все равно предоставляют системное вознаграждение майнеру.
правило самой длинной цепи: когда происходит ветвление, сеть следует за цепью с наибольшим накопленным доказательством работы, которое обычно является самой длинной цепью. узлы переключаются на более длинную цепь, как только становится очевидно, в какую из них вложено больше работы.
разрешение двойной траты:
Процесс валидации:
расчет комиссии за транзакцию: пользователи могут контролировать комиссию за транзакцию, чтобы ускорить подтверждение своих транзакций. комиссия определяется следующей формулой:
комиссия за транзакцию=общий вход−общий выход−изменение
пользователи устанавливают комиссию за транзакцию, регулируя сумму ввода, сумму вывода и сумму сдачи.
Распределение доходов: При майнинге в пуле узел пула получает вознаграждение за блок. Затем пул распределяет прибыль между своими участниками в зависимости от внесенной ими вычислительной мощности. Это распределение осуществляется через переводы на кошельки майнеров.
Майнинг эгоистичный: эгоистичный майнинг - это стратегия, при которой майнер (или пул майнеров) находит новый блок, но не транслирует его сразу. Вместо этого они продолжают майнить приватно на своей цепочке (скрытой цепочке). Как только они находят дополнительные блоки, они транслируют их все сразу. Это может аннулировать работу других майнеров и наклонить вычислительную мощность и вознаграждения в пользу эгоистичного майнера. Биткойн может смягчить влияние эгоистичного майнинга, улучшив протокол трансляции.
проверка транзакции: когда транзакция передается узлу, она проходит несколько проверок, чтобы определить, должна ли она быть добавлена в пул памяти:
Проверка блока: когда узел-майнер получает новый блок, он выполняет обширные проверки блока и его транзакций:
[1] Лекция 12 | Углубленное изучение технологии блокчейн (4): Всестороннее объяснение консенсуса PoW для блокчейн-гиков:отказ от ответственности: