Почему майнинг необходим для сети/системы Биткойн? [дубликат]

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

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

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

Итак, во-первых, если что-то, что я сказал до сих пор, не соответствует действительности или вводит в заблуждение, пожалуйста, начните с исправления меня!

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

Если я отправлю кому-то 10 BTC, зачем кому-то другому («майнеру») это проверять? Разве эта транзакция не должна храниться где-то в БД и проверяться путем запроса этой БД?

Я не думаю, что это дубликат этого вопроса, @StephenGornick. Это касается не только проблемы майнинга, но и того, как майнеры способствуют безопасности и честности сети.

Ответы (4)

Вы должны начать здесь: http://www.youtube.com/watch?v=GmOzih6I1zs

Как упоминается в видео, майнинг необходим для обеспечения справедливости и поддержания стабильности, безопасности и надежности сети.

Теперь давайте посмотрим, что это значит. Но сначала очень краткое объяснение принципа майнинга.

Добыча

Сеть Биткойн состоит из узлов, которые хранят базу данных со всеми транзакциями, называемую цепочкой блоков. Эта база данных состоит из длинной цепочки блоков, каждый из которых содержит одну или несколько транзакций. В основном майнеры объединяют все неподтвержденные транзакции в блок. Форма блока должна удовлетворять определенным условиям, прежде чем блок будет считаться действительным. Это условие называется доказательством работы и не является тривиальным для понимания. Когда майнер находит действительный блок, он может отправить свой блок в сеть, и другие проверят его. Когда он действительно будет действительным, все клиенты добавят его в свою цепочку блоков. Каждый раз, когда майнер находит действительный блок, он имеет право назначить себе определенное количество биткойнов, называемое вознаграждением за блок .. Они также получают все комиссионные сборы за все транзакции, включенные в его блок. Таким образом, новые биткойны добавляются в сеть, и можно гарантировать, что транзакции могут быть подтверждены.

Справедливость

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

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

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

Таким образом, майнеры гарантируют, что люди могут тратить только биткойны, которыми они владеют.

Стабильность

Это наименее сложно для понимания. Биткойн-протокол устанавливает сложность задачи майнинга таким образом, что в среднем каждые 10 минут какой-то майнер может найти новый блок. Таким образом, подтверждение транзакции занимает в среднем 10 минут.

Однако после того, как транзакция была включена в блок, она все еще не является необратимой. Это непросто понять, но когда майнеры пытаются добыть новый блок, они включают в этот блок номер и идентификатор предыдущего. Итак, допустим, кто-то добыл блок 100, который следует за номером 99. Может случиться так, что кто-то еще не заметил, что кто-то нашел действительный блок, чтобы следовать за 99, и также сам сделал действительный номер 100, назовем его 100'. В этом случае большинство клиентов примут только первый полученный блок. Но может случиться так, что другой майнер сначала получил 100' и найдет следующий блок на 100', а не на 100. Тогда получается следующая ситуация:

98 - 99 - 100
      \ _ 100' - 101'

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

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

Тот факт, что транзакцию можно будет считать подтвержденной в среднем через 1 час, делает ее стабильной. Редко случается, что транзакции, подтвержденные более 1 часа, когда-либо снова отменяются.

Безопасность и охрана

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

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

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

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

Но это недостаток безопасности, какое это имеет отношение к тому, почему майнеры должны майнить? Чем больше людей занимается майнингом, тем выше общая вычислительная мощность, и кому-то будет намного сложнее провести такую ​​атаку 51%. В настоящее время иметь оборудование, способное выполнять такую ​​атаку, было бы настолько дорого, что это экономически невыполнимо, если не полностью невозможно. Таким образом, каждый майнер, который вкладывает свои силы в сеть, гарантирует, что только честные майнеры найдут блоки и что сеть будет безопасной для людей, которым можно доверять.

Спасибо @Steven Roose (+1) - отличный ответ. Таким образом, майнинг — это акт фактического согласования/проверки транзакций в распределенной сети (вместо того, чтобы центральный сервер выполнял согласование). И в качестве награды за сверку майнеры получают вознаграждение в виде вновь созданных биткойнов. Это справедливая оценка? Спасибо еще раз!
Да, это подводит итог. Вопрос, который возникает у некоторых людей, заключается в том, будет ли комиссия за транзакцию за блок достаточной, чтобы стимулировать майнеров, когда вознаграждение за блок исчезнет. Награда за блок уменьшается вдвое каждые 4 года и в декабре 2012 года изменилась с 50 до 25 BTC. Когда-нибудь он станет равным нулю, и с этого момента майнерам придется зарабатывать деньги на комиссиях за транзакции.
@StevenRoose Итак, майнеры также выполняют фактическую проверку подписи? Не «сеть», а конкретно майнеры? Таким образом, майнинг в основном заключается в следующем: «Проверить подписи в транзакциях. Когда закончите, соедините кучу вещей и добавьте i; увеличивайте i до тех пор, пока hash(bunchOfStuff+i) < selectedDifficulty»?
@ErikVesterlund Что-то в этом роде. Но имейте в виду, что узлы, не занимающиеся майнингом, также выполняют проверку подписи. Когда майнер транслирует блок с недействительными подписями, узел, не занимающийся майнингом, отклонит блок и заблокирует майнера и просто будет придерживаться известной ему цепочки, которая включает только действительные блоки.
Если бы уровень сложности оставался равным 1, как это было при запуске блокчейна, то сегодняшние майнеры с безумными хешрейтами могли бы переписать весь блокчейн с нуля менее чем за секунду. Допустим, какой-то майнер воссоздает всю цепочку блоков и имеет доступ к большому количеству полных узлов, поэтому он может просто скопировать этот «новый блок-цепочка» поверх нее. Есть ли защита от такого рода атак? Потому что если нет, то это означает, что майнинг совершенно бесполезен для защиты системы.
Так что же произойдет, когда все монеты будут добыты, все ли пойдет ко дну? Кроме того, как монеты, не подлежащие майнингу, поддерживают эту справедливость?
@LifeH2O Когда все монеты будут добыты, блоки вознаградят майнера комиссией за транзакцию. Таким образом, майнеры будут (и уже делают) предпочитать транзакции с более высокими комиссиями. Вот почему важно платить комиссию за ваши транзакции: система комиссий заменяет систему вознаграждений, чтобы майнеры оставались честными.

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

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

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

Где будет БД?

Если БД хранится в каком-то централизованном месте, то Биткойн больше не является децентрализованным.

По сути, БД должна храниться в распределенной сети честных узлов и совместно использоваться в сети P2P. Однако нам нужен способ, чтобы отдельные узлы могли проверить, не подделан ли блок. Введите одноразовый номер/хеш: это сложно сгенерировать (подделать), но легко проверить. Нужно выбрать правильный одноразовый номер, чтобы хэш блока соответствовал критериям, а поиск рабочего одноразового номера занимает время. (С другой стороны, проверка хэша — это быстрая работа)

Теперь, конечно, нам нужен способ «законно» генерировать одноразовые номера — нет центрального органа, раздающего одноразовые номера. Введите майнеров: пока почти все майнеры работают над созданием одноразовых номеров для «хороших» блоков (блоков, содержащих все транслируемые транзакции без вмешательства), мы можем гарантировать, что все сгенерированные блоки получены от этих майнеров, и, таким образом, эти блоки являются «законными».

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

Смотрите также: http://codinginmysleep.com/bitcoin-mining-in-plain-english/

Nonce на самом деле просто счетчик. Что сложно сгенерировать, так это хэш содержимого блока, хеш предыдущего блока и одноразовый номер.
@MichaelBorgwardt: обновлено. Однако в этом контексте оба на самом деле означают одно и то же «генерация одноразового номера» и «генерация хэша».

Краткий ответ таков: в отсутствие какой-либо центральной власти упомянутая вами простая схема не сработает для Биткойна.

Предположим, вы перевели одни и те же 10 биткойнов на два разных счета с двумя разными транзакциями. Что может помешать некоторым людям распознать первую транзакцию, а некоторым — вторую?

Биткойн использует доказательство работы (майнинг) для решения этой «проблемы двойного расходования».