Как работает объединенный майнинг?

Как реализация объединенного майнинга влияет на глобальный хешрейт альтернативных цепочек?

Подходит ли одно решение для всех? Подходит ли одно решение для некоторых? Уменьшается ли количество «подходящих решений» по мере того, как они тестируются?

Объяснение того, как на самом деле работает объединенный майнинг, было бы превосходным.

Я думаю, что ответ, который вы приняли, не является строгим ответом на ваш вопрос, как он указан в заголовке, а скорее на «Как работает объединенный майнинг». Можете ли вы изменить свой заголовок, чтобы отразить это?

Ответы (4)

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

Начнем с общего объяснения: майнер (или контроллер майнинга в случае майнинга в пуле) фактически строит блок для обеих цепочек хеширования таким образом, чтобы один и тот же расчет хэша защищал оба блока. Рабочие единицы, основанные на этом блоке, затем назначаются майнерам. Если майнер решает блок (на уровне сложности одной или обеих цепочек блоков), блок повторно собирается с завершенным доказательством работы и отправляется в правильную цепочку блоков (или оба блока повторно собираются отдельно и каждый отправляется в соответствующую цепочку блоков). сеть, если она соответствует обоим их требованиям сложности).

Единственная запутанная деталь заключается в том, как один и тот же хеш может защитить обе цепочки блоков. Я буду использовать пример Биткойна и Namecoin, где Namecoin поддерживает объединенный майнинг, а Биткойн — нет:

Во-первых, майнер должен собрать набор транзакций для обеих цепочек блоков. Затем он собирает последний блок Namecoin и хэширует его. Затем он создает транзакцию, содержащую этот хэш, действительный в цепочке Биткойн, и вставляет его в транзакцию Биткойн, установленную на вершине дерева. Затем он собирает окончательный биткойн-заголовок с этой транзакцией и отправляет рабочие единицы.

Если майнер решает хэш на уровне сложности Биткойн, блок Биткойн собирается и отправляется в сеть Биткойн. Хэш Namecoin ничего не делает, и сеть Биткойн игнорирует его.

Если майнер решает хеш на уровне сложности Namecoin, блок Namecoin собирается. Он включает в себя набор транзакций Namecoin, заголовок блока Namecoin, заголовок блока Bitcoin и хэш остальных транзакций в блоке Bitcoin. Весь этот «беспорядок» затем передается в систему Namecoin. Система Namecoin, поддерживающая объединенный майнинг, принимает это как доказательство работы, поскольку она содержит работу, которая должна быть выполнена после того, как заголовок блока и набор транзакций Namecoin были созданы. (Потому что вы не можете создать набор биткойн-транзакций, содержащий этот хеш, и, следовательно, биткойн-заголовок, который защищает его, без этой информации. Таким образом, это доказывает, что работа была проделана.)

Обратите внимание, что майнер может решить обе цепочки одновременно, и он это сделает, если решит на более высокой сложности. Один блок может «выиграть» в публичной цепочке, а другой нет. Они полностью независимы — объединена только добыча полезных ископаемых.

Три ключевых момента, которые нужно помнить:

  1. Цепочка биткойнов не смешивается с вещами Namecoin из-за объединенного майнинга. В дерево транзакций вставляется не более одного крошечного хэша.
  2. Две хэш-цепочки остаются полностью независимыми. «Биткойн-материал», который находится в дереве Namecoin, в основном игнорируется и используется только для проверки доказательства работы. (Это немного раздует цепочку Namecoin, поскольку это означает, что некоторые блоки будут иметь дополнительный заголовок и дополнительный хэш.)
  3. Наконец, от Биткойна не требуется никакой специальной поддержки.

Выгода для Namecoin очевидна. Многие биткойн-майнеры, вероятно, будут заниматься совместным майнингом, поскольку это практически ничего не стоит им и дает им большую отдачу, чем добыча биткойнов в одиночку. В результате время генерации их блоков будет более предсказуемым, а их транзакции более защищенными от атаки 51%.

«Затем он создает транзакцию, содержащую этот хэш, действительный в цепочке Биткойн, и вставляет его в транзакцию Биткойн, установленную на вершине дерева». - просто для ясности, кто-то создает фиктивную транзакцию для 0BTC, которая имеет точно такой же хеш, что и блок Namecoin, и вводит ее как последнюю хешированную транзакцию в дереве merkle? Разве генерация фиктивной транзакции не требует много ресурсов, если она должна точно соответствовать хешу? Если он просто вставлен без генерации, не делает ли это блок недействительным, поскольку он содержит недопустимую транзакцию?
@ThePiachu: ему не обязательно «совпадать» с хэшем, он просто должен содержать хэш.
Таким образом, ключ к пониманию этого заключается в том, что Namecoin имеет явную поддержку объединенного майнинга. С двумя цепями, не поддерживающими его, это было бы невозможно. Это то, с чем я боролся, спасибо! Кстати, ссылка, в которой задокументирована поддержка объединенного майнинга Namecoin, была бы отличной!
Где транзакции Namecoin отображаются в блоке биткойнов? Содержатся ли они в coinbase транзакции субсидирования майнера? Можете ли вы указать Tx в блокчейне и идентифицировать его как хэш блока Namecoin?
@pinhead Нет. Только хеш блока Namecoin отображается в блоке Bitcoin.
@DavidSchwartz Хорошо, но ГДЕ хэш блока namecoin вставляется в блок биткойнов? В сделке? В коинбейсе? В каком-то другом поле данных?
@pinhead Это входит в ScriptSig транзакции coinbase. Спецификация здесь .
Почему время генерации блоков будет более предсказуемым и сможет предотвратить атаку 51% при слитном майнинге? Спасибо.
другая проблема. например, в какой-то момент namecoin труднее решить, чем биткойн. поэтому, если майнер решит решить как namecoin, так и биткойн, у него будет меньше шансов решить блок биткойнов, чем у некоторых майнеров, которые решают только биткойны.
@hqt В этом нет смысла. То, что вы также пытаетесь добыть блок какого-то другого типа, не влияет на вероятность того, что вы добудете блок биткойнов — эта вероятность полностью определяется сложностью биткойнов.
@ Дэвид Шварц, да. это правда сейчас. Но я упоминаю в будущем, что решение проблемы с неймкойном может быть сложнее, чем решение проблемы с биткойном (другими словами, одноразовый номер неймкойна больше, чем у биткойна), поэтому любые майнеры, решающие обе валюты, имеют меньшую вероятность выиграть блок биткойнов, чем только-биткойн майнер. (вряд ли это произойдет, я лишь упомянул о его технической стороне)
о моем первом вопросе. Я не понимаю, почему время генерации блоков будет более предсказуемым и может предотвратить атаку 51% при слиянии? Можете ли вы объяснить мне яснее этот момент, спасибо.
@hqt Без объединенного майнинга люди будут добывать монету только тогда, когда стоимость монеты превышает стоимость мощности для майнинга. При объединенном майнинге нет дополнительных затрат на добычу монеты, и люди будут добывать ее до тех пор, пока она не обесценится. Это делает мощность хэширования более высокой и более предсказуемой.
@hqt Вероятность того, что вы добудете блок, зависит исключительно от сложности. Объединенный майнинг не влияет на сложность, поэтому ваши шансы на майнинг любого блока такие же, как если бы вы не использовали объединенный майнинг. Каждый хеш — это как два лотерейных билета вместо одного.
Например. сложность названной монеты равна 10, а сложность биткойна — всего 8. Таким образом, майнер будет использовать сложность 10 как для биткойна, так и для именной монеты. По сравнению с майнером, который добывает только биткойны, он/она будет решать биткойны только со сложностью 8. В этом случае слитный майнинг снижает вероятность победы в гонке.
@hqt Зачем ему делать что-то настолько глупое? Для каждого хэша он проверяет, добывает ли он биткойн-блок и добывает ли он блок namecoin. Если он майнит блок биткойнов, он будет майнить блок namecoin. Если он попадает между двумя уровнями сложности, он будет добывать только блок namecoin. Зачем ему выбрасывать действительный блок namecoin только потому, что он не соответствует сложности блока биткойнов?
«Зачем ему выбрасывать действительный блок namecoin только потому, что он не соответствует сложности блока биткойнов?» Я не понимаю этот момент. Поскольку вы занимаетесь слитным майнингом в биткойн-блокчейне, если вы не сталкиваетесь с трудностями для биткойн-блока, как другие майнеры могут принять вашу цепочку блоков?
@hqt Другие майнеры биткойнов не будут, но другие майнеры именных монет будут, поскольку это соответствует сложности именных монет. Когда вы объединяете мой, каждый хеш — это попытка сформировать два (или более) действительных блока для двух (или более) разных цепочек блоков.
@DavidSchwartz ах, большое спасибо. Мне не хватает этой важной информации. Блокчейн namecoin будет поддерживать собственный блокчейн.
Не читал все это, но проверил документ Blockstack, § 3.5 : «Один из наших ключевых выводов заключается в том, что объединенный майнинг в настоящее время терпит неудачу на практике: ведущий блокчейн с объединенным майнингом, Namecoin, уязвим для атаки 51%. , объединенный майнинг создавал ложное чувство безопасности. F2Pool контролирует 30-35% вычислительной мощности Биткойн, но более 60% вычислительной мощности Namecoin посредством объединенного майнинга, что делает Namecoin уязвимым для атаки 51%».
Да, слитный майнинг делает противоположное предотвращению атаки 51%, устраняя экономические потери в случае сбоя. bitcoinmagazine.com/articles/side-chains-challenges-потенциал

По сути, идея состоит в том, что вы собираете блок Namecoin и хешируете его, а затем вставляете этот хеш в блок биткойнов. Теперь, когда вы решаете биткойн-блок на уровне сложности выше или равном уровню сложности Namecoin, это будет доказательством того, что для блока Namecoin был проделан такой же объем работы. Протокол Namecoin был изменен, чтобы принимать биткойн-блок (решенный на уровне сложности Namecoin или выше), содержащий хэш блока Namecoin, в качестве доказательства работы для блока Namecoin. Биткойн-блок будет приемлем для сети Биткойн только в том случае, если он находится на уровне сложности сети Биткойн.

Цепочка блоков Биткойн получает один дополнительный хеш, когда принимается объединенный блок майнинга, а цепочка блоков Namecoin получает немного больше (поскольку она включает блок Биткойн), когда принимается объединенный блок майнинга. Однако из-за дерева Меркла весь блок биткойнов не нужно включать в дерево Namecoin, а только хэши верхнего уровня (поэтому дополнительное раздувание цепочки Namecoin не является большой проблемой).

Поскольку вы зарабатываете больше денег на майнинге как Namecoins, так и майнеров Bitcoin, в конечном итоге все они будут заниматься объединенным майнингом, и уровень сложности для всех цепочек блоков в конечном итоге будет одинаковым.

Кроме того, экономический стимул для майнинга будет комбинированным экономическим стимулом всех сетей, что сделает все сети более безопасными. Конечно, это позволяет конкурирующим сетям (с разным уровнем инфляции) быстро становиться безопасными. Это подвергает Биткойн большей конкуренции.

В конечном счете, ценность Биткойна является отражением потребности в Биткойнах для обмена. Чем больше людей используют биткойн для совершения покупок, тем выше спрос на биткойны и тем выше цена на биткойны. (Спекуляция также повышает цену, но долгосрочная спекуляция, по сути, является ставкой на то, что транзакционный спрос на Биткойн будет увеличиваться в будущем.) Чем выше цена, тем выше стимул для майнинга.

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

Это означает, что, в конечном счете, в той мере, в какой валюты взаимозаменяемы для конечных пользователей, объединенный майнинг не повышает общую безопасность сетей. Спрос на валюту определяет цену (и, следовательно, стоимость вознаграждения). Повышенный спрос на какую-либо конкретную валюту приводит к снижению спроса на другие, снижая стимул к добыче других валют. Общий стимул является функцией общего спроса на все биткойн-подобные валюты.

За исключением того, что теперь конкурирующие валюты могут позиционироваться как «такие же безопасные, как Биткойн, но с более низкой комиссией за транзакции». Другими словами, между конкурирующими валютами идет гонка уступок за самую низкую комиссию за транзакцию, потому что снижение комиссии за транзакцию не вредит безопасности сети по сравнению с другими объединенными сетями майнинга. Пользователи, следуя своим личным интересам, будут использовать валюту с самой низкой комиссией за транзакции, если она имеет такую ​​​​же безопасность, как и конкуренты.

Это повысит цену валюты с самой низкой комиссией за транзакцию (поскольку спрос на валюту выше) и снизит цену валюты с более высокой комиссией за транзакцию (поскольку спрос на эти валюты падает, поскольку он удовлетворяется спросом на валюту). конкурирующая валюта). Поскольку стимулом для майнинга являются валюты с более высокой комиссией за транзакцию, общий стимул к майнингу уменьшится. До тех пор, пока добыча валюты объединяется с валютой, находящейся на халяву, она будет бессильна увеличить стимулы путем введения обязательных транзакционных сборов.

Результатом будет снижение стимула к майнингу, уменьшение майнинга, и в конечном итоге все сети, допускающие объединенный майнинг, станут небезопасными.

Одно небольшое уточнение — не все валюты, подобные биткойнам, будут обслуживать одинаковый спрос, и Namecoin — отличный тому пример. Спрос на Namecoin в значительной степени основан на его альтернативной системе DNS, которую Биткойн не предоставляет.
Очень верно. В той мере, в какой разные биткойн-подобные валюты обслуживают действительно разные потребности, объединенный майнинг может повысить общую безопасность. Но в той мере, в какой объединенный майнинг позволяет снизить комиссию за транзакцию для каждого отдельного типа валюты, он разрушит общую безопасность цепочки блоков. (Возможно, есть способ контролировать, какие валюты могут использоваться для майнинга биткойнов? Если это так, биткойн может предлагать только те валюты, которые обеспечивают минимальный стимул для майнеров.)
«В основном идея состоит в том, что вы собираете блок Namecoin и хешируете его, а затем вставляете этот хэш в блок биткойнов». - куда именно вставлять хэш блока Namecoin?
Исаак, меня также интересует, куда уходит хэш и существуют ли какие-либо примеры на Blockchain .info. Спасибо @ThePiachu

Сам Сатоши, кажется, является изобретателем объединенного майнинга. По его словам ( bitcointalk.org ):

Я думаю, что BitDNS может быть полностью отдельной сетью и отдельной цепочкой блоков, но при этом делить мощность процессора с биткойнами. Единственное совпадение — сделать так, чтобы майнеры могли искать доказательство работы для обеих сетей одновременно.

Сети не будут нуждаться в какой-либо координации. Майнеры будут подписываться на обе сети параллельно. Они будут сканировать SHA таким образом, что в случае попадания они потенциально решат обе проблемы одновременно. Решение может быть только для одной из сетей, если одна сеть имеет меньшую сложность.

Я думаю, что внешний майнер мог бы вызвать getwork для обеих программ и объединить работу. Может быть, вызвать Биткойн, получить от него работу, передать ее в BitDNS getwork, чтобы объединить в совместную работу.

Вместо фрагментации сети совместно используют и увеличивают общую мощность ЦП друг друга. Это решит проблему, заключающуюся в том, что при наличии нескольких сетей они представляют опасность друг для друга, если доступная мощность процессора совпадет с одной. Вместо этого все сети в мире будут совместно использовать общую мощность ЦП, увеличивая общую мощность. Небольшим сетям было бы проще начать работу, подключившись к готовой базе майнеров.

При объединенном майнинге следует помнить, что хэш блока вспомогательной цепочки (например, namecoin) не обязательно должен быть ниже порога вспомогательной цепочки. скорее, это хэш блока родителя (например, биткойн), который должен быть ниже порога вспомогательной цепи (неймкойн). например, посмотрите, что случилось с namecoin, когда в блоке 19200 был введен объединенный майнинг :

nmc block height: 19199
nmc block hash: 000000000000b19f0ad5cd46859fe8c9662e8828d8a75ff6da73167ac09a9036

nmc block height: 19200
nmc block hash: d8a7c3e01e1e95bcee015e6fcc7583a2ca60b79e5a3aa0a171eddd344ada903d

этого не произошло из-за изменения сложности неймкойна, а также не произошло потому, что сложность неймкойна стала неактуальной из-за объединенного майнинга. скорее это произошло потому, что критерии оценки действительных блоков изменились из-за объединенного майнинга.

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

причина, по которой этот хэш блока родительской цепочки имеет отношение к вспомогательной цепочке, заключается просто в том, что хеш блока вспомогательной цепочки включен в скрипт coinbase txin в родительской цепочке. этот coinbase txin может принимать любое произвольное значение — он не должен создавать действительный скрипт . так что это хорошее место для размещения хэша блока родительской цепочки.

Итак, работая в обратном направлении, для проверки блока, добытого слиянием, нам нужно:

  1. убедитесь, что хэш блока вспомогательной цепочки (перед добавлением данных родительской цепочки) существует в скрипте coinbase txin
  2. убедитесь, что coinbase tx существует в родительском дереве меркла
  3. убедиться, что в хэше родительского блока существует корень merkle родителя
  4. убедитесь, что хэш родительского блока ниже порогового значения вспомогательной цепи

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