- Bitcoin miner beta script pastebin
- Цель добычи полезных ископаемых
- Как работает майнинг
- Короткая программа для майнинга блока
- Добыча полезных ископаемых очень трудна
- Майнинг с пулом
- Stratum: связь между пулом и майнерами
- Создание блока для пула
- Информирование майнинг пула об успехе
- Майнинг для удовольствия и прибыли
- Примечания и ссылки
Bitcoin miner beta script pastebin
Bitcoins The hard way описывалось. Как я вручную создал Биткойн-транзакцию и отправил ее в систему. В этой статье я покажу. Что происходит дальше:как транзакция добывается в блок.
Цель добычи полезных ископаемых
Майнинг биткойнов часто рассматривается как способ создания новых биткойнов. Но на самом деле это всего лишь второстепенная цель. Первостепенная важность майнинга заключается в обеспечении того. Чтобы все участники имели согласованное представление о данных биткойна. Поскольку Биткойн-это распределенная одноранговая система. Нет центральной базы данных. Которая отслеживала бы. Кому принадлежат биткойны.
Вместо этого журнал всех транзакций распределяется по сети.
Основная проблема с распределенным журналом транзакций заключается в том. Как избежать несоответствий. Которые могут позволить кому-то потратить одни и те же биткоины дважды. Решение в Биткойне заключается в том. Чтобы майнить непогашенные транзакции в блок транзакций примерно каждые 10 минут. Что делает их официальными. Конфликтующие или недействительные транзакции не допускаются в блок. Поэтому проблема двойных трат избегается.
Хотя майнинг транзакций в блоки позволяет избежать двойных расходов. Он поднимает новые проблемы: Что мешает людям случайным образом майнить блоки?
Как вы решаете. Кто доберется до моего квартала? Как сеть согласует. Какие блоки допустимы? Решение этих проблем является ключевой инновацией биткойна: добыча полезных ископаемых производится очень. Очень сложно. Метод называется доказательство работы. Чтобы добыть блок. Требуется безумно большое количество вычислительных усилий. Но одноранговые узлы в сети легко проверяют. Что блок был успешно добыт.[1]
Каждый добытый блок ссылается на предыдущий блок. Образуя непрерывную цепочку обратно к первому блоку биткойна. Этот блокчейн гарантирует. Что все согласны с записью транзакции.
Это также гарантирует. Что никто не сможет вмешаться в блоки в цепочке. Так как повторный майнинг всех следующих блоков будет вычислительно неосуществим.[2] Пока ни у кого нет больше половины вычислительных ресурсов. Майнинг остается конкурентоспособным. И никто не может контролировать блокчейн.
В качестве побочного эффекта майнинг добавляет в систему новые биткоины. За каждый добытый блок майнеры в настоящее время получают 25 новых биткоинов (в настоящее время они стоят около 15 000 долларов). Что побуждает майнеров выполнять тяжелую работу по добыче блоков.
С возможностью получать $ 15,000 каждые 10 минут. Есть много денег в майнинге.
Как работает майнинг
Майнинг требует задачи. Которую очень трудно выполнить. Но легко проверить. Биткойн-майнинг использует криптографию с хэш-функцией double SHA-256. Хэш принимает кусок данных в качестве входных данных и сжимает его до меньшего хэш-значения (в данном случае 256 бит). С помощью криптографического хэша невозможно получить желаемое значение хэша. Не испробовав множество входных данных. Но как только вы найдете входные данные. Дающие нужное вам значение. Любому человеку будет легко проверить хэш.
Таким образом. Криптографическое хеширование становится хорошим способом реализации Биткойн-
Более подробно. Чтобы добыть блок. Вы сначала собираете новые транзакции в блок. Затем вы хэшируете блок. Чтобы сформировать 256-битное значение хэша блока. Если хэш начинается с достаточного количества нулей[3], блок был успешно добыт и отправлен в сеть Биткойн. И хэш становится идентификатором для блока. В большинстве случаев хэш не работает. Поэтому вы слегка модифицируете блок и повторяете попытку снова и снова миллиарды раз. Примерно каждые 10 минут кто-то успешно минирует блок. И процесс начинается сначала.
На приведенной ниже диаграмме показана структура конкретного блока и способ его хэширования. Желтая часть-это заголовок блока. За которым следуют транзакции. Входящие в блок. Первая транзакция — это специальная транзакция coinbase,которая предоставляет майнеру вознаграждение за майнинг. Остальные транзакции — это стандартные биткойн-транзакции. Перемещающие биткойны. Если хэш заголовка начинается с достаточного количества нулей[3], то блок успешно добывается. Для блока ниже хэш успешен: 0000000000000000e067a478024addfecdc93628978aa52d91fabd4292982a50 и блок стал блоком #286819 в блокчейне.
Заголовок блока содержит несколько полей. Описывающих блок.
Первое поле в блоке — это версия протокола. За ним следует хэш предыдущего блока в блокчейне. Который гарантирует. Что все блоки образуют непрерывную последовательность в блокчейне. (К сожалению. Хэш в заголовке перевернут.) Следующее поле-это корень Меркла,[4] специальный хэш всех транзакций в блоке. Это также ключевая часть безопасности биткойна. Поскольку она гарантирует. Что транзакции не могут быть изменены. Как только они станут частью блока.[5] Далее идет (умеренно точная) временная метка блока. За которой следуют биты значения сложности майнинга .[3] Наконец, nonce-это произвольное значение. Которое увеличивается при каждой попытке хэша для предоставления нового хэш-значения. Самая сложная часть майнинга — это найти nonce. Который работает.
Короткая программа для майнинга блока
Я написал программу на Python. Которая добывает вышеупомянутый блок. Сама программа довольно проста — самая трудная часть кода вычисляет цель сложности из битов.[3] в противном случае это просто цикл над различными значениями nonce.
Каждая итерация помещает данные в структуру. Хэширует их и проверяет результат.
импорт hashlib , struct |
ver = 2 |
prev_block = |
mrkl_root = |
time_ = 0x53058b35 # 2014-02-20 04:57:25 |
биты = 0x19015f53 |
# https://en.bitcoin.it/wiki/Difficulty |
exp = биты >>>> > 24 |
mant = биты & 0xffffff |
target_hexstr = ‘%064x ‘ % ( mant * ( 1 ( 8 * ( exp — 3 )))) |
target_str = target_hexstr . decode ( ‘hex’ ) |
nonce = 0 |
в то время как nonce 0x100000000 : |
header = ( struct . pack ( « , ver ) + prev_block . decode ( ‘hex’ ) [:: — 1 ] + |
mrkl_root . decode ( ‘hex’ ) [:: — 1 ] + struct . pack ( « , time_ , bits , nonce )) |
hash = hashlib . sha256 ( hashlib . sha256 ( header ). digest ()). digest () |
print nonce , hash [:: — 1 ]. encode ( ‘hex’ ) |
если хэш [:: — 1 ] target_str : |
печать |
перерыв |
nonce += 1 |
В следующей таблице показан хэш. Полученный для выбранных значений nonce. Ключевой момент заключается в том. Что каждый nonce генерирует в основном случайное хэш-значение. Время от времени Чтобы получить много нулей. Вам нужно попробовать экспоненциально большое количество nonces. Для этого блока
данное время | гашиш |
---|---|
0 | 5c56c2883435b38aeba0e69fb2e0e3db3b22448d3e17b903d774dd5650796f76 |
1 | 28902a23a194dee94141d1b70102accd85fc2c1ead0901ba0e41ade90d38a08e |
2 | 729577af82250aaf9e44f70a72814cf56c16d430a878bf52fdaceeb7b4bd37f4 |
3 | 8491452381016cf80562ff489e492e00331de3553178c73c5169574000f1ed1c |
39 | 03fd5ff1048668cd3cde4f3fb5bde1ff306d26a4630f420c78df1e504e24f3c7 |
990 | 0001e3a4583f4c6d81251e8d9901dbe0df74d7144300d7c03cab15eca04bd4bb |
52117 | 0000642411733cd63264d3bedc046a5364ff3c77d2b37ca298ad8f1b5a9f05ba |
1813152 | 00000c94a85b5c06c9b06ace1ba7c7f759e795715f399c9c1b1b7f5d387a319f |
19745650 | 000000cdccf49f13f5c3f14a2c12a56ae60e900c5e65bfe1cc24f038f0668a6c |
243989801 | 0000000ce99e2a00633ca958a16e17f30085a54f04667a5492db49bcae15d190 |
856192328 | 0000000000000000e067a478024addfecdc93628978aa52d91fabd4292982a50 |
Я должен отметить. Что я обманул. Начав с блока. Который можно было бы успешно добыть. Большинство попыток добыть блок полностью провалятся — ни одно из значений nonce не будет успешным. В этом случае вам нужно немного изменить блок и попробовать еще раз. Временная метка может быть скорректирована (именно поэтому временная метка в добытых блоках часто бывает неправильной). Новые транзакции могут быть добавлены в блок. Изменив хэш Меркла. Транзакция coinbase может быть изменена — это оказывается очень важным для майнинговых пулов. Любое из этих изменений приведет к совершенно другим хэшам. Поэтому значения nonce можно попробовать снова.
Моя программа Python делает около 42 000 хэшей в секунду. Что в миллион раз медленнее. Чем аппаратное обеспечение. Используемое настоящими майнерами. Моей программе потребовалось бы в среднем около 11 миллионов лет. Чтобы добыть блок с нуля.
Добыча полезных ископаемых очень трудна
Сложность добычи блока просто поразительна. При нынешней сложностивероятность успеха хэша немного меньше. Чем один из 10 19 . Найти удачный хэш сложнее. Чем найти конкретную песчинку из всех песчинок на Земле. Чтобы найти хэш каждые десять минут. Хэш-курс биткойна должен быть безумно большим. В настоящее время майнеры в сети Биткоин они делают около 25 миллионов гигахашей в секунду. То есть каждую секунду около 25 000 000 000 000 000 блоков хэшируются. Я оцениваю (очень приблизительно). Что общее оборудование. Используемое для майнинга биткойнов. Стоит десятки миллионов долларов и использует столько же энергии. Сколько и страна Камбоджа.[6]
Обратите внимание. Что поиск успешного хэша-это совершенно произвольная задача. Которая сама по себе не приносит ничего полезного. Единственная цель поиска небольшого хэша — затруднить майнинг. Что является фундаментальным для безопасности биткойна. Мне кажется, что усилия. Приложенные к добыче биткойнов. В последнее время сошли с рельсов .
Майнинг финансируется в основном за счет вознаграждения в размере 25 биткоинов за блок и незначительно за счет сборов за транзакции (около 0,1 биткоина за блок). Поскольку вознаграждение за майнинг в настоящее время составляет около 15 000 долларов за блок. Это окупает большое количество оборудования. За каждую транзакцию майнеры получают около 34 долларов вознаграждения за майнинг и 0,10 доллара сборов (статистика).
Майнинг с пулом
Поскольку майнинг очень сложен. Он обычно выполняется в майнинговых пулах. Где группа майнеров делит работу и вознаграждение. Если вы добываете самостоятельно. Вы можете успешно добывать блок и получать 25 биткоинов каждые несколько лет. Занимаясь майнингом как частью пула. Вы можете получать долю биткоина каждый день. Что для большинства людей предпочтительнее.
Майнинг-пулы используют интересный метод. Чтобы увидеть. Сколько работы выполняют майнеры. Они посылают блок для майнинга и получают обновления от майнера всякий раз. Когда майнер получает частичное решение. Каждое частичное решение доказывает. Что майнер усердно работает над проблемой и дает майнеру долю в конечном вознаграждении. Когда кто-то преуспевает в добыче блока.
Например, если для майнинга биткойна требуется хэш. Начинающийся с 15 нулей. Майнинг-пул может запросить хэши. Начинающиеся с 10 нулей. Что в миллион раз проще. В зависимости от мощности своего оборудования майнер может находить такое решение каждые несколько секунд или несколько раз в час. В конечном итоге одно из этих решений будет начинаться не только с 10 нулей. Но и с 15 нулей. Успешно добывая блок и выигрывая награду за пул.[7] Затем вознаграждение делится на основе количества акций каждого майнера как часть общей суммы. И оператор пула берет небольшой процент за накладные расходы.[8]
В большинстве случаев кто-то за пределами бассейна сначала заминирует блок. В этом случае оператор пула отправляет новые данные. И майнеры просто начинают майнить новый блок. Люди в пуле могут стать раздражительными. Если долгое время не получают выплат из-за невезения в майнинге.
Stratum: связь между пулом и майнерами
Далее я подробно рассмотрю связь между майнером и майнинговым пулом. Интересно общение между пулом и майнерами. Пул должен эффективно обеспечивать работу майнеров и быстро собирать их результаты. Пул должен убедиться,что майнеры не дублируют работу. И пул должен убедиться. Что майнеры не тратят время на работу над блоком. Который уже был добыт.
Важным вопросом для майнинговых пулов является то. Как поддерживать быстрых майнеров. Поле nonce в заголовке слишком мало для быстрых майнеров. Так как они будут проходить через все возможные значения быстрее. Чем пул может отправлять блоки. Решение состоит в том. Чтобы позволить майнерам обновить транзакцию coinbase. Чтобы они могли поместить туда дополнительные nonces. Это усложняет майнинг. Так как после построения транзакции coinbase майнер должен пересчитать хэш-Дерево Меркла. А затем попробовать майнинг блока.
Я собираюсь посмотреть на протокол Stratum mining pool. Который используется многими пулами. (Некоторые альтернативные протоколы-это протоколы Getwork и Getblocktemplate.) Следующая программа Python использует протокол Stratum для выполнения запроса майнинга к GHash.IO майнинг пула и отображение результатов. (Эта программа является минимальной демонстрацией; не используйте этот код для реального майнинга.)
импорт сокета |
sock = socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) |
носок . соедини (( , 3333 )) |
sock . send ( \n ) |
печать sock . recv ( 4000 ) |
sock . send ( «» <«params»: [«kens_1». «password»]. «id»: 2, «method»: «mining. authorize»>\n «»» ) |
печать sock . recv ( 4000 ) |
Ниже приводится информация о том. Что пул майнинга отправляет обратно по сети в ответ на описанную выше программу. Поскольку протокол Stratum использует JSON-RPC результаты читаются в формате ASCII. А не в двоичных пакетах. Используемых большинством биткойнов. Это предоставляет все данные. Необходимые для начала майнинга в составе пула:
Первая строка-это ответ от сервера пула с информацией о подписке. Первые значения не слишком важны. Значение 4bc6af58 -это значение extranonce1, которое используется при построении блока. Каждый клиент получает уникальное значение. Чтобы гарантировать. Что все клиенты майнинга генерируют уникальные блоки и не дублируют работу. Следующее значение ( 4 байты) — это длина значения extranonce2_size. Которое майнер помещает в coinbase во время майнинга.
Вторая строка-это сообщение mining.set_difficulty для нашего клиента. С трудом 16, я могу получить долю каждый час или два на моем компьютере. Для сравнения. Сложность майнинга биткоина составляет 3129 573 174,52 [3] — таким образом. Получить долю в этом пуле примерно в 200 миллионов раз легче. Чем успешно добыть блок самостоятельно. Вот почему люди присоединяются к бассейнам.
Третья строка-это уведомление mining. notify нашему клиенту. Это сообщение определяет тот блок. Который мы должны добыть. В разделе
job_id | 58af8d8c |
превхаш | 975b9717f7d18ec1f2ad55e2559b5997b8da0e3317c803780000000100000000 |
coinb1 | 0100000001000000000000000000000000000000000000000000000000000000 0000000000ffffffff4803636004062f503253482f04428b055308 |
coinb2 | 2e522cfabe6d6da0bd01f57abe963d25879583eea5ea6f08f83e3327eba9806b 14119718cbb1cf04000000000000000000000001fb673495000000001976a914 80ad90d403581fa3bf46086a91b2d9d4125db6c188ac00000000 |
merkle_branch | [ |
версия | 00000002 |
nbits | 19015f53 |
ntime | 53058b41 |
clean_jobs | ложный |
Job_id используется для идентификации этой задачи майнинга. Если майнер сообщает об успешном выполнении.
Большинство полей используются в заголовке блока. Prevhash — это хэш предыдущего блока. Очевидно, смешивание big-ending и little-endian недостаточно запутанно. Поэтому это хэш-значение также имеет каждый блок из 4 байт. Обращенных вспять. Эта версия является версией блочного протокола. Nbits указывает на сложность[3] блока. Временная метка ntime не обязательно является точной.
Поля coinb1 и coinb2 позволяют майнеру построить транзакцию coinbase для блока. Эта транзакция формируется путем объединения coinb1, значения extranonce1, полученного в начале, extranonce2, сгенерированного майнером, и coinb2. Результатом является транзакция в биткойн-протоколе. Хэш-список merkle_branch позволяет майнеру эффективно пересчитать хэш Merkle с помощью новой транзакции coinbase.
clean_jobs используется. Если майнеру необходимо перезапустить задания майнинга.
После получения этих данных майнер может начать генерировать транзакции coinbase и блоки майнинга.
Создание блока для пула
Как только майнер получил информацию из пула, он может легко сформировать транзакцию coinbase , присоединившись к coinb1, extranonce1, extranonce2и coinb2, чтобы сформировать транзакцию coinbase. На приведенной ниже диаграмме показано. Как комбинация этих четырех значений формирует полную транзакцию с nonces в середине сценария coinbase. (Приведенный ниже блок немного отличается от описанного ранее.)
Структура транзакции coinbase похожа на обычную транзакцию. Но есть несколько важных отличий. Обычная транзакция переводит биткоины с входных данных (обычно адреса источника) на выходные данные (обычно адреса назначения). Транзакция coinbase генерирует новые биткоины из воздуха. А не делает перевод. Поэтому транзакция немного отличается. Предыдущий выходной хэш и индекс не имеют отношения к транзакции coinbase. первый сценарий-это скрипциг который подписывает транзакцию. Чтобы доказать право собственности на входящие биткоины. В транзакции coinbase это не имеет значения. Поэтому вместо этого поле называется coinbase и представляет собой в основном произвольные данные.[9] (многие майнеры скрывают там сообщения.) Поле value в транзакции coinbase — это вознаграждение за майнинг 25 биткоинов плюс любые биткоины. Оставшиеся от других транзакций (оставшиеся биткоины рассматриваются как плата за майнинг). Наконец, как обычные транзакции. Так и транзакции coinbase используют второй скрипт (scriptPubKey) для указания получателей биткоинов.[10] Подробнее о транзакциях читайте в моей предыдущей статье.
После создания транзакции coinbase хэш для этой транзакции coinbase объединяется с данными merkle_branch из пула для генерации хэша Merkle[4] для всего набора транзакций. Из-за структуры хэша Меркла (объясненного ниже) это позволяет легко пересчитать хэш для всего набора транзакций.
Наконец, заголовок блока строится из нового хэша Merkle и данных. Предоставленных пулом. И алгоритм хэширования может повторять значения nonce в заголовке. Так же как и программа Python ранее. После того. Как все значения nonce были опробованы, майнер увеличивает extranonce2, генерирует новую транзакцию coinbase и продолжает.
Информирование майнинг пула об успехе
Сложность[3] для майнинг-пула устанавливается намного ниже. Чем сложность майнинга биткойна (требуется меньше ведущих нулей). Поэтому получить долю гораздо проще. Когда блок хэшируется до уровня сложности пула. Вы отправляете простое сообщение JSON в пул майнинга. Чтобы отправить его:
Параметры-это имя работника, идентификатор задания, extranonce2, время и заголовок nonce. Этой информации достаточно для пула. Чтобы построить соответствующую транзакцию coinbase и заголовок и проверить блок. Если хэш соответствует сложности пула,вы получаете долю. Если хэш также соответствует гораздо более сложной сложности биткойна. Блок был успешно добыт. В этом случае пул отправляет блок в биткойн-сеть, и каждый. У кого есть акции. Получает соответствующую оплату.
Майнинг для удовольствия и прибыли
Если вы интересуетесь майнингом. То на удивление легко попробовать заняться майнингом самостоятельно. Хотя Вам повезет заработать хотя бы Пенни. Просто создайте учетную запись в майнинг-пуле. Таком как BTC Guild, загрузите программное обеспечение для майнинга. Такое как cpuminer (minerd.exe). И запустите программное обеспечение. Чтобы начать майнинг. Для пула с низкой сложностью вы должны получить акции за несколько минут; в бассейне с более высокой сложностью (например, Гаш.IO), вам может потребоваться час или два. Чтобы получить долю. Что еще более расстраивает.[3]
На скриншоте выше показано. Как выглядит майнинг. Когда вы получаете акции и добываете блоки. Мне повезло,и мне потребовалась всего минута. Чтобы успешно добыть свою долю. Через минуту кто-то успешно заминировал блок. Поэтому пул говорит всем начинать сначала. Еще один блок был добыт менее чем через минуту после этого — хотя блоки находятся в среднем на расстоянии 10 минут друг от друга. Время может сильно варьироваться. На создание моей следующей доли ушло 12 минут. Пробежав некоторое время. Я заработал 0,00000043 BTC. Что составляет крошечную долю цента.
Майнинг биткоина — это Первоначально люди могли майнить с помощью процессора на обычном ПК. Но это было непрактично в течение некоторого времени. Затем майнинг был выгружен на графические процессоры. Теперь майнинг осуществляется с помощью специального оборудования ASIC. Которое быстро набирает скорость. Прибыльный майнинг очень конкурентоспособен. И вам нужно будет искать информацию в другом месте.
Если вы хотите попробовать майнинг просто для удовольствия. Вы можете предпочесть добывать валюту. Такую как Dogecoin. А не Биткойн. Во-первых, Dogecoin использует другой хэш-алгоритм. Который плохо работает с ASIC-оборудованием. Поэтому вы не так обездолены по сравнению с профессиональными майнерами. Во-вторых, поскольку dogecoins стоят гораздо меньше. Чем биткоины. Вы получите гораздо большее количество dogecoins. Что кажется более полезным. Для майнинга Dogecoin я использовал dogepool.pw пул несколько произвольно. Процесс почти такой же. Как и майнинг биткоина. За исключением того. Что вы используете алгоритм scrypt вместо sha256d Есть много других альтернативных криптовалют на выбор.
Примечания и ссылки
[1] Биткойн майнинг выглядит как НП (недетерминированный полином) задача. Так как решение может быть быстро проверено. Однако есть несколько проблем с тем. Чтобы сделать это строгим. Во-первых, поскольку хэши имеют фиксированный размер. Майнинг может выполняться в постоянное время (но с очень большой константой 2^256). Таким образом. Вам нужно будет рассмотреть расширенную схему майнинга. Где сложность может доходить до бесконечности. Во — вторых. Майнинг должен быть превращен в проблему принятия решений-например. Вместо того. Чтобы найти nonce. Проблема будет заключаться в том. (Обратите внимание. Что если вы можете решить эту проблему. Вы можете быстро найти nonce с помощью двоичного поиска.)
С этими изменениями проблема майнинга находится в NP. Следующий вопрос заключается в том. Является ли он NP-полным. То есть можно ли произвольную NP-полную задачу превратить в задачу майнинга? Я полагаю, что в настоящее время это неизвестно.
[2] Вы можете задаться вопросом. Что произойдет. Если двум майнерам удастся добыть блок примерно в одно и то же время. Может быть, проблема конфликтующих транзакций только что была заменена проблемой конфликтующих блоков?) Правило состоит в том. Что используется только самая длинная цепочка допустимых блоков. А другая ветвь игнорируется. Таким образом. Когда майнер расширяет цепочку с одним из двух параллельных блоков. Другой блок становится сиротским блоком и игнорируется.
Сиротские блоки довольно распространены, примерно по одному в день. По этой причине (несколько произвольная) рекомендация заключается в том. Чтобы дождаться шести подтверждений (около одного часа). Прежде чем рассматривать сделку. Твердо подтвержденную.
[3] Я описывал успешный хэш как начинающийся с достаточного количества нулей. Но есть официальное определение сложности. Допустимый блок должен иметь хэш ниже целевого значения. (Поскольку цель начинается с кучки нулей. То же самое будет и с допустимым хэшем.)
Существует два различных трудных для понимания способа представления цели. Во-первых, биты-это представление мантиссы/экспоненты цели в 32 битах. Во-вторых, сложность-это соотношение между базовой целью и текущей целью. Сложность N в N раз сложнее. Чем эта базовая цель. Базовая цель такова 0x00000000FFFF0000000000000000000000000000000000000000000000000000 , что соответствует примерно 1 из 2 32 или 1 из 4,2 миллиарда хэшей. Следующих друг за другом.
Сложность меняется примерно каждые две недели. Чтобы сохранить хэш-скорость блока около 1 каждые 10 минут. The https://blockchain.info/stats значение сложности составляет 3,129,573,174. 52, что соответствует целевому значению 00000000000000015f5300000000000000000000000000000000000000000000 . Умножение производительности моего компьютера на текущую сложность показывает. Что моему компьютеру потребуется около 35 000 лет. Чтобы добыть блок.
Сложность пула важна при использовании пула майнинга. Мой компьютер может делать около 12 миллионов хэшей в секунду под управлением cpuminer. Так что при сложности 1 Мой компьютер может находить блок каждые 6 минут. Пул Гильдии BTC использует сложность 2, поэтому я получаю долю примерно каждые 12 минут. Гаш.С другой стороны, IO имеет минимальную сложность 16, так что я получаю долю только каждый час или два в среднем. (Моя общая прибыль была бы одинаковой в любом случае. Так как акции на блок масштабируются обратно пропорционально сложности.)
[4] Вместо того чтобы хэшировать все транзакции в блок напрямую. Транзакции сначала хэшируются вместе. Чтобы получить корень Меркла. Корень Меркля — это корень бинарного дерева Меркля. Идея состоит в том. Чтобы начать со всех хэшей транзакций. Пары хэшей объединяются вместе. Чтобы получить новые хэши. Этот процесс повторяется в новом списке хэшей и продолжается рекурсивно до тех пор. Пока не будет получен один хэш. Этот конечный корневой хэш является значением. Используемым при вычислении блока. (Более подробную информацию смотрите в Википедии.)
В дереве Меркла каждая транзакция хэшируется. Затем пары хэшей соединяются вместе. Затем пары новых хэшей хэшируются вместе. И так далее. Пока не останется один хэш. Это позволяет эффективно проверять хэш одной транзакции без пересчета всех хэшей. Одно из мест. Где это полезно. — это генерация новой транзакции coinbase для пула майнинга.
(Запатентованная) идея дерева Меркла заключается в том. Что если вам нужно изменить или проверить одну транзакцию. Вам не нужно пересчитывать все. Но вы можете просто пересчитать затронутые пары. Лично я думаю. Что дерево Меркла-это бессмысленная оптимизация для Биткойна. И для разумных чисел транзакций было бы быстрее сделать один большой хэш. А не несколько хэшей вверх по дереву Меркла.
Вот демонстрационный код для вычисления корня Меркла для обсуждаемого блока. 99 хэшей транзакций жестко закодированы для удобства. Полученный корень Меркла является 871714dcbae6c8193a2bb9b2a69fe1c0440399f38d94b3a0f1b447275a29978a
Источник